Applied the decision-first diagnostic surface IA contract to EnvironmentDiagnostics and SupportDiagnostics bundles. Added recommended_first_check and separated technical metadata as per Spec 373. Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #444
17 KiB
Tasks: Spec 373 - Diagnostic Surface Separation v1
Input: specs/373-diagnostic-surface-separation/spec.md, plan.md, checklists/requirements.md, Spec 368 audit artifacts, Spec 370 contract artifacts, and completed Spec 353/371/372 context.
Tests: Required for later implementation. This spec changes existing operator/support-facing diagnostic UI hierarchy.
Test Governance Checklist
- Lane assignment is named and narrow: Feature/Livewire for page/modal rendering, Browser for first-viewport/modal hierarchy, static checks for artifact quality.
- New or changed tests stay in the smallest honest family; any browser coverage is explicit and bounded to Spec 373 surfaces.
- Shared helpers, factories, seeds, fixtures, and context defaults stay cheap by default; any browser fixture gap is documented instead of broadened silently.
- Planned validation commands cover the changed behavior without pulling in unrelated lane cost.
standard-native-filamentrelief is explicit for Environment Diagnostics action safety;shared-detail-familycoverage is explicit for support diagnostics modal.- Any material fixture, browser, or follow-up note is recorded in the active spec artifacts.
Phase 1: Preparation And Repo Truth
Purpose: Confirm the implementation target is the remaining diagnostics gap and not completed provider/customer/operator productization work.
- T001 Re-read
specs/373-diagnostic-surface-separation/spec.md,plan.md,tasks.md, andchecklists/requirements.md. - T002 Re-read Spec 368 diagnostic/configuration source inputs:
specs/368-platform-ui-signal-to-noise-browser-audit/audit.mdspecs/368-platform-ui-signal-to-noise-browser-audit/findings.mdspecs/368-platform-ui-signal-to-noise-browser-audit/page-scorecard.csvspecs/368-platform-ui-signal-to-noise-browser-audit/spec-candidates.mdspecs/368-platform-ui-signal-to-noise-browser-audit/artifacts/raw/browser-notes.mdspecs/368-platform-ui-signal-to-noise-browser-audit/artifacts/screenshots/admin/015-diagnostic-surface-diagnostics-environment-diagnostics.pngspecs/368-platform-ui-signal-to-noise-browser-audit/artifacts/screenshots/blocked-or-error/016-configuration-surface-settings-required-permissions-error.pngspecs/368-platform-ui-signal-to-noise-browser-audit/artifacts/screenshots/blocked-or-error/031-system-surface-dashboard-system-dashboard-error.png
- T003 Re-read Spec 370 contract artifacts:
specs/370-global-surface-information-architecture-contract/artifacts/surface-contract.mdspecs/370-global-surface-information-architecture-contract/artifacts/surface-type-matrix.mdspecs/370-global-surface-information-architecture-contract/artifacts/page-assessment-checklist.mdspecs/370-global-surface-information-architecture-contract/artifacts/copy-and-terminology-rules.mdspecs/370-global-surface-information-architecture-contract/artifacts/follow-up-spec-map.md
- T004 Re-read completed Spec 353 boundaries and artifacts:
specs/353-provider-connections-resolution-guidance-v1/spec.mdspecs/353-provider-connections-resolution-guidance-v1/tasks.mddocs/ui-ux-enterprise-audit/page-reports/ui-009-provider-connections.mddocs/ui-ux-enterprise-audit/page-reports/ui-077-required-permissions.md
- T005 Re-read completed Spec 371 and Spec 372 artifact summaries for patterns and guardrails:
specs/371-core-operator-view-surfaces-productization/artifacts/source-audit-summary.mdspecs/371-core-operator-view-surfaces-productization/artifacts/browser-verification-report.mdspecs/371-core-operator-view-surfaces-productization/artifacts/validation-report.mdspecs/372-customer-auditor-surface-safety-pass/artifacts/source-audit-summary.mdspecs/372-customer-auditor-surface-safety-pass/artifacts/browser-verification-report.mdspecs/372-customer-auditor-surface-safety-pass/artifacts/validation-report.md
- T006 Re-verify current runtime truth in:
apps/platform/app/Filament/Pages/EnvironmentDiagnostics.phpapps/platform/resources/views/filament/pages/environment-diagnostics.blade.phpapps/platform/app/Support/SupportDiagnostics/SupportDiagnosticBundleBuilder.phpapps/platform/resources/views/filament/modals/support-diagnostic-bundle.blade.php- existing support diagnostics action host pages/resources
- T007 Confirm no migration, package, env var, queue family, scheduler, storage, panel/provider, global-search, provider gateway, permission engine, or OperationRun lifecycle change is required.
Phase 2: Spec-Local Artifacts Before Runtime Edits
Purpose: Make the later implementation auditable and prevent accidental scope growth.
- T008 Create
specs/373-diagnostic-surface-separation/artifacts/source-audit-summary.mdwith Spec 368 findings, Spec 370 inputs, Spec 371/372/353 completed-context notes, and reachability expectations. - T009 Create
specs/373-diagnostic-surface-separation/artifacts/diagnostic-surface-contracts.mdcovering Environment Diagnostics, support diagnostics modal, Provider Connections context, Required Permissions context, and/systemdeferred status. - T010 Create
specs/373-diagnostic-surface-separation/artifacts/affected-files.mdand populate planned file rows before runtime edits. - T011 Create
specs/373-diagnostic-surface-separation/artifacts/before-after-screenshot-index.mdwith Spec 368 before screenshots and planned after/blocked screenshot slots. - T012 Create
specs/373-diagnostic-surface-separation/artifacts/diagnostic-safety-checklist.mdwith one checklist row per scoped/referenced surface. - T013 Create
specs/373-diagnostic-surface-separation/artifacts/validation-report.mdwith branch, HEAD, clean/dirty state before implementation, and planned commands. - T014 Create
specs/373-diagnostic-surface-separation/artifacts/implementation-notes.mdandspecs/373-diagnostic-surface-separation/artifacts/browser-verification-report.md, then record the completed-spec guardrail decision and planned browser checks before runtime edits.
Phase 3: Tests First - Environment Diagnostics
Purpose: Lock diagnostic hierarchy and existing repair-action safety before changing page output.
- T015 Add or update focused Feature/Livewire coverage for Environment Diagnostics missing-owner state.
- T016 Add or update focused Feature/Livewire coverage for Environment Diagnostics duplicate-membership state.
- T017 Add or update focused Feature/Livewire coverage for both blockers shown together with one top summary, one dominant next action, and any second repair/context path demoted instead of competing summaries or primary actions.
- T018 Add or update focused Feature/Livewire coverage for the no-action state: one calm diagnostic summary and no zero-card spam.
- T019 Add or update assertions that
bootstrapOwnerandmergeDuplicateMembershipsremain visible only when applicable. - T020 Add or update assertions that the existing repair actions keep confirmation, capability gating, destructive treatment, and server-side authorization behavior.
- T021 Add or update assertions that Environment Diagnostics render paths do not call Graph/provider HTTP and use existing DB-local truth only.
Phase 4: Tests First - Support Diagnostics Modal
Purpose: Preserve authorization, redaction, telemetry, audit, and modal support value while improving hierarchy.
- T022 Add or update tenant support diagnostics modal coverage so the summary/dominant issue, redaction note, and recommended first check appear before reference sections.
- T023 Add or update OperationRun support diagnostics modal coverage so failed/blocked run context appears before lower audit/reference sections.
- T024 Add or update support diagnostics authorization coverage for entitled users without support diagnostics capability.
- T025 Add or update assertions that redaction markers and raw/support detail remain lower-priority, redacted, or unavailable rather than default-visible raw payloads.
- T026 Add or update assertions that support diagnostics telemetry and audit behavior remain unchanged when the modal opens.
- T027 Add or update tests for missing provider connection / missing OperationRun / untranslated provider reason / no dominant issue fallback copy, including assertions that unavailable context is not rendered as a fake link and likely-cause copy falls back to neutral recommended-next-check language.
Phase 5: Environment Diagnostics Implementation
Purpose: Productize the existing diagnostic page without backend or provider behavior changes.
- T028 Update
apps/platform/resources/views/filament/pages/environment-diagnostics.blade.phpso one diagnostic summary leads the first viewport. - T029 Ensure missing-owner copy includes failed condition, impact, and the existing next action.
- T030 Ensure duplicate-membership copy includes failed condition, impact, and the existing next action.
- T031 Ensure the no-action copy says one calm message such as "No diagnostic action is required" and avoids unsupported broad health claims.
- T032 If needed, update
apps/platform/app/Filament/Pages/EnvironmentDiagnostics.phpwith the smallest page-local derived summary data; do not create a generic diagnostic framework. - T033 Preserve existing
ActionSurfaceDeclaration,UiEnforcement,Capabilities::TENANT_MANAGE, confirmation, action handlers, and repair service ownership. - T034 Keep technical/provider/ID detail out of the first viewport unless it directly explains the current diagnostic blocker.
Phase 6: Support Diagnostics Modal Implementation
Purpose: Make support diagnostics guide the first support check while preserving full redacted depth.
- T035 Update
apps/platform/resources/views/filament/modals/support-diagnostic-bundle.blade.phpso headline, dominant issue, freshness/completeness, redaction note, and recommended first check precede lower sections. - T036 If existing bundle data is insufficient for "recommended first check", update
apps/platform/app/Support/SupportDiagnostics/SupportDiagnosticBundleBuilder.phpnarrowly using existing provider reason, OperationRun, contextual help, and reference truth; do not infer links or likely causes when no repo-backed proof exists. - T037 Keep workspace/environment/run context visible without promoting raw record IDs as primary UI copy.
- T038 Keep section references, audit history, redaction markers, and technical/support details lower-priority and redacted.
- T039 Do not add new support request, PSA, AI, export, provider, permission, or OperationRun behavior.
Phase 7: Completed-Spec Regression And UI Audit Handling
Purpose: Protect completed Spec 353/371/372 surfaces while keeping coverage artifacts proportional.
- T040 Confirm Provider Connections and Required Permissions are unchanged unless a shared helper change requires a targeted regression note.
- T041 If Provider Connections or Required Permissions are touched by shared code, run focused Spec 353 regression tests and document why the touch was unavoidable.
- T042 Update or create
docs/ui-ux-enterprise-audit/page-reports/ui-012-environment-diagnostics.mdonly if implementation materially changes UI-012 evidence/status. - T043 Update
docs/ui-ux-enterprise-audit/route-inventory.mdonly if screenshot/report references or UI-012 status changes. - T044 Update
docs/ui-ux-enterprise-audit/unresolved-pages.mdonly if a scoped route/modal remains unreachable and needs durable tracking. - T045 Leave
docs/ui-ux-enterprise-audit/page-reports/ui-009-provider-connections.mdanddocs/ui-ux-enterprise-audit/page-reports/ui-077-required-permissions.mduntouched unless a documented regression requires it.
Phase 8: Browser Smoke And Screenshots
Purpose: Prove the source browser finding has been addressed or document fixture limitations honestly.
- T046 Start the local platform stack using Sail or the repo's platform dev command.
- T047 Resolve/open the Environment Diagnostics route with the existing smoke-login/browser fixture.
- T048 Capture
specs/373-diagnostic-surface-separation/artifacts/screenshots/001-environment-diagnostics-after.pngif reachable. - T049 Browser-verify missing-owner or duplicate-membership state if the fixture can create it safely; otherwise document fixture limitation.
- T050 Browser-verify no-action Environment Diagnostics state if reachable.
- T051 Open support diagnostics modal from an existing tenant/environment or OperationRun host surface.
- T052 Capture
specs/373-diagnostic-surface-separation/artifacts/screenshots/002-support-diagnostics-after-or-blocked.pngif reachable, or a blocked screenshot/reason if not. - T053 Verify browser console has no new JavaScript/runtime errors for the scoped flow.
- T054 Verify Provider Connections and Required Permissions are not recaptured unless shared changes require targeted regression proof.
Phase 9: Validation And Close-Out Artifacts
Purpose: Finish the implementation with focused proof and complete spec-local evidence.
Execution notes:
-
T055 exact filter result:
--filter=EnvironmentDiagnosticsreturnedNo tests found; effective Environment Diagnostics validation usedtests/Feature/Filament/TenantDiagnosticsRepairsTest.phpand passed. -
T057 was not applicable because no Provider Connections or Required Permissions runtime files were touched; Spec 353 reports remained unchanged.
-
T055 Run
cd apps/platform && ./vendor/bin/sail artisan test --compact --filter=EnvironmentDiagnostics. -
T056 Run
cd apps/platform && ./vendor/bin/sail artisan test --compact --filter=SupportDiagnostics. -
T057 Run focused Spec 353 regression tests only if Provider Connections or Required Permissions were touched by shared code.
-
T058 Run
cd apps/platform && ./vendor/bin/sail pint --dirtyif PHP files changed. -
T059 Run
git diff --check. -
T060 Complete
specs/373-diagnostic-surface-separation/artifacts/affected-files.mdwith final touched files, risk, verification class, and out-of-scope side effects. -
T061 Complete
specs/373-diagnostic-surface-separation/artifacts/browser-verification-report.mdwith URLs, fixture, screenshots, reachability, before/after scores, blocked pages, and remaining issues. -
T062 Complete
specs/373-diagnostic-surface-separation/artifacts/before-after-screenshot-index.md. -
T063 Complete
specs/373-diagnostic-surface-separation/artifacts/diagnostic-safety-checklist.md. -
T064 Complete
specs/373-diagnostic-surface-separation/artifacts/implementation-notes.md. -
T065 Complete
specs/373-diagnostic-surface-separation/artifacts/validation-report.mdwith tests, browser results, dirty state, runtime files changed, and recommended next spec. -
T066 Confirm final implementation report includes Livewire v4 compliance, provider registration location, global search status, destructive action safety, asset strategy, tests, and deployment impact.
Non-Goals Checklist
- NT001 Do not reimplement Provider Connections or Required Permissions readiness guidance; Spec 353 owns that work.
- NT002 Do not solve
/systemauth or browser fixture reachability. - NT003 Do not change ProviderGateway, provider health resolver, provider credential, or Microsoft Graph permission calculation behavior.
- NT004 Do not add migrations, new models, persisted diagnostic truth, enum/status families, or provider/onboarding frameworks.
- NT005 Do not add new Graph calls or provider HTTP calls during render.
- NT006 Do not add support request lifecycle, external PSA handoff, AI, automation, billing, or entitlement behavior.
- NT007 Do not intentionally refactor customer/auditor/operator surfaces from Specs 371/372.
- NT008 Do not rewrite completed historical specs or remove implementation close-out/validation evidence.
Dependencies And Execution Order
- Phase 1 must complete before runtime edits.
- Phase 2 artifacts should be created before tests and implementation so scope drift is visible.
- Phases 3 and 4 test work should precede Phases 5 and 6 implementation.
- Phase 7 runs after any shared-code touch and before browser close-out.
- Phase 8 browser smoke runs after targeted tests are green enough to make rendered proof meaningful.
- Phase 9 closes the implementation package.
Recommended Implementation Strategy
Deliver User Story 1 first: Environment Diagnostics guidance. It is the browser-verified Spec 368 gap and can be tested independently. Add support diagnostics modal hierarchy next if reachable with existing fixtures. Treat Provider Connections and Required Permissions as regression context only.