From c1479600d6b3eb6069e1a9f23cd3f94984b02dc6 Mon Sep 17 00:00:00 2001 From: Ahmed Darrazi Date: Thu, 26 Mar 2026 14:07:10 +0100 Subject: [PATCH 1/2] feat: harden operation run detail hierarchy --- .github/agents/copilot-instructions.md | 4 +- .specify/memory/constitution.md | 42 +- .specify/templates/plan-template.md | 1 + .specify/templates/spec-template.md | 7 + .specify/templates/tasks-template.md | 3 + .../TenantlessOperationRunViewer.php | 12 +- .../Resources/OperationRunResource.php | 596 +++++++++++++----- .../BaselineCompareEvidenceGapTable.php | 46 +- .../EnterpriseDetailBuilder.php | 35 +- .../EnterpriseDetailPageData.php | 32 +- .../EnterpriseDetailSectionFactory.php | 96 ++- .../EnterpriseDetail/TechnicalDetailData.php | 2 + docs/HANDOVER.md | 4 +- docs/product/principles.md | 7 +- docs/product/roadmap.md | 19 + docs/product/standards/README.md | 4 +- lang/en/baseline-compare.php | 7 +- .../enterprise-detail/decision-zone.blade.php | 71 +++ .../enterprise-detail/header.blade.php | 146 ++--- .../enterprise-detail/layout.blade.php | 73 ++- .../enterprise-detail/section-items.blade.php | 58 +- .../supporting-card.blade.php | 78 ++- .../technical-detail.blade.php | 13 +- .../entries/evidence-gap-subjects.blade.php | 43 +- .../governance-artifact-truth.blade.php | 431 +++++++++---- .../entries/related-context.blade.php | 13 +- .../checklists/requirements.md | 36 ++ .../operation-run-detail-page.openapi.yaml | 303 +++++++++ specs/164-run-detail-hardening/data-model.md | 182 ++++++ specs/164-run-detail-hardening/plan.md | 257 ++++++++ specs/164-run-detail-hardening/quickstart.md | 114 ++++ specs/164-run-detail-hardening/research.md | 57 ++ specs/164-run-detail-hardening/spec.md | 203 ++++++ specs/164-run-detail-hardening/tasks.md | 224 +++++++ ...EnterpriseDetailTemplateRegressionTest.php | 2 +- .../OperationRunBaselineTruthSurfaceTest.php | 76 ++- .../OperationRunEnterpriseDetailPageTest.php | 67 +- .../TenantlessOperationRunViewerTest.php | 11 + .../EnterpriseDetailBuilderTest.php | 11 +- 39 files changed, 2846 insertions(+), 540 deletions(-) create mode 100644 resources/views/filament/infolists/entries/enterprise-detail/decision-zone.blade.php create mode 100644 specs/164-run-detail-hardening/checklists/requirements.md create mode 100644 specs/164-run-detail-hardening/contracts/operation-run-detail-page.openapi.yaml create mode 100644 specs/164-run-detail-hardening/data-model.md create mode 100644 specs/164-run-detail-hardening/plan.md create mode 100644 specs/164-run-detail-hardening/quickstart.md create mode 100644 specs/164-run-detail-hardening/research.md create mode 100644 specs/164-run-detail-hardening/spec.md create mode 100644 specs/164-run-detail-hardening/tasks.md diff --git a/.github/agents/copilot-instructions.md b/.github/agents/copilot-instructions.md index d34058c6..515a2b7f 100644 --- a/.github/agents/copilot-instructions.md +++ b/.github/agents/copilot-instructions.md @@ -106,6 +106,8 @@ ## Active Technologies - PHP 8.4 / Laravel 12, Blade, Alpine via Filament, Tailwind CSS v4 + Filament v5, Livewire v4, Pest v4, Laravel Sail, existing `OperationRun` and baseline compare services (162-baseline-gap-details) - PostgreSQL with JSONB-backed `operation_runs.context`; no new tables required (162-baseline-gap-details) - PostgreSQL via existing application tables, especially `operation_runs.context` and baseline snapshot summary JSON (163-baseline-subject-resolution) +- PHP 8.4, Laravel 12, Blade views, Alpine via Filament v5 / Livewire v4 + Filament v5, Livewire v4, Pest v4, Laravel Sail, existing `OperationRunResource`, `TenantlessOperationRunViewer`, `EnterpriseDetailBuilder`, `ArtifactTruthPresenter`, `OperationUxPresenter`, and `SummaryCountsNormalizer` (164-run-detail-hardening) +- PostgreSQL with existing `operation_runs` JSONB-backed `context`, `summary_counts`, and `failure_summary`; no schema change planned (164-run-detail-hardening) - PHP 8.4.15 (feat/005-bulk-operations) @@ -125,8 +127,8 @@ ## Code Style PHP 8.4.15: Follow standard conventions ## Recent Changes +- 164-run-detail-hardening: Added PHP 8.4, Laravel 12, Blade views, Alpine via Filament v5 / Livewire v4 + Filament v5, Livewire v4, Pest v4, Laravel Sail, existing `OperationRunResource`, `TenantlessOperationRunViewer`, `EnterpriseDetailBuilder`, `ArtifactTruthPresenter`, `OperationUxPresenter`, and `SummaryCountsNormalizer` - 163-baseline-subject-resolution-session-1774398153: Added PHP 8.4 + Laravel 12, Filament v5, Livewire v4 - 163-baseline-subject-resolution: Added PHP 8.4 + Laravel 12, Filament v5, Livewire v4 -- 162-baseline-gap-details: Added PHP 8.4 / Laravel 12, Blade, Alpine via Filament, Tailwind CSS v4 + Filament v5, Livewire v4, Pest v4, Laravel Sail, existing `OperationRun` and baseline compare services diff --git a/.specify/memory/constitution.md b/.specify/memory/constitution.md index b8476e14..87a6302b 100644 --- a/.specify/memory/constitution.md +++ b/.specify/memory/constitution.md @@ -1,19 +1,22 @@ @@ -416,6 +419,39 @@ ### Badge Semantics Are Centralized (BADGE-001) - Introducing or changing a status-like value MUST include updating the relevant badge mapper and adding/updating tests for the mapping. - Tag/category chips (e.g., type/platform/environment) are not status-like and are not governed by BADGE-001. +### Filament Native First / No Ad-hoc Styling (UI-FIL-001) +- Admin and operator-facing surfaces MUST use native Filament components, existing shared UI primitives, and centralized design patterns first. +- If Filament already provides the required semantic element, feature code MUST use the Filament-native component instead of a locally assembled replacement. +- Preferred native elements include `x-filament::badge`, `x-filament::button`, `x-filament::icon`, and Filament Forms, Infolists, Tables, Sections, Tabs, Grids, and Actions. + +Forbidden local replacements +- Feature code MUST NOT hand-build badges, pills, status chips, alert cards, or action buttons from raw ``, `
`, or `