ouroboros/docs
Ouroboros c8b0ffb913 fix(lease): a UI-converted task holds its project's one-writer lease (v6.37.1)
"Turn into project" (api_project_from_task) bound the task durably but never
updated the supervisor's in-memory RUNNING/PENDING. The one-writer lease and
assignment read task['project_id'] from those live structures, NOT the durable
project_task_bindings.json — so a converted task could let a concurrent
same-project task be assigned (two writers), and a still-PENDING converted task
would start unscoped and miss its lane.

The convert path now marks both RUNNING and PENDING under the queue lock via a
shared mark_task_project() SSOT helper (generalized from the in-task
ensure_project_scope path so the two cannot drift). The mark runs BEFORE the
durable bind — the in-memory mark, not the bind, is the conversion's effective
commit point for serialization, and an assign pass and the mark are mutually
exclusive on the same RLock — then persists the queue snapshot so a still-PENDING
converted task restored after a restart comes back still scoped.

Pre-existing gap surfaced during the v6.37.0 review; bugfix-only, no contract
change. Direct-chat (inline) conversation turns are intentionally NOT in the
pooled lease surface (the conversation lane stays free by design), so they are
correctly out of scope. docs/ARCHITECTURE.md documents the new data flow.

Reviewed: codex (gpt-5.5) SAFE, triad+scope (gpt-5.5) clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 14:19:17 +03:00
..
ARCHITECTURE.md fix(lease): a UI-converted task holds its project's one-writer lease (v6.37.1) 2026-06-18 14:19:17 +03:00
CHECKLISTS.md feat(core): v6.36.0 — boundary resilience, unified terminalization, reviewer-slot SSOT, acceptance feedback, macOS signing 2026-06-17 11:14:06 +03:00
CREATING_SKILLS.md release: Ouroboros v6.16.0 — worker-to-server extension companion reconcile 2026-06-04 21:02:15 +03:00
DEPLOYMENT.md v5.8.3-rc.2: centralize state helpers 2026-05-08 02:12:09 +03:00
DEVELOPMENT.md merge: integrate v6.36.2 (process-custody #51 + colab fork-deadlock #50) into v6.37.0 release 2026-06-18 06:11:25 +03:00