Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0145ZKPLMVeqM47z2jxxokym
13 KiB
Program-brief: okf-toolkit — delt OKF-verktøykasse (modul + formatprøve + evaluator + fabrikk)
Status: BRIEF, ikke plan. Skrevet 2026-07-14 som utrulling av revisjonspakke D-F–D-I §5 pkt. 4. Kilden er pakkas §0.2 (kryssrepo-OKF-inventar), §2 D-G (felles modul + fabrikk + evaluator) og §3 D-H (oppsett/oversettelse). Dette dokumentet er input til et NYTT, eget repo utenfor dette repoets sesjonskø. Programmets to første leveranser er et repo-init + et målbilde/gated sesjonsplan — lages i det nye repoet, ikke her. Ingenting bygges før den planleggingssesjonen har kjørt og operatør har godkjent.
Provenance: anbefalinger = AI (Opus, denne økten 2026-07-14); beslutningene D-G/D-H = operatør, protokollert i revisjonspakka. Arbeidstittel
okf-toolkit— operatør navngir. Gjenbruksmal:llm-ingestion-guard(verifisert: pip-pakke,dependencies = []stdlib-only kjerne, valgfrie extras bak flagg, ærlige begrensninger shippet som kontroll).
1. Formål (hvorfor repoet må finnes)
Én delt, standard-kompatibel OKF-verktøykasse — for alle repoene i denne familien OG for alle som tar i bruk Google Open Knowledge Format (v0.1). I dag rulles formatet ut på ≥6 kodelokasjoner (revisjonspakke §0.2, verifisert mot ground truth 2026-07-14):
| # | Lokasjon | Størrelse | Delmengde |
|---|---|---|---|
| A1 | portfolio-optimiser/.../okf.py |
202 l | les + naviger + skriv (Steg 8-primitiver) |
| A2 | portfolio-optimiser-claude/.../okf.py |
134 l | kun les — mangler skrive-halvdelen |
| C1 | claude-code-llm-wiki/tools/wiki_ingest/bundle.py |
436 l | OKF-produsent (ingest→bundle) |
| C2 | llm-ingestion-pipeline-security/.../okf.py |
579 l | defensiv validator, reject-by-default |
| B1/B2 | ktg-plugin-marketplace/ (.mjs/.ts) |
JS/TS | index-generering + conformance |
≥4 uavhengige Python-parse_frontmatter + 2 i JS. Konsekvensene (F-INT-2): duplisert
vedlikehold, og at Claude-søskenet (A2) mangler skrive-halvdelen A1 har — så det ikke kan
være «minst like godt» som MAF-repoet (operatørens favoritt). D-G vedtar én delt modul, og
reverserer bevisst de to tidligere «del spec, ikke kode»-beslutningene (marketplace-brief
2026-06-26 + D7) for den tolerante kjernen — operatør-godkjent 2026-07-14. Formatlaget ligger
UNDER det D7-sammenligningen måler, så delt kode her forurenser ikke sammenligningen.
2. Arkitektonisk premiss (arvet fra D-G/D-H — ufravikelig)
- Standard-kompatibel først. Kjernen retter seg etter Google OKF v0.1 — inkludert
/-lenkeformen som method-spec i dag avviker fra (review F4 / D-A pkt. 3; D-G pkt. 1 forsterker denne). Egne utvidelser oppå (innboks-konseptet, ingest-sikkerhet, evaluator-felt) dokumenteres EKSPLISITT som utvidelser og pensjoneres hvis standarden senere løser dem. - Installerbar pakke, avhengighetsfri kjerne, Forgejo — guard-malen én-til-én:
dependencies = [], stdlib-only kjerne, valgfrie adaptere bak extras. Potensielt nyttig for ALLE som tar i bruk Google OKF, ikke bare denne familien. - Ren stdlib, framework-nøytral. Kjernen importerer aldri
agent_framework/mcp(arver A1stest_okf_is_maf_free-invariant + guard-malens stdlib-first). Samme modul konsumeres uendret av begge stacker (D7-portabel). - Fabrikken lever UTENFOR optimalisererens deterministiske kjøresti (ærlighets-grense, §6). Den er et pre-run ingest-steg som materialiserer en bundle FØR en kjøring — ikke et query-time-oppslag i agent-løkka (samme grense som ingest-brief §2; ikke RAG).
- Guard (C2) konsolideres IKKE inn. Motsatt sikkerhetsfilosofi by design (reject-by-default vs. tolerant les). Guard forblir eget repo og brukes som avhengighet av fabrikkens sikkerhetsvask-steg — komponert, ikke kopiert.
3. Scope — to faser
Fase T1 — okf-core-modul + formatprøve (først; liten jobb, fjerner duplikasjonen)
okf-core-modul: tolerant les / naviger / skriv-kjerne som erstatter A1/A2/C1- duplikatene. Skrive-halvdelen (render_frontmatter,write_concept_file,link_in_index— verifisert å finnes i A1, fraværende i A2) blir delt, så Claude-søskenet får den det mangler. Pip-pakke, stdlib-only, guard-malen.- Formatprøve (conformance-testsett): kjørbart testsett mot Google OKF v0.1 + våre utvidelser, som ALLE konsumenter kan kjøre mot sine egne bundles. Testsettet er språknøytral data — så B-paret (JS/TS) kan konsumere formatprøven selv om det ikke kan importere Python-modulen. Load-bearing: en gyldig bundle passerer; en bevisst malformert (feil lenkeform, manglende frontmatter) FEILER.
Fase T2 — evaluator + fabrikk (bygget mot energi-caset som første kunde)
- Bundle-evaluatoren — to jobber (D-G pkt. 5):
- (a) Teknisk korrekthet (deterministisk): konformitet, navigerbarhet, lenke-integritet, kildedekning, ferskhet, sikkerhet, sammendragsdisiplin. Samme input → samme score.
- (b) Tilstrekkelighet (AI-vurdert, åpne kriterier): «omfattende nok til å være nyttig? hva mangler?» — output er fagekspertens arbeidsliste under oppbygging, merket som maskin-vurdering/veiledning, aldri deterministisk fakta.
- Bundle-fabrikken (operatørs viktigste nå): bruker slipper filer/mapper i en bundle-innboks → prosessen strukturerer, oppsummerer, lenker, stempler og sikkerhetsvasker (guard som avhengighet) → ferdig base som evaluatoren scorer høyt på de deterministiske dimensjonene. Dom-oversettelse (D-H pkt. 3): eksperten leverer fri-format-fil → fabrikken AI-oversetter til det strenge domsformatet; den strukturerte dommen peker ALLTID på ekspertens originalfil (provenance), så en stikkprøve kan sammenligne «hva eksperten skrev» mot «hva systemet forsto». Dommen er menneskets; AI er oversetter.
4. Konsumenter + migreringsrekkefølge
portfolio-optimiser(A1) → importérokf-core; A1s skrive-primitiver flyttes inn i modulen. Full suite (baseline 279/4) skal forbli grønn etter migreringen.portfolio-optimiser-claude(A2) → importérokf-core; får skrive-halvdelen det mangler i dag (Steg 8-primitiver). Dette er hovedgevinsten for D-Gs «minst like godt»-mål.claude-code-llm-wiki(C1) → senere; produsent-stien (ingest→bundle) legges påokf-core+ fabrikken.ktg-plugin-marketplace(B1/B2) → forblir JS/TS (kan ikke dele Python-kode), men konsumerer formatprøven som delt data.llm-ingestion-guard(C2) → migreres IKKE; forblir eget repo og trekkes inn som avhengighet i fabrikkens sikkerhetsvask.
Rekkefølge (D-G pkt. 6): modul + formatprøve FØRST (fjerner 6-steders-duplikasjonen), fabrikk + evaluator DERETTER — bygget mot energi-caset (D-F pkt. 7) som første kunde. Demo-stien (D-H pkt. 4): fersk klon → unzip energi-eksemplet i innboksen → fabrikken bygger → hele sløyfa kjører.
5. Ærlighets-grenser (§1 målbilde — ufravikelig)
- Fabrikken bruker AI og lever utenfor den deterministiske kjøringen. Alt den produserer
merkes maskingenerert (
generated: true+ manifest-ref + provenance til kilden). Kontrollen er evaluatoren + ekspertens stikkprøve — ikke fabrikkens egen tillit. - Evaluatorens (b)-output er maskin-vurdering, ikke målt fakta. Deterministisk (a) og AI-vurdert (b) holdes tydelig fra hverandre i rapporten.
- Dom-oversettelsen endrer aldri hvem dommen tilhører. Provenance-lenken til originalfila er vaktposten mot at AI-oversettelsen stille forvrenger ekspertens vurdering.
- Toolkit-repoet påstår ikke å bevise besparelser. Det bygger kunnskapsbasen (input til verdibeviset, D-I) — verdipåstanden lever i optimaliserer-repoene, ikke her.
6. Ikke-mål (dokumentert grense)
- Ingen erstatning av C2s reject-by-default-parser. Den tolerante kjernen og den defensive validatoren er bevisst ULIKE verktøy; fabrikken komponerer begge, den slår dem ikke sammen.
- Ingen RAG / query-time-oppslag. Fabrikken er write-time ingest FØR kjøring (ingest-brief §2-grensen står).
- Ingen compliance-funksjoner. Rent teknisk verktøykasse (DPIA/ROS eies av deployer).
- Ingen dedikert lese-visning i første scope. Obsidian/VS Code holder (bundles er ren markdown, D-H pkt. 5); en dedikert lese-visning er en SENERE byggekloss i repoet, ikke nå.
- Ingen endring i optimalisererens agent-atferd eller modell-map.
7. Avhengigheter og blokkeringer
- Energi-caset er første kunde (D-F pkt. 7): fabrikk + evaluator bygges og bevises mot energi-eksemplet i tilnærmet realistisk skala. T2 kan derfor koordineres med D-F-innholds- arbeidet, men T1 (modul + formatprøve) er uavhengig og kan starte umiddelbart.
- Blokkerer fabrikk-avhengige deler av D-F (materialisering av dimensjonsbiblioteket) og D-H (demo-stien, dom-oversettelsen).
- D7-speiling: begge stacker skal konsumere
okf-coreuendret; migreringen av A1 og A2 er koblet (ikke uavhengige økter). - Guard-avhengighet: fabrikkens sikkerhetsvask krever
llm-ingestion-guardsom publisert/ installerbar avhengighet.
8. Åpne spørsmål til operatør (må avklares før/i repo-init)
- Navn: arbeidstittel
okf-toolkit— operatør fastsetter endelig pakkenavn (påvirkerpip install <navn>+ importsti). - Lisens: guard-presedens er MIT (S12-linja). Bekreft MIT for toolkit, eller avvik.
- Publiseringsrekkefølge: publiseres
okf-core(T1) som egen pakke-release FØR fabrikken (T2) finnes, eller samtidig? (Guard-malen taler for tidlig, liten kjerne-release.) - Repo-plassering: eget Forgejo-repo bekreftes (som guard), ikke undermappe.
9. Verifisering (for planleggingssesjonen som konsumerer denne briefen)
Fase T1:
- Premissene i §1/§2 kontrollert mot ground truth FØR skriving (§0.2-tallene A1=202/
A2=134/C1=436/C2=579 gjenfunnet med
wc -l; A2 manglerwrite_concept_file/link_in_indexbekreftet medgrep). ✅ (utført i denne briefen 2026-07-14) okf-coreinstallerbar med null avhengigheter: i rent venvpip install <navn>+python -c "import okf_core"lykkes;pyproject.tomlviserdependencies = [].- Kjernen framework-nøytral: en
test_okf_is_maf_free-ekvivalent grønn (grep -R "agent_framework\|import mcp" src/tomt). - Formatprøven load-bearing: gyldig energi-bundle passerer HELE settet; en bevisst
malformert bundle (feil lenkeform / manglende frontmatter) gjør minst én conformance-test
RØD. Standard-kompatibilitet:
/-lenkeformen passerer, den gamle formen flagges. - Migrering:
portfolio-optimiserimportererokf-core, den lokaleokf.py-duplikaten er borte/delegerer, og full suite fortsatt grønn (baseline 279/4). Samme for A2 — som nå EKSPONERER skrive-primitivene (verifiser atwrite_concept_file/link_in_indexer importérbare i Claude-repoet, der de i dag mangler).
Fase T2:
- Evaluator (a) deterministisk + reproduserbar: samme bundle → samme score to kjøringer; en bundle med én brutt intern lenke scorer lavere på lenke-integritet enn samme bundle uten.
- Evaluator (b) merket: tilstrekkelighets-output er tydelig stemplet maskin-vurdering/ veiledning, adskilt fra (a) i rapporten.
- Fabrikk demo-sti: unzip energi-eksemplet i innboks → kjør fabrikk → resultat-bundle
scorer høyt på ALLE deterministiske evaluator-dimensjoner;
grep -RL "generated:" <bundle>/er tomt (hver fil merket maskingenerert). - Dom-oversettelse provenance load-bearing: gitt en fri-format dom-fil i innboksen, har den genererte strukturerte dommen et provenance-felt = kildefilnavnet (en stikkprøve kan åpne begge). Detach provenance-feltet → testen RØD.
- Sikkerhetsvask via guard load-bearing: en innboks-fil med kjent injection-payload fanges (fail-secure) FØR den når bundelen; koble fra guard-avhengigheten → payloaden lander i bundelen (testen RØD).
- Ærlighets-grense: optimaliserer-repoenes suiter kjører fortsatt uten nøkkel/nettverk og
importerer IKKE fabrikken i kjørestien (
grep -R "import.*factory" src/i kjørestien tomt).
10. Prompt for å starte programmet (kjør i det NYE toolkit-repoet, ikke her)
Les <dette repoets>/docs/plan/2026-07-14-toolkit-repo-brief.md (kopier inn) samt
revisjonspakke §0.2/§2 D-G/§3 D-H. Dette er repo-init + PROGRAM-PLANLEGGING for
okf-toolkit — det rører IKKE optimaliserer-repoenes sesjonskø.
1. Verifiser briefens premisser mot ground truth på nytt (§0.2-tallene + at A2 mangler
skrive-halvdelen) FØR noe skrives.
2. repo-init som eget Forgejo-repo etter guard-malen (pip-pakke, dependencies = [],
MIT med mindre operatør avviker, stdlib-only kjerne).
3. Lag i plan-modus: (a) målbilde for okf-toolkit (standard-kompatibilitet + utvidelses-
policy + de to fasene), (b) gated sesjonsplan der HVER sesjon har mål + verifisering
per §9. T1 (modul + formatprøve) FØR T2 (fabrikk + evaluator). Presenter for
godkjenning FØR noe committes.
4. Avklar de åpne spørsmålene i §8 (navn, lisens, publiseringsrekkefølge) med operatør
i klarspråk før repo-init låses.