Story: Entity classification and drift baseline: ores.dq

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

Bring ores.dq to the same proven state as the ores.refdata pilot: every codegen-eligible entity (discovered once, under projects/ores.dq/modeling – the dq and dq-cpp catalogue entries share the same modeling_dir and no longer have a live legacy-JSON split, so this is one survey, not two) bound to a profile or recorded as a genuine no-match, zero-diff regeneration verified, and any real gap the check surfaces fixed rather than skipped. Once trusted, dq and dq-cpp are added to the CI regeneration-drift check so this component can never silently drift again.

2. Status

Field Value
State DONE
Parent sprint Sprint 25
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-08-04

3. Acceptance

  • Every ores.dq entity is bound to a matching Variability Profile, or recorded as a genuine no-match with a documented reason (per the pilot's Notes precedent).
  • Every rebound entity is regenerated and diffed against its pre-rebind checked-in output; zero diff is the pass condition, and any non-zero diff is fixed (profile catalogue, matching logic, or a real pre-existing template/model bug), not worked around.
  • Full local build clean, validate_schemas.sh green, full ctest suite green after regeneration.
  • check_component_drift.py –components is extended to include dq and dq-cpp, and the refdata-codegen-drift CI job (.github/workflows/pr.yml) is updated so future PRs touching ores.dq fail on any regeneration drift.
  • The superseded ad hoc task 'Apply safe drift to dq-cpp' (doc/agile/versions/v0/sprint_25/refactor_codegen_cpp/task_apply_safe_drift_dq.org) is marked ABANDONED, pointing here.
  • The known starting-point wrinkles already recorded for dq-cpp (service_find_by_uuid/service_find_by_code on dataset_bundle; HexPrefix model typo) are resolved as part of reaching zero drift, not left outstanding.

4. Tasks

Task State Start End Description
Bind ores.dq entities to profiles; verify zero-diff regen DONE 2026-08-04 2026-08-08 Implement profile binding for ores.dq's org-mode entity set (dq and dq-cpp catalogue entries share the same modeling_dir), rebind every matching entity, regenerate, and confirm byte-identical output, following the ores.refdata pilot method exactly.

5. Decisions

  • Consolidated all ores.dq-owned entities' Qt layer into a single ores.qt.dq plugin rather than continuing to grow the interim ores.qt.data_management stepping-stone plugin – DQ entities belong in the DQ plugin, no exceptions, to keep variability under control. ores.qt.data_management is deleted entirely as a result.
  • Migrated the 4 lookup_entity holdouts (lei_entity, lei_relationship, report_definition, synthetic_fx_spot_config) onto domain_entity rather than patching lookup_entity's C++ generation further – lookup_entity is being retired, not maintained (per task DDBD522D's earlier, explicitly-abandoned attempt at the latter).
  • History browsing for every newly-commissioned entity routes through the generic HistoryDialog plus the shared history/diff registries, not new hand-written per-entity dialogs.

6. Out of scope

Emacs 29.3 (Org mode 9.6.15)