Changes touching this path

  • Spawn DevX (#232): loot lanes observability, --ticket lane spawn, wayfinder claim-to-lane f0a885c2 · dbf3dbe6…
  • review refs carry the position, not the dock (#281) Every lane's home dock is main, so dock-named review refs made N concurrent lanes share one review/main branch: the second lane's ferry --with-wip force-pushed over the first's in-flight PR head, and either position's reap pass could misjudge (and retire) the other's live entry, since liveness reads the positional working pointer a foreign position cannot see. The review lane is now keyed by its owner position end to end: - ferry projects review/<lane-id> from a lane, review/<dock> on the primary; the wip and pr-map ledgers gain an owner column (- = primary; pre-#281 short rows parse as primary-owned) and the review line carries owner=. - Reap is owner-scoped: only the owner judges liveness; a foreign pass reaps exactly the entries whose owner lane is gone from the registry, so an abandoned lane's review ref dies with it instead of leaking. - land derives the collapse branch from the pr-map lane's owner and refuses to run from any other position: it finalizes the current position's working change, and the dock guard cannot catch that mismatch when every lane's dock is main. Docs: ADR 0033 amendment, concurrent.md (review projection is now genuinely parallel-safe), workflow.md, CONTEXT.md review-lane entry. aa68437a · dbf3dbe6…diff
  • Workspace accepts its clock; lane flag-gate goes pure so cmd_* tests never touch a real .loot (#322) 20ac82e1 · dbf3dbe6…diff
  • Lift the wip review-lane ledger out of ferry.rs into ledger.rs WipState/WipEntry — the `wip` ledger of in-flight review-lane projections — lived in ferry.rs (the git-bridge file) though they are a typed on-disk-format owner with nothing to do with git mechanics, read cross-crate by the loot-first orchestrator. Move them into ledger.rs, joining PrMap as the two typed owners of the `.loot/git-mirror/` ledgers (both sharing the review_handle rule). The old "it lives in ferry because ferry writes it" rationale never held — PrMap's writer (the orchestrator) doesn't own it either; ledger.rs does, because loot lanes reads it and the workspace dependency points this way. Not a pure relocation: ferry reached straight into `WipState.entries` (a ~50-line reap loop, an upsert, and a lookup), so the move designs a real interface. The entries vector is now private, driven through: - record(entry) — the upsert (replaces ferry's retain-then-push) - retain(pred) — for ferry's reap loop, which stays in ferry because its liveness predicate reads positional Workspace/git/report state - entry_for(change, dock, owner) — the lookup, parallel to PrMap::lane_for - reviewed_version — kept (loot-first's read), now delegating to entry_for - parse / encode — the format, encode now pub (PrMap's caller-writes pattern) WipEntry is a pub-field data carrier like the sibling PrLane. The wip unit tests move with the type into ledger.rs's test module. loot-first imports WipState from ledger now; ferry keeps only the projection that writes it. ferry.rs: -140 lines. Full workspace suite green. 0579b5f4 · dbf3dbe6…diff

Renames are not followed. loot's tree maps a path to an address, so a rename is a delete and an add. This list is the history of the name, not of the bytes.