Commit graph

168 commits

Author SHA1 Message Date
bf10b7dca7 docs(ms-ai-architect): 1.16.0 release-notater — dokumentér C1+C2 + ferske testtall v1.16.0
CHANGELOG [1.16.0] og README version-history dekket bare audit-arbeidet
(#7c/#7d). Lagt til Spor C-selvstendiggjøring som ogsaa shipper under 1.16.0:
- C1 planlagt deteksjon (opt-in, Claude-fri; Tier 1 hook + Tier 2 OS-scheduler)
- C2 onboarding-redesign (bruker-eid lagring, ambient injeksjon, fritekst-felt,
  scheduler-kadens i onboarding, privat-sektor-paritet med regresjonsvakt)
Dato 2026-06-18 -> 2026-06-22 (release-dato). Ferske testtall: kb-integrity
115/115 -> 192/192, + onboarding-parity 14/14.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 19:53:01 +02:00
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
afd75c4fed feat(ms-ai-architect): C2.3 onboarding skriver scheduled_detection cadence+enabled via gated CLI (TDD) [skip-docs]
K5 oppfylt: onboarding skriver scheduled_detection-blokka (enabled +
os_scheduler_cadence) til bruker-eid config; parseScheduleConfig leser den
tilbake til samme verdier (round-trip bevist deterministisk).

- serializeScheduleConfig(config) i detection-schedule.mjs — invers av
  parseScheduleConfig, rett ved parseren (én formatsannhet).
- write-schedule-config.mjs (NY, gated CLI, Claude-fri): merger på eksisterende
  config (override kun de to onboarding-eide nøklene; interval_days/
  include_skill_lifecycle overlever). backupFile + atomicWriteSync — ingen rå
  fs-write.
- backupFile(filePath, backupRoot) i lib/backup.mjs — presis enkeltfil-backup.
- onboard.md (orkestrator): «Planlagt deteksjon»-seksjon + scheduler i --status.
  onboarding-agent.md: note om at scheduler er orkestratorens jobb (ingen Bash).
- Avvik fra plan-tekst (dokumentert): scheduler-spørsmål i orkestrator, ikke agent.

Verifisert: detection-schedule 33/33 (+10) · backup-restore 15/15 (+3) ·
kb-update 213 · kb-eval 100 · validate 239/0/0 · test-hooks 11/11 ·
kb-integrity 192/192 · discovery 13/13 · gitleaks 3 pre-eksisterende.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 14:53:03 +02:00
8ff73b7fe3 feat(ms-ai-architect): C2.2 valgfritt fritekst-felt free-context.md i onboarding (TDD) [skip-docs]
Spor C / C2.2 (#3, akseptanse K3): fanger et fritt prosa-felt i onboarding og
overflater det (kappet) ambient i hver sesjon.

- lib/user-data.mjs: FREE_CONTEXT_FILE (utenfor ORG_FILES — valgfri, teller ikke
  mot fullføring), collapseProse() surfacer fri kontekst som ÉTT felt uansett
  markdown-struktur (ingen stille drop), capValue() ekstrahert (DRY).
- session-start-context.mjs: leser free-context.md valgfritt (ingen count++).
- onboarding-agent.md: ny Phase 6 (valgfri); onboard.md: prosess/Task/status.
- 11 agenter: uniform 6. bullet (grep 11/11).
- Tester FØR kode: user-data 25/25 (+9), test-hooks 11/11 (+1 K3-ambient).

Gates: validate 239/0/0 · kb-update 200 · kb-eval 100 · kb-integrity 192/192
(220 baseline-warns) · discovery 13/13 · gitleaks 3 pre-eksisterende.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 14:16:00 +02:00
466094f2a2 feat(ms-ai-architect): C2.1 onboarding skriver bruker-sti + 11-agent fallback + docs [skip-docs]
- onboard.md (orkestrator): resolver absolutt $ORG_DIR via Bash + mkdir -p, gir
  agenten stien. allowed-tools +Bash. Status/resume globber bruker-sti.
- onboarding-agent.md: skriver de 5 org-filene til den absolutte bruker-stien
  (~/.claude/ms-ai-architect/org/), aldri plugin-rot.
- 11 org-bevisste agenter: uniform Virksomhetskontekst-blokk -> bruker-sti +
  note om ambient injeksjon + subagent-fallback (grep-verifisert 11/11).
  Risiko 1 BEVIST: Task-subagent arver IKKE SessionStart-injeksjon; Read/Glob
  ekspanderer ~ -> fallback lesbar uten Bash.
- README + plan: sti-referanse + C2.1-resultat. CLAUDE.md uendret (ingen sti-ref).

Verifisert: validate PASSED · kb-integrity 192/192 · discovery 13/13.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 13:34:19 +02:00
dc0b627e98 feat(ms-ai-architect): C2.1 lib/user-data resolver + ambient org-injeksjon + C1 config bakoverkompat (TDD) [skip-docs]
Bæreren i C2 onboarding-redesign (#26). 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 pluginRoot -> overlever reinstall, K2). CONFIG_FILENAME delt med C1
  (en sannhetskilde). buildOrgSummary: deterministisk, lengde-kappet H2-ekstraksjon.
- detection-schedule.mjs: loadScheduleConfig(pluginRoot, home=homedir()) leser
  bruker-sti FORST, fallback plugin-rot. Lokal CONFIG_FILENAME -> importeres fra resolver.
  Alle 3 kallere bruker ett-arg-kall (uendret oppforsel).
- session-start-context.mjs: injiserer buildOrgSummary ambient (K1) som egen
  Virksomhetskontekst-blokk; status-nudge beholdt nar org tom.

Verifisert: user-data 16/16 · detection-schedule 23/23 · test-hooks 10/10 ·
kb-update 191 · kb-eval 100 · validate PASSED.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 13:34:05 +02:00
4ff60803ce docs(ms-ai-architect): C2 onboarding-redesign — godkjent plan + roadmap [skip-docs]
Plan-sesjon for Spor C fase C2. Forankret mot koden (ikke briefen alene):
- gap #1 ambient (hook injiserer status, ikke innhold; 11 agenter leser org/ betinget),
  #2 overlevelse (org/ OG ms-ai-architect.local.md gitignored i plugin-dir), #3 fritekst
  er REELLE; #4 privat-paritet trolig allerede løst i onboarding-agent.md (verifiseres C2.4).
- Besluttet lagring (operatør 2026-06-22): ~/.claude/ms-ai-architect/ for org + C1-config,
  overlever reinstall; bakoverkompat (bruker-sti → fallback plugin-rot).
- Sekvens: C2.1 lagring+ambient → C2.2 fritekst → C2.3 cadence/enable i onboarding (S24)
  → C2.4 verifiser paritet. TDD test FØR kode hver delsesjon.

docs/onboarding-redesign-plan.md (godkjent plan, avløser briefen). STATE «👉 NESTE» → C2.1.
Tasks #45–48 opprettet; #26 in_progress.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 12:08:28 +02:00
071601bb9e feat(ms-ai-architect): Sesjon 24 — C1 Tier 2 lokal launchd-scheduler (deteksjon-only, ToS-trygt) [skip-docs]
Tier 1 (SessionStart-hook) kjører deteksjon kun når en Claude-sesjon starter.
Tier 2 installerer en lokal launchd LaunchAgent som fyrer SAMME Claude-frie
entrypoint daglig (kl. 03:00), uavhengig av sesjoner = ekte bakgrunn mellom
sesjoner. ToS-trygt: entrypointet kan strukturelt ikke invokere claude.

Søk-først-verifisert (2026-06): launchd > cron (Apple-anbefalt; cron krever
Full Disk Access); StartCalendarInterval fanger opp etter dvale; launchd har
minimalt PATH + ekspanderer ikke ~; process.execPath = Cellar-sti som dør ved
`brew upgrade node` → plistens PATH inkluderer /usr/local/bin.

Levert (TDD, test FØR kode):
- lib/launchd-plist.mjs (REN, SKRIVER ALDRI): renderPlist (XML-escape,
  StartCalendarInterval, PATH-fix), defaultLabel, resolvePaths.
- scheduler.mjs (TYNN CLI): install|uninstall|status|run-now|print|run.
  Strukturelt Claude-fri (kun process.execPath på run-detection.mjs +
  launchctl; kilde-grep-testet). run gater på os_scheduler_cadence →
  delegerer til run-detection.mjs. uid-0-nekt; idempotent bootout.
- detection-schedule.mjs (additiv, Tier-1 urørt): os_scheduler_cadence
  ('daily' default | 'interval') + daysSinceLastPoll ren helper.
- commands/kb-update.md: Tier-1/Tier-2-doc + caveats (uninstall=pause;
  re-install etter node-upgrade).

Operatør-valg: daglig default, kadens egen innstilling (settes i onboarding/C2).

Verifisert: launchd-plist 13/13 · detection-schedule 21/21 · kb-update 173 ·
kb-eval 100 · validate 239/0 · test-hooks 6/6 · plutil -lint OK · live
install→status→idempotent→uninstall på maskinen (gui/501, rent).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 19:59:18 +02:00
f8a160585f test(ms-ai-architect): Sesjon 23 — auto_discover stale-felt assertion korrigert (søk-verifisert, 13/13) [skip-docs]
Oppgave 0 (#44): søk-først (claude-code-guide mot offisiell docs) verifiserte at
`auto_discover` IKKE er et gyldig Claude Code plugin.json-felt — auto-discovery er
implisitt default (code.claude.com/docs/en/plugins-reference; ukjent felt gir kun
valideringsadvarsel, ikke feil). → stale konvensjon, IKKE manglende felt.

- tests/test-plugin-discovery.sh: stale hard-assertion (krevde `auto_discover: true`)
  → optional-felt-logikk som speiler validate-plugin.sh (fravær = PASS «auto-discovery
  implisitt»; present må være true). plugin.json URØRT (la IKKE til ugyldig felt).
  12/13 → 13/13.

validate 239/0 (ingen regresjon). STATE oppdatert: NESTE = C1 Tier 2.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 13:48:40 +02:00
039b61ca24 chore(ms-ai-architect): Sesjon 22 — rydd stale pre-edit-secrets-testreferanser [skip-docs]
pre-edit-secrets.mjs-hooken ble bevisst fjernet i v1.7.0 (secrets scanning
consolidated to llm-security, CHANGELOG l.413), men 2 testfiler refererte den
fortsatt og ga falske feil.

- tests/test-hooks.sh: fjernet pre-edit-secrets-testblokk (5 tester) → 6/6 grønn.
- tests/test-plugin-discovery.sh: fjernet pre-edit-secrets fra CLAUDE.md-dok-loop.

Separat funn (IKKE fikset, scope-guard): test-plugin-discovery.sh har 1
gjenværende feil `auto_discover is not true` — plugin.json mangler feltet; ikke
hook-relatert, krever søk-først (gjeldende felt vs stale test). Flagget → task #44.

De 4 sporede suitene uendret (validate 239 · kb-update 155 · kb-eval 100 · kb-integrity 192/192).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 23:08:11 +02:00
150b20584e feat(ms-ai-architect): Sesjon 21 — C1 Tier 1 opt-in session-forankret deteksjon (ToS-forankret) [skip-docs]
Spor C fase C1 Tier 1. Ny verifisert ToS-analyse avdekket falsk «enten/eller»:
Consumer Terms §3.7 begrenser automatisert tilgang til Claude/Anthropic, IKKE
kjøring av lokale node-scripts. Deteksjon kontakter aldri Claude → utenfor
ToS-flaten; apply (eneste Claude-steg) forblir manuelt/in-session/gated.

- lib/detection-schedule.mjs (ren): opt-in config (default AV) + shouldRunDetection
  gate + DETECTION_STEPS allow-liste + summarizeSkillLifecycle. Zero-dep parser.
- run-detection.mjs: Claude-FRITT entrypoint — kjører kun `node` på de
  allow-listede deteksjons-scriptene; kan ikke invokere claude (guard-testet).
- session-start-context.mjs: ubetinget bakgrunns-spawn → opt-in (default AV
  spawner ingenting) + surfacer skill-signaler read-only.
- commands/kb-update.md: opt-in-seksjon + ToS-note; ms-ai-architect.local.md.example.

TDD: ny test-detection-schedule.test.mjs (16). kb-update 139→155.
Suiter uendret: validate 239 · kb-eval 100 · kb-integrity 192/192.
0 skills/-mutasjon. Tier 2 (lokal OS-timer, deteksjon-only) = neste økt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 22:54:18 +02:00
e47fc9bd59 feat(ms-ai-architect): Sesjon 20 — B3 create_skill (dvelende, konstruktiv op) [skip-docs]
B3 + Spor B (krav 5+6) KOMPLETT. create_skill er speilbildet av de
destruktive ops: merge/saner/retire beviser "ingen kuratert verdi TAPT";
create beviser "ingen sub-bar skill FØDT" (kvalitetsgulv). Ingen ny
domene-skill shippet (svar 3) — mekanismen bevist, ikke brukt.

- planCreateSkill (ren): genererer scaffold + selv-validerer mot eval.mjs
  sine EGNE checkers (K2/K3/K5/K6/refTall + K10) — rubrikken har én kilde.
  Guardrail ok iff alle deterministiske K passerer + K10<terskel + navn ledig.
- TEST_DOMAIN_SPEC: kanonisk dvelende-scaffold (born compliant, K5 ratio 1.0).
- runCreatePlan (uren): gated dry-run, 0 skriving til skills/.
- applyApprovedAction create-gren: re-plan fersk → revalider (drift+kollisjon)
  → skriv scaffold + persister taksonomi-tillegg → flipp ledger.
- applyCategoryAdditions (taxonomy.mjs): additiv, klobrer aldri eksisterende eier.
- CLI create-verb i plan-skill-op + apply-skill-op.

TDD: ny test-skill-ops-create.test.mjs (16). kb-eval 84→100.
Suiter uendret: validate 239 · kb-update 139 · kb-integrity 192/192.
Deterministisk eval K1–K10 for de 5 ekte: 0 regresjon. 0 ekte skills/-mutasjon.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 21:37:19 +02:00
de3a9a483b feat(ms-ai-architect): Sesjon 19 — B3 merge-apply (cross-skill + taksonomi-persist) [skip-docs]
Merge-apply = den tyngste destruktive op-en: eksekver en operatør-godkjent
merge_skills-entry → faktisk cross-skill skills/-mutasjon. Tre mekanismer
som sanitize/retire ikke trengte: kuratert relokasjon (ikke arkiv),
taksonomi-persistering, retire-av-absorbert.

- taxonomy.mjs (ny persist): saveTaxonomy (atomisk .tmp+rename, speiler
  saveDecisions) + ren applyCategoryReassignments (repointer KUN der eier
  === from; absent/allerede-flyttet = no-op). Lag-0 er normalt read-only;
  ENESTE writer = gated merge-apply.
- applyApprovedAction merge-gren (skill-ops.mjs): re-plan fersk → revalidér
  (kollisjon → guardrail.ok=false → abort) → flytt absorbed-refs → absorber
  (moveFile; flyttingen ER bevaringen set-equality beviser) → persister
  taksonomi-repoint fra FERSK plan (drift-sikker) → arkivér absorbed-SKILL.md
  FØR rmdir → flipp ledger approved→applied. Description-forsoning forblir
  MANUELL (planner-kontrakt: apply rører aldri absorber-SKILL.md).
  archiveMove→moveFile (generisk: arkiv + kuratert flytt).
- CLI apply-skill-op.mjs merge <absorber> <absorbed> — lookup via actionKey
  (merge_skills:<sortert par>); default PREVIEW, --apply = dobbel-gate.

TDD, tmpdir-fixtures: 0 ekte skills/-mutasjon. Ny test-skill-ops-merge-apply
(7) + 2 taksonomi-tester; fjernet foreldet merge-throws fra S18-fila. Tester:
kb-eval 78→84, kb-update 137→139; validate 239 · kb-integrity 192/192 uendret.
eval --json deterministisk uendret (K10 eng+infra FAIL, øvrige PASS).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 20:54:13 +02:00
4ac18a76c8 feat(ms-ai-architect): Sesjon 18 — B3 apply-path (sanitize+retire), merge→S19 [skip-docs]
Apply-path = den destruktive frontieren: eksekver en operatør-godkjent
(status:approved) ledger-entry → faktisk skills/-mutasjon. Staget per
operatør-beslutning til single-skill ops (sanitize+retire); merge-apply
isoleres til S19 (krever taksonomi-persistering + cross-skill flytt).

- revalidateApply (ren, skill-ops.mjs): idempotent revalidering mot fersk
  re-plan — nekter ved status≠approved, op-mismatch, fersk guardrail≠ok,
  eller drift (isDeepStrictEqual fresh vs approved guardrail-snapshot).
- applyApprovedAction (impur): arkiver-så-slett (rename skills/…→archive/…
  atomisk; retire rmdir'er tom katalog sist) + flipp ledger approved→applied.
  apply:false = preview (0 mutasjon). merge_skills → throw (S19).
- setActionStatus (ren, decisions-io.mjs): ledger status-transisjon, bevarer
  targets+guardrail, audit-record beholdes.
- CLI apply-skill-op.mjs {list|sanitize|retire} — default PREVIEW, --apply =
  dobbel-gate utover ledger-approved.

TDD, tmpdir-fixtures: 0 ekte skills/-mutasjon. Tester: kb-eval 66→78,
kb-update 132→137; validate 239 · kb-integrity 192/192 uendret.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 20:32:51 +02:00
f7b622b318 feat(ms-ai-architect): Sesjon 17 — B3 sanitize_skill + retire_skill dry-run-planners [skip-docs]
Speiler S16 merge-mønsteret: rene planners (leser ingen disk, anvender
ingenting) + impurt skall med gated --write. 0 skriving til skills/.
Intern kb-eval maintenance-tooling — ingen brukervendt /architect-kommando.

- planSanitizeSkill: fjerner KUN dødt innhold (kb-integrity orphan/dead-path).
  Guardrail refuserer fjerning av kuratert/manglende innhold (illegalRemovals/
  missingRemovals MÅ være tom). Dateless = kuratert, behandles ikke her.
- planRetireSkill: hel-skill m/ obligatorisk arkivering; guardrail refuserer
  hard delete (--hard -> archiveDir=null, ok=false). taxonomyOrphaned flagget.
- loadSkillOrphans (read-only) + runSanitizePlan/runRetirePlan (gated).
- CLI plan-skill-op.mjs utvidet: {sanitize|retire} <skill> [--hard].

Ekte dry-runs: sanitize ms-ai-security 62/33 orphans OK · retire
ms-ai-infrastructure 35 arkivert OK · --hard FAILED (blokkert). git clean.

TDD: test-skill-ops-sanitize-retire.test.mjs (16). kb-eval 50->66.
Baseline uendret: validate 239 · kb-update 132 · kb-integrity 192/192.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 17:45:37 +02:00
f03a0e08b2 feat(ms-ai-architect): Sesjon 16 — B3 ledger action-lag + merge_skills dry-run-planner
Spor B / B3 start. Operatør-gated dry-run for skill-livssyklus, merge først.

- decisions-io.mjs: additivt skill-nøklet `actions`-lag ved siden av urørt
  URL-nøklet `decisions` (14 URL-tester urørt = regresjonsbevis). version=1,
  loadDecisions backfiller manglende actions-nøkkel. Nye rene fn: actionKey
  (merge symmetrisk på paret), isActionDecided, recordAction (no-mutate),
  listActions. Policy A gjelder også actions.
- scripts/kb-eval/lib/skill-ops.mjs: ren planMergeSkills → {entry,diff,guardrail},
  leser ingen disk, anvender INGENTING. Guardrail = ingen kuratert verdi tapt
  (count-invariant + set-equality + kollisjons-deteksjon; ok=false ved klobring).
  Impur skall loadSkillRefs/runMergePlan + CLI plan-skill-op.mjs (gated --write).
- Ekte eng↔infra dry-run: guardrail OK (34+153=187, 0 kollisjoner), 153 fil-flytt
  + 7 taksonomi-reassign + retire eng; 0 skriving til skills/, ledger uendret
  (retning er operatør/judge-valg, ikke pushet gjennom gaten).
- TDD: test-decisions-actions (10) + test-skill-ops-merge (10, inkl. byte-for-byte
  skills/-snapshot som no-write-bevis). kb-eval 40→50, kb-update 122→132.
  Regresjon grønn: validate 239, kb-integrity 192/192.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 17:10:33 +02:00
ba597eb988 feat(ms-ai-architect): Sesjon 15 — B2 K10 søsken-scope-ikke-overlapp
- Refaktor: overlap-kjerne flyttet til scripts/kb-eval/lib/sibling-overlap.mjs
  (bryter sirkulær import eval.mjs<->detect); detect re-eksporterer → B1-tester urørt
- K10 = søsken-scope-ikke-overlapp, deterministisk cross-skill: perSkillSiblingOverlap
  + attachSiblingOverlap i eval.mjs. combined = boundaryTension + df-vektet leksikalsk;
  per-skill verdikt = verste søskenpar; terskel 7.0 (naturlig gap 7.42→6.67)
- Empirisk (alle 5): eng+infra FAIL (7.42 mot hverandre), advisor/gov/sec PASS
  → eng↔infra-signal mater B3 merge/saner (ikke blokkering)
- Gated baseline-regen via --write (descriptions urørt → judge K1/K4/K7/K8/K9 merget
  uendret, ikke fabrikkert); rubric K1-K10
- TDD: +9 tester (tests/kb-eval/test-k10-sibling-overlap.test.mjs), kb-eval 31→40
- 0 skriving til skills/. Suiter: validate 239 · kb-update 122 · kb-integrity 192/192
2026-06-20 11:59:59 +02:00
5ad4ed025c feat(ms-ai-architect): Sesjon 14 — B1 fullført (coverage/gap + bloat/stale) [skip-docs]
Utvider scripts/kb-eval/detect-skill-lifecycle.mjs med to deterministiske
detektorer (B1 nå komplett, 3 seksjoner i skill-lifecycle-report.json).
Skriver ALDRI til skills/ — kun rapport; kandidater mater decisions.json + gate (B3).
Intern kb-eval-tooling: ingen brukervendt kommando/agent/skill/hook endret.

Detektor 2 — coverage/gap (innen-domene): taksonomi category_skill (deklarert
eierskap) vs fysisk disk-mappetelling. Klasser gap/thin/orphan/misowned.
Empirisk: 21 deklarerte kat, 20 dekket, 1 gap (security-scoring — deklarert
men ingen disk-mappe; innhold bor i ai-security-engineering = fantom-rutekat),
2 tynne (development=1, platforms=5).

Detektor 3 — bloat/stale (per skill): K3-margin (eval.checkK3 body vs 500) +
dateless ref-andel (mangler Last updated:-header = uverifiserbar ferskhet).
Disk-only/deterministisk; poll-avledet staleness (change-report) bevisst utenfor.
Empirisk: 0 split-kandidater, 1 saner (ms-ai-governance 4/78 dateless).

TDD: 8 nye tester (coverage 4, stale-primitiv 1, bloat 3). kb-eval 23->31.
Gate: validate 239, kb-update 122, kb-eval 31, kb-integrity 192/192 — grønn.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 11:34:57 +02:00
2665a3a2d8 feat(ms-ai-architect): Sesjon 13 — B1 overlap-detektor (skill-livssyklus)
Spor B fase B1, første detektor (lag-1-analog på SKILL-granularitet).
PRODUSERER KUN RAPPORT — skriver aldri til skills/ (invariant bekreftet).

Detektor (scripts/kb-eval/detect-skill-lifecycle.mjs) kombinerer to
deterministiske overlapp-signaler per skill-par:
- grensetension: operatør-kuratert k1-trigger-prompts.json belongs_to-graf
  (out_of_domain = håndmerkede confusable-naboer), symmetrisk telt
- df-vektet leksikalsk trigger-surface-overlapp (1/df nedvekter domene-
  vanlige ord som «azure»; format-boilerplate «triggers» filtrert)
combined = grensetension + weightedScore.

Empirisk: eng↔infra topper (combined 7.42, tension 6, delt: architecture/
azure/data/multi) — operatørens Azure-deployment-grenseinstinkt bekreftet.
Surfaces som focusPair (operatør-utpekt B1-mål).

CLI: default human-summary · --json · --write (rapport gitignored som de
andre deteksjonsrapportene; detektor + kuraterte inputs er tracked).

TDD: 8 nye tester i tests/kb-eval/ (tokenize, surface, df, lexical, pairKey,
tension differensial-sjekk, full compute m/determinisme). Gate møtt.
Ingen regresjon: validate 239 · kb-update 122 · kb-eval 23 (15+8) · kb-integrity 192/192.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 11:17:19 +02:00
e8ceb7a8b4 docs(ms-ai-architect): Spor B plan godkjent — skill-livssyklus (krav 5+6, omdefinert)
Aktiverer de utsatte krav 5 (lage nye skills) + krav 6 (merge/saner/retire),
omdefinert per operatør-retning 2026-06-20:
- deteksjon først (ikke-destruktiv, driver ops)
- best-practice-bar = K1–K9 + K10 søsken-scope-ikke-overlapp
- INGEN nye domener (ikke Power Platform/Dynamics); tyngdepunkt merge/saner
  på de 5 eksisterende; create = dvelende kapabilitet
- Azure-deployment = grensesone eng↔infra (B1 første deteksjonsmål), bekreftet

Superseder kb-mechanism-redesign-plan.md:19 (krav 5/6 «UTE av scope») for Spor B.
3 faser B1 (deteksjon) → B2 (K10) → B3 (ledger+ops). Arkitektur-invariant arvet:
alle skill-ops via decisions.json + operatør-gate; aldri tap av kuratert verdi.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 11:09:11 +02:00
c778cf6cd2 fix(ms-ai-architect): Sesjon 12 — lukk SPOR A, ny eval-baseline (K1–K9 grønn alle 5)
Regenerert eval-baseline.json via gated `eval.mjs --write` så baselinen fanger
S9+S10+S11 judge-verdiktene (var pre-S9). Eneste endrede artefakt: baseline-fila
(123+/128−, ren regenerering — judge-felt null→populert fra data/judge-results.json).

Verifisert FØR skriving (read-only) og i resultatet:
- judge-cache: K1/K4/K7/K8/K9 PASS alle 5 (advisor K8=0.8 at-threshold, pass)
- deterministisk: K2/K3/K5/K6/refTall PASS alle 5
- ny baseline: 0 åpen FAIL K1–K9 på alle 5 skills, judge populert alle 5

SPOR A (krav 1–4) er nå komplett: K1 autoritativ+blindet (S11), 6×5 kanonisk (S8),
K4+K9 body-cleanup (S9 sec+gov, S10 eng+infra), skill-optimalisering refTall+K5 (S7).
eval-baseline.json er sannhetskilden og grønn på K1–K9.

Ingen regresjon: validate 239 · kb-update 122 · kb-eval 15 · kb-integrity 192/192.
NESTE: Spor B (scheduled deteksjon · kurs-spor #25 · low-currency · onboarding #26).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 10:11:45 +02:00
c1f75f9c78 fix(ms-ai-architect): Sesjon 11 — K1 trigger-presisjon, blindet judge PASS alle 5
(a) 2 description-fikser (operatør-godkjent):
- governance: +Schrems II/TIA-trigger (recall-gap 0.85→1.0; governance eier
  domenet — 20 ref-filer + data-residency-audit-monitoring.md)
- advisor: strammere — selection-forankret + eksplisitt negativ scope
  (NOT for build/secure/operate/legally-assess); fjernet bred
  "Microsoft AI architecture"-trigger som kolliderte med søsken

(b) Kuratert testsett + mekanikk:
- ny data/k1-trigger-prompts.json (100 prompts: 10 in + 10 adversarielt out/skill)
- judge-prompt.md K1: generer→konsumer kuratert sett + nytt skjema
  (inDomainHitRate/outDomainFalsePositiveRate/pass/misclassified, provisional=false)
- blindet måling: 5 Opus-dommere ser kun description + 20 stokkede umerkede
  prompts; ground-truth scoret deterministisk utenfor dommeren

Resultat: K1 PASS alle 5 — hit 1.0 / fp 0.0 / presisjon 1.0 / 0 miss.
Begge fikser validert i dommer-begrunnelsene. K2 fortsatt PASS.
Ikke regredert: validate 239 · kb-eval 15 · kb-update 122 · kb-integrity 192/192.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 10:00:47 +02:00
6b3c44adc3 fix(ms-ai-architect): Sesjon 10 — K9-destale eng+infra (volatil status → ref)
Begge S10-kriterier møtt (operatør-gated kald LLM-judge): engineering K9 PASS,
infrastructure K9 PASS. Deterministisk ikke regredert: validate 239 · kb-eval 15
· kb-update 122 · kb-integrity 192/192. K4 hevet 4→5 begge skills.

Engineering: modellversjoner (GPT-4o/Whisper/Florence/text-embedding-3) →
generisk kapabilitets-framing; MAF-«erstatter SK»-transisjon + Foundry Agent
Service GA → pekere; «Start med GPT-4o» (ABSENT i ref) droppet.

Infrastructure: SLA-tabell (ABSENT i ref) → relativ-veiledning + MCP-peker;
RTO/RPO-tabell → sammendrag + peker (ref bærer hele tier-modellen); «peak+30%»
(ref sier 20%) → generisk; Phi-3/Phi-4 + parametertall → «Phi-familien»
(fjernet faktafeil «Phi-4 14B»).

Metode: read-only verifiserings-agenter kartla ref-dekning FØR sletting.
judge-results.json oppdatert med ferske kalde eng+infra-verdikter (_updated: S10).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 09:31:21 +02:00
a9ff401b6e docs(ms-ai-architect): Sesjon 9 SPOR A-resultater i roadmap + STATE
Sesjon 9 RESULTATER i roadmap (metode, per-skill-endringer, S10-binding)
+ S9-rad i PLANLAGT-tabellen merket FERDIG. STATE peker paa Sesjon 10
(K9-destale engineering + infrastructure) som neste.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 07:37:12 +02:00
c4230d2e88 fix(ms-ai-architect): Sesjon 9 - K4+K9 body-cleanup security + governance
Tynner duplisert/volatil body-info i de to skills som feilet begge
kriterier, til pekere mot kanoniske ref-filer. Fersk operatør-gated
LLM-judge: security K4 5/5 + K9 PASS; governance K4 5/5 + K9 PASS.

Security (K9): Defender GA/preview/Azure-Gov-status, §3-ytelsestall,
GPT-4o-par og PTU break-even ut av body. Uverifiserte tall (20-50ms,
5-10x, 80% latens — fantes i ingen ref) droppet, ikke flyttet.
Security (K4): risikoklassifiserings-tabellen (divergerte fra rubrikk:
6 band vs 5, manglet Uakseptabel) + P10/P50/P90-tabellen (flat x0.6/x1.8
motsa kanonisk per-komponent-modell, agentens OBLIGATORISK-kilde) ->
peker. Antakelse-test bestaatt: ingenting asserter body-tallene.

Governance (K9): EU Data Boundary §2.3 - droppet volatile regioner
(Sweden Central/West Europe; body motsa refs som sier Norway East/West
Europe), repek kryss-ref til gdpr-compliance-ai-systems.md.
Governance (K4): §6.2 AI Act-tre - kollapset oppramsede (og ufullstendige)
Art.5 + Annex III-lister til pekere mot ai-act-classification-methodology.md;
§2.1 eneste oversiktstabell.

judge-prompt.md K9 strammet: stabile identifikatorer (forordningsaar,
OWASP 2025, MADR v3.0, saksnr) eksplisitt ute av scope. judge-results.json
oppdatert med ferske sec+gov-verdikter.

Gates: validate 239 · kb-eval 15 · kb-update 122 · kb-integrity 192/192.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 07:37:03 +02:00
2356d211ee docs(ms-ai-architect): Sesjon 8 SPOR A-resultater i roadmap + STATE
- Roadmap: «Sesjon 8 — RESULTATER» (6×5-vekting konsolidert til kanonisk
  rubrikk; varianttall, antakelse-test, ⚠ flagget risikotabell-divergens
  utenfor scope). Tabellrad 8 markert  FERDIG.
- STATE: S8 ferdig → NESTE = Sesjon 9 (K4+K9 body-cleanup sec+gov, inkl.
  K4-re-judge for security). kb-integrity 181→182.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 06:35:59 +02:00
a6bda85c6e fix(ms-ai-architect): Sesjon 8 - konsolider 6×5-vekting til kanonisk rubrikk
Løser K4-bug «DUPLICATION-WITH-CONTRADICTION»: security SKILL.md gjenga en
vekttabell (Identity 20/Network 15/Data 20/Content 20/Compliance 15/Mon 10)
som motstred den kanoniske rubrikken (Compliance 25/Data 20/Identity 20/
Content 15/Network 10/Mon 10) som security-assessment-agent allerede bruker.

- Rubrikk: ny seksjon «Arbeidsbelastnings-profiler (adaptiv vekting)» —
  Standard = kanonisk, + variantene Eksternt eksponert / Persondata-intensiv
  (godkjente retningsdeltaer re-forankret til kanonisk baseline; sum 100 %).
- SKILL.md: fjernet divergerende 3-kolonne vekttabell → peker til rubrikken.
  Beholdt risikoklassifiserings-tabellen (per roadmap).

Antakelse testet: ingen kode/test asserter SKILL.md-vekttallene (agent bruker
rubrikken). Verifisert: validate 239 · kb-integrity 182/182 · kb-eval 15/15 ·
eval security K3 212→203 (pass) / K5 0.2581 uendret / refConsistency 0 mismatch.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 06:33:27 +02:00
b32580f7e1 docs(ms-ai-architect): planlegg SPOR A-restsesjoner (S8–S12) + beslutninger
Operatør godkjente alle 4 anbefalinger (2026-06-20). Roadmap «SPOR A —
gjenstående sesjoner»: S8 6×5-vekting · S9 K4+K9 sec+gov · S10 K9 eng+infra ·
S11 K1 · S12 lukk (full LLM-judge + ny baseline). Hver med verifiserbart
kriterium + gated SKILL.md-skriving + LLM-judge for K4/K9/K1. STATE peker på
S8 som START HER. Tasks #28-32. Implementering starter neste sesjon.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 06:17:02 +02:00
2d27b3ffbd chore(ms-ai-architect): track STATE.md (avslutter stale polyrepo-gitignore)
STATE.md var gitignored fra polyrepo-splittet (d09e0e9) — den gamle konvensjonen
som den globale ~/.claude-regelen nå eksplisitt overstyrer ("STATE.md er tracked
og committes i hvert repo — ALDRI gitignored"). Uten dette persisteres ikke
sesjonsslutt-staten til Forgejo, hvilket bryter kontinuitetssystemets formål.
Fjernet kun STATE.md fra ignore; REMEMBER/ROADMAP/TODO/*.local.md forblir lokale.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 05:49:02 +02:00
797179fc5f docs(ms-ai-architect): Sesjon 7 SPOR A-resultater i roadmap + STATE
Roadmap «Sesjon 7 — RESULTATER» (refTall + dead-path + K5, deterministisk del
FERDIG). STATE peker på NESTE = SPOR A beslutning-gated rester (6×5-vekting,
K9, K4, K1 — krever operatør-input). Telling oppdatert: kb-integrity 181/181,
K5 navngitte per skill.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 05:47:26 +02:00
abac74fe67 feat(ms-ai-architect): Sesjon 7 steg 3 - K5 progressive disclosure (3 skills PASS)
Lukker K5-FAIL (navngitte fil-lenker / totale ref-filer ≥ 0,20) ved å følge
infrastructure-forbildet (0,97): full-sti `references/<mappe>/<fil>.md`-pekere
til kjernefiler, ikke bare mappe-refs.

Funn: security + advisor hadde filene navngitt allerede, men som BARE filnavn
uten `references/`-prefiks → ufanget av både eval-regex og kb-integrity (samme
klasse som de døde ref-paths i steg 2). Fiks = konverter til full sti:
- security:  10→16 navngitte (0,16→0,26). Konverterte 5 perf-filer (§3) + owasp (§1).
- advisor:    1→25 navngitte (0,016→0,40). Konverterte ~18 bare-filnavn i Kunnskaps-
              basen + la til model-catalog-2026 og entry-points for copilot-extensi-
              bility/prompt-engineering (40 filer som manglet ALLE navngitte pekere).
- engineering: 0→35 navngitte (0,0→0,23). Genuint 0 før; la til `> Kjernefiler:`-linje
              med 4-6 kuraterte filer per §1-7.

Bivirkning: kb-integrity-checks 115→181 (de nye full-sti-refsene valideres nå),
orphan-warnings 260→223. Verifisert: K5 PASS alle 5 · K3/refTall ikke regredert ·
validate 239 · kb-eval 15 · kb-update 122 · kb-integrity 181/181.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-20 05:44:53 +02:00
3c097f5fb4 fix(ms-ai-architect): Sesjon 7 steg 1+2 - refTall-konsistens + døde ref-paths
Lukker målte eval-FAIL i optimaliseringsfasen (krav 4):

Steg 1 (refTall): engineering agent-orchestration 20→24 (faktisk på disk)
+ total 149→153; governance npsg 29→30; fjerner inkonsistent 24/20-dobbel-
sitering. Verifisert: eval refCountConsistency PASS for alle 5.

Steg 2 (døde ref-paths i governance §4 monitoring-bullets — bare-filnavn,
derfor ufanget av kb-integrity): azure-monitor-ai-services-setup →
azure-monitor-setup-ai-workloads; drift-detection-automated-retraining →
model-performance-drift-detection. Begge fant ekte filer på disk (STATE
flagget kun den ene; den andre er et verifiseringsfunn). Grep: ingen døde igjen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 23:18:45 +02:00
0e0c43dc1a docs(ms-ai-architect): Sesjon 6-resultater i KB-redesign-roadmap
Lag 3 ferdig → alle 6 lag står. Roadmap markerer lag 3 done; gjenstår (operatør prioriterer): optimalisering krav 4, kurs-spor, scheduled deteksjon, low-currency, flere Source-backfills.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 22:58:10 +02:00
dab3f1d044 chore(ms-ai-architect): Sesjon 6 bootstrap - **Source:**-header på 3 entydige ref-filer
De 3 ref-filene som siteres av nøyaktig 1 URL med rent topisk treff får sin **Source:**-autoritetsheader (entydig, ingen gjetning): late-chunking-patterns→embeddings-tutorial, ai-red-team-operations-practical→ai-red-team/training, batch-api-usage-optimization→batch-blob-storage. authority_source-dekning 0→0,22%; lag-5 regel 3 nå virksom for disse filene.

Bevisst utelatt: ai-act-annex-iii-checklist.md — dens autoritet er EU-forordningen (deklarert **Hjemmel:** Regulation (EU) 2024/1689), ikke den tangentielle Purview-URLen den siterer. Å sette Purview som autoritet ville vært en gjetning som får regel 3 til å bomme (verifiseringsplikt).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 22:58:10 +02:00
e42a84fb7b feat(ms-ai-architect): Sesjon 6 - lag 3 verifisering-INN (authority-binding)
Lag 3 etablerer per-fil autoritetsbinding som mater verify-out regel 3 (autoritets-mismatch — regresjonens rotårsak, inert til nå pga 0% dekning). Designvalg (operatør 2026-06-19): HEADER-AS-TRUTH — en fils **Source:**-header ER den utpekte autoriteten. Gjetter ALDRI fra siterte URLer (251/303 filer siterer 4-10 → gjetning ville fått regel 3 til å bomme + 303 operatør-beslutninger = primær-fallgruven).

- lib/authority.mjs (ren lib, SKRIVER ALDRI; kun read-only kb-headers+url-normalize): resolveAuthority (validert http(s); fri tekst avvist; ikke-MS-autoritet som EU-forordning tillatt), collectDeclaredSources (normalisert Set), markUrlAuthority, authorityCoverage. - build-registry: recomputer authority_source per URL-entry fra headere (ikke carry-over) + dekningslogg. - commands/kb-update.md §4 c1: authority_source=resolveAuthority(fil) → lag-5 c2.

TDD: 11 tester FØR kode inkl. import-invariant + ende-til-ende regel 3 (source_url ≠ header-autoritet → flagged). Tester: validate 239 · kb-update 122 (+11) · kb-eval 15 · kb-integrity 115/115.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 22:58:10 +02:00
3ed32c343c docs(ms-ai-architect): Sesjon 5-resultater i KB-redesign-roadmap + STATE
Numerert roadmap (Sesjon 1–5) er ferdig; 6-lags-arkitekturen står strukturelt. STATE peker neste fase på operatør-valg: lag 3 verifisering-INN / optimaliserings-fase (krav 4) / kurs-spor / scheduled deteksjon / low-currency-bøtta.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 22:31:40 +02:00
48884b67a6 feat(ms-ai-architect): Sesjon 5 - transformasjonslag (lag 4, doc→KB-fil)
Lag 4 destillerer et hentet Microsoft Learn-dokument til en KB-referansefil. Speiler mønsteret fra decisions-io/verify-out: ren-funksjon-lib + tynn LLM-integrasjon + TDD. lib/transform.mjs SKRIVER ALDRI — returnerer content/verdict/sti; skriving skjer kun via operatør-gate etter lag 5.

Nøkkelfunn/-fiks: gammel prompt-template.md la kilder i en bunn-seksjon, men build-registry/kb-headers.parseSourceHeader skanner kun øverste 500 bytes → authority_source-dekning = 0 %. Lag 4 legger **Source:** i HEADER-blokka — forutsetningen for at lag 3 (fremtidig) kan backfille authority_source og lag-5 regel 3 fyrer.

- buildKbHeader({title,status,category,source,lastUpdated}): Status+Source obligatoriske (kaster ved mangel). - validateKbFile(content) → {valid,missing[]}; bruker parseSourceHeader (én sannhetskilde med build-registry). - buildChange(...): eksplisitt lag-4→lag-5-bro, mater classifyChange. - resolveTargetPath(tax,category,filename): ruter via taksonomi getCategorySkill; null=ukjent→gate.

Prompt: scripts/kb-update/transform-prompt.md (doc→KB; husformat fra prompt-template.md, status-påstander eksplisitte for lag-5-gaten). Wiret i commands/kb-update.md §3.d (ny godkjent URL→fetch→destillér→header→validate→buildChange→lag5→resolveTargetPath→gate→atomisk) + §4.d (oppdateringer passerer validateKbFile). eval.mjs eksporterer nå evalSkill for kriterium-testen.

Kriterium møtt: «regenerer 1 fil → eval-score ≥ baseline» (test-transform-criterion.test.mjs). TDD: 12 lib-tester (inkl. import-invariant: ingen write-utils) + 2 kriterium FØR kode. Tester: validate 239 · kb-update 111 (+16) · kb-eval 15 (+2) · kb-integrity 115/115.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 22:31:26 +02:00
94a5d1bb14 feat(ms-ai-architect): Sesjon 5 carry-forward B — datoløse filer → unverified-tier
Rotårsak: en datoløs ref-fil fikk effectiveDate=0000-01-01 (alltid «stale») OG en path-basert prioritet (kunne bli critical) → flommet critical-bøtta og druknet genuint kritiske filer. Fix: ny unverified-tier deklarert i domain-taxonomy.json (lag 0, eneste sannhetskilde for prioritet).

makePriorityFn(tax) tar nå valgfri hasDate (default true → bakoverkompatibelt for eksisterende én-args-kallere); report-changes sender Boolean(fileDate). unverified rangerer sist i sorteringen — manglende dato er metadata-hygiene, ikke currency-hast. Ekte registry: 1 fil skilt ut som Unverified.

TDD: 4 tester FØR kode (test-priority-unverified.test.mjs).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 22:31:25 +02:00
97aa5d3378 chore(ms-ai-architect): Sesjon 5 carry-forward A — slett ukonsumert category-skill-map.json
Map-fila divergerte fra disk-sannhet i 4 entries og var ukonsumert av all runtime (verifisert: docs/development.md erklærte allerede taksonomien som eneste kilde; kun README kalte den feilaktig «used by generate-skills»). Operatør-valg 2026-06-19: slett + rydd README. Fjerner en av de divergerende taksonomiene redesignet finnes for å eliminere.

README.md peker nå på scripts/kb-update/data/domain-taxonomy.json via lib/taxonomy.mjs getCategorySkill (disk-sann).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 22:30:49 +02:00
3bbcd9168b docs(ms-ai-architect): fold 2 carry-forward cleanups inn i Sesjon 5
Operatør-valg 2026-06-19: category-skill-map-stale (4 entries) + datoløse-fil-
reklassifisering i getFilePriority tas i Sesjon 5 sammen med lag 4, ikke som
egen cleanup. Binding-fakta (disk-sannhet per entry, §151/§152) festet i
roadmap så neste sesjon har presist scope.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 22:06:03 +02:00
7bd94e8e27 docs(ms-ai-architect): Sesjon 4-resultater i KB-redesign-roadmap + STATE
Markerer lag 5 (verifisering-ut) ferdig: kriterium møtt (agentic-retrieval-
fixtur → flagged, ikke auto-applied). Roadmap-tabell rad 4  + resultatseksjon.
STATE peker på Sesjon 5 (lag 4 transformasjon). Tester: kb-update 95.

Carry-forward flagget: category-skill-map stale + datoløse-reklassifisering
(operatør avgjør Sesjon 5 vs egen cleanup); authority_source 0 % → regel 3
inert til lag 3 verifisering-INN.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 22:02:34 +02:00
6af3624b17 feat(ms-ai-architect): Sesjon 4 - verifisering-ut (lag 5) + adversarial regresjonstest
Lag 5 kjører ETTER transformasjon (lag 4) og FØR en kandidat-endring skrives til
en KB-fil. Den fanger regresjons-klassen: en status-påstand «korrigert» mot en
tilfeldig sitert side og stille auto-applyet (den kjente agentic-retrieval-
regresjonen — hovedkontekst måtte rette manuelt).

Regel (spec §21): status-påstander (GA/preview/versjon/pris) flagges ALLTID for
operatør, aldri auto-applyet — uansett hvor sikker evidensen ser ut.

- lib/verify-out.mjs: ren klassifiserer, null deps (speiler decisions-io).
  detectStatusClaim(text) → {isStatus, kinds}; classifyChange(change) →
  {verdict: flagged|auto-applied, status_claim, reasons}. Tre flag-regler:
  status-gate (§21) · adversarial refutering · autoritets-mismatch (regresjonens
  rotårsak). Konservativ med vilje: ved tvil flagges. SKRIVER ALDRI.
- Fixtur tests/fixtures/kb-update/agentic-retrieval-regression.json: den kjente
  regresjonen (flat «GA» mot nyansert «delvis GA … resten preview»).
- TDD: 13 tester før kode, inkl. import-invariant (ingen write-utils).
- Wiret i kb-update.md §4 c2 (lag 5 mellom identifiser-endring og skriv).

Kriterium møtt: fixtur → flagged:true, ikke auto-applied.
Tester: validate 239 · kb-update 95 (+13) · kb-eval 13 · kb-integrity 115/115.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 22:00:36 +02:00
57166e82d6 docs(ms-ai-architect): Sesjon 3-resultater i KB-redesign-roadmap
Per-sesjon-resultater + Sesjon 4-peker (verifisering-ut, lag 5).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 21:48:03 +02:00
fe484ec323 feat(ms-ai-architect): Sesjon 3 - decision-ledger (lag 2) + discovery-dedup
Lukker discovery-løkken gjennom operatør-gaten. data/decisions.json er eneste
skrive-autoriserte bro mellom deteksjon og KB/registry; discovery LESER den og
utelater alt operatøren har tatt stilling til.

Dedup-policy = A (operatør-valg): isDecided = enhver ledger-entry (approved/
rejected/pending). Kun helt fraværende URLer re-foreslås.

- lib/decisions-io.mjs: createLedger/load/save(atomisk)/isDecided/recordDecision
  (ren)/filterUndecided. TDD: 10 tester før kode.
- discover-new-urls.mjs leser ledger, filtrerer, rapporterer deduped_by_ledger.
  Importerer ALDRI write-utils (invariant verifisert, 6 guard-tester).
- Gate dokumentert i kb-update.md §3b (eneste skrivevei).
- decisions.json tracket via gitignore-negasjon (som domain-taxonomy.json).

Kriterium møtt: dedup-diff (rejected re-foreslås ikke runde 2).
Tester: validate 239 · kb-update 82 (+16) · kb-eval 13 · kb-integrity 115/115.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 21:48:03 +02:00
444b9a375a docs(ms-ai-architect): spor onboarding-mekanisme-redesign som kommende fase
Operatør-flagget kritisk for brukervennlighet (2026-06-19): virksomhetskontekst
må være ambient i enhver interaksjon, overleve oppgraderinger/reinstall, og bære
fritekst utover de formelle spørsmålene. Dagens mekanisme (org/*.md, gitignored,
i plugin-katalog, betinget per-agent-lesing) oppfyller ingen av delene.

Brief, ikke godkjent plan — design godkjennes separat. Egen fil i docs/ per
ingen-lokale-kontinuitetsmekanismer-regelen.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 21:48:03 +02:00
17865a251b docs(ms-ai-architect): konkret Sesjon 3-startplan i roadmap (handoff)
7-stegs startplan for lag 2 (decision-ledger data/decisions.json + dedup som
lukker discovery-loopen gjennom operator-gaten), m/ kjorbart kriterium
(discovery 2x re-foreslar ikke rejected URL) og invariant-guard (deteksjon
importerer aldri write-utils). Speiler Sesjon 2-monsteret (ren-funksjon-lib +
tynn script + TDD). Sikrer at neste sesjon starter uten re-utledning.

Inkluderer 2 Sesjon 2-funn som Sesjon 3-kandidater (category-skill-map stale,
datolose-reklassifisering) + eksplisitt ikke-i-scope.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 21:18:08 +02:00
c7147618c9 docs(ms-ai-architect): Sesjon 2-resultater + oppdater match-rate/taksonomi-doc
Roadmap: Sesjon 2 RESULTATER (begge kriterier mott - grep TARGET_PREFIXES==0,
foundry not_in_sitemap 38.4%<50%). Binding Sesjon 3-funn: category-skill-map.json
stale i 4 entries (disk er kanon, map ukonsumert av kode), datolose-reklassifisering
utsatt, foundry/openai-tail (63 ikke-probet).

development.md: oppdatert match-rate (~73% av 1343), ai-foundry->foundry-remap,
ny taksonomi-seksjon (lag 0, domain-taxonomy.json eneste sannhetskilde).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 21:12:32 +02:00
d3af3f73c8 feat(ms-ai-architect): Sesjon 2 - ai-foundry->foundry registry-remap
Microsoft rebranet Azure AI Foundry -> Microsoft Foundry; doc-URLer flyttet
/azure/ai-foundry/ -> /azure/foundry/. Ny lib/registry-migrate.mjs (rene
funksjoner remapKey + migrateRegistry, 10 enhetstester) + one-shot
migrate-ai-foundry.mjs (backup via lib/backup.mjs + atomisk saveRegistry).

Remap: 164 ai-foundry-URLer -> foundry (2 probede DEAD-sider far eksplisitte
mal: evaluation-evaluators -> built-in-evaluators; agent-service ->
agents/overview). Remappede entries resettes til status=unpolled/lastmod=null
sa neste poll re-evaluerer. 1 kollisjon merget (ref_files unionert).
Schema-migrering: authority_source+course lagt til alle 1343 entries.
Idempotent. Registry er gitignored (regenererbar) - kun kode committes.

kb-update 66 tester gronne, validate 239.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 21:09:00 +02:00
eb2a002c2c feat(ms-ai-architect): Sesjon 2 - registry-skjema (authority_source + course reservert)
build-registry leser na **Source:**/**Primary source:**-header via ny
lib/kb-headers.mjs (parseSourceHeader, 7 enhetstester) og logger dekning
(0/N i dag). Hver URL-entry far reserverte felt authority_source:null +
course:null (bakoverkompatibelt). Populering med korrekt semantikk utsatt
til verifiseringslaget (lag 3) - minimal-reservert per operator-valg.

Eksisterende status-felt (poll: tracked/not_in_sitemap/unpolled) urort for
a unnga kollisjon. kb-update 56 tester gronne.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 21:05:54 +02:00
8bea3a224a feat(ms-ai-architect): Sesjon 2 lag 0 - konsolider taksonomi til en sannhetskilde
Ny data/domain-taxonomy.json (tracket via gitignore-negasjon; generert
registry/rapporter forblir ignorert) konsoliderer de 4 divergerende
taksonomiene: (a) sitemap-prefikser, (b) discover INCLUDE/EXCLUDE,
(c) category->skill, (d) getFilePriority. lib/taxonomy.mjs laster + kompilerer.

Refaktor: poll-sitemaps, discover-new-urls, report-changes LESER taksonomien
(ingen embeddede kopier). Kriterium grep TARGET_PREFIXES=[ == 0 oppfylt.

Konsolideringsfunn:
- category-skill-map.json stale i 4 entries (copilot-extensibility,
  monitoring-observability, performance-scalability, prompt-engineering ->
  sa engineering; disk sier advisor/governance/security/advisor). DISK er
  kanon. Map-en er ukonsumert av kode (kun README) -> flagget, ikke rort.
- discover fikk poll-paritet (12 -> 18 sitemap-prefikser).
- skill utledes na fra kanonisk category_skill -> ingen divergens (invariant-test).

Adferdsbevarende: 0 mismatch old vs ny prioritetslogikk pa 51 endrede filer;
discover sine hardkodede skill-verdier matchet allerede disk.
Tester: validate 239, kb-update 49 (+7 taksonomi), kb-eval 13 - alle gronne.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
2026-06-19 21:02:59 +02:00