docs: finish ADR 0179 and 0176, audit the ADR 0013 companion, and file #1516 - #1008
Conversation
… every number-keyed enumeration
ADR 0013 legitimately carries two files: a declared companion, sanctioned by
docs/adr/README.md and named inside its own index row. The convention is
correct and this item does not propose renumbering it, splitting the row, or
retiring the convention.
The gap is a SCOPE gap, not a logic gap. ledger_check.py's check_adrs already
models companions correctly, and its own comment says so. But it runs over
added_files() at commit time, so nothing ever enumerates the EXISTING corpus
and asserts every ADR file is reachable from the index. The declaration
therefore lives as a basename inside the prose of a table cell, and any tool
keyed on the ADR NUMBER gets one file per number and drops the other silently.
ls docs/adr/[0-9]*.md | wc -l -> 173 (files)
grep -c '^| \[0' docs/adr/README.md -> 172 (index rows)
That difference of one is the companion, and no check reads it.
IT HAS FIRED TWICE HERE. Two independent multi-agent audits swept all 172 ADR
numbers for build-state truthfulness; both graded the 0013 primary and neither
opened the companion. Both had the README available. The note did not help,
because the loss happened before any agent read anything: the batch list was
built by taking each filename's first four characters and deduplicating, which
collapsed two files into one number. The defect is in the SHAPE of the
enumeration, which is why documenting it harder is not the fix.
TWO CLAIMS WERE CORRECTED DURING DRAFTING, both by measurement:
1. The first draft said no check knows about companions. FALSE --
ledger_check.py:432 handles them and explains itself. The item now credits
that and scopes itself to what the gate does not do.
2. A drafted constraint said three legacy ADRs still ship with no index row,
citing that gate's own comment. Measured: 0077, 0079 and 0080 each return
1 row today (control: 0078 also 1). LEDGER-GATE.md records that they were
restored in the change that added the gate. The comment states a
historical reason, not current state, so a corpus-wide check needs no
exemption list -- the companion is the only file it would flag.
Open-count control per docs/LEDGER-GATE.md: items 492 to 493, open 303 to 304,
closed 189 unchanged.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…DR 0013 companion nothing had opened
Closes the two corrections left unapplied when the earlier batch landed, and
covers the one ADR document in the corpus that no pass had ever read.
0179 -- the record decided `_RESOLVE_INTERVAL_S = 5.0` and the tree ships 15.0.
Attempts 1 and 2 were rejected; attempt 2 for asserting the constant was BORN
at 15.0 and that this repository never assigns 5.0. That was false, and the
orchestrator settled it before this attempt rather than sending the same
question round again:
git log --all --oneline -S "_RESOLVE_INTERVAL_S = 5.0" -- harness/load/connscale/probe.py
227568a re-resolve the FD probe's subtree on TIME, front-loaded (#1357)
51ead13 the re-walk interval equalled the walk timeout, so the
amortisation was worth zero (#1357)
The clone IS shallow (16 grafts), so that instrument was paired with a control
on the value that ships, which returned many commits. 5.0 really shipped and
was really raised: it EQUALLED `_PROBE_TIMEOUT_S`, `_resolve_pids` stamps
`_last_walk_at` BEFORE the walk, so a walk that spent its whole budget was due
again the instant it returned and the probe re-walked every tick. PR 669
squashed both commits, landing a Decision reading 5.0 beside a probe.py reading
15.0 -- the record reached main already disagreeing with the code beside it.
The amendment says so, keeps both superseded values quoted in place, and fences
off the post-fix measurements that were taken at 5.0 so nobody reads them as
measured at 15.0.
0176 -- Status and index row both said the engine change was still being built;
D1, D2 and D3 all ship and BACKLOG #343 is banner-marked SHIPPED 2026-08-26.
Attempt 2 was rejected for a SPLICE DEFECT rather than a wrong fact: its
old_string stopped one clause short, leaving a trailing "(NSSM captures it to
files)" whose nearest antecedent became a dead line anchor, so the corrected
sentence said NSSM captures an anchor to files. A new false clause inside a
correction about anchor precision. This attempt swallows the parenthetical and
rewrites the clause whole. Every edit in this commit carries a recorded splice
check -- the text either side of the cut, read as a joined sentence.
ADR 0013 companion -- `0013-increment-2-reingress-design.md` is a declared
companion, sanctioned by the README and named in its own row. Two audits over
all 172 ADR NUMBERS each graded the primary and never opened it, because a
number-keyed enumeration yields one file per number. Filed as BACKLOG #1516.
Audited now, in both directions: all six BUILT items are built AND wired, not
mention-only. One under-claim found -- the Status bullet scopes
`ingress_handoff` to "(Q3/Q8, SQLite + Postgres)" where the tree also has SQL
Server. Corrected with a dated amendment; the superseded phrase is kept.
So the coverage hole cost one narrow under-claim, not a hidden over-claim.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… which side has the addition PR 1007 landed #1513-#1515 at the tail this branch adds #1516 to, and PR 809 landed while this was open. Two conflicts, resolved differently because they want different sides. docs/BACKLOG.md: both blocks kept, main's #1513-#1515 first so the file stays in numeric order, then this branch's #1516. Disjoint, both wanted. docs/adr/README.md: two rows, and neither side is a superset of the other. Row 0179 takes THIS BRANCH's side, which carries its #1357 amendment recording that the row and the ADR both read `_RESOLVE_INTERVAL_S = 5.0` while the tree ships 15.0; main has nothing there. Row 0180 takes MAIN's side, which records that the hvac scope-out expired on 2026-09-03 now that the test leg installs [vault] -- that is PR 809, merged minutes ago, and this branch predates it. Verified rather than assumed: 495 ledger items on main, 493 on the branch, 496 resolved; nothing lost from either parent, no heading duplicated. 172 ADR rows on main and 172 resolved. Both corrections present in the merged file. No conflict markers. CRLF preserved in both files. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Lander: recording three re-runs, as The assertion says it outright, so I am obeying it rather than grinding:
The record
A different test each time, 2 failed against 3589 passed on the last one. That is the flake's signature, not a defect's: a real fault picks the same test. This PR changes One thing here refines #1304, and it contradicts that item's own diagnostic#1304's failure message prints So the gate started, ran, and produced its decision -- and then the process did not exit inside 45 seconds. That is a different sub-shape from "never launched", and the diagnostic as written would lead a reader to the wrong one. Counted in this job's log: 6 banner occurrences, and the non-empty-stdout form appears among them. Worth attaching to #1304, which currently records the rate but not this distinction. Not re-running againThe rate on this leg is 33 percent measured across all branches including pushes to |
|
CI failed while this pull request was in the merge queue, so the queue ejected it. Its own head can still be green: the queue revalidates the merge, and the path gates that skip on a pull request run there. Read the run before retrying. https://github.com/MEFORORG/MessageFoundry/actions/runs/34416407434 |
|
Evicted from the merge queue by a known flake, and re-enqueued. The batch That is the DICOM association pacing timing test, measured at roughly 1.2% across the fleet and filed. It compares two wall-clock arms on a shared runner; when the control arm is itself slowed the difference collapses and the assertion reads as "pacing did nothing". Here the unpaced arm came in slower than the paced one. Why it is not this PR. 1008 changes five files and every one is documentation: Nothing under Re-enqueued once. If it evicts again on the same job I will stop and treat it as a real signal rather than keep paying for runs. |
Closes out the ADR record audit. Follow-on to #1003 and #1006, both merged.
The two corrections that needed three attempts each
Neither was rejected for a wrong finding. Both were rejected for a defect introduced by the correction itself, which is the pattern this whole exercise kept surfacing.
ADR 0179 — the record decided
_RESOLVE_INTERVAL_S = 5.0; the tree ships15.0. Attempt 2 was rejected for asserting the constant was born at 15.0 and that this repository never assigns 5.0. That was false, so I settled it before dispatching attempt 3 rather than sending the same disputed question round again:This clone is shallow (16 grafts), so that instrument was paired with a control on the value that ships, which returned many commits. 5.0 really shipped and was really raised: it equalled
_PROBE_TIMEOUT_S, and_resolve_pidsstamps_last_walk_atbefore the walk, so a walk that spent its whole budget was due again the instant it returned — the probe re-walked every tick and the amortisation was worth zero on the one path it bounds.The sharpest detail is how the record went stale: PR 669 squashed both commits, landing a Decision reading 5.0 beside a
probe.pyreading 15.0. The record reachedmainalready disagreeing with the code beside it. The amendment says so, keeps both superseded values quoted in place, and fences off the post-fix measurements that were taken at 5.0 so nobody reads them as measured at 15.0.ADR 0176 — Status and index row both said the engine change was still being built; D1/D2/D3 all ship and BACKLOG #343 is banner-marked SHIPPED 2026-08-26. Attempt 2 was rejected for a splice defect, not a wrong fact: its
old_stringstopped one clause short, leaving a trailing(NSSM captures it to files)whose nearest antecedent became a dead line anchor — so the corrected sentence said NSSM captures an anchor to files. A new false clause inside a correction about anchor precision. This attempt swallows the parenthetical and rewrites the clause whole, and every edit here carries a recorded splice check: the real text either side of the cut, read as a joined sentence.The ADR 0013 companion, audited for the first time
0013-increment-2-reingress-design.mdis a declared companion — sanctioned by the README, named in its own row. Nothing is wrong with the convention and nothing is renumbered here.The problem is that two audits over all 172 ADR numbers each graded the primary and never opened it, because a number-keyed enumeration yields one file per number. My own batch list was built by taking each filename's first four characters and deduplicating, which collapsed the two files before any agent read anything. Filed as #1516 (in this PR).
Audited now, in both directions. All six items the companion claims BUILT are built and wired, not mention-only —
Stage.RESPONSEwith lane-key support across five SQLite sites and the Postgres helper,Loopback()/LoopbackSourceregistered,reingress_toon six connector factories (wider than the ADR's own Q1 text), and real cross-registry validation. One under-claim found: the Status bullet scopesingress_handoffto "(Q3/Q8, SQLite + Postgres)" where the tree also has SQL Server. Corrected with a dated amendment.So the coverage hole cost one narrow under-claim, not a hidden over-claim. Worth knowing before sizing #1516.
Checks
pre-commit, both commitsbacklog_status_check.py --quietlink_check.py docscontrol_char_check.py15.0;probe.pyships15.0. The two remaining5.0mentions are the superseded value quoted inside its own correction, per the append-only ruleruff/mypy/pytestRebuilt onto current
main: #1006 squash-merged mid-run, so its commits are not ancestors and the old branch would have re-proposed merged work.One process note worth recording
Partway through this run a subagent wrote its edits directly into the working tree rather than returning them as data for review. My tree held 89 lines of unreviewed change that a careless
git commit -awould have taken. It was caught because a peer session measured my dirty file and told me. I saved the patch, reverted, and re-applied only the checker-approved edits — which is what landed here.Giving workflow agents shell access means "return edits as data" is a request, not a constraint.
🤖 Generated with Claude Code