✗
Failing This test is currently failing.
Failed: backend-exec
Error Details
/opt/homebrew/Cellar/zig/0.15.2_1/lib/zig/std/Io/Writer.zig:1773:5: error: invalid format string 'd' for type '[4]i64'
Failure Output
🎯 Compiler coordination: Passes: 20 (flow-based: elaborate, analysis, emission)
Error: /opt/homebrew/Cellar/zig/0.15.2_1/lib/zig/std/Io/Writer.zig:1773:5: error: invalid format string 'd' for type '[4]i64'
@compileError("invalid format string '" ++ fmt ++ "' for type '" ++ @typeName(@TypeOf(value)) ++ "'");
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
referenced by:
printValue__anon_11443: /opt/homebrew/Cellar/zig/0.15.2_1/lib/zig/std/Io/Writer.zig:1051:40
print__anon_9739: /opt/homebrew/Cellar/zig/0.15.2_1/lib/zig/std/Io/Writer.zig:700:25
10 reference(s) hidden; use '-freference-trace=12' to see all references Code
// PINS: rule 4 of the ruleset 690_086 heads — "resolution order: bindings
// (innermost first) -> module-local stores -> `[global(name)]` stores." A row
// binding is an inner scope and must cover a store's name like any other.
//
// `items` is both the store being swept and the arm's row binding, so `items.v`
// inside the arm is THE ROW. Rule 5 says the same thing from the other side:
// "shadowing is allowed... a store is not a special case."
//
// MEASURED CAUSE (2026-07-28): the store wins, and it wins on PASS ORDER, not
// on a resolution rule. `new`'s create-time whole-program Walk rewrites
// `<store>.<field>` everywhere it appears before sweep's site transform runs,
// so `items.v` has already become the SoA cell by the time the arm's binding
// exists. The backend then reports `invalid format string 'd' for type
// '[4]i64'` — the whole column array, where the row's own `i64` belongs.
//
// This is the same shape as the `entity` defect the binding replaced: a textual
// rewrite with no scope, applied at a moment when the scope it needs is not
// built yet. Binding the row fixed the case where the rewrite matched a magic
// word; it does not by itself fix the case where the rewrite matches a store's
// real name. Membrane note: std/store SITES skip create's Walk for their own
// args (transforms own the rewriting) — but a `print.ln` in a sweep body is not
// a std/store site, so the Walk reaches it.
import std/io
import std/store
std/store:new(items, capacity: 4) { v: i64 }
std/store:insert(items) { v: 10 }
std/store:insert(items) { v: 20 }
std/store:sweep(items)
! sweep items |> std/io:print.ln("v {{ items.v:d }}")
Expected output
v 10
v 20
Flows
flow ~new click a branch to expand · @labels scroll to their anchor
new (expr: items, capacity: 4, source: v: i64)
flow ~insert click a branch to expand · @labels scroll to their anchor
insert (expr: items, source: v: 10)
flow ~insert click a branch to expand · @labels scroll to their anchor
insert (expr: items, source: v: 20)
flow ~sweep click a branch to expand · @labels scroll to their anchor
sweep (expr: items)
Test Configuration
MUST_RUN