Record the guards, the narrowing, and the two things I could not do
gates / gates (push) Successful in 30s
gates / gates (push) Successful in 30s
R-273's owed guards are both built and closed. R-291 records what CI stopped covering and why, so it can be widened deliberately rather than discovered. R-292 is new and was found by a test failing for the wrong reason: artifact_sha_invalid conflates "version missing", "registry unreachable" and "bad sha" into one message. v0.102.0 works around it by ORDERING -- the probes run first, so an unreachable registry is reported as unreachable -- but the message itself is untouched. CONTEXT gains the rule this session is about: a check and the policy it enforces must read the same number from the same place, or they drift and the drift looks like a defect in something else. Two corollaries, both of which cost something: a bounded check must print what it stopped covering on every run, and an unreadable policy is INCONCLUSIVE rather than unbounded. Stated in the report rather than glossed: Part 4 (finding receipts for the twelve downgraded claims) was NOT done and is a shortfall, not a decision -- splitting it would have produced exactly the half-checked green the exercise exists to prevent. Part 5 was droppable and dropped. The tag-push green is not re-proved tonight and is not claimed; the evidence offered is runs 190 and 216.
This commit is contained in:
+22
@@ -15,6 +15,28 @@
|
||||
> would make one of the two audiences stop reading. `STATUS.md` is also a **view of `OPEN-ITEMS.md`**
|
||||
> and holds nothing of its own; this file does hold its own content, namely the standing rulings below.
|
||||
|
||||
## A check and the policy it enforces must read the same number from the same place
|
||||
|
||||
**Earned 2026-08-09.** The container registry retains N versions per package; `check-published-versions.py`
|
||||
demanded that **every** git tag still be downloadable. Both rules are individually sensible and together
|
||||
they are impossible. Nothing connected them, so the day the (N+1)th agent was published the oldest was
|
||||
evicted and CI went red **at a commit whose own run had been green the day before** — on a true finding
|
||||
nobody could act on, and one that would have returned at the very next publish.
|
||||
|
||||
**The drift looks like a defect in something else.** It was filed as CI being "sensitive to tag refs",
|
||||
which it is not; two earlier tag pushes had passed, and the gate reads its version list from an API that
|
||||
does not know what ref is checked out. A whole session went into the wrong explanation before the two
|
||||
numbers were even compared.
|
||||
|
||||
So: **one file owns the number, and every consumer reads it from there** — today
|
||||
`felhom-agent/scripts/retention-policy.json`, read by the check and referenced by the prune procedure.
|
||||
Two corollaries, both of which cost something to learn:
|
||||
|
||||
- **A bounded check must print what it stopped covering, every run.** A narrowing that goes quiet becomes
|
||||
permanent by accident.
|
||||
- **An unreadable policy is INCONCLUSIVE, never "unbounded".** A check that silently loses its bound is
|
||||
worse than one that fails.
|
||||
|
||||
## Standing rulings
|
||||
|
||||
**S-39 — "WE DO NOT KNOW" IS NEVER DRAWN AS "FINE", AND THE CODEBASE HAS ONE WAY OF SAYING IT
|
||||
|
||||
Reference in New Issue
Block a user