v1.5.1
gsm.kri v1.5.1
This patch release updates the GitHub action workflows to align with the new federated action framework in gsm.utils
What's Changed
- Main -> dev by Laura Maxwell (@lauramaxwell) in #206
- Update actions by Jon Harmon (@jonthegeek) in #211
- gsm.kri v1.5.1 release candidate by Laura Maxwell (@lauramaxwell) in #218
Full Changelog: v1.5.0...v1.5.1
{qcthat} Reports
Completed Issues
⚠️ A qcthat issue test matrix with 11 milestones, 49 issues, and 99 tests
├─█─Milestone: v1.0.0 (4 issues, 0 tests)
│ ├─☑️─Issue 37: Path to Report_KRI template
│ │ └─(no tests)
│ ├─☑️─Issue 35: Feature: Update gsm.viz js index
│ │ └─(no tests)
│ ├─☑️─Issue 30: Namespace all functions called in yaml workflows
│ │ └─(no tests)
│ └─☑️─Issue 1: Move Analyze, Transform, Flag, Summarize functions to gsm.kri
│ └─(no tests)
├─█─Milestone: v1.4.1 (3 issues, 1 test)
│ ├─☑️─Feature 184: Update example eligibility report.
│ │ └─(no tests)
│ ├─☑️─Bug 183: Align `cou0014` with `kri0014`.
│ │ └─✅─Qual: Given appropriate raw participant-level data, an Ineligibility Assessment can be done using the Identity method (#183)
│ └─☑️─Technical Task 161: Add qualification test for new ineligibility kri
│ └─(no tests)
├─█─Milestone: v1.5.0 (3 issues, 6 tests)
│ ├─☑️─Feature 193: Premature Deaths KRIs
│ │ └─✅─Qual: Given appropriate raw participant-level data, Deaths in First 90 Days assessment can be done using the Identity method (#193)
│ ├─☑️─Technical Task 182: Cache test data
│ │ ├─✅─caching functions work correctly (#182)
│ │ ├─⚠️─cached mapped data is generated correctly (#182)
│ │ ├─✅─mapping output caching works (#182)
│ │ └─✅─cache clearing works (#182)
│ └─☑️─Feature 171: Filter on Multiple studies in Cross-study Site Risk Score Report
│ └─✅─Cross-study SRS report widget allows filtering on multiple studies (#171)
├─█─Milestone: <none> (1 issue, 0 tests)
│ └─☑️─Requirement 168: Ineligibility accrual method should be `Numerator`.
│ └─(no tests)
├─█─Milestone: v1.1.0 (6 issues, 0 tests)
│ ├─☑️─Issue 45: Bugfix: Report pipeline failing to pick up functions
│ │ └─(no tests)
│ ├─☑️─Issue 32: Feature: Disable `MathJax` in KRI report.
│ │ └─(no tests)
│ ├─☑️─Issue 26: Feature: Add `nMinNumerator` to PK KRI.
│ │ └─(no tests)
│ ├─☑️─Issue 23: Feature: Update KRI descriptions
│ │ └─(no tests)
│ ├─☑️─Issue 11: Remove lower thresholds for Data Quality metrics
│ │ └─(no tests)
│ └─☑️─Issue 7: Feature: PK Compliance KRI
│ └─(no tests)
├─█─Milestone: v1.1.2 (2 issues, 0 tests)
│ ├─☑️─Requirement 74: Business Requirement: Update Accrual Thresholds for existing KRIs
│ │ └─(no tests)
│ └─☑️─Issue 68: Feature: Update lab and discontinuation KRI flag thresholds to only be positive z-scores
│ └─(no tests)
├─█─Milestone: v1.2.0 (8 issues, 9 tests)
│ ├─☑️─Issue 86: Bugfix: `GroupLabelKey` not found in new Flags Changed section of gsm.kri report
│ │ └─(no tests)
│ ├─☑️─Issue 80: Bugfix: `Report_KRI()` which renders `Report_KRI.Rmd` uses `add_Groups_metadata()` which isn't exported
│ │ └─(no tests)
│ ├─☑️─Issue 75: Feature: Add a list of flag changes from previous snapshot to report
│ │ ├─✅─returns NULL if required columns are missing (#75)
│ │ ├─✅─GroupLabel and MetricLabel default to IDs when missing (#75)
│ │ ├─✅─No output if only change is NA -> 0 (green) (#75)
│ │ └─✅─HTML output is generated for valid changed flags (#75)
│ ├─☑️─Issue 59: Feature: Align order of reporting data layer parameters across functions.
│ │ └─(no tests)
│ ├─☑️─Issue 57: Feature: Pass additional chart configuration via `...`.
│ │ └─(no tests)
│ ├─☑️─Issue 54: Feature: Add `chart_name` attribute in `Widget_*` functions.
│ │ └─(no tests)
│ ├─☑️─Issue 53: Feature: Generalize `Report_MetricCharts` to render any set of charts.
│ │ ├─✅─Handles all supported chart types (#53)
│ │ ├─✅─Handles some missing chart types (#53)
│ │ ├─✅─Handles empty input (#53)
│ │ ├─✅─Output formatting and no errors (#53)
│ │ └─✅─Handles missing output_label (#53)
│ └─☑️─Issue 47: Feature: Make log scale optional in scatter plot in support of PK visualization
│ └─(no tests)
├─█─Milestone: v1.2.2 (2 issues, 0 tests)
│ ├─☑️─Requirement 104: Business Requirement: Fix bugs related to pipeline and report output
│ │ └─(no tests)
│ └─☑️─Issue 103: Bugfix: LaTeX error in KRI Report
│ └─(no tests)
├─█─Milestone: v1.3.0 (8 issues, 0 tests)
│ ├─☑️─Feature 102: Incorporate site risk score into KRI report
│ │ └─(no tests)
│ ├─☑️─Technical Task 101: Create yaml for site risk score
│ │ └─(no tests)
│ ├─☑️─Requirement 98: Implement Site Risk Scores
│ │ └─(no tests)
│ ├─☑️─Feature 97: Add report component that tabulates risk signal weights.
│ │ └─(no tests)
│ ├─☑️─Technical Task 96: Add supplemental metric data domain that captures risk signal weights.
│ │ └─(no tests)
│ ├─☑️─Technical Task 70: Calculate Site Risk Score as new Metric
│ │ └─(no tests)
│ ├─☑️─Requirement 65: Basic Site Risk Score Prototype
│ │ └─(no tests)
│ └─☑️─Requirement 63: ePRO Compliance KRI - Proof of Concept
│ └─(no tests)
├─█─Milestone: v1.3.1 (1 issue, 0 tests)
│ └─☑️─Bug 118: `Widget_GroupOverview` displays mock site risk score data when site risk score is absent in data.
│ └─(no tests)
├─█─Milestone: v1.3.2 (1 issue, 2 tests)
│ └─☑️─Bug 125: Country-level report is broken.
│ ├─✅─Widget_GroupOverview returns expected data (#125)
│ └─✅─Widget_GroupOverview uses correct Group or errors out when strGroupLevel is NULL (#125)
└─█─Milestone: v1.4.0 (10 issues, 81 tests)
├─☑️─Feature 166: Parametrize options for addOutcomeSelect
│ ├─✅─Widget_BarChart creates a valid HTML widget {#166}
│ ├─✅─Widget_BarChart works with custom vOutcomeOptions {#166}
│ ├─✅─Widget_BarChart assertions work {#166}
│ ├─✅─Widget_TimeSeries creates a valid HTML widget {#166}
│ ├─✅─Widget_TimeSeries works with custom vOutcomeOptions {#166}
│ └─✅─Widget_TimeSeries assertions work {#166}
├─☑️─Feature 71: Create a cross-study KRI report
│ ├─✅─Returns correct structure with required columns (#71, #144)
│ ├─✅─Calculates metrics correctly for multiple studies (#71, #144)
│ ├─✅─Sorts by average risk score descending (#71, #144)
│ ├─✅─Works with single study per site (#71, #144)
│ ├─✅─Adds InvestigatorName when dfGroups provided (#71, #144)
│ ├─✅─Handles multiple investigator names per site (#71, #144)
│ ├─✅─Handles missing columns in dfGroups gracefully (#71, #144)
│ ├─✅─Respects strGroupLevel parameter (#71, #144)
│ ├─✅─Errors when no data for specified GroupLevel (#71, #144)
│ ├─✅─Returns empty data frame when Analysis_srs0001 not present (#71, #144)
│ ├─✅─Validates input types (#71, #144)
│ ├─✅─Works with custom strNameCol parameter (#71, #144)
│ ├─✅─Widget_CrossStudyRiskScore creates an htmlwidget (#71)
│ ├─✅─Widget_CrossStudyRiskScore errors if Analysis_srs0001 is missing (#71)
│ └─✅─Widget_CrossStudyRiskScore validates inputs (#71)
├─☑️─Technical Task 162: Implement gsm.utils v0.2.0 workflows
│ └─(no tests)
├─☑️─Technical Task 159: Add Qualification Tests for existing Functionality
│ ├─✅─Qual: Given appropriate raw participant-level data, a Data Change Rate Assessment can be done using the Normal Approximation method (#159)
│ ├─✅─Qual: Data Change Rate Assessments can be done correctly using a grouping variable, such as Site, Country, or Study, when applicable (#159)
│ ├─✅─Qual: Given appropriate raw participant-level data, a Data Entry Lag Assessment can be done using the Normal Approximation method (#159)
│ ├─✅─Qual: Data Entry Lag Assessments can be done correctly using a grouping variable, such as Site, Country, or Study, when applicable (#159)
│ ├─✅─Qual: Given appropriate raw participant-level data, a Query Age Assessment can be done using the Normal Approximation method (#159)
│ ├─✅─Qual: Query Age Assessments can be done correctly using a grouping variable, such as Site, Country, or Study, when applicable (#159)
│ ├─✅─Qual: Given appropriate raw participant-level data, a Query Rate Assessment can be done using the Normal Approximation method (#159)
│ ├─✅─Qual: Query Rate Assessments can be done correctly using a grouping variable, such as Site, Country, or Study, when applicable (#159)
│ ├─✅─Qual: Given appropriate raw participant-level data, a PK Compliance Assessment can be done using the Identity method (#159)
│ ├─✅─Qual: PK Compliance Assessments can be done correctly using a grouping variable, such as Site, Country, or Study, when applicable (#159)
│ ├─✅─Qual: Given summarized analytics data, all appropriate aspects of site risk score are available to calculate it correctly (#159)
│ ├─✅─Qual: Given appropriate raw participant-level data, an Adverse Event Assessment can be done using the Normal Approximation method (#159)
│ ├─✅─Qual: Adverse Event Assessments can be done correctly using a grouping variable, such as Site or Country for KRIs, and Study for QTLs, when applicable (#159)
│ ├─✅─Qual: Given appropriate raw participant-level data, a Protocol Deviation Assessment can be done using the Normal Approximation method (#159)
│ ├─✅─Qual: Protocol Deviation Assessments can be done correctly using a grouping variable, such as Site or Country for KRIs, and Study for QTLs, when applicable (#159)
│ ├─✅─Qual: Given appropriate raw participant-level data, a Dispositon Assessment can be done using the Normal Approximation method (#159)
│ ├─✅─Qual: Disposition Assessments can be done correctly using a grouping variable, such as Site or Country for KRIs, and Study for QTLs, when applicable (#159)
│ ├─✅─Qual: Given appropriate raw participant-level data, a Labs Assessment can be done using the Normal Approximation method (#159)
│ └─✅─Qual: Labs Assessments can be done correctly using a grouping variable, such as Site or Country for KRIs, and Study for QTLs, when applicable (#159)
├─☑️─Feature 157: Incorpoate `IE` into standard site-based KRI
│ └─✅─Ensure report renders normally {#157}
├─☑️─Technical Task 145: Remove test noise
│ └─✅─Widget_GroupOverview creates a valid HTML widget (#145)
├─☑️─Technical Task 144: Add unit tests for SummarizeCrossStudy()
│ ├─✅─Returns correct structure with required columns (#71, #144)
│ ├─✅─Calculates metrics correctly for multiple studies (#71, #144)
│ ├─✅─Sorts by average risk score descending (#71, #144)
│ ├─✅─Works with single study per site (#71, #144)
│ ├─✅─Adds InvestigatorName when dfGroups provided (#71, #144)
│ ├─✅─Handles multiple investigator names per site (#71, #144)
│ ├─✅─Handles missing columns in dfGroups gracefully (#71, #144)
│ ├─✅─Respects strGroupLevel parameter (#71, #144)
│ ├─✅─Errors when no data for specified GroupLevel (#71, #144)
│ ├─✅─Returns empty data frame when Analysis_srs0001 not present (#71, #144)
│ ├─✅─Validates input types (#71, #144)
│ └─✅─Works with custom strNameCol parameter (#71, #144)
├─☑️─Technical Task 135: Add `MakeWeights` helper function
│ ├─✅─MakeWeights returns correct structure (#135)
│ ├─✅─MakeWeights parses comma-separated values correctly (#135)
│ ├─✅─MakeWeights calculates WeightMax correctly (#135)
│ ├─✅─MakeWeights handles multiple metrics (#135)
│ ├─✅─MakeWeights validates required columns (#135)
│ ├─✅─MakeWeights filters out NA values (#135)
│ ├─✅─MakeWeights handles empty data after filtering NAs (#135)
│ ├─✅─MakeWeights handles single flag-weight pair (#135)
│ ├─✅─MakeWeights handles zero weights (#135)
│ ├─✅─MakeWeights handles negative flags (#135)
│ ├─✅─MakeWeights handles large numbers (#135)
│ ├─✅─MakeWeights handles decimal weights (#135)
│ ├─✅─MakeWeights output can be joined to results data (#135)
│ ├─✅─MakeWeights works with gsm.core::reportingMetrics (#135)
│ ├─✅─MakeWeights handles symmetric weights correctly (#135)
│ ├─✅─MakeWeights handles asymmetric weights correctly (#135)
│ ├─✅─MakeWeights detects mismatched Flag and RiskScoreWeight lengths (#135)
│ ├─✅─MakeWeights detects mismatched lengths with multiple metrics (#135)
│ ├─✅─MakeWeights detects fewer weights than flags (#135)
│ ├─✅─MakeWeights detects more weights than flags (#135)
│ └─✅─MakeWeights succeeds when all lengths match (#135)
├─☑️─Technical Task 127: Require `CalculateRiskScore` to run separately for each snapshot/study
│ ├─✅─CalculateRiskScore returns correct structure (#127)
│ ├─✅─CalculateRiskScore calculates risk scores correctly (#127)
│ ├─✅─CalculateRiskScore handles custom MetricID (#127)
│ ├─✅─CalculateRiskScore validates required columns in dfResults (#127)
│ ├─✅─CalculateRiskScore validates required columns in dfWeights (#127)
│ ├─✅─CalculateRiskScore validates MetricID uniqueness (#127)
│ ├─✅─CalculateRiskScore validates numeric Weight and WeightMax (#127)
│ ├─✅─CalculateRiskScore validates unique combinations (#127)
│ ├─✅─CalculateRiskScore validates consistent WeightMax per MetricID (#127)
│ ├─✅─CalculateRiskScore handles NA values with warning (#127)
│ ├─✅─CalculateRiskScore works with all NA weights for a group (#127)
│ ├─✅─CalculateRiskScore handles single row input (#127)
│ ├─✅─CalculateRiskScore handles zero weights (#127)
│ ├─✅─CalculateRiskScore handles large numbers (#127)
│ ├─✅─CalculateRiskScore aggregates weights correctly across metrics (#127)
│ └─✅─CalculateRiskScore handles multiple group levels (#127)
└─☑️─Bug 107: The metric table in the KRI report occasionally displays "metricTable" instead of "Metric Table".
├─✅─output_label attribute is set even with no flags (Issue #107)
└─✅─Output is expected object (#107)
# Issue state: 📥 = open, ☑️ = closed (completed), ⛔ = closed (won't fix)
# Test disposition: ✅ = passed, ❌ = failed, 🚫 = skipped
⭕ 33 issues lack tests
🙈 26 issues with label "qcthat-nocov" were ignored; 1 issue with label "qcthat-uat" was ignored
This report was run locally by Laura Maxwell (@lauramaxwell) due to a bug in the qcthat package (Documented here)
Session Info
─ Session info ───────────────────────────────────────────────────────────────────────────! setting value
version R version 4.5.1 (2025-06-13 ucrt)
os Windows 11 x64 (build 26200)
system x86_64, mingw32
ui RStudio
language (EN)
collate English_Europe.utf8
ctype English_Europe.utf8
tz America/New_York
date 2026-05-18
rstudio 2025.09.2+418 Cucumberleaf Sunflower (desktop)
pandoc 3.9 @ C:\Users\Laura Maxwell\AppData\Local\Pandoc/ (via rmarkdown)
quarto @ C:\PROGRA1\RStudio\RESOUR1\app\bin\quarto\bin\quarto.exe
─ Packages ───────────────────────────────────────────────────────────────────────────
! package * version date (UTC) lib source
askpass 1.2.1 2024-10-04 [1] CRAN (R 4.5.1)
base64enc 0.1-6 2026-02-02 [1] CRAN (R 4.5.2)
brio 1.1.5 2024-04-24 [1] CRAN (R 4.5.1)
bslib 0.11.0 2026-05-16 [1] CRAN (R 4.5.3)
cachem 1.1.0 2024-05-16 [1] CRAN (R 4.5.1)
cli * 3.6.6 2026-04-09 [1] CRAN (R 4.5.3)
credentials 2.0.3 2025-09-12 [1] CRAN (R 4.5.2)
crosstalk 1.2.2 2025-08-26 [1] CRAN (R 4.5.1)
curl 7.1.0 2026-04-22 [1] CRAN (R 4.5.3)
data.table 1.18.4 2026-05-06 [1] CRAN (R 4.5.3)
DBI 1.3.0 2026-02-25 [1] CRAN (R 4.5.3)
desc 1.4.3 2023-12-10 [1] CRAN (R 4.5.1)
digest 0.6.39 2025-11-19 [1] CRAN (R 4.5.3)
dplyr * 1.2.1 2026-04-03 [1] CRAN (R 4.5.3)
DT 0.34.0 2025-09-02 [1] CRAN (R 4.5.1)
duckdb 1.5.2 2026-04-13 [1] CRAN (R 4.5.3)
emoji 16.0.0 2024-10-28 [1] CRAN (R 4.5.3)
evaluate 1.0.5 2025-08-27 [1] CRAN (R 4.5.1)
farver 2.1.2 2024-05-13 [1] CRAN (R 4.5.1)
fastmap 1.2.0 2024-05-15 [1] CRAN (R 4.5.1)
fontawesome 0.5.3 2024-11-16 [1] CRAN (R 4.5.1)
forcats 1.0.1 2025-09-25 [1] CRAN (R 4.5.2)
fs 2.1.0 2026-04-18 [1] CRAN (R 4.5.3)
generics 0.1.4 2025-05-09 [1] CRAN (R 4.5.1)
gert 2.3.1 2026-01-11 [1] CRAN (R 4.5.2)
ggplot2 * 4.0.3 2026-04-22 [1] CRAN (R 4.5.3)
gh 1.5.0 2025-05-26 [1] CRAN (R 4.5.1)
gitcreds 0.1.2 2022-09-08 [1] CRAN (R 4.5.1)
glue * 1.8.1 2026-04-17 [1] CRAN (R 4.5.1)
gsm.core 1.2.1 2026-05-18 [1] Github (Gilead-BioStats/gsm.core@81ef8d2)
P gsm.kri * 1.5.1 2026-05-18 [?] Github (8027935)
gsm.mapping * 1.1.4 2026-05-18 [1] Github (Gilead-BioStats/gsm.mapping@060720e)
gsm.qtl * 1.2.2 2026-05-18 [1] Github (Gilead-BioStats/gsm.qtl@289ae34)
gsm.reporting * 1.1.5 2026-05-18 [1] Github (Gilead-BioStats/gsm.reporting@52e78bd)
gt * 1.3.0 2026-01-22 [1] CRAN (R 4.5.3)
gtable 0.3.6 2024-10-25 [1] CRAN (R 4.5.1)
htmltools * 0.5.9 2025-12-04 [1] CRAN (R 4.5.3)
htmlwidgets 1.6.4 2023-12-06 [1] CRAN (R 4.5.1)
httr 1.4.8 2026-02-13 [1] CRAN (R 4.5.3)
httr2 1.2.2 2025-12-08 [1] CRAN (R 4.5.2)
jquerylib 0.1.4 2021-04-26 [1] CRAN (R 4.5.1)
jsonlite 2.0.0 2025-03-27 [1] CRAN (R 4.5.1)
knitr * 1.51 2025-12-20 [1] CRAN (R 4.5.2)
labeling 0.4.3 2023-08-29 [1] CRAN (R 4.5.0)
lazyeval 0.2.3 2026-04-04 [1] CRAN (R 4.5.3)
lifecycle 1.0.5 2026-01-08 [1] CRAN (R 4.5.1)
log4r 0.4.4 2024-10-12 [1] CRAN (R 4.5.1)
lubridate 1.9.5 2026-02-04 [1] CRAN (R 4.5.3)
magrittr 2.0.5 2026-04-04 [1] CRAN (R 4.5.3)
openssl 2.4.1 2026-05-14 [1] CRAN (R 4.5.3)
otel 0.2.0 2025-08-29 [1] CRAN (R 4.5.2)
pak 0.9.2 2025-12-22 [1] CRAN (R 4.5.2)
pillar 1.11.1 2025-09-17 [1] CRAN (R 4.5.2)
pkgbuild 1.4.8 2025-05-26 [1] CRAN (R 4.5.1)
pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.5.1)
pkgload 1.5.2 2026-04-22 [1] CRAN (R 4.5.3)
plotly * 4.12.0 2026-01-24 [1] CRAN (R 4.5.3)
purrr * 1.2.2 2026-04-10 [1] CRAN (R 4.5.3)
qcthat 1.1.2 2026-04-15 [1] Github (Gilead-Public/qcthat@d0958dc)
R6 2.6.1 2025-02-15 [1] CRAN (R 4.5.1)
rappdirs 0.3.4 2026-01-17 [1] CRAN (R 4.5.2)
RColorBrewer 1.1-3 2022-04-03 [1] CRAN (R 4.5.0)
rlang 1.2.0 2026-04-06 [1] CRAN (R 4.5.3)
rmarkdown 2.31 2026-03-26 [1] CRAN (R 4.5.3)
rprojroot 2.1.1 2025-08-26 [1] CRAN (R 4.5.1)
rstudioapi 0.18.0 2026-01-16 [1] CRAN (R 4.5.1)
S7 0.2.2 2026-04-22 [1] CRAN (R 4.5.3)
sass 0.4.10 2025-04-11 [1] CRAN (R 4.5.1)
scales 1.4.0 2025-04-24 [1] CRAN (R 4.5.1)
sessioninfo 1.2.3 2025-02-05 [1] CRAN (R 4.5.1)
stringi 1.8.7 2025-03-27 [1] CRAN (R 4.5.0)
stringr * 1.6.0 2025-11-04 [1] CRAN (R 4.5.2)
sys 3.4.3 2024-10-04 [1] CRAN (R 4.5.1)
testthat * 3.3.2 2026-01-11 [1] CRAN (R 4.5.2)
tibble 3.3.1 2026-01-11 [1] CRAN (R 4.5.3)
tidyr * 1.3.2 2025-12-19 [1] CRAN (R 4.5.2)
tidyselect 1.2.1 2024-03-11 [1] CRAN (R 4.5.1)
timechange 0.4.0 2026-01-29 [1] CRAN (R 4.5.3)
utf8 1.2.6 2025-06-08 [1] CRAN (R 4.5.1)
vctrs 0.7.3 2026-04-11 [1] CRAN (R 4.5.3)
viridisLite 0.4.3 2026-02-04 [1] CRAN (R 4.5.3)
waldo 0.6.2 2025-07-11 [1] CRAN (R 4.5.1)
withr 3.0.2 2024-10-28 [1] CRAN (R 4.5.1)
xfun 0.57 2026-03-20 [1] CRAN (R 4.5.3)
xml2 1.5.2 2026-01-17 [1] CRAN (R 4.5.3)
yaml * 2.3.12 2025-12-10 [1] CRAN (R 4.5.3)