evidence_bundle.RdWrites the four qualification artefacts — installation qualification,
operational qualification, risk assessment and environment manifest — into
one directory, plus an index.html that links them and states the headline
numbers. This is the deliverable a QA reviewer or an auditor is handed.
evidence_bundle(iq, oq, risk, path = "valpack_evidence")A iq_record() object.
A oq_record() object.
An assess_risk() tibble.
Directory to write into; created if it does not exist.
A named character vector of the written file paths, invisibly.
Output is plain HTML and JSON: no rendering toolchain, no extra dependencies, opens from a file share on a locked-down validated desktop.
The OQ page carries a failure taxonomy: every failing unit grouped by the
cause its message evidences — missing suggested package, absent external resource, network, subprocess did not complete, or error in example.
A bare failure count is not a reviewable artefact; "13 of 140 failures are an
absent Suggests package and 46 are a subprocess that never finished" is.
Classification is by message wording and is deliberately conservative:
anything ambiguous is left in error in example, the bucket that reflects
worst on the library.
The index also states what the OQ did not cover: which types were
requested, the per-package timeout the run used, the skip share, how many
units the harness could not judge at all (status harness), how many
packages had no executed unit at all, how many packages were installed with
--install-tests, and that riskmetric — valpack's own hard dependency —
is qualified by valpack's test suite rather than by an examples-only OQ.
quick <- riskmetric::all_assessments()[c("assess_has_news", "assess_has_examples")]
iq <- iq_record(c("whisker", "jsonlite"))
oq <- oq_record("whisker", max_topics = 2)
#> ℹ Running examples for whisker
risk <- assess_risk(c("whisker", "jsonlite"), assessments = quick)
out <- evidence_bundle(iq, oq, risk, path = file.path(tempdir(), "evidence"))
#> ✔ Evidence bundle written to /tmp/RtmpZtJJJ6/evidence
basename(out)
#> [1] "iq.html" "oq.html" "risk.html" "manifest.json"
#> [5] "index.html"
file.exists(out)
#> [1] TRUE TRUE TRUE TRUE TRUE