Skip to content

Ten hardenings Copilot rounds 4–6 raised on #47, filed rather than taken: the test lock's ownership, three signal/status gates, a deferred command that drops --agent, and the handoff skill catching up with its command #72

Open

Description

@brettheap

Copilot reviewed #47 four more times (e8d67a2, 5c162df, d062e72) after its round-3 findings were taken, and raised ten further ones. Three were taken in that pull request — the --in-process help text that still carried the instruction Addendum 1 (j) removed, the unrefused --late --in-process contradiction, and a comment that claimed a refusal canon_lane does not make. These ten are filed, with what each would cost, because the pull request is green on all four CI jobs and every one of them is a HARDENING of an act that already refuses rather than a defect that writes something wrong.

They are listed in the order a fixer would take them.

Cheap, and each needs one case

  1. tests/run.sh:161 — the mkdir lock enters the suite even when it cannot write its own pid. printf '%s\n' "$$" > "$LOCKDIR/pid" || : swallows the failure, and a waiter then reads the missing pid as stale and claims the directory after three polls. Treat failing to record ownership as a startup refusal.
  2. tests/run.sh:167 — cleanup is not ownership-safe. After a waiter has atomically claimed a stale $LOCKDIR, the old holder's EXIT trap can still rm -rf that path — and if the waiter has re-made it, the old process deletes the new holder's lock. The trap should verify the directory still carries this pid before removing it.
  3. lane-handoff:669 — the INT/TERM traps clean up and RETURN, so an interrupted handoff carries on into the refresh and the record writes with its writers snapshot already deleted. The same fix tests/run.sh took in round 3: clean up and exit, keeping the plain EXIT cleanup.
  4. lane-handoff:926 — a failed log PAUSED does not stop the two register writes after it. record_written stays 0 and the LANES.md line and the row flip are attempted anyway, so a plain handoff can return 0 having flipped a row to PAUSED with no object-log record behind it. (--restart and --exit already refuse on that gate; it is the plain form that carries on.)
  5. lane-start:2582 — the deferred first-act command drops --agent. Where no uuid is knowable the command PRINTS the lanes-edit.sh log … line for the session to run itself; for a lane resumed with an explicit --agent, lane-agent cannot recover that choice from the record, so a person following the printed line writes the first stamp with the default launcher.

Larger, and each is a judgement as much as a fix

  1. lane-handoff:749 — a multi-line why reaches the top block before lanes-edit.sh validates the event text. A newline can write a malformed prompt (including an early --- history marker) and the PAUSED event is then refused, leaving the handoff refreshed and the record not written. Refusing a multi-line why at the flag is the cheap half; whether the handoff should be written before the record is the question underneath it.
  2. lane-handoff:793 — the refreshed handoff is written with cat … > "$file", which truncates before it writes: a cat that fails part-way leaves a mixed file even though handoff_written stays 0. A staged write plus a rename would be atomic, but the redirect is deliberate — it FOLLOWS the estate's handoffs symlink, which a rename does not.
  3. skills/handoff/SKILL.md:68, :81 — the skill still treats every exit 2 as "no answer", where the command now tells canon_lane's Amendment 15(d) refusal apart from an old helper's unknown-subcommand 2 (taken in 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 #47 round 2). The skill is the act for a session that has no lane-handoff on PATH, so the two should agree.
  4. skills/handoff/SKILL.md:502 — the skill's manual path ignores the status of its own log PAUSED, which is finding 4 one document over.
  5. skills/handoff/SKILL.md:618 — the skill's /ctx procedure runs whichever lane is first on PATH, with none of the check the command makes. That check is itself The /ctx respawn recognises this estate's lane by a string in its head, which is a heuristic and not provenance #65's subject: what the command has is a content heuristic and not provenance, so the skill should gain whatever The /ctx respawn recognises this estate's lane by a string in its head, which is a heuristic and not provenance #65 settles on rather than a copy of today's.

Lane: openRepoTools-3.

Activity

  1. brettheap commented on Sep 15, 2026

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoTools-3, session 4135b2c9-34a6-47e3-a156-5adebb632fae@Eagle, 2026-09-15T00:08:25Z, for #72

    Logged in lanes/log/openRepoTools-3.md at 72ccf8eb66b7f583013a9508145054b48c93e656.

    The three reads (lane-collision-protocol Rule 1):

    1. existing `CLAIMED —` comments on opensoft/openRepoTools#72:
       none
    2. `gh pr list --repo opensoft/openRepoTools --state all --search "#72"`, kept where the row or its body names `#72`:
       none
    3. `git ls-remote --heads git@github.com:opensoft/openRepoTools` branches naming `72` as a whole token:
       none
    
  2. brettheap commented on Oct 13, 2026

    @brettheap
    ContributorAuthor

    TAKEOVERopenRepoTools-3 — lane openRepoTools-5, session 0d83dca2-c18c-4bb0-99ce-896e6cafea02@Eagle, 2026-10-13T18:19:21Z, for #72

    Logged in lanes/log/openRepoTools-5.md at 9861e257e304e113ea7b1e747e1811c300f8a811 (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#72:
    6:CLAIMED — lane openRepoTools-3, session 4135b2c9-34a6-47e3-a156-5adebb632fae@Eagle, 2026-09-15T00:08:25Z, for opensoft/openRepoTools#72
    13:1. existing `CLAIMED —` comments on opensoft/openRepoTools#72:
    2. `gh pr list --repo opensoft/openRepoTools --state all --search "#72"`, kept where the row or its body names `#72`:
    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 `72` as a whole token:
       none
    
  3. brettheap commented on Oct 13, 2026

    @brettheap
    ContributorAuthor

    RELEASED — lane openRepoTools-3, session 83619980-06bb-4469-ae73-2a8c5e61981a@Eagle, 2026-10-13T18:23:42Z, for #72 — Brett Heap 2026-10-11 gave #28-#89 to lane openRepoTools-5 (its RULED line of 16:19:19Z); lane 3 holds no live work on this number

  4. brettheap commented on Oct 13, 2026

    @brettheap
    ContributorAuthor

    Lane openRepoTools-5: where the ten items stand at main f87fd5a. This issue stays OPEN.

    Struck, on Brett Heap's word, recorded in lane 5's register log as a RULED line at 2026-10-11T16:5xZ, verbatim: "Keep R-A11-11".

    • Item 4 (a failed log PAUSED does not stop the register writes after it) and item 9 (the skill's manual path ignoring its own log PAUSED status) are by design. A failed log PAUSED still flips the row: R-A11-11 (Amendment 11 Addendum 4 ruling 11), "a swap is never left unwritten". lane-handoff:2278-2317 writes the LANES.md line and the row whether or not the object-log line was written (:2286-2288 cites it), and the skill's manual path says the same (skills/handoff/SKILL.md:549-550, :599).

    Done:

    Still open:

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