Commit Graph

18 Commits

Author SHA1 Message Date
bherbruck 21cb5281cf ci: workflow gate tests allow the changes classifier as the difftest jobs' only extra need
Perturb and sweep still never wait for the base; compare still needs the validated
base and the sweep and fails closed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QaDuBSC1mqS9DnQoEsr7LJ
2026-10-25 15:33:10 -04:00
bherbruck 8c7070b220 ci: changes.sh lists renames as delete + add so moving code into docs runs the full gate
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QaDuBSC1mqS9DnQoEsr7LJ
2026-10-25 15:20:26 -04:00
bherbruck 16eebaed5b ci: skip build/test/difftest on docs-only changes; pushes to main run only publishing jobs
CI runs ~200 times a day at ~47 runner-minutes each (Blacksmith, sponsored).

- New `changes` job (scripts/ci/changes.sh). code=false only for a pull_request or
  merge_group whose diff touches nothing but prose no build/test/difftest reads
  (plan/findings/, plan/upstream-issues/, plan/*.md, site/, docs/, assets/, top-level
  *.md). Those skip clippy/test/wasm/publish-dry-run/deny and the difftest jobs; the
  required checks report "skipped" (passing). fmt (with the frozen-archive guard) and
  ci-scripts always run. Any doubt (no base, fetch failure) means code=true.
- Pushes to main (full=false) were already tested on the identical tree by the merge
  queue: they now run only what publishes main's artifacts, difftest-sweep (the
  difftest-reports the next PRs' exact-base ratchet reads) and the solids report step.
- `difftest` aggregate: passes on non-full runs when the sweep succeeded or was skipped;
  on full runs it still requires every part.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QaDuBSC1mqS9DnQoEsr7LJ
2026-10-25 15:18:59 -04:00
bherbruck 9c6f3218c4 Merge origin/main (#983); drop the stale frozen notice from the issues README
Keeps #983's known_mismatches.toml guard next to the archive guards in
check-frozen-archives.sh, and both sides' wording in AGENTS.md and
plan/findings/README.md. split_archives.py leaves the issues archive's own
"Frozen archive" notice (3 lines, dead relative link) out of the README; the
check lists those lines and compares the rest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QaDuBSC1mqS9DnQoEsr7LJ
2026-10-25 14:36:45 -04:00
bherbruck b238132e01 plan: split findings and upstream-issues archives into per-record files (ADR style)
scripts/split_archives.py (run with python3 -I) splits the frozen plan/findings.md
(425 `## ` sections) and plan/upstream-issues.md (436 `#### ` entries) into one file
per record under plan/findings/ and plan/upstream-issues/, moves the archives' intro
and "Note: duplicate IDs" text into the READMEs, and deletes the archives.
`split_archives.py check` proves the split lossless against the archives at 4fe6f4d51.

site/build.py reads issues only from the directory (intro from its README);
check-frozen-archives.sh now fails if either archive comes back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QaDuBSC1mqS9DnQoEsr7LJ
2026-10-25 14:29:16 -04:00
bherbruck a57e220b45 difftest: one known-mismatch file per unit; no SolidCraft case count to bump
Known mismatches move from the shared crates/difftest/known_mismatches.toml
to crates/difftest/known_mismatches/<unit id>.toml (same [[mismatch]]
schema, the 24 entries copied verbatim). for_unit reads only that unit's
file (missing = no entries) and rejects an entry whose `unit` differs from
the file name. A test checks every file names a plan unit and is non-empty,
and check-frozen-archives.sh fails if the old shared file comes back.

SolidCraft cases were already one JSON file per issue; the conflicts came
from a hard-coded total case count in every_case_file_loads that each case
PR bumped. The test now derives the total from the files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QaDuBSC1mqS9DnQoEsr7LJ
2026-10-25 14:18:45 -04:00
bherbruck a5c79f3fe0 ci: reject new lines in the frozen findings archives; updates are addenda
scripts/ci/check-frozen-archives.sh runs in the required fmt job and fails a
change that adds lines to plan/findings.md or plan/upstream-issues.md once the
base has the freeze notice (deletions pass). Updates to an earlier record,
including archive entries, are new addendum files that link to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QaDuBSC1mqS9DnQoEsr7LJ
2026-10-25 13:48:42 -04:00
Brett Lawson 48995e4c45 ci: run the difftest gate as parallel jobs with an aggregating required check
Split the serial difftest job: the exact-base artifact is fetched and validated in
one job while the green sweep and the mandatory perturbation check run in their own
jobs. A new difftest --compare-reports mode applies the same ratchet as --baseline to
the sweep's finished reports, and the required check name 'difftest' becomes an
aggregator that fails unless every part succeeded.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-25 10:35:18 +01:00
Federico Dal Maso 18fb23232c fix: resolve merge-queue baselines against main ancestry
Resolve speculative queue bases before selecting the exact trusted push/main artifact, and allow 25 minutes for pending main CI. Keep ancestry provenance and add queue, retention, integrity and timeout regressions.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-24 17:26:46 +02:00
Thijs Damsma e8b30d738a test(ci): exercise exact-count producer migration through artifact retrieval
Machine-generated by OpenAI Codex.
2026-10-24 11:44:46 +02:00
Thijs Damsma 7ea23f20dc Validate exact-base retention before optional native execution
Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-24 09:11:45 +02:00
Thijs Damsma 67fca9b0f8 Retain known mismatch outcomes and exercised value coverage
A known mismatch may remain known or become a real pass, never deferred or rejected. Retained cases keep numerical value coverage. Legacy indexed integer mismatch evidence proves presence without fabricating omitted comparison counts; ambiguous known integer coverage fails closed.

Co-authored-by: Codex <codex@openai.com>
2026-10-23 11:50:07 +02:00
Thijs Damsma 2bb0adc382 Match report unit validation across artifact and CLI parsers
Co-authored-by: Codex <codex@openai.com>
2026-10-23 11:02:08 +02:00
Thijs Damsma 7ab15eb010 Exercise artifact HTTP failures and bounded pending retries
Co-authored-by: Codex <codex@openai.com>
2026-10-23 11:01:20 +02:00
Thijs Damsma c474f88f0a Merge main into regression-gate work and refresh exact-base validation
Preserve the original regression-gate author commits while retaining current CLI, report, known-mismatch and CI behavior. Validate trusted exact-base artifacts before applying case retention and the unchanged value-share floor.

Co-authored-by: Codex <codex@openai.com>
2026-10-23 10:54:15 +02:00
bherbruck 229a42dad7 ci: run every job on Blacksmith, drop the self-hosted route
Pushes to main used the org's self-hosted runners (two of four are offline) while every PR
already ran on Blacksmith's sponsored runners. Move main onto Blacksmith too, give
difftest 16 vCPU, and remove the self-hosted-only steps and warm-target.sh. Caching is
actions/cache throughout. Fallback when the sponsorship ends: blacksmith-* labels back
to ubuntu-latest.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pfe7dodPG5rpuN9B8QcnuX
2026-10-20 13:01:11 -04:00
Jacob Oursland 74097c055f ci: fail the difftest job when the baseline cannot be obtained
Review (#215): a failed fetch or extraction of the base commit's reports only
warned, so --green then ran without --baseline and the ratchet was silently
off. Move the step into scripts/ci/difftest-baseline.sh: a pull request must
have a base; for a real base, fetch, extraction and "has reports" must all
succeed or the job fails. Only a push without a base commit (all-zero
`before`) or a manual run skips the ratchet, with a notice.

scripts/ci/test-difftest-baseline.sh exercises it in a throwaway repo (real
base, failed fetch for PR and push, base without reports, missing/zero base,
bootstrap cases), run by a new ci-scripts job. Restoring the old warn-only
behaviour makes it fail.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-18 21:15:17 -07:00
bherbruck 433e1b2cbd ci: run trusted jobs on the self-hosted runners (#193)
* ci: run trusted jobs on the self-hosted runners

Pushes to main and pull requests from branches of this repository now run fmt,
clippy, tests, wasm, the publish dry run and difftest on the org's self-hosted
runners, which keep their Cargo build directory and C++ reference build between
jobs. cargo-deny (a container action), fork pull requests and Run workflow stay
on GitHub's runners. The C++ cache on GitHub is no longer shared with the
self-hosted build, whose newer compiler and glibc must not reach GitHub's runners.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci: re-run on the self-hosted runners

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 10:05:15 -04:00