refactor(ms-ai-architect): retire backfill-toc.mjs (superseded), migrer cosmo-removal-brief:41-kobling, logg §8-residual [skip-docs]
This commit is contained in:
parent
a0283efe84
commit
841292ff36
3 changed files with 3 additions and 53 deletions
|
|
@ -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 <fil>` 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.
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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 <file.md ...> # dry-run (report)
|
||||
// node scripts/kb-update/backfill-toc.mjs --write <file.md ...> # 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] <file.md ...>');
|
||||
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}`);
|
||||
Loading…
Add table
Add a link
Reference in a new issue