I1: Funn 1 was measured one directory wide; the repo ships a working S4.0
baseline fixture and run.py:516 reads it. The anchored dry-run + the 10%%
deviation test move from Tuesday to the weekend (P4 pt 0); Tuesday becomes a
re-measurement with an explicit abort path (I4: pre-pull hash, reset rule,
18:00 NO-GO). I2: stderr damping decided YES, in the weekend BEFORE pinning —
measured today stderr is six lines, one deliberately non-deterministic. I3:
[project.scripts] moves off freeze day to before the fresh-clone measurement.
I5: a demo runbook post (P4.5) at the freeze. I6: every §4 claim re-measured
today on HEAD bb3df79; the 08-09 datings were commits from 2026-08-06.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UDHSsyMuBASJcRapddciHL
308 lines
26 KiB
Markdown
308 lines
26 KiB
Markdown
# 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.
|
||
>
|
||
> **Revidert 2026-08-07 (planrevisjonen — seks innsigelser målt og avgjort, se §6):** ukas største
|
||
> måletekniske risiko (S4.0-forankringen) er flyttet fra tirsdag til helgen, stderr-beslutningen tas
|
||
> FØR pinningen, `[project.scripts]` er flyttet ut av frysedagen, tirsdag har fått abortsti, og
|
||
> demoen har fått en runbook-post (P4.5). **Datonote (I6):** filnavnets `2026-08-09` beholdes
|
||
> (omdøping koster lenker), men øktene dokumentet daterer til 08-08/08-09 ble committet
|
||
> **2026-08-06** (målt 08-07: `git show -s --format='%h %ad' --date=short c96ef90 0eb0f3d 295e966
|
||
> 688ee24 e93e921 d6f3359` → alle `2026-08-06`).
|
||
|
||
## 0. TO SPOR (operatørbeslutning 2026-08-09 — overordner rekkefølgen under)
|
||
|
||
Operatøren har delt uka i to spor. P-punktene under består, men hører nå hjemme slik:
|
||
|
||
### SPOR 1 — KOMPLETT VERSJON 1, klar til torsdag 13. (inkludert andre repo)
|
||
|
||
v1 = den **målte kjernen** (alle åtte steg wiret, 42 load-bearing-testfiler, 766/770 grønn —
|
||
inventaret i `2026-08-06-v1-inventory.local.md`) + to lukkinger + release-kuttet:
|
||
|
||
| Post | Innhold | Kost | Nedgradering hvis tid/kvote ryker |
|
||
|---|---|---|---|
|
||
| S1.a = **P1** | Steg 7-innboksen inn i demoløpet | 1 økt | ærlig etikett (0,1 økt) |
|
||
| S1.b = **P2** | Innholdsgaten (Spor B) | 1–2 økter | NEI-varianten i ærlighets-teksten (ferdigskrevet) |
|
||
| S1.c (ny) | **Release-kuttet:** versjon `1.0.0` synket FIRE steder (`pyproject`/`__init__`/`uv.lock`/`test_smoke`) + CHANGELOG (`[Unreleased]` → 1.0.0; Steg-5-API-endringen står alt der) + tag `v1.0.0` på begge remotes ETTER grønn generalprøve. *(`[project.scripts]` er flyttet videre til P4 pkt. 5 i HELGEN (I3): en ny entry point endrer install-flaten, så den må ligge FØR fresh-clone-målingen — aldri på frysedagen.)* | 0,5–0,75 økt (ons kveld) | tag fredag i stedet — aldri tag før grønn generalprøve |
|
||
|
||
**Andre repo — hva som faktisk MÅ gjøres der (målt, ikke antatt):**
|
||
- **commons:** energieksemplet MED `cost-baseline.json` — ALLEREDE bestilt (frist tir 11.,
|
||
coord `20260806T112037Z…`); GO/NO-GO tirsdag står. Reserven (mikro) gjør at v1 ALDRI
|
||
blokkeres av commons: **rammeverket er v1, innholdet er data.**
|
||
- **llm-ingestion-okf:** ingenting — pinnet `v0.3.2` gjennom v1 (målt at den holder).
|
||
- **guard-repoet:** ingenting — `v0.3.4` finnes, stdlib-only; wiringen skjer HER (S1.b).
|
||
- **po-claude:** PARKERT (ramme B) — v1 er MAF-siden alene, og det SIES i release-notatet.
|
||
|
||
→ **Ingen ny coord-melding trengs.** Alt andre-repo-arbeid er enten bestilt eller ikke nødvendig.
|
||
|
||
**Flagget konflikt (operatøren eier den):** O4 sier README-løftet kommer ETTER demoen (fre–lør).
|
||
Anbefaling: tag `v1.0.0` onsdag med nøktern README-status; nivå-2-påstanden inn i README fre/lør
|
||
som besluttet. Beviset først, påstanden etterpå — det gjelder også taggen.
|
||
|
||
**EKSPLISITT UTE av v1 (sies i release-notatet, ikke i en fotnote):** CLI-porteføljetak (P6),
|
||
commons-amendmentene (P7), metode-skillen (P8), bestiller-flaten (åpen beslutning i STATE),
|
||
bundle-fabrikken (O1), søsken-repoet (parkert), okf `v0.4.0`+.
|
||
|
||
### SPOR 2 — KOMPLETT OG OVERBEVISENDE DEMO av alle åtte steg
|
||
|
||
= **P3** (GO-dag + re-måling av kostnads-sjekken) + **P4** (forankret prøvekjøring +
|
||
fresh-clone-/stderr-/golden-kriterier + to ærlighets-setninger) + **P4.5** (demo-runbook, VED
|
||
frysen — I5) + generalprøven + én **muntlig** mandat-setning (bestillingsflyten er svaret
|
||
på «kan vi styre hva som analyseres?» — `docs/bestille-en-kjoring.md`).
|
||
**Stderr-dempingen er BESLUTTET (I2, 2026-08-07): JA — utføres i HELGEN som del av
|
||
P4-forskuddet, FØR stderr-pinningen** (demping etter pinning ville ugyldiggjort fasiten på
|
||
frysedagen). Målt 08-07: stderr er SEKS linjer — de fire støylinjene (to `ExperimentalWarning` +
|
||
to «forcing completion») pluss blanklinje + `arbeidskopi:`-linja, som er bevisst
|
||
ikke-deterministisk (`simulation.py:531-534`) og IKKE skal dempes. Dempingen rører ikke stdout
|
||
(kriterium 6). Faller den: NEI-fallback = pin de fire linjene som fasit, med
|
||
`arbeidskopi:`-linja normalisert på prefiks.
|
||
|
||
**Økt-regnskap for uka i dette repoet (revidert 08-07):** S1.a (1) + S1.b (1–2) +
|
||
S1.c (0,5–0,75) + P3 (0,25) + P4/generalprøve — utvidet med forankret prøvekjøring,
|
||
10 %-prøven, `[project.scripts]` og dempingen (0,75–1,25) + P4.5 runbook (0,25)
|
||
≈ **3,75–5,5 økter** på seks dager (fre 7.–ons 12., ny full ukeskvote). Totalen går opp med
|
||
slakk i normal drift (1–2 økter/dag). **Første kutt hvis den ikke gjør det: S1.b →
|
||
NEI-varianten i ærlighets-teksten** (nedgraderingskolonnen — ferdigskrevet, frigjør 1–2 økter,
|
||
og Spor B er ikke en frys-betingelse). Deretter gjelder nedgraderingskolonnen rad for rad —
|
||
v1 forblir ærlig komplett på hvert nivå, den blir aldri stille ufullstendig.
|
||
|
||
## 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 demo-bundle under
|
||
`shared/examples/` har den fila** (målt, §4 rad 3). *(Korrigert 08-07, I1: den opprinnelige
|
||
formuleringen «ingen bundle i repoet» var målt for smalt — repoet shipper en fungerende,
|
||
format-definerende baseline-bundle i `src/portfolio_optimiser/data/bundles/bygg-energi-baseline-mikro/`,
|
||
i bruk av S4.0-testens målte mutasjoner, og kjørestien leser fila: `run.py:516`.)* I dagens demo
|
||
regner validatoren derfor kun på tall forslaget selv oppgir. Bestillingen til commons krever fila
|
||
(bra) — men slik planen sto, ville sjekken møtt ekte innhold FØRSTE gang på leveransedagen; avviker
|
||
manus-tallene mer enn 5 % fra de leverte kostnadstallene, avvises BÅDE det overdrevne og det
|
||
korrigerte forslaget på scenen. **Derfor er forankringen flyttet til helgen (P4 pkt. 0):** reserven
|
||
kan ikke få fila I `shared/` (pull-only subtree + kriterium 8 krever goldenene byte-uendret), men
|
||
det er en *plasserings*-begrensning, ikke en umulighet — demoen kjører uansett på en KOPI av
|
||
bundelen (`simulation.py:316`), så en repo-lokal kopier-og-utvid-variant gir en forankret kjøring
|
||
uten å røre commons. NO-GO-setningen i P4 pkt. 4 er omskrevet tilsvarende.
|
||
|
||
**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-sjekken (nå RE-måling, med abortsti) ☐
|
||
**[0,25 økt, del av tirsdagsøkta · Opus 5/medium]**
|
||
Som demo-uke-planen — men etter planrevisjonen 08-07 (I1) er dette en **re-måling mot nytt
|
||
innhold, ikke førstegangskjøring**: S4.0-forankringen og 10 %-avviks-prøven kjøres første gang i
|
||
HELGEN mot den lokalt forankrede reserven (P4 pkt. 0). Tirsdag: (a) kjør demo-kriterium 1+2
|
||
(åtte steg-linjer; REJECTED- og VALIDATED-linje for samme kandidat) mot den NYE bundelen;
|
||
(b) skriv manus-registerets tall FRA den leverte `cost-baseline.json`, aldri ved siden av den;
|
||
(c) gjenta 10 %-prøven mot levert innhold (mekanismen er alt bevist — dette måler INNHOLDET):
|
||
bevisst avvik → FORKASTET; korrigert → FORESLÅTT.
|
||
**Abortsti (I4, ufravikelig rekkefølge):** (1) FØR pull: noter `git rev-parse HEAD` i STATE;
|
||
(2) pull → kriterium 8 (`git diff --stat` på goldens → tomt) + full suite; (3) rødt utfall →
|
||
`git reset --hard <pre-pull-hash>` (squash-pullen er lokale commits uten push — resetten fjerner
|
||
dem helt) og NO-GO er UTLØST — **senest kl. 18:00 tirsdag, uten videre diskusjon**: reserven ER
|
||
demoinnholdet (den forankrede varianten fra helgen), ærlighets-setningen per P4 pkt. 4. NO-GO er
|
||
et planlagt utfall, ikke en krise — generalprøve nr. 0 mandag har allerede verifisert det.
|
||
|
||
### P4 — Forankret prøvekjøring + fire kriterier + to setninger (FORSKUTTERES i helgen; onsdag gjenstår kun re-måling mot valgt innhold) ☐
|
||
**[0,75–1,25 økt · Opus 5/low–medium · alt under bygges/måles mot mikro-reserven i helgen — se §5]**
|
||
0. **Forankret prøvekjøring (NY 08-07, I1 — ukas største måletekniske risiko, nå TIDLIGST):**
|
||
lag en repo-lokal kopier-og-utvid-bundle — mikro-reservens innhold + `cost-baseline.json` i
|
||
S4.0-formatet fixturen definerer (`project_id` + `items{code:{quantity,unit_cost}}`), med
|
||
baseline-tall avledet FRA manus-registerets tall (samme disiplin som P3 b, speilvendt). Kjør
|
||
HELE demoløpet mot den: `simulate_learning_loop` tar `bundle_dir` som argument og kopierer den
|
||
(`simulation.py:280/:316`), og `run.py:516` leser fila. Inkluder 10 %-avviks-prøven (flyttet hit
|
||
fra P3): bevisst avvik → FORKASTET i stage 0; korrigert → FORESLÅTT. Ligger utenfor `shared/` →
|
||
kriterium 8 urørt; kriterium 6 er selv-identitet og påvirkes ikke. Ved NO-GO tirsdag kjører
|
||
demoen denne varianten (call-site-valg i `main()` — samme søm GO-utfallet uansett bruker).
|
||
**Faller den:** fallback = uforankret reserve + den gamle NO-GO-setningen — ingenting tapt mot
|
||
planen slik den sto før revisjonen.
|
||
1. **Fresh-clone-kriterium:** klon til scratch → `uv sync` → kjør simuleringen → diff mot
|
||
arbeidskopiens output. Beviser «last ned → kjør»-påstanden. **Kjøres ETTER pkt. 5**
|
||
(`[project.scripts]`), så målingen dekker den endelige install-flaten (I3).
|
||
2. **Stderr: FØRST beslutningen, SÅ pinningen (I2).** Dempingen er besluttet JA (§0 Spor 2) og
|
||
utføres FØR pinning. Målt 08-07: stderr er seks linjer — fire støylinjer + blanklinje + den
|
||
bevisst ikke-deterministiske `arbeidskopi:`-linja (`simulation.py:531-534`), som aldri kan stå
|
||
ubehandlet i en byte-fasit. Pin deretter: «stderr = kun `arbeidskopi:`-linja (+ blank),
|
||
normalisert på prefiks»; nye advarsler etter subtree-pull fanges fortsatt.
|
||
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.
|
||
**Transkriptet er også demoens abortsti** (gjort eksplisitt i P4.5).
|
||
4. **To ferdigskrevne setninger** inn i ærlighets-teksten (mønsteret fra innholdsgate-planen §5).
|
||
NO-GO-varianten er OMSKREVET etter I1: «kostnads-forankringen er aktiv også i reserve-eksemplet,
|
||
men kostnadstallene der er syntetiske — avledet av manuset, ikke levert av et fagmiljø»
|
||
(fallback hvis pkt. 0 faller: den gamle setningen «kostnads-forankringen er ikke aktiv i
|
||
reserve-eksemplet»). Frø-setningen står: «én av de to tidligere dommene i Kjøring B fulgte med
|
||
eksempelet — den andre er den demoen lærte».
|
||
5. **`[project.scripts]` (flyttet HIT fra S1.c, I3):** entry point inn i `pyproject.toml`
|
||
(`grep -n scripts pyproject.toml` → 0 treff i dag) + `uv sync` → deretter pkt. 1. En
|
||
install-flate som endres på frysedagen ville krevd ny fresh-clone-måling ETTER frys —
|
||
selvmotsigende.
|
||
|
||
### P4.5 — Demo-runbook: ÉN side operatøren følger på scenen (NY 08-07, I5) ☐
|
||
**[0,25 økt · Opus 5/low · produseres VED frysen onsdag, ETTER generalprøve ×2 — så den matcher frosset output]**
|
||
Det som skal SIES torsdag ligger i dag på fire steder: demo-uke-planen §1 (tre ærlighets-punkter),
|
||
innholdsgate-planen §5 (opplesnings-avsnittet), P4 pkt. 4 (to setninger) og §0 Spor 2 (muntlig
|
||
mandat-setning). Runbooken samler dem på én side: kjøresekvens (kommandoen + forventede
|
||
steg-linjer), hva som sies hvor, og **abortstien**: feiler live-kjøringen, vis golden-transkriptet
|
||
fra P4 pkt. 3 og si høyt at det er gårsdagens frosne kjøring. Sti:
|
||
`docs/plan/2026-08-12-demo-runbook.md` (datert sti — utenfor `_LIVE_DOCS`-gaten). Runbooken er
|
||
lesestoff, ikke kjøresti — den kan skrives etter frysen uten å røre den.
|
||
|
||
## 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]** 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). *(`[project.scripts]` er flyttet inn i v1-release-kuttet, §0 S1.c.)*
|
||
|
||
### 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 — RE-MÅLT 2026-08-07 på HEAD `bb3df79`; opprinnelig måling 2026-08-06, se datonoten øverst)
|
||
|
||
| # | Påstand | Kommando → resultat |
|
||
|---|---|---|
|
||
| 1 | Suiten grønn | `uv run pytest -q` → 766 passed / 4 skipped (107 s) — re-målt 08-07 |
|
||
| 2 | Demo deterministisk + 8 steg | to kjøringer 08-07, stdout adskilt fra stderr: `diff` → tom; `grep -cE "^ *Steg [1-8]"` → 8. Stderr målt: **6 linjer** — 2 `ExperimentalWarning` + 2 «forcing completion» + blanklinje + ikke-deterministisk `arbeidskopi:`-linje (bevisst, `simulation.py:531-534`) |
|
||
| 3 | **(KORRIGERT 08-07, I1)** Ingen bundle under `shared/examples/` shipper kostbaseline — men REPOET gjør, og kjørestien leser den | `ls shared/examples/bygg-energi-mikro/` → 8 filer, ingen baseline (re-målt, står — men var målt for SMALT: én katalog). `find . -name 'cost-baseline.json' -not -path './.git/*'` → `src/portfolio_optimiser/data/bundles/bygg-energi-baseline-mikro/cost-baseline.json` (gyldig S4.0-format, merket SYNTHETIC); i bruk: `grep -n BASELINE_BUNDLE tests/test_s40_cost_baseline_loadbearing.py` → `:42/:162/:242`; kjørestien: `run.py:516` `load_optional_cost_baseline`; bundelen er kopiert parameter: `simulation.py:280/:316` |
|
||
| 4 | Steg 7 vises uten fil-innboksen | re-målt 08-07: `run_project` kalles uten `verdict_dir` (`simulation.py:328-338/:356-366`); 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` (re-målt 08-07) |
|
||
| 6 | CLI-porteføljen uten pass-tak | `run.py:1679-1686` (re-lest 08-07): budget-stop-armen «currently UNREACHABLE from here»; TRAP-kommentar: `BudgetRefused` (RuntimeError) utenfor except-tuplen |
|
||
| 7 | Debatten er en fast sekvens | `workflow.py:99-108` (re-lest 08-07): round-robin-selector, terminerings-nett = `max_rounds*2+1` = 7 > 3 dispatcher → fyrer aldri; «forcing completion» ×2 målt i dagens stderr |
|
||
| 8 | MAF-alternativene gir ikke gevinst | re-målt 08-07: installert `_group_chat.py:145-155` har round-robin kun som docstring-eksempel; `inspect.signature(SequentialBuilder.__init__)` → `checkpoint_storage` direkte. *(Handoff = modelldreven ruting: 08-06-introspeksjonen, ikke re-målt)* |
|
||
| 9 | `[project.scripts]` mangler — bygges i HELGEN (P4 pkt. 5, I3) | `grep -n scripts pyproject.toml` → 0 treff (re-målt 08-07) |
|
||
| 10 | Spor B er frys-sikker | `grep -nE '^(from\|import).*ingest' src/portfolio_optimiser/{run,simulation}.py` → 0 treff (re-målt 08-07, skarpere grep — treffene som finnes er kommentarer/hjelpetekst, ingen import) |
|
||
| 11 | (NY 08-07) Begge baseline-loaderne finnes | `grep -n 'def load_optional_cost_baseline\|def load_cost_baseline' src/portfolio_optimiser/okf.py` → `:305` + `:323` |
|
||
| 12 | (NY 08-07, I6) Daterings-avvik | `git show -s --format='%h %ad' --date=short c96ef90 0eb0f3d 295e966 688ee24 e93e921 d6f3359` → ALLE `2026-08-06`; `date` → 2026-08-07 (fredag); 13. aug = torsdag |
|
||
|
||
## 5. Ukens kalender (hvor punktene lander)
|
||
|
||
**Justert fre 7. aug (operatør): arbeid starter I DAG, helg inkludert, ny full ukeskvote —
|
||
full sti er hovedsporet, nedgraderingene i §0 er forsikring.** Prinsippet bak fordelingen:
|
||
alt som IKKE krever det nye commons-innholdet gjøres FØR tirsdag, så tirsdag/onsdag er tynne
|
||
og risikoen ligger tidlig med slakk bak seg.
|
||
|
||
| Dag | Innhold |
|
||
|---|---|
|
||
| fre 7. | **Planrevisjonen (I1–I6)** ✔ + **P1/S1.a**: Steg 7-innboksen inn i demoløpet (økt 1) |
|
||
| lør 8.–søn 9. | **P2/S1.b**: innholdsgaten (økt 2, evt. 3) + **P4-forskuddet UTVIDET** (0,75–1,25 økt), i denne rekkefølgen: forankret prøvekjøring + 10 %-prøven (pkt. 0, I1) → `[project.scripts]` (pkt. 5, I3) → stderr-demping FØR pinning (pkt. 2, I2) → fresh-clone (pkt. 1) → golden-transkript-mekanikk (pkt. 3) → de to ærlighets-setningene (pkt. 4) — alt bygges og måles mot den FORANKREDE mikro-reserven NÅ |
|
||
| man 10. | **Generalprøve nr. 0 mot forankret reserve**: alle kriterier ende-til-ende → NO-GO-utfallet er ferdig verifisert FØR tirsdag; rest-slakk er buffer |
|
||
| tir 11. | **P3**: noter pre-pull-hash → subtree pull → GO/NO-GO (**abortsti I4:** rød suite/goldens → `git reset --hard <pre-pull-hash>` + NO-GO senest **kl. 18:00**) + RE-måling: kriterium 1+2 mot NY bundle; manus-tall skrives FRA levert `cost-baseline.json`; 10 %-prøven gjentatt; goldens byte-uendret |
|
||
| ons 12. | **P4** re-målt mot valgt innhold → generalprøve ×2 → **FRYS** → **P4.5: demo-runbook (I5)** → **S1.c: versjonssynk + CHANGELOG + tag `v1.0.0`** (uten `[project.scripts]` — den ligger i helgen, I3) |
|
||
| tor 13. | **DEMO = v1 vises** (runbooken i hånda) |
|
||
| fre 14.–lør 15. | **P5**: README (O4) |
|
||
| deretter | **P6 → P7 → P8 → P9**, ett punkt per økt; STATE.md peker på øverste åpne |
|
||
|
||
## 6. Planrevisjonen 2026-08-07 — seks innsigelser, avgjørelser med belegg
|
||
|
||
Kjørt på Fable 5/xhigh uten advisor; hvert premiss fra innsigelses-prompten er derfor re-målt i
|
||
økta med egne kommandoer (§4 + kolonnen her) — ingen tall er gjenbrukt.
|
||
|
||
| # | Innsigelse | Avgjørelse | Nøkkelmåling (kjørt 08-07) |
|
||
|---|---|---|---|
|
||
| I1 | Funn 1 målt for smalt; «reserven kan aldri få fila» feil som formulert | **TAS INN** — forankret prøvekjøring + 10 %-prøve flyttet til helgen (P4 pkt. 0); §1/§4 korrigert | `find . -name 'cost-baseline.json'` → fixturen finnes (gyldig S4.0-format); `run.py:516` wirer loaderen; `simulation.py:280/:316` — bundelen er kopiert parameter |
|
||
| I2 | Demping (ons) etter pinning (helg) ugyldiggjør fasiten | **TAS INN, SKJERPET** — beslutning JA tatt nå; demping i helgen FØR pinning; målt at stderr uansett trenger definert form | to sim-kjøringer: stderr = **6** linjer, ikke 4 — `arbeidskopi:`-linja er ikke-deterministisk (`simulation.py:531-534`) |
|
||
| I3 | `[project.scripts]` på frysedagen endrer install-flaten ETTER fresh-clone-målingen | **TAS INN** — flyttet til P4 pkt. 5 (helg), FØR fresh-clone; S1.c = synk + CHANGELOG + tag | `grep -n scripts pyproject.toml` → 0 treff |
|
||
| I4 | Tirsdagens pull mangler avbruddssti | **TAS INN** — pre-pull-hash + reset-regel + NO-GO senest kl. 18:00 skrevet inn i P3 og §5 | kriterium 8 finnes (demo-uke-plan §5 pkt. 8, lest 08-07), men ingen revert-regel sto i noe dokument |
|
||
| I5 | Ingen demo-runbook allokert | **TAS INN** — ny post P4.5 (0,25 økt, VED frysen); golden-transkriptet gjort eksplisitt til abortsti | de fire spredte kildene bekreftet (demo-uke-plan §1, innholdsgate §5, P4 pkt. 4, §0 Spor 2 — lest 08-07) |
|
||
| I6 | Datoene ligger 2–3 dager fram i tid | **TAS INN** — §4 re-datert til faktisk måling; STATE-loggen korrigert; filnavnet står med datonote | `git show -s --format='%h %ad'` → alle refererte commits `2026-08-06`; `date` → 2026-08-07 (fredag) |
|
||
|
||
**Avvist: ingen.** I1s mot-spørsmål ble målt, ikke antatt: ingen kollisjon med
|
||
`_default_bundle_dir()`/`PORTFOLIO_SHARED_ROOT` (bundelen er et funksjonsargument, og demoen
|
||
kjører på en kopi — `simulation.py:280/:316/:492`), ingen kollisjon med kriterium 6
|
||
(selv-identitet: en forankret kjøring diffes mot seg selv) eller kriterium 8 (den lokale bundelen
|
||
ligger utenfor `shared/`), og syntetisk forankring beviser MEKANISMEN live — tall-ærligheten
|
||
dekkes allerede av nivå 2-regelen (demo-uke-planen §1 pkt. 3) og fixture-notatet «SYNTHETIC».
|
||
Kostnaden (~0,25–0,5 økt ekstra i helgen) er dekket av ny full ukeskvote og kjøpes tilbake ved at
|
||
tirsdag/onsdag blir tynnere.
|