ms-ai-architect/docs/plugin-roadmap-2026-07.md
Kjell Tore Guttormsen 5a0e8d774a feat(ms-ai-architect): R21 — Status-backfill på 14 advisor-ref-filer (redusert scope etter premiss-korreksjon) [skip-docs]
Manifest-drevet applier (scripts/kb-update/backfill-status.mjs) over den testede
insertMetaField-primitiven + ny ren regel statusForFile (filnavn-token → Reference/
Established Practice, operatør-godkjent vokabular). 7 Reference + 7 Established Practice.
Hard per-fil-invariant (én linje, body byte-identisk), idempotent, isMain-guard. 7 tester.

Premiss-korreksjon (auditHeaders, ground-truth 2026-07-06): ekte not-due-restanse er
21 Status + 26 Last-updated (STATE sa 21/22). «0 har norsk dato» var falskt — 21/26
Last-updated-gap bærer allerede Sist oppdatert/Dato → relabel-residual; 5 datoløse gir
«i dag» ved naiv git → utsatt. 4 dual-header ai-act-*-filer med plain-text «Status: GA»
fanget i diff-inspeksjon → revertert (unngår duplikat/motsigelse) → residual (samme
plain-blokk ga R20 duplikat Category). Korrigert residual logget i roadmap §R21.

Verifisering: test-backfill-status 7/7; git diff +14/-0 (kun Status-linjer, body
byte-identisk); not-due Status-missing 21→3; full suite 771/771 exit 0.
2026-07-06 09:41:40 +02:00

20 KiB
Raw Blame History

Plugin-roadmap: sesjonsplan R0R21 (2026-07)

Styrende sesjonsplan for ms-ai-architect fra 2026-07-02, basert på full statusanalyse (visjon/planer, ground-truth-audit m/testkjøring, Spor 1-planlesing). Erstatter IKKE eksisterende planer (korrekthetsprogrammet, Spor 1-planen, briefer) — sekvenserer dem og fyller hullene analysen avdekket. Operatør-detaljer som ikke hører hjemme i repoet ligger i en LOCAL-ONLY-annex (.claude/projects/2026-07-02-helhetlig-roadmap/).

Status 2026-07-02: måle-/hardningsfasen av korrekthetsprogrammet er ferdig (judge v3.1 P100/R100, alle §8-gap lukket, suite 641/641, alle skills ≥90) — men mekanismen er dormant til Spor 1 kjøres. Gapet mellom visjon («reference-filene 100 % til å stole på» som prosessgaranti) og realitet er nøyaktig de ueksekverte sporene under.

Modelldirektiv

Alle sesjoner i denne roadmapen + alle deres subagenter kjøres på Opus 4.8 med xhigh reasoning effort (operatørbeslutning 2026-07-02). Aldri Sonnet/Haiku. Agent-tool: model: "opus".

Prinsipper

  1. Én sesjon = én fullført enhet: hver sesjon avsluttes med suite grønn (exit-kode), commit + push, STATE.md overskrevet med neste sesjons-ID.
  2. Split-regel: blir en sesjon for stor midtveis → fullfør en HEL delmengde (per skill / per batch), commit, la STATE peke på resten som egen sesjon. Aldri halvferdig tilstand.
  3. TDD Iron Law for all produksjonskode; aldri auto-fiks KB (judge/audit flagger → menneske bekrefter mot kilde → fiks).
  4. Scope-fence: sesjonens innhold er grensen; muligheter utover foreslås i sluttrapporten, utføres ikke.
  5. Provenans-regel (ny): hvert tall som skrives i STATE/docs bærer scope + målemetode i én linje (analysen 2026-07-02 brukte en hel avstemmingsrunde på å re-utlede at «45» var non-advisor-scoped).

Sekvens og avhengigheter

R0 (tillit+hygiene+klargjøring)
 └─→ R1 → R2 → R3 → R4   (Spor 1 substrat via /trekexecute; release v1.17.0 i R4)
        └─→ R5 (Spor 0-fiksing)
              └─→ R6 (judge-pass brief+plan) → R7…R10 (korpus-pass; antall fastsettes i R6)
                    └─→ R11 (flag→fiks) → R12 (§7 fersk-gull — programmets sluttbevis)
                          └─→ R13 → R14 (S-Cosmo, sist i programmet)
                                └─→ R15 (skill-eval v2 plan) → R16+ (eksekvering)
Fleksible (uavhengige, kan interleaves): R17 (dekningsaudit), R18 (onboarding-uplift)
Ungated base-felt-pre-pass (⊥ R7, i R7-vente-vinduet): R20 (Category-backfill ✅ 2026-07-06) → R21 (Status/Last-updated not-due)
Parkert (eget operatør-go): OKF second brain · pris/unsourced-verifisering

R0 — Tillit, dok-hygiene og Spor 1-klargjøring (kort økt)

Mål: fjern alt som kan villede fremtidige sesjoner eller svekke tillit, og gjør Spor 1-planen eksekverbar.

  1. Sanering: fjern identifiserende personkontekst fra ett tracked dokument (utpekt i LOCAL-ONLY-annexen) + søk hele tracked-treet for samme mønster; historikk-håndtering = operatørbeslutning dokumentert i annexen.
  2. Utracket brief: docs/skill-validation-routine-brief-2026-07.md — public-egnethetssjekk → commit (eller flytt til .claude/projects/ hvis intern).
  3. CLAUDE.md: rett de to stale pekerne → skills/ms-ai-advisor/references/architecture/recommended-mcp-servers.md.
  4. Tellinger: fjern «398 inkl. plugin-nivå» overalt (plugin-nivå references/ har aldri eksistert; 389 er totalen).
  5. Programdok: §6-statustabell à jour med §8 (Spor 2a/2b/3 lukket 2026-06-30); historisk-merknad på 84,2-tallene i intro.
  6. Workflow-plan: superseded-peker øverst → programdokumentet.
  7. development.md: fjern «For Cosmo»-instruksen — produserer aktivt ny drift mot aldri-ny-Cosmo-regelen.
  8. STATE-korreksjoner: registry-semantikk (2 disk-filer mangler i registry — ikke «stale cache»); Status-tall 31→29 (målt 2026-07-02, non-advisor); provenans-regelen innføres.
  9. P0-beslutninger (operatør, minutter): velsign Spor 1-planens Assumption #1 (fjern stale **Verified:** MCP på de 14 filene) + bekreft TOC-scope-default (alle 324 store filer).
  10. Plan-patch: legg manifest-re-entrans-vakt inn i Spor 1-planen (klassifiserer-CLI --write skal nekte/merge når manifestet er beriket med resolvedBy/source) + re-valider planen.

Verifisering: grep -rn 'references/architecture' CLAUDE.md viser kun skills-prefiks · grep -rn '398' CLAUDE.md docs/ → 0 relevante treff · sanering bekreftet med søk → 0 treff i tracked filer · plan-validator strict exit 0 · suite exit 0 · commit + push, git status --short ren.

R1R4 — Spor 1 substrat-migrering (4 økter, strengt sekvensiell)

Kjøres via /trekexecute --project .claude/projects/2026-06-30-spor1-corpus-migration (lokalt planprosjekt, 11 steg / plan v1.7+). Roadmapen dupliserer ikke stegene — kun sesjonsgrenser og sluttkriterier:

  • R1 = Session 1 (Steg 14): header-audit → typeklassifiserer-core (TDD) → CLI + manifest persistert (--write, 389 entries, union == uavhengig målt live-tall) → edge-review via subagenter, manifest finalisert. Verifisering: manifest med 389 entries, reviewFlag:false overalt; suite exit 0.
  • R2 = Session 2 (Steg 56): insertHeaderFields + kirurgisk normalizeStaleVerified (TDD; first-match/----aware/pipe-safe) → authority-URL per reference-fil (deterministiske tie-breaks → subagent → defer-not-guess). Verifisering: suite exit 0; manifest source-beriket; defer-listen eksplisitt (aldri gjettet URL).
  • R3 = Session 3 (Steg 78): migrate-corpus.mjs unified applier (TDD: backup + atomisk skriv + advisor-fence + per-felt-idempotens + post-write-assert) → akseptansetester skrevet FØR kjøring. Verifisering: suite exit 0 inkl. nye akseptansetester.
  • R4 = Session 4 (Steg 911): kjør migreringen (~327 Type / ~253 Source / 324 TOC / 14 stale-verified fjernet) → re-score (CT5 available:true, N4 ~1) + worklist-aktivering + docs/spor1-migration-outcome.md (transient Spor D sub-90 merkes som policy-artefakt) → hygiene + full suite. Deretter batch-release v1.17.0 (release-plugin.mjs, check-versions.mjs 0 ERROR).

Eskaleringsregel (fra plananalysen): per-fil post-write-assert-feil i Steg 9 → restore + stopp + rapporter; «logg som defer og fortsett» er ikke tillatt uten plan-revisjon.

R5 — Spor 0: de 38+4 kjente innholds-fiksene (1 økt, split per skill ved behov)

Påfør spor0-fix-manifest.json (38 fikser / 25 filer) + G5b-fillisten (adr-template.md, multi-region-azure-openai-deployment.md, network-resilience-patterns-ai.md, vector-storage-cost-optimization.md). Mønster: subagent-fan-out henter/bekrefter kilde per fiks (v3.1-fanout-runbook som mal); hovedkontekst redigerer; tvilstilfeller → operatør. Forutsetning: R4 ferdig (substratet i ro). Verifisering: manifest 38/38 applied m/kilde-URL per fiks; suite exit 0.

R6 — Korpus-judge-pass: brief + plan (1 planleggingsøkt, Voyage)

Selvbærende brief + adversarielt reviewet plan for v3.1-judgen over alle verifiserbare påstander i non-advisor-korpuset (~2146 fetches, ikke resume-safe → sesjons-batchet design med per-batch-manifest). Briefen skal inkludere: (a) G2-restgapet — generaliser stempel-guarden i transform.mjs FØR evt. judge-minor-bump; (b) beslutning retire vs. harden TOC-backfill-scriptet (unified applier transform.insertToc har overtatt; retire — utført R6 Step 6); (c) flaggformat som mater R11 direkte; (d) G6 ingestion-gate (§8): design to-lags sikkerhetsgate for all henting av eksternt innhold — llm-security-pluginen aktivert + verifisert fyrende (post-mcp-verify) i alle fetch-økter (headless-caveat GH #36071 → foreground eller kompenserende skann) + deterministisk node-skann (unicode/decode/injection) over endrede skills/**/*.md før commit. Verifisering: brief- + plan-validator strict exit 0; antall R7R10-økter fastsatt; G6-gate-design eksplisitt i briefen.

R7R10 — Korpus-judge-pass eksekvering (243 due; 5 økter × ~49 filer, 810 samtidige/bølge)

Populasjon: 243 due-filer (scripts/kb-update/report-full-pass-worklist.mjs, alle never-verified); 5 økter × ~49 (ceil(243/49)=5). Samtidighet kappet til 810 subagenter per bølge (målt fan-out-skala, docs/v3.1-fanout-runbook.md:43), én subagent/fil, live MS Learn, blind for gull, read-only. Pilot-gate: første R7-batch begrenses til ≤45 filer (pilot innenfor det beviste fan-out-løpet) → valider FØR de resterende 4 øktene skaleres til ~49.

Durabilitet + resume: appendJudgedFile skriver ÉN record atomisk til scripts/kb-eval/data/judge-pass-manifest.json etter HVER fil (maks tap ved krasj = 1 fil); resume = pendingFiles(manifest, worklist) hopper over allerede-judgede (R6 Step 4). Flagg-record mater R11 direkte (R6 Step 5, docs/r11-flag-format-2026-07.md).

Aggregering (born-verified, ufravikelig): per_file_verdict='pass' KUN hvis HVER judgebar claim er grounded (AND) → surgical insertVerifiedFields-stempel (body byte-identisk, R6 Step 2). Én not_groundedper_file_verdict='flagged' + flagg-record, ALDRI stempel. Passing-men-ustempelbar (Verified-felt lander forbi 500-byte-vinduet → insertVerifiedFields kaster): behandles som flagged med disposisjon «header-slanking kreves», ALDRI tvunget stempel.

G6-gate (ufravikelig): R7 starter ALDRI uten G6 Layer A-aktiveringsprotokollen (R6 Step 8) verifisert — foreground fetch obligatorisk, ev. R6-definert kompenserende deterministisk skann (Layer B + pre-write unicode-scan, R6 Step 3). Verifisering per økt: G6-gate bekreftet ved øktstart; 0 udømte i batchen; git status viser kun manifest-/stempel-endringer; suite exit 0.

R11 — Flag→fiks-loop (1 økt, split ved stort flaggvolum)

Operatør-bekreftede fikser mot kilde + verified-bump per fikset fil (§3c-disiplin). Verifisering: alle flagg lukket (fikset eller avvist m/begrunnelse); suite exit 0.

R12 — §7 fersk-gull-måling: programmets sluttbevis (1 økt)

Trekk NYTT blindt gull-utvalg (G5-protokoll: re-adjuder mot live før fasiten stoles på), mål flagget feilrate. <~2 % → prosessgarantien er dokumentert virksom — visjonens suksesskriterium. Utvalget blir neste kalibreringssett; periodisk gull-re-adjudering forankres her. Verifisering: rapport med målt feilrate + konfidensintervall committed; ≥2 % → ny R11-runde planlegges, ikke bortforklares.

R13 — S-Cosmo del 1: mekanisk korpus-rens (1 økt)

Scripted transform (TDD) for Cosmo-forekomster i ref-korpuset (378 ref-filer; heading-nøytralisering) + absorberte rester: redirects (1a-C) og store-fil-TOC (1b). Verifisering: grep -rl "Cosmo" skills/*/references | wc -l → 0; suite exit 0; stikkprøve-diff-review.

R14 — S-Cosmo del 2: persona, advisor og legacy (1 økt)

Fjerning i SKILL.md-er, 23 commands, 11 docs, rot-filer + generate-skills.md/transform-prompt.md; advisor frontmatter-backfill + advisor judge-pass (advisor judged etter Cosmo); retir legacy bash MODEL=sonnet. Release-bump. Verifisering: grep -rli "cosmo" --include='*.md' . (unntak per cosmo-removal-brief) → 0; advisor stemplet; suite exit 0; release grønn.

R15 → R16+ — Skill-eval v2 (1 planleggingsøkt + est. 23 eksekveringsøkter)

/trekplan --brief docs/skill-validation-routine-brief-2026-07.md (committet i R0). Trinn 2 (live triggering m/precision+recall, 3× repetisjon, train/held-out), Trinn 3 (uplift vs. baseline), Trinn 4 (behavioral gate + generate-skills-wiring). Briefens §7-beslutninger (adopt vs. reimplement, kostnadsgating) avgjøres av operatør ved planreview. Re-score ETTER Spor 1 + S-Cosmo (kanonisert rekkefølge, programdok §6). Verifisering: briefens 7 testbare suksesskriterier.

R17 — Dekningsaudit (1 økt — fleksibel, uavhengig)

Svar på det aldri-målte spørsmålet: dekker de 389 filene de riktige temaene? Fan-out: Microsoft AI-landskapet (Foundry / Copilot / Power Platform / Agent Framework / AI Act-flater) vs. faktisk KB-dekning → dekningsrapport + prioritert gap-liste som mates inn som fremtidige KB-emner (født-verifisert generering). Verifisering: rapport committed med tema-matrise + gap-liste.

R18 — Onboarding uplift-måling (1 økt — fleksibel, uavhengig)

Maskineriet er bygget (krav 1+2+3 + per-kategori-hint); målingen er aldri kjørt. Design: samme oppgavesett med/uten onboardet kontekst, mål merkbar letthet (tid/kvalitet). Verifisering: uplift-rapport committed; beslutning videre loggført.

R19 — Layer B ↔ llm-ingestion-pipeline-security konvergens (utsatt, driver-utløst)

Utsatt / betinget — IKKE del av R0R18-programmet. ms-ai-architects Layer B (adversarial-content-skann) kjører i dag på ../llm-security-pluginens JS-scannere (grønt, urørt — bekreftet 2026-07-05). Målet (docs/ingestion-security-brief-2026-07.md §6) er å konvergere på den delte deterministiske scanneren i llm-ingestion-pipeline-security (det utpekte delte aktivumet; repo/remote open/llm-ingestion-pipeline-security, internt pakkenavn llm-ingestion-guard). Utløser (reell driver, ikke spekulasjon): når operatør vil migrere Layer B bort fra llm-security-pluginen. Koordinerte beslutninger (m/ library-sesjonen 2026-07-05, relayet): (1) biblioteket forblir ÉTT repo → polyglot (modell A) når Node bygges, aldri splitt; (2) Node-porten er bibliotekets v0.2-milepæl, med ms-ai-architect-konvergensen som driver; (3) datasett-først — det delte lexicon/charset-datasettet er den billigste, høyest-verdi, lavest-drift konvergensen (§6); implementasjons-deling (CLI-shell-out vs. tynne native matchere) er en separat senere beslutning; (4) disposisjon uendret (§5: høy-severity i lav-trust chunk → quarantine). ms-ai-architect-datapunkt (verifisert herfra): konvergens-flaten er Node (hele scan-stien er .mjs; to perifere Python-verktøy — export-pdf.py, kb-eval/ref-file-audit.py — er utenfor Layer B). Åpen brikke som låser modell A: claude-code-llm-wikis språk (Python → polyglot tvingende; Node → Node-primært bibliotek levedyktig) — uverifisert herfra (repo ikke i ~/repos), library-sesjonen settler. Koordinasjonsmekanisme (hub-and-spoke): kanonisk konvergens-kontrakt bor i hub-en (llm-ingestion-pipeline-security); denne R19 er ms-ai-architects spoke-peker. Utgående brief levert til hub 2026-07-05. Verifisering (når utløst): Layer B importerer den delte scanneren + delte lexicon-datasettet; node --test tests/kb-update/*.test.mjs tests/kb-eval/*.test.mjs exit 0; korpus byte-urørt; nøyaktig ÉN lexicon-kilde (ingen andre-kopi).

R20 — Base-felt pre-pass del 1: Category:-backfill (1 økt — ungated, ⊥ R7) 2026-07-06

Kontekst: 25 ref-filer manglet enhver kategori-label. 24/25 er not-due (ikke i R7s 243) → kjøres i R7-vente-vinduet, disjunkt fra judge-passet, ingen header-budsjett-kollisjon. Utledningen viste at kun 5/25 var mekanisk avledbare (enstemmig mappe-taksonomi); de 20 øvrige (advisor toolkit + plattform-referanser) krevde en operatør-godkjent sjanger-/taksonomibeslutning (2026-07-06): ta dem inn i header-kontrakten med to nye kategorier.

Utført: ny testet primitiv transform.insertMetaField(content, label, value) — samme anker + 500B-back-off som insertHeaderFields, idempotent på eksakt label, body byte-identisk (6 tester) — driver scripts/kb-update/backfill-category.mjs (deterministisk folder→category-regel, hard per-fil-invariant «nøyaktig én linje satt inn», insert-only, aborterer FØR skriving ved avvik). Fordeling: 14 «Solution Architecture & Advisory» (architecture/), 6 «Microsoft AI Platforms» (platforms/ + development/), 4 «Responsible AI & Governance», 1 «MLOps & GenAIOps». Label = engelsk **Category:** (322 filer vs 42 Kategori). Eksisterende recommended-mcp-servers («Architecture») + rag-maturity-model («RAG Architecture & Decision Framework») urørt — begge forsvarlige, ingen feilpasting fantes (korrigert antakelse).

Verifisering: grep -rLE '\*\*(Category|Kategori):\*\*' skills/*/references → 0; git diff +25/0 (én linje/fil, body byte-identisk); idempotent re-run = 0 planned; suite 764/764 exit 0.

R21 — Base-felt pre-pass del 2: Status: på not-due-filer (1 økt — ungated, ⊥ R7) 2026-07-06

Mål: lukk den rent-verifiserbare delen av base-felt-restansen på not-due-filene. Due-filenes Status/Last-updated FOLDES inn i R7 (Status er en faktapåstand judge-passet verifiserer mot live kilde; **Verified:**-stempelet er freshness-signalet) — backfilles ALDRI her.

Premiss-korreksjon (ground-truth 2026-07-06, via auditHeaders på alle 389 splittet due/not-due): STATE/roadmap-tallene var stale/feil. Faktisk: 43 mangler bold **Status:** (22 due→R7, 21 not-due) og 52 mangler engelsk Last updated: (26 due→R7, 26 not-due — ikke 48/22). To premisser i den opprinnelige planen var brutt: (1) «~22 not-due Last-updated» → faktisk 26; (2) «0 har norsk dato å relabele fra» → falskt: 21 av 26 not-due Last-updated-gap bærer allerede en norsk datolabel (**Sist oppdatert:**/**Dato:** <dato>), og de 5 «datoløse» gir «i dag» ved naiv git-siste-commit pga. R20-churn (bryter «ALDRI i dag»). Decision (a) er moot: 0 plattform-filer i not-due (alle sourced → due→R7). Norsk-label-residual (decision b) = 69 filer, ikke 42.

Utført (operatør-godkjent redusert scope 2026-07-06): kun Status-backfill, kun de 14 rent engelsk-dialekt advisor/architecture-filene. Ny testet ren regel statusForFile() (filnavn-token template|matrix|benchmarks|registerReference, ellers Established Practice; operatør-godkjent vokabular) + manifest-drevet driver scripts/kb-update/backfill-status.mjs (frosset 14-fil-manifest re-avledet fra regelen, hard per-fil-invariant «nøyaktig én linje», idempotent skip-if-present, isMain-guard så test-import ikke kjører driveren, aborterer FØR skriving). Fordeling: 7 Reference + 7 Established Practice. Diff-inspeksjon FØR commit fanget at 4 governance/responsible-ai ai-act-*-filer bar en plain-text Status: GA i en dual-header-blokk (usynlig for bold-only-regexen) → bold-innsetting duplikerte/motsa den → revertert, flyttet til residual. 7 tester.

Verifisering: test-backfill-status 7/7; git diff +14/0 (én **Status:**-linje/fil, 0 andre linjer, body byte-identisk); idempotent re-run = 0 written; not-due Status-missing 21→3; suite 771/771 exit 0.

Korrigert residual → decision-(b) dialekt/dual-header-normaliseringspass (eget go, ⊥ R21):

  • 26 not-due Last-updated — 21 relabel (Sist oppdatert/DatoLast updated, behold dato), 5 datoløse (git-avledet dato krever «innholds-commit»-heuristikk som ekskluderer R19/R20-metadata-pass).
  • 3 norsk-dialekt Status — engelsk **Status:** ville blande dialekt; håndteres i samme dialekt-pass.
  • 4 dual-header ai-act-*-filer — plain-blokk (Last updated:/Status: GA/Category: linje 68) vs bold-blokk. NB: samme plain-blokk er hvorfor R20 la til duplikat **Category:** her (bold Category linje 3 vs plain Category linje 8) — begge duplikatene lukkes i normaliseringspasset. Mønsteret er innkapslet til nøyaktig disse 4 filene korpus-vidt.
  • 69 norsk-label-filer (Kategori/Sist oppdatert) — engelsk label-normalisering.

Parkert (krever eget operatør-go)

  • OKF second brain (spec v0.1 ratifisert; bygging = separat go).
  • Pris/unsourced-verifisering (74 % av prispåstander ikke maskinverifiserbare; operatør-gated).
  • Historikk-håndtering for saneringen i R0 hvis operatør ønsker mer enn fremoverrettet fiks (egen beslutning).