count_valid(): multiple unblind_codes only checked first code.
grepl(unblind_codes, desc) silently used only the first element when
a vector was passed. Fixed with a nested vapply loop that evaluates
every code independently.
collect_findings(): crashed on 0-row data frame.
Assigning a scalar to a 0-row data frame column with $<- caused
replacement has 1 row, data has 0. Fixed with an nrow > 0 guard;
0-row input now produces a valid summary_log entry with nu = 0.
build_reports(): all_open.xlsx could not be read back.
readxl::read_xlsx(range = "A3:L500000") threw an error on Windows
when the range exceeded the actual column count (10 columns). Replaced
with skip = 2 which auto-detects the column count.
build_reports(): date parsing failed for ISO string dates.
FIND DATE was stored as an ISO string ("2024-01-15") by openxlsx
but converted with as.numeric() only, producing NA for every row.
Added .parse_date_col() helper that tries Excel serial number, ISO
string, and ddMMMYYYY format in sequence.
build_reports(): [Was closed but re-appeared] applied to all rows.
The auto-note condition checked the already-reassigned status rather than
the original status from the previous run. Fixed by preserving
old_status before reassignment and checking it in the auto-note logic.
build_reports(): NA visit IDs failed to match in merge().
merge() in R does not match NA == NA. Fixed using a -1 sentinel
value before every merge, restored to NA after.
build_reports(): duplicate auto-tags accumulated across runs.
Re-running multiple times appended the same tag with different dates.
Fixed by stripping existing tags of the same type before appending the
updated one.
run_checks(): check scripts could not find collect_findings().
new.env(parent = baseenv()) cut off the rCoreGage namespace from
the check script's lookup chain. Fixed to new.env(parent = environment())
so all exported package functions are visible inside check scripts.
run_checks(): removed <<- global environment modification.
The previous local({}) + <<- pattern was replaced with
new.env() + sys.source() to comply with CRAN policy prohibiting
modification of the global environment.
\dontrun{} examples replaced with \donttest{}.@examples blocks are now fully self-contained using tempdir()
and system.file() no project setup required to run them.stringr removed from Imports field (was declared but never called).utils::read.csv() qualified; importFrom(utils, read.csv) added to
NAMESPACE.utils::globalVariables(".data") added in R/globals.R to suppress
R CMD check NOTE for dplyr column references.setNames() calls replaced with structure() and names() <- to
avoid undeclared dependency on the stats package.dplyr column references replaced with .data$ pronoun in
run_checks().DESCRIPTION: software name 'Excel' quoted; all acronyms (DM,
MW, SDTM, ADaM, CDISC) expanded; CDISC reference URL added;
Description field restructured to end with a complete sentence.@description in runner.R: check_<rule_set> angle brackets
replaced with check_RULESET to prevent LaTeX PDF build errors.vignettes/getting-started.Rmd: hardcoded C:/Projects path replaced
with tempdir().rules/trial/ and
rules/study/ folders.rule_registry.xlsx as the central check registry with Active,
report-type, and Rule_Set columns.create_project() scaffolds a complete project folder structure.openxlsx.outputs/feedback/ folder.