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_id stays explicit while the generator reads it at the entity root and the profile writes it into the sql namespace. 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

  • dq and dq-cpp. They carry the same redundancy but are not in KNOWN_DRIFT_FREE, and regeneration there already drifts for an unrelated template reason.
  • The generator fix for the has_parent_id namespace mismatch. The task records it as a finding.

Emacs 29.3 (Org mode 9.6.15)