Skip to content

ci: pass Eigen3_DIR with its PATH type to the release configure - #796

Merged
luisleo526 merged 2 commits into
mainfrom
ci-eigen3-dir-path-a2
Nov 9, 2026
Merged

luisleo526 merged 2 commits into
mainfrom
ci-eigen3-dir-path-a2

Conversation

@luisleo526

Copy link
Copy Markdown
Collaborator

The release prebuilt jobs configure with -DEigen3_DIR=/usr/share/eigen3/cmake and then require the cache line Eigen3_DIR:PATH=/usr/share/eigen3/cmake. Without a type on the command line CMake keeps the entry as Eigen3_DIR:UNINITIALIZED=..., so the check fails right after a successful configure on both slices. The 1.11.0 release dry run stopped there.

This change:

  • passes -DEigen3_DIR:PATH=/usr/share/eigen3/cmake in .github/workflows/release.yml and scripts/build_prebuilt_bookworm.sh; the cache-line check itself is unchanged;
  • returns the release step contracts in scripts/ci_preflight.py to a single, typed form. The previous change (ci: admit the typed Eigen3_DIR flag in the release step contract #795) admitted both forms so that this workflow change could pass admission; that acceptance is removed here;
  • updates the two release workflow fixtures, their sha256 pins and the tests that name the configure line. The tests prove the untyped flag is refused again, and the configure contract rows cover a typed flag with another path and the untyped flag with the reviewed path.

The historical revision 2167 input of the upload-context proof is left unmodified, as that proof documents and pins it by sha256 and git blob.

Reproduced with CMake 3.28.3 and the exact configure command: untyped gives Eigen3_DIR:UNINITIALIZED and the grep fails; typed gives Eigen3_DIR:PATH and the grep passes.

Supersedes #794.

🤖 Generated with Claude Code

The release prebuilt jobs configure with -DEigen3_DIR=/usr/share/eigen3/cmake
and then require the cache line Eigen3_DIR:PATH=/usr/share/eigen3/cmake.
Without a type on the command line, CMake keeps the entry as
Eigen3_DIR:UNINITIALIZED=..., so the check fails right after a successful
configure on both slices (the 1.11.0 release dry run stopped there).

Pass -DEigen3_DIR:PATH=/usr/share/eigen3/cmake in release.yml and
scripts/build_prebuilt_bookworm.sh. The check itself is unchanged. The
release step contracts in scripts/ci_preflight.py now name the typed flag
only: the previous change admitted both forms so that this workflow change
could pass admission, and that acceptance is removed here. The two
release workflow fixtures, their sha256 pins and the tests that name the
configure line follow; the test now proves the untyped flag is refused
again, and the configure contract rows cover a typed flag with another
path and the untyped flag with the reviewed path. The historical revision
2167 input of the upload-context proof is left unmodified, as that proof
documents and pins it.

Reproduced with CMake 3.28.3 and the exact configure command: untyped gives
Eigen3_DIR:UNINITIALIZED and the grep fails; typed gives Eigen3_DIR:PATH and
the grep passes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
scripts/build_prebuilt_bookworm.sh now passes -DEigen3_DIR:PATH=, so its
git blob moved from dc2f8a2 to a7ecf38. release_prebuilt_helper_findings
compares the helper's blob to RELEASE_BOOKWORM_HELPER_BLOB, and the old pin
would refuse the helper in ci_preflight's main entry and in
test_build_prebuilt_bookworm.py. The helper diff is that one configure
line; its cache check and its mutation row are unchanged. The repin is
recorded in the constant's own "expectation corrected" history.

The typed-flag test again asserts that both release layouts are clean
through runner_findings and main admission, not only through the prebuilt
workflow check, so the refusals it checks next cannot be met by an
unrelated finding.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

@graphify-labs graphify-labs Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Graphify reviewed this change.

Code graph out of date: Health delta baseline: last indexed commit a3964ad, 1 commit(s) behind this PR's base. Impact and hotspot numbers below may be wrong.

No verdict: the code graph is out of date. Static checks found no blocking issues, but they compared against an outdated graph. The next push after the repository re-indexes gets a full review.

Not checked: tests were not run; formal verification proved 0 of 2 changed function(s) (1 sampled, not proven, 1 not verified).

Formal verification. PR-changed functions: 1/2 verified (0 proven, 1 may-equivalent, 0 distinguished) · 1 not verified (1 vacuous).

Not verified on this run: \_release\_split\_job\_findings (vacuous: never exercised).


Graphify review — findings

Switches the release prebuilt configure step to pass -DEigen3_DIR:PATH=/usr/share/eigen3/cmake, so CMake caches Eigen3_DIR as PATH instead of UNINITIALIZED and the reviewed grep -Fx 'Eigen3_DIR:PATH=...' check can match. The typed flag is applied in release.yml, the bookworm build script, and the legacy and split-hosted fixtures. Tightens the preflight contract to admit only the typed flag: the temporary shim that rewrote typed to untyped before checking is removed, so the old untyped form now produces findings in both the legacy and split layouts. Tests are updated to the typed form, with a new mutation case for the untyped flag and refreshed fixture SHA-256 hashes.

No blocking issues surfaced. 1 lower-confidence candidate did not survive cross-model review.

Analysis details — impact, health, verification

Impact & health

Graphify review

Impact — 1113 functions depend on the 1016 functions this change touches.

Health — this change adds coupling hotspots:

  • worse: main_admission_data_findings() — 7 callers, 3 callees

Verification — 1113 functions in the blast radius were not formally verified this run (proofs are advisory here).

Health delta baseline: last indexed commit a3964ad, 1 commit(s) behind this PR's base.

Gate & verification

graphify gate

PASS — objectively clean (no health regressions, tests not run — proofs not run this pass (advisory)). Grounded, not self-assessed.

Advisory (not blocking):

  • verification_scope: 1080 function(s) in the blast radius were not formally verified this run

Test selection

Test selection

1400 of 1400 test file(s) selected (100%) via static blast radius.

Escalated to a full run for safety (noncode-change, uncovered-code) — the selection is not trustworthy on its own (see below). CI should run the whole suite.

  • benchmarks/tests/test_aggregate.py — full-run-safety
  • benchmarks/tests/test_check_provenance.py — full-run-safety
  • benchmarks/tests/test_compare.py — full-run-safety
  • benchmarks/tests/test_public_names.py — full-run-safety
  • benchmarks/tests/test_run_all.py — full-run-safety
  • benchmarks/tests/test_run_strategy_feeds.py — full-run-safety
  • docker/pineforge_sink_finalize_test.py — full-run-safety
  • docker/pineforge_sink_replay_rq_test.py — full-run-safety
  • docker/pineforge_sink_replay_test.py — full-run-safety
  • docker/pineforge_sink_to_json_test.py — full-run-safety
  • docker/quota_columns_test.py — full-run-safety
  • docker/quota_convert_test.py — full-run-safety
  • docker/quota_finalize_test.py — full-run-safety
  • docker/replay_rq_engine_test.py — full-run-safety
  • docker/run_json_artifact_window_test.py — full-run-safety
  • docker/run_json_bin_test.py — full-run-safety
  • docker/run_json_bounded_transport_test.py — full-run-safety
  • docker/run_json_bulk_equity_fuzz_test.py — full-run-safety
  • docker/run_json_bulk_equity_test.py — full-run-safety
  • docker/run_json_codes_test.py — full-run-safety
  • docker/run_json_converter_metadata_test.py — full-run-safety
  • docker/run_json_converter_session_test.py — full-run-safety
  • docker/run_json_diagnostics_test.py — full-run-safety
  • docker/run_json_equity_scan_test.py — full-run-safety
  • docker/run_json_fused_test.py — full-run-safety
  • docker/run_json_harnesses_test.py — full-run-safety
  • docker/run_json_metrics_only_test.py — full-run-safety
  • docker/run_json_misc2_test.py — full-run-safety
  • docker/run_json_misc_test.py — full-run-safety
  • docker/run_json_pfbar_test.py — full-run-safety
  • docker/run_json_provenance_test.py — full-run-safety
  • docker/run_json_quota_supervisor_test.py — full-run-safety
  • docker/run_json_replay_test.py — full-run-safety
  • docker/run_json_selected_sink_test.py — full-run-safety
  • docker/run_json_sink_lexical_test.py — full-run-safety
  • docker/run_json_sink_summary_test.py — full-run-safety
  • docker/run_json_sink_test.py — full-run-safety
  • docker/run_json_sink_vectors_test.py — full-run-safety
  • docker/run_json_spool_work_test.py — full-run-safety
  • docker/run_json_stringio_test.py — full-run-safety
  • docker/run_json_symbol_feeds_test.py — full-run-safety
  • docker/run_json_syminfo_test.py — full-run-safety
  • docker/run_json_trade_scan_test.py — full-run-safety
  • docker/run_json_window_budget_test.py — full-run-safety
  • docker/run_json_wrapper_work_test.py — full-run-safety
  • include/pineforge/native_run_spec.hpp — full-run-safety
  • scripts/derive_corpus_feeds_self_test.py — full-run-safety
  • scripts/fingerprint_self_test.py — full-run-safety
  • scripts/run_corpus_self_test.py — full-run-safety
  • scripts/test_abi_receipt_skips.py — full-run-safety
  • … and 1350 more

non-code file(s) changed (.github/workflows/release.yml, scripts/fixtures/ci_preflight/release_legacy.yml, scripts/fixtures/ci_preflight/release_split_hosted_2167.yml) → running the full suite for safety (a code graph can't see config/fixture/data deps)

changed code file(s) with no mapped test (.github/workflows/release.yml) — a coverage gap or a missing link — running the full suite rather than only the selected tests

Selection is safe under the controlled-regression assumption; always-run tests + a periodic full run are the backstops. Advisory — it never changes the check verdict.

Formal verification

Could not verify: Could not verify \_release\_split\_job\_findings.

The verifier did not have enough to check \_release\_split\_job\_findings, so it is saying so rather than guessing. No false assurance is the whole point.

Guarantee: No guarantee either way, this is an honest abstention, not a pass.

Note: Reason: not verifiable: all 63 sampled inputs raised on both versions — the function never executed, so 'no divergence' would be vacuous (mostly KeyError — names the real obstacle, not a sampling gap)

No difference found (not proven): No behavior difference found in release\_prebuilt\_workflow\_findings (not a proof).

The verifier ran both versions of release\_prebuilt\_workflow\_findings on many inputs and saw identical behavior every time. Strong evidence the change is safe, but evidence, not a proof.

Guarantee: Empirical: differential testing (both versions run on many generated inputs). A divergence on an untested input remains possible, so this is 'no counterexample found', not 'proven equivalent'.

Note: An input the sampler did not try could still differ.

· 1 more finding(s) on lines outside this diff (see the check run).

@luisleo526
luisleo526 merged commit 5191950 into main Nov 9, 2026
13 of 14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant