Status as of 2026-08-29 (S325)

Design docOpen v1 written, nothing ratified
InventoryDone single-slot resources enumerated + cited
Interactive ↔ autonomousPartial two lock files, no shared arbiter
Autonomous ↔ autonomousNone all autonomous work shares one slot per resource
ImplementationNot started

Documents

Working doc v1 plans/session-lanes-and-work-queue-working-v1.md
The ask, the triggering incident, design goals, open questions. Living document.
Inventory plans/lanes-inventory-generated.md
Every lock, queue, and single-slot state file, with file:line citations.

Contended single-slot resources no per-lane partitioning

ResourcePathArbitration today
Git index.git/indexnone — the sharpest edge
Pending workdata/pending-work.jsonO_EXCL, 3s spin, unlocked fallback
Interactive lockrun/interactive-claude.lockPID liveness
Autonomous lockrun/autonomous-claude.lockone autonomous task total
Approval requestrun/claude-md-approval.request.jsonno lock
Task healthdata/task-health.jsonlast-write-wins
Token budgetrun/token-budget.jsonlast-write-wins
LTM DBlong-term-memory.dbnone on initDb()
Heartbeat lockrun/heartbeat.lockPID, 15-min stale
Per-chat locksrun/chat-locks/*.lockPID, 5-min stale

Why this exists — the S325 incident

Open questions none decided

Related

Open loop #3213Approval guard watches the git index, not working-tree writes to staged files.
Lessonslesson_autonomous_git_add_all_steals_session_work, lesson_background_cli_child_dies_on_session_teardown, lesson_commit_without_pathspec_commits_the_whole_index
Live lane state (who holds what, for how long, what is queued) lands here once the queue exists.