You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
HistoryJournalStore.dispose() is fire-and-forget: recorder dispose errors are swallowed and scratch is removed asynchronously #3867
In PR #3852 (#854), HistoryJournalStore.dispose() (packages/core/src/services/history/historyJournalStore.ts) is synchronous. When the store owns its recorder, it hands the real work to a detached promise chain:
Errors disappear. A failure to settle mirror delivery or to dispose the recorder is swallowed twice, so nothing reports it. This conflicts with the project's fail-fast rule.
Callers can't wait. Nothing can await completion, so code that disposes and then exits, or disposes and immediately checks scratch, races the cleanup.
Scratch can leak. If the process exits before the chain runs, the llxprt-history-* scratch directory stays on disk.
Proposal
Make disposal awaitable, for example dispose(): Promise<void> or an [Symbol.asyncDispose], and let failures propagate to the owner that disposes the store. Keep a synchronous path only where an owner genuinely cannot await, and make that path report failures somewhere visible instead of discarding them.
Acceptance
A recorder dispose failure surfaces to the disposing owner.
After awaited disposal, the store's scratch directory no longer exists.
Existing scratch-after-dispose and journal lifecycle tests stay green.
Follow-up from #854 / PR #3852, listed there as a known open item.
Activity
github-actions commentedon Oct 13, 2026
LLxprt Issue Planner — infrastructure failure
The autonomous planner failed with exit code 1. Please inspect the workflow logs (Run planner agent section) and re-run once resolved.
fix(#854): await journal disposal and raise recorder and scratch clea…