fix: bug batch — 13 deferred maintenance-council issues - #309
Merged
Conversation
- ## lines inside fenced evidence no longer end the Dimensions section - mirrors the inFence toggle splitDimensionBlocks already had Fixes #294 Claude-Session: https://claude.ai/code/session_01PHikH4LdejozJdjzTzhPes
- pid+timestamp collides for same-millisecond writers in one process; add monotonic counter - regression test races short/long bodies and asserts no spliced result Fixes #302 Claude-Session: https://claude.ai/code/session_01PHikH4LdejozJdjzTzhPes
- strip \r centrally in createCappedLineFeed (feed + flush)
- drop endsWith('}') pre-filter; JSON.parse is the authoritative rejection
- regression tests: CRLF streams keep sessionId, body, usage
Fixes #290
Claude-Session: https://claude.ai/code/session_01PHikH4LdejozJdjzTzhPes
- continued path derives applied from commitRound outcome (was hardcoded true) - clean-tree and commit-error rounds no longer bump roundsApplied - e2e review test now uses a dirty-tree runner where it asserts the applied event Fixes #295 Claude-Session: https://claude.ai/code/session_01PHikH4LdejozJdjzTzhPes
- >=32KiB argv no longer misreported as Windows overflow on macOS/Linux - ENOENT/EACCES with a big argv stays a retryable ProcessCrashError with PATH hint - errno arms (ENAMETOOLONG/E2BIG) unconditional; platform injectable for tests Fixes #299 Claude-Session: https://claude.ai/code/session_01PHikH4LdejozJdjzTzhPes
- section-title margins become explicit blank HelpRows (1 row per HelpRow invariant) - CHROME_ROWS derived from tokens (was magic 6, undercounted paddingY) - footer line counter and maxOffset now agree with what is visible Fixes #296 Claude-Session: https://claude.ai/code/session_01PHikH4LdejozJdjzTzhPes
- hint renders only on the attempt latestRecordedEvaluation resolves to - per-attempt evaluation status/file text unchanged - covers the crashed-final-attempt fallback case Fixes #291 Claude-Session: https://claude.ai/code/session_01PHikH4LdejozJdjzTzhPes
- ModelProbeDegradationSink in _engine; opencode probe reports probe-failed/aborted/empty-answer - wire() binds the sink to logger.warn; probe registry is per-wire now - PROBE_TIMEOUT_MS 5s -> 15s - picker-level degraded hint deferred (would ripple through port + picker chain) Fixes #300 Claude-Session: https://claude.ai/code/session_01PHikH4LdejozJdjzTzhPes
- sprint-scoped + draft allow-list (mirrors every other add-ticket entry point) - viewRouteFor routes to the add-ticket view like Home/sprint-detail do - registry-reachability fence: every manifest id must be visible+routable or dispatchable Fixes #298 Claude-Session: https://claude.ai/code/session_01PHikH4LdejozJdjzTzhPes
- ledgerMutex: FoldQueue on ImplementDeps, built once per run like journalMutex - append-learnings leaf runs the whole appendMemoryRecords inside the mutex - race test proves the unserialised clobber and pins the guarded path - serializeAppendFile kept for progress.md separator appends Fixes #288 Claude-Session: https://claude.ai/code/session_01PHikH4LdejozJdjzTzhPes
- suppressScrollArrows on ExecuteView's ViewShell (matches other cursor-owning views) - ScrollRegion ignores display:none zero-measurements, preserving offset across overlays - settled result card capped (error summary 3 lines, next-steps/forensics sliced) - g/G kept: overlay collision verified a no-op Fixes #292 Claude-Session: https://claude.ai/code/session_01PHikH4LdejozJdjzTzhPes
- self-blocked: new AbortCause member, stamped on the block settle path - watchdog kill flagged at the shared onIdle site, rides ProcessCrashError to the settle - signalOrExitCode populated from crash state - rate-limit-exhausted/user-cancel left unwired: fatal chain errors tear down before any settle runs; needs the deferred above-chain settle seam Fixes #289 Claude-Session: https://claude.ai/code/session_01PHikH4LdejozJdjzTzhPes
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.
Fixes all 13 bug-labeled issues deferred from the 2026-08-18 maintenance council, one commit per issue.
Fixes
ledgerMutex(parallel branches could clobber rows mid-compaction)process-crash— watchdog kills, Ctrl-C and rate-limit exhaustion all report asunknown#289 — abort causes wired in-process:self-blocked,watchdog-killed,signalOrExitCode;rate-limit-exhausted/user-canceldeferred (fatal chain errors tear down before any settle — needs an above-chain settle seam)}— a single trailing byte silently kills session-id, body, usage and stdout rate-limit detection #290 — CRLF/trailing-byte tolerance in claude+copilot JSONL parsing (central\rstrip;JSON.parseis the only judge)v to openper attempt, butvalways opens the LATEST attempt's evaluation #291 —v to openhint gated to the attempt the chord actually opensgcollides with the global progress overlay and ExecuteView never sets suppressScrollArrows #292 — ExecuteView yields scroll keys to the Tasks cursor; ScrollRegion offset survives overlay cycles; settled card row-capped (g/Gkept — collision verified a no-op)parse-evaluation-mdsplits##sections without fence awareness, silently dropping dimensions after a##line inside evidence #294 — fence-aware##section split in parse-evaluation-mdapplied: trueeven when the round produced no commit, over-countingroundsApplied#295 — review round reportsappliedonly when a commit actually landedlines X–Y of Ncounter is wrong #296 — help overlay row budget matches rendered rows (blank-row spacers, token-derived chrome)add-ticketis a registered FlowManifest that the Flows view can neither show nor launch #298 —add-ticketwired into the Flows view (draft gate) + registry-reachability fence testisArgvOverflowis platform-blind, so any spawn failure with a ≥32 KiB command line is reported as a Windows argv overflow and made non-retryable #299 — argv-overflow size heuristic gated on win32; big-argv ENOENT stays retryable with the PATH hintopencode modelsprobe fails open silently to the free-tier floor — an authenticated operator's paid models vanish from the picker with no trace #300 — opencode probe logs why it fell back to the free-tier floor; timeout 5s→15s (picker hint deferred)writeTextAtomicVerification
pnpm typecheckclean ·pnpm lintclean (--max-warnings 0) ·pnpm test615 files / 6024 tests passed · prettier + knip clean.https://claude.ai/code/session_01PHikH4LdejozJdjzTzhPes