portfolio-optimiser/docs/2026-09-08-n-bundlene-konsum.md
Kjell Tore Guttormsen a26e8f2338 docs(n-bundlene): use ~-form for two absolute home paths -- handover gate was red on HEAD [skip-docs]
The gate (test_package_leaks_no_secret_content) is `git archive HEAD` content-scanned
against the absolute-home-path pattern. It caught two literal /Users/ktg/... paths in
docs/2026-09-08-n-bundlene-konsum.md's command block, introduced in e7ffe9e. Same
shell semantics with ~-form; no other change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-08 15:23:55 +02:00

22 KiB
Raw Blame History

Konsum-målingen på N100, N200 og N500 — hentet, resonnert og sitert, mot en LEVENDE modell

Ordre 20260908T113200Z-46497613-from-.claude. «Ferdig» skulle bety at portfolio-optimiser henter, resonnerer og siterer riktig fra hver av de tre bundlene med en levende modell. Tre betalte armer i A-formen (--prepass-payload), én per bundle, samme oppsett som S7c. Underlag: vegnormal-okf docs/2026-09-08-n100-n200-n500-ferdig.md (6d953f8), llm-ingestion-okf worktree llm-ingestion-okf-wt-o2c @ a37d5ce.

Svaret er nei på alle tre — og de tre grunnene er ulike, målt, og eies av hvert sitt repo.


0. Hva som ER målt, og hva som IKKE er det

MÅLT. De tre tre-hashene reprodusert ordrett fra vegnormal-okfs melding. okf.navigate_bundle når 446 / 1 133 / 270 konsepter — po sin egen kode, mot V1s tall. Pre-passet leverer fasit-konseptet på rang 1 av 8 på alle tre, med default-kommandoen, ingen flagg. Kontraktsjekk exit 0 × 3. Klientproben grønn. Tre betalte kjøringer, rc 0 × 3, NOK 0,21 av taket 5, 0 × 429. Hver rolles prompter, prompt-tokens og leverandør-tokens. Hvert modellsvar ordrett. Nekten --explore + --prepass-payload (rc 1, null modellkall). Hvilke felt pre-passets utdrag faktisk bærer.

IKKE MÅLT. Én kjøring er én kjøring — tre armer, ett spørsmål hver, én modell (gpt-4-1-mini), ett deployment. Ingen arm er gjentatt, så ingenting her sier noe om varians. At en ANNEN modell ville lest det samme kuttet annerledes er ikke målt. Om rangeringen holder for andre spørsmål enn V1s tre er ikke målt her (okf måler det). Ingen av de tre bundlene er faglig gjennomgått av meg — jeg sammenlikner mot konseptkroppen, ikke mot vegnormalen.

IKKE RØRT. Ingen fil under src/. Ingen Azure-konfig. Ingen fil i vegnormal-okf eller i noen okf-checkout. Ingen push.


1. Kjent-positiv per bundle, FØR noe ble betalt

Måleprotokollens stige: alt gratis først, så en feil i en betalt arm er attribuerbar.

OKF=~/repos/llm-ingestion-okf-wt-o2c            # ren worktree, a37d5ce, egen venv
B=~/repos/vegnormal-okf/build/ferdig
$OKF/.venv/bin/python3 $OKF/tools/okf_consume.py $B/n100-2023 \
  --question "Hva krever Krav 3.3.1—13 i N100? Gjengi det sentrale vilkåret." --out payload-n100.json
# ... tilsvarende for n200-2024 og n500-2024, DEFAULT-kommandoen, ingen flagg
kjent-positiv N100:2023 N200:2024 N500:2024
sha256-tree reproduserer V1s ref JA 5f288f2c… JA c420b754… JA eb74e987…
okf.navigate_bundle → konsepter 446 (fasit 446) 1 133 (fasit 1 133) 270 (fasit 270)
Bundle.skipped (ufulgte lenker) 0 0 0
considered / withheld / delivered 446 / 438 / 8 1 133 / 1 125 / 8 270 / 262 / 8
budsjett brukt av 120 000 8 939 21 102 9 085
fasit-konseptets rang 1 av 8 1 av 8 1 av 8
okf_contract_check exit 0, 14 regler, 0 funn exit 0, 14 regler, 0 funn exit 0, 14 regler, 0 funn
prepass.admit_payload mot montert base OK OK OK
klientprobe test_foundry_profile_live 1 passed — kjørt FØR armene (samme kjøring) (samme kjøring)

a37d5ce gjør det den sier: fasit-konseptet står på rang 1 på 3 av 3 med den flaggløse kommandoen. Nevnerne lukker mot V1 til konseptet. Budsjettforbruket avviker fra V1s tall (8 939 mot 8 977 · 21 102 mot 17 818 · 9 085 mot 10 517) — forventet, og det er selve fiksen: oppslags-omordningen leverer et ANNET sett med åtte utdrag enn den V1 målte.

Deployment urørt, målt med az cognitiveservices account deployment show: GlobalStandard, capacity 100, versjon 2025-04-14, Succeeded.

1.1 En egenskap S7a-3 kjøpte, som først nå ble betalt for

Alle tre basene erklærer bundle_id i rot-index.md (vegnormal-n100-2023) mens de er montert som n100-2023. Til 03.09 NEKTET reconcile_bundle_id nøyaktig det. Uten slakke-beslutningen (økt 81) kunne ingen av de tre bundlene åpnes slik de er levert — botemiddelet ville vært å montere dem på nytt for hånd, én gang per leveranse. Kjøringen sier avviket høyt i stedet:

Knowledge base: declares bundle_id 'vegnormal-n100-2023' (source: declared-index) but is mounted
as 'n100-2023' — the DECLARED id is the identity, so every artefact this run stamps names
'vegnormal-n100-2023'

2. Kjøreformen: po har INGEN oppslags-dør i A-form, og nekten er målt

Ordren ba meg velge kjøreform og begrunne, og sa at en nekt er et funn. Den er det.

Debattens oppgave er hardkodet. run.py:1243, ett eneste forekomststed:

result = await debate.run(f"Find a cost-saving measure for {project.id}.\nContext:\n{context}")

Ingen av run_projects 26 parametre bærer et spørsmål, en prompt, et objective eller en task (målt med inspect.signature). Operatørens spørsmål når modellen KUN som pre-passets erklærte question-linje inne i context.

Den ene døra som bærer en operatør-prompt er --explore, og den er NEKTET med --prepass-payload:

$ python -m portfolio_optimiser.run N100 --profile local --docs-dir B --bundle-dir B \
    --explore "Hva krever Krav 3.3.1—13 i N100? …" --explore-config /dev/null \
    --prepass-payload payload-n100.json
run refused: --prepass-payload and --explore cannot be combined (the exploration navigates the
whole knowledge base with the same four tools the payload withdraws, so the run as a whole would
read far outside the cut it declares)                                            # rc 1, null modellkall

Valget, og begrunnelsen: jeg kjørte A-formen som ordren spesifiserer, fordi det er den eneste formen som finnes for et deklarert kutt, og fordi den andre armen (--prepass-seed, som VILLE båret spørsmålet som explore()s prompt) er utenfor denne ordrens gjerde. Konsekvensen er målt og uttalt, ikke bortforklart:

N100 N200 N500
oppgavelinja modellen fikk Find a cost-saving measure for N100. … for N200. … for N500.
V1s spørsmål ORDRETT i prompten ja, i 2 av 6 prompter ja, i 2 av 5 ja, i 2 av 6

Modellen fikk altså både spørsmålet og fasit-teksten — men ble ALDRI bedt om å svare på spørsmålet. Det er ikke en feilkonfigurasjon; det er formen po har.


3. Tre betalte armer

export PORTFOLIO_FOUNDRY_PROJECT_ENDPOINT=# utledet INLINE fra `az`, aldri i fil
export PORTFOLIO_MODEL_MAP=scratchpad/major2-live/model_map.json
export PACE_SECONDS=2
uv run --with tiktoken python scratchpad/nbundler/live_nbundler.py {n100|n200|n500}
# argv: <N100|N200|N500> --profile azure --docs-dir <base> --bundle-dir <base>
#       --proposal-review --outbox-dir … --run-id nb-<tag> --prepass-payload payload-<tag>.json

Innsprutspunktet er run._default_factory (Fase 4e). Alle roller LEVENDE.

N100 N200 N500
rc 0 0 0
prompter totalt 6 5 6
— debatt / generering 3 / 3 3 / 2 3 / 3
proposer / checker 5 / 1 4 / 1 5 / 1
prompt-tokens (o200k), debatt 6 826 15 595 5 553
prompt-tokens (o200k), generering 800 483 782
leverandør-input 12 057 24 582 10 115
leverandør-output 718 822 817
429-svar 0 0 0
parse-feil-artefakt fraværende fraværende fraværende
verktøykall i debatten 0 (A-form: verktøyene trukket) 0 0
validator-dom rejected (stage 4, P90) validated rejected (stage 4, P90)
dom-nøkkel d7eeac666dbe88dc 7326ad0ec7353039 1059ab348ea87f48

Null parse-feil på tre ferske korpora. {run_id}-parse-failures.json finnes ikke i noen av de tre utboksene, og filens tilstedeværelse ER signalet (økt 35). Den avledede grammatikken (Fase 1b funn 1b) ble akseptert av det levende endepunktet på tre korpora den aldri er testet mot — det lukker en av den radens uttalte ærlighets-grenser.

Steg 5 fyrer LEVENDE på begge de avviste armene. Forsøk 2 og 3 bærer ordrett «your previous proposal was REJECTED by the deterministic validator», og påstanden faller monotont:

forsøk 1 forsøk 2 forsøk 3
N100 claimed_saving_nok 3 000 000 1 500 000 600 000 (P90 = 530 585)
N500 claimed_saving_nok 350 000 210 000 90 000 (P90 = 81 323)

4. Målene (a)(e), med nevner

(a) Svarte modellen med det sentrale vilkåret i fasit-kravet?

Ordrett sammenlikning mot konseptkroppen.

N100 — JA. Fasit-kroppen er én setning, og modellen gjenga den ORDRETT:

«Eventuell kryssing mellom gang- og sykkelveg og veg skal være planskilt ved ÅDT > 4 000.»

og resonnerte riktig om den (ÅDT ≤ 4 000 ⇒ planfri kryssing ikke påkrevd). Nøkkelordene planskilt, ÅDT og 4 000 står alle i svaret.

N200 — NEI. Fasit er Krav 2.9.2—12, filterkriterier for friksjonsjordarter, med tabell 2.9.2—1. Nevner: 0 av 6 nøkkelord fra kroppen (filterkriteri, friksjonsjordart, 2.9.2, O90, D90, filter) står i noe av modellens svar. Modellen resonnerte i stedet om grunnundersøkelser, fra et ANNET levert konsept.

N500 — NEI. Fasit er Krav 10.2—2, tekniske bygg som egne brannceller. Nevner: 0 av 6 nøkkelord (branncelle, brannsikker, teknisk(e) bygg, 10.2, byggteknisk). Modellen resonnerte om tunnelportaler, fra et annet levert konsept.

Mekanismen er målt, ikke gjettet: modellen ble bedt om et kostnadsbesparende tiltak. På N100 ER fasit-kravet kostnadsformet (en terskel som lar deg sløyfe en dyr konstruksjon), så det å svare på oppgaven og å svare på spørsmålet SAMMENFALLER. På N200 og N500 gjør de det ikke, og modellen fulgte oppgaven den fikk.

(b) Siterte den riktig konsept-id?

Ordren gir to instrumenter. Begge rapporteres, og bare det ene er bærende.

N100 N200 N500
stempelets siteringer 8 8 8
stempel ∩ delivered 8 av 8 8 av 8 8 av 8
fasit-id i stempelet JA JA JA
modellen navnga fasit-id-en NEI (navnga ingen id) NEI (navnga id-03418c46…) NEI (navnga id-05152184…)

Stempel-lesningen kan ikke diskriminere, og er derfor ikke bærende. Stempelet siterer de leverte konseptene MEKANISK, uavhengig av hva modellen leste — det ville vært 8 av 8 også for en kjøring der modellen leste ingenting. Det er repoets egen vakuøs-gate-klasse. Den bærende lesningen er hva modellen faktisk refererte, og der er svaret nei på alle tre. De to id-ene modellen DID navngi er begge ekte, leverte konsepter — bare ikke fasit.

Konsept-id-en er tilgjengelig for modellen: render_context avgrenser hvert utdrag med --- BEGIN DATA <concept_id> ---. På N200 og N500 brukte modellen den; på N100 lot den være.

(c) Hallusinerte den et kravnummer eller en verdi som ikke står i kroppen?

Kjent-negativ: tall i modellens PROSA som ikke finnes i delivered-mengden, etter at UUID-fragmenter er fjernet (ellers teller instrumentet biter av ekte id-er som oppdiktede tall).

N100 N200 N500
kravnummer-formede tokens i prosa ingen ingen ingen
tall i prosa ikke i delivered 0 0 0
konsept-id-referanser som ikke er levert 0 0 0

(c) = 0 på alle tre i prosaen. Modellen siterte kun det den hadde. To treff ble undersøkt og forkastet som instrumentfeil: N200s 03418 er et fragment av den ekte, leverte id-en id-03418c46-… (modellen skrev den uten id--prefikset), og N500s 500 er normalens eget navn.

Men det strukturerte FORSLAGET er en annen sak, og der er det ett ekte funn. N200s validerte forslag bruker to kostkoder:

"affected_items":[{"code":"03418c46","quantity":1,"unit_cost":15000000},
                  {"code":"03423b12","quantity":500,"unit_cost":4500}]

03418c46 er et kravnummer brukt som kostkode — en ekte konsept-id, men ikke en kostlinje. 03423b12 finnes 0 ganger blant basens 1 137 filer (målt). Det er en oppdiktet identifikator, formet som en ekte. Begge ble VALIDERT, fordi kjøringen er UFORANKRET og validatorens stage 0 derfor hoppes over — nøyaktig den defekten --require-cost-baseline (F4, økt 100) ble bygget for, og det første LEVENDE tilfellet av den. Kjøringen sa det selv, i klartekst:

Cost baseline: NONE in the bundle — this run is un-anchored: the validator's stage 0 … is SKIPPED

Dette er ikke telt under (c) etter ordrens definisjon (tall i SVARET mot delivered-mengden), men å la det stå urapportert ville vært å bruke definisjonen som en gjemmeplass.

(d) Kostnad

Listepris, Azure Retail Prices API (api-version=2023-01-01-preview, currencyCode='NOK', armRegionName=eastus), hentet på nytt 08.09, metere gpt 4.1 mini Inp/Outp glbl Tokens: input NOK 0,003734 / 1K, output NOK 0,014936 / 1K.

Kjøring Prompter Input Output NOK
N100 6 12 057 718 0,056
N200 5 24 582 822 0,104
N500 6 10 115 817 0,050
klientprobe 1 ~20 ~5 ~0,000
SUM 18 46 754 2 357 NOK 0,21

NOK 0,21 — 4,2 % av taket på NOK 5. 429-svar: 0. Takene (max_rounds=3, max_tokens, max_attempts) er URØRT, og ingen kjøring traff dem.

(e) Nevner-vokabularet

Ikke brukt i noen av de tre armene. [sourced-not-sufficient] og de øvrige markørene står 0 ganger i 17 modellsvar. Det nærmeste er N500s checker: «No other specific cost-saving tradeoffs were found within the given excerpt for N500» — riktig innhold, feil vokabular.

Det er ærlig nok her: alle tre armene FANT noe å foreslå i kuttet, så ingen av dem var i posisjonen markøren finnes for. Kontrasten er S7 arm A, som brukte [sourced-not-sufficient] ordrett fordi kuttet der ikke bar svaret.


5. Hovedfunnet: kuttet leverer riktig dokument og fjerner nøkkelen spørsmålet stiller

Dette er det som avgjør «ferdig»-dommen, og det ble målt fordi (a) falt på to av tre.

Fasit-konseptets fil i basen bærer kravnummeret i frontmatter:

title: Krav 3.3.1—13 H1  Nasjonal hovedveg, ÅDT < 6 000 og fartsgrense 80 km/t
req_number: Krav 3.3.1—13
description: Eventuell kryssing mellom gang- og sykkelveg og veg skal være planskilt ved ÅDT > 4 000.

Pre-passets utdrag bærer feltene bundle_id · concept_id · sha256 · adjudication · trust_tier · bundle_id_inherited · text_sha256 · text · rankingen title, ingen req_number.

kravnummeret i det modellen faktisk fikk N100 3.3.1 N200 2.9.2 N500 10.2
i fasit-utdragets text NEI ja (kroppen navngir «Tabell 2.9.2—1») NEI
noe sted i hele det leverte kuttet NEI ja NEI

Til sammenlikning, po sin EGEN read_file på samme fil returnerer hele fila — 774 tegn, inkludert title og req_number. Pre-passets utdrag er 98 tegn kropp.

Pre-passet RANGERER på kravnummeret — det er hele a37d5ces mekanisme, og den virker: rang 1 av 446. Og så leverer det utdraget uten den nøkkelen. Modellen får et avsnitt om planfrie kryssinger uten noe som helst som knytter det til «Krav 3.3.1—13». For to av tre bundler er spørsmålets identifikator dermed ikke til stede i modellens kontekst i det hele tatt.

Dette er den strukturelle tvillingen til S7c-funnet: der kjøpte låsene BYTENE, ikke STRUKTUREN; her kjøper rangeringen RIKTIG DOKUMENT, ikke NØKKELEN.


6. «Ferdig»-dommen, ærlig, per bundle

Kriteriet er ordrens: ferdig = (a) ja OG (b) ja OG (c) 0.

(a) (b) modell (c) ferdig
N100:2023 JA (ordrett) NEI 0 NEI
N200:2024 NEI NEI 0 NEI
N500:2024 NEI NEI 0 NEI

0 av 3. N100 er nærmest: den gjenga fasit-vilkåret ordrett og hallusinerte ingenting; den navnga bare ikke konseptet den siterte.

Hvem eier hva som mangler

llm-ingestion-okf eier én ting, og den er skarp. Utdragsformen i okf-consumption/1 bærer text uten title/req_number. Rangeringen er FIKSET og god (rang 1 × 3 med flaggløs kommando) — det er leveransen som mister nøkkelen. Et spørsmål stilt på en identifikator kan ikke besvares på en identifikator som ikke ble levert. Dette er ikke en ny nekt eller et flagg: det er ett felt til per utdrag.

vegnormal-okf eier ingenting her. Bundlene bærer title, req_number, description og riktig kropp; indekstreet lukker (0 ufulgte lenker × 3); tre-hashene reproduserer; nevnerne stemmer. Kroppene er de riktige kroppene. Det er ingen innholdsmangel i noen av de tre.

portfolio-optimiser eier kjøreformen, og det er den største posten. A-formens oppgave er hardkodet til et kostnads-mandat, og den eneste døra som bærer en operatør-prompt (--explore) er nektet med --prepass-payload. po kan ikke STILLE et oppslagsspørsmål i A-form. Det som ble målt over er derfor det nærmeste A-formen kommer: fikk modellen fasit-teksten, og brukte den den? Ja på N100, nei på to — og på begge de to fulgte modellen oppgaven den faktisk fikk.

Anbefaling til operatøren (beslutningen er din)

  1. Meld feltet til llm-ingestion-okf: la utdraget bære title (eller req_number). Billigst, mest presist, og det eneste som gjør et identifikator-spørsmål besvarbart i det hele tatt. Kostnaden er noen titalls tegn per utdrag mot dagens 8 utdrag.
  2. Avgjør om po skal ha en oppslags-dør. I dag finnes den ikke i A-form. Tre veier, ikke bygget her: (i) la --prepass-payload ta et operatør-spørsmål som debattens oppgave; (ii) løsne --explore-nekten under et deklarert kutt (Q5=B-armen --prepass-seed er allerede den formen, med verktøyene BEHOLDT); (iii) erklær at po ikke er et oppslagsverktøy og la «ferdig» bety noe annet enn V1s K0-spørsmål. Dette er en beslutning, ikke en fiks.
  3. Kjør N-bundlene med --require-cost-baseline neste gang det er en kostnadskjøring. N200 validerte et forslag med en oppdiktet kostkode fordi kjøringen var uforankret. F4-flagget finnes allerede og ville nektet den.
  4. De tre bundlene kan IKKE kalles fullført på dette grunnlaget — men det som mangler er ikke bundlene. Etter (1) er kriteriet på nytt målbart for under NOK 0,25.

7. Funn — rapportert, ikke fikset

  1. Pre-passets utdrag mister kravnummeret (§ 5). Eier: llm-ingestion-okf. Nevner: 2 av 3 bundler har ikke identifikatoren noe sted i modellens kontekst.
  2. po har ingen oppslags-dør i A-form (§ 2). Eier: po. run.py:1243 er hardkodet; ingen av run_projects 26 parametre bærer et spørsmål; --explore nektes med --prepass-payload.
  3. En uforankret kjøring validerte en oppdiktet kostkode (§ 4c). Eier: po (bruksmåte, ikke kode — F4-flagget finnes). 03423b12 finnes 0 av 1 137 filer.
  4. Nevner-vokabularet ble ikke brukt i noen arm (§ 4e). Eier: uavklart. Ingen av armene var i posisjonen markøren finnes for, så dette er ikke bevis for at det ikke virker — det er en ubesvart nevner.
  5. Budsjettforbruket avviker fra V1s tall på alle tre (§ 1). Forventet konsekvens av a37d5ce, ikke en defekt — nevnt fordi V1s tabell ellers ville lest som stale.

8. Ærlighets-grenser, uttalt

  • Én kjøring er én kjøring. Tre armer, ett spørsmål hver, ingen gjentakelse. Ingenting her måler varians, og et annet trekk fra samme modell kunne gitt et annet utfall på (a).
  • (a) på N100 er ikke bevis for at kjeden svarer på oppslag. Det er bevis for at fasit-teksten nådde modellen og ble brukt — og på N100 sammenfaller «svar på oppgaven» og «svar på spørsmålet» ved et sammentreff i kravets innhold. Sammentreffet er identifisert, ikke skjult.
  • (b) er skåret på modellens referanse, ikke på stempelet, fordi stempelet ikke kan diskriminere. Det er en skjerping av ordrens kriterium, ikke en oppmykning, og den er begrunnet.
  • (c) = 0 gjelder PROSAEN. Det strukturerte forslaget dikter opp kostkoder, som er strukturelt påkrevd (ingen baseline, og oppgaven krever et tall). Skillet er uttalt i § 4c.
  • --cost-vocabulary, --k og --rarity-weight ble IKKE brukt. Fasit sto på rang 1 med default-kommandoen på alle tre, så opt-in-flaggene var ikke nødvendige — ordrens betingelse for å bruke dem (below_k) inntraff aldri.
  • Kuttet er verifisert mot den monterte basen (admit_payload × 3), så payloaden kan ikke ha levert bytes basen ikke holder. Det er en gate, ikke en tillitserklæring til produsenten.
  • Ingen av de tre bundlene er faglig gjennomgått. Sammenlikningen i (a) er mot konseptkroppen slik den står, ikke mot vegnormalen.

9. Verifiseringslogg

# Påstand Slik den ble verifisert
1 Tre tre-hasher reproduserer payload.bundle.ref mot vegnormal-okfs melding, 3 av 3 ordrett
2 446 / 1 133 / 270 konsepter okf.navigate_bundle(...).context_files, po sin egen kode
3 Fasit på rang 1 × 3 indeks av fasit-id-en i payload.excerpts, default-kommando
4 Kontraktsjekk exit 0 × 3 okf_contract_check.py, 14 regler, 0 funn
5 Klientproben grønn uv run pytest tests/test_foundry_profile_live.py -q → 1 passed
6 Deployment urørt az … deployment show → GlobalStandard, 100, 2025-04-14
7 Debattens oppgave er hardkodet grep -n 'Find a cost-saving measure' src/ → ett treff, run.py:1243
8 Ingen spørsmåls-parameter inspect.signature(run_project), 26 navn, 0 treff
9 Nekten er ekte argv kjørt → rc 1, meldingen ordrett, null modellkall
10 Spørsmålet nådde modellen ordrett delstreng i 2 av 6 / 2 av 5 / 2 av 6 prompter
11 (a) N100 ja fasit-setningen ORDRETT i svaret; planskilt/ÅDT/4 000 alle til stede
12 (a) N200/N500 nei 0 av 6 nøkkelord fra hver fasit-kropp i noe svar
13 (c) = 0 tall i prosa (UUID-fragmenter fjernet) mot delivered-teksten; 2 treff undersøkt og forkastet som instrumentfeil
14 03423b12 er oppdiktet 0 treff blant basens 1 137 filer
15 Utdraget mangler title feltlista i payload.excerpts[0]; kravnummeret ikke i text for N100/N500
16 po sin read_file bærer det navigator_tools(...) → 774 tegn inkl. req_number
17 Null parse-feil {run_id}-parse-failures.json fraværende i alle tre utboksene
18 Steg 5 fyrer levende «REJECTED by the deterministic validator» i forsøk 2 og 3, begge armer
19 Prisene Azure Retail Prices API hentet på nytt 08.09
20 0 × 429 retries-telleren i alle 17 poster