## Summary - introduce a shared operator outcome taxonomy with semantic axes, severity bands, and next-action policy - apply the taxonomy to operations, evidence/review completeness, baseline semantics, and restore semantics - harden badge rendering, tenant-safe filtering/search behavior, and operator-facing summary/notification wording - add the spec kit artifacts, reference documentation, and regression coverage for diagnostic-vs-primary state handling ## Testing - focused Pest coverage for taxonomy registry and badge guardrails - operations presentation and notification tests - evidence, baseline, restore, and tenant-scope regression tests ## Notes - Livewire v4.0+ compliance is preserved in the existing Filament v5 stack - panel provider registration remains unchanged in bootstrap/providers.php - no new globally searchable resource was added; adopted resources remain tenant-safe and out of global search where required - no new destructive action family was introduced; existing actions keep their current authorization and confirmation behavior - no new frontend asset strategy was introduced; existing deploy flow with filament:assets remains unchanged Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #186
7.3 KiB
Data Model: Operator Outcome Taxonomy and Cross-Domain State Separation
This feature defines a shared semantic model rather than introducing a new business-domain table. The model below captures the entities that the implementation and guard coverage must agree on.
Entities
SemanticAxis
Represents one independent meaning dimension that operator-facing state is allowed to communicate.
Fields:
key(string): stable identifier such asexecution_outcome,freshness, orproduct_support_maturitylabel(string): human-readable axis name used in documentationdefinition(string): the exact semantic question this axis answersallowedValues(list): canonical operator-facing values allowed on this axisdefaultPresentationLevel(enum):primaryordiagnosticnextActionRequired(bool): whether non-green states on this axis must always carry action guidance
Validation rules:
- Each operator-facing primary state belongs to exactly one axis.
- Different axes must not be flattened into one unqualified label.
- Diagnostic-only axes cannot use warning or danger as their default severity.
TaxonomyTerm
Represents one canonical operator-facing term or phrase permitted by the taxonomy.
Fields:
term(string): canonical label shown to operatorsaxisKey(string): owning semantic axisreplaces(list): overloaded legacy terms or synonyms that must migrate awayrequiresQualifier(bool): whether the term must include a qualifier such as count, cause, or dimensionnotes(string): usage guidance and example contexts
Validation rules:
- A canonical term must have one meaning only.
- A term marked
requiresQualifieris invalid when used bare. - Legacy overloaded terms such as
Partial,Blocked,Missing, andUnsupportedmust map to one or more canonical replacements.
SeverityRule
Represents the shared meaning of severity colors and tones.
Fields:
severity(enum):danger,warning,info,success,gray,primarymeaning(string): semantic meaning of the severity across the productallowedAxes(list): axes where this severity is allowed as a primary stateforbiddenAxes(list): axes where this severity must not be usedoperatorExpectation(string): what the operator should infer from seeing the severity
Validation rules:
dangeris reserved for execution failure, governance violation, or material risk.warningis reserved for action-recommended or mixed-outcome primary states.grayis reserved for neutral, archived, not applicable, or explicitly non-actionable context.- Diagnostic-only states must not use
dangerorwarning.
PresentationClassification
Represents whether a state belongs in the operator's primary view or in diagnostics.
Fields:
level(enum):primaryordiagnosticactionability(enum):action_required,action_recommended,no_action_needed,context_onlyexplanationRequired(bool): whether helper text or a next-step reference is mandatorysupportsRawDetails(bool): whether raw technical detail may be shown as secondary detail
Validation rules:
- Every non-green, non-gray primary state requires explanation or an explicit no-action-needed note.
- Diagnostic classification never replaces the primary state for a surface that already exposes a primary state.
TaxonomyEntry
Represents the complete classification of one raw domain state into taxonomy semantics.
Fields:
domain(string): source domain such asoperation_run_outcomeorevidence_completenessrawValue(string): existing enum value or normalized source stateaxisKey(string): owning semantic axisprimaryLabel(string): operator-facing label to renderseverity(enum): resolved severity bandclassificationLevel(enum):primaryordiagnosticlegacyAliases(list): prior labels that must stop being usednextActionPolicy(enum):required,optional,nonediagnosticLabel(optional string): secondary label for detailed viewsnotes(string): human explanation of why the mapping exists
Validation rules:
- Every adopted raw state must have exactly one taxonomy entry.
classificationLevel = diagnosticforbidsseverity = warning|danger.nextActionPolicy = requiredmust be set for non-green, non-gray primary states.
AdoptionTarget
Represents a bounded surface or domain family included in the first implementation slice.
Fields:
key(string): stable target identifierfamily(enum):operations,baselines,restore,evidence,reviews,inventory_provider,verificationsourceArtifacts(list): enums, badge mappers, presenters, or views currently using overloaded semanticssurfaceTypes(list): examples such astable,infolist,notification,widget,helper_copypriority(enum):P0,P1,P2rolloutStage(int): ordered implementation stage
Validation rules:
- The first slice must include operations, baselines, restore, and at least one additional family.
- Each target must identify both shared-code adoption points and user-visible surfaces.
RegressionGuardCase
Represents one reusable guard or regression test category enforcing the taxonomy.
Fields:
name(string): guard case identifierassertion(string): invariant being enforcedscope(enum):unit,feature,architecturecoversAxes(list): axes touched by the casefailureSignal(string): what should cause CI to fail
Validation rules:
- The first slice must include guards for diagnostic severity misuse, valid-empty misclassification, freshness severity misuse, unqualified partial or blocked labels, and cross-tenant leakage in canonical views.
Relationships
SemanticAxis1-to-manyTaxonomyTermSemanticAxis1-to-manySeverityRuleby allowed or forbidden usageTaxonomyEntrybelongs to oneSemanticAxisTaxonomyEntrybelongs to onePresentationClassificationAdoptionTargetconsumes manyTaxonomyEntrymappingsRegressionGuardCasevalidates manyTaxonomyEntryandAdoptionTargetcombinations
Initial First-Slice Adoption Set
Operations
- Source artifacts:
OperationRunOutcomeBadge,OperationUxPresenter,SummaryCountsNormalizer, operation notifications - Primary axes involved:
execution_outcome,operator_actionability
Baseline snapshot semantics
- Source artifacts:
FidelityState,GapSummary,BaselineSnapshotFidelityBadge,BaselineSnapshotGapStatusBadge - Primary axes involved:
evidence_depth,data_coverage,product_support_maturity
Restore semantics
- Source artifacts:
RestoreRunStatusBadge,RestoreResultStatusBadge,RestorePreviewDecisionBadge,RestoreCheckSeverityBadge - Primary axes involved:
execution_lifecycle,item_result,operator_actionability
Evidence and review completeness
- Source artifacts:
EvidenceCompletenessState,TenantReviewCompletenessState, their badge mappers, canonical review surfaces - Primary axes involved:
data_coverage,data_freshness
Inventory or provider operability
- Source artifacts:
InventoryKpiBadges,PolicySnapshotModeBadge,ProviderConnectionStatusBadge,ProviderConnectionHealthBadge, verification status helpers - Primary axes involved:
product_support_maturity,operator_actionability,freshness