# R14-forberedelse — persona utenfor ref-korpuset: måling og foreslått gate **Målt:** 2026-09-13 · **Status:** FORSLAG — krever operatør-ratifisering før R14-transformen skrives **Forgjenger:** R13 del 1 (`3a73eea`) · **Kilde-brief:** `docs/cosmo-removal-brief-2026-06.md` **Klassifikator:** `scripts/kb-update/lib/cosmo-persona.mjs` (R13, gjenbrukt — ikke ny) Dette dokumentet gjør to ting: det måler persona-populasjonen **utenfor** ref-korpuset, og det foreslår unntakssettet R14-gaten mangler. Det skriver ingen transform. --- ## 1. Roadmapens R14-gate er ikke uoppnåelig — den er *ubestemt* Roadmapen (`.claude/…/plugin-roadmap-2026-07.md § R14`) skriver gaten slik: > `grep -rli "cosmo" --include='*.md' .` **(unntak per cosmo-removal-brief)** → 0 Unntaksklausulen finnes altså. Den delegerer til briefen. Briefens eneste tilsvarende setning er §4: «`grep -rc Cosmo` → 0 **(eller dokumentert restmengde)**». Briefen inneholder ingen liste (målt: 0 treff på «unntak», «exception», «except»; kjent-positiv: 16 treff på persona-navnet, så nettet kan finne). Gaten reduserer seg dermed til «0, **eller** en dokumentert restmengde» — og restmengden er aldri blitt dokumentert. Det er den åpne beslutningen dette dokumentet lukker. **Konsekvens:** gaten har aldri vært usann i formen. Den har vært *utfylt halvveis*. ## 2. Fire klausuler målt hver for seg R13 lærte at én rettet feil ikke fredner resten. Gaten er derfor dekomponert, og hver klausul målt. ### (S) Skopet — `.` og `--include='*.md'` treffer feil mengde, i begge retninger | Måling | Tall | |---|---| | `command grep -rli "cosmo" --include='*.md' .` (arbeidstreet) | **1348 filer** | | — herav `.kb-backup/` (lokale KB-backuper, gitignorert) | 1146 | | — herav `.claude/` (LOCAL-ONLY planer) + `STATE.md` | 9 | | Samme spørring avgrenset til `git ls-files '*.md'` | **192 filer** | | Tracked **ikke**-`.md`-filer som bærer strengen | **29 filer / ~429 forekomster** | To uavhengige feil: gaten **teller med** 1155 filer som aldri skal leveres (backup + local-only), og den **ser ikke** 29 tracked filer fordi de ikke er `.md` — blant dem R13s eget maskineri (`lib/cosmo-persona.mjs` 90, `test-cosmo-persona.test.mjs` 88, `check-cosmo-gate.mjs` 25) og `.gitignore` (3). Fire filnavn utenfor `.md` bærer strengen selv. > **Måleinstrumentet teller også.** I en Claude Code-økt er `grep` en shell-funksjon som wrapper > `ugrep --ignore-files` og respekterer `.gitignore`. Den gir 192 der ekte `grep` gir 1348. Enhver > R14-måling må kjøres med `command grep` eller via node — aldri med øktens `grep`. **Forslag:** skopet er `git ls-files '*.md'` (tracked), målt programmatisk. ### (a) Referenten — strengen betyr fortsatt to ting, og diskriminatoren er målt på feil populasjon Utenfor ref-korpuset finnes **9** `Cosmos`-formede forekomster. Alle er håndsjekket: | Fil:linje | Tekst | Dom | Klassifikator | |---|---|---|---| | `commands/review.md:61` | «Legg til Cosmos helhetsvurdering» | persona (norsk genitiv) | ✅ persona | | `commands/security.md:48` | «Legg til Cosmos vurdering» | persona (norsk genitiv) | ✅ persona | | `skills/ms-ai-infrastructure/SKILL.md` ×4 | «Cosmos DB …» | produkt | ✅ produkt | | `skills/ms-ai-security/SKILL.md:106` | «… Blob Storage, Cosmos DB» | produkt | ✅ produkt | | `playground/test-fixtures/cost.md:22` | «blob + cosmos for audit» | produkt | ✅ produkt | | `docs/ref-kb-gold-reconciliation-2026-06.md:93` | «Cosmos multi-region writes … /azure/cosmos-db/…» | **produkt** | ❌ **persona** | **1 av 9 er feilklassifisert.** R13s genitivregel er `Cosmos ` = persona, med en enumerert liste norske funksjonsord som unntak. Lista ble enumerert over ref-korpuset, som ikke inneholder engelsk produktprosa. «Cosmos multi-region writes» treffer regelen og blir persona. Dommen er avgjort av URL-en i samme tabellrad. Alle tall i dette dokumentet er korrigert for den. **Forslag:** utvid `PRODUCT_FOLLOWERS` med de engelske produktordene, ELLER — enklere og presist — la en håndadjudisert forekomst-override bære de få tilfellene. Uansett: **klassifikatoren må re-valideres på R14-populasjonen før tallene konsumeres**, ikke bare på korpuset den ble født i. ### (b) Rekkevidden — R13s operasjon når 3 av 145, og generatorene reverserer den R13s transform er en **heading-tabell** med 40 ratifiserte oppføringer. Utenfor ref-korpuset finnes bare 2 persona-headinger og 1 TOC-lenke. Av dem er 1 i tabellen; 2 er det ikke, og transformen **kaster** på dem (fail-safe, ikke stille feil): - `skills/ms-ai-advisor/SKILL.md:11` — `# Cosmo Skyberg - Microsoft AI Solution Architect` - `docs/cosmo-removal-brief-2026-06.md:1` — `# Cosmo-persona — full utfasing (brief)` R13-maskineriet er altså **ikke** en drop-in for R14. 142 av 145 forekomster er prosa, tabellceller, kodeblokker og fete innledninger — redaksjonelt arbeid, ikke tabelloppslag. > **Det tyngste funnet: fem steder *produserer* ny persona.** R13s gate er grønn i dag, men ikke > stabil — neste KB-generering re-minter nettopp headingen R13 fjernet 401 av. > > | Sted | Hva det gjør | Konsument (verifisert) | > |---|---|---| > | `scripts/kb-update/transform-prompt.md:63,82` | ber modellen skrive seksjon «8. For arkitekten (Cosmo)» | `commands/kb-update.md:129` leser den | > | `scripts/skill-gen/prompt-template.md:18,77` | samme seksjon i skill-generatoren | `generate-skills.sh:27` → `claude --print` | > | `commands/generate-skills.md:11,61,120,284` | prompt med `## For arkitekten (Cosmo)` innbakt | selve kommandoen | > | `commands/kb-update.md:192` | «Behold "For Cosmo"-seksjonen …» | selve kommandoen | > | `docs/kb-update-apply-brief.md:19` | subagent-kontrakt: «behold «For Cosmo»…-seksjon» | apply-flyten | > > Korreksjon til egen mellomregning: `lib/transform.mjs` *nevner* prompt-fila i en kommentar, den > leser den ikke. Konsumenten er kommandoen. ### (c) Det som skal bli stående — 83 forekomster i 10 filer (116 i 11 med denne fila) Se registeret i §4. To klasser: **historikk** (CHANGELOG-rader som omtaler utfasingen sant; CLAUDE.md forbyr historikk-omskriving) og **derivasjonsrecord** (docs-planer og -briefer som dokumenterer hvorfor beslutningene ble tatt). Begge er sanne utsagn om fortiden. --- ## 3. Foreslått R14-gate — tre klausuler oppå R13s G1/G2/G3 Skop for alle: `git ls-files '*.md'`, målt programmatisk med R13-klassifikatoren. | | Klausul | Mål | I dag | |---|---|---|---| | **G4** | persona i **leveranseflaten** | **0** | 62 i 32 filer | | **G5** | **produkt** urørt — pinnet **per fil**, ikke som global sum | per-fil som baseline | 459 (451 korpus + 8 utenfor) | | **G6** | **derivasjonsregisteret** pinnet per fil | eksakt som §4 | 83 i 10 filer | **G6 pinnes på forekomst-tall per fil, ALDRI på filnavn.** Målt: injiserer man en ny persona-linje i `docs/cosmo-removal-brief-2026-06.md` går tellingen 32 → 33, og et talls-pinnet unntak feller den. Et fil-nivå-unntak («hopp over denne fila») ser den ikke — fila er unntatt uansett innhold. Det er forskjellen mellom et unntak og et hull. ### Nett-validering (kjørt 2026-09-13, begge veier) | Retning | Test | Utfall | |---|---|---| | kjent-positiv | `agents/adr-writer-agent.md` har 0 → injisert «Du er Cosmo Skyberg.» | ✅ 0 → 1 | | kjent-positiv | injisert norsk genitiv «Cosmos vurdering» | ✅ 0 → 1 | | kjent-positiv | injisert persona-**heading** | ✅ 0 → 1 | | kjent-negativ | «Cosmos DB», «cosmos for audit» | ✅ 0 persona | | kjent-negativ | `skills/ms-ai-infrastructure/SKILL.md` (4 produkt) | ✅ 0 persona | | **kjent-negativ som FEILER** | «Cosmos multi-region writes …» | ❌ klassifiseres persona — dokumentert i §2(a) | | unntaksform | ny persona injisert i unntatt fil | ✅ tall-pin feller · ❌ filnavn-unntak er blindt | **Blindhetstest av vokabularet:** 64 tracked filer bærer «Skyberg». **Null** av dem bærer «Skyberg» uten også å bære «cosmo» — verken på fil- eller linjenivå. Strengen `cosmo` er ikke blind for personaens etternavn. (32 utenfor korpuset + 32 i korpuset = 64; målt hver for seg fordi et identisk delt tall skal mistenkes.) --- ## 4. Det foreslåtte unntakssettet (G6-registeret) Disse 83 forekomstene skal **bli stående**. Hver linje er et pin, ikke et filnavn-hopp. | Fil | Forekomster | Klasse | |---|---|---| | `CHANGELOG.md` | 6 | historikk — omskriving forbudt (CLAUDE.md) | | `docs/cosmo-removal-brief-2026-06.md` | 32 | kildedokument; bærer strengen i eget **filnavn** | | `docs/ref-kb-workflow-plan-2026-06.md` | 25 | planrecord (S-Cosmo-sporet) | | `docs/ref-kb-direction-note-2026-06.md` | 6 | retningsnotat, sekvenseringsrisiko | | `docs/ref-kb-correctness-program-2026-06.md` | 4 | programrecord | | `docs/kb-refresh-backlog-2026-06.md` | 3 | backlog-peker til briefen | | `docs/spor1-authority-selection.md` | 3 | scope-record (advisor-fence) | | `docs/skill-validation-routine-brief-2026-07.md` | 2 | scope-record | | `docs/devils-advocate-audit-2026-06-18.md` | 1 | auditrecord | | `docs/kb-mechanism-redesign-brief.md` | 1 | designrecord | | `docs/r14-persona-gate-measurement-2026-09.md` (denne fila) | 33 | målerecord — se note under | | **SUM** | **116** | i 11 filer | **Dette dokumentet blir selv en oppføring — målt, ikke anslått.** Det bærer persona-strengen fordi det måler den: **33 persona + 8 produkt** (klassifikatoren kjørt på fila selv). R14-baselinen må derfor emitteres til **116 persona i 11 filer** i registeret, og produkt-pinnene må inkludere dette dokumentets 8. Et unntakssett som ikke er lukket under sin egen dokumentasjon, ugyldiggjør seg selv ved første commit — og en global produkt-sum ville blitt usann av nettopp denne fila, som er grunnen til at G5 pinnes per fil. **Én oppføring er flyttet på skjønn.** `docs/kb-update-apply-brief.md:19` ligger under `docs/`, men er ikke et record: det er en levende subagent-kontrakt som sier «behold «For Cosmo»-seksjon». Den er sortert på det diskriminerende trekket (operativ vs. historisk), ikke på stiprefikset, og hører derfor i **leveranseflaten** — ikke i registeret. Krever operatørens ja. ### Leveranseflaten (G4 → 0): 62 forekomster i 32 filer `README.md` 14 · `commands/` 32 i 23 filer · `skills/ms-ai-advisor/SKILL.md` 6 · `skills/ms-ai-engineering/SKILL.md` 1 · `scripts/kb-update/transform-prompt.md` 2 · `scripts/skill-gen/prompt-template.md` 2 · `CLAUDE.md` 2 · `NOTICE.md` 1 · `playground/A11Y-RAPPORT.md` 1 · `docs/kb-update-apply-brief.md` 1. **Roadmapens R14-scope er ufullstendig.** Den nevner «SKILL.md-er, 23 commands, 11 docs, rot-filer + `generate-skills.md`/`transform-prompt.md`». Målt mangler: `scripts/skill-gen/prompt-template.md` (2 — og den er live, lest av `generate-skills.sh`) og `playground/A11Y-RAPPORT.md` (1). Ordrens «13 docs» er også feil; roadmapens 11 stemmer (9 record + briefen + apply-briefen). `playground/A11Y-RAPPORT.md:15` er grensetilfellet: «| Tester | Cosmo Skyberg via Claude Code |» er en proveniens-linje som attribuerer en faktisk testkjøring til en oppdiktet person. Foreslått som leveranseflate — å nøytralisere den gjør rapporten sannere, ikke bare renere. --- ## 5. Den andre åpne beslutningen R14 ikke kan starte uten Briefens §1 stiller spørsmålet som aldri er besvart: > «Skal advisor-dialogen ha en ny nøytral ramme («arkitekturrådgiver»), en ny navngitt persona, > eller ingen persona? Dette styrer SKILL.md + kommando-omskrivingen og er den eneste reelle > designbeslutningen.» R13 ratifiserte en **heading-form** (`For Cosmo` → `For arkitekten`) i ref-korpuset. Det er ikke svaret på §1. `skills/ms-ai-advisor/SKILL.md` er en ~250-linjers persona-definisjon i andreperson («Du ER …», «Du er … en erfaren løsningsarkitekt»), og 23 kommandoer åpner med «Du er … i en X-rolle». En mekanisk substitusjon gir ubrukelig norsk. §1 må besvares før R14-transformen skrives — den er en separat beslutning fra unntakssettet, ikke en del av det. --- ## 6. Tall som ble arvet og målt usanne | Arvet påstand | Kilde | Målt | |---|---|---| | «`3a73eea` er UPUSHET» | ordre + STATE.md | **pushet** (`git ls-remote origin refs/heads/main`) | | «briefen har ingen unntaksliste ⇒ gaten er skrevet uten unntak» | ordre | gaten **har** klausul `(unntak per cosmo-removal-brief)`; briefen har «eller dokumentert restmengde» | | «13 docs-filer» | ordre | **11** (roadmapens tall stemmer) | | «4 SKILL.md» | ordre | 4 av **5** bærer strengen — riktig, men repoet har 5 | | «417 filer nevner Cosmo / 956 forekomster» | briefen 2026-06-24 | historisk, pre-R13 — ikke gjenbrukbart | **Ikke målt i denne økten:** de 29 ikke-`.md`-filene er talt, men ikke persona/produkt-klassifisert per forekomst. De ligger utenfor gatens `--include='*.md'` og utenfor R14s ratifiserte flate; skal de inn, er det en egen scope-utvidelse med egen måling.