🍊😺 obot
Launched
Commit8d9ba9b

changelog v4.8.1 is current with this build

What changed · full log

← All goals

Objective: Static parity — a static twin for every interactive chart, driven by the same settings

Goal issue #328 · slug parity

0/2 member issues closed

Other open members 2

no readiness label yet.

Direction

Intent

@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).

Definition of done

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.

Requirements

In session order:

  1. One settings contract per chart: a JSON schema shared by the safety.viz module and its gsm.safety function (#331).
  2. A static twin for every interactive chart: the twins beyond objective 1's engines, and a 13 of 13 gallery (#332).

Boundaries


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.