R/mergeNULISAseq.R
extract_assay_names.Rd`readNULISAseq.R` defaults an RQ run's `ExecutionDetails$Assay` to `"NULISAseq"` when its XML has no `<Assay>` node, gated to RQ only (`!AbsAssay`) - an AQ run with no `<Assay>` node arrives here as a true `NULL`. This function applies the same default uniformly at the merge boundary, regardless of AQ/RQ or of *why* the value is absent (`NULL`, zero-length, `NA`, or blank - `readNULISAseq()` trims `<Assay>` but only converts zero-length values to `NULL`, so a whitespace-only node arrives here as `""`). `"NULISAseq"` is a real, comparable assay name after this point - never a distinct "unknown" bucket. Shared by `check_assay_type()` and `assay_identity()` so the two cannot drift on what counts as "nothing reported".
extract_assay_names(ExecutionDetails)Character vector of raw assay names, one per plate; never `NA` - absence in any form becomes the literal string `"NULISAseq"`.