Logbestand en diagnose voor release-builds (#2618) #2654
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
release-blocker
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!2654
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/release-logbestand-2618"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #2618. Eerste stap uit de prestatie-inspectie (EPIC #2637): eerst zichtbaar maken, dan pas repareren.
Waarom
Een release-build heeft geen VM-service, dus alle ~800
logError/logWarning-aanroepen verdwenen er spoorloos — ook de zone-handler enFlutterError.onError. Meldingen als "start niet" en "loopt vast" (Windows 10) waren daardoor niet te onderzoeken.Wat er verandert
Logbestand (
lib/services/diagnostics/log_file.dart):<app-support>/logs/ocideck.log, roteert naarocideck.1.logbij 1 MiB, nooit meer dan twee bestanden. Tot het eerste frame wordt elke regel synchroon geschreven, want een start die vastloopt in synchroon werk houdt de event loop vast, en dan zouden juist de laatste mijlpalen ontbreken. Daarna gebundeld en asynchroon, met een bovengrens op wat er mag wachten. Het beamervenster krijgtbeamer.log.Privacy aan de bron (
lib/utils/log.dart):redactPathsmaakt van elk absoluut pad<pad#hash.ext>.logName()doet hetzelfde voor kale bestandsnamen en relatieve repo-paden. Die zijn op ~15 aanroepplekken ingezet, en de gebruikersnaam is uit de LibrePlan-melding gehaald.log_no_content_testbewaakt dit. Herhaalde meldingen worden na 20 keer bemonsterd; fouten en stacks worden afgekapt.Opstartmijlpalen: main, mediastaging, privacylexicon, venster, eerste frame, toestemming, shell — elk met de milliseconden sinds
main.Sessiemarkering:
ocideck.sessieverdwijnt bij een nette afsluiting (quitApp; op macOS ook het exit-verzoek van Cmd+Q). Ligt hij er bij de volgende start nog, dan staat er in het log dat de vorige sessie vastliep, werd beëindigd of met de computer mee uitging.Stallmelder (
ui_stall_watch.dart): tikt elke 250 ms. Komt een tik meer dan 500 ms te laat, dan volgt één regel met de duur en de werklabels (noteWork) uit dat venster. Labels staan op de zware paden uit de inspectie: gezichtsscan, documentexport, openen, Quill↔Markdown, split-runindex, privacyscan, kwaliteitscontrole.Kaart Diagnose in Instellingen → Over OciDeck (alleen desktop):
Zes nieuwe teksten, in alle 30 andere talen.
Alles terugzetten wist ook de logbestanden; de markering van de lopende sessie blijft staan.
Windows-rookproef (
release.yml): die keek alleen of het proces na 15 s leefde. Nu wacht hij tot 60 s opopstart: eerste framein het logbestand en zet hij het log bij een fout in het releaselog. Een proces dat leeft maar nooit tekent, is voor de gebruiker "start niet".Integratietest
integration_test/diagnostics_log_test.dart: draait als echte app in de echte app-supportmap, lokaal groen op macOS. De spiegel-CI draait hem op macOS en Windows.Docs:
PRIVACY.md: wat er in het log staat en wat niet.TROUBLESHOOTING_GUIDE(en+nl): diagnose ophalen en de logmap per platform. Daarbij twee verouderde stellingen rechtgezet: "geen installatieprogramma" en "geen versie om te noemen".USER_GUIDE(en+nl),PERFORMANCE_GUIDE,CHECKS,SOURCE_MAP,CHANGELOG.Poort
make checkgroen op05444e412(vóór de merge van main) en op merge-commit697348e64(zie onder).make check-secretsenmake sastgroen (0 lekken, 0 bevindingen).${file.name}in een logmelding valtlog_no_content_test.Bewust één bestandsplafond opgehoogd:
settings_dialog.dart1048 → 1050, voor de import vanDiagnostics, zoals eerder bij #2429 en #2510.Niet getoetst
Windows zelf. De integratietest en de strengere rookproef zijn geschreven voor Windows, maar hebben daar nog niet gedraaid. Het pad
%APPDATA%\Stichting LibreKAT\ocideck\logsvolgt uit de broncode vanpath_provider_windows, niet uit een meting. Een CI-run op de spiegel (workflow_dispatchop deze tak) bewijst het vóór de volgende release.Bewaker — de afwegingen
Het
.mden het formaat blijven ongemoeid. Er komt geen nieuwe partij of netwerkverkeer bij: delen gaat bewust via het klembord en niet via een vooringevulde issue-URL, want die stuurt het log over het netwerk voordat de gebruiker het heeft gezien. Drie botsingen tussen diagnose en privacy:logName.chmod 700viarestrictToOwner). Versleutelen zou het juist onleesbaar maken voor de gebruiker die het wil delen.Veiligheid gaat hier niet verloren: de app werkt ook zonder logbestand. Elke schijffout zet het log uit, nooit de app.
🤖 Generated with Claude Code
Twee routes om het logboek bij een melding te voegen: "Diagnose kopiëren" zet versie, systeem en de laatste 200 logregels plakklaar op het klembord, "Logmap openen" opent de map om het bestand mee te sturen. Er gaat niets vanzelf de deur uit. Desktop alleen; vindbaar via het zoekveld van de instellingen ("logboek", "crash", "issue"). Zes nieuwe teksten, in alle dertig andere talen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>PRIVACY.md zegt wat het logbestand bevat en wat niet, en dat Alles terugzetten het meeneemt. De probleemoplossingsgids (en + nl) legt uit hoe je bij "start niet" of "loopt vast" de diagnose ophaalt en waar de logmap per platform staat; daarbij twee stellingen rechtgezet die al langer niet klopten ("er is geen installatieprogramma", "er is geen versie om te noemen"). USER_GUIDE noemt de kaart, PERFORMANCE_GUIDE de stallregels als waarneming in het veld, CHECKS.md de integratietest en de strengere Windows-rookproef, SOURCE_MAP de drie nieuwe bestanden. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>Bijgewerkt op
98e57dc2d:origin/mainerin gemerged (de tak wasmergeable: falsegeworden na PR #2665). Drie echte botsingen opgelost:lib/main.dart: de nieuwe opstartvolgorde van #2626/#2628/#2656 behouden; de diagnosemijlpalen eromheen gezet. De Linux-enkel-exemplaarcontrole staat bewust vóórDiagnostics.start— een doorgestuurde tweede instantie zou anders de sessiemarkering van de primaire overschrijven en als valse "niet netjes afgesloten" terugkomen, plus gelijktijdig in hetzelfde logbestand schrijven.lib/utils/markdown_quill_codec.dart:noteWorkbehouden én de snellereconvertDocumentvan #2621 (niet terug naartoDelta()).tool/check_conventions.dart: beide baseline-toelichtingen samengevoegd; het plafond blijft 1050.Lokale poort op deze head:
make check-fullvolledig groen (format, analyze, conventies, ~14,5k tests + coverage + goldens, gitleaks, trufflehog, semgrep, sbom/web/marp).