Repository navigation
fix: protect GUI report exports from write errors and collisions - #7
Merged
Merged
Conversation
|
Welcome! 👋 Thanks for your first pull request in this repository. A maintainer will review it soon. Please make sure:
Thanks for contributing! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
GUI-Textberichte wurden bisher direkt geschrieben. Ein Formatierungsfehler hinterließ einen Teilbericht; Projektberichte konnten bei Schreibfehlern beschädigt werden. Die freie Namenswahl für Einzelberichte war außerdem nicht exklusiv und konnte zwischenzeitlich erstellte Dateien überschreiben.
GUI und JSON nutzen nun dieselbe vollständig geschriebene und fsync-geprüfte temporäre Berichtsdatei. Projektberichte werden atomar ersetzt. Einzelberichte werden per Hard Link exklusiv veröffentlicht; bei Kollision wird ein neuer nummerierter Name gewählt. Die Namenssuche berücksichtigt auch defekte Symlinks. Formatierung findet vor Schreiboperationen statt; bestehende GUI-Fehleranzeigen bleiben wirksam.
Validierung: drei ursprüngliche GUI-Prüfungen vor Fix fehlgeschlagen; sechs neue Prüfungen für Formatierung, Replace-/fsync-/Link-Fehler, konkurrierenden Export und erfolgreichen Projektbericht. Finale Suite lokal 231 bestanden, drei Symlink-Skips mangels Windows-Rechten, vier erwartete Latin-1-Warnungen. Ruff und git diff --check bestanden. Bestehende elf JSON-Schreibregressionen bleiben grün. README DE/EN und llms.txt ergänzt.
Grenzen: exklusive Einzelberichte benötigen Hard-Link-Unterstützung; bei fehlender Unterstützung sichtbarer Exportfehler, kein überschreibender Fallback. Kein Lock gegen dauerhafte konkurrierende Writer, keine directory-fsync-Crash-Durability-Zusage. Keine Versionsänderung, kein Release/Store-Update.
CI-Abnahme: finaler Head c7387aa; alle acht Windows/Linux/macOS-Testjobs und CodeQL erfolgreich (Run 36775909007). Linux Python 3.13: 234 bestanden, alle sechs neuen GUI-Exportprüfungen PASSED (Job 110093621997).