Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
3788 commits
Select commit Hold shift + click to select a range
9ee9c62
chore(deps): bump brace-expansion from 1.1.12 to 1.1.13 in /docs (#12…
dependabot[bot] Mar 31, 2026
f00a108
chore(brillig_vm): Cache the stack pointer (#12036)
vezenovm Mar 31, 2026
011c947
chore: add ecdsa_secp256k1_msg_equals_order integration test (#12015)
AztecBot Mar 31, 2026
dee9c0f
fix(frontend): Handle various overflows (#11947)
aakoshh Mar 31, 2026
c921ed0
chore: Remove comptime mutating methods (#12003)
jfecher Mar 31, 2026
63aee18
fix(ssa): Unrolling blocks with multiple parameters and constant JmpI…
vezenovm Mar 31, 2026
4271b03
chore: only install npm packages over a week old (#12064)
TomAFrench Mar 31, 2026
a9f4dbf
chore(deps): bump codespan from 0.11.1 to 0.13.1 (#12051)
dependabot[bot] Mar 31, 2026
d5b6fad
fix: prevent CSE from hoisting instructions into loop headers (#12044)
TomAFrench Mar 31, 2026
16c225b
fix: preserve comptime string bytes (#12068)
asterite Mar 31, 2026
0b19781
chore: refactor primitive method lookup (#12069)
asterite Mar 31, 2026
7396126
chore(deps): bump benchmark-action/github-action-benchmark from 1.21.…
dependabot[bot] Apr 1, 2026
4ce63e6
chore(deps): bump node-forge from 1.3.3 to 1.4.0 in /docs (#12032)
dependabot[bot] Apr 1, 2026
127ca88
chore: pin external actions to commits (#12061)
TomAFrench Apr 1, 2026
58dabf8
chore(ssa): Clarify the handling of globals in `covert_ssa_value` (#1…
aakoshh Apr 1, 2026
8e1bf36
fix: check mutability in `*&mut x` elaboration optimization (#12079)
TomAFrench Apr 1, 2026
c9e1989
chore: remove dead code in type_check_operator_method (#12082)
TomAFrench Apr 1, 2026
4e1fb40
fix(lsp): autocomplete in type generics (#12080)
asterite Apr 1, 2026
9d2aac9
chore(test): Add baseline to test BoundedVec::extend_from_bounded_vec…
aakoshh Apr 1, 2026
b37a537
fix(lsp): don't zip_eq in inlay hints (#12081)
asterite Apr 1, 2026
279aafb
fix: avoid nondeterminism when reporting "Type annotation needed" (#1…
asterite Apr 1, 2026
590aa9a
chore: Remove HashMap (#12088)
jfecher Apr 2, 2026
a90eb42
fix(lsp): correct self param when generating trait impl stub (#12098)
asterite Apr 2, 2026
49c7691
fix: don't simplify `x | MAX` if x is signed (#12100)
asterite Apr 2, 2026
3a0508e
feat: clarify type mismatch errors when base names are equal (#12074)
asterite Apr 2, 2026
a00155d
fix(lsp): hover on numeric generic (#12097)
asterite Apr 2, 2026
39f39a5
feat(opt): Change stdlib array methods to take immutable references (…
jfecher Apr 2, 2026
bd62a75
fix: use repeated array literal in monomorphization zeroed (#12105)
asterite Apr 2, 2026
6c53b58
feat: Allow immrefs to go from acir to brillig (#12035)
jfecher Apr 2, 2026
ed8c124
fix: avoid duplicates when removing then inserting in hashmap (#12084)
asterite Apr 2, 2026
64115fc
fix(lsp): when two exprs exist at a location, prefer the type of the …
asterite Apr 3, 2026
9572f95
chore(deps): bump lodash from 4.17.21 to 4.17.23 (#12107)
dependabot[bot] Apr 3, 2026
28d61db
fix: ssa interpreter unchecked sub was checked (#12113)
asterite Apr 3, 2026
294a558
feat(ssa): Collapse redundant nested merges when flattening (#12116)
vezenovm Apr 3, 2026
2d3e6c6
feat(ssa): Iterative dominance frontiers for mem2reg_simple (Cytron e…
vezenovm Apr 3, 2026
4b1d34b
fix: don't panic on ABI tuple length mismatch (#12096)
asterite Apr 3, 2026
5939e7b
fix: check dominators when removing truncate instructions (#12095)
guipublic Apr 3, 2026
b8fc4f2
chore: handle missing error in codegen_if (#12099)
guipublic Apr 3, 2026
7878559
fix: allow user-defined items to collide with prelude items (#12112)
asterite Apr 3, 2026
5f93d49
fix: prevent potential overflow for i128 (#12115)
asterite Apr 3, 2026
fc0c8ba
chore: panic on missing comptime struct field (#12117)
asterite Apr 3, 2026
9405c29
fix: incorrect cast between signed integers simplification (#12104)
asterite Apr 3, 2026
af93607
chore: error instead of panic in case of missing inputs (#12110)
guipublic Apr 3, 2026
b925d3e
chore: Remove mem2reg (#12011)
jfecher Apr 3, 2026
f4ead98
fix(ssa): Aliasing issues in load/store forwarding (#12125)
vezenovm Apr 3, 2026
1c4b00b
chore(stdlib): Optimized `BoundedVec::extend_from_bounded_vec` (#12083)
aakoshh Apr 6, 2026
36226db
chore: bump external pinned commits (#12128)
noirwhal Apr 6, 2026
e84d6f1
chore: Change more stdlib methods to accept immutable references (#12…
jfecher Apr 6, 2026
89f0a75
fix: desugar op-assign during elaboration to avoid double evaluation …
asterite Apr 6, 2026
883820b
chore: Greenlight group 11 (#12132)
jfecher Apr 6, 2026
ffb51dc
chore(deps): bump notify-debouncer-full from 0.3.2 to 0.7.0 (#12052)
dependabot[bot] Apr 6, 2026
784afa2
fix(fmt): indent block inside index assignment (#12133)
asterite Apr 6, 2026
c09ce9a
chore: simpler `function_is_unconstrained` check (#12136)
asterite Apr 6, 2026
9d22191
chore(deps): bump indexmap from 2.13.0 to 2.13.1 (#12144)
dependabot[bot] Apr 7, 2026
dfc9537
chore(deps-dev): bump vite-plugin-node-polyfills from 0.25.0 to 0.26.…
dependabot[bot] Apr 7, 2026
5124a84
chore(deps): bump streetsidesoftware/cspell-action from 8.3.0 to 8.4.…
dependabot[bot] Apr 7, 2026
e18bb6e
chore(deps): bump marocchino/sticky-pull-request-comment from 3.0.2 t…
dependabot[bot] Apr 7, 2026
95bbc4f
chore(deps): bump rand_xorshift from 0.4.0 to 0.5.0 (#12143)
dependabot[bot] Apr 7, 2026
a8d68a6
chore(deps): bump similar-asserts from 1.7.0 to 2.0.0 (#12142)
dependabot[bot] Apr 7, 2026
223f5db
chore: cache Playwright browsers in CI and default to chromium-only (…
AztecBot Apr 7, 2026
f5808ea
chore(deps): bump proptest-derive from 0.6.0 to 0.8.0 (#12141)
dependabot[bot] Apr 7, 2026
4b0fc9c
chore: avoid unnecessary Type cloning in `type_of_value` (#12140)
AztecBot Apr 7, 2026
36a8119
fix: eliminate unnecessary clones on array indexing at last use (#12134)
AztecBot Apr 7, 2026
9e82927
fix: track aliases during ownership pass to avoid moves (#12118)
asterite Apr 7, 2026
3b808dd
chore: add integration test to show signature normalisation (#12151)
guipublic Apr 7, 2026
afa92cd
chore: Remove is_infinite field (#11926)
jfecher Apr 7, 2026
18e996a
fix: prevent force_unroll blowup for large zero-useful-cost loops (#1…
TomAFrench Apr 7, 2026
5af7067
chore!: remove unnecessary `state_len` argument from `poseidon2_permu…
TomAFrench Apr 7, 2026
48fe6a4
fix: missing monomorphization visit of constrain message (#12159)
asterite Apr 7, 2026
f190e78
feat!: remove u1 type from user-facing Noir (#11753)
TomAFrench Apr 7, 2026
1de1152
fix: check oracle return type on any function expr, not only on calls…
asterite Apr 7, 2026
fe15bae
feat: avoid duplicated calculation of CFG (#12164)
TomAFrench Apr 8, 2026
717a85d
chore: mark libraries as compiling, remove ec from test suite (#12166)
AztecBot Apr 8, 2026
79532ad
chore: update poseidon library to v0.3.0 and re-enable tests (#12167)
AztecBot Apr 8, 2026
46a5eb7
fix: remove stale u1 references from error messages (#12165)
AztecBot Apr 8, 2026
842974f
fix: Only trigger debugger on things from the debugger crate (#12163)
jfecher Apr 8, 2026
5cc82dc
fix(ssa): prevent false merge collapses when inner IfElse simplifies …
AztecBot Apr 9, 2026
a7048b3
chore: claudebox must run formatter + delete pending snapshots (#12195)
TomAFrench Apr 9, 2026
7815e81
chore: push claude towards more TDD (#12205)
TomAFrench Apr 9, 2026
5b68033
chore(stdlib): replace from_field_unsafe with safe from_field in pede…
AztecBot Apr 9, 2026
ad61bd6
chore(ssa): Unify redundant parameter removal (#12072)
vezenovm Apr 9, 2026
60821b1
chore: Rename mem2reg_simple to mem2reg (#12216)
jfecher Apr 9, 2026
091a2f7
feat(ssa): immutable reference type (#12182)
vezenovm Apr 9, 2026
98f15d7
chore(ssa): replace unnecessary from_str_no_validation with from_str …
TomAFrench Apr 9, 2026
25a9b26
chore(stdlib): BoundedVec::storage() takes self (#12224)
vezenovm Apr 9, 2026
96b567a
chore: Tests for generic inference through references and auto-borrow…
vezenovm Apr 9, 2026
67b9d67
chore: add missing tests for signed/field numeric generics and fix pr…
AztecBot Apr 9, 2026
04cba8d
fix(cli): Wrap the DAP server input reader to fix JSON payloads (#12154)
aakoshh Apr 9, 2026
1a92d6f
feat(lsp): show Nargo.toml errors as diagnostics and watch for file c…
asterite Apr 9, 2026
8c11bf0
chore: Use retain in remove_redundant_params (#12226)
jfecher Apr 9, 2026
7245cf8
fix: Fix cycle in lookup_associated_type_in_parent_impls (#12160)
jfecher Apr 9, 2026
d538b93
fix(ownership): Consider the index to be the first and collection to …
aakoshh Apr 10, 2026
c0a154c
chore(deps): bump actions/github-script from 8.0.0 to 9.0.0 in the co…
dependabot[bot] Apr 10, 2026
df639eb
chore: Reverse ast traversal of last_uses pass (#12172)
jfecher Apr 10, 2026
200eb36
chore: Add reference docs (#12235)
jfecher Apr 10, 2026
97fda06
chore(docs): Document snapshot-test conventions and fix cargo insta f…
TomAFrench Apr 10, 2026
3964f5f
fix(cli): fail when interpret output or results change across SSA pas…
0xwonj Apr 13, 2026
f83ac7c
fix: correct confirmed-moves optimization in ownership pass for cross…
asterite Apr 13, 2026
c2a4b29
chore: bump external pinned commits (#12249)
noirwhal Apr 13, 2026
96061ea
chore(deps): bump marocchino/sticky-pull-request-comment from 3.0.3 t…
dependabot[bot] Apr 13, 2026
2efa5c9
chore(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 in the …
dependabot[bot] Apr 13, 2026
e63aa50
fix: Add killed set to fix regressions in reversed last use pass (#12…
jfecher Apr 13, 2026
c24a5a1
chore: refactor spilling a value in a dedicated function (#12252)
guipublic Apr 13, 2026
b4236c1
chore: Release Noir(1.0.0-beta.20) (#11611)
noirwhal Apr 13, 2026
0ad5555
fix(ssa): Simplify LSF to only run on single block functions (#12243)
vezenovm Apr 13, 2026
55a01b2
fix(docs): update sgn0 signature from u1 to bool (#12250)
AztecBot Apr 13, 2026
7a5e067
chore: Add assertions we've used all fields when constructing comptim…
jfecher Apr 13, 2026
e265543
chore(ssa): Load store forwarding regression test (#12271)
vezenovm Apr 13, 2026
228ae9c
fix: Use bytes in Hir strings (#12269)
jfecher Apr 13, 2026
6eec424
chore(docs): Remove documentation of u1 type (#12273)
Savio-Sou Apr 13, 2026
363cbe7
fix(fuzzer): wrap oracle print calls in wrapper functions (#12147)
rkarabut Apr 14, 2026
6276ac7
feat(fuzzer): enable print generation in ACIR functions (#12290)
rkarabut Apr 14, 2026
04a373e
fix(docs): Fill in missing docs (#12242)
jfecher Apr 14, 2026
41915dc
chore(fuzz): Increase `constrain` frequency in the AST fuzzer (#12299)
aakoshh Apr 15, 2026
2f00eec
chore: run LSF after mem2reg-brillig (#12311)
asterite Apr 15, 2026
6e31b8e
fix(ssa): Check aliases when invalidating references passed to calls …
vezenovm Apr 15, 2026
95edf9a
chore(ssa): Always inline single caller functions (#12319)
vezenovm Apr 15, 2026
3bcd132
fix: Always clone array indexes (#12321)
jfecher Apr 15, 2026
b3b0faa
chore(docs): Bump versions in docs dropdown to 4 (#12325)
Savio-Sou Apr 16, 2026
ff44dd6
chore(fuzz): Include `inline_never` and `no_predicates` in AST fuzzin…
aakoshh Apr 16, 2026
1d77f5a
fix: consider reference mutability in load_store_forwarding (#12331)
asterite Apr 16, 2026
7734c58
chore(ssa): Merge provably equivalent sets in load_store_forwarding (…
vezenovm Apr 16, 2026
681b9c6
chore(ssa): Inlining pass module doc comments (#12337)
vezenovm Apr 16, 2026
2596078
fix(brillig): Use value set for tracking max live count (#12334)
vezenovm Apr 16, 2026
ad02a20
fix: Fix prioritize types over globals for resolution (#12274)
jfecher Apr 16, 2026
2c0688b
chore(stdlib): Add `EmbeddedCurvePoint::new` (#12330)
aakoshh Apr 17, 2026
799f4a2
chore(ssa): Add last_stores aliases check test (#12339)
vezenovm Apr 17, 2026
2a4d12d
chore(deps): bump basic-ftp from 5.2.0 to 5.2.2 (#12342)
dependabot[bot] Apr 17, 2026
9017ddc
chore(deps): bump rustls-webpki from 0.103.10 to 0.103.12 (#12341)
dependabot[bot] Apr 17, 2026
8aadb9c
chore(deps): bump axios from 1.13.6 to 1.15.0 in /docs (#12326)
dependabot[bot] Apr 17, 2026
7dc6947
chore(deps): bump follow-redirects from 1.15.3 to 1.15.11 (#12288)
dependabot[bot] Apr 17, 2026
b990a19
chore(deps-dev): bump @types/node from 22.19.15 to 22.19.17 (#12287)
dependabot[bot] Apr 17, 2026
299ee7a
chore(deps-dev): bump ts-loader from 9.5.4 to 9.5.7 (#12286)
dependabot[bot] Apr 17, 2026
b88f759
chore(deps): bump the hardhat group with 8 updates (#12285)
dependabot[bot] Apr 17, 2026
76e8866
chore(deps): bump googleapis/release-please-action from 4.4.0 to 4.4.…
dependabot[bot] Apr 17, 2026
0c3ecf9
chore(deps): bump eslint from 10.1.0 to 10.2.0 in the linter group (#…
dependabot[bot] Apr 17, 2026
b9ab704
chore(deps): bump sha2 from 0.11.0-rc.5 to 0.11.0 (#12280)
dependabot[bot] Apr 17, 2026
170ee6b
chore(deps): bump rand from 0.10.0 to 0.10.1 (#12277)
dependabot[bot] Apr 17, 2026
5c1a8fd
fix: Replace equality with try_unify (#12272)
jfecher Apr 17, 2026
73dad8e
fix(licm): Check lower bound when simplifying checked arithmetic to u…
vezenovm Apr 17, 2026
138145f
chore(deps): bump EmbarkStudios/cargo-deny-action from 2.0.15 to 2.0.…
dependabot[bot] Apr 17, 2026
bd1ecb5
chore(ssa): LSF cleanups (#12345)
vezenovm Apr 17, 2026
9e6729d
chore: Turn `CallStack` into a newtype (#12307)
aakoshh Apr 17, 2026
a109338
chore(docs): Specify the exceptions when numbers default to `u32` ins…
Savio-Sou Apr 17, 2026
3b2c4fc
feat(ssa): Only load/store the extracted tuple field for mutable vari…
vezenovm Apr 17, 2026
7b55686
chore: enhance memory access safety with bounds checking on memory le…
guipublic Apr 17, 2026
fc5781b
chore(ssa): Refactor missing Brillig constraints check (#12026)
aakoshh Apr 20, 2026
bf0bc7f
chore: add regression test for inserting into an empty vector (#12354)
asterite Apr 20, 2026
a3d58f2
chore: add LSF regression test (#12355)
asterite Apr 20, 2026
2286601
chore(github): Simplify section headings and tweak experimental featu…
Savio-Sou Apr 20, 2026
fa0d3d4
fix: fmtstr with functions in globals didn't compile (#12356)
asterite Apr 20, 2026
de3688f
chore(frontend): unify trait super-bounds with where clause (#12359)
jfecher Apr 20, 2026
4efcb84
chore(deps-dev): bump globals from 17.4.0 to 17.5.0 (#12367)
dependabot[bot] Apr 21, 2026
9553222
chore(deps-dev): bump the testing group with 2 updates (#12364)
dependabot[bot] Apr 21, 2026
96dc646
chore(deps): bump tokio from 1.50.0 to 1.52.1 (#12363)
dependabot[bot] Apr 21, 2026
f7d46d5
chore(deps-dev): bump adm-zip from 0.5.16 to 0.5.17 (#12366)
dependabot[bot] Apr 21, 2026
e66f4ce
chore(deps): bump toml from 3.0.0 to 4.1.1 (#12365)
dependabot[bot] Apr 21, 2026
5c15349
chore(deps): bump actions/setup-node from 6.3.0 to 6.4.0 in the core-…
dependabot[bot] Apr 21, 2026
b16c3ce
chore: add a regression test for #10117 (#12360)
asterite Apr 21, 2026
d29dab3
chore: add a regression test for #9386 (#12361)
asterite Apr 21, 2026
abc3c76
fix: Fix `Type::instantiate_with_bindings_and_turbofish` generic orde…
jfecher Apr 21, 2026
e143140
chore(deps): bump redis from 0.26.1 to 1.2.0 (#12279)
dependabot[bot] Apr 21, 2026
2b42c27
chore: bump external pinned commits (#12351)
noirwhal Apr 21, 2026
eadb743
fix(ssa): Preserve arguments when simplify_cfg folds jmpif-same-targe…
TomAFrench Apr 21, 2026
318db5c
chore(deps): bump codespan-lsp from 0.11.1 to 0.13.1 (#12283)
dependabot[bot] Apr 21, 2026
ef1dbd3
chore(deps): bump serde-generate from 0.25.1 to 0.33.0 (#12362)
dependabot[bot] Apr 21, 2026
20632e9
chore(deps): bump rustc-hash from 2.1.1 to 2.1.2 (#12373)
dependabot[bot] Apr 21, 2026
d629b9d
chore(deps): bump similar from 2.7.0 to 3.0.0 (#12372)
dependabot[bot] Apr 21, 2026
15eb59c
chore(deps): bump sha1 from 0.10.6 to 0.11.0 (#12281)
dependabot[bot] Apr 21, 2026
818c866
chore(deps-dev): bump cspell from 9.7.0 to 10.0.0 (#12374)
dependabot[bot] Apr 21, 2026
22e003d
chore(deps-dev): bump unzipit from 2.0.0 to 2.0.1 (#12375)
dependabot[bot] Apr 21, 2026
50b6772
chore(deps): bump rexpect from 0.6.4 to 0.7.0 (#12371)
dependabot[bot] Apr 21, 2026
0cd4232
fix: reject unhandled unit return type oracle calls (#12368)
TomAFrench Apr 21, 2026
8942931
chore(deps): bump const_format from 0.2.35 to 0.2.36 (#12370)
dependabot[bot] Apr 21, 2026
db03340
chore: handle out-of-bounds access for unconstrained functions in ACV…
guipublic Apr 21, 2026
0c71571
fix(ssa): Wire both edges of jmpif-same-target in mem2reg (#12239)
TomAFrench Apr 21, 2026
e0ff804
chore: error when duplicate memory block initialisation (#12103)
guipublic Apr 21, 2026
60a3391
chore(brillig): clean up small audit findings in variable_liveness (#…
jfecher Apr 21, 2026
ae3be2d
chore(ssa): clean up small audit findings in mem2reg (#12378)
jfecher Apr 21, 2026
3ec3d37
chore(ssa): clean up small audit findings in flatten_cfg (#12380)
jfecher Apr 21, 2026
74490ac
chore: error on missing memory block (#12102)
guipublic Apr 21, 2026
9090dc1
chore: small clippy fixes (#12383)
TomAFrench Apr 21, 2026
cc57592
fix: Fix more small refactorings (#12385)
jfecher Apr 21, 2026
9619f96
fix: lookup method on struct with turbofish separately (#12381)
asterite Apr 21, 2026
709b64e
chore: address docs accuracy findings (#12384)
TomAFrench Apr 21, 2026
9f0f288
chore(ssa,brillig): three more small audit cleanups (#12258, #12293, …
jfecher Apr 22, 2026
56e3300
chore(brillig): add tests for variable_liveness::max_live_count (#122…
jfecher Apr 22, 2026
8a55e94
chore: Update `noir_stdlib` version to match that of `nargo` (#12377)
aakoshh Apr 22, 2026
808b87a
chore: audit cleanups across mem2reg, variable_liveness, spill_manage…
jfecher Apr 22, 2026
176b353
chore: Add CLI options for the limits in Brillig constraints check (#…
aakoshh Apr 22, 2026
4b1f515
fix: support turbofish on `<Ty as Trait>::method::<T>()` paths (#12396)
AztecBot Apr 22, 2026
242d6e6
chore(ssa): Re-run constant folding if simplified instruction is in c…
aakoshh Apr 22, 2026
84f5b0b
chore: update rustls-webpki (#12401)
TomAFrench Apr 22, 2026
1bfea97
chore(ssa): test the three untested try_collapse_merge returns (#1226…
jfecher Apr 22, 2026
d83325d
chore(acir): change MemOp fields to use MemOpKind enum and Witness ty…
asterite Apr 22, 2026
442adeb
fix: don't resolve to trait method if a direct method exists (#12394)
asterite Apr 22, 2026
f39ac4f
chore: remove Circuit::current_witness_index in a backwards-compatibl…
asterite Apr 22, 2026
a67e20e
chore(deps): bump googleapis/release-please-action from 4.4.1 to 5.0.…
dependabot[bot] Apr 23, 2026
41c9bbe
fix(brillig): fix register spill bug and refactor SpillRecord state i…
asterite Apr 23, 2026
c0b95af
chore: a brillig function taking an array and having an array_set is …
asterite Apr 23, 2026
c716c36
feat: alias analysis pass (#12382)
guipublic Apr 24, 2026
00113f0
fix: incorrect type_def_generics implemented return type (#12415)
asterite Apr 24, 2026
5640fde
chore: remove some Value methods (#12416)
asterite Apr 24, 2026
01fdf8d
fix(opt): Collect all nested arrays beforehand (#12418)
jfecher Apr 24, 2026
d9d607e
chore!: remove UnresolvedType methods (#12425)
asterite Apr 27, 2026
23478b1
fix: allow lvalue assignment to mutate mutable reference behind immut…
asterite Apr 27, 2026
5f68596
fix: don't drop inline trait constraints when generated via metaprogr…
asterite Apr 27, 2026
32a8e29
chore(deps): bump the linter group with 2 updates (#12442)
dependabot[bot] Apr 28, 2026
908aea2
chore(github): Deprecate Dev Rel auto-tags on documentation PRs (#12428)
Savio-Sou Apr 28, 2026
6aef4ae
chore(deps-dev): bump the webpack group with 2 updates (#12445)
dependabot[bot] Apr 28, 2026
0c2be47
chore(deps): bump tracing-appender from 0.2.4 to 0.2.5 (#12441)
dependabot[bot] Apr 28, 2026
1140733
chore(deps): bump @nomicfoundation/hardhat-toolbox-mocha-ethers from …
dependabot[bot] Apr 28, 2026
6a4e1c1
chore(deps): bump foundry-rs/foundry-toolchain from 1.7.0 to 1.8.0 (#…
dependabot[bot] Apr 28, 2026
00bd066
chore(docs): Remove stale experimental warnings (#12427)
Savio-Sou Apr 28, 2026
b84b3c2
chore: Use the new alias analysis for load_store_forwarding (#12398)
guipublic Apr 28, 2026
8a70e86
feat: warn on unused impl functions (#12419)
asterite Apr 28, 2026
3354f9a
chore(deps): bump postcss from 8.5.8 to 8.5.10 (#12450)
dependabot[bot] Apr 28, 2026
42f5172
chore(deps-dev): bump memfs from 4.57.1 to 4.57.2 (#12449)
dependabot[bot] Apr 28, 2026
cbc09e7
chore(deps): bump clap_complete from 4.6.0 to 4.6.3 (#12446)
dependabot[bot] Apr 28, 2026
682ef2a
chore(deps): bump slackapi/slack-github-action from 3.0.1 to 3.0.2 (#…
dependabot[bot] Apr 28, 2026
b4e84ba
chore(deps-dev): bump @playwright/test from 1.55.0 to 1.58.2 (#11797)
dependabot[bot] Apr 28, 2026
051e71e
chore(deps): bump k256 and p256 from 0.14.0-rc.8 to 0.14.0-rc.9 (#12443)
dependabot[bot] Apr 28, 2026
e30538f
chore(deps): bump semver from 1.0.27 to 1.0.28 (#12447)
dependabot[bot] Apr 28, 2026
780128f
fix: check struct visibility after macro call expansion (#12424)
asterite Apr 28, 2026
41be7c1
chore: bump external pinned commits (#12421)
noirwhal Apr 28, 2026
e8c53e7
chore(ssa): reorder mem2reg::add_terminator_arguments loops (#12192) …
jfecher Apr 28, 2026
ca7b6f2
fix: predicate the user-supplied index inside get_flattened_index (#1…
AztecBot Apr 28, 2026
84ea5fc
feat(fuzz): generate non-ABI functions returning `Unit` in the AST fu…
AztecBot Apr 28, 2026
5b84279
fix(docs): use canonical paths in llms.txt links (#12455)
critesjosh Apr 28, 2026
e9bdcd7
chore: add `try_unroll_loops_with_order` helper (#12459)
TomAFrench Apr 28, 2026
222daf9
feat: default to `InsideOut` loop unrolling in ACIR (#12460)
TomAFrench Apr 28, 2026
5610ecb
fix(lsp): don't fail on out-of-bounds position (#12462)
asterite Apr 28, 2026
5e48b65
fix: don't compute similarly named types in LSP single-file mode (#12…
asterite Apr 28, 2026
a77d070
fix: use `changed |= ...` in compute_dominator_tree (#12476)
asterite Apr 29, 2026
2f6bbf1
fix: follow bindings when working with comptime types (#12466)
asterite Apr 29, 2026
d2c1ebd
fix: don't crash on duplicate trait impl (#12477)
asterite Apr 29, 2026
5f15451
fix: handle zero-sized arrays in ACIR (#12481)
asterite Apr 29, 2026
bcc99c3
fix: incorrect length in as_vector intrinsic in nargo interpret (#12480)
asterite Apr 29, 2026
bda0d7a
fix(ssa interpreter): Clarify overflow error (#12483)
jfecher Apr 29, 2026
5aed8fe
fix(acir): allow removing from zero-sized vectors (#12485)
asterite Apr 29, 2026
dd2b758
fix: inconsistent Brillig failure message on modulo overflow (#12482)
asterite Apr 29, 2026
db33f78
chore: swap `Type::Array` argument order to `Array(E, N)` (#12489)
AztecBot Apr 30, 2026
b55937b
chore: regression test for issue #5626 (global type annotation flows …
AztecBot Apr 30, 2026
5f267c3
feat(cli): `nargo test --force-comptime` (#12474)
aakoshh Apr 30, 2026
6f8db13
fix(ssa): avoid overflow incrementing u128::MAX (#12500)
asterite Apr 30, 2026
92610d8
fix(licm): don't simplify `lt` when loop bounds are descending (#12496)
asterite Apr 30, 2026
727e2a0
chore: precompute signature-based analysis (#12492)
guipublic Apr 30, 2026
20391fd
fix(constant_folding): don't deduplicate calls that return arrays tha…
asterite Apr 30, 2026
45cdb9a
feat: strip down stdlib implementation of poseidon2 (#12402)
TomAFrench May 1, 2026
214dcce
fix: allow sorting empty arrays in constrained code (#12509)
AztecBot May 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
1 change: 0 additions & 1 deletion .aztec-sync-commit

This file was deleted.

30 changes: 30 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"hooks": {
"PreToolUse": [
{
"matcher": "mcp__claudebox__create_pr|mcp__claudebox__update_pr",
"hooks": [
{
"type": "command",
"command": "bash -c 'cd $(git rev-parse --show-toplevel) && ./.githooks/pre-commit'"
},
{
"type": "command",
"command": "bash -c 'cd $(git rev-parse --show-toplevel) && echo \"refs/heads/hook $(git rev-parse HEAD) refs/heads/hook 0000000000000000000000000000000000000000\" | ./.githooks/pre-push'"
}
]
}
],
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "bash -c 'FILE=$(jq -r \".tool_input.file_path\"); if [[ \"$FILE\" == *.rs ]]; then cargo fmt -- \"$FILE\" 2>/dev/null; fi'"
}
]
}
]
}
}
191 changes: 191 additions & 0 deletions .claude/skills/bisect-ssa-pass/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
---
name: bisect-ssa-pass
description: Workflow for debugging SSA pass semantic preservation using the noir-ssa CLI. Use when a program's behavior changes incorrectly during the SSA pipeline - bisects passes to identify which one breaks semantics. The `pass_vs_prev` fuzzer finds such issues automatically.
allowed-tools: Bash, Read, Grep, Glob, Write
---

# Noir SSA Bisection Debugging

Use this skill when debugging SSA optimization bugs - situations where an SSA pass fails to preserve program semantics. This workflow bisects SSA passes to identify which one introduces the behavioral change.

Common scenarios:
- **Fuzzer failures**: The `pass_vs_prev` fuzzer found a program that produces different results after some SSA pass
- **Test failures**: An existing test started failing after changes to an SSA pass
- **Manual discovery**: A program produces incorrect results and you suspect an optimization bug

Helper scripts are in the `scripts/` directory of this skill.

## Prerequisites

You need a Noir project with a `Prover.toml` containing inputs that trigger the suspected issue. The program should produce incorrect results or exhibit unexpected behavior when executed.

## 1. Compiling and Splitting SSA Passes

Compile with `--show-ssa` to output SSA after each optimization pass:

```bash
# Basic compilation (add -Zenums if using match expressions)
nargo compile --show-ssa 2>&1 | tee ssa_output.txt
```

**Important**: Do not pipe the output through `head` or other truncating commands (e.g., `| tee ssa_output.txt | head -50`). This truncates the file before all passes are written. Inspect the file separately after compilation completes.

Verify the output captured all passes (~49 expected):
```bash
grep -E "^After " ssa_output.txt
```

### Split into separate files

Use the provided script to split the output into one file per pass:

```bash
./scripts/split-ssa-passes.sh ssa_output.txt ssa_passes
```

Then clean up headers and diagnostics:

```bash
./scripts/clean-ssa-files.sh ssa_passes
```

This creates files like:
```
ssa_passes/01_Initial_SSA.ssa
ssa_passes/02_black_box_bypass_(1)_(step_1).ssa
ssa_passes/03_expand_signed_checks_(1)_(step_2).ssa
...
```

## 2. Using noir-ssa CLI to Bisect Failures

Build the SSA CLI tool (if not already built):
```bash
cargo build --release -p noir_ssa_cli
```

The binary is at `target/release/noir-ssa`.

### Bisecting to Find the Failing Pass

Use the bisect script to run interpretation on each pass:

```bash
./scripts/bisect-ssa.sh 'v0 = "-92"' ssa_passes /path/to/noir-ssa
```

**Input format**: SSA parameters are named `v0`, `v1`, etc. based on their order. Convert your Prover.toml inputs accordingly (e.g., `a = "-92"` becomes `v0 = "-92"`). Use `;` to separate multiple inputs.

Example output:
```
01_Initial_SSA.ssa: Ok(i8 1)
...
06_Inlining_simple_functions_(1)_(step_5).ssa: Ok(i8 1)
07_Mem2Reg_(1)_(step_6).ssa: Err(Reference value `*v8 = None` loaded before it was first stored to)
...

First failure: 07_Mem2Reg_(1)_(step_6).ssa
```

This identifies **Mem2Reg (step 6)** as the pass that introduced the bug.

### Manual Interpretation

You can also run interpretation manually on individual files:

```bash
noir-ssa interpret --source-path ssa_passes/06_Inlining_simple_functions_*.ssa --input-toml 'v0 = "-92"'
noir-ssa interpret --source-path ssa_passes/07_Mem2Reg_*.ssa --input-toml 'v0 = "-92"'
```

Additional options:
- `--trace`: Enable execution tracing
- `--input-path`: Read inputs from a TOML file instead of inline

### Comparing SSA Before/After

Once you identify the failing pass, compare the SSA files:
```bash
diff ssa_passes/06_*.ssa ssa_passes/07_*.ssa
```

Or read both files and look for the specific difference that causes the failure.

## 3. Creating Regression Tests

Once you've identified the failing pass, create a unit test to prevent regression. **Use the actual SSA from the `ssa_passes/` directory** rather than trying to manually simplify or recreate the pattern.

### Why use the SSA files directly?

- The SSA in `ssa_passes/` is the exact input that triggers the bug
- Manually simplifying can accidentally remove the triggering pattern
- Complex inputs (like arrays of references) are difficult to construct programmatically
- The SSA parser accepts the exact format already present in the files

### Creating the test

1. Read the SSA file from the pass **before** the failure (the last working pass):
```bash
cat ssa_passes/06_Inlining_simple_functions_*.ssa
```

2. Extract the relevant function(s) that exhibit the bug

3. Add a test to the appropriate pass's test module (e.g., `compiler/noirc_evaluator/src/ssa/opt/mem2reg.rs`):

```rust
#[test]
fn regression_test_name() {
let src = r#"
// Paste the SSA function(s) from the ssa_passes file here
brillig(inline) fn func_1 f0 {
b0(v2: [&mut u1; 3]):
// ... exact SSA from the file
return v19
}
"#;

// Choose the appropriate assertion based on the bug:
let ssa = Ssa::from_str(src).unwrap();
let result = ssa.mem2reg();
// Then verify the result maintains correctness
}
```

### Test approaches

- **Interpret before and after**: Run the SSA interpreter on the SSA before and after the pass with the same inputs, and verify both produce the same result. This is a good general approach since optimization passes should preserve semantics.
- `assert_normalized_ssa_equals(src, expected)` — Verifies exact SSA output after transformation
- `assert_ssa_does_not_change(src, pass_fn)` — Verifies the pass doesn't modify the SSA (useful when a pass incorrectly removes instructions it shouldn't)

### Using `#[should_panic]` for known bugs

If documenting a bug that hasn't been fixed yet, use `#[should_panic(expected = "...")]` with a specific expected string from the assertion. This:
- Documents the bug exists
- Causes the test to fail (alerting you) once the bug is fixed
- Reminds you to convert it to a proper passing test

## Common Failure Patterns

- **"Reference value loaded before it was first stored to"**: An optimization pass incorrectly removed a `store` instruction, leaving a reference uninitialized
- **Different return values**: An optimization changed program semantics
- **Panic/crash**: Invalid SSA was generated

## Common Pitfalls

- **Do not pipe `tee` through `head`**: Running `| tee file.txt | head -50` truncates the file. Always let `tee` complete, then inspect the file separately.
- **Noir package names must use underscores**: Use `nargo new my_package`, not `my-package`.
- **SSA parameters are positional**: The first parameter becomes `v0`, second `v1`, etc. Map your `Prover.toml` inputs accordingly.

## Other noir-ssa Commands

```bash
# List available SSA passes
noir-ssa list

# Parse and validate SSA (prints normalized form)
noir-ssa check --source-path file.ssa

# Transform SSA by applying passes
noir-ssa transform --source-path file.ssa --passes "Mem2Reg,Simplifying"
```
65 changes: 65 additions & 0 deletions .claude/skills/bisect-ssa-pass/scripts/bisect-ssa.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#!/usr/bin/env bash
# Bisect SSA passes to find where a failure is introduced.
# Usage: bisect-ssa.sh <input_toml> [ssa_dir] [noir_ssa_binary]
#
# Example: bisect-ssa.sh 'v0 = "-92"'
# bisect-ssa.sh 'v0 = "42"; v1 = "100"' ssa_passes /path/to/noir-ssa

set -euo pipefail

if [[ $# -lt 1 ]]; then
echo "Usage: $0 <input_toml> [ssa_dir] [noir_ssa_binary]" >&2
echo "" >&2
echo "Arguments:" >&2
echo " input_toml Input values in TOML format (use ; for multiple lines)" >&2
echo " ssa_dir Directory containing .ssa files (default: ssa_passes)" >&2
echo " noir_ssa_binary Path to noir-ssa binary (default: noir-ssa in PATH)" >&2
exit 1
fi

input_toml="$1"
ssa_dir="${2:-ssa_passes}"
noir_ssa="${3:-noir-ssa}"

if [[ ! -d "$ssa_dir" ]]; then
echo "Error: Directory '$ssa_dir' not found" >&2
exit 1
fi

if ! command -v "$noir_ssa" &>/dev/null; then
echo "Error: noir-ssa binary not found at '$noir_ssa'" >&2
echo "Build it with: cargo build --release -p noir_ssa_cli" >&2
exit 1
fi

last_result=""
first_failure=""

for f in "$ssa_dir"/*.ssa; do
[[ -f "$f" ]] || continue

filename=$(basename "$f")

if result=$("$noir_ssa" interpret --source-path "$f" --input-toml "$input_toml" 2>&1); then
is_error=false
else
is_error=true
fi

output=$(echo "$result" | grep -E "^(Ok|Err)" | head -1)
echo "$filename: $output"

# Track first failure based on output starting with "Err"
if [[ "$output" == Err* && -z "$first_failure" ]]; then
first_failure="$filename"
fi

last_result="$output"
done

echo ""
if [[ -n "$first_failure" ]]; then
echo "First failure: $first_failure"
else
echo "All passes succeeded"
fi
30 changes: 30 additions & 0 deletions .claude/skills/bisect-ssa-pass/scripts/clean-ssa-files.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/usr/bin/env bash
# Clean SSA files by removing headers and diagnostics.
# Usage: clean-ssa-files.sh [ssa_dir]
#
# Removes:
# - "After ..." header lines from all files
# - Compiler diagnostics (warnings/errors) from the final file

set -euo pipefail

ssa_dir="${1:-ssa_passes}"

if [[ ! -d "$ssa_dir" ]]; then
echo "Error: Directory '$ssa_dir' not found" >&2
exit 1
fi

# Strip header lines from all files
for f in "$ssa_dir"/*.ssa; do
[[ -f "$f" ]] || continue
tail -n +2 "$f" | sed '/^$/N;/^\n$/d' > "$f.tmp" && mv "$f.tmp" "$f"
done
echo "Stripped headers from all .ssa files"

# Strip diagnostics from the final file
last_file=$(ls "$ssa_dir"/*.ssa 2>/dev/null | tail -1)
if [[ -n "$last_file" && -f "$last_file" ]]; then
awk '/^warning:|^error:/ {exit} {print}' "$last_file" > "$last_file.tmp" && mv "$last_file.tmp" "$last_file"
echo "Stripped diagnostics from $(basename "$last_file")"
fi
36 changes: 36 additions & 0 deletions .claude/skills/bisect-ssa-pass/scripts/split-ssa-passes.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/usr/bin/env bash
# Split SSA output into separate files, one per pass.
# Usage: split-ssa-passes.sh <ssa_output_file> [output_dir]
#
# The output directory defaults to "ssa_passes".
# Files are named with numeric prefixes to preserve pass order.

set -euo pipefail

if [[ $# -lt 1 ]]; then
echo "Usage: $0 <ssa_output_file> [output_dir]" >&2
exit 1
fi

input_file="$1"
output_dir="${2:-ssa_passes}"

mkdir -p "$output_dir"

awk -v outdir="$output_dir" '
BEGIN { file_num = 0; current_file = "" }
/^After / {
if (current_file != "") close(current_file)
file_num++
pass_name = $0
gsub(/^After /, "", pass_name)
gsub(/:$/, "", pass_name)
gsub(/[^a-zA-Z0-9_() -]/, "", pass_name)
gsub(/ +/, "_", pass_name)
current_file = sprintf("%s/%02d_%s.ssa", outdir, file_num, pass_name)
print "Created: " current_file > "/dev/stderr"
}
{ if (current_file != "") print > current_file }
' "$input_file"

echo "Split into $output_dir/"
Loading
Loading