Skip to content

fix(discipline): close hand-Rust test exemption hole in per-PR gate - #813

Merged
briansrls merged 3 commits into
mainfrom
pm/dispatch-discipline-and-debt-rows
Apr 25, 2026
Merged

briansrls merged 3 commits into
mainfrom
pm/dispatch-discipline-and-debt-rows

Conversation

@briansrls

@briansrls briansrls commented Apr 25, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Follow-up fix to PR #812. Codex flagged a real hole in the per-PR gate after #812 had already auto-squash-merged: the original PR template exempted "tests" from the gate, but Rust tests under src/v3/compiler/tests/ ARE hand-Rust and ARE part of the SG-0 census (T-PB-B test subset) — exactly the class the gate exists to cover.

Two coordinated tightenings (template + rule now state the same scope):

  • .github/PULL_REQUEST_TEMPLATE.md: replaced blanket "tests" exemption with explicit inclusion of Rust tests under src/v3/compiler/tests/ in the gate. Exempt list narrows to .dag source, generated Rust, docs, non-Rust test fixtures, or hand-Rust outside src/v3/.
  • INVARIANTS.md §P5 Dispatch-Discipline Mechanisms (b): mirrors the template — "Hand-Rust includes Rust tests (src/v3/compiler/tests/**) — these are the T-PB-B test subset of the SG-0 census; the gate applies the same way it applies to T-PB-A non-test files."

Cite: codex review on PR #812 (codex-default@9e225c78, REQUEST_CHANGES on test-exemption hole).

Per-PR dissolution gate

  • Defers / shrinks / deletes: N/A — docs + GitHub config only; no new hand-Rust under src/v3/.

Test plan

  • Verify INVARIANTS.md §P5 (b) and PR template state the same scope (Rust tests under src/v3/compiler/tests/ covered by gate)
  • Verify exempt list in template is consistent with the rule

🤖 Generated with Claude Code

briansrls and others added 3 commits April 25, 2026 15:32
…abulary debt row

Lands the three-mechanism dispatch discipline from PR #810 §4 as durable
artifacts so they take effect before the next ad-hoc dispatch wave (B1-B7
briefs queued post-#810). All three mechanisms compose: per-PR gate is
finest grain (every PR), paired-dispatch is brief-authoring grain,
velocity tripwire is window grain.

INVARIANTS.md §P5 "Dispatch-Discipline Mechanisms" (new bullet under
P5 related rules):

- (a) Paired-dispatch at brief-authoring time — every Director-dispatched
  ad-hoc worker brief that introduces a scaffold MUST name the
  dissolution trigger, the adjacent ROADMAP debt row, and whether the
  PR contributes to or defers from that row's dissolution. Identity-
  bridge briefs MUST be authored against the §0 identity-carrier pass
  program, not as one-offs.
- (b) Per-PR gate — no new hand-Rust file in v3/ lands without the PR
  description naming the file or scaffold it deletes (or explicit
  deferral with a named row). Lives in PULL_REQUEST_TEMPLATE.md.
- (c) Velocity tripwire — cadence pass reports introduction:dissolution
  ratio; ≥3:1 in a 7-day window puts ad-hoc lane dispatch under Director
  review until ratio recovers, after manual sweep for dissolution-
  bearing feature PRs.

ROADMAP.md §"Reviewer-noise class — a practice, not a debt": extends
the integration-reflection cadence row with velocity-tripwire reporting
+ calibration caveat (PR-title heuristic undercounts dissolution-
bearing feature PRs; manual sweep before tripwire fires) + current
2026-04-18→2026-04-25 baseline (~1.6:1, lower bound).

ROADMAP.md §"Post-merge debt (2026-04-25 reflective + exploratory
analyses)": adds NOVEL row for the closed-vocabulary consumer-proof
follow-up debt from PR #811's meta-review (gpt-5-5-pro@8cf2051f,
SHIP_WITH_DEBT verdict). Mechanical claim is enforced by-construction
(parser grammar + 5/6-variant Disj + clippy exhaustive matches + no
fallback in lower phase); the documenting test converts the implicit
proof into a self-witnessing C1-class stop ratchet against future
substrate-extension PRs. S scope, single test file.

.github/PULL_REQUEST_TEMPLATE.md (new file): the per-PR gate section
with form-acceptance instructions ("deletes X" / "shrinks census line
Y" / "explicit deferral to lane Z with named row") and identity-bridge
escalation pointer to PR #810 §0.

No semantic shifts to existing INVARIANTS or ROADMAP entries; all three
additions are coordinated extensions of P5 (Progress Is Dissolution).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per codex review on PR #812: the original PR template exempted "tests"
from the per-PR dissolution gate, but Rust tests under
src/v3/compiler/tests/ ARE hand-Rust and ARE part of the SG-0 census
(T-PB-B test subset). The exemption let exactly the T-PB-B class
bypass the required delete/shrink/defer statement — weakening P5.

Two coordinated tightenings:

- .github/PULL_REQUEST_TEMPLATE.md: replace blanket "tests" exemption
  with explicit inclusion of Rust tests under src/v3/compiler/tests/
  in the gate. Exempt list narrows to ".dag source, generated Rust,
  docs, non-Rust test fixtures, or hand-Rust outside src/v3/."
- INVARIANTS.md §P5 Dispatch-Discipline Mechanisms (b): mirror the
  template by adding "Hand-Rust includes Rust tests
  (src/v3/compiler/tests/**) — these are the T-PB-B test subset of
  the SG-0 census; the gate applies the same way it applies to T-PB-A
  non-test files."

The rule and the template now state the same scope.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@briansrls briansrls changed the title gunbc PM fix(discipline): close hand-Rust test exemption hole in per-PR gate Apr 25, 2026
@briansrls
briansrls marked this pull request as ready for review April 25, 2026 19:38
@briansrls
briansrls merged commit 857290e into main Apr 25, 2026
4 checks passed
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