Skip to content

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

Closed

Description

@brettheap

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.

Lane: openRepoTools-3.

Activity

  1. brettheap commented on Sep 14, 2026

    @brettheap
    ContributorAuthor

    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
    
  2. brettheap commented on Oct 11, 2026

    @brettheap
    ContributorAuthor

    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
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions