Development record
record-lint's prose_citation_resolves refuses a record id whose record exists, minted, on another open pull request's branch and not yet on main: on 2026-11-03 a decision citing dcn-2611031615094092 (in #1381, queued) failed the handover PR's preflight, and the easy way past was to cite the ruling in words, which drops the id and with it the trace (the product thinker ruled ids must always be used). The forward-looking marker keeps the id, but it was written for a record not minted yet, and nothing removes it once the record reaches main, so stale markers accumulate and the next reader cannot tell a pending citation from a dead one. <!-- record-lint: forward-looking -->
record-lint's prose_citation_resolves refuses a record id whose record exists, minted, on another open pull request's branch and not yet on main: on 2026-11-03 a decision citing dcn-2611031615094092 (in #1381, queued) failed the handover PR's preflight, and the easy way past was to cite the ruling in words, which drops the id and with it the trace (the product thinker ruled ids must always be used). The forward-looking marker keeps the id, but it was written for a record not minted yet, and nothing removes it once the record reaches main, so stale markers accumulate and the next reader cannot tell a pending citation from a dead one.
The product thinker added (2026-11-03) that a record must be able to reference another that is not yet committed or merged: a decision written in one change often rests on a ruling recorded in another change still in review, and the reference has to carry the id from the start rather than be filled in later by hand. So the gap is also a way to cite a pending record by id that the gates accept now and check again once that record reaches main: resolved then, or reported as a reference to a record that never landed.
And where it is enforced (the product thinker, 2026-11-03): a pending reference holds nothing up when it is written, nor while the record it names is still in review; the release cut is the gate. launch refuses a cut while any reference in the tree names a record that has not reached main (fix it: land that record, or correct the reference), and a pending marker whose record has reached main is reported for removal at the same point, so no release ships a citation to a record that never landed.
2026-11-04: #1399, the change that resolves this, is held from landing on its review's findings: record-lint would need the forge at blocker severity once a citation points at an open pull request; a writer discards what it could not read; a forward-looking marker in a code span excuses every id on its line; and six baseline entries pass the gate. Once it lands, its cut refuses until the parked record iss-2609240203342061 cites has landed or that reference is corrected.
Frontmatter
| id | iss-2611031731385043 |
|---|---|
| type | issue |
| lifecycle | open |
| severity | minor |
.abcd/work/issues/open/iss-2611031731385043-record-lint-s-prose-citation-resolves.md
open on GitHub ↗ · commit history ↗
mentions2
- dcn-26110316150940922026-11-03 — The product thinker's rulings for an experiment testing a long autonomous run (given 2026-11-03): during the experiment a release is cut whenever every gate passes, and any refusal waits for the product thinker; each API key has a hard monthly cap and no separate daily limit; sessions use the person's subscriptions first and move to a key when a subscription window reaches 95%, returning once it resets; the run may use the API keys the person has named to it; agents may plan a draft whose open questions each have one defensible answer on the record, and hold every other draft for the person; and the run keeps the person informed through one private daily digest page (what merged, what stalled, spend per key, what waits for them).
- iss-2609240203342061The \A anchor in the scanner's adjacencyProbe is untested: with the anchor removed and the fixed probe window kept, the whole scanner package passes (confirmed by the gallop lane's second implementer and by its review, item 4). scanAllPatterns rejects any probe match whose start is not 0, so an unanchored probe returns no wrong result; the window still bounds each attempt, so the loss is a constant-factor cost (each attempt searches its whole window for a leftmost match instead of failing at byte 0, up to 512x per attempt), not a wrong finding. No cost guard sees it, because the count guards assert growth ratios and a constant factor leaves every ratio unchanged. This duplicates the parked iss-2609021205449871, which is not on main: whoever lands the parked sweep closes one of the pair as a duplicate of the other. <!-- record-lint: forward-looking -->