Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
527 lines
13 KiB
JSON
527 lines
13 KiB
JSON
[
|
|
{
|
|
"id": "T001",
|
|
"description": "useOptionalI18n returns context inside I18nProvider and null outside without throwing",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F001"
|
|
]
|
|
},
|
|
{
|
|
"id": "T002",
|
|
"description": "Component using useOptionalI18n renders on a page without I18nProvider (auth-page scenario) without crashing, falling back to default locale",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F001"
|
|
]
|
|
},
|
|
{
|
|
"id": "T003",
|
|
"description": "DatePicker renders 2026-06-10 as locale short date under fr (10/06/2026) and de (10.06.2026)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F002"
|
|
]
|
|
},
|
|
{
|
|
"id": "T004",
|
|
"description": "DatePicker under en renders MM/dd/yyyy-equivalent short date (no regression for English users)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F002"
|
|
]
|
|
},
|
|
{
|
|
"id": "T005",
|
|
"description": "DatePicker honors displayFormat prop override regardless of locale",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F003"
|
|
]
|
|
},
|
|
{
|
|
"id": "T006",
|
|
"description": "DatePicker call-site audit documented: zero call sites parse the displayed string",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F004"
|
|
]
|
|
},
|
|
{
|
|
"id": "T007",
|
|
"description": "DateTimePicker with explicit timeFormat='24h' renders 24h time with locale date under fr",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F005"
|
|
]
|
|
},
|
|
{
|
|
"id": "T008",
|
|
"description": "DateTimePicker without timeFormat renders locale-derived date+time ('P p') under en and de",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F005"
|
|
]
|
|
},
|
|
{
|
|
"id": "T009",
|
|
"description": "Calendar shows French weekday/month names when locale is fr",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F006"
|
|
]
|
|
},
|
|
{
|
|
"id": "T010",
|
|
"description": "Calendar MonthYearSelect caption shows localized month name under es",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F007"
|
|
]
|
|
},
|
|
{
|
|
"id": "T011",
|
|
"description": "CurrencyInput formats 1234.56 as '1.234,56' under de and '1 234,56' under fr on blur",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F008"
|
|
]
|
|
},
|
|
{
|
|
"id": "T012",
|
|
"description": "CurrencyInput under fr: typing '12,5' fires onChange with 12.5 (not 125 or 1250)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F009"
|
|
]
|
|
},
|
|
{
|
|
"id": "T013",
|
|
"description": "CurrencyInput under de: typing '1.234,56' parses to 1234.56",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F009"
|
|
]
|
|
},
|
|
{
|
|
"id": "T014",
|
|
"description": "CurrencyInput under en: typing '1,234.56' still parses to 1234.56 (no regression)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F009"
|
|
]
|
|
},
|
|
{
|
|
"id": "T015",
|
|
"description": "CurrencyInput round-trip (format \u2192 parse \u2192 format) is lossless for en, de, fr, pl across 0, 0.5, 999, 1234.56, 1000000.01",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F008",
|
|
"F009"
|
|
]
|
|
},
|
|
{
|
|
"id": "T016",
|
|
"description": "CurrencyInput clears to empty and fires onChange(undefined) on invalid input in all tested locales",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F009"
|
|
]
|
|
},
|
|
{
|
|
"id": "T017",
|
|
"description": "PrintOptionsDialog renders Date cell values using the active locale",
|
|
"implemented": false,
|
|
"featureIds": [
|
|
"F010"
|
|
]
|
|
},
|
|
{
|
|
"id": "T018",
|
|
"description": "ReportEngine.formatValue with locale 'de' renders currency as 1.234,56 \u20ac style and with no locale renders en-US style (backward compat)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F011"
|
|
]
|
|
},
|
|
{
|
|
"id": "T019",
|
|
"description": "ReportEngine formatNumber/formatPercentage/formatDate respect passed locale in packages/reporting copy",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F011"
|
|
]
|
|
},
|
|
{
|
|
"id": "T020",
|
|
"description": "server/src ReportEngine copy produces identical localized output to packages/reporting copy for the same inputs",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F012"
|
|
]
|
|
},
|
|
{
|
|
"id": "T021",
|
|
"description": "executeReport passes hierarchically-resolved locale into ReportEngine (unit test with mocked getHierarchicalLocaleAction)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F013"
|
|
]
|
|
},
|
|
{
|
|
"id": "T022",
|
|
"description": "filterPseudoLocales returns xx/yy when NODE_ENV=development and strips them when NODE_ENV=production",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F014"
|
|
]
|
|
},
|
|
{
|
|
"id": "T023",
|
|
"description": "filterPseudoLocales strips pt in both development and production",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F014"
|
|
]
|
|
},
|
|
{
|
|
"id": "T024",
|
|
"description": "Dev server: MSP user language picker lists Pseudo (xx) and Pseudo (yy); production build does not (manual/visual via dev stack)",
|
|
"implemented": false,
|
|
"featureIds": [
|
|
"F015"
|
|
]
|
|
},
|
|
{
|
|
"id": "T025",
|
|
"description": "Selecting xx in dev persists preference, survives reload, and renders pseudo-accented strings on a translated MSP page",
|
|
"implemented": false,
|
|
"featureIds": [
|
|
"F016"
|
|
]
|
|
},
|
|
{
|
|
"id": "T026",
|
|
"description": "actions.print / actions.printOptions resolve in every namespace that references them (no raw-key rendering in print/export menus)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F017"
|
|
]
|
|
},
|
|
{
|
|
"id": "T027",
|
|
"description": "find-missing-i18n-keys reports 0 missing for msp/workflows after backfill",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F018"
|
|
]
|
|
},
|
|
{
|
|
"id": "T028",
|
|
"description": "find-missing-i18n-keys reports 0 missing for msp/email-providers after backfill",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F019"
|
|
]
|
|
},
|
|
{
|
|
"id": "T029",
|
|
"description": "find-missing-i18n-keys reports 0 missing for msp/integrations after backfill",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F020"
|
|
]
|
|
},
|
|
{
|
|
"id": "T030",
|
|
"description": "find-missing-i18n-keys reports 0 missing for features/tickets after backfill",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F021"
|
|
]
|
|
},
|
|
{
|
|
"id": "T031",
|
|
"description": "find-missing-i18n-keys reports 0 missing for msp/clients, msp/assets, msp/user-activities after backfill",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F022",
|
|
"F023",
|
|
"F024"
|
|
]
|
|
},
|
|
{
|
|
"id": "T032",
|
|
"description": "find-missing-i18n-keys exits 0 across the entire repo",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F025",
|
|
"F028"
|
|
]
|
|
},
|
|
{
|
|
"id": "T033",
|
|
"description": "Backfilled en values match the defaultValue strings previously rendered (spot-check 20 keys against git history of components)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F018",
|
|
"F019",
|
|
"F020",
|
|
"F021",
|
|
"F022",
|
|
"F023",
|
|
"F024",
|
|
"F025"
|
|
]
|
|
},
|
|
{
|
|
"id": "T034",
|
|
"description": "validate-translations passes after backfill: all 7 locales have key parity with en including new keys",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F026"
|
|
]
|
|
},
|
|
{
|
|
"id": "T035",
|
|
"description": "Backfilled keys preserve interpolation variables across all locales (validate-translations variable check green)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F026"
|
|
]
|
|
},
|
|
{
|
|
"id": "T036",
|
|
"description": "Regenerated xx/yy pseudo-locales contain every backfilled key",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F027"
|
|
]
|
|
},
|
|
{
|
|
"id": "T037",
|
|
"description": "MspClientTickets has zero hardcoded user-visible strings (i18n audit test asserting useTranslation usage + key coverage)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F029"
|
|
]
|
|
},
|
|
{
|
|
"id": "T038",
|
|
"description": "Client page Tickets tab renders pseudo-accented strings under xx locale (column headers, filters, 'Loading tickets...', search placeholder)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F029",
|
|
"F035"
|
|
]
|
|
},
|
|
{
|
|
"id": "T039",
|
|
"description": "MspClientAssets has zero hardcoded user-visible strings (i18n audit test)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F030"
|
|
]
|
|
},
|
|
{
|
|
"id": "T040",
|
|
"description": "Client page Assets tab renders pseudo-accented strings under xx ('Loading assets...', 'All asset types...' filter)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F030",
|
|
"F035"
|
|
]
|
|
},
|
|
{
|
|
"id": "T041",
|
|
"description": "MspContactTickets has zero hardcoded user-visible strings (i18n audit test)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F031"
|
|
]
|
|
},
|
|
{
|
|
"id": "T042",
|
|
"description": "InteractionsFeed renders translated strings under fr (search, filter, reset, apply controls)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F032",
|
|
"F035"
|
|
]
|
|
},
|
|
{
|
|
"id": "T043",
|
|
"description": "OverallInteractionsFeed renders translated strings under fr",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F033",
|
|
"F035"
|
|
]
|
|
},
|
|
{
|
|
"id": "T044",
|
|
"description": "SchedulingInteractionDetails renders translated strings under fr",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F034",
|
|
"F035"
|
|
]
|
|
},
|
|
{
|
|
"id": "T045",
|
|
"description": "All new P3 keys present in en + 7 locales + pseudo (validate-translations green)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F035"
|
|
]
|
|
},
|
|
{
|
|
"id": "T046",
|
|
"description": "Navigating to /msp/clients?tab=tickets loads required namespaces without missing-namespace console warnings",
|
|
"implemented": false,
|
|
"featureIds": [
|
|
"F036"
|
|
]
|
|
},
|
|
{
|
|
"id": "T047",
|
|
"description": "msp-composition sweep documented: each of the 16 remaining files listed with 'no user-visible strings' verdict",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F037"
|
|
]
|
|
},
|
|
{
|
|
"id": "T048",
|
|
"description": "grep for '_plural' across server/public/locales returns zero matches after migration",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F038",
|
|
"F039",
|
|
"F040"
|
|
]
|
|
},
|
|
{
|
|
"id": "T049",
|
|
"description": "t('teams.details.memberCount', {count: 1}) renders singular and {count: 5} renders plural under en",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F039",
|
|
"F042"
|
|
]
|
|
},
|
|
{
|
|
"id": "T050",
|
|
"description": "Polish plural forms resolve correctly for counts 1 (_one), 2 (_few), 5 (_many) on migrated keys",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F040"
|
|
]
|
|
},
|
|
{
|
|
"id": "T051",
|
|
"description": "AdminSessionManagement renders correct subtitle for 1 session and 5 sessions via single t() call with both sessionCount and userCount interpolated",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F041"
|
|
]
|
|
},
|
|
{
|
|
"id": "T052",
|
|
"description": "Interaction-types import toast renders correct singular/plural under en and pl",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F042"
|
|
]
|
|
},
|
|
{
|
|
"id": "T053",
|
|
"description": "validate-translations does not warn on pl _few/_many suffixes (CLDR-aware)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F043"
|
|
]
|
|
},
|
|
{
|
|
"id": "T054",
|
|
"description": "validate-translations errors when pl omits a required _many form for a key that has _one/_other in en (negative test with fixture)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F043"
|
|
]
|
|
},
|
|
{
|
|
"id": "T055",
|
|
"description": "validate-translations accepts en having only _one/_other (does not demand _few/_many from English)",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F043"
|
|
]
|
|
},
|
|
{
|
|
"id": "T056",
|
|
"description": "Pseudo-locale generator output contains plural-suffixed keys with accents applied and variables intact",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F044"
|
|
]
|
|
},
|
|
{
|
|
"id": "T057",
|
|
"description": "validate-translations full run: 0 errors, 0 warnings",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F045"
|
|
]
|
|
},
|
|
{
|
|
"id": "T058",
|
|
"description": "CI workflow runs find-missing-i18n-keys job and fails on a fixture branch referencing a nonexistent key",
|
|
"implemented": false,
|
|
"featureIds": [
|
|
"F046"
|
|
]
|
|
},
|
|
{
|
|
"id": "T059",
|
|
"description": "CI workflow triggers on a PR touching only packages/**/*.tsx (no locale changes)",
|
|
"implemented": false,
|
|
"featureIds": [
|
|
"F047"
|
|
]
|
|
},
|
|
{
|
|
"id": "T060",
|
|
"description": "CI green on no-op PR from clean main after P5",
|
|
"implemented": false,
|
|
"featureIds": [
|
|
"F048"
|
|
]
|
|
},
|
|
{
|
|
"id": "T061",
|
|
"description": "Existing .i18n.test.* audit suites pass unchanged after each phase",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F002",
|
|
"F005",
|
|
"F008",
|
|
"F029",
|
|
"F030",
|
|
"F031",
|
|
"F039"
|
|
]
|
|
},
|
|
{
|
|
"id": "T062",
|
|
"description": "npx tsc --noEmit passes for packages/ui, packages/reporting, packages/msp-composition, packages/clients, packages/scheduling after changes",
|
|
"implemented": true,
|
|
"featureIds": [
|
|
"F001",
|
|
"F011",
|
|
"F029",
|
|
"F032",
|
|
"F034"
|
|
]
|
|
}
|
|
] |