Skip to content

🚑 fix: template: just finish catches hidden lines and findings, and signoff runs it first - #415

Merged
pascalandy merged 11 commits into
mainfrom
fix/finish-forms-412
Oct 31, 2026
Merged

pascalandy merged 11 commits into
mainfrom
fix/finish-forms-412

Conversation

@pascalandy

@pascalandy pascalandy commented Oct 31, 2026 •

Copy link
Copy Markdown
Owner

Outside the plan: Pascal assigned #412 and #413, from the UATs of #410 and #411. This pull request follows #411, merged at 530f2de.

The UATs found gaps in just finish, the exit gate of the loop of the nicely-extension skill. An indented Fill: line passed. A missing form stopped finish on open qa.md: no such file or directory, with no fix and no other problem. A warn finding passed beside an advise when it sat in a table after a valid ### finding, in fenced code, or in prose. Finish read Reviewer: inside fenced code. And no delivery step ran finish, so a "full stop" request could end the rounds early.

Scope

  • Forms: finish reads a Fill: line after its indent. It reports a missing form with a fix, then goes on to the other checks (formProblems in sdk/extensionrepo/finish.go)
  • Findings: under ## Findings, each line that names a severity fails finish, except the bullet - **Severity**: of a finding. That covers the word severity, a severity in code, and a severity cell of a table, fenced code included. A heading of level 1 or 2 closes the findings first (readinessFindings in readiness.go)
  • Header: finish reads Commit:, Reviewer:, and Verdict: only in the first three lines of readiness.md, as the template skill says
  • Signoff: an extension repository runs just finish, then just check, in the scratch worktree of just signoff. The release needs that signoff, so it waits too. Core keeps just check alone (run in program.go, signoff.go)
  • Docs: D016, extension-repository.md, the template AGENTS.md, and the template skill. The rule index now names signoff and the finish gate for "Stop at Done when" and "Each round ends with an independent review"
  • Three moves keep files under the limit of just limits, with no change of behavior: the helpers of the finish test, the signoff test, and the rule index, now AGENTS/rule-index.md of the template

Proved by

Each new case of scripts/template-finish-test.sh and scripts/template-signoff-test.sh failed first on the code before its fix, then passed:

  • Indented Fill:: want present "vision.md:19: this line of the form is not filled"
  • Missing form: finish: open spec.md: no such file or directory
  • Severity in a table, fenced code, a plain bullet, and prose: just finish exited 0, want 1
  • Reviewer: in fenced code: just finish exited 0, want 1
  • Signoff of a repository whose finish fails: Signed off on c7d4ffd0...
  • Review findings S1 (### Severity: warn) and S2 (## Severity assessment): want present "readiness.md:33: ..." and just finish exited 1, want 0

The cases of an unknown commit, a misspelled verdict, and a commit after the review cover refusals that already worked. A mutation of each refusal in readiness.go made its case fail.

  • 1. Spec: n/a: no ncly command, flag, JSON key, or error code changes. extension-repository.md lists the new checks of just finish and just signoff
  • 2. Scenario: each case above fails on the code before its fix
  • 3. Code: those cases pass
  • 4. Text: n/a: just finish and just signoff print repository-task diagnostics, and no catalog entry changes
  • 5. Checks: just check passes at eb6a57c8 on Linux (om1), and on macOS (mini) through check_remote.py with the default TMPDIR: "ok":true, "exit_code":0
  • 6. Verify: GPT-6 Luna on xhigh drove the template feature at eb6a57c85c9f, not dirty. Every step passed. Then it ran probes on a copy of the rendered repository:
    • A row | Output keeps GPS | `warn` | after a valid advise finding: exit 1, with readiness.md:11: this line names a severity outside the line - **Severity**: of a finding
    • The same review with ## Severity assessment in place of the row: exit 0
    • ### Severity: warn beside an advise: exit 1 at its line, and no problem for ## Severity assessment
    • Reviewer: only in fenced code: exit 1, with readiness.md: it names no reviewer
    • A run at f73f6500 proved fix(template): just finish : détecter un Fill: indenté, guider quand un formulaire manque, tester les refus #412: vision.md:19: this line of the form is not filled for an indented line, and qa.md: the form is missing. Fix: restore it from the Git history of the repository, then fill it beside the other problems. finish.go has not changed since
  • 7. Docs: no backlog item, since both issues are outside the plan. The template skill teaches where a severity goes, and the template AGENTS.md says that signoff runs finish
  • 8. Sign off: just signoff passes: Signed off on eb6a57c85c9fc025b5adfeeeba0e46126e7d33ca

Reviewed with sol-loop: 4 rounds with gpt-6.1-sol on xhigh. Sol verdict: approved. Round 2 found S1, a blocker: the severity check skipped headings, **Limit** bullets, and the line that opens fenced code. Round 3 found S2, a should: a sibling ## Severity assessment failed finish. Each fix has a case that fails on the code before it. Round 4 approved.

Closes #412
Closes #413

by Opus-5.5 via Claude Code

pascalandy and others added 11 commits October 30, 2026 20:14
The UAT of #410 saw just finish refuse a commit after the review, an
unknown commit, and a verdict that is not one of the three. No test
covered them. The finish test now replays each one on the rendered
template.

Refs #412

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The UAT of #410 indented a Fill: line of a form, and just finish
passed, because it read only the lines that start with Fill:. It now
reads a line that starts with Fill: after its indent. The contract also
says that a Fill: line in fenced code counts, so no unfilled line hides
in a fence.

Refs #412

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The UAT of #410 removed qa.md, and just finish stopped on "open qa.md:
no such file or directory", with no fix and no other problem. It now
says that the form is missing, how to restore it, and goes on to the
other checks. A missing spec.md gives no open line and no limit.

Refs #412

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…wn file

#413 adds cases to template-finish-test.sh, which would then hold more
than the limit of 2,500 tokens. Its three helpers move to
template-finish-helpers.sh, with no change of behavior.

Refs #413

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#413 makes the signoff test prove that signoff runs just finish, and
template-recipes-test.sh would then hold more than the limit of 2,500
tokens. fct_test_signoff moves to template-signoff-test.sh, with no
change of behavior.

Refs #413

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…of a finding

The UAT of #411 hid a warn in readiness.md after a valid finding: in a
table row, in fenced code, in a bullet without bold, and in prose.
just finish passed, because it read only the bullet - **Severity**: of
each finding. Under ## Findings, it now refuses the word severity, a
severity in code, or a severity cell of a table, on any other line,
fenced code included, and names the line.

Refs #413

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…st three lines

The UAT of #411 put the line Reviewer: in fenced code, and just finish
found it, as it found Commit: and Verdict: anywhere in readiness.md.
The skill says that readiness.md starts with these three lines, so
finish now reads them only there.

Refs #413

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#413 names checks for two rules of the index, and AGENTS.md of the
template would then hold more than the limit of 2,500 tokens. Each
correction adds a row to the index, as D067 says. So the index moves to
AGENTS/rule-index.md, which AGENTS.md links, with no change of behavior.

Refs #413

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… first

The UAT of #411 found that delivery did not need the finish gate. The
rules "Stop at Done when" and "Each round ends with an independent
review" were prose only, so a full stop request could end the rounds
early.

An extension repository now signs off only after just finish passes on
the committed SHA, in the same scratch worktree as just check. The
release needs that signoff, so it waits too. Core keeps one gate, just
check, since it has no just finish. The rule index of the template now
names signoff and the finish gate for both rules.

Refs #413

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round 2 of the review found that the severity check of finish skipped
headings, the bullet - **Limit**:, and the line that opens fenced code.
So ### Severity: warn beside an advise passed. Finish now checks each
line under ## Findings, except the bullet - **Severity**: of a finding.

Refs #413

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…es severity

Round 3 of the review found that a sibling section such as
## Severity assessment after ## Findings failed finish. The severity
check read that heading before it closed the findings. A heading of
level 1 or 2 now closes them first.

Refs #413

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 31, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Repository UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 5f72db50-9e08-4ba2-b234-4b564c5132ab

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

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

Labels

None yet

Projects

None yet

1 participant