Files
jobtrackingapp/docs/i18n/00/AUDIT.md
T

4.6 KiB

I18N-00 baseline audit

Date: 2026-11-02. Verdict: IN_PROGRESS; partial research checkpoint, not full I18N-00 acceptance. I18N-01 through 08 BLOCKED. Production NO-GO.

Research only, authorised by master prompt and continuous-progress instruction. Branch feature/i18n-00-audit, worktree C:/Users/Connor/.codex/worktrees/i18n-00-audit/Job tracker, baseline 5cb903b989742b7a96cb22ddf4c0e24993b18980. Application/API/tests/UI/sidecar diff against ba04d817 was empty. This is the accepted conditional development handoff, not blanket runtime, language or production acceptance. No controller or approval state was changed. All ten supplied I18N prompts were read. Their implementation requirements are future specifications, not authority to execute them.

Architecture authority is docs/architecture/current.md, which redirects to overview.md. Existing React/MUI, ASP.NET/EF/MariaDB, Python sidecar and rendering ownership remain. Graph absent in this baseline: bounded source inspection used; no graph rebuild needed for documentation.

Verified source findings

  • job-tracker-ui/src/i18n/translations.ts: custom two-language en | nb object; it is not an i18next or FormatJS installation.
  • I18nProvider.tsx: local storage accepts nb, nb-NO, no; otherwise English. Auth hydration and cross-tab storage update language. {word} substitution handles simple values, not ICU plural/select grammar. Failed preference save offers retry; sequence tracking avoids stale error handling.
  • JobTrackerApi/Controllers/AuthController.cs:601: language endpoint accepts en or Bokmål aliases, writes nb-NO; unsupported input returns hardcoded English error. Do not rename canonical English to en-GB without migration tests.
  • CoverLetterDocumentRenderer.cs:36: labels distinguish nb-NO from English; document HTML has its own language. ThemedCvRenderer.cs:60 derives HTML language from document settings. UI language must not become the output-language owner.
  • HumanLanguageCatalog.cs is CV skill-language recognition, including environment-independent seeds and variant collapsing. It is not an eligible UI-locale registry; reusing it would lose script/region distinctions.
  • Manifest dependencies: React ^19.2.4, Next 16.4.1, MUI ^7.3.9, TypeScript ^5.9.3, date-fns ^4.1.0. These are manifest ranges, not freshly installed/runtime versions. No i18next/FormatJS direct dependency. Lockfile/runtime compatibility must be qualified before implementation.

Gate evidence

docs/pre-phase10-ux/ACCEPTANCE.md grants conditional development review, not Phase 10 implementation. docs/automation/handoffs/pre-phase10/FINAL_DEVELOPMENT_ENTRY.md separates P10-00 assessment from candidate-specific P10-01 permission. This checkpoint cannot grant either. Product-review and launch-site accepted decisions are absent from this baseline; absence is not permission. Global Jobs planning exists separately at 0ec9f98 in the main workspace (docs/global-jobs/00/DEPENDENCIES_AND_GATES.md inspected read-only); it is not integrated here and does not authorise live providers or GJ-01.

Honest limits

The TypeScript AST inventory contains 3,119 existing English catalogue entries and 3,164 syntactically identified static call sites across 134 non-test frontend files. It records 188 dynamic/unknown calls separately as an unresolved count; 853 catalogue entries have no identified static caller. These are not deletion candidates: wrappers, dynamic keys and direct object access remain unresolved. A subsequent partial JSX/accessibility literal inventory now contains 26 source-context-reviewed candidates. CONTEXT_TRIAGE.md records the current 80 unresolved dynamic calls after 108 finite-branch resolutions. This is still not a complete non-catalogue inventory. Every-string attribution, translator context, accessible states and country-specific legal recognition require additional review. Therefore the stage's complete-inventory criterion has not passed. No translations, native approval, screenshots, model results, browser results or locale release are manufactured.

The country matrix covers an initial 59 territory/market contexts from versioned CLDR 49, with targeted official-record checks for Norway, Switzerland and Serbia. The remaining legal cross-checks are pending. The draft catalogue contains 60 planned locale candidates, not 60 supported languages. Schema, uniqueness, BCP-47 parsing and rejection of a forged released status passed using existing local tools. Node/ICU canonicalises cnr-ME to sr-ME; retain this unresolved identity issue rather than accepting an automatic product alias. See BASELINE_TESTS.md.