## Summary - add the shared resolved-reference foundation with registry, resolvers, presenters, and badge semantics - refactor related context, assignment evidence, and policy-version assignment rendering toward label-first reference presentation - add Spec 132 artifacts and focused Pest coverage for reference resolution, degraded states, canonical linking, and tenant-context carryover ## Verification - `vendor/bin/sail bin pint --dirty --format agent` - focused Pest verification was marked complete in the task artifact ## Notes - this PR is opened from the current session branch - `specs/132-guid-context-resolver/tasks.md` reflects in-progress completion state for the implemented tasks Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #161
7.7 KiB
7.7 KiB
Data Model: GUID Context Resolver & Human-Readable Reference Presentation
Overview
This feature adds no new database tables. It introduces an application-layer reference model that normalizes how user-visible references are described, resolved, and rendered across Filament resources and related-context sections.
Entities
1. ReferenceDescriptor
Represents the structured input passed into the shared resolver layer.
| Field | Type | Required | Notes |
|---|---|---|---|
referenceClass |
string | Yes | Explicit class such as policy, policy_version, baseline_snapshot, operation_run, group, role_definition, or unsupported. |
rawIdentifier |
string | Yes | Canonical raw ID, GUID, key, or source token preserved as evidence. |
workspaceId |
int|null | No | Required when the target is workspace-owned or when workspace-scoped authorization is needed. |
tenantId |
int|null | No | Required when the target is tenant-owned or provider-backed in tenant scope. |
sourceType |
string|null | No | Calling surface or domain source, such as finding, baseline_snapshot, or assignment_target. |
sourceSurface |
string|null | No | Rendering context such as detail_section, detail_header, or list_row. |
fallbackLabel |
string|null | No | Safe operator-facing label derived from source payload when authoritative lookup is unavailable. |
linkedModelId |
int|null | No | Optional internal record ID when the caller already knows the local model. |
linkedModelType |
string|null | No | Optional model class or logical model name paired with linkedModelId. |
context |
array<string, mixed> | No | Safe source metadata used for best-effort enrichment and target construction. |
Validation rules:
referenceClassmust be from the supported registry or explicitly markedunsupported.rawIdentifiermust be non-empty even whenlinkedModelIdis present so technical detail is preserved.contextmust contain only safe, serializable values; no secrets or raw provider payload dumps.
2. ResolvedReference
Represents the normalized output from a resolver.
| Field | Type | Required | Notes |
|---|---|---|---|
referenceClass |
string | Yes | Echoes the resolved class. |
rawIdentifier |
string | Yes | Original raw identifier preserved for technical detail. |
primaryLabel |
string | Yes | Human-readable display name or best-known fallback label. |
secondaryLabel |
string|null | No | Type or context hint such as Policy version, Group, or Workspace baseline. |
state |
string | Yes | One of resolved, partially_resolved, unresolved, deleted_or_missing, inaccessible, or external_limited_context. |
stateLabel |
string|null | No | Shared operator-facing vocabulary for the current state. |
linkTarget |
ReferenceLinkTarget|null | No | Present only when the target is meaningful and access is allowed. |
technicalDetail |
ReferenceTechnicalDetail | Yes | Structured secondary detail for advanced operators. |
meta |
array<string, mixed> | No | Extra safe metadata such as badge hints or source provenance. |
Rules:
primaryLabelmust never default to the raw ID when a better fallback label exists.linkTargetmust be absent when the reference is inaccessible, unsupported, or not meaningful to navigate.statemust be explicit; null-based implicit semantics are not allowed.
3. ReferenceLinkTarget
Represents an optional canonical destination.
| Field | Type | Required | Notes |
|---|---|---|---|
targetKind |
string | Yes | Logical target such as policy, policy_version, baseline_snapshot, or operation_run. |
url |
string | Yes | Canonical resolved URL when the target is actionable. |
contextBadge |
string|null | No | Optional context hint such as Tenant context. |
actionLabel |
string | Yes | Operator-facing action label such as View policy or View run. |
Rules:
urlmust come from canonical helpers such as resourcegetUrl()orOperationRunLinks, not hand-built route strings.actionLabelmust follow shared UI naming vocabulary.
4. ReferenceTechnicalDetail
Represents controlled technical detail.
| Field | Type | Required | Notes |
|---|---|---|---|
displayId |
string|null | No | Shortened or copyable technical identifier for UI display. |
fullId |
string | Yes | Raw identifier preserved in full form. |
sourceHint |
string|null | No | Optional text like Captured from snapshot evidence. |
copyable |
bool | Yes | Whether UI may expose copy-to-clipboard affordance. |
defaultCollapsed |
bool | Yes | Whether technical detail should remain visually secondary by default. |
5. ReferencePresentationVariant
Represents the intended rendering density.
| Field | Type | Required | Notes |
|---|---|---|---|
variant |
string | Yes | compact or detail. |
showStateBadge |
bool | Yes | Indicates whether state badge is rendered inline. |
showTechnicalDetail |
bool | Yes | Whether the variant exposes secondary technical text inline or in disclosure form. |
Relationships
ReferenceDescriptoris passed toReferenceResolverRegistry.ReferenceResolverRegistryselects one resolver based onreferenceClass.- The chosen resolver returns a
ResolvedReference. ResolvedReferencemay contain aReferenceLinkTargetandReferenceTechnicalDetail.- Shared Filament renderers consume
ResolvedReferenceplusReferencePresentationVariant. - Existing
RelatedNavigationResolverand current related-context sections are expected to adapt fromRelatedContextEntryarrays to the richerResolvedReferencecontract.
Reference State Semantics
| State | Meaning | UI Expectation |
|---|---|---|
resolved |
Authoritative label and optional canonical target are known. | Label-first; actionable only when permitted. |
partially_resolved |
Useful label or type is known, but some context or navigation is missing. | Label-first with explicit partial context; technical ID secondary. |
unresolved |
Only raw identifier and perhaps source hints are known. | Visible degraded state; no false confidence. |
deleted_or_missing |
Reference once mapped to a record that no longer exists locally. | Distinct missing/deleted message; raw ID preserved secondarily. |
inaccessible |
Resolver knows a target exists but current policy does not allow navigation or safe disclosure. | Non-clickable; disclosure limited by policy. |
external_limited_context |
Reference belongs to an external/provider object with only limited local enrichment. | Best-effort label/type plus raw ID as secondary evidence. |
Current Domain Sources Expected to Feed the Model
| Source Model / Surface | Likely Reference Classes Produced |
|---|---|
Finding |
baseline_snapshot, operation_run, policy_version, policy, baseline_profile, assignment or principal targets from evidence |
PolicyVersion |
policy, baseline_snapshot, baseline_profile, operation_run |
BaselineSnapshot |
baseline_profile, policy_version, operation_run, role or assignment evidence references |
BackupSet |
operation_run, policy, policy_version, assignment-related target references |
OperationRun |
backup_set, restore_run, baseline_profile, baseline_snapshot, policy, target tenant or provider-linked context |
| Assignment-like views | group, user, service_principal, role_definition, policy, policy_version |
Migration Impact
- No database migration required.
- Existing related-context or label helpers may be refactored to produce structured reference outputs instead of final UI strings.