diff --git a/docs/plans/original-completion-2026-10-02/execution/p05-02/REPAIR_01.md b/docs/plans/original-completion-2026-10-02/execution/p05-02/REPAIR_01.md new file mode 100644 index 0000000..a7517a2 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p05-02/REPAIR_01.md @@ -0,0 +1,6 @@ +# P05-02 修正1: 登録の validation の出力先 + +- S `7808ca76db5f997096cdfbb0edfad0c45479e238` の正式の validation(`p05-funds`)は、照合の入口で失敗した(生の stderr: `AssertionError: regular final receipt required`)。native の収集(10 suites・765 checks・verify true)と build の場所への写しは成功していた。 +- 原因: 登録の argv は `--output {build_dir}/p05-funds-evidence`。今の Runner は validation の argv の `{python}` だけを置き換え、`{build_dir}` は文字どおり渡し、build の場所を環境変数 `BUILD_OUTPUT_DIR` で渡す。`tools/run_p05_funds_tests.py` は P18 の runner の写しで、置き換えを Runner に任せていたため、作業ツリーの中の存在しない path を照合した。 +- 修正: `tools/run_p05_funds_tests.py` は、`--output` が `{build_dir}/` で始まるとき、`BUILD_OUTPUT_DIR`(絶対 path で、symlink でない既存のディレクトリ)で置き換える。それ以外の値の扱い、収集と照合の中身、登録の argv、試験、製品のコードは変えない。 +- 新しい S では native の収集をやり直す(runner の SHA が変わり、S `7808ca7` の証拠の source map と合わないため)。S `7808ca7` の収集と失敗の validation の記録は保持する。 diff --git a/tools/run_p05_funds_tests.py b/tools/run_p05_funds_tests.py index 34361ca..153277d 100644 --- a/tools/run_p05_funds_tests.py +++ b/tools/run_p05_funds_tests.py @@ -556,7 +556,15 @@ def main(argv=None): args = parser.parse_args(argv) args.timeout = 1200 root = shared.HERE.parent - out = plain_path(args.output) + output = args.output + # The registered validation passes the literal '{build_dir}/p05-funds-evidence'. The current Runner + # replaces only {python} in validation argv and gives the task's build directory as BUILD_OUTPUT_DIR. + if output.startswith('{build_dir}/'): + build = os.environ.get('BUILD_OUTPUT_DIR', '') + require(build and Path(build).is_absolute() and Path(build).is_dir() and not Path(build).is_symlink(), + 'registered build directory from BUILD_OUTPUT_DIR') + output = build + output[len('{build_dir}'):] + out = plain_path(output) refs = shared.source_refs(root) require(set(SUITES).issubset(shared.roster(root)), 'normal discovery includes narrow roster and restart tests') discovered = shared.roster(root)