Goal issue #328 · slug parity
0/2 member issues closed
no readiness label yet.
@jwildfire, 2026-09-10: parity means a static twin for every interactive chart, and no code export from the app. Every interactive safety.viz chart gets a static twin in gsm.safety driven by the same derived data and the same settings names, so a chart configured interactively renders identically as a static figure with no translation step (plan, 2026-09-10, objective 2, lane B).
End state: every one of the 13 interactive safety.viz charts has a static twin in gsm.safety; each chart's settings are one JSON schema used by the JavaScript module and accepted by the matching R function under the same names; settings exported from the interactive demo drive the static function without translation, and the two renderings agree on the numbers plotted.
Proof: a round-trip test per chart in gsm.safety passes under devtools::test(filter = "twin"), each taking the settings JSON exported from the safety.viz demo, rendering the static figure and asserting the plotted values against the interactive module's derived data; the gsm.safety static gallery lists 13 of 13 twins with the settings schema linked from each; the releases that carry them are tagged and every requirement below is closed with its proof comment.
Ships in: gsm.safety v2.0.0 and safety.viz v2.0.0 (proposed), milestone 2026-10-talk.
In session order:
This issue was drafted by Claude Code using Fable 5.1 from the plan of 2026-09-10, on @jwildfire's in-session approval to file it; the body is his to edit and the tree is signed off only by his comment here.
Members are generated from the objective issue's sub-issue links at build time; priority is the selecting session's judgment, not list order (#53 v2). The --auto policy binding — active/paused, grant profile, repo-level backlog feeds — lives in obot.agent/goals/registry.json. Readiness labels: auto = ready for autonomous implementation, draft = needs @jwildfire steering.