feat(ms-ai-architect): Layer B ingestion-gate — deterministisk adversariell-innhold-skann før skriving/commit (G6 §8 / R6 punkt d, TDD) [skip-docs]
Load-bearing gaten i den to-lags ingestion-sikkerheten: en deterministisk, alltid-på node-skann (unicode/injection/base64, prosa + fenced code blocks) over kandidat skills/**/*.md, wiret inn som sibling til validate-kb-file.mjs ved det ENESTE skrive-chokepunktet — dekker kb-update + generate-skills + fremtidig R7. - lib/adversarial-scan.mjs: ren disposition-kjerne (provenance-tiering + BLOCK/ WARN-matrise). Ortogonal til korrekthets-judgen. - lib/adversarial-detect.mjs: bro til de DELTE llm-security-detektorene (scanForInjection-lexikon + unicode-scanner + base64/entropi) — ingen kopi av lexikonet. Fail-closed hvis llm-security fraværende. - scan-adversarial-content.mjs: CLI (speiler validate-kb-file.mjs); exit 1=BLOCK (aldri skriv), 2=WARN (flagg → menneske), 0=ren. - 30 tester (19 kjerne + 7 CLI + 4 integrasjon mot ekte llm-security). Suite 692/0. Premiss-verifisert mot live kode: research/research-agent skriver ingenting (kun Layer A); R7-judge re-bruker samme create-guard; CLI-scan alene misset injection+base64 for markdown → importerer rene primitiver i stedet.
This commit is contained in:
parent
687a15138e
commit
89dcd80cbc
8 changed files with 770 additions and 14 deletions
|
|
@ -180,14 +180,19 @@ Task(general-purpose, sonnet): "Research + write skill: Multi-Index..."
|
|||
|
||||
1. **Parse kvitteringer** fra agentene
|
||||
2. **Verifiser filer finnes** med Glob
|
||||
3. **Create-guard (OBLIGATORISK — Spor 3 Port 2):** kjør gaten over batchens nye filer:
|
||||
3. **Create-guard (OBLIGATORISK — to sibling-gater):** kjør BEGGE over batchens nye filer:
|
||||
```bash
|
||||
node scripts/kb-update/validate-kb-file.mjs <fil1.md> <fil2.md> ...
|
||||
node scripts/kb-update/scan-adversarial-content.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).
|
||||
Kontrakt-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. **Layer B ingestion-gaten
|
||||
(G6 §8 / R6 punkt d)** exit-er 1 (BLOCK — aldri committ, karantene) på adversarielt
|
||||
innhold (unicode/injection/base64 i prosa + fenced code blocks, via delte llm-security-
|
||||
detektorer) eller 2 (WARN — flagg for operatør, ikke auto-committ). **En fil som FAIL-er
|
||||
noen av gatene committes IKKE** — logg den i `state.failed` og send den til menneske-
|
||||
gaten. Dette hindrer generatoren i å re-introdusere drift (kontrakt) OG i å persistere en
|
||||
forgiftet referansefil (Layer B — ortogonal til korrekthet).
|
||||
4. **Oppdater state.json:**
|
||||
- Legg til ferdige (gate-PASS) skill-IDer i `completed`
|
||||
- Legg til feilede/gate-FAIL i `failed`
|
||||
|
|
@ -209,15 +214,17 @@ Task(general-purpose, sonnet): "Research + write skill: Multi-Index..."
|
|||
Gjenstår: N skills
|
||||
```
|
||||
|
||||
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:
|
||||
2. **Create-guard FØR commit (OBLIGATORISK — begge gater):** kjør BEGGE over ALLE filer du er
|
||||
i ferd med å committe. Bare filer som passerer BEGGE skal med:
|
||||
```bash
|
||||
node scripts/kb-update/validate-kb-file.mjs $(git diff --name-only --diff-filter=AM -- 'skills/ms-ai-*/references/**/*.md')
|
||||
FILES=$(git diff --name-only --diff-filter=AM -- 'skills/ms-ai-*/references/**/*.md')
|
||||
node scripts/kb-update/validate-kb-file.mjs $FILES
|
||||
node scripts/kb-update/scan-adversarial-content.mjs $FILES # Layer B ingestion-gate (G6 §8)
|
||||
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.
|
||||
Hvis noen av gatene exit-er ≠0: IKKE commit de feilende filene — fjern dem fra staging og
|
||||
send til menneske-gaten (kontrakt-FAIL rettes; Layer B BLOCK karantenes/adjudiseres).
|
||||
|
||||
3. **Oppdater STATE.md** med ny status
|
||||
|
||||
|
|
@ -316,7 +323,7 @@ status: success|no_changes|failed
|
|||
```
|
||||
|
||||
4. Track in `state.json` under a new `"updated"` array
|
||||
5. **Create-guard (OBLIGATORISK):** `node scripts/kb-update/validate-kb-file.mjs <oppdaterte filer>` — gate-FAIL committes IKKE
|
||||
5. **Create-guard (OBLIGATORISK — begge gater):** `node scripts/kb-update/validate-kb-file.mjs <oppdaterte filer>` + `node scripts/kb-update/scan-adversarial-content.mjs <oppdaterte filer>` (Layer B ingestion-gate, G6 §8) — FAIL på noen av dem 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).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue