8.8 KiB
作成
LocalTicketBackend によって作成されました。
Intake summary
ユーザーが cargo build による最新 yoi binary 入手を E2E harness default にする方針を明示した。要件・受け入れ条件は、YOI_E2E_BIN override を残しつつ、通常 E2E 実行では harness が cargo build -p yoi --features e2e-test --bin yoi を実行し、生成 binary を直接 PTY spawn すること。
State changed
Ticket planning が完了しました。state planning -> ready。
State changed
Ticket を yoi ticket が queued にしました。
Decision
Routing decision: implementation_ready
Reason:
- ユーザーが方針を明示した:
cargo runを PTY の process-under-test にせず、E2E harness がcargo build -p yoi --features e2e-test --bin yoiを実行し、生成された binary を直接 spawn する。 - Ticket は
queuedで、要件・受け入れ条件は具体的。blocking relation はなく、既存 E2E harness の小さな follow-up として実装可能。 - 既存 production/non-production boundary、mouse capture check、quit pending barrier は維持すべき invariant として明記済み。
Evidence checked:
- Ticket body / relation to
00001KSKBP9YG。 - Existing E2E harness code:
tests/e2e/src/lib.rs::yoi_binary()currently prefersYOI_E2E_BIN, then inferstarget/debug/yoi, but does not build it。 - Orchestrator worktree is clean。
IntentPacket:
Intent:
cargo test -p yoi-e2e --features e2e ...を任意タイミングで実行しても、harness が最新 source から E2E 用yoibinary を build して直接 PTY spawn するようにする。
Binding decisions / invariants:
cargo runを process-under-test にしない。YOI_E2E_BINexplicit override は残してよい。- default path は harness 内
cargo build -p yoi --features e2e-test --bin yoi+ direct binary spawn。 - production/non-production boundary と
e2e-testfeature gating を壊さない。 - mouse capture tracking / quit pending barrier を壊さない。
Requirements / acceptance criteria:
- 事前 manual build なしに
cargo test -p yoi-e2e --features e2e --test panel -- --nocaptureが pass する。 YOI_E2E_BIN=<path>指定時は override としてその path が使われる。- Build command / binary path が artifact または diagnostics から分かる。
cargo fmt --check、git diff --check、関連 checks が pass。
Implementation latitude:
OnceLock等で同一 test process 内の build を 1 回にまとめてよい。- Workspace root detection は
CARGO_MANIFEST_DIRparent traversal、cargo metadata、または robust helper のいずれでもよい。 - Cargo executable は
CARGOenv を尊重する。
Escalate if:
- workspace/package layout 上、E2E test process 内から cargo build するのが大きな cyclic/build-system 問題を起こす場合。
- Nix/package source filter 等の追加変更が必要になる場合。
State changed
Ticket evidence、existing E2E harness code map、Orchestrator worktree clean state を確認した。ユーザーが明示的に修正を依頼しており、blocking relation はない。実装 side effect の前に inprogress acceptance を記録する。
Implementation report
Implementation report for Ticket 00001KV0TJVN5
Files changed:
tests/e2e/src/lib.rs- Added a cached e2e binary provider using
OnceLock. - Preserves
YOI_E2E_BIN=<path>as the explicit override and skips the default cargo build provider in that path. - Default path runs
${CARGO:-cargo} build -p yoi --features e2e-test --bin yoifrom the workspace root, then returns the directtarget/{profile}/yoibinary path for PTY spawning. - Writes
target/e2e-artifacts/binary-provider.jsonand emits diagnostics with provider, build command, and binary path. - Expanded command-failure diagnostics to include command args.
- Added a cached e2e binary provider using
tests/e2e/tests/panel.rs- Updated panel tests to use the fallible cached binary provider.
Validation:
cargo fmt --check— passed.git diff --check— passed.cargo check -p yoi-e2e --all-targets --features e2e— passed.unset YOI_E2E_BIN && cargo test -p yoi-e2e --features e2e --test panel -- --nocapture— passed; default provider built the currentyoibinary and PTY-spawnedtarget/debug/yoi.YOI_E2E_BIN=/home/hare/Projects/yoi/.worktree/e2e-binary-provider/target/debug/yoi cargo test -p yoi-e2e --features e2e --test panel -- --nocapture— passed; override provider path used without invoking the default cargo-build provider.
Remaining gaps:
- None known.
Implementation report
Implementation report for Ticket 00001KV0TJVN5
Files changed:
tests/e2e/src/lib.rs- Added a cached e2e binary provider using
OnceLock. - Preserves
YOI_E2E_BIN=<path>as the explicit override and skips the default cargo build provider in that path. - Default path runs
${CARGO:-cargo} build -p yoi --features e2e-test --bin yoifrom the workspace root, then returns the directtarget/{profile}/yoibinary path for PTY spawning. - Writes
target/e2e-artifacts/binary-provider.jsonand emits diagnostics with provider, build command, binary path, and tested-subprocess env policy. - Expanded command-failure diagnostics to include command args.
- Follow-up: isolated tested
yoisubprocess environments in bothPanelHarness::spawnand fixture setuprun_yoi_capturewithenv_clear()plus explicit allowlists only. - Follow-up: recorded env policy in
run.json,binary-provider.json, and per-fixturefixture-commands.jsonlartifacts. - Follow-up: added a regression assertion that tested-subprocess policies use
env_clear, do not allowPATH, and default-deny provider credentials (OPENAI_API_KEY,ANTHROPIC_API_KEY,GEMINI_API_KEY) and secret-like patterns. - Follow-up: relative
YOI_E2E_BINvalues are resolved against the workspace root and must exist, so tested subprocess launch does not rely onPATHlookup.
- Added a cached e2e binary provider using
tests/e2e/tests/panel.rs- Updated panel tests to use the fallible cached binary provider.
Env isolation policy:
- Cargo build provider remains a build-tool command and is not treated as the tested
yoisubprocess. - Tested
yoifixture setup commands receive only:HOME,XDG_DATA_HOME,XDG_STATE_HOME,XDG_CONFIG_HOME,YOI_POD_RUNTIME_COMMAND. - Tested
yoi panelcommands receive only: fixtureHOME,XDG_DATA_HOME,XDG_STATE_HOME,XDG_CONFIG_HOME,TERM,YOI_TUI_TEST_EVENTS,YOI_POD_RUNTIME_COMMAND, andYOI_TUI_TEST_HOLD_BACKGROUND_TASKwhen used. PATHis intentionally not passed to testedyoisubprocesses; the harness launches the already-resolved binary path directly.- Host provider credentials / token / secret-like environment variables are default-denied. Future provider/LLM E2E should use fixture providers, canned servers, or explicit test env instead of inheriting host credentials.
Validation:
cargo fmt --check— passed.git diff --check— passed.cargo check -p yoi-e2e --all-targets --features e2e— passed.cargo test -p yoi-e2e --features e2e tested_yoi_env_policy_is_env_clear_allowlist -- --nocapture— passed.unset YOI_E2E_BIN && 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— passed; default provider built the currentyoibinary and testedyoisubprocesses used isolated env policy artifacts. Host provider env was present for the harness but is not inherited by testedyoisubprocesses becauseenv_clear()is applied before the allowlist.YOI_E2E_BIN=/home/hare/Projects/yoi/.worktree/e2e-binary-provider/target/debug/yoi 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— passed; override provider path used without invoking the default cargo-build provider, and testedyoisubprocesses still used isolated env policy.
Remaining gaps:
- None known.