## 何が起きたか スプリント PR #2019 の検査(`supervise.py` の検査のプラン、戦略 `local-full` の全体テスト)で、次のテストが落ちた。test-run はこれを**既存失敗**(`preexisting`)と判定し、変更起因(`caused`)は 0 件だった。 - `plugins/ndf/scripts/tests/test_usage_ledger.py::test_mvv_ask_appends_one_row` ## 再現 | 走らせ方 | 結果 | | --- | --- | | 検査のプランの全体テスト(並列 `-n`、`supervise.py run` の子として) | 落ちる | | 単独: `uv run --frozen --project . --all-extras pytest "plugins/ndf/scripts/tests/test_usage_ledger.py::test_mvv_ask_appends_one_row" -q` | 通る(develop 9d907aaca) | | 単独で環境変数を付ける: `NDF_USAGE_PLAN=p NDF_USAGE_STEP=s uv run --frozen --project . --all-extras pytest "plugins/ndf/scripts/tests/test_usage_ledger.py::test_mvv_ask_appends_one_row" -q` | 落ちる | テストは `[row] = rows(d)` で台帳に 1 行だけあることと、`plan`・`step` が空であることを見ている。 ## 原因 走らせる環境の環境変数である。並列・順序には依存しない。 - 1a2124b1c(#1973)で、`supervise.py` は `claude -p` の子へ呼び出し元のプラン・ステップを `NDF_USAGE_PLAN` / `NDF_USAGE_STEP` で渡す。検査のプランの全体テストはプランの子として走るため、この 2 つを受け継ぐ - テスト(`plugins/ndf/scripts/tests/test_usage_ledger.py:287` )は 2 つを消さずに台帳の行を書かせるため、行の `plan`・`step` が空にならず、`:296` の比較で落ちる - 同じ環境変数を付けて usage・ledger・mvv に当たるテスト 278 件を流すと、落ちるのはこの 1 件だけ ## 直し方 - テストの頭で `monkeypatch.delenv("NDF_USAGE_PLAN", raising=False)` と `monkeypatch.delenv("NDF_USAGE_STEP", raising=False)` の 2 行を足す(設計 PR から外した手当て。4f6e19f45 に差分がある。develop には無い) - または `plugins/ndf/scripts/tests/conftest.py` の autouse の fixture で `NDF_USAGE_PLAN` / `NDF_USAGE_STEP` を消し、ほかのテストも同じ環境で走らせる ## 証跡 - 検査の出力: `~/.local/state/ndf/sv/reorg-docs/check-state/02-test-all.out` - 範囲外として見つけた: #2008 のスプリント PR #2019 の検査 ## 受け入れ条件 - 検査のプランの全体テストでこのテストが落ちない(原因を特定し、テストか実装の側で環境・順序への依存を外す)
Activity
Revert: 設計 PR から #2020 の手当て(test_usage_ledger の環境変数)を外す