251 lines
30 KiB
Markdown
251 lines
30 KiB
Markdown
# Feature Specification: OperationRun Activity Feedback v1
|
|
|
|
**Feature Branch**: `268-operationrun-activity-feedback`
|
|
**Created**: 2026-05-03
|
|
**Status**: Ready for implementation
|
|
**Input**: Manual promotion from `docs/product/spec-candidates.md` after the 2026-05-03 repo-based next-best-prep re-audit.
|
|
|
|
## Spec Candidate Check *(mandatory - SPEC-GATE-001)*
|
|
|
|
- **Problem**: `OperationRun` is already the repo-real execution truth, but the current tenant-shell activity hint drops the feedback loop as soon as work becomes terminal, so operators can see work running and then lose the confirmation/follow-up state immediately.
|
|
- **Today's failure**: Operators can queue work and still get feedback that can cover primary actions. Once a run finishes, the current `BulkOperationProgress` shell widget disappears immediately and does not provide a short terminal-success confirmation or an explicit unresolved follow-up state in the same surface.
|
|
- **User-visible improvement**: Operators get one calm, truthful activity hint on tenant-scoped start surfaces, with at most three visible items, canonical `View operation` links, honest progress treatment, a brief terminal-success confirmation, and unresolved terminal follow-up states that do not disappear silently.
|
|
- **Smallest enterprise-capable version**: refactor the current tenant-shell activity hint to align with the existing Ops-UX 3-surface contract, add a bounded terminal-success/follow-up phase to the same surface, and update the UI standards so future hosts do not drift.
|
|
- **Explicit non-goals**: no activity tray v2, no DB-backed hide preferences, no new `OperationRun` types or status families, no notification lifecycle rewrite, no permanent terminal inbox, and no host-widget migration beyond the current global activity widget.
|
|
- **Permanent complexity imported**: no new persisted model; one browser-session rule set for active hide plus terminal dismiss/acknowledge affordances, focused Pest/browser coverage, one standards-document addition, and only a tiny local helper if the existing shell component cannot stay readable without it.
|
|
- **Why now**: the overlap bug is already verified, and the constitution already defines a non-negotiable three-surface contract for `OperationRun`. The shell hint needs to align before more local run snippets drift from that contract.
|
|
- **Why not local**: a pure CSS tweak would not encode the terminal feedback-loop, honest-progress, canonical-link, and calmness rules in either the implementation or the standards guidance.
|
|
- **Approval class**: Workflow Compression
|
|
- **Red flags triggered**: shared interaction family, shell-level surface, session-local UI state
|
|
- **Score**: Nutzen: 2 | Dringlichkeit: 2 | Scope: 2 | Komplexitaet: 1 | Produktnaehe: 2 | Wiederverwendung: 2 | **Gesamt: 11/12**
|
|
- **Decision**: approve
|
|
|
|
## Spec Scope Fields *(mandatory)*
|
|
|
|
- **Scope**: tenant
|
|
- **Primary Routes**:
|
|
- `/admin/t/{tenant}/...` tenant-scoped start surfaces that currently receive the shared activity hint from the tenant-panel shell
|
|
- `/admin/operations` and `/admin/operations/{run}` remain the diagnostics drill-through targets and canonical collection/detail routes; shell overflow opens `/admin/operations` with the selected tenant as a contextual `tenant_id` prefilter, and that query-param prefilter wins over session/default state on initial mount
|
|
- **Data Ownership**: existing `OperationRun` truth with tenant-bound operational ownership semantics enforced through workspace + tenant entitlement checks; the current nullable-tenant exception remains limited to canonical workspace-context monitoring views; no new persisted projection or preference store
|
|
- **RBAC**: existing `OperationRun` policies remain authoritative. Non-members or out-of-scope tenant contexts remain hidden (`404` semantics through the current tenant/admin boundaries); in-scope actors only see hints for runs they can already view.
|
|
|
|
## Cross-Cutting / Shared Pattern Reuse *(mandatory)*
|
|
|
|
- **Cross-cutting feature?**: yes
|
|
- **Interaction class(es)**: status messaging, navigation links, shell active-awareness hints
|
|
- **Systems touched**: `BulkOperationProgress`, tenant-panel render-hook shell feedback, canonical run links, current queued toasts, current activity poller, UI standards
|
|
- **Existing pattern(s) to extend**: `OperationUxPresenter`, `OperationStatusNormalizer`, `OperationRunLinks`, `OperationRunUrl`, `ActiveRuns`, `OpsUxBrowserEvents`, current active-ops shell widget
|
|
- **Shared contract / presenter / builder / renderer to reuse**: `App\Support\OpsUx\OperationUxPresenter`, `App\Support\OpsUx\OperationStatusNormalizer`, `App\Support\OperationRunLinks`, `App\Support\OpsUx\OperationRunUrl`, `App\Support\OpsUx\ActiveRuns`, `apps/platform/resources/views/livewire/bulk-operation-progress.blade.php`
|
|
- **Why the existing shared path is sufficient or insufficient**: the repo already has truthful run-state, guidance, badge, and link semantics. What is missing is a constitution-aligned implementation of the shell contract: honest progress while active, a bounded terminal-success/follow-up handoff, canonical links, and non-obstructive placement.
|
|
- **Allowed deviation and why**: none by default. Keep the refactor local to the current shell component and its views; only extract a tiny helper if the existing component cannot remain readable otherwise.
|
|
- **Consistency impact**: `View operation` wording, overflow/`Show all operations` affordances, progressbar eligibility, lifecycle-sensitive tertiary action labels, bounded terminal success/follow-up visibility, and browser-session hide/dismiss/acknowledge behavior must stay aligned with the Ops-UX constitution and the standards doc.
|
|
- **Review focus**: verify that the shell keeps queued/running truth, shows only bounded terminal-success/follow-up states, never shows fake progress after completion, introduces no raw route strings, and remains non-obstructive.
|
|
|
|
## OperationRun UX Impact *(mandatory)*
|
|
|
|
- **Touches OperationRun start/completion/link UX?**: yes
|
|
- **Shared OperationRun UX contract/layer reused**: current Ops-UX start contract through `OperationUxPresenter`, `OperationRunLinks`, `OperationRunUrl`, `OpsUxBrowserEvents`, and current DB-notification lifecycle
|
|
- **Delegated start/completion UX behaviors**: current queued toast wording, canonical `View operation` link generation, tenant-safe URL resolution, current `run-enqueued` browser event, and existing terminal DB-notification lifecycle all remain delegated to the shared path
|
|
- **Local surface-owned behavior that remains**: the shell surface owns bounded layout, recent terminal-success/follow-up visibility, and browser-session hide/dismiss/acknowledge affordances only; it does not own lifecycle truth, severity mapping, or run-link routing
|
|
- **Queued DB-notification policy**: `N/A` - unchanged, explicit opt-in policy remains as-is
|
|
- **Terminal notification path**: unchanged central lifecycle mechanism
|
|
- **Exception required?**: none
|
|
|
|
## Provider Boundary / Platform Core Check *(mandatory)*
|
|
|
|
- **Shared provider/platform boundary touched?**: no
|
|
- **Boundary classification**: `N/A`
|
|
- **Seams affected**: `N/A`
|
|
- **Neutral platform terms preserved or introduced**: `Operation`, `View operation`, `Show all operations`, `queued`, `running`, `active`
|
|
- **Provider-specific semantics retained and why**: none
|
|
- **Why this does not deepen provider coupling accidentally**: the feature only reshapes execution feedback over existing platform-owned `OperationRun` truth and current link helpers
|
|
- **Follow-up path**: none
|
|
|
|
## UI / Surface Guardrail Impact *(mandatory)*
|
|
|
|
| Surface / Change | Operator-facing surface change? | Native vs Custom | Shared-Family Relevance | State Layers Touched | Exception Needed? | Low-Impact / `N/A` Note |
|
|
|---|---|---|---|---|---|---|
|
|
| Tenant shell activity hint | yes | Native Filament + existing Livewire/Blade surface | Ops UX start feedback, terminal handoff, canonical run links | shell, page, browser-session | no | Must stop covering primary actions on row-action-heavy pages and must keep terminal success/follow-up bounded |
|
|
|
|
## Decision-First Surface Role *(mandatory)*
|
|
|
|
| Surface | Decision Role | Human-in-the-loop Moment | Immediately Visible for First Decision | On-Demand Detail / Evidence | Why This Is Primary or Why Not | Workflow Alignment | Attention-load Reduction |
|
|
|---|---|---|---|---|---|---|---|
|
|
| Tenant shell activity hint | Primary Decision Surface | Decide whether an active or just-finished operation needs immediate inspection or no further action | Operation label, lifecycle state, one next-step cue, `View operation`, progress only when valid, and brief terminal confirmation/follow-up | Full run detail, logs, evidence, diagnostics stay in Operations pages | Primary because it appears immediately after a start action and must support the next operator decision without opening Monitoring first | Follows start-surface workflow, not storage structure | Replaces a floating overlay and closes the feedback loop without turning the shell into a monitoring page |
|
|
|
|
## Audience-Aware Disclosure *(mandatory)*
|
|
|
|
| Surface | Audience Modes In Scope | Decision-First Default-Visible Content | Operator Diagnostics | Support / Raw Evidence | One Dominant Next Action | Hidden / Gated By Default | Duplicate-Truth Prevention |
|
|
|---|---|---|---|---|---|---|---|
|
|
| Tenant shell activity hint | operator-MSP | Operation label, queued/running state, recent terminal-success/follow-up state, elapsed or completion age, canonical open link, honest progress if valid | One concise guidance line only when it clarifies the next step | Raw payloads, failure summaries, logs, debug context | `View operation` | Raw/support detail stays in Operations detail; browser-session hide/dismiss/acknowledge remains local to the shell | The hint states only what is needed for the next decision and does not restate diagnostics-first detail prose |
|
|
|
|
## UI/UX Surface Classification *(mandatory)*
|
|
|
|
| Surface | Action Surface Class | Surface Type | Likely Next Operator Action | Primary Inspect/Open Model | Row Click | Secondary Actions Placement | Destructive Actions Placement | Canonical Collection Route | Canonical Detail Route | Scope Signals | Canonical Noun | Critical Truth Visible by Default | Exception Type / Justification |
|
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
| Tenant shell activity hint | Monitoring hint | Activity shell hint | Open the most relevant active or just-finished operation | One explicit `View operation` link per item | forbidden | Overflow navigation only (`Show all operations`) plus one lifecycle-sensitive tertiary affordance on the grouped action row | none | `/admin/operations?tenant_id={currentTenant}` as a contextual prefilter on initial mount | `/admin/operations/{run}` with current tenant context | Current tenant context from the selected tenant shell | Operations / Operation | Queued/running state, completion/follow-up state, elapsed/completion age, valid progress only while active | none |
|
|
|
|
## Operator Surface Contract *(mandatory)*
|
|
|
|
| Surface | Primary Persona | Decision / Operator Action Supported | Surface Type | Primary Operator Question | Default-visible Information | Diagnostics-only Information | Status Dimensions Used | Mutation Scope | Primary Actions | Dangerous Actions |
|
|
|---|---|---|---|---|---|---|---|---|---|---|
|
|
| Tenant shell activity hint | Tenant operator | Decide whether a queued/running or just-completed operation needs inspection, acknowledgement, or no action | Start-surface hint | What operation state do I need to react to right now? | Operation label, lifecycle state, elapsed/completion age, canonical open link, valid progress only while active | Detailed run diagnostics and evidence on Operations pages | lifecycle, progress-availability | none | `View operation`, `Show all operations`, lifecycle-sensitive tertiary affordance when needed | none |
|
|
|
|
**UI Action Matrix**: `N/A - no Filament Resource, RelationManager, or Page action surface is being introduced or reclassified. The changed surface remains a shell/widget hint with one dominant navigation action and no destructive controls.`
|
|
|
|
## Proportionality Review *(mandatory when structural complexity is introduced)*
|
|
|
|
- **New source of truth?**: no
|
|
- **New persisted entity/table/artifact?**: no
|
|
- **New abstraction?**: no by default
|
|
- **New enum/state/reason family?**: no
|
|
- **New cross-domain UI framework/taxonomy?**: no
|
|
- **Current operator problem**: queued/running operations do not have one calm, constitution-aligned shell contract today, and the current overlay both blocks primary actions and drops the completion/follow-up loop immediately.
|
|
- **Existing structure is insufficient because**: the repo already centralizes links, badges, and guidance semantics, but the current shell implementation does not enforce bounded terminal handoff, honest post-completion semantics, or non-obstructive placement clearly.
|
|
- **Narrowest correct implementation**: refactor the existing shell component and views locally, keep `OperationRun` truth authoritative, add a brief terminal-success/follow-up phase plus browser-session hide/dismiss/acknowledge behavior, and update the standards doc.
|
|
- **Ownership cost**: one browser-session state rule set, focused Feature/browser coverage, and a standards-doc update.
|
|
- **Alternative intentionally rejected**: a shell-only CSS adjustment was rejected because it would not encode the active-only, honest-progress, and canonical-link rules or leave a durable guardrail for future hosts.
|
|
- **Release truth**: current-release truth. The repo already owns the active-ops widget and the Ops-UX constitution; this slice aligns the current shell to that truth.
|
|
|
|
### Compatibility posture
|
|
|
|
This feature assumes a pre-production environment.
|
|
|
|
Backward compatibility, legacy aliases, migration shims, historical fixtures, and compatibility-specific tests are out of scope unless explicitly required by this spec.
|
|
|
|
Canonical replacement is preferred over preservation.
|
|
|
|
## Testing / Lane / Runtime Impact *(mandatory)*
|
|
|
|
- **Test purpose / classification**: Feature plus one required browser smoke for the non-obstructive shell contract
|
|
- **Validation lane(s)**: fast-feedback, confidence, browser
|
|
- **Why this classification and these lanes are sufficient**: the real contract is shell behavior on the existing Livewire/Filament host. Feature tests prove active plus bounded terminal selection, links, progress rules, and lifecycle-sensitive tertiary copy; one browser smoke is the narrowest credible proof that the shell remains non-obstructive.
|
|
- **New or expanded test families**: extend `apps/platform/tests/Feature/OpsUx/`, extend `apps/platform/tests/Feature/Guards/OperationRunLinkContractGuardTest.php`, and add one named browser smoke
|
|
- **Fixture / helper cost impact**: low to moderate. Reuse existing operation-run factories, tenant context helpers, and current Livewire widget tests; do not add provider-heavy browser setup or new default seeds.
|
|
- **Heavy-family visibility / justification**: no heavy-governance lane. Browser proof is explicit and limited to the overlap/non-obstruction contract.
|
|
- **Special surface test profile**: global-context-shell
|
|
- **Standard-native relief or required special coverage**: standard Feature coverage is primary; one browser smoke is required for the row-action overlap contract
|
|
- **Reviewer handoff**: reviewers must confirm the shell routes through canonical link helpers, shows no fake percentage or percentage text, keeps successful completion visible briefly, does not silently drop follow-up failures, and passes the named browser smoke.
|
|
- **Budget / baseline / trend impact**: small feature-local increase only
|
|
- **Escalation needed**: `reject-or-split` if implementation expands into tray v2, notification lifecycle changes, or a new persisted hide/acknowledgement model
|
|
- **Active feature PR close-out entry**: Guardrail / Smoke Coverage
|
|
- **Planned validation commands**:
|
|
- `export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/OpsUx/BulkOperationProgressDbOnlyTest.php tests/Feature/OpsUx/ProgressWidgetOverflowTest.php tests/Feature/OpsUx/ActivityFeedbackSurfaceTest.php tests/Feature/Guards/OperationRunLinkContractGuardTest.php`
|
|
- `export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Browser/OpsUx/OperationActivityFeedbackSmokeTest.php`
|
|
|
|
## User Scenarios & Testing *(mandatory)*
|
|
|
|
### User Story 1 - See Calm Active-Operations Feedback After Starting Work (Priority: P1)
|
|
|
|
As a tenant operator, I need the shell-level active-ops hint to surface the most relevant queued/running operations without covering page actions, so I can decide whether to inspect a run immediately or keep working.
|
|
|
|
**Why this priority**: this is the direct fix for the known overlap seam and the most valuable current-release improvement.
|
|
|
|
**Independent Test**: create queued/running runs for a tenant, open a tenant-scoped start surface, and verify the shell hint shows at most three active items, preserves one canonical `View operation` link per item, and remains non-obstructive.
|
|
|
|
**Acceptance Scenarios**:
|
|
|
|
1. **Given** a tenant has queued and running runs, **When** the operator opens a tenant-scoped start surface, **Then** the shell hint shows at most three active items with one canonical `View operation` link each and an overflow path to `Show all operations`.
|
|
2. **Given** a row-action-heavy page is visible while the shell hint is active, **When** the operator targets a primary page action, **Then** the activity hint does not cover or block that action.
|
|
3. **Given** an active item needs brief context for the next decision, **When** the shell hint renders it, **Then** it may show at most one concise next-step cue and does not expand into diagnostics prose.
|
|
|
|
---
|
|
|
|
### User Story 2 - Keep The Feedback Loop Honest Across Terminal Transitions (Priority: P1)
|
|
|
|
As a tenant operator, I need the shell hint to stay honest when work becomes terminal, so I see a brief success confirmation or an unresolved follow-up state in the same surface instead of losing the feedback loop immediately.
|
|
|
|
**Why this priority**: the overlap fix is not sufficient unless the shell also completes the run-state feedback loop without inventing a second lifecycle surface.
|
|
|
|
**Independent Test**: seed queued/running runs alongside just-completed successful runs and terminal follow-up runs, open a tenant-scoped start surface, and verify the shell keeps recent success visible briefly, keeps unresolved follow-up visible, and never shows fake progress after completion.
|
|
|
|
**Acceptance Scenarios**:
|
|
|
|
1. **Given** a queued/running run transitions to successful completion, **When** the shell hint refreshes shortly afterward, **Then** it keeps that run visible briefly with a terminal-success state, `View operation`, `Show all operations`, and a `Dismiss` or `Close` tertiary affordance.
|
|
2. **Given** a queued/running run transitions to blocked, partial, failed, or reconciled terminal follow-up, **When** the shell hint refreshes, **Then** it keeps that follow-up visible instead of dropping it silently and uses a lifecycle-appropriate tertiary affordance such as `Acknowledge`.
|
|
3. **Given** a run exposes deterministic progress counts while active, **When** the shell hint renders that run, **Then** it may show clamped determinate progress, and **When** the run becomes terminal, **Then** it switches to terminal state copy instead of showing fake progress after completion.
|
|
|
|
---
|
|
|
|
### User Story 3 - Keep Hide / Dismiss / Acknowledge Browser-Session Only (Priority: P1)
|
|
|
|
As a tenant operator, I need queued/running, successful, and unresolved terminal hints to use the right local-only affordance for the current browser session, so the activity surface stays calm without inventing a server-side acknowledgement system.
|
|
|
|
**Why this priority**: it is the smallest safe calmness control that keeps lifecycle semantics explicit while staying within the existing Ops-UX contract.
|
|
|
|
**Independent Test**: open a tenant-scoped start surface with active and terminal items, use the lifecycle-sensitive tertiary affordances, and verify active items use `Hide activity`, successful terminal items use `Dismiss`/`Close`, unresolved terminal items use `Acknowledge`, and all of those controls remain browser-session-only.
|
|
|
|
**Acceptance Scenarios**:
|
|
|
|
1. **Given** queued/running items are visible, **When** the operator uses the tertiary affordance, **Then** it is labeled `Hide activity` and the current browser session remembers that choice without creating any database-backed preference.
|
|
2. **Given** only recent successful terminal items are visible, **When** the operator uses the tertiary affordance, **Then** it is labeled `Dismiss` or `Close` and the shell hint may also auto-dismiss after the short terminal-success grace window.
|
|
3. **Given** only unresolved terminal follow-up items are visible, **When** the operator uses the tertiary affordance, **Then** it is labeled `Acknowledge` and remains browser-session-only instead of persisting on the `OperationRun` record.
|
|
4. **Given** the shell hint is hidden and a new run is accepted in the current browser session, **When** the shared `run-enqueued` event fires, **Then** the shell hint reappears so the operator does not miss newly started work.
|
|
|
|
### Edge Cases
|
|
|
|
- No selected tenant or no `viewAny OperationRun` capability means the shell hint stays inert and does not poll or leak rows.
|
|
- More than three qualifying shell-visible rows must produce deterministic ordering and an overflow path that routes through the canonical collection helper.
|
|
- Just-completed successful runs remain visible only for the short terminal-success grace window and never keep an active progressbar after completion.
|
|
- Terminal follow-up runs (`blocked`, `partial`, `failed`, reconciled terminal failures) must not auto-disappear silently from the shell immediately after transition, even though the canonical dashboard/Operations follow-up surfaces remain authoritative.
|
|
- The shell hint must not introduce raw route strings; all run detail/collection links continue to flow through the canonical helper family.
|
|
- Browser-session hide, dismiss, or acknowledge state must not persist across browser sessions or mutate the `OperationRun` record.
|
|
|
|
## Requirements *(mandatory)*
|
|
|
|
**Constitution alignment summary**: This feature adds no Graph calls, no new write path, no new `OperationRun` lifecycle state, and no new persistence. It reuses the existing Ops-UX start contract, keeps `OperationRun.status` / `OperationRun.outcome` service-owned, leaves terminal DB notifications unchanged, and narrows the current global active-ops shell widget to the constitution-safe active-awareness contract.
|
|
|
|
### Functional Requirements
|
|
|
|
- **FR-001**: The implementation MUST derive shell activity items from existing `OperationRun` truth plus current shared helpers such as `OperationUxPresenter`, `OperationStatusNormalizer`, `OperationRunLinks`, and badge semantics. It MUST NOT create a second lifecycle, severity model, or persisted projection.
|
|
- **FR-002**: The tenant shell activity hint MUST always surface current active runs (`queued|running`) for the current tenant from existing `OperationRun` truth.
|
|
- **FR-003**: When a queued/running run transitions to successful completion, the shell hint MUST keep a compact terminal-success state visible briefly in the same surface instead of removing it immediately.
|
|
- **FR-004**: The terminal-success state MUST show the operation label, a success pill such as `Completed successfully`, a completion-recency line, concise no-action-needed guidance, canonical `View operation` and `Show all operations` links, and a tertiary `Dismiss` or `Close` affordance. It MUST NOT show fake active progress after completion.
|
|
- **FR-005**: Blocked, partial, failed, and reconciled terminal follow-up runs MUST NOT auto-disappear silently from the shell immediately after transition. The shell hint MUST keep them visible on the existing surface until they are acknowledged or otherwise handled through the canonical follow-up surfaces.
|
|
- **FR-006**: The tenant shell activity hint MUST show at most three prioritized items for the current tenant and MUST expose one canonical `View operation` link per item plus one canonical overflow path to `Show all operations` when more qualifying items exist. The overflow path MUST open the canonical Operations collection with the selected tenant encoded as the contextual `tenant_id` prefilter; on initial mount that requested tenant prefilter takes precedence over session/default state, and any restored local filters may only narrow within that tenant scope rather than broaden it.
|
|
- **FR-007**: The tenant shell activity hint MUST stop behaving as a fixed overlay that covers primary actions. Non-obstructive placement is part of the contract, not an optional polish step.
|
|
- **FR-008**: Determinate progress MUST appear only when `summary_counts.total` and `summary_counts.processed` are valid numeric values while the run is active. Determinate progress MUST be clamped to `0-100`, and the shell hint MUST NOT display fake active progress after terminal transition.
|
|
- **FR-009**: The lifecycle-sensitive tertiary affordance MUST use state-matching wording: `Hide activity` for queued/running shell hints, `Dismiss` or `Close` for terminal-success hints, and `Acknowledge` for unresolved terminal follow-up hints.
|
|
- **FR-010**: Browser-session hide, dismiss, and acknowledge behavior MUST stay browser-session-only. A newly accepted run in the current session MUST re-open the shell hint.
|
|
- **FR-011**: The implementation MUST update `docs/ui/tenantpilot-enterprise-ui-standards.md` with the shell activity-feedback pattern, including canonical links, bounded terminal-success/follow-up scope, progressbar eligibility, item limits, lifecycle-sensitive tertiary actions, hide/dismiss/acknowledge boundaries, and anti-patterns such as fake percentages or overlays that cover actions.
|
|
- **FR-012**: Operations collection/detail pages remain diagnostics-first drill-through targets. The shell hint MAY show at most one concise next-step cue when it materially clarifies whether inspection is needed, and it MUST NOT duplicate full diagnostics, logs, raw payloads, or support-only evidence.
|
|
|
|
### Authorization and Safety Requirements
|
|
|
|
- **AR-001**: Tenant/admin-plane authorization semantics stay unchanged: out-of-scope tenant access remains deny-as-not-found (`404` semantics through current tenant/admin boundaries), while in-scope visibility continues to reuse server-side `OperationRun` policies.
|
|
- **AR-002**: No surface in this slice may emit a run row or link the actor cannot already view through the current canonical Operations routes.
|
|
- **AR-003**: No destructive or mutating action is introduced. Existing run start surfaces and existing detail pages remain responsible for initiation/retry behavior and any confirmation requirements they already own.
|
|
|
|
### Non-Functional Requirements
|
|
|
|
- **NFR-001**: The slice MUST stay Filament-native and Livewire v4-compatible. No panel-provider registration change is allowed; `apps/platform/bootstrap/providers.php` remains authoritative.
|
|
- **NFR-002**: No new panel, no new globally searchable resource, and no new asset registration strategy are allowed.
|
|
- **NFR-003**: Polling must remain intentional and bounded. The shell hint may continue to use the current poller family, but the implementation must not add parallel uncoordinated polling loops or additional active-awareness hosts in this slice.
|
|
- **NFR-004**: Badge semantics remain centralized through existing badge infrastructure; no host surface may add its own status/outcome color mapping.
|
|
|
|
## Deferred Follow-Ups / Explicit Non-Goals
|
|
|
|
- Host-widget migration pass beyond the current global shell activity widget
|
|
- Polling and UI calmness standard beyond the v1 scope
|
|
- Notification/activity lifecycle standardization beyond the current start contract
|
|
- Any permanent inbox or tray treatment for terminal/follow-up operation states beyond the bounded shell grace/follow-up contract
|
|
- Activity tray / center v2
|
|
- Persistent reviewed / investigated semantics over failed or blocked runs
|
|
|
|
## Key Entities
|
|
|
|
- **Shell activity item**: a derived, non-persisted summary of one visible `OperationRun` in the shell, including operation label, lifecycle state, canonical detail/collection links, and progress treatment only when truthful.
|
|
- **Terminal success shell item**: a derived, non-persisted shell item for a just-completed successful run that remains visible briefly to close the feedback loop and confirm that no further action is needed.
|
|
- **Terminal follow-up shell item**: a derived, non-persisted shell item for a blocked, partial, failed, or reconciled terminal run that remains visible on the shell until the operator acknowledges it locally or handles it on the canonical follow-up surfaces.
|
|
- **Browser-session shell state**: a non-persisted shell-level state that remembers hide, dismiss, and acknowledge choices only for the current browser session.
|
|
|
|
## Success Criteria *(mandatory)*
|
|
|
|
### Measurable Outcomes
|
|
|
|
- **SC-001**: In the focused validation fixture with more than three qualifying tenant rows, the shell activity hint shows no more than three visible items plus exactly one overflow path to `Show all operations`.
|
|
- **SC-002**: On the validated row-action-heavy smoke surface, primary page actions remain clickable while the shell activity hint is visible.
|
|
- **SC-003**: In validation coverage where a queued/running run transitions to successful completion, the shell activity hint keeps that run visible briefly with success semantics and no fake active progress after completion.
|
|
- **SC-004**: In validation coverage where a queued/running run transitions to blocked, partial, failed, or reconciled terminal follow-up, the shell activity hint does not drop that follow-up silently from the shell immediately after transition.
|
|
- **SC-005**: The shell hint routes through the canonical helper family and keeps the guard coverage free of new raw operation-link bypasses.
|