METHOD / DATA
From source record to reproducible dataset.
OpenDeco preserves what a source actually contains, records every transformation and separates source facts from normalized or derived fields.
CautionNo dataset has been acquired
Source acquisition
Every source begins with an acquisition record: where it came from, when it was obtained, what access terms apply, who owns the source material and whether redistribution is permitted. A citation alone is not enough to describe how OpenDeco obtained the data used in an analysis.
In this repository today
OpenDeco implements the 14 acquisition states spec 25 names, and its 13 provenance fields are typed so a record cannot be built while one of them is unanswered. An absence carries one of 6 reasons, so a field nobody has looked for reads differently from one that was sought and found to be missing.
No acquisition record is written to a database yet. Migration 0008 defines the tables and their guards; the repository layer between the two is unwritten.
Immutable originals
Original files are hashed and preserved in protected raw storage when rights permit. Normalization never overwrites the source object. If a corrected source is obtained later, it becomes a new acquisition and the relationship is recorded.
In this repository today
The raw archive seals bytes at a key and refuses to reseal that key with different bytes. It exposes no delete, no replace and no overwrite, and a test asserts those method names are absent, so a later addition fails the suite. Postgres repeats the rule: the preserved-raw table is append-only by trigger and by grant.
Canonical exposure schema
OpenDeco converts heterogeneous source formats into a canonical exposure representation so models can be evaluated consistently. The canonical layer records the original identifiers and transformation lineage needed to trace a normalized field back to its source.
Units and pressure reference
Pressure, depth, altitude, time and gas values are stored in canonical units with their reference conventions made explicit. Conversion is mechanical and recorded. OpenDeco does not treat two pressure values as equivalent until their reference and units are known.
In this repository today
ADR-0007 fixes the canonical units that cross every boundary: absolute pressure in pascals, time in seconds, gas content as a decimal fraction. Depth is a derived display view, reached through a conversion constant the source has to name.
A pressure column with no stated reference frame is unresolvable, and it is never assumed to be absolute. Unit ambiguity is a hard failure in quality control, because an unresolved unit yields a number that stays physically plausible all the way to a chart.
Missing data
Missing values remain missing unless a documented derivation is scientifically justified. OpenDeco does not interpolate profile resolution, invent gas switches or infer outcome timing merely to satisfy a downstream model interface.
In this repository today
An importer that reconstructs profile shape has to record the assumption it used. Where a source gives only the endpoints of a segment, the segment is not marked reconstructed and the dataset version carries a missing-resolution flag.
Outcome labels
Exposure-only records, self-reported symptoms, medically assessed outcomes, experimental outcomes and VGE or Doppler observations remain distinct. They are not collapsed into a single DCS flag.
Licensing and access
A dataset can be scientifically useful even when the raw records cannot be republished. OpenDeco therefore separates metadata visibility, internal research access and public redistribution rights.
Quality control and release
Normalized datasets pass schema, unit, range, duplication and provenance checks before they can be frozen for a research release. Corrections create new versions rather than silently changing released inputs.
In this repository today
All 15 checks spec 113 lists are implemented, each one runnable alone and each one seen failing in the test suite. A gate with nothing in scope reports as not applicable, which is a separate result from a pass: a gate that looked at no records has verified nothing.
Freezing a dataset version is a Class 2 command. No console operator can issue one today.