fix(tui): live plan strip + simplified top bar - #112
Merged
Conversation
…confirms Two defects froze the plan progress strip at a stale count (the reported plan 0/6 forever). First, any fetch error — a timeout under load, a 5xx, a transport blip — marked the plan endpoint unavailable forever and the tick chain dropped every future poll; only a 404 (old engine, route absent) is permanent now, carried by a new ErrPlanUnavailable sentinel the client wraps (ErrJobsUnavailable pattern). Second, the live tick refused to fetch while planDirty, waiting for the in-flight tool_result confirm — but that reply could already be dead (superseded by a poll that bumped planReqSeq), deadlocking the strip at the optimistic patch; the tick now re-issues an idempotent confirm fetch alongside re-arming. Existing tests that pinned the over-eager classification and the wait-forever behavior are updated to the corrected contract.
The header drops three indicators whose data already lives elsewhere: the plan x/t count (the /plan tab owns plan progress, and the busy-line strip still shows it while a turn runs), the odek engine version (moved into the cockpit stats sheet as an engine row — rendered once, before the first turn, with the server card's duplicate row removed), and the live tok/s chip (the cockpit's speed row carries last/mean/peak for sealed turns and a live row while a turn streams; the sealed turn footer keeps the per-turn rate). bodek's own version stays beside the logo and the jobs instrument stays — a running or failed job is actionable from any surface. README and AGENTS.md header-contract paragraphs updated to the new shape. Includes adversarial-review hardenings from all three review rounds.
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
bodek | 1029603 | Commit Preview URL Branch Preview URL |
Sep 12 2026, 08:23 AM |
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.
Summary
Two fixes in one consolidated PR (user-reported defects + requested simplification):
1. Plan strip frozen at "plan 0/6" (
805e685)Two root causes froze the plan progress strip mid-run:
client.ErrPlanUnavailablesentinel (ErrJobsUnavailable pattern); transient errors keep polling.planDirtydeadlock — the live tick refused to fetch while dirty, waiting for an in-flight tool_result confirm that could already be dead (superseded by a poll bumpingplanReqSeq; opening the/plantab mid-turn does exactly that). The tick now re-issues an idempotent confirm — but only after the debounce actually fired one (planConfirmIssuedgate), so a pre-write store snapshot can never wipe the optimistic patch. Turn boundaries (planFollowup) also re-issue a dead confirm, andresetPlanStateclears the flag.2. Top-bar simplification (
1029603)The header drops three indicators whose data lives elsewhere: the
plan x/tcount (the/plantab + busy-line strip own it), the odek engine version (new⬢ enginerow in the cockpit stats sheet — rendered exactly once, before the first turn; the server card's duplicate row removed), and the live tok/s chip (cockpit speed row carries sealed last/mean/peak plus a live row while streaming; per-turn rate stays on the turn footer). bodek's version, ctx gauge, sandbox badge, session spend, and the jobs instrument stay.Review panel (3 sequential adversarial reviewers, reports in
.odek-artifacts/)planConfirmIssuedgate; dead field and stale comment cleaned.Testing
plan_realtime_test.goandheader_simplify_test.gofail on origin/main (verified by reviewers on a main worktree)make fmt vet lint testgreen: vet clean, lint 0 issues, full-racesuite, 8 packages