ticket: approve panel workspace pod filter

This commit is contained in:
Keisuke Hirata 2026-06-19 00:38:03 +09:00
parent 49cc0f2e80
commit 8e8d95eba4
No known key found for this signature in database
2 changed files with 54 additions and 1 deletions

View File

@ -2,7 +2,7 @@
title: 'Panel 表示を現在 workspace の Pod に限定する' title: 'Panel 表示を現在 workspace の Pod に限定する'
state: 'inprogress' state: 'inprogress'
created_at: '2026-06-18T14:09:59Z' created_at: '2026-06-18T14:09:59Z'
updated_at: '2026-06-18T15:29:46Z' updated_at: '2026-06-18T15:37:52Z'
assignee: null assignee: null
readiness: 'ready' readiness: 'ready'
risk_flags: ['panel', 'pod-metadata', 'workspace-boundary', 'runtime-observation'] risk_flags: ['panel', 'pod-metadata', 'workspace-boundary', 'runtime-observation']

View File

@ -377,3 +377,56 @@ Next:
- Reviewer output を確認し、approve なら Orchestrator worktree への merge/validation/cleanup/close-ready 処理へ進む。request_changes なら blocker を記録して Coder に戻す。 - Reviewer output を確認し、approve なら Orchestrator worktree への merge/validation/cleanup/close-ready 処理へ進む。request_changes なら blocker を記録して Coder に戻す。
--- ---
<!-- event: review author: yoi-reviewer-00001KVDH2E06-r2 at: 2026-06-18T15:37:52Z status: approve -->
## Review: approve
Review result: approve
対象:
- Ticket: `00001KVDH2E06`
- branch: `impl/00001KVDH2E06-panel-current-workspace-pods`
- commits:
- `3b634d66``tui: filter panel pods by workspace`
- `160c96ad``pod: persist metadata workspace root`
No blockers found.
Evidence reviewed:
- Previous blocker is fixed in the normal write-through path.
- `crates/pod/src/pod.rs:68-82``pod_metadata_writer_for_store(...)``store.set_active_with_workspace_root(...)` を呼び、`metadata.workspace_root` を渡している。
- `pod_metadata_for_manifest(...)` は引き続き `.with_workspace_root(workspace_root.to_path_buf())` で runtime metadata を構築しており、computed runtime workspace root が writer から `PodMetadataStore` へ流れる。
- `set_active_with_workspace_root` は unrelated metadata を保持している。
- `crates/pod-store/src/lib.rs:178-192``active`、`resolved_manifest_snapshot`、および `workspace_root``Some` の場合のみ `workspace_root` を更新する。
- `update_by_name` を使うため、`spawned_children`、`reclaimed_children`、`peers` などは保持される。
- compatibility `set_active` は existing workspace ownership を保持している。
- `crates/pod-store/src/lib.rs:168-176``workspace_root: None` で delegate する。
- delegated implementation は `if let Some(...)` の中でだけ `metadata.workspace_root` を書くため、legacy callers は既存 workspace ownership を clear しない。
- 新 test は constructor ではなく persistence boundary を検証している。
- `metadata_writer_persists_workspace_root_through_store_update` は real `FsPodStore` を作り、production `pod_metadata_writer_for_store` を取得し、writer を実行した後、stored metadata を読み戻して `workspace_root` が残ることを assert している。
- Final branch still satisfies Ticket behavior。
- `PodList::from_workspace_sources` は persisted `workspace_root` で stored Pods を filter し、live probes は stored current-workspace names に限定するため、live-only / legacy / unknown Pods は fail-closed。
- `WorkspacePanelViewModel` construction も `pods.filter_for_workspace(workspace_root)` を通すため、external workspace rows は normal Panel rows/action targets にならない。
- focused tests は current workspace visible、external/legacy/corrupt/live-only hidden、role-like current workspace Pods visible、normal open action only for visible rows を覆っている。
Reviewer validation:
- `git diff --check 3b634d66..160c96ad` — passed
- `git diff --check e2e76d3b..HEAD` — passed
- `cargo test -p pod metadata_writer_persists_workspace_root_through_store_update -- --nocapture` — passed
- `cargo test -p pod-store active_updates_preserve_children_and_manifest_snapshot -- --nocapture` — passed
- `cargo test -p tui pod_list -- --nocapture` — passed
- `cargo test -p tui workspace_panel_filters_pod_rows_to_current_workspace_metadata -- --nocapture` — passed
Known validation debt:
- Full `cargo test -p tui -- --nocapture` still fails in three tests, but these appear pre-existing/unrelated to this branch:
- `multi_pod::tests::orchestrator_launch_context_uses_orchestration_root_for_runtime_workspace`
- `spawn::tests::profile_choices_use_project_registry_default`
- `spawn::tests::profile_choices_include_builtin_and_project_default_marker`
- The failing orchestrator assertion/code is already identical on `develop`, and the spawn failures are in unrelated profile-choice tests.
Conclusion:
- Previous request_changes blocker is resolved.
- Implementation satisfies the recorded Ticket acceptance criteria and is ready for merge/validation in the Orchestrator worktree.
---