Files
weirsoe-party-protocol/docs/ISSUE-279-I18N-MVP-CLOSEOUT.md
Asger Geel Weirsoee ceb71aff6e
All checks were successful
CI / test-and-quality (push) Successful in 2m35s
CI / test-and-quality (pull_request) Successful in 2m35s
docs(issue-279): restate close-out note as reviewed snapshot
2026-03-13 10:38:26 +00:00

7.6 KiB

ISSUE-279 — i18n MVP close-out note

Issue: #279 ([READY][#175][P5] MVP close-out note: migration/changelog + release-readiness checklist for i18n)

Scope

Dette dokument lukker MVP-sporet for issue #175 med tre konkrete ting:

  1. en migrationsnote for release/deploy,
  2. changelog-indhold der kan genbruges i næste release-note,
  3. en release-readiness checkliste for i18n, forankret i et verificeret snapshot af main ved reviewtidspunktet.

Repo-state ved review-opdatering:

  • main peger på merge commit e6ca18f (test: issue #278 da+en smoke gate and primary-only audio verification, PR #285).
  • Denne note er et snapshot af repo-tilstanden verificeret 2026-03-13 UTC, ikke en løbende garanti for senere main-ændringer.
  • Åbne i18n-relaterede PR'er uden for main:
    • PR #282 docs(#277): add shared i18n parity artifact (mergeable: true ved verifikation)
    • PR #283 feat(#275): harden django i18n locale negotiation and fallback (mergeable: true ved verifikation)

Current i18n MVP state on main

Følgende er allerede til stede på main:

  • Shared contract i shared/i18n/lobby.json
    • default locale: en
    • supported locales: en, da
    • fælles frontend/backend keyspace + fallback-regler
  • Django bootstrap via partyhub/i18n_bootstrap.py og partyhub/settings.py
    • LocaleMiddleware aktiv
    • LANGUAGE_CODE + LANGUAGES bootstrappes fra shared catalog
  • Backend locale/error flow via lobby/i18n.py
    • normalisering af locale-tags
    • locale-aware fejlpayload med error_code, error, locale
    • fallback til en når locale eller oversættelse mangler
  • Angular MVP wiring via
    • frontend/shared/i18n/lobby-loader.ts
    • frontend/angular/src/app/lobby-i18n.ts
    • host/player shells med locale switch og shared copy-opslag
  • Drift/parity guardrails
    • shared/i18n/key-manifest.json
    • scripts/check_i18n_drift.py
    • frontend parity/contract tests
  • Existing documentation/artifacts
    • docs/I18N_ARCHITECTURE.md
    • docs/ISSUE-175-I18N-SHARED-CONTRACT-ARTIFACT.md
    • docs/ISSUE-225-BACKEND-I18N-BASELINE-ARTIFACT.md
    • docs/ISSUE-257-SHARED-I18N-KEYSPACE-FRONTEND-LOADER-ARTIFACT.md
    • docs/ISSUE-207-I18N-AUDIO-SMOKE-ARTIFACT.md
    • docs/i18n-drift-check.md

Migration note for release

Schema impact

Der er ingen nye Django-migrations i selve i18n-MVP-sporet på main.

Den i18n-relaterede leverance ligger i shared catalog, locale-bootstrap, error-payload-kontrakt, Angular wiring og test/documentation. Den kræver derfor ikke en særskilt i18n-database-migration for at gå i release.

Release/deploy expectation

Selv om issue #279 ikke introducerer schemaændringer, skal release-flow stadig følge repoets generelle migreringsgate:

python manage.py makemigrations --check --dry-run
python manage.py migrate --check --noinput

Hvorfor: release-policyen kræver, at vi undgår code/schema drift, og staging-smoke-suiten forventer eksplicit migration consistency check.

Praktisk migrationskonklusion

Til release-notes/deploy-runbook kan i18n-sporet beskrives sådan her:

  • Migration impact: none for i18n MVP itself
  • Deploy requirement: run standard Django migration consistency checks anyway
  • Rollback note: rollback er primært kode-/asset-baseret (shared catalog, frontend bundles, backend locale resolver), ikke schema-baseret

Suggested changelog content

Følgende tekst kan bruges direkte i næste unreleased/release-sektion:

### i18n
- Shared da/en lobby i18n contract is now wired across Django and Angular MVP flows via `shared/i18n/lobby.json`.
- Backend error payloads expose stable locale-aware fields (`error_code`, `error`, `locale`) with fallback to English for unsupported locales.
- Angular host/player shells now consume shared i18n copy, persist preferred locale, and keep audio-policy messaging aligned with the shared catalog.
- Added repo guardrails for i18n drift/parity through the shared key manifest, drift checker, and focused frontend/backend contract tests.
- Release migration impact for the i18n MVP is **none** beyond the standard Django migration consistency checks.

Kort version til annoterede release-notes:

## i18n MVP close-out
- Shared da/en contract is active across backend + Angular MVP shell.
- Locale fallback remains `en` for unsupported requests and missing translations.
- No i18n-specific schema migration is required; keep standard `migrate --check --noinput` in release verification.

Release-readiness checklist for i18n

Status er vurderet mod verificeret snapshot main@e6ca18f (reviewet 2026-03-13 UTC).

1) Shared contract and locale behavior

  • Shared catalog findes i shared/i18n/lobby.json.
  • Default/supported locales er dokumenteret og implementeret som en + da.
  • Backend bruger shared contract til locale-aware fejlbeskeder.
  • Frontend/Angular bruger shared loader + shared keyspace.
  • Fallback-regel til en er dokumenteret og testet.

2) Verification artifacts and local checks

  • Arkitektur-note findes: docs/I18N_ARCHITECTURE.md.
  • Baseline artifact for issue #175 findes.
  • Backend artifact for issue #225 findes.
  • Frontend/shared loader artifact for issue #257 findes.
  • Drift-check dokumentation findes i docs/i18n-drift-check.md.
  • Parity artifact fra issue #277 er ikke på main endnu (åben som PR #282, mergeable: true ved verifikation).

3) Code readiness on current branch topology

  • Angular MVP host/player i18n flow er på main (PR #281).
  • Shared locale/bootstrap wiring er på main.
  • Django i18n hardening fra issue #275 er ikke på main endnu (åben som PR #283, mergeable: true ved verifikation).
  • PR #283 er stadig en separat release-afklaring, selv om den aktuelt er mergebar i Gitea.

4) Release gate before shipping i18n as “done”

  • Merge eller afvis eksplicit PR #282, så parity-artifact-status er afklaret.
  • Merge eller afvis eksplicit PR #283, så backend hardening-status er afklaret.
  • Kør drift-check fra repo root:
    python3 scripts/check_i18n_drift.py
    
  • Kør backend i18n regressions:
    . .venv/bin/activate && python manage.py test \
      partyhub.tests_i18n_bootstrap \
      lobby.tests.I18nResolverTests
    
  • Kør frontend shared-contract/parity checks:
    cd frontend && npm test -- --run \
      tests/lobby-loader.parity.test.ts \
      tests/lobby-i18n.contract.test.ts
    
  • Kør Angular MVP locale smoke:
    cd frontend/angular && npm test -- --run \
      src/app/lobby-i18n.spec.ts \
      src/app/i18n-mvp-flow-smoke.spec.ts \
      src/app/features/host/host-shell.component.spec.ts \
      src/app/features/player/player-shell.component.spec.ts
    
  • Bekræft standard migration consistency gate:
    . .venv/bin/activate && python manage.py makemigrations --check --dry-run
    . .venv/bin/activate && python manage.py migrate --check --noinput
    
  • Følg docs/RELEASE_POLICY.md: staging deploy, /healthz, smoke-resultat og changelog-reference før tag.

Close-out conclusion

Konklusion: i18n-MVP'en er i praksis implementeret på main, og issue #279 kan levere den manglende release-/migration-closeout dokumentation uden nye kodeændringer i app-logikken.

Men hvis i18n-sporet skal kaldes fuldt release-ready, mangler der stadig en eksplicit beslutning om de to åbne opfølgnings-PR'er:

  • PR #282 (parity artifact)
  • PR #283 (Django i18n hardening, aktuelt ikke merge-ready)

Det betyder, at close-out-noten er komplet, men selve release-gaten bør betragte #282/#283 som åbne afklaringer, ikke som allerede landede leverancer.