Status as of 2026-08-29 (S325)
| Design doc | Open v1 written, nothing ratified |
| Inventory | Done single-slot resources enumerated + cited |
| Interactive ↔ autonomous | Partial two lock files, no shared arbiter |
| Autonomous ↔ autonomous | None all autonomous work shares one slot per resource |
| Implementation | Not 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
| Resource | Path | Arbitration today |
| Git index | .git/index | none — the sharpest edge |
| Pending work | data/pending-work.json | O_EXCL, 3s spin, unlocked fallback |
| Interactive lock | run/interactive-claude.lock | PID liveness |
| Autonomous lock | run/autonomous-claude.lock | one autonomous task total |
| Approval request | run/claude-md-approval.request.json | no lock |
| Task health | data/task-health.json | last-write-wins |
| Token budget | run/token-budget.json | last-write-wins |
| LTM DB | long-term-memory.db | none on initDb() |
| Heartbeat lock | run/heartbeat.lock | PID, 15-min stale |
| Per-chat locks | run/chat-locks/*.lock | PID, 5-min stale |
Why this exists — the S325 incident
- 02:41:39 — governance approval captured over a 10-file staged set.
- 03:17:00 — an unattributed writer touched
dashboard/server.mjs, one of those 10 files.
- 08:39 — Rob spent an approval code. The guard refused it: fingerprint mismatch.
- The staged set spanned 8 unrelated concerns under a message describing one — including a destructive DDL.
- No per-session attribution exists on working-tree writes, so diagnosis needed mtime forensics.
Open questions none decided
- Isolation mechanism —
git worktree per autonomous lane? Recommend: yes, confidence medium.
- Queue substrate — a table in
activity.db, not a new .db file. Confidence high.
- Concurrency — how many autonomous lanes? Recommend: start at 2 and measure. Confidence low.
- Interactive — a priority-0 lane, or a privileged non-lane? Recommend: a lane. Confidence medium.
Related
| Open loop #3213 | Approval guard watches the git index, not working-tree writes to staged files. |
| Lessons | lesson_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.