portfolio-optimiser/docs/plan/2026-07-23-d3-status-vocabulary.md
Kjell Tore Guttormsen 8a86f2ab6d Squashed 'shared/' changes from 7aa53fc..a2b57d2
a2b57d2 docs(plan): V1 — «de 5 linjene» var ikke homogene; :214 er ikke en literal
d63e45d docs(plan): okf-versjonssjekken utført — hypotesen falsifisert på to stale premisser
ef31dda docs(plan): V1 §4.2 — pin + id + sitering avgjort, og ratifiseringsgaten funnet
35220f7 docs(plan): V1 §4.1 — serialiseringsformen er bundet av :158, så 6 sider er invariant
8a7d430 docs(plan): operatøren avgjorde V1 (O2) og B1 (O1) — B1 utført, V1 gated
f306c7b docs(plan): V1 §5.1 — konsument-kostnaden målt @ 8a14137, O3-raden priset
ab0ea8f docs(plan): innboksrunden — V1 utvidet med tre målte funn, §7.2-siteringen ref-bundet
84a3010 docs(plan): §7.2 — MCP-spørsmålet er avgjort av frossen tekst, S2.2 og S2.4 er ugated
e984d51 docs(plan): D-B ankret, D-A#3s årsak er repo-avhengig, V1 utvidet med oppstrøms-evidens
3de702b docs(plan): V1 §6 — rekkevidde-forbeholdet korrigert, og funnet under funnet
249425b docs(plan): amendment-underlag — D-A#3s ÅRSAK rettet, drift ikke avvik
4876970 docs(plan): V1-underlag — generated-feltets form etter OKF v0.2
3f18ca7 docs(plan): B1/D4 operator question — nav-golden's normative status, four costed options
29ad8ca docs(plan): amendment-underlag — frossen tekst per køpunkt, med målt fasit-effekt
a67a243 docs(plan): ordering-axes ruling — three distinct axes, as an interpretation record
381d9e5 docs(plan): guard adoption plan pins no version — v0.2 header was stale
54ca0ff docs(plan): D3 ratified — status vocabulary landed in coord register
fe6b998 docs(plan): D3 status vocabulary — canonical 7-token set for roll-up register
c66ccc3 docs(plan): D2 register-form fix — two-output model resolves ÅS#5
b641741 docs(examples): nav-golden fixture class — bundle → read-context goldens
9801d35 docs(spec): method-spec §3 Step 1 — Q3 navigation contract (hierarchy)
bfa5a9b docs(spec): ingest-spec — land ratified D1 stamp model
5f046ab docs(plan): Q3 finding — method-spec §3 silently forbids hierarchical bundles
a013e8b docs(plan): F1 direction — free-text sources belong in ingest-spec door A
84191c6 docs(plan): record commons↔implementation-repo coordination boundary
cae9972 docs(plan): llm-ingestion-guard adoption — planned at future untrusted ingest boundaries

git-subtree-dir: shared
git-subtree-split: a2b57d20fc0953c19776c21ce1311f234386a590
2026-07-31 18:37:48 +02:00

140 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# D3 — status-vokabular: kanonisk token-sett for roll-up-registeret
**Status:** RATIFISERT 2026-07-24 — landet i `~/.claude/coord/register.md` (kanonisk 7-token-sett +
de to reglene inline; `active` og det åpne `…` fjernet). Denne doken er kontrakt-kilden.
**Foranledning:** D2-register-form-fiksen (`docs/plan/2026-07-23-d2-register-form-fix.md`, `c66ccc3`)
landet register-*formen* og ble ratifisert inn i `~/.claude/coord/register.md` (2026-07-23). Både
kontrakten og den globale register-fila **refererer** et status-token-vokabular men **definerer det
ikke** — begge peker eksplisitt til «D3-sporet» (register.md linje 4244, 73; D2 §3.2). Denne doken
forfatter det vokabular-**kontrakten** HER (jf. driftsmodell: kontrakten forfattes i commons,
wiringen i catalog), til ratifisering inn i register-fila.
**Ratifiserte valg (operatør, 2026-07-23):** kanonisk 7-token-sett (`active` foldet inn i
`in-progress`); to normative regler (`partial` transitorisk; `deferred``blocked`); leveranse =
denne proposal-doken (ingen unilateral global edit), speiler D2-mønsteret.
---
## 1. Gapet: vokabularet er referert, ikke definert
Roll-up-markøren har formen `topic: status — prosa` (utgang A / STATE.md) og `topic: status`
(utgang B / `.rollup-carrier`). Første token etter `:` er den maskinlesbare statusen. D2 fastslo at
token-settet trekkes fra «D3-status-vokabularet» men lot definisjonen stå åpen — register.md lister
et *kandidatsett* med et etterfølgende `…` (åpen-endet), ikke en normativ definisjon.
**Ground truth (verifisert 2026-07-23):** kun to tokens er i faktisk bruk på tvers av
`~/repos/*/STATE.md``planned` (5×) og `not-applicable` (1×). Resten av settet er prospektivt.
Dette er altså en definisjon *før* bred bruk: D3 setter den kanoniske betydningen slik at fremtidige
markører er konsistente, ikke en migrasjon av eksisterende data.
## 2. Kanonisk token-sett (normativt)
Syv tokens. `active` (i register.md-kandidatlista) droppes — det overlapper `in-progress` uten skarp
semantisk forskjell; en ekstra synonym svekker den maskinlesbare disiplinen.
| Token | Semantikk | Terminal? |
|-------|-----------|-----------|
| `planned` | Avgrenset scope, ikke startet. | Nei |
| `in-progress` | Aktivt arbeid, én eier, forventet å nå `done`. | Nei |
| `partial` | **Transitorisk.** Noen konstituerende deler ferdig, andre utestående — potensielt under ulike eiere. MÅ bære eier + neste-steg i utgang-A-prosaen (§3.1). Aldri en terminal hviletilstand. | Nei |
| `blocked` | Kan ikke fortsette — venter på en **ekstern** avhengighet. Navngir blokkereren i prosaen. | Nei |
| `deferred` | **Bevisst** utsatt — et valg om å ikke gjøre nå, ikke venting på noe. Distinkt fra `blocked` (§3.2). | Nei |
| `done` | Fullført, ingen utestående arbeid. | Ja |
| `not-applicable` | Temaet gjelder ikke dette repoet (f.eks. spec-eier uten kjørbar pipeline). | Ja |
**Terminal-klassifiseringen er informativ, ikke håndhevet:** den skiller hviletilstander (`done`,
`not-applicable`) fra tilstander som forventer videre bevegelse. Den muliggjør en fremtidig
staleness-heuristikk (en ikke-terminal markør som ikke har endret seg på lenge fortjener tilsyn),
men denne doken *innfører ingen slik gate* — det finnes ingen pålitelig tidsstempel-mekanisme i
markør-formen, og å oppfinne en her ville være spekulativt scope.
## 3. To normative regler
### 3.1 `partial` er transitorisk — krever eier + neste-steg
`partial` beskriver arbeid delt i konstituerende deler med ulik framdrift, ofte ulike eiere. Uten en
eksplisitt eier + neste-steg blir det en åpen «halvferdig»-tilstand uten vei ut. Regelen:
> En `partial`-markør hvis utgang-A-prosa mangler både en eier og et neste-steg er **malformert**.
Dette er en disiplin på **utgang A** (STATE-prosaen), ikke utgang B. Utgang B bærer kun token-et
(`topic: partial`) og er offentlig-trygg per D2 §3.2 — eier/neste-steg-prosaen forlater aldri utgang
A. Regelen kolliderer derfor ikke med D2s offentlig-trygghet (V4): den håndheves der prosaen finnes.
**Grounding:** «form→catalog, plumbing→okf, tillit→guard, spec→commons» (fra
`llm-ingestion-okf`-markøren) er nettopp den fler-eier-delingen `partial` fanger — et tema der én
eiers del kan være ferdig mens en annens er utestående.
### 3.2 `deferred` ≠ `blocked` — frivillig vs. ufrivillig
- `blocked`: arbeidet *kan ikke* fortsette; en ekstern avhengighet står i veien. Ufrivillig.
- `deferred`: arbeidet *kunne* fortsette, men er bevisst nedprioritert. Frivillig.
Skillet bærer beslutnings-informasjon: `blocked` inviterer «løs blokkereren»; `deferred` sier
«dette ligger med vilje, ikke rør». Å konflatere dem skjuler hvorvidt noen venter på noe.
**Grounding (begge fra dagens økosystem):**
- **`deferred`:** commons' «broadcast (bærer-modus per repo) **bevisst utsatt** — builder tolererer
fravær → ingen andre repo blokkeres» (STATE). Ingenting venter; valgt å ligge. Tekstbok `deferred`.
- **`blocked`:** catalogs «ÅS#5-gatede STEG 0» var `blocked` på D2-ratifiseringen inntil commons
varslet via coord (som *låste opp* steget). Ekstern avhengighet, ufrivillig — tekstbok `blocked`.
## 4. Konsekvens for register.md ved ratifisering
Ratifisering erstatter register.md-kandidatlista (linje 4244) med det kanoniske settet:
- Fjern `active` (foldet inn i `in-progress`).
- Fjern det åpen-endede `…` — settet er lukket og normativt.
- Legg til de to reglene (§3.1, §3.2) eller en peker til denne doken.
Ingen eksisterende markør må endres: `planned` og `not-applicable` (de eneste i bruk) er begge i det
kanoniske settet.
## 5. Avhengigheter og grenser
- **D2** (`c66ccc3`, register.md) leverer *formen* som konsumerer dette vokabularet. D3 fyller
vokabular-referansen D2 lot stå åpen. D3 endrer **ikke** to-utgangs-modellen, bærer-grammatikken
eller builder-modusene.
- **catalog** eier builderens *wiring*. En builder KAN håndheve §3.1-gaten (regex på `partial`-linjer
i utgang-A-kilden) og bør avvise ukjente tokens utenfor det kanoniske settet — men det er
catalog-wiring, ikke denne kontrakten. Commons rører ikke catalog-moduler.
- **Ingen global konvensjon endres her.** Ratifisering (register.md-oppdateringen) er neste steg,
etter operatør-OK.
## 6. Verifisering
Testbare kriterier som beviser at kontrakten er korrekt og ikke-regressiv:
- **V1 (ingen regresjon):** de to tokens i faktisk bruk er begge i det kanoniske settet.
`grep -rhoE '^[a-z][a-z0-9-]+: (planned|not-applicable)' ~/repos/*/STATE.md` → treff; ingen
eksisterende markør faller utenfor settet.
- **V2 (`active` er ikke i bruk — trygt å droppe):**
`grep -rhE '^[a-z][a-z0-9-]+: active\b' ~/repos/*/STATE.md` → tomt. Bekrefter at å folde `active`
inn i `in-progress` ikke bryter noen levende markør. **Verifisert 2026-07-23: tomt.**
- **V3 (register.md refererer, definerer ikke — gapet er reelt):**
`grep -n 'D3' ~/.claude/coord/register.md` → linjene som utsetter til D3-sporet (i dag 4244, 73).
Etter ratifisering skal disse erstattes av den normative definisjonen.
- **V4 (`partial`-gaten er utgang-A-lokal, kolliderer ikke med D2 V4):** en `partial`-linje bærer
eier + neste-steg kun i prosa (etter em-dash); utgang B (`.rollup-carrier`) forblir prosa-fri per
D2 §3.2. Gaten `partial ⇒ prosa har eier+neste-steg` og D2s gate `.rollup-carrier har ingen prosa`
gjelder to ulike utganger og kan begge holde samtidig.
- **V5 (`deferred`/`blocked`-skillet er observerbart):** dagens `deferred`-case (commons' bevisst
utsatte broadcast) og `blocked`-case (catalogs ÅS#5-gatede STEG 0, nå løst) er distinkte i
økosystemet (§3.2 grounding) — skillet koder reell beslutnings-informasjon, ikke en synonym.
**Nøkkelantakelser — eksplisitt testet:**
- *«Vokabularet er referert men udefinert i register.md.»* Testet: `grep -n 'D3' register.md`
linje 4244 («D3 er eget spor; her *refereres* vokabularet, defineres ikke») + linje 73
(«Status-vokabularet: D3-sporet»). **Verifisert 2026-07-23.**
- *«Kun `planned` + `not-applicable` er i bruk; resten er prospektivt.»* Testet:
`grep -rhoE ... ~/repos/*/STATE.md | sort | uniq -c``planned` 5×, `not-applicable` 1×, ingen
andre. **Verifisert 2026-07-23.** D3 er en definisjon før bred bruk, ikke en migrasjon.
## 7. Ratifiseringssti
1. ~~Operatør-OK på dette vokabularet + de to reglene.~~ **GJORT** (2026-07-23).
2. ~~Ratifiser inn i `~/.claude/coord/register.md`: erstatt kandidatlista med det kanoniske settet +
reglene; fjern `active` og `…`.~~ **GJORT** (2026-07-24): ny «Status-vokabular»-seksjon (tabell +
regel 1/2) + kontrakt-kilde-peker; vokabular-bulleten og Eierskap-pekeren oppdatert.
3. catalog kan (valgfritt, deres wiring) håndheve §3.1-gaten + avvise ukjente tokens i builderen. — GJENSTÅR (catalog-spor).