Skip to content

v1.0.0

Choose a tag to compare

@jwildfire jwildfire released this 23 Jul 01:59
· 8 commits to main since this release
35a23f8

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), and Widget_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), and adeg (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 via gsm.core::RunWorkflow(), with matching runner scripts in inst/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. The ae_explorer and hep_explorer report workflows return, rebuilt on the Widget_* pattern; paneled_outlier_explorer has 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
⚠️ 9 tests generated warnings

🟢 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
⚠️ 9 tests generated warnings

⭕ 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