Task: Bind ores.analytics entities to profiles; verify zero-diff regen
Table of Contents
This page documents a task in the Entity classification and drift baseline: ores.analytics story. It captures the goal, current status, acceptance, and any notes or results.
1. Goal
Survey every ores.analytics entity against the profile catalogue, rebind matches, regenerate, and require zero additional diff against the pre-rebind checked-in output.
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent story | Entity classification and drift baseline: ores.analytics |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-09-17 |
3. Acceptance
- Every entity discovered via the analytics-cpp catalogue entry is surveyed against all Variability Profiles.
- Every matching entity is rebound and regenerated with zero additional diff versus its pre-rebind checked-in output.
- The known service_find_by_uuid/service_find_by_code/service_find_prefix gaps on pricing_model_config, pricing_model_product, pricing_model_product_parameter, and pricing_engine_type are resolved as part of reaching zero drift.
- No-match entities are recorded with their actual feature values, not silently dropped.
- Full local build and ctest green after regeneration.
4. Plan
The bind was already on main when this task was picked up. It landed on 2026-09-11 under a different task in a different environment, and neither this task nor its story was reconciled afterwards, so both still read BACKLOG. The survey below records what was found. What remained to do was the tidy, the survey record, and the reconciliation of the two task records.
The tidy removes the per-entity :has_tenant_id: the entity and its
profile both set. Every other component bound so far carries the
:profile: alone; business_unit is the one recorded exception. It
keeps the structural properties its hierarchy needs, which no profile
assigns, and it keeps :has_parent_id: explicit because the generator
reads that feature at the entity root while the profile writes it into
the sql namespace. Analytics holds no hierarchy entity, so neither
case arises here.
The proof is the regeneration, not the reading. With the four models edited, regeneration changes no generated file: the diff is exactly the four model orgs and nothing else, and no untracked file appears. The pre-edit baseline was empty, so zero additional diff holds.
The build and the ctest suite are run after this commit by the user, who is driving builds in this session.
5. Notes
Survey of projects/ores.analytics/modeling, the modeling directory
of the analytics-cpp catalogue entry. One entry covers the whole
directory, so the survey runs once.
| File | Metatype | Disposition |
|---|---|---|
ores.analytics.pricing_engine_type.org |
entity | bound simple-lookup |
ores.analytics.pricing_model_config.org |
entity | bound uuid-identified-lookup |
ores.analytics.pricing_model_product.org |
entity | bound uuid-identified-lookup |
ores.analytics.pricing_model_product_parameter.org |
entity | bound uuid-identified-lookup |
ores.analytics.module.org |
module | excluded, structurally not an entity |
component_overview.org |
component | excluded, structurally not an entity |
No entity is a no-match and none needs an exception. All four resolved to a profile, and both profiles used carry a Physical-space table, so the eventing integration tests are enabled for all four.
The composite component ores.analytics holds four parts. Only api,
core and service are codegen surfaces that carry entities; quant
is a hand-written quantitative library with no entity models, and
nothing in it is codegen-eligible.
The three recorded starting-point wrinkles were already resolved
before this task started, and regenerating at the head of this branch
confirms it: service_find_prefix on pricing_engine_type,
service_find_by_uuid on the other three, and
service_find_by_code_column: name on pricing_model_config.
system_tenant_validation is a variability feature that no profile
assigns, so pricing_engine_type keeps it explicitly. That is the
correct shape, not a leftover.
6. Test Scenarios
Manual QA scenarios (scaffolded via compass add test_scenario, run
through the QA Validation Runner panel) that verify this task. Link
new ones here as they're created; the scenario doc itself links back
via its "Verifies task" field.
| Scenario | State | Notes |
|---|---|---|
7. PRs
| PR | Title |
|---|---|
| #2088 | [analytics,agile] Drop the redundant tenant flag and close the analytics bind |
8. Review
| Comment summary | File | Decision | Notes |
|---|---|---|---|
9. Result
The survey found the bind already done. All four analytics entities
carried a :profile: on main when this task started, and the
regeneration confirmed every one of them byte-identical to the
checked-in tree.
What this task changed is small and deliberate. It removed the
per-entity :has_tenant_id: true from the four models, because both
profiles already fix that feature to true and the explicit line was
redundant. It recorded the survey and its disposition per file. It
reconciled the superseded ad hoc task, which stays DONE because it
delivered the work through PR #1893.
The proof of the tidy is the regeneration. With the four models edited, regeneration moved no generated file. The diff was the four model orgs and nothing else, and no untracked file appeared. The pre-edit baseline was empty, so zero additional diff holds.
check_component_drift.py --component analytics-cpp reports no drift
on the committed tree.
Acceptance:
- Survey of every entity in the analytics-cpp catalogue entry: met.
The table in
* Notescovers all six modeling files. - Zero additional diff on regeneration: met, by the argument above.
- The three recorded service flag wrinkles: met. They were already resolved on main, and the regeneration confirms it.
- No-match entities recorded with their values: not applicable. No entity is a no-match, so nothing was dropped.
- Full local build and ctest green: the user runs both after this commit. This result does not claim a build or test outcome that this session did not observe.