Skip to content

Pre-release truth pass: a fired trigger, a permission read as a prohibition, and a register that overstated itself - #266

Merged
Polichinel merged 7 commits into
developmentfrom
fix/pre-release-register-truth
Aug 13, 2026
Merged

Pre-release truth pass: a fired trigger, a permission read as a prohibition, and a register that overstated itself#266
Polichinel merged 7 commits into
developmentfrom
fix/pre-release-register-truth

Conversation

@Polichinel

Copy link
Copy Markdown
Collaborator

Six commits. Before cutting 1.2.0 I audited all 21 open register entries, all 10 open issues and the vpp_017 scope, intending to close four entries. None was cleanly closable — I had matched grep counts rather than each entry's own stated closing condition. What that audit turned up is most of this PR.

The three findings that mattered

C-94's trigger had fired and nobody noticed. It reads "a delivery is reported empty by a consumer or by FAO." On 2026-08-12 09:15 UTC FAO emailed that the endpoints returned no data and the partner bucket listed zero files. Nothing on our side paged. The partner found it. The entry's deferral rationale — "delivery works today" — was false while I was writing it.

The honest qualification matters as much: the cause was a deliberate destructive migration plus a delivery not re-run, not a name mismatch, and faoapi's post-mortem records that the seam coordinates matched throughout. So the preflight C-94 proposes would not have caught it. The trigger was mis-specified, and that is the finding. It is now split by whether an upload actually occurred, and the arm that cannot be observed from this repository is withdrawn as a stated gap rather than left as a trigger nobody can notice (ADR-014 §4).

C-95 was not corrected. I had written "corrected at all three sites". Two live mis-citations survived outside the register — tests/test_store_construction.py and docs/CICs/UNFAOPostProcessorManager.md — both attributing the prohibition to þing-02 D2 when it is þing-01 D2, and both stating it unconditionally. It is conditional, and it grants read-only preflight validation. Reading a permission as a prohibition is how a guard we are entitled to build never gets built.

The register systematically overstated itself. Eight entries carried measurements or triggers that were false, and the pattern was the same each time: the work had landed by deletion, and the entry kept describing the world its fix was designed for. C-97 said 25 occurrences in 8 files; re-measured, 75 across 24. C-81's coverage gap was 8, not 17, and its trigger claimed nothing in CI would notice a registry move — CI has checked out views-appwrite since 2026-08-10. C-26's Tier-1 gate had been answered no upstream and the entry still read Tier 1. C-40's final paragraph restated a gate its own update refuted twenty lines above. C-85 had no closing condition at all.

What else is in here

poetry.lock moves views-pipeline-core 3.0.0 → 3.0.1, which carries the upstream fix that closes C-27 (the loader no longer swallows this repo's AttributeError). This is the only functional change in the PR and CI is the only thing that verifies it — this machine resolves an editable checkout reporting 2.3.0, so a green local suite proves nothing about the bump.

vpp_017 (#264) lands the citation prefix in the shape views-models already chose, rather than one I invented: title, a "cite this as" blockquote, a README subsection, and the 14 cross-repo citations in tests/ qualified. Intra-repo prose stays bare — views-models' own rule.

Issue hygiene on GitHub only: #133 closed (two of three fields shipped before it was filed), #125 reduced to its residual, four issue bodies corrected, and C-28 filed upstream — the entry had two named fix sites and no issue anywhere, while its two structural twins were filed on 2026-08-01 and both fixed within four days.

The review of the review

The /code-review max pass over the first four commits found twelve findings, and the pattern is the one worth naming: a correction is a claim, and I made four new false ones while correcting nine old ones. Two amendments were attached below their entry's terminating rule and rendered as preambles to the wrong entries. An ADR header rendered inside a blockquote for want of a blank line. A count was updated from sixteen to thirteen while the sentence enumerating it was left standing, and the enumeration was wrong too.

The last commit is the consequence. The commit before it claimed "a check now confirms every entry heading is preceded by its predecessor's terminator" — no such check had been written. Rather than retract the claim, the check now exists and is mutation-proven, and it immediately found four malformed entries I had not.

Verification

ruff clean; 423 passed, 2 skipped, 39 xfailed. Every number in every commit message and register edit was produced by a command in the same turn as the edit that states it.

Register: 20 open / 77 resolved. C-27, C-90, C-91 and C-93 resolved and moved; C-89's two orphaned deferrals filed as #265 rather than declared ownerless and left, which under ADR-014 §4 would have converted two compliant deferrals into two non-compliant items.

Closes #264. Refs #133, #125.

Polichinel and others added 7 commits August 13, 2026 21:21
…ion, and a lock two days stale

Pre-release audit of all 21 open register entries and all 10 open issues. I had proposed
closing four entries; NONE was cleanly closable — I had matched grep counts rather than
each entry's own stated closing condition. Three findings, in order of seriousness.

C-94'S TRIGGER FIRED ON 2026-08-12 AND NOBODY NOTICED. It reads "a delivery is reported
empty by a consumer or by FAO". At 09:15 UTC FAO emailed that the endpoints returned no
data and the partner bucket listed ZERO files. In faoapi's words: "They found it by hand
and emailed us; nothing on our side paged." My entry's deferral rationale — "Delivery
works today" — was false at the moment I wrote it, and it was the whole justification.

AND THE MECHANISM I DEFERRED WOULD NOT HAVE CAUGHT IT. faoapi's post-mortem records that
the seam coordinates match and "the ADR-017 invisible-delivery work held"; the cause was
an unannounced destructive migration plus no run since. No upload occurred, so a
post-upload findability check would have observed nothing. So the TRIGGER was
mis-specified, not the mechanism: "a delivery is reported empty" names a symptom with at
least two causes and the preflight addresses one. Now split three ways, with the
uncovered cause — the bucket is empty because nothing was delivered — named as a gap
nothing here detects rather than absorbed into this entry.

C-95 WAS NOT CORRECTED. I wrote "corrected at all three sites". Two live mis-citations
survived OUTSIDE the register, both attributing the integration-test prohibition to
þing-02 D2 and both stating it unconditionally — still reading a permission as a
prohibition, which is the entry's whole subject. tests/test_store_construction.py:17 and
docs/CICs/UNFAOPostProcessorManager.md:167, both fixed here, and C-95's Location now says
five sites and which pass found each.

C-27 IS RESOLVED, AND CI HAD BEEN INSTALLING THE UNFIXED VERSION FOR TWO DAYS.
views-pipeline-core#367 landed in 3.0.1 on 2026-08-11; pyproject already allowed it;
poetry.lock still resolved 3.0.0. Bumped with `poetry update views-pipeline-core --lock` —
exactly one package moved, three lines, suite unchanged.

Worth recording because the obvious check misleads: `grep -c "exc_info=True"` returns 6 in
BOTH tags. The fix is identifiable only by the comment naming #367, present in 3.0.1 and
absent in 3.0.0. I nearly concluded the audit was wrong on a count that looked decisive.

C-28 IS FILED UPSTREAM AT LAST, as views-pipeline-core#471. It had sat here since
2026-06-12 with two named fix sites and no issue filed anywhere, while its neighbours
C-26 and C-27 were filed on 2026-08-01 and both closed within three days. Expected cost
of filing: three days. Expected cost of not filing: this entry's whole lifetime.

Register 21 open -> 20; C-27 moved to Resolved Concerns.

Suite 422 passed / 2 skipped / 39 xfailed, ruff clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…r triggers that are false

Every number below was re-run in the same turn as the edit that states it.

C-97's NUMBER WAS RIGHT AND ITS METHOD WAS NEVER WRITTEN DOWN, which is why two audits
disagreed. Counting distinguishable coordinates: 25 in 8 files, re-confirmed. Counting
ALL values including the two whose declared values are this package's own directory
names: 139 in 31 files. An audit that did not know the basis reported 75 in 24 and read
as a contradiction. Both bases now stated.

C-33 said 32 differing lines (sixteen per side). Its own command, run verbatim, gives 26
(thirteen per side). Both managers are 440 lines.

C-81 was wrong twice over. Its title said CI verifies 17 fewer tests than local; measured,
the sibling-caused gap is 8, all views-datafactory — the faoapi and crafdapi gates
vanished when #248 deleted the checks that used them. And its TRIGGER — the field a
reader acts on — said nothing in CI would notice a registry move. False since 2026-08-10,
when CI began checking out views-appwrite. The mitigation paragraph knew; the trigger did
not. The C-46 residual that cites this entry carried the same two stale facts.

C-89's STATED CLOSING CONDITION IS MET and the entry stayed open anyway. #243 landed both
halves. What actually keeps it open is its two deferrals, whose triggers fired while
nobody watched: one said "when #243 finishes touching this file" — it finished; the other
was "routed to #243" — which closed without it. Both are now unowned, which is worse than
deferred, and naming that is the amendment's only job.

C-26's TIER-1 GATE IS ANSWERED — NO. views-pipeline-core#366 closed 2026-08-04 and the
loader now says the opposite in its own docstring. By the entry's own re-tier rule Tier 1
is no longer justified. Three further claims are false, including a Location pointing at
a branch that no longer exists. What survives is upstream and different: views-datafactory
pre-fills grids per its ADR-047, tracked as views-datafactory#420.

C-40's FINAL PARAGRAPH restates a gate the update twenty lines above it refutes — and it
was the last sentence in the entry, so the one a reader leaves with. Struck.

C-86's re-pin deferral is DISCHARGED BY UPSTREAM: the registry now publishes
obliges_consumers_since = "1.5.2" and both modules pin exactly that, so the pin is
conformant by upstream's own new rule.

C-92's cited constant has moved to a dedicated seam_contract module, and "their main is 22
commits behind" is now 2.

C-85 HAS NO CLOSING CONDITION AT ALL. Its trigger is a habit, it proposes no guard, and
its location says "not a code defect" — no evidence in any tree can satisfy it. It is a
worked example wearing a risk's clothes. Named rather than relocated, because a
relocation is a deliberate change and not truth-pass work.

Suite 422 passed / 2 skipped / 39 xfailed, ruff clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…nded

Three repositories each numbered an ADR 017, so a bare "ADR-017" in a cross-repo sentence
resolves to the wrong document for a reader sitting in either of the other two.

COPIED RATHER THAN INVENTED. views-models#393 closed first and chose a shape: a
`vmo_017 (ADR-017): …` title, a "Cite this as" blockquote under Status, a prefixed and
linked index entry, and a "Why one of these carries a prefix" subsection carrying the
three-row collision table. This adopts all four, including their usage rule verbatim —
intra-repo prose may stay bare; write the prefix wherever the sentence is read from, or
could be read from, another repository.

THE AUDIT FOUND ZERO WRONG REFERENTS HERE, and that is worth recording in the ADR index
rather than assumed. All four citations of views-models' 017 in this repo already name it
("views-models ADR-017"), and every bare ADR-017 means this document. The defect the
collision can cause — a sentence that parses but is about the wrong decision — exists in
views-crafdapi's ADR-033, not here. So this is legibility for arriving readers, not
repair.

THE 14 TEST CITATIONS ARE QUALIFIED, which the issue calls the priority: those comments
explain why a live guard exists, and a reader who follows them to the wrong ADR-017 loses
the rationale for a test they are debugging. The issue enumerated six; the real count is
14 — tests/test_env_declaration.py and four lines of tests/test_product.py were missing
from its list. First use per file reads `vpp_017 (ADR-017)`, the rest `vpp_017`.

Register and post-mortem prose left bare, per views-models' rule — they are read here.

Also fixed while in the index: the ADR-017 entry still said verifying the mirror
"currently means reading the consumer's source, which is impossible in CI when that
consumer is private". Untrue since #248 deleted both source reads on 2026-08-12.

Scope correction for the issue: it says ADR-017 appears in 7 files; measured, 55
occurrences across 9.

Suite 422 passed / 2 skipped / 39 xfailed, ruff clean.

Closes #264.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
tests/test_wire_shard.py said "fixture README: pyarrow 23.0.1" while that README, the
_PINNED_PYARROW constant twelve lines below, and the pyproject constraint all say 16.1.0.
Whoever executes the pyarrow re-vendor (#174) reads the toolchain from the test that pins
it, and would have read the wrong one.

ADR-013:1034 also names 23.0.1 and is NOT corrected: its root hash b1f3878 differs from
the current 9658a648, so it is a dated record of a superseded fixture generation and 23.0.1
is accurate for that generation. An audit flagged it as a third stale site; verified
otherwise before propagating.

Suite 422 passed / 2 skipped / 39 xfailed, ruff clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…mine

The ritual on four commits that were themselves a truth pass. It found twelve, and the
pattern is worth naming: a correction is a claim, and I made four new false ones while
correcting nine old ones.

I CLAIMED THE SUITE VERIFIED THE LOCK BUMP. It did not. This machine resolves
views_pipeline_core to an editable checkout reporting 2.3.0 — neither 3.0.0 nor 3.0.1 —
so "suite unchanged at 422 passed" proves nothing about the bump. CI is the only real
test. Also recorded: a patch bump is not a small payload here (~20 files, a module split
upstream), even though nothing this repo imports moved.

I UPDATED "SIXTEEN" TO "THIRTEEN" AND LEFT THE SENTENCE THAT COUNTED THEM. C-33 said
"five of the sixteen fall inside _save_contract — the datastore call, two comments and
the refusal string". Measured: FOUR (356, 367, 368, 371), and the datastore construction
at :355 is byte-identical. Both halves wrong. The breakdown two lines above still opened
"The sixteen are, by category" and is now marked as un-re-derived rather than silently
patched.

C-94's THREE-WAY TRIGGER SPLIT WAS NOT EXCLUSIVE, and its own worked example matched two
arms: on 2026-08-12 an upload HAD occurred (2026-07-27) and there had been none since the
purge, so the founding incident satisfied both (a) and (c). Arm (a) now carries the time
bound it needed. Arm (c) is withdrawn entirely — it is not observable from this
repository, which the amendment itself says four lines later, and ADR-014 §4 requires a
trigger someone can notice. It is now stated as a gap, alongside a second one faoapi's
post-mortem records: a warm cache serving stale historical over an empty bucket, where
"reported empty" is not even the symptom.

TWO AMENDMENTS WERE ATTACHED TO THE WRONG ENTRIES. C-85's and C-26's were appended below
their entry's terminating rule, so they rendered as preambles to C-84 and C-28. No test
fired because the register tooling splits on headings. Relocated; a check now confirms
every entry heading is preceded by its predecessor's terminator.

C-26 SAID TIER 1 IS NO LONGER JUSTIFIED AND LEFT THE TIER FIELD AT 1. Prioritisation
reads the field, not the prose. Re-tiered to 2 with the original rationale preserved.

THE ADR HEADER RENDERED INSIDE THE BLOCKQUOTE. No blank line after the new "cite this as"
note, so lazy continuation swallowed Date, Decider, the whole Scope paragraph and four
Related links. Copied faithfully from views-models, which has the same bug.

AND MY "ZERO WRONG REFERENTS" AUDIT MISSED ONE, in a paragraph about citation precision:
ADR-013 §7(d) writes "their ADR-017" of views-models', bare, qualified only by an
antecedent two sentences earlier. Now vmo_017, and the claim reworded to what is true.

C-89's TWO ORPHANED DEFERRALS ARE FILED AS #265 rather than named and left. Declaring a
deferral ownerless and stopping there converts two compliant items into two
non-compliant ones — naming is not rehoming.

Also: the stale duplicate of C-97's corrected measurement ("33 across nine files") now
defers to C-97 for both the number and the counting basis.

Suite 422 passed / 2 skipped / 39 xfailed, ruff clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… existed

The previous commit said "a check now confirms every entry heading is preceded by
its predecessor's terminator". No such check was written. That is the same defect
this whole branch is about — a guarantee asserted in prose with nothing attached to
it (ADR-014 §1) — committed in the message correcting eleven instances of it. So the
check gets written rather than the claim retracted.

WHAT IT CHECKS. An entry heading follows a '---' rule and one blank line, or it opens
its section. That rule is the only thing marking where an entry stops; C-85's and
C-26's amendments landed on the wrong side of it and rendered as unheaded preambles
to C-84 and C-28. Every other structural check in this module splits on '### ', which
is precisely why none of them could see it.

MUTATION-PROVEN, on the second attempt. My first mutant inserted the amendment ABOVE
the rule and the check passed — correctly, because that is where an amendment belongs.
Planting the real shape (text between the rule and the heading, as C-85's was) fails
with the offending line number and the two lines that should have been the fence.

It also found four entries I had not: C-91, C-90, C-93 and C-82 each carried a stray
extra blank line from being moved into Resolved, giving '---' / blank / blank /
heading. Cosmetic, flagged as such in the last review, and now normalised — 109
entry headings, all conforming.

Suite 423 passed / 2 skipped / 39 xfailed, ruff clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ays ago

CI caught this, which is the point — the lock bump to views-pipeline-core 3.0.1 was
the one change in this PR that a local run cannot verify, because this machine
resolves an editable checkout reporting 2.3.0. The commit message said as much. CI
then failed on something else entirely.

WHAT FIRED. ADR-013's Erratum E3 claimed pipeline-core's editable-install fix — report
"unknown" rather than a stale version — was "not yet in any released version". A
tripwire was attached to that sentence precisely because it is a dated claim about
someone else's release history. It fired.

E3 WAS WRONG. views-pipeline-core 3.0.1 was uploaded to PyPI on 2026-08-11 13:40 UTC
and contains the fix. Verified at the tag rather than inferred from the version number:
at 3.0.0 _pipeline_core_version() is `return version("views_pipeline_core")` with no
editable detection at all; at 3.0.1 it reads direct_url.json, checks dir_info.editable,
and returns "unknown" when it is set. E3 now records the discharge and the release that
made it, and its operational note — that the set of runs producing "unknown" would
widen at the next release — is restated as something that has now happened rather than
something that will.

THE GUARD REPORTED TWO DAYS LATE, and that is registered as C-98. It observed OUR
installed distribution, so it could not see 3.0.1 until this repository's lockfile
moved to it. For two days E3 carried a false claim about a released artifact with every
check green. It caught this only because the bump and the release inspection landed in
the same change. Same shape as vpp_017 §7a from the other side: our pin is a fact we
own, but here it was standing in for pipeline-core's release feed, which is not ours,
not declared in the registry, and not an outcome we observe. The guard measured a proxy
and reported the proxy's date.

THE REPLACEMENT IS SMALLER ON PURPOSE. "In force for producers running 3.0.1 or later"
is not a claim a future release can falsify, so there is no expiry left to watch and
re-pointing the tripwire at 3.0.1 would be inventing one. The successor checks only
that E3 does not regain the superseded sentence and still names the release that
discharged it — the failure mode that remains is a revert or a bad merge.

Mutation-proven on three branches: restore the false sentence, un-name 3.0.1 within
E3's own bullet, rename the entry. Each fails on its own mutant and only on it. The
second mutant also found the check itself too loose — splitting on the bare strings
"Erratum E3" and "Erratum E2" spans about 600 lines, because §5 mentions E3 and the
header mentions E2, so either assertion could have been satisfied by unrelated text.
It now splits the Post-adoption record into dated bullets and takes E3's own.

Suite 424 passed / 1 skipped / 39 xfailed, ruff clean. Register 21 open / 77 resolved.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Polichinel
Polichinel merged commit 25ca25c into development Aug 13, 2026
4 checks passed
@Polichinel
Polichinel deleted the fix/pre-release-register-truth branch August 13, 2026 19:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant