docs(p6): one paid K2 run says the collapse bought legibility, not use

P6 repeats S7c arm Aopen on HEAD with the payload BYTE-IDENTICAL, so the only
variable is `collapse_padding` (finding 5, session 107).

(a) NO. `5647500` reaches the model -- 6 occurrences in 2 of 5 prompts, label
and amount on the same line -- and appears in 0 of 5 replies. The control
against S7c's own recording reproduces its published 6-in-2-of-11 / 0-in-11
exactly, so the null is a measurement, not a broken query.

(b) 1 of 12 delivered excerpts is named at all (the general technical
requirements, cited verbatim by concept_id); the price schedule never is.

(c) 4 of 4 code-shaped tokens in the replies are invented -- the ENGRAVE_MARK
class -- and the two amounts with them.

The fix duty does NOT fire, because cause (ii) is falsified by two
measurements: everything the collapse removed is whitespace (48 714 characters,
per-line non-whitespace sequence IDENTICAL on the real prompts), and the named
candidate -- the Post/SUM cell boundary -- was INTACT in S7c, which produced the
same null. A property present when the outcome was null cannot be the cause of
the null. The null is older than the collapse.

Pre-flight also measured what the row already implied but nobody had checked:
-72.4 % CHARACTERS is -1.8 % TOKENS (26 936 -> 26 447). A run of 887 spaces is
nearly free in BPE, so the collapse is legibility, never price.

The blind spot has moved on again: ranking (S7c) -> reading (finding 5) ->
the CHOICE of document.

Cost NOK 0.321 of a NOK 0.40 ceiling, 0 retries. Suite 1543/5, ruff and mypy
clean, golden byte-unchanged. No source file touched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-09 13:14:55 +02:00
commit 999846a485

View file

@ -0,0 +1,244 @@
# P6 — én betalt K2-kjøring etter `collapse_padding`: leser modellen prisskjemaet nå?
**Ordre:** `20260909T105821Z-977199477-from-.claude` · **Økt 108** · 2026-09-09
**Kontroll før arbeidet:** 1543 passed / 5 skipped · `ruff` og `mypy` rene
**Golden `demo-transcript.stdout`:** `shasum -a 1` av INNHOLDET = `ea8c534773acdbe41ae68f2c55724d69aaf8be4f`, UENDRET
**ÉN betalt arm.** Målt kostnad **NOK 0,321** av taket 0,40. 429-retries: **0**.
## 0. Hva som ER målt, og hva som IKKE er det
**MÅLT:** at kollapsen fra økt 107 treffer nøyaktig denne payloaden (72,4 % tegn, ingen
ikke-whitespace-endring), at prisskjemaets bytes NÅDDE modellen i den betalte kjøringen
(6 forekomster av `5647500` i 2 av 5 prompter), og at modellen **likevel ikke siterer tallet i
noe svar** (0 av 5). Kontrollen på spørringen er kjørt mot S7cs eksisterende opptak og reproduserer
dens publiserte tall eksakt.
**IKKE MÅLT:** at en annen modell, et annet deployment eller en gjentakelse ville gitt samme
utfall. Én kjøring er én kjøring.
**DOMMEN:** funn 5 er **IKKE bekreftet levende**. Kollapsen kjøpte lesbarhet (og den er målt), men
ikke bruk. Årsaken er skilt med en måling i § 5 — det er **ikke** at kollapsen fjernet noe modellen
trengte.
---
## 1. Premissene, verifisert før noe ble betalt
| Premiss (PM målte 09.09) | Verifisert her med | Utfall |
|---|---|---|
| (i) HEAD `eb41374`, `git ls-remote origin main` = `eb41374` → UPUSHET = 0 | `git rev-parse HEAD`, `git ls-remote origin main` | **BEKREFTET.** STATEs «UPUSHET = 2 / `origin/main` = `4f23fa2`» var foreldet og er rettet |
| (ii) To utrackede: presentasjons-HTML (parallell økt) og `scratchpad/` | `git status --short` | **BEKREFTET.** Begge forblir utrackede |
| (iii) Armen er S7c `Aopen`, og bare den | S7c § 5 lest; `Adef` ikke kjørt | **BEKREFTET** |
| (iv) `payload-open.json` = 240 021 B, sha256 `f802809e…b995d3`, 12 utdrag, prisskjemaet på rang 10 med 67 245 tegn | `ls -l`, `shasum -a 256`, parsing av fila | **BEKREFTET, alle fem tallene** |
| (v) Payloaden gjenbrukes BYTE-IDENTISK; den har 9 medlemmer per utdrag | `sorted(excerpts[0].keys())` | **BEKREFTET:** `adjudication`, `bundle_id`, `bundle_id_inherited`, `concept_id`, `rank`, `sha256`, `text`, `text_sha256`, `trust_tier`**9**, altså eldre enn P3/okf-feltfiksen (14 på N-bundlene). Det er ønsket her: A/B-en isolerer kollapsen alene |
| (vi) Kollapsen gir 67 245 → 18 531 tegn (72,4 %), 104 linjer, lengste løp 887 → 0 | pre-flight § 2 | **BEKREFTET, alle fire** |
| (vii) Azure uendret; klientproben krever BEGGE env-vars | `uv run pytest tests/test_foundry_profile_live.py -q` med begge satt | **BEKREFTET: `1 passed`** (ikke skipped) |
Repro-gaten (pkt. 1 i ordren) sto grønn før noe ble betalt: `uv run pytest -q` = **1543 passed /
5 skipped**, `uv run ruff check src tests` = rent, `uv run mypy src` = rent, golden `shasum -a 1` =
`ea8c534773acdbe41ae68f2c55724d69aaf8be4f`.
---
## 2. Pre-flight (gratis): treffer kollapsen denne payloaden?
Rendret gjennom produksjonens egen søm på HEAD (`prepass.render_context``_data_blocks`
`collapse_padding`). FØR-armen er **samme søm med `collapse_padding` detachet til identitet** — en
A/B over én kodesti, aldri en andre kopi av regelen. Skript: `scratchpad/s7c/preflight_p6.py`.
**Prisskjema-utdraget (rang 10):**
| Mål | Før | Etter |
|---|---|---|
| tegn | 67 245 | **18 531** (72,4 %) |
| linjer | 104 | **104** |
| indre løp ≥ 2 | 115 | **0** |
| indre løp ≥ 100 | 103 | **0** |
| lengste indre løp | 887 | **0** |
| per-linje ikke-whitespace-sekvens | — | **IDENTISK** |
Sentinel-raden etter kollaps, linje 20: `82 Prosjektering (tiltransport av prosjekterende) 5647500.0`
— etikett og beløp på SAMME linje, som funn 5 lovet.
**Avstemming mot funn 4/5-dokumentets § 2.3** (som oppga 208 løp ≥ 2, 117 ≥ 100, 56 806 tegn over
72 av 104 linjer): de to tallsettene måler ULIKE ting, og begge er riktige. § 2.3 teller med
`[ \t]{2,}` — altså også LEDENDE løp. Kollapsen rører per konstruksjon ikke ledende whitespace, så
det INDRE tallet er 115 / 103 / 48 255 tegn over 71 linjer. Differansen (93 løp, 8 551 tegn, 1
linje) ER den ledende indenteringen som med vilje overlever. Målt her, ikke antatt.
**Hele den rendrede debattkonteksten:**
| Mål | Før | Etter |
|---|---|---|
| tegn | 145 237 | 96 523 |
| o200k-tokens | 26 936 | **26 447 (1,8 %)** |
**Kjent-positiv på instrumentet:** FØR-armen reproduserer S7cs publiserte 145 237 tegn / 26 936
tokens EKSAKT. Uten den ville en null i ETTER-armen ikke kunnet skilles fra en ødelagt måler.
**Dette er ikke en besparelse, og det er et funn i seg selv:** 72,4 % TEGN er 1,8 % TOKENS. Et løp
på 887 mellomrom koster nesten ingenting i BPE. Kollapsens argument er lesbarhet, aldri pris — og
det er nå målt, ikke bare påstått.
**Kostnadsestimat før betaling:** S7c Aopen kostet målt NOK 0,354 (input 86 331, output 2 103,
listepris 0,003734/1K inn og 0,014936/1K ut). Kollapsen sparer 489 tokens i hver av de 2 promptene
som bærer kuttet = 978 → estimat **NOK 0,350**, under taket 0,40. Kjøringen ble derfor godkjent.
---
## 3. FYI til `llm-ingestion-okf` (gratis, sendt FØR den betalte armen)
Sendt som `--fyi` (ingen svar forventet): `20260909T110614Z-52244740-from-portfolio-optimiser.md`,
emne «FORM FINDING: K2 price schedule carries no bill of quantities (0 of 92 rows)». Innholdet er
funn 4s konklusjon med nevnere (0 av 92 rader med eksakt vokabular, 0 av 92 med løsere
delstrengmatch, 0 av 91 datarader med kode + mengde + beløp; formen ER lesbar — 8 kolonne-spenn, 71
av 91 ikke-blanke rader gir ≥ 2 celler, splitten stabil for K = 2…64), pluss hvorfor det angår
`--cost-vocabulary` og prisformens rangering. Meldingen er FYI, ikke en bestilling: ingen frist,
ingen forespørsel om endring. Kildepeker: `docs/2026-09-08-funn-4-5-og-read-nekt.md` § 1.
---
## 4. Den betalte armen
Kjørefil: `scratchpad/s7c/live_p6_collapsed.py` — en KOPI av `live_s7c.py`s Aopen-arm med eget
`--run-id` (`p6-Aopen-collapsed`), egen outbox og egne opptaksfiler. S7cs `Aopen-records.json` og
`outbox-Aopen/` er evidens og er URØRT. Ingen fil under `src/` er rørt av dette punktet.
`known_positive()` passerte før armen kjørte: levert K2 rotlisting = 3 954 tegn / 1 495 tokens /
629 konsepter, reprodusert eksakt.
### 4 (a) Siterer modellen `5647500`?
| Term | PROMPTER (P6) | SVAR (P6) | PROMPTER (S7c, kontroll) | SVAR (S7c) |
|---|---|---|---|---|
| `5647500` | 6 i **2 av 5** | **0 i 0 av 5** | 6 i **2 av 11** | 0 i 0 av 11 |
| `prissammenstilling` | 24 i 2 av 5 | 0 i 0 av 5 | 24 i 2 av 11 | 0 i 0 av 11 |
| `prisskjema` | 6 i 2 av 5 | 0 i 0 av 5 | 6 i 2 av 11 | 0 i 0 av 11 |
| `pris` | 96 i 2 av 5 | 0 i 0 av 5 | 96 i 2 av 11 | 0 i 0 av 11 |
| `92` | 6 i 2 av 5 | 0 i 0 av 5 | 6 i 2 av 11 | 0 i 0 av 11 |
**Kjent-positiv (bytene nådde fram):** 6 forekomster i 2 av 5 prompter. Målingen er altså gyldig —
modellen SÅ tallet, i kollapset form, med etiketten på samme linje.
**Svaret på spørsmålet: NEI.** 0 av 5 svar siterer `5647500`, akkurat som S7cs 0 av 11.
### 4 (b) Hvilke konsepter navngis?
**1 av 12** leverte utdrag navngis i det hele tatt:
`inbox-del-ii-bilag-1-1-stange-skole-generelle-tekniske-krav` (de generelle tekniske kravene, det
STØRSTE utdraget etter prisskjemaet — 31 001 tegn). Modellen siterer det ORDRETT ved `concept_id` i
sitt første svar: «Supporting details from the technical requirements document
(inbox-del-ii-bilag-1-1-stange-skole-generelle-tekniske-krav)».
**Prisskjemaet er IKKE navngitt** — verken ved `concept_id`, ved bladnavn eller ved dokumentnavn, i
noe av de fem svarene. Det er samme utfall som S7c, og det er hele funnet.
### 4 (c) Kontrollene
**(i) Kan spørringen finne?** Samme spørring mot S7cs `Aopen-records.json` (før kollapsen) gir
**6 forekomster i 2 av 11 prompter** og **0 i svarene** — nøyaktig S7c § 5s publiserte tall. En null
i P6 er derfor en MÅLING, ikke en ødelagt regex.
**(ii) Hva finner modellen på?** Tokens i P6-svarene som ikke finnes i NOE levert utdrag:
* kostkoder: `MER-001`, `MER-002` (forsøk 1), så `M-04-01`, `M-04-03` (forsøk 2) — **4 av 4
kodeformede tokens er oppdiktet**, 0 stammer fra et utdrag;
* tall ≥ 4 siffer: `200000`, `75000` oppdiktet; `1000` finnes i et utdrag (og er en mengde modellen
også fant på — sammenfallet er tilfeldig).
Dette er S7c/P4s (c)-rad gjentatt: samme klasse som `ENGRAVE_MARK` / `CS-GS1`. Modellen bygget hele
forslaget på merkekravene i de tekniske kravene og myntet kostlinjer for dem.
### 4 (d) Utfallet av kjøringen
P6 endte i **`ValidatedProposal`** (dom-nøkkel `5fd6272e3725fe68`), med proposal-reviewen besvart
(1 approve). S7c Aopen endte i **`Rejection`** («proposal review offered, never consulted (no
candidate validated)», dom-nøkkel `65094b3648af8d7d`). Utfallet FLYTTET seg altså — men på
oppdiktede kostlinjer, i en UFORANKRET kjøring (ingen `cost-baseline.json` i basen, stage 0 hoppet
over). Med n = 1 er dette en OBSERVASJON, ikke en påstand om at kollapsen forårsaket det: banen
gjennom `max_attempts` er modellatferd, og S7c brukte 9 proposer-forsøk mot P6s 4.
### 4 (e) Kostnad
| Post | Prompter | Input | Output | NOK |
|---|---|---|---|---|
| Klientprobe (`test_foundry_profile_live.py`) | 1 | ~10 | ~5 | ~0,000 |
| P6 Aopen (proposer ×4, checker ×1) | 5 | 81 709 | 1 065 | **0,321** |
| **SUM** | **6** | **81 709** | **1 065** | **0,321** |
Listepris: input NOK 0,003734/1K, output NOK 0,014936/1K (samme som P4 § 11.5).
**429-retries: 0.** Taket var NOK 0,40; estimatet var 0,350; faktisk 0,321. Avviket ned skyldes at
kjøringen brukte 5 prompter der S7c brukte 11.
Per prompt: proposer 26 458 → 201 → 326 → 363 o200k, checker 26 833 o200k. De to første promptene
bærer kuttet; resten er korte oppfølginger.
---
## 5. Dommen, og hvorfor pkt. 5s fikse-plikt IKKE utløses
(a) er **NEI**. Ordren krever da at de to årsakene skilles med en måling, ikke en antakelse:
* **(i) bytene var der, modellen leste forbi dem likevel** — eller
* **(ii) kollapsen FJERNET noe modellen trengte.**
**(ii) er FALSIFISERT, med to uavhengige målinger.**
**Måling 1 — hva som faktisk forsvant, målt på de EKTE promptene** (ikke på en re-rendring):
`scratchpad/s7c/diff_p6_vs_s7c.py` trekker prisskjemaets DATA-blokk ut av S7cs opptak og av P6s
opptak og sammenlikner dem:
* 67 368 → 18 654 tegn, **106 → 106 linjer**;
* **48 714 tegn fjernet, og alle 48 714 er whitespace** (målt, ikke resonnert);
* linje for linje, whitespace-normalisert: **IDENTISK**;
* per-linje ikke-whitespace-sekvens: **IDENTISK**.
**Måling 2 — den navngitte kandidaten, og hvorfor den ikke kan forklare nullen:** celle-grensen ER
tapt som skilletegn. `Post` og `SUM` sto i hver sin kolonne i S7c (`'Post' + 160 mellomrom`) og står
etter kollapsen som `Post SUM` på én linje — nøyaktig tapet `collapse_padding`s docstring og funn
4/5 § 2.5 uttalte på forhånd. **Men den grensen var INTAKT i S7c, og S7c ga NØYAKTIG SAMME NULL**
(0 av 11 svar). En egenskap som var til stede da utfallet var null, kan ikke være årsaken til at
utfallet er null. Nullen er ELDRE enn kollapsen.
**Konklusjonen er (i):** bytene nådde modellen (6 forekomster i 2 av 5 prompter, etikett og beløp på
samme linje), og modellen bygde likevel forslaget sitt utelukkende på merkekravene i de generelle
tekniske kravene — det ENE utdraget den navngir — og myntet kostkoder for det. Kollapsen endret
LESBARHETEN (målt) uten å endre HVA modellen valgte å bygge på.
**Derfor justeres kollapsen ikke her.** Pkt. 5s plikt («et notat er IKKE et akseptabelt svar»)
gjelder tilfelle (ii), og (ii) er målt bort. Å innføre et skilletegn nå ville vært å endre en søm på
grunnlag av en hypotese som er falsifisert, og ville dessuten vært nøyaktig det skjønnet
`collapse_padding` finnes for å unngå. Blindsonen har flyttet seg videre: fra RANGERINGEN (S7c) til
LESNINGEN (funn 5) til **VALGET** — hvilket dokument modellen bestemmer seg for å bygge på.
---
## 6. Honesty limits
* **Én kjøring er én kjøring.** Én modell (`gpt-4-1-mini`), ett deployment, ingen gjentakelse,
ingen varians målt. At samme argv kjørt om igjen ville gitt samme null, er ikke vist — og P6 vs
S7c viser nettopp at BANEN varierer (5 vs 11 prompter, `ValidatedProposal` vs `Rejection`) selv
når svaret på (a) ikke gjør det.
* **Payloaden har 9 medlemmer per utdrag** og er eldre enn P3/okf-feltfiksen (14 på N-bundlene).
Det er bevisst — den skal være byte-identisk med S7cs — men det betyr at `title` / `req_number` /
`sources` IKKE nådde prompten her. Om de nye feltene ville flyttet modellens VALG er ikke målt.
* **At en annen modell ville lest kollapsen annerledes er ikke målt.** Særlig: en større modell kan
tenkes å lese en padded tabell like godt som en kollapset.
* **Kjøringen er UFORANKRET** (ingen `cost-baseline.json` i basen; stage 0 hoppet over), så
validatoren kunne per konstruksjon ikke felle de oppdiktede kodene. `--require-cost-baseline`
ville nektet kjøringen før første kall — det er F4s dør, og den er ikke brukt her fordi
spørsmålet var hva modellen LESER, ikke hva gaten slipper gjennom.
* **`Adef` er ikke kjørt** (den bar aldri prisskjemaet), så sammenlikningen er Aopen mot Aopen.
* **Nullens årsak er skilt, men ikke forklart.** At modellen VELGER de tekniske kravene framfor
prisskjemaet er observert i to kjøringer; hvorfor, er ikke målt.
---
## 7. Reproduksjon (gratis)
```
uv run --with tiktoken python scratchpad/s7c/preflight_p6.py # utdraget før/etter kollaps
uv run --with tiktoken python scratchpad/s7c/analyse_p6.py # (a)/(b)/(c) med begge kontroller
uv run --with tiktoken python scratchpad/s7c/diff_p6_vs_s7c.py # hva som faktisk forsvant
```
Alle tre leser opptak som allerede ligger i `scratchpad/s7c/` (utracket) og gjør null nettverkskall.