{ "version": "s16", "decisions": [ { "id": "idle-state-discovers-work", "title": "Idle Teammates Look for Ready Work", "description": "s15 already keeps teammates alive in IDLE. s16 gives that state one more input: after waiting for messages, a teammate scans the shared task board for pending, unowned, unblocked work.", "alternatives": "The Lead could dispatch every assignment, but then an idle teammate cannot help with work that becomes ready later.", "zh": { "title": "空闲队友主动寻找就绪任务", "description": "s15 已经让队友在 IDLE 中保持存活。s16 为这个状态增加任务板入口:等待消息后,队友会扫描 pending、未分配且依赖已完成的任务。" }, "ja": { "title": "待機中のチームメイトが実行可能な仕事を探す", "description": "s15 ですでにチームメイトは IDLE のまま残る。s16 はその状態にタスクボード入口を追加し、メッセージ待機後に pending、未所有、依存解決済みのタスクを探す。" } }, { "id": "atomic-claim", "title": "Claiming Is Atomic", "description": "The ownership check and task update run under one lock. When two teammates see the same ready task, only one can move it from pending to in_progress.", "alternatives": "Scanning and writing without a shared lock can assign the same task twice.", "zh": { "title": "任务认领必须原子化", "description": "所有权检查与任务更新在同一把锁内完成。两个队友同时看到一个就绪任务时,只有一个能把它从 pending 推进到 in_progress。" }, "ja": { "title": "タスク認領を原子的に行う", "description": "所有権確認とタスク更新を同じ lock の中で行う。二つのチームメイトが同じ実行可能タスクを見ても、pending から in_progress へ進められるのは一方だけである。" } }, { "id": "dependencies-filter-readiness", "title": "Dependencies Define Readiness", "description": "The scan returns a task only when every blockedBy dependency is completed. A teammate with nothing ready remains idle instead of starting work out of order.", "alternatives": "Ignoring dependencies increases utilization, but produces work against unfinished inputs.", "zh": { "title": "依赖关系决定任务是否就绪", "description": "只有 blockedBy 中的依赖全部完成,扫描才会返回该任务。没有就绪任务的队友继续保持 IDLE,不会越过依赖提前开工。" }, "ja": { "title": "依存関係が実行可能性を決める", "description": "blockedBy の依存がすべて完了したタスクだけを走査結果に含める。実行可能な仕事がなければ IDLE を維持し、順序を飛ばして開始しない。" } } ] }