Added a decision-first section to the Baseline Profile detail page. Includes request caching for summary metrics and corresponding browser/feature tests. Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #440
12 KiB
Implementation Plan: Spec 369 - Baseline Profile Decision View
Branch: 369-baseline-profile-decision-view | Date: 2026-06-09 | Spec: specs/369-baseline-profile-decision-view/spec.md
Input: Feature specification from specs/369-baseline-profile-decision-view/spec.md
Summary
Productize the existing Baseline Profile detail page into a decision-first governance surface. The implementation should keep the existing route, resource, actions, policies, OperationRun start UX, and baseline domain truth intact while changing first-read hierarchy: readiness, reason, impact, snapshot basis, assignment/usefulness, and one safe next action must appear before governed-subject normalization lineage and metadata.
Technical Context
Language/Version: PHP 8.4.15 Primary Dependencies: Laravel 12.52, Filament 5.2.1, Livewire 4.1.4, Pest 4.3.1, PostgreSQL via Sail Storage: PostgreSQL, no schema changes expected Testing: Pest Feature/Livewire tests plus bounded Pest Browser smoke if implementation changes rendered layout Target Platform: Laravel Sail local development, Dokploy container deployment later Project Type: Laravel monolith, Filament admin panel Performance Constraints: No new Graph calls or expensive queries during render; reuse existing eager loading and helper methods where possible Constraints: Page-local UI/productization only; no baseline engine, OperationRun lifecycle, provider, shell, route, or migration changes Scale/Scope: Existing Baseline Profile detail route and regression coverage only
Candidate Selection Gate
- Selected candidate exists in source material: yes, Spec 368 finding
UI-AUDIT-368-F03and Candidate B. - Not already covered by active/completed spec: yes. Existing specs cover baseline engine/truth/compare (
116,159,336) but not the Spec 368 browser-verified Baseline Profile detail signal-to-noise finding. - Completed-spec guardrail: Related completed specs are context only and must not be edited.
- Roadmap/product alignment: yes. This supports the current platform productization direction and closes a high-value governance operator surface gap.
- Small, reviewable slice: yes. One existing detail page plus focused tests/smoke.
- Deferred adjacent concerns: Backup Set, OperationRun View, Provider Connections, Diagnostics, and global UI rule pack remain follow-ups.
- Result: PASS.
Constitution Check
- Inventory-first, snapshots-second: PASS - the page continues to display existing Baseline Profile/Snapshot truth and does not fetch Graph data.
- Read/write separation by default: PASS - no new mutation is introduced; existing capture/compare high-impact actions retain confirmation and authorization.
- Single Contract Path to Graph: PASS - no Graph calls are introduced.
- Deterministic Capabilities: PASS - existing
WorkspaceUiEnforcement, capability resolvers, and policies remain the action truth. - Proportionality / Anti-bloat: PASS - no new persistence, status family, or cross-domain UI framework is planned.
- Workspace isolation: PASS - Baseline Profile remains workspace-owned and workspace-scoped.
- Tenant isolation: PASS - tenant/environment data appears only through existing assignments, snapshot links, and action targets.
- RBAC-UX: PASS - UI state remains non-authoritative; server-side action authorization remains required.
- UI-COV-001: PASS with required page-report/coverage update or explicit no-route-change rationale.
- TEST-GOV-001: PASS with focused Feature/Browser lane classification.
Existing Repository Surfaces
apps/platform/app/Filament/Resources/BaselineProfileResource.php- Current infolist sections: Profile, Scope, Baseline truth, Related context, Metadata.
- Existing helper methods already expose scope summary, support readiness, current snapshot, latest attempt, compare readiness, and next step.
protected static bool $isGloballySearchable = false; keep unchanged.
apps/platform/app/Filament/Resources/BaselineProfileResource/Pages/ViewBaselineProfile.php- Header actions: capture, compare now, More group with compare assigned environments and edit.
- Capture/compare use
->requiresConfirmation(), shared OperationRun feedback, and workspace capability enforcement.
- Existing tests:
apps/platform/tests/Feature/Filament/BaselineProfileCaptureStartSurfaceTest.phpapps/platform/tests/Feature/Filament/BaselineProfileCompareStartSurfaceTest.phpapps/platform/tests/Feature/Baselines/BaselineProfileAuthorizationTest.phpapps/platform/tests/Browser/Spec192RecordPageHeaderDisciplineSmokeTest.phpapps/platform/tests/Browser/Spec202GovernanceSubjectTaxonomySmokeTest.php
- UI audit sources:
specs/368-platform-ui-signal-to-noise-browser-audit/*docs/ui-ux-enterprise-audit/page-reports/ui-010-baseline-profiles.mddocs/ui-ux-enterprise-audit/route-inventory.mddocs/ui-ux-enterprise-audit/design-coverage-matrix.md
Technical Approach
- Verify the current Baseline Profile detail states that need to drive the decision summary:
- active with consumable snapshot
- active without consumable snapshot
- draft/inactive/archived
- invalid/unsupported/mixed governed-subject scope
- assigned and unassigned environments
- authorized and readonly actor states
- Introduce the smallest derived decision summary shape:
- Prefer existing methods in
BaselineProfileResource. - Add a page-local helper only if repeated inline
TextEntryclosures become hard to review. - Keep it derived-only and request-scoped.
- Prefer existing methods in
- Recompose the infolist:
- Add a decision-first section above
Profile/Scope. - Move normalization lineage and technical metadata below the decision and proof sections.
- Keep current snapshot/latest attempt/compare readiness and related context accessible.
- Add a decision-first section above
- Preserve action safety:
- Do not change capture/compare modal behavior except copy/hierarchy if required.
- Keep confirmation, capability checks, notifications, OperationRun links, and browser events.
- Update focused tests and browser smoke:
- Assert decision content is visible and technical content is secondary.
- Assert readonly/owner action behavior remains stable.
- Capture a bounded browser smoke screenshot for the improved detail page.
- Update UI audit coverage artifacts:
- Update page report/coverage note for UI-057 detail work.
- If route inventory counts are unchanged, document no route change rather than touching route count tables unnecessarily.
Domain / Model Implications
- No model, migration, table, enum, persisted status, or source-of-truth change.
- Baseline readiness remains derived from existing Baseline Profile/Snapshot/Assignment/Compare truth.
- No data backfill or compatibility behavior is needed.
UI / Filament Implications
- Filament v5 / Livewire v4.1.4 compliance is required.
- Panel providers remain in
apps/platform/bootstrap/providers.php; no provider registration change. BaselineProfileResourceglobal search stays disabled. It already has a View page and$recordTitleAttribute, but global search is intentionally off for this workspace-owned governance surface.- Detail page should use native Filament sections/infolist entries where possible.
- Header action discipline remains: one state-sensitive primary action where possible, secondary actions in More or related context, dangerous/destructive actions confirmed.
- No asset registration is expected;
filament:assetsis not newly required by this spec.
RBAC / Policy Implications
- Workspace member access and baseline capabilities remain source of truth.
- Non-member/wrong-workspace access stays deny-as-not-found.
- Readonly members may view but not mutate according to existing tests.
- High-impact actions must continue to enforce authorization server-side, not only through disabled UI state.
OperationRun / Observability Implications
- Existing capture/compare actions continue to create/reuse
OperationRunvalues through existing services. - Existing
OperationUxPresenter,OperationRunLinks, andOpsUxBrowserEventscontinue to own queued/already-queued feedback. - No new OperationRun type, lifecycle state, queued notification policy, or reconciliation behavior is introduced.
Audit / Evidence Implications
- No new audit action is expected for pure page render changes.
- Existing capture/compare/archive audit behavior must remain intact.
- Current snapshot and compare matrix links remain evidence/proof navigation, not duplicated truth.
Test Strategy
- Add or update Feature/Livewire tests for:
- ready profile decision summary
- blocked/no snapshot decision summary
- invalid/unsupported scope decision summary
- readonly/member action state
- no raw scope JSON or normalization lineage in the primary decision summary
- Preserve existing tests for:
- capture start authorization and OperationRun feedback
- compare start authorization and OperationRun feedback
- Baseline Profile RBAC 404/403 behavior
- record-page header discipline
- Add bounded browser smoke if rendered hierarchy changes:
- login/fixture using existing helpers
- visit Baseline Profile detail
- assert decision summary appears before technical lineage/metadata in visible page order
- assert no JavaScript errors
- save screenshot in
specs/369-baseline-profile-decision-view/artifacts/screenshots/
Rollout / Deployment Considerations
- Migrations: none expected.
- Env vars: none expected.
- Queues: no new queues or workers; existing capture/compare queue behavior unchanged.
- Scheduler: none.
- Storage/volumes: none.
- Assets: no new Filament assets expected; no deploy-specific
filament:assetschange. - Staging/Production: Validate on staging with focused Baseline Profile view smoke before production promotion once production exists.
UI Audit Close-Out
- Route/design coverage counts: no count change. Spec 369 recomposes the existing Baseline Profile detail view under the existing Filament resource route; it does not add, remove, or reclassify a route.
- Design coverage matrix: no count change.
UI-010 Baseline Profilesremains a Strategic Surface, with the detail-page hierarchy updated inside the existing coverage row. - Page report:
docs/ui-ux-enterprise-audit/page-reports/ui-010-baseline-profiles.mdrecords the decision-first detail update. - Screenshot evidence:
specs/369-baseline-profile-decision-view/artifacts/screenshots/decision-first-detail.png.
Risk Controls
- Stop implementation if improving the page requires new persistence, a new readiness enum, a generic UI framework, or broad baseline engine changes.
- Preserve action names and tests unless a naming change is explicitly required by user-facing copy.
- Keep browser fixture cost bounded; do not create a platform-wide fixture suite inside this spec.
- Do not rewrite completed specs or Spec 368 audit history.
Implementation Phases
Phase 1 - Repo Truth And Test Baseline
Confirm existing Baseline Profile detail states, helpers, action safety, and current browser evidence. Add failing tests for the desired decision-first first viewport.
Phase 2 - Decision Summary Composition
Recompose the infolist to lead with readiness, reason, impact, snapshot basis, assignment signal, and next action. Demote technical scope/metadata.
Phase 3 - Action Safety And Coverage
Verify capture/compare/archive confirmations, authorization, OperationRun feedback, and global-search posture remain unchanged.
Phase 4 - Browser Smoke And UI Audit Close-Out
Capture before/after proof, update UI audit coverage notes, and record guardrail/smoke outcome.
Spec Readiness Gate
spec.md: present and scoped.plan.md: present and repo-aware.tasks.md: generated for later implementation.- RBAC, workspace isolation, OperationRun semantics, evidence truth, UI coverage, destructive/high-impact action handling, and test lanes are addressed.
- No open question blocks safe implementation.
- Scope is small enough for a bounded implementation loop.
- Result: PASS after tasks/checklist generation and preparation analysis.