## 作成 LocalTicketBackend によって作成されました。 --- ## Intake summary ユーザーが E2E を完全に clean な tmp environment で実行し、毎回 cleanup することを明示した。要件は workspace/HOME/XDG/runtime/artifacts の fixture 分離、host Pod/runtime registry 非参照、fixture-created Pod metadata の fixture-local 化、成功/失敗時 cleanup と artifact 記録。 --- ## State changed Ticket planning が完了しました。state planning -> ready。 --- ## State changed Ticket を `yoi ticket` が queued にしました。 --- ## Decision Routing decision: implementation_ready Reason: - ユーザーが E2E harness の clean tmp environment / cleanup を明示した。 - Ticket は `queued` で、要件・受け入れ条件は具体的。既存 `00001KSKBP9YG` / `00001KV0TJVN5` の follow-up で、主な変更面は `tests/e2e` に bounded される。 - Blocking relation はなく、既存 queued Tickets とは変更面が異なる。Orchestrator worktree は clean。 - Risk は test/runtime isolation だが、binding invariants(host runtime registry 非参照、fixture-local Pod metadata、cleanup artifact 記録)が明確なため実装可能。 Evidence checked: - 新規 Ticket body / related records。 - `00001KV0TJVN5` の post-merge concern: host/global runtime registry を見た可能性、fixture `workspace-orchestrator` metadata、runtime isolation assertion 不足。 - Existing E2E code map: `tests/e2e/src/lib.rs` の fixture setup / `PanelHarness::spawn` / `run_yoi_capture` / artifact handling。 - Orchestrator workspace state: clean。 IntentPacket: Intent: - E2E harness が毎回 clean な tmp workspace/data/runtime environment で実行され、host Pod/runtime registry を見ず、成功・失敗に関係なく fixture temp を cleanup するようにする。 Binding decisions / invariants: - Tested `yoi` process は host runtime/data/session/worktree/Pod registry を見ない。 - Fixture-created Pods (`workspace`, `workspace-orchestrator` 等) は fixture-local。 - Failure diagnostics は `target/e2e-artifacts` にコピーして残し、fixture temp root は cleanup する。 - Existing binary provider、env credential isolation、mouse capture guard、quit pending barrier を壊さない。 - Root/original workspace では作業しない。 Requirements / acceptance criteria: - `cargo test -p yoi-e2e --features e2e --test panel -- --nocapture` が clean tmp env を使い、終了後に fixture temp root を残さない。 - Artifact に fixture workspace/data/runtime paths、cleanup result、env/runtime policy が残る。 - Test/assertion で Panel が host live Pods / host runtime registry を見ないことを確認する。 - Host `XDG_RUNTIME_DIR` 等が設定されていても tested `yoi` は fixture runtime だけを見る。 - `cargo fmt --check` / `git diff --check` / relevant checks / E2E tests が pass。 Implementation latitude: - `tempfile::TempDir` / custom guard / artifact snapshot strategy の具体設計は Coder が選んでよい。 - Runtime dir は explicit `XDG_RUNTIME_DIR` fixture path でも、Yoi-specific fixture runtime env でもよいが、host fallback を使わないことを artifact/assertion で示す。 - Failure artifact は fixture tree 全体ではなく必要 subset copy でよい。 Escalate if: - Yoi runtime path discovery に explicit test runtime dir を渡す public/production surface 変更が必要になる場合。 - Cleanup と artifact preservation が両立しない design constraint がある場合。 --- ## State changed Ticket evidence、related E2E tickets、existing code map、Orchestrator worktree clean state を確認した。ユーザーが明示的に修正を依頼しており、blocking relation はない。実装 side effect の前に inprogress acceptance を記録する。 --- ## Implementation report Implemented scoped E2E tmp/runtime isolation for Ticket 00001KV0YK5S0. Files changed: - `tests/e2e/src/lib.rs` - `FixtureWorkspace` now owns a `TempDir` under `target/e2e-tmp` and writes persistent scenario artifacts under `target/e2e-artifacts/`. - Each fixture creates isolated workspace, HOME, XDG data/state/config/runtime dirs and passes `XDG_RUNTIME_DIR` explicitly to all tested `yoi` subprocesses under `env_clear`. - Fixture metadata records fixture root, workspace/home/XDG paths, runtime policy, env policy, and cleanup result. - Cleanup snapshots the fixture tree into persistent artifacts, closes/removes the temp root, writes `cleanup.json`, and reports cleanup failure. - `tests/e2e/tests/panel.rs` - Existing two Panel E2E tests now assert fixture path isolation, absence of host/runtime Pod marker leakage in rendered rows, and explicit fixture cleanup/removal after each scenario. Isolation/cleanup policy: - Tested `yoi` never inherits host env wholesale; fixture setup and Panel subprocesses use `env_clear` with an allowlist that includes only fixture HOME/XDG data/state/config/runtime plus test/runtime-specific variables. - `XDG_RUNTIME_DIR` is always a fixture-local runtime dir under the temporary fixture root. - Fixture-local Pod metadata markers (`workspace`, `workspace-orchestrator`) are created only inside fixture data home and panel rows assert no host/fixture runtime markers leak. - Artifacts persist outside the temp root in `target/e2e-artifacts`; cleanup snapshots selected fixture contents there before removing the temp root. Validation: - `cargo check -p yoi-e2e --all-targets --features e2e` — passed. - `cargo test -p yoi-e2e --features e2e --test panel -- --nocapture` — passed (2 tests). - `XDG_RUNTIME_DIR=/tmp/yoi-e2e-host-runtime-leak-test OPENAI_API_KEY=host-secret cargo test -p yoi-e2e --features e2e --test panel -- --nocapture` — passed (2 tests); artifacts show fixture `xdg_runtime_dir`, `host_xdg_runtime_dir_present: true`, and `cleanup_success: true`. - `YOI_E2E_BIN=target/debug/yoi cargo test -p yoi-e2e --features e2e --test panel -- --nocapture` — passed (2 tests). - `cargo fmt --check` — passed. - `git diff --check` — passed. Remaining gaps: - No known gaps within the delegated scope. --- ## Review: approve 外部 Reviewer Pod 起動を試みたが、この Orchestrator の現在の delegation scope では child launch validation が要求する root workspace read grant を再委譲できず、Reviewer Pod を起動できなかった。そのため Orchestrator が実装 diff・validation・artifact を直接確認した。 確認した実装: - `tests/e2e/src/lib.rs` に per-scenario `FixtureWorkspace` / `TempDir` 管理を追加。 - fixture root 配下に `workspace`、`home`、`data`、`state`、`config`、`runtime` を作り、tested `yoi` には `env_clear()` + fixture-local `XDG_RUNTIME_DIR` を渡す。 - `PanelHarness::spawn` と fixture setup command は host `XDG_RUNTIME_DIR` / host provider env を継承しない。 - fixture snapshot / cleanup report / fixture metadata を `target/e2e-artifacts//` に保存し、fixture temp root は cleanup 後に存在しないことを記録する。 - tests は hostile host `XDG_RUNTIME_DIR` を設定した状態でも fixture runtime policy を使う。 - existing binary provider、mouse capture guard、quit pending barrier、env credential isolation は維持されている。 Validation performed by Orchestrator: - `cargo fmt --check`: PASS - `git diff --check`: PASS - `cargo check -p yoi-e2e --all-targets --features e2e`: PASS - `XDG_RUNTIME_DIR=/tmp/yoi-e2e-host-runtime-leak-test OPENAI_API_KEY=host-secret ANTHROPIC_API_KEY=host-secret GEMINI_API_KEY=host-secret cargo test -p yoi-e2e --features e2e --test panel -- --nocapture`: PASS - artifact spot-check: recent `cleanup.json` records `cleanup_success: true` and `fixture_root_exists_after: false`。 - `target/e2e-tmp` の直下に residual fixture temp root が残っていないことを確認。 Notes: - Failure artifact は fixture snapshot を保存するため、host への leak ではなく `target/e2e-artifacts` に診断情報が残る。 - Fixture-created `workspace` / `workspace-orchestrator` Pod metadata は fixture data dir / snapshot に閉じる。host runtime/data registry を読む経路は fixture `XDG_RUNTIME_DIR` + env clear により遮断されている。 Decision: approve. --- ## Implementation report Integration outcome: merged and validated. - Implementation branch: `ticket-00001KV0YK5S0-e2e-tmp-isolation` - Implementation commit: `07e754ce test: isolate e2e tmp runtime fixtures` - Review: Orchestrator direct review `approve`(Reviewer Pod は現 delegated scope の child launch validation 制約で起動できなかったため、Orchestrator が diff / validation / artifact を確認) - Orchestrator merge commit: `20184eeb merge: e2e tmp isolation` Implemented: - E2E fixture now creates per-scenario clean temp root under `target/e2e-tmp` with isolated workspace, HOME, XDG data/state/config, and explicit fixture `XDG_RUNTIME_DIR`。 - Tested `yoi` subprocesses continue to use `env_clear()` and now receive fixture-local runtime dir, preventing host runtime / Pod registry observation。 - Fixture metadata, run metadata, fixture snapshot, and cleanup report are persisted under `target/e2e-artifacts/` before temp cleanup。 - Fixture temp roots are removed after scenario completion, and cleanup reports record `cleanup_success` plus `fixture_root_exists_after`。 - Existing binary provider, `YOI_E2E_BIN` override, credential env isolation, mouse capture guard, and quit pending barrier remain intact。 Orchestrator validation after merge: - `cargo fmt --check`: PASS - `git diff --check`: PASS - `cargo check -p yoi-e2e --all-targets --features e2e`: PASS - `XDG_RUNTIME_DIR=/tmp/yoi-e2e-host-runtime-leak-test OPENAI_API_KEY=host-secret ANTHROPIC_API_KEY=host-secret GEMINI_API_KEY=host-secret cargo test -p yoi-e2e --features e2e --test panel -- --nocapture`: PASS(2 tests) - Artifact spot-check: latest `cleanup.json` files record `cleanup_success: true` and `fixture_root_exists_after: false`。 - `target/e2e-tmp` direct child count after validation: 0。 Residual notes: - Persistent diagnostic artifacts intentionally remain under `target/e2e-artifacts`。 - Fixture snapshots may contain fixture-local `workspace` / `workspace-orchestrator` metadata, but those live under the copied artifact snapshot, not host runtime/data state。 Next: - Mark Ticket `done` and clean up implementation worktree/branch. --- ## State changed E2E tmp/runtime isolation follow-up was reviewed, merged into the Orchestrator branch as `20184eeb`, and validated in the Orchestrator worktree. Panel E2E now uses clean per-scenario tmp workspace/data/runtime fixtures, preserves artifacts under `target/e2e-artifacts`, removes fixture temp roots after runs, and does not inherit host runtime/credential environment. Ticket implementation work is done; closure remains separate. --- ## State changed Ticket を closed にしました。 --- ## 完了 Closed after prior done-state completion. ---