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
{{ message }}
Repository navigation
C-89's two orphaned deferrals: relocate the leak guards, and point the rename proof at its subject #265
Two deferrals recorded under register C-89 lost their owner when the issue they were routed to closed. Neither is urgent; both are small; and an ownerless deferral is not a deferral (ADR-014 §4), which is the reason this exists rather than another paragraph in the register.
1. The leak guards still live in the wrong file
tests/test_redaction_guard.py is this repository's home for "what stops us leaking". The coordinate-value guards live in tests/test_env_declaration.py instead, and tests/test_env_declaration.py::test_the_environment_refusal_logs_names_and_never_values already points readers at the redaction guard for "the wider rule" — so the split is visible in the code and unresolved.
The deferral's trigger was "when #243 finishes touching tests/test_env_declaration.py".#243 closed 2026-08-12. The trigger fired; the move did not happen.
Why it was deferred and why that still partly holds: moving code while fixing bugs in it is how the next defect arrives, and #242–#243 were fixing bugs in exactly these guards. That reason has now expired — the guards have been stable since #243.
Scope: move the value-scan guards and their fixtures into tests/test_redaction_guard.py, or decide deliberately that they stay and record why. Either outcome closes this half.
2. A proof that re-types its subject instead of driving it
tests/test_env_declaration.py::test_the_drift_check_would_catch_a_rename rebuilds the checked function's comparison with its own comprehension rather than calling it. Blank the subject's assertions and this proof stays green.
This is the exact defect its two siblings had and had repaired — the rotation proof and the table-partition proof both now drive the real function. This one was routed to #243 and #243 closed without it.
Scope: point it at the function it names, the way test_the_drift_check_is_silent_on_a_row_this_partner_does_not_read and test_the_drift_check_fires_when_a_row_this_partner_reads_rotates were pointed in #245/#246 — monkeypatch the readers, call the real check. Mutation-prove by neutering the subject.
Acceptance
The leak guards are either relocated to tests/test_redaction_guard.py or their staying is recorded with a reason.
test_the_drift_check_would_catch_a_rename fails when its subject's assertions are neutered — demonstrated, not asserted.
Neither is a live defect. The first is organisation; the second is a proof that is weaker than its siblings, in a cluster where the other two are now strong. Register C-89, C-82.
The rename proof now drives its subject. The comparison the gated check ran inline is _name_and_class_drift, called by both. Mutation-proven: making it return ([], {}) fails the proof for both partners, where before it stayed green. It also gained an assertion that the report names both sides of a mismatch — expected and declared — since a reader who cannot tell which moved cannot act on it.
The relocation is answered no, with the reason recorded. The coordinate-value scan stays in test_env_declaration.py: its subject is _EXPECTED_NAMES, derived from the partner declarations that are that module's substance, and separating a guard from the declaration it guards to make a filename read better trades a real coupling for a filing convenience.
What was actually misfiled moved instead — registry_at/registry_current/rows are the shared reader, not this package's env declarations, so their refusal tests are now tests/test_seam_registry.py. 109 lines of test code out; the module went 1503 to 1406.
Review of my own change caught two false claims in it: "115 lines out" (no command produced that number) and a claim that the sibling defects had been repaired by the same extraction — they were not, they were repaired by driving the real check under monkeypatch, and I had used that non-existent precedent as the licence to extract. The extraction still stands, for a reason now stated honestly. Register C-89 carries it.
Activity
Pre-release truth pass: a fired trigger, a permission read as a prohi…
#265: a proof that drove a copy of its subject, and a boundary that w…
Polichinel commentedon Aug 14, 2026
Both deferrals discharged in #274 (
0d38a71).The rename proof now drives its subject. The comparison the gated check ran inline is
_name_and_class_drift, called by both. Mutation-proven: making it return([], {})fails the proof for both partners, where before it stayed green. It also gained an assertion that the report names both sides of a mismatch — expected and declared — since a reader who cannot tell which moved cannot act on it.The relocation is answered no, with the reason recorded. The coordinate-value scan stays in
test_env_declaration.py: its subject is_EXPECTED_NAMES, derived from the partner declarations that are that module's substance, and separating a guard from the declaration it guards to make a filename read better trades a real coupling for a filing convenience.What was actually misfiled moved instead —
registry_at/registry_current/rowsare the shared reader, not this package's env declarations, so their refusal tests are nowtests/test_seam_registry.py. 109 lines of test code out; the module went 1503 to 1406.Review of my own change caught two false claims in it: "115 lines out" (no command produced that number) and a claim that the sibling defects had been repaired by the same extraction — they were not, they were repaired by driving the real check under
monkeypatch, and I had used that non-existent precedent as the licence to extract. The extraction still stands, for a reason now stated honestly. Register C-89 carries it.fix(release-guard): scope it to this line of history, and two false c…
Release prep 1.1.1 — the bump, and the release guard made live in CI (#…