Skip to content

Split native CI profiles and make cold verification reproducible - #354

Merged
luisleo526 merged 5 commits into
mainfrom
lv/ci-main-green
Oct 7, 2026
Merged

luisleo526 merged 5 commits into
mainfrom
lv/ci-main-green

Conversation

@luisleo526

@luisleo526 luisleo526 commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Main pushes can exhaust the shared 60-minute native-live job before ThreadSanitizer finishes. Run native, ASan/UBSan and TSan in independent matrix cells, with failures propagated through the native gate and aggregate build.

The profiles use separate compiler caches, save curl after successful setup, and retain compiler-cache and diagnostic evidence after ordinary test failures. The cold-cache input bypasses restoration and saving for both caches. Optional CTest deadlines preserve explicit per-test TIMEOUT properties and default CLI behavior. Failed-row accounting handles labelled output, with real CTest coverage for optional JUnit and older undecorated failure listings.

Validation on 0ac5401444c18aa93ee603e0431f268cf332c2c0:

  • Canonical exact-tree verification passed all six required steps: preflight 48 stages, Release 873 tests, Debug 854, sanitizers 846, Kernel 307 with zero residual findings, and documentation with zero warnings. Profile CTest skip/not-run/disabled lists are empty. Preflight retains its optional no-archive self-test skip; the built kernel archive passes its actual residual check.
  • The full PR check rollup passed, including both macOS configurations, with the expected full-corpus PR skip. The separate full-row cold CI run passed native 941/941, ASan/UBSan 85/85, and TSan 85/85. Actual logs and artifacts confirm cold cache inputs and cache bypass.
  • Genuine CTest 3.20.6 and 3.31.6 each pass the 14-test compatibility set without skips. Two independent source reviews cover the final candidate.
  • pineforge/verify and pineforge/parity are successful, recorded from exact-tree evidence. The no-behaviour diff rule accepts the eight CI/tooling/documentation files.

Earlier-host preflight and ASan timeout receipts remain retained at their original heads. The existing 2,400-second preflight verifier limit and explicit 300-second native_live_e2e limit are unchanged; both stages passed in current-head GitHub verification. This draft awaits the scheduled integration window.

luisleo526 and others added 5 commits October 7, 2026 13:22
docs/ci.md replaces two superseded descriptions of the old shared
native-live job:

- dbd17b3 (#320): the sentence "native-live.yml runs both profiles
  alongside native, reusing the same checksum-pinned WebSocket-enabled
  curl" is replaced by the three independent matrix cells description.
- INT26 (d093560): the old `native-live` timeout-table row (the larger
  runner's full set "about 25 min", "The verification hosts' release
  profile, the nearest they run, took 11.2-18.4 min" and "A fork's pull
  request runs the set without that row: 3.4 min on the standard
  runner") is replaced by the per-cell native, live-sanitizers and
  live-tsan rows measured on main runs 37398893123, 37461653250 and
  37478400505.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…unts

A cold full-row native profile of d5ffd30 on a c5.4xlarge Spot host ran
941/941 rows: 940 passed and test_ci_verify was cut off by the 2100 s
default deadline (Timeout 2100.07 s). The same script then completed in
2177.7 s (162 tests OK) in that host's preflight. GitHub measured
984-1695 s. Raise the native default per-test deadline to 2700 s (24%
over the slowest measured host) inside a 2820 s CTest stage. The measured
cold pre-CTest time was 12.3 min, so a worst-case stage still fits the
unchanged 65-min verification step and 75-min job. Live profiles keep
900/1200 s.

That failed run's ci-summary recorded no executed/skipped counts. CTest
prints a listed row's labels after its status ("2 - test_ci_verify
(Timeout)   slow"), and CTEST_LISTED_ROW required the line to end at the
status, so the row list was unreadable. Accept trailing labels. A new
real-CTest test pins labelled failed, skipped and not-run rows.

docs/ci.md rewords the `native-live (native)` timeout-table row written
by the docs commit "Document independent native proofs and preserve
source anchors". Its sentence "The longest measured test_ci_verify row
was 1695 s; its new 2100-s default deadline gives 24% margin within a
2400-s CTest stage" now carries the Spot measurement and the new bounds.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Use the existing CTest capability detector and condition only XML presence; retain the real timeout, witness, row-count, elapsed and log checks.

Rewrite the driver-default and blanket two-times timeout sentences introduced by d093560 (INT26, #290). Document the workflow's 47-minute native and 20-minute live overrides and the table's measured-margin policy without changing historical timings.
Allow the real labelled fixture to render an undecorated failed-list row. Verify slow/live labels for every fixture row through genuine CTest JSON inventory, retain the synthetic label-suffixed parser witness and all row accounting, and require the real failure exit code. Leave JUnit capability handling and production code unchanged.
@luisleo526
luisleo526 marked this pull request as ready for review October 7, 2026 17:01
@luisleo526
luisleo526 merged commit 065ef1d into main Oct 7, 2026
35 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