feat(ms-ai-architect): Spor 3 Port 2 — create-time-guard (born-verified contract) [skip-docs]
Type-aware create-guard for reference-filer (Spor 3 Port 1/Port 2): - kb-headers.mjs: parseTypeHeader/parseVerifiedHeader/parseVerifiedByHeader (samme top-500-byte bold-label-skann som parseSourceHeader). - transform.mjs: buildKbHeader er type-aware (reference krever source+verified+verified_by; non-reference kaster pa MS-Learn-source) + emitterer Type/Verified/Verified by; validateKbFile type-aware; stampVerifiedMeta = fodt-verifisert-gate (stempler KUN ved bestatt judge-verdikt, ellers kaster). - validate-kb-file.mjs (ny): kjorbar gate generatorer kaller for commit (exit != 0 ved kontraktbrudd). - generate-skills.md + kb-update.md + transform-prompt.md: wiret til fodt-verifisert kontrakt (header-felt + judge-steg + create-guard-gate). Suite 586/586 (33 nye + 1 invariant). Plugin-validering 239/0/0. Utenfor scope (flagget): generate-skills.sh legacy (sonnet/Cosmo/no-source), Cosmo-persona i generatorene (S-Cosmo), korpus-migrering av 306 filer (Spor 1).
This commit is contained in:
parent
0ded2f9413
commit
5a0ba1fc9e
10 changed files with 621 additions and 54 deletions
|
|
@ -86,9 +86,13 @@ Format (STRENGT — alle seksjoner påkrevd):
|
|||
|
||||
# {SKILL_TITLE}
|
||||
|
||||
**Last updated:** 2026-02
|
||||
**Last updated:** {dagens måned, YYYY-MM}
|
||||
**Status:** [GA | Preview | Announced]
|
||||
**Category:** {CATEGORY_NAME}
|
||||
**Type:** reference
|
||||
**Source:** {den autoritative Microsoft Learn-URLen fra research — den faktiske doc-siden påstandene hviler på, ikke et søketreff}
|
||||
**Verified:** {SETTES i Steg 2.5 etter judge — IKKE her}
|
||||
**Verified by:** {SETTES i Steg 2.5 etter judge — IKKE her}
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -127,6 +131,23 @@ Format (STRENGT — alle seksjoner påkrevd):
|
|||
- Confidence markers: "Verified" (fra MCP), "Baseline" (modellkunnskap)
|
||||
- Konkret og balansert — vis fordeler OG ulemper
|
||||
|
||||
## Steg 2.5: Født-verifisert (judge FØR du returnerer)
|
||||
|
||||
Filen skal være *født verifisert*: ingen reference-fil forlater agenten uten at de
|
||||
maskin-verifiserbare påstandene er bekreftet mot `Source`-URLen.
|
||||
|
||||
1. Kjør den gjeldende claim-judgen (`scripts/kb-eval/judge-claim-prompt-v2.md`) over
|
||||
filens maskin-verifiserbare påstander (sku/version/tpm/status/region/taxonomy) mot
|
||||
`Source`-URLen du hentet i Steg 1.
|
||||
2. **Hvis alle påstander er `grounded`:** sett i headeren
|
||||
`**Verified:** {dagens dato, YYYY-MM-DD}` og `**Verified by:** judge-v2`.
|
||||
3. **Hvis noen påstand IKKE er grounded:** IKKE stempl `Verified`. Rett påstanden mot
|
||||
kilden og kjør judgen på nytt, eller — hvis verdien er maskin-uverifiserbar (pris/
|
||||
JS-rendret) — merk den eksplisitt og la filen gå til menneske-gaten (den blir IKKE
|
||||
committet; se batch-gaten under).
|
||||
|
||||
Aldri stempl `Verified` spekulativt. Stempelet betyr «judgen bekreftet mot kilde».
|
||||
|
||||
## Steg 3: Returner kvittering
|
||||
|
||||
Returner KUN dette (ingenting annet):
|
||||
|
|
@ -159,11 +180,19 @@ Task(general-purpose, sonnet): "Research + write skill: Multi-Index..."
|
|||
|
||||
1. **Parse kvitteringer** fra agentene
|
||||
2. **Verifiser filer finnes** med Glob
|
||||
3. **Oppdater state.json:**
|
||||
- Legg til ferdige skill-IDer i `completed`
|
||||
- Legg til eventuelle feilede i `failed`
|
||||
3. **Create-guard (OBLIGATORISK — Spor 3 Port 2):** kjør gaten over batchens nye filer:
|
||||
```bash
|
||||
node scripts/kb-update/validate-kb-file.mjs <fil1.md> <fil2.md> ...
|
||||
```
|
||||
Gaten exit-er ≠0 hvis en fil mangler `Source`, ikke er født-verifisert (mangler
|
||||
`Verified`/`Verified by`), eller er en stor fil uten TOC. **En fil som FAIL-er
|
||||
committes IKKE** — logg den i `state.failed` og send den til menneske-gaten. Dette er
|
||||
det som hindrer generatoren i å re-introdusere drift (avhengighet før Spor 1).
|
||||
4. **Oppdater state.json:**
|
||||
- Legg til ferdige (gate-PASS) skill-IDer i `completed`
|
||||
- Legg til feilede/gate-FAIL i `failed`
|
||||
- Oppdater `stats.total_generated` og `stats.total_bytes`
|
||||
4. **Neste batch** eller avslutt
|
||||
5. **Neste batch** eller avslutt
|
||||
|
||||
## Etter hele sesjonen
|
||||
|
||||
|
|
@ -180,13 +209,17 @@ Task(general-purpose, sonnet): "Research + write skill: Multi-Index..."
|
|||
Gjenstår: N skills
|
||||
```
|
||||
|
||||
2. **Commit:**
|
||||
2. **Create-guard FØR commit (OBLIGATORISK):** kjør gaten over ALLE filer du er i ferd
|
||||
med å committe. Bare gate-PASS-filer skal med:
|
||||
```bash
|
||||
node scripts/kb-update/validate-kb-file.mjs $(git diff --name-only --diff-filter=AM -- 'skills/ms-ai-*/references/**/*.md')
|
||||
git add skills/ms-ai-*/references/<dirs>/ scripts/skill-gen/state.json
|
||||
git commit -m "docs(architect): generate N knowledge skills (category-names)"
|
||||
```
|
||||
Hvis gaten exit-er ≠0: IKKE commit de feilende filene — fjern dem fra staging og send
|
||||
til menneske-gaten.
|
||||
|
||||
3. **Oppdater REMEMBER.md** med ny status
|
||||
3. **Oppdater STATE.md** med ny status
|
||||
|
||||
## Feilhåndtering
|
||||
|
||||
|
|
@ -263,8 +296,16 @@ Bruk Edit-verktøyet (IKKE Write) for å:
|
|||
- Oppdatere "Last updated" til gjeldende måned
|
||||
- Oppdatere utdaterte fakta, priser, datoer
|
||||
- Oppdatere Microsoft Learn-URLer
|
||||
- Markere oppdatert innhold med "Verified (MCP {måned})"
|
||||
- Beholde eksisterende struktur og seksjoner
|
||||
- **Backfill kontrakt-headeren** (Spor 3 Port 1) hvis legacy-fila mangler den: legg til
|
||||
`**Type:** reference` og `**Source:** {autoritativ Learn-URL}` i header-blokken (en
|
||||
berørt fil skal forlate oppdateringen kontrakt-kompatibel — inkrementell Spor 1).
|
||||
|
||||
## Steg 2.5: Født-verifisert (judge FØR du returnerer)
|
||||
Kjør claim-judgen (`scripts/kb-eval/judge-claim-prompt-v2.md`) over de oppdaterte maskin-
|
||||
verifiserbare påstandene mot `Source`. Alle `grounded` ⇒ sett `**Verified:** {dagens dato}`
|
||||
+ `**Verified by:** judge-v2`. Ikke grounded ⇒ IKKE stempl; rett mot kilde og kjør på nytt,
|
||||
eller send til menneske-gaten (fila committes ikke; se batch-gaten). Aldri stempl spekulativt.
|
||||
|
||||
## Steg 3: Returner kvittering
|
||||
SKILL_UPDATED
|
||||
|
|
@ -275,7 +316,8 @@ status: success|no_changes|failed
|
|||
```
|
||||
|
||||
4. Track in `state.json` under a new `"updated"` array
|
||||
5. After each batch, verify files still pass `validate-plugin.sh`
|
||||
5. **Create-guard (OBLIGATORISK):** `node scripts/kb-update/validate-kb-file.mjs <oppdaterte filer>` — gate-FAIL committes IKKE
|
||||
6. After each batch, verify files still pass `validate-plugin.sh`
|
||||
|
||||
**Key difference from generation:** Update uses Edit (preserves structure), generation uses Write (creates from scratch).
|
||||
|
||||
|
|
|
|||
|
|
@ -127,11 +127,11 @@ saveDecisions(led);
|
|||
d. **For `approved`:** registrér URLen i `url-registry` (gated) så den fanges av polling heretter — via `lib/registry-io.mjs` `saveRegistry`. Bruk `suggested_skill`/`suggested_category` fra kandidaten. Deretter kjør **transformasjonslaget (lag 4)** for å lage KB-fila:
|
||||
1. `microsoft_docs_fetch` på den godkjente URLen → kildedokument.
|
||||
2. Destillér via `scripts/kb-update/transform-prompt.md` (doc→KB-fil; status-påstander holdes eksplisitte). Multi-agent parallell fan-out foreslås i produksjon (roadmap §71), speilet på `generate-skills`-mønsteret.
|
||||
3. `content = composeKbFile({title, status, category, source: <godkjent URL>, lastUpdated: <YYYY-MM>}, body)` (`lib/transform.mjs`) — bygger header + (store filer >100 linjer) en deterministisk `## Innhold`-TOC + brødtekst. **`Status` + `Source` er obligatoriske** — `Source` i header-blokka (øverste 500 bytes) er det som lar lag 3 backfille `authority_source`. TOC-en fødes inn så regenerering ikke stripper den (Fase 1c).
|
||||
4. `validateKbFile(content)` MÅ være `valid: true` (title + Last updated + Status + Source; **store filer også TOC**) før noe gates videre (ellers be modellen fylle manglende felt).
|
||||
3. **Født-verifisert (Spor 3 Port 2):** kjør claim-judgen (`scripts/kb-eval/judge-claim-prompt-v2.md`) over brødtekstens maskin-verifiserbare påstander mot den godkjente URLen → `verdict = {pass}`. Så `meta = stampVerifiedMeta({title, status, category, source: <godkjent URL>, lastUpdated: <YYYY-MM>}, verdict, <i dag>)` — stempler `type='reference'` + `verified` + `verified_by='judge-v2'` **kun** ved `pass`; ellers KASTER (ingen fil, flagg for menneske). Deretter `content = composeKbFile(meta, body)` (`lib/transform.mjs`) — header + (store filer >100 linjer) en deterministisk `## Innhold`-TOC + brødtekst. **`Status` + `Source` + `Verified` + `Verified by` er obligatoriske** — `Source` i header-blokka (øverste 500 bytes) er det som lar lag 3 backfille `authority_source`. TOC-en fødes inn så regenerering ikke stripper den (Fase 1c).
|
||||
4. `validateKbFile(content)` MÅ være `valid: true` (title + Last updated + Status + Source + **Verified + Verified by**; **store filer også TOC**) før noe gates videre (ellers be modellen fylle manglende felt).
|
||||
5. For hver status-/load-bearing-påstand: `buildChange({...})` → **lag 5** `classifyChange(...)` (samme gate som §4 c2). Status-påstander er alltid `flagged`.
|
||||
6. `resolveTargetPath(tax, category, filename)` → eierskill-sti via taksonomien (`null` = ukjent kategori → flagg for operatør, ikke skriv).
|
||||
7. Først etter operatør-gate: atomisk skriving (`lib/atomic-write.mjs` + `lib/backup.mjs`). **`transform.mjs` skriver aldri selv** — verifisert av `tests/kb-update/test-transform.test.mjs` (import-invariant). Kriterium verifisert av `tests/kb-eval/test-transform-criterion.test.mjs` (regenerer 1 fil → eval ≥ baseline).
|
||||
7. **Create-guard FØR skriving:** `node scripts/kb-update/validate-kb-file.mjs <sti>` (exit ≠0 ⇒ ikke skriv). Først etter operatør-gate + grønn create-guard: atomisk skriving (`lib/atomic-write.mjs` + `lib/backup.mjs`). **`transform.mjs` skriver aldri selv** — verifisert av `tests/kb-update/test-transform.test.mjs` (import-invariant). Kriterium verifisert av `tests/kb-eval/test-transform-criterion.test.mjs` (regenerer 1 fil → eval ≥ baseline).
|
||||
|
||||
e. **Invariant:** `discover-new-urls.mjs` (deteksjon) skriver **aldri** ledgeren — den kun leser. Bare denne gaten skriver. Verifisert av `tests/kb-update/test-discover-invariant.test.mjs`.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue