122 lines
6.7 KiB
Markdown
122 lines
6.7 KiB
Markdown
<!-- event: create author: orchestrator at: 2026-06-13T16:56:11Z -->
|
||
|
||
## 作成
|
||
|
||
LocalTicketBackend によって作成されました。
|
||
|
||
---
|
||
|
||
<!-- event: intake_summary author: orchestrator at: 2026-06-13T16:56:22Z -->
|
||
|
||
## 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 記録。
|
||
|
||
---
|
||
|
||
<!-- event: state_changed author: orchestrator at: 2026-06-13T16:56:22Z from: planning to: ready reason: user_authorized_clean_tmp_e2e_isolation field: state -->
|
||
|
||
## State changed
|
||
|
||
Ticket planning が完了しました。state planning -> ready。
|
||
|
||
|
||
---
|
||
|
||
<!-- event: state_changed author: "yoi ticket" at: 2026-06-13T16:56:31Z from: ready to: queued reason: queued field: state -->
|
||
|
||
## State changed
|
||
|
||
Ticket を `yoi ticket` が queued にしました。
|
||
|
||
|
||
---
|
||
|
||
<!-- event: decision author: orchestrator at: 2026-06-13T16:56:50Z -->
|
||
|
||
## 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 がある場合。
|
||
|
||
---
|
||
|
||
<!-- event: state_changed author: orchestrator at: 2026-06-13T16:56:58Z from: queued to: inprogress reason: orchestrator_acceptance_user_requested_clean_tmp_isolation field: state -->
|
||
|
||
## State changed
|
||
|
||
Ticket evidence、related E2E tickets、existing code map、Orchestrator worktree clean state を確認した。ユーザーが明示的に修正を依頼しており、blocking relation はない。実装 side effect の前に inprogress acceptance を記録する。
|
||
|
||
---
|
||
|
||
<!-- event: review author: orchestrator at: 2026-06-13T17:31:57Z status: approve -->
|
||
|
||
## Review: approve
|
||
|
||
## 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/<run>/` に保存し、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.
|
||
|
||
---
|