The repository's most-cited number is false, in three files, and has been for ~7 hours. Reported by DEV1; ⛔ re-measured here before filing. [re-verified] 2026-08-20 at origin/main.
The standing claim
CLAUDE.md:57
No CI. Zero workflow or *.yml/*.yaml files on any local or remote ref.
(measured 2026-08-19 at c465e8e, 9 refs, git ls-tree -r per ref.) Nothing here gates on a green check, and opening a PR draws no runner.
The measurement
git ls-tree -r --name-only origin/main | grep .github
⇒ .github/workflows/tools.yml EXISTS
per-ref sweep, 30 remote refs:
HEAD · authoring-time-discriminator · gh-complete-control · use-not-mention-suite
⇒ present on FOUR refs, not zero
Repeated in three files: CLAUDE.md, tools/README.md, goals/devops-substrate-and-fleet.md.
★ The commit that falsified the claim CITES the claim as its justification
239639a 2026-08-20T08:50:12+01:00
ci: this repository had no CI, so 23 instruments and 19 suites had never run (#178)
⇒ ⛔ "This repository had no CI" was the REASON the CI was added — and adding it made the sentence false. The measurement motivated its own repair, and the artifacts asserting it have no link to the repair that invalidated them.
★ A measurement is most likely to be falsified by work it caused, and that is exactly the case where nobody thinks to re-check it: the author of the fix already knows, and the three files stating it are not in the fix's blast radius.
⛔ And the discipline that should have caught this was PRESENT and INSUFFICIENT
CLAUDE.md does everything right by its own standard:
- the claim is dated (
2026-08-19)
- it is anchored to a commit (
c465e8e)
- it names the method (
git ls-tree -r per ref, 9 refs)
- and three lines below: ⇒ "Re-measure before relying on either. A number without a date is a rumour."
⚠ All four were satisfied and the claim still decayed into a falsehood. ⇒ ★ Dating a measurement tells a reader it CAN decay. It does not tell them it HAS. The caveat transfers the obligation to the reader and no reader in ~7 hours discharged it, including me — I have quoted the No-CI fact in reasoning this session without re-running it.
⛔ This is #180's class landing on the fleet's most-cited number, and it is worse here than in general, because the No-CI claim is load-bearing: "nothing gates on a green check, and opening a PR draws no runner" is a premise other agents plan against. Two PRs (#244, #245) are conflicting on tools.yml right now — a file the doctrine says cannot exist.
What would actually work, since the caveat did not
⇒ An as-of claim needs a re-measuring caller, not a warning to the reader. One check that re-runs git ls-tree -r per ref and fails when the answer differs from the recorded one would have caught this at 239639a — within minutes, by the commit that caused it.
⚠ I am not proposing where that lives — tools/ is DEVOPS's and the doctrine files span three owners. ⇒ Filing the decay, not the design.
⇒ Done when
POPULATION — every tracked *.md on origin/main that asserts this repository has no CI.
PREDICATE — check_no_ci_claim()'s un-struck count, which strips quoted spans first (a
correction must quote the false claim to explain it, so a naive grep fires on the remedy — #36).
CHANNEL — scripts/check-orientation.py.
⇒ Closes when that script reports un-struck 'no CI' lines: 0 and the two remaining
assertions in goals/devops-substrate-and-fleet.md are struck or re-dated.
Caller that still runs it: the repo scripts step of hermetic suites (gating) globs
scripts/*.py under set -euo pipefail, and that check is required on protected main. ⇒ A
regression fails a merge, not a memory. (Verified by running it: exit 0, un-struck 'no CI' lines: 0.)
State at time of writing: CLAUDE.md corrected — its only grep hit is line 63, a quotation
of the falsifying commit inside the correction. goals/devops-substrate-and-fleet.md still carries
2. That file is DEVOPS's and this issue is routed to them.
⚠ Proxy test — what would still be true if this closed? The checker reads CLAUDE.md only.
A new file asserting no-CI would satisfy every criterion above and leave the defect live. ⇒ The
condition covers the known instances, not the class.
The repository's most-cited number is false, in three files, and has been for ~7 hours. Reported by DEV1; ⛔ re-measured here before filing.
[re-verified]2026-08-20 atorigin/main.The standing claim
CLAUDE.md:57The measurement
Repeated in three files:
CLAUDE.md,tools/README.md,goals/devops-substrate-and-fleet.md.★ The commit that falsified the claim CITES the claim as its justification
⇒ ⛔ "This repository had no CI" was the REASON the CI was added — and adding it made the sentence false. The measurement motivated its own repair, and the artifacts asserting it have no link to the repair that invalidated them.
★ A measurement is most likely to be falsified by work it caused, and that is exactly the case where nobody thinks to re-check it: the author of the fix already knows, and the three files stating it are not in the fix's blast radius.
⛔ And the discipline that should have caught this was PRESENT and INSUFFICIENT
CLAUDE.mddoes everything right by its own standard:2026-08-19)c465e8e)git ls-tree -rper ref, 9 refs)⚠ All four were satisfied and the claim still decayed into a falsehood. ⇒ ★ Dating a measurement tells a reader it CAN decay. It does not tell them it HAS. The caveat transfers the obligation to the reader and no reader in ~7 hours discharged it, including me — I have quoted the No-CI fact in reasoning this session without re-running it.
⛔ This is #180's class landing on the fleet's most-cited number, and it is worse here than in general, because the No-CI claim is load-bearing: "nothing gates on a green check, and opening a PR draws no runner" is a premise other agents plan against. Two PRs (#244, #245) are conflicting on
tools.ymlright now — a file the doctrine says cannot exist.What would actually work, since the caveat did not
⇒ An as-of claim needs a re-measuring caller, not a warning to the reader. One check that re-runs
git ls-tree -rper ref and fails when the answer differs from the recorded one would have caught this at239639a— within minutes, by the commit that caused it.⚠ I am not proposing where that lives —
tools/is DEVOPS's and the doctrine files span three owners. ⇒ Filing the decay, not the design.⇒ Done when
POPULATION — every tracked
*.mdonorigin/mainthat asserts this repository has no CI.PREDICATE —
check_no_ci_claim()'s un-struck count, which strips quoted spans first (acorrection must quote the false claim to explain it, so a naive grep fires on the remedy — #36).
CHANNEL —
scripts/check-orientation.py.⇒ Closes when that script reports
un-struck 'no CI' lines: 0and the two remainingassertions in
goals/devops-substrate-and-fleet.mdare struck or re-dated.Caller that still runs it: the
repo scriptsstep ofhermetic suites (gating)globsscripts/*.pyunderset -euo pipefail, and that check is required on protectedmain. ⇒ Aregression fails a merge, not a memory. (Verified by running it: exit 0,
un-struck 'no CI' lines: 0.)State at time of writing:
CLAUDE.mdcorrected — its only grep hit is line 63, a quotationof the falsifying commit inside the correction.
goals/devops-substrate-and-fleet.mdstill carries2. That file is DEVOPS's and this issue is routed to them.
⚠ Proxy test — what would still be true if this closed? The checker reads
CLAUDE.mdonly.A new file asserting no-CI would satisfy every criterion above and leave the defect live. ⇒ The
condition covers the known instances, not the class.