Skip to content

chore(deps): pin dev's Jolt crates to Jolt main (f5c1947b1) - #252

Merged
quangvdao merged 5 commits into
devfrom
chore/repin-jolt-main-dev
Oct 26, 2026
Merged

quangvdao merged 5 commits into
devfrom
chore/repin-jolt-main-dev

Conversation

@quangvdao

@quangvdao quangvdao commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

dev pinned every Jolt crate at c7c2d08d5, a commit on the unmerged metal/fp64-ext2 branch. This PR moves every pin to the current Jolt main tip, f5c1947b1. It also adds a CI check so that a Jolt pin that isn't on main can't come back.

Why the pin can move to main

c7c2d08d5's own commits change only jolt-metal, plus a spec and a report script. That work landed on Jolt main as squash merges: a16z/jolt#1938, #1939, #1944, #1946 and #2005. Git doesn't count c7c2d08d5 as part of main, because squash merges create new commits, but its content is there.

jolt-field, jolt-poly and jolt-sdk at c7c2d08d5 are just an older main. Moving the pin picks up about a hundred commits of ordinary progress on main.

Changes

  • Pins. Every a16z/jolt rev in the root, fuzz/ and profile/akita-recursion/ manifests moves from c7c2d08d5 to f5c1947b1. That includes akita-labinius-prover, akita-labinius-verifier, akita-zk-prover and akita-zk-verifier. The three lockfiles are updated in place: Cargo changes only the Jolt entries, plus the arkworks entries described below.

  • The last seven Jolt commits. I first moved the pins to 14315e958, then to f5c1947b1 after dev picked up the 169-bit SIS sync (chore(dev): sync main into dev (2026-10-25) #264). The seven commits in between (fix(jolt-eval): read Criterion estimates from where Criterion writes them a16z/jolt#2128–#2131, #2097, #2099, #2142) touch jolt-transcript (field challenge codecs and proof of work on the sponge), jolt-claims, jolt-verifier, jolt-program, the guest runtime's memcpy, and Jolt's own tooling. None of them touches jolt-field, jolt-poly, jolt-utils or jolt-metal, the only Jolt crates Akita's own crates depend on. They reach only the recursion profile, through jolt-sdk, and needed no source change there.

  • akita-metal. Jolt main replaced the safe Batch::dispatch with unsafe fn Batch::dispatch_unchecked. The caller must now promise that each kernel stays inside the buffers it is given, and that its threads synchronize correctly.

    All 9 call sites now carry a SAFETY comment. Each one is checked against both the kernel source and the host-side shape checks that size the buffers. The sites are:

    • CRT reconstruction
    • the NTT transforms
    • decomposition
    • the matvec partial-sum, finish and CRT passes
    • one-hot commit and combine
    • the Montgomery test kernel

    No kernel or shape check changed.

  • Recursion host. Jolt main's generated verifier returns Result<(), VerifierError> instead of bool (fix(sdk)!: return the verification error from generated verify a16z/jolt#2064). The host reports the verifier's error instead of negating a bool, and it logs accepted where it logged is_valid. The README and the Book line that quote that log are updated to match.

  • Jolt's own Akita pin. Jolt main pins Akita at dfdbd7674 (feat(akita)!: NIST category 3 Module-SIS and 2^31 schedule coverage a16z/jolt#2107), which is on Akita main.

    • Reach. It enters only the recursion profile's lockfile, through jolt-sdk. It is a separate copy of Akita that this workspace's own crates never use, so it doesn't conflict with dev.
    • Its Jolt pin. dfdbd7674 pins Jolt 1618f4b6d, which is on Jolt main.
  • arkworks in the recursion profile. The profile patches ark-* to a16z's arkworks-algebra dev/twist-shout branch, as Jolt does. Re-resolving jolt-sdk moved that branch from 76bb3a45 to b8f0f512, the commit Jolt main's own lockfile uses.

  • scripts/check-jolt-pins-on-main.sh, run as the new Jolt pins on main CI job. The script reads every a16z/jolt rev in tracked Cargo.toml and Cargo.lock files. It fails if a rev is not a full commit hash, or is not an ancestor of Jolt main.

    The ancestry check needs Jolt's full commit history, so the script fetches it with a treeless partial clone (every commit, no file contents), not a shallow one. A shallow clone would wrongly reject old pins. AGENTS.md lists the script in the preflight checks.

The ctutils 0.4.5 bump this PR used to carry is now on dev through #263.

Validation

Run locally on macOS (Apple M-series) at 76a4c40:

  • cargo fmt --all --check (root and recursion profile), taplo fmt --check and typos pass.
  • scripts/check-jolt-pins-on-main.sh passes. The pins it finds are f5c1947b1 and 1618f4b6d. The second reaches the profile lockfile through jolt-sdk's own pin of Akita, and it is on Jolt main.
  • scripts/check-shared-field-identity.sh reports one jolt-field and one jolt-poly identity at f5c1947b1 in every workspace, including the recursion profile.
  • Clippy with -D warnings passes in the four workspace configurations from ci.yml (default, no-parallel, akita-pcs response-model diagnostics, dev-protocol), the LaBinius trinomial, binary, SIS and prover/verifier configurations, and akita-metal.
  • The profile smoke steps from jolt-verifier-profile-smoke.yml pass with RUSTFLAGS=-D warnings: akita-recursion-glue tests (16 passed), the same with trusted-benchmark-artifact (22 passed), and cargo check --release of the recursion workspace.
  • fuzz/: cargo fmt --check, cargo check --locked --workspace --all-targets, cargo test -p akita-fuzz --lib (4 passed) and cargo test --release -p akita-fuzz-runner (20 passed).

Proof bytes. The Jolt source Akita's own crates compile against is unchanged between 14315e958 and f5c1947b1, because none of the seven new commits touches jolt-field, jolt-poly, jolt-utils or jolt-metal. The comparison from the earlier revision of this PR still holds: at 14315e958, akita-recursion-artifact produced byte-identical setup-plus-proof blobs to dev on onehot_fp32:30:1, onehot_fp64:30:1 and onehot_fp128:36:1:direct.

GPU tests

No CI workflow runs the akita-metal GPU tests, because they are macOS-only. I ran them at 76a4c40 with cargo test --profile ci-test -p akita-metal --lib --tests. All 38 passed: 5 unit tests plus the crt, decompose, matvec, mont, ntt and onehot integration tests. These tests need a GPU and fail without one; they never skip.

Interaction with #229

#229 adds crates/akita-labinius-pcs, which pins jolt-field at dev's old c7c2d08d5. Whichever of the two lands second has to move that line and its lockfile entry to f5c1947b1. The Jolt pins on main job fails until it does.

🤖 Generated with Claude Code

dev pinned every a16z/jolt crate at c7c2d08d5 on the unmerged
metal/fp64-ext2 branch. Its jolt-metal work has since landed on Jolt main
through squash merges (#1938, #1939, #1944, #1946, #2005), so every pin
moves to Jolt main 5aa807b03 and the three lockfiles are regenerated.

Jolt main replaced the safe Batch::dispatch with the unsafe
Batch::dispatch_unchecked, whose caller must keep each kernel inside its
bound buffers. Each of akita-metal's nine dispatch sites now carries a
SAFETY argument checked against the kernel source and the host-side
shape checks that size its buffers. No kernel or shape check changes.

scripts/check-jolt-pins-on-main.sh, run as a new CI job, fails when a
tracked Cargo.toml or Cargo.lock pins a16z/jolt at anything but a full
commit hash that is an ancestor of Jolt main. It reads main's full commit
graph through a treeless partial clone, so no shallow history can make an
old pin look unrelated.
@github-actions

Copy link
Copy Markdown

Warning

This PR has more than 500 changed lines and does not include a spec.

Large features and architectural changes benefit from a short spec before implementation review.
See CONTRIBUTING.md for the spec workflow.

If this PR is a bug fix, small cleanup, or otherwise does not warrant a spec, feel free to ignore this message.

@github-actions github-actions Bot added the no-spec PR has no spec file label Oct 20, 2026
@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Documentation blast radius (advisory)

These regions may need doc/spec/book updates based on changed paths.
This is not a merge gate. See docs/documentation.md.

Changed files in this PR: 38

workspace-crates

Workspace membership and public crate surface

Code paths touched:

  • crates/akita-algebra/Cargo.toml
  • crates/akita-challenges/Cargo.toml
  • crates/akita-config/Cargo.toml
  • crates/akita-cpu-backend/Cargo.toml
  • crates/akita-labinius-prover/Cargo.toml
  • crates/akita-labinius-verifier/Cargo.toml
  • crates/akita-metal/Cargo.toml
  • crates/akita-params/Cargo.toml
  • crates/akita-pcs/Cargo.toml
  • crates/akita-prover/Cargo.toml
  • crates/akita-serialization/Cargo.toml
  • crates/akita-setup/Cargo.toml
  • crates/akita-sumcheck/Cargo.toml
  • crates/akita-transcript/Cargo.toml
  • crates/akita-types/Cargo.toml
  • crates/akita-verifier/Cargo.toml
  • crates/akita-zk-prover/Cargo.toml
  • crates/akita-zk-verifier/Cargo.toml

Consider updating:

  • README.md
  • docs/crate-graph.md
  • book/src/how/architecture.md

planner-schedule

Schedule tables, DP fallback, proof-size planning

Code paths touched:

  • crates/akita-config/Cargo.toml

Consider updating:

  • book/src/how/configuration.md
  • book/src/usage/profiling.md
  • specs/planner-*.md
  • specs/PRUNING.md

sis-security

SIS floors, norm bounds, challenge sampling

Code paths touched:

  • crates/akita-challenges/Cargo.toml

Consider updating:

  • book/src/how/security.md
  • book/src/foundations/lattices-sis.md
  • specs/archive/2026-Q2/akita-sis-*.md
  • specs/archive/2026-Q2/sis-euclidean-estimator.md
  • specs/fold-linf-rejection.md
  • docs/security-posture.md

prover-protocol

Prove pipeline, folds, sumcheck stages

Code paths touched:

  • crates/akita-sumcheck/Cargo.toml

Consider updating:

  • book/src/how/proving/**
  • book/src/how/recursion.md
  • book/src/usage/feature-flags.md
  • specs/dynamic-backend-bridges.md
  • specs/packed-sumcheck.md
  • specs/archive/2026-Q3/terminal-fold-cutover.md
  • specs/archive/2026-Q3/protocol-field-geometry-cutover.md

verifier

Verifier replay and no-panic boundary

Code paths touched:

  • crates/akita-verifier/Cargo.toml

Consider updating:

  • book/src/how/verification.md
  • book/src/how/proving/fold-path.md
  • docs/verifier-contract.md
  • docs/verifier-panic-audit.md
  • specs/archive/2026-Q3/security-hardening.md
  • specs/archive/2026-Q3/protocol-field-geometry-cutover.md

transcript

Fiat-Shamir transcript and instance binding

Code paths touched:

  • crates/akita-transcript/Cargo.toml

Consider updating:

  • book/src/how/transcript.md
  • book/src/usage/commitment-api.md
  • specs/transcript-*.md

commitment-setup

Setup expansion and Ajtai commitment

Code paths touched:

  • crates/akita-setup/Cargo.toml

Consider updating:

  • book/src/how/commitment.md
  • book/src/usage/commitment-api.md
  • book/src/usage/setup-runtime.md
  • specs/family-agnostic-cpu-backend.md
  • specs/setup-*.md

field-algebra

Field traits, packed SIMD, extension towers

Code paths touched:

  • crates/akita-algebra/Cargo.toml

Consider updating:

  • book/src/foundations/rings-and-fields.md
  • book/src/foundations/ntt-crt.md
  • book/src/how/optimizations.md
  • specs/archive/2026-Q3/akita-field-refactor.md
  • specs/archive/2026-Q3/crt-ntt-*.md
  • specs/archive/2026-Q3/avx-simd-port.md

pcs-umbrella

Public PCS API, examples, integration tests

Code paths touched:

  • crates/akita-pcs/Cargo.toml

Consider updating:

  • book/src/usage/**
  • README.md

ci-tooling

CI workflows and repo scripts

Code paths touched:

  • .github/workflows/ci.yml
  • scripts/check-jolt-pins-on-main.sh

Consider updating:

  • docs/ci-test-timing.md
  • docs/documentation.md
  • specs/archive/2026-Q3/ci-test-timing.md

book-tooling

Book structure and guardrails

Code paths touched:

  • book/src/usage/jolt-recursion.md

Consider updating:

  • book/README.md
  • docs/documentation.md
  • specs/PRUNING.md

Per-PR checklist: spec Status / acceptance criteria; book owning page; AGENTS.md if contracts changed; archive spec after fold.

@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

PCS Profile Benchmark

  • Head: 76a4c40
  • Workflow run: run 40318544601 attempt 1
  • Protocol: dev (built with dev-protocol). A merge base without that feature ran the current protocol.
  • Merge base: 9247e8e from the merge-base benchmarked on this runner.

13 of 13 profiles passed.

Times are medians of 3 measured runs after 1 discarded warmup run. Peak RSS is the largest measured value.

Each sample verifies the same proof first with the configured multi-threaded pool and then with one thread. Both timings reuse the same verifier setup.

Merge-base comparisons are available for 13 of 13 profiles. For matching profiles, the head and merge-base binaries ran interleaved on the same runner.

Benchmark shards

CI shard Profiles
1-fp32-base Fp32 dense nv30, direct setup check
Fp32 one-hot nv34, direct setup check
2-fp64-base Fp64 dense nv29, direct setup check
Fp64 one-hot nv35, direct setup check
3-fp128-base Fp128 dense nv28, direct setup check
Fp128 one-hot nv36, direct setup check
Fp128 one-hot nv36, recursive setup check
4-multi-group-direct Fp128 multi-group (final nv34, 4 polys total), direct setup check
5-multi-group-recursive Fp128 multi-group (final nv34, 4 polys total), recursive setup check
6-multi-group-recursive-w8r2 Fp128 multi-group W8R2 (final nv32, 4 polys total), recursive setup check
7-distributed Fp128 one-hot nv32 W2R2, direct setup check
Fp128 one-hot nv32 W4R2, direct setup check
Fp128 one-hot nv32 W8R2, direct setup check

Public opening statements

Public opening statement Profiles
Over Fp32, one committed 30 variable multilinear polynomial with 2^30 coefficients is opened at one 30 coordinate point. Fp32 dense nv30, direct setup check
Over Fp32, one committed 34 variable multilinear polynomial with 2^34 coefficients is opened at one 34 coordinate point. Fp32 one-hot nv34, direct setup check
Over Fp64, one committed 29 variable multilinear polynomial with 2^29 coefficients is opened at one 29 coordinate point. Fp64 dense nv29, direct setup check
Over Fp64, one committed 35 variable multilinear polynomial with 2^35 coefficients is opened at one 35 coordinate point. Fp64 one-hot nv35, direct setup check
Over Fp128, one committed 28 variable multilinear polynomial with 2^28 coefficients is opened at one 28 coordinate point. Fp128 dense nv28, direct setup check
Over Fp128, one committed 36 variable multilinear polynomial with 2^36 coefficients is opened at one 36 coordinate point. Fp128 one-hot nv36, direct setup check
Fp128 one-hot nv36, recursive setup check
Over Fp128, 4 polynomials in 3 groups: one 16 variable polynomial at its own point, one 16 variable polynomial at its own point, and 2 34 variable polynomials at one shared point. Fp128 multi-group (final nv34, 4 polys total), direct setup check
Fp128 multi-group (final nv34, 4 polys total), recursive setup check
Over Fp128, 4 polynomials in 3 groups: one 16 variable polynomial at its own point, one 16 variable polynomial at its own point, and 2 32 variable polynomials at one shared point. Fp128 multi-group W8R2 (final nv32, 4 polys total), recursive setup check
Over Fp128, one committed 32 variable multilinear polynomial with 2^32 coefficients is opened at one 32 coordinate point. Fp128 one-hot nv32 W2R2, direct setup check
Fp128 one-hot nv32 W4R2, direct setup check
Fp128 one-hot nv32 W8R2, direct setup check

One-hot profiles generate deterministic witnesses with one 1 in every consecutive chunk of 256 coefficients. This witness shape is not a separate public claim.

Direct evaluates the public setup contribution during Stage 2. Recursive carries the same check through a Stage 3 setup-product sumcheck. Both modes execute the complete fold schedule and terminal verification.

The chunked profiles W2R2, W4R2, W8R2 divide the witness relation into the stated number of exact chunks for the first two fold levels.

Generated profiles may select different A, B, and D ring dimensions at different fold levels. The short profile names omit those dimensions.

Each sample generates deterministic witnesses and opening points, prepares setup, commits, proves, serializes the proof, checks its size, prepares verifier setup, and verifies the claimed openings. It does not test malformed proofs.

Phase time

Profile Setup Commit Prove Verify, multi-threaded Verify, single-threaded
Fp32 dense nv30, direct setup check 0.025 s
-4.2%
1.142 s
+0.2%
1.335 s
-1.8%
20.7 ms
+6.6%
47.4 ms
-0.5%
Fp32 one-hot nv34, direct setup check 0.050 s
-1.4%
0.737 s
+0.2%
1.430 s
+4.0%
20.7 ms
-3.6%
89.3 ms
+0.2%
Fp64 dense nv29, direct setup check 0.051 s
-1.9%
0.793 s
-1.2%
0.813 s
-8.3%
13.9 ms
+1.6%
36.6 ms
-0.1%
Fp64 one-hot nv35, direct setup check 0.093 s
+1.3%
1.648 s
-0.5%
1.380 s
+7.5%
17.8 ms
-0.1%
86.7 ms
+0.3%
Fp128 dense nv28, direct setup check 0.065 s
-0.0%
0.706 s
-1.6%
0.764 s
+0.7%
11.3 ms
+1.1%
41.2 ms
-0.1%
Fp128 one-hot nv36, direct setup check 0.247 s
-0.2%
3.504 s
-1.3%
1.588 s
-0.3%
22.2 ms
+1.3%
136.5 ms
-0.1%
Fp128 one-hot nv36, recursive setup check 0.691 s
+0.2%
3.985 s
-0.7%
1.718 s
-5.9%
14.7 ms
-3.3%
41.6 ms
+0.0%
Fp128 multi-group (final nv34, 4 polys total), direct setup check 0.178 s
+0.9%
1.778 s
+0.1%
0.981 s
-5.1%
17.2 ms
-5.9%
101.5 ms
+0.7%
Fp128 multi-group (final nv34, 4 polys total), recursive setup check 0.435 s
+0.4%
1.755 s
+0.6%
1.413 s
-1.4%
15.4 ms
-0.5%
32.8 ms
-0.6%
Fp128 multi-group W8R2 (final nv32, 4 polys total), recursive setup check 0.263 s
+1.0%
0.626 s
+0.0%
1.731 s
+0.4%
27.2 ms
+1.2%
74.0 ms
-0.2%
Fp128 one-hot nv32 W2R2, direct setup check 0.072 s
-0.4%
0.339 s
-0.5%
0.575 s
+0.5%
13.9 ms
-2.9%
40.6 ms
-1.2%
Fp128 one-hot nv32 W4R2, direct setup check 0.076 s
+0.4%
0.338 s
-0.1%
0.721 s
+1.2%
16.5 ms
+2.2%
48.1 ms
+0.2%
Fp128 one-hot nv32 W8R2, direct setup check 0.075 s
-1.4%
0.337 s
-0.1%
0.963 s
+0.5%
17.8 ms
+0.2%
57.6 ms
+0.1%

Proof size and protocol shape

Profile Fold A/B/D schedule Total proof Terminal response Terminal response planned maximum Fold levels Grinding retries
Fp32 dense nv30, direct setup check 2048/256/256 → 128/128/128 70,743 bytes
+0.0%
39,113 bytes
+0.0%
41,144 bytes
+0.0%
7
+0.0%
None
Fp32 one-hot nv34, direct setup check 2048/256/256 → 256/128/256 → 128/128/128 70,834 bytes
+0.0%
39,092 bytes
+0.0%
41,144 bytes
+0.0%
7
+0.0%
None
Fp64 dense nv29, direct setup check 2048/128/128 → 1024/128/128 → 128/128/128 → 64/64/64 72,797 bytes
+0.0%
40,587 bytes
+0.0%
43,076 bytes
+0.0%
8
+0.0%
L6: 1 / 1 / 1
Fp64 one-hot nv35, direct setup check 1024/256/128 → 256/128/128 → 128/128/128 → 64/64/64 72,844 bytes
+0.0%
40,520 bytes
+0.0%
43,076 bytes
+0.0%
8
+0.0%
None
Fp128 dense nv28, direct setup check 1024/64/64 → 128/64/64 → 64/64/64 75,522 bytes
+0.0%
46,851 bytes
+0.0%
49,206 bytes
+0.0%
7
+0.0%
None
Fp128 one-hot nv36, direct setup check 512/128/64 → 512/64/64 → 64/64/64 76,747 bytes
+0.0%
46,894 bytes
+0.0%
49,206 bytes
+0.0%
8
+0.0%
None
Fp128 one-hot nv36, recursive setup check 512/128/64 → 64/64/64 79,868 bytes
+0.0%
46,828 bytes
+0.0%
49,206 bytes
+0.0%
8
+0.0%
None
Fp128 multi-group (final nv34, 4 polys total), direct setup check 512/128/128 → 512/64/64 → 64/64/64 76,630 bytes
+0.0%
46,889 bytes
+0.0%
49,206 bytes
+0.0%
8
+0.0%
None
Fp128 multi-group (final nv34, 4 polys total), recursive setup check 512/128/128 → 64/64/64 84,738 bytes
+0.0%
46,869 bytes
+0.0%
49,206 bytes
+0.0%
8
+0.0%
None
Fp128 multi-group W8R2 (final nv32, 4 polys total), recursive setup check 512/64/64 → 128/64/64 → 64/64/64 78,635 bytes
+0.0%
46,840 bytes
+0.0%
49,206 bytes
+0.0%
8
+0.0%
None
Fp128 one-hot nv32 W2R2, direct setup check 512/64/64 → 64/64/64 76,486 bytes
+0.0%
46,861 bytes
+0.0%
49,206 bytes
+0.0%
8
+0.0%
None
Fp128 one-hot nv32 W4R2, direct setup check 512/64/64 → 256/64/64 → 64/64/64 76,741 bytes
+0.0%
46,886 bytes
+0.0%
49,206 bytes
+0.0%
8
+0.0%
None
Fp128 one-hot nv32 W8R2, direct setup check 512/64/64 → 256/64/64 → 64/64/64 77,237 bytes
+0.0%
46,816 bytes
+0.0%
49,206 bytes
+0.0%
8
+0.0%
None

Grinding retries are rejected attempts at each fold, listed in measured-run order. Zero means the first sampled nonce was accepted.

Each multi-group profile has two precommitted nv16 singleton polynomials and two polynomials in the displayed final group.

Native proof accounting

Profile Non-nonce proof Nonce messages Nonce maximum
Fp32 dense nv30, direct setup check 70,233 bytes
+0.0%
510 bytes
+0.0%
1,016 bytes
+0.0%
Fp32 one-hot nv34, direct setup check 70,324 bytes
+0.0%
510 bytes
+0.0%
1,020 bytes
+0.0%
Fp64 dense nv29, direct setup check 72,299 bytes
+0.0%
498 bytes
+0.0%
992 bytes
+0.0%
Fp64 one-hot nv35, direct setup check 72,344 bytes
+0.0%
500 bytes
+0.0%
996 bytes
+0.0%
Fp128 dense nv28, direct setup check 75,139 bytes
+0.0%
383 bytes
+0.0%
758 bytes
+0.0%
Fp128 one-hot nv36, direct setup check 76,318 bytes
+0.0%
429 bytes
+0.0%
856 bytes
+0.0%
Fp128 one-hot nv36, recursive setup check 79,340 bytes
+0.0%
528 bytes
+0.0%
1,048 bytes
+0.0%
Fp128 multi-group (final nv34, 4 polys total), direct setup check 76,201 bytes
+0.0%
429 bytes
+0.0%
854 bytes
+0.0%
Fp128 multi-group (final nv34, 4 polys total), recursive setup check 84,133 bytes
+0.0%
605 bytes
+0.0%
1,204 bytes
+0.0%
Fp128 multi-group W8R2 (final nv32, 4 polys total), recursive setup check 78,168 bytes
+0.0%
467 bytes
+0.0%
930 bytes
+0.0%
Fp128 one-hot nv32 W2R2, direct setup check 76,061 bytes
+0.0%
425 bytes
+0.0%
848 bytes
+0.0%
Fp128 one-hot nv32 W4R2, direct setup check 76,310 bytes
+0.0%
431 bytes
+0.0%
856 bytes
+0.0%
Fp128 one-hot nv32 W8R2, direct setup check 76,800 bytes
+0.0%
437 bytes
+0.0%
868 bytes
+0.0%

Memory and setup size

Profile Setup vector Prepared NTT cache Verifier NTT cache Peak RSS
Fp32 dense nv30, direct setup check 20.0 MiB
+0.0%
154.0 MiB
+0.0%
1.2 MiB
+0.0%
4633.1 MiB
+0.1%
Fp32 one-hot nv34, direct setup check 64.0 MiB
+0.0%
354.1 MiB
+0.0%
1.2 MiB
+0.0%
1040.2 MiB
+0.1%
Fp64 dense nv29, direct setup check 32.0 MiB
+0.0%
291.2 MiB
+0.0%
1.8 MiB
+0.0%
4869.5 MiB
+0.2%
Fp64 one-hot nv35, direct setup check 128.0 MiB
+0.0%
917.2 MiB
+0.0%
1.8 MiB
+0.0%
1857.8 MiB
-0.1%
Fp128 dense nv28, direct setup check 64.0 MiB
+0.0%
585.0 MiB
+0.0%
1.6 MiB
+0.0%
5182.8 MiB
+0.0%
Fp128 one-hot nv36, direct setup check 344.0 MiB
+0.0%
3344.0 MiB
+0.0%
3.2 MiB
+0.0%
4924.5 MiB
-0.0%
Fp128 one-hot nv36, recursive setup check 512.0 MiB
+0.0%
4700.0 MiB
+0.0%
1.6 MiB
+0.0%
6941.7 MiB
+0.0%
Fp128 multi-group (final nv34, 4 polys total), direct setup check 256.0 MiB
+0.0%
1831.9 MiB
+0.0%
3.2 MiB
+0.0%
2904.1 MiB
-0.1%
Fp128 multi-group (final nv34, 4 polys total), recursive setup check 256.0 MiB
+0.0%
1899.0 MiB
+0.0%
1.6 MiB
+0.0%
3496.9 MiB
+0.1%
Fp128 multi-group W8R2 (final nv32, 4 polys total), recursive setup check 128.0 MiB
+0.0%
620.5 MiB
+0.0%
1.5 MiB
+0.0%
1738.6 MiB
-0.0%
Fp128 one-hot nv32 W2R2, direct setup check 64.0 MiB
+0.0%
449.0 MiB
+0.0%
1.6 MiB
+0.0%
815.1 MiB
-2.4%
Fp128 one-hot nv32 W4R2, direct setup check 64.0 MiB
+0.0%
473.0 MiB
+0.0%
1.6 MiB
+0.0%
882.9 MiB
+0.1%
Fp128 one-hot nv32 W8R2, direct setup check 64.0 MiB
+0.0%
473.0 MiB
+0.0%
1.6 MiB
+0.0%
971.6 MiB
+0.0%

Deltas are shown only for profiles with a matching merge-base case. Negative is smaller or faster.

The uploaded report.md benchmark artifact contains the detailed fold schedule, proof-size breakdown, terminal response segments, and Golomb diagnostics.

@quangvdao
quangvdao marked this pull request as ready for review October 20, 2026 23:08
Jolt main's generated verifier now returns Result<(), VerifierError>
instead of bool (a16z/jolt#2064), so the recursion host's `!is_valid`
no longer compiles. The host reports the verifier's error and logs
`accepted` in place of `is_valid`; the README and the Book follow.

Every pin moves to Jolt main 14315e958, which also carries #2107. That
change moves Jolt's own Akita pin to dfdbd76 (Akita main, NIST
category 3), which reaches the recursion profile's lockfile only through
jolt-sdk; dfdbd76 pins Jolt 1618f4b6d, also on main. Proof blobs are
unchanged.
cargo fmt --check inside profile/akita-recursion failed on dev: imports
were out of order or over-long in six files. rustfmt only reorders and
wraps use lines.
Brings in dev 9247e8e (main sync #264). The conflicts were import lines
in profile/akita-recursion, which take dev's TrustedTerminalCache and
ChunkedWitnessCfg imports, and fuzz/Cargo.toml, which takes dev's #194
rewrite.

Moves every a16z/jolt pin from 14315e958 (and dev's c7c2d08d5) to the
current Jolt main tip f5c1947b1, in the root, fuzz and recursion-profile
manifests and lockfiles. The seven new Jolt commits do not touch
jolt-field, jolt-poly, jolt-utils or jolt-metal; they reach only the
recursion profile through jolt-sdk.
@quangvdao quangvdao changed the title chore(deps): pin dev's Jolt crates to Jolt main chore(deps): pin dev's Jolt crates to Jolt main (f5c1947b1) Oct 26, 2026
@quangvdao
quangvdao merged commit df08538 into dev Oct 26, 2026
68 checks passed
@github-actions

Copy link
Copy Markdown

CI test timing

  • Report generated: 2026-10-26T12:56:35Z.
  • Source: ad1057d on chore/repin-jolt-main-dev.
  • Workflow run: 40318544738.
  • Main baseline: a4c7e09.

Run summary

Wall s Main wall s Main Δ Ratio Tests Skipped Failed Status
1683.0 1423.0 +18.3% 1.18x 2040 0 0 ok

Wall time spans 2 parallel nextest slice shards.

Slowest tests

Rank Duration s Test
1 441.4 akita-planner::schedule_params::suffix_dp::chunk_ownership_tests::contracting_chunk_search_matches_unpruned_complete_objective
2 175.1 akita-planner::schedule_params::adaptive_search_tests::adaptive_frontier_matches_unpruned_traversal_and_hand_priced_role_optima
3 104.3 akita-planner::planner::setup_prefix_challenge_hook_tests::catalog_binding_revalidates_recursive_setup_prefix_challenge_hook
4 53.3 akita-planner::planner::totality_tests::contractive_winner_remains_selected
5 34.2 akita-planner::planner::totality_tests::noncontractive_multi_chunk_root_can_beat_contractive_candidates
6 33.3 akita-planner::generated_families::tests::generation_uses_requested_geometry_for_preplans_and_grouped_producers
7 27.9 akita-planner::schedule_params::adaptive_search_tests::relation_cutover::bounded_suffix_dp_matches_unpruned_fixed_cutover_search
8 26.1 akita-planner::schedule_params::adaptive_search_tests::adaptive_nv36_minimizes_setup_envelope_before_first_direct_setup
9 23.2 akita-planner::schedule_params::adaptive_search_tests::production_suffix_selects_l2_with_the_typed_response_model
10 23.0 akita-pcs::dynamic_backends::portable::offloaded_route_uses_only_local_prefix_handles
11 22.0 akita-planner::planner::totality_tests::valid_small_grouped_root_has_a_schedule
12 19.2 akita-pcs::q128_offset275_e2e::offset275_config_commits_opens_and_verifies
13 17.5 akita-pcs::akita_fp128_e2e::heterogeneous::bounded_dense_roundtrip_over_u64_coefficients_at_every_catalog_size
14 17.2 akita-pcs::akita_small_field_e2e::combined_recursive::fp32_combined_setup_proves_recursive_and_onehot_families
15 16.2 akita-pcs::scheme::tests::cross_mode::proofs_cannot_replay_across_valid_quotient_and_reduced_schedules
16 12.8 akita-pcs::transcript_hardening_proptest::stream_fuzzes_batch_shapes
17 12.4 akita-pcs::dynamic_backends::dynamic_backend_failures_cleanup_and_retry
18 12.3 akita-setup::tests::disk_persistence::combined_recursive_prefix_registry_persists_and_serves_each_family
19 11.7 akita-pcs::q128_offset275_e2e::commitment_binds_the_profile_to_the_exact_field_modulus
20 10.8 akita-pcs::akita_small_field_e2e::selective_l2::fp32_ext4_l2_pcs_roundtrip_and_stage2_rejections

Regressions vs main

Δ s Baseline s Current s Test
52.7 388.7 441.4 akita-planner::schedule_params::suffix_dp::chunk_ownership_tests::contracting_chunk_search_matches_unpruned_complete_objective
31.7 143.4 175.1 akita-planner::schedule_params::adaptive_search_tests::adaptive_frontier_matches_unpruned_traversal_and_hand_priced_role_optima
25.6 78.6 104.3 akita-planner::planner::setup_prefix_challenge_hook_tests::catalog_binding_revalidates_recursive_setup_prefix_challenge_hook
12.7 21.5 34.2 akita-planner::planner::totality_tests::noncontractive_multi_chunk_root_can_beat_contractive_candidates
12.0 21.4 33.3 akita-planner::generated_families::tests::generation_uses_requested_geometry_for_preplans_and_grouped_producers
10.9 15.2 26.1 akita-planner::schedule_params::adaptive_search_tests::adaptive_nv36_minimizes_setup_envelope_before_first_direct_setup
10.3 12.9 23.2 akita-planner::schedule_params::adaptive_search_tests::production_suffix_selects_l2_with_the_typed_response_model
8.5 4.3 12.8 akita-pcs::transcript_hardening_proptest::stream_fuzzes_batch_shapes
7.6 14.4 22.0 akita-planner::planner::totality_tests::valid_small_grouped_root_has_a_schedule
6.6 10.9 17.5 akita-pcs::akita_fp128_e2e::heterogeneous::bounded_dense_roundtrip_over_u64_coefficients_at_every_catalog_size
6.5 16.5 23.0 akita-pcs::dynamic_backends::portable::offloaded_route_uses_only_local_prefix_handles
6.2 1.5 7.7 akita-pcs::setup::adaptive_dense::same_size_passes
6.0 6.3 12.3 akita-setup::tests::disk_persistence::combined_recursive_prefix_registry_persists_and_serves_each_family
5.5 47.7 53.3 akita-planner::planner::totality_tests::contractive_winner_remains_selected
5.4 3.6 9.0 akita-sis-estimator::search_mode_parity::full_exhaustive_parallel_matches_certified_search_on_medium_subset

New slow tests

No new tests ≥30s vs main baseline.

quangvdao added a commit that referenced this pull request Oct 26, 2026
Brings in dev df08538 (#252), which moves every Jolt pin to Jolt main
f5c1947b1. The merge is clean. The one pin #252 could not see,
akita-labinius-pcs's jolt-field, moves from c7c2d08d5 to f5c1947b1 too,
so check-jolt-pins-on-main.sh passes.
quangvdao added a commit that referenced this pull request Oct 26, 2026
Brings in the dev merge (#252, Jolt pinned at f5c1947b1) and the
akita-labinius-pcs jolt-field repin.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-spec PR has no spec file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant