By: Elijah Cavan <eli_cavan@live.ca>
oneloop: wire crate into CI, guard idenso projector expansion Post-merge fixes to unblock review of PR #86. CI / build: - gammaloop-api: add the missing `reduce: None` field to the `Save::Dot` test initializer; `cargo check -p gammaloop-api --all-targets` was failing with E0063, which broke the clippy and test jobs. - Add `oneloop` to the nextest package lists in `justfile` (both the local `test_gammaloop` and the CI `_test-ci` arrays) so its 40 tests actually run. - Add an `oneloop` nextest group to `flake.nix` and mirror it into `nix-ci.nix`, satisfying the split-package coverage assert. - Regenerate `nix/ci-workspace-graph.json` and the copy inlined in `nix-ci.nix` to include the crate. Generated by reproducing the `guppyWorkspaceGraphJson` pipeline from `flake.nix`; verified by regenerating the pre-oneloop graph byte-identically first. Needs a confirming `nix build .#ci-workspace-graph-json` on a machine with Nix. - `cargo fmt --all` (21 hunks across the benchmark examples and bridge.rs). idenso chirality projectors: - Guard the projector expansion on four-dimensional bispinor endpoints, mirroring every other dimension-sensitive rule in the file. Every downstream gamma5 rule is 4D-only, so expanding on `bis(d, ...)` stranded an irreducible gamma5 and left the expression worse than the inert `projp` it replaced. In d dimensions output is now unchanged from main. - Move the expansion from a `[Replacement; 2]` applied at simplify entry into guarded rules on the chain and trace nodes. This also makes `simplify_gamma` idempotent on projector-bearing input. - Fix a capacity underflow in `chain_factors` that panicked on a lone projector — `chain(bis(4,a), bis(4,b), projp(in,out))`, i.e. the Yukawa vertex, the most common chiral structure in the SM. - Gate the equal-endpoint `chain(i,i) -> trace` rule on `evaluate_traces` so `without_trace_evaluation()` keeps its historical output shape. - Add `test/chirality_projector.rs`: 15 regression tests covering the 4D guard, the d-dimensional inert path, idempotency, the trace gate, the lone-projector case, and projector-position epsilon sign. - Correct the sign-label prose on the existing trace test; the assertion was right, the comment described the wrong operator ordering. reduce_bridge: - Repair `SpensoPrintSettings::typst().typst_symbolica()`, which the merge broke; spenso renamed it to `typst_options()`. - Drop the redundant `collect_gamma_chains()` — `simplify_gamma` already collects, and calling it first could strand an `Add` inside a cyclic factor slot. docs: - Update 08-projector-traces.md to describe the guarded implementation and state the 4D behaviour change plainly; the "every existing gamma/trace path is byte-identical" claim was only true in d dimensions. - Fix the stale printer reference in 05-app.md. Verified: cargo check --all-targets clean for oneloop, idenso, gammalooprs and gammaloop-api; `cargo test -p oneloop` 40 passed / 1 ignored; `cargo fmt --all -- --check` clean. Pre-existing and unrelated: a `pyo3-stub-gen` build failure from the local Python toolchain, identical on main. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lgs5exR1ZjgEDpd9w3xVqs