Changelog
pipdata 1.0.0
Breaking changes
Remove
copy_dlw_metadata()because its cross-release artifact and state-safety contracts were obsolete. No supported replacement metadata copier is introduced.pipdata_dlw_process(),pipdata_get_gmd(), andpipdata_validate_gmd()no longer acceptlogorsave_logarguments. Logging is unconditional and writes typed entries to"pipdata_log". Checkpoints are saved automatically at DLW and pipeline stage boundaries, andlog_report()now covers DLW acquisition and validation alongside survey cleaning and deflation.pipdata_get_gmd()andpipdata_validate_gmd()now invisibly return plain six-field stage results (stage,outcome,inventory,summary,failures, andartifacts).pipdata_dlw_process()now invisibly returns a plain aggregate with its acquisition and validation results, compact wrapper failures, and checkpoint facts. Outcomes aresuccess,partial,failed, orno_work; nested disabled or dependency-blocked stages usenot_run. Code that assigns these calls should inspectoutcomerather than expectingNULL.After argument and working-release preconditions succeed, DLW runtime failures now return inspectable failed or partial results instead of necessarily aborting the caller. Invalid arguments, missing setup preconditions, interactive cancellation, and interrupts still escape. This means an unassigned noninteractive script can continue after a failed DLW result and should use the returned outcome when continuation is conditional.
gmd_valid_invnow stores completed validation state only: available rows classifiedvalidorinvalid. Execution failures are absent and retry by absence.pd_process_data(), internal dependency execution, andpd_change_report()filter recognized legacy blank/unavailable control rows before planning; malformed completed rows fail validation instead of entering cleaning.
New features
Add exported
pd_run_pipeline(), a C2-authoritative incremental executor for the durableclean,metadata, anddeflatenodes. It reports cached, runnable, failed, and blocked units in a compact typed aggregate; performs keyed auxiliary invalidation; supports additive targeted force and explicit bootstrap; and resumes by a new authoritative replan without a persisted run cursor. Existing stage wrappers retain their signatures, aliases, positional behavior, and master-inventory return types. Production activation remains blocked pending signed Windows/SMB fencing and immutable unique-rename evidence.Add internal, versioned
pipeline_contextandpipdata_stage_resultS3 contracts and adopt them for deflation through a shared execution core. Independent survey failures are retained as compact condition records while integrity failures stop later writes. Public deflation signatures and return values are unchanged, and attempted completed runs again emit the documented compactdeflate_summary_infentry.Add a staged dependency manifest and read-only
pd_change_report()covering clean, auxiliary metadata, and exact-input deflation provenance. State is release/identity/repository scoped, immutable by generation, checksum verified, and protected by a fencing lease.Add explicit resumable legacy bootstrap controls (
bootstrapandbootstrap_entities) and exact data/metadata version loading for pipeline deflation. Missing provenance never triggers an implicit rebuild.
Refactoring
Acquisition now actively downloads five modules (
ALL,GROUP,HIST,GPWG, andBIN), while catalog and validation handling recognizes seven modules by also mappingASPIREandL. Each selected download forces replacement of the exact catalog filename. The acquisition inventory is reconciled to the authoritative current catalog, including no-worker runs, and unresolved current five-module rows retry whencheck_missing = TRUE.DLW persistence now treats thrown, null-version, and malformed write returns as uncertain. Acquisition inventory, validation report/inventory, direct inventory utility, and checkpoint paths reload durable state and compare canonical prior and intended content rather than assuming rollback.
Validation now calls the data-driven
dlw_validation_engine()for one survey at a time using all seven module mappings. Invalid classification counts as a completed validation, separately from execution failure. The next completedpipeline_versioncomes from the maximum persisted history for that survey, including superseded checksums; failed attempts consume no version.Validation inventory and report are reconciled to current available acquisition keys on every run. The report exactly covers completed inventory IDs, exact normalized rows are deduplicated, and report content is verified before the completed inventory commit. Unreadable or ambiguous history is not overwritten. Every catalog-listed history version must now be readable and schema-valid, report ordering uses all persisted columns, and optional-column compatibility includes coercion-relevant attributes.
pipdata_dlw_process()remains the supported DLW entry point and routes a custominv_gmd_listthrough acquisition, bootstrap, and validation. Validate-only execution never opens a menu; missing inventories under automation return failed stage results. Validation can continue after an acquisition failure when a trustworthy durable inventory remains. Aggregate outcome and summary logging come from stage facts, while checkpoint failure remains separate from the business outcome. After validation,pd_run_pipeline()is the supported incremental clean/metadata/deflate executor.log_report()now segments acquisition and validation independently from each latest attempt boundary, prefers exact completion entries, and confines legacy fallback to that segment. Dedicated DLW sections own all DLW discriminators; generic type and country sections exclude them to prevent stale-history leakage and double counting.
pipdata 0.0.1
New features
Add
pd_deflate_pipeline(): a batch orchestrator that iterates over the master inventory, deflates each survey viapd_deflation(), saves results to the"pip_deflated"stamp alias, updates the master inventory with deflation provenance columns (deflated,content_hash_deflated,aux_*_hash_at_deflation), and logs a structured summary. Supportsforce = TRUEto re-deflate already processed surveys.Add
force_surveysparameter topd_process_data(): enables surgical re-processing of specific surveys bysurvey_idorpip_id, without the global stamp versioning side effect offorce = TRUE. Mutually exclusive withforce.
Refactoring
- Introduce
dlw_validation_engine(): a single data-driven validation engine that replaces the 7 near-identical per-module DLW validation functions (dlw_validation_gpwg,dlw_validation_group,dlw_validation_bin,dlw_validation_hist,dlw_validation_all,dlw_validation_aspire,dlw_validation_l) anddlw_validation_skip. Engine behavior is driven byinst/extdata/validation_spec.yml(corrected selection semantics, per-check severity, hhid/pid gating, skiperror_stop). The legacy functions remain as deprecated wrappers calling the engine. Report output matches the legacy functions on the deterministic subset (golden fixture-tested viatests/testthat/fixtures/);assertion.id/error_dfremain non-deterministic per data.validator.