[ {"id": "F001", "description": "Create en/msp/clients.json with all keys for 31 client components (+panels/)", "implemented": true, "prdRefs": ["2b-10"]}, {"id": "F002", "description": "Wire useTranslation('msp/clients') in ClientDetails.tsx and Clients.tsx (largest files, ~300-600 strings combined)", "implemented": true, "prdRefs": ["2b-10"]}, {"id": "F003", "description": "Wire useTranslation in QuickAddClient.tsx, ClientLocations.tsx, ClientsImportDialog.tsx", "implemented": true, "prdRefs": ["2b-10"]}, {"id": "F004", "description": "Wire useTranslation in BillingConfiguration.tsx, ClientContractAssignment.tsx, ClientContractLineDashboard.tsx, ClientBillingSchedule.tsx", "implemented": true, "prdRefs": ["2b-10"]}, {"id": "F005", "description": "Wire useTranslation in remaining ~20 client files (tax settings, service overlap, credit settings, grid cards, notes panel, contract lines, etc.)", "implemented": true, "prdRefs": ["2b-10"]}, {"id": "F006", "description": "Generate msp/clients translations for 6 non-English locales + 2 pseudo-locales", "implemented": true, "prdRefs": ["2b-10"]}, {"id": "F007", "description": "Italian accent audit on it/msp/clients.json", "implemented": true, "prdRefs": ["2b-10"]}, {"id": "F010", "description": "Create en/msp/contacts.json with all keys for 12 contact components", "implemented": true, "prdRefs": ["2b-11"]}, {"id": "F011", "description": "Wire useTranslation('msp/contacts') in ContactDetails.tsx, Contacts.tsx, ContactsImportDialog.tsx", "implemented": true, "prdRefs": ["2b-11"]}, {"id": "F012", "description": "Wire useTranslation in ContactPhoneNumbersEditor.tsx, ContactPortalTab.tsx, QuickAddContact.tsx", "implemented": true, "prdRefs": ["2b-11"]}, {"id": "F013", "description": "Wire useTranslation in remaining contact detail/list surfaces and notes panel (ContactDetailsEdit, ContactDetailsView, ClientContactsList, ContactNotesPanel; verify ContactsLayout, ContactAvatarUpload, ContactsSkeleton have no local strings)", "implemented": true, "prdRefs": ["2b-11"]}, {"id": "F014", "description": "Generate msp/contacts translations for 6 non-English locales + 2 pseudo-locales", "implemented": true, "prdRefs": ["2b-11"]}, {"id": "F015", "description": "Italian accent audit on it/msp/contacts.json", "implemented": true, "prdRefs": ["2b-11"]}, {"id": "F020", "description": "Create en/msp/assets.json with all keys for 41 asset components", "implemented": true, "prdRefs": ["2b-12"]}, {"id": "F021", "description": "Wire useTranslation('msp/assets') in AssetForm.tsx, AssetDashboardClient.tsx, AssetDetails.tsx (largest files)", "implemented": true, "prdRefs": ["2b-12"]}, {"id": "F022", "description": "Wire useTranslation in AssetDetailDrawerClient.tsx, AssociatedAssets.tsx, QuickAddAsset.tsx", "implemented": true, "prdRefs": ["2b-12"]}, {"id": "F023", "description": "Wire useTranslation in tab components (MaintenanceSchedulesTab, RelatedAssetsTab, ServiceHistoryTab, SoftwareInventoryTab, AuditLogTab, DocumentsPasswordsTab)", "implemented": true, "prdRefs": ["2b-12"]}, {"id": "F024", "description": "Wire useTranslation in panel components (AssetInfoPanel, RmmVitalsPanel, HardwareSpecsPanel, SecurityPatchingPanel, AssetNotesPanel)", "implemented": true, "prdRefs": ["2b-12"]}, {"id": "F025", "description": "Wire useTranslation in remaining asset files (StatusBadge, MetricsBanner, CommandPalette, CreateTicketFromAsset, DeleteAssetButton, etc.)", "implemented": true, "prdRefs": ["2b-12"]}, {"id": "F026", "description": "Generate msp/assets translations for 6 non-English locales + 2 pseudo-locales", "implemented": true, "prdRefs": ["2b-12"]}, {"id": "F027", "description": "Italian accent audit on it/msp/assets.json", "implemented": true, "prdRefs": ["2b-12"]}, {"id": "F030", "description": "Create en/msp/onboarding.json with all keys for wizard steps (excluding already-translated dashboard components)", "implemented": true, "prdRefs": ["2b-16"]}, {"id": "F031", "description": "Wire useTranslation('msp/onboarding') in TicketingConfigStep.tsx (largest file, ~300-600 strings, now 3,040 LOC)", "implemented": true, "prdRefs": ["2b-16"]}, {"id": "F032", "description": "Wire useTranslation in BillingSetupStep.tsx, OnboardingWizard.tsx, TeamMembersStep.tsx", "implemented": true, "prdRefs": ["2b-16"]}, {"id": "F033", "description": "Wire useTranslation in ClientInfoStep.tsx, AddClientStep.tsx, ClientContactStep.tsx, OnboardingProvider.tsx", "implemented": true, "prdRefs": ["2b-16"]}, {"id": "F034", "description": "Generate msp/onboarding translations for 6 non-English locales + 2 pseudo-locales", "implemented": true, "prdRefs": ["2b-16"]}, {"id": "F035", "description": "Italian accent audit on it/msp/onboarding.json", "implemented": true, "prdRefs": ["2b-16"]}, {"id": "F090", "description": "Update ROUTE_NAMESPACES for /msp/clients, /msp/contacts, /msp/assets, /msp/onboarding", "implemented": true}, {"id": "F091", "description": "validate-translations.cjs passes for all 4 new namespaces across all 9 locales", "implemented": true}, {"id": "F092", "description": "Regenerate pseudo-locales (xx, yy) for all 4 namespaces", "implemented": true}, {"id": "F093", "description": "npm run build succeeds with no TypeScript errors", "implemented": true}, {"id": "F094", "description": "Normalize contacts/onboarding pseudo-locales to canonical generate-pseudo-locales.cjs output for interpolation-heavy strings", "implemented": true} ]