Commit Graph

43 Commits

Author SHA1 Message Date
bherbruck 747c5fe76e difftest: park cpp_defect known mismatches; watch upstream usd-brep and re-check them on change
A known-mismatch entry with cpp_defect = "<id>" (a confirmed upstream issue) is now parked:
not run in the required gate, not a pass, not blocking green, counted as parked=N and listed
on the unit's site page with its issue id. Removing the marker runs the case again.

--run-parked runs only the parked cases. The new parked-upstream workflow checks usd-brep's
tags and HEAD daily with git ls-remote (no checkout, no build) and, only when they change or
on workflow_dispatch, builds that upstream, runs the parked cases and opens or updates one
"usd-brep <tag> released: N parked cases now agree, adopt?" issue. It needs only
contents: read and issues: write.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 08:08:45 -04:00
Brett Lawson 691671ecf0 difftest: count cases where the C++ reference is verified wrong as success
A known-mismatch entry may name a confirmed upstream issue with
cpp_defect = "<UB-/WR-/ND-/HANG- id>" (validated against
plan/upstream-issues/<id>--*.md with "Confirmed: yes"). Such a case is
classified cpp_defect: reported separately (cases_cpp_defect, its own run
output line and site row) and counted as a success, so it does not keep
the unit from green; the site's units table counts it as passed. Plain
known mismatches still make a unit partial.

Ratchet (Rust and scripts/ci/difftest_baseline.py): known_mismatch and
cpp_defect may turn into each other or into a pass, never disappear,
defer, be rejected or fail; a baseline pass may not become either.

topology.brep_p10 read_Solids_fillet_ts is marked cpp_defect = UB-255
(glibc tcache reuse of a freed SmVertexProps in
SmHealData::Fix_CoinVertices); the unit is green.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 08:23:33 +01:00
bherbruck 7b130f6fb7 Merge pull request #985 from tangency-labs/feat/step-import
feat: clean-room STEP AP203/AP214 import for corpus testing
2026-10-25 15:58:59 -04:00
bherbruck 642b09188c Merge remote-tracking branch 'origin/main' into feat/step-import 2026-10-25 15:42:21 -04:00
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 aeade86449 feat: clean-room STEP AP203/AP214 import for corpus testing
- crates/step-import: ISO 10303-21 reader and AP203/AP214 B-rep mapper to a
  neutral plain-data model (mm, resolved placements), written from the public
  Part 21 syntax and Part 41/42 entity definitions; bounded entity count, list
  nesting and reference depth; every reference checked; no allocation from
  file counts. Flat f64 encoding (+ validating decoder) for the C++ side.
- harness/cpp/shim/step_import.cpp + solidcore-ffi binding: builds the SMLib
  B-rep from the same encoded body (CreateCanonical geometry,
  CreateFacesWithCurves, SmApiStitchIntoSolid, mass properties, SmApiHealBrep).
- difftest --step-corpus: the same recipe on the Rust port, each (body, kernel)
  in a child process, stage-by-stage comparison at 1e-9 relative.
- scripts/fetch-steptools-corpus.sh: STEP Tools sample files into the gitignored
  corpus/steptools/, SHA-256 pinned (never committed).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QaDuBSC1mqS9DnQoEsr7LJ
2026-10-25 14:53:12 -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 126d95c9a2 Merge current main into preserved regression gate
Co-authored-by: Codex <codex@openai.com>
2026-10-23 22:22:01 +02:00
Jacob Oursland 204e87e005 scripts: two-tier mutation testing harness
Mutation testing finds behavior no check constrains. For solidcore the useful
question is two-tier: a mutant matters only if neither the package's unit tests
nor the unit's difftest notices.

scripts/mutants.sh runs cargo-mutants (unit tests) on a module, a shard or a PR
diff, then patches each unit-test survivor into the working tree and replays it
against difftest --unit <id>, classifying it as caught-by-difftest or
both-tier-missed. Docker mode reuses one container for the replays; the script
prefers the pinned rustup toolchain and runs under nice with CARGO_BUILD_JOBS=2.

docs/mutation-testing.md documents the method, measured costs (~16 s/mutant,
~1 min/survivor), triage, and a CI proposal (per-PR in-diff tier 1, nightly
sharded tier 2), with the pilot findings: topology.topology's change-tracker
bookkeeping is unconstrained by both tiers.

reports/mutants/ is gitignored.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 10:51:51 -07: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 543289917c site: track solids (primitives built/passing), corpus placeholder
The primitives example takes --json <path> and records per shape whether it
built, the blocker (unit + upstream symbol), and each check (manifold, Euler,
counts, volume, area, bbox) with expected/actual/rel. error. The checks run
independently (evaluate); check() keeps its first-failure messages, and the
human-readable output is unchanged.

CI's test job runs it and, on pushes to main, uploads solids-report;
scripts/fetch-solids.sh fetches it with fetch-reports.sh's provenance rule
and the Pages build uses it. New Solids page (headline count, table of
primitives with checks and blockers, Corpus (real models) placeholder) and an
overview tile; both say "no data yet" without the report.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-22 22:55:47 -04:00
Henrik Lampe 6599154c96 Extend SweepStore with native constructors and retained merge services
Use one borrowed/owned store for sweep and primitive access. Preserve caller ownership, source notifications and merge state across errors and unwinding; verify real point-to-edge construction against the original C++ kernel.

Co-Authored-By: Codex <noreply@openai.com>
2026-10-22 15:41:04 +02:00
bherbruck 6fc2a8f199 Merge pull request #486 from tdamsma/difftest/wasm-digest
difftest: Rust-only digest mode and wasm32-wasip1 build (native vs wasm digests)
2026-10-22 05:21:48 +00:00
bherbruck ead02a9ec1 ci: cut CI wall time (parallel jobs, opt-level 0 difftest glue, time-ordered queue)
- difftest no longer waits for the test job; cpp clippy moves to the clippy job and
  the runner tests to the test job (both 8 vCPU), sharing a composite action that
  clones upstream, enables sccache and installs the C++ reference.
- [profile.difftest.package.difftest] opt-level = 0: the ~300k-line runner crate took
  ~5 of the ~6 build minutes at opt-level 3; solidcore stays at 3. Reports are
  byte-identical.
- difftest --jobs orders its queue by each unit's wall time in the previous run
  (reports/difftest/times.tsv, uploaded with main's reports), so the slowest unit
  starts first and the run ends at the longest unit's time.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0158BfaB2oaoX64fskuKP1bm
2026-10-22 00:55:52 -04:00
Thijs Damsma b1f65b3513 difftest: --digest-dir (Rust side only) and a wasm32-wasip1 build for native vs wasm digests
- `difftest --digest-dir DIR [--digest-debug]` runs only `run_rust` and writes the
  DIFFTEST_RUST_DIGEST-style per-case digest (and optionally the Debug output).
- On wasm32, solidcore-ffi links no C++: shims stay `env` imports, served by the stub
  module from scripts/wasm_stub.py (SC_ERR_UNLINKED + call counter -> `needs-cpp`).
- scripts/wasm-digest.sh builds both targets, runs native and under wasmtime, compares.
- solidcore-ffi: MAX_LOOP_INDEX `1 << 40` overflowed on 32-bit targets (E0080).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9QwJFBTKLZ9FFK3nVd1X4
2026-10-22 06:37:37 +02:00
bherbruck 688f1a7ac0 fetch-reports: trust only push runs of this repo's ci.yml on main
Selecting artifacts by head_branch alone accepted fork PR runs whose branch
is named main. Runs are now listed per workflow and filtered on event, path,
repository and head repository before their artifact is downloaded.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0158BfaB2oaoX64fskuKP1bm
2026-10-21 19:52:03 -04:00
bherbruck bdc9e08694 fetch-reports: look up the artifact directly; runner doc points at plan/units
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 19:44:32 -04:00
bherbruck fe4a9c1425 infra: stop shared-file conflicts (per-unit plan files, reports from CI, union merges)
- plan/modules.toml -> plan/units/<id>.toml (scripts/units-split.py), read everywhere
  through harness/plan/units.py (Python) and crates/difftest/src/plan.rs (difftest).
- reports/difftest/ untracked and gitignored: CI uploads main's set as the
  difftest-reports artifact; scripts/fetch-reports.sh downloads it for the progress
  checklist, the site and the --jobs queue order (fixture-size fallback otherwise).
- .gitattributes: merge=union for plan/findings.md and plan/upstream-issues.md.
- scripts/units-migrate-branch.sh moves an old branch's modules.toml edits into the
  unit files after it merges main.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 19:39:59 -04:00
bherbruck 100535f457 Merge pull request #333 from tdamsma/perf/basis-eval-stack
perf: point evaluation without a heap basis array (outputs bit-identical)
2026-10-21 14:38:45 +00:00
Thijs Damsma eb7b5391b2 difftest: document n= in TIME line; analyze.py: close profile file
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9QwJFBTKLZ9FFK3nVd1X4
2026-10-21 03:38:03 +02:00
Thijs Damsma 9d53492183 Merge origin/main into perf/kernel-eval-allocs
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9QwJFBTKLZ9FFK3nVd1X4
2026-10-21 03:38:03 +02:00
Thijs Damsma 1e6b0bf20e Merge remote-tracking branch 'origin/main' into perf/basis-eval-stack 2026-10-21 01:29:02 +02:00
Thijs Damsma 2c78dac714 perf: point evaluation without a heap basis array (outputs bit-identical)
- KnotVector::basis_eval_into: N_BasisEval into a caller buffer (same
  values, same errors); basis_eval wraps it
- srf_nurb::Surface::eval (N_SrfEvalPt) and crv_nurb::Curve::eval
  (N_CrvEval) keep N on the stack, as upstream; one malloc/free less per
  basis per point evaluation
- test: basis_eval_into equals basis_eval bit for bit, errors included
- scripts/perf/samply_top.py: self/inclusive/callee/allocator tables and a
  Rust/C++ split from samply profiles (no GUI)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9QwJFBTKLZ9FFK3nVd1X4
2026-10-20 22:27:53 +02:00
bherbruck 49ca9d2475 ci: prebuilt C++ reference download + sccache for shims
scripts/cpp-ref-key.sh names a harness/cpp/build.sh output (upstream commit plus a
hash of CMakeLists.txt, build.sh, stubs/**, patches/**). The new cpp-reference
workflow builds it on Ubuntu 24.04 and publishes it as GitHub Release
cpp-ref-<key>; scripts/fetch-cpp.sh downloads and verifies it (curl, no token) or
falls back to build.sh. CI's difftest job fetches instead of building and runs
Rust and the cc-compiled shims through sccache.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pfe7dodPG5rpuN9B8QcnuX
2026-10-20 15:02:38 -04: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
Thijs Damsma af94851172 difftest: per-unit TIME line, opt-in Rust output digest
- UnitResult.timing (not in the report): wall time of case building,
  run_cpp, run_rust, compare and the slowest Rust case; main prints
  `TIME <unit> ...` to stderr per unit
- DIFFTEST_RUST_DIGEST=<dir>: writes <dir>/<unit>.digest with one
  `<case>\t<fnv1a64 of format!("{rust_output:?}")>` line per case, so two
  builds can be proved bit-identical; off by default
- README: --green takes ~35 min on 16 threads (not ~2 min), TIME line,
  digest, and scripts/perf (ptrace sampler + analyzer, no sudo needed)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9QwJFBTKLZ9FFK3nVd1X4
2026-10-20 16:45:42 +02: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
bherbruck 11bc973555 difftest --ssi-corpus: review fixes (exact float parsing, copyright, plane NURB deviation)
- difftest: serde_json float_roundtrip, so inputs parse correctly rounded like strtod
  (1610 corpus numbers were 1 ULP off); regenerated reports/ssi-corpus.json and the five
  difftest reports whose values_compared counts moved (all still pass; --green 0 failed)
- ATTRIBUTION.md: ssi-corpus copyright line from its LICENSE-MIT
- surface.plane_p1/p2: record that natural_uv_domain does not cache the NURB as
  upstream GetNaturalUVDomain does, which changes IntersectWithPlane's parallel branch;
  findings entry moved under surface.plane_p1, follow-up in modules.toml notes
- engine: Rust side rejects what the C++ encoder rejects; torus deferrals name
  surface.surface_p2 (owner of SurfaceKind); shim degree bound NL_MAXDEG
- fetch script: refuse an existing checkout with local changes

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 21:43:06 -04:00
bherbruck 87d1ab2c85 difftest --ssi-corpus: full-SHA corpus pin, upstream issues WR-74..80, findings
- scripts/fetch-ssi-corpus.sh pins b04c8a6093a8b3505d865d1dd874ec3879ccb1f9, checks
  the existing checkout's origin URL and requires HEAD to equal the pin
- plan/upstream-issues.md: the 38 C++ misses on the corpus, grouped (WR-74..WR-80)
- plan/findings.md: scorer agreement and the plane NURB state note

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 20:30:24 -04:00
bherbruck d267b51b83 difftest: --ssi-corpus mode scoring Rust and C++ against jyviko's SSI corpus (WIP)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 20:12:39 -04:00