v1.2.2
gsm.qtl v1.2.2
This patch release updates the GitHub action workflows to align with the new federated action framework in gsm.utils
What's Changed
- catch dev up to main by Zelos Zhu (@zdz2101) in #111
- Update workflows by Jon Harmon (@jonthegeek) in #106
- gsm.qtl v1.2.2 release candidate by Laura Maxwell (@lauramaxwell) in #113
Full Changelog: v1.2.1...v1.2.2
{qcthat} Reports
Completed Issues
✅ A qcthat issue test matrix with 4 milestones, 30 issues, and 37 tests
├─█─Milestone: v0.1.0 (15 issues, 22 tests)
│ ├─☑️─Issue 30: Feature: Figure out how to conditionally run child .Rmd
│ │ ├─✅─Report_QTL renders a valid HTML report for full metric input (#4, #9, #19, #30, #35)
│ │ └─✅─Report_QTL renders a valid HTML report for single metric input (#4, #9, #19, #30)
│ ├─☑️─Feature 11: Feature: Write function(s) that generate dynamic threshold for Eligibility QTL
│ │ ├─✅─Analyze One Side Prop works for Study, when nProRate is clearly violated (#5, #11, #46)
│ │ ├─✅─Analyze One Side Prop works for Study, when nPropRate is the same (#5, #11, #46)
│ │ ├─✅─Analyze_OneSideProp handles required and optional arguments (#5, #11, #46)
│ │ ├─✅─Analyze One Side Prop works for Study, when nProRate is clearly violated (#5, #11, #39, #42, #50, #73)
│ │ └─✅─Given appropriate inclusion/exclusion related data, calculates appropriate QTL threshold. (#2, #5, #11, #17, #39, #42, #50, #73)
│ ├─☑️─Feature 9: Feature: QTL report
│ │ ├─✅─QTL_Overview uses all arguments (#4, #9)
│ │ ├─✅─Report_QTL validates required structures (#4, #9, #19)
│ │ ├─✅─Report_QTL passes arguments to render (#4, #9, #19)
│ │ ├─✅─Report_QTL renders a valid HTML report for full metric input (#4, #9, #19, #30, #35)
│ │ └─✅─Report_QTL renders a valid HTML report for single metric input (#4, #9, #19, #30)
│ ├─☑️─Feature 5: Add basic workflow for Eligibility metric
│ │ ├─✅─Analyze One Side Prop works for Study, when nProRate is clearly violated (#5, #11, #46)
│ │ ├─✅─Analyze One Side Prop works for Study, when nPropRate is the same (#5, #11, #46)
│ │ ├─✅─Analyze_OneSideProp handles required and optional arguments (#5, #11, #46)
│ │ ├─✅─Analyze One Side Prop works for Study, when nProRate is clearly violated (#5, #11, #39, #42, #50, #73)
│ │ └─✅─Given appropriate inclusion/exclusion related data, calculates appropriate QTL threshold. (#2, #5, #11, #17, #39, #42, #50, #73)
│ ├─☑️─Requirement 4: Business Requirement: QTL Metrics/Report Prototype
│ │ ├─✅─QTL_Overview uses all arguments (#4, #9)
│ │ ├─✅─Report_QTL validates required structures (#4, #9, #19)
│ │ ├─✅─Report_QTL passes arguments to render (#4, #9, #19)
│ │ ├─✅─Report_QTL renders a valid HTML report for full metric input (#4, #9, #19, #30, #35)
│ │ └─✅─Report_QTL renders a valid HTML report for single metric input (#4, #9, #19, #30)
│ ├─☑️─Issue 3: Feature: Treatment Discontinuation
│ │ └─✅─Given appropriate study discontinuation related data, calculates appropriate QTL threshold. (#3, #21, #39, #42, #50, #73)
│ ├─☑️─Issue 2: Feature: Eligibility domains mapping
│ │ └─✅─Given appropriate inclusion/exclusion related data, calculates appropriate QTL threshold. (#2, #5, #11, #17, #39, #42, #50, #73)
│ ├─☑️─Issue 24: Make the Listing exportable - either as a separate report or via a csv download in the report
│ │ └─✅─eligibility_listing covers df and download arguments (#21, #22, #24, #25)
│ ├─☑️─Requirement 23: Business Requirement: Update criteria bar charts to include multiple criteria for participants with multiple ineligibility reasons.
│ │ └─✅─criteria_groupBar uses grouping and label arguments (#14, #21, #22, #23)
│ ├─☑️─Issue 22: Feature: Visualization Wrappers
│ │ ├─✅─discontinuation_groupBar uses all arguments (#14, #21, #22, #76, #90)
│ │ ├─✅─discontinuation_reasonBar uses df and reason variable (#14, #21, #22)
│ │ ├─✅─reasons_groupBar uses group and reason arguments (#14, #21, #22)
│ │ ├─✅─discontinuation_map_reasons respects yaml_path (#21, #22)
│ │ ├─✅─eligibility_groupBar uses all arguments (#14, #15, #21, #22, #60)
│ │ ├─✅─eligibility_sourceBar returns plotly object (#14, #21, #22)
│ │ ├─✅─criteria_groupBar uses grouping and label arguments (#14, #21, #22, #23)
│ │ ├─✅─eligibility_listing covers df and download arguments (#21, #22, #24, #25)
│ │ ├─✅─scrollable_gt uses height and width arguments (#21, #22)
│ │ └─✅─Eligibility_Overview uses all arguments (#21, #22, #70)
│ ├─☑️─Issue 21: Feature: QTL Study Discontinuation
│ │ ├─✅─discontinuation_groupBar uses all arguments (#14, #21, #22, #76, #90)
│ │ ├─✅─discontinuation_reasonBar uses df and reason variable (#14, #21, #22)
│ │ ├─✅─reasons_groupBar uses group and reason arguments (#14, #21, #22)
│ │ ├─✅─discontinuation_map_reasons respects yaml_path (#21, #22)
│ │ ├─✅─eligibility_groupBar uses all arguments (#14, #15, #21, #22, #60)
│ │ ├─✅─eligibility_sourceBar returns plotly object (#14, #21, #22)
│ │ ├─✅─criteria_groupBar uses grouping and label arguments (#14, #21, #22, #23)
│ │ ├─✅─eligibility_listing covers df and download arguments (#21, #22, #24, #25)
│ │ ├─✅─scrollable_gt uses height and width arguments (#21, #22)
│ │ ├─✅─Eligibility_Overview uses all arguments (#21, #22, #70)
│ │ └─✅─Given appropriate study discontinuation related data, calculates appropriate QTL threshold. (#3, #21, #39, #42, #50, #73)
│ ├─☑️─Issue 19: Feature: Polish Report
│ │ ├─✅─Report_QTL validates required structures (#4, #9, #19)
│ │ ├─✅─Report_QTL passes arguments to render (#4, #9, #19)
│ │ ├─✅─Report_QTL renders a valid HTML report for full metric input (#4, #9, #19, #30, #35)
│ │ └─✅─Report_QTL renders a valid HTML report for single metric input (#4, #9, #19, #30)
│ ├─☑️─Issue 17: Feature: Add mapping file for `Mapped_Exclusion`
│ │ └─✅─Given appropriate inclusion/exclusion related data, calculates appropriate QTL threshold. (#2, #5, #11, #17, #39, #42, #50, #73)
│ ├─☑️─Issue 16: Feature: Add horizontal line at I/E target
│ │ └─✅─QTL_lineplot_v2 returns timeseries widget with threshold flags (#16, #27, #49, #84)
│ └─☑️─Issue 14: Feature: Generate Bar Charts based on multiple categorization
│ ├─✅─discontinuation_groupBar uses all arguments (#14, #21, #22, #76, #90)
│ ├─✅─discontinuation_reasonBar uses df and reason variable (#14, #21, #22)
│ ├─✅─reasons_groupBar uses group and reason arguments (#14, #21, #22)
│ ├─✅─eligibility_groupBar uses all arguments (#14, #15, #21, #22, #60)
│ ├─✅─eligibility_sourceBar returns plotly object (#14, #21, #22)
│ └─✅─criteria_groupBar uses grouping and label arguments (#14, #21, #22, #23)
├─█─Milestone: v1.0.0 (6 issues, 8 tests)
│ ├─☑️─Requirement 50: Prepare `gsm.qtl` for Q3 release
│ │ ├─✅─Analyze One Side Prop works for Study, when nProRate is clearly violated (#5, #11, #39, #42, #50, #73)
│ │ ├─✅─Given appropriate inclusion/exclusion related data, calculates appropriate QTL threshold. (#2, #5, #11, #17, #39, #42, #50, #73)
│ │ └─✅─Given appropriate study discontinuation related data, calculates appropriate QTL threshold. (#3, #21, #39, #42, #50, #73)
│ ├─☑️─Bug 46: Bugfix: Calculation of upper funnel bug
│ │ ├─✅─Analyze One Side Prop works for Study, when nProRate is clearly violated (#5, #11, #46)
│ │ ├─✅─Analyze One Side Prop works for Study, when nPropRate is the same (#5, #11, #46)
│ │ └─✅─Analyze_OneSideProp handles required and optional arguments (#5, #11, #46)
│ ├─☑️─Issue 42: QC: Create qualification framework and tests
│ │ ├─✅─Analyze One Side Prop works for Study, when nProRate is clearly violated (#5, #11, #39, #42, #50, #73)
│ │ ├─✅─Given appropriate inclusion/exclusion related data, calculates appropriate QTL threshold. (#2, #5, #11, #17, #39, #42, #50, #73)
│ │ └─✅─Given appropriate study discontinuation related data, calculates appropriate QTL threshold. (#3, #21, #39, #42, #50, #73)
│ ├─☑️─Requirement 39: Qualify QTL Metrics
│ │ ├─✅─Analyze One Side Prop works for Study, when nProRate is clearly violated (#5, #11, #39, #42, #50, #73)
│ │ ├─✅─Given appropriate inclusion/exclusion related data, calculates appropriate QTL threshold. (#2, #5, #11, #17, #39, #42, #50, #73)
│ │ └─✅─Given appropriate study discontinuation related data, calculates appropriate QTL threshold. (#3, #21, #39, #42, #50, #73)
│ ├─☑️─Issue 35: Feature: Add more columns to the discontinuation listing in QTL0002
│ │ └─✅─Report_QTL renders a valid HTML report for full metric input (#4, #9, #19, #30, #35)
│ └─☑️─Feature 25: Make I/E listing exportable
│ └─✅─eligibility_listing covers df and download arguments (#21, #22, #24, #25)
├─█─Milestone: v1.1.0 (1 issue, 4 tests)
│ └─☑️─Feature 60: Add a percentage based barplot for Ineligibiltiy Report
│ ├─✅─eligibility_groupBar uses all arguments (#14, #15, #21, #22, #60)
│ ├─✅─eligibility_groupBar bPercentage = FALSE shows counts (#60)
│ ├─✅─eligibility_groupBar bPercentage = TRUE shows percentages (#60)
│ └─✅─eligibility_groupBar bPercentage TRUE uses stacked fill position (#60)
├─█─Milestone: v1.2.0 (7 issues, 13 tests)
│ ├─☑️─Bug 90: QTL0001 Criteria by site/country barcharts are broken/too zoomed in
│ │ ├─✅─calc_plotly_footnote_layout expands bottom margin for wrapped footnotes (#90)
│ │ ├─✅─discontinuation_groupBar uses all arguments (#14, #21, #22, #76, #90)
│ │ ├─✅─reasons_groupBar swaps axes correctly when bSwapAxes is TRUE (#90)
│ │ ├─✅─eligibility_groupBar reserves space when a footnote is present (#90)
│ │ ├─✅─criteria_groupBar uses grouping and label arguments correctly when swapping axes (#90)
│ │ └─✅─Example QTL Report for 2026Q1 meets ui/ux/aesthetics expectations (#90)
│ ├─☑️─Requirement 84: QTL Tabletop Immediately Addressable feedback
│ │ ├─✅─QTL_lineplot_v2 returns timeseries widget with threshold flags (#16, #27, #49, #84)
│ │ └─✅─QTL_lineplot_v2 validates required arguments (#49, #84)
│ ├─☑️─Feature 80: Test suite is lacking
│ │ ├─✅─Analyze_OneSideProp validates nPropRate argument bounds (#80)
│ │ ├─✅─calc_fig_size covers n_rows, base, and per arguments (#80)
│ │ ├─✅─ResultsProcessor uses dfResults and dfMetrics arguments (#80)
│ │ └─✅─QTL_lineplot uses dfResults and strQTL arguments (#80)
│ ├─☑️─Bug 76: `discontinuation_groupBar` hard-codes `compyn=='N'` to study discontinuation.
│ │ └─✅─discontinuation_groupBar uses all arguments (#14, #21, #22, #76, #90)
│ ├─☑️─Bug 70: Address found bugs from eligibility report meeting
│ │ └─✅─Eligibility_Overview uses all arguments (#21, #22, #70)
│ ├─☑️─Feature 49: Implement Custom Time Series Widget for QTL
│ │ ├─✅─QTL_lineplot_v2 returns timeseries widget with threshold flags (#16, #27, #49, #84)
│ │ └─✅─QTL_lineplot_v2 validates required arguments (#49, #84)
│ └─☑️─Feature 27: Optimize Time Series Chart for its respective axis, fix legend, revisit JS?
│ └─✅─QTL_lineplot_v2 returns timeseries widget with threshold flags (#16, #27, #49, #84)
└─█─Milestone: <none> (1 issue, 2 tests)
└─☑️─Issue 108: eligibility_listing crashes on zero-row or all-NA input
├─✅─eligibility_listing handles zero-row data frame (#108)
└─✅─eligibility_listing handles all-NA dvdtm and eligibility_criteria (#108)
# Issue state: 📥 = open, ☑️ = closed (completed), ⛔ = closed (won't fix)
# Test disposition: ✅ = passed, ❌ = failed, 🚫 = skipped
🟢 All issues have at least one test
🙈 17 issues with label "qcthat-nocov" were ignored; 4 issues with label "qcthat-uat" were 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)
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)
gsm.kri 1.5.1 2026-05-18 [1] Github (Gilead-BioStats/gsm.kri@8027935)
gsm.qtl * 1.2.2 2026-05-18 [?] Github (289ae34)
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)
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)
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)
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)