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
swapped's first field is the LOG's spelling, not the register row's — Amendment 15's canonical-name claim is made where the register is not read #55
Found by Copilot round 2 on #47 (lanes-edit.sh:4917), against code that landed on main with Amendment 15 (#41, 8345d2f) and therefore predates that pull request's diff — filed rather than folded into it.
The claim and the code
swapped_candidates folds each lane to one case for the "which line is this lane's LAST" decision (Amendment 15) and keeps the original spelling beside it:
{ k =tolower($2); p = pos($10, $11)
if (!(k in mp) || p >= mp[k]) {
mp[k]= p; … nm[k]=$2 } }
$2 is the log line's own lane field. The printf then emits nm[l] as the row's first field and inside the pickaxe key, under a comment that says:
nm[l] AND NEVER l (Amendment 15, 8345d2f): the key is the lane folded to one case and nm is the spelling the register row carries, which is the one a caller of this output hands back to a read.
It is not the register row's spelling. It is the spelling of the last PAUSED … swap; line in that lane's own object log, and the two differ exactly when Amendment 15 exists to help: the suite's own repoWin-1 shape has a repoWin-1 ROW and a repowin-1 EVENT, so swapped Eagle hands callers repowin-1.
Why it matters
swapped is the swap-record rung that lane-handoff, restart and the launcher fall to when nothing else binds the window, and its first field is taken as the lane name. Each of those now canonicalises its <lane> through canon_lane before it reads or writes, so the consequence today is one extra resolution rather than a wrong write — but the output's own contract says the field is canonical, and a reader that believes it is not wrong to.
The act
Either resolve each folded key through the register before rendering it (the resolver is canon_lane, and swapped_candidates already reads the register's own text for the workstation filter), or change the field's contract in both the comment and docs/README-lanes.md to say it is the LOG's spelling, and make each caller's canonicalisation the documented step.
A case in tests/test_lane_helpers.sh: a lane whose row is repoWin-1 and whose PAUSED event is spelled repowin-1, asserting what swapped prints in its first field.
CLAIMED — lane openRepoTools-3, session 4135b2c9-34a6-47e3-a156-5adebb632fae@Eagle, 2026-09-14T21:31:11Z, for #55
Logged in lanes/log/openRepoTools-3.md at 58602dcfd9e2bc6a7d3433cf03d00d1ecd6b5a38.
The three reads (lane-collision-protocol Rule 1):
1. existing `CLAIMED —` comments on opensoft/openRepoTools#55:
none
2. `gh pr list --repo opensoft/openRepoTools --state all --search "#55"`, kept where the row or its body names `#55`:
none
3. `git ls-remote --heads git@github.com:opensoft/openRepoTools` branches naming `55` as a whole token:
none
TAKEOVERopenRepoTools-3 — lane openRepoTools-5, session 0d83dca2-c18c-4bb0-99ce-896e6cafea02@Eagle, 2026-10-11T16:51:38Z, for #55
Logged in lanes/log/openRepoTools-5.md at 5de8f0432a17fc15d4a558c99abd01c2dd9db0f6 (takeover of the stale claim held by lane openRepoTools-3).
The three reads (lane-collision-protocol Rule 1):
1. existing `CLAIMED —` comments on opensoft/openRepoTools#55:
6:CLAIMED — lane openRepoTools-3, session 4135b2c9-34a6-47e3-a156-5adebb632fae@Eagle, 2026-09-14T21:31:11Z, for opensoft/openRepoTools#55
13:1. existing `CLAIMED —` comments on opensoft/openRepoTools#55:
2. `gh pr list --repo opensoft/openRepoTools --state all --search "#55"`, kept where the row or its body names `#55`:
47 Amendment 17 tooling: a handoff is the swap under one name — `lane-handoff` on PATH, `/handoff` with `/swap`, `/lane-swap` and `/ctx`, the record naming the agent and its transcript, and `lane-start --agent` resuming a lane from any agent the table carries feat/amendment-17-handoff-ctx MERGED
3. `git ls-remote --heads git@github.com:opensoft/openRepoTools` branches naming `55` as a whole token:
none
Activity
brettheap commentedon Sep 14, 2026
CLAIMED — lane openRepoTools-3, session 4135b2c9-34a6-47e3-a156-5adebb632fae@Eagle, 2026-09-14T21:31:11Z, for #55
Logged in
lanes/log/openRepoTools-3.mdat58602dcfd9e2bc6a7d3433cf03d00d1ecd6b5a38.The three reads (lane-collision-protocol Rule 1):
A pane is never respawned over a record that is only part written, a …
Amendment 17 tooling: a handoff is the swap under one name — `lane-ha…
brettheap commentedon Oct 11, 2026
TAKEOVERopenRepoTools-3 — lane openRepoTools-5, session 0d83dca2-c18c-4bb0-99ce-896e6cafea02@Eagle, 2026-10-11T16:51:38Z, for #55
Logged in
lanes/log/openRepoTools-5.mdat5de8f0432a17fc15d4a558c99abd01c2dd9db0f6(takeover of the stale claim held by lane openRepoTools-3).The three reads (lane-collision-protocol Rule 1):
`swapped` names a lane by the register row's spelling, not the log fi…
`swapped` names a lane by the register row's spelling, not the log fi…