Skip to content

feat(labinius): standalone clear binary opening oracle - #198

Closed
quangvdao wants to merge 4 commits into
devfrom
quang/labinius-clear-opening
Closed

quangvdao wants to merge 4 commits into
devfrom
quang/labinius-clear-opening

Conversation

@quangvdao

Copy link
Copy Markdown
Collaborator

Summary

This PR adds two opt-in crates, akita-labinius-verifier and akita-labinius-prover, that implement the clear binary opening from the LaBinius tracking issue (#45) as a differential oracle.

It now:

  • commits a table of binary source words (u128 for the F128 host, u64 for the F192 host) as Y_col = A * W_col over TrinomialRing<F, D, M> with D = 162*k, k in {1, 2, 4}, and an odd coefficient prime (Prime64Offset23703 or Prime128OffsetA7F7);
  • reduces a host-field multilinear claim sum_j eq_H(r,j) * embed_source(w_j) = t to one F162 source evaluation through the merged field switch (SwitchPartials, n characteristic-two product-sumcheck rounds);
  • discharges that evaluation in the clear: left expansion U, C binary fold challenges from the admitted BinaryChallengeProfile, and a signed integer response checked directly against the prime equation, the parity equation in F162, and the accepted interval.

It is the reference that the succinct root reduction will be tested against. It is not a production PCS and admits no production parameter set; see "What this does not provide".

Normative design: specs/labinius-clear-opening.md.

Diff metadata

  • Base: 3d69096eadb129c097e4fc2e4f2d289e82e0ea1a (dev)
  • Head: 2396930e7b7673af44a13a93190cc3df865336ad
  • Commits: 4
  • Files changed: 24
  • Diff: 3273 insertions, 1 deletion

Motivation

The merged LaBinius foundations (binary fields and field switch, trinomial ring and NTT, binary challenge profiles, source-comparison bounds, the infinity-norm width table) have no consumer that exercises them together. Before a succinct binary root is wired into the fold, the direct protocol needs one executable definition: exact transcript order, byte encodings, endpoint equations, and rejection behaviour. Every later slice (lowered root relation, combined range/relation sumcheck, fused mixed root) can then be checked against it instead of against prose.

Protocol in this PR

flowchart LR
    S["source words w (N = k*m*C)"] --> C["commit: Y_col = A * pack(W_col)"]
    S --> F["frontend.rs: host claim -> partials -> n sumcheck rounds"]
    F --> E["BinaryEvaluationClaim { point z, value t' }"]
    E --> U["U_col, left expansion check"]
    U --> Ch["C binary fold challenges"]
    Ch --> V["integer response v = sum_col c_col * W_col"]
    V --> P["prime: A*pack(v) = sum c_col * Y_col"]
    V --> B["binary: sum eq(z_row,row)*(v mod 2) = sum U_col*(c_col mod 2)"]
    V --> R["range: lower <= v <= upper"]
Loading
  • frontend.rs (steps 1 to 4 of the spec) returns BinaryEvaluationClaim and is the boundary the later mixed-root integration consumes unchanged.
  • endpoint.rs holds the three direct checks. All three read the same decoded integer response.
  • profile.rs holds BinaryClearSetup::new, which rejects instead of clamping.
  • channel.rs is the only module that touches akita-transcript.

Change-surface overview

Area Before After
Crates none akita-labinius-verifier, akita-labinius-prover, both gated by an off-by-default labinius feature
Akita proof path unchanged unchanged; no proof-path crate depends on the new crates
Workspace registration n/a members in Cargo.toml, two package stanzas in Cargo.lock
CI n/a job test-labinius-clear-opening (both transcript backends: tests, Clippy with the feature, Clippy without it); two check-crate-deps.sh lines
scripts/check-crate-deps.sh n/a forbidden-dependency lists for both crates; the new verifier crate joins the verifier-side check
Docs n/a spec, crate-graph nodes and edges, crate index rows, two AGENTS.md preflight lines
Schedule artifacts unchanged unchanged

Extension contract (docs/branches.md)

  • All extension code is in the two new crates. Files that also exist on main change only to register them (the table above).
  • The labinius feature is off by default. With it off, the crates enable none of labinius-binary, labinius-trinomial, labinius-challenges, labinius-sis on their dependencies (checked on the Cargo feature tree of each crate, for both transcript backends).
  • Enabling the feature selects nothing on the Akita proof path: the oracle is a separate API with its own proof encoding.
  • Proof bytes against main: there is no affected configuration. git diff origin/dev...HEAD -- crates/ touches only the two new crates, and the Cargo.lock diff adds only their two package stanzas. No proof-byte experiment was run for this PR.

Security and verifier safety

  • All public bytes (domain tag, setup identity including the matrix-view digest, every commitment coefficient, host point and claim) are absorbed before the first challenge. U is bound before the fold challenges are drawn.
  • Message lengths and counts come from setup. There are no proof-supplied lengths. F162 values, host elements, prime coefficients and response offsets have one canonical fixed-width encoding each; non-canonical encodings, truncation and trailing bytes reject.
  • A zero transparent weight leaves every source-opening check mandatory. There is no division and no special-case acceptance.
  • Integer folding uses checked i128 accumulators and reduces by Z^162 = -Z^81 - 1 before any prime embedding or parity read. Parity uses rem_euclid(2).
  • The challenge's parity image decodes BinaryChallenge::canonical_support_encoding(profile); there is one definition of that encoding.
  • Proof-dependent failures return AkitaError::InvalidProof; setup and statement failures return InvalidSetup, InvalidInput, or dimension errors. Extents use akita_error::checked arithmetic.

What this does not provide

  • No setup contract. The caller supplies the matrix A; there is no seed expander, so nothing here stops a caller from committing under a degenerate matrix.
  • No SIS admission. BinaryClearSetup::new enforces geometry, the fold-challenge entropy budget (profile.meets_budget(C, lambda_fold)), and the no-wrap source-comparison bound (eta = 4 * Gamma_inf * Delta < P). It does not consult the width table. Runtime rank admission is the next PR.
  • No outer commitment, quotient or carry rows, recursion, setup offloading, zero knowledge, or performance contract. commitment::apply_matrix multiplies element by element through TrinomialNttDomain::multiply_with_workspace; it is a reference, not the commit kernel.
  • The field-switch projection and composition obligations in specs/labinius-field-switch.md remain open.

Known duplication and interactions

  • The F162 equality expansion in akita-labinius-verifier/src/source.rs repeats the recurrence of the private row_weights helper in akita-algebra/src/binary/field_switch.rs, because that helper admits only the host batching dimensions. The doc comment records this and the replacement condition.
  • refactor!: run Akita on the caller's jolt-transcript #185 removes akita-transcript. Only channel.rs here uses it; whichever of the two lands second needs to port that one module.

Commit map

  • 5d2ce2c24 — the two crates, spec, registration.
  • c04c01b51 — regressions that isolate the binary endpoint comparison and the prime check, the adjacent no-wrap admission pair, canonical challenge parity, the bounded-weight D648/P128 roundtrip, the D324 matrix-action oracle; removes the prover's unused direct transcript dependency.
  • 8d23fa20c, 2396930e7 — documentation only (crate-graph edge, architecture sentence, one spec sentence).

Validation

At c04c01b51 (the last commit that changes code):

  • cargo test -p akita-labinius-verifier -p akita-labinius-prover --no-default-features --features labinius,transcript-blake2b --locked: 20 passed. Same with transcript-keccak: 20 passed.
  • cargo clippy -p akita-labinius-verifier -p akita-labinius-prover --all-targets --no-default-features --features <f> --locked -- -D warnings for labinius,transcript-blake2b, transcript-blake2b, labinius,transcript-keccak, transcript-keccak: clean.
  • Workspace Clippy, CI configurations 1 and 2 (--all --all-targets --release --no-default-features --features parallel,disk-persistence,transcript-blake2b and --features transcript-blake2b): clean.
  • cargo fmt --all --check, taplo fmt --check, both Rust line-cap scripts, the 179 Python script tests, all eleven check-crate-deps.sh invocations, check-shared-field-identity.sh, check-external-schedule-artifacts.sh, cargo machete --with-metadata, typos: clean.
  • Deletion experiment: with the final binary_lhs != binary_rhs comparison in verify_endpoints removed, binary_endpoint_rejects_an_unselected_column_at_scalar_degree, ..._at_packed_degree and packed_response_component_cancellation_preserves_prime_but_fails_binary fail (the verifier accepts); with it restored all 20 tests pass. This was the gap in the first review round: no test rejected on the binary comparison alone.

At 2396930e7: ./scripts/check-doc-guardrails.sh, typos on the changed documents, cargo fmt --all --check.

Not run locally: workspace Clippy configuration 3 (-p akita-pcs with response-model-diagnostics), the full workspace test pass, portability, Jolt compatibility, fuzzing.

Remaining work under #45

  1. Runtime SIS rank admission, the first root profile, and the root shape with enforced digit ranges (next PR).
  2. Lowered root relation with an independent integer oracle, then the combined alphabet/relation sumcheck and a differential test against this oracle.
  3. Per-group seams on main, then the fused mixed root, planner and catalog rows.

Reviewer map

  1. specs/labinius-clear-opening.md
  2. crates/akita-labinius-verifier/src/profile.rs (admission)
  3. crates/akita-labinius-verifier/src/frontend.rs, then endpoint.rs
  4. crates/akita-labinius-prover/src/lib.rs
  5. crates/akita-labinius-prover/tests/tamper.rs, admission.rs, oracles.rs

@github-actions github-actions Bot added spec PR contains a spec implementation PR contains implementation of a spec labels Oct 9, 2026
@github-actions

github-actions Bot commented Oct 9, 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: 24

workspace-crates

Workspace membership and public crate surface

Code paths touched:

  • Cargo.toml
  • crates/akita-labinius-prover/Cargo.toml
  • crates/akita-labinius-verifier/Cargo.toml

Consider updating:

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

ci-tooling

CI workflows and repo scripts

Code paths touched:

  • .github/workflows/ci.yml
  • scripts/check-crate-deps.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/how/architecture.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 9, 2026

Copy link
Copy Markdown

PCS Profile Benchmark

  • Head: 2396930
  • Workflow run: run 37887469800 attempt 1
  • Protocol: dev (built with dev-protocol). A merge base without that feature ran the current protocol.
  • Merge base: 3d69096 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.016 s
-0.5%
0.679 s
+2.1%
0.731 s
+0.2%
12.5 ms
+0.1%
32.9 ms
-1.0%
Fp32 one-hot nv34, direct setup check 0.026 s
+0.5%
0.508 s
-0.5%
0.817 s
+0.3%
14.2 ms
+0.3%
43.7 ms
-0.2%
Fp64 dense nv29, direct setup check 0.037 s
+6.5%
0.559 s
+0.5%
0.649 s
-1.4%
8.7 ms
-1.4%
23.1 ms
-1.4%
Fp64 one-hot nv35, direct setup check 0.061 s
-0.1%
0.820 s
+1.1%
0.747 s
-4.0%
12.0 ms
+6.7%
45.7 ms
+0.5%
Fp128 dense nv28, direct setup check 0.050 s
-0.2%
0.537 s
+1.4%
0.639 s
+2.8%
9.8 ms
-2.2%
29.6 ms
+0.5%
Fp128 one-hot nv36, direct setup check 0.148 s
+0.5%
2.915 s
+0.4%
1.352 s
+2.2%
16.0 ms
+1.0%
75.7 ms
+0.5%
Fp128 one-hot nv36, recursive setup check 0.252 s
+0.1%
2.910 s
+1.2%
1.560 s
+4.3%
13.6 ms
-0.6%
34.1 ms
-0.5%
Fp128 multi-group (final nv34, 4 polys total), direct setup check 0.146 s
-1.3%
1.113 s
+0.0%
0.673 s
-2.0%
14.4 ms
-1.4%
68.8 ms
-0.0%
Fp128 multi-group (final nv34, 4 polys total), recursive setup check 0.372 s
-0.9%
1.584 s
+0.2%
1.161 s
-0.3%
12.0 ms
-3.7%
22.9 ms
+1.2%
Fp128 multi-group W8R2 (final nv32, 4 polys total), recursive setup check 0.198 s
+3.6%
0.522 s
-0.4%
1.081 s
-0.9%
16.9 ms
+2.8%
44.3 ms
-0.5%
Fp128 one-hot nv32 W2R2, direct setup check 0.052 s
-0.7%
0.217 s
+1.9%
0.395 s
-1.3%
11.2 ms
-0.7%
27.9 ms
+0.7%
Fp128 one-hot nv32 W4R2, direct setup check 0.054 s
+8.9%
0.213 s
-0.7%
0.497 s
+2.3%
12.0 ms
+5.0%
31.9 ms
+0.3%
Fp128 one-hot nv32 W8R2, direct setup check 0.051 s
+2.0%
0.219 s
+1.4%
0.643 s
-0.9%
13.6 ms
+0.7%
39.1 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 → 256/256/256 → 128/128/128 61,034 bytes
+0.0%
35,032 bytes
+0.0%
37,048 bytes
+0.0%
7
+0.0%
None
Fp32 one-hot nv34, direct setup check 2048/256/256 → 256/256/256 → 128/128/128 61,944 bytes
+0.0%
34,990 bytes
+0.0%
37,048 bytes
+0.0%
7
+0.0%
None
Fp64 dense nv29, direct setup check 2048/128/128 → 128/128/128 63,055 bytes
+0.0%
36,873 bytes
+0.0%
38,808 bytes
+0.0%
7
+0.0%
None
Fp64 one-hot nv35, direct setup check 512/128/128 → 256/128/128 → 128/128/128 63,672 bytes
+0.0%
36,857 bytes
+0.0%
38,808 bytes
+0.0%
7
+0.0%
None
Fp128 dense nv28, direct setup check 1024/64/64 → 64/64/64 65,091 bytes
+0.0%
44,489 bytes
+0.0%
46,887 bytes
+0.0%
7
+0.0%
None
Fp128 one-hot nv36, direct setup check 512/64/64 → 64/64/64 65,685 bytes
+0.0%
44,404 bytes
+0.0%
46,887 bytes
+0.0%
7
+0.0%
None
Fp128 one-hot nv36, recursive setup check 512/64/64 → 64/64/64 69,142 bytes
+0.0%
44,456 bytes
+0.0%
46,887 bytes
+0.0%
8
+0.0%
None
Fp128 multi-group (final nv34, 4 polys total), direct setup check 256/64/64 → 64/64/64 65,630 bytes
+0.0%
44,463 bytes
+0.0%
46,887 bytes
+0.0%
7
+0.0%
None
Fp128 multi-group (final nv34, 4 polys total), recursive setup check 512/128/128 → 64/64/64 80,932 bytes
+0.0%
47,463 bytes
+0.0%
49,871 bytes
+0.0%
8
+0.0%
None
Fp128 multi-group W8R2 (final nv32, 4 polys total), recursive setup check 256/64/64 → 128/64/64 → 64/64/64 71,247 bytes
+0.0%
44,458 bytes
+0.0%
46,887 bytes
+0.0%
8
+0.0%
None
Fp128 one-hot nv32 W2R2, direct setup check 512/64/64 → 128/64/64 → 64/64/64 65,460 bytes
+0.0%
44,409 bytes
+0.0%
46,887 bytes
+0.0%
7
+0.0%
None
Fp128 one-hot nv32 W4R2, direct setup check 512/64/64 → 128/64/64 → 64/64/64 66,490 bytes
+0.0%
44,483 bytes
+0.0%
46,887 bytes
+0.0%
7
+0.0%
None
Fp128 one-hot nv32 W8R2, direct setup check 512/64/64 → 128/64/64 → 64/64/64 67,923 bytes
+0.0%
44,497 bytes
+0.0%
46,887 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 60,568 bytes
+0.0%
466 bytes
+0.0%
933 bytes
+0.0%
Fp32 one-hot nv34, direct setup check 61,454 bytes
+0.0%
490 bytes
+0.0%
980 bytes
+0.0%
Fp64 dense nv29, direct setup check 62,585 bytes
+0.0%
470 bytes
+0.0%
938 bytes
+0.0%
Fp64 one-hot nv35, direct setup check 63,177 bytes
+0.0%
495 bytes
+0.0%
987 bytes
+0.0%
Fp128 dense nv28, direct setup check 64,745 bytes
+0.0%
346 bytes
+0.0%
686 bytes
+0.0%
Fp128 one-hot nv36, direct setup check 65,332 bytes
+0.0%
353 bytes
+0.0%
702 bytes
+0.0%
Fp128 one-hot nv36, recursive setup check 68,712 bytes
+0.0%
430 bytes
+0.0%
853 bytes
+0.0%
Fp128 multi-group (final nv34, 4 polys total), direct setup check 65,279 bytes
+0.0%
351 bytes
+0.0%
701 bytes
+0.0%
Fp128 multi-group (final nv34, 4 polys total), recursive setup check 80,327 bytes
+0.0%
605 bytes
+0.0%
1,206 bytes
+0.0%
Fp128 multi-group W8R2 (final nv32, 4 polys total), recursive setup check 70,746 bytes
+0.0%
501 bytes
+0.0%
994 bytes
+0.0%
Fp128 one-hot nv32 W2R2, direct setup check 65,113 bytes
+0.0%
347 bytes
+0.0%
694 bytes
+0.0%
Fp128 one-hot nv32 W4R2, direct setup check 66,115 bytes
+0.0%
375 bytes
+0.0%
746 bytes
+0.0%
Fp128 one-hot nv32 W8R2, direct setup check 67,537 bytes
+0.0%
386 bytes
+0.0%
762 bytes
+0.0%

Memory and setup size

Profile Setup vector Prepared NTT cache Verifier NTT cache Peak RSS
Fp32 dense nv30, direct setup check 22.0 MiB
+0.0%
176.0 MiB
+0.0%
0.9 MiB
+0.0%
4560.7 MiB
-0.0%
Fp32 one-hot nv34, direct setup check 32.0 MiB
+0.0%
224.0 MiB
+0.0%
3.0 MiB
+0.0%
865.0 MiB
-0.0%
Fp64 dense nv29, direct setup check 32.0 MiB
+0.0%
306.0 MiB
+0.0%
0.8 MiB
+0.0%
4981.0 MiB
+0.0%
Fp64 one-hot nv35, direct setup check 128.0 MiB
+0.0%
684.0 MiB
+0.0%
0.8 MiB
+0.0%
1575.7 MiB
-0.1%
Fp128 dense nv28, direct setup check 64.0 MiB
+0.0%
513.0 MiB
+0.0%
1.2 MiB
+0.0%
5348.0 MiB
-0.0%
Fp128 one-hot nv36, direct setup check 256.0 MiB
+0.0%
1796.0 MiB
+0.0%
3.2 MiB
+0.0%
3284.6 MiB
-0.0%
Fp128 one-hot nv36, recursive setup check 256.0 MiB
+0.0%
1836.0 MiB
+0.0%
1.2 MiB
+0.0%
3594.1 MiB
-0.0%
Fp128 multi-group (final nv34, 4 polys total), direct setup check 256.0 MiB
+0.0%
1797.0 MiB
+0.0%
3.2 MiB
+0.0%
2829.8 MiB
-0.1%
Fp128 multi-group (final nv34, 4 polys total), recursive setup check 256.0 MiB
+0.0%
1893.0 MiB
+0.0%
1.6 MiB
+0.0%
3477.2 MiB
+0.1%
Fp128 multi-group W8R2 (final nv32, 4 polys total), recursive setup check 128.0 MiB
+0.0%
986.2 MiB
+0.0%
1.2 MiB
+0.0%
2087.4 MiB
+0.2%
Fp128 one-hot nv32 W2R2, direct setup check 64.0 MiB
+0.0%
485.0 MiB
+0.0%
1.6 MiB
+0.0%
852.8 MiB
+1.3%
Fp128 one-hot nv32 W4R2, direct setup check 64.0 MiB
+0.0%
485.0 MiB
+0.0%
1.2 MiB
+0.0%
893.5 MiB
+0.5%
Fp128 one-hot nv32 W8R2, direct setup check 64.0 MiB
+0.0%
485.0 MiB
+0.0%
1.6 MiB
+0.0%
975.5 MiB
-0.3%

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.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown

CI test timing

  • Report generated: 2026-10-09T05:59:58Z.
  • Source: 629b109 on quang/labinius-clear-opening.
  • Workflow run: 37887469643.
  • Main baseline: 401e797.

Run summary

Wall s Main wall s Main Δ Ratio Tests Skipped Failed Status
639.0 838.0 -23.7% 0.76x 1952 0 0 ok

Wall time spans 2 parallel nextest slice shards.

Slowest tests

Rank Duration s Test
1 48.4 akita-planner::schedule_params::suffix_dp::chunk_ownership_tests::contracting_chunk_search_matches_unpruned_complete_objective
2 44.7 akita-planner::schedule_params::adaptive_search_tests::adaptive_frontier_matches_unpruned_traversal_and_hand_priced_role_optima
3 16.5 akita-planner::planner::totality_tests::contractive_winner_remains_selected
4 8.5 akita-planner::schedule_params::adaptive_search_tests::relation_cutover::bounded_suffix_dp_matches_unpruned_fixed_cutover_search
5 7.8 akita-pcs::scheme::tests::cross_mode::proofs_cannot_replay_across_valid_quotient_and_reduced_schedules
6 7.5 akita-planner::schedule_params::adaptive_search_tests::production_suffix_selects_l2_with_the_typed_response_model
7 7.4 akita-planner::schedule_params::adaptive_search_tests::adaptive_nv36_minimizes_setup_envelope_before_first_direct_setup
8 7.4 akita-pcs::akita_fp128_e2e::fp128_dense
9 6.2 akita-planner::planner::totality_tests::valid_small_grouped_root_has_a_schedule
10 5.3 akita-planner::planner::totality_tests::noncontractive_multi_chunk_root_can_beat_contractive_candidates
11 5.3 akita-planner::schedule_params::adaptive_search_tests::adaptive_search_applies_setup_budget_in_physical_fields
12 5.0 akita-pcs::akita_fp128_e2e::heterogeneous::bounded_dense_roundtrip_over_u64_coefficients_at_every_catalog_size
13 5.0 akita-setup::tests::disk_persistence::combined_recursive_prefix_registry_persists_and_serves_each_family
14 4.7 akita-pcs::transcript_hardening_proptest::stream_fuzzes_batch_shapes
15 4.5 akita-planner::schedule_params::adaptive_search_tests::feasible_packing_dimension_ignores_infeasible_smaller_dimensions
16 4.3 akita-pcs::scheme::tests::onehot::selective_l2::selective_l2_proof_rejects_transcript_mutations
17 3.6 akita-pcs::akita_small_field_e2e::fp32_dense
18 3.4 akita-sis-estimator::search_mode_parity::full_exhaustive_parallel_matches_certified_search_on_medium_subset
19 3.2 akita-pcs::akita_fp128_e2e::heterogeneous::combined_family_setup_matches_per_family_proofs
20 3.1 akita-pcs::transcript_hardening_proptest::seed_corpus_covers_nv_basis_and_batch_shapes

Regressions vs main

No per-test regressions above the threshold.

New slow tests

No new tests ≥30s vs main baseline.

@quangvdao

Copy link
Copy Markdown
Collaborator Author

/ai-review

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown

AI review attempt 1/3 reserved. Failed or incomplete attempts also count toward this PR's limit.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Usefulness: benefit supported. The PR supplies a useful executable reference joining the existing field-switch, trinomial arithmetic, challenge-profile, and source-comparison components. The arithmetic oracles and isolated endpoint rejection tests provide concrete value for later succinct implementations. Two additional crates and a small documented equality-expansion duplication add maintenance cost, but the feature-gated API, shared protocol helpers, and unchanged existing proof path keep that cost proportionate. Production admission and projection/composition obligations are explicitly outside this slice rather than implicitly claimed as solved.

Recommended for approval: no unresolved findings in this automated review.

@github-actions github-actions Bot added ai-approved Latest AI review recommends approval; informational, not a merge authorization ai-reviewed An automated AI review has been published on this PR labels Oct 9, 2026
@quangvdao

Copy link
Copy Markdown
Collaborator Author

Superseded by #228, which keeps a transparent, non-succinct opening only as a differential oracle for the reduction.

The earlier stack was re-cut into four pull requests: #226 (arithmetic), #227 (parameters), #228 (root reduction) and #229 (polynomial commitment). Closing without merging; the branch is left in place.

@quangvdao quangvdao closed this Oct 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-approved Latest AI review recommends approval; informational, not a merge authorization ai-reviewed An automated AI review has been published on this PR implementation PR contains implementation of a spec spec PR contains a spec

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant