[ { "id": "T001", "description": "validate-translations.cjs passes for msp/service-catalog (keys consistent across all 9 locales, 0 errors, 0 warnings)", "implemented": true, "featureIds": ["F001", "F015", "F016", "F019"] }, { "id": "T002", "description": "TaxRates.tsx and TaxRateDetailPanel.tsx compile with useTranslation wiring — no TypeScript errors, all column headers and dialog labels use t()", "implemented": true, "featureIds": ["F002", "F003"] }, { "id": "T003", "description": "ServiceForm.tsx compiles with useTranslation — no TypeScript errors, all placeholder/label/button text extracted", "implemented": true, "featureIds": ["F004"] }, { "id": "T004", "description": "ServiceSelectionDialog.tsx compiles with useTranslation — dialog title, table headers, Quick Add, loading/empty states all use t()", "implemented": true, "featureIds": ["F005"] }, { "id": "T005", "description": "ConfigurationTypeSelector.tsx compiles with useTranslation — type labels, descriptions, and warning dialog text extracted", "implemented": true, "featureIds": ["F006"] }, { "id": "T006", "description": "BaseServiceConfigPanel.tsx and ServiceConfigurationPanel (configurations) compile with useTranslation — section headings, field labels, save/cancel buttons use t()", "implemented": true, "featureIds": ["F007"] }, { "id": "T007", "description": "Fixed, Hourly, Usage, and Bucket config panels all compile with useTranslation — field labels, toggle text, validation messages, helper text extracted", "implemented": true, "featureIds": ["F008", "F009", "F010", "F011"] }, { "id": "T008", "description": "ServiceRateTiers.tsx, ServiceTaxSettings.tsx, and ServiceConfigurationPanel (service-config) compile with useTranslation — all table headers, card titles, and action buttons use t()", "implemented": true, "featureIds": ["F012", "F013", "F014"] }, { "id": "T009", "description": "Italian accent audit passes for it/msp/service-catalog.json", "implemented": true, "featureIds": ["F017"] }, { "id": "T010", "description": "Visual QA (xx pseudo-locale) — tax rates list, tax rate detail, service form, service selection dialog, all 4 config type panels, rate tiers, tax settings all show '11111'", "implemented": true, "featureIds": ["F015", "F016"] }, { "id": "T011", "description": "ROUTE_NAMESPACES updated — /msp/settings route includes 'msp/service-catalog'", "implemented": true, "featureIds": ["F018"] }, { "id": "T012", "description": "npm run build succeeds with no TypeScript errors after all 14 files wired", "implemented": true, "featureIds": ["F020"] }, { "id": "T013", "description": "msp-i18n-enabled OFF — all 14 service catalog components show English text, no visual regressions", "implemented": true, "featureIds": ["F020"] }, { "id": "T014", "description": "German (de) — no overflow in tax rate dialog fields, service form labels, configuration type card descriptions, rate tier table headers", "implemented": true, "featureIds": ["F015"] }, { "id": "T015", "description": "Currency formatting — rate values in ServiceRateTiers and ServiceSelectionDialog use useFormatters() for locale-aware currency display", "implemented": true, "featureIds": ["F012", "F005"] }, { "id": "T016", "description": "No key collisions between msp/service-catalog.json and existing msp/settings.json or features/billing.json keys", "implemented": true, "featureIds": ["F001"] }, { "id": "T017", "description": "Portuguese locale support wired end-to-end — shared i18n config(s) recognize pt and the language can resolve msp/service-catalog resources", "implemented": true, "featureIds": ["F015", "F021"] } ]