Repository navigation
Description
Problem
After #111, Bastion on athena main with the committed docs/scenario-examples/valid/bastion.json ends not_modeled at tick 0:
{ "status": "not_modeled", "construct": "value iconString", "tick": 0,
"location": { "rule": 280, "name": "Initialize CN title effects", "action": 0 } }Bastion uses display-only value producers 128 times: Icon String, Hero Icon String, Ability Icon String, Input Binding String, and Custom Color. They feed Custom String (474 uses), HUD text, icons and effects, i.e. actions that athena already runs as no-ops (#103) or models as entities. The value they produce is a client rendering token. No rule branches on its content in a way that matters to the model, but the model cannot know the token text.
Design (follow the invariant: never guess a value)
Introduce an opaque display value for these producers, not an invented string or color:
- Each producer returns an opaque display value that records its producer and evaluated arguments (for example
iconString(Icon(Warning))) and carries no text or color content. - It may flow through variables, arrays,
Custom Stringarguments, and the display actions that are already no-ops or entity creators, and it appears inchanges/ the trace in a readable form (the producer and arguments), so a variable that holds one still shows in the viewer. - Any operation that needs its content stops
not_modeled, naming the operation: comparison (==/!=/Compareagainst anything but the same opaque value by structure),String Length-style reads,Custom Stringoutput being compared or used as an array index, sorting, arithmetic. Equality of two opaque values with identical producer and arguments may answer true; anything else isnot_modeled. - A
Custom Stringthat contains an opaque argument is itself a display string: define how it stays printable in the trace (the format with the opaque argument shown as its producer) without claiming it is the client's text. - Record in
docs/findings.mdas modeled, not measured: the client's token text is unmeasured, nothing reads it, so the model carries structure only.
Check how Custom String and the HUD no-op actions treat string arguments today (including the destroyed or created text entities in #103/#105) and extend them consistently; do not duplicate string logic.
Scope
- Value producers:
Icon String,Hero Icon String,Ability Icon String,Input Binding String,Custom Color. Auditbastion.owfor any other display-only producer with the same shape (colors, strings) and cover it, or list it. - Docs:
docs/simulator-interface.md,docs/findings.md, and the trace/changes format doc if the new value shows up there; schema if a value type enum lists value kinds.
Acceptance
- Tests: each producer evaluates; flows through
Set Global Variable,Custom String, and a no-op HUD action; shows readable inchanges; a comparison against a literal string stopsnot_modeled; identical opaque values compare equal. - Bastion rerun with the committed
bastion.jsonunchanged except what this PR adds: report the new first stop, or completion. Parent: Run Bastion to completion on athena-sim #45.
Activity