Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
164 commits
Select commit Hold shift + click to select a range
1f458e6
chore: ignore agent worktrees in lint and reopen work (remove DONE ma…
Oct 6, 2026
ccab70d
Merge branch 'chore/ignore-agent-dirs'
Oct 6, 2026
bbbcb0b
fix(backend): validate title ids as tt + 7-10 digits (#15)
Oct 6, 2026
5739e16
feat(backend): limit root fields and total fields per operation (#15)
Oct 6, 2026
e433943
feat(backend): add deleteReview and in-memory mutation rate limiting …
Oct 6, 2026
86e35a7
fix(frontend): rename availability filter to 'Kun filmer som kan strø…
Oct 6, 2026
07e6c18
fix(frontend): commit URL filter changes synchronously so checkboxes …
Oct 6, 2026
c513894
feat(frontend): add category jump navigation to the browse view
Oct 6, 2026
112f4ec
feat(frontend): explain unreachable API with one global banner (#13)
Oct 6, 2026
c8540f1
feat(backend): accent-insensitive search and prefix matching for shor…
Oct 6, 2026
8c8d6bc
docs: document search normalization, short queries and measurements (…
Oct 6, 2026
4bf6288
fix: address review of API-unavailable banner (#13)
Oct 6, 2026
2d9123f
Merge feat/api-unavailable-banner: explain unreachable API with one b…
Oct 6, 2026
b07f3ce
Merge claude/adoring-brown-3nct5k into feat/backend-hardening
Oct 6, 2026
6f28dea
fix(frontend): keep focus on category rows and harden nav behaviour
Oct 6, 2026
92cdceb
Merge branch 'claude/adoring-brown-3nct5k' into feat/category-nav-and…
Oct 6, 2026
c9c2095
Merge feat/category-nav-and-label: precise filter label and category …
Oct 6, 2026
96d67ae
fix(backend): normalize before escaping LIKE patterns and use word-pr…
Oct 6, 2026
2f10cb2
fix(backend): memoize fragment traversal, weigh list fields by first …
Oct 6, 2026
ecabc50
docs: measurements, lock window for migration 004 and decisions for r…
Oct 6, 2026
ee71db0
fix(frontend): drop aria-pressed from list toggle with dynamic label …
Oct 6, 2026
086f9be
fix(frontend): separate error state for loading more on my list (#16)
Oct 6, 2026
a756844
fix(frontend): count code points in review validation and counter (#16)
Oct 6, 2026
2ee5f3c
test(frontend): cover code point counting in review validation (#16)
Oct 6, 2026
9cf8ef3
fix(frontend): format star rating label with Norwegian decimal (#16)
Oct 6, 2026
32498ed
fix(frontend): use real list state in hero and drop totalCount from r…
Oct 6, 2026
7c132b0
fix(frontend): focus page h1 after route change (#16)
Oct 6, 2026
dc904a8
feat(frontend): add user-selectable light/dark theme toggle (#16)
Oct 6, 2026
27624a4
Merge feat/backend-hardening: API limits, deleteReview, accent-insens…
Oct 6, 2026
80976c7
Merge branch 'claude/adoring-brown-3nct5k' into fix/frontend-review-f…
Oct 6, 2026
dd5a9f5
docs: add AI declaration (draft) (#17)
Oct 6, 2026
8e2c1e7
feat(frontend): delete own reviews with inline confirmation (#16)
Oct 6, 2026
205f597
test(e2e): cover writing and deleting a review (#16)
Oct 6, 2026
acab3a8
ci: add build and e2e jobs with Postgres service (#17)
Oct 6, 2026
540f69f
feat(deploy): add Content-Security-Policy and Permissions-Policy, ver…
Oct 6, 2026
9d509da
fix(frontend): keep focus after delete cancel or failure and announce…
Oct 6, 2026
b7fa158
docs: rewrite README to discuss all major choices (draft) (#17)
Oct 6, 2026
a226e62
Merge claude/adoring-brown-3nct5k into chore/ci-e2e-and-csp (#17)
Oct 6, 2026
1e5d064
test(frontend): cover see-all and back navigation after row query spl…
Oct 6, 2026
c26a0d2
docs: correct rationale for list toggle label and theme decisions (#16)
Oct 6, 2026
b9d34a6
feat(frontend): load theme init as external script, sync theme across…
Oct 6, 2026
0091d0e
fix(e2e): use .js import specifiers and a string-typed policy for typ…
Oct 6, 2026
d70aabe
Merge fix/frontend-review-findings: a11y fixes, theme toggle and dele…
Oct 6, 2026
8e878eb
Merge branch 'claude/adoring-brown-3nct5k' into chore/ci-e2e-and-csp
Oct 6, 2026
7067956
fix(deploy): drop invalid Permissions-Policy feature, fail CI on flak…
Oct 6, 2026
e1da2a3
Merge chore/ci-e2e-and-csp: build and e2e in CI, Content-Security-Pol…
Oct 6, 2026
ef026e5
Merge branch 'claude/adoring-brown-3nct5k' into docs/readme-og-ki-dek…
Oct 6, 2026
86976ea
fix: distinguish network and service failures in the API banner
Oct 6, 2026
588c065
docs: address review of README and AI declaration (phases, components…
Oct 6, 2026
3aa06a6
fix: correct stale comments, clean up unused exports and polish a11y …
Oct 6, 2026
cfc81ce
docs: mention popularity fallback in sort state comment
Oct 6, 2026
eced7c0
test(backend): validate all frontend operations against schema and qu…
Oct 6, 2026
e510925
refactor(backend): stop exporting symbols used only in their own file
Oct 6, 2026
b8d901c
docs: correct outdated comments in backend and docs after search, lim…
Oct 6, 2026
9475331
docs: rewrite status for October state
Oct 6, 2026
ca4e978
docs: add E2E setup and complete env variable table
Oct 6, 2026
6cc9fe7
docs: add M7 to plan and correct outdated items
Oct 6, 2026
78fd4e4
docs: log October issues and fix #13 flaky-test note
Oct 6, 2026
4e1215f
docs: update git model, headings, bundle size and Se alle in decisions
Oct 6, 2026
1974cfd
docs: clear blockers and note author identity issue
Oct 6, 2026
9c5daa0
docs: date Lighthouse section as pre-M7
Oct 6, 2026
b13023d
test(backend): require every gql template in operations.ts to be vali…
Oct 6, 2026
97d9ffd
Merge chore/backend-comment-pass: accurate backend comments and schem…
Oct 6, 2026
430490d
docs: correct README authorship and #17 agent in status and log
Oct 6, 2026
67c3e63
Merge docs/consistency-pass: status, E2E setup, M7 plan, AI log and d…
Oct 6, 2026
8e0bc1e
docs: correct facts in README and AI declaration after fact-check (#23)
Oct 6, 2026
1baefe9
fix: follow review feedback on banner reason, short-query sort label …
Oct 6, 2026
09ba2e6
Merge branch 'claude/adoring-brown-3nct5k' into fix/frontend-polish
Oct 6, 2026
b94e090
Merge fix/frontend-polish: banner reasons, popularity label, accurate…
Oct 6, 2026
f101176
Merge branch 'claude/adoring-brown-3nct5k' into docs/readme-og-ki-dek…
Oct 6, 2026
2f127fa
docs: fill in final test counts (#23)
Oct 6, 2026
2a1f6f7
Merge docs/readme-og-ki-deklarasjon: README and AI declaration (#17, …
Oct 6, 2026
d04dcfe
chore: mark M7 as done
Oct 6, 2026
7a9e5ad
Merge pull request #28 from Nicolaykopaas/claude/adoring-brown-3nct5k
Oct 6, 2026
cae62f2
feat(seo): add robots.txt that allows crawling
Oct 6, 2026
757e28e
perf(deploy): gzip GraphQL responses, cache theme-init.js, drop COOP …
Oct 6, 2026
31db9fc
fix(backend): cap tokens and body size to stop quadratic validation DoS
Oct 6, 2026
3eba53b
fix(backend): weigh variable first as 50 regardless of default value
Oct 6, 2026
7ceeaa3
fix(backend): lift statement_timeout for migrations and imports
Oct 6, 2026
cbdf689
fix(deploy): start backend right after migration, before slow imports
Oct 6, 2026
aa9fb9b
fix(backend): bound the TMDB lookup queue to protect regular users
Oct 6, 2026
fa2ed2f
fix(backend): give facets a high fixed complexity weight
Oct 6, 2026
e5a35c1
fix(backend): reject impossible dates in timestamp cursors
Oct 6, 2026
f1a36d1
perf(backend): skip unchanged rows when re-importing IMDb data
Oct 6, 2026
176cbed
fix(backend): raise keep-alive timeout above Apache's to avoid sporad…
Oct 6, 2026
b0fe240
docs: record final backend review decisions
Oct 6, 2026
b736b0f
perf(frontend): preconnect to TMDB and render a static app shell befo…
Oct 7, 2026
88c7f72
fix(a11y): use aria-disabled instead of disabled while loading
Oct 7, 2026
3c20480
fix(search): cap query length at 200 and report facet errors
Oct 7, 2026
9e69fce
fix(a11y): keep focus when filters are removed; harden search pagination
Oct 7, 2026
10c9ee1
Merge fix/backend-final-review: DoS limits, migration timeout, faster…
Oct 7, 2026
179b316
fix(watch): go back through history instead of pushing the title page
Oct 7, 2026
bbf77ba
fix(layout): let the header grow and stop being sticky on short viewp…
Oct 7, 2026
7db28e3
fix(a11y): raise contrast for search placeholder, selected star and h…
Oct 7, 2026
270ffbd
fix(a11y): restore focus in the video player after a playback error
Oct 7, 2026
ef21e16
perf(frontend): split react, router and apollo into long-lived vendor…
Oct 7, 2026
dc80595
perf(frontend): lazy-load the search view so the front page skips fil…
Oct 7, 2026
d5c80d8
fix(a11y): keep the focused row arrow in place when the row reaches i…
Oct 7, 2026
852fb27
perf(frontend): load above-the-fold search posters eagerly, first wit…
Oct 7, 2026
2aabe39
perf(frontend): time-slice the initial render with startTransition
Oct 7, 2026
a58192b
fix(search): push the first search from the front page onto history
Oct 7, 2026
93bce32
test(e2e): cover back navigation from the player
Oct 7, 2026
ba03860
fix(a11y): include visible skip-button text in the accessible name
Oct 7, 2026
cc1df8f
perf(frontend): give the hero a fixed mobile height and clamp title a…
Oct 7, 2026
3a1a8d1
fix(a11y): make the static app shell inert and hidden from assistive …
Oct 7, 2026
e99dd23
perf(frontend): render row cards from a deferred value to keep tasks …
Oct 7, 2026
3278349
docs: Lighthouse measurements and bundle sizes after the performance …
Oct 7, 2026
dac0267
Merge branch 'fix/frontend-final-review' into claude/adoring-brown-3n…
Oct 7, 2026
783a580
Merge branch 'perf/lighthouse' into claude/adoring-brown-3nct5k
Oct 7, 2026
96b2e5d
test(e2e): wait for the app to mount before tabbing to the skip link
Oct 7, 2026
23ce543
docs: update test counts and Lighthouse results after final review
Oct 7, 2026
1208297
docs: correct backend test count in status
Oct 8, 2026
6227a33
feat(backend): add script that measures search query performance with…
Oct 8, 2026
eb03dc4
fix(deploy): serve robots.txt from the domain root
Oct 8, 2026
2de78ea
docs: describe VM performance measurement and root robots.txt
Oct 8, 2026
e4a1bc4
docs: explain why the app is not server-rendered
Oct 8, 2026
c895541
docs(readme): note http-only VM and client-side rendering as known li…
Oct 8, 2026
cfdc7b1
Merge branch 'chore/vm-measurements' into claude/adoring-brown-3nct5k
Oct 8, 2026
f83dda5
docs: add walkthrough of how the app works for the group and examiners
Oct 8, 2026
cd76af4
Merge branch 'docs/forklaring' into claude/adoring-brown-3nct5k
Oct 8, 2026
ee83d1e
docs: update test count in explanation
Oct 8, 2026
ec39219
chore: move process and AI docs into docs/prosess and docs/ki, untrac…
Oct 8, 2026
36cc9fe
docs: update references to moved plan, blocker, status and AI documents
Oct 8, 2026
e359536
docs: move component, library, sustainability and branch details out …
Oct 8, 2026
5b47d40
docs: add documentation index and fix relative links in AI declaration
Oct 8, 2026
2cf1826
docs: rewrite README as a short overview with links to docs
Oct 8, 2026
17564b2
test(e2e): add opt-in screenshot spec and npm run screenshots
Oct 8, 2026
53bfab9
docs: add generated screenshots for the README
Oct 8, 2026
edd1ff5
Merge branch 'docs/screenshots' into claude/adoring-brown-3nct5k
Oct 8, 2026
01a2a9e
feat(backend): add npm run setup for one-command local setup
Oct 8, 2026
20487d8
feat: start mock TMDB and Archive from npm run dev when no TMDB key i…
Oct 8, 2026
7bb8f56
docs: add quick start section and document setup variables
Oct 8, 2026
eb76a4d
docs: record decisions for one-command setup
Oct 8, 2026
43b56da
Merge branch 'feat/one-command-setup' into claude/adoring-brown-3nct5k
Oct 8, 2026
2920d9e
fix(backend): let tests wait for background TMDB lookups to avoid a f…
Oct 8, 2026
da29c5e
test(backend): wait for the background lookup instead of a fixed sleep
Oct 8, 2026
8d4ddac
docs: update backend test count
Oct 8, 2026
ca2d007
fix(backend): save Archive matches per page and make Ctrl+C two-stage
Oct 8, 2026
243c4a5
feat(deploy): cap the Archive scan at ARCHIVE_LIMIT (default 500)
Oct 8, 2026
a2c1e60
docs: document Archive scan limit, two-stage interrupt and narrower q…
Oct 8, 2026
7b4efef
Merge pull request #31 from Nicolaykopaas/claude/adoring-brown-3nct5k
Oct 8, 2026
23538b5
docs: plan M8 for final submission, split between agent and group
Oct 13, 2026
1514a8c
docs: update status to 2026-10-13 and point to M8
Oct 13, 2026
6f54d0f
docs: add review guide for Sturla, Brage and Daniel
Oct 13, 2026
f9cf730
Merge A1: update status to 2026-10-13
Oct 13, 2026
cf5a1c4
docs: check off A1 in M8
Oct 13, 2026
1e4df4b
perf(backend): cache facets without search text in memory
Oct 13, 2026
fdfecdf
docs: check off A4 and log it
Oct 13, 2026
002fedd
fix(backend): make facet cache test order-independent and dedupe key
Oct 13, 2026
9a81ee9
feat(perf): add npm run lighthouse script and VM measurement instruct…
Oct 13, 2026
a8df7c2
Merge A2+A3: Lighthouse script and VM measurement instructions
Oct 13, 2026
2920a7f
docs: check off A2 and A3 and log them
Oct 13, 2026
6695818
docs: add GitLab migration guide and MR/issue templates
Oct 13, 2026
d64a821
docs: add per-member code review template to AI declaration
Oct 13, 2026
8089032
docs: add fact sheet the group can write README from
Oct 13, 2026
e0665e7
Merge A5+A7+A8: GitLab guide, review template, README fact sheet
Oct 13, 2026
a14285c
docs: check off A5, A7 and A8 and log M8 tasks
Oct 13, 2026
129cac7
docs: fix line references, test counts and PR lists after facet cache
Oct 13, 2026
e1fb966
docs: check off A9 and log it
Oct 13, 2026
5350cbe
Merge pull request #32 from Nicolaykopaas/claude/eloquent-sagan-88yqn4
Oct 15, 2026
27becc6
chore: sync latest work from private repository
daniekm Oct 15, 2026
c3357d4
fix: make logo and home link scroll to top on the front page
daniekm Oct 15, 2026
aa60aca
style: let hero fill the viewport and center browse rows on wide screens
daniekm Oct 15, 2026
4f72e92
feat: clarify search mode with a link back to browse and descriptive …
daniekm Oct 15, 2026
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
1 change: 0 additions & 1 deletion .claude/DONE

This file was deleted.

21 changes: 16 additions & 5 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
# Kopier til .env og tilpass. .env skal aldri committes.
# `npm run setup` gjør kopieringen for deg (og overskriver aldri en eksisterende .env).
#
# Bruker eller passord annerledes enn under? Sett dem i DATABASE_URL og TEST_DATABASE_URL, f.eks.
# postgres://it2810:hemmelig@localhost:5432/project2

# Backend
PORT=3001
Expand All @@ -16,13 +20,20 @@ IMDB_MIN_VOTES=100
# Frontend (valgfri – standard er <base>/graphql)
VITE_GRAPHQL_URL=

# Bilder og handling fra TMDB (https://www.themoviedb.org/settings/api). Uten nøkkel vises
# plassholdere i stedet for plakater.
# Bilder og handling fra TMDB (https://www.themoviedb.org/settings/api).
# La stå tom i utvikling: `npm run dev` starter da en falsk TMDB-server (port 3999) og en falsk
# Internet Archive (port 3998) og setter URL-ene under selv, så plakater og gratisfilmer vises uten
# nøkler. Med ekte nøkkel brukes ekte TMDB. (Backend alene, uten `npm run dev`, viser plassholdere.)
TMDB_API_KEY=
# Overstyres i utvikling/E2E for å bruke den lokale falske TMDB-serveren (npm run tmdb:mock -w backend):
# Settes automatisk av `npm run dev` når nøkkelen er tom. Manuelt (npm run tmdb:mock -w backend):
# TMDB_API_URL=http://localhost:3999/3
# TMDB_IMAGE_URL=http://localhost:3999/t/p

# Lovlige gratisfilmer fra Internet Archive (npm run db:archive). Standard er den ekte tjenesten;
# pek mot den falske serveren (npm run archive:mock -w backend) i utvikling/E2E:
# Lovlige gratisfilmer fra Internet Archive (npm run db:archive). Standard er den ekte tjenesten.
# `npm run dev` bruker den falske serveren (port 3998) når TMDB_API_KEY er tom og denne er utkommentert.
# Manuelt (npm run archive:mock -w backend):
# ARCHIVE_URL=http://localhost:3998

# Antall syntetiske titler som `npm run setup` genererer hvis data/ er tom (standard 20000).
# 120000 gir det store settet, men tar lengre tid.
# FIXTURE_SIZE=20000
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ blob-report/
.vite/
*.tsbuildinfo
.DS_Store
.claude/DONE
.claude/DONE.local
data/e2e/
40 changes: 40 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ default:
stages:
- check
- test
- e2e

variables:
HUSKY: '0'
Expand All @@ -39,3 +40,42 @@ unit-tests:
TEST_DATABASE_URL: postgres://postgres@postgres:5432/project2_test
script:
- npm test

# Bygger begge pakkene slik at en ødelagt produksjonsbygging oppdages før deploy.
build:
stage: test
script:
- npm run build
artifacts:
paths:
- frontend/dist/
expire_in: 1 week

# E2E mot ekte backend og database. Playwright-bildet har nettleserne ferdig installert, så
# `playwright install` trengs ikke. Versjonen må følge @playwright/test i package-lock.json.
# Playwright starter selv falsk TMDB, falsk Internet Archive, backend og frontend (se
# playwright.config.ts), og global-setup.ts migrerer og fyller databasen med syntetiske data.
e2e:
stage: e2e
# Bygger selv via webServer i playwright.config.ts; dist fra build-jobben trengs ikke.
dependencies: []
image: mcr.microsoft.com/playwright:v1.63.0-noble
services:
- name: postgres:16
alias: postgres
variables:
POSTGRES_DB: project2_e2e
POSTGRES_USER: postgres
POSTGRES_HOST_AUTH_METHOD: trust
E2E_DATABASE_URL: postgres://postgres@postgres:5432/project2_e2e
script:
- npm run test:e2e
artifacts:
# always: en flaky test (feiler først, består på retry) gir også trace i test-results/.
when: always
reports:
junit: test-results/junit.xml
paths:
- playwright-report/
- test-results/
expire_in: 1 week
22 changes: 22 additions & 0 deletions .gitlab/issue_templates/Oppgave.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
## Mål

<!-- Hva skal være annerledes når oppgaven er ferdig, og hvorfor trengs det? -->

## Ferdig når

<!-- Konkrete, sjekkbare kriterier. -->

- [ ]
- [ ] Tester er lagt til eller oppdatert, og lint, typecheck, `npm test` og E2E er grønne
- [ ] Merge request er godkjent av en annen i gruppa

## Ansvarlig

<!-- Hvem gjør oppgaven, og hvem reviewer? -->

- Ansvarlig: @
- Reviewer: @

## Notater

<!-- Lenker, skjermbilder, avgrensninger. Valgfritt. -->
33 changes: 33 additions & 0 deletions .gitlab/merge_request_templates/Default.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
## Oppsummering

<!-- Hva endres, og hvorfor? To–tre setninger holder. -->

## Issue

Closes #

<!-- «Closes #12» lukker issuet automatisk når MR-en merges til standardgrenen. -->

## Slik er det testet

<!-- Hvilke tester er lagt til eller endret? Hva er prøvd for hånd (nettleser, skjermleser, mobil)? -->

-

## Sjekkliste

- [ ] `npm run lint` er grønn
- [ ] `npm run typecheck` er grønn
- [ ] `npm test` er grønn (backend mot PostgreSQL og komponenttester)
- [ ] `npm run test:e2e` er grønn, eller endringen berører ikke brukerflyter
- [ ] Tilgjengelighet: tastatur, synlig fokus og skjermlesertekst er sjekket for nye eller endrede elementer
- [ ] Utypisk bruk er testet der det er relevant: tomt søk, ingen treff, spesialtegn, lange strenger, nettverksfeil
- [ ] Dokumentasjon i `docs/` er oppdatert hvis oppførsel eller oppsett er endret
- [ ] Ingen hemmeligheter (`.env`, nøkler) i diffen

## Review

Reviewer: @

<!-- Reviewer kommenterer i MR-en og merker funn som blokkerende, bør fikses eller valgfritt.
Funn rettes med nye commits, ikke force-push. -->
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ playwright-report
test-results
package-lock.json
data
.claude
10 changes: 5 additions & 5 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,24 @@ Du jobber autonomt. Nicolay ser ikke på skjermen før prosjektet er ferdig. Ikk

## Roller

- **Hovedsesjonen (Opus) er daglig leder.** Den planlegger, deler opp arbeid, delegerer til subagenter, verifiserer og krysser av i `PLAN.md`. Lederen skriver helst ikke produksjonskode selv.
- **Hovedsesjonen (Opus) er daglig leder.** Den planlegger, deler opp arbeid, delegerer til subagenter, verifiserer og krysser av i `docs/prosess/plan.md`. Lederen skriver helst ikke produksjonskode selv.
- **Subagenter (Sonnet):** `backend-utvikler`, `frontend-utvikler`, `tester`, `reviewer`. Gi dem små, avgrensede oppgaver med tydelig ferdigkriterium. Kjør uavhengige oppgaver parallelt.

## Arbeidsløkke (hver runde)

1. Les `PLAN.md` og `BLOCKERS.md`.
1. Les `docs/prosess/plan.md` og `docs/prosess/blokkeringer.md`.
2. Velg neste uavkryssede punkt (eller flere uavhengige).
3. Deleger → la `reviewer` gå gjennom endringen → la `tester` kjøre relevante tester.
4. Kjør selv `npm run lint && npm run typecheck && npm test` i berørte pakker. Rødt = ikke ferdig.
5. Commit, kryss av i `PLAN.md`, skriv én linje i `docs/ki-logg.md`.
5. Commit, kryss av i `docs/prosess/plan.md`, skriv én linje i `docs/ki/ki-logg.md`.
6. Er alle MVP-kriterier oppfylt og verifisert: opprett filen `.claude/DONE`.

## Git

- Jobb alltid på grener fra `mvp`. Aldri commit eller push til `main`, aldri force-push.
- Én gren per oppgave (`feat/…`, `fix/…`, `test/…`), merge til `mvp` når review og tester er grønne.
- Små commits med Conventional Commits-meldinger på engelsk.
- Hvis `glab` er innlogget: opprett issue per PLAN-punkt og MR mot `mvp`, reviewer kommenterer i MR-en. Ellers: gjør det samme lokalt og loggfør i `docs/ki-logg.md`.
- Hvis `glab` er innlogget: opprett issue per PLAN-punkt og MR mot `mvp`, reviewer kommenterer i MR-en. Ellers: gjør det samme lokalt og loggfør i `docs/ki/ki-logg.md`.

## Tekniske rammer (ikke avvik uten å skrive begrunnelse i beslutninger.md)

Expand All @@ -44,4 +44,4 @@ Du jobber autonomt. Nicolay ser ikke på skjermen før prosjektet er ferdig. Ikk

- Ingen `sudo`, ingen endringer utenfor repoet, ingen hemmeligheter i git (`.env` i `.gitignore`, `.env.example` i repo).
- README.md skrives av gruppa. Agentene legger bare fakta og installasjonssteg i `docs/`, som gruppa kan bygge README på.
- Står du fast på noe som krever Nicolay (passord, VM, VPN, tilganger): skriv det i `BLOCKERS.md` og gå videre.
- Står du fast på noe som krever Nicolay (passord, VM, VPN, tilganger): skriv det i `docs/prosess/blokkeringer.md` og gå videre.
72 changes: 0 additions & 72 deletions PLAN.md

This file was deleted.

Loading