llm-ingestion-okf svarte at (d) er gjennomførbar og målte to grunner til at den slår deres egen (b). Den ene korrigerer oss: konflikten er ikke bare normativ. Fasitsettene finnes hos implementasjonene, `generated` ligger på :8 inne i prefikset i fire filer, så :280-halvdelen fyrer ved deres neste release. Reprodusert her, inkl. _is_ingest_owned (materialize.py:131-150). Kontrollen avdekket et selvstendig punkt ingen har meldt: :29 sier "the SHARED golden extractions" i bestemt form, men det finnes TO disjunkte sett — okf har orders/products/metrics/status, po-claude har costs/edge/meta, og de eneste felles navnene (index.md) er byte-ulike. Commons har aldri hatt settet. Konformansleddet er derfor ikke-testbart i dag. Ikke en del av V1, ikke i køen — tatt med fordi det avgjør hvor tungt :29-argumentet veier. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XYkLsRfSBBUjULS219Fy8X
15 KiB
V1 — hvilken form skal generated ha i ingest-spec etter OKF v0.2?
Status: beslutningsunderlag for operatøren. Fire opsjoner med målt kostnad, ingen anbefaling. Utløst av
llm-ingestion-okf(coord, 2026-07-26) som spør fordi authorship er vår: deres DEFAULT-profil staterer ingest-spec §5, og «ingen lokale spec-endringer» er deres stående non-goal.Underlaget rører ingen spec-tekst.
ingest-spec.mdstår uendret påbfa5a9b/9801d35.
Beslektet: 2026-07-25-amendment-underlag.md (køen av ratifiserbare punkter — V1 hører hjemme
der hvis den ratifiseres), 2026-07-25-b1-nav-golden-normative-status.md (samme form).
1. Det som ikke er oppe til vurdering
- Ærlighetsregelen selv (
ingest-spec.md:33-34, avledet avmethod-spec.md:26) er unwaivable. Alle fire opsjoner under oppfyller den. Spørsmålet er hvilken form merkingen har, aldri om den finnes. - Eierskaps-stempelets funksjon (
:70,:82): at re-materialisering bare rører egne filer, og at en kurert skriver avviser det komplette stempelet. Ingen opsjon svekker den regelen. ingested_atsom eksplisitt påkrevd argument (:139-143). Ingen opsjon innfører wall-clock. Deratfinnes, bindes den tilingested_at.- Hastegrad.
llm-ingestion-okfer ikke blokkert: deres v0.2-støtte kommer som en ny profil ved siden av DEFAULT, additivt. Ingenting her er en brannslukking.
2. Premissene, verifisert
llm-ingestion-okfs to påstander er kontrollert mot kilden, ikke overtatt:
- Oppstrøms: OKF v0.2 (
GoogleCloudPlatform/knowledge-catalog,okf/SPEC.md) definerergenerated: { by, at }, oggenerated.byer REQUIRED withingenerated, typet som en aktør per §7. Aktørkonvensjonen har tre former:<producer>/<version>for agenter og verktøy,human:<id>for en person,process:<id>for en automatisert prosess. - Toleransen dekker det ikke. v0.2 sier at konsumenter «MUST NOT reject documents with
unrecognized fields» og ikke skal avvise for manglende valgfrie felter eller ukjente
nøkler. Ingen setning pålegger en leser å svelge en kjent nøkkel med feil type.
llm-ingestion-okfs lesning holder. - Historikken frikjenner valget.
generatedvar ikke reservert i v0.1. Ingen innførte en defekt; v0.2 tok navnet etterpå.
Én forbeholdsrad: deres egen plan (okf-v0.2-alignment.md) slår fast at spec-en er lest på
main — en gren, ikke en tag — og at «an enumeration read off a moving branch is a premise, not
a fact». Vår kontroll traff samme bevegelige gren. Ingen frossen spec-tekst bør endres før
oppstrømsversjonen er pinnet til en commit. Det gjelder O1, O2 og O3 likt.
3. generated bærer to laster i vår spec, ikke én
Dette er funnet som former underlaget, og grunnen til at opsjonssettet ikke er tre.
Nøkkelen opptrer 7 ganger som kontraktsreferanse, fordelt på fem seksjoner. De deler seg på to akser som ingen av dem navngir:
| Last | Hvor | Hva den svarer på | Hvem leser den |
|---|---|---|---|
| Ærlighetsmarkør | §1 :34, §7 :214 |
«er dette maskingenerert?» | en leser/presentatør av bundelen |
| Eierskapspredikat | §3 :70, §3 :82, §11 :275 |
«hvilke filer eier ingest — og hva skal en kurert skriver avvise?» | materialiseringen og dør C |
Oppstrøms generated { by, at } er provenance/attribusjon — den første lasten, ikke den
andre. v0.2 har ingen skriveeierskaps-semantikk; feltet er valgfritt, konsument-skrivbart og
fritt for enhver aksesskontrollmening.
Konsekvensen er ikke at feltet ikke kan bære begge, men at en opsjon som flytter
eierskapspredikatet over på et oppstrømsdefinert felt må uttale det: predikatet går fra en
literal-sjekk (generated == true) til en parse-og-match på et felt hvis grammatikk oppstrøms
eier og fritt kan revidere. Konjunksjonen med ingest_manifest — vår egen nøkkel, ikke reservert
oppstrøms i noen versjon — bærer fortsatt uforfalskbarhet-mot-uhell, så stempelet kollapser
ikke. Men :82s «permitting either field alone» må omformuleres: under v0.2 vil kurert
innhold legitimt kunne bære en generated-mapping med en helt annen by.
4. Spørsmålet
Skal
generatedi ingest-spec §5/§7 forbli den literaletrue, anta v0.2-formen{ by, at }— og i så fall med hvilken aktørstreng — eller skal vår markør flytte til en nøkkel oppstrøms ikke eier?
5. Opsjonene, med målt kostnad
Kostnad er talt som kontraktslinjer som må skrives om av de 7 (:34, :70, :82, :152,
:214, :275, :309).
Det som ikke koster noe i noen opsjon: §5s formkrav overlever uendret. Prefikset er «OKF
line-oriented key: value» (:150) og «All values MUST be single-line» (:158) — v0.2s
kanoniske form for generated er en inline flow mapping på én linje, så den er single-line
og line-oriented allerede. :153 («additional frontmatter keys MAY follow») er heller ikke i
veien. Ingen opsjon tvinger fram en rikere frontmatter-modell i specen.
O0 — la generated: true stå, dokumentér avviket
0 av 7 linjer. Ingen frossen tekst røres; ingenting går i ratifiseringskøen. Eneste tilføyelse er en merknad om at nøkkelen kolliderer med et v0.2-definert felt.
Kostnad: DEFAULT fortsetter å emittere en v0.2-definert nøkkel med v1-verdi. En v0.2-leser har ingen plikt til å akseptere den (§2). Kollisjonen forsvinner ikke — den venter.
Reverserbar. Ja.
O1 — v0.2-form med produsent-aktør (llm-ingestion-okfs anbefaling)
generated: { by: "llm-ingestion-okf/<versjon>", at: <ingested_at> }, predikatet utledet av
generated.by.
5 av 7 linjer (:34, :70, :82, :214, :275). :152 og :309 navngir bare nøkkelen
og overlever.
Denne opsjonen kolliderer med en eksisterende normativ setning — se §6. Kostnaden er ikke bare fikstur-regenerering.
Reverserbar. Nei — frossen normativ tekst.
O2 — v0.2-form med produsent-nøytral aktør
generated: { by: "process:<fast id>", at: <ingested_at> }. v0.2 §7 tillater eksplisitt
process:<id> for en automatisert prosess (verifisert, §2). Aktøren navngir da prosessen
specen definerer, ikke verktøyet som kjørte den.
5 av 7 linjer — nøyaktig samme som O1. Den eneste tekstlige forskjellen mot O1 er aktørstrengen; den avgjør til gjengjeld §6.
Kostnad: generated.by identifiserer ikke lenger hvilket verktøy som produserte filen.
Produsent-identitet må da bo i implementasjonens egen logg. Om det er et tap eller et krav
avhenger av §6.
Reverserbar. Nei.
O3 — døp om vår markør, la generated være fri
Vår markør flyttes til en nøkkel oppstrøms ikke eier; generated overlates til v0.2-semantikk.
7 av 7 linjer — også :152 (prefiks-lista) og :309 (kryss-sjekk-tabellen), fordi nøkkelen
selv skifter navn. Dyrest i tekst.
Til gjengjeld: predikatet bevares eksakt som en literal-sjekk, aksene i §3 skilles ved konstruksjon, og kollisjonen kan ikke gjenoppstå ved neste oppstrømsrevisjon. v0.2 forbyr det ikke — de nye feltene er valgfrie oppstrøms.
Kostnad: interop-tapet er reelt. En v0.2-leser som spør «er dette maskingenerert?» via
generated får ikke svar. Ærlighetsregelen er oppfylt internt, men ikke lesbar for formatets
egne lesere — som er en del av hvorfor vi ligger i OKF i det hele tatt.
Reverserbar. Nei.
6. Funnet som omformer opsjonssettet (ikke en anbefaling)
O1 som formulert kolliderer med konformansleddet i §1.
ingest-spec.md:29: en konform implementasjon MUST «reproduce the shared golden extractions (§11) byte for byte».ingest-spec.md:267:expected-bundle/er «compared file by file, byte for byte».ingest-spec.md:280: sømmenGolden regressionfyrer når «any byte of a golden extraction's expected bundle diverges».generatedligger i det obligatoriske ordnede prefikset (:149-152) — altså inne i de bytene.
Med by: "llm-ingestion-okf/<versjon>" bærer en delt fasit én produsents navn og
versjonsnummer. Da følger to ting mekanisk:
- Ingen annen konform implementasjon kan reprodusere fasiten byte for byte. Kravet i
:29gjelder enhver konform implementasjon, ikke den som lagde fikstursettet. Kravet blir uoppfyllbart ved konstruksjon for alle andre enn én. Golden regressionfyrer på hver versjonsbump av biblioteket — uten at noen kontrakt har endret seg. Sømmen slutter å måle det den er satt til å måle.
O2 unngår begge: aktørstrengen er da specens, ikke produsentens, og bytene forblir produsent-nøytrale. O0 og O3 berører ikke spørsmålet.
Merk hva funnet ikke er. Det er ikke et argument for O2 og mot O1 i seg selv. Operatøren kan
gyldig svare at fasit-klassen aldri får mer enn én produsent, eller at generated skal ut av
det byte-sammenlignede prefikset. Men da er det valget som må ratifiseres — funnet sier bare
at O1 ikke kan vedtas uten samtidig å ta stilling til :29.
6.1 Rekkevidde-forbeholdet, korrigert 2026-07-26
Første utgave skrev at konflikten er «normativ, ikke observerbar — den utløses den dagen commons
publiserer sin første ingest-fasit». Det var for snevert, og llm-ingestion-okf korrigerte
det med en måling. Riktig bilde, etter kontroll i alle tre trær:
examples/ingest-golden-*finnes fortsatt ikke i commons — og har aldri gjort det (git log --all -- 'examples/ingest-golden-*'→ tomt).- Men fikstursettene finnes hos implementasjonene, og
generatedligger i bytene: fire filer hosllm-ingestion-okf, alle på:8, inne i prefikset. Del (ii) av funnet — atGolden regression(:280) ville fyre på hver versjonsbump — er derfor observerbar i dag, ikke i framtiden. Den utløses ved deres neste release.
6.2 Funnet under funnet: «the shared golden extractions» har ingen referent
Kontrollen for 6.1 avdekket noe som gjelder uavhengig av hele V1-spørsmålet, og som ingen har meldt:
| Repo | examples/ingest-golden-*/expected-bundle/ |
|---|---|
| commons | finnes ikke, har aldri funnes |
llm-ingestion-okf |
ingest-orders.md, ingest-products.md, ingest-metrics.md, ingest-status.md (+ 3 index.md) |
portfolio-optimiser-claude |
ingest-costs.md ×2, ingest-edge.md, ingest-meta.md (+ 2 index.md) |
Overlappet i innholdsfiler er null. De eneste sammenfallende navnene er index.md, og de er
byte-ulike (ulik oppsummering, ulike lenkemål — verifisert med cmp).
ingest-spec.md:29 krever at en konform implementasjon reproduserer «the shared golden
extractions (§11) byte for byte». Bestemt form forutsetter ett sett. Det finnes to, begge
lovlig navngitt etter konvensjonen i :259-260, ingen av dem publisert her. Konformansleddet
er dermed ikke-testbart i dag — ikke fordi fasiten mangler, men fordi det er to av dem, og
hver implementasjon reproduserer sin egen per konstruksjon.
Dette er et selvstendig punkt, ikke en del av V1, og det er ikke i køen. Det er tatt med
her fordi det avgjør hvor tungt :29-argumentet i §6 veier: argumentet er ikke «dette bryter
en delt fasit vi har», men «dette sementerer at en delt fasit aldri kan oppstå».
7. Det som ikke er commons' å avgjøre
- Hvilken opsjon som velges. Spec-teksten er frossen; endringer går gjennom
ratifiseringskøen. V1 er punkt nummer 8 hvis den ratifiseres — den står utenfor de 7 i
2026-07-25-amendment-underlag.mdog fortrenger ingen av dem. - Hva
llm-ingestion-okfgjør i sin egen v0.2-profil. Den er additiv og deres authorship. Bare DEFAULT staterer vårt lag. - Om produsent-identitet skal logges et annet sted (O2s pris). Implementasjonens valg.
8. Det som ikke endres uansett utfall
Ærlighetsregelen, eierskapsstempelets funksjon, ingested_at-argumentet, §5s single-line- og
line-oriented-krav, og ingest_manifest som stempelets andre halvdel. Ingen opsjon rører
method-spec.md — nøkkelen forekommer ikke der (grep -c '\generated' method-spec.md` → 0).
Verifiseringslogg
| Påstand | Sjekk | Resultat |
|---|---|---|
v0.2 definerer generated: { by, at } |
okf/SPEC.md @ main, hentet 2026-07-26 |
«generated: { by: reference_agent/gemini-2.5-pro, at: 2026-06-20T22:53:05Z }» |
by er påkrevd |
samme | «generated.by: REQUIRED within generated. An actor (§7).» |
| Aktørkonvensjonen har tre former | samme, §7 | <producer>/<version> / human:<id> / process:<id> |
timestamp er superseded |
samme | «timestamp is superseded by generated.at» |
| Toleransen gjelder ukjente, ikke feiltypede | samme | «MUST NOT reject documents with unrecognized fields»; lista dekker manglende valgfrie + ukjente |
| Oppstrøms er lest på en gren, ikke en tag | llm-ingestion-okf/docs/plan/okf-v0.2-alignment.md |
«main on 2026-07-26 — a branch, not a tag» |
| Kontraktsreferanser til nøkkelen | grep -n '\generated' ingest-spec.md` |
7 linjer: :34 :70 :82 :152 :214 :275 :309 |
| Nøkkelen finnes ikke i method-spec | grep -c '\generated' method-spec.md` |
0 |
| Ærlighetsregelen er unwaivable | ingest-spec.md:33-34, method-spec.md:26 |
«unwaivable» begge steder |
Stempelet er generated: true + ingest_manifest |
ingest-spec.md:70, :82 |
ordrett sitert over |
| Dør C avviser kun det komplette stempelet | ingest-spec.md:82-85 |
«while permitting either field alone» |
generated ligger i det ordnede prefikset |
ingest-spec.md:149-152 |
7 nøkler, generated er den sjuende |
| Prefikset er åpent bakover | ingest-spec.md:153 |
«additional frontmatter keys MAY follow it» |
| Single-line-kravet holder for flow mapping | ingest-spec.md:150, :158 |
«line-oriented key: value» / «All values MUST be single-line» |
| Konformans krever byte-lik delt fasit | ingest-spec.md:29 |
«reproduce the shared golden extractions (§11) byte for byte» |
| Fasiten sammenlignes byte for byte | ingest-spec.md:267, :280 |
«byte for byte» / «any byte … diverges» |
| Ingen ingest-fasit finnes i commons | ls -d examples/ingest-golden-* |
ingen treff |
| …og har aldri funnes | git log --all -- 'examples/ingest-golden-*' |
tomt |
generated ligger i fasit-bytene hos okf |
grep -rn '^generated' llm-ingestion-okf/examples/ingest-golden-*/expected-bundle/*.md |
4 filer, alle :8 |
| …inne i det ordnede prefikset | sed -n '1,9p' .../ingest-orders.md |
7 nøkler :2-8, generated sist |
| Predikatet nøkler på literalen i dag | materialize.py:131-150 |
frontmatter.get("generated") != "true" + stem-match |
| To disjunkte fasitsett finnes | comm -12 over begge trærs expected-bundle/*.md |
kun index.md-navn felles |
…og de felles index.md er ulike |
cmp på ingest-golden-file/.../index.md |
ULIKE |
| §1 sier «the shared golden extractions» | ingest-spec.md:29 |
bestemt form, én mengde forutsatt |
ingested_at har ingen wall-clock-default |
ingest-spec.md:141 |
«there is NO wall-clock default» |
| Spec-tekst uendret siden 07-21 | git log --oneline -- ingest-spec.md |
bfa5a9b, forrige 7aa53fc — ingen commit etter |