ms-ai-architect/docs/skill-lifecycle-spor-b-plan.md
Kjell Tore Guttormsen 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

102 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Spec — Spor B: Skill-livssyklus (ms-ai-architect)
_Plan-input (operatør-retning 2026-06-20, IKKE ferdig-godkjent ennå). Avløser «Spor B»-stikkordene i `kb-mechanism-redesign-plan.md` linje 281/383. Implementeres én sesjon per økt, per-fase gated; STATE.md peker på neste sesjon. Sti-konvensjon: relativt til plugin-rot._
## Hva dette er
Spor A (krav 14) er komplett: mekanismen holder de **eksisterende** 5 skillene oppdatert, komplette og målbart optimaliserte (K1K9 grønn, lag 06 står). Spor B aktiverer de to kravene som ble **utsatt** (ikke forkastet) 2026-06-19:
- **Krav 5 — lage nye skills profesjonelt.** (`kb-mechanism-redesign-plan.md:90`)
- **Krav 6 — slå sammen / slette / sanere skills (livssyklus, destruktive ops).** (`kb-mechanism-redesign-plan.md:91`)
Forutsetningene er nå innfridd: krav 5 «forutsetter lag 03» og krav 6 «vurderes etter at lag 16 står» — alt står.
> **Scope-endring (eksplisitt):** `kb-mechanism-redesign-plan.md:19` listet krav 5/6 som «UTE av scope». Denne planen flytter dem **inn** i scope, men **omdefinert** (se under). Linje 19 er dermed superseded av dette dokumentet for Spor B.
## Operatør-retning 2026-06-20 (binder denne planen)
1. **Deteksjon først.** Bygg skill-granulær deteksjon (ikke-destruktiv, kun forslag); create/merge/saner drives av det deteksjonen finner.
2. **Best-practice-bar = K1K9 + overlapp-kriterium.** Behold K1K9 (nå grønn); legg til ett nytt førsteklasses kriterium: søsken-scope-ikke-overlapp.
3. **INGEN nye domener.** Ikke Power Platform, ikke Dynamics 365. De 5 skillene dekker domenerommet. → Tyngdepunktet forskyves fra *create* til **merge/saner på de eksisterende 5**. Create bygges som **dvelende kapabilitet** (mekanismen finnes og valideres, men ingen ny domene-skill shippes nå).
### Åpen antakelse — MÅ bekreftes før B1 bygges
Operatør sa: «det eneste [nye dekningsområde] måtte være **overlapp mot Microsoft Azure for deployment**». Tolkning lagt til grunn: dette er IKKE en ny skill, men en **grensesone** mellom eksisterende `ms-ai-engineering` («bygge») og `ms-ai-infrastructure` («drifte») rundt Azure-deployment/-drift. → Brukes som **det konkrete første deteksjonsmålet** i B1 (overlap-detektoren ser spesifikt på engineering↔infrastructure-grensen). Hvis tolkningen er feil: korriger før B1.
## Arkitektur-invarianter (arvet fra Spor A — ufravikelig)
- **Ingen direkte KB-/skill-skriving.** Deteksjon/verifisering/transformasjon skriver ALDRI til `skills/` direkte — kun via `decisions.json` etter operatør-gate. Lag 3/4/5 returnerer kun data/verdict.
- **Aldri tap av kuratert verdi.** Destruktive ops (merge/saner/retire) har obligatoriske guardrails som beviser at kuratert innhold er bevart (ref-fil-invariant + diff vist før apply).
- **TDD.** Test før kode. Deterministiske kriterier regrederer aldri (`eval --json` + de fire suitene = akseptansemål: validate 239 · kb-update 122 · kb-eval 15 · kb-integrity 192/192).
- **Kontinuitet:** kun STATE.md/MEMORY.md/CLAUDE.md + `docs/`-referanser.
---
## Fase B1 — Skill-granulær deteksjon (oppdage) · ikke-destruktiv
**Problem:** Dagens deteksjon (lag 1) jobber kun på referansefil-nivå; `SKILL.md` er eksplisitt ekskludert (`build-registry.mjs:27`). Ingenting resonnerer om skill-overlapp, dekningshull eller oppblåsthet.
**Mål:** Tre detektorer som resonnerer på SKILL-nivå og produserer KUN en rapport (`scripts/kb-eval/data/skill-lifecycle-report.json`), aldri skriving til `skills/`.
1. **Overlap-detektor** — gjenbruk K1-mekanikken (`data/k1-trigger-prompts.json`, blindet judge) men cross-skill: hvilke prompts trigger >1 skill? Output: overlapp-par + styrke. **Første konkrete mål: engineering↔infrastructure (Azure-deployment-grensen).**
2. **Coverage/gap-detektor (innen-domene)** — per taksonomi-kategori: er den eid + dekket (ref-fil-antall vs forventet)? Flagg tynne/ueide kategorier. Ingen nye domener — kun hull *innenfor* det dekkede.
3. **Bloat/stale-detektor (per skill)** — K3-margin (body-linjer mot 500) + aggregert ref-stale-andel per skill → split-/saner-kandidat.
**Leveranser:** `scripts/kb-eval/detect-skill-lifecycle.mjs` (+ libs etter behov) · `data/skill-lifecycle-report.json` · tester `tests/kb-eval/test-skill-lifecycle-detect.test.mjs`.
**Gate-kriterier (verifiserbare):**
- `node scripts/kb-eval/detect-skill-lifecycle.mjs` kjører, skriver gyldig `skill-lifecycle-report.json` med de tre detektor-seksjonene; **0 skriving til `skills/`** (bekreft med `git status` etter kjøring).
- Overlap-detektoren rapporterer engineering↔infrastructure-paret med en tallfestet overlapp-score.
- Nye tester grønne; de fire eksisterende suitene uendret (239/122/15/192).
---
## Fase B2 — Best-practice-bar: K10 søsken-scope-ikke-overlapp (definere)
**Mål:** Utvid rubrikken med ett nytt kriterium **K10 = søsken-scope-ikke-overlapp** (deterministisk der mulig: cross-skill trigger-kollisjon fra B1-mekanikken; semantisk i `judge-prompt.md` der nødvendig). Dette er baren merge/create-beslutninger hviler på.
**Leveranser:** K10 i `eval.mjs` og/eller `judge-prompt.md` · måling på alle 5 · gated regenerering av `eval-baseline.json` · oppdatert `kb-eval`-test (forventet ny telling) · STATE/roadmap-tall.
**Gate-kriterier:**
- K10 definert og målt på alle 5; resultat dokumentert. (Forventning: kan avdekke FAIL — det er signalet som mater B3 merge/saner, ikke en blokkering.)
- Baseline regenerert via gated `--write`; `kb-eval`-suiten grønn med ny telling.
- K1K9 ikke regredert.
---
## Fase B3 — Ledger-utvidelse + livssyklus-ops (opprette / slå sammen / sanere) · krav 5 + krav 6
**Mål:** Utvid `decisions.json` med skill-nivå action-typer og bygg ops som gated transformasjoner (lag-4-analog på skill-granularitet), hver med guardrails. Alt via operatør-gate.
**Ledger-utvidelse:** legg `action`/`operation_type` i `decisions-io.mjs`-skjemaet: `merge_skills`, `sanitize_skill`, `retire_skill`, `create_skill`. (Dagens skjema er URL-nøklet, har ikke `action`-felt — `decisions-io.mjs`.)
**Ops (prioritert per operatør-retning):**
- **merge_skills (aktiv).** Guardrail: pre/post ref-fil-antall bevart (ingen tap), begge descriptions forsont, `category_skill` i taksonomi oppdatert, kryss-refs fikset, absorbert skill retired. Dry-run produserer `decisions.json`-entry + full diff; ingenting anvendt uten eksplisitt godkjenning.
- **sanitize_skill (aktiv).** Kun dødt innhold (orphan-refs, dead paths fra `kb-integrity`-warnings) — diff vist; aldri kuratert innhold.
- **retire_skill (aktiv, sjelden).** Hel-skill kun via eksplisitt gate + arkivering (aldri hard delete uten arkiv).
- **create_skill (dvelende).** Scaffold som passerer K1K10 fra fødsel; valideres mot et test-domene, men **ingen ny domene-skill shippes** (svar 3). Beviser at mekanismen finnes.
**Gate-kriterier:**
- `decisions-io.mjs`-skjema utvidet + tester for hver action-type (round-trip, dedup).
- merge: guardrail-test beviser at ALLE ref-filer fra begge skills finnes etter merge (count-invariant + sett-likhet).
- Hver op har dry-run som skriver decisions-entry + diff og anvender INGENTING uten godkjenning (test bekrefter no-write uten approval).
- create: scaffold-output passerer `eval.mjs` K1K10 grønt for test-skillen.
- De fire suitene + K1K10 ikke regredert.
---
## Ute av scope (Spor B)
- Nye domener (Power Platform, Dynamics 365, etc.) — eksplisitt nei.
- Restpunkter fra Spor A-stikkordene som ikke er skill-livssyklus: scheduled deteksjon · kurs-spor #25 · low-currency-bøtta (51) · bredere Source-backfill · onboarding-redesign #26. (Beholdes på roadmap; tas separat.)
## Sesjons-sekvens (foreløpig)
| Sesjon | Innhold | Gate |
|--------|---------|------|
| 13 | B1 overlap-detektor (eng↔infra Azure-deployment først) | report m/overlapp-score, 0 skill-skriving |
| 14 | B1 coverage/gap + bloat/stale-detektorer | full `skill-lifecycle-report.json`, tester grønne |
| 15 | B2 K10 + gated baseline-regen | K10 målt alle 5, baseline grønn |
| 16+ | B3 ledger-utvidelse + ops (merge/saner først) | guardrail-tester, dry-run no-write |
_Tall er foreløpige; én feature per sesjon, gated. create_skill (dvelende) tas sist._