TenantAtlas/.github/agents/copilot-instructions.md
Ahmed Darrazi c6cc58e1f3
Some checks failed
PR Fast Feedback / fast-feedback (pull_request) Failing after 43s
feat: add governance run summaries
2026-04-20 22:43:30 +02:00

44 KiB

TenantAtlas Development Guidelines

Auto-generated from all feature plans. Last updated: 2025-12-22

Relocation override

  • The authoritative Laravel application root is apps/platform.
  • Human-facing commands should use cd apps/platform && ....
  • Repo-root tooling may delegate via ./scripts/platform-sail when it cannot set a nested working directory.
  • Repo-root JavaScript orchestration uses corepack pnpm install, corepack pnpm dev:platform, corepack pnpm dev:website, corepack pnpm dev, corepack pnpm build:website, and corepack pnpm build:platform.
  • corepack pnpm dev:platform starts the platform Sail stack and the Laravel panel Vite watcher. corepack pnpm dev starts that platform watcher plus the website dev server.
  • apps/website is a standalone Astro app, not a second Laravel runtime, so Boost MCP remains platform-only.
  • If any generated technology note below conflicts with the current repo, trust apps/platform/composer.json, apps/platform/package.json, and the live Laravel application metadata over stale generated entries.

Active Technologies

  • PHP 8.4.15 + Laravel 12, Filament v4, Livewire v3 (feat/005-bulk-operations)

  • PostgreSQL (app), SQLite in-memory (tests) (feat/005-bulk-operations)

  • PostgreSQL (Sail locally) (feat/032-backup-scheduling-mvp)

  • PHP 8.4.x + Laravel 12, Filament v4, Livewire v3 (feat/042-inventory-dependencies-graph)

  • PostgreSQL (JSONB) (feat/042-inventory-dependencies-graph)

  • PHP 8.4.x (Laravel 12) + Laravel 12, Filament v4, Livewire v3 (feat/047-inventory-foundations-nodes)

  • PostgreSQL (JSONB for InventoryItem.meta_jsonb) (feat/047-inventory-foundations-nodes)

  • PostgreSQL (JSONB in operation_runs.context, operation_runs.summary_counts) (056-remove-legacy-bulkops)

  • PHP 8.4.15 (Laravel 12.47.0) + Filament v5.0.0, Livewire v4.0.1 (058-tenant-ui-polish)

  • PHP 8.4 (per repo guidelines) + Laravel 12, Filament v5, Livewire v4 (067-rbac-troubleshooting)

  • PostgreSQL (via Laravel Sail) (067-rbac-troubleshooting)

  • PHP 8.4.x (Composer constraint: ^8.2) + Laravel 12, Filament 5, Livewire 4+, Pest 4, Sail 1.x (073-unified-managed-tenant-onboarding-wizard)

  • PostgreSQL (Sail) + SQLite in tests where applicable (073-unified-managed-tenant-onboarding-wizard)

  • PHP 8.4 (Laravel 12) + Filament v5, Livewire v4, Filament Infolists (schema-based) (078-operations-tenantless-canonical)

  • PostgreSQL (no new migrations — read-only model changes) (078-operations-tenantless-canonical)

  • PHP 8.4.15 (Laravel 12) + Filament v5, Livewire v4, Tailwind v4 (080-workspace-managed-tenant-admin)

  • PostgreSQL (via Sail) (080-workspace-managed-tenant-admin)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Socialite v5 (081-provider-connection-cutover)

  • PHP 8.4.x + Laravel 12, Filament v5, Livewire v4 (082-action-surface-contract)

  • PHP 8.4 (Laravel 12) + Filament v5 (Livewire v4), Queue/Jobs (Laravel), Microsoft Graph via GraphClientInterface (084-verification-surfaces-unification)

  • PostgreSQL (JSONB-backed OperationRun.context) (084-verification-surfaces-unification)

  • PHP 8.4.15 (Laravel 12) + Filament v5, Livewire v4, Pest v4, Tailwind CSS v4, Laravel Sail (085-tenant-operate-hub)

  • PostgreSQL (primary) + session (workspace context + last-tenant memory) (085-tenant-operate-hub)

  • PHP 8.4 (Laravel 12) + Filament v5, Livewire v4, Laravel Sail, Tailwind CSS v4 (085-tenant-operate-hub)

  • PostgreSQL (Sail), SQLite in tests (087-legacy-runs-removal)

  • PHP 8.4.x + Laravel 12, Filament v5, Livewire v4, Microsoft Graph integration via GraphClientInterface (095-graph-contracts-registry-completeness)

  • PHP 8.4.15 (Laravel 12) + Filament v5, Livewire v4, Laravel Queue, Laravel Notifications (100-alert-target-test-actions)

  • PostgreSQL (Sail locally); SQLite is used in some tests (101-golden-master-baseline-governance-v1)

  • PHP 8.4 (Laravel 12) + Filament v5, Livewire v4, OperateHubShell support class (103-ia-scope-filter-semantics)

  • PostgreSQL — no schema changes (103-ia-scope-filter-semantics)

  • PHP 8.4 (Laravel 12) + Filament v5, Livewire v4, Pest v4 (104-provider-permission-posture)

  • PostgreSQL (via Sail), JSONB for stored report payloads and finding evidence (104-provider-permission-posture)

  • PHP 8.4 / Laravel 12 + Filament v5, Livewire v4, Tailwind CSS v4 (107-workspace-chooser)

  • PostgreSQL (existing tables: workspaces, workspace_memberships, users, audit_logs) (107-workspace-chooser)

  • PHP 8.4 (Laravel 12) + Filament v5, Livewire v4, Laravel Framework v12 (109-review-pack-export)

  • PostgreSQL (jsonb columns for summary/options), local filesystem (exports disk) for ZIP artifacts (109-review-pack-export)

  • PHP 8.4 + Laravel 12, Filament v5, Livewire v4 (116-baseline-drift-engine)

  • PHP 8.4, Laravel 12, Filament v5, Livewire v4 + Laravel framework, Filament admin panels, Livewire, PostgreSQL JSONB persistence, Laravel Sail (120-secret-redaction-integrity)

  • PostgreSQL (policy_versions, operation_runs, audit_logs, related evidence tables) (120-secret-redaction-integrity)

  • PHP 8.4.15 / Laravel 12 + Filament v5 + Livewire v4.0+ + Tailwind CSS v4 (121-workspace-switch-fix)

  • PostgreSQL + session-backed workspace context; no schema changes (121-workspace-switch-fix)

  • PHP 8.4.15 / Laravel 12 + Filament v5, Livewire v4.0+, Tailwind CSS v4, Pest v4 (122-empty-state-consistency)

  • PostgreSQL + existing workspace/tenant session context; no schema changes (122-empty-state-consistency)

  • PHP 8.4 runtime target on Laravel 12 code conventions; Composer constraint php:^8.2 + Laravel 12, Filament v5.2.1, Livewire v4, Pest v4, Laravel Sail (123-operations-auto-refresh)

  • PostgreSQL primary app database (123-operations-auto-refresh)

  • PHP 8.4.15 + Laravel 12, Filament 5, Livewire 4, Tailwind CSS 4, existing CoverageCapabilitiesResolver, InventoryPolicyTypeMeta, BadgeCatalog, and TagBadgeCatalog (124-inventory-coverage-table)

  • N/A for this feature; page remains read-only and uses registry/config-derived runtime data while PostgreSQL remains unchanged (124-inventory-coverage-table)

  • PHP 8.4.15 + Laravel 12, Filament 5, Livewire 4, Tailwind CSS 4, existing BadgeCatalog / BadgeRenderer, existing UI enforcement helpers, existing Filament resources, relation managers, widgets, and Livewire table components (125-table-ux-standardization)

  • PostgreSQL remains unchanged; this feature is presentation-layer and behavior-layer only (125-table-ux-standardization)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4.0+, Tailwind CSS v4, Pest v4, existing BadgeCatalog / BadgeRenderer, existing TagBadgeCatalog / TagBadgeRenderer, existing Filament resource tables (126-filter-ux-standardization)

  • PostgreSQL remains unchanged; session persistence uses Filament-native session keys and existing workspace/tenant contex (126-filter-ux-standardization)

  • PHP 8.4 (Laravel 12) + Filament v5, Livewire v4, Laravel Sail, Microsoft Graph provider stack (127-rbac-inventory-backup)

  • PostgreSQL for tenant-owned inventory, backup items, versions, verification outcomes, and operation runs (127-rbac-inventory-backup)

  • PostgreSQL via Laravel Sail (128-rbac-baseline-compare)

  • PostgreSQL via Laravel Sail plus session-backed workspace and tenant contex (129-workspace-admin-home)

  • PostgreSQL via Laravel Sail using existing baseline_snapshots, baseline_snapshot_items, and JSONB presentation source fields (130-structured-snapshot-rendering)

  • PostgreSQL via Laravel Sail, plus existing session-backed workspace and tenant contex (131-cross-resource-navigation)

  • PostgreSQL via Laravel Sail plus existing workspace and tenant context, existing Eloquent relations, and provider-derived identifiers already stored in domain records (132-guid-context-resolver)

  • PostgreSQL via Laravel Sail; no schema change expected (133-detail-page-template)

  • PostgreSQL via Laravel Sail; existing audit_logs table expanded in place; JSON context payload remains application-shaped rather than raw archival payloads (134-audit-log-foundation)

  • PHP 8.4 on Laravel 12 + Filament v5, Livewire v4, Pest v4, Laravel Sail (135-canonical-tenant-context-resolution)

  • PostgreSQL application database (135-canonical-tenant-context-resolution)

  • PostgreSQL application database and session-backed Filament table state (136-admin-canonical-tenant)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Laravel Sail, Pest v4, PHPUnit v12 (137-platform-provider-identity)

  • PostgreSQL via Laravel migrations and encrypted model casts (137-platform-provider-identity)

  • PHP 8.4 (Laravel 12) + Filament v5 (Livewire v4), Laravel Blade, existing onboarding/verification support classes (139-verify-access-permissions-assist)

  • PostgreSQL; existing JSON-backed onboarding draft state and OperationRun.context.verification_report (139-verify-access-permissions-assist)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, PostgreSQL, Laravel Sail, Pest v4, existing OperationRunService, ProviderOperationStartGate, onboarding services, workspace audit logging (140-onboarding-lifecycle-operation-checkpoints-concurrency-mvp)

  • PostgreSQL tables including managed_tenant_onboarding_sessions, operation_runs, tenants, and provider-connection-backed tenant records (140-onboarding-lifecycle-operation-checkpoints-concurrency-mvp)

  • PostgreSQL via Laravel Sail for existing source records and JSON payloads; no new persistence introduced (141-shared-diff-presentation-foundation)

  • PHP 8.4.15 / Laravel 12 + Filament v5, Livewire v4.0+, Tailwind CSS v4, shared App\Support\Diff foundation from Spec 141 (142-rbac-role-definition-diff-ux-upgrade)

  • PostgreSQL via Laravel Sail for existing findings.evidence_jsonb; no schema or persistence changes (142-rbac-role-definition-diff-ux-upgrade)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Tailwind CSS v4 (143-tenant-lifecycle-operability-context-semantics)

  • PostgreSQL via Laravel Eloquent models and workspace/tenant scoped tables (143-tenant-lifecycle-operability-context-semantics)

  • PHP 8.4 (Laravel 12) + Filament v5, Livewire v4, Laravel Gates and Policies, OperateHubShell, OperationRunLinks (144-canonical-operation-viewer-context-decoupling)

  • PostgreSQL plus session-backed workspace and remembered tenant context (no schema changes) (144-canonical-operation-viewer-context-decoupling)

  • PHP 8.4.15 with Laravel 12, Filament v5, Livewire v4.0+ + Filament Actions/Tables/Infolists, Laravel Gates/Policies, UiEnforcement, WorkspaceUiEnforcement, ActionSurfaceDeclaration, BadgeCatalog, TenantOperabilityService, OnboardingLifecycleService (145-tenant-action-taxonomy-lifecycle-safe-visibility)

  • PostgreSQL for tenants, onboarding sessions, audit logs, operation runs, and workspace membership data (145-tenant-action-taxonomy-lifecycle-safe-visibility)

  • PostgreSQL (existing tenant and operation records only; no schema changes planned) (146-central-tenant-status-presentation)

  • PostgreSQL plus existing session-backed workspace and remembered-tenant context; no schema change planned (147-tenant-selector-remembered-context-enforcement)

  • PHP 8.4.15 + Laravel 12, Filament 5, Livewire 4, Pest 4, existing support-layer helpers such as UiEnforcement, CapabilityResolver, WorkspaceContext, OperateHubShell, TenantOperabilityService, and TenantActionPolicySurface (148-central-tenant-operability-policy)

  • PostgreSQL plus existing session-backed workspace and remembered-tenant context; no schema change planned for the first implementation slice (148-central-tenant-operability-policy)

  • PHP 8.4.15 + Laravel 12, Filament 5, Livewire 4, Pest 4, existing OperationRunService, TrackOperationRun, ProviderOperationStartGate, TenantOperabilityService, CapabilityResolver, and WriteGateInterface seams (149-queued-execution-reauthorization)

  • PostgreSQL-backed application data plus queue-serialized OperationRun context; no schema migration planned for the first implementation slice (149-queued-execution-reauthorization)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, PostgreSQL, Pest 4 (150-tenant-owned-query-canon-and-wrong-tenant-guards)

  • PostgreSQL with existing findings and audit_logs tables; no new storage engine or external log store (151-findings-workflow-backstop)

  • PostgreSQL with existing workspace-, tenant-, onboarding-, and audit-related tables; no new persistent storage planned for the first slice (152-livewire-context-locking)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing StoredReport, Finding, OperationRun, and AuditLog infrastructure (153-evidence-domain-foundation)

  • PostgreSQL with JSONB-backed snapshot metadata; existing private storage remains a downstream-consumer concern, not a primary evidence-foundation store (153-evidence-domain-foundation)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing Finding, AuditLog, EvidenceSnapshot, CapabilityResolver, WorkspaceCapabilityResolver, and UiEnforcement patterns (001-finding-risk-acceptance)

  • PostgreSQL with new tenant-owned exception tables and JSONB-backed supporting metadata (001-finding-risk-acceptance)

  • PHP 8.4, Laravel 12, Livewire 4, Filament 5 + Filament resources/pages/actions, Eloquent models, queued Laravel jobs, existing EvidenceSnapshotService, existing ReviewPackService, capability registry, OperationRunService (155-tenant-review-layer)

  • PostgreSQL with JSONB-backed summary payloads and tenant/workspace ownership columns (155-tenant-review-layer)

  • PostgreSQL-backed existing domain records; no new business-domain table is required for the first slice; shared taxonomy reference will live in repository documentation and code-level metadata (156-operator-outcome-taxonomy)

  • PostgreSQL-backed existing records such as operation_runs, tenant governance records, onboarding workflow state, and provider connection state; no new business-domain table is required for the first slice (157-reason-code-translation)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing BadgeCatalog / BadgeRenderer / OperatorOutcomeTaxonomy, ReasonPresenter, OperationRunService, TenantReviewReadinessGate, existing baseline/evidence/review/review-pack resources and canonical pages (158-artifact-truth-semantics)

  • PostgreSQL with existing JSONB-backed summary, summary_jsonb, and context payloads on baseline snapshots, evidence snapshots, tenant reviews, review packs, and operation runs; no new primary storage required for the first slice (158-artifact-truth-semantics)

  • PHP 8.4.15 + Laravel 12, Filament 5, Livewire 4, Pest 4, Laravel queue workers, existing OperationRunService, TrackOperationRun, OperationUxPresenter, ReasonPresenter, BadgeCatalog domain badges, and current Operations Monitoring pages (160-operation-lifecycle-guarantees)

  • PostgreSQL for operation_runs, jobs, and failed_jobs; JSONB-backed context, summary_counts, and failure_summary; configuration in config/queue.php and config/tenantpilot.php (160-operation-lifecycle-guarantees)

  • PostgreSQL (via Sail) plus existing read models persisted in application tables (161-operator-explanation-layer)

  • 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, Laravel 12, Blade, Filament v5, Livewire v4 + Filament v5, Livewire v4, Pest v4, Laravel Sail, existing BaselineCompareStats, BaselineCompareExplanationRegistry, ReasonPresenter, BadgeCatalog or BadgeRenderer, UiEnforcement, and OperationRunLinks (165-baseline-summary-trust)

  • PostgreSQL with existing baseline, findings, and operation_runs tables plus JSONB-backed compare context; no schema change planned (165-baseline-summary-trust)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Tailwind CSS v4, existing Finding, FindingException, FindingRiskGovernanceResolver, BadgeCatalog, BadgeRenderer, FilterOptionCatalog, and tenant dashboard widgets (166-finding-governance-health)

  • PostgreSQL using existing findings, finding_exceptions, related decision tables, and existing DB-backed summary sources; no schema changes required (166-finding-governance-health)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Tailwind CSS v4, existing ArtifactTruthPresenter, OperationUxPresenter, RelatedNavigationResolver, AppServiceProvider, BadgeCatalog, BadgeRenderer, and current Filament resource/page seams (167-derived-state-memoization)

  • PostgreSQL unchanged; feature adds no persistence and relies on request-local in-memory state only (167-derived-state-memoization)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing BaselineCompareStats, BaselineCompareSummaryAssessor, BaselineCompareLanding, BaselineCompareNow, NeedsAttention, BaselineCompareCoverageBanner, and RequestScopedDerivedStateStore from Spec 167 (168-tenant-governance-aggregate-contract)

  • PostgreSQL unchanged; no new persistence, cache store, or durable summary artifac (168-tenant-governance-aggregate-contract)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing ActionSurfaceDeclaration, ActionSurfaceValidator, ActionSurfaceDiscovery, ActionSurfaceExemptions, and Filament Tables / Actions APIs (169-action-surface-v11)

  • PostgreSQL unchanged; no new persistence, cache store, queue payload, or durable artifac (169-action-surface-v11)

  • PHP 8.4, Laravel 12, Livewire v4, Filament v5 + laravel/framework, filament/filament, livewire/livewire, pestphp/pest (170-system-operations-surface-alignment)

  • PostgreSQL with existing operation_runs and audit_logs tables; no schema changes (170-system-operations-surface-alignment)

  • PHP 8.4, Laravel 12, Livewire v4, Filament v5, Tailwind CSS v4 + laravel/framework, filament/filament, livewire/livewire, pestphp/pest (171-operations-naming-consolidation)

  • PostgreSQL with existing operation_runs, notification payloads, workspace records, and tenant records; no schema changes (171-operations-naming-consolidation)

  • PostgreSQL with existing operation_runs, managed_tenant_onboarding_sessions, tenant records, and workspace records; no schema changes (172-deferred-operator-surfaces-retrofit)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing TenantDashboard, DashboardKpis, NeedsAttention, BaselineCompareNow, RecentDriftFindings, RecentOperations, TenantGovernanceAggregateResolver, BaselineCompareStats, BaselineCompareSummaryAssessor, FindingResource, OperationRunLinks, and canonical admin Operations page (173-tenant-dashboard-truth-alignment)

  • PostgreSQL unchanged; no new persistence, cache store, or durable dashboard summary artifac (173-tenant-dashboard-truth-alignment)

  • PHP 8.4, Laravel 12, Filament v5, Livewire v4, Blade + Filament v5, Livewire v4, Pest v4, Laravel Sail, existing ArtifactTruthPresenter, ArtifactTruthEnvelope, TenantReviewReadinessGate, EvidenceSnapshotService, TenantReviewRegisterService, and current evidence/review/review-pack resources and pages (174-evidence-freshness-publication-trust)

  • PostgreSQL with existing evidence_snapshots, evidence_snapshot_items, tenant_reviews, and review_packs tables using current summary JSON and timestamps; no schema change planned (174-evidence-freshness-publication-trust)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing WorkspaceOverviewBuilder, TenantGovernanceAggregateResolver, BaselineCompareStats, BaselineCompareSummaryAssessor, WorkspaceSummaryStats, WorkspaceNeedsAttention, WorkspaceRecentOperations, FindingResource, BaselineCompareLanding, EvidenceSnapshotResource, TenantReviewResource, and canonical admin Operations routes (175-workspace-governance-attention)

  • PostgreSQL unchanged; no new persistence, cache table, or materialized aggregate is introduced (175-workspace-governance-attention)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing TenantResource, ProviderConnectionResource, TenantVerificationReport, BadgeCatalog, BadgeRenderer, TenantOperabilityService, ProviderConsentStatus, ProviderVerificationStatus, and shared provider-state Blade partials (179-provider-truth-cleanup)

  • PostgreSQL unchanged; no new table, column, or persisted artifact is introduced (179-provider-truth-cleanup)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing InventoryItem, OperationRun, InventoryCoverage, InventoryPolicyTypeMeta, CoverageCapabilitiesResolver, InventoryKpiHeader, InventoryCoverage page, and OperationRunResource enterprise-detail stack (177-inventory-coverage-truth)

  • PostgreSQL; existing inventory_items rows and operation_runs.context / operation_runs.summary_counts JSONB are reused with no schema change (177-inventory-coverage-truth)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing OperationRun, OperationLifecyclePolicy, OperationRunFreshnessState, OperationUxPresenter, OperationRunLinks, ActiveRuns, StuckRunClassifier, WorkspaceOverviewBuilder, dashboard widgets, workspace widgets, and system ops pages (178-ops-truth-alignment)

  • PostgreSQL unchanged; existing operation_runs JSONB-backed context, summary_counts, and failure_summary; no schema change (178-ops-truth-alignment)

  • PHP 8.4, Laravel 12, Blade, Filament v5, Livewire v4 + Filament v5, Livewire v4, Pest v4, Laravel Sail, existing RestoreRunResource, RestoreService, RestoreRiskChecker, RestoreDiffGenerator, OperationRunResource, TenantlessOperationRunViewer, shared badge infrastructure, and existing RBAC or write-gate helpers (181-restore-safety-integrity)

  • PostgreSQL with existing restore_runs and operation_runs records plus JSON or array-backed metadata, preview, results, and context; no schema change planned (181-restore-safety-integrity)

  • PHP 8.4, Laravel 12, Blade, Filament v5, Livewire v4 + Filament v5, Livewire v4, Pest v4, Laravel Sail, existing BackupSetResource, BackupItemsRelationManager, PolicyVersionResource, RestoreRunResource, CreateRestoreRun, AssignmentBackupService, VersionService, PolicySnapshotService, RestoreRiskChecker, BadgeRenderer, PolicySnapshotModeBadge, EnterpriseDetailBuilder, and existing RBAC helpers (176-backup-quality-truth)

  • PostgreSQL with existing tenant-owned backup_sets, backup_items, policy_versions, and restore wizard input state; JSON-backed metadata, snapshot, assignments, and scope_tags; no schema change planned (176-backup-quality-truth)

  • PHP 8.4, Laravel 12, Blade, Filament v5, Livewire v4 + Filament v5, Livewire v4, Pest v4, Laravel Sail, existing DashboardKpis, NeedsAttention, BackupSetResource, BackupScheduleResource, BackupQualityResolver, BackupQualitySummary, ScheduleTimeService, shared badge infrastructure, and existing RBAC helpers (180-tenant-backup-health)

  • PostgreSQL with existing tenant-owned backup_sets, backup_items, and backup_schedules records plus existing JSON-backed backup metadata; no schema change planned (180-tenant-backup-health)

  • PHP 8.4.15, Laravel 12, Blade, Livewire v4, Filament v5.2.x, Tailwind CSS v4, Vite 7 + laravel/framework, filament/filament, livewire/livewire, laravel/sail, laravel-vite-plugin, tailwindcss, vite, pestphp/pest, drizzle-kit, PostgreSQL, Redis, Docker Compose (182-platform-relocation)

  • PostgreSQL, Redis, filesystem storage under the Laravel app storage/ tree, plus existing Vite build artifacts in public/build; no new database persistence planned (182-platform-relocation)

  • PHP 8.4.15 and Laravel 12 for apps/platform; Node.js 20+ with pnpm 10 workspace tooling; Astro v6 for apps/website; Bash and Docker Compose for root orchestration + laravel/framework, filament/filament, livewire/livewire, laravel/sail, vite, tailwindcss, pnpm workspaces, Astro, existing ./scripts/platform-sail wrapper, repo-root Docker Compose (183-website-workspace-foundation)

  • Existing PostgreSQL, Redis, and filesystem storage for apps/platform; static build artifacts for apps/website; repository-managed workspace manifests and docs; no new database persistence (183-website-workspace-foundation)

  • PHP 8.4, Laravel 12, Blade, Filament v5, Livewire v4 + Filament v5 widgets and resources, Livewire v4, Pest v4, existing TenantDashboard, DashboardKpis, NeedsAttention, TenantBackupHealthResolver, TenantBackupHealthAssessment, RestoreRunResource, RestoreSafetyResolver, RestoreResultAttention, OperationRunLinks, and existing RBAC helpers (184-dashboard-recovery-honesty)

  • PostgreSQL with existing tenant-owned backup_sets, restore_runs, and linked operation_runs; no schema change planned (184-dashboard-recovery-honesty)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing WorkspaceOverviewBuilder, WorkspaceSummaryStats, WorkspaceNeedsAttention, TenantBackupHealthResolver, TenantBackupHealthAssessment, RestoreSafetyResolver, tenant dashboard widgets, WorkspaceCapabilityResolver, CapabilityResolver, and the current workspace overview Blade surfaces (185-workspace-recovery-posture-visibility)

  • PostgreSQL unchanged; no schema change, new cache table, or persisted workspace recovery artifact is planned (185-workspace-recovery-posture-visibility)

  • PHP 8.4, Laravel 12, Blade, Filament v5, Livewire v4 + Filament v5 resources and table filters, Livewire v4 ListRecords, Pest v4, Laravel Sail, existing TenantResource, ListTenants, WorkspaceOverviewBuilder, TenantBackupHealthResolver, TenantBackupHealthAssessment, RestoreSafetyResolver, RecoveryReadiness, and shared badge infrastructure (186-tenant-registry-recovery-triage)

  • PostgreSQL with existing tenant-owned tenants, backup_sets, backup_items, restore_runs, policies, and membership records; no schema change planned (186-tenant-registry-recovery-triage)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing WorkspaceOverviewBuilder, TenantResource, TenantDashboard, CanonicalAdminTenantFilterState, TenantBackupHealthAssessment, RestoreSafetyResolver, and continuity-aware backup or restore list pages (187-portfolio-triage-arrival-context)

  • PostgreSQL unchanged; no new tables, caches, or durable workflow artifacts (187-portfolio-triage-arrival-context)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing ProviderConnection model, ProviderConnectionResolver, ProviderConnectionStateProjector, ProviderConnectionMutationService, ProviderConnectionHealthCheckJob, StartVerification, ProviderConnectionResource, TenantResource, system directory pages, BadgeCatalog, BadgeRenderer, and shared provider-state Blade entries (188-provider-connection-state-cleanup)

  • PostgreSQL with one narrow schema addition (is_enabled) followed by final removal of legacy status and health_status columns and their indexes (188-provider-connection-state-cleanup)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing WorkspaceOverviewBuilder, TenantResource, TenantDashboard, PortfolioArrivalContext, TenantBackupHealthResolver, RestoreSafetyResolver, BadgeCatalog, UiEnforcement, and AuditRecorder patterns (189-portfolio-triage-review-state)

  • PostgreSQL via Laravel Eloquent with one new table tenant_triage_reviews and no new external caches or background stores (189-portfolio-triage-review-state)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, existing BaselineCompareService, BaselineSnapshotTruthResolver, BaselineCompareStats, RelatedNavigationResolver, CanonicalNavigationContext, BadgeCatalog, and UiEnforcement patterns (190-baseline-compare-matrix)

  • PostgreSQL via existing baseline_profiles, baseline_snapshots, baseline_snapshot_items, baseline_tenant_assignments, operation_runs, and findings tables; no new persistence planned (190-baseline-compare-matrix)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Tailwind CSS v4, existing BaselineCompareMatrixBuilder, BadgeCatalog, CanonicalNavigationContext, and UiEnforcement patterns (191-baseline-compare-operator-mode)

  • PostgreSQL via existing baseline, assignment, compare-run, and finding tables; no new persistence planned (191-baseline-compare-operator-mode)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Tailwind CSS v4, existing UiEnforcement, RelatedNavigationResolver, ActionSurfaceValidator, and page-local Filament action builders (192-record-header-discipline)

  • PostgreSQL through existing workspace-owned and tenant-owned resource models; no schema change planned (192-record-header-discipline)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Tailwind CSS v4, existing OperateHubShell, CanonicalNavigationContext, CanonicalAdminTenantFilterState, UiEnforcement, ActionSurfaceValidator, and Filament page or resource action builders (193-monitoring-action-hierarchy)

  • PostgreSQL through existing workspace-owned and tenant-owned models; no schema change planned (193-monitoring-action-hierarchy)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Tailwind CSS v4, existing UiEnforcement, existing audit loggers (AuditLogger, WorkspaceAuditLogger, SystemConsoleAuditLogger), existing mutation services (FindingExceptionService, FindingWorkflowService, TenantReviewLifecycleService, EvidenceSnapshotService, OperationRunTriageService) (194-governance-friction-hardening)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Tailwind CSS v4, existing ActionSurfaceDiscovery, ActionSurfaceValidator, ActionSurfaceExemptions, GovernanceActionCatalog, UiEnforcement, WorkspaceContext, and existing system/onboarding/auth helpers (195-action-surface-closure)

  • PostgreSQL through existing workspace-owned, tenant-owned, and system-visible models; no schema change planned (195-action-surface-closure)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Tailwind CSS v4, existing DependencyQueryService, DependencyTargetResolver, TenantRequiredPermissionsViewModelBuilder, ArtifactTruthPresenter, WorkspaceContext, Filament InteractsWithTable, Filament TableComponent, and existing badge and action-surface helpers (196-hard-filament-nativity-cleanup)

  • PostgreSQL through existing tenant-owned and workspace-context models (InventoryItem, InventoryLink, TenantPermission, EvidenceSnapshot, TenantReview); no schema change planned (196-hard-filament-nativity-cleanup)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Tailwind CSS v4, Laravel Sail, existing BaselineScope, InventoryPolicyTypeMeta, BaselineSupportCapabilityGuard, BaselineCaptureService, and BaselineCompareService (202-governance-subject-taxonomy)

  • PostgreSQL via existing baseline_profiles.scope_jsonb, baseline_tenant_assignments.override_scope_jsonb, and operation_runs.context; no new tables planned (202-governance-subject-taxonomy)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Laravel Sail, existing BaselineCompareService, CompareBaselineToTenantJob, SubjectResolver, CurrentStateHashResolver, DriftHasher, BaselineCompareSummaryAssessor, and finding lifecycle services (203-baseline-compare-strategy)

  • PostgreSQL via existing baseline snapshots, baseline snapshot items, operation_runs, findings, and baseline scope JSON; no new top-level tables planned (203-baseline-compare-strategy)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Laravel Sail, existing GovernanceSubjectTaxonomyRegistry, BaselineScope, CompareStrategyRegistry, OperationCatalog, OperationRunType, ReasonTranslator, ReasonResolutionEnvelope, ProviderReasonTranslator, and current Filament monitoring or review surfaces (204-platform-core-vocabulary-hardening)

  • PostgreSQL via existing operation_runs.type, operation_runs.context, baseline_profiles.scope_jsonb, baseline_snapshot_items, findings, evidence payloads, and current config-backed registries; no new top-level tables planned (204-platform-core-vocabulary-hardening)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Laravel Sail, existing BaselineCompareService, CompareBaselineToTenantJob, CompareStrategyRegistry, IntuneCompareStrategy, CurrentStateHashResolver, and current finding lifecycle services (205-compare-job-cleanup)

  • PostgreSQL via existing baseline snapshots, baseline snapshot items, inventory items, operation_runs, findings, and current run-context JSON; no new storage planned (205-compare-job-cleanup)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Tailwind CSS v4, existing VerificationReportViewer, VerificationReportChangeIndicator, PolicyNormalizer, VersionDiff, DriftFindingDiffBuilder, and SettingsCatalogSettingsTable (197-shared-detail-contract)

  • PostgreSQL unchanged; no new persistence, cache store, or durable UI artifact (197-shared-detail-contract)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Tailwind CSS v4, existing CanonicalAdminTenantFilterState, CanonicalNavigationContext, OperateHubShell, Filament InteractsWithTable, and page-local Livewire state on the affected Filament pages (198-monitoring-page-state)

  • PostgreSQL plus existing Laravel session-backed table filter, search, and sort persistence; no schema change planned (198-monitoring-page-state)

  • PHP 8.4.15 + Laravel 12, Pest v4, PHPUnit 12, Pest Browser plugin, Filament v5, Livewire v4, Laravel Sail (206-test-suite-governance)

  • SQLite :memory: for the default test configuration, dedicated PostgreSQL config for the schema-level Pgsql suite, and local runner artifacts under apps/platform/storage/logs/test-lanes (206-test-suite-governance)

  • PHP 8.4.15 + Laravel 12, Pest v4, PHPUnit 12, Filament v5, Livewire v4, Laravel Sail (207-shared-test-fixture-slimming)

  • SQLite :memory: for the default test environment, isolated PostgreSQL coverage via the existing dedicated suite, and lane-measurement artifacts under the app-root contract path storage/logs/test-lanes (207-shared-test-fixture-slimming)

  • SQLite :memory: for the default test environment, existing lane artifacts under the app-root contract path storage/logs/test-lanes, and no new product persistence (208-heavy-suite-segmentation)

  • SQLite :memory: for the default test environment, mixed database strategy for some heavy-governance families as declared in TestLaneManifest, and existing lane artifacts under the app-root contract path storage/logs/test-lanes (209-heavy-governance-cost)

  • PHP 8.4.15 for repo-truth test governance, Bash for repo-root wrappers, and GitHub-compatible Gitea Actions workflow YAML under .gitea/workflows/ + Laravel 12, Pest v4, PHPUnit 12, Filament v5, Livewire v4, Laravel Sail, Gitea Actions backed by act_runner, and the existing Tests\Support\TestLaneManifest, TestLaneBudget, and TestLaneReport seams (210-ci-matrix-budget-enforcement)

  • SQLite :memory: for default lane execution, filesystem artifacts under the app-root contract path storage/logs/test-lanes, checked-in workflow YAML under .gitea/workflows/, and no new product database persistence (210-ci-matrix-budget-enforcement)

  • PHP 8.4.15 for repo-truth governance logic, Bash for repo-root wrappers, GitHub-compatible Gitea Actions workflow YAML under .gitea/workflows/, plus JSON Schema and logical OpenAPI for repository contracts + Laravel 12, Pest v4, PHPUnit 12, Filament v5, Livewire v4, Laravel Sail, Gitea Actions backed by act_runner, uploaded artifact bundles, and the existing Tests\Support\TestLaneManifest, TestLaneBudget, and TestLaneReport seams (211-runtime-trend-recalibration)

  • SQLite :memory: for lane execution, filesystem artifacts under apps/platform/storage/logs/test-lanes, staged CI bundles under .gitea-artifacts/<workflow-profile>, bounded derived trend/history artifacts adjacent to current lane artifacts, and no new product database persistence (211-runtime-trend-recalibration)

  • Markdown for repository governance artifacts, JSON Schema plus logical OpenAPI for planning contracts, and Bash-backed SpecKit scripts already present in the repo + .specify/memory/constitution.md, .specify/templates/spec-template.md, .specify/templates/plan-template.md, .specify/templates/tasks-template.md, .specify/templates/checklist-template.md, .specify/README.md, README.md, and the existing Specs 206 through 211 governance vocabulary (212-test-authoring-guardrails)

  • Repository-owned markdown and contract artifacts under .specify/, specs/212-test-authoring-guardrails/, and root documentation files; no product database persistence (212-test-authoring-guardrails)

  • PHP 8.4.15 + Laravel 12, Filament v5, Livewire v4, Pest v4, Tailwind CSS v4, existing WorkspaceContext, OperateHubShell, EnsureFilamentTenantSelected, WorkspaceRedirectResolver, WorkspaceIntendedUrl, TenantPageCategory, and ResolvesPanelTenantContext (199-global-context-shell-contract)

  • PostgreSQL unchanged plus existing Laravel session keys current_workspace_id, workspace_intended_url, and workspace_last_tenant_ids; no schema change planned (199-global-context-shell-contract)

  • Markdown governance artifacts in a PHP 8.4.15 / Laravel 12 / Filament v5 / Livewire v4 repository + .specify/memory/constitution.md, docs/ui/operator-ux-surface-standards.md, adjacent Specs 196 through 199, existing UI rule IDs UI-SURF-001, ACTSURF-001, UI-HARD-001, UI-EX-001, UI-FIL-001, DECIDE-001, and UX-001 (200-filament-surface-rules)

  • Astro 6.0.0 templates + TypeScript 5.x (explicit setup in apps/website) + Astro 6, Tailwind CSS v4, custom Astro component primitives (shadcn-inspired), lightweight Playwright browser smoke tests (213-website-foundation-v0)

  • Static filesystem content, styles, and assets under apps/website/src and apps/website/public; no database (213-website-foundation-v0)

  • Astro 6.0.0 templates + TypeScript 5.9 strict + Astro 6, Tailwind CSS v4 via @tailwindcss/vite, Astro content collections, local Astro component primitives, Playwright browser smoke tests (214-website-visual-foundation)

  • Static filesystem content, styles, assets, and content collections under apps/website/src and apps/website/public; no database (214-website-visual-foundation)

  • Markdown governance artifacts, JSON Schema plus logical OpenAPI planning contracts, and Bash-backed SpecKit scripts inside a PHP 8.4.15 / Laravel 12 / Filament v5 / Livewire v4 repository + .specify/memory/constitution.md, .specify/templates/spec-template.md, .specify/templates/plan-template.md, .specify/templates/tasks-template.md, .specify/templates/checklist-template.md, .specify/README.md, docs/ui/operator-ux-surface-standards.md, and Specs 196 through 200 (201-enforcement-review-guardrails)

  • Repository-owned markdown and contract artifacts under .specify/ and /Users/ahmeddarrazi/Documents/projects/wt-plattform/specs/201-enforcement-review-guardrails/; no product database persistence (201-enforcement-review-guardrails)

  • PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Filament v5, Livewire v4, Pest v4, Laravel Sail, ArtifactTruthPresenter, ArtifactTruthEnvelope, OperatorExplanationBuilder, BaselineSnapshotPresenter, BadgeCatalog, BadgeRenderer, existing governance Filament resources/pages, and current Enterprise Detail builders (214-governance-outcome-compression)

  • PostgreSQL via existing baseline_snapshots, evidence_snapshots, evidence_snapshot_items, tenant_reviews, review_packs, and operation_runs tables; no schema change planned (214-governance-outcome-compression)

  • Astro 6.0.0 templates + TypeScript 5.9 strict + Astro 6, Tailwind CSS v4 via @tailwindcss/vite, Astro content collections, local Astro layout/primitive/content helpers, Playwright smoke tests (215-website-core-pages)

  • Static filesystem pages, content modules, and Astro content collections under apps/website/src and apps/website/public; no database (215-website-core-pages)

  • PHP 8.4.15, Laravel 12, Filament v5, Livewire v4 + Filament Resources/Pages/Actions, Livewire 4, Pest 4, ProviderOperationStartGate, ProviderOperationRegistry, ProviderConnectionResolver, OperationRunService, ProviderNextStepsRegistry, ReasonPresenter, OperationUxPresenter, OperationRunLinks (216-provider-dispatch-gate)

  • PostgreSQL via existing operation_runs, provider_connections, managed_tenant_onboarding_sessions, restore_runs, and tenant-owned runtime records; no new tables planned (216-provider-dispatch-gate)

  • Astro 6.0.0 templates + TypeScript 5.9.x + Astro 6, Tailwind CSS v4, local Astro layout/section primitives, Astro content collections, Playwright browser smoke tests (216-homepage-structure)

  • Static filesystem content, Astro content collections, and assets under apps/website/src and apps/website/public; no database (216-homepage-structure)

  • PHP 8.4.15 / Laravel 12 + Filament v5, Livewire v4.0+, Pest v4, Tailwind CSS v4 (219-finding-ownership-semantics)

  • PostgreSQL via Sail; existing findings.owner_user_id, findings.assignee_user_id, and finding_exceptions.owner_user_id fields; no schema changes planned (219-finding-ownership-semantics)

  • PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Filament v5, Livewire v4, Pest v4, Laravel Sail, TenantlessOperationRunViewer, OperationRunResource, ArtifactTruthPresenter, OperatorExplanationBuilder, ReasonPresenter, OperationUxPresenter, SummaryCountsNormalizer, and the existing enterprise-detail builders (220-governance-run-summaries)

  • PostgreSQL via existing operation_runs plus related baseline_snapshots, evidence_snapshots, tenant_reviews, and review_packs; no schema changes planned (220-governance-run-summaries)

  • PHP 8.4.15 (feat/005-bulk-operations)

Project Structure

apps/
  platform/
  website/
docs/
specs/
scripts/

Commands

  • Root workspace:
    • corepack pnpm install
    • corepack pnpm dev:platform
    • corepack pnpm dev:website
    • corepack pnpm dev
    • corepack pnpm build:website
    • corepack pnpm build:platform
  • Platform app:
    • cd apps/platform && ./vendor/bin/sail up -d
    • cd apps/platform && ./vendor/bin/sail pnpm dev
    • cd apps/platform && ./vendor/bin/sail pnpm build
    • cd apps/platform && ./vendor/bin/sail artisan test --compact

Code Style

PHP 8.4.15: Follow standard conventions

Recent Changes

  • 220-governance-run-summaries: Added PHP 8.4.15, Laravel 12, Filament v5, Livewire v4, Blade + Filament v5, Livewire v4, Pest v4, Laravel Sail, TenantlessOperationRunViewer, OperationRunResource, ArtifactTruthPresenter, OperatorExplanationBuilder, ReasonPresenter, OperationUxPresenter, SummaryCountsNormalizer, and the existing enterprise-detail builders
  • 219-finding-ownership-semantics: Added PHP 8.4.15 / Laravel 12 + Filament v5, Livewire v4.0+, Pest v4, Tailwind CSS v4
  • 216-provider-dispatch-gate: Added PHP 8.4.15, Laravel 12, Filament v5, Livewire v4 + Filament Resources/Pages/Actions, Livewire 4, Pest 4, ProviderOperationStartGate, ProviderOperationRegistry, ProviderConnectionResolver, OperationRunService, ProviderNextStepsRegistry, ReasonPresenter, OperationUxPresenter, OperationRunLinks

Pre-production compatibility check

Before adding aliases, fallback readers, dual-write logic, migration shims, or legacy fixtures, verify all of the following:

  1. Do live production data exist?
  2. Is shared staging migration-relevant?
  3. Does an external contract depend on the old shape?
  4. Does the spec explicitly require compatibility behavior?

If all answers are no, replace the old shape and remove the compatibility path.