## Summary - align operator-visible OperationRun terminology to canonical `Operations` / `Operation` labels across shared links, notifications, verification/onboarding surfaces, summary widgets, and monitoring/detail pages - add the Spec 171 planning artifacts under `specs/171-operations-naming-consolidation/` - close the remaining tenant dashboard and admin copy drift found during browser smoke validation ## Validation - `export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && vendor/bin/sail artisan test --compact tests/Unit/Support/RelatedNavigationResolverTest.php tests/Unit/Support/References/RelatedContextReferenceAdapterTest.php tests/Feature/OpsUx/NotificationViewRunLinkTest.php tests/Feature/Guards/ActionSurfaceContractTest.php tests/Feature/Operations/TenantlessOperationRunViewerTest.php tests/Feature/Filament/BackupSetResolvedReferencePresentationTest.php tests/Feature/Filament/TenantVerificationReportWidgetTest.php tests/Feature/Onboarding/OnboardingVerificationTest.php tests/Feature/Onboarding/OnboardingVerificationClustersTest.php tests/Feature/Onboarding/OnboardingVerificationV1_5UxTest.php tests/Feature/Filament/BaselineCompareSummaryConsistencyTest.php tests/Feature/Filament/WorkspaceOverviewContentTest.php tests/Feature/Filament/RecentOperationsSummaryWidgetTest.php tests/Feature/Monitoring/OperationLifecycleAggregateVisibilityTest.php tests/Feature/System/Spec114/OpsTriageActionsTest.php tests/Feature/System/Spec114/OpsFailuresViewTest.php tests/Feature/System/Spec114/OpsStuckViewTest.php` - `export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && vendor/bin/sail artisan test --compact tests/Browser/OnboardingDraftRefreshTest.php` - `export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && vendor/bin/sail bin pint --dirty --format agent` ## Notes - no schema or route renames - Filament / Livewire surface behavior stays within the existing admin and tenant panels - OperationRunResource remains excluded from global search Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #202
164 lines
12 KiB
Markdown
164 lines
12 KiB
Markdown
# Implementation Plan: Operations Naming Consolidation
|
|
|
|
**Branch**: `171-operations-naming-consolidation` | **Date**: 2026-03-30 | **Spec**: `/Users/ahmeddarrazi/Documents/projects/TenantAtlas/specs/171-operations-naming-consolidation/spec.md`
|
|
**Input**: Feature specification from `/Users/ahmeddarrazi/Documents/projects/TenantAtlas/specs/171-operations-naming-consolidation/spec.md`
|
|
|
|
**Note**: This template is filled in by the `/speckit.plan` command. See `.specify/scripts/` for helper scripts.
|
|
|
|
Consolidate non-system operator-visible references to existing `OperationRun` records so shared links, notifications, embedded verification/onboarding reports, tenantless admin viewers, and summary/helper copy consistently use `Operations` / `Operation` while preserving existing route targets, capability checks, and operation lifecycle behavior. The implementation stays narrow: no schema, route, capability, or internal class renames; only shared label emitters, representative Filament/Blade surfaces, and focused Pest/Browser coverage are updated.
|
|
|
|
## Technical Context
|
|
|
|
**Language/Version**: PHP 8.4, Laravel 12, Livewire v4, Filament v5, Tailwind CSS v4
|
|
**Primary Dependencies**: `laravel/framework`, `filament/filament`, `livewire/livewire`, `pestphp/pest`
|
|
**Storage**: PostgreSQL with existing `operation_runs`, notification payloads, workspace records, and tenant records; no schema changes
|
|
**Testing**: Pest unit, feature, Livewire, and browser tests executed through Laravel Sail
|
|
**Target Platform**: Laravel web application running in Sail locally and containerized Linux environments for staging/production
|
|
**Project Type**: Laravel monolith with admin and system Filament panels plus shared Blade partials
|
|
**Performance Goals**: Preserve existing DB-only render paths and current route/navigation behavior; add no remote calls, no new queued work, and no broader query fan-out than the current eager-loaded surfaces
|
|
**Constraints**: Spec 170 remains authoritative for `/system/ops/*` interaction semantics; no internal class, route, enum, or persistence renames; workflow verbs such as `Start verification` remain where they describe new work; authorization, notification timing, and `OperationRun` lifecycle behavior stay unchanged
|
|
**Scale/Scope**: One naming-only slice spanning shared navigation/presentation helpers, representative admin/tenant/workspace/platform-embedded surfaces, and focused unit/feature/browser regression coverage
|
|
|
|
## Constitution Check
|
|
|
|
*GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.*
|
|
|
|
- `PASS` Inventory-first / snapshots-second: the slice does not change inventory, snapshot, backup, or artifact truth.
|
|
- `PASS` Read/write separation: no new write path is introduced; existing queued/terminal notifications and viewer actions keep their current behavior and only change visible naming.
|
|
- `PASS` Graph contract path: no Microsoft Graph integration path is touched.
|
|
- `PASS` Deterministic capabilities: no capability registry or role mapping changes are introduced.
|
|
- `PASS` RBAC-UX plane separation: the feature reuses existing admin, tenant, workspace-context, and platform routes without widening access or changing 404/403 semantics.
|
|
- `PASS` Workspace and tenant isolation: shared links continue to resolve through the current scoped routes and existing membership/capability checks remain authoritative.
|
|
- `PASS` Destructive confirmation standard: no destructive action behavior changes; existing confirmation requirements remain unchanged.
|
|
- `PASS` Ops-UX 3-surface feedback: queued and terminal notifications remain the same surfaces; only visible action labels and helper copy change.
|
|
- `PASS` Ops lifecycle ownership and summary-count rules: no `OperationRun.status`, `OperationRun.outcome`, or `summary_counts` behavior changes are introduced.
|
|
- `PASS` Proportionality / bloat: the feature adds no persistence, abstraction, state family, or cross-domain taxonomy and instead reduces visible drift through existing helpers.
|
|
- `PASS` UI naming (`UI-NAMING-001`): this feature directly standardizes operator-facing `OperationRun` nomenclature outside Spec 170.
|
|
- `PASS` UI surface taxonomy and inspect model: no new surface type or competing inspect model is introduced; embedded reports and viewers retain their current interaction model.
|
|
- `PASS` Filament-native UI (`UI-FIL-001`): the slice stays inside existing Filament actions, widgets, pages, and shared Blade views with no new local UI framework.
|
|
- `PASS` Testing truth (`TEST-TRUTH-001`): the plan updates representative rendered-surface tests instead of introducing a blanket string-ban guard that would catch valid uses of `run`.
|
|
|
|
## Project Structure
|
|
|
|
### Documentation (this feature)
|
|
|
|
```text
|
|
specs/171-operations-naming-consolidation/
|
|
├── plan.md
|
|
├── research.md
|
|
├── data-model.md
|
|
├── quickstart.md
|
|
├── contracts/
|
|
│ └── operation-naming-surface-contract.yaml
|
|
└── tasks.md
|
|
```
|
|
|
|
### Source Code (repository root)
|
|
|
|
```text
|
|
app/
|
|
├── Filament/
|
|
│ ├── Pages/
|
|
│ │ ├── Operations/
|
|
│ │ │ └── TenantlessOperationRunViewer.php
|
|
│ │ └── Workspaces/
|
|
│ │ └── ManagedTenantOnboardingWizard.php
|
|
│ ├── Resources/
|
|
│ │ ├── BackupScheduleResource.php
|
|
│ │ ├── BackupSetResource.php
|
|
│ │ ├── EvidenceSnapshotResource.php
|
|
│ │ └── EvidenceSnapshotResource/
|
|
│ │ └── Pages/
|
|
│ │ └── ViewEvidenceSnapshot.php
|
|
│ └── Widgets/
|
|
│ └── Tenant/
|
|
│ └── TenantVerificationReport.php
|
|
├── Notifications/
|
|
│ ├── OperationRunCompleted.php
|
|
│ └── OperationRunQueued.php
|
|
└── Support/
|
|
├── Baselines/
|
|
│ └── BaselineCompareSummaryAssessor.php
|
|
├── Navigation/
|
|
│ ├── RelatedActionLabelCatalog.php
|
|
│ └── RelatedNavigationResolver.php
|
|
├── OpsUx/
|
|
│ └── OperationUxPresenter.php
|
|
├── References/
|
|
│ ├── ReferenceTypeLabelCatalog.php
|
|
│ └── Resolvers/
|
|
│ └── OperationRunReferenceResolver.php
|
|
├── Workspaces/
|
|
│ └── WorkspaceOverviewBuilder.php
|
|
└── OperationRunLinks.php
|
|
|
|
resources/
|
|
└── views/
|
|
└── filament/
|
|
├── components/
|
|
│ └── verification-report-viewer.blade.php
|
|
├── forms/
|
|
│ └── components/
|
|
│ └── managed-tenant-onboarding-verification-report.blade.php
|
|
├── modals/
|
|
│ └── onboarding-verification-technical-details.blade.php
|
|
├── pages/
|
|
│ └── monitoring/
|
|
│ └── operations.blade.php
|
|
└── widgets/
|
|
└── tenant/
|
|
├── recent-operations-summary.blade.php
|
|
└── tenant-verification-report.blade.php
|
|
|
|
tests/
|
|
├── Browser/
|
|
│ └── OnboardingDraftRefreshTest.php
|
|
├── Feature/
|
|
│ ├── Filament/
|
|
│ │ ├── BackupSetResolvedReferencePresentationTest.php
|
|
│ │ └── BaselineCompareSummaryConsistencyTest.php
|
|
│ ├── Guards/
|
|
│ │ └── ActionSurfaceContractTest.php
|
|
│ ├── Monitoring/
|
|
│ │ └── OperationLifecycleAggregateVisibilityTest.php
|
|
│ ├── Operations/
|
|
│ │ └── TenantlessOperationRunViewerTest.php
|
|
│ └── OpsUx/
|
|
│ └── NotificationViewRunLinkTest.php
|
|
└── Unit/
|
|
└── Support/
|
|
├── References/
|
|
│ └── RelatedContextReferenceAdapterTest.php
|
|
└── RelatedNavigationResolverTest.php
|
|
```
|
|
|
|
**Structure Decision**: This is a single Laravel application. The implementation stays inside existing shared support classes, existing Filament/Blade surfaces, and the existing Pest/Browser test suite. No new application layer or directory is needed.
|
|
|
|
**Focused test inventory (authoritative)**: The tree above is representative, not exhaustive. The additional focused coverage for this feature is `tests/Feature/Filament/TenantVerificationReportWidgetTest.php`, `tests/Feature/Onboarding/OnboardingVerificationTest.php`, `tests/Feature/Onboarding/OnboardingVerificationClustersTest.php`, `tests/Feature/Onboarding/OnboardingVerificationV1_5UxTest.php`, `tests/Feature/Filament/WorkspaceOverviewContentTest.php`, `tests/Feature/Filament/RecentOperationsSummaryWidgetTest.php`, and the Spec 170/shared-helper regression guard `tests/Feature/System/Spec114/OpsTriageActionsTest.php`, `tests/Feature/System/Spec114/OpsFailuresViewTest.php`, and `tests/Feature/System/Spec114/OpsStuckViewTest.php`.
|
|
|
|
## Complexity Tracking
|
|
|
|
No constitution waiver is expected. This slice narrows existing visible language drift instead of adding structure.
|
|
|
|
| Violation | Why Needed | Simpler Alternative Rejected Because |
|
|
|-----------|------------|-------------------------------------|
|
|
| None | Not applicable | Not applicable |
|
|
|
|
## Proportionality Review
|
|
|
|
- **Current operator problem**: outside the already-aligned system-panel surfaces from Spec 170, the same `OperationRun` record is still presented as `run`, `operation run`, and `operation` depending on the page, widget, notification, or embedded report, which makes historical records feel like different domain objects.
|
|
- **Existing structure is insufficient because**: shared label catalogs, navigation resolvers, reference presenters, notifications, and embedded report partials each emit their own visible copy, so one-off local fixes would leave cross-surface drift in place and invite regression.
|
|
- **Narrowest correct implementation**: update the existing shared label emitters first, then patch only the representative non-system surfaces that still render local `run` terminology, while leaving routes, classes, enums, and lifecycle behavior intact.
|
|
- **Ownership cost created**: low. The feature requires targeted wording updates and representative unit/feature/browser assertions for rendered copy, but adds no new runtime abstraction or persistence burden.
|
|
- **Alternative intentionally rejected**: renaming internal PHP classes, route slugs, or operation-type identifiers was rejected because the feature scope is operator-visible naming consistency, not internal refactoring.
|
|
- **Release truth**: current-release truth. The naming drift already exists across the shipped workspace, tenant, and embedded operation-related surfaces.
|
|
|
|
## Post-Design Constitution Re-check
|
|
|
|
- `PASS` `UI-NAMING-001`: the design centralizes canonical `Operations` / `Operation` nouns in shared emitters and applies them consistently to links, identifiers, and helper copy.
|
|
- `PASS` `UI-CONST-001` / `UI-SURF-001` / `UI-HARD-001`: no surface classification, inspect model, or action-hierarchy change is introduced; only operator-visible naming changes.
|
|
- `PASS` `OPSURF-001`: verification and onboarding surfaces keep workflow verbs for starting work while naming the resulting historical record as an operation.
|
|
- `PASS` `RBAC-UX-001` through `RBAC-UX-005`: existing route, visibility, and confirmation semantics remain unchanged because only labels and helper copy move.
|
|
- `PASS` `TEST-TRUTH-001`: design coverage focuses on rendered links, identifiers, and plural summary copy across unit, feature, and browser tests.
|
|
- `PASS` `BLOAT-001`: no new persistence, abstraction, state, or taxonomy was introduced during design.
|
|
- `PASS` Filament v5 / Livewire v4 guardrails: the plan touches existing Filament and Livewire-compatible components only; no provider registration or asset strategy changes are required. |