Skip to content

The cross-profile transcript-holder scan tests only kill -0, so a recycled pid refuses a lane the estate's one liveness contract would let through #56

Closed

Description

@brettheap

Found by Copilot round 1 on #47 (lane-start:1725), on the live_holders_of_id this estate gained with Amendment 17 adoption act 6 (the transcript follows the lane). The read is fail-closed, so the cost is a refusal and never a corruption — which is why it is filed rather than held back.

The two contracts

lanes-edit.sh has ONE liveness contract and states it in as many words (record_is_live, lanes-edit.sh:2469): a record is live when its status is not ended, its pid answers kill -0, and /proc/<pid>/stat field 22 still equals the procStart the record wrote down — the third so that a RECYCLED PID cannot hold a name.

lane-start's new scan needs a different question answered — "is any live process, in ANY profile, holding this transcript id" (Amendment 18(h)) — and live-holder answers per LANE, so the scan was written beside it:

    case "$lho_blob" in *"\"sessionId\":\"$lho_id\""*) : ;; *) continue ;; esac
    lho_pid="$(printf '%s' "$lho_blob" | grep -o '"pid":[0-9][0-9]*' | head -n1 | sed 's/.*://')"
    [ -n "$lho_pid" ] || continue
    kill -0 "$lho_pid" 2>/dev/null || continue

One of the three tests, not three. An ENDED record whose pid has been reused, or a pid recycled onto anything at all, reads as a live holder — and the lane is then refused with "a LIVE process there holds it" and the retire act, about a process that is not that session.

The act

Not a fourth copy of the contract. lanes-edit.sh is where it lives, so the clean shape is a read of its own — lanes-edit.sh holders-of <transcript-id>, printing <pid>\t<where>\t<profile> per live holder across every profile's sessions/, built on record_is_live — with lane-start's live_holders_of_id becoming a call to it and its $HOME/.claude-profiles walk (and $CLAUDE_PROFILES_HOME override) going with it, since lanes-edit.sh already walks exactly those paths for session_files.

Cases in tests/test_lane_helpers.sh: an ENDED record whose pid is alive is not a holder; a record whose procStart does not match the pid's is not a holder; and the live one still is.

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:24Z, for #56

    Logged in lanes/log/openRepoTools-3.md at 8e14335da3c2a43f20a755ac0a9779a826da545d.

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

    1. existing `CLAIMED —` comments on opensoft/openRepoTools#56:
       none
    2. `gh pr list --repo opensoft/openRepoTools --state all --search "#56"`, kept where the row or its body names `#56`:
       none
    3. `git ls-remote --heads git@github.com:opensoft/openRepoTools` branches naming `56` 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:52:26Z, for #56

    Logged in lanes/log/openRepoTools-5.md at deb3918f1ec1aa20753bb8f274e38fe455cc5329 (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#56:
    6:CLAIMED — lane openRepoTools-3, session 4135b2c9-34a6-47e3-a156-5adebb632fae@Eagle, 2026-09-14T21:31:24Z, for opensoft/openRepoTools#56
    13:1. existing `CLAIMED —` comments on opensoft/openRepoTools#56:
    2. `gh pr list --repo opensoft/openRepoTools --state all --search "#56"`, kept where the row or its body names `#56`:
    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 `56` 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