The context sets, the packaged knowledge bases and the example bundles are replaced by one fictitious example set about IT operations in an invented organisation: three context sets (serverrom-2027, driftsavtale-2027 and the two-base drift-og-avtale-2027), two synthetic knowledge bases under src/portfolio_optimiser/data/kunnskapsbaser and two example bundles under src/portfolio_optimiser/data/bundles. Numbers, codes and structural values in tests and fixtures are kept; names, ids and wording change. Dated measurement documents that only recorded runs on the replaced material are deleted. Gate figures measured on the new set are not comparable with earlier ones. The exclusion gate from the previous commit is green: 0 tracked files hit outside the shared/ subtree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
244 lines
14 KiB
Markdown
244 lines
14 KiB
Markdown
# 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å kravbasene). 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å kravbasene).
|
||
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.
|