Repository navigation
Queue Sidekick follow-ups during live automatic feedback - #1225
Conversation
PR #1225: Queue Sidekick follow-ups during live automatic feedback9 files, +676 / -240 Scope🔴 PR has 916 lines changed. Split into focused PRs. 🟡 916 lines changed. PRs under 400 receive more thorough review. StructuralOxlint structural signals:
Slop✅ Slop indicators look low. Static AnalysisOxlint: 71 diagnostics across 5 files (11 rules) no-shadow (31): packages/cli/src/repl/sidekick/dispatch.ts, packages/cli/src/repl/sidekick/model.ts, packages/cli/src/repl/sidekick/owner.ts (+1) CorrectnessNo extraneous code patterns detected. |
|
Spec review at
A small ownership improvement: define the exact live-request exception once and link admission and recovery presentation to it, instead of maintaining “in-flight” and “pending” variants. The exact-request restriction, unchanged FIFO limits and composer revisions, no concurrent prompt/evaluation/writer, and preserved cold-reopen uncertainty are stated clearly. These requested additions close observable contract gaps; they do not require a broader queue redesign. This feedback concerns the specification, not merge readiness. |
Address the maintainer review on #1225. Define one live feedback exception for feedback-only requests and queued messages carrying completed round results. Use it for admission and recovery presentation. Describe how a start-time refusal holds the queued head and how attachment cancellation differs from human Stop. Evidence: 47 tests and 174 steps passed in the dispatch, recovery and Sidekick journey suites. The four child-reference steps blocked by local socket permissions passed with local listeners permitted.
|
Addressed the spec review in
The change is limited to the REPL spec. The dispatch, recovery and Sidekick journey run passed 47 tests and 174 steps. Four child-reference steps were blocked by local socket permissions and all four passed on a focused rerun with local listeners permitted. The original Fable session could not resume. The existing independent Codex Astra reviewer passed the exact update under the recorded fallback policy. CI is tracked separately on the updated head. |
A follow-up sent while the owner is still asking the provider for automatic feedback was refused by the dispatch recovery guard, because the feedback record saved with turn:null reads as unresolved until its canonical Prompt completes. The UI also showed [review recovery] for that ordinary in-flight state. The owner now records the exact position of the feedback record its running exchange wrote, before the refresh that exposes it, and releases it by identity when that exchange records its outcome, fails or unwinds. SidekickOwner.recoveryPending is the retained recovery answer with only that position set aside; the dispatch guard and the recovery presentation read it. The reading itself still reports the record as unresolved, cold owners hold no exception, and earlier or mismatched feedback keeps the guard. Queue admission starts nothing, and the guard is rechecked before a waiting message starts. Fixes #1183. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Address the maintainer review on #1225. Define one live feedback exception for feedback-only requests and queued messages carrying completed round results. Use it for admission and recovery presentation. Describe how a start-time refusal holds the queued head and how attachment cancellation differs from human Stop. Evidence: 47 tests and 174 steps passed in the dispatch, recovery and Sidekick journey suites. The four child-reference steps blocked by local socket permissions passed with local listeners permitted.
0ce1399 to
ea5d4a7
Compare
Why
Sending a follow-up while Sidekick processes automatic feedback currently shows a recovery error and refuses the message. The running owner already holds that exact feedback exchange, so the message should join the queue.
What changes
Before: the feedback record appears unresolved until its provider call completes; Send and the recovery display treat that ordinary in-flight state as interrupted work.
After: follow-ups queue behind the exact feedback exchange owned by the live Sidekick. The queued message starts once the exchange finishes. Failed or stopped feedback still requires recovery and leaves the queue held.
How it works
The owner tracks the position of its own feedback record and releases it by identity after the final refresh or during teardown. Queue admission and the recovery display read the same recovery decision. Cold owners and earlier or mismatched unresolved feedback keep the existing guard.
What must stay true
How to verify it
Risks and limitations
The live exception lasts through evaluation of a successful automatic-feedback reply until its response record is saved and refreshed. CI exposed an overbroad exception for explicit recovery messages carrying interrupted work. Signed correction
5a27f27f8864b8020f60d52231152f58282fbb00restores that guard without changing the existing R6 assertions. The original Codex Planner returned PASS on this exact correction after verifying its diff and tested candidate. The unchanged R6 test (5 tests / 14 steps), all six #1183 regressions and focused typecheck passed.The user explicitly authorized a new Codex Implementor for this one correction because the original Opus session refused to resume before a prompt. This consumes source correction 1 of the existing maximum 3; histories and allowances remain preserved. The original Planner PASS on
518470c8and its superseding R6 finding remain recorded.The independent Fable review on the original commit returned progress rather than JSON and is held at 0/2 response corrections; no replacement or replay of that attempt occurred. The corrected commit has matching independent Codex Astra PASS on all four acceptance clauses. The original Fable identity refused cold resume before output; the recorded policy selected the one Astra replacement after provider release. The corrected R6 shards pass under Deno, Node and Bun. CI initially hit the separate Implementation fixture 120-second timeout tracked in #1143. Its single unchanged-head retry passed all 47 files; all branch technical checks now pass. First failure and passing retry output remain preserved; the flake stays open. The prior aggregate failed solely through Main health (#1224). The unrelated Delivery A-H failure is tracked in #1176. Main has advanced to
c900ebfdthrough #1230; its new CI run is in progress, so current Main health remains pending. No merge is authorized.Scope confirmation
Closes #1183.