Development record
N lanes in flight that grow the reading corpus are N serial recalibrations of one file, .abcd/config/reading-presets.json, because every lane's recalibration rewrites the same four fields per position and conflicts with every other lane's, and the merge queue's update-branch cannot merge them. So two such PRs cannot be in the queue together: the second goes BEHIND when the first merges and is stuck on a conflict the forge cannot resolve. The pilot run sequenced its lanes by hand around this: lane C recalibrated three times (at its own tip, after PR 648, after PR 649) and lane D twice, at fifteen minutes and sixty to eighty thousand tokens each, and the last lane closed a full session later than its code was ready. Sibling of iss-2609210748032488 (the recalibration is a hand-run recipe): that record wants the verb; this one records that even with the verb the recalibration must happen once, on the integration tip, not once per lane — the calibration belongs to the merge, as a queue-side step or a single post-merge commit, not to the branch. For the big run's file: lanes that touch internal/core/intent, internal/core/lint, internal/core/capture or their surface pages cannot be queued together.
N lanes in flight that grow the reading corpus are N serial recalibrations of one file, .abcd/config/reading-presets.json, because every lane's recalibration rewrites the same four fields per position and conflicts with every other lane's, and the merge queue's update-branch cannot merge them. So two such PRs cannot be in the queue together: the second goes BEHIND when the first merges and is stuck on a conflict the forge cannot resolve. The pilot run sequenced its lanes by hand around this: lane C recalibrated three times (at its own tip, after PR 648, after PR 649) and lane D twice, at fifteen minutes and sixty to eighty thousand tokens each, and the last lane closed a full session later than its code was ready. Sibling of iss-2609210748032488 (the recalibration is a hand-run recipe): that record wants the verb; this one records that even with the verb the recalibration must happen once, on the integration tip, not once per lane — the calibration belongs to the merge, as a queue-side step or a single post-merge commit, not to the branch. For the big run's file: lanes that touch internal/core/intent, internal/core/lint, internal/core/capture or their surface pages cannot be queued together.
Deferral 2026-09-29
Deferred past v0.11.1: The product thinker's ruling M33 of 2026-09-23: plan it next cycle with its sibling iss-2609210748032488 (a reading calibrate verb), moving calibration from each lane to one step per merge. Runs recalibrate by hand at the integration tip meanwhile (1e0e6f5b3). Owed: that planning interview, which opens on one question: does the once-per-merge calibration run as a merge-queue job or as a post-merge commit on main?
Remedy grounds (2026-09-29)
- Why: the record places calibration on the merge, not the branch; the two answers differ in who writes the new window, so each is stated with its writer, and neither is picked.
- Sources (consulted 2026-09-29): a merge queue runs required checks on its temporary gh-readonly-queue branch through the merge_group event (https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue), so a queue job judges a merged tree rather than adding a commit to it.
- Rejected: a bot-authored post-merge commit, which the attribution gate refuses by design.
Frontmatter
| id | iss-2609211105023379 |
|---|---|
| type | issue |
| lifecycle | open |
| severity | major |
.abcd/work/issues/open/iss-2609211105023379-n-lanes-in-flight-are-n-serial.md
open on GitHub ↗ · commit history ↗
mentions1
- iss-2609210748032488The cold-reading window eval fails on every branch that grows the intent, capture or lint surfaces, and the recalibration it names is a hand-run recipe no verb performs. TestEveryCommittedEntryFitsItsDeclaredWindow (evals/coldreading_window_test.go, in the smoke lane, so in make preflight and the pre-push hook) re-measures each committed preset entry against the tokens_est it declares, and the widening and detection objects list internal/core/intent, internal/core/lint, commands/intent.md and commands/capture.md by path, so any change on the intent lifecycle moves the measurement; the declared margin is one per cent, about nine thousand tokens on a nine-hundred-thousand-token object, which one lane consumes. Measured in the pilot run of 2026-09-20: main at the pilot base 891623 (widening) and 900660 (detection); lane B alone 897023; lane B merged with lane A 900584, 584 over its declaration; lane C alone 905106 and 914143, over both. The remedy the eval names (re-measure by dry run, move the declaration to the smallest ten-thousand boundary with at least one per cent headroom, restamp measured_tokens_est, measured_bytes and measured_at, commit with the reason) has now been run by hand four times (twice on 2026-09-15, precedent fc5c7e27; twice in the pilot), each time by a fresh agent at about fifteen minutes and eighty thousand tokens. Wanted: a verb (working name: reading calibrate) that performs the stated rule for every position and prints the commit body, so a merged tip is recalibrated by one command; the smaller rung is a script under scripts/. Separately for the product thinker: whether one per cent is the right margin when a single lane's text exceeds it.