docs(issue-279): add i18n mvp close-out note
This commit is contained in:
10
CHANGELOG.md
10
CHANGELOG.md
@@ -1,5 +1,15 @@
|
||||
# Changelog
|
||||
|
||||
## [Unreleased]
|
||||
### Docs
|
||||
- Added `docs/ISSUE-279-I18N-MVP-CLOSEOUT.md` with i18n MVP close-out guidance covering migration impact, releasable changelog text, and a release-readiness checklist anchored to current `main` state.
|
||||
|
||||
### i18n
|
||||
- Shared da/en lobby i18n contract is 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 consume shared i18n copy, persist preferred locale, and keep audio-policy messaging aligned with the shared catalog.
|
||||
- i18n MVP release migration impact is none beyond standard Django migration consistency checks.
|
||||
|
||||
## [0.1.0] - 2026-02-27
|
||||
### Added
|
||||
- Projekt scaffold for Weirsøe Party Protocol (Django 6.0.2)
|
||||
|
||||
170
docs/ISSUE-279-I18N-MVP-CLOSEOUT.md
Normal file
170
docs/ISSUE-279-I18N-MVP-CLOSEOUT.md
Normal file
@@ -0,0 +1,170 @@
|
||||
# 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 repoets aktuelle `main`-tilstand.
|
||||
|
||||
Repo-state ved skrivning:
|
||||
- `main` peger på merge commit `903c63c` (`feat: simplify Angular host/player MVP flow for issue #276`, PR #281).
|
||||
- Åbne i18n-relaterede PR'er uden for `main`:
|
||||
- PR #282 `docs(#277): add shared i18n parity artifact`
|
||||
- PR #283 `feat(#275): harden django i18n locale negotiation and fallback`
|
||||
|
||||
## 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:
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```markdown
|
||||
### 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:
|
||||
|
||||
```markdown
|
||||
## 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 repoets aktuelle tilstand ved `main@903c63c`.
|
||||
|
||||
### 1) Shared contract and locale behavior
|
||||
|
||||
- [x] Shared catalog findes i `shared/i18n/lobby.json`.
|
||||
- [x] Default/supported locales er dokumenteret og implementeret som `en` + `da`.
|
||||
- [x] Backend bruger shared contract til locale-aware fejlbeskeder.
|
||||
- [x] Frontend/Angular bruger shared loader + shared keyspace.
|
||||
- [x] Fallback-regel til `en` er dokumenteret og testet.
|
||||
|
||||
### 2) Verification artifacts and local checks
|
||||
|
||||
- [x] Arkitektur-note findes: `docs/I18N_ARCHITECTURE.md`.
|
||||
- [x] Baseline artifact for issue #175 findes.
|
||||
- [x] Backend artifact for issue #225 findes.
|
||||
- [x] Frontend/shared loader artifact for issue #257 findes.
|
||||
- [x] Drift-check dokumentation findes i `docs/i18n-drift-check.md`.
|
||||
- [ ] Parity artifact fra issue #277 er ikke på `main` endnu (åben som PR #282).
|
||||
|
||||
### 3) Code readiness on current branch topology
|
||||
|
||||
- [x] Angular MVP host/player i18n flow er på `main` (PR #281).
|
||||
- [x] Shared locale/bootstrap wiring er på `main`.
|
||||
- [ ] Django i18n hardening fra issue #275 er ikke på `main` endnu (åben som PR #283).
|
||||
- [ ] PR #283 er ikke merge-ready i den aktuelle Gitea-state (`mergeable: false` ved denne close-out note).
|
||||
|
||||
### 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:
|
||||
```bash
|
||||
python3 scripts/check_i18n_drift.py
|
||||
```
|
||||
- [ ] Kør backend i18n regressions:
|
||||
```bash
|
||||
. .venv/bin/activate && python manage.py test \
|
||||
partyhub.tests_i18n_bootstrap \
|
||||
lobby.tests.I18nResolverTests
|
||||
```
|
||||
- [ ] Kør frontend shared-contract/parity checks:
|
||||
```bash
|
||||
cd frontend && npm test -- --run \
|
||||
tests/lobby-loader.parity.test.ts \
|
||||
tests/lobby-i18n.contract.test.ts
|
||||
```
|
||||
- [ ] Kør Angular MVP locale smoke:
|
||||
```bash
|
||||
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:
|
||||
```bash
|
||||
. .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.
|
||||
Reference in New Issue
Block a user