mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-23 20:25:56 +00:00
140 lines
5.0 KiB
JSON
140 lines
5.0 KiB
JSON
{
|
|
"version": 1,
|
|
"rules": [
|
|
{
|
|
"id": "runtime-web-interface-name-link",
|
|
"category": "resource-launch",
|
|
"summary": "Runtime resource rows must launch saved or inferred 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"
|
|
},
|
|
{
|
|
"path": "src/features/proxmox/ProxmoxNodesTable.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'"]
|
|
},
|
|
{
|
|
"path": "src/features/proxmox/ProxmoxNodesTable.tsx",
|
|
"patterns": [
|
|
"target=\"_blank\"",
|
|
"rel=\"noopener noreferrer\"",
|
|
"data-proxmox-host-web-link"
|
|
]
|
|
},
|
|
{
|
|
"path": "src/features/proxmox/proxmoxHostTableModel.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",
|
|
"src/features/proxmox/__tests__/ProxmoxNodesTable.test.tsx",
|
|
"src/features/proxmox/__tests__/proxmoxHostTableModel.test.ts"
|
|
]
|
|
}
|
|
],
|
|
"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"
|
|
]
|
|
}
|
|
]
|
|
}
|