Skip to content

session: the snapshot's regions follow the scenario, every readout - #740

Merged
A13xB0 merged 1 commit into
mainfrom
regions-stay-in-the-snapshot
Sep 9, 2026
Merged

A13xB0 merged 1 commit into
mainfrom
regions-stay-in-the-snapshot

Conversation

@A13xB0

@A13xB0 A13xB0 commented Sep 9, 2026

Copy link
Copy Markdown
Collaborator

Regions applied to a running mesh reached the scenario and the firmware - the mesh relayed scoped traffic normally, infer.apply answered applied: 45 - but nodes.list read 0 of 60 within a tick, permanently (#737). Since v0.0.11's docs correctly point the reader at nodes.list as the only place regions can be read, this reads as the apply step having failed on a mesh where it worked.

infer.apply and nodes.regions write both the scenario node and the published snapshot row. On a warmed, playing mesh the row was rebuilt without the regions. I could not isolate which rebuild does it - nor could the reporter, who ruled out firmware.set, console.type, nodes.select, sim.pause/sim.play, timers and fresh sockets, and saw a plain nodes.regions + tick model repro survive (I reproduced that too: it passes).

So rather than chase a transition that hides, this makes the fix at the read side's source of truth: the readout re-projects the scenario's Regions and DefaultScope onto the snapshot rows every readout, exactly as it already re-projects scores, trails and stats from the engine. The scenario is authoritative - it is what the verbs write and what the firmware is provisioned from - so a row cannot drift from it for longer than one readout (100 ms), whatever rebuilt it. nodes.list and the Nodes table's region column now both follow the scenario.

Unit-tested directly (a drifted row is pulled back to the scenario; a row with no scenario node is left alone; a region-less node stays region-less).

Closes #737

🤖 Generated with Claude Code

https://claude.ai/code/session_01Q9HbD44EKWWTRYgxbFGxf6

Regions applied to a running mesh reached the scenario - the firmware was
provisioned from them and relayed scoped traffic normally - but vanished from
nodes.list within a tick, so the one place the manual says regions can be read
answered 'no regions' on a mesh where every node held one. infer.apply and
nodes.regions write both the scenario and the published row, and something on
a warmed, playing mesh rebuilt the rows without the regions; I could not
isolate which rebuild, and neither could the reporter.

Rather than chase a transition that hides, the readout now re-projects the
scenario's regions and default scope onto the rows every readout, the way it
already re-projects the scores, trails and stats from the engine. The scenario
is authoritative - it is what the verbs write and what the firmware runs on -
so the row cannot drift from it for longer than a readout, whatever rebuilt it.

Closes #737

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q9HbD44EKWWTRYgxbFGxf6
@A13xB0 A13xB0 added the fable approved Reviewed by Fable and found sound label Sep 9, 2026
@A13xB0
A13xB0 merged commit 1bb5146 into main Sep 9, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fable approved Reviewed by Fable and found sound

Projects

None yet

2 participants