# V1-etterspill — krever `generated.by` / `generated.at` egne rader i §12? > **Status: UNDERLAG, ikke ratifisert. Ingen frossen tekst er endret på dette punktet.** > Funnet under utførelsen av V1 (`54e0ec7`, 2026-08-09). V1 selv er ratifisert og utført; > dette er en spenning utførelsen *avdekket*, ikke en del av vedtaket. > > 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`).