Contributing-patterns
8. Contributing-patterns
Hvordan vi arbejder med kode-ændringer på TesseraCMS. Disse konventioner er ikke håndhævet maskinelt — de er social.
pm-workflow
Vi tracker alt non-trivielt arbejde via slash-commands der mutere changes.md (én root-fil med alle tasks):
/pm-plan— bruger beskriver hvad de vil have lavet → assistant foreslår implementation-plan → enighed nås → task logges somspecified/pm-approve <id>— bruger godkender planen → task moves tilapproved/pm-implement— assistant implementerer alleapprovedtasks → moves tilimplemented/pm-tested <id>— bruger har testet → moves tiltested(terminal state)
Andre commands:
/pm-tasks— list alle (med status) eller vis en specifik/pm-cleanup— auto-detect overlap, stale tasks, status-mismatch, foreslå merges/rejects
Hvorfor: planning fanger forkerte antagelser FØR vi skriver kode. Approve er en gate så bruger har ejerskab. Tested er sandt termini — ingen reopen.
Commit-style
Vi følger Conventional Commits:
<type>(<scope>): <subject>
<body>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Types vi bruger:
feat— ny funktionalitetfix— bugfixrefactor— restruktur uden ny funktiondocs— kun docs-ændringerchore— build/tooling/seed-data
Scopes (eksempler): admin, auth, backups, engine, social, docs. Hold dem korte og meaningful.
Subject: max 70 tegn, lowercase efter type+scope, ingen punktum, imperativ-form ("add" ikke "added").
Branch-naming
Vi arbejder typisk direkte på master (lille team, høj cadence). Når vi gør feature-branches:
feat/<task-id>-<short-description>— fxfeat/TASK-119-docs-sitetypefix/<task-id>-<short>— fxfix/TASK-141-auth-guard-race
Ok at gå mest direct på master når changes er små + tested. Brug branch + PR når der er reason for review eller du vil bevare incremental state.
Code-style
- Engelsk for new code — type-navne, field-navne, file-navne, code-comments. Display-strings bruger
LocalizedString { en, da? } - No hardcoded UI-strings — alle bruger-vendte strings gennem
useTranslate()/makeServerTranslate()med keys isrc/i18n/locales/<locale>.ts - Default no comments — kun WHY-comments hvor det ikke er obvious. Aldrig WHAT-comments (koden selv er WHAT)
- No useless abstractions — ikke design for hypotetiske requirements. Tre similar lines is fine.
- No error-handling for impossible cases — trust internal code. Valider kun ved system-boundaries (user input, external APIs)
Memory-system
Claude-sessioner husker konventioner via ~/.claude/projects/.../memory/. Når du etablerer en ny norm der senere sessioner skal kende (fx "vi committer aldrig uden eksplicit godkendelse"), bør den committes til memory via Claude. Ellers glemmes den.
Eksempler på persisteret memory:
- "Ask before push" — aldrig
git push/git commituden brugerens per-turn confirmation - "Temp files in sharefolder" — alt usikkert/temp i
sharefolder/ - "i18n everywhere" — DoD: alle UI-strings via translate-keys
- "Create redirects to list" — efter Create-flow i admin → redirect til oversigt, ikke edit-page
Definition of Done
En task er IKKE done før ALLE disse:
- No hardcoded UI-strings — verificeret med
grep -nE '">[A-ZÆØÅ][a-zæøå]' new-file.tsx - TypeScript clean —
npx tsc --noEmitexit 0 - Tested locally når feasible (dev-server compiler + key-flow virker)
- Tenant-aware — ingen hardcoded tenant-slugs; alt storage scoped på PartitionKey
- Engine vs sitetype boundary respected — engine importer aldrig fra sitetypes
- Memory updated hvis en ny project-convention emerges som future sessions bør know
Code-review (når vi gør PR-baseret)
Når en PR åbnes, reviewer kigger på:
- Does it match the plan? — tjek changes.md task; afvigelser skal nævnes i PR-beskrivelsen
- Lag-grænse respecteret? — engine vs sitetype
- i18n compliance? — search efter hardcoded strings
- Typecheck clean? — CI failer hvis ikke
- Sensitive data? — ingen secrets, ingen prod-mail-recipients (vi har en regel: aldrig produktion-mail-sends under dev)
Godkendelse → merge til master → CI deployer.
Documentation
CLAUDE.md— top-level project-instructions; opdateres når nye konventioner ratificeresdocs/architecture.md— deep-dive på system-design; opdateres ved større ændringerdocs/aca-setup-runbook.md— operational runbook for Azure-setupchanges.md— per-task log; opdateres af pm-skillssrc/sitetypes/<x>/README.md— placeholder for nu; tilføj hvis sitetype får sin egen story
Ingen formel doc-style — markdown er fint. Hold concise; long docs bliver ikke læst.