From 09f07d851428bb52722d314aa163695bc6348ae9 Mon Sep 17 00:00:00 2001 From: rcourtman <8825017+rcourtman@users.noreply.github.com> Date: Mon, 5 Oct 2026 07:37:46 +0100 Subject: [PATCH] Drop the storage table from the title-case helper consumers The shared-template rule required every TrueNAS table to use the shared title-case helper. The storage table used it only for the risk-level pill, which the Health reason replaced, so it no longer formats any raw provider value and the required-consumer check failed. The scope-wide guard against a local titleCase helper still covers the file. --- .../v6/internal/subsystems/frontend-primitives.md | 5 ++++- frontend-modern/scripts/shared-template-registry.json | 5 ----- .../components/shared/SharedPrimitives.guardrails.test.ts | 4 +++- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/release-control/v6/internal/subsystems/frontend-primitives.md b/docs/release-control/v6/internal/subsystems/frontend-primitives.md index b0f5f3b318..5bb29f8ce8 100644 --- a/docs/release-control/v6/internal/subsystems/frontend-primitives.md +++ b/docs/release-control/v6/internal/subsystems/frontend-primitives.md @@ -5247,7 +5247,10 @@ Platform table title-case fallback formatting follows the same rule. `formatPlatformTableTitleCaseValue` owns the repeated trimmed-string plus `Unknown` fallback behavior for state/status labels that need simple title case. TrueNAS platform tables must compose that helper instead of declaring -local `titleCase` helpers. +local `titleCase` helpers. The apps, shares, services and VMs tables are its +required consumers. The storage table left that list when its Health cell +switched from a title-cased risk-level pill to TrueNAS's own reason text, and +the scope-wide guard against a local `titleCase` helper still covers it. Platform table compact list summaries follow the same rule. `summarizePlatformTableValues` owns the repeated trimming, empty-marker label, visible-value count, `+N` overflow suffix, full-title text, and normalized diff --git a/frontend-modern/scripts/shared-template-registry.json b/frontend-modern/scripts/shared-template-registry.json index dcfe89af0c..04ad2b7184 100644 --- a/frontend-modern/scripts/shared-template-registry.json +++ b/frontend-modern/scripts/shared-template-registry.json @@ -2304,7 +2304,6 @@ { "path": "src/features/truenas/TrueNASAppsTable.tsx" }, { "path": "src/features/truenas/TrueNASNetworkSharesTable.tsx" }, { "path": "src/features/truenas/TrueNASServicesTable.tsx" }, - { "path": "src/features/truenas/TrueNASStorageTopologyTable.tsx" }, { "path": "src/features/truenas/TrueNASVirtualMachinesTable.tsx" } ], "forbiddenPatterns": [ @@ -2320,10 +2319,6 @@ "path": "src/features/truenas/TrueNASServicesTable.tsx", "patterns": ["const titleCase"] }, - { - "path": "src/features/truenas/TrueNASStorageTopologyTable.tsx", - "patterns": ["const titleCase"] - }, { "path": "src/features/truenas/TrueNASVirtualMachinesTable.tsx", "patterns": ["const titleCase"] diff --git a/frontend-modern/src/components/shared/SharedPrimitives.guardrails.test.ts b/frontend-modern/src/components/shared/SharedPrimitives.guardrails.test.ts index ad0a58029f..1769154c13 100644 --- a/frontend-modern/src/components/shared/SharedPrimitives.guardrails.test.ts +++ b/frontend-modern/src/components/shared/SharedPrimitives.guardrails.test.ts @@ -5895,7 +5895,9 @@ describe('shared primitive guardrails', () => { ['src/features/truenas/TrueNASAppsTable.tsx', truenasAppsTableSource], ['src/features/truenas/TrueNASNetworkSharesTable.tsx', truenasNetworkSharesTableSource], ['src/features/truenas/TrueNASServicesTable.tsx', truenasServicesTableSource], - ['src/features/truenas/TrueNASStorageTopologyTable.tsx', truenasStorageTopologyTableSource], + // The storage table no longer formats a raw provider value: its Health + // cell carries TrueNAS's own reason text. The scope-wide local-helper + // guard below still keeps a private titleCase out of it. ['src/features/truenas/TrueNASVirtualMachinesTable.tsx', truenasVirtualMachinesTableSource], ]; const truenasTitleCaseConsumerPaths = truenasTitleCaseConsumers.map(([path]) => path);