[v] A qcthat issue test matrix with 1 milestone, 12 issues, and 52 tests └─█─Milestone: v1.0.0 (12 issues, 52 tests) ├─[o]─Issue 40: Sync to safety.viz v1.2.0 and add Widget_HepExplorer (eDISH) │ ├─[v]─Widget_HepExplorer returns an htmlwidget carrying the hep-explorer payload (#40) │ ├─[v]─Widget_HepExplorer passes width, height, and elementId through (#40) │ ├─[v]─Widget_HepExplorer rejects invalid inputs via the hep-explorer contract (#40) │ ├─[v]─Widget_HepExplorer renders standalone HTML with the SafetyViz bundle and data (#40) │ └─[v]─hep_explorer workflow renders an HTML report from ExampleData (#40, #38) ├─[o]─Issue 30: Add Widget_Histogram htmlwidget consuming the safety.viz bundle │ ├─[v]─Widget_Histogram returns an htmlwidget carrying the histogram payload (#30) │ ├─[v]─Widget_Histogram passes width, height, and elementId through (#30) │ ├─[v]─Widget_Histogram rejects invalid inputs via the histogram contract (#30) │ ├─[v]─Widget_Histogram renders standalone HTML with the SafetyViz bundle and data (#30) │ └─[v]─safety_histogram workflow renders an HTML report from ExampleData (#30, #38) ├─[o]─Issue 28: Add pkgdown widget thumbnail gallery │ └─(no tests) ├─[o]─Issue 27: Add QCThat testing framework │ └─[v]─every test in the package carries a qcthat issue reference (#27) ├─[o]─Issue 38: Modernize report workflows to the Widget_* renderers │ ├─[v]─safety_delta_delta workflow renders an HTML report from ExampleData (#33, #38) │ ├─[v]─hep_explorer workflow renders an HTML report from ExampleData (#40, #38) │ ├─[v]─safety_outlier_explorer workflow renders an HTML report from ExampleData (#35, #38) │ ├─[v]─every widget ships its htmlwidgets binding, dependency yaml, schema, and report workflow (#31, #38) │ ├─[v]─safety_results_over_time workflow renders an HTML report from ExampleData (#34, #38) │ ├─[v]─safety_shift_plot workflow renders an HTML report from ExampleData (#32, #38) │ ├─[v]─ae_timelines workflow renders an HTML report from ExampleData (#36, #38) │ └─[v]─safety_histogram workflow renders an HTML report from ExampleData (#30, #38) ├─[o]─Issue 37: Ship canonical pharmaverseadam demo data (adbds/adae) for examples and QC │ ├─[v]─ExampleData reads the adbds example data with sensible types (#37) │ ├─[v]─ExampleData reads the adae example data with sensible types (#37) │ ├─[v]─ExampleData converts blank numeric fields to NA without warnings (#37) │ └─[v]─ExampleData defaults to adbds and rejects unknown datasets (#37) ├─[o]─Issue 36: Add Widget_AeTimelines htmlwidget consuming the safety.viz bundle │ ├─[v]─Widget_AeTimelines returns an htmlwidget carrying the ae-timelines payload (#36) │ ├─[v]─Widget_AeTimelines passes width, height, and elementId through (#36) │ ├─[v]─Widget_AeTimelines rejects invalid inputs via the ae-timelines contract (#36) │ ├─[v]─Widget_AeTimelines renders standalone HTML with the SafetyViz bundle and data (#36) │ └─[v]─ae_timelines workflow renders an HTML report from ExampleData (#36, #38) ├─[o]─Issue 35: Add Widget_OutlierExplorer htmlwidget consuming the safety.viz bundle │ ├─[v]─Widget_OutlierExplorer returns an htmlwidget carrying the outlier-explorer payload (#35) │ ├─[v]─Widget_OutlierExplorer passes width, height, and elementId through (#35) │ ├─[v]─Widget_OutlierExplorer rejects invalid inputs via the outlier-explorer contract (#35) │ ├─[v]─Widget_OutlierExplorer renders standalone HTML with the SafetyViz bundle and data (#35) │ └─[v]─safety_outlier_explorer workflow renders an HTML report from ExampleData (#35, #38) ├─[o]─Issue 34: Add Widget_ResultsOverTime htmlwidget consuming the safety.viz bundle │ ├─[v]─Widget_ResultsOverTime returns an htmlwidget carrying the payload (#34) │ ├─[v]─Widget_ResultsOverTime passes width, height, and elementId through (#34) │ ├─[v]─Widget_ResultsOverTime rejects invalid inputs via the results-over-time contract (#34) │ ├─[v]─Widget_ResultsOverTime renders standalone HTML with the SafetyViz bundle and data (#34) │ └─[v]─safety_results_over_time workflow renders an HTML report from ExampleData (#34, #38) ├─[o]─Issue 33: Add Widget_DeltaDelta htmlwidget consuming the safety.viz bundle │ ├─[v]─Widget_DeltaDelta returns an htmlwidget carrying the delta-delta payload (#33) │ ├─[v]─Widget_DeltaDelta passes width, height, and elementId through (#33) │ ├─[v]─Widget_DeltaDelta rejects invalid inputs via the delta-delta contract (#33) │ ├─[v]─Widget_DeltaDelta renders standalone HTML with the SafetyViz bundle and data (#33) │ └─[v]─safety_delta_delta workflow renders an HTML report from ExampleData (#33, #38) ├─[o]─Issue 32: Add Widget_ShiftPlot htmlwidget consuming the safety.viz bundle │ ├─[v]─Widget_ShiftPlot returns an htmlwidget carrying the shift-plot payload (#32) │ ├─[v]─Widget_ShiftPlot passes width, height, and elementId through (#32) │ ├─[v]─Widget_ShiftPlot rejects invalid inputs via the shift-plot contract (#32) │ ├─[v]─Widget_ShiftPlot renders standalone HTML with the SafetyViz bundle and data (#32) │ └─[v]─safety_shift_plot workflow renders an HTML report from ExampleData (#32, #38) └─[o]─Issue 31: Vendor the safety.viz v1.1.0 bundle and shared htmlwidget infrastructure ├─[v]─package metadata is available (#31) ├─[v]─gsm.safety exports the seven safety.viz widgets plus data and report helpers (#31) ├─[v]─every widget ships its htmlwidgets binding, dependency yaml, schema, and report workflow (#31, #38) ├─[v]─the legacy safetyCharts bridge is fully retired (#31) ├─[v]─BuildWidgetPayload returns the htmlwidget x payload for valid input (#31) ├─[v]─BuildWidgetPayload serializes empty settings as a JSON object (#31) ├─[v]─BuildWidgetPayload errors when a schema-default column is missing (#31) ├─[v]─BuildWidgetPayload errors when a settings override names a missing column (#31) ├─[v]─BuildWidgetPayload checks nested object settings like ae-timelines color (#31) ├─[v]─BuildWidgetPayload validates its inputs (#31) ├─[v]─SaveWidgetReport writes a self-contained HTML report and returns its path (#31) └─[v]─SaveWidgetReport keeps an existing .html extension and validates inputs (#31) # Issue state: [o] = open, [x] = closed (completed), [-] = closed (won't fix) # Test disposition: [v] = passed, [!] = failed, [S] = skipped [v] All tests passed [ ] 1 issue lacks tests