feat(n8-c3): principle 13 requires §1.7 substance (bare §1.7 no longer passes) - #178
Merged
Conversation
…nger passes
Wave N8 A-phase item C3. Closes the #discipline-theatre hole in principle 13:
its old arm (a) let the bare literal "§1.7" pass on its own, so a patch could
write a "## §1.7" heading with zero actual self-review and be green. Now a patch
passes only if it carries real self-review SUBSTANCE.
Implemented as "substance present", NOT the original sketch "Forward AND Backward
inside the §1.7 section". Evidence: a 73-patch sweep found 8 §1.7-heading patches
that legitimately lack both literal words (they self-review via T15 /
Self-application / Recursive / a forward-check); the strict form would be ≥8
false-positives, and the rule-introducing(needs both)-vs-research-only(needs
neither) split is judgment, not mechanical (#gate-where-judgment-needed). So the
gate is "has substance", and arms (c') Self-reflection + (f') forward-check were
added because the sweep proved the 2 bare-§1.7 patches (aif-primitives-deep-dive,
skill-context-runtime-probe) do real self-review — net false-positives = 0.
- hasS17Substance(content): pure string→bool detector (arms b/c/c'/d/e/f/f'),
unit- + Stryker-testable. checkSection delegates to it; the bare "§1.7" literal
is no longer an arm. Error message distinguishes "names §1.7 but no substance
(decoration)" from "missing §1.7 section".
- Tests: C3 paired-negative ("## §1.7" with no substance → hasS17Substance false +
checkSection throws /decoration/), paired-positive, arm (c')/(f') positives,
and "substance without literal §1.7 still passes". Real-corpus test stays green
(106 principles pass; 0 new exemptions).
§1.7: forward-check applied — complies with no-paid-llm-in-ci (pure deterministic
string check, packages/core/principles/13-...test.ts hasS17Substance, no API);
build-first-reuse-default (strengthens own principle 13, no upstream analog for
"our §1.7 patch discipline"); doc-authority-hierarchy (no doc/rule prose edited,
test-only). backward-check sweep — ran the new gate against all 73 research
patches (command output in PR body): 0 false-positives; the only 2 patches that
relied on bare §1.7 (aif-primitives-deep-dive "forward-check",
skill-context-runtime-probe "self-reflection") pass via the new (f')/(c') arms,
so no EXEMPT_LIST entry was added. Anti-tautology negative proves the gate fails
on a substance-free §1.7 heading.
artyhoo
enabled auto-merge (squash)
May 22, 2026 20:11
This was referenced May 23, 2026
artyhoo
added a commit
that referenced
this pull request
May 25, 2026
… detection) (#220) Run `bash .claude/skills/meta-orchestrator/helpers/plan-currency-check.sh` (L2 Stage 3 detection shipped in #217) → 88 UNTRACKED-N entries surfaced between the 2026-05-22 reconciliation and origin/staging tip (#217). Map each to an existing §0 / Track row by adding the PR number to its evidence cell, or to a new §0 row for two umbrellas that landed in full since the prior snapshot. Re-run helper → 0 UNTRACKED remaining. Key changes: - Snapshot date 2026-05-22 → 2026-05-25 (header + §0). - N8 row: A-phase 🔲 → 🟡 — C1 SSOT-existence (#170), C2 kickoff T-enumeration floor (#174), C3 principle 13 §1.7 substance (#178), C4 delivery-channel marker (#177), activation #180. C5 + cost-levers remain gated on §5.3 utilisation trigger. - Track M.1 / M.4 → DONE: M.1 codified T20 via #212 (with NB note — recommendation-laziness took the T20 slot, mutation-equivalence T-bump 20→21 still pending); M.4 6 paired-negative bash-hook tests shipped #195/#196/#197/#198/#199/#200. - Two new §0 rows: Meta-orchestrator skill (Track P) — BUILD #186 + audit rounds #192/#193/#194/#201/#202 + UX refactor #203/#204/#205 + planner-completeness #213/#214/#217 + §1.7 PR-body mandate #216; Recommendation-laziness discipline — R-phase #206/#207, benchmark #210, I-phase Sub-waves A/C/D #211/#212/#215. - N7 row: + dogfood research-patch #135 / §4 demotion #166 / live-trial verified #171. N4b row: + design #136 / record #118. - Infra paragraph: PR refs for I.1 follow-ups (#121/#123/#124/#125/ #128/#130/#131/#143/#145/#146/#147/#148/#149/#172/#187), I.2 (#139/#142/#154/#175), I.3 DN-4 (#126/#132/#133/#138/#140/#152/ #159/#161/#162/#167). - Track 2.3 (channel-earliness audit) → DONE 2026-05-23 (#181); removed from "What actually remains". - Footer subsection: standalone work (#191 satellite-arch / #189 guard-liveness / #173 storm-readiness / #176 §10 port / #182 cleanup), Wave 10 follow-ups (#110/#112/#113), plan-revision history (#108/ #109/#153/#155/#157/#160/#164/#165/#168/#179/#185). Verification: - `bash .claude/skills/meta-orchestrator/helpers/plan-currency-check.sh | grep -c '^UNTRACKED'` → 0 (down from 88). - `npx markdownlint-cli docs/meta-factory/wave-sequencing-plan.md` → no violations. - `npx vitest run packages/core/skills/plan-currency-check.test.ts` → 14/14 passed. Prior-art: skipped — chore, doc reconciliation only, no new capability or rule introduced.
artyhoo
added a commit
that referenced
this pull request
Jun 27, 2026
…n staging → renumber channel-discipline to #178)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Wave N8 A-phase item C3. Closes a
#discipline-theatrehole in principle 13: the old arm (a) let the bare literal "§1.7" pass on its own — a patch could write a## §1.7heading with zero actual self-review and stay green. Now a patch passes only with real self-review substance.Why "substance present", not the original sketch "Forward AND Backward in the §1.7 section"
The naive form would have broken the build. A 73-patch sweep: 8 §1.7-heading patches legitimately lack both literal words (self-review via
T15/Self-application/Recursive/ aforward-check) → ≥8 false-positives; and the rule-introducing(needs both)-vs-research-only(needs neither) split is judgment, not mechanical (#gate-where-judgment-needed). So C3 enforces "§1.7 must have substance"; arms (c')Self-reflection+ (f')forward-checkwere added because the 2 bare-§1.7 patches are real self-review. Net false-positives = 0 (full principles suite 106 pass).Changes (test-only,
packages/core/principles/)hasS17Substance(content)— purestring→booldetector, unit/Stryker-testable.checkSectiondelegates; bare§1.7is no longer an arm. Error distinguishes "names §1.7 but no substance (decoration)" from "missing §1.7 section".§1.7
§1.7 Forward-check applied
Complies with
no-paid-llm-in-ci— pure deterministic string check,hasS17Substanceat packages/core/principles/13-phase-research-coverage-s17.test.ts:86 (no API call);build-first-reuse-default(strengthens own principle 13, no upstream analog for "our §1.7 patch discipline");doc-authority-hierarchy(test-only, no doc/rule prose edited —checkSectiondelegates at packages/core/principles/13-phase-research-coverage-s17.test.ts:112).§1.7 Backward-check applied
Ran the new gate against all 73 research patches → 0 false-positives. The only 2 patches relying on bare §1.7 —
aif-primitives-deep-dive.md(forward-check) andskill-context-runtime-probe.md(self-reflection) — pass via the new (f')/(c') arms, so noEXEMPT_LISTentry was needed. The anti-tautology negative at packages/core/principles/13-phase-research-coverage-s17.test.ts:218 proves the gate fails on a substance-free §1.7 heading.N8 A-phase now complete
C1 (#170) · C2 (#174) · C4 (#177) · C3 (this) · C5 = already covered by principle 10. Built in an isolated worktree (parallel sessions active).