feat(ci): mechanized pre-cut register grep-gate — v1.0.0 must-fix #392

Closed
opened 2026-07-04 21:47:47 +02:00 by bosun · 0 comments
Owner

Empirical finding

Meta-class grep-sweep-missed-siblings recurred at 3 distinct sub-surfaces in round 4:

  1. Default-branch references beyond literal 'main' (#379 + PR#386)
  2. Chamber-names in code comments (#384 + PR#387)
  3. Functional-identity in test fixtures (Herald PR#390 — Surveyor surfaced during #387 review)

Three manual sweeps in one round closed the class at three surfaces. Class WILL recur at new sub-surfaces without mechanized enforcement — the pattern of surface-by-surface manual sweep does not stay closed.

Operator ratified as v1.0.0 must-fix 2026-07-04 (decision-stack 4a) with reasoning: "keep post-v1.0.0 bugfix scope small, target the Go migration instead."

Blocking rationale

Manual sweeps don't scale + don't stay closed. Every new release re-opens the class-axis until a mechanized check prevents regression. v1.0.0 signals broad-adoption readiness; the release-toolkit should not itself carry chamber-name residuals to a prior round for adopters to notice.

Scope

Case-insensitive CI check that runs at pre-cut gate:

  • Chamber names: Bosun, Surveyor, Herald, QM, Quartermaster, Pilot, Engineer, Shipwright
  • Hex-identifier attribution: 4-hex-char sequences following chamber names or bracketed (per Surveyor 41ce shape)
  • Invented-jargon vocabulary: substrate-honest + extensible list per class-completeness discipline (fed by past register-audit findings)
  • Functional-identity leakage: operator username + chamber names in test fixtures / example configs
  • Sweep surface: all files under scripts/ + .forgejo/ + tests/ + docs/ + README.md + CHANGELOG.md + AGENTS.md (case-insensitive)

Behavior:

  • Runs as part of pre-release check (extension of release-decide.sh --dry-run OR standalone workflow gate)
  • Fails release cut if hits found; prints hit-list with file+line
  • Bypass mechanism: allow-list file (e.g., .register-allowlist) for genuinely load-bearing exceptions (comment cases fully scrubbed per class-correct closure; allow-list is escape hatch, not first resort)

Verification AC

  • Pre-cut sweep runs in CI, blocks release if register violation detected
  • Local dry-run reproduces the CI check
  • Regression test: introduce a chamber-name comment in a test file, verify the gate catches it
  • v1.0.0 release cut passes the gate cleanly (after #391 AGENTS.md pass lands)
  • Meta-class: grep-sweep-missed-siblings (round-4 arc)
  • Fed by manual passes: #384 (PR#387) + PR#390 (Herald arc) + #379 + #381 (PR#386 grep-guards)
  • Depends on: #391 (AGENTS.md pass) — the last manual sweep before this gate takes over enforcement
  • Operator scope call: v1.0.0 must-fix (decision-stack 4a, 2026-07-04)

Anchor

Operator ratified as v1.0.0 must-fix 2026-07-04 (decision-stack 4a). Rationale: keep post-v1.0.0 bugfix scope narrow, target Go migration (v2.0.0 substrate) as next-major after clean v1.0.0.

## Empirical finding Meta-class grep-sweep-missed-siblings recurred at 3 distinct sub-surfaces in round 4: 1. Default-branch references beyond literal 'main' (#379 + PR#386) 2. Chamber-names in code comments (#384 + PR#387) 3. Functional-identity in test fixtures (Herald PR#390 — Surveyor surfaced during #387 review) Three manual sweeps in one round closed the class at three surfaces. Class WILL recur at new sub-surfaces without mechanized enforcement — the pattern of surface-by-surface manual sweep does not stay closed. Operator ratified as v1.0.0 must-fix 2026-07-04 (decision-stack 4a) with reasoning: "keep post-v1.0.0 bugfix scope small, target the Go migration instead." ## Blocking rationale Manual sweeps don't scale + don't stay closed. Every new release re-opens the class-axis until a mechanized check prevents regression. v1.0.0 signals broad-adoption readiness; the release-toolkit should not itself carry chamber-name residuals to a prior round for adopters to notice. ## Scope Case-insensitive CI check that runs at pre-cut gate: - **Chamber names**: Bosun, Surveyor, Herald, QM, Quartermaster, Pilot, Engineer, Shipwright - **Hex-identifier attribution**: 4-hex-char sequences following chamber names or bracketed (`per Surveyor 41ce` shape) - **Invented-jargon vocabulary**: `substrate-honest` + extensible list per class-completeness discipline (fed by past register-audit findings) - **Functional-identity leakage**: operator username + chamber names in test fixtures / example configs - **Sweep surface**: all files under `scripts/` + `.forgejo/` + `tests/` + `docs/` + `README.md` + `CHANGELOG.md` + `AGENTS.md` (case-insensitive) Behavior: - Runs as part of pre-release check (extension of `release-decide.sh --dry-run` OR standalone workflow gate) - Fails release cut if hits found; prints hit-list with file+line - Bypass mechanism: allow-list file (e.g., `.register-allowlist`) for genuinely load-bearing exceptions (comment cases fully scrubbed per class-correct closure; allow-list is escape hatch, not first resort) ## Verification AC - Pre-cut sweep runs in CI, blocks release if register violation detected - Local dry-run reproduces the CI check - Regression test: introduce a chamber-name comment in a test file, verify the gate catches it - v1.0.0 release cut passes the gate cleanly (after #391 AGENTS.md pass lands) ## Related - Meta-class: grep-sweep-missed-siblings (round-4 arc) - Fed by manual passes: #384 (PR#387) + PR#390 (Herald arc) + #379 + #381 (PR#386 grep-guards) - Depends on: #391 (AGENTS.md pass) — the last manual sweep before this gate takes over enforcement - Operator scope call: v1.0.0 must-fix (decision-stack 4a, 2026-07-04) ## Anchor Operator ratified as v1.0.0 must-fix 2026-07-04 (decision-stack 4a). Rationale: keep post-v1.0.0 bugfix scope narrow, target Go migration (v2.0.0 substrate) as next-major after clean v1.0.0.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
frankenbit/release-toolkit#392
No description provided.