M0 — governance truth: security_sensitive gate enforced, CLAUDE.md truthful#58
Merged
Conversation
The Marmot guide has carried security_sensitive: true since it landed, but the schema never defined the field — the flag was inert frontmatter. Now it is typed, documented (English source only; locale variants inherit by path), and validated by astro check. The enforcing gate lands in the next commit. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LVPyHAtQ1cdK76RpFasafP
…ensitive pages (M0) Additive workflow (new file per constraint 4; touches nothing in the protected set) + a zero-dependency script whose decision logic is pure and unit-tested (10 tests): locale variants inherit the English source's flag by path; the flag is honored on BASE or HEAD (a PR removing the flag is still gated); an unreadable page fails closed as flagged; approvals = distinct users' LATEST verdicts, author excluded, CHANGES_REQUESTED supersedes, COMMENTED never does. Re-evaluates on review submit/dismiss. Stated plainly per the SHIP-GATE-R2 G2 rider: until this check is marked Required in branch protection (OWNER item B4), a red gate is a loud advisory — GitHub does not block the merge. M0 + B4 together close the P0. Live red/green verification requires a PR touching the flagged Marmot guide — recorded as the post-merge acceptance step (UNTESTED-live until then). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LVPyHAtQ1cdK76RpFasafP
…n 2)
The section previously described freshness stamps, a reader banner, hygiene
CI, TRANSLATING.md, and CODEOWNERS in the present tense — none of which
exist. It now states exactly what EXISTS (Starlight i18n, the translation
pipeline, the house island pattern, and the NOW-ENFORCED security_sensitive
two-review gate with its B4 required-check dependency stated) and what is
PLANNED (the full governance layer — BACKLOG B1, its own future effort).
E5: no dangling TRANSLATING.md reference survives (the stop-and-ask trigger
now says the charter is unwritten and to always ask). E9: constraint 4 names
the protected workflow set {verify, security-pr, quality}, previously
recorded only in guard.py.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LVPyHAtQ1cdK76RpFasafP
…port Caught by verify:all AFTER an earlier pipeline masked its exit code (grep in a pipe won the && chain) — the prior push carried a red typecheck. This commit restores green; the process error is on the record. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LVPyHAtQ1cdK76RpFasafP
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
wecanjustbuildthings | a142a68 | Jul 11 2026, 09:46 PM |
…o base (M0-R1) Closes the self-modification bypass: with the default merge-ref checkout, a PR touching a flagged page could ALSO edit scripts/i18n-security-gate.mjs in the same PR and neuter the gate judging it. The checkout is now pinned to the PR's base SHA, so the decision logic always comes from the base branch. Bootstrap consequence, accepted and ruled: on THIS PR the script is absent at base, so the gate goes red — failing closed — and self-heals on merge. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LVPyHAtQ1cdK76RpFasafP
…-0 deploy semantics into E4, B13 scope addendum Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LVPyHAtQ1cdK76RpFasafP
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 does this PR do?
PLAN.md M0 — the P0 fix (BACKLOG B1, Option 2 per gate ruling G2), six commits:
07efa9e— schema:security_sensitivebecomes a real, validated field (src/schema/catalog.ts). The Marmot guide's existing flag stops being inert frontmatter.ddb72b1— the gate: additive.github/workflows/i18n-security-gate.yml(new file; touches nothing in the protected {verify, security-pr, quality} set) + zero-dependencyscripts/i18n-security-gate.mjs. PRs touching a flagged English source or any es/ar variant of one fail the check until 2 distinct approving reviews exist. Fail-closed semantics: flag honored on base OR head (flag-removal PRs stay gated); unreadable pages count as flagged; approvals = distinct users' latest verdicts, author excluded, CHANGES_REQUESTED supersedes, COMMENTED never does. Re-evaluates on review submit/dismiss. Decision logic is pure and pinned by 9 unit tests.4ae5a70— CLAUDE.md truthful (E5 + E9 ride along): the i18n section now states what EXISTS (including this gate, with its B4 dependency in writing) vs what is PLANNED. No danglingTRANSLATING.mdreference survives; constraint 4 names the protected workflow set.af07933— fix: unused ts-expect-error caught by verify:all (process note: a grep pipe briefly masked the exit code; corrected on the record).c4a51da— M0-R1 REQUIRED FIX — trusted-code pin: the gate's checkout is pinned to the PR's base SHA, closing the self-modification bypass (a PR must never supply the logic that judges it).a142a68— PLAN.md records the M0-R1 rulings (B4 → Required with owner-bypass; item-0 deploy semantics into E4's acceptance; B13 scope addendum).⚠ Expected: this PR's own
two-review-gaterun is RED afterc4a51daBootstrap, by design (M0-R1): the gate now runs the BASE branch's copy of
scripts/i18n-security-gate.mjs— which does not exist at base until this PR merges. The job therefore fails closed on this PR and self-heals on merge. Merging over this specific red is the owner's ruled call (M0-R1 §4); every future PR runs the trusted, merged copy.Verification
npm run checkgreen (schema validates the flagged Marmot guide)npm run verify:allexit 0 — 0 type errors, 361/361 tests (+9), enforce green, build completeaf07933executed and passed (no flagged pages touched)🤖 Generated with Claude Code
https://claude.ai/code/session_01LVPyHAtQ1cdK76RpFasafP