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
--install has no inter-process lock: the settings.json merge, the bin copies and the receipt all read/merge/replace unserialized #106
openRepoTools --install has no inter-process lock anywhere: two simultaneous runs for one account race on every file it writes. The shape is the same read/merge/replace at three sites, and two of them predate PR #103:
Copilot named the third on PR #103 (thread #103 (comment)): two installs with different OPENREPOTOOLS_BIN_DIR values can both read the receipt and the last mv discards the other's rows. That is real and it is narrower than the file's own rule already makes it — the receipt is EVIDENCE with a fallback (the header marker still identifies an installer copy, and a row that is missing means "fallback", never "remove"), so a lost row costs a retirement its stronger evidence, not a file. A lock added to the receipt alone would leave the two older sites racing and would be the one lock in a command that otherwise has none, which is why PR #103 declined to add it there and files the whole shape here instead (take what a round introduced; file what predates it).
What this wants, if anything: ONE lock around the whole of --install (a mkdir lock beside the bin directory or under $XDG_RUNTIME_DIR, since flock is not on macOS — lanes-edit.sh already carries the portable idiom), taken before the plan and released on exit, with a case in tests/test_openrepotools_command.py that a held lock is waited on and then named rather than raced past. Or a ruling that two simultaneous installs for one account are not a supported use and the command says so. Not urgent: nothing on Eagle or Raven runs the installer twice at once; the container entrypoint (workBenches#99) runs it once per start under its own flock.
Filed by lane openRepoTools-1 from PR #103's review.
openRepoTools --installhas no inter-process lock anywhere: two simultaneous runs for one account race on every file it writes. The shape is the same read/merge/replace at three sites, and two of them predate PR #103:~/.claude/settings.json— read withjq, staged withmktemp,mv -finto place (plan_hook_merge/place_skill_and_hook, since Lane tooling moves home: filter-repo from brett-wip, openRepoTools wip init, --install installs the lane skill and hook (Amendment 9 act 3) #24/--installstamps the documented mode on every artifact and refuses a target it cannot write in the planning phase, andwip initstages the template paths it wrote rather thangit add -A -- .#44/The name guard refuses a prompt whose window, session name and register row are not ONE lane — the lock types/rename <lane>into the pane, a person's rename is an OFFER answered at the next prompt, and a transcript two live processes hold is a refusal in the guard, inlane-startand inlane-end --retire#52);install_commands:cpthenchmod, twelve files, no lock);installed.tsv(--installwrites a receipt of what it placed, so a later retirement has ownership evidence stronger than a header substring #57 / PR--installwrites a receipt of the files it placed, and a retirement reads that before it reads a header substring #103): read, rows for this run's names replaced,mktemp+mv -f;receipt_forgeton retirement does the same.Copilot named the third on PR #103 (thread #103 (comment)): two installs with different
OPENREPOTOOLS_BIN_DIRvalues can both read the receipt and the lastmvdiscards the other's rows. That is real and it is narrower than the file's own rule already makes it — the receipt is EVIDENCE with a fallback (the header marker still identifies an installer copy, and a row that is missing means "fallback", never "remove"), so a lost row costs a retirement its stronger evidence, not a file. A lock added to the receipt alone would leave the two older sites racing and would be the one lock in a command that otherwise has none, which is why PR #103 declined to add it there and files the whole shape here instead (take what a round introduced; file what predates it).What this wants, if anything: ONE lock around the whole of
--install(amkdirlock beside the bin directory or under$XDG_RUNTIME_DIR, sinceflockis not on macOS —lanes-edit.shalready carries the portable idiom), taken before the plan and released on exit, with a case intests/test_openrepotools_command.pythat a held lock is waited on and then named rather than raced past. Or a ruling that two simultaneous installs for one account are not a supported use and the command says so. Not urgent: nothing on Eagle or Raven runs the installer twice at once; the container entrypoint (workBenches#99) runs it once per start under its own flock.Filed by lane openRepoTools-1 from PR #103's review.