Banner: «UNDERLAG, ikke ratifisert — men KØPLASSERT» → «RATIFISERT SOM O-A OG
UTFØRT 2026-08-25 (`0f88324`)». Uten dette ville neste økt greppet et
statusfelt som påsto at saken fortsatt var åpen — nøyaktig den stale-premiss-
klassen dokumentet selv advarer mot i §8 punkt 2.
Ny §9 fører utfallet: de to radene ordrett, at O-B/O-C/erstatning er AVVIST og
ikke nedprioritert, premissene re-målt med kontroller (nevner 20 rader,
`generated` = 1, `source` + seks undernøkler = 7, method-spec §12 = 0), og
hvorfor ingen coord-melding er sendt (§8 punkt 4 gjaldt erstatnings-formen).
§1–§7 er BEVART urørt. De er underlaget beslutningen ble tatt på, ikke et
referat av den; skrives de om i etterkant, mister §9 det den viser til.
238 lines
13 KiB
Markdown
238 lines
13 KiB
Markdown
# 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: <ingested_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.
|