131 lines
28 KiB
Markdown
131 lines
28 KiB
Markdown
# 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. |
|
|
|
|
### Related Spec Guardrails
|
|
|
|
| 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`.
|