TenantAtlas/specs/055-ops-ux-rollout/plan.md
ahmido bd6df1f343 055-ops-ux-rollout (#64)
Kurzbeschreibung

Implementiert Feature 055 — Ops‑UX Constitution Rollout v1.3.0.
Behebt: globales BulkOperationProgress-Widget benötigt keinen manuellen Refresh mehr; ETA/Elapsed aktualisieren korrekt; Widget verschwindet automatisch.
Verbesserungen: zuverlässiges polling (Alpine factory + Livewire fallback), sofortiger Enqueue‑Signal-Dispatch, Failure‑Message‑Sanitization, neue Guard‑ und Regressionstests, Specs/Tasks aktualisiert.
Was geändert wurde (Auszug)

InventoryLanding.php
bulk-operation-progress.blade.php
OperationUxPresenter.php
SyncRestoreRunToOperationRun.php
PolicyResource.php
PolicyVersionResource.php
RestoreRunResource.php
tests/Feature/OpsUx/* (PollerRegistration, TerminalNotificationFailureMessageTest, CanonicalViewRunLinksTest, OperationCatalogCoverageTest, UnknownOperationTypeLabelTest)
InventorySyncButtonTest.php
tasks.md
Tests

Neue Tests hinzugefügt; php artisan test --group=ops-ux lokal grün (alle relevanten Tests laufen).
How to verify manually

Auf Branch wechseln: 055-ops-ux-rollout
In Filament: Inventory → Sync (oder relevante Bulk‑Aktion) auslösen.
Beobachten: Progress‑Widget erscheint sofort, ETA/Elapsed aktualisiert, Widget verschwindet nach Fertigstellung ohne Browser‑Refresh.
Optional: ./vendor/bin/sail exec app php artisan test --filter=OpsUx oder php artisan test --group=ops-ux
Besonderheiten / Hinweise

Einzelne, synchrone Policy‑Actions (ignore/restore/PolicyVersion single archive/restore/forceDelete) sind absichtlich inline und erzeugen kein OperationRun. Bulk‑Aktionen und restore.execute werden als Runs modelliert. Wenn gewünscht, kann ich die inline‑Actions auf OperationRunService umstellen, damit sie in Monitoring → Operations sichtbar werden.
Remote: Branch ist bereits gepusht (origin/055-ops-ux-rollout). PR kann in Gitea erstellt werden.
Links

Specs & tasks: tasks.md
Monitoring page: Operations.php

Co-authored-by: Ahmed Darrazi <ahmeddarrazi@adsmac.local>
Reviewed-on: #64
2026-01-18 14:50:15 +00:00

3.9 KiB

Implementation Plan: Ops-UX Constitution Rollout (v1.3.0 Alignment) (055)

Branch: 055-ops-ux-rollout | Date: 2026-01-18 | Spec: specs/055-ops-ux-rollout/spec.md Input: Feature specification from specs/055-ops-ux-rollout/spec.md

Note: This template is filled in by the /speckit.plan command. See .specify/scripts/ for helper scripts.

Summary

Standardize all operation feedback across the app to the Operations UX Constitution (v1.3.0):

  • Three surfaces only (queued toast, progress widget for active runs, terminal DB notification for initiator).
  • Centralized operation labels via an OperationCatalog.
  • Canonical “View run” navigation to Monitoring → Operations → Run Detail.
  • Safe, structured summaries sourced only from operation_runs.summary_counts (JSONB), using a single whitelist and numeric-only values.

Primary deliverables are shared presenters/normalizers + regression guards (Pest) that prevent drift.

Technical Context

Language/Version: PHP 8.4.15 (Laravel 12)
Primary Dependencies: Filament v4, Livewire v3
Storage: PostgreSQL (JSONB for operation_runs.summary_counts)
Testing: Pest v4 (Laravel test runner), PHPUnit 12 (via Pest)
Target Platform: Docker/Sail for local dev, container-based deploy (Dokploy)
Project Type: Laravel web application (monolith)
Performance Goals: Not performance-driven; UX consistency and guardrails are primary
Constraints:

  • Calm polling rules (no modal polling; pause when tab hidden; stop on terminal)
  • No new Graph calls introduced by this feature
  • No schema refactor required for rollout; normalize for presentation Scale/Scope: Repo-wide UX migration impacting multiple producers and Monitoring UI

Constitution Check

GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.

  • Inventory-first: N/A (this feature is a UX standardization on existing run records)
  • Read/write separation: No new writes; changes are UX/presentation + safe sanitization + tests
  • Graph contract path: No Graph calls introduced
  • Deterministic capabilities: N/A
  • Tenant isolation: All queried runs are tenant-scoped; notifications are initiator-only
  • Operations UX (unified system): This feature enforces the three-surface model and canonical navigation
  • Automation: N/A (no new scheduling/locks added)
  • Data minimization: Summary and failure messages are sanitized; summaries are numeric-only

Gate status: PASS (no violations required)

Post-design re-check: PASS (design artifacts align with Ops-UX three-surface model, DB source-of-truth, canonical navigation, and safe summaries)

Project Structure

Documentation (this feature)

specs/055-ops-ux-rollout/
├── plan.md
├── research.md
├── data-model.md
├── quickstart.md
├── contracts/
│   └── ux-contracts.md
└── tasks.md

Source Code (repository root)

app/
├── Filament/
├── Livewire/
├── Models/
├── Notifications/
├── Providers/
├── Services/
└── Support/

resources/
└── views/

routes/
└── web.php

tests/
├── Feature/
└── Unit/

Structure Decision: Laravel web application (monolith) with Filament admin UI in app/Filament/ and Pest tests in tests/.

Phase Outputs

Phase 0 — Research

  • specs/055-ops-ux-rollout/research.md

Phase 1 — Design & Contracts

  • specs/055-ops-ux-rollout/data-model.md
  • specs/055-ops-ux-rollout/contracts/ux-contracts.md
  • specs/055-ops-ux-rollout/quickstart.md

Complexity Tracking

Fill ONLY if Constitution Check has violations that must be justified

Violation Why Needed Simpler Alternative Rejected Because
[e.g., 4th project] [current need] [why 3 projects insufficient]
[e.g., Repository pattern] [specific problem] [why direct DB access insufficient]