Review Windows gate runner and failure evidence boundary
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
# Issue 37 Windows build-runner evidence boundary review
|
||||
|
||||
2026-09-24. Read-only preparation review of publication `2bd0e615204be728b5c2b77cc7e28504c18a2277`, not acceptance of the in-progress final-02 run at `8ddfadf440b5c208b1adb6b211a97ba0c99cff04`.
|
||||
|
||||
## Findings
|
||||
|
||||
No material failure-propagation or command-scope defect found in the inspected recipe. It is suitable for producing the stated gate/build evidence, subject to receipt admission below. Its existence does not prove final-02 used the same bytes or completed any gate.
|
||||
|
||||
The failed final-01 publication accurately preserves its outcome. Raw stderr contains three E0433 diagnostics for unresolved `text_editor` in group.rs:226/229/230. The compiler's 101 is retained in workspace-test-build/result.json; the wrapper returns 1; summary.json says passed:false, failure `Gate failed: workspace-test-build`, only three attempted steps and no outputs. No test-body, lint or product-build execution is implied. The separate format receipt is exit 0 at 897d. Source inventories contain 3,709 entries; matching before/after map hashes and the failed result record unchanged inputs. This is failure evidence, not a passed gate.
|
||||
|
||||
## What the recipe establishes when it succeeds
|
||||
|
||||
- **Required commands and propagation:** final.py:123-130 runs version capture, workspace `cargo test --locked --offline --workspace --no-run --message-format=json-render-diagnostics`, then literal `cargo test --locked --offline --workspace --no-fail-fast -- --test-threads=1`, then `cargo clippy --locked --offline --workspace --all-targets -- -D warnings`, followed by desktop and server executable builds. With `--profile dev`, neither executable command adds --release. Tests retain default test profile; lint default dev. run.py:180 executes each command and :233-234 exits nonzero for command failure, source change or instrumentation failure. final.py:186-192 stops later gates for nonzero wrapper/command, missing receipt, failure or attribution mismatch. Its :272 success predicate also requires every planned step and all expected preserved outputs.
|
||||
- **Source and environment:** run.py:46-74 requires exact clean HEAD, exact pinned tree/index/nonignored path set, regular Git tree entries, Git-filtered blob equality and separately hashed raw Windows bytes. final.py and run.py compare full inventories before/after commands. Selected environment, recipe/toolchain/runtime bytes and Cargo config presence/bytes are frozen and rechecked. The native rustc host is verified. This is a tracked-source/selected-environment boundary, not a hermetic build proof covering arbitrary ignored/generated inputs or every transitive tool/dependency byte.
|
||||
- **Test inventory:** final.py:198-233 derives native harness executables from successful no-run Cargo JSON and binds each to binary hash, candidate source and package manifest. It refuses unexpected locations and declared custom harnesses. run.py:97-135 invokes standard harness --list and --list --ignored, validates reported list totals and saves exact names/raw outputs. run.py:172-205 then executes the literal Cargo test command and checks listed executable/inventory hashes remained unchanged. This binds the discovered native inventory to preserved receipts; doctest discovery/outcomes remain in actual Cargo logs. Ignored tests are not executed.
|
||||
- **Product identity and preservation:** final.py:234-246 selects one emitted Cargo executable record for each requested binary, requires a non-test .exe under the explicit target directory, immediately copies with create-new semantics and compares original/copied hashes. :247 preserves the pinned runtime. Final checks rehash preserved outputs; relocation records retain emitted Cargo metadata and original/preserved paths. Existing target caches may be reused; this is not a clean rebuild guarantee. Packaging must consume these exact preserved bytes.
|
||||
- **Failure retention:** fresh output/attempt paths and exclusive file creation avoid overwriting prior attempts. Command raw logs and result receipts survive ordinary command failure; independent final source/environment/output checks run in finally. A crash or receipt-write failure can leave incomplete evidence, which must never be accepted merely because some outputs exist.
|
||||
|
||||
## Final-02 evidence admission implications
|
||||
|
||||
1. Match the actual final-02 bound recipe hashes before applying this review: final.py `ce73a1680f8cd8bb5112cffa81929458dafaaefc282b8ff5391c7571cd34e666` (18,735 bytes); run.py `4d40f2479b5ed670d0e6abeba2782c2c076de9c70289b50901a26185b37d65b6` (12,553); README.md `0402dd2f7f0c659241538177446201998fdab3058176858f6d35af6191bb7393` (10,083). Review changes if different. Require actual plan/result/source/environment identity at 8ddfadf and selected dev build profile, not old 897d receipts or README's historical preparation pin.
|
||||
2. Validate downloadable manifest/archive/member pins, summary passed:true, every planned result/log and unchanged input maps; read raw tests and strict lint results, rather than relying solely on summary. Baseline is seven commands and three product/runtime outputs when no optional examples are requested. Formatting is intentionally outside final.py and requires a separately attributed current-source receipt if it remains a gate.
|
||||
3. Reconcile native test-name inventory, literal test results, observed ignores and doctest results. Review ignore reasons and material warnings from pinned source. The code records names and invokes literal Cargo but does not programmatically reconcile every listed name to a passed outcome or approve skips. Review actual final-02 Cargo configs/env for runners or other meaningful behavior overrides; final-01 records no Cargo config files and no runner override, but this does not establish final-02 state.
|
||||
4. Verify preserved executable/runtime hashes, Cargo artifact/profile metadata and relocation records; compare these with packaged bytes and build-evidence/package.json. Keep published failed-01 evidence as failure history. Do not replace its records with corrected-run claims.
|
||||
5. Independently perform package integrity, notices/runtime closure, clean-environment GUI/server checks, graphical edit/save/history/reopen and server persistence against the final packaged hashes. The runner neither packages nor launches the product for native acceptance. It lists/runs test harnesses only. Do not call test listings GUI acceptance, cache reuse a clean build, or prior contribution tests final workspace execution.
|
||||
|
||||
## Evidence read
|
||||
|
||||
Read `harness/prerelease37-windows-gates-20260924/failed-897d-final01.json` through Gitea MCP at the exact publication commit before downloading its named ZIP. Bounded download received 2,879,509 bytes with expected SHA-256 `a02a60ec5268b7ba1dfbbf7748bcda61500a34806d9af635dfe4d0d19342d19e`. Independently checked all 40 archive member names/counts, lengths and hashes against manifest pins. Read complete recipe/final.py, recipe/run.py and recipe/README.md, plus failed summary, command result, compiler stderr, source-map count, frozen Cargo-config/recipe records and separate format result. No archived code was executed, and no candidate edit, build, Gitea write or runtime launch occurred.
|
||||
Reference in New Issue
Block a user