v1.0.0
gsm.safety 1.0.0
First stable release: gsm.safety is now the R home of the safety.viz interactive chart library, mirroring the gsm.kri / gsm.viz architecture.
New features
- Nine interactive safety widgets built on the vendored safety.viz 1.4.0 bundle — a binding for every renderer the bundle exports:
Widget_Histogram(),Widget_ShiftPlot(),Widget_DeltaDelta(),Widget_ResultsOverTime(),Widget_OutlierExplorer(),Widget_AeTimelines(),Widget_AeExplorer(),Widget_HepExplorer()(eDISH), andWidget_QtExplorer()(QT/QTc, safety.viz QT Explorer Phase 1). - Every widget validates its inputs against the module's vendored JSON data contract (
inst/schema/), so bad column mappings fail fast in R instead of silently in the browser. ExampleData()ships pharmaverseadam-derived demo datasets —adbds(long-format labs and vitals),adae(adverse events, carrying placeholder rows for AE-free participants so prevalence denominators cover the whole safety population), andadeg(ECG: QTcF, QTcB, and Heart Rate) — identical to the safety.viz site demos.SaveWidgetReport()writes any widget as a self-contained standalone HTML report.- Report workflows under
inst/workflow/3_reports/render each widget end-to-end viagsm.core::RunWorkflow(), with matching runner scripts ininst/examples/.
Documentation
- A thumbnail gallery on the package home page links every widget to its live example page.
- Each example page shows the full report workflow that renders its chart — read from the installed package, so the listing is always the shipped YAML — collapsed by default.
- The example pages carry site chrome: a header band linking back to the package home, the reference index, and the safety.viz chart library, plus navigation across all nine examples generated from the pages themselves.
Quality
- Full qcthat-style qualification: every test is traceable to its GitHub issue, covering widget contracts, input validation, standalone rendering, and workflow execution.
Breaking changes
- The experimental safetyCharts bridge is retired:
RenderSafetyChartsWidget(),MakeExampleData(), and the safetyCharts-era report scaffolds are removed, along with the safetyCharts and Tendril dependencies. Theae_explorerandhep_explorerreport workflows return, rebuilt on theWidget_*pattern;paneled_outlier_explorerhas no safety.viz module and is gone for good.
{qcthat} Reports
Milestone
⚠️ A qcthat issue test matrix with 1 milestone, 15 issues, and 82 tests
└─█─Milestone: v1.0.0 (15 issues, 82 tests)
├─☑️─Issue 43: Give the example pages site chrome and show the full workflow inline
│ ├─✅─the example manifest is built from sibling front matter (#43)
│ ├─✅─example page navigation is a closed ring (#43)
│ ├─✅─the chip strip links every example and marks the current page (#43)
│ ├─✅─the workflow disclosure embeds the shipped YAML verbatim and collapsed (#43)
│ ├─✅─every example page shows the workflow that renders its own widget (#43)
│ ├─✅─every example page is wired to the shared chrome (#43)
│ ├─✅─every exported widget has an example page (#43)
│ ├─✅─the shared chrome navigates back to the rest of the site (#43)
│ └─✅─the provenance line reports the vendored safety.viz bundle (#43)
├─☑️─Issue 33: Add Widget_DeltaDelta htmlwidget consuming the safety.viz bundle
│ ├─✅─Widget_DeltaDelta returns an htmlwidget carrying the delta-delta payload (#33)
│ ├─✅─Widget_DeltaDelta passes width, height, and elementId through (#33)
│ ├─✅─Widget_DeltaDelta rejects invalid inputs via the delta-delta contract (#33)
│ ├─✅─Widget_DeltaDelta renders standalone HTML with the SafetyViz bundle and data (#33)
│ └─⚠️─safety_delta_delta workflow renders an HTML report from ExampleData (#33, #38)
├─☑️─Issue 32: Add Widget_ShiftPlot htmlwidget consuming the safety.viz bundle
│ ├─✅─Widget_ShiftPlot returns an htmlwidget carrying the shift-plot payload (#32)
│ ├─✅─Widget_ShiftPlot passes width, height, and elementId through (#32)
│ ├─✅─Widget_ShiftPlot rejects invalid inputs via the shift-plot contract (#32)
│ ├─✅─Widget_ShiftPlot renders standalone HTML with the SafetyViz bundle and data (#32)
│ └─⚠️─safety_shift_plot workflow renders an HTML report from ExampleData (#32, #38)
├─☑️─Issue 31: Vendor the safety.viz v1.1.0 bundle and shared htmlwidget infrastructure
│ ├─✅─package metadata is available (#31)
│ ├─✅─gsm.safety exports the nine safety.viz widgets plus data and report helpers (#31, #41, #42)
│ ├─✅─every widget ships its htmlwidgets binding, dependency yaml, schema, and report workflow (#31, #38)
│ ├─✅─the legacy safetyCharts bridge is fully retired (#31, #41)
│ ├─✅─BuildWidgetPayload returns the htmlwidget x payload for valid input (#31)
│ ├─✅─BuildWidgetPayload serializes empty settings as a JSON object (#31)
│ ├─✅─BuildWidgetPayload errors when a schema-default column is missing (#31)
│ ├─✅─BuildWidgetPayload errors when a settings override names a missing column (#31)
│ ├─✅─BuildWidgetPayload checks nested object settings like ae-timelines color (#31)
│ ├─✅─BuildWidgetPayload validates its inputs (#31)
│ ├─✅─SaveWidgetReport writes a self-contained HTML report and returns its path (#31)
│ └─✅─SaveWidgetReport keeps an existing .html extension and validates inputs (#31)
├─☑️─Issue 30: Add Widget_Histogram htmlwidget consuming the safety.viz bundle
│ ├─✅─Widget_Histogram returns an htmlwidget carrying the histogram payload (#30)
│ ├─✅─Widget_Histogram passes width, height, and elementId through (#30)
│ ├─✅─Widget_Histogram rejects invalid inputs via the histogram contract (#30)
│ ├─✅─Widget_Histogram renders standalone HTML with the SafetyViz bundle and data (#30)
│ └─⚠️─safety_histogram workflow renders an HTML report from ExampleData (#30, #38)
├─☑️─Issue 28: Add pkgdown widget thumbnail gallery
│ ├─✅─every exported widget has a gallery thumbnail (#28)
│ ├─✅─the gallery covers exactly the exported Widget_* functions (#28)
│ ├─✅─the README gallery links every widget to its example page (#28)
│ ├─✅─every gallery thumbnail is referenced by the README (#28)
│ └─✅─the README documents how to refresh the thumbnails (#28)
├─☑️─Issue 27: Add QCThat testing framework
│ └─✅─every test in the package carries a qcthat issue reference (#27)
├─☑️─Issue 42: Add Widget_QtExplorer htmlwidget consuming the safety.viz bundle
│ ├─✅─gsm.safety exports the nine safety.viz widgets plus data and report helpers (#31, #41, #42)
│ ├─✅─every renderer exported by the vendored safety.viz bundle has a widget binding (#41, #42)
│ ├─✅─Widget_QtExplorer returns an htmlwidget carrying the qt-explorer payload (#42)
│ ├─✅─Widget_QtExplorer initializes on the default ADEG columns with no settings (#42)
│ ├─✅─Widget_QtExplorer passes width, height, and elementId through (#42)
│ ├─✅─Widget_QtExplorer rejects invalid inputs via the qt-explorer contract (#42)
│ ├─✅─ExampleData('adeg') supplies the ECG measures qt-explorer expects (#42)
│ ├─✅─ExampleData('adeg') QTc values are physiologically plausible (#42)
│ ├─✅─Widget_QtExplorer renders standalone HTML with the SafetyViz bundle and data (#42)
│ └─⚠️─qt_explorer workflow renders an HTML report from ExampleData (#42, #38)
├─☑️─Issue 41: Add Widget_AeExplorer htmlwidget consuming the safety.viz bundle
│ ├─✅─Widget_AeExplorer returns an htmlwidget carrying the ae-explorer payload (#41)
│ ├─✅─Widget_AeExplorer initializes on the default ADAE columns with no settings (#41)
│ ├─✅─Widget_AeExplorer passes width, height, and elementId through (#41)
│ ├─✅─Widget_AeExplorer rejects invalid inputs via the ae-explorer contract (#41)
│ ├─✅─ExampleData('adae') carries placeholder rows for AE-free participants (#41)
│ ├─✅─Widget_AeExplorer renders standalone HTML with the SafetyViz bundle and data (#41)
│ ├─⚠️─ae_explorer workflow renders an HTML report from ExampleData (#41, #38)
│ ├─✅─gsm.safety exports the nine safety.viz widgets plus data and report helpers (#31, #41, #42)
│ ├─✅─every renderer exported by the vendored safety.viz bundle has a widget binding (#41, #42)
│ └─✅─the legacy safetyCharts bridge is fully retired (#31, #41)
├─☑️─Issue 40: Sync to safety.viz v1.2.0 and add Widget_HepExplorer (eDISH)
│ ├─✅─Widget_HepExplorer returns an htmlwidget carrying the hep-explorer payload (#40)
│ ├─✅─Widget_HepExplorer passes width, height, and elementId through (#40)
│ ├─✅─Widget_HepExplorer rejects invalid inputs via the hep-explorer contract (#40)
│ ├─✅─Widget_HepExplorer renders standalone HTML with the SafetyViz bundle and data (#40)
│ └─⚠️─hep_explorer workflow renders an HTML report from ExampleData (#40, #38)
├─☑️─Issue 38: Modernize report workflows to the Widget_* renderers
│ ├─⚠️─ae_explorer workflow renders an HTML report from ExampleData (#41, #38)
│ ├─⚠️─safety_delta_delta workflow renders an HTML report from ExampleData (#33, #38)
│ ├─⚠️─hep_explorer workflow renders an HTML report from ExampleData (#40, #38)
│ ├─⚠️─safety_outlier_explorer workflow renders an HTML report from ExampleData (#35, #38)
│ ├─✅─every widget ships its htmlwidgets binding, dependency yaml, schema, and report workflow (#31, #38)
│ ├─⚠️─qt_explorer workflow renders an HTML report from ExampleData (#42, #38)
│ ├─⚠️─safety_results_over_time workflow renders an HTML report from ExampleData (#34, #38)
│ ├─⚠️─safety_shift_plot workflow renders an HTML report from ExampleData (#32, #38)
│ ├─⚠️─ae_timelines workflow renders an HTML report from ExampleData (#36, #38)
│ └─⚠️─safety_histogram workflow renders an HTML report from ExampleData (#30, #38)
├─☑️─Issue 37: Ship canonical pharmaverseadam demo data (adbds/adae) for examples and QC
│ ├─✅─ExampleData reads the adbds example data with sensible types (#37)
│ ├─✅─ExampleData reads the adae example data with sensible types (#37)
│ ├─✅─ExampleData converts blank numeric fields to NA without warnings (#37)
│ └─✅─ExampleData defaults to adbds and rejects unknown datasets (#37)
├─☑️─Issue 36: Add Widget_AeTimelines htmlwidget consuming the safety.viz bundle
│ ├─✅─Widget_AeTimelines returns an htmlwidget carrying the ae-timelines payload (#36)
│ ├─✅─Widget_AeTimelines passes width, height, and elementId through (#36)
│ ├─✅─Widget_AeTimelines rejects invalid inputs via the ae-timelines contract (#36)
│ ├─✅─Widget_AeTimelines renders standalone HTML with the SafetyViz bundle and data (#36)
│ └─⚠️─ae_timelines workflow renders an HTML report from ExampleData (#36, #38)
├─☑️─Issue 35: Add Widget_OutlierExplorer htmlwidget consuming the safety.viz bundle
│ ├─✅─Widget_OutlierExplorer returns an htmlwidget carrying the outlier-explorer payload (#35)
│ ├─✅─Widget_OutlierExplorer passes width, height, and elementId through (#35)
│ ├─✅─Widget_OutlierExplorer rejects invalid inputs via the outlier-explorer contract (#35)
│ ├─✅─Widget_OutlierExplorer renders standalone HTML with the SafetyViz bundle and data (#35)
│ └─⚠️─safety_outlier_explorer workflow renders an HTML report from ExampleData (#35, #38)
└─☑️─Issue 34: Add Widget_ResultsOverTime htmlwidget consuming the safety.viz bundle
├─✅─Widget_ResultsOverTime returns an htmlwidget carrying the payload (#34)
├─✅─Widget_ResultsOverTime passes width, height, and elementId through (#34)
├─✅─Widget_ResultsOverTime rejects invalid inputs via the results-over-time contract (#34)
├─✅─Widget_ResultsOverTime renders standalone HTML with the SafetyViz bundle and data (#34)
└─⚠️─safety_results_over_time workflow renders an HTML report from ExampleData (#34, #38)
# Issue state: 📥 = open, ☑️ = closed (completed), ⛔ = closed (won't fix)
# Test disposition: ✅ = passed, ❌ = failed, 🚫 = skipped
🟢 All issues have at least one test
Completed Issues
⚠️ A qcthat issue test matrix with 1 milestone, 33 issues, and 82 tests
├─█─Milestone: v1.0.0 (15 issues, 82 tests)
│ ├─☑️─Issue 43: Give the example pages site chrome and show the full workflow inline
│ │ ├─✅─the example manifest is built from sibling front matter (#43)
│ │ ├─✅─example page navigation is a closed ring (#43)
│ │ ├─✅─the chip strip links every example and marks the current page (#43)
│ │ ├─✅─the workflow disclosure embeds the shipped YAML verbatim and collapsed (#43)
│ │ ├─✅─every example page shows the workflow that renders its own widget (#43)
│ │ ├─✅─every example page is wired to the shared chrome (#43)
│ │ ├─✅─every exported widget has an example page (#43)
│ │ ├─✅─the shared chrome navigates back to the rest of the site (#43)
│ │ └─✅─the provenance line reports the vendored safety.viz bundle (#43)
│ ├─☑️─Issue 33: Add Widget_DeltaDelta htmlwidget consuming the safety.viz bundle
│ │ ├─✅─Widget_DeltaDelta returns an htmlwidget carrying the delta-delta payload (#33)
│ │ ├─✅─Widget_DeltaDelta passes width, height, and elementId through (#33)
│ │ ├─✅─Widget_DeltaDelta rejects invalid inputs via the delta-delta contract (#33)
│ │ ├─✅─Widget_DeltaDelta renders standalone HTML with the SafetyViz bundle and data (#33)
│ │ └─⚠️─safety_delta_delta workflow renders an HTML report from ExampleData (#33, #38)
│ ├─☑️─Issue 32: Add Widget_ShiftPlot htmlwidget consuming the safety.viz bundle
│ │ ├─✅─Widget_ShiftPlot returns an htmlwidget carrying the shift-plot payload (#32)
│ │ ├─✅─Widget_ShiftPlot passes width, height, and elementId through (#32)
│ │ ├─✅─Widget_ShiftPlot rejects invalid inputs via the shift-plot contract (#32)
│ │ ├─✅─Widget_ShiftPlot renders standalone HTML with the SafetyViz bundle and data (#32)
│ │ └─⚠️─safety_shift_plot workflow renders an HTML report from ExampleData (#32, #38)
│ ├─☑️─Issue 31: Vendor the safety.viz v1.1.0 bundle and shared htmlwidget infrastructure
│ │ ├─✅─package metadata is available (#31)
│ │ ├─✅─gsm.safety exports the nine safety.viz widgets plus data and report helpers (#31, #41, #42)
│ │ ├─✅─every widget ships its htmlwidgets binding, dependency yaml, schema, and report workflow (#31, #38)
│ │ ├─✅─the legacy safetyCharts bridge is fully retired (#31, #41)
│ │ ├─✅─BuildWidgetPayload returns the htmlwidget x payload for valid input (#31)
│ │ ├─✅─BuildWidgetPayload serializes empty settings as a JSON object (#31)
│ │ ├─✅─BuildWidgetPayload errors when a schema-default column is missing (#31)
│ │ ├─✅─BuildWidgetPayload errors when a settings override names a missing column (#31)
│ │ ├─✅─BuildWidgetPayload checks nested object settings like ae-timelines color (#31)
│ │ ├─✅─BuildWidgetPayload validates its inputs (#31)
│ │ ├─✅─SaveWidgetReport writes a self-contained HTML report and returns its path (#31)
│ │ └─✅─SaveWidgetReport keeps an existing .html extension and validates inputs (#31)
│ ├─☑️─Issue 30: Add Widget_Histogram htmlwidget consuming the safety.viz bundle
│ │ ├─✅─Widget_Histogram returns an htmlwidget carrying the histogram payload (#30)
│ │ ├─✅─Widget_Histogram passes width, height, and elementId through (#30)
│ │ ├─✅─Widget_Histogram rejects invalid inputs via the histogram contract (#30)
│ │ ├─✅─Widget_Histogram renders standalone HTML with the SafetyViz bundle and data (#30)
│ │ └─⚠️─safety_histogram workflow renders an HTML report from ExampleData (#30, #38)
│ ├─☑️─Issue 28: Add pkgdown widget thumbnail gallery
│ │ ├─✅─every exported widget has a gallery thumbnail (#28)
│ │ ├─✅─the gallery covers exactly the exported Widget_* functions (#28)
│ │ ├─✅─the README gallery links every widget to its example page (#28)
│ │ ├─✅─every gallery thumbnail is referenced by the README (#28)
│ │ └─✅─the README documents how to refresh the thumbnails (#28)
│ ├─☑️─Issue 27: Add QCThat testing framework
│ │ └─✅─every test in the package carries a qcthat issue reference (#27)
│ ├─☑️─Issue 42: Add Widget_QtExplorer htmlwidget consuming the safety.viz bundle
│ │ ├─✅─gsm.safety exports the nine safety.viz widgets plus data and report helpers (#31, #41, #42)
│ │ ├─✅─every renderer exported by the vendored safety.viz bundle has a widget binding (#41, #42)
│ │ ├─✅─Widget_QtExplorer returns an htmlwidget carrying the qt-explorer payload (#42)
│ │ ├─✅─Widget_QtExplorer initializes on the default ADEG columns with no settings (#42)
│ │ ├─✅─Widget_QtExplorer passes width, height, and elementId through (#42)
│ │ ├─✅─Widget_QtExplorer rejects invalid inputs via the qt-explorer contract (#42)
│ │ ├─✅─ExampleData('adeg') supplies the ECG measures qt-explorer expects (#42)
│ │ ├─✅─ExampleData('adeg') QTc values are physiologically plausible (#42)
│ │ ├─✅─Widget_QtExplorer renders standalone HTML with the SafetyViz bundle and data (#42)
│ │ └─⚠️─qt_explorer workflow renders an HTML report from ExampleData (#42, #38)
│ ├─☑️─Issue 41: Add Widget_AeExplorer htmlwidget consuming the safety.viz bundle
│ │ ├─✅─Widget_AeExplorer returns an htmlwidget carrying the ae-explorer payload (#41)
│ │ ├─✅─Widget_AeExplorer initializes on the default ADAE columns with no settings (#41)
│ │ ├─✅─Widget_AeExplorer passes width, height, and elementId through (#41)
│ │ ├─✅─Widget_AeExplorer rejects invalid inputs via the ae-explorer contract (#41)
│ │ ├─✅─ExampleData('adae') carries placeholder rows for AE-free participants (#41)
│ │ ├─✅─Widget_AeExplorer renders standalone HTML with the SafetyViz bundle and data (#41)
│ │ ├─⚠️─ae_explorer workflow renders an HTML report from ExampleData (#41, #38)
│ │ ├─✅─gsm.safety exports the nine safety.viz widgets plus data and report helpers (#31, #41, #42)
│ │ ├─✅─every renderer exported by the vendored safety.viz bundle has a widget binding (#41, #42)
│ │ └─✅─the legacy safetyCharts bridge is fully retired (#31, #41)
│ ├─☑️─Issue 40: Sync to safety.viz v1.2.0 and add Widget_HepExplorer (eDISH)
│ │ ├─✅─Widget_HepExplorer returns an htmlwidget carrying the hep-explorer payload (#40)
│ │ ├─✅─Widget_HepExplorer passes width, height, and elementId through (#40)
│ │ ├─✅─Widget_HepExplorer rejects invalid inputs via the hep-explorer contract (#40)
│ │ ├─✅─Widget_HepExplorer renders standalone HTML with the SafetyViz bundle and data (#40)
│ │ └─⚠️─hep_explorer workflow renders an HTML report from ExampleData (#40, #38)
│ ├─☑️─Issue 38: Modernize report workflows to the Widget_* renderers
│ │ ├─⚠️─ae_explorer workflow renders an HTML report from ExampleData (#41, #38)
│ │ ├─⚠️─safety_delta_delta workflow renders an HTML report from ExampleData (#33, #38)
│ │ ├─⚠️─hep_explorer workflow renders an HTML report from ExampleData (#40, #38)
│ │ ├─⚠️─safety_outlier_explorer workflow renders an HTML report from ExampleData (#35, #38)
│ │ ├─✅─every widget ships its htmlwidgets binding, dependency yaml, schema, and report workflow (#31, #38)
│ │ ├─⚠️─qt_explorer workflow renders an HTML report from ExampleData (#42, #38)
│ │ ├─⚠️─safety_results_over_time workflow renders an HTML report from ExampleData (#34, #38)
│ │ ├─⚠️─safety_shift_plot workflow renders an HTML report from ExampleData (#32, #38)
│ │ ├─⚠️─ae_timelines workflow renders an HTML report from ExampleData (#36, #38)
│ │ └─⚠️─safety_histogram workflow renders an HTML report from ExampleData (#30, #38)
│ ├─☑️─Issue 37: Ship canonical pharmaverseadam demo data (adbds/adae) for examples and QC
│ │ ├─✅─ExampleData reads the adbds example data with sensible types (#37)
│ │ ├─✅─ExampleData reads the adae example data with sensible types (#37)
│ │ ├─✅─ExampleData converts blank numeric fields to NA without warnings (#37)
│ │ └─✅─ExampleData defaults to adbds and rejects unknown datasets (#37)
│ ├─☑️─Issue 36: Add Widget_AeTimelines htmlwidget consuming the safety.viz bundle
│ │ ├─✅─Widget_AeTimelines returns an htmlwidget carrying the ae-timelines payload (#36)
│ │ ├─✅─Widget_AeTimelines passes width, height, and elementId through (#36)
│ │ ├─✅─Widget_AeTimelines rejects invalid inputs via the ae-timelines contract (#36)
│ │ ├─✅─Widget_AeTimelines renders standalone HTML with the SafetyViz bundle and data (#36)
│ │ └─⚠️─ae_timelines workflow renders an HTML report from ExampleData (#36, #38)
│ ├─☑️─Issue 35: Add Widget_OutlierExplorer htmlwidget consuming the safety.viz bundle
│ │ ├─✅─Widget_OutlierExplorer returns an htmlwidget carrying the outlier-explorer payload (#35)
│ │ ├─✅─Widget_OutlierExplorer passes width, height, and elementId through (#35)
│ │ ├─✅─Widget_OutlierExplorer rejects invalid inputs via the outlier-explorer contract (#35)
│ │ ├─✅─Widget_OutlierExplorer renders standalone HTML with the SafetyViz bundle and data (#35)
│ │ └─⚠️─safety_outlier_explorer workflow renders an HTML report from ExampleData (#35, #38)
│ └─☑️─Issue 34: Add Widget_ResultsOverTime htmlwidget consuming the safety.viz bundle
│ ├─✅─Widget_ResultsOverTime returns an htmlwidget carrying the payload (#34)
│ ├─✅─Widget_ResultsOverTime passes width, height, and elementId through (#34)
│ ├─✅─Widget_ResultsOverTime rejects invalid inputs via the results-over-time contract (#34)
│ ├─✅─Widget_ResultsOverTime renders standalone HTML with the SafetyViz bundle and data (#34)
│ └─⚠️─safety_results_over_time workflow renders an HTML report from ExampleData (#34, #38)
└─█─Milestone: <none> (18 issues, 0 tests)
├─☑️─Issue 25: Add Safety Shift Plot report workflow
│ └─(no tests)
├─☑️─Issue 16: Replace AE Explorer example data helper with gsm.datasim
│ └─(no tests)
├─☑️─Issue 11: Add AE Explorer report/workflow YAML scaffold
│ └─(no tests)
├─☑️─Issue 10: Requirements: AE Explorer report
│ └─(no tests)
├─☑️─Issue 8: Add full GitHub Actions automation suite from gsm.utils
│ └─(no tests)
├─☑️─Issue 6: Create first questions/decisions log for Jeremy
│ └─(no tests)
├─☑️─Issue 5: Decide dependency strategy for safetyGraphics/safetyCharts assets
│ └─(no tests)
├─☑️─Issue 4: Prototype AE Explorer artifact from Mapped_SUBJ + Mapped_AE
│ └─(no tests)
├─☑️─Issue 2: Gap analysis: AE Explorer fields vs gsm.mapping
│ └─(no tests)
├─☑️─Issue 1: Scaffold minimal R package and development checks
│ └─(no tests)
├─☑️─Issue 24: Add Safety Results Over Time report workflow
│ └─(no tests)
├─☑️─Issue 23: Add Safety Outlier Explorer report workflow
│ └─(no tests)
├─☑️─Issue 22: Add Safety Histogram report workflow
│ └─(no tests)
├─☑️─Issue 21: Add Safety Delta Delta report workflow
│ └─(no tests)
├─☑️─Issue 20: Add Paneled Outlier Explorer report workflow
│ └─(no tests)
├─☑️─Issue 19: Nep Explorer support
│ └─(no tests)
├─☑️─Issue 18: Add Hep Explorer report workflow
│ └─(no tests)
└─☑️─Issue 17: Add AE Timelines report workflow
└─(no tests)
# Issue state: 📥 = open, ☑️ = closed (completed), ⛔ = closed (won't fix)
# Test disposition: ✅ = passed, ❌ = failed, 🚫 = skipped
⭕ 18 issues lack tests
This report was generated by this GitHub Actions job.
Reports generated: 2026-07-23 02:02:52 UTC
Session Info
─ Session info ───────────────────────────────────────────────────────────────setting value
version R version 4.6.1 (2026-06-24)
os Ubuntu 24.04.4 LTS
system x86_64, linux-gnu
ui X11
language (EN)
collate C.UTF-8
ctype C.UTF-8
tz UTC
date 2026-07-23
pandoc 3.8.3 @ /opt/hostedtoolcache/pandoc/3.8.3/x64/pandoc
quarto NA
─ Packages ───────────────────────────────────────────────────────────────────
package * version date (UTC) lib source
askpass 1.2.1 2024-10-04 [1] RSPM
astgrepr 0.1.1 2025-06-07 [1] RSPM
backports 1.5.1 2026-04-03 [1] RSPM
base * 4.6.1 2026-06-24 [3] local
base64enc 0.1-6 2026-02-02 [1] RSPM
blob 1.3.0 2026-01-14 [1] RSPM
boot 1.3-32 2025-08-29 [3] CRAN (R 4.6.1)
brio 1.1.5 2024-04-24 [1] RSPM
bslib 0.11.0 2026-05-16 [1] RSPM
cachem 1.1.0 2024-05-16 [1] RSPM
callr 3.8.0 2026-06-05 [1] RSPM
checkmate 2.3.4 2026-02-03 [1] RSPM
class 7.3-23 2025-01-01 [3] CRAN (R 4.6.1)
cli 3.6.6 2026-04-09 [1] RSPM
clipr 0.8.1 2026-05-25 [1] RSPM
cluster 2.1.8.2 2026-02-05 [3] CRAN (R 4.6.1)
codetools 0.2-20 2024-03-31 [3] CRAN (R 4.6.1)
compiler 4.6.1 2026-06-24 [3] local
covr 3.6.5 2025-11-09 [1] RSPM
crayon 1.5.3 2024-06-20 [1] RSPM
credentials 2.0.3 2025-09-12 [1] RSPM
curl 7.1.0 2026-04-22 [1] RSPM
datasets * 4.6.1 2026-06-24 [3] local
DBI 1.3.0 2026-02-25 [1] RSPM
dbplyr 2.6.0 2026-06-17 [1] RSPM
desc 1.4.3 2023-12-10 [1] RSPM
diffobj 0.3.8 2026-07-17 [1] RSPM
digest 0.6.39 2025-11-19 [1] RSPM
dplyr 1.2.1 2026-04-03 [1] RSPM
duckdb 1.5.4.3 2026-07-10 [1] RSPM
emoji 16.0.0 2024-10-28 [1] RSPM
evaluate 1.0.5 2025-08-27 [1] RSPM
fastmap 1.2.0 2024-05-15 [1] RSPM
fontawesome 0.5.3 2024-11-16 [1] RSPM
foreign 0.8-91 2026-01-29 [3] CRAN (R 4.6.1)
fs 2.1.0 2026-04-18 [1] RSPM
generics 0.1.4 2025-05-09 [1] RSPM
gert 2.3.1 2026-01-11 [1] RSPM
gh 1.6.1.9000 2026-07-23 [1] Github (r-lib/gh@31b775a)
git2r 0.36.2 2025-03-29 [1] RSPM
gitcreds 0.1.2 2022-09-08 [1] RSPM
glue 1.8.1 2026-04-17 [1] RSPM
graphics * 4.6.1 2026-06-24 [3] local
grDevices * 4.6.1 2026-06-24 [3] local
grid 4.6.1 2026-06-24 [3] local
gsm.core 1.3.0 2026-07-23 [1] Github (Gilead-Public/gsm.core@78dcee6)
gsm.safety 1.0.0 2026-07-23 [1] local
highr 0.12 2026-03-06 [1] RSPM
htmltools 0.5.9 2025-12-04 [1] RSPM
htmlwidgets 1.6.4 2023-12-06 [1] RSPM
httr 1.4.8 2026-02-13 [1] RSPM
httr2 1.3.0 2026-07-13 [1] RSPM
ini 0.3.1 2018-05-20 [1] RSPM
jquerylib 0.1.4 2021-04-26 [1] RSPM
jsonlite 2.0.0 2025-03-27 [1] RSPM
KernSmooth 2.23-26 2025-01-01 [3] CRAN (R 4.6.1)
knitr 1.51 2025-12-20 [1] RSPM
lattice 0.22-9 2026-02-09 [3] CRAN (R 4.6.1)
lifecycle 1.0.5 2026-01-08 [1] RSPM
log4r 0.4.4.9000 2026-07-23 [1] Github (r-lib/log4r@ab0b7e9)
magrittr 2.0.5 2026-04-04 [1] RSPM
MASS 7.3-65 2025-02-28 [3] CRAN (R 4.6.1)
Matrix 1.7-5 2026-03-21 [3] CRAN (R 4.6.1)
memoise 2.0.1 2021-11-26 [1] RSPM
methods * 4.6.1 2026-06-24 [3] local
mgcv 1.9-4 2025-11-07 [3] CRAN (R 4.6.1)
mime 0.13 2025-03-17 [1] RSPM
nlme 3.1-169 2026-03-27 [3] CRAN (R 4.6.1)
nnet 7.3-20 2025-01-01 [3] CRAN (R 4.6.1)
openssl 2.4.2 2026-06-09 [1] RSPM
otel 0.2.0 2025-08-29 [1] RSPM
pak 0.10.0 2026-06-07 [1] RSPM (R 4.6.0)
parallel 4.6.1 2026-06-24 [3] local
pillar 1.11.1 2025-09-17 [1] RSPM
pkgbuild 1.4.8 2025-05-26 [1] RSPM
pkgconfig 2.0.3 2019-09-22 [1] RSPM
pkgload 1.5.3 2026-06-15 [1] RSPM
praise 1.0.0 2015-08-11 [1] RSPM
processx 3.9.0 2026-04-22 [1] RSPM
ps 1.9.3 2026-04-20 [1] RSPM
purrr 1.2.2 2026-04-10 [1] RSPM
qcthat 1.1.3 2026-07-23 [1] Github (Gilead-Public/qcthat@e627805)
R6 2.6.1 2025-02-15 [1] RSPM
rappdirs 0.3.4 2026-01-17 [1] RSPM
remotes 2.5.0 2024-03-17 [1] RSPM (R 4.6.0)
rex 1.2.2 2026-03-28 [1] RSPM
rlang 1.3.0 2026-07-05 [1] RSPM
rmarkdown 2.31 2026-03-26 [1] RSPM
rpart 4.1.27 2026-03-27 [3] CRAN (R 4.6.1)
rprojroot 2.1.1 2025-08-26 [1] RSPM
rrapply 1.2.8 2025-11-25 [1] RSPM
rstudioapi 0.19.0 2026-06-11 [1] RSPM
sass 0.4.10 2025-04-11 [1] RSPM
sessioninfo 1.2.4 2026-06-04 [1] RSPM
spatial 7.3-18 2025-01-01 [3] CRAN (R 4.6.1)
splines 4.6.1 2026-06-24 [3] local
stats * 4.6.1 2026-06-24 [3] local
stats4 4.6.1 2026-06-24 [3] local
stringi 1.8.7 2025-03-27 [1] RSPM
stringr 1.6.0 2025-11-04 [1] RSPM
survival 3.8-6 2026-01-16 [3] CRAN (R 4.6.1)
sys 3.4.3 2024-10-04 [1] RSPM
tcltk 4.6.1 2026-06-24 [3] local
testthat 3.3.2 2026-01-11 [1] RSPM
tibble 3.3.1 2026-01-11 [1] RSPM
tidyr 1.3.2 2025-12-19 [1] RSPM
tidyselect 1.2.1 2024-03-11 [1] RSPM
tinytex 0.60 2026-06-16 [1] RSPM
tools 4.6.1 2026-06-24 [3] local
usethis 3.2.1 2025-09-06 [1] RSPM
utf8 1.2.6 2025-06-08 [1] RSPM
utils * 4.6.1 2026-06-24 [3] local
vctrs 0.7.3 2026-04-11 [1] RSPM
waldo 0.6.2 2025-07-11 [1] RSPM
whisker 0.4.1 2022-12-05 [1] RSPM
withr 3.0.3 2026-06-19 [1] RSPM
workr 1.1.0 2026-07-23 [1] Github (Gilead-Public/workr@d19925e)
xfun 0.60 2026-07-09 [1] RSPM
yaml 2.3.12 2025-12-10 [1] RSPM
zip 3.0.1 2026-07-13 [1] RSPM
[1] /home/runner/work/_temp/Library
[2] /opt/R/4.6.1/lib/R/site-library
[3] /opt/R/4.6.1/lib/R/library
- ── Packages attached to the search path.
──────────────────────────────────────────────────────────────────────────────
Requirements delivered: jwildfire/obot.roadmap#28 — gsm.safety v1.0: full adoption of safety.viz