Fable-review 2026-08-09 made durable: P1-P10 in plain language with the commands behind every number (evidence table §4). Pre-demo: step-7 inbox wired into the walkthrough (P1), Spor B sharpening (P2), the stage-0 first-contact check on Tuesday's GO (P3), fresh-clone/stderr/golden criteria plus two honesty sentences on Wednesday (P4). Post-demo: CLI portfolio cap (P6), one consolidated commons amendment (P7), method skill [Voyage] (P8), and an explicit NULL for orchestration swaps (P10). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019xhQpH4oQBaf8dxCkXuB8Z
12 KiB
Egnethetsreview → plan — funnene gjort varige, én økt av gangen
Hva dette er. Fable-reviewen (2026-08-09, kjørt fra
2026-08-09-fable-egnethetsreview-prompt.md) leverte funnene sine i et chat-transkript som forsvinner. Dette dokumentet er den varige formen: hvert funn i klarspråk, med belegget som produserte det, rangert som en planSTATE.mdpeker inn i økt for økt. Chatten kan glemmes — alt som trengs står her.Slik brukes den:
STATE.mds «👉 NESTE»-blokk peker alltid på det ØVERSTE ulukkede P-punktet her. En økt lukker et punkt → setter ✔ med commit-hash HER → overskriver STATE.md → neste økt leser videre. Demo-uke-planen (2026-08-06-demo-uke-plan.md) og innholdsgate-planen (2026-08-09-innholdsgate-og-aerlighet.md) BESTÅR uendret — denne planen føyer review-funnene inn i samme løp og flytter ingenting som er besluttet (O1–O4 står).Voyage: småjobber (≤1 økt, kjent sti) kjøres direkte med
/tdd-disiplin. Full Voyage-syklus (/trekbrief → /trekplan → /trekexecute → /trekreview) brukes der et punkt er merket [Voyage] — punktene med reell design-usikkerhet eller ≥2 økters bygging.
1. Funnene i klarspråk
Reviewen fant ingen brann i koden: suiten er grønn (766 passed / 4 skipped), demo-outputen er byte-identisk over to kjøringer, og alle åtte steg har sin merkede linje. Det den fant, er fire steder der demoen lover mer enn den viser, og noen hull i sikkerhetsnettet rundt torsdag.
Funn 1 — kostnads-sjekken har aldri kjørt på ekte innhold.
Validatoren KAN avstemme et forslag mot prosjektets faktiske kostnadstall (S4.0), men sjekken
aktiveres bare når kunnskapsbasen shipper cost-baseline.json — og ingen bundle i repoet har
den fila (målt, §4 rad 3). I dagens demo regner validatoren derfor kun på tall forslaget selv
oppgir. Bestillingen til commons krever fila (bra) — men første gang sjekken møter ekte innhold
blir på leveransedagen, og avviker manus-tallene mer enn 5 % fra de leverte kostnadstallene,
avvises BÅDE det overdrevne og det korrigerte forslaget på scenen. Og reserven (mikro-eksemplet)
kan aldri få fila, så NO-GO-tilfellet trenger sin egen ærlige setning.
Funn 2 — demoen sier «fil-innboks for ekspertdommer», men bruker den ikke.
Steg 7-linja i demoen sier «lang fil-løkke». I virkeligheten leveres dommen som et
funksjonsargument — simulate_learning_loop kaller run_project uten verdict_dir
(§4 rad 4). Fil-innboksen finnes og er testet (test_step7_async_loop_loadbearing.py), men
demoen kjører den ikke. Dette er samme klasse som Steg 5 var før 7. august: et steg som
omtales er ikke vist.
Funn 3 — «last ned og kjør» er aldri testet fra en fersk nedlasting.
Ingen av de åtte demo-kriteriene kjører fra en ren klone. uv.lock finnes, så beviset er én
kommandosekvens — og den fanger miljøavhengigheter (PORTFOLIO_SHARED_ROOT re-peker
kunnskapsbasen!), utrackede filer og lokal .venv-drift.
Funn 4 — små presisjonshull i det som sies og vises. Kjøring A kalles «fersk kunnskapsbase, ingen tidligere dommer», men bundelen shipper ett dom-frø, og Kjøring B viser «2 dommer» der bare én kom fra sløyfa — én muntlig setning retter det. Stderr-støyen (to warnings + to «forcing completion») er det første publikum ser.
Etter demoen (feature-settet):
- Funn 5: porteføljekjøring fra kommandolinja har ikke noe samlet token-tak — taket finnes i
biblioteket (
PortfolioMeter, seks målte mutasjoner), menmain()kobler det aldri på; koden sier det selv (§4 rad 6). - Funn 6: spec-gjelden mot commons/søskenet vokser — seks lokale semantikk-beslutninger er uspeilet (D7-speiling ÅPEN i CLAUDE.md), og «rettferdig sammenligning» (A6) blir mindre sann for hver av dem.
- Funn 7: «metoden som Agent Skill» er en CLAUDE.md-konvensjon uten realisering — kun ekspert-personaen finnes (§4 rad 5).
- Funn 8:
[project.scripts]mangler (release-hygiene, målbilde §11 pkt. 7). - Null-funn: bytte av orkestrering (Sequential/Handoff/graf-laget/checkpointing) skal IKKE gjøres — målt: debatten er i praksis en fast sekvens og Group Chat beholdes av byttekost-grunner, gevinsten er kosmetisk, kostnaden er re-verifisering av hele offline-beviskjeden (§4 rad 7–8).
2. Plan FØR demoen (P1–P4, i utførelsesrekkefølge)
P1 — Steg 7-innboksen kobles på i demoen ☐
[1 økt · Opus 5/high · TDD direkte · MÅ lande før onsdags-frysen]
Rute persona-dommen gjennom en faktisk verdict_dir-katalog i simulate_learning_loop —
sømmene finnes allerede (run_project(verdict_dir=…) + write_verdict er offentlig primitiv).
Ny load-bearing-test: detach innboks-lesingen → markør-/Steg 7-linja endres → RØD. Kriterium 6
(byte-identisk stdout) måles på nytt etterpå.
Faller den på tid: minimumsvarianten = ærlig etikett i _run_trace_lines («dom levert
direkte her; fil-innboksen er samme søm, bevist i test») + én muntlig setning. 0,1 økt.
P2 — Spor B: innholdsgaten ☐
[1–2 økter · Opus 5/high · TDD direkte · følger innholdsgate-planen §3–§4 uendret]
Reviewens skjerpelse, ellers ingen endring: §4-beslutning 2 (avvisning per dokument eller per
bundle?) tas FØR bygging, og innholdsgate-planens kriterium 5 (byte-uendret demo-stdout) måles
ETTER wiring. Målt frys-sikker: verken run.py eller simulation.py importerer ingest.
P3 — Tirsdag 11.: GO/NO-GO + kostnads-sjekk-prøven ☐
[0,25 økt, del av tirsdagsøkta · Opus 5/medium]
Som demo-uke-planen — PLUSS to tillegg fra funn 1: (a) kjør demo-kriterium 1+2 (åtte
steg-linjer; REJECTED- og VALIDATED-linje for samme kandidat) mot den NYE bundelen allerede
tirsdag, ikke først onsdag; (b) skriv manus-registerets tall FRA den leverte
cost-baseline.json, aldri ved siden av den. Dette er første gang S4.0-forankringen kjører på
ekte innhold. Prøve som feller feil: kjør sim mot ny bundle med bevisst 10 %-avvik i
manuset → skal gi FORKASTET; korrigert → FORESLÅTT.
P4 — Onsdag 12.: tre nye kriterier + to setninger, så generalprøve og FRYS ☐
[0,5 økt, del av generalprøve-økta · Opus 5/low]
- Fresh-clone-kriterium: klon til scratch →
uv sync→ kjør simuleringen → diff mot arbeidskopiens output. Beviser «last ned → kjør»-påstanden. - Stderr pinnes: de fire kjente linjene er fasit; nye advarsler etter subtree-pull fanges.
- Golden-transkript: sjekk inn demo-outputen som fasit-fil og diff mot den — selvidentitet (kriterium 6) fanger ikke-determinisme, men ikke regresjon mellom onsdag og torsdag.
- To ferdigskrevne setninger inn i ærlighets-teksten (mønsteret fra innholdsgate-planen §5): NO-GO-varianten «kostnads-forankringen er ikke aktiv i reserve-eksemplet», og frø-setningen «én av de to tidligere dommene i Kjøring B fulgte med eksempelet — den andre er den demoen lærte».
3. Plan ETTER demoen (P5–P10, i verdirekkefølge)
P5 — README + nivå-2-påstanden (O4, fre 14.–lør 15.) ☐
[1 økt · Opus 5/medium] Allerede besluttet (O4). Reviewens tillegg: G5-forbeholdet skal stå i teksten som løftes — sammenligningen mot søskenet gjelder den spec-ede kjernen, ikke hele dette repoet (mandat/hovedbok/portefølje-budsjett m.m. er utenfor spec-ene, målt 0 treff).
P6 — Globalt token-tak inn i CLI-en ☐
[1 økt · Opus 5/high · TDD direkte] --budget-dør i main(): PortfolioMeter +
read_spend/write_spend-wiring + BudgetRefused inn i except-tuplen (TRAP-kommentaren i
run.py sier selv at den ikke fanges i dag). Feller: CLI-test med spend-fil nær taket +
--portfolio → strukturert refusal; detach flagget → rød.
P7 — Amendment-pakken til commons — ÉN samlet bestilling ☐
[1 økt · Fable 5/high (spec-review er formen) · leveres via coord-send, ALDRI arbeid i commons] D-A-restene samlet i én tekst: F2/F3-validator-semantikken, S3.2-seedingregelen, S4.0-baseline-formatet, (p)-kvantiseringen, Steg-5-returtypen. Feller: amendmentet gir spec-tester/goldens som binder semantikken på tvers av stackene — i dag kan søskenet følge spec-en korrekt og likevel divergere fra dette repoet.
P8 — Metoden som Agent Skill (B6) ☐ [Voyage]
[/trekbrief først; bestilling til commons + liten konsum-søm her] Målt: kun
shared/skills/expert-reviewer/SKILL.md finnes. Innholdet eies av commons (bestilling som
tekst); konsum-sømmen her er liten (MAF SkillsProvider er experimental — pin versjon).
[Voyage] fordi formen har reell design-usikkerhet — hva av metoden som skal være skript vs.
referanse er ikke avgjort.
P9 — Småting ☐
[0,5 økt samlet · Opus 5/low] [project.scripts]-entry i pyproject.toml;
kapabilitetskartets to korreksjoner (topologi-notatet fra funn «null»: debatten er en fast
sekvens, Group Chat beholdes av byttekost; checkpointing-raden nedgraderes fra «ADOPT (later)»
til «NEI med begrunnelse» — pass-nivå-gjenopptakelse er allerede levert via spend-fila).
P10 — Eksplisitt NULL (ingen økt) ✔
Ingen Sequential-swap, ingen Handoff, ingen graf-adopsjon, ingen checkpointing. Står her så ingen senere økt «oppdager» dem på nytt. Falsifisering av selve null-beslutningen: forsvinner «forcing completion»-linjene en dag uten bytte, var topologi-analysen feil.
4. Belegg (kommandoene bak påstandene, målt 2026-08-09 på HEAD c96ef90)
| # | Påstand | Kommando → resultat |
|---|---|---|
| 1 | Suiten grønn | uv run pytest -q → 766 passed / 4 skipped (111 s) |
| 2 | Demo deterministisk + 8 steg | to kjøringer, stdout adskilt fra stderr, diff → tom; grep -cE "^ *Steg [1-8]" → 8. (Første måling viste avvik — det var målefeil: 2>&1 blandet inn stderr; mkdtemp-linja går bevisst til stderr, simulation.py:531-534) |
| 3 | Ingen bundle har kostbaseline | ls shared/examples/bygg-energi-mikro/ → 8 filer, ingen cost-baseline.json; bestillingen (coord 20260806T112037Z…) krever den per ny bundle |
| 4 | Steg 7 vises uten fil-innboksen | simulation.py:328-366: run_project kalles uten verdict_dir; dommen er argumentet verdict_input (:322); etiketten «lang fil-løkke» står i :478 |
| 5 | Metode-skill finnes ikke | find shared -name "SKILL.md" → kun expert-reviewer |
| 6 | CLI-porteføljen uten pass-tak | run.py:1679-1686: budget-stop-armen «currently UNREACHABLE from here»; BudgetRefused (RuntimeError) utenfor except-tuplen |
| 7 | Debatten er en fast sekvens | workflow.py:97-108: round-robin-selector, terminerings-nett = max_rounds*2+1 = 7 > 3 dispatcher → fyrer aldri; «forcing completion» ×2 i hver kjøring (målt) |
| 8 | MAF-alternativene gir ikke gevinst | introspeksjon installert orchestrations 1.0.0: ingen innebygd round-robin (kun docstring-eksempel _group_chat.py:149-151); SequentialBuilder.__init__ tar checkpoint_storage direkte; Handoff = modelldreven ruting |
| 9 | [project.scripts] mangler |
grep -n scripts pyproject.toml → 0 treff |
| 10 | Spor B er frys-sikker | grep -n "ingest" src/portfolio_optimiser/{run,simulation}.py → kun docstring-omtaler, ingen import |
5. Ukens kalender (hvor punktene lander)
| Dag | Innhold |
|---|---|
| søn 9.–man 10. | P1 (Steg 7-innboksen) + P2 (Spor B økt 1, evt. 2) |
| tir 11. | P3: GO/NO-GO på commons-innholdet + kostnads-sjekk-prøven |
| ons 12. | P4: nye kriterier + setninger → generalprøve → FRYS |
| tor 13. | DEMO |
| fre 14.–lør 15. | P5: README (O4) |
| deretter | P6 → P7 → P8 → P9, ett punkt per økt; STATE.md peker på øverste åpne |