ms-ai-architect/docs/onboarding-redesign-plan.md
Kjell Tore Guttormsen c4d434f9e9 test(ms-ai-architect): C2.4 lås K4 privat-sektor-paritet (regresjonsvakt) + omdøp feildøpt doc [skip-docs]
C2 KOMPLETT (C2.1->C2.4). C2.4 var verifikasjon, ikke nybygg: privat-greinen
i onboarding kom i 6e1fc6d (FOER C2.1), saa audit §167-onboarding-residu var
allerede lukket i kode. Denne oekta beviser + laaser det.

- tests/test-onboarding-parity.sh (NY): 14 asserts mot KILDEN
  (onboarding-agent.md Phase 1; onboarding er interaktivt AskUserQuestion ->
  ingen output-fixture). Dekker sektortype-forgrening, privat sektor-grein
  (bank slipper «Annet»), privat reg-sett (DORA/Finansforetaksloven/
  Finanstilsynets IKT-forskrift/Verdipapirhandelloven/Hvitvaskingsloven), og
  at private aldri spoerres Offentleglova/Arkivloven. TDD roed->groenn:
  strippet offentlig-only-kopi -> 13/14 FAIL; ekte fil -> 14/14 PASS.
- tests/run-e2e.sh: wiret --onboarding (med i --all).
- §167 (d) bevisst IKKE bygget: «egen dataklassifiserings-taksonomi for privat
  Fase 3» er gull-plating utenfor K4 (dagens taksonomi er alminnelig norsk
  bedrifts-klassifisering; privat fullfoerer Fase 3 uhindret).
- Omdoept feildoept docs/onboarding-ros-analysis.md ->
  docs/windows-clone-to-pr-ros-guide.md (Windows clone-to-PR-bidragsyterguide,
  ikke onboarding-analyse); plan+brief-ref oppdatert.

Verifisert: onboarding-parity 14/14 (NY) · validate 239/0/0 · e2e alle suiter ·
discovery 13/13 · test-hooks 11/11 · kb-integrity 192/192 (220 baseline-warns) ·
gitleaks 3 PRE-EKSISTERENDE (playground/vendor/).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 17:39:11 +02:00

23 KiB
Raw Permalink Blame History

Spec — Redesign av onboarding-/virksomhetskontekst-mekanismen (ms-ai-architect)

Godkjent plan (operatør, 2026-06-22). Avløser planleggings-input i onboarding-redesign-brief.md. Spor C fase C2 (etter C1 , før C3 kurs). Implementeres én delsesjon per økt; STATE.md peker på neste. Samme kontinuitetsregler som KB-redesignet: planen bor i docs/, refereres fra STATE.md, ingen egen ROADMAP.md.

Context

Virksomhetskontekst (sektor, lisens, dataklassifisering, residens, budsjett, styringsmodell, regelverk + fri prosa) er det som gjør pluginens output relevant for denne brukeren i stedet for generisk. Operatørens vurdering (2026-06-19, gjentatt 2026-06-20): hvis konteksten ikke er til stede i enhver interaksjon og ikke overlever oppgraderinger, skaper mekanismen frustrasjon i stedet for verdi. C2 er kritisk for at pluginen blir praktisk i bruk.

Verifisert tilstand (2026-06-22, mot koden — ikke briefen alene)

# Krav Faktisk tilstand i koden
1 Ambient i enhver interaksjon Reelt gap. hooks/scripts/session-start-context.mjs:135-139 injiserer kun status («Ingen virksomhetstilpasning»), ikke innhold. De 11 agentene (adr-writer, summary, research, cost-estimation, license-mapper, diagram-generation, dpia, ros-analysis, ai-act-assessor, security-assessment, architecture-review) leser org/ betinget («Hvis org/-mappen finnes…»). Kommandoer/fritekst uten egen org-seksjon får ingenting.
2 Overlever oppgraderinger Reelt gap. org/ er gitignored (.gitignore:24) og bor i plugin-katalogen → reinstall/marketplace-flytt blåser den bort. Samme gjelder ms-ai-architect.local.md (C1-scheduler-config): leses fra plugin-rot (loadScheduleConfig(pluginRoot), detection-schedule.mjs:95) og er *.local.md-gitignored → scheduler-innstillingene dør også ved reinstall.
3 Fritekst-felt Reelt gap. Onboarding samler kun strukturerte AskUserQuestion-svar. Ingen fri-prosa-felt («alt annet du vil pluginen skal vite»).
4 Privat-sektor-paritet Trolig allerede løstagents/onboarding-agent.md Phase 1 forgrener allerede offentlig/privat med egen reg-liste (DORA, Finansforetaksloven, Finanstilsynets IKT-forskrift, Verdipapirhandelloven, Hvitvaskingsloven, …). C2.4 verifiserer og lukker evt. devils-advocate-audit-2026-06-18.md §167-residu — antar ikke at det er gjort.
5 (S24) Eksponer os_scheduler_cadence Config-plumbingen finnes alt (DEFAULT_SCHEDULE_CONFIG.os_scheduler_cadence:'daily', parses fra scheduled_detection:-blokk i detection-schedule.mjs). Gapet: eneste måte å sette den på er å hånd-redigere den gitignored config-fila. Onboarding må skrive den (operatør: «avgjøres i onboardingen, egen innstilling, daglig default»).

Nøkkelinnsikt: #1 og #2 løses renest sammen. Når hooken injiserer org-innhold ambient, og dataene bor på en bruker-eid sti, blir «hvor bor dataene» et spørsmål bare hooken + onboarding-agenten må svare på.

Låst scope og retning (operatør, 2026-06-22)

  • Lagringssted (BESLUTTET): flytt både org-data og C1-scheduler-config ut av plugin-katalogen til en bruker-eid mappe ~/.claude/ms-ai-architect/ (søsken av ~/.claude/plugins/, overlever plugin-reinstall). Personvern bevart — ligger ikke i noe git-repo. Bakoverkompat: les ny sti først, fall tilbake til plugin-rot/org/; migrer gammel hvis present (i praksis no-op i dag — ingen eksisterende data).
  • Ambient: session-start-context.mjs injiserer et kompakt org-sammendrag (lengde-budsjett, ~25 linjer), slik STATE.md injiseres. Ikke rå-filer.
  • Agentenes betingede lesing beholdes som fallback, men peker på den bruker-eide stien (se risiko 5 — subagent-injeksjon er en antakelse som SKAL testes i C2.1).
  • Ingen destruktive ops på eksisterende org-data. Innhold kan vokse (fritekst-fil).
  • TDD ufravikelig: test FØR kode i hver delsesjon. Operatør-gate på beslutninger.

Arkitektur

LAGRING       ~/.claude/ms-ai-architect/
              ├── org/*.md            (5 strukturerte filer + free-context.md)
              └── ms-ai-architect.local.md   (scheduler-config; samme blokk-format)

RESOLVER      lib/user-data.mjs (NY, ren, SKRIVER ALDRI)
              resolveUserDataDir(homedir) · resolveOrgDir · resolveConfigPath
              buildOrgSummary(files,{cap}) — deterministisk, lengde-kappet

AMBIENT       session-start-context.mjs LESER resolver → injiserer summary (stdout)
KONSUM        11 agenter: betinget lesing (fallback) peker på resolveOrgDir
SKRIVING      onboarding-agent.md → resolveOrgDir; scheduler-spørsmål → resolveConfigPath
              (gated KB-/config-skriving via lib/atomic-write + lib/backup)

Bakoverkompat-invariant (C1 må ikke knekke): loadScheduleConfig skal lese bruker-sti FØRST, deretter falle tilbake til dagens plugin-rot-sti. Den allerede-shippede Tier-1/Tier-2-scheduleren leser samme config — fallbacken garanterer uendret oppførsel for en bruker som allerede har en plugin-rot-config.

Roadmap (multi-delsesjon, én økt per delsesjon)

Delsesjon Leveranse Verifiserbart kriterium
C2.1 Bruker-eid lagring + ambient injeksjon (#1 + #2) K1 + K2 (se under). loadScheduleConfig bakoverkompat-test grønn (bruker-sti vinner, fallback til plugin-rot).
C2.2 Fritekst-felt (#3) K3: onboarding fanger org/free-context.md; innholdet synlig i etterfølgende interaksjon (summary inkluderer det, kappet).
C2.3 os_scheduler_cadence + enabled i onboarding (S24) K5: onboarding skriver scheduled_detection:-blokk som parseScheduleConfig leser tilbake korrekt (round-trip-test: daily/interval/enabled).
C2.4 Privat-sektor-paritet — verifiser + lukk §167-residu (#4) K4: privat virksomhet fullfører onboarding uten «Annet» på sektor, med relevant reg-liste.

C2.1 er den bærende delsesjonen (etablerer lagring + resolver alle andre bygger på). C2.2C2.4 er additive oppå den.

Verifiserbare akseptansekriterier (binding)

  • K1 (ambient): Frisk sesjon med utfylt org-kontekst + et fritekst-spørsmål uten å invokere en org-bevisst agent → svaret reflekterer ≥1 org-faktum. Bevis: konteksten injiseres (ikke betinget lest). Test: hook-output inneholder org-sammendrags-blokken når resolver finner org-filer.
  • K2 (overlevelse): Simuler oppgradering (flytt/reinstaller plugin-katalogen) → org-konteksten + scheduler-configen er fortsatt tilgjengelig. Bevis: resolver peker på ~/.claude/ms-ai-architect/, utenfor det reinstall blåser bort. Test: resolver returnerer bruker-sti uavhengig av pluginRoot; loadScheduleConfig finner bruker-config selv når plugin-rot-config mangler.
  • K3 (fritekst): Onboarding fanger et fritt prosa-felt; innholdet er synlig i en etterfølgende interaksjon (i ambient-sammendraget, kappet til budsjett).
  • K4 (paritet): Privat virksomhet kan fullføre onboarding uten å velge «Annet» på sektor, med relevant reguleringsliste.
  • K5 (S24 cadence): Onboarding skriver en scheduled_detection:-blokk (enabled + os_scheduler_cadence) til bruker-config; parseScheduleConfig leser den tilbake til samme verdier (round-trip). Garbage/utelatt → daily-default (eksisterende coerce-regel).

Gjenbruk vs. nybygg (navngitte filer)

Gjenbruk direkte:

  • detection-schedule.mjs scheduled_detection:-blokkformat + parseScheduleConfig/coerce (C2.3 skriver dette formatet; ingen ny parser).
  • lib/atomic-write.mjs + lib/backup.mjs (for all gated config-/org-skriving).
  • session-start-context.mjs injeksjonsmekanisme (stdout → SessionStart additional context).

Nytt:

  • scripts/.../lib/user-data.mjs (ren resolver + buildOrgSummary; SKRIVER ALDRI; null avhengigheter utover node:fs/path/os). Speiler detection-schedule.mjs-stilen (ren kjerne, tynn konsument).
  • org/free-context.md-konvensjon (C2.2).
  • Onboarding scheduler-spørsmål (C2.3).

Må endres:

  • session-start-context.mjs — resolve bruker-org-dir (fallback plugin org/), injiser kompakt summary (ikke bare status).
  • detection-schedule.mjs loadScheduleConfig — bruker-sti først, fallback plugin-rot (bakoverkompat).
  • agents/onboarding-agent.md — skriv til bruker-sti; nytt fritekst-felt (C2.2); scheduler-spørsmål (C2.3).
  • 11 agentfiler — «Virksomhetskontekst (automatisk)»-seksjonen: fallback-lesing peker bruker-sti + note om at kontekst injiseres ambient. Mekanisk, uniform (grep-test for konsistens).
  • commands/onboard.md (88 l), CLAUDE.md, README.md, .gitignore (org/-regel blir moot men beholdes som forsvar-i-dybden) — sti-referanser.

Risiko (rangert) og håndtering

  1. Subagent-injeksjon-antakelse (KRITISK — testes i C2.1). SessionStart-hookens stdout blir main-kontekst. Det er ikke verifisert at Task-spawnede subagenter (de 11) arver den. Hvis ikke: ambient-injeksjonen dekker main-kontekst + ikke-agent-kommandoer, mens agentene bæres av fallback fil-lesing fra bruker-stien. Derfor beholdes agentenes betingede lesing (pekt på resolver) — design er robust uansett utfall. Eksplisitt test i C2.1 før vi stoler på «ambient».
  2. C1-config bakoverkompat. Flytting av config-sti kan knekke den shippede scheduleren. → fallback (bruker-sti → plugin-rot) + round-trip-test; ikke fjern plugin-rot-lesing.
  3. Hook-injeksjon-bloat. Summary prependes hver sesjon. → hardt lengde-budsjett (~25 l) i buildOrgSummary, kapp fritekst.
  4. 11-agent mekanisk drift. → uniform edit + grep-test at alle org-bevisste agenter refererer resolver-stien likt.
  5. Personvern. Bruker-sti ligger ikke i repo; behold .gitignore org/ som forsvar-i-dybden.

Verification (overordnet)

  • Per-delsesjon K-kriterier (tabell) er kjørbare sjekker.
  • Pluginens gates ved hver commit: validate (239+), kb-integrity, test-hooks.sh, gitleaks clean (3 pre-eksisterende i playground/vendor/ = uendret baseline).
  • Nøkkelantakelse testet (CLAUDE.md plan-kvalitet): subagent-injeksjon (risiko 1) — eksplisitt test i C2.1; merket risiko til den er bevist.
  • Arkitektur-invariant: lib/user-data.mjs er ren resolver (SKRIVER ALDRI); all org-/config-skriving gated via atomic-write/backup.

Avgrensning

  • Ikke del av KB-mekanisme-redesignet (kb-mechanism-redesign-plan.md) eller Spor B (skill-lifecycle-spor-b-plan.md). Eget spor, egen plan.
  • C3 (kurs/training, #25) tas etter C2.
  • docs/onboarding-ros-analysis.md var feildøpt (Windows clone-to-PR-guide, ikke onboarding-analyse) — omdøpt i C2.4 til docs/windows-clone-to-pr-ros-guide.md.

C2.1 — konkret startplan (bruker-eid lagring + ambient injeksjon)

Mål: etabler ~/.claude/ms-ai-architect/ som bruker-eid datarot, en ren resolver alle andre delsesjoner bygger på, og ambient injeksjon av et kompakt org-sammendrag. TDD: test FØR kode. Invariant: resolver SKRIVER ALDRI; C1-scheduler må ikke knekke (fallback).

Rekkefølge:

  1. Les først: hooks/scripts/session-start-context.mjs, scripts/kb-update/lib/detection-schedule.mjs (loadScheduleConfig/CONFIG_FILENAME), agents/onboarding-agent.md, ett agent-eksempel (security-assessment-agent.md:33-39), lib/atomic-write.mjs + lib/backup.mjs.
  2. lib/user-data.mjs (ny, ren): resolveUserDataDir(homedir = os.homedir())join(homedir,'.claude','ms-ai-architect'); resolveOrgDir(homedir); resolveConfigPath(homedir); buildOrgSummary(orgFiles, {cap}) → deterministisk, lengde-kappet sammendrag (sektor, virksomhet, størrelse, reg-krav, lisens, dataklassifisering, residens, budsjett, styringsmodell). TDD: tester for resolver (homedir-injisert), summary (manglende filer, cap), FØR kode.
  3. detection-schedule.mjs bakoverkompat: loadScheduleConfig leser resolveConfigPath først, fallback dagens plugin-rot. Round-trip-test: bruker-config vinner; plugin-rot brukes når bruker-config mangler.
  4. session-start-context.mjs: resolve bruker-org-dir (fallback plugin org/), bygg + injiser kompakt summary (ikke bare status). Behold status-linja når org tom.
  5. onboarding-agent.md: skriv org-filer til resolveOrgDir.
  6. 11 agenter: «Virksomhetskontekst (automatisk)»-seksjon peker resolver-sti + ambient-note. Uniform + grep-test.
  7. Subagent-injeksjon-test (risiko 1): bevis om en Task-spawnet agent ser hook-injeksjonen. Dokumentér utfall; behold fil-fallback uansett.
  8. Avslutt: validate 239 + nye enhetstester + test-hooks.sh grønne · commit per logisk enhet · push (vindu 2023 hverdag) · oppdater STATE (C2.2 neste) + denne planen (C2.1-resultater).

Ikke i C2.1: fritekst-felt (C2.2), scheduler-spørsmål i onboarding (C2.3), §167-verifisering (C2.4).

C2.1 — RESULTAT (levert, TDD test FØR kode)

  • lib/user-data.mjs (NY, ren, SKRIVER ALDRI; kun node:os/path): resolveUserDataDir/resolveOrgDir/resolveConfigPath (peker ~/.claude/ms-ai-architect/, uavhengig av pluginRootK2), CONFIG_FILENAME (delt med C1, én sannhetskilde), ORG_FILES, buildOrgSummary(orgFiles,{cap,maxValueLen}) (generisk H2-ekstraksjon, frontmatter+H1-stripp, deterministisk ORG_FILES-rekkefølge, lengde-kapp ~25 l + per-felt-trim).
  • detection-schedule.mjs bakoverkompat: loadScheduleConfig(pluginRoot, home=homedir()) leser bruker-sti FØRST, fallback plugin-rot. Lokal CONFIG_FILENAME fjernet → importeres fra resolver. Alle 3 kallere (hook, run-detection, scheduler) bruker ett-arg-kall → uendret oppførsel.
  • session-start-context.mjs ambient (K1): resolver bruker-org-dir (fallback plugin org/), leser filene, injiserer buildOrgSummary som egen «Virksomhetskontekst (auto-injisert …)»-blokk. Status-nudge beholdt når org tom.
  • Skriving: onboard.md (orkestrator) resolver absolutt $ORG_DIR via Bash + mkdir -p og gir agenten den; onboarding-agent.md skriver til den absolutte bruker-stien (ikke plugin-rot).
  • 11 agenter: uniform «Virksomhetskontekst»-blokk → bruker-sti + note om ambient + subagent-fallback (grep-verifisert 11/11).
  • Risiko 1 BEVIST: Task-spawnet subagent arver IKKE SessionStart-injeksjonen (live-probe) → agentene bæres av fallback-fil-lesing; Read/Glob ekspanderer ~ (verifisert) → bruker-sti lesbar uten Bash.
  • Verifisert: user-data 16/16 · detection-schedule 23/23 (+2 round-trip) · test-hooks 10/10 (+4: K1-injeksjon + tom-org-negativ) · kb-update 191 · kb-eval 100 · validate PASSED (0/0) · kb-integrity 192/192 (220 baseline-warns) · discovery 13/13 · gitleaks 3 PRE-EKSISTERENDE (playground/vendor/). CLAUDE.md trengte ingen sti-endring (kun kommando/agent-omtale); .gitignore org/ beholdt som forsvar-i-dybden.
  • Neste: C2.2 (fritekst-felt org/free-context.md → fanges av onboarding + inkluderes kappet i buildOrgSummary).

C2.2 — RESULTAT (levert, TDD test FØR kode)

Mål nådd: valgfritt fri-prosa-felt free-context.md fanges i onboarding og overflater (kappet) i det ambiente sammendraget → K3 oppfylt.

  • Designvalg som avvek fra startnotatet (begrunnet): free-context.md ble IKKE lagt i ORG_FILES. ORG_FILES er doblet brukt i hooken — både fil-lesing OG fullføringskontrakt (orgComplete < ORG_FILES.length). Hadde fila blitt en sjette ORG_FILES-oppføring, ville en fullt onboardet bruker uten fritekst vist «Onboarding 5/6 — kjør for å fullføre». Løst med egen export const FREE_CONTEXT_FILE (utenfor ORG_FILES); hooken leser den uten å telle den.
  • lib/user-data.mjs: FREE_CONTEXT_FILE + FREE_CONTEXT_LABEL='Fri kontekst'. collapseProse() (strip frontmatter + ALLE header-linjer + kollaps whitespace) → fri kontekst overflates som ÉTT felt uansett markdown-struktur (rå prosa, kun H1, eller H2) — fjerner stille-drop-feilmodus som ellers truet K3. capValue() ekstrahert (DRY — brukes nå av både strukturert-loop og fri-kontekst). I buildOrgSummary legges fri kontekst SIST, kappet av samme maxValueLen (160) som øvrige felt.
  • session-start-context.mjs: leser FREE_CONTEXT_FILE valgfritt inn i files-mappen (ingen count++) → ambient-summary inkluderer den; fullføringstellingen uendret.
  • onboarding-agent.md: ny Phase 6 (VALGFRI) — ett åpent fritekst-spørsmål; skriver free-context.md ordrett kun hvis bruker gir tekst (hopper over → ingen fil). Resume-logikk + completion-report + retningslinjer oppdatert (5 strukturerte = fullføringskontrakt; fri kontekst valgfri 6.).
  • commands/onboard.md: prosess-liste (6. fri kontekst, valgfritt), Task-prompt (kjør Phase 6 hvis fila mangler), status-tabell (egen valgfri-rad; teller ikke i X/5).
  • 11 agenter: uniform 6. bullet free-context.md — Fri kontekst (valgfri) … (grep 11/11).
  • Kapp-tradeoff (bevisst): fri kontekst kappes til maxValueLen (160) i det ambiente teaser-et — K3 krever bare «kappet til budsjett»-synlighet, og agentene leser full fil via fallback. Egen, mer raus fri-kontekst-cap er en triviell oppfølging hvis 160 viser seg for kort i praksis (ikke gjort — unngår knott uten påvist behov).
  • Verifisert: user-data 25/25 (+9 fri-kontekst) · test-hooks 11/11 (+1: K3-ambient) · kb-update 200 · kb-eval 100 · validate PASSED (239/0/0) · kb-integrity 192/192 (220 baseline-warns) · discovery 13/13 · gitleaks 3 PRE-EKSISTERENDE (playground/vendor/).
  • Neste: C2.3 (os_scheduler_cadence + enabled skrives av onboarding; round-trip mot parseScheduleConfig).

C2.3 — RESULTAT (levert, TDD test FØR kode)

Mål nådd: onboarding skriver scheduled_detection:-blokka (enabled + os_scheduler_cadence) til den bruker-eide configen, og parseScheduleConfig leser den tilbake til samme verdier → K5 oppfylt (round-trip bevist deterministisk). Brukeren slipper å hånd-redigere den gitignored fila.

  • Deterministisk kjerne (K5): ny serializeScheduleConfig(config) i detection-schedule.mjs — invers av parseScheduleConfig, lagt RETT VED parseren (én formatsannhet, ingen andre-parser). Skriver alle fire kjente nøkler normalisert slik coerce() leser dem, så parseScheduleConfig(serializeScheduleConfig(c)) round-tripper (daily/interval/enabled/interval_days; garbage-kadens → daily).
  • Gated skrive-CLI: ny scripts/kb-update/write-schedule-config.mjs (--enabled --cadence [--home]) — MERGER på eksisterende config (parse → override KUN de to onboarding-eide nøklene → serialize), så interval_days/include_skill_lifecycle satt andre steder overlever. Pure node, Claude-fri (kun ToS-rasjonale i kommentarer, ingen invokasjon); ikke en DETECTION_STEP. Skriver til resolveConfigPath (bruker-eid).
  • Gating-invariant (ufravikelig): sikkerhetskopi via ny backupFile(filePath, backupRoot) i lib/backup.mjs (presis enkeltfil-backup — drar IKKE org/ inn i backup ved hver kadens-endring, slik backupDir ville) + atomicWriteSync (aldri rå fs-write). Backup er no-op ved første skriv (ingenting å bevare); backup tas før overskriving.
  • Designvalg som avvek fra plan-teksten (begrunnet): scheduler-spørsmålet ligger i orkestratoren (onboard.md), ikke i onboarding-agent.md. Agenten har kun Write (ingen Bash) og kan ikke kjøre den gatede CLI-en; orkestratoren har Bash + AskUserQuestion. Agenten fikk en note om at scheduler håndteres av orkestratoren etter intervjuet. (Speiler C2.2-mønsteret: dokumenter avviket, ikke følg plan-bokstaven når koden tilsier annet.)
  • onboard.md: ny «Planlagt deteksjon»-seksjon (aktiver Ja/Nei opt-in → kadens daily/interval, daily anbefalt → gated CLI-kall + kort rapport); scheduler-rad i --status; «dekker»-liste utvidet med pkt. 7. onboarding-agent.md: note om at scheduler er orkestratorens jobb.
  • Kjent begrensning (pre-eksisterende, ikke C2.3-introdusert): CLI-kallet i onboard.md bruker relativ node scripts/...-sti (antar cwd = plugin-rot), identisk konvensjon som kb-update.md. Org-/config-stiene er home-baserte (robuste).
  • Verifisert: detection-schedule 33/33 (+10: serialize round-trip + writeScheduleConfig merge/backup/end-to-end) · backup-restore 15/15 (+3: backupFile) · kb-update 213 · kb-eval 100 · validate PASSED (239/0/0) · test-hooks 11/11 · kb-integrity 192/192 (220 baseline-warns) · discovery 13/13 · gitleaks 3 PRE-EKSISTERENDE (playground/vendor/).
  • Neste: C2.4 (verifiser privat-sektor-paritet #4 + lukk evt. §167-residu).

C2.4 — RESULTAT (verifikasjon + regresjonsvakt, TDD rød→grønn)

Mål nådd: K4 verifisert oppfylt og låst mot regresjon → privat-sektor-paritet i onboarding er bevist, ikke antatt.

  • Funn (kildehistorikk): privat-greinen ble innført i commit 6e1fc6d («#7d privat-sektor-paritet … onboarding-forgrening … audit §5»), FØR C2.1C2.3. §167-onboarding-residuet (audit §5 punkt #1) var altså allerede lukket i kode. C2.4 var dermed ekte verifikasjon, ikke nybygg — som planraden forutså.
  • K4 bekreftet mot kilden (agents/onboarding-agent.md Phase 1): sektortype forgrener offentlig/privat; privat sektor-grein lister Finans/bank/forsikring, Industri/produksjon, Handel, Energi, Telekom (bank slipper «Annet»); privat reg-sett har DORA, Finansforetaksloven, Finanstilsynets IKT-forskrift, Verdipapirhandelloven, Hvitvaskingsloven; private spørres ALDRI Offentleglova/Arkivloven/Forvaltningsloven. Orkestratoren (commands/onboard.md) er sektor-nøytral (delegerer intervjuet).
  • Ny regresjonsvakt: tests/test-onboarding-parity.sh (14 asserts mot kilden, ikke fixture — onboarding er interaktivt AskUserQuestion, ingen output-fixture). Bruker lib/e2e-helpers.sh-mønsteret som de andre output-testene. Wiret inn i tests/run-e2e.sh (--onboarding, med i --all). TDD-diskriminering bevist: testen kjørt mot en strippet offentlig-only-kopi → 13/14 FAIL (rød); mot ekte fil → 14/14 PASS (grønn).
  • §167-residu (d) bevisst IKKE bygget (begrunnet): anbefalingens «betinget Fase 3-gren med egen dataklassifiserings-taksonomi for regulert privat sektor» er gull-plating UTENFOR K4. Dagens Fase 3-taksonomi (Åpen/Intern/Fortrolig/Strengt fortrolig) er en alminnelig norsk bedrifts-klassifisering — en privat virksomhet fullfører Fase 3 uten hindring; kun «Hemmelig (sikkerhetsloven)» er offentlig-spesifikk og velges simpelthen ikke. K4 krever ikke egen taksonomi. Ingen knott uten påvist behov (speiler C2.2-/C2.3-disiplinen).
  • Medrydd (plan §Avgrensning): feildøpte docs/onboarding-ros-analysis.md (en Windows clone-to-PR-bidragsyterguide, ikke onboarding-analyse) omdøptdocs/windows-clone-to-pr-ros-guide.md (git mv); plan- + brief-referanser oppdatert. Fjerner reell forvekslingsfelle (utvikler- vs. virksomhets-onboarding).
  • Avgrensning (bekreftet): audit §5 punktene #2#6 (sektor-parametrisering i classify/dpia/ros/frimpact/utredning/review, README/help/playground privat-bane) er IKKE C2.4-scope. Mange ble adressert i 6e1fc6d; gjenstående er eget arbeid utenfor C2 (onboarding-paritet). Ikke eskalert uten godkjenning.
  • Verifisert: onboarding-parity 14/14 (NY) · validate PASSED (239/0/0) · e2e alle suiter grønne · discovery 13/13 · test-hooks 11/11 · kb-integrity 192/192 (220 baseline-warns) · gitleaks 3 PRE-EKSISTERENDE (playground/vendor/).
  • C2 KOMPLETT (C2.1→C2.4 ). Neste: C3 (kurs/training, #25) — eller release-beslutning (v1.16.0) i push-vindu.