PR #596 follow-ups: making the B2 body-currency check actually fire nf-745 ← Beads

open priority 2 task unassigned

Twinned from https://github.com/cfsh/ninefold/issues/597 by tools/beads/import_github.py's reconcile pass.

Suggestions from ninefold-reviewer's review of #596. All advisory, none blocking that PR — it is CONVERGED. They are the four things that decide whether the new B2 gate check actually fires in practice, plus the surface it is duplicated on.

1. The severity floor may suppress B2 on exactly the PRs it targets

tools/reviewer/CHARTER.md § *Severity floor* binds "NEW advisory findings" across passes and exempts only regressions. B2's motivating case is the long-lived, many-round PR (#578: six verdict posts over five head shas) — which is precisely where the floor sits highest, and where "the body's third paragraph is stale" reads as sub-floor next to the defects already fixed on the thread.

Nothing in the diff says whether a *standing per-pass gate result* is a "new finding" for floor purposes. B2 itself says silence is a real result and the reviewer should state the body is current when it is — that only works if the floor does not apply. One clause, in either section, settles it.

2. "Read it LAST" is not in the read order

B2 says to read the body last, after the diff and the threads. But that instruction lives in *What to produce*, while CHARTER.md's *Procedure — read everything, no shortcuts* still puts --json title,body,... at step 1, and section A mines the body for chat-quoted asks before anything else is read. An agent following the numbered procedure has read the body long before it meets B2, and nothing in the procedure tells it to come back. A step 6 ("re-read the body last, for B2 — the check is only possible once you know the truth") would make the sequencing real rather than aspirational.

3. Nothing binds the two copies of the gate-check list

This PR adds a sixth item to a list that exists in two places — CHARTER.md §B and DESIGN.md §4 — and updates both by hand, correctly. But the PR's own argument for doing so is the verdict-schema precedent: stale for months across four copies, which is why tools/tests/test_nflib_verdict.py exists. That contract test scrapes exactly one line (REVIEWER-VERDICT sha=…) and knows nothing about the gate-check list, so the same drift class is still unguarded on this list.

Cheapest shape: extend the existing contract test to assert that every **<letter>. heading in CHARTER.md's *What to produce* section has a counterpart bullet in DESIGN.md §4 — structural, not prose-matching.

4. A body-only edit triggers no review

dispatch.py's trigger policy is review-requested + head-moved (dispatch.py:271-272, :298). A PR body edit moves no sha. So:

./tools/pr/review_now.py <n> --force (merged in #578) is the affordance that closes this. Worth one line in B2 telling the coder to use it after a body fix, so the check has a completion path instead of an open end.

Dependencies

None.

Comments

No comments.

Add a comment