Skip to content

feat(labinius): runtime SIS admission, root profile and root shape - #199

Closed
quangvdao wants to merge 6 commits into
devfrom
quang/labinius-root-params
Closed

quangvdao wants to merge 6 commits into
devfrom
quang/labinius-root-params

Conversation

@quangvdao

@quangvdao quangvdao commented Oct 9, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

This PR makes the certified LaBinius infinity-norm width table usable at runtime and adds the first closed binary-root profile with its derived shape, behind the existing off-by-default labinius-sis feature of akita-params. Tracking issue: #45.

It now provides:

  • labinius_min_secure_rank(prime, degree, eta, width): a lookup over a generated table emitted from the certified CSV crates/akita-sis-estimator/data/labinius_infinity_width.csv (the CSV is unchanged), with a digest that binds the table version;
  • LabiniusRootProfile::D648P128BoundedW46Delta16: D = 648, k = 4, P = 2^128 − 2^32 + 22537, bounded challenge weight 46 (Gamma_inf = 92), accepted response interval [−32768, 32767], with stable tags and identity bytes;
  • LabiniusRootShape::derive(profile, log_num_cells, log_fold_width, lambda_fold): geometry, fold budget, honest-response admission, eta_A = 4·Gamma_inf·Delta, minimum certified rank, image and A-quotient lengths, and the direct parity bounds;
  • LabiniusRootShape::derive_encoding(base) for digit bases b in {1, 2, 4}: enforced centered power-of-two ranges for the response, parity quotient and parity carry, one signed-digit map, the no-wrap check from the enforced magnitudes, and the lengths of the committed response digit table (in the canonical akita_types::TrinomialResponseLayout order), the parity quotient and carry integer counts, and the image table.

This is numerical matrix and shape admission. It is not full root admission; see "What this does not provide".

Normative design: specs/labinius-root-admission.md.

Diff metadata

  • Base: 3d69096eadb129c097e4fc2e4f2d289e82e0ea1a (dev)
  • Head: 991b6765188054a53c9495744c487378ce535cf8
  • Commits: 5
  • Files changed: 16
  • Diff: 2346 insertions, 11 deletions

Independent of #198 (the clear opening oracle); the two touch disjoint files.

Motivation

The merged LaBinius foundations certify SIS widths offline and bound one source occurrence, but nothing turns "a table of 2^n binary cells folded C at a time" into an admitted rank, an accepted response interval, and the exact lengths and ranges of the witness that the succinct root will commit. #198 admits geometry and the no-wrap comparison bound but does not consult the width table. Every later slice (lowered root relation, combined alphabet and relation sumcheck, planner rows) needs these numbers from one place, derived from enforced ranges rather than honest bounds.

Change-surface overview

Area Before After
Runtime width table CSV only, read by estimator tests generated_width_table.rs emitted from the CSV by --from-csv; width_table.rs lookup by certified domination
Root profile none one closed profile with tags and identity bytes (root_profile.rs)
Root shape none root_shape.rs: geometry, admission order, parity bounds, check_parity_no_wrap
Digit encoding none root_encoding.rs: LabiniusDigitBase, LabiniusSignedDigitRange, LabiniusRootEncoding
labinius-sis feature [] forwards akita-challenges/labinius-challenges (the profile reads the admitted challenge profile)
Estimator search and CSV emission adds --from-csv emission and a two-direction CSV/table test
Docs n/a spec; one regeneration command in CONTRIBUTING.md
CI existing test-labinius-sis job unchanged; the job's filters already cover the new tests
Schedule artifacts, existing SIS tables, CSV unchanged unchanged

Derivation

For the direct parity equation B(v mod 2) = U(c mod 2) lifted to the integers in Z[X]/(X^162 + X^81 + 1):

  • the unreduced residual has degree at most 322 and coefficients bounded by H = d·M·B_v + C·L1(c);
  • dividing by Phi = X^162 + X^81 + 1 gives a quotient bounded by 2H and a remainder bounded by 3H, so the carry is bounded by floor(3H/2);
  • the verifier-side condition is H + 3·2^(e_Q−1) + 2·2^(e_K−1) < P, using the enforced offsets. check_parity_no_wrap and derive_encoding share one formula.

The signed-digit map is value = sum_i digit_i·2^(b·i) − 2^(e−1), with accepted interval [−2^(e−1), 2^(e−1) − 1]; e is the smallest multiple of b whose interval contains the honest bound.

Golden values at (log N, log C) = (22, 8), lambda_fold = 128, checked by the tests and recomputed independently in review:

b e_v e_Q e_K no-wrap total response table length log length
1 16 39 38 1,186,484,727,296 67,108,864 26
2 16 40 38 2,011,118,448,128 33,554,432 25
4 16 40 40 2,835,752,168,960 16,777,216 24

For all three bases: padded coefficient length 1024, parity quotient 161 integers, parity carry 162 integers, image table length 262,144 (log 18). H = 86,973,099,520; honest B_Q = 173,946,199,040, B_K = 130,459,649,280; eta_A = 24,116,880; certified rank 1; natural image length 165,888; A-quotient length 647.

Committed table layout

The committed successor table is the response digit table alone, in the order of akita_types::TrinomialResponseLayout: digits innermost, then the coefficient index padded to a power of two, then the ring element index.

address                = digit + digit_count * (coefficient + padded_coefficient_len * ring_element)
padded_coefficient_len = next_power_of_two(D)
response_table_len     = m * padded_coefficient_len * (e_v / b)
image_table_len        = padded_coefficient_len * C * n_A

The parity quotient (d − 1 integers) and carry (d integers) are not part of the committed table. This PR fixes their counts and enforced ranges; whether a protocol sends them in the clear and range-checks them or commits digits is the root protocol's choice, and the no-wrap condition uses the enforced offsets either way. akita-params cannot depend on akita-types, so the encoding computes these lengths itself with checked arithmetic and the spec names the layout.

Padding contract: every position of the response table, including coefficient positions t >= D, is alphabet-checked, public relation weights are zero there, and honest padding is the zero digit. There is no selector and no support proof.

Extension contract (docs/branches.md)

  • New code lives under crates/akita-params/src/sis/labinius/ and in the estimator's LaBinius example and test. Files that also exist on main change only to register it (labinius.rs module list and re-exports, one Cargo feature line, one CONTRIBUTING.md paragraph).
  • With labinius-sis off, nothing new compiles in. With it on, nothing is selected: the profile and shape are plain functions that no proof-path code calls. Forwarding akita-challenges/labinius-challenges adds types to akita-challenges and selects nothing.
  • No existing generated SIS table, ajtai_key file, estimator data file or schedule artifact changes.
  • Proof bytes against main: there is no affected configuration. No code on the setup, commitment, prover or verifier path changes. No proof-byte experiment was run for this PR.

Security and verifier safety

  • Rank lookup uses certified domination only: same prime, same degree, bound at most the certified bound, width at most the certified width. Anything else rejects.
  • The no-wrap check uses enforced magnitudes. A verifier that range-checks digits therefore knows the lifted parity identity holds over the integers without trusting an honest bound.
  • All arithmetic on caller-supplied geometry is checked (akita_error::checked for usize, checked u128/i128 for norms). Derivation rejects before allocating.
  • Identity bytes bind the domain string, profile and scalar-ring tags, prime, degree, framed challenge identity, interval endpoints and table digest. A test assembles the expected bytes by hand and compares the whole string.

What this does not provide

  • No setup contract. Nothing here derives or constrains the matrix A. The matrix_view_digest inside the single-occurrence admission calculation is a local zero placeholder, not a binding of any matrix.
  • No extraction theorem. The spec states the bound eta_A and the comparison class; it does not prove that an accepted root binds a unique binary source.
  • No Fiat-Shamir ledger, no lowered relation, no sumcheck, no successor commitment. LabiniusRootEncoding gives lengths and ranges and names the response table's address rule; the relation over the table, and how the parity quotient and carry are represented, belong to the lowered relation.
  • No layout admission. TrinomialResponseLayout::new separately rejects table extents above 2^28 terms; parameter admission here does not apply that implementation limit (the first profile's largest table is 2^26). A consumer must still run the layout constructor's checks.
  • One profile only. P64 and other degrees are certified in the CSV and reachable through the lookup, but no second profile is defined.

Commit map

  • 5de589d25 — runtime table, profile, shape, spec, estimator emission.
  • f629d7f2b — enforced digit ranges, signed-digit map, no-wrap from enforced magnitudes, witness lengths, parity oracle tests.
  • 4d2f34bf9 — literal fixtures for digit-base tags and the hand-assembled identity bytes; production items moved above the test modules in root_shape.rs.
  • fed6db800 — the encoding exposes the canonical response-table lengths, parity integer counts and image table length in place of the earlier three-segment lengths; golden values and spec updated; an address-rule test and padding overflow tests added.
  • 991b67651 — two spec sentences: the checked helpers named precisely, and the closing disclaimer no longer contradicts the stated address rule.

Validation

At fed6db8008471078745078fba9268f8dbe40f29c (the last commit that changes Rust code; the head commit changes two sentences of the spec):

  • cargo test -p akita-params --lib --no-default-features --features labinius-sis,transcript-blake2b sis::labinius: 29 passed.
  • cargo test -p akita-sis-estimator --lib --test labinius_width_table --no-default-features --features labinius-sis: 86 passed (2 suites).
  • cargo clippy -p akita-params -p akita-sis-estimator --all-targets --no-default-features --features labinius-sis,transcript-blake2b -- -D warnings: clean. cargo clippy -p akita-params --all-targets --no-default-features --features transcript-blake2b -- -D warnings: clean.
  • cargo fmt --all --check, scripts/check-rust-file-lines.sh --no-baseline, typos, ./scripts/check-doc-guardrails.sh: clean.
  • cargo test -p akita-types --lib --no-default-features --features labinius-trinomial,transcript-blake2b setup_contribution::trinomial::tests: 3 passed (the canonical layout the lengths are stated against; run in review).

At head 991b6765188054a53c9495744c487378ce535cf8: typos on the spec, ./scripts/check-doc-guardrails.sh, git diff --check: clean.

At 4d2f34bf9 (before the layout change): taplo fmt --check, the 179 Python script tests, check-crate-deps.sh for akita-params and akita-sis-estimator, check-shared-field-identity.sh, check-external-schedule-artifacts.sh, cargo machete --with-metadata, and the estimator example tests (3 passed): clean. Not rerun since; the later commits touch three files and no manifest.

At f629d7f2b:

  • 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.
  • git diff --quiet origin/dev over the existing generated SIS tables, ajtai_key, the estimator data directory and artifacts/: no change.

The parity bounds are tested against an independent big-integer long division, not against the closed form.

Not run locally: workspace Clippy configuration 3, the full workspace test pass, schedule regeneration, portability, Jolt compatibility, fuzzing, a fresh lattice-estimator search (the unchanged certified CSV is the authority).

Remaining work under #45

  1. Setup contract for the trinomial matrix and the lowered root relation with an independent integer oracle, differential against feat(labinius): standalone clear binary opening oracle #198.
  2. Combined alphabet and relation sumcheck, Fiat-Shamir ledger, and the two Akita openings of the successor witness and the image.
  3. Per-group seams on main, then the fused mixed root, planner and catalog rows.

Reviewer map

  1. specs/labinius-root-admission.md
  2. crates/akita-params/src/sis/labinius/width_table.rs, then root_profile.rs
  3. crates/akita-params/src/sis/labinius/root_shape.rs (admission order, parity bounds)
  4. crates/akita-params/src/sis/labinius/root_encoding.rs
  5. parity_tests.rs, root_encoding_tests.rs, root_profile_tests.rs

Pin the root-profile identity bytes against a hand-assembled byte string and
the digit-base tags against literals. Move the root_encoding module
declaration and the shared no-wrap helper above the test modules.
@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: 16

workspace-crates

Workspace membership and public crate surface

Code paths touched:

  • crates/akita-params/Cargo.toml

Consider updating:

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

sis-security

SIS floors, norm bounds, challenge sampling

Code paths touched:

  • crates/akita-params/src/sis/labinius.rs
  • crates/akita-params/src/sis/labinius/generated_width_table.rs
  • crates/akita-params/src/sis/labinius/parity_tests.rs
  • crates/akita-params/src/sis/labinius/root_encoding.rs
  • crates/akita-params/src/sis/labinius/root_encoding_tests.rs
  • crates/akita-params/src/sis/labinius/root_profile.rs
  • crates/akita-params/src/sis/labinius/root_profile_tests.rs
  • crates/akita-params/src/sis/labinius/root_shape.rs
  • crates/akita-params/src/sis/labinius/root_shape_tests.rs
  • crates/akita-params/src/sis/labinius/width_table.rs
  • crates/akita-params/src/sis/labinius/width_table_tests.rs

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

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

@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

PCS Profile Benchmark

  • Head: 148b600
  • Workflow run: run 37949205734 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.026 s
-2.5%
0.955 s
-0.0%
1.120 s
+0.3%
20.0 ms
-4.2%
55.9 ms
+0.4%
Fp32 one-hot nv34, direct setup check 0.031 s
-1.9%
0.742 s
-0.2%
1.244 s
-0.7%
22.9 ms
-2.7%
73.7 ms
+0.2%
Fp64 dense nv29, direct setup check 0.047 s
-3.1%
0.795 s
-1.1%
1.036 s
+12.6%
14.0 ms
-1.1%
38.9 ms
-0.1%
Fp64 one-hot nv35, direct setup check 0.081 s
+2.4%
1.178 s
+0.1%
1.209 s
+2.4%
16.2 ms
+0.0%
75.9 ms
+0.0%
Fp128 dense nv28, direct setup check 0.073 s
-1.7%
0.988 s
-0.1%
1.036 s
+12.7%
14.5 ms
+0.2%
48.5 ms
+0.1%
Fp128 one-hot nv36, direct setup check 0.127 s
-2.0%
4.713 s
+0.6%
2.038 s
+7.3%
24.6 ms
-1.0%
124.4 ms
+1.1%
Fp128 one-hot nv36, recursive setup check 0.280 s
-0.5%
4.608 s
-0.1%
2.239 s
-2.8%
20.4 ms
+7.1%
54.6 ms
+0.1%
Fp128 multi-group (final nv34, 4 polys total), direct setup check 0.135 s
-0.1%
1.755 s
-0.2%
1.086 s
+0.4%
19.9 ms
+0.4%
107.1 ms
-0.2%
Fp128 multi-group (final nv34, 4 polys total), recursive setup check 0.420 s
-0.2%
2.229 s
+0.1%
1.802 s
+3.2%
21.4 ms
+2.5%
43.1 ms
-0.1%
Fp128 multi-group W8R2 (final nv32, 4 polys total), recursive setup check 0.240 s
+1.3%
0.846 s
+0.4%
1.642 s
+0.2%
25.0 ms
-1.4%
76.2 ms
-0.4%
Fp128 one-hot nv32 W2R2, direct setup check 0.041 s
-1.5%
0.315 s
+0.7%
0.648 s
+1.2%
18.0 ms
+0.2%
52.2 ms
-0.1%
Fp128 one-hot nv32 W4R2, direct setup check 0.041 s
+1.6%
0.314 s
-0.4%
0.794 s
+0.8%
19.1 ms
+4.0%
59.4 ms
-0.1%
Fp128 one-hot nv32 W8R2, direct setup check 0.040 s
+0.4%
0.314 s
-0.5%
1.048 s
+0.2%
21.8 ms
-5.3%
73.1 ms
+0.2%

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%
4559.1 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%
864.5 MiB
-0.0%
Fp64 dense nv29, direct setup check 32.0 MiB
+0.0%
274.0 MiB
+0.0%
0.7 MiB
+0.0%
4949.0 MiB
-0.0%
Fp64 one-hot nv35, direct setup check 128.0 MiB
+0.0%
684.0 MiB
+0.0%
0.7 MiB
+0.0%
1571.6 MiB
-0.2%
Fp128 dense nv28, direct setup check 64.0 MiB
+0.0%
513.0 MiB
+0.0%
1.1 MiB
+0.0%
5349.3 MiB
-0.0%
Fp128 one-hot nv36, direct setup check 256.0 MiB
+0.0%
1284.0 MiB
+0.0%
3.0 MiB
+0.0%
2773.0 MiB
+0.0%
Fp128 one-hot nv36, recursive setup check 256.0 MiB
+0.0%
1334.0 MiB
+0.0%
1.1 MiB
+0.0%
3092.3 MiB
+0.0%
Fp128 multi-group (final nv34, 4 polys total), direct setup check 256.0 MiB
+0.0%
1285.0 MiB
+0.0%
3.0 MiB
+0.0%
2318.0 MiB
-0.1%
Fp128 multi-group (final nv34, 4 polys total), recursive setup check 256.0 MiB
+0.0%
1394.0 MiB
+0.0%
1.5 MiB
+0.0%
2951.1 MiB
+0.2%
Fp128 multi-group W8R2 (final nv32, 4 polys total), recursive setup check 128.0 MiB
+0.0%
698.2 MiB
+0.0%
1.1 MiB
+0.0%
1820.6 MiB
-0.0%
Fp128 one-hot nv32 W2R2, direct setup check 64.0 MiB
+0.0%
357.0 MiB
+0.0%
1.5 MiB
+0.0%
731.4 MiB
+0.5%
Fp128 one-hot nv32 W4R2, direct setup check 64.0 MiB
+0.0%
357.0 MiB
+0.0%
1.1 MiB
+0.0%
764.0 MiB
-0.2%
Fp128 one-hot nv32 W8R2, direct setup check 64.0 MiB
+0.0%
357.0 MiB
+0.0%
1.5 MiB
+0.0%
851.4 MiB
+0.1%

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-09T15:55:08Z.
  • Source: 06db25b on quang/labinius-root-params.
  • Workflow run: 37949205706.
  • Main baseline: 401e797.
  • Previous run: c2e5bcf.

Run summary

Wall s Main wall s Main Δ Ratio Tests Skipped Failed Status
912.0 838.0 +8.8% 1.09x 1952 0 0 ok

Wall time spans 2 parallel nextest slice shards.

Slowest tests

Rank Duration s Test
1 77.9 akita-planner::schedule_params::suffix_dp::chunk_ownership_tests::contracting_chunk_search_matches_unpruned_complete_objective
2 72.3 akita-planner::schedule_params::adaptive_search_tests::adaptive_frontier_matches_unpruned_traversal_and_hand_priced_role_optima
3 28.1 akita-planner::planner::totality_tests::contractive_winner_remains_selected
4 13.7 akita-pcs::scheme::tests::cross_mode::proofs_cannot_replay_across_valid_quotient_and_reduced_schedules
5 13.6 akita-planner::schedule_params::adaptive_search_tests::relation_cutover::bounded_suffix_dp_matches_unpruned_fixed_cutover_search
6 12.6 akita-planner::schedule_params::adaptive_search_tests::production_suffix_selects_l2_with_the_typed_response_model
7 12.5 akita-planner::schedule_params::adaptive_search_tests::adaptive_nv36_minimizes_setup_envelope_before_first_direct_setup
8 11.9 akita-pcs::akita_fp128_e2e::fp128_dense
9 10.3 akita-planner::planner::totality_tests::valid_small_grouped_root_has_a_schedule
10 9.1 akita-planner::schedule_params::adaptive_search_tests::adaptive_search_applies_setup_budget_in_physical_fields
11 9.0 akita-setup::tests::disk_persistence::combined_recursive_prefix_registry_persists_and_serves_each_family
12 8.5 akita-planner::planner::totality_tests::noncontractive_multi_chunk_root_can_beat_contractive_candidates
13 8.1 akita-pcs::akita_fp128_e2e::heterogeneous::bounded_dense_roundtrip_over_u64_coefficients_at_every_catalog_size
14 7.5 akita-planner::schedule_params::adaptive_search_tests::feasible_packing_dimension_ignores_infeasible_smaller_dimensions
15 7.3 akita-pcs::transcript_hardening_proptest::stream_fuzzes_batch_shapes
16 6.8 akita-pcs::scheme::tests::onehot::selective_l2::selective_l2_proof_rejects_transcript_mutations
17 5.6 akita-pcs::akita_small_field_e2e::fp32_dense
18 5.5 akita-pcs::akita_fp128_e2e::heterogeneous::combined_family_setup_matches_per_family_proofs
19 5.4 akita-planner::planner::adapted_schedule_tests::adapted_schedule_falls_back_to_the_full_search_when_the_frozen_suffix_is_infeasible
20 5.3 akita-sis-estimator::search_mode_parity::full_exhaustive_parallel_matches_certified_search_on_medium_subset

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 change fills a concrete gap between the existing certified CSV/source-comparison ledger and runtime parameter admission. It centralizes rank selection, geometry, enforced digit ranges, and no-wrap bounds without adding estimator dependencies to runtime consumers or changing existing proof paths. The generated-table drift tests and independent parity oracles support the additional maintenance cost. Deferring setup binding and protocol integration is consistent with the stated numerical-admission scope.

Approval not recommended: new P0-P3 findings in this review.

Comment thread specs/labinius-root-admission.md Outdated
# LaBinius binary-root matrix and shape admission

Status: active
Book-chapter: book/src/foundations/security.md

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[P3] Can we point this at book/src/how/security.md (or another existing owning chapter) and use the metadata-table format from specs/TEMPLATE.md? book/src/foundations/security.md doesn't exist, and check-book-chapter-paths.sh only scans | Book-chapter ... | rows, so this leaves a dead ownership reference that the documentation guardrail silently skips.

@github-actions github-actions Bot added the ai-reviewed An automated AI review has been published on this PR label Oct 9, 2026
@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 2/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 fills the gap between the existing offline certified-width lookup and runtime numerical admission. It centralizes certified rank selection, geometry, enforced digit ranges, and no-wrap calculations without bringing the estimator into runtime dependencies or changing existing proof paths. The generated-table drift tests and independent parity oracles provide useful safeguards for the added maintenance surface. Deferring matrix setup binding and protocol integration is consistent with the explicitly limited scope.

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

@github-actions github-actions Bot added the ai-approved Latest AI review recommends approval; informational, not a merge authorization label Oct 9, 2026
@quangvdao

Copy link
Copy Markdown
Collaborator Author

Superseded by #227, which carries the SIS admission, the root profile and the root shape for the single commitment prime.

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