4.3 KiB
4.3 KiB
| title | state | created_at | updated_at | assignee | readiness | risk_flags | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Orchestrator Ticket event Companion notify の peer registration / diagnostics を修正する | done | 2026-06-18T14:33:09Z | 2026-06-18T14:33:50Z | null | implementation_ready |
|
Background
00001KTTW04W2 で Orchestrator role の明示 Ticket lifecycle event を workspace Companion に Notify { auto_run: false } で送る hook は実装済みだった。しかし live 状態では Orchestrator metadata 側に workspace Companion peer が無いと、send_weak_notify_to_live_peer が silent no-op になり、Companion に通知が届かない。
現在の運用では workspace Companion yoi と yoi-orchestrator が同じ workspace の role Pod として存在していても、peer metadata が片方向または欠落することがある。この場合、通知 hook は実行されても delivery 前提を満たせず、ユーザーには何も見えない。
この Ticket では peer 境界を緩めず、workspace Companion / Orchestrator の reciprocal peer relationship を通知前に保証し、delivery skip reason を bounded diagnostic として残す。
Requirements
- Orchestrator Ticket event Companion notify は
auto_run: falseを維持する。 - Companion missing / stopped / unreachable では spawn / restore しない。
- Peer visibility check は維持する。
- arbitrary Pod name へ notify できるようにはしない。
- Orchestrator startup / hook install 時に、既存 workspace Companion metadata があれば reciprocal peer を ensure する。
- Ticket event hook 実行時にも、既存 workspace Companion metadata があれば reciprocal peer を ensure する。
- 既存 running state で片方向 peer / missing peer があっても回復できるようにする。
send_weak_notify_to_live_peerは bool ではなく delivery reason を返す。- delivered
- missing metadata
- not visible
- visible but not peer
- not live / unreachable
- send failed
- Delivery skip / failure reason は bounded tracing diagnostic として確認できる。
- Missing Companion は debug/no-op に留める。
- Ticket event hook は passive Ticket read/list/show では発火しない既存条件を維持する。
Implementation summary
PodDiscovery::ensure_existing_peerを追加し、peer metadata が存在する場合だけ reciprocal peer registration を行う。register_peerはensure_existing_peerを使う形に整理し、missing peer は従来どおりMissingPoderror を返す。WeakNotifyDeliveryを追加し、weak notify delivery result を reason 付きで返すようにした。- Orchestrator Ticket event hook install 時に existing Companion peer を ensure する。
- Ticket event hook call 時にも existing Companion peer を ensure してから weak notify する。
- Delivery skipped / send failed を
warn!、missing Companion / ensured peer をdebug!で記録する。 - Tests を追加・更新し、peer が事前登録されていない既存 Companion metadata でも hook が reciprocal peer を作り、
Notify { auto_run: false }を届けることを確認した。
Acceptance criteria
- Existing workspace Companion metadata がある場合、Orchestrator Ticket event notify 前に reciprocal peer が ensure される。
- Orchestrator Ticket event hook は peer 未登録の既存 Companion に
Notify { auto_run: false }を届けられる。 send_weak_notify_to_live_peerは delivered / skipped reason を区別して返す。- Spawned-child visibility など peer ではない Pod には weak notify しない。
- Missing Companion では spawn / restore せず no-op diagnostic に留める。
- Passive Ticket tool call では通知しない既存挙動を維持する。
Validation
cargo test -p pod discovery::tests::register_peer_persists_reciprocal_metadata --no-default-featurescargo test -p pod weak_notify --no-default-featurescargo test -p pod ticket_event_notify --no-default-featurescargo check -p pod -p tui --all-targetscargo fmt --checkgit diff --checknix build .#yoi --no-link
Related work
00001KTTW04W2— Orchestrator進捗をAutoKickなしでCompanionへ通知する。