Enforce shared template registry for platform tables

This commit is contained in:
rcourtman
2026-06-12 10:44:11 +01:00
parent 93420753aa
commit 048db1c91c
7 changed files with 369 additions and 49 deletions
@@ -3772,6 +3772,11 @@
"kind": "file",
"evidence_tier": "test-proof"
},
{
"repo": "pulse",
"path": "frontend-modern/scripts/shared-template-registry.json",
"kind": "file"
},
{
"repo": "pulse",
"path": "frontend-modern/src/components/shared/SharedPrimitives.guardrails.test.ts",
@@ -3788,6 +3793,11 @@
"path": "frontend-modern/src/components/Workloads/GuestRow.tsx",
"kind": "file"
},
{
"repo": "pulse",
"path": "frontend-modern/src/features/platformPage/sharedPlatformPage.tsx",
"kind": "file"
},
{
"repo": "pulse",
"path": "frontend-modern/src/features/standalone/agentMachineTableModel.ts",
@@ -153,11 +153,14 @@ work extends shared components instead of creating new local variants.
126. `frontend-modern/src/components/Settings/dataHandlingPanelModel.ts`
127. `frontend-modern/scripts/canonical-platform-audit.mjs`
128. `frontend-modern/scripts/settings-diagnostics-boundary-audit.mjs`
129. `frontend-modern/src/utils/platformSupportManifest.generated.ts`
130. `frontend-modern/src/utils/platformSupportManifest.ts`
131. `frontend-modern/src/utils/sourcePlatformOptions.ts`
132. `frontend-modern/src/utils/sourcePlatforms.ts`
133. `frontend-modern/src/utils/infrastructureOnboardingPresentation.ts`
129. `frontend-modern/scripts/shared-template-audit.mjs`
130. `frontend-modern/scripts/shared-template-registry.json`
131. `frontend-modern/src/features/platformPage/sharedPlatformPage.tsx`
132. `frontend-modern/src/utils/platformSupportManifest.generated.ts`
133. `frontend-modern/src/utils/platformSupportManifest.ts`
134. `frontend-modern/src/utils/sourcePlatformOptions.ts`
135. `frontend-modern/src/utils/sourcePlatforms.ts`
136. `frontend-modern/src/utils/infrastructureOnboardingPresentation.ts`
## Shared Boundaries
@@ -2362,6 +2365,20 @@ resource-name link shell, new-tab safety attributes, row-click/key propagation
containment, fallback text, and accessible launch labels. Workload guest rows
and standalone machine rows compose that primitive so a saved URL is opened by
clicking the resource name on every comparable runtime table.
Shared-template drift enforcement is registry-backed:
`frontend-modern/scripts/shared-template-registry.json` is the canonical list of
standardized repeated affordances, required consumers, and forbidden local
patterns, while `frontend-modern/scripts/shared-template-audit.mjs` enforces
that registry. Future repeated-affordance migrations must add or extend a
registry rule as part of the same change that extracts or adopts the shared
primitive.
Platform table frames are one of those registry-backed templates.
`frontend-modern/src/features/platformPage/sharedPlatformPage.tsx` owns
`PlatformTableShell`, including the canonical table card, header row, and body
divide styling. New platform tables must start from `PlatformTableShell`; the
legacy table-frame allowlist in `shared-template-registry.json` is migration
debt, not precedent, and must shrink as existing tables are moved onto the
shared shell.
The shared help icon now follows that same owner split.
`frontend-modern/src/components/shared/HelpIcon.tsx` stays the render shell,
`frontend-modern/src/components/shared/useHelpIconState.ts` owns open state,
@@ -3059,6 +3059,8 @@
"frontend-modern/scripts/canonical-platform-audit.mjs",
"frontend-modern/scripts/header-audit.mjs",
"frontend-modern/scripts/settings-diagnostics-boundary-audit.mjs",
"frontend-modern/scripts/shared-template-audit.mjs",
"frontend-modern/scripts/shared-template-registry.json",
"frontend-modern/src/components/Settings/AIChatMaintenanceSection.tsx",
"frontend-modern/src/components/Settings/AIModelSelectionSection.tsx",
"frontend-modern/src/components/Settings/AIProviderConfigurationSection.tsx",
@@ -3124,6 +3126,7 @@
"frontend-modern/src/components/SetupWizard/SetupCompletionPreview.tsx",
"frontend-modern/src/components/SetupWizard/SetupWizard.tsx",
"frontend-modern/src/components/Toast/Toast.tsx",
"frontend-modern/src/features/platformPage/sharedPlatformPage.tsx",
"frontend-modern/src/hooks/createNonSuspendingQuery.ts",
"frontend-modern/src/index.css",
"frontend-modern/src/routing/routePreload.ts",
@@ -3550,6 +3553,21 @@
"frontend-modern/src/components/shared/__tests__/SearchInput.test.tsx"
]
},
{
"id": "shared-template-drift-guardrails",
"label": "shared template drift guardrail proof",
"match_prefixes": [],
"match_files": [
"frontend-modern/scripts/shared-template-audit.mjs",
"frontend-modern/scripts/shared-template-registry.json",
"frontend-modern/src/features/platformPage/sharedPlatformPage.tsx"
],
"allow_same_subsystem_tests": false,
"test_prefixes": [],
"exact_files": [
"frontend-modern/src/components/shared/SharedPrimitives.guardrails.test.ts"
]
},
{
"id": "data-grid-and-summary",
"label": "data grid and summary proof",