Automated PR created by Copilot per user request. Branch pushed: 266-tenant-dashboard-productization-v1 Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #322
251 lines
27 KiB
Markdown
251 lines
27 KiB
Markdown
# Tasks: Tenant Dashboard Productization v1
|
|
|
|
**Input**: Design documents from `/specs/266-tenant-dashboard-productization-v1/`
|
|
**Prerequisites**: `plan.md` (required), `spec.md` (required for user stories), `research.md`, `data-model.md`, `contracts/`, `quickstart.md`
|
|
|
|
**Guardrails**: Filament stays on v5 with Livewire v4. Provider registration stays unchanged in `apps/platform/bootstrap/providers.php`; no provider-registration work is planned. No new globally searchable resource or search work is in scope. No new destructive dashboard action is allowed on the page shell. Reuse only these repo-real follow-up surfaces: `TenantDashboard`, `GovernanceInbox`, `FindingResource`, `FindingExceptionResource`, `Operations`, `TenantRequiredPermissionsViewModelBuilder`, `RequiredPermissionsLinks`, `CustomerReviewWorkspace`, `TenantReviewResource`, `ReviewPackResource`, and `EvidenceSnapshotResource`. Keep one bounded dashboard-local summary/query/view-model layer only, with no new persistence, no generic dashboard framework, and no new provider-health page.
|
|
|
|
**Tests**: Tests are REQUIRED for this runtime slice. Preserve and extend the repaired proving suite in `apps/platform/tests/Feature/Filament/TenantDashboardDbOnlyTest.php`, `apps/platform/tests/Feature/Filament/TenantDashboardTruthAlignmentTest.php`, `apps/platform/tests/Feature/Filament/TenantDashboardTenantScopeTest.php`, `apps/platform/tests/Feature/Filament/TenantDashboardArrivalContextTest.php`, `apps/platform/tests/Feature/Filament/TenantDashboardArrivalContextPerformanceTest.php`, `apps/platform/tests/Feature/Rbac/TenantDashboardArrivalContextVisibilityTest.php`, `apps/platform/tests/Feature/Monitoring/OperationsDashboardDrillthroughTest.php`, and `apps/platform/tests/Browser/Dashboard/TenantDashboardProductizationSmokeTest.php`, alongside the new productization suites in `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationSummaryTest.php`, `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationActionsTest.php`, `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationAuthorizationTest.php`, and `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationReadinessTest.php`.
|
|
**Operations**: This feature does not create a new `OperationRun` type or change lifecycle ownership. The dashboard remains read-mostly and reuses canonical `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, `apps/platform/app/Support/OperationRunLinks.php`, and any already-shipped mutation seams unchanged.
|
|
**RBAC**: Existing workspace and tenant entitlement boundaries remain authoritative: non-member or non-entitled actor resolves as 404, entitled member missing follow-up capability resolves as 403 at the destination plus capability-safe hidden or disabled dashboard actions.
|
|
**Operator Surfaces**: The productized tenant dashboard remains a global-context-shell with one dominant next action, at most two visible header actions, at most four KPI cards, at most three recommended actions, no raw/support detail default-visible, honest unavailable or absent states, tenant-prefilter continuity into canonical admin follow-up routes, and no duplicate visible decision summary.
|
|
**Assets / Search**: No new registered asset bundle or global-search behavior is planned. If future implementation unexpectedly registers a Filament asset, deployment still uses `cd apps/platform && php artisan filament:assets`, but no task in this feature should add asset registration.
|
|
|
|
**Organization**: Tasks are grouped by user story so each story can be implemented and verified as an independent increment. The safe MVP for this feature is User Stories 1, 2, and 4 together because the productized landing experience is not shippable without decision-first posture, repo-real next actions, and tenant or capability boundary preservation.
|
|
|
|
## Phase 1: Setup (Productization Regression Scaffolding)
|
|
|
|
**Purpose**: Create the new focused regression files required to prove the dashboard productization slice without widening the test surface unnecessarily.
|
|
|
|
- [X] T001 [P] Create first-screen posture and action regression scaffolding in `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationSummaryTest.php` and `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationActionsTest.php`
|
|
- [X] T002 [P] Create authorization and readiness regression scaffolding in `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationAuthorizationTest.php` and `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationReadinessTest.php`
|
|
- [X] T003 [P] Create the bounded browser smoke scaffold for the productized tenant landing page in `apps/platform/tests/Browser/Dashboard/TenantDashboardProductizationSmokeTest.php`
|
|
|
|
---
|
|
|
|
## Phase 2: Foundational (Blocking Dashboard Composition Layer)
|
|
|
|
**Purpose**: Establish the single bounded dashboard-local summary/query/view-model layer and composite overview surface that every story depends on.
|
|
|
|
**Critical**: No story work should begin until this phase is complete.
|
|
|
|
- [X] T004 Implement the one bounded derived summary layer only, with no persistence or generic framework spread, in `apps/platform/app/Support/TenantDashboard/TenantDashboardSummary.php` and `apps/platform/app/Support/TenantDashboard/TenantDashboardSummaryBuilder.php`
|
|
- [X] T005 Implement the composite overview widget and Blade surface that enforce the dashboard-local guardrails in `apps/platform/app/Filament/Widgets/Dashboard/TenantDashboardOverview.php` and `apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php`
|
|
- [X] T006 Update the page shell to replace the first-screen widget stack with arrival continuity plus the composite overview, while keeping Filament v5 / Livewire v4 posture and leaving `apps/platform/bootstrap/providers.php` untouched, in `apps/platform/app/Filament/Pages/TenantDashboard.php`
|
|
|
|
**Checkpoint**: The dashboard has one local composition seam, one composite overview surface, and no new provider, search, persistence, or destructive-action work.
|
|
|
|
---
|
|
|
|
## Phase 3: User Story 1 - Understand Tenant Posture Fast (Priority: P1)
|
|
|
|
**Goal**: Let an entitled operator understand the tenant's posture, current problem, and first decision within seconds from the landing page.
|
|
|
|
**Independent Test**: Seed one tenant with findings pressure, readiness blockers, and recent operations, then verify the first screen surfaces the tenant state and dominant next action without opening another page.
|
|
|
|
### Tests for User Story 1
|
|
|
|
- [X] T007 [P] [US1] Add first-screen posture, four-KPI-cap, honest fallback, and no-raw-detail assertions in `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationSummaryTest.php`, `apps/platform/tests/Feature/Filament/TenantDashboardDbOnlyTest.php`, and `apps/platform/tests/Feature/Filament/TenantDashboardTruthAlignmentTest.php`
|
|
- [X] T008 [P] [US1] Add tenant-scope and arrival-context coverage for the productized landing hierarchy in `apps/platform/tests/Feature/Filament/TenantDashboardTenantScopeTest.php`, `apps/platform/tests/Feature/Filament/TenantDashboardArrivalContextTest.php`, and `apps/platform/tests/Feature/Filament/TenantDashboardArrivalContextPerformanceTest.php`
|
|
|
|
### Implementation for User Story 1
|
|
|
|
- [X] T009 [US1] Implement posture-first summary composition for workspace and tenant context, at most four KPI cards, and honest unavailable or absent states in `apps/platform/app/Support/TenantDashboard/TenantDashboardSummaryBuilder.php` and `apps/platform/app/Filament/Widgets/Dashboard/TenantDashboardOverview.php`
|
|
- [X] T010 [US1] Implement the decision-first first-screen layout with one dominant next action, compact governance rows, narrow-width no-horizontal-scroll behavior, and no raw or support detail default-visible in `apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php` and `apps/platform/app/Filament/Pages/TenantDashboard.php`
|
|
- [X] T011 [US1] Keep operator-facing posture wording calm, truthful, and badge-consistent without inventing a new score or status taxonomy in `apps/platform/lang/en/localization.php` and `apps/platform/lang/de/localization.php`
|
|
|
|
**Checkpoint**: The landing page answers what matters now, why it matters, and what happens next without forcing cross-widget reconstruction.
|
|
|
|
---
|
|
|
|
## Phase 4: User Story 2 - Follow One Safe Next Action (Priority: P1)
|
|
|
|
**Goal**: Show a small, ordered set of repo-real next actions with one dominant CTA each and no fake or dead-end links.
|
|
|
|
**Independent Test**: Seed multiple problem families, render the dashboard, and verify no more than three recommended actions appear, the highest-priority action is first, and each visible CTA lands on a real entitled destination or a truthful unavailable state.
|
|
|
|
### Tests for User Story 2
|
|
|
|
- [X] T012 [P] [US2] Add recommended-action ordering, three-action-cap, and repo-real destination continuity cases in `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationActionsTest.php` and `apps/platform/tests/Feature/Monitoring/OperationsDashboardDrillthroughTest.php`
|
|
- [X] T013 [US2] Add capability-safe hidden or disabled CTA and action-density regressions in `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationActionsTest.php`, `apps/platform/tests/Feature/Filament/TenantDashboardTruthAlignmentTest.php`, and `apps/platform/tests/Feature/Filament/TenantDashboardDbOnlyTest.php`
|
|
|
|
### Implementation for User Story 2
|
|
|
|
- [X] T014 [US2] Implement the documented recommended-action priority model, one dominant CTA per card, and duplicate-truth suppression in `apps/platform/app/Support/TenantDashboard/TenantDashboardSummaryBuilder.php`, `apps/platform/app/Filament/Widgets/Dashboard/TenantDashboardOverview.php`, and `apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php`
|
|
- [X] T015 [P] [US2] Wire repo-real governance, findings, exception, required-permissions, and canonical operations follow-up targets with tenant-prefilter continuity in `apps/platform/app/Filament/Pages/Governance/GovernanceInbox.php`, `apps/platform/app/Filament/Resources/FindingResource/Pages/ListFindings.php`, `apps/platform/app/Filament/Resources/FindingExceptionResource/Pages/ListFindingExceptions.php`, `apps/platform/app/Support/Links/RequiredPermissionsLinks.php`, `apps/platform/app/Support/OperationRunLinks.php`, and `apps/platform/app/Filament/Pages/Monitoring/Operations.php`
|
|
- [X] T016 [US2] Enforce the max-two visible header action cap and keep support utilities off the dominant action plane in `apps/platform/app/Filament/Pages/TenantDashboard.php` and `apps/platform/app/Filament/Widgets/Dashboard/TenantDashboardOverview.php`
|
|
|
|
**Checkpoint**: The dashboard presents one ordered queue of safe next actions instead of several competing utilities or tables.
|
|
|
|
---
|
|
|
|
## Phase 5: User Story 4 - Respect Tenant and Capability Boundaries (Priority: P1)
|
|
|
|
**Goal**: Preserve tenant isolation, 404 vs 403 semantics, and tenant-prefilter continuity while the dashboard becomes denser and more action-oriented.
|
|
|
|
**Independent Test**: Render the dashboard for full-access, partial-capability, and non-entitled actors, then verify summary visibility, action availability, destination behavior, and tenant-prefilter continuity.
|
|
|
|
### Tests for User Story 4
|
|
|
|
- [X] T017 [P] [US4] Add 404 vs 403, entitled follow-up gating, and tenant-prefilter continuity cases in `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationAuthorizationTest.php`, `apps/platform/tests/Feature/Rbac/TenantDashboardArrivalContextVisibilityTest.php`, and `apps/platform/tests/Feature/Monitoring/OperationsDashboardDrillthroughTest.php`
|
|
- [X] T018 [P] [US4] Add productized dashboard scope and blocked-follow-up regressions in `apps/platform/tests/Feature/Filament/TenantDashboardTenantScopeTest.php` and `apps/platform/tests/Feature/Filament/TenantDashboardArrivalContextTest.php`
|
|
|
|
### Implementation for User Story 4
|
|
|
|
- [X] T019 [US4] Implement capability-safe hidden or disabled action resolution, deny-as-not-found summary scoping, and honest unavailable helper states in `apps/platform/app/Support/TenantDashboard/TenantDashboardSummaryBuilder.php`, `apps/platform/app/Filament/Pages/TenantDashboard.php`, and `apps/platform/app/Filament/Widgets/Dashboard/TenantDashboardOverview.php`
|
|
- [X] T020 [US4] Preserve tenant-prefilter continuity and destination authorization across canonical operations and governance links in `apps/platform/app/Support/OperationRunLinks.php`, `apps/platform/app/Filament/Pages/Monitoring/Operations.php`, and `apps/platform/app/Filament/Pages/Governance/GovernanceInbox.php`
|
|
|
|
**Checkpoint**: The productized landing page stays tenant-safe and capability-safe, and blocked follow-up actions never degrade into clickable dead ends.
|
|
|
|
---
|
|
|
|
## Phase 6: User Story 3 - See Readiness Without Raw Detail (Priority: P2)
|
|
|
|
**Goal**: Surface review, evidence, review-pack, provider-permission, and recent-operation readiness as calm secondary context without exposing raw payloads or support-heavy detail by default.
|
|
|
|
**Independent Test**: Render tenants with and without current review, evidence snapshot, review pack, provider-permission gaps, and recent operations, then verify the dashboard shows compact readiness summaries and honest unavailable states without exposing raw detail by default.
|
|
|
|
### Tests for User Story 3
|
|
|
|
- [X] T021 [P] [US3] Add review, evidence, review-pack, provider blockage, and honest unavailable-state coverage in `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationReadinessTest.php`, `apps/platform/tests/Feature/Filament/TenantDashboardTruthAlignmentTest.php`, and `apps/platform/tests/Feature/Filament/TenantDashboardDbOnlyTest.php`
|
|
- [X] T022 [P] [US3] Add current-review, output-readiness, and narrow-width no-horizontal-scroll browser coverage plus arrival-performance coverage in `apps/platform/tests/Browser/Dashboard/TenantDashboardProductizationSmokeTest.php` and `apps/platform/tests/Feature/Filament/TenantDashboardArrivalContextPerformanceTest.php`
|
|
|
|
### Implementation for User Story 3
|
|
|
|
- [X] T023 [US3] Implement compact readiness summaries for current review, evidence, review pack, provider blockage, and recent operations as secondary context in `apps/platform/app/Support/TenantDashboard/TenantDashboardSummaryBuilder.php`, `apps/platform/app/Filament/Widgets/Dashboard/TenantDashboardOverview.php`, and `apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php`
|
|
- [X] T024 [P] [US3] Wire repo-real review, review-pack, evidence, customer review workspace, and required-permissions continuity without inventing a provider-health page or customer-view route in `apps/platform/app/Filament/Pages/Reviews/CustomerReviewWorkspace.php`, `apps/platform/app/Filament/Resources/TenantReviewResource/Pages/ListTenantReviews.php`, `apps/platform/app/Filament/Resources/ReviewPackResource/Pages/ListReviewPacks.php`, `apps/platform/app/Filament/Resources/EvidenceSnapshotResource/Pages/ListEvidenceSnapshots.php`, `apps/platform/app/Services/Intune/TenantRequiredPermissionsViewModelBuilder.php`, and `apps/platform/app/Support/Links/RequiredPermissionsLinks.php`
|
|
- [X] T025 [US3] Keep recent operations secondary, cap the card at four runs, and prevent raw diagnostics or long support detail from becoming default-visible in `apps/platform/app/Support/TenantDashboard/TenantDashboardSummaryBuilder.php`, `apps/platform/app/Filament/Widgets/Dashboard/TenantDashboardOverview.php`, and `apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php`
|
|
|
|
**Checkpoint**: Readiness and recency stay visible and useful, but they remain secondary to the primary governance decision layer.
|
|
|
|
---
|
|
|
|
## Phase 7: Polish & Cross-Cutting Concerns
|
|
|
|
**Purpose**: Finalize shared wording, run the exact planned verification commands, and record the bounded-dashboard outcome without drifting into new framework or provider work.
|
|
|
|
- [X] T026 [P] Align final operator-facing copy, action labels, honest unavailable wording, and output-readiness terminology across `apps/platform/app/Filament/Pages/TenantDashboard.php`, `apps/platform/app/Filament/Widgets/Dashboard/TenantDashboardOverview.php`, `apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php`, `apps/platform/lang/en/localization.php`, and `apps/platform/lang/de/localization.php`
|
|
- [X] T027 Run the focused dashboard productization feature suite in `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationSummaryTest.php`, `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationActionsTest.php`, `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationAuthorizationTest.php`, and `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationReadinessTest.php` with `export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Dashboard/TenantDashboardProductizationSummaryTest.php tests/Feature/Dashboard/TenantDashboardProductizationActionsTest.php tests/Feature/Dashboard/TenantDashboardProductizationAuthorizationTest.php tests/Feature/Dashboard/TenantDashboardProductizationReadinessTest.php`
|
|
- [X] T028 Run the repaired tenant-dashboard regression suite in `apps/platform/tests/Feature/Filament/TenantDashboardDbOnlyTest.php`, `apps/platform/tests/Feature/Filament/TenantDashboardTruthAlignmentTest.php`, `apps/platform/tests/Feature/Filament/TenantDashboardTenantScopeTest.php`, `apps/platform/tests/Feature/Filament/TenantDashboardArrivalContextTest.php`, `apps/platform/tests/Feature/Filament/TenantDashboardArrivalContextPerformanceTest.php`, `apps/platform/tests/Feature/Rbac/TenantDashboardArrivalContextVisibilityTest.php`, and `apps/platform/tests/Feature/Monitoring/OperationsDashboardDrillthroughTest.php` with `export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/TenantDashboardDbOnlyTest.php tests/Feature/Filament/TenantDashboardTruthAlignmentTest.php tests/Feature/Filament/TenantDashboardTenantScopeTest.php tests/Feature/Filament/TenantDashboardArrivalContextTest.php tests/Feature/Filament/TenantDashboardArrivalContextPerformanceTest.php tests/Feature/Rbac/TenantDashboardArrivalContextVisibilityTest.php tests/Feature/Monitoring/OperationsDashboardDrillthroughTest.php`
|
|
- [X] T029 Run the bounded browser smoke, including desktop and narrow-width no-horizontal-scroll checks, in `apps/platform/tests/Browser/Dashboard/TenantDashboardProductizationSmokeTest.php` with `export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Browser/Dashboard/TenantDashboardProductizationSmokeTest.php`
|
|
- [X] T030 Run formatting with `export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` after all dashboard productization edits in `apps/platform/app/`, `apps/platform/resources/views/`, `apps/platform/lang/`, and `apps/platform/tests/`
|
|
- [X] T031 Record the explicit `document-in-feature` close-out outcome for the bounded dashboard-local summary layer, guardrail status, and proof depth using `specs/266-tenant-dashboard-productization-v1/plan.md` and `specs/266-tenant-dashboard-productization-v1/quickstart.md` as the source of truth for PR notes, and escalate to `reject-or-split` if implementation drifts into persistence, frameworkization, or widened browser scope
|
|
- [X] T032 Add small monochrome Heroicon polish to Governance Status and Recent Operations without changing dashboard layout, business logic, routes, or badge ownership in `apps/platform/app/Support/TenantDashboard/TenantDashboardSummaryBuilder.php` and `apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php`
|
|
- [X] T033 Verify the dashboard icon polish with focused summary assertions, bounded browser smoke, and project formatting in `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationSummaryTest.php`, `apps/platform/tests/Browser/Dashboard/TenantDashboardProductizationSmokeTest.php`, and `apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php`
|
|
- [X] T034 Remove false interactivity from Governance Status rows unless the existing repo-real follow-up URL is available, and render entitled rows as real links in `apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php`
|
|
- [X] T035 Verify Governance Status affordance consistency against capability-gated summary output and bounded browser rendering in `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationAuthorizationTest.php` and `apps/platform/tests/Browser/Dashboard/TenantDashboardProductizationSmokeTest.php`
|
|
- [X] T036 Normalize the secondary-row spacing and card chrome between Governance Status and Recent Operations in `apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php`
|
|
- [X] T037 Verify the secondary-row consistency follow-up with focused summary coverage, bounded browser smoke, and project formatting in `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationSummaryTest.php`, `apps/platform/tests/Browser/Dashboard/TenantDashboardProductizationSmokeTest.php`, and `apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php`
|
|
- [X] T038 Restore a visible hover state for interactive Governance Status and Recent Operations rows in `apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php`
|
|
- [X] T039 Verify the dashboard hover-state follow-up with focused summary coverage, bounded browser smoke, and project formatting in `apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationSummaryTest.php`, `apps/platform/tests/Browser/Dashboard/TenantDashboardProductizationSmokeTest.php`, and `apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php`
|
|
|
|
---
|
|
|
|
## Dependencies & Execution Order
|
|
|
|
### Phase Dependencies
|
|
|
|
- **Setup (Phase 1)**: Starts immediately and creates the new focused proof files.
|
|
- **Foundational (Phase 2)**: Depends on Setup completion and blocks all user stories until the one bounded composition seam exists.
|
|
- **User Stories (Phases 3-6)**: All depend on Foundational completion.
|
|
- **Polish (Phase 7)**: Depends on all desired user stories being complete.
|
|
|
|
### User Story Dependencies
|
|
|
|
- **User Story 1 (P1)**: Can start after Foundational completion and establishes the decision-first landing hierarchy.
|
|
- **User Story 2 (P1)**: Can start after Foundational completion and remains independently testable, but it shares the same overview surface as User Story 1.
|
|
- **User Story 4 (P1)**: Can start after Foundational completion and remains independently testable, but it is safest to finish alongside User Story 2 because both harden follow-up actions and canonical routing.
|
|
- **User Story 3 (P2)**: Can start after Foundational completion and is easiest once the overview shell and action model from User Stories 1 and 2 are stable.
|
|
|
|
### Within Each User Story
|
|
|
|
- New or expanded tests should land before or alongside implementation and fail before the story is considered complete.
|
|
- The summary builder must remain the single dashboard-local composition seam; route-specific follow-up behavior stays in the existing repo-real surfaces.
|
|
- Card layout or copy cleanup should follow the summary and route wiring changes for that story.
|
|
|
|
### Parallel Opportunities
|
|
|
|
- `T001`, `T002`, and `T003` can run in parallel during Setup.
|
|
- `T017` and `T018` can run in parallel for User Story 4.
|
|
- `T021` and `T022` can run in parallel for User Story 3.
|
|
- `T014` and `T015` can proceed in parallel once User Story 2 test expectations are settled because the summary composition and canonical follow-up wiring stay in different files.
|
|
|
|
---
|
|
|
|
## Parallel Example: User Story 1
|
|
|
|
```bash
|
|
# User Story 1 tests in parallel:
|
|
Task: T007 apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationSummaryTest.php
|
|
Task: T008 apps/platform/tests/Feature/Filament/TenantDashboardTenantScopeTest.php
|
|
|
|
# User Story 1 implementation split after the summary contract exists:
|
|
Task: T009 apps/platform/app/Support/TenantDashboard/TenantDashboardSummaryBuilder.php
|
|
Task: T010 apps/platform/resources/views/filament/widgets/dashboard/tenant-dashboard-overview.blade.php
|
|
```
|
|
|
|
## Parallel Example: User Story 2
|
|
|
|
```bash
|
|
# User Story 2 implementation split after the test expectations are settled:
|
|
Task: T014 apps/platform/app/Support/TenantDashboard/TenantDashboardSummaryBuilder.php
|
|
Task: T015 apps/platform/app/Support/OperationRunLinks.php
|
|
```
|
|
|
|
## Parallel Example: User Story 4
|
|
|
|
```bash
|
|
# User Story 4 tests in parallel:
|
|
Task: T017 apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationAuthorizationTest.php
|
|
Task: T018 apps/platform/tests/Feature/Filament/TenantDashboardTenantScopeTest.php
|
|
|
|
# User Story 4 implementation split after canonical link semantics are known:
|
|
Task: T019 apps/platform/app/Filament/Widgets/Dashboard/TenantDashboardOverview.php
|
|
Task: T020 apps/platform/app/Filament/Pages/Monitoring/Operations.php
|
|
```
|
|
|
|
## Parallel Example: User Story 3
|
|
|
|
```bash
|
|
# User Story 3 tests in parallel:
|
|
Task: T021 apps/platform/tests/Feature/Dashboard/TenantDashboardProductizationReadinessTest.php
|
|
Task: T022 apps/platform/tests/Browser/Dashboard/TenantDashboardProductizationSmokeTest.php
|
|
|
|
# User Story 3 implementation split after the readiness contract is settled:
|
|
Task: T023 apps/platform/app/Support/TenantDashboard/TenantDashboardSummaryBuilder.php
|
|
Task: T024 apps/platform/app/Filament/Pages/Reviews/CustomerReviewWorkspace.php
|
|
```
|
|
|
|
---
|
|
|
|
## Implementation Strategy
|
|
|
|
### MVP First (Safe Productization Slice)
|
|
|
|
1. Complete Phase 1: Setup.
|
|
2. Complete Phase 2: Foundational.
|
|
3. Complete Phases 3, 4, and 5: User Stories 1, 2, and 4.
|
|
4. **Stop and validate** with `T027` and `T028` before adding readiness-depth work.
|
|
|
|
### Incremental Delivery
|
|
|
|
1. Deliver the decision-first landing hierarchy (User Story 1).
|
|
2. Add repo-real recommended actions and header-action discipline (User Story 2).
|
|
3. Harden tenant and capability boundaries plus canonical tenant-prefilter continuity (User Story 4).
|
|
4. Add review, evidence, review-pack, provider-permission, and recent-operations readiness depth (User Story 3).
|
|
5. Finish with exact validation commands, formatting, and PR close-out notes.
|
|
|
|
### Parallel Team Strategy
|
|
|
|
1. One developer can own the summary builder and overview widget while another prepares the new productization tests.
|
|
2. After Phase 2, one developer can wire governance and operations continuity while another handles recommended-action ordering and dashboard layout hierarchy.
|
|
3. Readiness and output-follow-up work can proceed in parallel with regression hardening once the action model is stable.
|
|
|
|
---
|
|
|
|
## Notes
|
|
|
|
- `[P]` tasks target different files or safe concurrent work once the foundational summary contract exists.
|
|
- `[US1]`, `[US2]`, `[US4]`, and `[US3]` labels map directly to the feature specification user stories.
|
|
- The exact validation commands are copied verbatim from `plan.md` and `quickstart.md` to avoid validation-command drift.
|
|
- No task in this plan adds provider registration work, global search work, new persistence, a generic dashboard framework, a provider-health page, or a destructive dashboard action. |