mirror of
https://github.com/esengine/DeepSeek-Reasonix.git
synced 2026-11-10 17:11:30 -10:00
A long-running CLI session that died silently left nothing to diagnose. The CLI only recovered panics on the main goroutine and never called debug.SetCrashOutput, so a panic on any other goroutine or a fatal runtime error (out of memory, concurrent map writes) went only to the console's stderr, which is gone once the terminal closes. The TUI diagnostic log also kept its first 4 MiB and dropped everything after, so a session that ran for days lost exactly the entries leading up to the crash. The CLI now mirrors runtime crash output into a per-PID file under the Reasonix home, and the next start queues any dump left by a dead process as a pending crash report (runtime classification and goroutine stacks, panic value redacted). A panic already reported through recover detaches that file first so it is not queued twice. The TUI log now rotates within the same total bound: the live file holds half the budget and replaces a single .prev.log sibling, so the newest diagnostics survive. Tests: TestGoroutinePanicIsReportedOnNextStart re-runs the test binary as a child that panics on a background goroutine, then asserts the next start lists the report; it lists none on the base. TestTUIDiagnostics- KeepLatestEntriesWithinTotalBound writes three times the limit and a marker, and asserts the marker is on disk within the bound; on the base only the head is kept.