workr 1.1.0
Highlights
-
Improved project orchestration with phase-level configuration files,
project/phase load-save hooks, optional continue-on-error behavior, and
clearer diagnostics for missing paths, empty phases, and workflow failures. -
Added workflow discovery helpers and made workflow loading more predictable,
including active/inactive filtering, priority ordering, exact-name matching,
and support for the singularinst/workflowdirectory. -
Added reusable load/save hook registration plus built-in GitHub Actions
artifact providers for saving and restoring workflow data between runs. -
Hardened GitHub, manifest, snapshot, and CI automation, including expanded
mocked coverage for GitHub-backed workflows. -
Updated examples, documentation, pkgdown configuration, and tests for the new
workflow loading, hook, artifact, and project orchestration behavior. -
Fixed schema-enforced timestamp parsing in
RunQuery()when inputs mix Date
and POSIXct-like values.
What's Changed
- Sync Dev with main@v1.0.0 by Jeremy Wildfire (@jwildfire) in #41
- Catch up github actions to
gsm.utilsby Zelos Zhu (@zdz2101) in #49 - Closes #42 fix: install workr in manifest workflow by Zelos Zhu (@zdz2101) in #47
- Closes #43 test: add gh-mocked coverage for snapshot helpers by Zelos Zhu (@zdz2101) in #48
- Closes #45, #46: support inst/workflow and inst/workflows and avoid name clash by Zelos Zhu (@zdz2101) in #50
- Fix 53: Implement Active Workflow Filtering by Jon Harmon (@jharmon-gilead) in #55
- Formalize LoadData / SaveData hook contract by Zelos Zhu (@zdz2101) in #69
- Fix 60/61: GitHub artifact hook providers by Zelos Zhu (@zdz2101) in #70
- Add built-in gsm.datasim LoadData provider by Zelos Zhu (@zdz2101) in #71
- Closes #62: Harden hook roundtrip coverage by Zelos Zhu (@zdz2101) in #73
- Closes #44 Cuts a test tag of workr to use to generate package manifest in gismo.library by Zelos Zhu (@zdz2101) in #51
- Closes #63: Stabilize RunProject baseline contract by Zelos Zhu (@zdz2101) in #74
- Add per-phase RunProject config support by Zelos Zhu (@zdz2101) in #75
- Closes #67: Add RunProject regression matrix and docs by Zelos Zhu (@zdz2101) in #76
- Fix 72: Add
...filtering support to MakeWorkflowList by Jon Harmon (@jharmon-gilead) in #77 - Fix mixed timestamp parsing in RunQuery() by Zelos Zhu (@zdz2101) in #78
- Rc v1.1.0 by Zelos Zhu (@zdz2101) in #79
- chore: auto-update workflow templates by @cm-operations-bot[bot] in #86
- Small fixes for v1.1.0 release by Laura Maxwell (@lauramaxwell) in #85
New Contributors
- Jon Harmon (@jharmon-gilead) made their first contribution in #55
- @cm-operations-bot[bot] made their first contribution in #86
- Laura Maxwell (@lauramaxwell) made their first contribution in #85
Full Changelog: v1.0.0...v1.1.0
{qcthat} Reports
Milestone
✅ A qcthat issue test matrix with 1 milestone, 17 issues, and 96 tests
└─█─Milestone: v1.1.0 (17 issues, 96 tests)
├─☑️─Issue 72: Add FilterWorkflows() generic with ... filtering interface
│ ├─✅─FilterWorkflows.character filters single-value meta field (#72)
│ ├─✅─FilterWorkflows.character filters list-valued meta field (#72)
│ ├─✅─FilterWorkflows.character supports multiple allowed values (#72)
│ ├─✅─FilterWorkflows.character is case-insensitive (#72)
│ ├─✅─FilterWorkflows.character returns empty list for no match (#72)
│ ├─✅─FilterWorkflows.character excludes workflows missing the field (#72)
│ ├─✅─FilterWorkflows.character excludes workflows with NULL field value (#72)
│ ├─✅─FilterWorkflows.logical filters by TRUE (#72)
│ ├─✅─FilterWorkflows.logical filters by FALSE (#72)
│ ├─✅─FilterWorkflows.logical field lookup is case-insensitive (#72)
│ ├─✅─FilterWorkflows.default errors on unsupported value type (#72)
│ ├─✅─FilterWorkflows.numeric filters by single value (#72)
│ ├─✅─FilterWorkflows.numeric filters by multiple values (#72)
│ ├─✅─FilterWorkflows errors on unnamed ... argument (#72)
│ ├─✅─FilterWorkflows.logical excludes workflows with non-coercible Active value (#72)
│ ├─✅─FilterWorkflows.integer dispatches to numeric method (#72)
│ ├─✅─.keep_workflows warns and uses first key when meta has duplicate case-variant keys (#72)
│ ├─✅─MakeWorkflowList filters via ... character value (#72)
│ ├─✅─MakeWorkflowList filters via ... logical value (#72)
│ ├─✅─MakeWorkflowList applies multiple ... filters with AND logic (#72)
│ └─✅─MakeWorkflowList warns when ... filters leave empty list (#72)
├─☑️─Issue 59: Implement `gsm.datasim` load provider
│ ├─✅─gsm.datasim provider adapts standard single-snapshot data and aliases (#59)
│ ├─✅─gsm.datasim provider tolerates standard config API drift (#59)
│ ├─✅─gsm.datasim provider uses latest longitudinal snapshot by default (#59)
│ ├─✅─gsm.datasim provider validates profile and study_type early (#59)
│ ├─✅─gsm.datasim provider handles edge-case scalar config values (#59)
│ ├─✅─gsm.datasim provider requires custom config for custom profile (#59)
│ └─✅─built-in providers are registered together (#59, #60, #61)
├─☑️─Issue 58: Formalize `LoadData` / `SaveData` hook contract
│ ├─✅─RunWorkflow invokes environment-backed lConfig$LoadData (#58)
│ ├─✅─RunWorkflow accepts lConfig without data hooks (#58)
│ ├─✅─RunWorkflow resolves registered load providers (#58)
│ ├─✅─RunWorkflow resolves registered save providers (#58)
│ ├─✅─RunWorkflow errors on unknown registered load provider (#58)
│ ├─✅─RunWorkflow errors on invalid LoadData formals (#58)
│ ├─✅─RunWorkflow errors on invalid SaveData formals (#58)
│ └─✅─register_load_provider validates provider signatures (#58)
├─☑️─Feature 53: Filter MakeWorkflowList() to active-only
│ ├─✅─.workflow_path resolves package path (#53)
│ ├─✅─.workflow_path errors on missing directory (#53)
│ ├─✅─.discover_yaml_files returns named character vector (#53)
│ ├─✅─ListWorkflows returns named character vector of yaml paths (#53)
│ ├─✅─ListWorkflows resolves strPackage (#53)
│ ├─✅─ListWorkflows errors on invalid strPath (#53)
│ ├─✅─ListWorkflows bRecursive = FALSE only returns top-level files (#53)
│ ├─✅─ListWorkflowNames returns AsIs character vector without .yaml (#53)
│ ├─✅─ListWorkflowNames includes all workflows regardless of Active (#53)
│ ├─✅─ListWorkflowNames resolves strPackage (#53)
│ ├─✅─MakeWorkflowList bActiveOnly = TRUE (default) excludes inactive workflows (#53)
│ ├─✅─MakeWorkflowList bActiveOnly = FALSE includes all workflows (#53)
│ ├─✅─MakeWorkflowList strNames = NULL with bActiveOnly = FALSE includes all workflows (#53)
│ ├─✅─.filter_yaml_files NULL strNames returns all (#53)
│ ├─✅─.filter_yaml_files exact match works (#53)
│ └─✅─.filter_yaml_files partial match works (#53)
├─☑️─Issue 46: [workr] Workflow filename collisions silently overwrite
│ ├─✅─pull_workflows does not register missing files as collisions (#46)
│ ├─✅─pull_workflows warns on destination collisions by default (#46)
│ ├─✅─pull_workflows warns on nested destination collisions in directories (#46)
│ └─✅─pull_workflows warns and skips file-vs-directory structural collisions (#46)
├─☑️─Issue 45: [workr] Snapshot silently skips packages that use inst/workflows (plural)
│ ├─✅─pull_workflows skips packages with no workflow directory (#45)
│ └─✅─pull_workflows warns when only inst/workflows exists (#45)
├─☑️─Issue 43: [workr] Add testthat coverage for pull_workflows and resolve_package
│ ├─✅─resolve_package resolves explicit refs via mocked gh api (#43)
│ ├─✅─resolve_package uses date-based fallback when ref is not provided (#43)
│ ├─✅─resolve_package errors on malformed gh commit lookup response (#43)
│ ├─✅─resolve_ref_by_date falls back to default branch when latest release is missing (#43)
│ ├─✅─gh_list_contents parses directory entries from mocked gh api (#43)
│ ├─✅─pkgManifest writes manifest outputs with mocked GitHub resolution (#43)
│ ├─✅─pull_workflows dispatches file and directory entries (#43)
│ ├─✅─pull_workflow_file skips write when content lookup is Not Found (#43)
│ └─✅─pull_workflow_file writes decoded file when content is available (#43)
├─📥─Issue 23: Improve RunProject data handoff and per-folder configuration
│ └─(no tests)
├─📥─Issue 13: RunStep: dplyr::filter fails because do.call passes named ... arguments
│ └─(no tests)
├─☑️─Issue 67: `RunProject` regression tests + docs
│ ├─✅─github_artifact load provider ignores GITHUB_RUN_ID and honors latest_success in CI (#67)
│ ├─✅─github_artifact save provider stamps manifest run_id from GITHUB_RUN_ID (#67)
│ ├─✅─RunProject without phase configs preserves flat carry-forward behavior (#67)
│ ├─✅─RunProject supports a four-phase configured project scenario (#67)
│ ├─✅─RunProject retains fail-fast behavior by default (#67)
│ ├─✅─RunWorkflow allows LoadData-only and SaveData-only configs (#67)
│ ├─✅─RunWorkflow fails when spec-declared input is absent (#67)
│ ├─✅─RunWorkflows retains fail-fast behavior by default (#67)
│ └─✅─RunWorkflows continue-on-error records failures and runs later workflows (#67)
├─☑️─Issue 66: Output shaping + optional transform
│ ├─✅─RunProject wraps and transforms phase output (#66)
│ └─✅─RunProject transform failures identify the transform reference (#66)
├─☑️─Issue 65: Phase input assembly rules
│ └─✅─RunProject assembles phase input from config rules (#65)
├─☑️─Issue 64: Per-phase `_config.yaml` schema + validator
│ ├─✅─RunProject validates per-phase _config.yaml schema (#64)
│ └─✅─RunProject rejects empty or whitespace-only output config strings (#64)
├─☑️─Issue 63: Stabilize `RunProject` baseline
│ ├─✅─RunProject discovers phases in alphabetical order by default (#63)
│ ├─✅─RunProject runs strPhases in caller order, not sorted (#63)
│ ├─✅─RunProject errors when strPath is not a directory (#63)
│ └─✅─RunProject warns on empty phase folder and proceeds (#63)
├─☑️─Issue 62: Hook hardening: end-to-end testing, authentication, and documentation
│ ├─✅─github_artifact load provider reports required Actions scope on auth failures (#62)
│ └─✅─hook providers round-trip data across runs (#62)
├─☑️─Issue 61: GitHub Actions artifact load provider
│ ├─✅─github_artifact load provider restores data for an explicit run-id (#61)
│ ├─✅─github_artifact load provider resolves latest_success policy (#61)
│ ├─✅─github_artifact load provider errors with run-id and policy on missing artifact (#61)
│ ├─✅─github_artifact load provider warns and returns partial lData when payloads are missing (#61)
│ ├─✅─github_artifact load provider rejects payload paths outside bundle (#61)
│ ├─✅─github_artifact load provider restores NULL payload values (#61)
│ ├─✅─gh_actions_download_artifact_bundle clears stale extracted contents (#61)
│ └─✅─built-in providers are registered together (#59, #60, #61)
└─☑️─Issue 60: GitHub Actions artifact save provider
├─✅─github_artifact save provider writes manifest and payload pair (#60)
├─✅─github_artifact save provider clears stale bundle contents (#60)
└─✅─built-in providers are registered together (#59, #60, #61)
# Issue state: 📥 = open, ☑️ = closed (completed), ⛔ = closed (won't fix)
# Test disposition: ✅ = passed, ❌ = failed, 🚫 = skipped
⭕ 2 issues lack tests
🙈 3 issues with label "qcthat-nocov" were ignored
Completed Issues
⚠️ A qcthat issue test matrix with 2 milestones, 20 issues, and 179 tests
├─█─Milestone: v1.0.0 (3 issues, 76 tests)
│ ├─☑️─Issue 26: Improve unit test coverage for v1.0 release
│ │ ├─✅─MakeWorkflowList loads YAML and RunStep executes workflow correctly (#26)
│ │ ├─✅─Complex workflow: multi-step loaded from YAML and executed end-to-end (#26)
│ │ ├─✅─Workflow from YAML loads and executes with meta reference (#26)
│ │ ├─✅─loadExample returns input data when initData.R is missing (#9, #26)
│ │ ├─✅─loadExample loads initData.R and merges with lData (#9, #26)
│ │ ├─✅─loadExample validates initData return type (#9, #26)
│ │ ├─✅─loadExample does not create duplicate names on repeated calls (#9, #26)
│ │ ├─✅─MakeWorkflowList output is a named list with expected structure (#26)
│ │ ├─✅─MakeWorkflowList returns metadata as expected (#26)
│ │ ├─✅─MakeWorkflowList errors on invalid strPath (#26)
│ │ ├─✅─MakeWorkflowList errors on invalid strPackage (#26)
│ │ ├─✅─MakeWorkflowList filters by strNames (#26)
│ │ ├─✅─MakeWorkflowList bExact filters exactly (#26)
│ │ ├─✅─MakeWorkflowList names list elements by meta$ID (#26)
│ │ ├─✅─MakeWorkflowList sorts by Priority (#26)
│ │ ├─✅─MakeWorkflowList sets default Priority to 0 (#26)
│ │ ├─✅─MakeWorkflowList loads from package (#26)
│ │ ├─✅─MakeWorkflowList warns when ID does not match filename (#26)
│ │ ├─✅─MakeWorkflowList emits fatal message when meta is missing (#26)
│ │ ├─✅─MakeWorkflowList emits fatal message when steps is missing (#26)
│ │ ├─✅─MakeWorkflowList emits fatal message when meta$Type is missing (#26)
│ │ ├─✅─MakeWorkflowList emits fatal message when meta$ID is missing (#26)
│ │ ├─✅─MakeWorkflowList bRecursive finds nested workflows (#26)
│ │ ├─✅─RunProject runs all phases in sorted order (#26)
│ │ ├─✅─RunProject passes data between phases (#26)
│ │ ├─✅─RunProject respects strPhases subset and order (#26)
│ │ ├─✅─RunProject errors on missing strPath (#26)
│ │ ├─✅─RunProject errors on missing requested phases (#26)
│ │ ├─✅─RunProject errors on empty project directory (#26)
│ │ ├─✅─RunProject bReturnResult and bKeepInputData pass through (#26)
│ │ ├─✅─RunQuery returns correct result (#26)
│ │ ├─✅─RunQuery handles empty df (#26)
│ │ ├─✅─RunQuery handles invalid input (#26)
│ │ ├─✅─RunQuery checks if strQuery contains 'FROM df' (#26)
│ │ ├─✅─RunQuery applies schema appropriately (#26)
│ │ ├─✅─RunQuery applies incomplete schema appropriately (#26)
│ │ ├─✅─RunQuery parses invalid date/times correctly (#26)
│ │ ├─✅─RunQuery requires lColumnMapping when bUseSchema is TRUE (#26)
│ │ ├─✅─RunStep handles lMeta and lData parameters correctly (#26)
│ │ ├─✅─RunStep handles parameters referencing elements within lMeta and lData (#26)
│ │ ├─✅─RunStep passes direct value parameters correctly (#26)
│ │ ├─✅─RunStep passes direct value vector parameters correctly (#26)
│ │ ├─✅─RunStep handles multiple parameters and function invocation correctly (#26)
│ │ ├─✅─RunStep will run a function from a namespace (#26)
│ │ ├─✅─RunStep will run a function without a namespace (#26)
│ │ ├─✅─RunStep will run a function with no parameters (#26)
│ │ ├─✅─RunStep recognizes rlang::expr() string parameters (#26)
│ │ ├─✅─RunStep recognizes expr() shorthand parameters (#26)
│ │ ├─✅─RunStep recognizes rlang::exprs() parameters (#26)
│ │ ├─✅─RunStep recognizes exprs() shorthand parameters (#26)
│ │ ├─✅─RunStep passes lSpec parameter correctly (#26)
│ │ ├─✅─RunWorkflow returns final step result by default (#26)
│ │ ├─✅─RunWorkflow returns full workflow object when bReturnResult = FALSE (#26)
│ │ ├─✅─RunWorkflow bKeepInputData = FALSE removes input data from lData (#26)
│ │ ├─✅─RunWorkflow bKeepInputData = TRUE preserves input data in lData (#26)
│ │ ├─✅─RunWorkflow multi-step preserves intermediate results in lData (#26)
│ │ ├─✅─RunWorkflow invokes lConfig$LoadData (#26)
│ │ ├─✅─RunWorkflow invokes lConfig$SaveData on bReturnResult = TRUE (#26)
│ │ ├─✅─RunWorkflow validates spec when present (#26)
│ │ ├─✅─RunWorkflow runs without spec (#26)
│ │ ├─✅─RunWorkflow runs with YAML files (#26)
│ │ ├─✅─RunWorkflows returns named list (#26)
│ │ ├─✅─RunWorkflows passes prior workflow results as data to later workflows (#26)
│ │ ├─✅─RunWorkflows custom strResultNames (#26)
│ │ ├─✅─RunWorkflows passes lConfig through to RunWorkflow (#26)
│ │ └─✅─RunWorkflows handles empty workflow list (#26)
│ ├─☑️─Issue 25: Differentiate package manifests from execution snapshots
│ │ ├─✅─pkgManifest function exists (#25)
│ │ ├─✅─pkgManifest has correct parameters (#25)
│ │ ├─✅─pkgSnapshot function name is deprecated/removed (#25)
│ │ └─✅─pkgListFromManifest references correct function (#25)
│ └─☑️─Issue 19: Remove Legacy /site Explorer From workr
│ ├─✅─site/ directory does not exist (#19)
│ ├─✅─site-build.yaml workflow does not exist (#19)
│ ├─✅─site-deploy.yaml workflow does not exist (#19)
│ ├─✅─pkgdown-all.yaml has no Node/explorer steps (#19)
│ ├─✅─_pkgdown.yml has no explorer navbar entry (#19)
│ └─⚠️─.gitignore has no site/node_modules/ entry (#19)
├─█─Milestone: v1.1.0 (15 issues, 96 tests)
│ ├─☑️─Issue 72: Add FilterWorkflows() generic with ... filtering interface
│ │ ├─✅─FilterWorkflows.character filters single-value meta field (#72)
│ │ ├─✅─FilterWorkflows.character filters list-valued meta field (#72)
│ │ ├─✅─FilterWorkflows.character supports multiple allowed values (#72)
│ │ ├─✅─FilterWorkflows.character is case-insensitive (#72)
│ │ ├─✅─FilterWorkflows.character returns empty list for no match (#72)
│ │ ├─✅─FilterWorkflows.character excludes workflows missing the field (#72)
│ │ ├─✅─FilterWorkflows.character excludes workflows with NULL field value (#72)
│ │ ├─✅─FilterWorkflows.logical filters by TRUE (#72)
│ │ ├─✅─FilterWorkflows.logical filters by FALSE (#72)
│ │ ├─✅─FilterWorkflows.logical field lookup is case-insensitive (#72)
│ │ ├─✅─FilterWorkflows.default errors on unsupported value type (#72)
│ │ ├─✅─FilterWorkflows.numeric filters by single value (#72)
│ │ ├─✅─FilterWorkflows.numeric filters by multiple values (#72)
│ │ ├─✅─FilterWorkflows errors on unnamed ... argument (#72)
│ │ ├─✅─FilterWorkflows.logical excludes workflows with non-coercible Active value (#72)
│ │ ├─✅─FilterWorkflows.integer dispatches to numeric method (#72)
│ │ ├─✅─.keep_workflows warns and uses first key when meta has duplicate case-variant keys (#72)
│ │ ├─✅─MakeWorkflowList filters via ... character value (#72)
│ │ ├─✅─MakeWorkflowList filters via ... logical value (#72)
│ │ ├─✅─MakeWorkflowList applies multiple ... filters with AND logic (#72)
│ │ └─✅─MakeWorkflowList warns when ... filters leave empty list (#72)
│ ├─☑️─Issue 59: Implement `gsm.datasim` load provider
│ │ ├─✅─gsm.datasim provider adapts standard single-snapshot data and aliases (#59)
│ │ ├─✅─gsm.datasim provider tolerates standard config API drift (#59)
│ │ ├─✅─gsm.datasim provider uses latest longitudinal snapshot by default (#59)
│ │ ├─✅─gsm.datasim provider validates profile and study_type early (#59)
│ │ ├─✅─gsm.datasim provider handles edge-case scalar config values (#59)
│ │ ├─✅─gsm.datasim provider requires custom config for custom profile (#59)
│ │ └─✅─built-in providers are registered together (#59, #60, #61)
│ ├─☑️─Issue 58: Formalize `LoadData` / `SaveData` hook contract
│ │ ├─✅─RunWorkflow invokes environment-backed lConfig$LoadData (#58)
│ │ ├─✅─RunWorkflow accepts lConfig without data hooks (#58)
│ │ ├─✅─RunWorkflow resolves registered load providers (#58)
│ │ ├─✅─RunWorkflow resolves registered save providers (#58)
│ │ ├─✅─RunWorkflow errors on unknown registered load provider (#58)
│ │ ├─✅─RunWorkflow errors on invalid LoadData formals (#58)
│ │ ├─✅─RunWorkflow errors on invalid SaveData formals (#58)
│ │ └─✅─register_load_provider validates provider signatures (#58)
│ ├─☑️─Feature 53: Filter MakeWorkflowList() to active-only
│ │ ├─✅─.workflow_path resolves package path (#53)
│ │ ├─✅─.workflow_path errors on missing directory (#53)
│ │ ├─✅─.discover_yaml_files returns named character vector (#53)
│ │ ├─✅─ListWorkflows returns named character vector of yaml paths (#53)
│ │ ├─✅─ListWorkflows resolves strPackage (#53)
│ │ ├─✅─ListWorkflows errors on invalid strPath (#53)
│ │ ├─✅─ListWorkflows bRecursive = FALSE only returns top-level files (#53)
│ │ ├─✅─ListWorkflowNames returns AsIs character vector without .yaml (#53)
│ │ ├─✅─ListWorkflowNames includes all workflows regardless of Active (#53)
│ │ ├─✅─ListWorkflowNames resolves strPackage (#53)
│ │ ├─✅─MakeWorkflowList bActiveOnly = TRUE (default) excludes inactive workflows (#53)
│ │ ├─✅─MakeWorkflowList bActiveOnly = FALSE includes all workflows (#53)
│ │ ├─✅─MakeWorkflowList strNames = NULL with bActiveOnly = FALSE includes all workflows (#53)
│ │ ├─✅─.filter_yaml_files NULL strNames returns all (#53)
│ │ ├─✅─.filter_yaml_files exact match works (#53)
│ │ └─✅─.filter_yaml_files partial match works (#53)
│ ├─☑️─Issue 46: [workr] Workflow filename collisions silently overwrite
│ │ ├─✅─pull_workflows does not register missing files as collisions (#46)
│ │ ├─✅─pull_workflows warns on destination collisions by default (#46)
│ │ ├─✅─pull_workflows warns on nested destination collisions in directories (#46)
│ │ └─✅─pull_workflows warns and skips file-vs-directory structural collisions (#46)
│ ├─☑️─Issue 45: [workr] Snapshot silently skips packages that use inst/workflows (plural)
│ │ ├─✅─pull_workflows skips packages with no workflow directory (#45)
│ │ └─✅─pull_workflows warns when only inst/workflows exists (#45)
│ ├─☑️─Issue 43: [workr] Add testthat coverage for pull_workflows and resolve_package
│ │ ├─✅─resolve_package resolves explicit refs via mocked gh api (#43)
│ │ ├─✅─resolve_package uses date-based fallback when ref is not provided (#43)
│ │ ├─✅─resolve_package errors on malformed gh commit lookup response (#43)
│ │ ├─✅─resolve_ref_by_date falls back to default branch when latest release is missing (#43)
│ │ ├─✅─gh_list_contents parses directory entries from mocked gh api (#43)
│ │ ├─✅─pkgManifest writes manifest outputs with mocked GitHub resolution (#43)
│ │ ├─✅─pull_workflows dispatches file and directory entries (#43)
│ │ ├─✅─pull_workflow_file skips write when content lookup is Not Found (#43)
│ │ └─✅─pull_workflow_file writes decoded file when content is available (#43)
│ ├─☑️─Issue 67: `RunProject` regression tests + docs
│ │ ├─✅─github_artifact load provider ignores GITHUB_RUN_ID and honors latest_success in CI (#67)
│ │ ├─✅─github_artifact save provider stamps manifest run_id from GITHUB_RUN_ID (#67)
│ │ ├─✅─RunProject without phase configs preserves flat carry-forward behavior (#67)
│ │ ├─✅─RunProject supports a four-phase configured project scenario (#67)
│ │ ├─✅─RunProject retains fail-fast behavior by default (#67)
│ │ ├─✅─RunWorkflow allows LoadData-only and SaveData-only configs (#67)
│ │ ├─✅─RunWorkflow fails when spec-declared input is absent (#67)
│ │ ├─✅─RunWorkflows retains fail-fast behavior by default (#67)
│ │ └─✅─RunWorkflows continue-on-error records failures and runs later workflows (#67)
│ ├─☑️─Issue 66: Output shaping + optional transform
│ │ ├─✅─RunProject wraps and transforms phase output (#66)
│ │ └─✅─RunProject transform failures identify the transform reference (#66)
│ ├─☑️─Issue 65: Phase input assembly rules
│ │ └─✅─RunProject assembles phase input from config rules (#65)
│ ├─☑️─Issue 64: Per-phase `_config.yaml` schema + validator
│ │ ├─✅─RunProject validates per-phase _config.yaml schema (#64)
│ │ └─✅─RunProject rejects empty or whitespace-only output config strings (#64)
│ ├─☑️─Issue 63: Stabilize `RunProject` baseline
│ │ ├─✅─RunProject discovers phases in alphabetical order by default (#63)
│ │ ├─✅─RunProject runs strPhases in caller order, not sorted (#63)
│ │ ├─✅─RunProject errors when strPath is not a directory (#63)
│ │ └─✅─RunProject warns on empty phase folder and proceeds (#63)
│ ├─☑️─Issue 62: Hook hardening: end-to-end testing, authentication, and documentation
│ │ ├─✅─github_artifact load provider reports required Actions scope on auth failures (#62)
│ │ └─✅─hook providers round-trip data across runs (#62)
│ ├─☑️─Issue 61: GitHub Actions artifact load provider
│ │ ├─✅─github_artifact load provider restores data for an explicit run-id (#61)
│ │ ├─✅─github_artifact load provider resolves latest_success policy (#61)
│ │ ├─✅─github_artifact load provider errors with run-id and policy on missing artifact (#61)
│ │ ├─✅─github_artifact load provider warns and returns partial lData when payloads are missing (#61)
│ │ ├─✅─github_artifact load provider rejects payload paths outside bundle (#61)
│ │ ├─✅─github_artifact load provider restores NULL payload values (#61)
│ │ ├─✅─gh_actions_download_artifact_bundle clears stale extracted contents (#61)
│ │ └─✅─built-in providers are registered together (#59, #60, #61)
│ └─☑️─Issue 60: GitHub Actions artifact save provider
│ ├─✅─github_artifact save provider writes manifest and payload pair (#60)
│ ├─✅─github_artifact save provider clears stale bundle contents (#60)
│ └─✅─built-in providers are registered together (#59, #60, #61)
└─█─Milestone: <none> (2 issues, 11 tests)
├─☑️─Issue 34: Finalize inst/workflows and demo Shiny app for shinyapps.io deployment
│ ├─✅─03_AEKRI directory does not exist (#34)
│ ├─✅─03_KRI initData.R does not reference gsm.core::lSource (#34)
│ ├─✅─03_KRI initData.R does not reference PD domain (#34)
│ ├─✅─03_KRI initData.R does not reference clindata package (#34)
│ ├─✅─03_KRI initData.R returns Raw_SUBJ and Raw_AE (#34)
│ ├─🚫─03_KRI RunWorkflows completes without error using initData (#34)
│ └─✅─README contains link to hosted shinyapps.io demo (#34)
└─☑️─Feature 9: Create Test data to initialize workflows
├─✅─loadExample returns input data when initData.R is missing (#9, #26)
├─✅─loadExample loads initData.R and merges with lData (#9, #26)
├─✅─loadExample validates initData return type (#9, #26)
└─✅─loadExample does not create duplicate names on repeated calls (#9, #26)
# Issue state: 📥 = open, ☑️ = closed (completed), ⛔ = closed (won't fix)
# Test disposition: ✅ = passed, ❌ = failed, 🚫 = skipped
🟢 All issues have at least one test
🙈 10 issues with label "qcthat-nocov" were ignored
This report was generated by this GitHub Actions job.
Reports generated: 2026-07-17 19:21:12 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-17
pandoc 3.8.3 @ /opt/hostedtoolcache/pandoc/3.8.3/x64/pandoc
quarto 1.9.38 @ /usr/local/bin/quarto
─ Packages ───────────────────────────────────────────────────────────────────
package * version date (UTC) lib source
arrow 25.0.0 2026-07-16 [1] RSPM
askpass 1.2.1 2024-10-04 [1] RSPM
assertthat 0.2.1 2019-03-21 [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
bit 4.6.0 2025-03-06 [1] RSPM
bit64 4.8.2 2026-05-19 [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)
commonmark 2.0.0 2025-07-07 [1] RSPM
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.6 2025-04-21 [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.0.9000 2026-07-17 [1] Github (r-lib/gh@e5e7f37)
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.datasim 2.0.0 2026-07-17 [1] Github (Gilead-BioStats/gsm.datasim@2efb710)
highr 0.12 2026-03-06 [1] RSPM
htmltools 0.5.9 2025-12-04 [1] RSPM
httpuv 1.6.17 2026-03-18 [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
later 1.4.8 2026-03-05 [1] RSPM
lattice 0.22-9 2026-02-09 [3] CRAN (R 4.6.1)
lifecycle 1.0.5 2026-01-08 [1] RSPM
logger 0.4.2 2026-05-10 [1] RSPM
lubridate 1.9.5 2026-02-04 [1] RSPM
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
prettyunits 1.2.0 2023-09-24 [1] RSPM
processx 3.9.0 2026-04-22 [1] RSPM
promises 1.5.0 2025-11-01 [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-17 [1] Github (Gilead-Public/qcthat@e627805)
R6 2.6.1 2025-02-15 [1] RSPM
rappdirs 0.3.4 2026-01-17 [1] RSPM
rcmdcheck 1.4.0 2021-09-27 [1] any (@1.4.0)
Rcpp 1.1.2 2026-07-05 [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] any (@1.2.4)
shiny 1.14.0 2026-06-21 [1] RSPM
sourcetools 0.1.7-2 2026-03-28 [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
tictoc 1.2.1 2024-03-18 [1] RSPM
tidyr 1.3.2 2025-12-19 [1] RSPM
tidyselect 1.2.1 2024-03-11 [1] RSPM
timechange 0.4.0 2026-01-29 [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-17 [1] local
xfun 0.60 2026-07-09 [1] RSPM
xopen 1.0.1 2024-04-25 [1] RSPM
xtable 1.8-8 2026-02-22 [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.
──────────────────────────────────────────────────────────────────────────────