app-creator/docs/review-2026-07.md
Kjell Tore Guttormsen a2c0844b58 docs: promoter kryssmodell-review + masterplan til aktiv plan
- review-2026-07.md: uavhengig Fable 5-review (19 funn, 1 BLOCKER/8 MAJOR,
  M1-M11 avgjort, verifiseringslogg) committet som levert
- masterplan.md: promotert fra replan-proposed.md (status FORSLAG -> AKTIV);
  sesjonsko A-F til v1.0.0, B1 (reell round-trip) foran videre brief-produksjon
- roadmap.md: markert erstattet av masterplanen; revideres i sesjon A1
- STATE.md (local-only, gitignored): overskrevet fra STATE-proposed.md;
  NESTE = sesjon A1 (dok-resync). STATE-proposed.md slettet etter promotering

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GD2GDkdMZsNWy2hoiGjeLR
2026-07-10 21:47:11 +02:00

301 lines
49 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Uavhengig kryssmodell-review av app-creator
**Reviewer:** Fable 5 (xhigh) · **Dato:** 2026-07-10 · **Oppdrag:** `fable-review-prompt.local.md`
**Metode:** Alt arbeid under er skrevet av Opus 4.8; hver påstand i repoet og i oppdragets orientering er behandlet som premiss, ikke fakta, og verifisert mot disk, søsterrepoer og web. Hvert funn har `fil:linje`- eller kommando-belegg og et konkret feilscenario. Verifiseringslogg nederst.
**Skrivedisiplin:** Dette dokumentet, `replan-proposed.md` og `STATE-proposed.md` er de eneste filene skrevet. Ingen live-filer er endret.
---
## Sammendrag
Repoets kjerneidé — fase-pipeline fra app-konsept til Voyage-briefer, filhandover, human-in-the-loop — står seg. Prototypen har levert reell, brukbar empiri. Men **design-dokumentasjonen har råtnet mot to bevegelige mål den selv utpekte som kritiske**: Voyage (som har flyttet seg fem minor-versjoner og slettet flaten app-creator bygger drill-down på) og sin egen prototype (hvis viktigste lærdommer fra S14S15 aldri nådde friksjonsloggen). I tillegg er den mest siterte suksesspåstanden — «Voyage strict-mode round-trip-test PASS» — en mental simulering, aldri en kjøring. Ingen Voyage-kjøring har startet; `voyage_running: 0`.
De tre alvorligste realitetene:
1. **Drill-down-leveransen er udefinert.** Voyage v5.0.0 (2026-05-12) slettet `playground/`, Handover 8 og `/trekrevise`. Fire app-creator-filer og begge app-factory-briefene bygger fortsatt på dem. (R-01)
2. **Fase 7-templaten er pinnet til en kontraktversjon to skjemaversjoner bak**, midt i kontraktens dokumenterte «producer-elective»-hull — og handoverens operasjonelle inngang (`How to continue` med `--project`) peker på en katalog som ikke finnes. Voyage ville likevel *ikke* avvist F-001-briefen (M2 delvis felt). (R-02, R-03)
3. **Reviewens eget instrument er upålitelig:** friksjonsloggen stopper 26 kalenderdager og 8 sesjoner før virkeligheten, og versjonsdisiplinen for domain-packs brøt ved første reelle test (tre ulike pack-versjoner i omløp: 0.1.0 / 0.2.0 / «0.2.1»). (R-08, R-12)
Ingen av disse er dødelige. Alle er reparerbare med dokumentarbeid + én tidlig, reell round-trip. Re-planen (`replan-proposed.md`) starter der.
---
## Mistanke-oppgjør (M1M11)
Orienteringens elleve mistanker, felt eller bekreftet uavhengig:
| # | Verdikt | Belegg | Funn |
|---|---|---|---|
| M1 | **Bekreftet — og verre** | Voyage `CHANGELOG.md:499-505` («**Breaking.** `/trekrevise` is removed. The `playground/` directory, Handover 8 … gone», v5.0.0, 2026-05-12); `ls playground/` → finnes ikke. Utover M1: `phase-design-draft.md:882,938` foreskriver Handover 8 + `/trekrevise` som gjeldende Voyage-mønster. | R-01 |
| M2 | **Delvis felt / nyansert** | `framing` + `## TL;DR` er påkrevd **kun ved `brief_version ≥ 2.2`** (`HANDOVER-CONTRACTS.md:76,79,103`); 2.0-briefer er eksplisitt gyldige (N-1-vindu, `:46,:105`). Papir-round-trip av F-001 rev 6: **PASS** på 5.9.1. Voyage ville ikke avvist. Men templaten er to versjoner bak, i kontraktens dokumenterte forsvars-hull. | R-02 |
| M3 | **Bekreftet — og eskalert** | Flat grense står (`phase-design-draft.md:21,62,211,581`); målt 1830→4523 ord. Revisjonslogg-i-artefakt gjør fase 7-filer ubegrensede: F-001 `brief.md` er nå **4523 ord** (`wc -w`), 9× grensen. | R-07 |
| M4 | **Bekreftet** | `friksjon.md` siste entry #15/S13 (2026-05-14, `friksjon.md:449-499`); Akashic `state.json:88-94` viser S14bg + S15 med design-relevante lærdommer som aldri ble logget. | R-08 |
| M5 | **Bekreftet** (orienteringens linjenumre delvis feil) | «iOS 18/iOS 19» på `phase-design-draft.md:315,386,524,625` (grep); `domain-pack-spec.md:158` korrigerer eksplisitt. Eksternt verifisert: iOS 26 gjeldende, iOS 1925 finnes ikke, iOS 27 GA ~sept 2026. | R-13 |
| M6 | **Bekreftet** | Fase 2 gis pack-input på `phase-design-draft.md:423`; utelatt i `:66`, tabellen `:70-77`, `domain-pack-spec.md:9,99-106`, `ios-app/pack.json:7` (`phases: [1,3,4,5,6,7]`). | R-14 |
| M7 | **Bekreftet — og verre** | Frontmatter-enum `:204` (4 verdier, mangler `pending-review`); state.json-spec `:934` (6 strenger + 2 objektformer); Akashic bruker i praksis en **tredje** form ingen spec dekker (`state.json:13-14`). | R-06 |
| M8 | **Bekreftet** | `annotate.mjs:933-934` skriver kun `<input>.html`; annotasjoner i localStorage (5 treff). `find`-søk: null `.review.md` i Akashic. Sidecar refereres normativt i `phase-design-draft.md:58,903,926-931,1021,1042-1048`. | R-05 |
| M9 | **Bekreftet på papir — de facto omgått** | Fase 5-input `:596` + 3 core-checklists + `gotchas.md` = 4 filer > max-3 (`:68`, spec `:108`). Akashic leste i praksis snapshotet (alle 5 core-filer i ett dokument) — regelen er både brutt og meningsløs slik den står. | R-15 |
| M10 | **Bekreftet** | `CHANGELOG.md:8` refererer «ROADMAP, TODO»; `TODO.md` finnes ikke (`find`), roadmap heter `docs/roadmap.md`. | R-17 |
| M11 | **Bekreftet** | `git remote -v` → tom. 25 commits, aldri pushet. | R-18 |
Orienteringens småfeil, for ordens skyld: repoet har **42** tracked filer (`git ls-files | wc -l`), ikke 41; `ios-app`-packen har **18** filer, ikke 16; pack-versjonen på disk er **0.2.0**, ikke 0.2.1 (se R-12).
---
## Akse 1 — Premiss- og kontrakt-integritet mot ekstern virkelighet
### R-01 [BLOCKER] Den arkitektoniske forfaren er slettet; drill-down-leveransen er udefinert; døde kontraktsreferanser i normativ tekst
**Belegg:** Voyage v5.0.0 (2026-05-12) fjernet `playground/`, Handover 8, `/trekrevise` og anchor-/revisjonsbibliotekene (`voyage/CHANGELOG.md:499-505`). Erstatningen er `scripts/annotate.mjs` (v5.0.2, `CHANGELOG.md:443-449`) — per-artefakt annoterings-HTML, ikke en playground-flate. Gjeldende Voyage: **5.9.1** (`plugin.json:4`).
Rammet tekst som fortsatt behandler det slettede som eksisterende:
- `docs/roadmap.md:25` (v0.4.0-boks: «drill-down til Voyage Plugin Playground») og `:38`
- `CLAUDE.md:24,30,56,58,84` («klikk en feature → åpne v4.3-flaten»), `README.md:19`
- `phase-design-draft.md:882` (foreskriver «Voyages anchor-format (Handover 8)» med `ANN-NNNN` + `annotation_digest` for fase 7-briefer) og `:938``scripts/annotate.mjs` + `/trekrevise`-flyten, Handover 8»)
- Utenfor skrivemandatet, men rammet: `app-factory/docs/architecture-brief.md:26,66-68,75,125,133` («Tier 1 (Voyage v4.3): under utvikling per Voyages egen roadmap» — flaten er tvert imot slettet) og `alignment-brief.md:112`
**Feilscenario:** En Opus-sesjon som implementerer per-app HTML per roadmap-boksen leter etter en playground-flate å lenke til, finner ingen, og enten (a) stopper, eller (b) finner på en kobling (generere Voyages HTML selv, kjøre Voyage) som bryter «aldri eksekvere Voyage»-invarianten. En sesjon som følger `:882` produserer anchor-kommentarer og digests ingen Voyage-versjon lenger konsumerer.
**Foreslått fiks:** (1) Merk «v4.3 Plugin Playground» som *historisk* forfar overalt (mønstrene — single-file, vendored DS, polling, theme — er fortsatt arven; flaten er borte). (2) Redefiner drill-down: klikk en feature → åpne dens `voyage_run_dir`-artefakter og/eller annotate-HTML-filer; ellers vis briefen. (3) Fjern Handover 8-/`trekrevise`-referansene fra normativ tekst. (4) Foreslå (ikke utfør) tilsvarende synk i app-factory-briefene. → Sesjon A1/A7/E1 i re-planen.
### R-02 [MAJOR] Fase 7-templaten er to kontraktversjoner bak og sitter i kontraktens dokumenterte forsvars-hull; verifikasjonspåstanden er stale
**Belegg:** `phase-design-draft.md:780` hevder formatet er «verifisert mot Voyage-kildekode 2026-05-11» og pinner `brief_version: "2.0"` (`:786`). Gjeldende kontrakt er **2.2** (`HANDOVER-CONTRACTS.md:13,63`): v5.1 innførte 2.1 (sequencing-gate: `phase_signals` ELLER `phase_signals_partial` påkrevd ved ≥2.1, `:95`), v5.5 innførte 2.2 (`framing`-enum + `## TL;DR` påkrevd ved ≥2.2, `:76,79,103`). Voyages egen `templates/trekbrief-template.md:3` emitterer 2.2. Kontrakten sier eksplisitt at hullet templaten sitter i er kjent: «any producer can sidestep the entire defense — deliberately or by shipping a legacy template — simply by declaring `brief_version: "2.1"`» (`:105`), og at remedien er «require upstream producers to emit `brief_version: "2.2"`» — formulert med adresse: «downstream producers (e.g. **a Tier-2 per-app producer**) that emit `brief_version: "2.2"` MUST also emit `framing` + `## TL;DR`» (`:103`).
**Papir-round-trip F-001 rev 6 mot 5.9.1-validatoren, felt for felt:** `type: trekbrief` ✓ · `brief_version: "2.0"` ✓ (gyldig under N-1) · `created` ✓ · `task` ✓ · `slug` ✓ · `project_dir` ✓ format · `research_topics: 1` ✓ · `research_status: pending` ✓ · state-machine (topics>0 ∧ skipped ⇒ partial) ikke trigget ✓ · sequencing-gate trigger kun ≥2.1 ✓ · framing-gate trigger kun ≥2.2 ✓ · ukjente frontmatter-nøkler (app-creator-interne felter) tolereres eksplisitt (`:46`) ✓ · ingen nestede dicts ✓ · body `## Intent`/`## Goal`/`## Success Criteria` ✓. **Resultat: PASS, også strict.** M2s «hva ville Voyage avvise?» har svaret: *ingenting* — i dag.
**Feilscenario (to retninger):** (a) Generatoren blir stående på 2.0: hver app-creator-brief omgår hele framing-alignment-forsvaret Voyage bygget i v5.5, og ryker den dagen Voyage fjerner legacy-stier i neste major (`:101`). (b) En sesjon «oppdaterer til gjeldende kontrakt» naivt: bump til 2.1 uten `phase_signals``BRIEF_V51_MISSING_SIGNALS` strict-halt; bump til 2.2 uten `framing`+TL;DR → `BRIEF_MISSING_FRAMING`/`BRIEF_MISSING_SECTION` strict-halt. Begge feiler først ved neste reelle `/trekplan`, med kostnaden hos operatøren.
**Foreslått fiks:** Beslutt 2.2 som mål (anbefalt). Design: `framing`-avledningsregel for fase 7 (brief avledet av operatør-godkjent backlog ⇒ normalt `preserve`; ved revisjon av eksisterende feature ⇒ `refine`), `## TL;DR`-generering (≤5 linjer), `phase_signals`-strategi (settes av generatoren eller `phase_signals_partial: true`), re-datert verifikasjonsnote med kontraktversjon. → Sesjon A5, testet i B1.
### R-03 [MAJOR] Handoverens operasjonelle inngang er brutt: `How to continue` peker på en `project_dir` som ikke finnes
**Belegg:** F-001 `brief.md:306-317` instruerer `/trekresearch --project .claude/projects/2026-05-13-sun-position/ …`, `/trekplan --project …`, `/trekexecute --project …`. Kontraktens project-dir-modus forventer briefen på `.claude/projects/{date}-{slug}/brief.md` (`HANDOVER-CONTRACTS.md:54-55`). Katalogen finnes verken i Akashic-repoet eller `~/.claude/projects/` (`ls` begge → finnes ikke), og ingen mekanikk i `phase-design-draft.md` legger briefen der. Draftens egen operatør-flyt (`:777`) bruker loose-modus (`--brief <sti>`) — men kun for `/trekplan`, og F-001s egne instruksjoner gjør det ikke.
**Feilscenario:** Operatøren limer inn `How to continue` fra den «Voyage-klare» briefen → `BRIEF_NOT_FOUND`-halt på første kommando. Papir-round-tripen (friksjon `#14:402`) fanget ikke dette fordi den validerte skjema, ikke invokasjonssti.
**Foreslått fiks:** Definér handover-mekanikken eksplisitt i § Fase 7: enten (a) loose-modus konsekvent (`--brief features/{NN}-{slug}/brief.md`) også for research, eller (b) et kopieringssteg («operatør kopierer brief.md til {project_dir} før kjøring») som del av handoveren. Verifiseres i den reelle round-tripen. → Sesjon A5 + B1.
### R-04 [MAJOR] «Round-trip-test PASS» er en papirpåstand som siver oppover som fakta; `research.md`-konsum er en utestet antakelse om Voyage-adferd
**Belegg:** Friksjon `#14:402`: «**Voyage strict-mode round-trip-test PASS:** *Mental simulering* av `/trekplan --brief …`». Akashic `state.json:85` (S12-loggen): «Voyage strict-mode round-trip-test PASS» — uten simulerings-forbeholdet. `voyage_running: 0, shipped: 0` (`state.json:61-67`): ingen Voyage-kommando har noensinne konsumert en app-creator-brief. Roadmap-forutsetning #3 (`roadmap.md:13`, «round-trip-testet på reell brief») er uinnfridd. I tillegg antar F-001 `brief.md:131` at «Voyage konsumerer den fila [`research.md`] som primær-input til `/trekresearch`» — ingen Handover-kontrakt omtaler en produsent-levert `research.md` (Handover 2 er *Voyages egne* research-filer i `{project_dir}`, `HANDOVER-CONTRACTS.md:131-133`), og fila ligger i `features/01-sun-position/`, utenfor `project_dir`.
**Feilscenario:** v0.4.0-kontraktlåsing skjer på papir-PASS; første reelle kjøring avslører sti-/konsum-gap (R-03, research.md-antakelsen), og «låst» format må brytes opp igjen — nøyaktig det låsingen skulle forhindre.
**Foreslått fiks:** Reell round-trip på F-001 (`/trekresearch` for AQ-001 + `/trekplan`) som egen, tidlig sesjon — den krever **ingen** signert build og er uavhengig av Apple-portalen. Observer hva Voyage faktisk gjør med `research.md`. → Sesjon B1, foran all videre brief-produksjon.
### R-05 [MAJOR] Review-gaten hviler på en ukontraktfestet Voyage-intern fil — og den dokumenterte kommando-stien er allerede død
**Belegg:** Review-gaten er «adoptert 1:1» fra `scripts/annotate.mjs` (`phase-design-draft.md:936-958`; operatør-direktiv i `STATE.md:16-20`). annotate.mjs er *ikke* del av noen Handover-kontrakt — Handover 1 er «the *only* public integration boundary» (`HANDOVER-CONTRACTS.md:46`). Voyage har dokumentert vilje til å slette interne flater uten varsel: playground (v5.0.0), `render-artifact.mjs` (v5.0.1 — slettet dagen etter innføring), `/playground`-invokasjonen (v5.0.2 — samme). Første konsekvens har allerede inntruffet: den dokumenterte stien `~/.claude/plugins/marketplaces/ktg-plugin-marketplace/plugins/voyage/scripts/annotate.mjs` (`STATE.md:20`, `phase-design-draft.md:950`, tilsv. `:865` for kontrakts-stien) **finnes ikke** (`test -f` → FINNES IKKE); den installerte pluginen ligger i `~/.claude/plugins/cache/ktg-plugin-marketplace/voyage/5.9.1/`. Akashic-snapshotet oppgir en tredje rot (`00-context/domain-pack-ios-app.md:6`: `…/marketplaces/ktg-privat/plugins/app-creator/…`).
**Feilscenario:** Neste sesjon følger STATE.md-ens *obligatoriske* review-gate-kommando → `ENOENT` → improvisasjon under tidspress. På lengre sikt: Voyage v6 endrer annotate.mjs → hele gate-mekanikken (og dermed operatør-direktivet) dør uten varsel.
**Foreslått fiks:** (1) Kortsiktig: kanonisk sti-referanse via cache (`…/cache/ktg-plugin-marketplace/voyage/<nyeste>/scripts/annotate.mjs`), dokumentert ett sted. (2) Strukturelt: vendor en kopi av annotate.mjs inn i app-creator (self-contained `.mjs`, zero deps — forenlig med alle invarianter; «aldri modifisere Voyage» berøres ikke av å kopiere fra den), med notat om opphavsversjon og resync-rutine. Se også Akse 3, angrep 1. → Sesjon A1 (sti), D7 (vendoring — operatør-beslutning).
### R-13 [MINOR] Ekstern versjonering: pack-ene holder; utkastet og HTML-invarianten spriker
**Belegg (web-verifisert 2026-07-10 av hovedsesjon + kryssbekreftet av uavhengig research-agent; kilder i verifiseringsloggen):** iOS 26 er gjeldende (iOS 1925 finnes ikke; siste stabile punktversjon 26.5.2, 2026-06-29 — 26.6 er kun beta). iOS 27 annonsert WWDC juni 2026; offisiell utgivelse «this fall» — september-dato er presse-estimat, ikke Apple-bekreftet. Pack-ens drift-prognose i `domain-pack-spec.md:198` traff. Xcode: siste stabile 26.6 (25. juni 2026); STATE.md-ens «Xcode 26.5» var plausibel i mai, nå datert. App Store-byggekravet i `ios-app/pack.json:10` («build-krav siden 2026-04-28» — Xcode 26+/iOS 26 SDK) er uavhengig bekreftet mot Apple Developer Upcoming Requirements. MASVS 2.1.0 (jan 2024) fortsatt gjeldende. WCAG 2.2 gjeldende Rec (nå også ISO/IEC 40500:2025); WCAG 3.0 er Working Draft, Rec tidligst ~2029. `ios-app/pack.json:8-11` er altså korrekt per sin `verified`-dato. Sprikene: «iOS 18/iOS 19» i `phase-design-draft.md:315,386,524,625` (M5) og «WCAG **2.1** AA-kontrast» som HTML-invariant (`CLAUDE.md:105`, `app-factory/docs/architecture-brief.md:103`) mot WCAG **2.2** AA i fase 5 og pack-ene.
**Feilscenario:** Neste app som bruker fase 1-templaten arver «{iOS 18 / iOS 19}»-eksemplet (`:386`) — samme feil friksjon #9 dokumenterte at kostet en revisjonsrunde. HTML-en bygges mot 2.1-kriterier mens constraints-laget krever 2.2.
**Foreslått fiks:** Rett template-eksemplene til domene-nøytrale plassholdere («{min-versjon — verifiser mot domain-pack conventions}»); avklar WCAG-nivå for HTML-flaten (anbefalt: 2.2 AA, konsistent med resten). Planlegg pack-reverifisering ved iOS 27-GA (~sept 2026). → Sesjon A1; kø-oppføring for pack-refresh.
### R-16 [MINOR] Runtime-asymmetrien er dok-brutt — bevisst, og med lav kostnad; app-creators formulering er nå usann
**Belegg:** `CLAUDE.md:74`: «Voyage vet ikke om app-creator finnes, og skal ikke vite det.» Voyage `HANDOVER-CONTRACTS.md:48` navngir «**Tier 2 `app-creator`**» og «Tier 3 `app-factory`» i en «Trinity producer context (informational)»-blokk — som samtidig presiserer det som faktisk bærer verdien: «No producer is privileged … Voyage stays unaware of Tier 2/3 — this Handover is the only coupling.»
**Vurdering:** Bruddet er reelt på kunnskaps-/dok-nivå, kosmetisk på arkitektur-nivå. Skjema-asymmetrien (ingen privilegert produsent, ingen runtime-kobling) er intakt og er den som gjør lagene uavhengig utviklbare. Å kreve at Voyage «avlærer» app-creator ville vært teater.
**Feilscenario:** En fremtidig sesjon håndhever CLAUDE.md-formuleringen bokstavelig og «retter» Voyage-dokumentasjonen (bryter «aldri modifisere Voyage»), eller avviser nyttige design-valg med henvisning til en invariant som allerede er redefinert i praksis.
**Foreslått fiks:** Omformuler invarianten i `CLAUDE.md` til det den faktisk beskytter: «Ingen runtime-kobling; briefen er en umerket, velformet Voyage-brief; Handover 1 er eneste koblingspunkt; ingen produsent er privilegert.» → Sesjon A1.
### R-19 [SUGGESTION] Alignment-briefens Funn 1 er innfridd av Voyage — sterkere enn skissert — uten at noen har notert det
**Belegg:** `app-factory/docs/alignment-brief.md:64-83` etterlyser en «Stability promise»/STABILITY.md. Voyage v5.5.0 leverte mer: Handover 1 som **PUBLIC CONTRACT** med breaking-change-protokoll og N-1-vindu (`HANDOVER-CONTRACTS.md:44-46,20-26`). Positiv drift — men udokumentert på app-creator/app-factory-siden, og v0.4.0-definisjonen har samtidig driftet (alignment-brief Funn 4 lister 4 punkter, `roadmap.md:23-27` lister 5 — «Per-app HTML klar» mangler i alignment-briefen, i strid med Funn 4s egen synk-regel `alignment-brief.md:125`).
**Foreslått fiks:** Synk-notat i A7-sesjonen (cross-repo, krever operatør-mandat).
---
## Akse 2 — Design-koherens
### R-06 [MAJOR] `phase_status`-vokabularet finnes i tre innbyrdes uforenlige varianter — og virkelighetens variant er udokumentert
**Belegg:** (a) Frontmatter-spec: `in-progress | complete | revised | skipped` (`phase-design-draft.md:204`) — **mangler `pending-review`**, tilstanden hele review-gaten hviler på (`:58`). (b) state.json-spec: `complete | in-progress | not-started | revised | pending-review | revision-in-progress` + to objektformer (`:934`). (c) Akashic i praksis: `"revised"`-objekt med `revision/revised_at/driver/open_questions` (`state.json:13`) og `"complete"`-objekt med `completed/total/completed_at/completed_note` (`state.json:14`) — ingen av dem i noen spec. Attention-typene har samme sprik: spec-en nevner `review-pending`/`decision`/`review` (`:925-929`); virkeligheten bruker `decision-pending`, `action-pending`, `environment-blocker`, `revision-pending` (`state.json:97-139`). `phase`-feltet i attention er fritekst («xcode-bootstrap», «pre-submission») uten definisjon. Toppnivå-feltene `review_gate_history` (`state.json:16-50`) og `implementation` (`:142-158`) finnes ikke i spec-en. state.json har **intet** schema-/versjonsfelt.
**Feilscenario 1 (gjentakelse av friksjon #15):** En sesjon som følger frontmatter-spec-en kan bare skrive `complete` når den mener `pending-review` — nøyaktig forvekslingen som utløste operatør-stoppen i S13. **Feilscenario 2 (Tier 3):** En app-factory-parser bygget mot `:890-932` knekker eller feiltolker på første reelle instans; spesifikt leser den `phase_status."7": "complete"` som «fase 7 ferdig» mens `feature_summary.brief_pending: 11` (`state.json:63`) sier 11 av 12 briefer gjenstår.
**Foreslått fiks:** Én autoritativ enum-tabell + JSON Schema for state.json (med `"schema"`-felt); redesign av fase 7-status til per-feature-semantikk (fase 7 er kontinuerlig, ikke skalar); normaliser Akashic-instansen mot skjemaet. → Sesjoner A1 (enum-samling), C2 (schema), D3 (validator).
### R-07 [MAJOR] Lengdegrense-regimet er empirisk motbevist åtte ganger, tabell-fiksen er aldri applisert — og revisjonslogg-konvensjonen har gjort kontraktsfila ubegrenset
**Belegg:** Flat ≤500-ordsgrense: `phase-design-draft.md:21,62,211,581`. Målt (wc -w, 2026-07-10): app-brief 1855, research 1317, arkitektur 1827, constraints 3535, features 4435 (rev 1), F-001 brief.md **4523** (rev 6), context.md 641, research.md **5611** (rev 6). Friksjon #10/#12/#13/#14 foreslo en differensiert per-artefakt-tabell i fire iterasjoner (`friksjon.md:205-213,285-295,340-351,404-410`) — aldri skrevet inn i utkastet. Ny driver ingen friksjonsentry fanger: `## Revisjons-logg`-seksjonen skrives *inn i* `brief.md` (`:990-1000`), så seks S14-runder la ~3800 ord norsk beslutningshistorikk **inn i selve kontraktsfila som overleveres Voyage**.
**Feilscenario:** (a) En brief-forfatter-sesjon som lyder spec-en strammer bort substans (Success Criteria er det som ryker — det Voyage faktisk konsumerer) eller drukner i review-flagg. (b) Voyages planner leser 4523 ord der ~740 er kontrakt og resten er audit-trail; intern historikk («operatør valgte Alt 5», forkastede alternativer 14) lekker inn i planleggingen og kan feilvekte den.
**Foreslått fiks:** (1) Applisér #14-tabellen i § Hard lengde-grense. (2) Beslutt Revisjons-logg-plassering — tre alternativer: (a) egen fil `features/{NN}/revisions.md`, (b) flytt til `context.md`, (c) strip ved handover (krever kopieringssteg, jf. R-03). Anbefaling: (a) — audit-trail er app-creator-intern state, ikke kontrakt. → Sesjon A2 (operatør-valg + applisering).
### R-08 [MAJOR] Friksjonsloggen — metodens primærinstrument — ligger 8 sesjoner bak, og de tapte lærdommene er de viktigste
**Belegg:** `friksjon.md` slutter med #15/S13 (2026-05-14). Akashic `state.json:87-94` dokumenterer S14S14g + S15 med minst fire design-relevante lærdommer som aldri nådde loggen: (1) **S14e**: F-001 rev 03 bar en faktafeil (AI oppfant et fjerde tidspunkt / «30° synkende»; verifisering mot Isha-kilder viste tre) — og den *retroaktive* S14-reviewen med 0 annotasjoner godkjente den feilaktige briefen (`state.json:39-49`); feilen ble fanget først da operatøren ba om å få reglene vist. (2) Review-gaten virker *iterativt* — fire runder S14→S14g, dokumentert konklusjon i `state.json:93`. (3) Ny artefakt-praksis (revisjonslogg-eksplosjonen, R-07). (4) b59928b-lærdommen («rask validering med `echo {initialize} | server-cmd` før scaffold-templates publiseres», commit-melding 2026-05-15) — ble stående i git, aldri i friksjon/spec. Siste substansielle commit i app-creator: 2026-05-15; STATE-innhold datert 2026-05-29.
**Feilscenario:** Neste `phase-design-draft`-revisjon bruker friksjon.md som kilde (det er dens deklarerte rolle, `friksjon.md:3`) og går glipp av prototypens sterkeste empiri: at *passive* gates (åpnet HTML, ingen annotasjoner) ikke validerer, og at gate-timing er avgjørende. Review-gate-designet låses da på svakere grunnlag enn dataene tillater.
**Foreslått fiks:** Etterregistrering som friksjon #16#18 (kilde: Akashic state.json-loggen + git) før neste design-revisjon. → Sesjon A4, foran A5.
### R-09 [MAJOR] Flersesjons-protokollen i utkastet foreskriver et mønster operatøren har forbudt og repoet selv har migrert bort fra
**Belegg:** `phase-design-draft.md:83-89` formaliserer `SESSION-ROADMAP.local.md` + `NEXT-SESSION-PROMPT.local.md` + `SESSION-LOG.local.md`; `:979` instruerer «start neste sesjon med "Les og følg NEXT-SESSION-PROMPT.local.md nøyaktig"». `prototype-run/README.md` (tabellen) beskriver de samme filene som levende. Repoets egen git-historikk viser at mønsteret er avviklet og konsolidert til STATE.md-konvensjonen (commits 8eb625f, c8e6aa5, b8a6a31, 2026-05-2906-26); filene finnes ikke på disk (`find` → kun `fable-review-prompt.local.md`). Operatørens globale konvensjon forbyr eksplisitt lokale kontinuitetsmekanismer av denne typen.
**Feilscenario:** En Opus-sesjon som følger § Flersesjons-protokoll gjenoppretter det forbudte mønsteret i neste app-instans; eller en sesjon leter etter `NEXT-SESSION-PROMPT.local.md` som re-entry og finner ingenting.
**Foreslått fiks:** Omskriv § Flersesjons-protokoll til STATE.md-konvensjonen (per-instans `STATE.md` med 👉 NESTE-blokk; `state.json.session`-feltet beholdes som maskinlesbart eksport-speil). Oppdater prototype-run/README-tabellen. → Sesjon A1.
### R-12 [MINOR] Versjonsdisiplinen for domain-packs brøt ved første reelle test: tre versjoner i omløp, stale snapshot
**Belegg:** Commit `b59928b` (2026-05-15) endret pack-innhold (`patterns/xcode-mcp-toolchain.md`, `scaffold/mcp.json`) og annonserte «v0.2.1» i commit-meldingen — men `pack.json:4` står på **0.2.0**, uten 0.2.1-changelog-entry (`git show b59928b --stat`; `git log -p -- …/pack.json`). Dette er nøyaktig patch-bump-tilfellet `domain-pack-spec.md:123` definerer. Konsekvens-kjeden: `STATE.md:44` hevder «v0.2.1» (matcher commit-melding, ikke manifest); Akashic `state.json:4` pinner `ios-app@0.1.0`; F-001 `brief.md:21` pinner `0.1.0`; `implementation.domain_pack_version_at_bootstrap` sier `0.2.0` (`state.json:152`); snapshotet er materialisert fra **0.1.0** (2026-05-13, `00-context/domain-pack-ios-app.md:4-5`) og aldri re-materialisert gjennom to innholdsendringer — i strid med sin egen disclaimer («re-materialiser ved pack-bump», `:8`). Spec-en innrømmer at `verified` ikke håndheves (`domain-pack-spec.md:196`) — dette er beviset på at disiplin alene ikke holdt én eneste bump.
**Feilscenario:** En sesjon premiss-verifiserer «pack er v0.2.1» mot disk, finner 0.2.0, og bruker tid på å avgjøre hvilken som er sann. Verre: en re-materialisering tar utgangspunkt i feil versjon, og fase 7-context-utdrag genereres fra et snapshot uten MCP-toolchain-lærdommene.
**Foreslått fiks:** pack.json → 0.2.1 + changelog-entry; re-materialiser Akashic-snapshotet; oppdater pins. Vurder `check-pack.mjs`-lint (se Ambisiøse utvidelser, B). → Sesjon A3.
### R-14 [MINOR] Fase 2s pack-konsum er selvmotsigende (M6)
**Belegg:** `phase-design-draft.md:423` gir fase 2 `gotchas.md` + `patterns/` som input; `:66` («fasene 1/37»), tabellen `:70-77`, `domain-pack-spec.md:9,99-106` og `ios-app/pack.json:7` utelater alle fase 2. **Feilscenario:** En fase 2-implementasjon (D-fasen) må velge side; velger den `:423`, bryter den pack-manifestets `phases`-kontrakt og en evt. validator. **Foreslått fiks:** Ta stilling: enten legg fase 2 inn i `phases` overalt (Akashic-erfaringen: fase 2 klarte seg uten pack-filer — taler for å fjerne), eller stryk input-linjen på `:423`. Anbefaling: stryk. → Sesjon A1.
### R-15 [MINOR] Max-3-regelen er både brutt på papir og omgått i praksis (M9)
**Belegg:** Fase 5-input (`:596`): `checklist.md` + `gotchas.md`; checklist-splitten gjør «checklist» til tre core-filer (`ios-app/pack.json:28-30`); fase 5-templaten dekker alle tre domenene (`:604-667`) ⇒ 4 filer > max-3 (`:68`, spec `:108`). I praksis leste Akashic fase 5 snapshotet — som inneholder **alle fem** core-filene i ett dokument (`00-context/domain-pack-ios-app.md:8`), altså mer innhold enn regelen tillater, gjennom ett filhandle. **Feilscenario:** En implementert fase-agent håndhever max-3 bokstavelig og må velge bort én av tre obligatoriske checklists i fase 5. **Foreslått fiks:** Redefiner regelen til det den faktisk skal beskytte (kontekstbudsjett): «snapshot teller som én lasting; utover snapshot maks 3 supplementary-filer», og oppdater fase 5-inputlisten. → Sesjon A1.
### R-17 [MINOR] CHANGELOG refererer filer som ikke finnes, og er selv 25 commits gammel (M10)
**Belegg:** `CHANGELOG.md:8`: «Initial repo scaffolding (CLAUDE.md, README, ROADMAP, TODO, CHANGELOG)» — `TODO.md` finnes ikke; roadmap heter `docs/roadmap.md`. Hele fila har 13 linjer og dekker ingenting etter scaffolding (25 commits, inkl. to spec-låsinger og en pack-release). **Feilscenario:** Kosmetisk i dag; villedende den dagen repoet publiseres på Forgejo. **Fiks:** Rett referansene; etabler changelog-disiplin fra A-fasen. → Sesjon A1.
### R-20 [SUGGESTION] Småsprik: «6-tema-intervju» har 8 temaer; interne teller-avvik
**Belegg:** `phase-design-draft.md:112,258` sier «6-tema-intervju»; sjekklisten `:271-279` og prioriteringen `:291` lister 8 (Eierskap, Problem, Brukere, Suksess, Omfang, Appetite, Plattform, Tidshorisont). Friksjons-tallene for ordtelling avviker litt fra dagens disk (1830→1855, 3497→3535 osv. — filer har driftet etter måling). **Fiks:** Tell om og rett i A1; ingen strukturell konsekvens.
---
## Akse 3 — Arkitektur-invarianter under press
Mandat: hvert angrep krever konkret feilscenario + navngitt alternativ. Vetorett hos operatør.
**1. Tre-tier-oppdelingen — grensen holder, men Tier 2 har allerede én ulisensiert import fra Tier 1.**
Angrep: Review-gaten (kjerne-mekanikk i Tier 2) avhenger av `annotate.mjs` — en Voyage-*intern* fil utenfor eneste public contract (R-05). Feilscenario: som R-05; presedensen er at Voyage sletter interne flater med én dags varsel. Navngitt alternativ: **vendor annotate.mjs** (fork-and-own-kopi i app-creator, opphavsversjon notert, resync-rutine) — bevarer «Handover 1 er eneste kobling» *og* zero-deps/single-file-invariantene, uten å røre Voyage. Ellers står tre-tier-oppdelingen seg: ingen funn tyder på at Tier 2 må absorbere task- eller portefølje-ansvar; fristelsen dokumentert i alignment-brief Funn 5 er reell men adressert med test-spørsmålene der.
**2. Runtime-asymmetrien — omformuler, ikke gjenopprett.**
Angrep + vurdering: se R-16. Alternativ: invariant-tekst som beskytter det som faktisk bærer verdi (skjema-konformitet, ingen runtime-kobling, ingen privilegert produsent) i stedet for en kunnskaps-påstand som allerede er usann. Ingen handling mot Voyage.
**3. De syv fasene — riktig meny, misvisende som lineær skala.**
Angrep: Empirien (n=1) kjørte 1, 2, 3, 5, 6, 7; fase 4 er *designet* for som regel aldri å trigge (`:565`). En «fase-progress 17»-visning (CLAUDE.md:52, roadmap:25) viser dermed et permanent hull for de fleste apper, og `phase_status."7": "complete"` ved 1/12 briefer (R-06) viser at fase 7 ikke er en fase men en kontinuerlig aktivitet. Feilscenario: app-factory-aggregering («hvilken fase er appen i?», alignment-brief:92) gir meningsløse svar for fase 4/7. Navngitt alternativ: behold de syv *kapabilitetene* og artefakt-nummereringen (innarbeidet), men modellér progresjon som status-per-kapabilitet (kjørt/hoppet/utrigget/kontinuerlig med teller) i state-eksporten og HTML-en — ikke som posisjon på en 17-linjal. Ikke slå sammen faser nå: empirien er for tynn (én app, eskaleringssti only — se Akse 5).
**4. Brief-som-filhandover vs. validerbart schema — behold filen, tilfør validatoren.**
Angrep: Uten egen validering oppdages kontraktsbrudd først i Voyages validator, med kostnaden hos operatøren (alignment-brief:119 forutså dette). Feilscenario: R-02(b). Navngitt alternativ: `validate-brief.mjs` i app-creator som implementerer Handover 1 (public contract) for målversjonen — *ikke* å kjøre Voyages `brief-validator.mjs` (gråsone mot eksekverings-grensen, og skaper enda en intern avhengighet). Filhandover som prinsipp: uangripelig gitt målene; ingen alternativ fremmes.
**5. Filsystem som state-backend / `state.json` som sannhet — backend holder; sannhets-påstanden gjør ikke.**
Angrep: state.json er i dag *ikke* eneste sannhet: review-gate-annotasjoner lever i nettleserens localStorage (nøklet på absolutt sti — tapt ved maskinbytte/rydding), og revisjonshistorikk lever i artefaktene. Feilscenario: operatør bytter maskin → åpne annotasjonsrunder (AQ-003-svaret!) er borte; state.json sier `decision-pending` med ref til en HTML hvis tilstand ikke finnes lenger. Navngitt alternativ: hold fast på filsystem-backend, men gjør annotasjons-*eksport* til fil til en del av gate-protokollen (Copy Prompt limes inn og *committes* som del av revisjonen — allerede de facto praksis via Revisjons-logg; formaliser det, jf. R-07-beslutningen). SQLite o.l. vurdert og forkastet: bryter zero-deps-ånden uten gevinst på denne skalaen.
**6. Verktøy-agnostisk — står.**
Ingen funn gir feilscenario. Ingen alternativ fremmes. (Prototypen har klart seg uten PM-verktøy gjennom 15+ sesjoner — svak men reell bekreftelse.)
**7. Single-file HTML, zero deps, polling — står; polling er upraktisert.**
annotate.mjs (single-file output, zero deps) og Akashic `index.html` (385 linjer, `data-theme`, statisk) bekrefter mønsterets levedyktighet. Merk: Akashic-index-en **poller ikke** (grep etter `fetch`/`setInterval`: null treff) — polling-invarianten er fortsatt utestet på Tier 2. Ikke et angrep; en åpen verifikasjon for E-fasen.
**8. Hard 500-ordsgrense — fell den flate grensen, behold prinsippet.**
Angrep: R-07; åtte målinger mot, null for. «Én skjerm»-formuleringen (`:62`) er uoperasjonaliserbar. Navngitt alternativ: #14-tabellen (differensiert per artefakt-type, review-flagg over terskel) + bredde/dybde/fokus-typologien fra friksjon #13 — empirisk fundert av prototypens egne tall.
### Fem-nivå-vurdering (Shapiro-rammeverket; bindende ramme: nivå 3 fast, muliggjør nivå 4)
**Plassering i dag: nivå 2, med nivå 3-stillas på plass for R og P — og et åpent hull der I og V skulle vært.**
Begrunnelse: R-PIV-loopen på app-nivå er lukket til og med P: research (fase 2, reelle kjøringer), plan (fase 1/3/5/6-artefakter med operatør-gates), og review-gate-mekanikken etter S13 er et ekte nivå 3-trekk — mennesket planlegger og validerer ved hver fasegrense. Men **I og V har aldri kjørt**: `voyage_running: 0, shipped: 0`. Ingen brief er implementert, ingen validering av at pipelinens output faktisk bærer implementering. Tilliten som definerer nivå 3 («delegerer all koding, stoler på systemet») kan ikke være opptjent når systemets nedstrøms-halvdel er ukjørt. Det er ikke et designproblem — det er hvor prototypen står — men reviewens dom er at *påstander om nivå 3 er premature før B-fasen i re-planen er gjennomført*.
**Gate-kvaliteten er dokumentert ujevn — det er den viktigste nivå-3-empirien repoet har:** S14e (R-08) viser at en passiv gate (åpnet HTML, null annotasjoner) godkjente en faktafeil, mens en aktiv operatør-spørring fanget den. Nivå 3 hviler på gate-kvalitet; systemet mangler i dag mekanismer som gjør gates aktive (sjekkliste-spørsmål per gate, «vis meg reglene»-prompter, diff-mot-forrige-revisjon).
**Muliggjør dagens design nivå 4 for app-factory? Ikke ennå.** Nivå 4 krever at aggregatoren kan stole på signalene uten å lese artefaktene. I dag: state-eksport udesignet (alignment-brief Funn 2 åpen), `phase_status`-semantikk villedende (R-06), attention-vokabular udefinert i praksis, `session.next_action` er prosa. En app-factory bygget på dagens state.json ville tatt feil beslutninger om «hvilken app trenger meg» — f.eks. lest Akashic som «fase 7 complete».
**Hva som mangler for å klatre (konkret, i re-planens rekkefølge):** (1) reell round-trip → første I/V-datapunkt (B1); (2) brief-validator + state-schema → maskinsjekkbare kontrakter (C2/D2/D3); (3) Voyage-retur-ingest → lukker V→R-loopen på app-nivå (parkert til første retur, se Ambisiøse utvidelser D); (4) friksjon→systemforbedring-disiplinen håndhevet (R-08 viser at loopen henger; b59928b viser lærdom som ble patch-notat, ikke mekanisme); (5) aktive gate-sjekklister. Invarianten «ingen autonome loops uten human-in-the-loop» er respektert i alt over — nivå 4 *muliggjøres* av eksport-kvalitet, ikke av at app-creator selv kjører autonomt.
---
## Akse 4 — Plan-fullstendighet og manglende features
`docs/roadmap.md` er 43 linjer; null avkryssede bokser; ingen sesjonskø. Re-planen (Del 2) bygger køen fra grunnen. Hull som må inn i planen, utover roadmapens egne punkter:
1. **Premiss-vedlikehold har ingen plass i roadmapen.** Ingen mekanisme fanger at Voyage flytter seg (R-01/R-02 lå uoppdaget i ~8 uker). → A-fasen + «kontrakt-resync»-sjekk som fast innslag i STATE-ens NESTE-blokk ved lengre pauser.
2. **Brief-generatoren** trenger mer enn «riktig frontmatter» (roadmap:37): målversjon 2.2, framing-avledning, TL;DR-generering, `phase_signals`-strategi, stripping-/plasseringsregel for interne felter og revisjonslogg (R-07), handover-mekanikk for `project_dir` (R-03), og en validator å testes mot (D2).
3. **`state.json`-schema** (roadmap nevner eksport, ikke schema): JSON Schema + `"schema"`-felt + validator + semantikk-fiks for fase 7 (R-06). Alignment-brief Funn 2 gir felt-listen aggregatoren trenger.
4. **Per-app HTML**: rendering-listen finnes (CLAUDE.md:50-56), men drill-down må redefineres (R-01), attention-heuristikkene er ulåst (`:1067`), polling er upraktisert (Akse 3.7), og Akashic `index.html` bør høstes som de facto prototype.
5. **App-state-eksport til app-factory er udesignet i det hele tatt** — bekreftet; eneste spec er ønskelisten i alignment-brief:91-97.
6. **Levende arkitektur-fil / Voyage-retur-ingest**: `voyage_run.md` «skrives av state-eksport» (`:188`) — en mekanisme som ikke finnes noe sted. Kan ikke designes empirisk før første Voyage-retur; planlegg observasjon, ikke spekulasjon.
7. **Backtracking-propagering** `[åpent]` (`:1063`): korrekt holdt åpent; planlegg en observasjons-sesjon ved første reelle backtrack i stedet for design nå.
8. **Versjonering av app-creator selv**: repoet er ikke en plugin ennå (ingen `plugin.json`); implementeringsfasen må definere plugin-identitet, versjonssync-disiplin (jf. R-12) og CHANGELOG-vedlikehold (R-17).
9. **Domain-pack-versjonsdrift**: iOS 27-reverifisering ~sept 2026 (pack-ens egen prognose, nå web-bekreftet); pack-lint (utvidelse B under).
10. **`claude-code-plugin`-packen** er ærlig merket stub (`pack.json:22`) men er samtidig eneste forsvar mot n=1-generaliseringen — se Akse 5 for billigste mottiltak; planen må eksplisitt si om den er i eller ute av v1.0.0.
11. **Forgejo-remote** (R-18/M11): operatør-steg; per global konvensjon skal repoet ligge på Forgejo, aldri GitHub.
12. **Multi-platform** `[åpent]` (`:1075`): hold eksplisitt utenfor v1.0.0.
13. **v0.4.0-definisjons-synk** mot app-factory (R-19).
### Ambisiøse utvidelser (utover godkjent scope) — FORSLAG, flettes ikke inn uten operatør-godkjenning
Hver testet mot scope-testen i `CLAUDE.md` § Arbeidsregler 5: (i) per-app-disiplin? (ii) hører i en av de syv fasene eller per-app HTML? (iii) tjener reell friksjon?
**A. `validate-brief.mjs` — egen Handover 1-validator som pre-handover-gate i fase 7.** Kost: SM (én sesjon, TDD; kontrakten er presist dokumentert). Scope-test: (i) ja — per-brief-disiplin i fase 7; (ii) ja — fase 7; (iii) ja — R-02/R-03/R-04 er nettopp friksjonen den fanger. **PASS.** Sterkeste kandidat; allerede innarbeidet som D2 i re-planen (fjernes derfra hvis operatør avviser).
**B. `check-pack.mjs` — pack-lint** (components↔disk-konsistens, `verified`-alder-flagg, versjon↔changelog-samsvar). Kost: S. Scope-test: (i) delvis — det er pakke-forfatter-disiplin, ikke app-disiplin; (ii) indirekte (pakkene konsumeres av fase 1/37); (iii) ja — R-12 er dokumentert friksjon. **PASS med anmerkning** om at det er verktøy for pack-vedlikeholdet, ikke pipelinen.
**C. Annotasjons-eksport til committet fil** — utvid den *vendorede* annotate-kopien (forutsetter Akse 3.1-beslutningen) med «Export annotations» til f.eks. `<artefakt>.annotations.md`, slik at audit-trail overlever localStorage og revisjonslogg kan flyttes ut av kontraktsfila (R-07). Kost: M. Scope-test: (i) ja; (ii) ja — review-gate/per-app HTML; (iii) ja — R-07 + Akse 3.5. **PASS**, betinget av vendoring-beslutningen. NB: modifiserer vendored kopi, aldri Voyage.
**D. Voyage-retur-ingest** (les `progress.json`/`review.md` fra `voyage_run_dir``voyage_run_status` + attention). Scope-test: (i) ja; (ii) ja — fase 7/HTML; (iii) **nei — ingen Voyage-run har returnert; friksjonen er hypotetisk.** **FAIL i dag.** Parkeres til første retur (da blir den trolig obligatorisk, ikke ambisiøs).
**E. Friksjon-capture som sesjonsslutt-gate** («har sesjonen produsert friksjon? → friksjon.md før commit»). Scope-test: (iii) ja — R-08 er beviset. Men (i)/(ii): dette er en *kontinuitetssystem*-utvidelse, og global konvensjon krever at slike utvides globalt, ikke lokalt per repo. **FAIL som app-creator-feature**; noteres som forslag til operatørens globale system.
---
## Akse 5 — Prototypens bevisverdi
**1. Dekning: fem av syv faser er kjørt — men bare langs den ene grenen.** Akashic kjørte full-variant fase 1, reell fase 2, 3, 5, 6 og 1/12 av fase 7 (`state.json:7-15`). Det som *aldri* er kjørt: **minimal-variant fase 1, rapid mode, skip av fase 2/5, fase 4-trigging** — altså hele default-stien i eskalerings-stigen (`phase-design-draft.md:16-25,163`). Designets deklarerte default («default er kort») er 100 % hypotese; kun eskaleringsgrenen har belegg. Det er ikke tilstrekkelig grunnlag for å låse *stige-modellen* i v0.4.0 — det er tilstrekkelig for å låse eskaleringsgrenens artefakt-kontrakter (som er det v0.4.0 faktisk trenger).
**2. Round-trip: aldri reell (R-04).** Risikoen for at fase 7-*formatet* er feil er lav (papir-PASS mot dokumentert kontrakt); risikoen for at fase 7-*prosessen* er feil er reell og udekket: project_dir-mekanikken (R-03), `research.md`-konsum-antakelsen (R-04), stripping-spørsmålet (R-07). Alle tre avgjøres av én reell kjøring.
**3. n=1-domene.** Systematisk blindsone: alt som er iOS-spesifikt kan ha lekket inn i det domene-nøytrale laget uten at noen merker det (spec-en er «domene-nøytral» kun på papir — `claude-code-plugin`-packen er en ukonsummert stub, `pack.json:22`). Billigste mottiltak, og det dekker to hull samtidig: **kjør én rapid mode-runde med `claude-code-plugin`-packen på en reell, liten plugin-oppgave** (forfatteren produserer plugins løpende). Én sesjon gir (a) første datapunkt på den utestede default-stien og (b) n=2-domene. Foreslått som egen sesjon i re-planen (B6).
**4. Friksjonsloggen som instrument: upålitelig i dagens tilstand (R-08).** Instrumentet er godt *når det føres*#1#15 er konkrete, daterte, med foreslåtte revisjoner. Men det føres ikke lenger: loggen har 0 entries etter 2026-05-14 tross 8 sesjoner med sterk empiri. En metode som hviler på «friksjons-data låser designet» (CLAUDE.md § Status) har da mistet målekjeden sin. Etterregistrering (A4) er mulig fordi Akashic state.json-loggen er uvanlig god — denne gangen. Disiplinen må inn i sesjonsprotokollen, ikke bero på flaks.
**5. Er Apple-portal-blokkeren en app-creator-blokker? Nei — og dette avgjør kritisk sti.** `/trekresearch` og `/trekplan` konsumerer filer og trenger verken signert build eller simulator (`HANDOVER-CONTRACTS.md` Handover 1/2). Round-trip-testen (roadmap-forutsetning #3) kan altså kjøres **nå**. Blokkeren gjelder først `/trekexecute` (bygg/test): simulator-runtime-installasjonen er et reelt operatør-steg; om App Groups-entitlement krever DEVELOPMENT_TEAM også for simulator-bygg er **ikke verifisert** — planlegges som eksplisitt sjekk i B7. Konsekvens: prototypens gjenstående verdi hentes i rekkefølgen round-trip → briefer → execute, med portal-stegene parallelt — ikke som forutsetning for alt.
**Samlet dom over metoden:** Én manuell kjøring av én iOS-app har produsert *mer enn nok* friksjon til å revidere designet (15 nummererte punkter + 8 sesjoner ulogget empiri) — metoden virker. Men den har ikke produsert nok til å *låse* kontraktene: null Voyage-kjøringer, null default-sti-empiri, n=1-domene. Roadmapens egen formulering («låses når prototypen viser hva som faktisk fungerer», `roadmap.md:21`) er riktig standard; dagens tilstand oppfyller den ikke, og papir-PASS-retorikken (R-04) er den ene stedet repoet er i ferd med å lure seg selv.
---
## Verifiseringslogg
Nøkkelpåstand → kilde/kommando som bekrefter den (alle kjørt 2026-07-10):
| Påstand | Belegg |
|---|---|
| 25 commits, ingen remote, rent tre, 42 tracked filer | `git log --oneline \| wc -l` = 25; `git remote -v` → tom; `git status --short` → tom; `git ls-files \| wc -l` = 42 |
| Voyage gjeldende versjon 5.9.1 | `voyage/.claude-plugin/plugin.json:4`; `~/.claude/plugins/cache/ktg-plugin-marketplace/voyage/` inneholder 5.6.05.9.1 |
| Playground + Handover 8 + `/trekrevise` slettet i v5.0.0 (2026-05-12) | `voyage/CHANGELOG.md:499-505` (verbatim «Breaking … gone»); `ls voyage/playground/` → No such file or directory |
| annotate.mjs skriver kun `<input>.html`; ingen sidecar | `grep -n writeFileSync scripts/annotate.mjs` → linje 934 (én skriving, `:933` default `<input>.html`); `find akashic -name "*.review.md"` → 0 treff |
| Dokumentert annotate-sti død | `test -f ~/.claude/plugins/marketplaces/ktg-plugin-marketplace/plugins/voyage/scripts/annotate.mjs` → FINNES IKKE; fungerende: `…/cache/…/5.9.1/scripts/annotate.mjs` (41 368 B) |
| Handover 1: 2.2 gjeldende; framing/TL;DR kun ≥2.2; 2.0 gyldig (N-1); ukjente nøkler tolereres; Tier-2 navngitt | `voyage/docs/HANDOVER-CONTRACTS.md:13,44-105` (lest i sin helhet) |
| Voyages egen template emitterer 2.2 + framing + phase_signals + TL;DR | `voyage/templates/trekbrief-template.md:3,18,24,43` |
| F-001 rev 6 papir-PASS felt-for-felt | `akashic/features/01-sun-position/brief.md:1-27` mot kontraktstabellen `:60-84` (gjennomgang i R-02) |
| `project_dir` finnes ingen steder | `ls akashic/.claude/projects/` → No such file; `ls ~/.claude/projects/ \| grep sun-position` → 0 treff |
| Akashic-status: fase-tabell, 1/12, `voyage_running: 0` | `akashic/state.json:7-15,61-67` (lest i sin helhet) |
| Ordtellinger (1855/1317/1827/3535/4435/4523/641/5611) | `wc -w` på artefaktene i akashic-repoet |
| Snapshot fra 0.1.0, aldri re-materialisert | `akashic/00-context/domain-pack-ios-app.md:4-8` |
| Pack-versjonskaos (0.1.0/0.2.0/«0.2.1») | `ios-app/pack.json:4` = 0.2.0; `git show b59928b --stat` (endret 2 pack-filer, bumpet ikke manifest); `STATE.md:44`; `akashic/state.json:4,152` |
| Friksjonslogg stopper #15/S13 2026-05-14 | `prototype-run/friksjon.md:449-499` (lest i sin helhet); Akashic S14bS15: `state.json:88-94` |
| SESSION-*.local.md-filene finnes ikke; STATE-migrering | `find . -name "*.local.md"` → kun oppdragsfila; commits 8eb625f/c8e6aa5/b8a6a31 |
| iOS 26 gjeldende (26.5.2 stabil; 26.6 kun beta); iOS 27 WWDC juni 2026, GA offisielt «this fall» (sept = presse-estimat) | WebSearch: [Apple Newsroom](https://www.apple.com/newsroom/2026/06/apple-unveils-next-generation-of-apple-intelligence-siri-ai-and-more/), [TechCrunch WWDC 2026](https://techcrunch.com/2026/06/09/wwdc-2026-everything-announced-on-siri-ai-os-27-apple-intelligence-and-more/), [Tom's Guide](https://www.tomsguide.com/phones/iphones/ios-27-is-official-all-the-new-upgrades-and-features-announced-at-wwdc-2026); kryssbekreftet av research-agent (Wikipedia iOS 26, support.apple.com/100100) |
| App Store-byggekrav Xcode 26+/iOS 26 SDK siden 2026-04-28 (bekrefter `pack.json:10`); privacy-manifest-krav 2024-05-01 + SDK-utvidelse 2025-02-12 | Research-agent: [Apple Upcoming Requirements](https://developer.apple.com/news/upcoming-requirements/), [Apple privacy-manifest-doc](https://developer.apple.com/documentation/bundleresources/adding-a-privacy-manifest-to-your-app-or-third-party-sdk) |
| Xcode 26.6 siste stabile (2026-06-25) | [Apple Developer Releases](https://developer.apple.com/news/releases/?id=06252026a), [xcodereleases.com](https://xcodereleases.com/) |
| MASVS 2.1.0 fortsatt gjeldende | [mas.owasp.org/MASVS](https://mas.owasp.org/MASVS/), [GitHub OWASP/masvs](https://github.com/OWASP/masvs) |
| WCAG 2.2 gjeldende Rec (ISO/IEC 40500:2025); 3.0 = WD, Rec ~2029 | [W3C TR WCAG22](https://www.w3.org/TR/WCAG22/), [W3C WAI-oversikt](https://www.w3.org/WAI/standards-guidelines/wcag/) |
**Ikke verifisert (eksplisitt):** (a) Om App Groups-entitlement krever `DEVELOPMENT_TEAM` for simulator-bygg — planlagt sjekk i B7. (b) Voyages faktiske adferd overfor en produsent-levert `research.md` — avgjøres av B1. (c) Nøyaktig hvilken CC-versjonsendring som flyttet plugin-stien fra `marketplaces/` til `cache/` — irrelevant for fiksen, ikke undersøkt. (d) Fire Opus-subagenter ble spawnet for bredde-sveip (Voyage-historikk, app-factory, Akashic, ekstern versjonering). Kun versjonerings-agenten leverte rapport (etter førsteutkastet av dette dokumentet); den **kryssbekreftet samtlige eksterne versjonspåstander uten motsigelser** og bidro med presisjonene om iOS 26.5.2/26.6-beta, «this fall» og SDK-byggekravet (flettet inn over). De tre øvrige avsluttet uten leverte funn. **Alle påstander i dette dokumentet er uansett verifisert direkte av hovedsesjonen** med kommandoene/kildene over.