docs(major2): SC1/SC4/SC8/SC13 maalt live - modellen etterkom ikke
Ordre 20260906T050506Z, gjenopptatt etter at operatoeren satte deployment- capacity 10 -> 100. Veggen fra returen er MAALT borte foer noen arm ble startet (3 742 og 5 475 tokens passerer isolert der 3 000 foer ble avvist); 0 stk. 429 i ni betalte kjoeringer. Hovedfunn: MAJOR-2-doera virker mekanisk i hvert ledd - ekspertens ord naar prompten ordrett (2 av 6 genererings-prompter, samme nevner som skriptet), forsoeket kjoepes og hentes (honoured: true, attempts remaining 2 -> 0), forslaget endrer seg og artefaktet baerer alt - men modellen gjorde det MOTSATTE av instruksjonen: bedt om aa halvere, oekte den 25 % (212 500 -> 265 625 NOK). Forsoek 2 ba om 531 250 (= 50 % av kostlinja); det var VALIDATOREN som stoppet det, og Steg 5 matet avvisningen tilbake. D6 er dermed maalt i praksis: validatorens siste dom vinner, aldri revieweren sin. Tre funn i src/ RAPPORTERT, IKKE RETTET (ordrens gjerde): genererings- prompten sier ikke at affected_items skal baere BASELINE-linja; stage 0 navngir kun foerste overtredelse, saa Steg-5-loekka oscillerer innenfor max_attempts=3; modellen leser katalog-oppfoeringer som filnavn. Retter ogsaa dokumentets az-kommando: `deployment update` finnes ikke i CLI-en (kun create|delete|list|show, maalt mot --help) - riktig verb er `create` med samme modell/versjon/sku, siden ARM-PUT oppdaterer. Kostnadsgaten: estimat NOK 2,01, brukt NOK 2,15, tak 50. Overskridelsen er navngitt (ordren forutsatte to armer; seks kjoeringer naadde ikke doera). Takene max_rounds/max_tokens/max_attempts UROERT. src/ og tests/ UROERT. 1368 passed / 5 skipped, golden shasum -a 1 (INNHOLD) ea8c534..., ruff+mypy rene. Ingen ekte Azure-vert i sporet innhold - verifisert ETTER git add. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
1f2a045a87
commit
446150eecc
1 changed files with 250 additions and 137 deletions
|
|
@ -1,15 +1,15 @@
|
||||||
# MAJOR-2 — den levende K2-målingen som ble stoppet av en kvoteverdi
|
# MAJOR-2 — den levende K2-målingen
|
||||||
|
|
||||||
> **Måledato:** 2026-09-06
|
> **Måledato:** 2026-09-06
|
||||||
> **Ordre:** `20260906T050506Z-8827117206-from-.claude` (operatørvalg 06.09: alternativ (b), alle
|
> **Ordre:** `20260906T050506Z-8827117206-from-.claude` (operatørvalg 06.09: alternativ (b), alle
|
||||||
> fire kriterier)
|
> fire kriterier; returnert 06:19Z på en kvoteverdi, gjenåpnet etter at operatøren sa ja til
|
||||||
> **Kode målt ved:** `a790ce3` — ingen fil under `src/` er rørt; hele målingen skjer i
|
> veivalg 1)
|
||||||
> `scratchpad/major2-live/` gjennom `run._default_factory`, repoets egen dokumenterte
|
> **Kode målt ved:** `1f2a045` — ingen fil under `src/` eller `tests/` er rørt; hele målingen skjer
|
||||||
|
> i `scratchpad/major2-live/` gjennom `run._default_factory`, repoets egen dokumenterte
|
||||||
> injeksjonssøm (Fase 4e)
|
> injeksjonssøm (Fase 4e)
|
||||||
> **Utfall:** ordren er **RETURNERT**. SC1/SC4/SC8/SC13 står **fortsatt umålt** mot en levende
|
> **Utfall:** SC1, SC4, SC8 og SC13 er **MÅLT** mot en levende modell. Svaret på hovedspørsmålet er
|
||||||
> modell. Blokkeringen er **ikke** rammeverket og **ikke** kostnaden — det er `capacity`-verdien på
|
> ikke det man ville antatt: døra virker mekanisk i hvert ledd, og modellen gjorde det **motsatte**
|
||||||
> Foundry-deploymentet, og å endre den er en Azure-konfigurasjonsendring ordrens gjerde holder
|
> av det eksperten ba om.
|
||||||
> utenfor mine hender.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -17,200 +17,313 @@
|
||||||
|
|
||||||
| Spørsmål | Status |
|
| Spørsmål | Status |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Er auth/RBAC/endepunkt/deployment i orden? | **JA, målt** — ett-ords-proben grønn på 5,24 s |
|
| Er auth/RBAC/endepunkt/deployment i orden? | **JA, målt** — ett-ords-proben grønn |
|
||||||
| Koster målingen mindre enn taket? | **JA, målt** — estimat NOK 2,01, faktisk brukt **NOK 0,069** |
|
| Koster målingen mindre enn taket? | **JA, målt** — estimat NOK 2,01, faktisk brukt **NOK 2,15**, tak 50 |
|
||||||
| Navigerer en LEVENDE modell kunnskapsbasen (S2c)? | **JA — FØRSTE GANG MÅLT.** Se § 3 |
|
| Er kvoteveggen fra 06:19Z borte? | **JA, målt** — § 2. 0 stk. 429 i ni kjøringer |
|
||||||
| Endrer en levende modell forslaget på ekspertens ord (SC1/SC4)? | **UMÅLT** — kjøringen døde før første forslag |
|
| Navigerer en LEVENDE modell kunnskapsbasen (S2c)? | **JA** — § 3, målt både 06:19Z og nå |
|
||||||
| Utfall i NOK før/etter (SC8) | **UMÅLT** |
|
| **Når ekspertens ord proposer-prompten (SC4)?** | **JA, MÅLT** på det deklarerte oppsettet (§ 4 rad 6) — 2 av 6 genererings-prompter, ordrett. § 6 |
|
||||||
| Ville en levende oppfølging blitt avvist (SC13)? | **UMÅLT** |
|
| **Kjøpes forsøket, og hentes det (SC13)?** | **JA, MÅLT** på samme oppsett — `honoured: true`, `attempts remaining` 2 → 0. § 6 |
|
||||||
| Ledger per fase, sammenlignet med 19 prompter / 19 776 tokens | **DELVIS** — se § 5 |
|
| **Er forslag 2 forskjellig fra forslag 1 (SC1)?** | **JA, MÅLT** på samme oppsett — tre felt endret. § 5 |
|
||||||
|
| **Flytter utfallet seg (SC8)?** | **JA, MÅLT** på samme oppsett — 212 500 → 265 625 NOK. **Feil vei.** § 5 |
|
||||||
|
| Følger modellen instruksjonen? | **NEI, målt.** Den ble bedt om å halvere og økte med 25 %. § 5 |
|
||||||
|
| Ledger per fase mot 19 prompter / 19 776 tokens | **MÅLT** — § 7 |
|
||||||
|
|
||||||
|
**Les de fire MÅLT-radene sammen med § 4.** På 09-04-oppsettet URØRT nås review-døra ikke i det
|
||||||
|
hele tatt (seks kjøringer, tre distinkte årsaker); de fire kriteriene er målt på et oppsett der to
|
||||||
|
fikstur-detaljer er endret og deklarert. Begge halvdeler er funn, og den første er ikke den svake.
|
||||||
|
|
||||||
Ingenting under er utledet. Der noe ikke er målt, står det.
|
Ingenting under er utledet. Der noe ikke er målt, står det.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 1. Kostnadsgaten — oppfylt, og med margin
|
## 1. Kostnadsgaten
|
||||||
|
|
||||||
**Deployment (målt med `az cognitiveservices account deployment list`, ikke hentet fra minnet):**
|
**Deployment** (målt med `az cognitiveservices account deployment show`, ikke hentet fra minnet):
|
||||||
`gpt-4-1-mini` → modell `gpt-4.1-mini`, versjon `2025-04-14`, **GlobalStandard**, `capacity: 10`,
|
`gpt-4-1-mini` → modell `gpt-4.1-mini`, versjon `2025-04-14`, **GlobalStandard**, på
|
||||||
på `<resource>` / `<resource-group>` / eastus. Prosjekt-endepunkt
|
`<resource>` / `<resource-group>` / eastus. **`capacity` er 100** etter operatørens trekk (var 10 da
|
||||||
`https://<resource>.services.ai.azure.com/api/projects/<project>`.
|
ordren ble returnert), og deploymentets egne `rateLimits` leser nå **100 forespørsler / 60 s** og
|
||||||
|
**100 000 tokens / 60 s**.
|
||||||
|
|
||||||
**Det finnes ingen operatør-fil for `PORTFOLIO_MODEL_MAP`** — variabelen er usatt i skallet, og
|
**Det finnes ingen operatør-fil for `PORTFOLIO_MODEL_MAP`** — variabelen er usatt i skallet, og
|
||||||
`~/.zshenv`/`~/.zshrc` nevner den ikke (målt). Det pakkede `data/model_map.json` bærer fortsatt
|
`~/.zshenv`/`~/.zshrc` nevner den ikke (målt). Det pakkede `data/model_map.json` bærer fortsatt
|
||||||
`REPLACE-WITH-FOUNDRY-DEPLOYMENT`. Kartet for denne målingen er derfor skrevet i
|
`REPLACE-WITH-FOUNDRY-DEPLOYMENT`. Kartet for denne målingen er derfor
|
||||||
`scratchpad/major2-live/model_map.json` (utracket) — en måleartefakt, ikke en kodeendring.
|
`scratchpad/major2-live/model_map.json` (utracket) — en måleartefakt, ikke en kodeendring.
|
||||||
|
|
||||||
**Listepris, Azure Retail Prices API** (`https://prices.azure.com/api/retail/prices`,
|
**Listepris, Azure Retail Prices API** (`https://prices.azure.com/api/retail/prices`,
|
||||||
`api-version=2023-01-01-preview`, hentet **2026-09-06**), metere `gpt 4.1 mini Inp glbl Tokens` /
|
`api-version=2023-01-01-preview`, hentet **2026-09-06**), metere `gpt 4.1 mini Inp glbl Tokens` /
|
||||||
`gpt 4.1 mini Outp glbl Tokens`, `armRegionName=eastus`, `effectiveStartDate 2025-04-01`:
|
`gpt 4.1 mini Outp glbl Tokens`, `armRegionName=eastus`:
|
||||||
|
|
||||||
| | NOK / 1K tokens | USD / 1K tokens |
|
| | NOK / 1K tokens | USD / 1K tokens |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| input | **0,003734** | 0,0004 |
|
| input | **0,003734** | 0,0004 |
|
||||||
| output | **0,014936** | 0,0016 |
|
| output | **0,014936** | 0,0016 |
|
||||||
| cached input | 0,000934 | 0,0001 |
|
|
||||||
|
|
||||||
NOK-tallene er Microsofts **egne** NOK-listepriser fra samme API (`currencyCode='NOK'`), ikke en
|
NOK-tallene er Microsofts **egne** NOK-listepriser fra samme API (`currencyCode='NOK'`), ikke en
|
||||||
valutakonvertering av USD-prisen.
|
valutakonvertering.
|
||||||
|
|
||||||
**Estimat, skrevet i STATE FØR første betalte kall**, etter ordrens formel:
|
**Estimat FØR første betalte kall**, etter ordrens formel:
|
||||||
`(19 776 inn + 40 000 ut) × pris × 2 armer × 1,5 margin` = **NOK 2,01**.
|
`(19 776 inn + 40 000 ut) × pris × 2 armer × 1,5 margin` = **NOK 2,01**.
|
||||||
**Takbundet strukturelt tak** (utforskning 200 000 + run 100 000 per arm, alt priset som output —
|
|
||||||
det dyreste utfallet takene i det hele tatt tillater) = **NOK 13,44**. Begge ≤ 50 → gaten grønn.
|
|
||||||
Takene (`max_rounds` / `max_tokens`) er **urørt**.
|
|
||||||
|
|
||||||
**Faktisk forbruk** (fra `usage_details`, ordrens punkt 4): **16 872 input + 374 output tokens** =
|
**Faktisk forbruk, alle ni betalte kjøringer summert: 522 052 input + 13 137 output = NOK 2,15.**
|
||||||
**NOK 0,069** — 3,4 % av estimatet. Ingen enkeltpost er i nærheten av 100 000-grensen ordrens
|
Det er **7 % over estimatet og 4,3 % av taket på 50**. Overskridelsen har en navngitt grunn: ordren
|
||||||
punkt 4 setter; den største enkeltposten er 2 342 input-tokens.
|
forutsatte to armer, og målingen krevde ni kjøringer fordi de første seks ikke nådde review-døra
|
||||||
|
(§ 4). Ordrens punkt 4 («overstiger noe enkeltpost 100 000 tokens uten navngitt grunn, stopp og
|
||||||
|
rapporter») er ikke utløst: største enkeltkall er **5 798 tokens**. Én kjøring traff run-takets
|
||||||
|
100 000 tokens (§ 4, variant D på den udekkede basen) — det er takets egen mekanisme som fyrer, ikke
|
||||||
|
en enkeltpost. **Takene (`max_rounds` / `max_tokens` / `max_attempts`) er URØRT.**
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. Stigen — 14.08-disiplinen, billigste trinn først
|
## 2. Veggen fra 06:19Z — borte, og det er målt før noe annet ble startet
|
||||||
|
|
||||||
| Trinn | Kommando | Utfall |
|
Ved returen var `capacity: 10`, og en isolert forespørsel på 3 000 tokens ble avvist med 429 etter
|
||||||
|
**150 s helt stille** — et tak per forespørsel som ingen backoff kan vente seg forbi. Operatøren
|
||||||
|
satte `capacity: 100`.
|
||||||
|
|
||||||
|
**En 60-sekunders bøtte kan ikke forklare det som ble målt ved returen**, så at kapasitetstrekket
|
||||||
|
løser det var en hypotese, ikke et faktum. Den avgjørende prøven ble derfor gjentatt ordrett **før
|
||||||
|
første arm ble startet**, som et nytt trinn på 14.08-stigen:
|
||||||
|
|
||||||
|
| Prøve | Ved `capacity: 10` (06:19Z) | Ved `capacity: 100` (nå) |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| 1 | `az account get-access-token --resource https://ai.azure.com` | **exit 0** (gratis) |
|
| 2 342 tokens | OK | — |
|
||||||
| 2 | `preflight --profile azure` | **`preflight OK (azure)`** (gratis) |
|
| 3 000 tokens | **429** | — |
|
||||||
| 3 | `pytest tests/test_foundry_profile_live.py` (gatet ett-ords-probe) | **1 passed, 5,24 s** — første betalte kall |
|
| 3 742 tokens | — | **OK** (5,30 s, fakturert 3 755 inn) |
|
||||||
| 4 | `--live-dry-run` mot K2 | **`LIVE-DRY-RUN OK`**, modeller resolvert, `bundle_id`-slakken fyrte |
|
| 5 475 tokens | — | **OK** (2,99 s, fakturert 5 475 inn) |
|
||||||
| 5 | Full kjøring, kontrollarm (`approve`) | **RC = `ChatClientException` 429 `rate_limit_exceeded`** |
|
| 4 000 tokens | **429** | — |
|
||||||
|
|
||||||
Trinn 3 og 4 er dét som gjør trinn 5 attribuerbart: en rød trinn 5 kan **ikke** skyldes auth, RBAC,
|
Veggen var altså gjennomstrømning. **0 stk. 429 i alle ni kjøringene under**, med
|
||||||
endepunkt-form, deployment-oppslag, modellkart, kostbaseline-derivasjon eller `bundle_id`-oppløsning
|
`PACE_SECONDS=2` (var 12, dimensjonert for capacity 10).
|
||||||
— alle seks er grønne over.
|
|
||||||
|
|
||||||
---
|
**Rettelse til dokumentet slik det sto ved returen:** kommandoen ble skrevet som
|
||||||
|
`az cognitiveservices account deployment update`. **Det verbet finnes ikke** — `az cognitiveservices
|
||||||
## 3. Hva den levende kjøringen FAKTISK målte: S2c-navigasjonen, live
|
account deployment` har kun `create | delete | list | show` (målt mot `--help`). Riktig form er
|
||||||
|
`create` med samme modell, versjon og sku, siden ARM-PUT oppdaterer den eksisterende deploymenten:
|
||||||
`docs/2026-09-04-s2c-debatt-k2.md` lukket med en uttalt ærlighets-grense: *«ingen levende modell har
|
|
||||||
navigert»*. **Den er lukket nå.** Debattens proposer fikk kun PEKEREN (110 o200k-tokens: fast tekst
|
|
||||||
+ erklært `bundle_id` + antall konseptdokumenter + stigen) og de fire navigatør-verktøyene, og gikk
|
|
||||||
stigen **uoppfordret og riktig** på det ekte K2-korpuset — fire trinn, ingen omveier:
|
|
||||||
|
|
||||||
| # | Modellens eget valg | Prompt inn (fakturert) | Ut |
|
|
||||||
|---|---|---|---|
|
|
||||||
| 0 | `list_bundles()` | 477 | 13 |
|
|
||||||
| 1 | `read_bundle("k2-trinn1-20260903")` | 623 | 24 |
|
|
||||||
| 2 | `read_dir("del-ii-bilag-7-prisskjema")` | 2 162 | 39 |
|
|
||||||
| 3 | `read_file(".../prissammenstilling-sheet-1.md")` | 2 342 | 47 |
|
|
||||||
| 4 | *(neste tur — bærer prisskjemaet, 4 075 o200k-tokens)* | **429** | — |
|
|
||||||
|
|
||||||
Fra 630 konseptdokumenter fant modellen prisskjemaet i **tre** navigasjonssteg. Det er nøyaktig
|
|
||||||
egenskapen den hierarkiske stigen (S7a-3) og debatt-navigasjonen (S2c) ble bygget for, og den var
|
|
||||||
til nå bevist kun mot et manus. **Grensen som gjenstår** er uendret i form: at modellen VELGER
|
|
||||||
bedre med en struktur enn med hele basen er fortsatt ikke vist — dette er én kjøring, og den viser
|
|
||||||
at valget er *mulig og korrekt her*, ikke at det er bedre i snitt.
|
|
||||||
|
|
||||||
Merk at det er **suksessen** som felte kjøringen: verktøyresultatet fra trinn 3 er hele
|
|
||||||
prisskjemaet, og det gjør neste prompt 4 075 tokens.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. Veggen — målt, ikke resonnert
|
|
||||||
|
|
||||||
`az cognitiveservices account deployment show` rapporterer deploymentets egne `rateLimits`:
|
|
||||||
**10 forespørsler / 60 s** og **10 000 tokens / 60 s**.
|
|
||||||
|
|
||||||
Første hypotese var pacing (for mange kall for tett). Den er **falsifisert av måling**: med 12 s og
|
|
||||||
deretter 20 s mellom hvert kall, og 8 forsøk à 30 s backoff, kom samme 429 hver gang.
|
|
||||||
|
|
||||||
Den avgjørende prøven isolerer ÉN forespørsel etter et helt stille vindu:
|
|
||||||
|
|
||||||
| Prøve | Utfall |
|
|
||||||
|---|---|
|
|
||||||
| 2 342 input-tokens, midt i kjøringen | **OK** (målt, trinn 3 over) |
|
|
||||||
| 3 000 tokens, **150 s helt stille** før kallet | **429 `rate_limit_exceeded`** |
|
|
||||||
| 4 000 tokens, **150 s helt stille** før kallet | **429 `rate_limit_exceeded`** |
|
|
||||||
|
|
||||||
Taket ligger altså mellom **2 342 (passerer)** og **3 000 (avvises)** tokens **per forespørsel**, og
|
|
||||||
er ikke noe en backoff kan vente seg forbi: en forespørsel som ikke får plass, får aldri plass.
|
|
||||||
K2-debatten produserer 4 075 tokens i det øyeblikket den åpner prisskjemaet — altså i det øyeblikket
|
|
||||||
den gjør jobben sin.
|
|
||||||
|
|
||||||
**Kvoten er ikke problemet, og her korrigerer jeg min egen første måling.** Et tidligere søk etter
|
|
||||||
`gpt-4.1` i `az cognitiveservices usage list -l eastus` ga **null** GlobalStandard-rader, og det så
|
|
||||||
ut som om abonnementet manglet kvote. Det var **feil spørring, ikke et faktum**: raden heter
|
|
||||||
`gpt4.1-mini` — uten punktum etter «gpt». Med riktig spørring (nevner: 254 kvoterader, kjent-positiv
|
|
||||||
kontroll: `OpenAI.GlobalStandard.gpt-4o` står der med 50/1350):
|
|
||||||
|
|
||||||
```
|
|
||||||
OpenAI.GlobalStandard.gpt4.1-mini: current=10.0 limit=5000.0
|
|
||||||
```
|
|
||||||
|
|
||||||
**10 av 5 000 er i bruk.** Abonnementet har 500× hodrom. Det som binder er den ene
|
|
||||||
`capacity`-verdien på deploymentet.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. Tabellen ordren ber om
|
|
||||||
|
|
||||||
Ordren ber om at «§ 5-tabellens rader «Feedback → forbedret» og «Token» fylles med levende tall».
|
|
||||||
**Ingen slik tabell finnes i dette repoet** — målt over 31 markdown-filer (`docs/*.md` + README):
|
|
||||||
0 treff på en tabellrad som begynner med «Feedback», mens kjent-positiv-kontrollen viser at samme
|
|
||||||
regex finner eksisterende `| Token…`-rader i to andre dokumenter. Tabellen tilhører antakelig
|
|
||||||
ordre-avsenderens eget dokument. Radene føres derfor her, med den ærlige statusen:
|
|
||||||
|
|
||||||
| Rad | Skriptet (09-04) | LEVENDE (06-09) |
|
|
||||||
|---|---|---|
|
|
||||||
| **Feedback → forbedret** | ordene når 2 av 6 proposer-prompter ordrett; forsøket kjøpes og hentes (`honoured: true`); 200 000 → 150 000 NOK; dom-nøkkel `be8535e2…` → `f23ecff8…`. Men manuset LESER ikke feedbacken | **UMÅLT.** Kjøringen nådde aldri et validert forslag, så ingen review-spørsmål ble stilt og ingen tilbakemelding ble gitt |
|
|
||||||
| **Token** | 19 prompter / 19 776 tokens (utforskning 12/18 355 · debatt 3/513 · generering 4/908) | **DELVIS: 5 levende debatt-prompter, 16 872 inn / 374 ut fakturert.** Ikke sammenlignbar — utforskningen var skriptet her (med vilje, se under), og generering ble aldri nådd |
|
|
||||||
|
|
||||||
**Hvorfor utforskningen var skriptet:** ordrens kontroll er «approve-only mot samme base, som forrige
|
|
||||||
måling». En kontroll er bare en kontroll hvis alt annet enn menneskets svar er likt, og en levende
|
|
||||||
utforskning gir to armer to forskjellige mandater. Manuset er derfor ordrett det samme som 09-04
|
|
||||||
kjørte, og de levende rollene er nøyaktig de som er under test: debattens proposer + checker og
|
|
||||||
genereringskallet. Sømmen SC1/SC4/SC8/SC13 handler om, er proposeren som leser tilbakemeldingen.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. Hva som skal til — og hvorfor jeg ikke gjorde det
|
|
||||||
|
|
||||||
Ett reversibelt trekk, på en verdi abonnementet har 500× hodrom for:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
az cognitiveservices account deployment update \
|
az cognitiveservices account deployment create \
|
||||||
-n <resource> -g <resource-group> \
|
-n <resource> -g <resource-group> \
|
||||||
--deployment-name gpt-4-1-mini --sku-capacity 100 # 10K -> 100K TPM
|
--deployment-name gpt-4-1-mini \
|
||||||
|
--model-name gpt-4.1-mini --model-version 2025-04-14 --model-format OpenAI \
|
||||||
|
--sku-name GlobalStandard --sku-capacity 100
|
||||||
```
|
```
|
||||||
|
|
||||||
**På GlobalStandard er `capacity` en gjennomstrømnings-kvote, ikke en pris:** faktureringen er per
|
På GlobalStandard er `capacity` en gjennomstrømnings-kvote, ikke en pris — faktureringen er per
|
||||||
token uansett, så kostnadsgaten er uendret av trekket. Estimatet på NOK 2,01 står.
|
token uansett, så kostnadsgaten er uendret av trekket.
|
||||||
|
|
||||||
**Jeg utførte det likevel ikke,** og grunnen er ikke teknisk:
|
|
||||||
|
|
||||||
* ordrens gjerde sier «Blir en endring nødvendig for å kjøre, uttal den og returner ordren», og
|
|
||||||
navngir Azure-konfigurasjon som noe jeg ikke skal røre;
|
|
||||||
* `STATE.md` bærer «🔓 Azure-`DisableLocalAuth` OVERSTYRT 29.08, IKKE verifisert. **IKKE RØR
|
|
||||||
AZURE.**»;
|
|
||||||
* ordren autoriserer Azure-**kall** gjennom kostnadsgaten. Den autoriserer ikke å konfigurere om
|
|
||||||
ressursen kallene går til.
|
|
||||||
|
|
||||||
Auth **feilet ikke** — gjerdets `DisableLocalAuth`-klausul fyrte altså aldri, og feilmeldingen her
|
|
||||||
er en kvotefeil, ikke en autentiseringsfeil. Det er nettopp derfor dette er en beslutning for
|
|
||||||
operatøren og ikke en tolkning av meg.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 7. Ærlighets-grenser
|
## 3. S2c-navigasjonen, live (uendret funn fra 06:19Z, reprodusert)
|
||||||
|
|
||||||
* **De fire kriteriene står umålt.** Ingenting i dette dokumentet flytter SC1, SC4, SC8 eller SC13.
|
`docs/2026-09-04-s2c-debatt-k2.md` lukket med ærlighets-grensen *«ingen levende modell har
|
||||||
Reviewens formulering (`docs/2026-09-05-major2-trekreview.md` § «Unmeasured against a live model»)
|
navigert»*. Den var lukket allerede ved returen, og er reprodusert i hver kjøring siden. Debattens
|
||||||
står uendret.
|
proposer får kun PEKEREN (fast tekst + erklært `bundle_id` + antall konseptdokumenter + stigen) og
|
||||||
* **Kjøring 1s tokentall er REKONSTRUERT, ikke målt.** Instrumentet leste `usage_details` med
|
de fire navigatør-verktøyene, og går stigen uoppfordret:
|
||||||
`getattr`, men `UsageDetails` er en **`dict`-subklasse** (målt) — `getattr` ga `None` for alle tre
|
|
||||||
feltene mens `BudgetMiddleware`, som bruker `.get`, hele tiden så ekte tall. Kjøring 2 og 3 er
|
```
|
||||||
målt; kjøring 1 er tilskrevet samme forbruk fordi promptene var byte-identiske. Det er en
|
list_bundles → read_bundle("k2-trinn1-20260903") → read_dir("del-ii-bilag-7-prisskjema")
|
||||||
antakelse, og den er merket som det.
|
→ read_file("del-ii-bilag-7-prisskjema/prisskjema-SYNTETISK.md")
|
||||||
|
```
|
||||||
|
|
||||||
|
Fra 630 konseptdokumenter finner modellen prisskjemaet i **tre** navigasjonssteg.
|
||||||
|
|
||||||
|
**To nye navigasjons-funn, målt her:**
|
||||||
|
|
||||||
|
1. **Modellen forveksler katalog med fil.** `read_dir` på et nivå med underkataloger (`30-1`,
|
||||||
|
`30-7`, `521-001` …) ble fulgt av `read_file(".../30-7.md")` — modellen la på `.md`. Tre slike
|
||||||
|
på rad, og MAF stopper da videre verktøykall for den forespørselen («Maximum consecutive
|
||||||
|
function call errors reached»). Katalog-oppføringene i `directory_listing` bærer `documents`, men
|
||||||
|
modellen leste dem som filnavn.
|
||||||
|
2. **Én stor fil kan spise hele run-taket.** Prisskjema-katalogen i syretest-fiksturen bærer både
|
||||||
|
K2s ekte, *uprisede* sammenstillingsark (101 188 tegn ≈ 25 000 tokens) og den syntetiske,
|
||||||
|
*prisede* linja (637 tegn). I én kjøring åpnet debatten den store og traff run-takets 100 000
|
||||||
|
tokens før den var ferdig (`run refused: budget exceeded: tokens limit=100000 observed=100664`).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Hvorfor det tok seks kjøringer å komme fram til døra — hvert steg er en måling
|
||||||
|
|
||||||
|
Review-døra (`--proposal-review`) stiller sitt spørsmål **kun når validatoren har akseptert en
|
||||||
|
kandidat**. Seks kjøringer nådde den ikke, og hver ga et distinkt, reproduserbart funn. Alle seks
|
||||||
|
kjørte den samme argv-en og det samme skriptede utforsknings-manuset som `docs/2026-09-04-…`; det
|
||||||
|
som varierer er navngitt i hver rad.
|
||||||
|
|
||||||
|
| # | Variant | Utfall — stage 0 | Funn |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 1 | 09-04-manuset ordrett, syretest-basen (approve) | `unknown cost code '21.1 grunnarbeider'` | Modellen kopierte mandatets **prosa** inn i kodefeltet |
|
||||||
|
| 2 | samme (revise) | **identisk** | Reprodusert i uavhengig kjøring |
|
||||||
|
| 3 | begrunnelsen sier «Kostkode 21.1» i stedet for «Post 21.1 grunnarbeider» | `quantity 1000 … utenfor 5 % rundt baseline 1250` | Koden nå riktig; mengden gjettet |
|
||||||
|
| 4 | som 3, uten det upriste 101K-arket | **identisk** | Proposeren **leste** det prisede skjemaet to ganger og gjettet likevel |
|
||||||
|
| 5 | begrunnelsen oppgir kostlinja (1250 m3 à 850) , syretest-basen | run-taket 100 000 tokens | Det upriste arket spiser budsjettet (§ 3, funn 2) |
|
||||||
|
| 6 | som 5, uten det upriste arket | **VALIDERT — døra åpner** | § 5 |
|
||||||
|
|
||||||
|
**Rotårsaken er semantisk, ikke en modellsvakhet.** `affected_items` skal bære **baseline**-linja
|
||||||
|
slik den står i prisskjemaet — det er dét stage 0 (S4.0) avstemmer mot. Genererings-prompten sier
|
||||||
|
kun `affected_items (list of {code, quantity, unit_cost})` og forklarer ikke hvilken av de to
|
||||||
|
mengdene den vil ha. En levende modell som blir bedt om å *redusere* utgravingsvolumet fyller
|
||||||
|
naturlig inn sin **foreslåtte reduserte** mengde (1000), og blir avvist. Det skriptede 09-04-manuset
|
||||||
|
skrev 1250/850 fordi et menneske skrev manuset og kjente regelen.
|
||||||
|
|
||||||
|
**Steg 5-løkka virker, men den oscillerer.** Stage 0 rapporterer **én** overtredelse om gangen, og
|
||||||
|
avvisningen mates tilbake i neste forsøks prompt. Målt sekvens i kjøring 3:
|
||||||
|
|
||||||
|
```
|
||||||
|
1000/500 → «quantity 1000 … baseline 1250» → 1188/350 → «unit_cost 350 … baseline 850»
|
||||||
|
→ 1000/850 → forsøkene brukt opp (max_attempts=3)
|
||||||
|
```
|
||||||
|
|
||||||
|
Modellen fant hver av de to riktige verdiene, men aldri samtidig: den retter feltet avvisningen
|
||||||
|
navngir og brekker det andre. Med `max_attempts = 3` per tilnærming rekker den ikke å konvergere på
|
||||||
|
to felt.
|
||||||
|
|
||||||
|
**Dette er funn, ikke fiks.** Alle tre — prompt-teksten for `affected_items`, at stage 0 kun navngir
|
||||||
|
første overtredelse, og at katalog-oppføringer leses som filnavn — bor i `src/`, som ordrens gjerde
|
||||||
|
holder utenfor. De er rapportert, ikke rettet.
|
||||||
|
|
||||||
|
**De to fikstur-endringene er deklarert, og de forteller ikke modellen hva den skal foreslå.**
|
||||||
|
(a) Mandatets begrunnelse oppgir kostlinja slik dokumentet har den — det er hva en fagperson ville
|
||||||
|
skrevet. (b) Det upriste 101K-arket er fjernet fra en KOPI av basen; en ekte priset leveranse ville
|
||||||
|
båret prisene i selve skjemaet. Ingen av dem rører tilbakemeldingen, som er det som er under test,
|
||||||
|
og modellen ser den først ved review-døra.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. SC1 og SC8 — forslaget FØR og ETTER ekspertens ord
|
||||||
|
|
||||||
|
Begge armer kjørte identisk konfigurasjon; **det eneste som skiller dem er svaret på stdin.**
|
||||||
|
Kontrollarmen svarer `approve`, revise-armen svarer:
|
||||||
|
|
||||||
|
> `revise Anslaget er for hoeyt. Bare halvparten av mengden i denne kostlinjen er styrbar - halver
|
||||||
|
> claimed_saving_nok og behold de samme kostlinjene og forutsetningene.`
|
||||||
|
|
||||||
|
At kontrollen er en kontroll er **målt, ikke påstått**: begge armer produserte det **samme første
|
||||||
|
forslaget** — 212 500 NOK, dom-nøkkel `ee11886ddce76568`.
|
||||||
|
|
||||||
|
| Felt | Forslag 1 (begge armer) | Forslag 2 (etter `revise`) | Ba eksperten om det? |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `claimed_saving_nok` | **212 500** | **265 625** | Ja — men om å **halvere**. Modellen økte **25 %** |
|
||||||
|
| `affected_items` | `21.1 · 1250 · 850` | `21.1 · 1250 · 850` — **uendret** | Ja: «behold de samme kostlinjene» ✅ |
|
||||||
|
| `assumptions["21.1"]` | `[750, 950]` | `[800, 900]` — **innsnevret** | Nei: «behold … forutsetningene» ❌ |
|
||||||
|
| `measure` | «Redusert utgravingsvolum i grunnarbeider» | «… **ved å halvere mengden styrbar volum i kostkode 21.1**» | Ikke bedt om, men den **siterer** tilbakemeldingen |
|
||||||
|
| dom-nøkkel | `ee11886ddce76568` | `4bf297e2e2ce4bc8` | — |
|
||||||
|
| `validator_decision` | `validated` | `validated` | — |
|
||||||
|
| `cost_baseline_anchored` | `true` | `true` | — |
|
||||||
|
|
||||||
|
**Utfallet (SC8): 212 500 → 265 625 NOK. Feil vei, og med et tall som passerte hele gaten.**
|
||||||
|
|
||||||
|
**Mekanismen bak feilretningen er målt, ikke gjettet.** Modellen leste «bare halvparten av mengden
|
||||||
|
er styrbar» som *«spar halve kostlinja»*:
|
||||||
|
|
||||||
|
```
|
||||||
|
forsoek 1 (uten feedback): 212 500 = 20,0 % av 1 062 500
|
||||||
|
forsoek 2 (MED feedback): 531 250 = 50,0 % av linja -> AVVIST av validatoren
|
||||||
|
forsoek 3 (avvisningen matet tilbake): 265 625 = 25,0 % -> VALIDERT
|
||||||
|
```
|
||||||
|
|
||||||
|
Den mente altså «halver mengden» der eksperten skrev «halver `claimed_saving_nok`» — og det tallet
|
||||||
|
eksperten faktisk ba om var 106 250. **Det som stoppet 531 250 var validatoren, ikke modellen.**
|
||||||
|
Dette er nøyaktig hvorfor D6 er som den er: **validatorens siste dom vinner, aldri revieweren sin.**
|
||||||
|
Hadde revieweren fått bestemme, ville et menneskes ønske om ett forsøk til ha forbedret utfallet
|
||||||
|
uten at noen falsifiserer sa ja.
|
||||||
|
|
||||||
|
**Ærlig lesning:** døra virker i hvert mekanisk ledd — ordene når prompten, forsøket kjøpes og
|
||||||
|
hentes, forslaget endrer seg, utfallet flytter seg og artefaktet bærer alt. **Det den ikke gir, er
|
||||||
|
at modellen etterkommer.** Ingenting i MAJOR-2 lovet det, og ingen test påsto det; men før denne
|
||||||
|
kjøringen var det ikke målt at den lar være.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. SC4 og SC13 — når ordene fram, og ble forsøket kjøpt?
|
||||||
|
|
||||||
|
**SC4 — ordrett i prompten:** ekspertens setning står **ordrett i 2 av 6 genererings-prompter** i
|
||||||
|
revise-armen (og i 2 av 23 levende proposer-prompter totalt — de 17 andre er debatt-turer, som
|
||||||
|
aldri ser tilbakemeldingen). Nevneren er den samme som den skriptede målingen 09-04 fant: **2 av 6.**
|
||||||
|
De to er nøyaktig forsøk 2 og 3 for `hypothesis-1`; `own-proposal`s tre forsøk har den ikke, som
|
||||||
|
seg hør og bør — tilbakemeldingen tilhører den tilnærmingen den ble gitt om.
|
||||||
|
|
||||||
|
**SC13 — forsøket ble kjøpt, og det ble hentet.** `{run_id}-proposal-reviews.json`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"approach_id": "hypothesis-1", "attempt": 0, "decision": "revise",
|
||||||
|
"feedback": "Anslaget er for hoeyt. ... halver claimed_saving_nok og behold de samme kostlinjene og forutsetningene.",
|
||||||
|
"honoured": true, "p50": 291467.85, "verdict_key": "ee11886ddce76568"}
|
||||||
|
{"approach_id": "hypothesis-1", "attempt": 2, "decision": "approve",
|
||||||
|
"feedback": "", "honoured": true, "p50": 319311.90, "verdict_key": "4bf297e2e2ce4bc8"}
|
||||||
|
```
|
||||||
|
|
||||||
|
Feedbacken står **ordrett** i artefaktet, `honoured: true` på begge, og terminalen viste
|
||||||
|
`attempts remaining: 2` ved review #1 og `0` ved review #3 — den ledger-bevisste nedtellingen
|
||||||
|
(M38) med ekte tall. Kontrollarmen skrev det samme artefaktet med **én** rad
|
||||||
|
(`1 approve, 0 revise`), og linja «proposal review: 2 answer(s) across 1 candidate(s) — 1 approve,
|
||||||
|
1 revise» er rendereren som rapporterer det.
|
||||||
|
|
||||||
|
**Ville en levende oppfølging blitt avvist?** Ja, én av dem ble det: forsøk 2 (531 250 NOK) falt hos
|
||||||
|
validatoren, og Steg 5 matet avvisningen tilbake. Den reviderte kandidaten som til slutt nådde
|
||||||
|
review #3 var altså **selv et produkt av to falsifiserere i serie** — mennesket og validatoren.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Ledger per fase, mot den skriptede profilen
|
||||||
|
|
||||||
|
**Ordren ber om at «§ 5-tabellens rader ‹Feedback → forbedret› og ‹Token› fylles med levende
|
||||||
|
tall». Ingen slik tabell finnes i dette repoet** — målt over 31 markdown-filer (`docs/*.md` +
|
||||||
|
README): 0 treff på en tabellrad som begynner med «Feedback», mens kjent-positiv-kontrollen viser
|
||||||
|
at samme regex finner eksisterende `| Token…`-rader i to andre dokumenter. Tabellen tilhører
|
||||||
|
ordre-avsenderens eget dokument. Radene er derfor besvart her: «Feedback → forbedret» i § 5 og
|
||||||
|
§ 6, «Token» i tabellen under.
|
||||||
|
|
||||||
|
Ordren ber om sammenligning mot `docs/2026-09-04-major2-proposal-review-k2.md:207` (19 prompter /
|
||||||
|
19 776 tokens). Sammenligningen er **like-for-like på utforskningen ved konstruksjon** — manuset er
|
||||||
|
det samme, så de 12 utforsknings-promptene er skriptede og ubetalte i begge — og **ikke**
|
||||||
|
like-for-like på debatt og generering, som her er levende og derfor navigerer og resonnerer fritt.
|
||||||
|
|
||||||
|
| | Skriptet (09-04) | LEVENDE kontroll (approve) | LEVENDE revise |
|
||||||
|
|---|---|---|---|
|
||||||
|
| utforskning | 12 prompter / 18 355 tok | 12, skriptet (ubetalt) | 12, skriptet (ubetalt) |
|
||||||
|
| debatt: proposer | 2 / 314 tok | **15 / 29 030 inn / 1 026 ut** | **23 / 62 654 inn / 1 572 ut** |
|
||||||
|
| debatt: checker | 1 / 199 tok | inkl. over: **5 prompter / 9 547 / 326** | **8 / 18 881 / 441** |
|
||||||
|
| generering | 4 / 908 tok | 3 forsøk (i proposer-tallet) | 6 forsøk (i proposer-tallet) |
|
||||||
|
| **prompter totalt** | **19** | **32** (20 levende + 12 skriptede) | **43** (31 + 12) |
|
||||||
|
| **betalte tokens** | — (ingen) | **38 577 inn / 1 352 ut** | **81 535 inn / 2 013 ut** |
|
||||||
|
| **kostnad** | — | **NOK 0,164** | **NOK 0,335** |
|
||||||
|
|
||||||
|
**Forskjellen er navigasjonen, ikke døra.** Den skriptede debatten svarte med ett fast utsagn per
|
||||||
|
tur; den levende går stigen, leser dokumenter og bærer resultatene videre i én delt samtale — det er
|
||||||
|
`docs/2026-09-04-s2c-debatt-k2.md` sin egen handel, målt live for første gang. **Døras egen kostnad
|
||||||
|
er den ene ekstra genererings-runden per revise**, og den er liten: revise-armen har 3 flere
|
||||||
|
genererings-forsøk enn kontrollen.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Ærlighets-grenser
|
||||||
|
|
||||||
|
* **Ett kall er én kjøring.** Alt i § 5 og § 6 er én modell, én gang, på ett korpus. At
|
||||||
|
`gpt-4.1-mini` gjør det motsatte av en tilbakemelding er målt her, ikke et utsagn om modeller
|
||||||
|
generelt eller om samme modell i snitt.
|
||||||
|
* **Fiksturen er endret to ganger for å nå døra, og begge er deklarert i § 4.** Målingen i § 5–7 er
|
||||||
|
derfor ikke «09-04-oppsettet med levende modell», men «09-04-oppsettet med en begrunnelse som
|
||||||
|
oppgir kostlinja og uten det upriste arket». Radene 1–6 i § 4 er hva det uendrede oppsettet gjør.
|
||||||
|
* **Prisene i basen er SYNTETISKE** (`K2-priset-SYNTETISK`) — K2 som levert har ingen priser
|
||||||
|
(målt, S7b). Tallene 212 500 og 265 625 er derfor ikke besparelser i Stange skole-anbudet; de er
|
||||||
|
besparelser i en syntetisk prising av det. Det gjelder SC8 uansett hvilken modell som kjører.
|
||||||
|
* **`own-proposal` validerte aldri i noen kjøring.** Den fant ingen ekte kostkode i en eneste av de
|
||||||
|
ni kjøringene (`RIG01`, `Prosjektering`, `VENT-01`, `Steel`, `Architectural_Design` …). Systemets
|
||||||
|
eget forslag er dermed **umålt** mot review-døra; alt i § 5–6 gjelder `hypothesis-1`.
|
||||||
* **429-forespørsler er antatt ikke fakturert.** Det er Azures dokumenterte oppførsel, men det er
|
* **429-forespørsler er antatt ikke fakturert.** Det er Azures dokumenterte oppførsel, men det er
|
||||||
ikke verifisert mot en faktura her. Fakturert forbruk kan derfor være høyere enn NOK 0,069 —
|
ikke verifisert mot en faktura her. Her er det uansett uten betydning: 0 stk. 429.
|
||||||
ikke i en størrelsesorden som berører taket.
|
* **Prisene er LISTEPRIS**, hentet 06.09.2026. Rabatter og avtaler er ikke reflektert.
|
||||||
* **Prisene er LISTEPRIS**, hentet 06.09.2026. Rabatter, avtaler eller prisendringer er ikke
|
|
||||||
reflektert.
|
|
||||||
* **Ett kall er én kjøring.** Navigasjonsresultatet i § 3 er én modell, én gang, på ett korpus.
|
|
||||||
* **Den syntetiske prisfiksturen er uendret** (`K2-priset-SYNTETISK`) — K2 som levert har ingen
|
|
||||||
priser, så tallene et forslag ville handlet om er fortsatt syntetiske. Det gjelder SC8 uansett
|
|
||||||
hvilken modell som kjører.
|
|
||||||
* **Måleharnesset er ikke gatet av suiten.** `scratchpad/major2-live/live_major2.py` er en
|
* **Måleharnesset er ikke gatet av suiten.** `scratchpad/major2-live/live_major2.py` er en
|
||||||
måleartefakt som enhver annen `scratchpad/`-profiler; den asserteres ingen steder.
|
måleartefakt som enhver annen `scratchpad/`-profiler; den asserteres ingen steder. Det som ER
|
||||||
|
gatet er `src/`, som er urørt, og suiten som er kjørt etter (§ 9).
|
||||||
|
* **`max_attempts` er ikke eksponert på CLI-en**, så § 4s oscillasjons-funn er målt ved defaulten 3.
|
||||||
|
Om en høyere verdi ville latt modellen konvergere er **ikke** målt — å heve den ville krevd en
|
||||||
|
endring i `src/`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Etterkontroll
|
||||||
|
|
||||||
|
Ingen fil under `src/` eller `tests/` er rørt (`git diff --stat -- src/ tests/` tom). Suiten og
|
||||||
|
golden-fasiten er kjørt etter dokumentendringen; tallene står i commit-meldingen og i `STATE.md`.
|
||||||
|
Alle måleartefakter — de ni kjøringenes `*-records.json`, utboksene og de to fikstur-variantene —
|
||||||
|
ligger utracket i `scratchpad/major2-live/`.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue