LearnNewsExamplesServices
Frontmatter
id17059
titleAuthor review workflow permits unresolved Required Action handoffs
stateClosed
labels
bugdocumentationaimodel-experienceagent-os
assigneesneo-gpt-emmy
createdAt5:47 PM
updatedAt9:06 PM
githubUrlhttps://github.com/neomjs/neo/issues/17059
authorneo-gpt-emmy
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt9:06 PM

Author review workflow permits unresolved Required Action handoffs

Closed Backlog/active-chunk-15 bugdocumentationaimodel-experienceagent-os
neo-gpt-emmy
neo-gpt-emmy commented on 5:47 PM

Context

A public review cycle exposed a substrate-level completion gap: the author protocol permits a Required Action (RA) to be labelled [DEFERRED], followed by a re-review request, even when the RA proves that the pull request's declared scope is incomplete.

The failure is visible without attributing it to any peer or model:

  • PR #17050 response 1 reported accepted RAs as "not yet implemented".
  • PR #17050 response 2 pushed a partial repair while explicitly leaving one accepted RA unimplemented.
  • Once the completion boundary was made binary, the remaining repair was implemented immediately. Capability and thought budget were not the missing primitive.

This ticket converts that friction into a small author-workflow correction. It is not a blame record.

The Problem

The author-side review protocol currently teaches a third terminal state that conflicts with the reviewer-side merge gate:

  • .agents/skills/pull-request/references/review-response-protocol.md:20 directs authors to use [ADDRESSED] / [DEFERRED].
  • Lines 46-50 define [DEFERRED] for an RA not addressed in the PR.
  • Lines 72-76 permit the structured response to end in a re-review handoff.
  • .agents/skills/pull-request/assets/review-response-template.md makes that combination copyable.
  • .agents/skills/pull-request/references/pull-request-workflow.md describes done-ness as per-handoff.
  • The reviewer contract already says an RA is mandatory before acceptance, and its A+FU boundary requires a merge-safe head with no deferred correctness work.

That contradiction makes polished disclosure look like completion. It also creates an expensive escape hatch: a known-unmergeable head can trigger CI and another full review cycle even though the author already agrees the declared scope is not delivered.

The Architectural Reality

The durable invariant compares two artifacts:

  • A = open Required Actions.
  • B = the PR's declared scope at the local candidate head.

Before an author publishes a closure response or requests re-review, A must be empty relative to B. Empty means the candidate head contains evidence that each RA is addressed, or the author has rejected it with falsifying rationale. It does not mean GitHub has already dismissed the review object.

Changing B is a real scope transition, not a prose disposition. It is valid only when the remaining work is genuinely heavy and independently valuable, and only after ticket/PR authority has been changed so the current head is merge-safe. Ordinary bounded repair remains in the same PR; line count in the hundreds, CI duration, model/token budget, an awkward async seam, or reviewer preference do not authorize transfer.

The existing A+FU contract in #15257 already establishes the reviewer-side authority: scope transfer requires an independently valuable day-after-merge slice, explicit close-target ownership, and no deferred correctness. This ticket makes the author side coherent with it.

The Fix

  1. Remove [DEFERRED] as a terminal RA disposition.
  2. Keep [ADDRESSED] and [REJECTED_WITH_RATIONALE].
  3. Add tightly guarded [SCOPE_TRANSFERRED]:
    • the removed work has a linked implementation leaf;
    • the source ticket and PR body/close target are amended before the response;
    • no surviving AC or claim depends on the transferred work;
    • the current head is merge-safe and independently valuable;
    • the work is materially heavy, not an ordinary bounded repair.
  4. If no coherent merge-safe slice remains, require scope split or Drop+Supersede instead of a partial handoff.
  5. Make the response template and reviewer-side mirror use the same taxonomy.
  6. Replace “done-ness is per-handoff” with a precise review-handoff boundary: an author may hand back only after every RA is discharged against the current declared scope.
  7. Net-reduce or hold flat the affected skill bytes; do not add another always-loaded AGENTS rule, new skill, or keyword stop hook.

Contract Ledger

Target surface Source of authority Proposed behavior Fallback / refusal Docs Evidence
Author RA taxonomy review-response-protocol.md §§1, 4, 8 Terminal states are addressed, evidence-backed rejection, or completed scope transfer Accepted-but-unimplemented stays OPEN; no re-review request Same file Exact tag census + protocol lint
Author response template review-response-template.md Template cannot manufacture a terminal deferred RA Scope-transfer row requires authority-change evidence Same file Whole-template inspection
PR lifecycle handoff pull-request-workflow.md review cycle Re-review handoff requires A empty relative to current B Split/supersede before handoff when no merge-safe slice exists Same file Workflow text + cross-file census
Reviewer mirror pr-review-guide.md Required Actions / A+FU Reviewer and author use one disposition contract A+FU remains scope transfer only Same file Cross-skill taxonomy check

Decision Record impact

None. This is an operational workflow correction aligned with #15257 and the accepted A+FU review contract; no ADR is amended.

Acceptance Criteria

  • [DEFERRED] is removed from the Required Action response taxonomy and template.
  • An agreed-but-unimplemented RA is explicitly non-terminal and cannot accompany a re-review request.
  • [SCOPE_TRANSFERRED] requires a linked leaf plus already-amended ticket/PR scope and close-target authority.
  • The protocol states that ordinary bounded repairs stay in the current PR; implementation difficulty, CI duration, and model/token budget are not transfer authority.
  • A ticket that was epic-sized in disguise is split or superseded; its unresolved ACs cannot be hidden behind a follow-up.
  • The reviewer and author skills use the same disposition names and completion boundary.
  • The copyable response template carries the guard mechanically.
  • Skill-manifest lint and a repo-wide taxonomy census pass.
  • The affected skill substrate is byte-neutral or smaller; no new always-loaded rule or skill is introduced.

Out of Scope

  • A model-specific downgrade or blame attribution.
  • A custom context-window MCP tool. Claude Code already exposes context usage to status-line integrations; that is a separate low-risk harness improvement.
  • Runtime GitHub review-state automation or a brittle prose-matching stop hook.
  • Changing the two-cycle review-budget policy.

Avoided Traps

  • “Just add a reminder to AGENTS.md.” Rejected: the conflicting conditional workflow is the owning substrate, and another always-loaded rule increases salience dilution.
  • “Any follow-up ticket makes deferral valid.” Rejected: that lets ordinary repairs and unresolved ACs escape the PR after review cost has already been paid.
  • “Never change scope.” Rejected: real underestimation happens; a heavy, independently valuable leaf may transfer after authority is truthfully rewritten.
  • “A one-commit heuristic defines ownership.” Rejected: reversibility is useful evidence, but named authority and declared scope remain decisive.

Related

  • #15257 — reviewer-side budgeted closure and A+FU authority
  • #17042 — friction-to-gold retrospective context
  • PR #17050 — public reproducer of the author-side ambiguity

Origin Session ID: 019fe0b3-53bc-7ef2-8665-41a0ef3f7b62

Retrieval Hint: review-response protocol deferred Required Action scope transfer A versus B

tobiu referenced in commit 9f7735f - "fix(agentos): require terminal RA dispositions (#17059) (#17060) on 9:06 PM
tobiu closed this issue on 9:06 PM