Parameter data model (DCM2/CDFX) for synarius-core v0.5¶
Status¶
- Status:
Draft concept (hardening iteration)
- Supersedes:
parameters_data_model_dcm2_cdfx_v0_4.rst- Scope:
ownership and mutation safety hardening
1. Purpose of this iteration¶
This iteration keeps the existing architecture and hardens two critical rules:
data_setownership of mutable state.ndarray exposure safety for guarded-write integrity.
No redesign is introduced.
2. Hard ownership rule (normative, unambiguous)¶
Definitions:
data_source: imported external artifact metadata.data_set: mutable working parameter state.
Normative ownership:
All mutable parameter state MUST be owned by
data_set_id.data_sourceMUST NEVER own mutable parameter state.Any schema/API path that implies mutable-state ownership by
data_sourceis invalid in this model.
Operational implications:
All mutable parameter rows (base + detail tables) MUST be addressable by
data_set_id.data_sourcereferences are informational/provenance linkage only.Query and mutation APIs MUST resolve mutable state through dataset scope.
Rationale:
Prevents dual ownership, inconsistent updates, and ambiguous query semantics.
3. Guarded-write integrity vs ndarray mutability¶
Problem statement:
numpy.ndarrayis mutable.Returning mutable ndarray references can bypass setter/guard logic.
Normative safety rule:
Repository MUST NOT expose mutable ndarray references that can bypass guarded mutation.
Allowed read return modes:
read-only ndarray view (
arr.flags.writeable = False), ordefensive copy.
Forbidden behavior:
Returning writable references to repository-owned arrays.
Any mutation path that changes persistent state without guarded setters/commands.
Mutation contract:
Persistent updates MUST occur only through guarded mutation APIs (CLI/GUI parity unchanged).
CLI and GUI MUST use the same guarded setter paths.
4. Deterministic error behavior (applies to both hardening points)¶
Violations of ownership or ndarray safety rules MUST raise deterministic errors.
Silent fallback, implicit correction, or hidden mutation MUST NOT occur.
5. Compatibility with prior iteration¶
All v0.4 rules remain in force unless tightened by this document.
In particular, unchanged:
parametersas API/facade,repository abstraction,
virtual
cal_paramattributes,guarded writes,
dataset-centric consistency,
replayable deterministic command logging.
6. Current implementation alignment¶
Current core implementation aligns with this hardening as follows:
ParametersRepositoryis DuckDB-backed and used as the canonical mutable-state backend.Runtime default is process-local in-memory DuckDB (no shared external DB handle in normal operation).
ndarray reads at repository boundaries are returned as copy or explicitly read-only arrays.
Guarded mutation path remains mandatory for persistent changes.
7. DCM metadata mapping (implemented subset)¶
The current DCM importer intentionally supports a focused subset for deterministic ingest. Besides numeric payload and axis points, the following metadata is mapped:
Parameter-level
LANGNAME->display_nameEINHEIT->unitVAR/FUNKTION->source_identifier(concatenated key/value parts)
Axis-level
LANGNAME_X-> axis 0 nameLANGNAME_Y-> axis 1 nameEINHEIT_X-> axis 0 unitEINHEIT_Y-> axis 1 unit
Storage/model surface:
Parameter metadata remains in
parameters_all.Axis metadata is stored in
parameter_axis_metakeyed by(parameter_id, axis_index).Runtime virtual attributes expose these fields as
xN_nameandxN_unit(withNin1..5) for CLI/GUI parity.
Behavior rules:
Missing metadata is represented as empty string.
Metadata parse is case-insensitive by keyword.
For malformed recognized metadata lines (keyword without value), parsing fails deterministically.
Existing DCM files without metadata remain valid and import-compatible.