12 KiB
| description |
|---|
| Task list for OperationRun Terminal Outcome Feedback v1 |
Tasks: OperationRun Terminal Outcome Feedback v1
Input: Design documents from specs/269-operationrun-terminal-outcome-feedback/
Prerequisites: specs/269-operationrun-terminal-outcome-feedback/spec.md, specs/269-operationrun-terminal-outcome-feedback/plan.md, specs/269-operationrun-terminal-outcome-feedback/checklists/requirements.md
Review Artifact: specs/269-operationrun-terminal-outcome-feedback/checklists/requirements.md is the outcome-of-record for the review outcome class, workflow outcome, and test-governance outcome. If implementation widens into dashboard work, new persistence, or notification-policy changes, update that artifact before continuing.
Tests: REQUIRED (Pest). Keep proof bounded to focused Feature coverage for terminal-outcome shell semantics plus one named browser smoke for the live shell interaction contract.
Operations: No new OperationRun type, no new queue family, no new notification policy, and no new lifecycle ownership. Existing queued toasts, terminal notifications, canonical Operations drill-through routes, and browser enqueue events remain authoritative.
RBAC: Reuse current OperationRun policies and tenant context guards. No tenantless leakage from tenant surfaces; the shell stays inert when no selected tenant or viewAny capability exists.
Shared Pattern Reuse: Reuse BulkOperationProgress, OperationUxPresenter, OperationStatusNormalizer, OperationRunProgressContract, OperationRunLinks, OperationRunUrl, ActiveRuns, OpsUxBrowserEvents, and docs/ui/tenantpilot-enterprise-ui-standards.md. Do not create a second lifecycle, a second shell host, or a DB-backed acknowledgement model.
Filament / Panel Guardrails: Filament remains v5 on Livewire v4. Provider registration remains unchanged in apps/platform/bootstrap/providers.php. No new panel, resource, or asset strategy is allowed.
Organization: Tasks are grouped by user story so terminal success, unresolved follow-up, and browser-session acknowledgement remain independently reviewable.
Test Governance Notes
- Lane mix stays Feature plus one named browser smoke for live shell interaction.
- Prefer extending
ActivityFeedbackSurfaceTest,BulkOperationProgressDbOnlyTest, andOperationActivityFeedbackSmokeTestbefore adding any new families. - Planned proving test commands must stay identical to
spec.mdandplan.mdand run through Sail. Formatting remains a separate repo-hygiene step.
Phase 1: Setup (Shared Context)
Purpose: confirm the bounded slice, the current shell truth, and the current proof owners before runtime edits begin.
- T001 Review
specs/269-operationrun-terminal-outcome-feedback/spec.md,specs/269-operationrun-terminal-outcome-feedback/plan.md,specs/269-operationrun-terminal-outcome-feedback/checklists/requirements.md,docs/product/spec-candidates.md,docs/product/roadmap.md, and.specify/memory/constitution.mdtogether so the slice stays on the bounded manual-promotion target. - T002 [P] Confirm the current terminal-outcome seams in
apps/platform/app/Livewire/BulkOperationProgress.php,apps/platform/resources/views/livewire/bulk-operation-progress.blade.php,apps/platform/app/Support/OpsUx/OperationUxPresenter.php,apps/platform/app/Support/OpsUx/ActiveRuns.php, andapps/platform/public/js/tenantpilot/ops-ux-progress-widget-poller.js. - T003 [P] Confirm the current proof owners in
apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php,apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php,apps/platform/tests/Browser/OpsUx/OperationActivityFeedbackSmokeTest.php, anddocs/ui/tenantpilot-enterprise-ui-standards.md.
Phase 2: Foundational (Blocking Prerequisites)
Purpose: settle the proof seams before runtime edits widen.
Critical: no user-story runtime work should begin until this phase is complete.
- T004 [P] Create or extend failing Feature coverage in
apps/platform/tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.phpfor no-tenant and no-capability suppression, no inaccessible run exposure, terminal success copy, follow-up-specificAcknowledgesemantics, grouped follow-up emphasis, and the absence of progress UI after terminal transition. - T005 [P] Extend
apps/platform/tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.phponly as needed for single-item versus grouped primary-action wording, groupedReview operationsas the label variant of the canonical collection link, and terminal tertiary-action labels. - T006 [P] Extend
apps/platform/tests/Browser/OpsUx/OperationActivityFeedbackSmokeTest.phpfor browser-session-only acknowledge or dismiss behavior and shell re-open on new run-enqueue events.
Checkpoint: the success-versus-follow-up proof owner is settled before implementation begins.
Phase 3: User Story 1 - Terminal Success Feels Complete, Not Risky (Priority: P1)
Goal: keep successful terminal runs briefly visible with success-specific copy and dismissible browser-session behavior.
Independent Test: seed a recent successful terminal run, open a tenant-scoped shell surface, and verify the shell shows success-specific copy, no progress UI, and Dismiss or Close semantics.
Implementation for User Story 1
- T007 [US1] Refine
apps/platform/resources/views/livewire/bulk-operation-progress.blade.phpandapps/platform/app/Support/OpsUx/OperationUxPresenter.phpso successful terminal items render success-specific helper or guidance copy and keepDismissorClosesemantics without reusing follow-up wording. ExistingOperationUxPresentersuccess guidance was sufficient; no presenter edit was needed. - T008 [US1] Update
apps/platform/app/Livewire/BulkOperationProgress.phpandapps/platform/app/Support/OpsUx/ActiveRuns.phponly as needed so recent successful terminal items remain visible for the current 30-secondActiveRunsgrace window without changing active-run truth or polling ownership. ExistingActiveRunsgrace-window truth remained correct; no runtime edit was needed.
Checkpoint: User Story 1 is independently functional when successful terminal rows stay calm and dismissible.
Phase 4: User Story 2 - Terminal Follow-Up Stays Explicitly Reviewable (Priority: P1)
Goal: keep unresolved terminal outcomes clearly review-worthy instead of generically dismissible.
Independent Test: seed failed, partial, or blocked terminal runs, open a tenant-scoped shell surface, and verify the shell shows follow-up-specific guidance, Acknowledge semantics, and review-oriented grouped copy when mixed with active work.
Implementation for User Story 2
- T009 [US2] Refine
apps/platform/resources/views/livewire/bulk-operation-progress.blade.phpandapps/platform/app/Support/OpsUx/OperationUxPresenter.phpso unresolved terminal follow-up uses explicit review-needed copy,Acknowledgetertiary wording, and review-oriented grouped helper text. ExistingOperationUxPresenterfollow-up guidance was sufficient; the shell view owns the label split. - T010 [US2] Update
apps/platform/app/Support/OpsUx/ActiveRuns.phpandapps/platform/app/Livewire/BulkOperationProgress.phponly as needed so unresolved terminal follow-up remains shell-visible until locally acknowledged and never reuses success dismissal semantics. Existing shell-visible query and Livewire state already kept terminal follow-up visible; no edit was needed.
Checkpoint: User Story 2 is independently functional when unresolved terminal follow-up stops looking like harmless completion noise.
Phase 5: User Story 3 - Acknowledge Stays Browser-Session Only (Priority: P1)
Goal: preserve shell calmness without creating a new persisted review state.
Independent Test: acknowledge an unresolved terminal item in the current browser session, trigger a new run-enqueue event, and verify the shell reopens without any DB-backed acknowledgement state.
Implementation for User Story 3
- T011 [US3] Update
apps/platform/public/js/tenantpilot/ops-ux-progress-widget-poller.js,apps/platform/app/Livewire/BulkOperationProgress.php, and the shell view only as needed soHide activity,DismissorClose, andAcknowledgeremain browser-session-only and new work reopens the shell. Existing poller sessionStorage andops-ux:run-enqueuedreopen behavior covered the renamed tertiary semantics; browser smoke verified no JS edit was needed. - T012 [US3] Update
docs/ui/tenantpilot-enterprise-ui-standards.mdwith the shell terminal-outcome contract, including success dismissal, follow-up acknowledgement, and the ban on generic dismiss semantics for unresolved follow-up.
Checkpoint: User Story 3 is independently functional when terminal-outcome calmness stays local to the browser session and the standards document records the durable rule.
Phase 6: Polish & Cross-Cutting Validation
Purpose: validate the bounded slice, stop drift, and hand off a clean implementation path.
- T013 [P] Run
export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php. - T014 [P] Run
export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Browser/OpsUx/OperationActivityFeedbackSmokeTest.php. - T015 [P] Run
export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agentfor touched platform files. - T016 [P] Review touched code to confirm Filament stays on Livewire v4, provider registration remains unchanged in
apps/platform/bootstrap/providers.php, no new globally searchable resource was introduced, and no asset registration or notification-policy change slipped into the slice.
Dependencies & Execution Order
Phase Dependencies
- Phase 1 (Setup): no dependencies; start immediately.
- Phase 2 (Foundational): depends on Phase 1 and blocks user-story work.
- Phase 3 (US1): depends on Phase 2 and establishes success-specific terminal semantics.
- Phase 4 (US2): depends on Phase 2 and should ship with US1 so terminal outcomes stay honest across both no-action-needed and follow-up-needed cases.
- Phase 5 (US3): depends on Phase 2 and hardens browser-session-only calmness after terminal semantics exist.
- Phase 6 (Polish): depends on all desired user stories being complete.
User Story Dependencies
- US1 (P1): independently testable after Phase 2 and delivers the no-action-needed terminal success contract.
- US2 (P1): independently testable after Phase 2 and should ship with US1 so unresolved follow-up never inherits success semantics.
- US3 (P1): independently testable after Phase 2 and is required to keep the slice presentation-only instead of inventing a persisted workflow state.
Within Each User Story
- Write or extend the listed Pest coverage first and make it fail for the intended gap.
- Land shell-host runtime changes before widening browser-session action behavior.
- Re-run the narrowest affected validation command after each story checkpoint before moving on.
Implementation Strategy
Suggested MVP Scope
- MVP = US1 + US2 + US3 together. The manual-promotion target is only complete when terminal success is calm, unresolved follow-up is explicitly reviewable, and acknowledgement stays browser-session-only.
Incremental Delivery
- Complete Phase 1 and Phase 2.
- Deliver US1.
- Deliver US2 on top of the same shell host.
- Add US3 browser-session-only action hardening and the standards update.
- Finish with the focused Feature proof and the named browser smoke.
Team Strategy
- Settle the shell proof owner first.
- Parallelize Feature and browser proof updates while keeping the runtime change local to the existing shell component.
- Serialize merges around
BulkOperationProgressand the standards document so the terminal-outcome contract stays coherent.
Deferred Follow-Ups / Non-Goals
- Tenant dashboard active-operations summary card
- New
OperationRunprogress-contract or rollout work - Phase or composite progress modeling
- Persistent reviewed, investigated, or acknowledged semantics over unresolved terminal runs
- Activity center or tray v2
- Notification-policy changes for queued or terminal lifecycle events