dcc_check(), dcc_run(), and dcc_template() no longer default their
write destination to the working directory. output_dir and path are now
required; calling without them raises the package's own error instead of
writing to getwd(). Existing calls that pass a destination are unaffected.dcc_run() validates output_dir as one non-empty string before any work
starts.DESCRIPTION follow CRAN's quoting convention: only
third-party software names are single-quoted; file formats such as CSV,
JSON, YAML, and HTML are not.code and detector_id; range checks now report
INVALID_NUMERIC instead of silently coercing invalid values to missing.dcc_dispositions() with one terminal state per finding and make
reconciliation verify those states against audit evidence.NA totals for entirely missing scored rows and validate custom
scoring return type and length.dcc_run() outputs atomically; manifest and other failures create a
failed diagnostic directory and cannot be returned as success.dcc_import() canonical
layer with dictionaries, explicit missing states, import-plan hashes, and
source-aware conversion errors.dcc_capabilities()$formats now reports registry status, extensions,
backend, semantics, and limitations; dcc_doctor(formats = "all") checks
backend versions and platform constraints.dcc_plan contract and published plan Schema;
protected bilingual dcc_template() workbook; exact Excel/JSON parsing with
cell coordinates or JSON Pointers; non-mutating dcc_check() diagnostics;
additive dcc_run(plan =) support; and synchronized dcc_help() guidance.dcc_report_model() as a validated single source for three audience
renderers: bilingual redacted staff Excel/HTML/text, complete statistical
tables and methods with SHA-256 manifests, and deterministic versioned
machine JSON/JSONL with bundled schemas.dcc_run() can atomically publish selected staff/, statistical/, and
machine/ bundles. Run manifests expose report lifecycle states, common
counts and hashes, and retain cleaning evidence on renderer failure. PDF is
optional and is not generated by the base contract.pass; automated preparation cannot be
reported as usability success, and staff-study status does not block release.IMPORT_SOURCE_MISSING and IMPORT_SHEET_REQUIRED before import, and
dcc_rerun() can reproduce manifests whose rules came from strict JSON or
Excel plans through the same canonical import compiler.R CMD check NOTEs with an exact machine-readable allowlist: only
the CRAN first-submission NOTE (cran_new_submission) is non-actionable;
every other NOTE remains release-blocking.Additive-contracts release: machine-readable capabilities and formal schemas for AI callers, plus a one-command workflow and structured validators for survey staff. Every change is additive; no 1.0.x call changes shape.
dcc_run() runs the whole Detect -> Execute -> Report pipeline from a
dcc_config() and writes a fixed output layout (cleaned-data.csv,
findings.xlsx, audit-log.csv, the two HTML reports, manifest.yaml,
run-summary.txt). Preview is the default mode and the raw input file is
never modified in any mode. dcc_run_files() lists what was written.dcc_read_config() reads an Excel cleaning-plan workbook into a
dcc_config(), so survey staff configure a run in a spreadsheet instead of
YAML; dcc_write_config_template() writes a starter workbook.dcc_apply_codebook() applies a declarative codebook (rename, recode,
missing declaration, type, labels, roles) with a dry_run preview that
shares one planner with the apply path, so a change is previewed exactly as
applied. The raw input is never overwritten.skip_logic rule marks skipped items as not administered so
the missing-items detector no longer counts a legitimately skipped item as
missingness.dcc_config() bundles rules, actions, an id column, and items.dcc_validate_rules(), dcc_validate_data(), dcc_validate_config(), and
dcc_doctor() return a structured dcc_validation report (code,
severity, field, affected rows, and a suggested fix) and change
nothing. dcc_run() validates before it detects or executes.dcc_capabilities() returns a versioned, deterministic document of every
feature (with Stable/Experimental/Planned status and since), rule
type, action type, and input format, plus the operations DCC does not
support. The action-type and format lists are the same source of truth the
engine uses, so the document cannot drift from the implementation.dcc_schema() returns published draft-07 JSON Schemas (installed under
inst/schemas/) for a finding, an audit-log row, a rule file, an action map,
and a manifest.dcc_unhandled() (a result's unhandled findings), dcc_item_map() and
dcc_mapping_findings() (a dcc_map_forms() result's item map and mapping
problems).AI_USAGE.md: the approved public functions and the safe
capabilities -> validate -> preview -> execute -> reconcile -> export ->
verify flow for AI systems.Audit-correctness and format-reliability release. Every finding now has a
stable identity that every audit row and reconciliation joins on exactly, and
every supported input format is certified. All changes are additive to the
public schemas; no valid dcc_*() call changes shape.
finding_id (run + check + record +
variable + occurrence). dcc_detect() and dcc_detect_chunked() derive the
run prefix from the rule and source-file hashes, so the same data and rules
reproduce the same identities.dcc_execute() validates the whole plan before any data changes: unknown
action IDs, unmapped recodes, missing or duplicated record IDs, and
cell-level actions on group-level findings are now errors instead of silent
degradations. Each audit row carries the exact finding_id it came from.result$unhandled
rather than being silently auto-flagged, so an unhandled finding can never
be reported as handled. (default is retained for call compatibility but no
longer auto-dispositions.)dcc_reconcile() joins audit rows to findings on finding_id only and
assigns each finding one terminal status (changed, excluded,
flagged, or unhandled); an audit row with no matching finding raises a
dcc_reconcile_error. The loose record_id + check_id matching and the
unreconciled_changes attribute are gone.dcc_detect_chunked() infers the separator from the extension (sep = NULL
gives a tab for .tsv, a comma otherwise) and locks first-chunk column
types via a data.table-compatible colClasses map, so chunked runs are
warning-free on exact chunk multiples, later all-NA chunks, quoted
delimiters, embedded newlines, and latin1 input.writexl to
Suggests and to the CI dependency set.First stable, CRAN-targeted release. The public API -- the exported dcc_*
functions and the dcc_findings and audit-log schemas -- is now stable;
breaking changes to either schema will be major releases.
vignette("dcc-pipeline"), covering the
Detect -> Execute -> Report workflow.\examples coverage for every exported function
(dcc_detect_chunked(), dcc_manifest(), dcc_rerun()).DESCRIPTION, and documented external dependency
copyright boundaries in inst/COPYRIGHTS.First package release, covering the full Detect -> Execute -> Report workflow.
dcc_read() multi-format, multi-encoding input layer; the dcc_data
container with a provenance chain; dcc_l0_diagnose() structural
diagnostics.dcc_rules() / dcc_detect() declarative YAML rule engine and the five
response-quality detectors (missing items, straight-lining, response time,
trap items, score anomalies), producing the dcc_findings object.dcc_execute() execution engine with a cell-level audit log; dcc_score()
answer-key scoring; dcc_map_forms() multi-form item-bank alignment.dcc_report() dual-layer HTML reports, dcc_reconcile() closed-loop
verification, dcc_trace() cell lineage, and dcc_manifest() /
dcc_rerun() manifest-based reproduction.dcc_detect_chunked() larger-than-memory detection with an adaptive
CSV/Arrow backend, plus CI performance benchmarks.