✓
Passing This code compiles and runs correctly.
Code
// ASPIRATION — TODO idea pin (designed rejection). T2 + queue (d): the
// interceptor cascade graph is comptime-visible; a cross-store cycle
// (alpha's contract writes beta, beta's writes alpha) is rejected at
// compile time WITH THE CYCLE NAMED — never an infinite cascade at
// runtime. Field-level graph; @converges carve-out for clamp shapes is
// the open (d) detail.
~import std/io
~import std/store
~std/store:new(alpha) { x: 0[i64] }
! updated { old, new } |> std/store:stored { beta.y: new }
~std/store:new(beta) { y: 0[i64] }
! updated { old, new } |> std/store:stored { alpha.x: new }
~std/store:stored { alpha.x: 1 }
Backend must reject with:
CONTAINS cycle
CONTAINS alpha
CONTAINS betaFlows
flow ~new click a branch to expand · @labels scroll to their anchor
new (expr: alpha, source: x: 0[i64])
flow ~new click a branch to expand · @labels scroll to their anchor
new (expr: beta, source: y: 0[i64])
flow ~stored click a branch to expand · @labels scroll to their anchor
stored (source: alpha.x: 1)
Test Configuration
Expected Error:
store cascade cycle: alpha.x -> beta.y -> alpha.x — interceptor contracts must be acyclic; a convergent self-write needs @converges