docs: kvalitetsrevisjon av planleggingen (maal, ikke bygg)
Measures the two planning sessions and plan.md against docs/build-brief.md: step traceability (0 of 56 unanchored, 15 derived), blocker closure (5 of 9 closed in step text, 4 partial), review-count discrepancies, dedup false negative reproduced (Jaccard 0.236/0.404 vs 0.7), session token and cost profile, and whether /trekplan --brief docs/build-brief.md is a valid input (it is not: FM_MISSING). Recommendation: revise the listed steps first, then M1 GO. No change to plan.md. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
91b078f694
commit
775e291642
1 changed files with 366 additions and 0 deletions
366
docs/2026-09-04-kvalitetsrevisjon-planlegging.md
Normal file
366
docs/2026-09-04-kvalitetsrevisjon-planlegging.md
Normal file
|
|
@ -0,0 +1,366 @@
|
|||
# Kvalitetsrevisjon av planleggingen (2026-09-04)
|
||||
|
||||
Måling, ikke bygging. Ordre fra PM 2026-09-04: hvorfor rapporterer jobbsok selv
|
||||
lav kvalitet, og holder `plan.md` mot `docs/build-brief.md`. Ingen fil i planen
|
||||
er endret. M1 er ikke startet.
|
||||
|
||||
Kilder (alle lokale): `docs/build-brief.md` (417 linjer), Voyage-prosjektet
|
||||
`.claude/projects/2026-09-03-jobbsok-plugin-build/` (brief.md 316 linjer,
|
||||
research/01-03, exploration/, plan.md 2223 linjer / 56 steg), `STATE.md`, og de to
|
||||
planleggingsøktenes transkripter med underagent-transkripter (økt 1 Fable 5.1,
|
||||
økt 2 Opus 5). Kommandodefinisjonene er lest i voyage 5.10.1 (`commands/trekbrief.md`,
|
||||
`commands/trekplan.md`, `lib/review/plan-review-dedup.mjs`, `lib/validators/`).
|
||||
|
||||
## Anbefaling
|
||||
|
||||
**(b) Revider planen først** — steg 1 (probens forutsetninger: navngi test-pluginen og
|
||||
at operatøren må sitte i Cowork), 13 (`.gitignore`-linjen for `BUILD_STAMP` må testes),
|
||||
20 (motsier `--oppdater`), 21 (`--oppdater`-kallet er utestet), 23 (`dagens`-ekkoet
|
||||
mangler), 26 (benign-korpus og tak-brøk er udefinerte), 31 (proben har ingen Verify og
|
||||
skriver utenfor sesjon 8s gjerde), alle seks `Verifiser i Cowork`-steg (`--check`
|
||||
kjøres i ett av seks), planhodet (Pass 2-markøren mangler, graden B er egenvurdert),
|
||||
sesjonsgjerdene 4 og 8, og `brief.md` linje 193–194 og 245 (`zip -r`, «version-echo
|
||||
skill», `plugin.json`-versjon) — deretter GO på M1 sesjon 1; ikke (c), fordi
|
||||
`docs/build-brief.md` ikke er gyldig `/trekplan`-input og research 02/03 endret to
|
||||
designbeslutninger som en omplanlegging ville mistet.
|
||||
|
||||
Bakgrunnen for operatørens observasjon: den lave kvaliteten som ble rapportert, var
|
||||
reell for planen *før* revisjon (plan-critic: REPLAN, 65.8/100) og rapportene var
|
||||
ærlige om det. Planen *etter* revisjon har ingen anmelder-verdict; graden B/84 i
|
||||
planhodet er øktens egen. Fire av ni blockers er lukket bare delvis i stegteksten.
|
||||
|
||||
## Sammendrag i fire tall
|
||||
|
||||
| # | Måling | Resultat | Nevner |
|
||||
|---|--------|----------|--------|
|
||||
| 1 | Steg uten anker i `docs/build-brief.md` | 0 (41 direkte, 15 avledet via beslutning/research/risiko) | 56 steg |
|
||||
| 2 | Blockers faktisk lukket i stegtekst | 5 lukket, 4 delvis, 0 bare notert | 9 blocker-rader i `## Revisions` |
|
||||
| 3 | Kontekst ved økt 1s siste melding | 491 688 tokens | vindu ikke registrert i transkriptet |
|
||||
| 4 | Probens fire spørsmål avgjørbare fra Claude Code | 0 | 4 |
|
||||
|
||||
## 1. Sporbarhet: 56 steg mot briefens paragrafer
|
||||
|
||||
Klassifisering per stegs primære leveranse (`Files:`-linjen), strengt:
|
||||
DIREKTE = paragrafens egen tekst ber om leveransen; AVLEDET = ingen paragraf ber om
|
||||
leveransen selv, den tjener et briefkrav via en operatørbeslutning (1–7 i brief.md),
|
||||
en research-fil eller en risiko-ID; INGEN = ingen av delene.
|
||||
|
||||
| Klasse | Steg | Antall |
|
||||
|--------|------|--------|
|
||||
| DIREKTE | 2–9, 11, 14, 15, 17–23, 26–29, 31, 34–36, 38–40, 43–46, 48–55 | 41 / 56 |
|
||||
| AVLEDET | 1, 10, 12, 13, 16, 24, 25, 30, 32, 33, 37, 41, 42, 47, 56 | 15 / 56 |
|
||||
| INGEN | — | 0 / 56 |
|
||||
|
||||
De 15 avledede fordeler seg på fire kilder:
|
||||
|
||||
| Kilde | Steg | Hva briefen sier |
|
||||
|-------|------|------------------|
|
||||
| Cowork-akseptanse per milepæl (brief.md Preferences) | 1, 16, 25, 37, 42, 47, 56 | §3 navngir Cowork som operatørflate; ingen paragraf ber om verifisering per milepæl |
|
||||
| Beslutning 7 (host-side MCP-server) + research 03 | 12, 24 | §8 deklarerer nøyaktig to servere; den tredje er beslutningen |
|
||||
| Risiko-ID alene | 10 (H5, scoring-aritmetikk i script), 13 (H11, byggestempel), 30 (C4, norsk leksikon-gap), 33 (M15r/H15, tools/list-golden) | ingen paragraf nevner disse |
|
||||
| Beslutning 6 / research 02 | 32 (hook: §8 ber om «read tools only», research 02 målte at ingen slik opsjon finnes) | §2.1 er kravet hooken tjener |
|
||||
| Beslutning 2 | 41 (asserter at mail-serveren er fraværende) | §8.2 krever en mail-server; fraværstesten finnes bare fordi den er utsatt |
|
||||
|
||||
`Source:`-linjen i stegene siterer `docs/build-brief.md` i 29 av 56 steg; 27 siterer
|
||||
bare research, risiko, beslutning eller test-strategist. Steg 26–28 bygger §9s
|
||||
sikkerhetsgrense, men `Source:` nevner bare research 01 og risiko-IDer; §9 står i
|
||||
`Changes:`-prosaen. Operatørkjørte steg uten automatisk test: 7 av 56 (steg 1 og de
|
||||
seks Cowork-stegene).
|
||||
|
||||
Full tabell med sitat per steg ligger i revisjonens arbeidsfil (ikke sporet);
|
||||
tabellen over er summen av den.
|
||||
|
||||
### Scripts-avviket
|
||||
|
||||
Briefens §4 navngir tre scripts (`guard_ingest.py`, `sak_status.py`, `dashboard.py`).
|
||||
Briefens §6 er den eneste setningen som begrunner et script med reproduserbarhet,
|
||||
og den gjelder `sak_status.py` alene. Planen skriver tolv til.
|
||||
|
||||
Målt: `grep -o 'scripts/[A-Za-z0-9_./-]*' plan.md | sort -u` → 23 filer under
|
||||
`scripts/`. 3 er i §4. 20 er «ikke i brief» som fil: 12 kapabilitets-scripts, 4 filer
|
||||
i `jobbsok_lib/`, 4 shell-hjelpere. Planens egen avviksnote teller elleve
|
||||
kapabilitets-scripts; den tolvte, `kandidat_schema.py` (steg 8), står ikke i listen.
|
||||
|
||||
| Script | Steg | I brief? | Briefparagraf det tjener | Nærmeste begrunnelse |
|
||||
|--------|------|----------|--------------------------|----------------------|
|
||||
| `kandidat_schema.py` | 8 | ikke i brief | §5.1 (valider, ikke regenerer) | risiko H7 (ingen YAML-avhengighet) |
|
||||
| `vurdering.py` | 10 | ikke i brief | §7 `kandidatvurdering` | risiko H5 (`score_da` må ikke være modell-output), beslutning 3 |
|
||||
| `jobbsok_tools.py` | 12, 24 | ikke i brief | — (§8 sier to servere) | beslutning 7, research 03 |
|
||||
| `jobbsok_tools_launch.sh` | 12 | ikke i brief | — | beslutning 7, risiko H2 |
|
||||
| `build_stamp.sh` | 13 | ikke i brief | — | risiko H11 |
|
||||
| `package_plugin.sh` | 13 | ikke i brief | — | Cowork-akseptanse, blocker 9 |
|
||||
| `bootstrap.sh` | 2 | ikke i brief | §9 (pin, ikke vendor) | risiko H2 |
|
||||
| `beslutninger.py` | 22 | ikke i brief | §5.4 | risiko H4 |
|
||||
| `dagens.py` | 23, 41 | ikke i brief | §11 M2 («dagens as text output») | risiko H9 |
|
||||
| `korrespondanse.py` | 38, 39 | ikke i brief | §7 `korrespondanse`, §8.2 | beslutning 2 |
|
||||
| `soknad.py` | 43 | ikke i brief | §7 `soknad` («Versioned, never sent») | risiko L4 |
|
||||
| `referanser.py` | 45 | ikke i brief | §5.6 | risiko M13r |
|
||||
| `cv_varianter.py` | 46 | ikke i brief | §5.5 | risiko M11r |
|
||||
| `utfall.py` | 48 | ikke i brief | §5.7 | risiko H4 |
|
||||
| `laering_signal.py` | 49 | ikke i brief | §7.2 | risiko H6 |
|
||||
| `datahygiene.py` | 54 | ikke i brief | §7 `datahygiene`, §14.4 | beslutning 4, risiko M12r |
|
||||
| `jobbsok_lib/{__init__,paths,frontmatter,jsonl}.py` | 3, 4, 5 | ikke i brief | §5, §5.1, §2.6 | risiko C6, H7, H4, H8 |
|
||||
|
||||
Hvert script tjener en paragraf; ingen paragraf ber om scriptet. Avviket er
|
||||
dokumentert i planen og venter på operatørens ja (Revisions rad 7). Det er ett
|
||||
spørsmål, ikke tolv: «skal deterministisk logikk ligge i scripts også der briefen
|
||||
ikke sier det». Alternativet nevnt i `STATE.md` (slå loggskriverne sammen til én
|
||||
modul) reduserer antallet filer, ikke antallet steder logikk må testes.
|
||||
|
||||
## 2. Review-funnene i fase 9
|
||||
|
||||
### Tallene stemmer ikke overens, og hvert tall har en egen tellemåte
|
||||
|
||||
| Kilde | Blockers | Majors | Minors | Sum | Tellemåte |
|
||||
|-------|----------|--------|--------|-----|-----------|
|
||||
| plan-critic, egen oppsummering (transkript) | 7 | 14 | 15 | 36 | agentens prosa: «Blockers: 7 / Major: 14 / Minor: 15», score 65.8/100, grad C, **verdict REPLAN** |
|
||||
| plan-critic, unike JSON-funn | 7 | 13 | 15 | 35 | unike `(line, rule_key)` i agentens JSON-blokker, som kom i fire avkuttede deler |
|
||||
| scope-guardian, unike JSON-funn | 0 | 6 | 5 | 11 | samme metode; verdict MIXED, «no blockers» |
|
||||
| coord-melding fra økt 2 til PM | 7 | 14 | 20 | 41 (+12 guardian) | tallene økt 2 rapporterte videre; 20 minors finnes ikke i noen kilde |
|
||||
| `STATE.md` | 7 | 12 | 14 | 33 | «33 funn innarbeidet» |
|
||||
| `plan.md ## Revisions` | 9 | 19 | 5 | 33 | severity-kolonnen, talt med `awk` over 33 rader; rad 33 er en klynge på ti småfeil |
|
||||
|
||||
Kommando for den siste raden:
|
||||
|
||||
```bash
|
||||
sed -n 2169,2223p plan.md | grep -E '^\| [0-9]+ \|' | awk -F'|' '{print $4}' | sort | uniq -c
|
||||
```
|
||||
|
||||
Ordrens premiss «7 blockers / 14 majors / 20 minors» er altså plan-critics egne
|
||||
tall for blockers og majors, med et minor-tall som ikke gjenfinnes. Revisjonstabellen
|
||||
graderte to funn opp til blocker (rad 1, review-køen var skrivebeskyttet, som
|
||||
guardian ga major; rad 16, hooks.json-scope, som er den andre halvdelen av critics
|
||||
blocker på linje 1115).
|
||||
|
||||
### Er blockerne lukket i planteksten?
|
||||
|
||||
Regel: LUKKET = hvert element i Resolution-cellen står i stegteksten *og* dekkes av
|
||||
en navngitt test eller stegets Verify-kommando; DELVIS = et element står bare i
|
||||
tabellen, eller i `Changes:` uten test; BARE NOTERT = bare i tabellen.
|
||||
|
||||
| Rad | Blocker | Verdict | Belegg (plan.md-linje) | Det som mangler |
|
||||
|-----|---------|---------|------------------------|-----------------|
|
||||
| 1 | Review-køen var skrivebeskyttet | LUKKET | 1006 (leser `--review list/show/godkjenn/avvis`), 1012 (test), 1196/1202 (annonse-uttrekk møter køen) | — |
|
||||
| 8 | `BUILD_STAMP` mot flyttende HEAD | DELVIS | 515 (byggeartefakt), 519/525 (test på ferskt stempel), 527 | «gitignored» står i 515, men `.gitignore` er verken i `expected_paths` (533–536), `must_contain` (544–546) eller testen (525) |
|
||||
| 9 | `zip -r` lekker `.git`/venv/STATE/`.claude` | LUKKET | 514/517 (include-liste), 519/525 (arkivets innholdsfortegnelse testes), 607, 2005 | — |
|
||||
| 10 | PreToolUse-hook feilet åpent | LUKKET | 1132 (begge navneformer, normalisering, scoped matcher), 1138 (test viser at bar-navn-sammenligning feiler åpent), 1157–1160 | — |
|
||||
| 11 | `karantene/`, `.review/`, `kandidater/` uten scaffold og sletting | LUKKET | 186 (scaffold), 192, 1821 (steg 54 feier alle tre), 1827 (skanner hele workspace) | — |
|
||||
| 13 | Disposisjonsautoritet udefinert | LUKKET | 939 («`decide` is authoritative»), 946 (test: wrapperen beregner ingen disposisjon), 948 | — |
|
||||
| 14 | Falsk-positiv-raten aldri nevnt | DELVIS | 940 (lenker pakkes ut, review bemannet), 946 (`active:raw-html` fortsatt fanget) | tak-testen i 946/948 måler «a stated fraction» over «the benign corpus»; brøken er aldri oppgitt, og intet steg lager et benign-korpus for guarden (eneste benigne fixture er én fil, `adv-07-benign.json`, laget i steg 29, *etter* steg 26) |
|
||||
| 15 | `sak.md`-frontmatter aldri skrevet tilbake | DELVIS | 653 (`--oppdater` eier fire nøkler), 659 (test: `--check` feiler uten), 778 (skillen kjører den) | «every Cowork step now runs `--check`» er usant: `grep -n -e '--check' plan.md` gir 7 linjer, den eneste i et Cowork-steg er 912 (steg 25); 1 av 6. Skillens `--oppdater`-kall (778) har ingen test (784) og ingen `must_contain` (803–805). Steg 20 (747/753) kaller scriptet «a reader … writes nothing» uten forbehold |
|
||||
| 16 | hooks.json-scope uspesifisert; Cowork-hook umålt | DELVIS | 1132/1138 (scope), 1986–1987 (antakelse 7 og 8) | proben i steg 31 (1103) har ingen Verify (1108 tester bare `.mcp.json`), `docs/cowork-probe.md` er ikke i `expected_paths` (1114–1116) og ikke i sesjon 8s gjerde (2086) |
|
||||
|
||||
Fem av ni lukket, fire delvis, ingen bare notert. Ingen av de fire delvise gjelder M1
|
||||
sesjon 1 (steg 1–3).
|
||||
|
||||
Foreldet tekst som fortsatt motsier en lukket blocker, funnet med grep:
|
||||
|
||||
| Sted | Tekst | Motsier |
|
||||
|------|-------|---------|
|
||||
| `brief.md:193` | «package `zip -r jobbsok.plugin .`» | blocker 9 |
|
||||
| `brief.md:194` | «run the version-echo skill» | funn 2 (ekkoet bor i `kandidatprofil`, ingen femtende skill) |
|
||||
| `brief.md:245` | «the version-echo skill prints the `plugin.json` version» | blocker 8 (steg 13, linje 515: «that stamp, not `plugin.json`'s version») |
|
||||
| `plan.md:103` | Research Sources: «installs are UI-only (`zip -r jobbsok.plugin .` …)» | blocker 9 |
|
||||
| `plan.md:384` vs steg 23 (842–872) | «From M2 the same echo is also available from `dagens`»; steg 23 nevner verken ekko eller stempel (0 treff) | funn 2s egen løsning |
|
||||
| `plan.md:747/753` | steg 20: «The script writes nothing: it is a reader» | blocker 15 (`--oppdater`) |
|
||||
| `plan.md:2054` | sesjon 4s gjerde mangler `package_plugin.sh`, `tests/test_plugin_manifest.py` og `.gitignore` (steg 13s filer) | blocker 8 og 9 |
|
||||
| `plan.md:2086` | sesjon 8s gjerde mangler `docs/cowork-probe.md` (steg 31s probe) | blocker 16 |
|
||||
|
||||
Sjekket og *ikke* funnet: `.review` skrevet uten leser (hver skriving har en leser:
|
||||
1006, 1196, 1821); Cowork-steg som fortsatt pakker repo-roten (ingen; alle seks
|
||||
sier `package_plugin.sh`); `BUILD_STAMP` omtalt som sporet fil (ingen); hook som
|
||||
sammenligner bare navn som design (ingen).
|
||||
|
||||
### Dedup-helperen: 21 inn, 21 ut
|
||||
|
||||
Helperen (`lib/review/plan-review-dedup.mjs`) slår sammen på to måter, lest i kilden:
|
||||
eksakt `file:line:rule_key`, ellers Jaccard ≥ 0.7 på ordmengdene i `text`.
|
||||
|
||||
Inndataene (rekonstruert fra økt 2s transkript) var 9 critic-funn (7 blockers + 2
|
||||
majors) og 12 guardian-funn. Lest par for par er **2 av 21** reelle duplikater:
|
||||
linje 509 (versjons-ekko) og linje 1909 (den andre nettverkstesten). Målt med
|
||||
helperens egen `tokenize` og `jaccardSimilarity`:
|
||||
|
||||
| Par | rule_key critic | rule_key guardian | Jaccard | Terskel |
|
||||
|-----|-----------------|-------------------|---------|---------|
|
||||
| linje 509 | `risk-premortem/h11-stamp-unavailable-when-degraded` | `gap` | 0.236 | 0.7 |
|
||||
| linje 1909 | `coverage-completeness/second-network-test-missing` | `gap` | 0.404 | 0.7 |
|
||||
|
||||
Begge feiler begge kriteriene. Den falske negativen er reell og reproduserbar.
|
||||
|
||||
Over hele mengden unike funn (35 critic + 11 guardian = 46) er det 7 duplikatpar
|
||||
lest for hånd: linje 509, 1909, 1745 (dagens kaller ikke dashboard.py), 1991
|
||||
(Estimated Scope vs manifester), 1992 (script-tellingen), 183/281 (workspace-scaffold)
|
||||
og 1055/1080 (fixture-nummerering). De fem siste nådde aldri helperen fordi
|
||||
critics minors ennå ikke var transkribert da den ble kjørt. Netto unike defekter: 39.
|
||||
|
||||
### Det ingen anmelder har sett
|
||||
|
||||
- Planens hode sier «Plan quality: B (84/100), APPROVE_WITH_NOTES after Phase 9».
|
||||
Det er øktens egen omskåring. Den eneste anmelder-verdicten på planen er
|
||||
plan-critics **REPLAN, 65.8/100** på pre-revisjonsversjonen. Ingen anmelder har
|
||||
vurdert den reviderte planen. Kommandodefinisjonen sier selv at en ny
|
||||
critic-runde «carries the same loop risk it always did»; det er en kjent avveining,
|
||||
men da må planens grad merkes som egenvurdert.
|
||||
- Høy-effort-planer skal ifølge `commands/trekplan.md` bære seksjonen
|
||||
`## Adversarial Pass 2 (v5.1.1 high-effort)` med status «unavailable, skipped»,
|
||||
«Do NOT fail, retry, or silently omit the section». `grep -n 'Pass 2' plan.md`
|
||||
gir 0 treff. Planens hode nevner utelatelsen i prosa, men markøren mangler.
|
||||
|
||||
Valideringen som *er* kjørt, holder ved re-måling 2026-09-04:
|
||||
`plan-validator.mjs --strict` → valid, 56 steg; økt 2s gate-script → PASS=33 FAIL=0.
|
||||
|
||||
## 3. Prosessen
|
||||
|
||||
### Økt 1 (Fable 5.1), målt fra transkriptet
|
||||
|
||||
Kostnad og modellbruk (transkriptets `cost-state`):
|
||||
|
||||
| Modell | Input | Output | Cache-skriving | Cache-lesing | Kostnad |
|
||||
|--------|-------|--------|----------------|--------------|---------|
|
||||
| Fable 5.1 (hovedkontekst) | 6 263 | 120 802 | 467 617 | 18 734 033 | 20.14 USD |
|
||||
| Opus 5 (16 underagenter) | 330 131 | 315 287 | 1 196 493 | 17 514 584 | 25.77 USD |
|
||||
| Haiku 4.5 (64 websøk-kall) | 1 739 996 | 77 530 | 0 | 0 | 2.77 USD |
|
||||
| Sum | | | | | 48.67 USD, 59.6 min veggklokke, 117 min API-tid |
|
||||
|
||||
Ingen `Agent`-spawn i økten valgte Haiku (alle 16 underagent-transkripter viser
|
||||
`claude-opus-5`). Haiku-tokenene bærer de 64 websøk-forespørslene; hva verktøyet
|
||||
bruker modellen til, er ikke målbart fra transkriptet.
|
||||
|
||||
Hovedkontekstens vekst per fase (nye tokens = `cache_creation + input`, én telling
|
||||
per meldings-id):
|
||||
|
||||
| Fase | Meldinger | Nye tokens i kontekst | Output | Kontekst ved fasens slutt | Underagenter |
|
||||
|------|-----------|-----------------------|--------|---------------------------|--------------|
|
||||
| 0 oppsett + repo-init | 9 | 88 629 | 7 237 | 113 711 | 0 |
|
||||
| 1 trekbrief --quick | 19 | 70 230 | 29 862 | 182 907 | 3 brief-reviewer |
|
||||
| 2 trekresearch x3 | 25 | 206 449 | 47 207 | 387 895 | 10 (4 lokale, 6 eksterne) |
|
||||
| 3 trekplan fase 1-5 | 3 | 31 286 | 8 209 | 419 022 | 3 (brief-reviewer, risk-assessor, test-strategist) |
|
||||
| 4 avslutning (retur, STATE, lagring) | 13 | 73 368 | 28 173 | 491 688 | 0 |
|
||||
|
||||
Research-fasen alene la 206 449 tokens i hovedkonteksten, det meste ved at ti
|
||||
agentrapporter ble lest inn og triangulert der. Økt 1 returnerte ordren med
|
||||
begrunnelsen «40 pct context»; PM-ordren sier «60 pct». Ingen av prosentene kan
|
||||
måles: transkriptet registrerer ikke kontekstvinduet. Det absolutte tallet er
|
||||
491 688 tokens ved siste melding.
|
||||
|
||||
Økt 2 (Opus 5) til sammenligning: 38.05 USD, 69 min API-tid, planen på 2 149 linjer
|
||||
skrevet som seks `Bash`-heredocs mellom 19:34 og 19:43 pluss halesegmentene 19:46,
|
||||
deretter fase 9 til 20:18.
|
||||
Ingen `AskUserQuestion` i økt 2 (målt: 0).
|
||||
|
||||
### Intervjuet
|
||||
|
||||
`AskUserQuestion` i økt 1: **5 runder, 12 spørsmål** (4 + 3 + 1 + 2 før briefen ble
|
||||
promotert, 2 etter research: beslutning 6 og 7). `brief.md` oppgir
|
||||
`interview_turns: 9`; tallet stemmer verken med runder eller spørsmål.
|
||||
|
||||
### Er brief.md avskrift av docs/build-brief.md?
|
||||
|
||||
Nei, målt tre måter (normaliserte linjer, små/store bokstaver og mellomrom slått sammen):
|
||||
|
||||
| Mål | Resultat |
|
||||
|-----|----------|
|
||||
| brief.md-linjer identiske med en build-brief-linje | 1 av 270 |
|
||||
| brief.md-linjer ≥ 20 tegn med ≥ 0.8 likhet (difflib) mot en build-brief-linje | 4 av 236 |
|
||||
| 8-gram (ordrekker på åtte) i brief.md som finnes i build-brief | 17 av 3 593 (0.5 %) |
|
||||
| Ord | build-brief 2 301, brief.md 3 769 |
|
||||
|
||||
brief.md er en omskriving 1.6 ganger lengre enn kilden. Det nye i den er §14-svarene
|
||||
(beslutning 1-5), beslutning 6-7 fra research, research-planen med tre tema, 33
|
||||
grep-bare gate-kriterier for planen, og constraints omformulert for scope-guardian.
|
||||
|
||||
### Var `--quick` riktig modus?
|
||||
|
||||
`--quick` var PM-ordrens valg, ikke øktens (ordre 2026-09-03 punkt 3: «Kjoer
|
||||
/trekbrief --quick med docs/build-brief.md som oppgavebeskrivelse»). Lest i
|
||||
`commands/trekbrief.md`: `--quick` gir «compact start; still escalates on weak
|
||||
sections», stiller framing-spørsmålet uansett, og hopper over fase 3.5
|
||||
(effort-dialogen). Målt effekt i økt 1: eskaleringen slo inn, briefen gikk tre
|
||||
brief-reviewer-runder (18:33, 18:39, 18:43) før gaten ble bestått; fase 3.5 ble
|
||||
hoppet over, men `phase_signals` ble likevel skrevet for hånd etter beslutningen om
|
||||
planleggingsmodell i runde 4. Hva standardmodus ville kostet, er en kontrafaktisk og
|
||||
ikke målt; gatene er de samme i begge moduser.
|
||||
|
||||
### Hva ville `/trekplan --brief docs/build-brief.md` gitt?
|
||||
|
||||
Lest i `commands/trekplan.md` og målt mot validatoren:
|
||||
|
||||
```bash
|
||||
node $VOYAGE/lib/validators/brief-validator.mjs --soft --json docs/build-brief.md
|
||||
# {"valid": false, "errors": [{"code": "FM_MISSING", "message": "No frontmatter block found"}]} exit=1
|
||||
```
|
||||
|
||||
- Fase 1 «Read the brief» parser frontmatter og henter `task`, `slug`,
|
||||
`research_topics`, `research_status`; build-brief har ingen frontmatter, så alle
|
||||
fire mangler. Validatoren gir en *error* (ikke warning) i både soft og strict modus,
|
||||
og definisjonen sier «warnings do not block, errors do».
|
||||
- Uten `research_status` finnes ingen research-gate og ingen research. De to
|
||||
funnene som endret designet ville da manglet: Chrome ≥ 136 ignorerer
|
||||
`--remote-debugging-port` på normalprofilen (research 02, operatøren kjører
|
||||
Chrome 152), som gjør briefens §8 uutførbar som skrevet; og Cowork-sandkassen
|
||||
når ikke Forgejo (research 03), som gjør `guard_ingest.py` uinstallerbar der.
|
||||
Planen ville implementert §8 ordrett mot en nettleser som avviser den.
|
||||
- Hard rule «Brief-driven … If a step has no brief basis, it is scope creep» og
|
||||
«No interview» gjør at §14s fem beslutninger ikke kunne vært stilt i planfasen.
|
||||
|
||||
Konklusjon: build-brief er ikke et gyldig input for `/trekplan`; `/trekbrief` er
|
||||
det eneste definerte steget som lager kontrakten validatoren krever.
|
||||
|
||||
## 4. Risiko før M1
|
||||
|
||||
### De to alvorlige blockerne
|
||||
|
||||
| Blocker | Løst i planen? | Arver M1 sesjon 1 (steg 1–3) den? |
|
||||
|---------|----------------|-----------------------------------|
|
||||
| 9, `zip -r` lekker `.git`, venv, `STATE.md`, `.claude/projects/` | Ja i stegtekst (steg 13, linje 514–527; steg 16, linje 607). Kommandoen står fortsatt i `brief.md:193` og `plan.md:103` | Nei. `awk 'NR>=122&&NR<=218' plan.md \| grep -i 'hook\|zip\|upload\|archive\|package'` → 0 treff. Sesjon 1s gjerde (2030–2031) nevner verken arkiv eller opplasting. Pakkeskriptet lages i steg 13, sesjon 4 |
|
||||
| 10, PreToolUse-hook feilet åpent | Ja i stegtekst (steg 32, linje 1132/1138/1157–1160). Antakelse 7: om hooken i det hele tatt fyrer på connector-verktøy i Cowork er umålt; proben i steg 31 er ufullstendig (se rad 16 over) | Nei. Ingen hook, ingen `hooks/` i steg 1–3; `hooks/` er først berørbar i sesjon 8 (2086) |
|
||||
|
||||
Den reelle risikoen før M1 er ikke disse to. Den er at steg 1 ikke kan utføres av
|
||||
utfører-økten (neste avsnitt), og at fire blockers er lukket delvis i steg som kommer
|
||||
senere (13, 26, 21/25, 31), som M1 sesjon 4 og M3 sesjon 7–8 vil arve som de står.
|
||||
|
||||
### Steg 1: proben
|
||||
|
||||
Steg 1 måler fire ting: sesjonsmodus (lokal VM eller sky), om en plugin-deklarert
|
||||
stdio-MCP-server dukker opp i økten, om en skill kan kalle `python3`, om
|
||||
`${CLAUDE_PLUGIN_ROOT}` løses. Avgjørbarhet fra Claude Code, målt 2026-09-04:
|
||||
|
||||
| Spørsmål | Avgjørbart fra Claude Code? | Grunnlag |
|
||||
|----------|-----------------------------|----------|
|
||||
| Sesjonsmodus | Nei | `cowork_settings.json` på disk har bare nøkkelen `extraKnownMarketplaces`; skrivebordskonfigen har `coworkNetworkMode` og en liste over betrodde mapper, ingen sesjonslokasjon; den lokale sesjonslageret har 2 oppføringer, sist endret 2026-02-14 |
|
||||
| Host-MCP synlig | Nei | krever en installert plugin med `.mcp.json` i en Cowork-økt |
|
||||
| `python3` fra skill | Nei | krever en Cowork-økt |
|
||||
| `CLAUDE_PLUGIN_ROOT` | Nei | krever en Cowork-økt |
|
||||
|
||||
Alle fire krever operatøren i Cowork. Steg 1 sier «operator-run measurement» og
|
||||
«Reuses: the measurement method in research 03»; metoden der er en to-fils
|
||||
test-plugin (én skill som ekkoer versjon, én stdio-server) lastet opp via
|
||||
Customize → Plugins. Steget selv navngir ikke test-pluginen, og planens egen
|
||||
`.mcp.json` (steg 12) og pakkeskript (steg 13) kommer elleve steg senere. En
|
||||
utfører-økt kan ikke fullføre steg 1 alene; den kan bare forberede test-pluginen
|
||||
og vente på operatørens fire svar.
|
||||
|
||||
Én til: den globale `CLAUDE.md` sier at Cowork er utilgjengelig på denne maskinen.
|
||||
Research 03 målte det motsatte (Claude.app universal binary, Cowork-lager på disk).
|
||||
Linjen er utdatert og bør rettes der den bor, ikke her.
|
||||
|
||||
## Metode og verifiseringslogg
|
||||
|
||||
Alle tall over er kjørt 2026-09-04. Kommandoene som ikke står inline:
|
||||
|
||||
- Transkripttidslinje og tokens: python over `*.jsonl` i øktens prosjektkatalog;
|
||||
usage talt én gang per `message.id`; faser avgrenset på klokkeslettene for
|
||||
`Skill`-kallene (`trekbrief` 18:27:42, `trekresearch` 18:46:29, `trekplan` 19:09:01).
|
||||
- Anmeldernes unike funn: regex over JSON-objekter med `"severity"` i
|
||||
underagent-transkriptene, unike på `(line, rule_key)`.
|
||||
- Jaccard: `node`-script som importerer `lib/parsers/jaccard.mjs` og
|
||||
`tokenize` fra `lib/review/plan-review-dedup.mjs`.
|
||||
- Overlapp brief.md/build-brief: python `difflib.SequenceMatcher` og 8-gram-mengder.
|
||||
- `plan-validator.mjs --strict --json plan.md` → valid, steps 56.
|
||||
- Økt 2s gate-script (33 grep-kriterier fra brief.md) → PASS=33 FAIL=0.
|
||||
- Sporbarhet og blocker-lukking: to Opus-underagenter med lese-tilgang; tabellene
|
||||
deres er gjengitt i del 1 og 2, linjesitatene er stikkprøvet av hovedøkten.
|
||||
|
||||
Ikke målt: prosentandel kontekst (vindu ukjent), kostnad for standardmodus
|
||||
`trekbrief` (kontrafaktisk), og hva Haiku-tokenene i websøk konkret ble brukt til.
|
||||
Loading…
Add table
Add a link
Reference in a new issue