Finding
kanon lint --writing currently fails on 5 occurrences of identity-fluff wording ("sovereign"/"sovereignty" used as an identity claim rather than a factual description) across the two most-canonical documents in the repo. readme-lint and docs-manifest-check are both required stages in .kanon-ci.toml, so a fresh clone currently fails its own local gate before any new change is applied.
Evidence
Verified by running kanon lint --writing . against origin/main (tip 28420ad):
README.md:5 [WRITING/identity-fluff] identity-fluff word (state what the thing is/does, not an identity claim)
docs/requirements.md:7 [WRITING/identity-fluff] identity-fluff word (state what the thing is/does, not an identity claim)
docs/requirements.md:109 [WRITING/identity-fluff] identity-fluff word (state what the thing is/does, not an identity claim)
docs/requirements.md:117 [WRITING/identity-fluff] identity-fluff word (state what the thing is/does, not an identity claim)
docs/requirements.md:124 [WRITING/identity-fluff] identity-fluff word (state what the thing is/does, not an identity claim)
README.md:5 — "Sovereign web runtime with agent co-tenancy."
docs/requirements.md:7 — "2. Presents a zero-friction, unlinkable, sovereign interface to origins."
docs/requirements.md:109 — "R10.1 ... (sovereignty, custom rules, full audit, active ops, agent co-tenancy, knowledge graph integration)."
docs/requirements.md:117 — "- Sovereignty: runs entirely locally, no cloud dependency beyond operators LLM API key"
docs/requirements.md:124 — "- Update sovereignty: operator controls when and what updates are applied"
None of these lines are flagged by check-doc-refs.py or check-doc-manifest.py (dangling/mismatch/missing/unlisted) — only kanon lint --writing, invoked as readme-lint and inside docs-manifest-check, catches this class. The rule evidently postdates the last edit to these two files: nothing else in the corpus trips it.
GitHub CI does not surface this: gate-attestation.yml only verifies a Gate-Passed trailer is present on the PR tip, it does not re-run kanon lint, so a trailer stamped under an older kanon lint ruleset stays valid-looking on main even after the ruleset tightens.
Why this matters
Every future PR that touches any part of the canonical doc corpus inherits these 5 pre-existing failures in readme-lint / docs-manifest-check, regardless of what that PR actually changes, because both stages lint the whole corpus rather than a diff. A contributor who did not cause the drift has to fix it before they can get a real Gate-Passed trailer.
Desired correction
Reword the 5 flagged lines to state the fact rather than the identity claim (e.g. "sovereignty" -> "local-only operation" / "operator control", matching the wording already used for the same underlying facts elsewhere in docs/requirements.md R11). Re-run kanon lint --writing . to confirm zero violations, then the full .kanon-ci.toml pipeline.
Done when: kanon lint --writing . reports zero WRITING/identity-fluff findings and all five .kanon-ci.toml stages pass on the fix commit.
Finding
kanon lint --writingcurrently fails on 5 occurrences of identity-fluff wording ("sovereign"/"sovereignty" used as an identity claim rather than a factual description) across the two most-canonical documents in the repo.readme-lintanddocs-manifest-checkare both required stages in.kanon-ci.toml, so a fresh clone currently fails its own local gate before any new change is applied.Evidence
Verified by running
kanon lint --writing .againstorigin/main(tip28420ad):README.md:5— "Sovereign web runtime with agent co-tenancy."docs/requirements.md:7— "2. Presents a zero-friction, unlinkable, sovereign interface to origins."docs/requirements.md:109— "R10.1 ... (sovereignty, custom rules, full audit, active ops, agent co-tenancy, knowledge graph integration)."docs/requirements.md:117— "- Sovereignty: runs entirely locally, no cloud dependency beyond operators LLM API key"docs/requirements.md:124— "- Update sovereignty: operator controls when and what updates are applied"None of these lines are flagged by
check-doc-refs.pyorcheck-doc-manifest.py(dangling/mismatch/missing/unlisted) — onlykanon lint --writing, invoked asreadme-lintand insidedocs-manifest-check, catches this class. The rule evidently postdates the last edit to these two files: nothing else in the corpus trips it.GitHub CI does not surface this:
gate-attestation.ymlonly verifies aGate-Passedtrailer is present on the PR tip, it does not re-runkanon lint, so a trailer stamped under an older kanon lint ruleset stays valid-looking onmaineven after the ruleset tightens.Why this matters
Every future PR that touches any part of the canonical doc corpus inherits these 5 pre-existing failures in
readme-lint/docs-manifest-check, regardless of what that PR actually changes, because both stages lint the whole corpus rather than a diff. A contributor who did not cause the drift has to fix it before they can get a realGate-Passedtrailer.Desired correction
Reword the 5 flagged lines to state the fact rather than the identity claim (e.g. "sovereignty" -> "local-only operation" / "operator control", matching the wording already used for the same underlying facts elsewhere in
docs/requirements.mdR11). Re-runkanon lint --writing .to confirm zero violations, then the full.kanon-ci.tomlpipeline.Done when:
kanon lint --writing .reports zeroWRITING/identity-flufffindings and all five.kanon-ci.tomlstages pass on the fix commit.