From e8ceb7a8b40d6dec3189530b965df4aab821d13a Mon Sep 17 00:00:00 2001 From: Kjell Tore Guttormsen Date: Sat, 20 Jun 2026 11:09:11 +0200 Subject: [PATCH] =?UTF-8?q?docs(ms-ai-architect):=20Spor=20B=20plan=20godk?= =?UTF-8?q?jent=20=E2=80=94=20skill-livssyklus=20(krav=205+6,=20omdefinert?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ --- docs/skill-lifecycle-spor-b-plan.md | 102 ++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 docs/skill-lifecycle-spor-b-plan.md diff --git a/docs/skill-lifecycle-spor-b-plan.md b/docs/skill-lifecycle-spor-b-plan.md new file mode 100644 index 0000000..67d8742 --- /dev/null +++ b/docs/skill-lifecycle-spor-b-plan.md @@ -0,0 +1,102 @@ +# 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 1–4) er komplett: mekanismen holder de **eksisterende** 5 skillene oppdatert, komplette og målbart optimaliserte (K1–K9 grønn, lag 0–6 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 0–3» og krav 6 «vurderes etter at lag 1–6 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 = K1–K9 + overlapp-kriterium.** Behold K1–K9 (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. +- K1–K9 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 K1–K10 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` K1–K10 grønt for test-skillen. +- De fire suitene + K1–K10 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._