Kurzbeschreibung Filament-native UI-Polish für das Tenant-Dashboard und zugehörige Inventory/Operations-Ansichten; entfernt alte custom Blade‑Panel-Wrapper (die die dicken Rahmen erzeugten) und ersetzt sie durch Filament‑Widgets (StatsOverview / TableWidget). Keine DB-Migrationen. Änderungen (Kurz) Dashboard: KPI‑Kacheln als StatsOverviewWidget (4 Tiles). Needs‑Attention: sinnvolle Leerstaat‑UI (3 Health‑Checks + Links) und begrenzte, badge‑gestützte Issue‑Liste. Recent Drift Findings & Recent Operations: Filament TableWidget (10 Zeilen), badge‑Spalten für Severity/Status/Outcome, kurze copyable IDs, freundliche Subject‑Labels statt roher UUIDs. Entfernen der alten Blade-Wrapper, die ring- / shadow Klassen erzeugten. Tests aktualisiert/ergänzt, um Tenant‑Scope und DB‑only Garantien zu prüfen. Kleinigkeiten / UI‑Polish in Inventory/Operations-Listen und Panel‑Provider. Wichtige Dateien (Auswahl) DashboardKpis.php NeedsAttention.php RecentDriftFindings.php RecentOperations.php needs-attention.blade.php Tests: TenantDashboardTenantScopeTest.php, inventory/operations test updates Testing / Verifikation Lokale Tests (empfohlen, vor Merge ausführen): Formatter: Filament assets (falls panel assets geändert wurden): Review‑Hinweise (Was prüfen) UI: Dashboard sieht visuell wie Filament‑Demo‑Widgets aus (keine dicken ring- Rahmen mehr). Tables: Primary text zeigt freundliche Labels, nicht UUIDs; IDs sind copyable und kurz dargestellt. Needs‑Attention: Leerstaat zeigt die 3 Health‑Checks + korrekte Links; bei Issues sind Badges und Farben korrekt. Tenant‑Scope: Keine Daten von anderen Tenants leakieren (prüfe die aktualisierten TenantScope‑Tests). Polling: Widgets poll nur wenn nötig (z.B. aktive Runs existieren). Keine externen HTTP‑Calls oder ungeprüfte Jobs während Dashboard‑Rendering. Deployment / Migrations Keine Datenbankmigrationen. Empfohlen: nach Merge ./vendor/bin/sail artisan filament:assets in Deployment‑Pipeline prüfen, falls neue panel assets registriert wurden. Zusammenfassung für den Reviewer Zweck: Entfernen der alten, handgebauten Panel‑Wrappers und Vereinheitlichung der Dashboard‑UX mit Filament‑nativen Komponenten; kleinere UI‑Polish in Inventory/Operations. Tests: Unit/Feature tests für Tenant‑Scope und DB‑only Verhalten wurden aktualisiert; bitte laufen lassen. Merge: Branch 058-tenant-ui-polish → dev (protected) via Pull Request in Gitea. Co-authored-by: Ahmed Darrazi <ahmeddarrazi@adsmac.local> Reviewed-on: #70
195 lines
11 KiB
Markdown
195 lines
11 KiB
Markdown
---
|
||
description: "Task list for feature implementation"
|
||
---
|
||
|
||
# Tasks: Tenant UI Polish (Dashboard + Inventory Hub + Operations)
|
||
|
||
**Input**: Design documents from `specs/058-tenant-ui-polish/`
|
||
|
||
**Tests**: Required (Pest) — this feature changes runtime UI behavior.
|
||
|
||
---
|
||
|
||
## Phase 1: Setup (Shared Infrastructure)
|
||
|
||
- [X] T001 Confirm feature inputs exist: specs/058-tenant-ui-polish/spec.md, specs/058-tenant-ui-polish/plan.md
|
||
- [X] T002 Confirm Phase 0/1 artifacts exist: specs/058-tenant-ui-polish/research.md, specs/058-tenant-ui-polish/data-model.md, specs/058-tenant-ui-polish/contracts/ui.md, specs/058-tenant-ui-polish/contracts/polling.md, specs/058-tenant-ui-polish/quickstart.md
|
||
|
||
---
|
||
|
||
## Phase 2: Foundational (Blocking Prerequisites)
|
||
|
||
- [X] T003 Create shared helper to detect “active runs exist” for tenant polling in app/Support/OpsUx/ActiveRuns.php
|
||
- [X] T004 [P] Add focused tests for the helper in tests/Feature/OpsUx/ActiveRunsTest.php
|
||
|
||
**Checkpoint**: Shared polling predicate exists and is covered.
|
||
|
||
---
|
||
|
||
## Phase 3: User Story 1 — Drift-first tenant dashboard (Priority: P1) 🎯 MVP
|
||
|
||
**Goal**: Tenant-scoped dashboard that surfaces drift + ops KPIs and “Needs Attention”, DB-only.
|
||
|
||
**Independent Test**: Visiting the dashboard renders drift KPIs, ops KPIs, needs-attention CTAs, and recent lists (10 rows), with no outbound HTTP and no background work dispatched.
|
||
|
||
### Tests (US1)
|
||
|
||
- [X] T005 [P] [US1] Add DB-only render test (no outbound HTTP, no background work) in tests/Feature/Filament/TenantDashboardDbOnlyTest.php
|
||
- [X] T006 [P] [US1] Add tenant isolation test (no cross-tenant leakage) in tests/Feature/Filament/TenantDashboardTenantScopeTest.php
|
||
|
||
### Implementation (US1)
|
||
|
||
- [X] T007 [US1] Create tenant dashboard page in app/Filament/Pages/TenantDashboard.php
|
||
- [X] T008 [US1] Register the tenant dashboard page in app/Providers/Filament/AdminPanelProvider.php (replace default Dashboard page entry)
|
||
- [X] T009 [P] [US1] Create dashboard KPI widget(s) in app/Filament/Widgets/Dashboard/DashboardKpis.php
|
||
- [X] T010 [P] [US1] Create “Needs Attention” widget in app/Filament/Widgets/Dashboard/NeedsAttention.php
|
||
- [X] T011 [P] [US1] Create “Recent Drift Findings” widget (10 rows) in app/Filament/Widgets/Dashboard/RecentDriftFindings.php
|
||
- [X] T012 [P] [US1] Create “Recent Operations” widget (10 rows) in app/Filament/Widgets/Dashboard/RecentOperations.php
|
||
- [X] T013 [US1] Wire widgets into the dashboard page in app/Filament/Pages/TenantDashboard.php (header/sections) and implement conditional polling per specs/058-tenant-ui-polish/contracts/polling.md
|
||
- [X] T014 [US1] Implement drift stale rule (7 days) + CTA wiring in app/Filament/Widgets/Dashboard/NeedsAttention.php
|
||
- [X] T015 [US1] Ensure all dashboard queries are tenant-scoped + DB-only in app/Filament/Pages/TenantDashboard.php and app/Filament/Widgets/Dashboard/*.php
|
||
|
||
**Checkpoint**: US1 is shippable as an MVP.
|
||
|
||
---
|
||
|
||
## Phase 4: User Story 2 — Inventory becomes a hub module (Priority: P2)
|
||
|
||
**Goal**: Inventory becomes a cluster “hub” with consistent left sub-navigation and a shared KPI header across Items / Sync Runs / Coverage.
|
||
|
||
**Independent Test**: Navigating Items → Sync Runs → Coverage keeps consistent sub-navigation and shared KPI header, tenant-scoped and DB-only.
|
||
|
||
### Tests (US2)
|
||
|
||
- [X] T016 [P] [US2] Add DB-only render test for Inventory hub surfaces in tests/Feature/Filament/InventoryHubDbOnlyTest.php
|
||
- [X] T017 [P] [US2] Extend/adjust inventory navigation smoke coverage in tests/Feature/Filament/InventoryPagesTest.php
|
||
|
||
### Implementation (US2)
|
||
|
||
- [X] T018 [US2] Enable cluster discovery in app/Providers/Filament/AdminPanelProvider.php (add `discoverClusters(...)`)
|
||
- [X] T019 [US2] Create Inventory cluster class in app/Filament/Clusters/Inventory/InventoryCluster.php
|
||
- [X] T020 [US2] Assign Inventory cluster to inventory pages in app/Filament/Pages/InventoryLanding.php and app/Filament/Pages/InventoryCoverage.php
|
||
- [X] T021 [US2] Assign Inventory cluster to inventory resources in app/Filament/Resources/InventoryItemResource.php and app/Filament/Resources/InventorySyncRunResource.php
|
||
- [X] T022 [P] [US2] Create shared Inventory KPI header widget in app/Filament/Widgets/Inventory/InventoryKpiHeader.php
|
||
- [X] T023 [US2] Add Inventory KPI header widget to InventoryLanding in app/Filament/Pages/InventoryLanding.php
|
||
- [X] T024 [US2] Add Inventory KPI header widget to InventoryCoverage in app/Filament/Pages/InventoryCoverage.php
|
||
- [X] T025 [US2] Add Inventory KPI header widget to Inventory items list in app/Filament/Resources/InventoryItemResource.php (or its list page)
|
||
- [X] T026 [US2] Add Inventory KPI header widget to Inventory sync runs list in app/Filament/Resources/InventorySyncRunResource.php (or its list page)
|
||
- [X] T027 [US2] Ensure Inventory KPI definitions match specs/058-tenant-ui-polish/contracts/ui.md (coverage % restorable/total; partial separate; two active operations counts)
|
||
- [X] T041 [US2] Inventory coverage semantics reference (A2)
|
||
- Identify and document the exact source-of-truth fields for Inventory KPI aggregation:
|
||
- `inventory_items.policy_type`
|
||
- `config('tenantpilot.supported_policy_types')` meta fields (`restore`, `risk`)
|
||
- Dependency support via existing dependency capability resolver
|
||
- Ensure KPI and chips read from this source only (DB-only).
|
||
- DoD:
|
||
- One canonical place documented and referenced by inventory KPIs.
|
||
- No “magic” or duplicated classification logic across pages/widgets.
|
||
- [X] T028 [US2] Ensure “Sync Runs” view is inventory-only per spec in app/Filament/Resources/InventorySyncRunResource.php (query/filter by run type/intent if needed)
|
||
- [X] T029 [US2] Standardize coverage chips set on coverage-related surfaces in app/Filament/Pages/InventoryCoverage.php (Restorable, Partial, Risk, Dependencies only)
|
||
|
||
**Checkpoint**: Inventory hub behaves as a module with consistent sub-navigation + header.
|
||
|
||
---
|
||
|
||
## Phase 5: User Story 3 — Operations index “Orders-style” (Priority: P3)
|
||
|
||
**Goal**: Operations index shows KPIs + status tabs + table, with calm conditional polling.
|
||
|
||
**Independent Test**: Visiting Operations index shows KPIs and tabs that filter runs per specs/058-tenant-ui-polish/contracts/ui.md, DB-only, calm.
|
||
|
||
### Tests (US3)
|
||
|
||
- [X] T030 [P] [US3] Extend Operations DB-only test assertions in tests/Feature/Monitoring/OperationsDbOnlyTest.php (assert tabs/KPI labels appear)
|
||
- [X] T031 [P] [US3] Extend Operations tenant isolation coverage in tests/Feature/Monitoring/OperationsTenantScopeTest.php (assert tab views don’t leak)
|
||
|
||
### Implementation (US3)
|
||
|
||
- [X] T032 [P] [US3] Create Operations KPI header widget in app/Filament/Widgets/Operations/OperationsKpiHeader.php
|
||
- [X] T033 [US3] Add KPIs to the Operations list page in app/Filament/Resources/OperationRunResource/Pages/ListOperationRuns.php
|
||
- [X] T034 [US3] Implement status tabs (All/Active/Succeeded/Partial/Failed) on Operations list page in app/Filament/Resources/OperationRunResource/Pages/ListOperationRuns.php
|
||
- [X] T035 [US3] Ensure tab filter logic matches specs/058-tenant-ui-polish/contracts/ui.md by adjusting queries in app/Filament/Resources/OperationRunResource/Pages/ListOperationRuns.php
|
||
- [X] T036 [US3] Implement conditional polling for Operations list (only while active runs exist) by wiring table polling in app/Filament/Resources/OperationRunResource.php and/or app/Filament/Resources/OperationRunResource/Pages/ListOperationRuns.php
|
||
- [X] T037 [US3] Ensure canonical “View run” links still route to OperationRunResource view pages (no legacy routes)
|
||
- Verify existing canonical link helper `App\Support\OperationRunLinks` is used consistently.
|
||
- If no suitable helper exists for a given surface, add a minimal equivalent and use it everywhere.
|
||
|
||
- [X] T042 [US3] Operations terminology sweep (FR-010)
|
||
- Goal: The UI uses the canonical label “Operations” consistently; no legacy naming remains.
|
||
- Audit + fix in:
|
||
- Navigation label(s)
|
||
- Page titles / breadcrumbs
|
||
- Resource titles / headings
|
||
- Any links mentioning “Bulk Operation Runs” or legacy run naming
|
||
- DoD:
|
||
- No occurrences of legacy labels remain in UI surfaces for Monitoring/Operations.
|
||
- `rg -n "Bulk Operation|BulkOperationRun|Bulk Operation Runs" app resources` returns 0 matches (or matches only in tests explicitly allowed).
|
||
- If ripgrep is unavailable, use `grep -R` with the same patterns.
|
||
|
||
**Checkpoint**: Operations index is “orders-style” with calm refresh behavior.
|
||
|
||
---
|
||
|
||
## Phase 6: Polish & Cross-Cutting Concerns
|
||
|
||
- [X] T038 [P] Run formatting on changed files in app/** and tests/** via `vendor/bin/sail bin pint --dirty`
|
||
- [X] T039 Run targeted tests from specs/058-tenant-ui-polish/quickstart.md and ensure green
|
||
- [X] T040 [P] Smoke-check key pages render for a tenant in tests/Feature/Filament/AdminSmokeTest.php (add assertions only if gaps are found)
|
||
- [X] T043 Refactor KPI headers to StatsOverviewWidget (Inventory + Operations) to match Filament demo tiles and reduce custom Blade drift
|
||
- [X] T044 Inventory IA polish: remove Inventory “Overview”, make Items the default entry, rename “Inventory Sync Runs” → “Sync History”, and move “Run Inventory Sync” to Items header actions
|
||
|
||
---
|
||
|
||
## Dependencies & Execution Order
|
||
|
||
### User Story Dependencies
|
||
|
||
- US1 (P1) is standalone and can ship first.
|
||
- US2 (P2) can be implemented after foundational polling helper; it touches the panel provider and inventory pages/resources.
|
||
- US3 (P3) can be implemented after foundational polling helper; it touches the operations resource list page.
|
||
|
||
Suggested order (MVP-first): Phase 1 → Phase 2 → US1 → US2 → US3 → Polish.
|
||
|
||
### Parallel Opportunities (examples)
|
||
|
||
- US1: T009–T012 can be developed in parallel (different widget files).
|
||
- US2: T022 can be developed in parallel while T018–T021 are in review.
|
||
- US3: T032 can be developed in parallel with test updates (T030–T031).
|
||
|
||
---
|
||
|
||
## Parallel Execution Examples (per user story)
|
||
|
||
### US1
|
||
- T005 [P] [US1] tests/Feature/Filament/TenantDashboardDbOnlyTest.php
|
||
- T006 [P] [US1] tests/Feature/Filament/TenantDashboardTenantScopeTest.php
|
||
- T009 [P] [US1] app/Filament/Widgets/Dashboard/DashboardKpis.php
|
||
- T010 [P] [US1] app/Filament/Widgets/Dashboard/NeedsAttention.php
|
||
- T011 [P] [US1] app/Filament/Widgets/Dashboard/RecentDriftFindings.php
|
||
- T012 [P] [US1] app/Filament/Widgets/Dashboard/RecentOperations.php
|
||
|
||
### US2
|
||
- T016 [P] [US2] tests/Feature/Filament/InventoryHubDbOnlyTest.php
|
||
- T022 [P] [US2] app/Filament/Widgets/Inventory/InventoryKpiHeader.php
|
||
|
||
### US3
|
||
- T030 [P] [US3] tests/Feature/Monitoring/OperationsDbOnlyTest.php
|
||
- T031 [P] [US3] tests/Feature/Monitoring/OperationsTenantScopeTest.php
|
||
- T032 [P] [US3] app/Filament/Widgets/Operations/OperationsKpiHeader.php
|
||
|
||
---
|
||
|
||
## Implementation Strategy
|
||
|
||
### MVP First (US1 only)
|
||
|
||
1. Complete Phase 1 + Phase 2
|
||
2. Implement US1 (dashboard)
|
||
3. Run: `vendor/bin/sail artisan test tests/Feature/Filament/TenantDashboardDbOnlyTest.php`
|
||
4. Run: `vendor/bin/sail artisan test tests/Feature/Filament/TenantDashboardTenantScopeTest.php`
|
||
|
||
### Incremental Delivery
|
||
|
||
- Add US2 next (Inventory hub), then US3 (Operations index).
|
||
- After each story, run its targeted tests + the cross-cutting DB-only tests.
|