Development record
The implement loop's land stage accepts any non-empty worktree path from the run state file, so a planted state makes `abcd implement step` create `<that path>/.abcd/.work.local` (mode 0700) in a directory the state names.
The implement loop's land stage accepts any non-empty worktree path from the run state file, so a planted state makes abcd implement step create <that path>/.abcd/.work.local (mode 0700) in a directory the state names.
Private security advisory GHSA-qfpj-v8c5-c4fw (draft, severity low). Full text, evidence and reproduction: the security-drain-2026-10-09 run directory in the main checkout's local tier. This record stays uncommitted until its fix lands; the fix commit adds it directly to resolved/.
Evidence (lines at main 7549ca2d5): briefStage refuses a worktree that is not the path laneWorktree derives (internal/core/implement/loop/brief.go:104-105). landStage only checks the string is non-empty and skips syncLane once a landing is recorded (internal/core/implement/loop/land.go:131, :139). landRecords uses that worktree when landing.closes is true (internal/core/implement/loop/land.go:237) and calls fsutil.EnsureRealDirAll there (internal/core/implement/loop/land.go:269). The state file is gitignored, so it arrives in a zip, not a clone. The result is an empty 0700 directory tree; no file body is written and no hook in the other repository runs.
Reproduction: on git 2.39.5, hand-write the state under .abcd/.work.local/run/ for a run whose one lane is at stage land, with full base and head SHAs, a real branch at that tip, landing.closes true and worktree a relative path to another existing git repository; run abcd implement step. <other>/.abcd/.work.local exists mode 0700, then intent.Reconcile fails on the absent spec. A missing branch or a missing landing record returns before the mkdir.
Frontmatter
| id | iss-2610090821552801 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-2610090821552801-implement-land-stage-trusts-planted.md
open on GitHub ↗ · commit history ↗
mentions1
- iss-2610120527586962A restart and a rate-limit checkpoint read, copy aside and then remove the file an await's receipt path names, and that path comes from the run's state file, which an archive of the checkout can carry hand-written, without being held to the lane's directory. A state naming `.env`, `go.mod` or `.git/config` (or a `..` path that cleans to one) had `abcd implement step --restart <lane>` move that file of the checkout into the lane's aside; one naming `changes.patch` or a file of the lane's asides could overwrite a saved patch before the worktree was reset, losing the uncommitted work. The worktree path already had this check (derivedLaneWorktree, iss-2610090821552801); the receipt path was the sibling that sweep missed. The route is abcd's: the removal is the loop's own.