From 841292ff360169f8be9c1ba20aed95f0a1b5ff32 Mon Sep 17 00:00:00 2001 From: Kjell Tore Guttormsen Date: Sat, 4 Jul 2026 23:33:55 +0200 Subject: [PATCH] =?UTF-8?q?refactor(ms-ai-architect):=20retire=20backfill-?= =?UTF-8?q?toc.mjs=20(superseded),=20migrer=20cosmo-removal-brief:41-kobli?= =?UTF-8?q?ng,=20logg=20=C2=A78-residual=20[skip-docs]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/cosmo-removal-brief-2026-06.md | 3 +- docs/plugin-roadmap-2026-07.md | 2 +- scripts/kb-update/backfill-toc.mjs | 51 ----------------------------- 3 files changed, 3 insertions(+), 53 deletions(-) delete mode 100644 scripts/kb-update/backfill-toc.mjs diff --git a/docs/cosmo-removal-brief-2026-06.md b/docs/cosmo-removal-brief-2026-06.md index aa8ac53..91c8d07 100644 --- a/docs/cosmo-removal-brief-2026-06.md +++ b/docs/cosmo-removal-brief-2026-06.md @@ -38,7 +38,8 @@ Fase 1a A+B (sitemap-prefiks + skjemaløs URL-ekstraksjon) er levert (`e74646d`) Fase 1b (innholdsfortegnelse i de **20 filene >800 linjer**) ble opprinnelig skopet som «trygt håndverk, uavhengig av Cosmo». Ground truth motbeviste premisset: **11 av 12 ikke-advisor-storfiler** (og alle advisor-storfilene) har en `## …Cosmo…`-seksjon på nivå 2. En TOC bygget fra `##`-overskriftene ville da emittere en **ny Cosmo-anker** (`- [For arkitekten (Cosmo)](#…)`) → bryter «aldri ny Cosmo-innhold», og å nøytralisere overskriften er nettopp denne persona-fjerningen (ikke en sidehandling). Store-fil-TOC folder derfor inn her. -- **Når du nøytraliserer `## …Cosmo…`-overskriften i en storfil:** kjør `node scripts/kb-update/backfill-toc.mjs --write ` i samme diff. Den setter `## Innhold` rett før første ikke-fence `## `-seksjon (samme slot som `composeKbFile`), er idempotent og fence-aware, og lister da de **nøytraliserte** overskriftene. Dry-run uten `--write` for å se diff først. +- **Når du nøytraliserer `## …Cosmo…`-overskriften i en storfil (R13/R14):** bygg `## Innhold` på nytt via `transform.insertToc` (primitiven overlever; det tidligere TOC-backfill-CLI-scriptet er **retired i R6 Step 6** — ikke-atomisk `writeFileSync`, 0 programmatiske kallere, superseded av `insertToc` i `transform.mjs` / `migrate-corpus`). NB: `migrate-corpus` fencer ut advisor OG mangler single-fil-modus, så den er **ikke** en drop-in for den advisor-rettede cosmo-use-casen — R13/R14 håndterer TOC via et advisor-kapabelt single-fil-steg, ELLER heading-fjerningen løser det selv. +- **§8-residual (gap-discipline, [[gap-discipline-must-close]]):** `insertToc` er en no-op på en fil som allerede har `## Innhold`, så en heading-nøytralisering som endrer en **oppført** overskrift etterlater en stale TOC-entry (latent link-rot). Lukkes i R13/R14 ved å regenerere TOC etter nøytralisering (eller nøytralisere før TOC-en bygges). - **Mekanismen** er `transform.insertToc` (testet, `tests/kb-update/test-transform.test.mjs`). Nye filer fødes allerede med TOC via `composeKbFile` (Fase 1c, `2240f1e`). - **Verifisering:** `node scripts/kb-eval/eval.mjs` → `checkN4 hasToc` = true for de berørte filene; ingen diff-churn på små filer (<100 linjer røres ikke). - Eneste storfil uten `##`-Cosmo-overskrift: `zero-trust-ai-services.md` (eneste Cosmo-token er inline `**For Cosmo:**`) — kan TOC-es uten å skape Cosmo-anker, men tas naturlig i samme pass. diff --git a/docs/plugin-roadmap-2026-07.md b/docs/plugin-roadmap-2026-07.md index 81ebf46..cc46bbd 100644 --- a/docs/plugin-roadmap-2026-07.md +++ b/docs/plugin-roadmap-2026-07.md @@ -66,7 +66,7 @@ Påfør `spor0-fix-manifest.json` (38 fikser / 25 filer) + G5b-fillisten (`adr-t ## 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 `backfill-toc.mjs`** (unified applier har overtatt; anbefaling: retire); (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 R7–R10-økter fastsatt; G6-gate-design eksplisitt i briefen. +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 R7–R10-økter fastsatt; G6-gate-design eksplisitt i briefen. ## R7–R10 — Korpus-judge-pass eksekvering (antall fra R6; estimat 4 økter à ~80 filer) diff --git a/scripts/kb-update/backfill-toc.mjs b/scripts/kb-update/backfill-toc.mjs deleted file mode 100644 index 45fdf6b..0000000 --- a/scripts/kb-update/backfill-toc.mjs +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env node -// backfill-toc.mjs — Fase 1b applier: insert a `## Innhold` TOC into EXISTING large -// reference files via transform.insertToc. Dry-run by default; --write applies in place. -// -// transform.mjs stays pure (it never writes — architecture invariant); THIS script is -// the operator-gate-side applier, the same seam commands/kb-update.md occupies when it -// writes a composed file after the gate clears. All the logic lives in the tested -// insertToc (no-op on small/already-TOC'd files, body byte-identical) — this is glue. -// -// node scripts/kb-update/backfill-toc.mjs # dry-run (report) -// node scripts/kb-update/backfill-toc.mjs --write # apply in place -// -// Per file: would/write (+N lines, M sections) | skip (small or already has TOC). -// A file whose content insertToc leaves unchanged is never rewritten (no churn). - -import { readFileSync, writeFileSync } from 'node:fs'; -import { insertToc, buildToc } from './lib/transform.mjs'; - -const argv = process.argv.slice(2); -const write = argv.includes('--write'); -const files = argv.filter((a) => a !== '--write'); - -if (files.length === 0) { - console.error('usage: backfill-toc.mjs [--write] '); - process.exit(2); -} - -let changed = 0; -let skipped = 0; -for (const path of files) { - const before = readFileSync(path, 'utf8'); - const after = insertToc(before); - if (after === before) { - skipped++; - console.log(`skip ${path} (small or already has TOC)`); - continue; - } - const addedLines = after.split('\n').length - before.split('\n').length; - const sections = (buildToc(before).match(/^- /gm) || []).length; - changed++; - if (write) { - writeFileSync(path, after); - console.log(`write ${path} (+${addedLines} lines, ${sections} sections)`); - } else { - console.log(`would ${path} (+${addedLines} lines, ${sections} sections)`); - } -} - -const verb = write ? 'wrote' : 'would change'; -const hint = write ? '' : ' — re-run with --write to apply'; -console.log(`\n${verb} ${changed}, skipped ${skipped}${hint}`);