Gå til innhold

ADR-015: Norsk domenespråk i kode — ingen oversettelseslag⚓︎

Domenebegreper i koden bærer det kanoniske norske navnet fra CONTEXT.md (æøå tillatt i C#). Teknisk stillas forblir engelsk. Ett ord per begrep — likt i saksbehandlerens munn, i ordlisten og i koden.

Kontekst⚓︎

CONTEXT.md har norsk som kanonisk domenespråk, men koden er tospråklig: nyere kode er norsk (SøknadsDato, Saksnummer), eldre bruker engelske kodenavn (Case, Rule, CaseEvaluation) som ordlisten må pare med en «(kodenavn X)»-parentes. Den parentesen er et oversettelseslag — hver gang noen beveger seg mellom domenespråket og koden, oversetter de, og slike lag drifter. Den kommende ERS-replikerings-pivoten ville bygd mange nye modeller på engelsk og fordypet laget.

Nøkkelinnsikten: anti-korrupsjon mot ERS ≠ anglifisering. ACL-en skal beskytte mot ERS' tekniske skjema, men målspråket kan og bør være norsk domenespråk. Det er faktisk mer frikoblet — domenespråket overlever en utskifting av ERS (eller at Kai overtar saksbehandlingen); en engelsk oversettelse tjener ingen.

Beslutning⚓︎

Norske domeneidentifikatorer. Typer, properties, metoder, namespaces og ports som uttrykker domenebegreper bærer det norske navnet fra CONTEXT.md, stavet med æøå. (Presedens: SøknadsDato. Bonus: Sak fjerner #pragma warning disable CA1716 som Case krevde.)

Teknisk stillas forblir engelsk. Repository, Handler, Adapter, DbContext, Factory, Options, osv. Grensetest: ville en saksbehandler kjent igjen ordet? → norsk; ren plumbing? → engelsk. Blandet er forventet: SakRepository, RegelresultatHandler, MimirSakAdapter.

DB-identifikatorer er ASCII. Tabell-/kolonnenavn holdes ASCII for å unngå æøå-friksjon i migrasjoner/psql. Det norske navnet lever i C#-typen; kolonnen er et ASCII-alias via eksplisitt EF-mapping (SøknadsDatosoknads_dato). Ingen info tapt — typen er kilden.

Omdøp av eksisterende kode lander som én mekanisk, oppførsels-bevarende PR før berikelses-pivoten:

Engelsk Norsk
Case Sak
Rule Regel
CaseEvaluation Regelresultat
RuleDecision Beslutning
StageReview Stadiegjennomgang
Stage Stadium

…+ tilhørende *Id-typer, ports, EF-DbSet-er/-konfig og en datapreserverende EF-migrasjon. Ordlistens «(kodenavn X)»-parenteser fjernes, og en kort regel i CLAUDE.md håndhever konvensjonen for ny kode.

Ikke-mål⚓︎

  • Oversette teknisk sjargong til norsk.
  • Endre API-/SDK-wire-kontrakter (JSON-navn, ruter, enum-verdier) — ekstern konsument, egen vurdering.
  • v1 (Enova.Agent.*) — sunsettes, omdøpes ikke.
  • Hvilke felter de replikerte modellene får — egen ERS-spec.

Konsekvenser⚓︎

  • Ingen oversettelse; ordlisten blir enkelt kilde, og koden er mer frikoblet fra ERS.
  • Pris: ett stort mekanisk omdøp (egen PR) + et lite navne-gap C#↔DB (SøknadsDato/soknads_dato) som EF-mappingen bygger bro over.
  • Forkastet: status quo (beholder oversettelseslaget) og ASCII-translitterert norsk (Soknad — innfører en annen oversettelse, og er allerede brutt av SøknadsDato).

Verifisering⚓︎

  • [ ] Ingen Case/Rule/Stage/CaseEvaluation/RuleDecision/StageReview-domenetyper igjen; «(kodenavn)» borte fra CONTEXT.md.
  • [ ] Teknisk sjargong fortsatt engelsk; DB-identifikatorer ASCII via EF-mapping.
  • [ ] CLAUDE.md-regel på plass; dotnet build Kai.slnx grønt, oppførsel uendret.

Bygger på CONTEXT.md; motivert av ERS-replikerings-pivoten. Implementasjon: docs/superpowers/plans/2026-06-29-norsk-domenesprak-rename.md. Håndheving lever i CLAUDE.md.