Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .claude/agent-memory/archgate-developer/MEMORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ Non-enforceable lessons — environment/CI/platform quirks no static rule can re
- **macOS `/var` → `/private/var` symlink breaks temp dir path comparisons in tests** — On macOS, `/var` is a symlink to `/private/var`. `mkdtempSync(join(tmpdir(), ...))` returns `/var/folders/...` but `process.cwd()` after `chdir()` resolves the symlink to `/private/var/folders/...`. Tests that compare `tempDir` against paths derived from `process.cwd()` or `findProjectRoot()` will fail. Fix: always wrap `mkdtempSync` with `realpathSync` in test setup: `tempDir = realpathSync(mkdtempSync(join(tmpdir(), "archgate-test-")))`. This normalizes the path upfront. Discovered in v0.38.0/v0.39.0 release builds — PR CI runs on ubuntu-latest only, so macOS-specific issues are invisible until the release workflow.
- **Don't test that well-known tools exist on PATH** — Tests like `expect(resolveCommand("bun")).toBe("bun")` assert CI environment state, not application logic. They fail when the runner installs tools via shims (e.g., proto on macOS ARM64 where `Bun.which` returns null). Delete such tests entirely — the "returns null for non-existent command" tests already cover `resolveCommand`'s actual logic, and WSL-specific tests cover the `.exe` fallback path.

## Translation Quality

- **Norwegian (nb/) diacritical patterns to scan for** — When reviewing or editing `docs/src/content/docs/nb/` translations, scan for three corruption patterns: (1) stripped diacriticals (`monster` for `mønster`, `a` for `å`), (2) ASCII approximations (`aa` for `å`, `oe` for `ø`, `ae` for `æ`), (3) HTML entities (`å` for `å`, `ø` for `ø`, `æ` for `æ`). GEN-002 mandates correct characters but automated rules only check structural i18n (page parity, link prefixes, translation drift) — diacritical correctness requires manual/AI review. Common Norwegian words to watch: må, når, på, også, både, får, bør, før, første, følger, kjører, mønster, nøkkel, verktøy, nødvendig, støtter, foreslår, påvirkning, forårsaker, primær, erklæring, miljø, overføring.

## Validation Pipeline

- `bun run validate` is the mandatory gate: lint → typecheck → format:check → test → ADR check → knip → build:check
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Krev avhengighetsretning i ren arkitektur -- indre lag må ikke referere til ytr

Ren arkitektur krever at avhengigheter peker innover: API -> Application -> Domain. Domain-laget må ha null eksterne avhengigheter, Application-laget må ikke referere til Infrastructure direkte, og ingen lavere lag skal referere til API-prosjektet. Denne regelen sjekker `using`-direktiver (C#) eller `import`-setninger for å håndheve disse grensene.

Det samme monsteret gjelder for enhver lagdelt arkitektur i ethvert språk -- tilpass importmonstrene og lagstiene deretter.
Det samme mønsteret gjelder for enhver lagdelt arkitektur i ethvert språk -- tilpass importmønstrene og lagstiene deretter.

## Eksempler på **feil** kode

Expand Down Expand Up @@ -109,7 +109,7 @@ export default {
} satisfies RuleSet;
```

For TypeScript-prosjekter, tilpass monstrene:
For TypeScript-prosjekter, tilpass mønstrene:

```typescript
// Check that domain/ does not import from infrastructure/
Expand All @@ -121,7 +121,7 @@ For TypeScript-prosjekter, tilpass monstrene:

## Når bør du bruke den

Når prosjektet ditt folger ren arkitektur, heksagonal arkitektur, eller en annen lagdelt arkitektur der avhengighetsretning må håndheves.
Når prosjektet ditt følger ren arkitektur, heksagonal arkitektur, eller en annen lagdelt arkitektur der avhengighetsretning må håndheves.

## Når bør du ikke bruke den

Expand Down
24 changes: 12 additions & 12 deletions docs/src/content/docs/nb/examples/common-rule-patterns.mdx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
---
title: Vanlige regelmonstre
description: "Bruksklare Archgate-regelmonstre for vanlige styringsbehov: avhengighetsstyring, importrestriksjoner, filstruktur, kodekvalitet, databaseskjema og arkitekturgrenser."
title: Vanlige regelmønstre
description: "Bruksklare Archgate-regelmønstre for vanlige styringsbehov: avhengighetsstyring, importrestriksjoner, filstruktur, kodekvalitet, databaseskjema og arkitekturgrenser."
sidebar:
order: 0
---

Bla gjennom komplette, kopierbare regeleksempler organisert etter kategori. Hver regelside folger et konsistent format: hva regelen sjekker, eksempler pa feil og riktig kode, den fullstendige `.rules.ts`-implementasjonen, og veiledning om nar du bor bruke den.
Bla gjennom komplette, kopierbare regeleksempler organisert etter kategori. Hver regelside følger et konsistent format: hva regelen sjekker, eksempler feil og riktig kode, den fullstendige `.rules.ts`-implementasjonen, og veiledning om når du bør bruke den.

## Avhengigheter og pakkestyring

Expand All @@ -19,8 +19,8 @@ Bla gjennom komplette, kopierbare regeleksempler organisert etter kategori. Hver

| Regel | Beskrivelse |
| ----------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| [no-banned-imports](/examples/no-banned-imports/) | Forhindre bruk av forbudte biblioteker med en datadrevet monsterliste |
| [no-banned-api](/examples/no-banned-api/) | Forby spesifikke kjoretidens API-er som forårsaker plattform- eller stabilitetsproblemer |
| [no-banned-imports](/examples/no-banned-imports/) | Forhindre bruk av forbudte biblioteker med en datadrevet mønsterliste |
| [no-banned-api](/examples/no-banned-api/) | Forby spesifikke kjøretidens API-er som forårsaker plattform- eller stabilitetsproblemer |
| [wrapper-enforcement](/examples/wrapper-enforcement/) | Krev bruk av en prosjektwrapper i stedet for en rå plattform-API |

## Filstruktur og organisering
Expand All @@ -29,7 +29,7 @@ Bla gjennom komplette, kopierbare regeleksempler organisert etter kategori. Hver
| ------------------------------------------------------- | ------------------------------------------------------------------ |
| [kebab-case-filenames](/examples/kebab-case-filenames/) | Krev konsistente filnavnkonvensjoner med regex-validering |
| [no-barrel-files](/examples/no-barrel-files/) | Oppdag og forby barrel-filer (re-eksport-bare `index.ts`) |
| [test-file-coverage](/examples/test-file-coverage/) | Kontroller at hver kildefil har en tilhorende testfil |
| [test-file-coverage](/examples/test-file-coverage/) | Kontroller at hver kildefil har en tilhørende testfil |
| [component-pairing](/examples/component-pairing/) | Krev Connected/presentational-komponentpar med mulighet for unntak |

## Kodekvalitet og output
Expand All @@ -38,23 +38,23 @@ Bla gjennom komplette, kopierbare regeleksempler organisert etter kategori. Hver
| ------------------------------------------------------------------- | -------------------------------------------------------------------- |
| [no-todo-comments](/examples/no-todo-comments/) | Flagg TODO-, FIXME-, HACK- og XXX-kommentarer for sammenslåing |
| [no-emoji-in-output](/examples/no-emoji-in-output/) | Forby emoji og rå ANSI-koder i CLI-outputstrenger |
| [max-file-length](/examples/max-file-length/) | Advar nar kildefiler overskrider en konfigurerbar linjeantallsgrense |
| [page-component-constraints](/examples/page-component-constraints/) | Krev storrelesgrenser og forby data-henting-hooks i sidekomponenter |
| [max-file-length](/examples/max-file-length/) | Advar når kildefiler overskrider en konfigurerbar linjeantallsgrense |
| [page-component-constraints](/examples/page-component-constraints/) | Krev størrelsesgrenser og forby data-henting-hooks i sidekomponenter |

## Databaseskjema

| Regel | Beskrivelse |
| --------------------------------------------------------- | --------------------------------------------------------------------------- |
| [database-audit-fields](/examples/database-audit-fields/) | Sorg for at alle tabeller inkluderer `created_at`- og `updated_at`-kolonner |
| [database-audit-fields](/examples/database-audit-fields/) | Sørg for at alle tabeller inkluderer `created_at`- og `updated_at`-kolonner |

## Arkitekturgrenser

| Regel | Beskrivelse |
| ----------------------------------------------------------------- | ------------------------------------------------------------ |
| [required-export-pattern](/examples/required-export-pattern/) | Kontroller at filer eksporterer en pakrevd funksjonssignatur |
| [openapi-routes](/examples/openapi-routes/) | Sorg for at backend-ruter bruker OpenAPI-typede definisjoner |
| [required-export-pattern](/examples/required-export-pattern/) | Kontroller at filer eksporterer en påkrevd funksjonssignatur |
| [openapi-routes](/examples/openapi-routes/) | Sørg for at backend-ruter bruker OpenAPI-typede definisjoner |
| [clean-architecture-layers](/examples/clean-architecture-layers/) | Krev avhengighetsretning i lagdelte arkitekturer |

:::tip[La AI-agenter skrive regler for deg]
Editorutvidelsene for [Claude Code](/guides/claude-code-plugin/) og [Cursor](/guides/cursor-integration/) inkluderer en Quality Manager-ferdighet som identifiserer gjentakende monstre i kodebasen din og foreslar nye regler for å handtere dem. [Registrer deg for betatilgang](https://plugins.archgate.dev).
Editorutvidelsene for [Claude Code](/guides/claude-code-plugin/) og [Cursor](/guides/cursor-integration/) inkluderer en Quality Manager-ferdighet som identifiserer gjentakende mønstre i kodebasen din og foreslår nye regler for å håndtere dem. [Registrer deg for betatilgang](https://plugins.archgate.dev).
:::
6 changes: 3 additions & 3 deletions docs/src/content/docs/nb/examples/component-pairing.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Krev at tilstandsfulle "Connected"-komponenter har en tilhørende presentasjonsk

## Regeldetaljer

Container/presentational-monsteret skiller datahentende (Connected) komponenter fra rene UI- (presentasjons-) komponenter. Denne regelen sjekker at hver `*Connected.tsx`-fil har en matchende `*.tsx` presentasjonsmotstykke. Den stotter et unntak-direktiv (`// @no-presentational: <grunn>`) for tilfeller der en Connected-komponent ikke trenger et presentasjonspar.
Container/presentational-mønsteret skiller datahentende (Connected) komponenter fra rene UI- (presentasjons-) komponenter. Denne regelen sjekker at hver `*Connected.tsx`-fil har en matchende `*.tsx` presentasjonsmotstykke. Den støtter et unntak-direktiv (`// @no-presentational: <grunn>`) for tilfeller der en Connected-komponent ikke trenger et presentasjonspar.

## Eksempler på **feil** kode

Expand Down Expand Up @@ -75,8 +75,8 @@ export default {

## Når bør du bruke den

Når frontend-arkitekturen din folger container/presentational-monsteret og du vil håndheve at datahentingslogikk alltid er adskilt fra UI-rendering.
Når frontend-arkitekturen din følger container/presentational-mønsteret og du vil håndheve at datahentingslogikk alltid er adskilt fra UI-rendering.

## Når bør du ikke bruke den

Når prosjektet ditt bruker en annen komponentarkitektur (f.eks. kun hooks, eller serverkomponenter), eller når monsteret brukes selektivt i stedet for universelt.
Når prosjektet ditt bruker en annen komponentarkitektur (f.eks. kun hooks, eller serverkomponenter), eller når mønsteret brukes selektivt i stedet for universelt.
6 changes: 3 additions & 3 deletions docs/src/content/docs/nb/examples/database-audit-fields.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ title: database-audit-fields
description: Sørg for at alle databasetabeller inkluderer påkrevde revisjonskolonner som created_at og updated_at for sporbarhet.
---

Sorg for at alle databasetabeller inkluderer påkrevde revisjonskolonner.
Sørg for at alle databasetabeller inkluderer påkrevde revisjonskolonner.

## Regeldetaljer

Revisjonsfelt (`created_at`, `updated_at`) er essensielle for feilsoking, datastyring og synkroniseringsprotokoller. Denne regelen analyserer skjemafiler for å finne tabelldefinisjoner, henter ut hver tabells kolonneblokk ved hjelp av klammeparentesdybde-sporing, og sjekker om påkrevde kolonner er til stede. Den fungerer med enhver ORM som definerer tabeller som funksjonsanrop med objektargumenter (Drizzle, Prisma schema-in-code, osv.).
Revisjonsfelt (`created_at`, `updated_at`) er essensielle for feilsøking, datastyring og synkroniseringsprotokoller. Denne regelen analyserer skjemafiler for å finne tabelldefinisjoner, henter ut hver tabells kolonneblokk ved hjelp av klammeparentesdybde-sporing, og sjekker om påkrevde kolonner er til stede. Den fungerer med enhver ORM som definerer tabeller som funksjonsanrop med objektargumenter (Drizzle, Prisma schema-in-code, osv.).

## Eksempler på **feil** kode

Expand Down Expand Up @@ -102,7 +102,7 @@ export default {

## Når bør du bruke den

Når datamodellen din krever konsistente revisjonsfelt for sporbarhet, feilsoking eller samsvar. Tilpass `TABLE_PATTERN`-regex og kolonnenavn for din ORM:
Når datamodellen din krever konsistente revisjonsfelt for sporbarhet, feilsøking eller samsvar. Tilpass `TABLE_PATTERN`-regex og kolonnenavn for din ORM:

```typescript
// For Drizzle with PostgreSQL
Expand Down
6 changes: 3 additions & 3 deletions docs/src/content/docs/nb/examples/kebab-case-filenames.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Krev konsistente filnavnkonvensjoner på tvers av kildemapper.

## Regeldetaljer

Inkonsistente filnavn (blanding av `camelCase`, `PascalCase`, `snake_case` og `kebab-case`) gjor filer vanskeligere å finne og forårsaker problemer med store/små bokstaver på tvers av operativsystemer. Denne regelen validerer hvert filnavn innenfor omfanget mot et regex-monster og foreslar rettelser.
Inkonsistente filnavn (blanding av `camelCase`, `PascalCase`, `snake_case` og `kebab-case`) gjør filer vanskeligere å finne og forårsaker problemer med store/små bokstaver på tvers av operativsystemer. Denne regelen validerer hvert filnavn innenfor omfanget mot et regex-mønster og foreslår rettelser.

## Eksempler på **feil** kode

Expand Down Expand Up @@ -64,7 +64,7 @@ export default {

## Når bør du bruke den

Når teamet ditt har standardisert en navnekonvensjon og onsker å håndheve den automatisk. Tilpass regex for din konvensjon:
Når teamet ditt har standardisert en navnekonvensjon og ønsker å håndheve den automatisk. Tilpass regex for din konvensjon:

```typescript
// PascalCase (React components)
Expand All @@ -79,4 +79,4 @@ const SNAKE_CASE = /^[a-z][a-z0-9]*(_[a-z0-9]+)*\.(ts|tsx|js|jsx)$/;

## Når bør du ikke bruke den

Når prosjektet ditt med vilje blander navnekonvensjoner (f.eks. PascalCase for React-komponenter og kebab-case for hjelpefunksjoner), eller når du migrerer en gammel kodebase der masseomdobing ikke er gjennomforbart.
Når prosjektet ditt med vilje blander navnekonvensjoner (f.eks. PascalCase for React-komponenter og kebab-case for hjelpefunksjoner), eller når du migrerer en gammel kodebase der masseomdøping ikke er gjennomførbart.
6 changes: 3 additions & 3 deletions docs/src/content/docs/nb/examples/license-compatibility.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Når du kompilerer eller bundler avhengigheter inn i applikasjonen din, gjelder
}
```

Hvis `readline-sync` bruker GPL-3.0, utloses et brudd selv som devDependency.
Hvis `readline-sync` bruker GPL-3.0, utløses et brudd selv som devDependency.

## Eksempler på **riktig** kode

Expand Down Expand Up @@ -122,7 +122,7 @@ export default {

## Tilpasning

- **Endre tillatt-listen**: Legg til eller fjern lisensidentifikatorer basert på prosjektets lisens. GPL-prosjekter kan tillate GPL-avhengigheter; Apache-2.0-prosjekter bor blokkere dem.
- **Endre tillatt-listen**: Legg til eller fjern lisensidentifikatorer basert på prosjektets lisens. GPL-prosjekter kan tillate GPL-avhengigheter; Apache-2.0-prosjekter bør blokkere dem.
- **Sjekk kun produksjonsavhengigheter**: Fjern `devDependencies` fra `allDeps` hvis du bare bryr deg om bundlet/levert kode.
- **Skann transitive avhengigheter**: Bruk `ctx.glob("node_modules/{*,@*/*}/package.json")` for å skanne alle installerte pakker (inkludert scoped) rekursivt, ikke bare direkte avhengigheter.

Expand All @@ -132,4 +132,4 @@ Når prosjektet ditt bruker en permissiv lisens (MIT, Apache-2.0, ISC, BSD) og d

## Når bør du ikke bruke den

I GPL-lisensierte prosjekter (der copyleft-avhengigheter er kompatible), eller når du har et dedikert lisensskanningsverktoy (FOSSA, Snyk) som allerede beskytter CI-pipelinen din.
I GPL-lisensierte prosjekter (der copyleft-avhengigheter er kompatible), eller når du har et dedikert lisensskanningsverktøy (FOSSA, Snyk) som allerede beskytter CI-pipelinen din.
4 changes: 2 additions & 2 deletions docs/src/content/docs/nb/examples/max-file-length.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Advar når kildefiler overskrider en linjeantallsgrense.

## Regeldetaljer

Store filer er vanskeligere å navigere, gjennomgå og teste. Denne regelen teller linjer i hver fil innenfor omfanget og rapporterer en advarsel når antallet overskrider et konfigurerbart maksimum. Bruk av `warning`-alvorlighetsgrad holder CI gronn samtidig som filer som bor refaktoreres blir synliggjort.
Store filer er vanskeligere å navigere, gjennomgå og teste. Denne regelen teller linjer i hver fil innenfor omfanget og rapporterer en advarsel når antallet overskrider et konfigurerbart maksimum. Bruk av `warning`-alvorlighetsgrad holder CI grønn samtidig som filer som bør refaktoreres blir synliggjort.

## Eksempler på **feil** kode

Expand Down Expand Up @@ -60,7 +60,7 @@ export default {

## Når bør du bruke den

Når du onsker en myk grense mot at filer vokser for store. Juster `MAX_LINES` etter teamets preferanse (200-500 er vanlig).
Når du ønsker en myk grense mot at filer vokser for store. Juster `MAX_LINES` etter teamets preferanse (200-500 er vanlig).

## Når bør du ikke bruke den

Expand Down
4 changes: 2 additions & 2 deletions docs/src/content/docs/nb/examples/no-banned-api.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Forby spesifikke kjøretids-API-er som forårsaker plattform- eller stabilitetsp

Noen API-er fungerer korrekt på en plattform, men feiler på en annen. For eksempel henger Buns shell-API (`Bun.$`) på Windows på grunn av pipe-deadlocks. Denne regelen oppdager flere varianter av en forbudt API -- det direkte kallet, importen og destrukturert bruk -- og sikrer at ingen form slipper gjennom.

Dette monsteret kan generaliseres til enhver API du vil forby mens du tillater et sikkert alternativ.
Dette mønsteret kan generaliseres til enhver API du vil forby mens du tillater et sikkert alternativ.

## Eksempler på **feil** kode

Expand Down Expand Up @@ -103,7 +103,7 @@ export default {

## Når bør du bruke den

Når prosjektet ditt må kjore på flere plattformer og en spesifikk API er kjent for å feile på en av dem. Også nyttig for å forby utdaterte API-er med kjente stabilitetsproblemer.
Når prosjektet ditt må kjøre på flere plattformer og en spesifikk API er kjent for å feile på en av dem. Også nyttig for å forby utdaterte API-er med kjente stabilitetsproblemer.

## Når bør du ikke bruke den

Expand Down
2 changes: 1 addition & 1 deletion docs/src/content/docs/nb/examples/no-banned-imports.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Forhindre bruk av forbudte biblioteker og krev anbefalte alternativer.

## Regeldetaljer

Team forbyr ofte tunge eller utdaterte biblioteker til fordel for lettere eller native alternativer. Denne regelen bruker en datadrevet konfigurasjon -- en array med objekter som spesifiserer regex-monsteret, biblioteknavnet og det anbefalte alternativet. Å legge til et nytt forbud er en endring på en linje.
Team forbyr ofte tunge eller utdaterte biblioteker til fordel for lettere eller native alternativer. Denne regelen bruker en datadrevet konfigurasjon -- en array med objekter som spesifiserer regex-mønsteret, biblioteknavnet og det anbefalte alternativet. Å legge til et nytt forbud er en endring på en linje.

## Eksempler på **feil** kode

Expand Down
Loading
Loading