You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The kanon-lint job in .github/workflows/ci.yml always exits 0 on hosted runners, so it never actually enforces anything — and the local full-tier gate (kanon gate --tier full, which runs the real check) currently fails on 5 pre-existing warnings that have been silently passing PR after PR.
Evidence
kanon-lint's CI job depends on FLEET_REPO_TOKEN, which is unset on GitHub-hosted runners for this repo — the job echoes a warning and exits 0 regardless of findings (confirmed by PR fix(rate-limit): verify peer before honoring X-Forwarded-For #103's adversarial reviewer while checking a different claim, and reconfirmed 2026-08-16 running kanon lint . --all and a real kanon gate --tier full on verda-build against fix/67-trusted-proxy-extractor merged with main @ 9c56500).
The full local gate's kanon lint step fails (0 errors, 6 warnings — full tier requires zero) while kanon-lint's GitHub Actions check reports green on the same commit.
The 6 warnings, one already tracked:
.github/workflows/gate-attestation.yml:1[YAML/missing-concurrency] — workflow missing a concurrency group.
.github/workflows/gate-attestation.yml:81[SHELL/unpinned-action] — forkwright/.github action not pinned to a SHA.
Cargo.toml:8[WRITING/identity-fluff] — identity-fluff word in the package description.
README.md:3[WRITING/identity-fluff] — identity-fluff word in the opening line.
A gate that always passes isn't a gate — it's a green checkmark that means nothing. Every PR merged since FLEET_REPO_TOKEN went missing from the hosted runner has had zero real lint enforcement, and the 5 warnings above (plus #102's) are the accumulated result. The next PR that pushes store.rs over its limit, or adds an unpinned action, will look identical in CI to one that didn't.
Desired correction
Fix the CI job so it fails hosted runs instead of silently exiting 0 when it can't reach whatever FLEET_REPO_TOKEN gates — either provision the token for hosted runners or make the job itself, not just its findings, fail closed on the missing-credential path.
Clear the 5 warnings above (excluding tests/consent_contract.rs, tracked separately): add a concurrency group to gate-attestation.yml, pin the forkwright/.github action to a SHA, reword the Cargo.toml description and README.md opening line off the identity-fluff word, split src/store.rs under 800 lines.
Done when: kanon-lint's GitHub Actions check fails on a genuinely-broken commit (not just a rerun of today's), and kanon lint . --all / kanon gate --tier full report 0 warnings outside of #102's tracked scope.
Finding
The
kanon-lintjob in.github/workflows/ci.ymlalways exits 0 on hosted runners, so it never actually enforces anything — and the local full-tier gate (kanon gate --tier full, which runs the real check) currently fails on 5 pre-existing warnings that have been silently passing PR after PR.Evidence
kanon-lint's CI job depends onFLEET_REPO_TOKEN, which is unset on GitHub-hosted runners for this repo — the job echoes a warning and exits 0 regardless of findings (confirmed by PR fix(rate-limit): verify peer before honoring X-Forwarded-For #103's adversarial reviewer while checking a different claim, and reconfirmed 2026-08-16 runningkanon lint . --alland a realkanon gate --tier fullon verda-build againstfix/67-trusted-proxy-extractormerged withmain@ 9c56500).kanon lintstep fails (0 errors, 6 warnings — full tier requires zero) whilekanon-lint's GitHub Actions check reports green on the same commit..github/workflows/gate-attestation.yml:1[YAML/missing-concurrency]— workflow missing a concurrency group..github/workflows/gate-attestation.yml:81[SHELL/unpinned-action]—forkwright/.githubaction not pinned to a SHA.Cargo.toml:8[WRITING/identity-fluff]— identity-fluff word in the package description.README.md:3[WRITING/identity-fluff]— identity-fluff word in the opening line.src/store.rs:1[RUST/file-too-long]— 889 lines, limit 800.tests/consent_contract.rs:1[RUST/file-too-long]— 841 lines, limit 800 — already tracked as tests/consent_contract.rs exceeds the 800-line file-too-long limit #102, not part of this issue's scope.Why this matters
A gate that always passes isn't a gate — it's a green checkmark that means nothing. Every PR merged since
FLEET_REPO_TOKENwent missing from the hosted runner has had zero real lint enforcement, and the 5 warnings above (plus #102's) are the accumulated result. The next PR that pushesstore.rsover its limit, or adds an unpinned action, will look identical in CI to one that didn't.Desired correction
FLEET_REPO_TOKENgates — either provision the token for hosted runners or make the job itself, not just its findings, fail closed on the missing-credential path.tests/consent_contract.rs, tracked separately): add a concurrency group togate-attestation.yml, pin theforkwright/.githubaction to a SHA, reword theCargo.tomldescription andREADME.mdopening line off the identity-fluff word, splitsrc/store.rsunder 800 lines.Done when:
kanon-lint's GitHub Actions check fails on a genuinely-broken commit (not just a rerun of today's), andkanon lint . --all/kanon gate --tier fullreport 0 warnings outside of#102's tracked scope.