Skip to content

Commit 0404c33

Browse files
Dmitrii Vasilevclaude
andcommitted
feat(igla): Wave Loop 486 — namespace-qualified host-only helper erasure, wildcard module array bindings, bench-local packed-vector array parameters, 0 UNSUPPORTED_ICARUS placeholders
- Host-only namespace calls (module::helper) are now erased from Verilog emission. - Module-scope wildcard 'let _ = ...' bindings emit anonymous ROMs/temporaries correctly. - Bench-local scalar arrays can be passed as packed-vector function parameters. - Icarus strictness fixes: packed-vector slicing for local array params, bench initial-block deduplication. - Resealed NMSE manifests for current compiler.rs hash. - W486 close-out report + W487 cooperation variants. Closes #1456 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 4b747e3 commit 0404c33

228 files changed

Lines changed: 1841 additions & 671 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/plans/wave-loop-486.md

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
# Wave Loop 486 Plan — Variant B (default)
2+
3+
**Date:** 2026-07-07
4+
**Anchor:** φ² + φ⁻² = 3 | TRINITY
5+
**Branch:** `wave-loop-486`
6+
**Issue:** #1456 (to be opened)
7+
8+
## Goal
9+
10+
After W485 closed the next soft-failure classes, W486 continues the Icarus/Verilog
11+
backend hardening on the remaining reachable gaps:
12+
13+
1. **Bench-local fixed-size arrays crossing function boundaries.**
14+
A bench declares `let data : [4]u32 = [...];` and calls `fn f(a: [4]u32)`.
15+
The array-parameter binding pass currently rejects this because bench-local
16+
arrays are neither module-level consts nor function-local arrays.
17+
2. **Imported namespace helper erasure.**
18+
Namespace-qualified helper functions (e.g., `module::helper`) used only in
19+
host-side contexts are currently emitted as sized-zero placeholders. Extend
20+
W485 host-only detection to skip them entirely when they are dead to
21+
synthesizable contexts.
22+
3. **Module-scope wildcard `_` bindings with array literal initializers.**
23+
Where the parser already accepts `let _ = [N]T{...};` at module scope, ensure
24+
the backend does not emit a named `_` identifier. Full struct-literal
25+
wildcard support is parser-blocked and remains for a future wave.
26+
27+
## Decomposition
28+
29+
### Subtask 1 — Bench-local arrays as array-parameter arguments
30+
31+
**Owner:** backend (`bootstrap/src/compiler.rs`)
32+
33+
1. Pre-collect bench-local array names per bench before the array-parameter
34+
binding pass.
35+
2. Change the call-site tuple from `(&Node, Option<&Node>)` to
36+
`(&Node, Option<&Node>, Option<String>)` where the third element is the
37+
containing bench name for top-level bench-block calls.
38+
3. In the signature builder, when a call is inside a bench block and an array
39+
argument identifier matches that bench's local array set, push `"__local__"`
40+
instead of the raw name.
41+
4. The existing local-packed array-parameter path will then:
42+
- clone the callee with a packed-vector input,
43+
- pack the hoisted bench-local registers at the call site, and
44+
- slice the packed vector inside the function body.
45+
5. Add witness spec `specs/scratch/w486_bench_array_param.t27`.
46+
47+
### Subtask 2 — Namespace-qualified helper erasure
48+
49+
**Owner:** backend (`bootstrap/src/compiler.rs`)
50+
51+
1. In the host-only pre-pass, also collect all imported namespace-qualified
52+
functions that are referenced in the current module and determine which are
53+
used only in non-Verilog contexts (invariants, host-only functions, or
54+
wildcard statements).
55+
2. Add a map `host_only_namespace_calls: HashSet<String>` of qualified names
56+
that should be skipped.
57+
3. In `gen_verilog_expr` `ExprCall`, treat qualified names in this set like
58+
unqualified host-only functions: statement-context comment no-op,
59+
expression-context sized-zero placeholder.
60+
4. Add a witness spec that imports a helper module and uses it only in an
61+
invariant or wildcard statement.
62+
63+
### Subtask 3 — Module-scope wildcard array literals
64+
65+
**Owner:** backend (`bootstrap/src/compiler.rs`)
66+
67+
1. In `gen_verilog_const`, when `node.name == "_"` and the initializer is an
68+
`ExprArrayLiteral` or `ExprIdentifier` referring to a module-level array,
69+
emit an anonymous packed temporary or memory (matching the function-scope
70+
wildcard logic) instead of discarding it with a comment.
71+
2. Keep the existing comment-only path for host-only/namespace calls.
72+
3. Add a regression witness if the parser accepts the construct; otherwise
73+
document the parser limitation in the close-out report.
74+
75+
### Subtask 4 — Global reseal and verification
76+
77+
1. Run `./scripts/tri test`.
78+
2. Reseal if needed.
79+
3. Run `cargo test -p t27c --bin t27c`.
80+
4. Confirm zero `UNSUPPORTED_ICARUS` placeholders remain.
81+
82+
## Acceptance criteria
83+
84+
- [ ] `specs/scratch/w486_bench_array_param.t27` parses, typechecks, generates
85+
Verilog, and passes yosys + Icarus smoke.
86+
- [ ] `./scripts/tri test` reports 661 / 661 non-smoke PASS, 141 / 141 yosys
87+
smoke PASS, 141 / 141 Icarus smoke PASS, 0 documented baseline failures.
88+
- [ ] 661 / 661 seal matches.
89+
- [ ] `cargo test -p t27c --bin t27c` 1525 / 0 / 2.
90+
- [ ] Zero `UNSUPPORTED_ICARUS` placeholders across all specs.
91+
92+
## Literature context
93+
94+
- **Cambridge VFE synthesizable Verilog subset (V0).** Direct binding of
95+
module-level memories to function parameters is synthesizable; the backend
96+
already does this for module const arrays. Bench-local arrays are hoisted to
97+
module scope, so the same binding mechanism applies once the pre-pass knows
98+
their names.
99+
- **FIRRTL/Chisel property types.** Namespace-qualified helpers are analogous to
100+
non-synthesizable property methods; erasing them before Verilog emission is
101+
consistent with treating strings and dynamic methods as host-only.
102+
103+
## References
104+
105+
- W485 close-out: `docs/reports/WAVE_LOOP_485_CLOSEOUT.md`
106+
- W486 cooperation variants: `docs/reports/FPGA_LOOP_COOPERATION_W486_2026-07-07.md`
107+
- Icarus Verilog quirks: https://steveicarus.github.io/iverilog/usage/icarus_verilog_quirks.html
108+
- Cambridge VFE V0 paper: https://www.cl.cam.ac.uk/~djg11/pubs/synthesizable_verilog_syntax_and_semantics.pdf
109+
- FIRRTL spec: https://github.com/chipsalliance/firrtl-spec/blob/main/spec.md
110+
111+
*φ² + φ⁻² = 3 | TRINITY*

.trinity/current-issue.md

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,40 @@
1-
# Wave Loop 486 — next-wave selection
1+
# Wave Loop 487 — next-wave selection
22

33
**Date:** 2026-07-07
44
**Anchor:** φ² + φ⁻² = 3 | TRINITY
55

6-
W485 hardened the Icarus/Verilog backend for the next soft-failure classes:
6+
W486 hardened the Icarus/Verilog backend for the next soft-failure classes:
77

8-
- Host-side recursive/proof-only helpers are now detected and skipped during
9-
Verilog generation.
10-
- Module-scope and function-scope wildcard `_` bindings no longer emit duplicate
11-
identifiers or sized-zero assignments.
12-
- A regression witness for bench-local array hoisting was added and passes both
13-
yosys and Icarus smoke.
8+
- Bench-local fixed-size arrays now cross function boundaries through a shared
9+
packed-vector `__local__` clone and correct element-width slicing inside the
10+
callee.
11+
- Imported namespace-qualified helpers used only in host-side contexts are erased
12+
cleanly instead of producing `UNSUPPORTED_ICARUS` placeholders.
13+
- Module-scope wildcard `_` bindings with array-literal initializers emit
14+
anonymous ROMs; struct-literal wildcards remain parser-blocked.
1415

15-
Verification at W485 close-out:
16+
Verification at W486 close-out:
1617

17-
- 661 / 661 non-smoke PASS.
18-
- 141 / 141 yosys smoke PASS, 0 failures.
19-
- 141 / 141 Icarus smoke PASS, 0 documented baseline failures.
20-
- 661 / 661 seal matches.
18+
- 667 / 667 non-smoke PASS.
19+
- 147 / 147 yosys smoke PASS, 0 failures.
20+
- 147 / 147 Icarus smoke PASS, 0 documented baseline failures.
21+
- 667 / 667 seal matches.
2122
- `cargo test -p t27c --bin t27c` 1525 / 0 / 2.
22-
- **Total `UNSUPPORTED_ICARUS` placeholders across all 661 specs: 0.**
23+
- **Total `UNSUPPORTED_ICARUS` placeholders across all 667 specs: 0.**
2324

2425
## Goal
2526

26-
Select and execute one of the W486 cooperation variants documented in
27-
`docs/reports/FPGA_LOOP_COOPERATION_W486_2026-07-07.md`.
27+
Select and execute one of the W487 cooperation variants documented in
28+
`docs/reports/FPGA_LOOP_COOPERATION_W487_2026-07-07.md`.
2829

2930
## Default direction
3031

3132
**Variant B (default):** continue hardening the Icarus/Verilog backend for the
32-
remaining soft-failure classes after W485:
33+
remaining lowering gaps after W486:
3334

34-
- bench-local fixed-size arrays crossing function boundaries,
35-
- module-scope wildcard `_` bindings with struct/array literal initializers,
36-
- imported namespace helper erasure.
35+
- module-scope wildcard struct-literal bindings (`let _ = Pt{...};`),
36+
- module-scope wildcard array aliases (`let _ = existing_array;`),
37+
- 2-D / struct bench-local arrays crossing function boundaries.
3738

3839
## Alternative directions
3940

@@ -44,12 +45,12 @@ remaining soft-failure classes after W485:
4445

4546
## Issue Gate
4647

47-
- Branch: `wave-loop-486` (to create from `wave-loop-485`).
48+
- Branch: `wave-loop-487` (to create from `wave-loop-486`).
4849
- Required: non-smoke tests green, yosys smoke acceptable, Icarus smoke
4950
acceptable (no new regressions outside baseline), seals green,
5051
`cargo test -p t27c --bin t27c` green.
5152

5253
## References
5354

54-
- W485 close-out: `docs/reports/WAVE_LOOP_485_CLOSEOUT.md`
55-
- W486 cooperation variants: `docs/reports/FPGA_LOOP_COOPERATION_W486_2026-07-07.md`
55+
- W486 close-out: `docs/reports/WAVE_LOOP_486_CLOSEOUT.md`
56+
- W487 cooperation variants: `docs/reports/FPGA_LOOP_COOPERATION_W487_2026-07-07.md`
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1891
1+
1894

.trinity/current_task/activity.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1968,3 +1968,11 @@
19681968
- **Commit:** docs(w485): mark acceptance criteria complete and update counts to 661/141
19691969
- **Files:** .claude/plans/wave-loop-485.md,.trinity/current_task/activity.md
19701970

1971+
## 2026-07-10T05:30:22Z — wave-loop-486
1972+
- **Commit:** docs(w485): mark acceptance criteria complete and update counts to 661/141
1973+
- **Files:** .claude/plans/wave-loop-486.md,.claude/worktrees/igla-w470,.claude/worktrees/igla-w470-auto,.claude/worktrees/igla-w470-fpga-200t,.trinity/current-issue.md,.trinity/current_task/.commit_count,.trinity/current_task/session_log.jsonl,.trinity/experience.md,.trinity/ring-486.md,.trinity/seals/api_tri_net_api.json,.trinity/seals/base_TernaryEncoding.json,.trinity/seals/base_TernaryMemory.json,.trinity/seals/base_ternary_add.json,.trinity/seals/base_tritype-base.json,.trinity/seals/base_tritype-ops.json,.trinity/seals/benchmarks_gf16_bfloat16_nmse.json,.trinity/seals/boards_ArtyA7_Integration.json,.trinity/seals/boards_BoardMinimalXC7A100T.json,.trinity/seals/boards_QMTech_A100T_Integration.json,.trinity/seals/bus_bus-pubsub.json
1974+
1975+
## 2026-07-10T05:30:29Z — wave-loop-486
1976+
- **Commit:** feat(igla): Wave Loop 486 — namespace-qualified host-only helper erasure, wildcard module array bindings, bench-local packed-vector array parameters, 0 UNSUPPORTED_ICARUS placeholders
1977+
- **Files:** .claude/worktrees/igla-w470,.claude/worktrees/igla-w470-auto,.claude/worktrees/igla-w470-fpga-200t
1978+

.trinity/current_task/session_log.jsonl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,3 +362,6 @@
362362
{"ts":"2026-07-10T03:21:47Z","branch":"wave-loop-484","msg":"feat(gen-verilog): Wave Loop 483 — imported struct-return call lowering, global reseal, W484 cooperation variants","files":".claude/plans/wave-loop-484.md,.trinity/current-issue.md,.trinity/current_task/.commit_count,.trinity/current_task/session_log.jsonl,.trinity/experience.md,.trinity/ring-484.md,.trinity/seals/account_Account.json,.trinity/seals/account_AccountAuth.json,.trinity/seals/account_AccountRepo.json,.trinity/seals/activation_Elu.json,.trinity/seals/activation_Gelu.json,.trinity/seals/activation_GeluApprox.json,.trinity/seals/activation_LeakyRelu.json,.trinity/seals/activation_Relu.json,.trinity/seals/activation_Sigmoid.json,.trinity/seals/activation_SiluSwish.json,.trinity/seals/activation_SiluSwishVbt.json,.trinity/seals/activation_Softmax.json,.trinity/seals/activation_Tanh.json,.trinity/seals/agent_AutonomousUniverse.json","notebook":"b83263109fb055dc"}
363363
{"ts":"2026-07-10T03:21:58Z","branch":"wave-loop-484","msg":"feat(gen-verilog): Wave Loop 484 — dynamic `.len()` / `.contains()` on strings and fixed-size arrays, zero UNSUPPORTED_ICARUS placeholders across all 658 specs, 658/658 non-smoke PASS + 138/138 yosys smoke PASS + 138/138 Icarus smoke PASS + cargo test 1525/0/2","files":".trinity/current_task/.commit_count,.trinity/current_task/session_log.jsonl","notebook":"b83263109fb055dc"}
364364
{"ts":"2026-07-10T04:36:15Z","branch":"wave-loop-485","msg":"chore(trinity): record W484 session log and commit count","files":".claude/plans/wave-loop-485.md,.trinity/current-issue.md,.trinity/current_task/.commit_count,.trinity/current_task/session_log.jsonl,.trinity/experience.md,.trinity/ring-485.md,.trinity/seals/account_Account.json,.trinity/seals/account_AccountAuth.json,.trinity/seals/account_AccountRepo.json,.trinity/seals/activation_Elu.json,.trinity/seals/activation_Gelu.json,.trinity/seals/activation_GeluApprox.json,.trinity/seals/activation_LeakyRelu.json,.trinity/seals/activation_Relu.json,.trinity/seals/activation_Sigmoid.json,.trinity/seals/activation_SiluSwish.json,.trinity/seals/activation_SiluSwishVbt.json,.trinity/seals/activation_Softmax.json,.trinity/seals/activation_Tanh.json,.trinity/seals/agent_AutonomousUniverse.json","notebook":"b83263109fb055dc"}
365+
{"ts":"2026-07-10T04:36:46Z","branch":"wave-loop-485","msg":"feat(gen-verilog): Wave Loop 485 — host-side recursive helper shadowing, wildcard '_' bindings, bench-local array hoisting witness, 661/661 non-smoke PASS + 141/141 yosys smoke PASS + 141/141 Icarus smoke PASS + cargo test 1525/0/2","files":".trinity/current_task/.commit_count,.trinity/current_task/session_log.jsonl","notebook":"b83263109fb055dc"}
366+
{"ts":"2026-07-10T04:37:16Z","branch":"wave-loop-485","msg":"chore(trinity): record W485 session log and commit count","files":".claude/plans/wave-loop-485.md","notebook":"b83263109fb055dc"}
367+
{"ts":"2026-07-10T04:37:20Z","branch":"wave-loop-485","msg":"docs(w485): mark acceptance criteria complete and update counts to 661/141","files":".claude/plans/wave-loop-485.md,.trinity/current_task/activity.md","notebook":"b83263109fb055dc"}

.trinity/experience.md

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,84 @@
1+
## 2026-07-07 — Wave Loop 486 (gen-verilog Icarus soft-failure hardening: bench-local arrays crossing function boundaries, namespace helper erasure, module-scope wildcard array literals)
2+
3+
### What worked
4+
- Carrying the containing bench name through the array-parameter binding pass
5+
lets bench-local arrays reuse the same `__local__` packed-vector clone that
6+
function-local arrays already used.
7+
- Splitting `emitted_bench_names` into separate counter and initial-block sets
8+
fixed a long-standing bug where every bench `initial` block was skipped.
9+
- Scalar packed-vector array parameters must be sliced by element width inside
10+
the callee; treating the packed input as an unpacked memory selects single
11+
bits and corrupts arithmetic.
12+
- Namespace-qualified calls are cleanly erased when they are dead to
13+
synthesizable contexts; scanning const/var declarations as synthesizable
14+
contexts avoids misclassifying values used in module-level initializers.
15+
- Module-scope wildcard array literals can be emitted as anonymous ROMs by
16+
reconstructing the array type from the literal and re-entering the normal
17+
const-array emission path with an anonymous name.
18+
19+
### What changed behavior
20+
- `bootstrap/src/compiler.rs`
21+
- Bench-local array name pre-collection and bench-name tuple in the
22+
array-parameter binding pass.
23+
- Scalar packed-vector packing in `gen_verilog_pack_array_of_struct_expr`.
24+
- Packed-vector element-width slicing for scalar array parameters in
25+
`gen_verilog_expr` `ExprIndex`.
26+
- `current_local_packed_array_params` per-function state.
27+
- `host_only_namespace_calls` set, `compute_host_only_namespace_calls`, and
28+
`collect_qualified_calls_skipping_wildcards`.
29+
- Module-scope wildcard array-literal anonymous ROM emission in
30+
`gen_verilog_const`.
31+
- New witness specs:
32+
- `specs/scratch/w486_bench_array_param.t27`
33+
- `specs/scratch/w486_helper_module.t27`
34+
- `specs/scratch/w486_namespace_helper_erasure.t27`
35+
- `specs/scratch/w486_wildcard_module_array.t27`
36+
- `specs/scratch/w486_wildcard_module_array_copy.t27`
37+
- `specs/scratch/w486_wildcard_module_literal.t27`
38+
- Global reseal of `.trinity/seals/*.json` because generated Verilog changed for
39+
specs with namespace calls, wildcard arrays, and bench-local array parameters.
40+
- Added `docs/reports/WAVE_LOOP_486_CLOSEOUT.md` and
41+
`docs/reports/FPGA_LOOP_COOPERATION_W487_2026-07-07.md`.
42+
- Updated `.trinity/current-issue.md`, `.trinity/ring-486.md`,
43+
`.trinity/experience.md`, and memory.
44+
45+
### Verification
46+
- `cargo build --release`: PASS.
47+
- `cargo test -p t27c --bin t27c`: 1525 passed; 0 failed; 2 ignored.
48+
- `./scripts/tri test`: ALL TESTS PASSED
49+
- 667/667 non-smoke PASS.
50+
- 147/147 yosys smoke PASS.
51+
- 147/147 Icarus smoke PASS, 0 documented baseline failures.
52+
- 667/667 seal matches.
53+
- 0 fixed-point divergences.
54+
- FPGA board-less smoke gate: OK.
55+
- FPGA standalone lake-package build: OK.
56+
- FPGA smoke gate replay: OK.
57+
- **Total `UNSUPPORTED_ICARUS` placeholders across all 667 specs: 0.**
58+
59+
### Patterns to reuse
60+
- When extending local-array lowering to a new scope (bench-local), carry the
61+
scope name through the pre-pass so the existing packed-vector machinery can
62+
be reused.
63+
- Packed-vector array parameters need explicit element-width slicing in the
64+
callee; do not rely on Verilog indexing semantics for packed vectors.
65+
- Qualified calls that are dead to synthesis should be classified and skipped
66+
using the same statement/expression placeholder logic as unqualified
67+
host-only functions.
68+
- Wildcard bindings should never produce a named `_` reg; anonymous ROMs or
69+
comment no-ops are safe.
70+
71+
### Anti-patterns to avoid
72+
- Do not forget that module-level const/var declarations are synthesizable
73+
contexts for namespace-call classification, unlike invariants and host-only
74+
functions.
75+
- Do not reuse the same `HashSet` across two different emission loops with
76+
different semantics.
77+
- Do not reseal only the failing specs after a global gen change; reseal
78+
everything and rerun the full suite.
79+
80+
---
81+
182
## 2026-07-07 — Wave Loop 485 (gen-verilog Icarus soft-failure hardening: host-side helper shadowing, wildcard `_` bindings, bench-local array hoisting witness)
283

384
### What worked

.trinity/ring-486.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Wave Loop 486 — Ring State
2+
3+
**Date:** 2026-07-07
4+
**Anchor:** φ² + φ⁻² = 3 | TRINITY
5+
**Branch:** `wave-loop-486`
6+
**Issue:** #1456
7+
**Variant:** B (default)
8+
9+
## Outcome
10+
11+
W486 closed the next soft-failure classes after W485 eliminated all
12+
`UNSUPPORTED_ICARUS` placeholders:
13+
14+
- Bench-local fixed-size arrays now cross function boundaries by resolving to a
15+
shared `__local__` packed-vector clone and slicing the packed input by element
16+
width inside the callee.
17+
- Imported namespace-qualified helpers used only in host-side contexts are erased
18+
cleanly (statement-context comment, expression-context sized-zero placeholder)
19+
instead of producing `UNSUPPORTED_ICARUS` placeholders.
20+
- Module-scope wildcard `_` bindings with array-literal initializers emit
21+
anonymous ROMs; struct-literal wildcards remain parser-blocked for a future
22+
wave.
23+
24+
## Verification snapshot
25+
26+
- 667 / 667 non-smoke PASS.
27+
- 147 / 147 yosys smoke PASS, 0 failures.
28+
- 147 / 147 Icarus smoke PASS, 0 documented baseline failures.
29+
- 667 / 667 seal matches.
30+
- `cargo test -p t27c --bin t27c`: 1525 / 0 / 2.
31+
- Total `UNSUPPORTED_ICARUS` placeholders across all specs: 0.
32+
33+
## Key files changed
34+
35+
- `bootstrap/src/compiler.rs`
36+
- bench-local array name pre-collection and `__local__` signature binding
37+
- packed-vector scalar-array packing at call sites
38+
- packed-vector element-width slicing for scalar array parameters
39+
- bench initial-block emission bug fix (split counter/bench emitted sets)
40+
- `host_only_namespace_calls` set and
41+
`compute_host_only_namespace_calls`
42+
- `collect_qualified_calls_skipping_wildcards`
43+
- module-scope wildcard array-literal anonymous ROM emission
44+
- `specs/scratch/w486_bench_array_param.t27`
45+
- `specs/scratch/w486_helper_module.t27`
46+
- `specs/scratch/w486_namespace_helper_erasure.t27`
47+
- `specs/scratch/w486_wildcard_module_array.t27`
48+
- `specs/scratch/w486_wildcard_module_array_copy.t27`
49+
- `specs/scratch/w486_wildcard_module_literal.t27`
50+
- `.trinity/seals/*.json` (global reseal)
51+
- `docs/reports/WAVE_LOOP_486_CLOSEOUT.md`
52+
- `docs/reports/FPGA_LOOP_COOPERATION_W487_2026-07-07.md`
53+
- `docs/NOW.md`
54+
55+
## Next ring
56+
57+
- Branch to create: `wave-loop-487`
58+
- See `docs/reports/FPGA_LOOP_COOPERATION_W487_2026-07-07.md` for variants.

0 commit comments

Comments
 (0)