Skip to content

docs(recipe): Needs review is not shipped without tip-native proof - #7297

Closed
owieschon wants to merge 4 commits into
ParadevAI:mainfrom
owieschon:docs/proof-gate-thin
Closed

owieschon wants to merge 4 commits into
ParadevAI:mainfrom
owieschon:docs/proof-gate-thin

Conversation

@owieschon

@owieschon owieschon commented Sep 8, 2026 •

Copy link
Copy Markdown
Contributor

What & why

Adds one docs page: docs/proof-gate-needs-review-receipt.md.

Needs review on the board is not shipped. Tip-native proof (check runs or a receipt pinned to the exact branch-tip SHA) is required first. Without that bar, Operators treat chrome as done and the product keeps lying about finished work.

How I tested

  • Docs-only diff vs main (single file)
  • Stay DRAFT — no undraft without CoS→Owen

Checklist

Supersedes contaminated draft #7296 (same docs intent; #7296 head accidentally included terminal-agents files).


Summary by cubic

Stops a parent terminal from announcing completion while its subagents are still running, and adds a docs rule that Needs review on the board is not shipped without tip-native proof.

Bug Fixes

  • A parent Stop now waits until the last child exits; previously it flipped the terminal green while children still worked.
  • A stopped child no longer revives when its own events straggle in after the stop, unless the harness opts in to revival (Codex send_input).
  • Deferred completions fire exactly once when the roster drains, and are dropped when the parent starts a new turn or the terminal dies.
  • A child that goes quiet without a stop hook now delays the completion by the stale window instead of losing it; the sidebar poll releases it.
  • Permission requests still raise while children run.

Docs

  • Adds docs/proof-gate-needs-review-receipt.md: Needs review means not shipped without a check run or receipt pinned to the branch-tip SHA.

Written for commit 0c964b6. Summary will update on new commits.

Review in cubic

…ll run

A parent agent can end its turn while children it spawned are still
working. Today that Stop chimes, fires a native notification, and flips
the terminal green — the product says "done" while the task is still
going (ParadevAI#6929).

ParadevAI#7231 gave the host a live subagent roster and made sure child events
never drive parent status; the residual it named is this one. Gate the
parent's Stop on that roster: when children are still live the store
holds the Stop, the terminal keeps its working state, and nothing fans
out. The last child's exit releases the held Stop as a single
completion.

Permission requests are untouched — needing input while children run is
still attention. A parent event that arrives before the roster drains
(the user replied) supersedes the held Stop, so it never double-fires.
A terminal that dies under a held Stop drops it.

A child whose stop hook never arrives would otherwise hold the
completion forever, so the release check prunes the roster first: the
existing stale window bounds the delay. `terminalAgents.listByWorkspace`
runs the same check, which is where the sidebar's poll picks it up.

Claude-Session: https://claude.ai/code/session_01Pc1qgTpz2j8nW6BET2CqCW
…gle in

Claude fires the parent's `Task` PostToolUse — carrying the child's
`agent_id` — after that child's own SubagentStop. The roster treated any
non-stop event as liveness and put the child back, so a terminal's roster
never drained.

That was harmless before the parent's completion started waiting on it.
Now it means a held Stop is never released: in a native fan-out all three
children were revived that way and SessionEnd dropped the held Stop
0.2s later, so the turn announced nothing at all. Losing the completion
is worse than announcing it early.

Keep a stopped child stopped, and let a harness opt back in. Codex does:
`send_input` genuinely resumes a finished child, so a post-stop event
there is the child working again rather than a straggler. The straggler's
transcript path is still merged, so the subagent pane keeps what it
revealed.

Claude-Session: https://claude.ai/code/session_01Pc1qgTpz2j8nW6BET2CqCW
Operators must not treat the Needs review board column as shipped
without a tip-native proof artifact pinned to the branch-tip SHA.
@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@owieschon

Copy link
Copy Markdown
Contributor Author

Superseded: head was based on fork main (included unpublished host-service commits vs upstream). Thin replacement cut from upstream/main.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant