| chore: Adopt cargo-fixit, align clippy lints with crypto, clear cargo-shear warnings (#3479) * chore(tooling): use cargo-fixit for the clippy-fix path `make xclippy-fix` now runs `cargo +stable fixit --clippy` (a faster drop-in for `cargo clippy --fix`) instead of the `xclippy-fix` cargo alias. The `xclippy` alias in .cargo/config.toml remains the single source of truth for the lint set. The Makefile extracts those flags into CLIPPY_LINT_FLAGS and passes them to fixit via RUSTFLAGS, since fixit cannot take lint flags as trailing arguments. The check path reads the same alias directly, so the two paths cannot drift apart. The now-unused `xclippy-fix` cargo alias is removed. When cargo-fixit is not installed the target prints the install command and skips rather than falling back to clippy. CI is untouched (it never ran the fix step). CONTRIBUTING.md uses `cargo fixit`. * chore(lint): enable clippy::expl_impl_clone_on_copy Replace the manual `Copy`/`Clone` impls on `Span<T>` with a derive, which matches the existing `T: Copy`/`T: Clone` bounds exactly. Enable `clippy::expl_impl_clone_on_copy` in the project clippy aliases. * chore(lint): enable clippy::unimplemented The `build_aux_trace` stub in the ACE codegen test AIR is never called; use `unreachable!` instead of `unimplemented!`. (`todo!` would trip the already-enabled `clippy::todo`.) Enable `clippy::unimplemented` in the project clippy aliases. * chore(lint): enable clippy::debug_assert_with_mut_call Hoist the mutable iterator `.next()` calls out of `debug_assert!` in the ACE and hasher chiplet traces. Calling `.next()` inside `debug_assert!` means the iterator advances in debug builds but not in release builds; evaluating the call unconditionally keeps behaviour consistent. Enable `clippy::debug_assert_with_mut_call` in the project clippy aliases. * chore(lint): enable clippy::option_option `reexport_target_docs` returns `Option<Option<String>>` to encode three states the caller relies on: target not found (skip the re-export), found without docs (emit the procedure with no docs), and found with docs. Conflating the outer two would emit spurious doc entries for unresolved re-exports, so the nesting is intentional; document it with a scoped `#[allow]`. Enable `clippy::option_option` in the project clippy aliases. * chore(lint): enable clippy::fn_params_excessive_bools `NodeFlags` packs four independent booleans into the hasher state's second word for END operations; there is no natural smaller grouping and `fn_params_excessive_bools` has no configurable threshold, so scope an `#[allow]` on the constructor with a justification, matching the flag-bundle relaxation already in `.clippy.toml`. Enable `clippy::fn_params_excessive_bools` in the project clippy aliases. * chore(lint): enable clippy::checked_conversions Replace the `x <= (T::MAX as U)` checked-cast guards with the idiomatic `T::try_from(x).is_ok()` form across the seven remaining sites (proof order, parser value shrinking, MAST serialization test, parallel trace test, precompiles bench inputs). Enable `clippy::checked_conversions` in the project clippy aliases. * chore(shear): delete empty unlinked test file in miden-air `air/src/constraints/decoder/tests.rs` is a zero-byte file with no corresponding `mod tests` declaration in `decoder/mod.rs`, so it is never compiled. cargo-shear flagged it as unlinked. Delete it. * chore(shear): suppress unlinked-file warning for trybuild UI fixtures `core/tests/ui/mast_forest_immutable/index_node_mut.rs` is a trybuild `compile_fail` fixture loaded by path at runtime in `public_api.rs`, so cargo-shear cannot statically link it. Add a scoped `ignored-paths` entry for `tests/ui/**` rather than deleting the fixture, which would remove a real compile_fail test. * chore(shear): remove unused thiserror from miden-assembly-syntax-cst thiserror is a derive-only crate, and no code in miden-assembly-syntax-cst uses `#[derive(thiserror::Error)]` or imports it. Remove the dependency and the stale `"thiserror/std"` entry from the `std` feature. * chore(shear): drop redundant optional miden-ace-codegen from miden-core-lib miden-ace-codegen was listed both as an optional `[dependencies]` entry (enabled by the `constraints-tools` feature) and as a `[dev-dependencies]` entry. No non-test code in miden-core-lib imports it; the two test files that use it get the crate via the dev-dependency. Remove the redundant optional declaration and the `dep:miden-ace-codegen` reference from the `constraints-tools` feature. * chore(shear): remove stale serde_json ignore from miden-mast-package cargo-shear flagged `ignored = ["serde_json"]` as redundant because serde_json is used in the `#[cfg(test)]` deserialization tests in `section.rs`. The dependency is already correctly declared in `[dev-dependencies]`, so the ignore is stale. Remove it. * chore(shear): delete orphaned legacy FRI PCS tests in miden-core-lib Delete crates/lib/core/tests/pcs/ (839 lines across four files), a winter-fri based FRI PCS verifier test module that has not compiled or run since the Plonky3 migration. cargo-shear flags it as an unlinked file because no `mod pcs;` declaration exists in tests/main.rs. How this directory became orphaned (commit-by-commit): 1. #2365 (a13eea1d4e, 2025-11-15) "chore: rename STARK MASM mod" The pcs/ test directory was created alongside a STARK MASM module rename. 2. #2427 (fd2e580045, 2025-12-05) "chore: rename miden-libcore to miden-core-lib" The crate rename added `mod pcs;` to tests/main.rs, wiring the directory into the compiled test suite. 3. #2472 (0083f515ff) "refactor: migrate underlying proving system to Plonky3" The Plonky3 migration replaced winter-fri with p3-fri. The legacy FRI tests in pcs/ and stark/ broke against the new APIs, so both were gated behind a new empty `legacy-stark-tests` feature: #[cfg(feature = "legacy-stark-tests")] mod pcs; 4. #2616 (972e98ee01, 2026-01-30) "chore: disable legacy tests" The `legacy-stark-tests` feature was removed entirely and both module declarations were commented out: // These tests are disabled until the recursive verifier is // updated to work with Plonky3 proofs // mod pcs; // mod stark; 5. #2869 (e5af1b7d91, 2026-03-27) "Update the recursive verifier to work with p3-miden" This commit created the current orphaned state. It migrated the stark/ test module to p3-fri and re-enabled it with `mod stark;`, but removed the `// mod pcs;` line entirely instead of uncommenting it. The pcs/ tests use winter-fri APIs directly and were not migrated. The stark/ test module now covers the p3-fri based PCS path. The pcs/ tests are dead and deleting them clears the last cargo-shear warning. * chore: Changelog | 24 天前 |
| ci: speed up test feedback and remove duplicate crypto tests (#3411) * ci: speed up test feedback * docs: remove duplicate test help | 1 个月前 |
| build(deps): bump the github-actions group with 2 updates (#3743) Bumps the github-actions group with 2 updates: [taiki-e/install-action](https://github.com/taiki-e/install-action) and [CodSpeedHQ/action](https://github.com/codspeedhq/action). Updates `taiki-e/install-action` from 2.86.2 to 2.86.7 - [Release notes](https://github.com/taiki-e/install-action/releases) - [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/taiki-e/install-action/compare/b6b84cf49ebfe0176417bdce007c624f0db37f20...b6ff580856c41316412a0b9b60540fbc6f8c82cc) Updates `CodSpeedHQ/action` from 5.0.3 to 5.2.1 - [Release notes](https://github.com/codspeedhq/action/releases) - [Changelog](https://github.com/CodSpeedHQ/action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codspeedhq/action/compare/4296e51e7041e24dadb86d1d6e8b9320d223dbe8...373d6868929f444bc08d901fd0eb0ad52a8875ea) --- updated-dependencies: - dependency-name: taiki-e/install-action dependency-version: 2.86.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: CodSpeedHQ/action dependency-version: 5.2.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: François Garillot <4142+huitseeker@users.noreply.github.com> | 5 天前 |
| chore: prepare v0.31.0 development cycle | 9 天前 |
| refactor: separate precompile verification from proving (#3734) * refactor: extract precompile AIR crate * fix: make precompile setup cache canonical * docs: describe uncached registry setup * refactor: separate precompile verification * docs: split precompile package guides * test: pin pre-split PVM proof compatibility * chore: align split with v0.31 workspace * docs: fix precompile AIR rustdoc reference * chore: Changelog * chore: group core library workspace entries * docs: refresh project structure | 5 天前 |
| fix: harden ExecutionWitness deserialization (#3758) * fix: harden execution witness decoding Apply an input-proportional budget and reject trailing or noncanonical payloads. Validate deferred entry counts against remaining input before reserving storage. Route witness round trips and the fuzz target through the hardened decoder. * fix: account for continuation wire size Report the smallest serialized continuation accurately so valid large stacks fit the witness allocation budget. Cover the case with a full witness round trip. * chore: Changelog * perf: avoid reserializing execution witnesses Keep bounded decoding and exact payload consumption without allocating a second witness-sized byte buffer. | 3 天前 |
| refactor: Remove unused SmtForest (#3746) * Remove unused SmtForest * chore: Changelog | 4 天前 |
| fix(assembly): limit bare exp to 63 exponent bits (#3712) | 9 天前 |
| fix: harden ExecutionWitness deserialization (#3758) * fix: harden execution witness decoding Apply an input-proportional budget and reject trailing or noncanonical payloads. Validate deferred entry counts against remaining input before reserving storage. Route witness round trips and the fuzz target through the hardened decoder. * fix: account for continuation wire size Report the smallest serialized continuation accurately so valid large stacks fit the witness allocation budget. Cover the case with a full witness round trip. * chore: Changelog * perf: avoid reserializing execution witnesses Keep bounded decoding and exact payload consumption without allocating a second witness-sized byte buffer. | 3 天前 |
| fix: harden ExecutionWitness deserialization (#3758) * fix: harden execution witness decoding Apply an input-proportional budget and reject trailing or noncanonical payloads. Validate deferred entry counts against remaining input before reserving storage. Route witness round trips and the fuzz target through the hardened decoder. * fix: account for continuation wire size Report the smallest serialized continuation accurately so valid large stacks fit the witness allocation budget. Cover the case with a full witness round trip. * chore: Changelog * perf: avoid reserializing execution witnesses Keep bounded decoding and exact payload consumption without allocating a second witness-sized byte buffer. | 3 天前 |
| chore: prepare v0.31.0 development cycle | 9 天前 |
| ci: catch release version errors before builds (#3733) * ci: check release versions in pull requests Run the existing package release plan on pull requests without the slower API compatibility check. Reject changed crate contents at a published version and validate linked release metadata and lockfiles. * ci: reject existing crates before artifact builds Pass allow_existing=false to the package version gate for a fresh manual release. Keep true as an explicit partial publish recovery option and for the published release fallback. | 5 天前 |
| chore: integrate crypto crates into workspace Move the refreshed crypto crates into the VM workspace and wire them through workspace dependencies, feature checks, fuzz targets, tests, and benchmarks. Add path-aware CI routing for VM, crypto, fuzz, release, and docs-only changes so existing VM jobs keep their scope while imported crypto crates get equivalent build, test, lint, fuzz, and CodSpeed coverage. Release note: imported crypto crate versions are already present on crates.io, so the workspace-release action relies on allow_existing filtering and Cargo --exclude arguments for dry-run/resume paths. | 1 个月前 |
| fix: harden ExecutionWitness deserialization (#3758) * fix: harden execution witness decoding Apply an input-proportional budget and reject trailing or noncanonical payloads. Validate deferred entry counts against remaining input before reserving storage. Route witness round trips and the fuzz target through the hardened decoder. * fix: account for continuation wire size Report the smallest serialized continuation accurately so valid large stacks fit the witness allocation budget. Cover the case with a full witness round trip. * chore: Changelog * perf: avoid reserializing execution witnesses Keep bounded decoding and exact payload consumption without allocating a second witness-sized byte buffer. | 3 天前 |
| refactor: separate precompile verification from proving (#3734) * refactor: extract precompile AIR crate * fix: make precompile setup cache canonical * docs: describe uncached registry setup * refactor: separate precompile verification * docs: split precompile package guides * test: pin pre-split PVM proof compatibility * chore: align split with v0.31 workspace * docs: fix precompile AIR rustdoc reference * chore: Changelog * chore: group core library workspace entries * docs: refresh project structure | 5 天前 |
| Remove uneeded clippy exceptions (#3215) * Removed 4 clippy allows: iter_skip_zero (removed no-op .skip(0)), new_without_default (implemented Default), print_stdout (replaced println! with eprintln!), needless_range_loop (configured threshold) Result: {"status":"keep","clippy_allow_count":28} * Removed 8 clippy allows: too_many_lines (5, via clippy.toml threshold 200), too_many_arguments (1, via clippy.toml threshold 11), type_complexity (2, via clippy.toml threshold 300) Result: {"status":"keep","clippy_allow_count":20} * Removed 2 needless_range_loop allows from air/src/constraints/public_inputs.rs by allowing clippy to warn Result: {"status":"keep","clippy_allow_count":17} * Removed 1 more needless_range_loop allow from air/src/constraints/chiplets/columns.rs (was no longer needed) Result: {"status":"keep","clippy_allow_count":16} * Removed 1 vec_box allow from project.rs (LoadedTargetSources.support changed from Vec<Box<Module>> to Vec<Module>) Result: {"status":"keep","clippy_allow_count":13} * Removed 1 needless_range_loop allow from chiplets/hasher/mod.rs (was no longer needed in tests) Result: {"status":"keep","clippy_allow_count":12} * Removed 1 needless_range_loop allow from chiplets/mod.rs (was no longer needed in tests) Result: {"status":"keep","clippy_allow_count":11} * Removed 2 verbose_file_reads allows from package-registry-local (lint doesn't fire with lock acquisition + read_to_end/read_to_string patterns) Result: {"status":"keep","clippy_allow_count":9} * Fix clippy and rustfmt issues blocking CI - Refactor needless_range_loop in columns.rs: convert 3 range loops to iterator patterns - Refactor needless_range_loop in public_inputs.rs: convert 2 range loops to iterator/enumerate - Fix rustfmt in project.rs: remove braces from TargetType::Executable match arm - Raise type_complexity_threshold from 300 to 650 to match the PR's intent (bump higher, not lower) - Remove #[expect(clippy::type_complexity)] from smt.rs (unfulfilled with higher threshold) - Fix formatting in sys_ops/mod.rs (op_caller signature single-line per rustfmt) - Include op_caller/lex_identifier return-type simplification (unnecessary_wraps fix) * Fix needless_collect in project.rs: remove unnecessary .collect() call * Re-add verbose_file_reads allows to package-registry-local (lint fires with CI nightly 1.98.0; file handle needed for lock) * Prefer allow attributes over iterator refactoring for needless_range_loop in chiplets/columns.rs and public_inputs.rs * Revert op_caller refactoring, reintroduce #[allow(clippy::unnecessary_wraps)] with the original comment * Use clippy expect reasons for intentional lints * Expect boxed support modules in project assembly | 2 个月前 |
| core-lib: simplify miden-core/miden-precompiles relationship and build (#3672) | 14 天前 |
| AIR constraints compiler (#3404) | 1 个月前 |
| fix: harden ExecutionWitness deserialization (#3758) * fix: harden execution witness decoding Apply an input-proportional budget and reject trailing or noncanonical payloads. Validate deferred entry counts against remaining input before reserving storage. Route witness round trips and the fuzz target through the hardened decoder. * fix: account for continuation wire size Report the smallest serialized continuation accurately so valid large stacks fit the witness allocation budget. Cover the case with a full witness round trip. * chore: Changelog * perf: avoid reserializing execution witnesses Keep bounded decoding and exact payload consumption without allocating a second witness-sized byte buffer. | 3 天前 |
| chore: Adopt cargo-fixit, align clippy lints with crypto, clear cargo-shear warnings (#3479) * chore(tooling): use cargo-fixit for the clippy-fix path `make xclippy-fix` now runs `cargo +stable fixit --clippy` (a faster drop-in for `cargo clippy --fix`) instead of the `xclippy-fix` cargo alias. The `xclippy` alias in .cargo/config.toml remains the single source of truth for the lint set. The Makefile extracts those flags into CLIPPY_LINT_FLAGS and passes them to fixit via RUSTFLAGS, since fixit cannot take lint flags as trailing arguments. The check path reads the same alias directly, so the two paths cannot drift apart. The now-unused `xclippy-fix` cargo alias is removed. When cargo-fixit is not installed the target prints the install command and skips rather than falling back to clippy. CI is untouched (it never ran the fix step). CONTRIBUTING.md uses `cargo fixit`. * chore(lint): enable clippy::expl_impl_clone_on_copy Replace the manual `Copy`/`Clone` impls on `Span<T>` with a derive, which matches the existing `T: Copy`/`T: Clone` bounds exactly. Enable `clippy::expl_impl_clone_on_copy` in the project clippy aliases. * chore(lint): enable clippy::unimplemented The `build_aux_trace` stub in the ACE codegen test AIR is never called; use `unreachable!` instead of `unimplemented!`. (`todo!` would trip the already-enabled `clippy::todo`.) Enable `clippy::unimplemented` in the project clippy aliases. * chore(lint): enable clippy::debug_assert_with_mut_call Hoist the mutable iterator `.next()` calls out of `debug_assert!` in the ACE and hasher chiplet traces. Calling `.next()` inside `debug_assert!` means the iterator advances in debug builds but not in release builds; evaluating the call unconditionally keeps behaviour consistent. Enable `clippy::debug_assert_with_mut_call` in the project clippy aliases. * chore(lint): enable clippy::option_option `reexport_target_docs` returns `Option<Option<String>>` to encode three states the caller relies on: target not found (skip the re-export), found without docs (emit the procedure with no docs), and found with docs. Conflating the outer two would emit spurious doc entries for unresolved re-exports, so the nesting is intentional; document it with a scoped `#[allow]`. Enable `clippy::option_option` in the project clippy aliases. * chore(lint): enable clippy::fn_params_excessive_bools `NodeFlags` packs four independent booleans into the hasher state's second word for END operations; there is no natural smaller grouping and `fn_params_excessive_bools` has no configurable threshold, so scope an `#[allow]` on the constructor with a justification, matching the flag-bundle relaxation already in `.clippy.toml`. Enable `clippy::fn_params_excessive_bools` in the project clippy aliases. * chore(lint): enable clippy::checked_conversions Replace the `x <= (T::MAX as U)` checked-cast guards with the idiomatic `T::try_from(x).is_ok()` form across the seven remaining sites (proof order, parser value shrinking, MAST serialization test, parallel trace test, precompiles bench inputs). Enable `clippy::checked_conversions` in the project clippy aliases. * chore(shear): delete empty unlinked test file in miden-air `air/src/constraints/decoder/tests.rs` is a zero-byte file with no corresponding `mod tests` declaration in `decoder/mod.rs`, so it is never compiled. cargo-shear flagged it as unlinked. Delete it. * chore(shear): suppress unlinked-file warning for trybuild UI fixtures `core/tests/ui/mast_forest_immutable/index_node_mut.rs` is a trybuild `compile_fail` fixture loaded by path at runtime in `public_api.rs`, so cargo-shear cannot statically link it. Add a scoped `ignored-paths` entry for `tests/ui/**` rather than deleting the fixture, which would remove a real compile_fail test. * chore(shear): remove unused thiserror from miden-assembly-syntax-cst thiserror is a derive-only crate, and no code in miden-assembly-syntax-cst uses `#[derive(thiserror::Error)]` or imports it. Remove the dependency and the stale `"thiserror/std"` entry from the `std` feature. * chore(shear): drop redundant optional miden-ace-codegen from miden-core-lib miden-ace-codegen was listed both as an optional `[dependencies]` entry (enabled by the `constraints-tools` feature) and as a `[dev-dependencies]` entry. No non-test code in miden-core-lib imports it; the two test files that use it get the crate via the dev-dependency. Remove the redundant optional declaration and the `dep:miden-ace-codegen` reference from the `constraints-tools` feature. * chore(shear): remove stale serde_json ignore from miden-mast-package cargo-shear flagged `ignored = ["serde_json"]` as redundant because serde_json is used in the `#[cfg(test)]` deserialization tests in `section.rs`. The dependency is already correctly declared in `[dev-dependencies]`, so the ignore is stale. Remove it. * chore(shear): delete orphaned legacy FRI PCS tests in miden-core-lib Delete crates/lib/core/tests/pcs/ (839 lines across four files), a winter-fri based FRI PCS verifier test module that has not compiled or run since the Plonky3 migration. cargo-shear flags it as an unlinked file because no `mod pcs;` declaration exists in tests/main.rs. How this directory became orphaned (commit-by-commit): 1. #2365 (a13eea1d4e, 2025-11-15) "chore: rename STARK MASM mod" The pcs/ test directory was created alongside a STARK MASM module rename. 2. #2427 (fd2e580045, 2025-12-05) "chore: rename miden-libcore to miden-core-lib" The crate rename added `mod pcs;` to tests/main.rs, wiring the directory into the compiled test suite. 3. #2472 (0083f515ff) "refactor: migrate underlying proving system to Plonky3" The Plonky3 migration replaced winter-fri with p3-fri. The legacy FRI tests in pcs/ and stark/ broke against the new APIs, so both were gated behind a new empty `legacy-stark-tests` feature: #[cfg(feature = "legacy-stark-tests")] mod pcs; 4. #2616 (972e98ee01, 2026-01-30) "chore: disable legacy tests" The `legacy-stark-tests` feature was removed entirely and both module declarations were commented out: // These tests are disabled until the recursive verifier is // updated to work with Plonky3 proofs // mod pcs; // mod stark; 5. #2869 (e5af1b7d91, 2026-03-27) "Update the recursive verifier to work with p3-miden" This commit created the current orphaned state. It migrated the stark/ test module to p3-fri and re-enabled it with `mod stark;`, but removed the `// mod pcs;` line entirely instead of uncommenting it. The pcs/ tests use winter-fri APIs directly and were not migrated. The stark/ test module now covers the p3-fri based PCS path. The pcs/ tests are dead and deleting them clears the last cargo-shear warning. * chore: Changelog | 24 天前 |
| build(deps): update Wycheproof crates to 0.2.0 (#3745) | 4 天前 |
| build(deps): update Wycheproof crates to 0.2.0 (#3745) | 4 天前 |
| chore: add Apache 2.0 license (#1883) | 1 年前 |
| chore: add Apache 2.0 license (#1883) | 1 年前 |
| refactor: separate precompile verification from proving (#3734) * refactor: extract precompile AIR crate * fix: make precompile setup cache canonical * docs: describe uncached registry setup * refactor: separate precompile verification * docs: split precompile package guides * test: pin pre-split PVM proof compatibility * chore: align split with v0.31 workspace * docs: fix precompile AIR rustdoc reference * chore: Changelog * chore: group core library workspace entries * docs: refresh project structure | 5 天前 |
| refactor: separate precompile verification from proving (#3734) * refactor: extract precompile AIR crate * fix: make precompile setup cache canonical * docs: describe uncached registry setup * refactor: separate precompile verification * docs: split precompile package guides * test: pin pre-split PVM proof compatibility * chore: align split with v0.31 workspace * docs: fix precompile AIR rustdoc reference * chore: Changelog * chore: group core library workspace entries * docs: refresh project structure | 5 天前 |
| docs: clarify limited crate releases (#3444) | 1 个月前 |
| docs: add security policy (#3150) | 3 个月前 |
| feat(security): add a conjectured security estimator (#3688) * feat(security): grade proofs with a conjectured round budget The conjectured level was a hand-calibrated per-query constant under a fixed cap, covering only the query phase, with `ExecutionProof::security_level` returning a literal 96. The lookup and out-of-domain rounds degrade with trace height, so the level belongs to the proof rather than to the preset. Add `miden-security`: the minimum over the protocol's rounds and the collision cap, each crediting the grinding sited before its own challenge, in fixed point so the recursive verifier can mirror it. `miden_air::security` derives the AIR shape symbolically and pins it behind a drift test; field size, collision resistance, and the per-query rate are derived rather than tabulated. `compute_conjectured_security_level` mirrors the budget from the proof's maximum AIR log height, leaving `verify_vm_proof` and its MAST root unchanged. An exhaustive cross-test compares both implementations over the verifier's domain. The deployed preset grades 96 below 2^22 rows and 89 at MAX_CYCLES, where the lookup round binds. `lookup_pow_bits` is plumbed through as zero. * feat(security): grade precompile proofs, and count vanishing denominators `verify_deferred` returned a root and the verifier paired it with a literal 96, so a composite `min(vm_level, precompile_level)` was only as honest as that constant. Derive the chiplet stack's AIR shape the same way the VM's is derived and grade its proofs from the verified trace height. The chiplet stack emits 240 lookup fractions per row against the VM's 28, so its lookup round overtakes the query phase at 2^20 rather than 2^23: 96 bits through 2^19, 91 at 2^24. Also correct the lookup bound itself. A root of the cleared numerator is not the only way an unbalanced multiset survives — a vanishing denominator degenerates the batched transition identity, forcing that message's multiplicity to zero and letting a prover drop it from the bus. Each denominator is monic in the first challenge, so that event costs `M/|E|`, giving `(W + 2)·M` in place of the previous `2·W·M`. The old coefficient covered the event but priced it as if the denominators were dense in both challenges, costing ~0.9 bits; the VM now grades 90 rather than 89 at MAX_CYCLES. * test(security): pin p3-security parity Adds a dev-only, rev-pinned p3-security dependency and a parity test asserting every round in this crate's fixed-point round budget is at least as conservative as p3-security's real-valued equivalent, plus exact composite agreement against every pinned reference-vector row. p3-security is not yet published, hence the git rev pin rather than a version requirement. * test(security): pin against p3-security's budget module, add bit-identical equivalence check Points the p3-security dev-dependency at Plonky3's robin/security-fixed-point-budget (the branch behind the pending bundled U1+U2 upstream PR) instead of main, since main doesn't yet carry the round-budget port this crate will eventually delegate to. Adds a direct bit-for-bit comparison between this crate's own security_report and p3_security::budget::security_report for identical inputs, across both AIR shapes, every reference parameter row, and every swept height — the check a swap-and-delete migration needs beyond p3_parity.rs's direction/tightness bounds against the f64 formulas. Zero divergence. * refactor(security): swap in p3_security::budget, delete crates/security air/src/security.rs and precompiles-prover/src/security.rs now delegate to p3_security::budget::security_report and p3_security::fixed instead of the in-repo miden-security crate. Only the shape mapping changed (AirShape::num_deep_terms wraps in Some(..), matching p3-security's generalized optional DEEP-quotient-batching round) and two label paths (miden_security::report:: -> p3_security::budget::report::). p3-security is not yet published; pinned by git commit (robin/security-fixed-point-budget, the branch behind the pending upstream PR bundling the fixed-point kernel and round-budget port) until an rc release lands. Every acceptance criterion holds unchanged: masm_literals_match_the_ derived_constants, both security_report_matches_reference_vectors tables, both deployed_preset_grades_by_trace_height tables, the lookup/query crossover, and the MASM cross-test (masm_compute_conjectured_security_level_matches_native) all pass with zero .masm diff. * dep: use released rc version for p3-security * chore CHANGELOG * chore: bump miden-core-fuzz deps * review: address comments * chore: clippy * review: address comments * fix changelog --------- Co-authored-by: Al-Kindi-0 <82364884+Al-Kindi-0@users.noreply.github.com> | 9 天前 |
| ci: check local documentation links on pull requests (#3606) * ci: check local documentation links on pull requests * chore: Changelog | 23 天前 |
| chore: bump MSRV to 1.96.1 | 1 个月前 |
| refactor: separate precompile verification from proving (#3734) * refactor: extract precompile AIR crate * fix: make precompile setup cache canonical * docs: describe uncached registry setup * refactor: separate precompile verification * docs: split precompile package guides * test: pin pre-split PVM proof compatibility * chore: align split with v0.31 workspace * docs: fix precompile AIR rustdoc reference * chore: Changelog * chore: group core library workspace entries * docs: refresh project structure | 5 天前 |
| ci: Harden CI, signed-commit on maintainers, non-regression on next, workspace inheritance (#2999) * Harden GitHub Actions workflows * Pin cargo-msrv install version * Scope signed-commit checks to maintainers * Check workspace dependency inheritance * Enable std for pretty_assertions in tests * Remove duplicate changelog status job * chore: revert eager promotions, be lazier about threshold * Update contribution quality workflow pin * Harden recursive constraints workflow | 4 个月前 |