Files
pulse/frontend-modern/scripts/shared-template-registry.json
T
2026-06-12 12:11:50 +01:00

123 lines
4.4 KiB
JSON

{
"version": 1,
"rules": [
{
"id": "runtime-web-interface-name-link",
"category": "resource-launch",
"summary": "Runtime resource rows must launch saved web-interface URLs through the shared name-link template, not a page-local link or separate web column.",
"canonical": {
"path": "src/components/shared/WebInterfaceNameLink.tsx",
"export": "WebInterfaceNameLink"
},
"requiredConsumers": [
{
"path": "src/components/Workloads/GuestRow.tsx"
},
{
"path": "src/features/standalone/AgentsMachinesTable.tsx"
}
],
"forbiddenPatterns": [
{
"path": "src/components/Workloads/GuestRow.tsx",
"patterns": ["target=\"_blank\"", "rel=\"noopener noreferrer\""]
},
{
"path": "src/features/standalone/AgentsMachinesTable.tsx",
"patterns": [
"target=\"_blank\"",
"rel=\"noopener noreferrer\"",
"AgentMachineWebLinkCell",
"data-agent-machine-web-link"
]
},
{
"path": "src/features/standalone/agentMachineTableModel.ts",
"patterns": ["id: 'web'", "label: 'Web'"]
}
],
"proof": [
"src/components/shared/SharedPrimitives.guardrails.test.ts",
"src/features/standalone/__tests__/AgentsMachinesTable.test.tsx",
"src/components/Workloads/__tests__/GuestRow.test.tsx"
]
}
],
"patternGuards": [
{
"id": "platform-table-shell-local-frame",
"category": "platform-table-shell",
"summary": "Platform tables must compose the shared PlatformTableShell frame instead of recreating the TableCard/TableHeader/TableBody shell locally.",
"canonical": {
"path": "src/features/platformPage/sharedPlatformPage.tsx",
"export": "PlatformTableShell"
},
"scopes": ["src/features", "src/components"],
"extensions": [".tsx"],
"allPatterns": [
"TableCard class={PLATFORM_TABLE_CARD_CLASS}",
"TableRow class={PLATFORM_TABLE_HEADER_ROW_CLASS}",
"TableBody class={PLATFORM_TABLE_BODY_CLASS}"
],
"legacyReason": "Retired migration debt. Platform table frames must use PlatformTableShell; no local-frame exceptions are currently allowed.",
"allowedPaths": [],
"proof": [
"src/components/shared/SharedPrimitives.guardrails.test.ts",
"scripts/shared-template-audit.mjs"
]
}
],
"requiredPatternGuards": [
{
"id": "platform-row-detail-toggle-shared-state",
"category": "row-disclosure",
"summary": "Platform rows using shared resource-detail expansion state must render the canonical disclosure toggle instead of relying on row-only click behavior or local chevrons.",
"canonical": {
"path": "src/features/platformPage/PlatformResourceDetailTableRow.tsx",
"export": "PlatformResourceDetailToggleButton"
},
"scopes": [
"src/features/docker",
"src/features/kubernetes",
"src/features/proxmox",
"src/features/standalone",
"src/features/truenas",
"src/features/vmware"
],
"extensions": [".tsx"],
"triggerPatterns": ["createPlatformResourceDetailState"],
"requiredPatterns": ["PlatformResourceDetailToggleButton"],
"allowedPaths": [],
"proof": [
"src/components/shared/SharedPrimitives.guardrails.test.ts",
"scripts/shared-template-audit.mjs"
]
},
{
"id": "platform-row-detail-toggle-inline-detail",
"category": "row-disclosure",
"summary": "Platform tables that render page-local inline detail rows must compose the canonical disclosure toggle in the owning row.",
"canonical": {
"path": "src/features/platformPage/PlatformResourceDetailTableRow.tsx",
"export": "PlatformResourceDetailToggleButton"
},
"scopes": [
"src/features/docker",
"src/features/kubernetes",
"src/features/proxmox",
"src/features/standalone",
"src/features/truenas",
"src/features/vmware"
],
"extensions": [".tsx"],
"triggerPatterns": ["data-inline", "aria-expanded"],
"requiredPatterns": ["PlatformResourceDetailToggleButton"],
"allowedPaths": [],
"proof": [
"src/components/shared/SharedPrimitives.guardrails.test.ts",
"scripts/shared-template-audit.mjs"
]
}
]
}