## Summary - add the Spec 204 platform vocabulary foundation, including canonical glossary terms, registry ownership descriptors, canonical operation type and alias resolution, and explicit reason ownership and platform reason-family metadata - harden platform-facing compare, snapshot, evidence, monitoring, review, and reporting surfaces so they prefer governed-subject and canonical operation semantics while preserving intentional Intune-owned terminology - extend Spec 204 unit, feature, Filament, and architecture coverage and add the full spec artifacts, checklist, and completed task ledger ## Verification - ran the focused recent-change Sail verification pack for the new glossary and reason-semantics work - ran the full Spec 204 quickstart verification pack under Sail - ran `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` - ran an integrated-browser smoke pass covering tenant dashboard, operations, operation detail, baseline compare, evidence, reviews, review packs, provider connections, inventory items, backup schedules, onboarding, and the system dashboard/operations/failures/run-detail surfaces ## Notes - provider registration is unchanged and remains in `bootstrap/providers.php` - no new destructive actions or asset-registration changes are introduced by this branch Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #234
12 KiB
Data Model: Platform Core Vocabulary Hardening
Overview
This feature introduces no new top-level persisted entity and no new mandatory database table. It formalizes a small set of internal platform contracts that clarify ownership, canonical naming, alias handling, and platform-facing subject descriptors across the existing governance, operation, and reason-translation seams.
Existing Persisted Truth Reused Without Change
Operation truth
operation_runs.typeoperation_runs.context- current run summary, monitoring, notification, and audit projections
These remain the persisted record of what ran. Spec 204 changes how platform code resolves and presents operation meaning, not the existence of those records.
Governance and baseline truth
baseline_profiles.scope_jsonbbaseline_snapshotsbaseline_snapshot_items- current findings and evidence payloads
- canonical Baseline Scope V2 from Spec 202
These remain the reference truth for platform-near compare and snapshot surfaces.
Domain-owned provider and policy truth
- Intune policy records and policy versions
- backup and inventory items with Intune-native metadata
- Graph-facing provider payloads and config-backed Intune policy-type catalogs
These remain intentionally domain-owned and may continue to use Intune-native terminology such as policy_type where that ownership is explicit.
New Internal Contracts
VocabularyBoundaryClassification
Type: internal enum
Purpose: give contributors one explicit three-way classification for touched concepts
| Value | Meaning |
|---|---|
platform_core |
Core product vocabulary owned by the platform itself |
cross_domain_governance |
Governance vocabulary shared across domains and workflows |
intune_specific |
Vocabulary that remains intentionally specific to the Intune domain |
PlatformVocabularyTerm
Type: internal governance record
Purpose: define one canonical platform noun or phrase and its ownership boundary
| Field | Type | Notes |
|---|---|---|
term_key |
string | Stable internal identifier for the term |
canonical_label |
string | Preferred operator-safe platform label |
canonical_description |
string | Maintained description of what the term means in platform context |
boundary_classification |
string | platform_core, cross_domain_governance, or intune_specific |
owner_layer |
string | platform_core, domain_owned, provider_owned, or compatibility_alias |
allowed_contexts |
array | Surfaces or layers where the term is valid |
legacy_aliases |
array | Historical names still recognized for compatibility |
alias_retirement_path |
string or null |
Documented path for retiring any legacy alias once rollout stabilizes |
forbidden_platform_aliases |
array | Names that must not be used as universal platform vocabulary |
RegistryOwnershipDescriptor
Type: internal governance record
Purpose: describe whether a registry or catalog is canonical platform vocabulary, domain-owned vocabulary, or compatibility-only
| Field | Type | Notes |
|---|---|---|
registry_key |
string | Stable internal identifier |
boundary_classification |
string | platform_core, cross_domain_governance, or intune_specific |
owner_layer |
string | platform_core, domain_owned, provider_owned, or compatibility_only |
source_class_or_file |
string | Class or config path that owns the registry |
canonical_nouns |
array | Terms this registry defines authoritatively |
allowed_consumers |
array | Surfaces allowed to consume the registry as-is |
compatibility_notes |
string or null |
Transitional notes where legacy or domain-specific terms remain exposed |
CanonicalOperationType
Type: internal operation catalog record
Purpose: describe one canonical platform operation code
| Field | Type | Notes |
|---|---|---|
canonical_code |
string | Preferred platform operation code |
domain_key |
string or null |
Optional domain grouping when the operation belongs to a specific subject family |
artifact_family |
string | Existing operation artifact grouping |
display_label |
string | Preferred operator-facing label |
supports_operator_explanation |
boolean | Mirrors existing catalog behavior |
expected_duration_seconds |
integer or null |
Existing duration hint |
OperationTypeAlias
Type: internal compatibility record
Purpose: map one stored or historical operation type value onto one canonical operation type
| Field | Type | Notes |
|---|---|---|
raw_value |
string | Stored or historical operation type value |
canonical_code |
string | Target canonical operation code |
alias_status |
string | canonical, legacy_alias, or deprecated_alias |
write_allowed |
boolean | Whether new writes may still emit this raw value |
deprecation_note |
string or null |
Optional explanation for reviewers or maintainers |
retirement_path |
string or null |
Required rollout note describing how and when the alias stops being writable or supported |
OperationTypeResolution
Type: internal derived value object
Purpose: represent resolved operation meaning for monitoring, filters, notifications, audit prose, and run detail surfaces
| Field | Type | Notes |
|---|---|---|
raw_value |
string | Original stored value |
canonical |
CanonicalOperationType |
Resolved canonical operation record |
aliases_considered |
array<OperationTypeAlias> |
Alias records considered during normalization |
alias_status |
string | Current alias state |
was_legacy_alias |
boolean | Convenience flag for diagnostics and test assertions |
PlatformReasonFamily
Type: internal enum
Purpose: classify translated reasons into one platform-owned family without changing domain-owned reason codes
| Value | Meaning |
|---|---|
authorization |
Access or RBAC boundary prevented the action or view |
prerequisite |
Required tenant, workspace, or configuration precondition is missing |
compatibility |
The requested workflow or subject family is not supported together |
coverage |
Evidence or scope coverage is insufficient to make a trustworthy claim |
availability |
The referenced object, source, or provider data is absent or unavailable |
execution |
Runtime execution failed or degraded |
ReasonOwnershipDescriptor
Type: internal derived record
Purpose: identify which layer owns the underlying reason code
| Field | Type | Notes |
|---|---|---|
owner_layer |
string | platform_core, domain_owned, or provider_owned |
owner_namespace |
string | Stable namespace such as provider.intune, governance.baseline_compare, access.rbac, or execution.runtime |
reason_code |
string | Original reason code value |
platform_reason_family |
string | PlatformReasonFamily value |
TranslatedReasonEnvelopeV2
Type: internal extension of the existing ReasonResolutionEnvelope
Purpose: provide one operator-safe explanation object with explicit ownership and family metadata
| Field | Type | Notes |
|---|---|---|
reason_owner |
ReasonOwnershipDescriptor |
New ownership metadata |
operator_label |
string | Existing translated label |
explanation |
string | Existing translated explanation |
actionability |
string | Existing actionability field |
next_steps |
array | Existing or derived remediation hints |
diagnostic_label |
string or null |
Existing technical summary |
trust_impact |
string or null |
Existing trust impact summary |
absence_pattern |
string or null |
Existing absence classification where relevant |
PlatformSubjectDescriptor
Type: internal derived value object
Purpose: normalize platform-near subject meaning without assuming universal Intune policy nouns
| Field | Type | Notes |
|---|---|---|
domain_key |
string | Canonical governance domain |
subject_class |
string | Canonical subject class |
subject_type_key |
string | Domain-owned subject family key |
subject_type_label |
string | Operator-facing subject family label |
platform_noun |
string | Preferred platform noun for the object |
display_label |
string | Subject label used on touched UI surfaces |
legacy_policy_type |
string or null |
Optional legacy Intune discriminator retained only for compatibility or diagnostics |
owner_layer |
string | Usually platform_core for the descriptor itself even when the underlying subject is Intune-owned |
SubjectDescriptorNormalizationResult
Type: internal derived record
Purpose: report how a platform-near raw payload was normalized into a PlatformSubjectDescriptor
| Field | Type | Notes |
|---|---|---|
descriptor |
PlatformSubjectDescriptor |
Required normalized descriptor |
source_surface |
string | Run detail, snapshot rendering, compare summary, evidence rendering, or similar |
used_legacy_alias |
boolean | Whether normalization had to fall back to policy_type or another legacy discriminator |
warnings |
array | Non-fatal compatibility warnings for diagnostics |
Relationships
- One
PlatformVocabularyTermmay describe manyRegistryOwnershipDescriptororPlatformSubjectDescriptorcontracts. - One
CanonicalOperationTypemay have manyOperationTypeAliasrecords. - One
OperationTypeResolutionis produced from exactly one raw operation type value and one resolvedCanonicalOperationType. - One
ReasonOwnershipDescriptorclassifies one underlying reason code and feeds oneTranslatedReasonEnvelopeV2. - One
SubjectDescriptorNormalizationResultproduces exactly onePlatformSubjectDescriptorfor one touched platform-near payload. - One registry or catalog should have exactly one
RegistryOwnershipDescriptorto keep ownership explicit.
Validation Rules
Platform glossary and registry ownership
- Every canonical platform term must have exactly one
owner_layer. - Every canonical platform term must have exactly one explicit
boundary_classification. - A term marked
compatibility_aliascannot be the primary label on new platform surfaces. - A registry marked
domain_ownedorprovider_ownedcannot be treated as a universal platform glossary without an explicit wrapper or translation step. - Any term with one or more
legacy_aliasesmust also define analias_retirement_path.
Operation vocabulary
- Every stored operation type value consumed by touched platform surfaces must resolve to exactly one canonical operation code.
- New writes on touched flows must not introduce a raw value marked
deprecated_alias. - Monitoring, filters, notifications, and audit prose must render canonical labels through
OperationTypeResolutionrather than raw strings.
Reason ownership
- Every translated operator reason must carry explicit
reason_ownermetadata. - A
platform_reason_familymust be derived without renaming the original domain-owned code. - Platform surfaces may summarize by family, but diagnostics must preserve the original owner namespace and code.
Platform subject descriptors
- Every touched platform-near compare, snapshot, or review payload must provide a
PlatformSubjectDescriptoror enough source data to derive one. legacy_policy_typemay be carried only as secondary compatibility data.- New or updated platform-facing summary labels must prefer
platform_noun,subject_type_label, ordisplay_labelover rawpolicy_type.
Transition Rules
Operation type transition
- Existing stored raw values remain readable.
- Canonical resolution happens at read and presentation time for touched surfaces.
- New or updated platform flows touched by this spec must emit canonical operation codes on new writes.
- Legacy aliases remain documented and test-covered as read-only compatibility paths for historical data and untouched flows until intentionally retired.
Reason translation transition
- Existing domain reason codes remain unchanged.
- Ownership and family metadata are added at translation time.
- Existing operator-safe explanation fields remain the primary rendering contract.
Platform-near subject transition
- Existing persisted baseline and evidence truths remain intact.
- Wrapper or presenter normalization adds
PlatformSubjectDescriptorsemantics first. - Legacy
policy_typeremains available only for compatibility, diagnostics, or Intune-owned surfaces.