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.