obot roadmap · requirement #28 · 2026-07-12

gsm.safety v1.0.0 RC1 — qualification evidence

The release candidate on release/v1.0.0 adopts safety.viz v1.2.0 in full: one htmlwidget binding per shipped renderer (all seven, including the v1.2.0 eDISH hepatic safety explorer), a report workflow and runnable example for each, canonical pharmaverseadam demo data shared byte-identical with the JS demos, and a qcthat qualification matrix linking every test to its GitHub issue. Everything below renders from that branch, unmerged, parked at the review gate.

7 / 7
widgets render, verified end-to-end
52
issue-linked tests, all passing
0 · 0 · 0
errors / warnings / notes — devtools::check()
7
report workflows run via gsm.core::RunWorkflow()

Working examples

Each page is the standalone HTML the widget's inst/examples/ runner writes — the real interactive charts on the full demo extracts (controls, filters, and linked listings live).

Histogram
Widget_Histogram() · gsm.safety#30 · adbds
Result distributions with normal-range overlays, binning controls, grouped small multiples, and a linked participant listing.
Open the rendered widget →
Shift Plot
Widget_ShiftPlot() · gsm.safety#32 · adbds
Baseline-versus-comparison shift view pairing each participant across visits, with visit and stat controls.
Open the rendered widget →
Delta-Delta
Widget_DeltaDelta() · gsm.safety#33 · adbds
Per-participant change on two measures at once — ALT vs AST by default — with an optional regression line.
Open the rendered widget →
Results Over Time
Widget_ResultsOverTime() · gsm.safety#34 · adbds
Longitudinal view of results by visit with grouping and normal-range context.
Open the rendered widget →
Outlier Explorer
Widget_OutlierExplorer() · gsm.safety#35 · adbds
Participant-level line traces over time for spotting outlying trajectories per measure.
Open the rendered widget →
AE Timelines
Widget_AeTimelines() · gsm.safety#36 · adae
Per-participant adverse-event timelines colored by severity, with seriousness and body-system filters.
Open the rendered widget →
Hepatic Safety Explorer
Widget_HepExplorer() · gsm.safety#40 · adbds
eDISH scatter of peak liver measures with Hy's Law quadrants and participant drill-down to standardized values by study day.
Open the rendered widget →

Qualification matrix (qcthat, milestone v1.0.0)

qcthat::QCMilestones("v1.0.0") — 1 milestone, 11 issues, 47 tests, all passing. Raw artifacts: text · JSON.

5 tests gsm.safety#30 — Add Widget_Histogram htmlwidget consuming the safety.viz bundle
5 tests gsm.safety#32 — Add Widget_ShiftPlot htmlwidget consuming the safety.viz bundle
5 tests gsm.safety#33 — Add Widget_DeltaDelta htmlwidget consuming the safety.viz bundle
5 tests gsm.safety#34 — Add Widget_ResultsOverTime htmlwidget consuming the safety.viz bundle
5 tests gsm.safety#35 — Add Widget_OutlierExplorer htmlwidget consuming the safety.viz bundle
5 tests gsm.safety#36 — Add Widget_AeTimelines htmlwidget consuming the safety.viz bundle
5 tests gsm.safety#40 — Sync to safety.viz v1.2.0 and add Widget_HepExplorer (eDISH)
12 tests gsm.safety#31 — Vendor the safety.viz v1.1.0 bundle and shared htmlwidget infrastructure
4 tests gsm.safety#37 — Ship canonical pharmaverseadam demo data (adbds/adae) for examples and QC
8 tests gsm.safety#38 — Modernize report workflows to the Widget_* renderers
1 test gsm.safety#27 — Add QCThat testing framework
no tests gsm.safety#28 — Add pkgdown widget thumbnail gallery

Provenance

Branchrelease/v1.0.0 at 00761ea (fourteen commits over main, one per issue lane)
Bundlesafety.viz-1.2.0/safety.viz.js vendored from the safety.viz v1.2.0 release; per-module JSON data contracts vendored alongside
Dataadbds.csv / adae.csv byte-identical to the safety.viz site demos (pharmaverseadam, hub #25); unchanged between v1.1.0 and v1.2.0
Checksdevtools::check() clean (0/0/0) on R 4.3.3, macOS; full suite 230 assertions, 0 failures
Verificationeach lane's example script and workflow re-run fresh by independent verifier agents; rendered HTML asserted to embed the SafetyViz bundle, the widget binding, and real data
ReproduceRscript inst/examples/<slug>.R <outdir> per renderer, or gsm.core::RunWorkflow() on inst/workflow/3_reports/<id>.yaml

Drafted by Claude Code (Fable 5) for review by @jwildfire · gsm.safety RC1 ultracode session, 2026-07-12