✓
Passing This code compiles and runs correctly.
Code
// PINS: a standing rule whose body is ONLY a tor call — `bump(n: e.x)` —
// reaches a store write through the callee's subflow, and that write LANDS.
// The rule site's own text names no store and no written column: its visible
// footprint is the argument read `e.x`. The write to `b` lives in the callee.
// This is the shape where a PER-SITE syntactic read/write-set derivation
// stops: the site's sets require chasing the call graph (subflows are in the
// AST and chaseable; a `|zig` proc body is opaque and is not). Sibling of
// 690_202, which names the unchecked reorder license this footprint feeds.
import std/io
import std/store
std/store:new(a, capacity: 4) { x: i64 }
std/store:new(b, capacity: 8) { y: i64 }
pub tor bump { n: i64 }
bump = std/store:insert(b) { y: n * 2 }
| row _ |> std/io:print.ln("callee wrote b")
| full |> _
std/store:rule(a)
! row e |> bump(n: e.x)
std/store:insert(a) { x: 5 }
| row _ |> _
| full |> _
std/store:query(b)
! query r |> std/io:print.ln("b has {{ r.y:d }}")
Actual
callee wrote b
b has 10
Expected output
callee wrote b
b has 10
Flows
flow ~new click a branch to expand · @labels scroll to their anchor
new (expr: a, capacity: 4, source: x: i64)
flow ~new click a branch to expand · @labels scroll to their anchor
new (expr: b, capacity: 8, source: y: i64)
subflow ~bump click a branch to expand · @labels scroll to their anchor
insert (expr: b, source: y: n * 2)
flow ~rule click a branch to expand · @labels scroll to their anchor
rule (expr: a)
flow ~insert click a branch to expand · @labels scroll to their anchor
insert (expr: a, source: x: 5)
flow ~query click a branch to expand · @labels scroll to their anchor
query (expr: b)
Test Configuration
MUST_RUN