Added artifacts, screenshots, and documentation for the platform sellable smoke matrix. Fixed a bug in FindingRiskGovernanceResolver and updated related tests. Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #426
15 KiB
15 KiB
Implementation Plan: Spec 355 - Platform Sellable Smoke Matrix
- Branch:
355-platform-sellable-smoke-matrix - Date: 2026-06-05
- Spec:
specs/355-platform-sellable-smoke-matrix/spec.md - Input: Spec 355 draft plus repo inspection of dashboard, provider readiness, review output, accepted-risk, governance, evidence, and operations proof surfaces.
Summary
Run one bounded, browser-first sellable-readiness gate across the current operator/productization surfaces and capture the result as a matrix plus readiness report.
The slice stays narrow:
- verify existing owner surfaces end-to-end instead of building another feature
- inventory fixture truth before claiming anything is testable
- classify flows as pass, pass with notes, blocked, fail P1, or fail P0
- allow only direct P0/P1 fixes on the owning surface when a browser-verified issue is in scope
- preserve current RBAC, audit,
OperationRun, provider-boundary, and customer-safe truth
Technical Context
- Language/Version: PHP 8.4.15, Laravel 12.52.x
- UI stack: Filament 5.2.x, Livewire 4.x
- Database: PostgreSQL, no schema change planned
- Artifact storage: markdown and screenshots under
specs/355-platform-sellable-smoke-matrix/artifacts/ - Testing: browser-first verification plus targeted Pest unit/feature/browser coverage only when a direct P0/P1 fix is necessary
- Validation lanes: browser + confidence + fast-feedback
- Local runtime posture: Sail-first
- Deployment/runtime impact: none expected; no env, migration, queue-family, scheduler, storage, or panel/provider change is planned
- Global search: unchanged; Spec 355 does not make any surface globally searchable
Current Repo Truth That Constrains The Slice
- The primary product surfaces already exist and are route-inventory-backed:
- Environment Dashboard (
UI-011, page reportui-002-environment-dashboard.md) - Provider Connections (
UI-072, page reportui-009-provider-connections.md) - Required Permissions (
UI-077, page reportui-077-required-permissions.md) - Governance Inbox (
UI-028, page reportui-004-governance-inbox.md) - Finding Exceptions Queue (
UI-026, page reportui-012-finding-exceptions-queue.md) - Exception Detail (
UI-036, page reportui-036-exception-detail.md) - Customer Review Workspace (
UI-038, page reportui-006-customer-review-workspace.md) - Environment Review Detail (
UI-040, page reportui-040-environment-review-detail.md) - Operations hub (
UI-016, page reportui-003-operations.md) - Evidence Overview (
UI-044, route-inventory only today) - workspace operation detail (
UI-017, route-inventory only today)
- Environment Dashboard (
- Existing browser smoke coverage already exists in the repo for:
- Governance Inbox (
Spec346...SmokeTest) - review-output guidance (
Spec351...SmokeTest) - dashboard guidance (
Spec352...SmokeTest) - provider-readiness guidance (
Spec353...SmokeTest) - accepted-risk guidance (
Spec354...SmokeTest)
- Governance Inbox (
- Current dependency signals are not perfectly normalized:
- Spec 351 is commit-backed and implemented, but still carries residual P2 browser audit notes and a
Draftspec header. - Spec 352 is the cleanest implemented baseline.
- Spec 353 is marked implemented with close-out audit pending.
- Spec 354 is commit-backed and screenshot-backed, but still lacks the cleanest spec-package close-out shape.
- Spec 351 is commit-backed and implemented, but still carries residual P2 browser audit notes and a
- Existing local/testing helpers already exist for some states:
- local smoke login route:
admin.local.smoke-login - review-output ready-path fixture command:
tenantpilot:review-output:seed-browser-fixture
- local smoke login route:
- Evidence Overview and workspace operation detail have lighter durable audit coverage than the other strategic surfaces. Spec 355 should use its own artifact package first instead of broadening the audit registry by default.
Domain / Model Implications
- No schema or migration change is planned.
- No new persisted readiness classification, queue, or release-gate entity is allowed.
- Existing truth stays on the current runtime owners:
- environment guidance:
EnvironmentDashboardSummaryBuilder - provider readiness: existing provider-connection and required-permissions derivation paths
- review output: existing review-output readiness and resolve-action paths
- accepted risk: existing finding-exception and governance resolver paths
- evidence: existing evidence snapshot/evidence overview truth
- proof: existing
OperationRunhub and detail truth
- environment guidance:
- New durable artifacts are limited to:
artifacts/platform-sellable-smoke-matrix.mdartifacts/platform-sellable-readiness-report.md- optional
artifacts/blocked-fixtures.md - screenshots under
artifacts/screenshots/
UI / Filament / Livewire Implications
- Filament v5 continues to run on Livewire v4.x; no version or API drift is permitted.
- No panel/provider registration change is allowed;
apps/platform/bootstrap/providers.phpremains untouched. - No new asset registration is planned, so there is no expected
filament:assetsdeployment change for this spec. - Existing destructive or high-impact actions must keep their current confirmation, authorization, notification, and audit posture even if Spec 355 changes their prominence, disabled state, or label.
- Spec 355 must not create a second CTA rail on detail surfaces simply to make a smoke matrix easier to pass.
RBAC / Policy Implications
- Workspace membership and entitled environment access remain the only scope authorities.
- Guidance, filters, and deep links must remain scope-safe and must not reintroduce hidden
tenantquery dependence where Specs 313/315/316 already constrained hub filtering behavior. - Any direct fix must preserve current 404 vs 403 semantics and current policy ownership.
- The smoke matrix itself must classify wrong-scope or wrong-workspace continuity as a blocker, not as cosmetic drift.
Audit / Logging / Evidence Implications
- Existing audit,
OperationRun, and proof ownership remain authoritative. - The readiness report must explicitly state whether:
- console errors were observed
- network/server errors were observed
- customer-safe boundaries were upheld
- No new audit stream, notification family, or support artifact is planned.
- Browser screenshots and matrix/report notes are the close-out evidence for this gate.
Data / Migration Implications
- No database migration, backfill, or persisted projection is planned.
- No compatibility shims are justified because this is a verification/productization gate, not a data-shape replacement.
- Existing local/testing fixture helpers may be reused, but Spec 355 must not add new product persistence just to make demo data easier.
Rollout Considerations
- No feature flag is expected because this slice is a verification gate over existing surfaces.
- If no P0/P1 fix is required, rollout impact is documentation/artifact-only.
- If a direct P0/P1 fix is required, staging/browser proof should re-run the affected flow before the platform is called sellable-ready.
- The final report must clearly distinguish:
- ready/pass flows
- pass-with-notes flows
- blocked flows caused by fixture or dependency gaps
- failure flows caused by real operator or safety issues
UI / Surface Guardrail Plan
- Guardrail scope:
- Environment Dashboard
- Provider Connections / Required Permissions
- Customer Review Workspace / Environment Review Detail
- Finding Exceptions Queue / Exception Detail
- Governance Inbox
- Evidence Overview / Evidence basis
- Operations hub / operation proof
- Affected surfaces:
apps/platform/app/Filament/Pages/EnvironmentDashboard.phpapps/platform/app/Filament/Resources/ProviderConnectionResource.phpapps/platform/app/Filament/Pages/EnvironmentRequiredPermissions.phpapps/platform/app/Filament/Pages/Reviews/CustomerReviewWorkspace.phpapps/platform/app/Filament/Resources/EnvironmentReviewResource/Pages/ViewEnvironmentReview.phpapps/platform/app/Filament/Pages/Monitoring/FindingExceptionsQueue.phpapps/platform/app/Filament/Resources/FindingExceptionResource/Pages/ViewFindingException.phpapps/platform/app/Filament/Pages/Governance/GovernanceInbox.phpapps/platform/app/Filament/Pages/Monitoring/EvidenceOverview.phpapps/platform/app/Filament/Resources/EvidenceSnapshotResource/Pages/ViewEvidenceSnapshot.phpapps/platform/app/Filament/Resources/OperationRunResource.php
- Native vs custom: preserve current Filament-native surfaces and shared guidance/proof helpers; do not introduce a custom sellable-readiness runtime layer
- Shared-family relevance:
- next-action guidance
- proof/deep-link behavior
- customer-safe disclosure
- queue routing
- dashboard signal hierarchy
- Handling modes:
- strategic operator surfaces:
review-mandatory - missing fixture states:
report-only - direct P0/P1 regressions:
hard-stop-candidate - out-of-scope structural drift:
exception-requiredorfollow-up-spec
- strategic operator surfaces:
- Required tests / smoke:
- browser matrix is mandatory
- targeted feature/unit/browser coverage only when a direct fix lands
- UI/Productization coverage:
- use existing page reports where they already exist
- keep Spec 355 artifacts as the primary proof package
- use
unresolved-pages.mdonly if Evidence Overview or operation detail needs an explicit durable blocker note after a fix attempt
Shared Pattern And System Fit
- Preferred reuse path:
- current
ResolutionCase/ResolutionActioncontract - current dashboard operator-guidance path
- current Governance Inbox deep-link/routing path
- current
OperationRunUrl/OperationRunLinks
- current
- Likely implementation shape:
- no new product runtime layer
- matrix/report/screenshot artifacts only
- if needed, direct surface-local fixes that reuse existing guidance or link helpers
- Avoid:
- new cross-surface guidance registry
- new sellability status persistence
- new portal/readiness workflow
- new provider/platform abstraction
OperationRun UX Impact
Spec 355 does not create a new OperationRun type and does not introduce new queued/start behavior.
Implementation responsibility is limited to:
- verifying existing
Open operation/View runlinks - ensuring proof links do not become the dominant CTA when a higher-priority owner action exists
- ensuring scope-safe operation URLs remain truthful
Likely Runtime Files
| Area | Repo-real files |
|---|---|
| Dashboard | apps/platform/app/Filament/Pages/EnvironmentDashboard.php, apps/platform/app/Support/EnvironmentDashboard/EnvironmentDashboardSummaryBuilder.php |
| Provider readiness | apps/platform/app/Filament/Resources/ProviderConnectionResource.php, apps/platform/app/Filament/Pages/EnvironmentRequiredPermissions.php, provider-readiness support classes |
| Review output | apps/platform/app/Filament/Pages/Reviews/CustomerReviewWorkspace.php, apps/platform/app/Filament/Resources/EnvironmentReviewResource.php, review-output guidance support classes |
| Accepted risk | apps/platform/app/Filament/Pages/Monitoring/FindingExceptionsQueue.php, apps/platform/app/Filament/Resources/FindingExceptionResource/Pages/ViewFindingException.php, apps/platform/app/Services/Findings/FindingRiskGovernanceResolver.php |
| Governance queue | apps/platform/app/Filament/Pages/Governance/GovernanceInbox.php, apps/platform/app/Support/GovernanceInbox/GovernanceInboxSectionBuilder.php |
| Evidence | apps/platform/app/Filament/Pages/Monitoring/EvidenceOverview.php, apps/platform/app/Filament/Resources/EvidenceSnapshotResource/Pages/ViewEvidenceSnapshot.php |
| Operations proof | apps/platform/app/Filament/Resources/OperationRunResource.php, apps/platform/app/Support/OpsUx/OperationRunUrl.php, apps/platform/app/Support/OperationRunLinks.php |
| Smoke helpers | apps/platform/routes/web.php, apps/platform/app/Console/Commands/SeedReviewOutputBrowserFixture.php, existing browser smoke tests |
Likely Test Files
| Layer | Planned file or reuse path |
|---|---|
| Browser | apps/platform/tests/Browser/Spec355PlatformSellableSmokeMatrixSmokeTest.php only if a durable automated smoke adds value during implementation |
| Feature/Livewire | targeted regressions on existing Spec 351/352/353/354 or owner-surface tests only when a direct fix lands |
| Unit | none expected unless a direct P0/P1 fix changes deterministic guidance/link selection |
Likely Artifact Files
| Artifact | Purpose |
|---|---|
specs/355-platform-sellable-smoke-matrix/artifacts/platform-sellable-smoke-matrix.md |
primary browser verification matrix |
specs/355-platform-sellable-smoke-matrix/artifacts/platform-sellable-readiness-report.md |
executive close/fix/defer recommendation |
specs/355-platform-sellable-smoke-matrix/artifacts/blocked-fixtures.md |
explicit fixture blockers when states cannot be exercised honestly |
specs/355-platform-sellable-smoke-matrix/artifacts/screenshots/* |
first-screen proof images |
Implementation Approach
Phase 0 - Repo State And Dependency Gate
- Re-read
spec.md,plan.md,tasks.md,repo-truth-map.md, andchecklists/requirements.md. - Run
git status --short --branch,git diff --stat, andgit log -1 --oneline, then record them in the repo-truth map. - Re-verify Specs 351-354 at runtime-proof level, not by one metadata field alone.
- If Spec 354 still has the specifically named dependency concerns open, or if the implementation package cannot prove browser-verified close-readiness, record the blocker and do not publish a final
demo-readyorsellable foundation-readyverdict.
Phase 1 - Fixture Inventory
- Inventory reusable local/testing/browser helpers already present in the repo.
- Confirm which real states can be exercised now:
- provider blocker
- review-output blocker
- ready draft/publish path
- accepted risk expiring/expired/incomplete
- governance inbox queue item
- evidence missing/stale
- operation follow-up/proof
- no urgent action
- Record missing states in
artifacts/blocked-fixtures.mdinstead of silently broadening runtime scope.
Phase 2 - Browser Smoke Matrix
- Run the 10 required flows using visible UI, URLs, and in-browser inspection only.
- Capture the required screenshot set or explain each missing screenshot in the matrix.
- Record:
- expected primary action
- actual primary action
- scope continuity result
- customer-safe boundary result
- console/network/server error observations
Phase 3 - Classification And Readiness Report
- Complete the matrix with
PASS,PASS WITH NOTES,BLOCKED,FAIL P1, orFAIL P0. - Count pass/fail/blocked results and summarize them in the readiness report.
- Do not treat
BLOCKEDas equivalent to pass. - Keep readiness language conservative when dependencies or fixtures remain unresolved.
Phase 4 - Minimal P0/P1 Fixes Only
- If a direct P0/P1 runtime issue is proven and in scope, add the narrowest failing targeted test first.
- Patch only the owning surface or direct helper.
- Re-run the affected browser flow and update the matrix/report/screenshot set.
- Do not widen Spec 355 into a redesign or a new feature lane.
Phase 5 - Regression And Close-Out
- Run the targeted regression commands listed in the spec.
- Run
pint --dirtyandgit diff --checkif code changed. - Report whether the full suite was or was not run.
- Close with a readiness decision and an explicit list of any deferred follow-up specs.