TenantAtlas/specs/278-cross-domain-indicator-audit/inventory.md
Ahmed Darrazi 0fa5be8d9d
Some checks failed
PR Fast Feedback / fast-feedback (pull_request) Failing after 1m20s
chore: commit all changes (automated)
2026-05-06 10:46:22 +02:00

28 KiB

Indicator Inventory: Cross-Domain Progress Indicator Semantics Audit

Package: specs/278-cross-domain-indicator-audit/
Branch: 278-cross-domain-indicator-audit
Status: Implemented docs-only audit artifact
Last updated: 2026-05-06

Scope And Method

This inventory is repository evidence only. It does not change runtime code, routes, assets, authorization, tests, persisted state, or UI behavior.

The audit used the named source anchors from spec.md and plan.md, then ran bounded searches under apps/platform/app/, apps/platform/resources/views/filament/, and the already-mounted apps/platform/resources/views/livewire/ operation feedback view for current progress-like, readiness-like, health-like, score-like, coverage-like, usage/capacity, and generation-state cues.

Confirmed Source Anchors

Anchor Source type Surface Domain Route or shell context Notes
apps/platform/app/Support/OpsUx/OperationUxPresenter.php presenter OperationRun feedback copy Ops /admin/t/{tenant} shell feedback, /admin/operations, run detail Defines queued, active, stale, terminal, and next-step wording.
apps/platform/app/Support/OpsUx/OperationRunProgressContract.php presenter OperationRun progress contract Ops active shell feedback and run consumers Defines counted vs activity/phased/composite/none progress capability.
apps/platform/resources/views/livewire/bulk-operation-progress.blade.php blade In-shell operation activity banner Ops tenant panel shell Renders determinate and indeterminate operation progress/activity feedback.
apps/platform/app/Filament/Widgets/Inventory/InventoryKpiHeader.php widget Inventory KPI header Inventory tenant inventory/dashboard context Renders total items, covered types, follow-up, coverage basis, and active ops.
apps/platform/app/Filament/Widgets/Dashboard/RecoveryReadiness.php widget Recovery readiness widget Backup/restore tenant dashboard Renders backup posture and recovery evidence cards.
apps/platform/app/Services/Baselines/SnapshotRendering/BaselineSnapshotPresenter.php service Baseline snapshot detail rendering Baseline baseline snapshot detail Renders outcome, fidelity, gap, coverage, lifecycle, current-truth, and count summaries.
apps/platform/app/Services/ReviewPackService.php service Review pack generation and entitlement decision Review/export tenant review pack flows Supplies generation-state and usage/capacity input.
apps/platform/app/Support/TenantDashboard/TenantDashboardSummaryBuilder.php builder Tenant dashboard overview Tenant summary /admin/t/{tenant} Builds posture, KPIs, governance rows, readiness cards, and recent operations.
apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php blade Tenant dashboard overview Tenant summary /admin/t/{tenant} Renders dashboard badges, progress bars, KPI charts, and readiness cards.
apps/platform/resources/views/filament/widgets/tenant/tenant-review-pack-card.blade.php blade Review pack card Review/export tenant dashboard/review context Renders no-pack, queued/generating, ready, failed, and expired states.
apps/platform/resources/views/filament/widgets/workspace/workspace-needs-attention.blade.php blade Workspace needs-attention widget Workspace monitoring /admin workspace context Renders triage review progress and pressure links.
apps/platform/resources/views/filament/widgets/dashboard/baseline-compare-now.blade.php blade Baseline governance widget Baseline compare tenant dashboard Renders summary-state badges and finding-count cues.
apps/platform/app/Filament/Pages/BaselineCompareLanding.php page Baseline compare landing Baseline compare /admin/t/{tenant}/baseline-compare Carries coverage, gap, freshness, and summary-assessment truth into Blade.
apps/platform/app/Filament/Resources/EvidenceSnapshotResource.php resource Evidence snapshot detail Evidence tenant evidence snapshots Renders permission posture score and evidence completeness/generation state.
apps/platform/app/Filament/Resources/StoredReportResource.php resource Stored report detail Reports tenant stored reports Renders retained report lifecycle and permission posture score.
apps/platform/app/Filament/Resources/ProviderConnectionResource.php resource Provider connection list/detail Provider posture /admin/provider-connections Renders provider lifecycle, consent, verification, and last health check.
apps/platform/resources/views/filament/forms/components/restore-run-checks.blade.php blade Restore safety checks Restore restore run form/detail Renders safety, technical startability, and check-count badges.
apps/platform/resources/views/filament/forms/components/restore-run-preview.blade.php blade Restore preview Restore restore run form/detail Renders preview decision, readiness suppression, and changed-item counters.
Spec Relation Out of scope here Guardrail
266 context-only yes Tenant dashboard productization remains runtime owner for dashboard layout and action behavior.
268 context-only guardrail yes OperationRun activity feedback already owns shell activity behavior. This audit only classifies it.
270 context-only guardrail yes OperationRun progress contract remains the execution-progress authority.
271 context-only guardrail yes Counted progress rollout remains a separate runtime adoption lane.
272 context-only guardrail yes Phase/composite OperationRun progress remains separate from this cross-domain audit.
275 nearby context yes Localization/customer-safe review wording is context only. No translation catalog changes are made here.
277 nearby context yes Stored reports are audited as current indicator surfaces; stored-report runtime behavior is not reopened.

Search Boundary And Exclusions

Confirmed additional in-scope search hits were included when they represented execution progress, coverage, completion, health, readiness, risk, pressure, usage, capacity, score, or generation state on tenant, workspace, canonical operations, evidence, review/export, provider, restore, or baseline surfaces.

Excluded search hits:

  • console-only progress bars in Artisan commands, because they are not operator-facing product surfaces
  • generic CRUD lifecycle badges with no progress/indicator ambiguity beyond ordinary table state
  • diff row status badges, because they are direct diff semantics rather than cross-domain progress or readiness indicators
  • platform /system customer-health widgets, because this active spec scope is workspace + tenant + canonical-view and not a platform-plane health-score rollout
  • raw support diagnostic fields where the visible surface explicitly states diagnostics-only context and not operator progress/readiness

Inventory Entries

Allowed semantic categories: execution progress, activity state, coverage, completion, health, readiness, risk, pressure, usage, capacity, score, generation state, unknown/ambiguous.

Allowed dispositions: keep as-is, copy-only clarification, standards clarification, product decision, contract follow-up, shared-component follow-up, migration follow-up, defer.

ID Source Surface / Domain Visible cue and pattern Data source and calculation basis Category Determinism Scope / audience Likely reading and risk Disposition / lane
IND-001 OperationRunProgressContract.php; bulk-operation-progress.blade.php Operation activity banner / Ops processed / total (percent) with role="progressbar" OperationRun.summary_counts.processed and summary_counts.total, normalized and clamped by OperationRunProgressContract::forRun() execution progress determinate tenant-prefiltered / operator-msp Correctly reads as active execution progress when the run is active. Risk is low because terminal and queued runs are excluded from counted progress by the shared contract. keep as-is
IND-002 OperationRunProgressContract.php; bulk-operation-progress.blade.php Operation activity banner / Ops Indeterminate bar plus labels such as Waiting for worker. or Progress details pending. OperationRun.status, run activity, phase/composite hints; no percent is emitted activity state indeterminate tenant-prefiltered / operator-msp The moving/bar-like pattern can still be mistaken for percentage progress even though it is activity-only. standards clarification / standards patch lane
IND-003 OperationUxPresenter.php; bulk-operation-progress.blade.php Operation activity banner / Ops Status pill labels such as Queued for execution, In progress, Completed successfully, Blocked by prerequisite OperationStatusNormalizer::toUxStatus($status, $outcome) and terminal guidance from OperationUxPresenter activity state determinate tenant-prefiltered / operator-msp Reads as operation lifecycle state. Risk appears when terminal success and active progress are visually adjacent, but current code separates progress rendering from terminal runs. keep as-is
IND-004 TenantDashboardSummaryBuilder.php; tenant-dashboard-overview.blade.php Recent operations / Tenant dashboard Separate operation status and outcome badges in recent-operation rows OperationRun.status, OperationRun.outcome, and freshness state through BadgeRenderer completion determinate tenant-prefiltered / operator-msp Reads as run outcome or terminal follow-up. Risk is low if status and outcome remain distinct. keep as-is
IND-005 InventoryKpiHeader.php Inventory KPI header / Inventory Total items stat count TenantCoverageTruth.observedItemTotal; direct observed inventory item count coverage determinate tenant-prefiltered / operator-msp Can be read as tenant inventory completeness, but it only measures observed items across supported types. standards clarification / standards patch lane
IND-006 InventoryKpiHeader.php Inventory KPI header / Inventory Covered types as succeeded / supported with breakdown badges TenantCoverageTruth.succeededTypeCount, supportedTypeCount, failed/skipped/unknown breakdown coverage determinate tenant-prefiltered / operator-msp Reads as coverage, not execution progress. Missing or unknown types can make the denominator look more complete than the underlying basis. contract follow-up / metric/indicator contract foundation
IND-007 InventoryKpiHeader.php Inventory KPI header / Inventory Need follow-up stat and top-priority follow-up summary TenantCoverageTruth.followUpTypeCount and topPriorityFollowUpRow() pressure determinate tenant-prefiltered / operator-msp Reads as operational pressure. Risk is that 0 can be mistaken for overall tenant health when the coverage basis is missing or stale. standards clarification / standards patch lane
IND-008 InventoryKpiHeader.php Inventory KPI header / Inventory Coverage basis value No current result, completion timestamp, and run outcome badge TenantCoverageTruth.basisRun, basis completion timestamp, OperationRun.outcome badge coverage unknown tenant-prefiltered / operator-msp No current result can read as calm/zero result instead of missing basis truth. copy-only clarification / standards patch lane
IND-009 InventoryKpiHeader.php Inventory KPI header / Inventory/Ops Active ops count plus queued or running description ActiveRuns::countForTenantId() and inventory-sync active query activity state determinate tenant-prefiltered / operator-msp Reads as active execution activity, but only inventory sync is described in the helper line. standards clarification / standards patch lane
IND-010 RecoveryReadiness.php; recovery-readiness.blade.php Recovery readiness widget / Backup Backup posture card with colored value and description TenantBackupHealthResolver::assess() and TenantRecoveryTriagePresentation label/tone/description health determinate tenant-prefiltered / operator-msp Reads as backup health/posture, not restore execution progress. Risk is that posture and recovery readiness share one card language. contract follow-up / metric/indicator contract foundation
IND-011 RecoveryReadiness.php; recovery-readiness.blade.php Recovery readiness widget / Restore Recovery evidence card with colored value and description RestoreSafetyResolver::dashboardRecoveryEvidence() and recovery presentation helpers readiness unknown tenant-prefiltered / operator-msp Can read as complete restore readiness even when evidence history is absent or latest detail is unavailable. standards clarification / standards patch lane
IND-012 BaselineSnapshotPresenter.php Baseline snapshot detail / Baseline Outcome, Current truth, Lifecycle, Overall fidelity, Evidence gaps, Captured items badges/facts ArtifactTruthPresenter, snapshot lifecycle state, RenderedSnapshot groups, fidelity counts, gap summary coverage determinate workspace-aggregate / operator-msp Reads as baseline snapshot usability and coverage. Risk is multiple badges can look like duplicate status instead of distinct truth dimensions. contract follow-up / metric/indicator contract foundation
IND-013 BaselineSnapshotPresenter.php Baseline snapshot coverage sections / Baseline Coverage summary, per-type coverageHint, fidelitySummary FidelityState::aggregate(), GapSummary, per-type rendered snapshot groups coverage determinate workspace-aggregate / operator-msp Reads as governed-subject coverage/fidelity. Risk is that reference-only fidelity can look like complete evidence if the coverage hint is not read. standards clarification / standards patch lane
IND-014 ReviewPackService.php Review-pack entitlement decision / Review/export current_usage, remaining_capacity, and effective_value returned with generation decision WorkspaceCommercialLifecycleResolver::actionDecision() plus entitlement decision projection usage determinate workspace-aggregate / operator-msp Reads as plan usage/capacity, not generation readiness. Risk is hidden if later surfaced beside generation buttons without category/freshness. contract follow-up / metric/indicator contract foundation
IND-015 tenant-review-pack-card.blade.php; ReviewPackService.php Review pack card / Review/export Queued, Generating, Ready, Failed, Expired, Generation in progress... ReviewPack.status, status badge catalog, generation job/run state via service-created OperationRun generation state determinate tenant-prefiltered / operator-msp Reads as artifact generation state. Risk is low when it stays separate from operation execution progress. keep as-is
IND-016 TenantDashboardSummaryBuilder.php; tenant-dashboard-overview.blade.php Tenant dashboard top posture / Tenant summary Blocked, Action needed, Calm posture status and headline Required permission counts, governance aggregate state, backup posture, recovery evidence, recommended actions readiness determinate tenant-prefiltered / mixed Reads as whole-tenant readiness. Risk is that a single calm/action label can collapse provider permissions, findings, backup, recovery, and operations into one ambiguous health claim. contract follow-up / metric/indicator contract foundation
IND-017 TenantDashboardSummaryBuilder.php; tenant-dashboard-overview.blade.php Tenant dashboard KPI row / Findings High severity findings count and optional 7-day chart Active high/critical findings count and highSeverityFindingsChart() risk determinate tenant-prefiltered / operator-msp Reads as active risk pressure. The small chart can look like trend health rather than event count unless category/direction is explicit. shared-component follow-up / shared indicator component system
IND-018 TenantDashboardSummaryBuilder.php; tenant-dashboard-overview.blade.php Tenant dashboard KPI row / Findings Overdue findings count TenantGovernanceAggregate.overdueOpenFindingsCount pressure determinate tenant-prefiltered / operator-msp Reads as workflow pressure, not completion. 0 can look like tenant health if other inputs are missing. standards clarification / standards patch lane
IND-019 TenantDashboardSummaryBuilder.php; tenant-dashboard-overview.blade.php Tenant dashboard KPI row / Provider permissions Missing permissions count with app/delegated split Required permissions overview counts from TenantRequiredPermissionsViewModelBuilder risk determinate tenant-prefiltered / operator-msp Reads as provider permission risk. Provider-owned semantics must not become platform-core readiness truth. contract follow-up / metric/indicator contract foundation
IND-020 TenantDashboardSummaryBuilder.php; tenant-dashboard-overview.blade.php Tenant dashboard KPI row / Operations Active operations count, but value is stale or terminal runs needing follow-up OperationRun::dashboardNeedsFollowUp(), terminalFollowUp(), activeStaleAttention() unknown/ambiguous determinate tenant-prefiltered / operator-msp The label reads like active execution count, while the query measures follow-up pressure. This is a confirmed wording ambiguity. copy-only clarification / standards patch lane
IND-021 TenantDashboardSummaryBuilder.php; tenant-dashboard-overview.blade.php; baseline-compare-now.blade.php Governance status / Baseline compare Baseline compare headline/state badge such as Aligned, Needs review, Refresh recommended, Action required, In progress TenantGovernanceAggregate, BaselineCompareSummaryAssessment, and latest compare stats readiness determinate tenant-prefiltered / operator-msp Reads as baseline readiness/posture. In progress must remain activity state, while aligned/needs review are governance results. contract follow-up / metric/indicator contract foundation
IND-022 TenantDashboardSummaryBuilder.php; BaselineCompareLanding.php Governance status / Evidence coverage Evidence coverage value and coverage warning badge/section Latest EvidenceSnapshot.completeness_state, baseline compare coverageStatus, uncovered types, evidence gap counts coverage unknown tenant-prefiltered / mixed Can read as complete evidence coverage even when latest compare coverage is unproven, warning, stale, or gap-limited. standards clarification / standards patch lane
IND-023 TenantDashboardSummaryBuilder.php Governance status / Review freshness Review freshness value and timestamp description Latest TenantReview.status, published/generated/updated timestamps readiness unknown tenant-prefiltered / mixed Reads as current review readiness. Risk is that status and freshness are mixed without a dedicated stale-data contract. contract follow-up / metric/indicator contract foundation
IND-024 TenantDashboardSummaryBuilder.php Governance status / Provider permissions Provider permissions as Ready, Blocked, or Needs attention Required permissions overview overall, missing counts, freshness risk unknown tenant-prefiltered / operator-msp Reads as provider readiness. Risk is stale permission snapshots can make the state look current. contract follow-up / metric/indicator contract foundation
IND-025 TenantDashboardSummaryBuilder.php; RecoveryReadiness.php Governance status / Backup posture Backup posture value and tone TenantBackupHealthAssessment posture, recovery triage copy health unknown tenant-prefiltered / operator-msp Reads as backup health. Risk is health/posture can be mistaken for restore readiness or successful backup execution. standards clarification / standards patch lane
IND-026 TenantDashboardSummaryBuilder.php; tenant-dashboard-overview.blade.php Readiness card / Current review Findings with outcome progress bar and Review completion progress bar TenantReview.summary.finding_count, finding_report_buckets, section_count, section_state_counts; percent from current / total completion determinate tenant-prefiltered / mixed Correctly reads as review completion, not execution progress. Risk is customer-safe readers may treat review completion as evidence completeness. shared-component follow-up / shared indicator component system
IND-027 TenantDashboardSummaryBuilder.php; tenant-dashboard-overview.blade.php Readiness card / Risk exceptions Need action, Accepted risks, Expiring soon, Pending approval stats Tenant-scoped FindingException status counts plus governance aggregate lapsed/expiring counts risk determinate tenant-prefiltered / operator-msp Reads as risk-governance pressure. It should not be displayed as progress toward safety. standards clarification / standards patch lane
IND-028 TenantDashboardSummaryBuilder.php; tenant-dashboard-overview.blade.php; ProviderConnectionResource.php Readiness card / Provider Health Provider verification status, missing permission count, last check, permissions snapshot ProviderConnection.verification_status, last_health_check_at, required-permissions freshness/counts health unknown tenant-prefiltered / operator-msp Provider-owned health can be mistaken for platform-core health if it is not labeled as provider-specific. contract follow-up / metric/indicator contract foundation
IND-029 TenantDashboardSummaryBuilder.php; tenant-dashboard-overview.blade.php; tenant-review-pack-card.blade.php Readiness card / Customer-safe output Review pack or evidence availability status, evidence snapshot time, review pack generated time Latest ReviewPack.status, ReviewPack.generated_at, latest EvidenceSnapshot.generated_at generation state unknown tenant-prefiltered / customer-readable Reads as handoff/export readiness. Risk is evidence availability can be mistaken for a generated customer-safe package. copy-only clarification / standards patch lane
IND-030 workspace-needs-attention.blade.php Workspace needs attention / Triage Reviewed x/y, Follow-up needed, Changed since review, Current affected set triageReviewProgress affected-total and review-state counts completion determinate workspace-aggregate / operator-msp Reads as review completion over a dynamic affected set. Risk is denominator freshness and scope can shift between reviews. product decision / metric/indicator contract foundation
IND-031 EvidenceSnapshotResource.php Evidence snapshot permission posture / Evidence Posture score plus granted/required permission counts Stored permission-posture payload fields posture_score, required_count, granted_count score unknown tenant-prefiltered / operator-msp Score direction, scale, and freshness are not self-describing in the current summary. contract follow-up / metric/indicator contract foundation
IND-032 StoredReportResource.php Stored report detail / Reports Posture score, Required, Granted, Missing highlights StoredReport.payload permission-posture report fields score unknown tenant-prefiltered / operator-msp Same score can be read as success percentage or risk score without category/direction. contract follow-up / metric/indicator contract foundation
IND-033 ProviderConnectionResource.php Provider connection list/detail / Provider posture Lifecycle, Consent, Verification, Last check badges and freshness ProviderConnection.is_enabled, consent_status, verification_status, last_health_check_at health unknown workspace-aggregate / support-platform Reads as provider connection health. Provider-specific labels such as Healthy must stay provider-owned examples, not platform-core truth. standards clarification / standards patch lane
IND-034 tenant-verification-report.blade.php Tenant verification report / Provider posture Verification is currently in progress and operation link Stored latest provider verification OperationRun state and report availability activity state indeterminate tenant-prefiltered / operator-msp Reads as verification activity, not permission posture completion. Risk is low because copy says stored operation state. keep as-is
IND-035 restore-run-checks.blade.php Restore safety checks / Restore Safety checks, Technically startable / Technical blocker present, Ready, Ready with caution, blocking/warning/safe counts Restore run check integrity, execution readiness, safety assessment, check severity counts readiness determinate tenant-prefiltered / operator-msp Reads as execution readiness and safety proof. Risk is Ready can be mistaken for safe to execute without preview context. standards clarification / standards patch lane
IND-036 restore-run-preview.blade.php Restore preview / Restore Preview decision, Checks current, Calm readiness suppressed, x/y policies changed, assignment/scope-tag change counts Preview integrity, checks integrity, safety assessment, restore preview summary counts risk determinate tenant-prefiltered / operator-msp Reads as preview impact and readiness suppression, not operation progress. x/y policies changed uses a ratio but measures impact, not completion. standards clarification / standards patch lane
IND-037 BaselineCompareLanding.php; baseline-compare-landing.blade.php Baseline compare landing / Baseline Coverage warning badges/sections, evidence gap counts, No findings explanation BaselineCompareStats.coverageStatus, evidence-gap details, reason presenter coverage unknown tenant-prefiltered / operator-msp No findings can be misread as success when coverage warnings or evidence gaps exist. copy-only clarification / standards patch lane
IND-038 OperationRunResource.php; inventory-coverage-truth.blade.php Operation run detail / Inventory coverage Inventory sync coverage rows and succeeded/failed/skipped type counts OperationRun.inventoryCoverage() rows and computed counts coverage determinate canonical-view / operator-msp Reads as result coverage for an operation run, not live progress. Risk is outcome counters can be mistaken for progress if reused outside detail context. standards clarification / standards patch lane

Summary Matrix

Category Entries Primary risk
execution progress 1 Must remain limited to active runs with trustworthy processed/total truth.
activity state 4 Indeterminate bars and in progress labels can look like completion progress.
coverage 8 Missing, stale, or partial basis can be read as complete coverage.
completion 3 Review completion can be mistaken for evidence completeness or customer readiness.
health 4 Provider or backup-specific health can leak into platform-core health language.
readiness 5 Rollups can collapse safety, evidence, workflow, and provider readiness.
risk 5 Risk and preview-impact indicators can look like progress or success.
pressure 2 0 pressure can look like global health when source data is missing.
usage 1 Usage/capacity can look like readiness when shown beside generation actions.
capacity 0 Capacity appears paired with usage in IND-014; no standalone capacity cue was confirmed.
score 2 Score direction/scale/freshness is not self-describing.
generation state 2 Evidence availability and generated package readiness can blur.
unknown/ambiguous 1 Active operations currently labels a follow-up-pressure count.

Review Outcome

  • The inventory covers every named source anchor and the confirmed additional in-scope cues discovered by bounded repo search.
  • No application code, tests, migrations, routes, assets, provider registration, panel wiring, global search, or authorization behavior was changed.
  • Runtime remediation remains out of scope. Every non-keep as-is cue routes to exactly one bounded follow-up lane in follow-up-map.md.