# 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`.