9.1 KiB
Data Model: Cross-Domain Progress Indicator Semantics Audit
Date: 2026-05-06
Branch: 278-cross-domain-indicator-audit
Overview
This slice introduces no runtime persistence, no new application DTO layer, and no new state family. The package defines documentation-only audit artifacts over existing repo-real cues so later specs can build on one explicit inventory and standards delta.
Reused Source Truth
1. Indicator Source Anchor
Persistence: none, repo source reference only
Owner: current documentation and code seams already present in the monorepo
| Field | Type | Required | Notes |
|---|---|---|---|
repo_path |
string | yes | Absolute or repo-relative file path to the source seam |
source_type |
string | yes | standard, spec, presenter, widget, service, builder, blade, or other-code |
surface_name |
string | yes | Human-readable surface or seam name |
domain |
string | yes | Ops, inventory, backup, review, baseline, provider posture, tenant summary, or similar |
route_context |
string | no | Known current route or shell context when relevant |
notes |
string | no | Why this anchor matters to the audit |
Behavior rules:
- Source anchors are audit evidence only in this slice.
- Adding an anchor to the audit does not imply that the file will be changed.
- The audit must capture enough anchors to explain the current cross-domain drift without widening into unrelated domains.
2. Related Spec Guardrail
Persistence: none, repo context only
Owner: current spec package
| Field | Type | Required | Notes |
|---|---|---|---|
spec_id |
string | yes | Existing adjacent spec number |
relation |
string | yes | context-only, guardrail, or follow-up dependency |
note |
string | yes | What the audit must preserve or avoid reopening |
out_of_scope_for_this_slice |
boolean | yes | Always true for this package |
Required rows:
266268270271272
Derived Audit Artifacts
3. Indicator Inventory Entry
Persistence: none, documentation artifact only
Owner: audit inventory bundle
| Field | Type | Required | Notes |
|---|---|---|---|
entry_id |
string | yes | Stable audit-local identifier |
source_anchor_ref |
string | yes | Link to the source anchor entry |
surface |
string | yes | The visible surface or seam where the cue appears |
domain |
string | yes | Product domain owning the cue |
visible_cue |
string | yes | Label, wording, or short description of the cue |
visual_pattern |
string | yes | Badge, percentage, bar, KPI stat, helper text, summary row, empty-state signal, or similar |
data_source |
string | yes | Current repo-real truth feeding the cue |
calculation_basis |
string | yes | How the cue is currently derived, or not explicit when unclear |
semantic_category |
string | yes | Exactly one allowed category from the list below |
determinism |
string | yes | determinate, indeterminate, or unknown |
scope_mode |
string | yes | tenant-prefiltered, tenantless-aggregate, workspace-aggregate, or supporting-context |
audience_mode |
string | no | customer-readable, operator-msp, support-platform, mixed, or not-applicable |
likely_user_reading |
string | yes | What an operator or reviewer is likely to infer from the cue |
misunderstanding_risk |
string | yes | Risk note describing why the cue may mislead |
disposition |
string | yes | Exactly one bounded recommendation from the disposition set below |
follow_up_lane |
string | no | Required for every disposition except keep as-is; values come from the follow-up map lane set |
related_guardrails |
array | no | Adjacent specs or standards rules that constrain follow-up work |
notes |
string | no | Extra explanation or uncertainty |
Validation rules:
- One cue gets exactly one inventory entry unless the surface shows multiple visibly separate cues.
- One inventory entry gets exactly one semantic category.
- One inventory entry gets exactly one disposition.
follow_up_laneis required whendispositionis anything other thankeep as-is.unknown/ambiguousis the fallback category when the current repo truth cannot support a more precise category safely.
4. Semantic Category
Persistence: none, documentation-only enum
Owner: audit vocabulary
Allowed values:
execution progressactivity statecoveragecompletionhealthreadinessriskpressureusagecapacityscoregeneration stateunknown/ambiguous
Behavior rules:
- Categories are documentation-only in this slice and do not create new runtime state.
- Categories must remain mutually exclusive at the cue level.
- A visually similar pattern on two surfaces may map to different categories when the underlying truth differs.
5. Recommendation Disposition
Persistence: none, documentation-only enum
Owner: audit recommendation layer
Allowed values:
keep as-iscopy-only clarificationstandards clarificationproduct decisioncontract follow-upshared-component follow-upmigration follow-updefer
Behavior rules:
- Dispositions describe the next bounded action, not the full implementation plan.
keep as-isis allowed only when the cue is already semantically honest.copy-only clarificationandstandards clarificationshould normally route to thestandards patch lane.contract follow-up,shared-component follow-up, andmigration follow-upmust map to their matching follow-up lanes.
6. Standards Delta Rule
Persistence: none, documentation artifact only
Owner: standards-delta bundle
| Field | Type | Required | Notes |
|---|---|---|---|
rule_id |
string | yes | Stable rule identifier inside the audit package |
area |
string | yes | allowed-categories, determinate-progress, freshness, wording, dashboard, anti-pattern, or provider-boundary |
current_gap |
string | yes | What the current repo does not state clearly enough |
proposed_guidance |
string | yes | Intended standards delta wording |
target_doc |
string | yes | Expected future standards target, normally docs/ui/tenantpilot-enterprise-ui-standards.md |
follow_up_lane |
string | no | Usually standards patch lane, but may point elsewhere when the gap cannot be solved by documentation alone |
7. Follow-Up Map Entry
Persistence: none, documentation artifact only
Owner: follow-up map bundle
| Field | Type | Required | Notes |
|---|---|---|---|
lane |
string | yes | One of the bounded lane names below |
purpose |
string | yes | What this lane exists to solve |
out_of_scope_for_this_slice |
boolean | yes | Always true in this package |
trigger_cues |
array | yes | Inventory entries or cue families that justify the lane |
likely_repo_surfaces |
array | yes | Docs or code anchors the later spec will probably need |
seed_questions |
array | no | Questions the later spec must answer before implementation |
Required lane values:
standards patch lanemetric/indicator contract foundationshared indicator component systemquality gate lanedomain migration lane
8. Audit Bundle
Persistence: none, documentation artifact only
Owner: current spec package
| Field | Type | Required | Notes |
|---|---|---|---|
inventory |
array | yes | List of Indicator Inventory Entry objects |
standards_delta |
array | yes | List of Standards Delta Rule objects |
follow_up_map |
array | yes | List of Follow-Up Map Entry objects |
related_spec_guardrails |
array | yes | Context-only guardrails from existing adjacent specs |
review_outcome_class |
string | yes | Current prep convention outcome class |
workflow_outcome |
string | yes | Current prep convention workflow outcome |
test_governance_outcome |
string | yes | Current prep convention test-governance outcome |
Derived Rules
| Rule | Derived Behavior |
|---|---|
| One cue, one meaning | Every visible cue must map to exactly one semantic category |
| One cue, one next action | Every visible cue must map to exactly one disposition |
| Scope is first-class | Every cue must record whether it looks tenant-prefiltered, tenantless aggregate, workspace aggregate, or only supporting context |
| Ambiguity is explicit | Unknown denominator, freshness, or scope becomes risk documentation, not a guessed category |
| Follow-up work stays separate | Contract, component, quality-gate, and migration work remain distinct later lanes |
| Audit outputs stay docs-only | No runtime table, code path, or presenter becomes part of this slice |
Boundaries Explicitly Preserved
- No new runtime source of truth is introduced.
- No shared runtime contract, component, migration, chart, or score engine is introduced.
- No existing presenter, widget, service, or Blade surface is rewritten in this slice.
- Product backlog docs may be referenced by the follow-up map, but the audit bundle itself remains the primary output.