docs(plan): the review's findings as a ranked plan the NESTE block walks, one point per session
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
This commit is contained in:
parent
c96ef9032d
commit
0eb0f3d72b
1 changed files with 165 additions and 0 deletions
165
docs/plan/2026-08-09-egnethetsreview-plan.md
Normal file
165
docs/plan/2026-08-09-egnethetsreview-plan.md
Normal file
|
|
@ -0,0 +1,165 @@
|
|||
# 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 plan `STATE.md` peker inn i økt for økt. Chatten kan glemmes —
|
||||
> alt som trengs står her.
|
||||
>
|
||||
> **Slik brukes den:** `STATE.md`s «👉 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), men `main()` 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]**
|
||||
1. **Fresh-clone-kriterium:** klon til scratch → `uv sync` → kjør simuleringen → diff mot
|
||||
arbeidskopiens output. Beviser «last ned → kjør»-påstanden.
|
||||
2. **Stderr pinnes:** de fire kjente linjene er fasit; nye advarsler etter subtree-pull fanges.
|
||||
3. **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.
|
||||
4. **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 |
|
||||
Loading…
Add table
Add a link
Reference in a new issue