Repository navigation
Description
Problem
Two publish failures cost review rounds that an earlier mechanical check would have caught. A Verification using grouped AC IDs, such as "(AC1, AC2)" in a row or bullet, passes the description check and is then refused by the post-time review as provenance filler, so the author learns of it only at publish. A publish also refuses after the base moves, because the review stamp binds the base the draft names resolved to its remote-tracking ref, and the author learns of it only after the full test suite has run.
The Compatibility declaration that consumer-path changes require is already enforced by the description validator and has its own tests, so this issue adds nothing there.
Part of #588.
Acceptance criteria
- AC1: Given a Verification section in which a table row or a bullet names more than one AC ID in a parenthesized group or a comma-joined or "and"-joined list, when the description check runs, then it fails with the line number and states that each AC needs its own row.
- AC2: Given a Verification with one AC per row, and a row that names one AC ID in prose, when the check runs, then it passes.
- AC3: Given a draft with a review stamp and a base commit that differs from the commit the draft's named base now resolves to (its remote-tracking ref where one exists), when the check or the review step runs, then it prints a warning that publish will refuse, naming the stamped and current base commits and the steps to renew it: rebase, regenerate, recommit and review again.
- AC4: Given the AC3 warning, when publish runs, then its refusal, exit status and gates are unchanged, and the warning does not change the check's exit status.
- AC5: Given a draft whose base is not the default branch and whose stamped base still matches the resolved base, when the check runs, then it prints no warning.
- AC6: Given a draft that satisfies AC1 to AC5, when the check runs, then its output and exit status are unchanged from today.
Scope and non-goals
Scope: behavior of the description check and review step only, described as outcomes. Non-goal: changing the review criteria, the Compatibility rule, the stamp binding, or any publish gate. Non-goal: adding shell logic, which #588 freezes.
Approach
Meet AC1 to AC6 with failing cases first. The mechanism is the implementer's choice within those outcomes.
Dependencies
Blocked by #718, which ports the description validator to Go. No work starts in the frozen shell. If #718 has not landed when this reaches a builder, the builder waits.
Size
S. One pull request.
Verify plan
- AC1: tests cover a parenthesized group, a comma-joined list and an "and"-joined list, each in a table row and in a bullet, and show each failing with the line number and the one-AC-per-row message.
- AC2: a test shows a one-AC-per-row table and a prose row naming one AC passing.
- AC3: a test stamps a draft, moves the resolved base, and shows the warning with both base commits and the renewal steps, for the check and for the review step.
- AC4: a test runs publish after the warning and shows the same refusal and exit status as before this change, and the check's exit status unchanged.
- AC5: a test uses a non-default base with a matching stamp and shows no warning.
- AC6: a test runs a clean draft and shows output and exit status unchanged.
- Definition of done: D1 each AC is verified at the merged head, with the commands and results cited in the pull request's Verification. D2 an independent review approves the exact merged head, and every finding has a recorded disposition. D3 required checks pass with no gate loosened. D4 the leak scans the repository specifies are clean, and every post made for this work passes the per-post leak review before it is posted. D5 every commit is signed. D6 the documentation matches the change or the Verification says why there is no impact. D7 every commit has an
Assisted-bytrailer and the pull request has theprovenance:agent-assistedlabel. D8 the pull request stays within the size limits. D9 follow-ups are filed as issues and listed under Related. D10 the merge closes the issue through a closing reference, the board shows Done, and the finalStatus:comment names the merge commit. D9 is met when every deferred finding is filed as an issue with at least a Problem and numbered ACs, listed under Related in the pull request, and linked from any code comment that marks the deferred work.
Risks
A false positive blocks a valid draft, which AC2, AC5 and AC6 pin. A warning against the wrong base misleads, which AC3 and AC5 pin by binding it to the resolved base. Undo: revert the change, which removes the early diagnostics and leaves the publish gates as they are.
Operator authority
A standing rule names the operator: #588 freezes complex shell, and this issue honors that by waiting on #718. It grants no release, signing or publication authority and changes no gate.
Metadata
Metadata
Assignees
Labels
Type
Fields
Priority
Work type
Projects
- StatusShow more project fieldsBacklog
Activity
tbhb-agent commentedon Oct 27, 2026
Refinement: NOT READY — existing behavior and base-warning requirements need reconciliation
Model: OpenAI/GPT-6, medium
Checked
tbhb-dev/devtools. Inspectedorigin/mainat32b9ee2fe14ea1e35350684f84fe93a74d7f9d9c.Gaps
Major — AC1 describes existing behavior without identifying a remaining defect.
packages/agents/source/skills/pr/shared/scripts/validate-description.sh:485already selects consumer paths and rejects missing or malformed Compatibility declarations. The check invokes that validator atpackages/agents/source/skills/pr/shared/scripts/pr-agent.sh:48. Existing cases cover valid declarations attests/skills/pr/scripts/compatibility.bats:53and malformed or misplaced declarations attests/skills/pr/scripts/compatibility.bats:64. Update the Problem to distinguish the current baseline from the historical failure. Treat AC1 as regression protection, or identify the observable case the existing check misses.Major — AC3’s comparison and recovery do not match publication’s contract.
Review binds the base named by the draft, not necessarily the default branch:
packages/agents/source/skills/pr/shared/scripts/review.sh:77. Resolution prefers its local remote-tracking ref atpackages/agents/source/skills/pr/shared/scripts/description.sh:89. Publication compares those same bindings and requests renewed review atpackages/agents/source/skills/pr/shared/scripts/create-pr.sh:162. Comparing a valid non-default base with the default tip can therefore falsely announce refusal. Rebasing alone also cannot renew the stamp. Define the warning against the publication-relevant base, clarify whether “current” means locally known or live remote state, and require guidance that includes renewed review. Preserve the existing refusal gate.Major — Scope and dependencies conflict with the named epic’s standing constraint.
Replace complex shell with tested Go, starting with gates and merging #588 freezes complex shell and requires its replacement through the migration sequence. The issue instead limits scope to the description script and validator, whose current logic is shell (
packages/agents/source/skills/pr/shared/scripts/pr-agent.sh:46,packages/agents/source/skills/pr/shared/scripts/validate-description.sh:418), while declaring no dependencies or operator authority. Express scope as behavioral requirements and reconcile delivery with the epic’s freeze: identify a real prerequisite if needed, or record an applicable operator decision. Leave implementation design to the PR.Moderate — The Verify plan does not prove the complete promised behavior.
AC2’s single grouped-row example does not establish both grouping forms across rows and bullets, or the required line-specific corrective diagnostic. AC3’s unchanged exit status does not establish an unchanged verdict, correct recovery guidance, or preserved publish refusal. AC4 checks output but omits result preservation. Expand those checks, including a valid non-default-base case for AC3. D9’s planning statement also omits minimum follow-up issue content and links from deferred code work.
Split
No mandatory split. The remaining diagnostics can fit one PR once the baseline and migration constraint are reconciled. A broader prerequisite migration should remain separate.
Definition of done
The definition of done for #840 (Feature). Tick each item and give its evidence.
Ticks indicate planning coverage only, not completed work.
Evidence: Verify plan D1 explicitly requires merged-head verification and commands/results by AC.
Evidence: Verify plan D2 requires exact-head independent approval and recorded finding dispositions; D9 requires follow-up issues.
Evidence: Verify plan D3 requires passing checks with no gate loosened.
check-leaks.shwith the repository's private-strings list, and the leak review of each post.Evidence: Verify plan D4 incorporates repository-required scans and per-post leak review.
Evidence: Verify plan D5 requires every commit to be signed.
docs/, CHANGELOG or help text), or the Verification section says "No doc impact" and why.Evidence: Verify plan D6 requires matching documentation or an explanation of no impact.
provenance:agent-assistedlabel.Evidence: Verify plan D7 requires trailers on every commit and the specified PR label.
Evidence: Verify plan D8 requires staying within size limits.
Evidence: Verify plan D9 covers filing and Related references, but omits minimum issue content and code links.
Status:comment names the merge commit.Evidence: Verify plan D10 explicitly includes all three requirements.
Round: 1 of 3
tbhb-agent commentedon Oct 27, 2026
Refinement: NOT READY — scope still prescribes implementation placement
Model: OpenAI/GPT-6, medium
Checked
tbhb-dev/devtools. Inspectedorigin/mainat32b9ee2fe14ea1e35350684f84fe93a74d7f9d9c.packages/agents/source/skills/pr/shared/scripts/validate-description.sh:485; acceptance and rejection fixtures exist attests/skills/pr/scripts/compatibility.bats:53andtests/skills/pr/scripts/compatibility.bats:64.packages/agents/source/skills/pr/shared/scripts/description.sh:93, review bindings atpackages/agents/source/skills/pr/shared/scripts/review.sh:77, and publication checks atpackages/agents/source/skills/pr/shared/scripts/create-pr.sh:162. Recovery includes renewed review.packages/agents/source/skills/pr/shared/scripts/pr-agent.sh:48andpackages/agents/source/skills/pr/shared/scripts/review.sh:67. The remaining requirements-versus-design concern is below.Gaps
Split
No split required. The diagnostics fit one PR after #718; restoration and evidence reuse remain separate.
Definition of done
The definition of done for #840 (Feature). Tick each item and give its evidence.
Ticks indicate planning coverage only, not completed work.
D1 The author verified each AC on the merged head, and the Verification section of the pull request cites each AC ID with its evidence: the command and its result, or a link.
Evidence: Verify plan D1 requires merged-head verification and commands/results for every AC.
D2 An independent reviewer approved the exact merged head, and the author resolved each finding or filed it as a follow-up.
Evidence: D2 requires exact-head independent approval and finding dispositions; D9 requires deferred findings as issues.
D3 The required checks pass on that head, and any loosened gate has the owner's approval of that exact head.
Evidence: D3 requires passing checks with no gate loosened; AC4 preserves publication gates.
D4 The leak scans come back clean: gitleaks, devtools'
check-leaks.shwith the repository's private-strings list, and the leak review of each post.Evidence: D4 incorporates repository-required leak scans and per-post leak review.
D5 The author signed each commit, the squash included.
Evidence: D5 requires every commit to be signed.
D6 The docs match the change (README,
docs/, CHANGELOG or help text), or the Verification section says "No doc impact" and why.Evidence: D6 requires matching documentation or an explanation of no impact in Verification.
D7 The commits and the squash have Assisted-by trailers, and the pull request has the
provenance:agent-assistedlabel.Evidence: D7 requires trailers on every commit and the specified label.
D8 The pull request stays within the size limits, or the owner approved its exact head over the hard limit.
Evidence: D8 requires staying within size limits.
D9 The author files follow-ups and deferred findings as issues with at least a Problem and numbered AC and lists them under the Related section of the pull request. Any work left in the code links its issue.
Evidence: The amended D9 explicitly covers issue content, Related references, and links from deferred-code comments.
D10 The merge closes the issue through a closing reference and the board shows Done. The final
Status:comment names the merge commit.Evidence: D10 explicitly requires all three outcomes.
Round: 2 of 3
tbhb-agent commentedon Oct 27, 2026
Refinement: READY — the placement constraint is removed and earlier gaps are closed
Model: OpenAI/GPT-6, medium
Checked
tbhb-dev/devtools. Inspectedorigin/mainat32b9ee2fe14ea1e35350684f84fe93a74d7f9d9c.packages/agents/source/skills/pr/shared/scripts/validate-description.sh:485; positive and negative fixtures appear attests/skills/pr/scripts/compatibility.bats:53andtests/skills/pr/scripts/compatibility.bats:64.packages/agents/source/skills/pr/shared/scripts/description.sh:93. Review stamps that base commit atpackages/agents/source/skills/pr/shared/scripts/review.sh:77; publication compares it atpackages/agents/source/skills/pr/shared/scripts/create-pr.sh:162. Recovery includes renewed review. AC5 protects a valid non-default base.packages/agents/source/skills/pr/shared/scripts/pr-agent.sh:48andpackages/agents/source/skills/pr/shared/scripts/review.sh:67. Its completion is a delivery prerequisite, not implementation authorization.AGENTS.md:70. No protection change is required by this body.Gaps
None.
Split
No split required. The two early diagnostics fit one focused PR after #718. Migration, description restoration and evidence reuse remain separate work.
Definition of done
The definition of done for #840 (Feature). Tick each item and give its evidence.
Ticks indicate planning coverage only, not completed work.
D1 The author verified each AC on the merged head, and the Verification section of the pull request cites each AC ID with its evidence: the command and its result, or a link.
Evidence: Verify plan D1 explicitly requires merged-head verification with commands and results for every AC.
D2 An independent reviewer approved the exact merged head, and the author resolved each finding or filed it as a follow-up.
Evidence: D2 requires independent approval of the exact merged head and recorded dispositions; D9 requires deferred findings as issues.
D3 The required checks pass on that head, and any loosened gate has the owner's approval of that exact head.
Evidence: D3 requires passing checks with no gate loosened; AC4 explicitly preserves publication gates.
D4 The leak scans come back clean: gitleaks, devtools'
check-leaks.shwith the repository's private-strings list, and the leak review of each post.Evidence: D4 incorporates repository-required leak scans and requires each post to pass its leak review before posting.
D5 The author signed each commit, the squash included.
Evidence: D5 requires every commit to be signed.
D6 The docs match the change (README,
docs/, CHANGELOG or help text), or the Verification section says "No doc impact" and why.Evidence: D6 requires matching documentation or an explanation of no impact in Verification.
D7 The commits and the squash have Assisted-by trailers, and the pull request has the
provenance:agent-assistedlabel.Evidence: D7 requires trailers on every commit and the specified PR label.
D8 The pull request stays within the size limits, or the owner approved its exact head over the hard limit.
Evidence: D8 requires staying within size limits; Size specifies one S-sized PR.
D9 The author files follow-ups and deferred findings as issues with at least a Problem and numbered AC and lists them under the Related section of the pull request. Any work left in the code links its issue.
Evidence: The amended D9 explicitly requires minimum issue content, Related references and links from comments marking deferred work.
D10 The merge closes the issue through a closing reference and the board shows Done. The final
Status:comment names the merge commit.Evidence: D10 explicitly requires all three outcomes.
Round: 3 of 3