## 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
5.0 KiB
5.0 KiB
Research: Operations Naming Consolidation
Decision 1: Update shared label emitters first, then patch remaining local copy
- Decision: Treat
OperationRunLinks,OperationUxPresenter,OperationRunCompleted,OperationRunQueued,RelatedActionLabelCatalog,RelatedNavigationResolver,ReferenceTypeLabelCatalog, andOperationRunReferenceResolveras the primary change points for deep-link labels and identifiers. - Rationale: Repo analysis shows that these helpers feed multiple notifications, related-navigation affordances, reference summaries, and embedded viewers. Updating them first removes the largest source of naming drift without inventing a new naming layer.
- Alternatives considered: Patch every visible
View runandRun #...string independently. Rejected because shared helpers would continue emitting drift into newly touched surfaces.
Decision 2: Preserve internal run implementation names and route helpers
- Decision: Keep existing class names, route names, action names such as
view_run, route slugs, and enum values intact, while changing only operator-visible labels, titles, and helper copy. - Rationale: The spec explicitly forbids internal renames, and a naming-only slice should not widen into compatibility or refactor work.
- Alternatives considered: Rename internal helpers and route slugs to
operation. Rejected because it would create unnecessary migration and regression risk outside the current release truth.
Decision 3: Keep Spec 170 system-plane behavior out of scope while protecting against shared-helper regressions
- Decision: Leave
/system/ops/*interaction semantics under Spec 170 ownership and only accept indirect system-plane copy changes if a shared helper already used by both slices requires it. - Rationale: Spec 170 already aligned visible
Operations/Operationnaming and interaction semantics on the dedicated system pages. Spec 171 is about residual drift elsewhere. - Alternatives considered: Re-open the system pages inside Spec 171. Rejected because it would overlap active scope and blur ownership between the two specs.
Decision 4: Preserve workflow verbs where they describe starting work, not an existing record
- Decision: Keep verbs such as
Start verificationand bootstrap-progress wording when they describe initiating work, but requireOpen operation,Operation ID, andOperation #...when the UI references an already-createdOperationRunrecord. - Rationale: Verification and onboarding surfaces currently mix task language with record language. The operator needs both concepts, but they must not collapse into the same ambiguous
runnoun. - Alternatives considered: Replace every visible use of
runwithoperation, including workflow verbs. Rejected because the spec explicitly allows task-oriented verbs when they describe initiating new work.
Decision 5: Update plural summary copy in place instead of introducing a presenter or taxonomy
- Decision: Adjust existing builders and Blade views such as
WorkspaceOverviewBuilder,BaselineCompareSummaryAssessor,ManagedTenantOnboardingWizard,resources/views/filament/pages/monitoring/operations.blade.php, and tenant summary widgets directly. - Rationale: The slice is about copy consistency, not about inventing a new cross-domain explanation layer. Direct updates satisfy
ABSTR-001andLAYER-001. - Alternatives considered: Introduce a reusable naming presenter or a pluralization catalog just for operation copy. Rejected because one concrete noun family does not justify a new abstraction.
Decision 6: Use representative rendered-surface tests instead of a global string-ban guard
- Decision: Update focused unit, feature, Livewire, and browser tests that already render the affected links, summaries, and embedded reports.
- Rationale: Valid uses of
runstill exist internally and in workflow-verb contexts. The constitution prefers business-truth assertions over thin indirection or over-broad grep-style guards. - Alternatives considered: Add an architecture test that forbids
View run,Run ID, orRun #repo-wide. Rejected because it would either fail on valid contexts or require an exception list that encodes the same drift the slice is meant to simplify.
Decision 7: Record the route and embedded-surface naming expectations in an OpenAPI-style contract
- Decision: Add
contracts/operation-naming-surface-contract.yamlto capture existing route targets, identifier-label rules, embedded verification expectations, and plural-summary guidance. - Rationale: The planning workflow expects a concrete contract artifact, and this feature benefits from a machine-readable record of which route targets and visible labels are considered canonical without inventing a new JSON API.
- Alternatives considered: Skip
contracts/because no API route changes are introduced. Rejected because the route/UI contract is still central to the implementation and review workflow.