docs(plan): tirsdagen lukket i PLANEN — den instruerte om arbeid som var gjort

Planen er dokumentet operatøren FØLGER onsdag under tidspress, og etter
persona-pullen instruerte tir-11-raden fortsatt om en betinget subtree pull med
abortsti og 18:00-frist — arbeid som er utført og pushet. Samme drift-klasse økt
4 felte, så samme mottiltak: én grep-pass FØR redigering
(`persona|kontorbygg|tilsvarende anlegg|I4|18:00` over `docs/plan/` +
CHANGELOG), amendering med attribusjon (§6-mønsteret), aldri omskriving.

Grep-passen fant FIRE steder, ikke ett — som er hele grunnen til å kjøre den:
- tir-11-raden: betinget pull-instruks → **TOM, gå rett på onsdag**, med
  utfallet og de fire målingene som lukket den
- frys-blokkas X-note: «lander tirsdagens persona-pull, flytter X seg» →
  pullen ER landet (`d0e8bb0`); X leses fortsatt av `git rev-parse HEAD` etter
  grønn prøve, aldri skrevet ned her
- P4 pkt. 1s fersk-klon-måling: sto på `c9787cf`, altså to commits bak etter
  pullen. HOLDBARHETEN sagt eksplisitt i stedet for underforstått — delta er
  prosa i `shared/` + regenerert fasit, `pyproject.toml`/`uv.lock` MÅLT urørt,
  så målingen står; onsdagens generalprøve ×2 er bekreftelsen
- P3s I4-abortsti (i `<details>`): stemplet HISTORISK, med den ene målingen
  verdt å bære videre — den harde reset-formen blokkeres av hooken, `--keep`
  slipper igjennom

CHANGELOG: én Changed-linje for persona-formuleringen, slik at onsdagens
`[Unreleased]` → `[1.0.0]`-stempel ikke beskriver en artefakt-tekst som har
endret seg siden. Beslutningen tas her, ikke på en enveis-dag.

Tabell-integritet verifisert (pipe-telling; ons-12-radens seks er tre escaped
`\|` i grep-kommandoen, urørt). `test_doc_constant_sync_loadbearing` grønn.
Kalenderen: man 10. er nå SEKS økter.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017og6HMcP1WQcABRDogUMfx
This commit is contained in:
Kjell Tore Guttormsen 2026-08-10 20:56:19 +02:00
commit c4b0e08cc5
2 changed files with 27 additions and 4 deletions

View file

@ -66,6 +66,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- The walkthrough DERIVES its provenance sentence for prior verdicts instead of stating it. The line
above already computes the count, so a hand-written split would be a second copy of the same fact,
free to drift the moment a knowledge base ships another seeded verdict.
- The shared expert-reviewer persona's canonical example verdict is worded domain-neutrally
("i tilsvarende anlegg" rather than "i kontorbygg"), pulled from the upstream commons repository.
The walkthrough prints that `rationale` verbatim, so the wording was a building-type justification
read out over a road-lighting project; it could not be fixed downstream, because overriding the
text locally would re-stub the very artifact the shared skill exists to make load-bearing. The
`marker` value is byte-unchanged, and the pinned transcript fixture was regenerated against a
prediction written before the pull — the printed line is clipped at a fixed width, so the swap
moves the tail as well, and a regeneration without a written prediction could not tell that
expected shift apart from drift.
### Security
- Door A — the ingest path that materialises externally sourced documents into a knowledge base — can

View file

@ -229,7 +229,11 @@ HELGEN mot den lokalt forankrede reserven (P4 pkt. 0). Tirsdag: (a) kjør demo-k
(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;
**Abortsti (I4, ufravikelig rekkefølge) — ⚠️ HISTORISK per man 10. økt 6: BEGGE pullene er landet
(innholdet søn 09., personaen man 10.), ingen NO-GO utløst, og 18:00-fristen under er utløpt i
betydningen «ikke lenger noe å rekke». Regelen står som mønster, ikke som en levende instruks.
Én måling er verdt å ta med videre: `git reset --hard` BLOKKERES av hooken — `--keep` slipper:**
(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
@ -351,6 +355,13 @@ re-lock i et ferskt miljø — den faren S1.c gatet, nå bekreftet utenfor arbei
`uv run pytest -q`**810 passed / 4 skipped** (126,72 s) · `ruff` rent + `mypy src` 31 filer ·
`PYTHONIOENCODING=utf-8 uv run portfolio-optimiser-demo` → exit 0, og `diff` mot
`tests/golden/demo-transcript.stdout` **tomt** · 61 stdout- / 4 stderr-linjer · K1 distinkt = **8**.
*(Amendert man 10. økt 6 — HOLDBARHETEN sagt eksplisitt, siden dette er samme premiss-klasse som
re-målingen selv felte: persona-pullen (`71b7b66`+`d0e8bb0`) landet ETTER `c9787cf`, så tallene over
står på et tre som er to commits gammelt. **Målingen står likevel, og grunnen er målt:** deltaet er
prosa i `shared/` + en regenerert fasit, med `git diff --stat``pyproject.toml` og `uv.lock`
**tomt** — altså ingen ny dep og ingen endret låsefil, som er nøyaktig de to tingene en fersk
installasjon feller. Onsdagens generalprøve ×2 er bekreftelsen; en tredje fersk klon er den ikke
verdt.)*
**Load-bearing MÅLT mot HELE suiten, fem mutasjoner alle røde + grønn kontroll:** fjern
`[project.scripts]` · typo i target · detach `main()`-kallet · la filteret droppe alt · installer
@ -464,8 +475,8 @@ og risikoen ligger tidlig med slakk bak seg.
|---|---|
| fre 7. | **Planrevisjonen (I1I6)** ✔ + **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,751,25 økt), i denne rekkefølgen: forankret prøvekjøring + 10 %-prøven (pkt. 0, I1) **✔ 08-09** → `[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. | **FEM ØKTER, alle ✔.** (1) **Generalprøve nr. 0** — kjørt mot **LEVERT VEGLYS-FV-SOER, ikke reserven**: P3 falt to døgn før fristen, så prøven målte demoinnholdet selv. Se UTFØRT-blokka under tabellen. (2) **S1.c synk + CHANGELOG** (`a41272d`) — forskuttert fra ons kveld; TAGGEN gjenstår, frys-gatet. (3) **`open/`-beslutningen TATT** — taggen til `origin` ALENE; speilet til P5-vinduet (se S1.c-raden i §0). (4) **Planen gjort sann** (`c9787cf`) — to `open/`-instrukser felt, P2 lukket, kalenderen rettet. (5) **Frysedagens to udefinerte steg lukket****P4 ✔** (fersk klon re-målt på `c9787cf`, elleve commits etter forrige måling) og **FRYS gjort kjørbar** (frys-blokka under). **Ingenting kodemessig gjenstår før onsdag.** |
| tir 11. | **P3 ER GJORT (søn 09., `02ddc67` — GO).** Tirsdagens ENESTE åpne punkt er **commons-svaret på persona-formuleringen** (`rationale` sier «i kontorbygg» på et veglys-prosjekt, og linja printes ordrett i demoens Steg 7); frist **tir kveld**. **Kommer svaret:** subtree pull FØR frysen, med samme abortsti som P3 hadde (**I4:** noter pre-pull-hash → rød suite/goldens → hard reset til pre-pull-hash + avbryt, senest **kl. 18:00**). **Kommer det ikke:** ship som det står — én avkortet linje, ikke en blokker — og **tirsdagen er tom; gå rett på onsdag.** |
| man 10. | **SEKS ØKTER, alle ✔.** (1) **Generalprøve nr. 0** — kjørt mot **LEVERT VEGLYS-FV-SOER, ikke reserven**: P3 falt to døgn før fristen, så prøven målte demoinnholdet selv. Se UTFØRT-blokka under tabellen. (2) **S1.c synk + CHANGELOG** (`a41272d`) — forskuttert fra ons kveld; TAGGEN gjenstår, frys-gatet. (3) **`open/`-beslutningen TATT** — taggen til `origin` ALENE; speilet til P5-vinduet (se S1.c-raden i §0). (4) **Planen gjort sann** (`c9787cf`) — to `open/`-instrukser felt, P2 lukket, kalenderen rettet. (5) **Frysedagens to udefinerte steg lukket****P4 ✔** (fersk klon re-målt på `c9787cf`, elleve commits etter forrige måling) og **FRYS gjort kjørbar** (frys-blokka under). (6) **Persona-pullen landet** (`71b7b66`+`d0e8bb0`) — commons svarte to døgn før fristen, så tirsdagens eneste punkt ble tatt mandag; fasiten re-målt mot en prediksjon skrevet FØR pullen. **Ingenting kodemessig gjenstår før onsdag, og tirsdagen er tom.** |
| tir 11. | **TOM — GÅ RETT PÅ ONSDAG.** *(Amendert man 10. økt 6: tirsdagens ENESTE åpne punkt var commons-svaret på persona-formuleringen — «i kontorbygg» på et veglys-prosjekt, printet ordrett i Steg 7. Svaret kom **to døgn før fristen** og ble tatt samme dag: subtree pull av commons `73136eb` → «i tilsvarende anlegg», `marker` byte-uendret (`71b7b66`), fasiten re-målt (`d0e8bb0`). Abortstien I4 ble aldri utløst — men den ble verifisert KJØRBAR først: `git reset --hard` blokkeres av hooken, **`--keep` slipper**. Rød-settet etter pullen var NØYAKTIG én test, det pinnede transkriptet; goldenene (kriterium 8) uendret; `pyproject.toml`/`uv.lock` urørt. Denne raden instruerte om arbeid som var utført — samme drift-klasse som økt 4 felte.)* |
| ons 12. | **FRYSESEKVENSEN, i denne rekkefølgen. P4 ER LUKKET (man 10., økt 5 — fersk-klon-målingen var det eneste som gjensto, og den er kjørt på `c9787cf`), så sekvensen starter på prøven, ikke på en udefinert re-måling:** **generalprøve ×2** (bruk **distinkt**-tellingen `grep -oE "^ *Steg [1-8]" \| tr -d ' ' \| sort -u \| wc -l`**8**; linje-tellingen gir 9, se avviket under tabellen) → **FRYS****P4.5: demo-runbook (I5)** (gatet til ETTER prøven, så den matcher frosset output) → **S1.c-TAGGEN sist** (CHANGELOG-stempel + `git tag v1.0.0` + push til **`origin` ALENE** — synk + CHANGELOG-innhold er alt gjort man 10.; `[project.scripts]` lå i helgen, I3). **Alle beslutninger er tatt på forhånd — onsdag skal MÅLE og UTFØRE, ikke avgjøre.** **FRYSEN ER TO KOMMANDOER, ikke en holdning — se frys-blokka under tabellen.** |
| tor 13. | **DEMO = v1 vises** (runbooken i hånda) |
| fre 14.lør 15. | **P5**: README (O4) |
@ -481,7 +492,10 @@ CHANGELOG-stempel + tag (commit **Z**), så **taggen lander på Z mens prøven m
er dokumenter er sant i dag, men sto ingen steder som noe onsdagen SJEKKER. To kommandoer:
1. **Noter X** rett etter grønn generalprøve ×2 — `git rev-parse HEAD` — og skriv hashen inn i
runbooken (P4.5). **X er ikke mandagens HEAD:** lander tirsdagens persona-pull, flytter X seg.
runbooken (P4.5). *(Amendert man 10. økt 6: setningen sa «X er ikke mandagens HEAD — lander
tirsdagens persona-pull, flytter X seg». **Pullen ER landet**, `d0e8bb0`. X måles altså fra
`d0e8bb0` og framover — men den skal fortsatt LESES av `git rev-parse HEAD` etter grønn prøve,
aldri skrives av her: en hash notert i en plan er et premiss, ikke en måling.)*
2. **Før taggen, kjør frys-gaten:**
```
git diff --stat <X>..HEAD -- . ':(exclude)docs/' ':(exclude)CHANGELOG.md' # → TOMT