# V1-etterspill — krever `generated.by` / `generated.at` egne rader i §12? > **Status: RATIFISERT SOM O-A OG UTFØRT 2026-08-25 (`0f88324`). Saken er lukket.** > Funnet under utførelsen av V1 (`54e0ec7`, 2026-08-09). V1 selv er ratifisert og utført; > dette var en spenning utførelsen *avdekket*, ikke en del av vedtaket. Underlaget sto som > UNDERLAG fra 09.08, ble køplassert 24.08 og ratifisert 25.08. **§1–§7 er bevart slik de sto > da beslutningen ble tatt** — de er underlaget, ikke referatet. Hva køen forpliktet til: **§8**. > Hva som faktisk ble gjort, og hva som ble avvist: **§9**. > > Beslektet: `2026-07-26-v1-generated-felt-okf-v0.2.md` (V1-vedtaket), > `2026-08-02-ss11-mangler-rad-for-ss8.md` (samme klasse: intern spenning i frossen tekst). --- ## 1. Funnet O2 gjør `generated` om fra en literal til en **inline mapping med to navngitte undernøkler**: ``` generated: { by: process:okf-ingest, at: } ``` §12s kryssjekk-tabell bærer fortsatt **én rad** for `generated` (`| generated | provenance frontmatter | §3, §7 |`). Spørsmålet er om `by` og `at` skal ha egne rader. To setninger i frossen tekst gjør dette til mer enn kosmetikk: > **§12, ingressen** — «Every field of the machine-readable contracts, mapped to its normative > section (completeness is enforced by the spec-integrity test)» > **§11, søm «Spec integrity»** — «this spec goes missing, names a concrete agent toolkit, or > **stops documenting a contract field**» §12 er altså ikke en bekvemmelighetstabell. Den står under en **load-bearing søm**. ## 2. Presedensen i vår egen tekst — målt begge veier Dette er poenget som avgjør, og det peker ikke én vei før man skiller aksene. **Presedens FOR egne rader — `source`:** `source` er et strukturert kontraktsfelt med navngitte undernøkler. §12 gir det **både** en toppnivå-rad **og** en rad per undernøkkel: | Rad i §12 | Hva den er | |---|---| | `source` | toppnivå-feltet, «polymorphic on `source.type`» | | `type` | undernøkkel (diskriminator) | | `id` | undernøkkel (felles) | | `root` | undernøkkel, kun `type: "file"` | | `connection_ref` | undernøkkel, kun `type: "sql"` | | `base_url` | undernøkkel, kun `type: "http"` | | `credential_ref` | undernøkkel, kun `type: "http"`, valgfri | Merk at undernøklene er definert i **prosa** i §4 (punktlisten), ikke i §4s tabell — men de får likevel egne rader i §12. Tabell-plassering i §4 avgjør altså ikke §12-plikten. **Presedens MOT egne rader — `ingest_manifest`:** `ingest_manifest` har intern struktur (`{stem}@{hash16}`, §5) og får **nøyaktig én** rad. Struktur inne i en verdi utløser altså ikke automatisk rader. **Aksen som skiller dem:** | Felt | Intern struktur er… | Egne rader? | |---|---|---| | `source` | **navngitte nøkler i en mapping** | ja (4 undernøkler + felles) | | `ingest_manifest` | et **strengformat** med posisjonelle deler | nei | | `generated` (etter O2) | **navngitte nøkler i en mapping** | *åpent — men faller på `source`-siden* | `generated: { by, at }` er en mapping med navngitte nøkler. På den målte aksen ligner den `source`, ikke `ingest_manifest`. ## 3. Hvorfor V1-vedtaket ikke fanget dette `2026-07-26-v1-generated-felt-okf-v0.2.md:161` sier: «`:152` og `:309` navngir bare nøkkelen og overlever.» **Den påstanden er sann om den eksisterende raden** — raden heter fortsatt `generated`, ligger fortsatt i provenance-frontmatter, og peker fortsatt på §3/§7. Ingenting ved raden ble usant. **Den er taus om de to NYE nøklene.** Kostnaden ble talt som «kontraktslinjer som må skrives om» (§5) — en *omskrivings*-akse. Rader som må **tilføyes** er en annen akse, og den ble aldri stilt. Dette er ikke en feil i ratifiseringen; det er et hull i dens scope-formulering. Samme klasse som «de 5 linjene var ikke homogene» og «`:214` er ikke en literal»: kostnadstellingen var riktig på sin egen akse og blind for en nabo-akse. ## 4. Er sømmen rød i dag? Nei — og det er grunnen til at dette ikke haster §11-sømmens ordlyd er «**stops documenting** a contract field». §7s omskrevne feltrad **dokumenterer begge undernøklene** ordrett — den navngir `by`, fastslår at det er en `process:`-aktør, navngir `at`, og binder den til `ingested_at`. Specen har altså ikke sluttet å dokumentere noe. Eksponeringen er mot **§12s egen ingress** («every field … mapped to its normative section»), som er en fullstendighets-påstand om tabellen. Det er en svakere binding enn sømmens ordlyd. **Konsekvens:** ingen kjent implementasjon går rød av dagens tilstand. Dette er en intern spenning, ikke en defekt i drift. ## 5. Opsjoner (ingen anbefaling — operatøren ratifiserer) | | Hva | Kostnad | Hva den koster i konformans | |---|---|---|---| | **O-A** | Tilføy to rader i §12 (`by`, `at` → §7) | 2 linjer, ren prosa | Utvider hva §12 påstår fullstendighet over. Ingen fixture-endring, ingen konsument-kostnad. | | **O-B** | La §12 stå, men **snevre ingressen** til «every top-level field» | 1 linje | Gjør dagens tilstand eksplisitt konform. Men svekker en påstand `source`-radene allerede motsier. | | **O-C** | La alt stå | 0 | Spenningen består, udokumentert. | **O-B har en målt selvmotsigelse:** `root`/`connection_ref`/`base_url`/`credential_ref` er *ikke* toppnivå-felter og står allerede i tabellen. En «top-level»-innsnevring ville gjort fire eksisterende rader uhjemlede. Det er ikke et argument mot O-B, men det må løses samtidig. **Konsument-måling mottatt 2026-08-09 (`portfolio-optimiser-claude`, ført som DERES):** deres §12-vakt keyer på at radens første kolonne er ordrett `| `generated` |`. Konsekvensen skiller skarpt mellom to former som ellers leser likt: | Form | Konsekvens hos dem (deres måling) | |---|---| | **TILFØYE** rader for `by`/`at` (= O-A) | ingen — vakten er urørt | | **ERSTATTE** `generated`-raden med to undernøkkel-rader | vakten går **RØD**, by design (den skal fange at en rad forsvinner) | To ting følger. (1) O-A-radens «ingen konsument-kostnad» er nå målt utenfra, ikke bare antatt av oss. (2) Erstatnings-formen er en **fjerde** opsjon underlaget ikke listet, og den er den eneste som koster en konsument en samtidig endring. De ber ikke om noe; de opplyser. ## 6. Et separat, mindre funn fra samme utførelse `generated.at` gjentar verdien av `ingested_at`, som er sitt **eget felt i samme frontmatter-prefiks** (§5s sju nøkler; §7s tabell). Etter O2 bærer et stemplet dokument altså samme tidsstempel to steder. Dette er **en følge av den ratifiserte formen**, ikke en feil i utførelsen — v0.2s `generated` tar `at` som påkrevd del av mappingen, og §1s premiss («der `at` finnes, bindes den til `ingested_at`») er innfridd nøyaktig som vedtatt. Ført her fordi det er den slags redundans som senere leses som drift hvis ingen skrev ned at den var tilsiktet. **Ikke oppe til vurdering her.** En eventuell konsolidering ville rørt §5s ordnede prefiks, som er en helt annen og dyrere sak. ## 7. Ankere re-målt (2026-08-09, etter `54e0ec7`) Utførelsen flyttet tre av våre egne ankere. Ført ordrett, ikke som linjenumre: | Sted | Seksjon | Status | |---|---|---| | Honesty rule | §1 | omskrevet — «`generated.by` naming the ingest actor» | | Ingest owns only its own files | §3 | omskrevet — «`generated.by` equal to the ingest actor» | | No other writer may forge the stamp | §3 | omskrevet — samme gjengivelse | | Feltraden for `generated` | §7 | omskrevet, definerer begge undernøkler | | Load-bearing «Stamp integrity (curated writers)» | §11 | omskrevet — aktør-spesifikt predikat | | Frontmatter-prefikset (sju nøkler) | §5 | **uendret** — navngir bare nøkkelen | | Kryssjekk-raden for `generated` | §12 | **uendret** — dette dokumentets tema | `generated: true` finnes ikke lenger i specen (verifisert med `grep`). --- ## 8. Køplassering (operatørbeslutning 2026-08-24) **Merk om §-henvisninger: dokumentets §11/§12 er `ingest-spec.md`s, ikke `method-spec.md`s.** Se punkt 1 under. Operatøren har køplassert denne saken. Ordre `20260824T155506Z-3454831118-from-.claude`, punkt 3, sier det eksplisitt: *«Det som mangler er ren køplassering … IKKE utfør selve SS12-arbeidet i denne ordren.»* Denne seksjonen er derfor køoppføringen, ikke utførelsen. **Beslutningen som fortsatt er åpen, er den samme som §5 stiller.** Ingen opsjon er valgt her, og denne seksjonen anbefaler ingen. Utfallsrommet er fire former, ikke tre — §5s O-A/O-B/O-C pluss **erstatnings-formen** §5 selv fører som «en fjerde opsjon underlaget ikke listet». **Hva økten som tar denne saken skal gjøre, i rekkefølge:** 1. **Les hvilken spec §-henvisningene gjelder, FØR den måler.** Hele dette dokumentets §11 og §12 er **`ingest-spec.md`s** §11 og §12 — ikke `method-spec.md`s. Begge filer har en §11 «load-bearing tests» og en §12 «Cross-check table» med identisk ingress, og `method-spec.md`s §12 har verken `generated`- eller `source`-rad. Målt 2026-08-24 mens denne køoppføringen ble skrevet: å lese §-tallet uten filnavnet gir 0 treff og ser ut som «raden er borte». Dokumentet nedenfor navngir ikke filen; gjør det selv før du greper. 2. **Re-mål underlagets premisser før den handler på dem.** Alle tall og sitater i §1–§7 er fra 2026-08-09 og er premisser, ikke fakta. Re-målt 2026-08-24 mot `ingest-spec.md`, med kontroller: `generated` = **1 rad**, `source` + de seks undernøklene = **7 rader**, nevner **20 rader** i tabellen (kjent-positiv); samme grep mot `method-spec.md` §12 = **0** (kjent-negativ). Begge premissene i §1 og §2 står altså. Ankertabellen i §7 er skrevet som seksjon + ordrett tekst nettopp for å kunne re-måles med `grep -F`. Også ordlyden er re-målt 2026-08-24: §11-sømmen lyder ordrett «stops documenting a contract field» (`ingest-spec.md:285`) og §12-ingressen «Every field of the machine-readable contracts …» (`ingest-spec.md:289`) — begge som sitert i §1 og §4. Linjenumrene er ferskvare; sitatene er ankeret. 3. **Legg de fire formene fram for operatøren og få én ratifisert.** Vi forbereder underlaget, operatøren ratifiserer — også når funnet er vårt eget. 4. **Meld formen til `portfolio-optimiser-claude` FØR den ligger i commons' main** dersom den ratifiserte formen er erstatning. Deres §12-vakt keyer på at radens første kolonne er ordrett `` | `generated` | `` (deres måling, ført som deres i §5): tilføying koster dem ingenting, erstatning gjør vakten rød *by design*. Pullen deres er atomisk, så varselet må komme først. **Hva køplasseringen IKKE utløser:** ingen versjonsbump, ingen tag, ingen endring i §5s ordnede frontmatter-prefiks, og ingen behandling av §6s redundans-funn (`generated.at` gjentar `ingested_at`) — §6 fører selv det som en følge av den ratifiserte formen og eksplisitt ikke oppe til vurdering. **Hvorfor det ikke haster, uendret fra §4:** ingen kjent implementasjon går rød av dagens tilstand. Eksponeringen er mot §12-ingressens fullstendighets-påstand, som er en svakere binding enn §11-sømmens «stops documenting a contract field». Køplasseringen er en beslutning om *rekkefølge*, og skal ikke leses som at sømmen har blitt rød. --- ## 9. Utfall (operatørbeslutning 2026-08-25, utført samme dag) Operatøren ratifiserte **O-A**: to rader tilføyd i `ingest-spec.md` §12s kryssjekk-tabell, rett under `generated`-raden. Ordre `20260825T042426Z-7242731354-from-.claude`, utført i `0f88324`. ``` | `by` | provenance frontmatter (`generated` subkey) | §7 | | `at` | provenance frontmatter (`generated` subkey) | §7 | ``` **Avvist, ikke nedprioritert:** O-B (snevre ingressen), O-C (la alt stå) og erstatnings-formen. Ordren sier det eksplisitt. §5s opsjonstabell står urørt som underlag; den beskriver utfallsrommet slik det så ut FØR beslutningen, og skal ikke leses som fortsatt åpen. **Premissene re-målt før handlingen, med kontroller** (25.08, mot `ingest-spec.md`): nevner **20 rader** i §12 (kjent-positiv), `generated` = **1 rad**, `source` + de seks undernøklene = **7 rader**; samme grep mot `method-spec.md` §12 = **0** (kjent-negativ). §11-sømmen «stops documenting a contract field» og §12-ingressen «Every field of the machine-readable contracts …» verifisert ordrett. Alle premissene i §1–§7 står altså; ingenting ble målt annerledes enn i køoppføringen. **Konsument-kostnaden verifisert utenfra, ikke antatt.** §5 førte `portfolio-optimiser-claude`s egen måling (deres §12-vakt keyer på radens første kolonne). Ved utførelsen ble vakten lest direkte i deres kildekode: den sjekker at hvert sporet kontraktsfelt FINNES som rad i en §12-slice, pluss at slicen ikke har degenerert til hele dokumentet. Tilføying rører ingen av delene — `generated`-raden er byte-uendret og alle 13 sporede felt står. Derfor **ingen coord-melding sendt**: plikten i §8 punkt 4 gjaldt erstatnings-formen, som ikke ble valgt. **Utløste ikke:** versjonsbump, tag, fixture-endring, §5s ordnede frontmatter-prefiks, og §6s redundans-funn (`generated.at` gjentar `ingested_at`) — §6 fører selv det som en følge av den ratifiserte formen og eksplisitt ikke oppe til vurdering.