mirror of
https://github.com/razzant/ouroboros.git
synced 2026-08-31 02:24:51 +00:00
"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> |
||
|---|---|---|
| .. | ||
| ARCHITECTURE.md | ||
| CHECKLISTS.md | ||
| CREATING_SKILLS.md | ||
| DEPLOYMENT.md | ||
| DEVELOPMENT.md | ||