Story: Entity classification and drift baseline: redundant explicit properties
Table of Contents
This page documents a story in Sprint 25. It captures the goal, current status, acceptance criteria, and the tasks that compose it.
1. Goal
A model that binds to a variability profile should state only what it decides for itself. Many models also restate properties the profile already fixes to the same value. The two copies can drift apart, and the profile stops being the single source of truth.
This story removes that redundancy across the components in the drift gate's registry, keeps the genuine overrides, and proves every removal output-neutral by regeneration. It also adds the check to the component architecture audit, so later passes look for the same class of finding.
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent sprint | Sprint 25 |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-09-17 |
3. Acceptance
- Every profiled model in the known-drift-free registry is surveyed for explicit properties the bound profile also assigns.
- Every redundant line is removed, and every override is kept with its reason recorded.
- Each affected component regenerates byte-identical output, proven by
check_component_drift.py. - The removal class joins the manual checklist of the component architecture audit.
4. Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Remove explicit model properties the bound profile already fixes | DONE | 2026-09-17 | 2026-09-17 | Survey every profiled entity model in the known-drift-free registry and remove the explicit property lines whose value the bound profile already fixes, across analytics, compute, iam, refdata, reporting and synthetic. Keep the two recorded overrides (compute result has_change_reason_cache false, reporting report_definition has_workspace_id true), the structural properties profiles deliberately omit, and has_parent_id, which the generator reads from a place the profile does not write. Prove each removal output-neutral by regenerating the component. |
5. Decisions
- Scope the sweep to
KNOWN_DRIFT_FREE. An unregistered component cannot be proven by the drift gate, so its redundancy waits. has_parent_idstays explicit while the generator reads it at the entity root and the profile writes it into thesqlnamespace. The removal waits for a generator fix.- The check lives in the component architecture audit, not in the drift gate. The drift gate proves a component's output is unchanged; the audit asks whether the model states too much.
6. Out of scope
dqanddq-cpp. They carry the same redundancy but are not inKNOWN_DRIFT_FREE, and regeneration there already drifts for an unrelated template reason.- The generator fix for the
has_parent_idnamespace mismatch. The task records it as a finding.