Development record
the nine store enumeration checked one reader per store so rdi and dsp are assigned an answer their second reader contradicts
the nine store enumeration checked one reader per store so rdi and dsp are assigned an answer their second reader contradicts
Found by the itd-189 fix-delta ruthless review, which proved it by probe rather than by reading, and verified independently by the orchestrator before capture.
The enumeration added in b3e3d69c walks nine STORES and gives each ONE answer.
Two stores have a second reader that contradicts the answer they were given.
readingItemPosition (reading.go, the capture disposition rdi-N path) and
standingDispositionState (promote.go) both call parseFrontmatterAndBody,
which refuses a duplicated key by name. So:
rdiis listed as "keeps the first value". Itscapturereader REFUSES.dspis listed as "keeps neither". Itscapturereader REFUSES, which is a different answer again.- The
issrow's "the one store the refusal branch is true of" is therefore false, read as a claim about readers.
The codebase says so itself, one line above the second reader:
standingDispositionState's own comment opens "The third reader of a
disposition file" -- while the enumeration assigns that store one answer.
This is the FOURTH turn on the duplicate-key claim family, after iss-2608301519254418, iss-2608301656200729 and iss-2608301813253101. Each fix was correct and each was overtaken. The lineage is worth stating because it names the design fault rather than the instance:
- two message legs claimed a refusal that does not happen;
- the flag justifying them was false for one store;
- the fallback claimed a universal across stores;
- the enumeration that replaced the universal checked one reader per store.
Each fix moved the claim one level more specific and none of them made it CHECKABLE. That is the fault: an enumeration of another component's behaviour, written as prose in a doc comment, cannot fail. It goes stale silently and is believed because it is specific.
Remedy is therefore NOT a fifth prose correction. Make the enumeration executable -- a test that probes each reader and asserts what it does -- and reduce the comment to a pointer at it. A wrong row then fails a gate instead of misleading a maintainer. The emitted messages need no change: the reviewer confirmed they already say only what this rule's own scanner does, which is the one claim that holds regardless of any reader.
The same wrong enumeration is copied into the resolution: field of
iss-2608301813253101 in resolved/ and must be corrected there too.
Frontmatter
| id | iss-2608301901264848 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | major |
.abcd/work/issues/resolved/iss-2608301901264848-the-nine-store-enumeration-checked-one.md
open on GitHub ↗ · commit history ↗
mentions6
- iss-2608301519254418two message legs tell the author the reader refuses and skips their record when the admission reader counts it and the surprise store has no reader at all
- iss-2608301656200729readerFailsClosed is false for the adr store on the duplicate key leg and the record that resolved it claims all four stores were verified
- iss-2608301813253101the duplicate key fallback claims every record surface keeps the first value while the disposition reader discards both and reports the record illegible
- iss-2608301901260678the refusal tells an issue author the record is skipped by every issue surface while the changelog derivation reads resolved records leniently
- iss-2608301918362294a prose enumeration of where a value is copied cannot be maintained and has now been wrong four times on two different symbols
- itd-189What the widening reading proposes is admitted or declined on the record — grounds on admission, dispositions on declines, and surprises as their own entries