portfolio-optimiser/docs
Kjell Tore Guttormsen f13dc64a0a fix(okf): top-level frontmatter title survives a nested sources: title
P15 (order 20260912T220951Z). okf._frontmatter_from_text was linewise
last-write-wins over EVERY line regardless of indentation, so a curated
concept's own top-level `title:` got silently overwritten by the nested
`sources:\n  - title: ...` block's title. Fix: a top-level (unindented)
key always wins over an indented one of the same name; a nested line
with no top-level counterpart is still preserved (SPEC §4).

Red-before/green-after: new test
test_parse_frontmatter_top_level_title_survives_nested_sources_title
(tests/test_okf.py) failed on 45edbf5 (fm["title"] == "N500:2024",
expected the concept's own), green after the fix.

Re-measured on all four vegnormal-okf bases (concept files / distinct
titles): n100-2023 446/446 (was 1) - n200-2024 1133/1133 (was 1) -
n500-2024 270/270 (was 1) - r761-2025 2756/2407 (genuine repeated
process names, not a collapse). directory_listing on krav/N500:
269 documents / 269 distinct titles (was 1).

tests/test_context_sets_loadbearing.py:
- The P14 tripwire test (asserting parse_frontmatter DID collapse
  titles) is INVERTED, not deleted, per the order: it now asserts the
  fix holds, as a live regression guard.
- own_frontmatter() stays (not replaced by parse_frontmatter): measured
  29,500 field reads (type/title/req_number/prosessnr, all four bases)
  agree exactly except for quote-stripping (2,728/29,500, zero value
  mismatches) - own_frontmatter unquotes for fasit comparison,
  parse_frontmatter deliberately doesn't (D1/(a)/(i): unquote_scalar is
  the ONE unquoting rule).

docs/2026-09-12-p14-kontekstsett.md Part B correction: the "22 of 22
cost words absent from n100/n200/n500" claim was false - n500-2024
carries `kroner` as a false positive (substring match inside
"borkroner", drill bits, not money). The original 22-word list was
never persisted, so only ~9 of the 22 survive named. Replaced with a
newly named, persisted 22-word list and the actual re-measured count:
n100 22/22 absent - n200 22/22 - n500 21/22 (kroner via borkroner) -
r761 18/22 (4 genuine cost words). No gate touched (no fasit anchor is
`kroner`).

Verification: full suite 1643 passed / 5 skipped (was 1642/5 on
45edbf5, +1 new test, 0 removed) - `uv run pytest -q`. ruff check +
ruff format --check clean on the three changed source/test files.
Golden transcripts byte-unchanged: shasum -a 1
tests/golden/demo-transcript.stdout = ea8c534773acdbe41ae68f2c55724d69aaf8be4f,
demo-transcript.stderr = ede3e2f685ce6a14ad9888e9de421d1a66f6c611.
No version bump, no push (both forbidden by the order).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-13 07:40:57 +02:00
..
fase1-spikes fix(fase1): spike B fan-out measures real conversation bleed, not a counter 2026-06-24 11:09:55 +02:00
plan docs(f16): the 1.18.0 assessment measured -- 0 of 19 forms moved, three features assessed and none built 2026-09-12 17:18:46 +02:00
rapport docs: fjern brukernavn, hjemmekatalog-stier og privat namespace fra publisert flate 2026-08-18 13:20:23 +02:00
research docs(research): MAF 1.9.0 capability map — feature-utilization for Fase 2 [skip-docs] 2026-06-24 11:36:26 +02:00
2026-06-24-two-approaches-brief.md docs: plain-text brief — goal + two approaches (MAF vs Claude Agent SDK) + learning goal 2026-06-24 09:21:31 +02:00
2026-06-26-fot-i-bakken.md docs(fot-i-bakken): ground-truth-verifisert levert-vs-lovet — agentiske lag inerte 2026-06-26 15:25:03 +02:00
2026-07-15-foundry-auth-recipe.md docs(1b): Claude på Foundry er en TREDJE klientflate — FoundryChatClient kan ikke binde den 2026-08-13 20:31:36 +02:00
2026-08-13-demo-presentasjon.html docs(deck): begge deck bærer det MÅLTE 1b-utfallet — ærlighet, ikke seier 2026-08-14 20:28:35 +02:00
2026-08-13-fase1a-lokal-ende-til-ende.md docs(fase1a): «uansett modell» hvilte på en måling jeg aldri leste ferdig 2026-08-13 20:19:31 +02:00
2026-08-13-fase4-azure-yaml-valg.md feat(4b): AZURE-profilen leser miljøet sitt, ikke operatørens laptop 2026-08-13 22:27:21 +02:00
2026-08-13-fase4-research-spike.md docs(4·): containeren er bygget — og wheelen er ikke installerbar alene 2026-08-13 21:57:40 +02:00
2026-08-13-presentasjon-ledelse.html docs(deck): tredje deck bærer samme MÅLTE 1b-utfall som de to andre 2026-08-18 09:37:14 +02:00
2026-08-14-fase1b-forste-levende-kjoring.md docs(1b): koordinatene byttet mot plassholdere - vei A, redigert framover 2026-08-18 13:03:11 +02:00
2026-08-18-vurdering-azure-omdoeping.md feat(gate): pakke-gaten leser INNHOLDET, ikke bare filnavn + vurdering av Azure-omdøping 2026-08-18 13:42:02 +02:00
2026-08-25-fable-misjonsreview.md docs: Fable 5 misjons-review — nærmer systemet seg faktisk målet? (ORDRE 20260825T104711Z) 2026-08-25 14:12:23 +02:00
2026-08-25-syretest-vei-ab.md feat(explore): katalogkallet koster O(baser), ikke O(korpus) (ORDRE 20260825T213645Z) 2026-08-26 14:45:16 +02:00
2026-08-26-katalogkostnaden.md feat(explore): katalogkallet koster O(baser), ikke O(korpus) (ORDRE 20260825T213645Z) 2026-08-26 14:45:16 +02:00
2026-08-29-maf-gjelden-omfang.md docs: MAF-gjeldens omfang malt, ikke bygget (F3/F15/F16/U16-17-19, ORDRE 20260825T214801Z) 2026-08-29 09:30:01 +02:00
2026-09-02-f15-maf-pinnen.md docs(f15): nevner-disiplin anvendt paa mitt EGET instrument - 17/16/2, ikke 16/16/2 2026-09-02 19:47:11 +02:00
2026-09-02-misjonsreview-v2.md docs: misjonsreview v2 mot bruksscenarioet — målt, ikke bygget (S2, ORDRE 20260902T113744Z-1245330375) 2026-09-02 17:17:39 +02:00
2026-09-02-read-bundle-kontekstkostnad.md docs: name the mechanism behind the untouched-debate proof, and re-measure all three bases 2026-09-03 01:30:09 +02:00
2026-09-03-forslag-fra-mandat.md docs(s7b): maaledokumentet baerer funnet CLAUDE.md-raden peker paa 2026-09-03 22:40:56 +02:00
2026-09-03-hierarkisk-navigasjon-k2.md docs(s7a-3): ordrens ANDRE binding maalt paa alle 478 K2-nivaaer, og to prosa-hull lukket 2026-09-03 08:09:53 +02:00
2026-09-03-syretest-s7a-k2.md docs(s7a): SS 5s "deler aarsak" var en paastand, ikke en maaling - og maalingen felte tallet 2026-09-03 03:42:18 +02:00
2026-09-03-syretest-s7a2-k2.md fix(docs): rediger vekk absolutt hjemmesti i S7a-2-rapporten - handover-gaten var roed paa HEAD 2026-09-03 06:02:17 +02:00
2026-09-04-major2-proposal-review-k2.md docs(major2): steg 9 fullfoert - M38..M40 roede, K2-omkjoeringen maalt, last_ruling-paastanden rettet 2026-09-05 20:39:52 +02:00
2026-09-04-s2c-debatt-k2.md docs(verdict-gate): maaleavsnittet og invariantraden - fem mutasjoner, fire tall verifisert 2026-09-04 20:41:32 +02:00
2026-09-04-syretest-s7b-k2.md docs(s7b): syretesten paa K2 - maaledokumentet med de fire tallene og tretten roede 2026-09-04 09:04:51 +02:00
2026-09-05-major2-trekreview.md docs(major2): remedieringsfoot under den sporede trekreview-kopien 2026-09-05 22:31:06 +02:00
2026-09-06-major2-levende-k2.md docs(major2): funn (b) re-maalt live - loekka konvergerer paa foerste reviderte forsoek 2026-09-07 00:52:39 +02:00
2026-09-07-okf-prepass-i-debatten.md docs(prepass): before/after on K2, the mutation battery and the invariant row 2026-09-07 14:39:50 +02:00
2026-09-07-prepass-mater-q5b-k2.md feat(prepass): --prepass-seed makes the cut a starting point, and K2 says it costs 2026-09-08 04:02:09 +02:00
2026-09-07-syretest-s7-prepass-k2.md docs(s7): a live model reads a declared cut -- three premises felled, four findings [skip-docs] 2026-09-07 16:07:29 +02:00
2026-09-08-f3-f4-nekten-og-forankringen.md feat(navigation,validator): read_dir names the rung that reads a document, and a run can require its anchoring 2026-09-08 05:32:46 +02:00
2026-09-08-funn-4-5-og-read-nekt.md feat(prepass,explore): padding dies at the prompt; a refusal the model can act on is a return value [skip-docs] 2026-09-08 23:36:54 +02:00
2026-09-08-funn-99-chatclient-refusal.md fix(cli): a provider failure leaves the CLI as one line, and a guessed base id is correctable 2026-09-08 21:03:18 +02:00
2026-09-08-n-bundlene-hypoteseform.md docs(n-bundlene): P4 -- one free N100 run after the P3 fix, (b') is now yes 2026-09-08 17:31:07 +02:00
2026-09-08-n-bundlene-konsum.md docs(n-bundlene): use ~-form for two absolute home paths -- handover gate was red on HEAD [skip-docs] 2026-09-08 15:23:55 +02:00
2026-09-08-syretest-s7c-begge-laaser-k2.md docs(s7c): both locks open, the price is delivered -- and the live model still did not read it [skip-docs] 2026-09-08 07:00:47 +02:00
2026-09-09-p6-betalt-k2-etter-kollaps.md docs(p6): one paid K2 run says the collapse bought legibility, not use 2026-09-09 13:14:55 +02:00
2026-09-09-p7-forankrede-identifikatorer.md feat(validator,generate,run): an identifier a proposal builds on must be in the input, or the verdict falls [skip-docs] 2026-09-09 16:04:01 +02:00
2026-09-09-p8-forankringstilbudet.md feat(run,generate): a run says what its delivered input can ground, before it spends an attempt [skip-docs] 2026-09-09 17:50:02 +02:00
2026-09-10-p9-v070-bundler.md docs(p9): okf v0.7.0 measured - the rename costs nothing, content adds 15 identifiers [skip-docs] 2026-09-10 06:33:57 +02:00
2026-09-10-p10-konform-k2-payload.md docs(p11): okf 0.8.1 measured - source-quota carries the denominators, one prior constant ranked the price schedule out [skip-docs] 2026-09-11 01:38:58 +02:00
2026-09-11-p11-okf-081.md docs(p11): okf 0.8.1 measured - source-quota carries the denominators, one prior constant ranked the price schedule out [skip-docs] 2026-09-11 01:38:58 +02:00
2026-09-11-p12-maf-gjeld.md docs(p12): MAF debt re-measured U1-U19 - 6/5/8 unchanged row for row, the pin bump moved U5's premise not its status [skip-docs] 2026-09-11 10:50:14 +02:00
2026-09-12-f16-maf-1180.md docs(f16): the 1.18.0 assessment measured -- 0 of 19 forms moved, three features assessed and none built 2026-09-12 17:18:46 +02:00
2026-09-12-p13-okf-pin-r761.md test(p13): the okf pin is MEASURED and deliberately NOT lifted -- the V1 stamp form disarms the forgery guard 2026-09-12 21:41:25 +02:00
2026-09-12-p13b-okf-bump.md fix(okf): close the inert ingest-stamp guard, then land okf 0.8.5 -- and read the block sources form all four bases actually write 2026-09-12 23:02:38 +02:00
2026-09-12-p14-kontekstsett.md fix(okf): top-level frontmatter title survives a nested sources: title 2026-09-13 07:40:57 +02:00
bestille-en-kjoring.md feat(provenance): a run records which external service it actually called 2026-08-05 21:37:29 +02:00
ekspert-svar.md feat(hitl): ekspertdommen kan ikke oppstaa av stillhet (F2, ORDRE 20260825T214801Z) 2026-08-27 01:22:07 +02:00
extending.md docs: llms.txt + sikkerhetskontakt til security@ (ORDRE 20260821T041218Z) 2026-08-21 11:29:54 +02:00
knowledge-base-recipe.md docs: kunnskapsbase for ÉN konkret kjøring — kategorier, innholdstyper, veiprosjekt-eksempel (ORDRE 20260821T083046Z) 2026-08-21 11:10:59 +02:00
kort-presentasjon.html docs(deck): begge deck bærer det MÅLTE 1b-utfallet — ærlighet, ikke seier 2026-08-14 20:28:35 +02:00
kunnskapsbase-for-en-kjoring.md feat(visibility): en lenke som ikke ble fulgt sier det - spor + betinget linje (ORDRE 20260821T142704Z) 2026-08-21 17:18:18 +02:00
okf-konsum-kontrakter.md docs(s7a-3): ordrens ANDRE binding maalt paa alle 478 K2-nivaaer, og to prosa-hull lukket 2026-09-03 08:09:53 +02:00
presentasjon-bygge-kunnskapsbase.html feat(visibility): en lenke som ikke ble fulgt sier det - spor + betinget linje (ORDRE 20260821T142704Z) 2026-08-21 17:18:18 +02:00
presentasjon-fagpersonens-bidrag.html docs: fagpersonens bidrag - spørsmål/sjekkliste til fagperson (ORDRE 20260824T092912Z) [skip-docs] 2026-08-24 15:24:51 +02:00
review-2026-07.md docs(review): kryssmodell-review 2026-07 (14 funn, 11 detach-bevis) + revidert roadmap + sesjonsplan Fase 2-6 2026-07-10 06:28:11 +02:00