app-creator/docs/masterplan.md
Kjell Tore Guttormsen 3e60e2bed1 docs(a3): lukk A3 — Akashic-halvdel committet (bd38b23), logg override-drift-friksjon #19
Akashic-instansen utforte og committet sin halvdel av A3 (commit bd38b23
+ d39b7b8). Verifisert direkte mot deres repo: pin-inventar matcher
eksakt det de rapporterte (6x0.1.0 historisk, 1x0.2.0 bootstrap-markor,
6x0.2.2 live, sum 13). A3 lukket pa begge sider.

To feil i vart eget arbeid denne A3-runden, funnet og bekreftet av
Akashic: (1) det faktiske hoppet var 0.1.0 -> 0.2.2, ikke 0.2.1 -> 0.2.2
-- live-pinsene var aldri oppdatert forbi forste materialisering. (2)
snapshotets pack-kilde-felt pekte pa en slettet plugin-marketplace-sti.
Begge dokumentert i masterplan.md § A3 med korrekt framstilling.

Nytt friksjonsfunn logget som #19: snapshot-overrides kan drive fra
pack-overrides.md uavhengig av pack-versjon -- en ren versjonssammen-
ligning fanger det ikke, siden override-dokumentet ikke er del av
pakken. To spec-revisjonsretninger skissert, ingen valgt (kandidat
D-fase eller B2).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XpFPJDg8XKNxSHxH9uxGZr
2026-08-11 21:27:02 +02:00

375 lines
39 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.

# Masterplan: app-creator → v1.0.0
**Forfattet av:** Fable 5 (xhigh), 2026-07-10, som Del 2 av kryssmodell-review-oppdraget. **Status: AKTIV** — promotert av operatør 2026-07-10. Levert som `docs/replan-proposed.md`; `docs/review-2026-07.md` refererer planen under det navnet. Funn-grunnlag: `docs/review-2026-07.md`.
**Definition of done (v1.0.0, bindende ramme):** full fase-pipeline + per-app HTML + brief-generator + app-state-eksport. v0.4.0 (kontrakt-låsing, `docs/roadmap.md:19-27`) er milepæl underveis. Prototypen (11 gjenstående briefer, Voyage-kjøringene, shipping av Akashic) er **del av planen**, ikke ekstern forutsetning. Nivå 3 fast; muliggjør nivå 4; ingen sesjon introduserer autonome loops uten human-in-the-loop.
**Repo-skille (gjelder hele planen):** app-creator-sesjoner skriver i `/Users/ktg/repos/app-creator`; Akashic-instans-arbeid skriver i `/Users/ktg/repos/akashic-intelligence` (etablert arbeidsform, jf. STATE); app-factory-endringer krever eksplisitt operatør-mandat (tidligere eksemplifisert ved A7, strøket 2026-08-11 — se § A7). **Voyage kjøres alltid av operatøren** — ingen sesjon eksekverer Voyage (invariant, `CLAUDE.md:71-75`).
---
## Endringslogg: review-funn → sesjoner
| Funn (review-2026-07.md) | Skaper/endrer |
|---|---|
| R-01 playground slettet, drill-down udefinert, døde Handover 8-refs | **Skaper A1** (dok-resync), **endrer E1** (drill-down redefineres før HTML-spec); app-factory-siden dekket av deres egen H0-1 (A7 strøket 2026-08-11) |
| R-02 brief_version 2.0-pin, forsvars-hull, stale verifikasjon | **Skaper A5** (2.2-design), **endrer B1** (round-trip på 2.2), **endrer D4** (generator-mål) |
| R-03 `How to continue`/project_dir brutt | **Endrer A5 + B1** (handover-mekanikk eksplisitt + testes) |
| R-04 round-trip aldri reell; research.md-antakelse | **Skaper B1** som tidligste prototype-sesjon, foran all videre brief-produksjon |
| R-05 review-gate på ukontraktfestet intern fil; død sti | **Endrer A1** (sti-fiks), **skaper D7** (vendoring-beslutning) |
| R-06 phase_status/attention-sprawl; fase 7-semantikk | **Skaper C2** (schema-design), **D3** (validator), **endrer A1** (enum-samling) |
| R-07 lengdegrenser motbevist; revisjonslogg i kontraktsfila | **Skaper A2** (tabell + plasseringsbeslutning), **endrer B3B5** (brief-konvensjon) |
| R-08 friksjonslogg 8 sesjoner bak | **Skaper A4** (etterregistrering), **endrer alle B-sesjoner** (friksjonsføring i exit-kriteriene) |
| R-09 forbudt flersesjons-mønster i normativ tekst | **Endrer A1** |
| R-12 pack-versjonskaos, stale snapshot | **Skaper A3** |
| R-13 iOS 18/19-eksempler; WCAG 2.1/2.2-sprik; iOS 27-drift | **Endrer A1**; **skaper vedlikeholds-oppføring V1** (pack-reverifisering ved iOS 27) |
| R-16 asymmetri-formulering usann | **Endrer A1** |
| R-18/M11 ingen remote | **Skaper A6** (operatør) |
| R-19 v0.4.0-definisjons-drift | **Endrer C3**; app-factory-siden dekket av deres egen H0-1 (A7 strøket 2026-08-11) |
| Akse 5.1 default-sti utestet; n=1 | **Skaper B6** (rapid mode × claude-code-plugin-pack) |
| Akse 5.5 portal ikke round-trip-blokker | **Endrer kritisk sti**: B1 foran B7; B7 gater kun B8+ |
| Akse 3.5 localStorage-varighet | **Endrer A2** (plasseringsbeslutning) + **D7** (eksport-utvidelse, betinget godkjenning) |
| Fem-nivå-vurderingen: passive gates | **Endrer B3B5** (aktiv gate-sjekkliste i fremgangsmåten) |
Ambisiøse utvidelser (review § Akse 4): A/validator er absorbert som **D2** (mandatets minimumsliste krever den); B/pack-lint ligger som **valgfri D8**; C/annotasjons-eksport er betinget del av **D7**; D/retur-ingest er parkert til første Voyage-retur (blir da del av F1); E/friksjon-gate er henvist til operatørens globale system.
---
## Masterplan-kø
Én oppføring ≈ én sesjon. Størrelse S/M/L. **[OPERATØR]** = manuelt operatør-steg, ikke Opus-eksekverbart. Design-/prototype-sesjoner: Iron Law gjelder ikke, men verifiserbare exit-kriterier gjelder alltid. Kode-sesjoner (D/E/F): failing test først.
### Fase A — Premiss-opprydding og kontrakt-resync
---
**A1 — Dok-resync av app-creator mot verifisert virkelighet** · **M**
- **Mål:** Fjerne alle utdaterte/usanne premisser fra normativ tekst, med review-2026-07.md som fasit.
- **Scope-grense:** Ingen nye design-beslutninger (de hører i A2/A5); ingen endringer i `domain-packs/**` (A3) eller andre repos.
- **Avhengigheter:** Ingen. Operatør har godkjent denne planen.
- **Filer:** `CLAUDE.md`, `README.md`, `CHANGELOG.md`, `docs/phase-design-draft.md`, `docs/roadmap.md`, `prototype-run/README.md`.
- **Fremgangsmåte:** Applisér funn-for-funn: (1) R-01: merk «v4.3 Plugin Playground» historisk i CLAUDE.md:24,30,56,58,84 / README:19 / CHANGELOG:12-13; omformuler drill-down i roadmap:25,38 til «drill-down til feature-ens Voyage-run-artefakter (voyage_run_dir) og annotate-HTML»; fjern Handover 8/`trekrevise` fra phase-design-draft:882,938 (behold annotate.mjs-beskrivelsen). (2) R-05: erstatt død sti i :865,:950 med cache-sti-regel. (3) R-09: omskriv § Flersesjons-protokoll (:83-89,:979) til STATE.md-konvensjonen; rett prototype-run/README-tabellen. (4) R-13/M5: rett iOS-eksempler :315,:386,:524,:625 til domene-nøytrale plassholdere; avklar WCAG 2.2 AA i CLAUDE.md:105. (5) R-14/M6: stryk fase 2-pack-input :423. (6) R-15/M9: redefiner max-3 («snapshot = én lasting»), rett fase 5-input :596. (7) R-16: omformuler CLAUDE.md:74. (8) R-06 (delvis): samle phase_status-enum i én tabell, legg til `pending-review` i frontmatter-enum :204. (9) R-17/M10: rett CHANGELOG:8 + ny Unreleased-entry for denne oppryddingen. (10) R-20: «6-tema» → «8-tema». (11) R-04: omformuler friksjon-#14-siteringer i draft der de fremstår som reell test (kun draft-tekst — friksjon.md er logg og røres ikke).
- **Nøkkelantakelser:** Review-funnenes linjenumre stemmer fortsatt (test: grep før hver edit).
- **Verifisering:** `grep -rn "Handover 8\|trekrevise" docs/ CLAUDE.md README.md` → 0 treff; `grep -n "iOS 19" docs/phase-design-draft.md` → 0; `grep -rn "NEXT-SESSION-PROMPT" docs/ prototype-run/README.md` → 0; `grep -c "pending-review" docs/phase-design-draft.md` ≥ frontmatter-forekomst; `grep -n "plugins/marketplaces" docs/` → 0; commit.
---
**A2 — Lengdegrense-tabell + revisjonslogg-plassering** · **S** · **[OPERATØR-beslutning inngår]**
- **Mål:** Erstatte flat 500-ordsgrense med friksjon-#14-tabellen og beslutte hvor revisjonshistorikk bor.
- **Scope-grense:** Ingen omskriving av eksisterende Akashic-artefakter (B-fasen tar F-001 ved B1).
- **Avhengigheter:** A1 (ren base).
- **Filer:** `docs/phase-design-draft.md` (§ Hard lengde-grense, § Fase 7, § Review-gate).
- **Fremgangsmåte:** Presentér operatøren for de tre plasserings-alternativene fra R-07 (a: `features/{NN}/revisions.md`-sidecar, b: context.md, c: strip ved handover; anbefaling a). Applisér valget + #14-tabellen (app-brief ~2000, research ~1500, arkitektur ~2000, constraints ~3500, features ~3000 skalert, fase 7 brief ~750/context ~650/research ~600; unntak uendret).
- **Verifisering:** `grep -n "≤500 ord eller én skjerm" docs/phase-design-draft.md` → 0 treff; tabellen til stede; beslutning + begrunnelse nedfelt i § Fase 7; commit.
---
**A3 — Pack-versjonsreparasjon + Akashic-resync** · **M** · *(cross-repo: Akashic)* · **✅ LUKKET 2026-08-11 (begge halvdeler)**
**Akashic-halvdelen committet:** `bd38b23` (+ `d39b7b8`, STATE.md-oppsett), 2026-08-11T19:19. Verifisert herfra mot deres repo — sluttilstand matcher eksakt det de rapporterte: `ios-app@0.1.0` → 6 treff (historiske, frosne fase-briefer), `ios-app@0.2.0` → 1 treff (`state.json:152`, bootstrap-markør — korrekt, ikke et avvik), `ios-app@0.2.2` → 6 treff (alle live). Sum 13, ingen pin tapt eller lagt til.
**To ting Akashic fant som app-creator-siden bommet på (verifisert, ikke bestridt):**
1. **Det faktiske hoppet var 0.1.0 → 0.2.2, ikke 0.2.1 → 0.2.2.** Alle live-pins sto fortsatt på `0.1.0` — de har ALDRI blitt oppdatert, ikke engang til 0.1.0→0.2.0 eller →0.2.1. Fremgangsmåten under (skrevet før dette var kjent) beskriver feilaktig et enkelt-patch-hopp; reelt var det snapshotets FØRSTE re-materialisering i repoets levetid, og steg 4 (overrides-kontroll) dermed en større jobb enn ordlyden antydet — snapshotet lå to minor- og to patch-bump bak.
2. **Pack-kilde-stien i snapshotet var død** (pekte på en slettet plugin-marketplace-sti). Rettet til `/Users/ktg/repos/app-creator/domain-packs/ios-app/` i re-materialiseringen. Verdt å sjekke om `domain-pack-spec.md:184-192`s snapshot-mekanikk bare kopierer materialiseringstidspunktets sti uten normalisering — samme dødlenke vil da oppstå igjen ved neste flytting. **Ikke undersøkt videre her — flagg for D5/D-fasen.**
**Ett bevisst avvik fra vår klassifisering, med god begrunnelse:** Vi merket `index.html:367` som historisk prosa-fotnote (la stå). Akashic oppdaterte den likevel — teksten («pack nå v0.2.0», «4 overrides, 2 åpne») var en present-tense påstand om levende tilstand i et operatør-dashboard, ikke en frossen genererings-markør, og var dessuten alt utdatert på det andre tallet. Reklassifiseringen holder; `01-app-brief.md:137` (som VI ba dem la stå) ble stående — den er inne i en frossen fase-brief med eksplisitt dato, altså genuint et tidspunkt-utsagn. Presedens for fremtidige pin-klassifiseringer: «present-tense dashboard-påstand» ≠ «frossen artefakt-markør», selv når begge er prosa.
**Substansielt friksjonsfunn fra deres steg 3 (logget `prototype-run/friksjon.md` #19):** Override-kontrollen fant at snapshotets override-markører (OVERRIDE-1, OVERRIDE-2) hadde drevet fra `pack-overrides.md` **uavhengig av pack-versjon** — begge sto som ÅPEN i snapshotet mens de var LUKKET i override-dokumentet siden 2026-05-13. En versjonssammenligning (pack X → pack Y) fanger ikke dette, fordi override-dokumentet ikke er en del av pakken. Steg 4s ordlyd («kontroller at pack-overrides fortsatt gjelder») er ikke presis nok — det må også kontrolleres at snapshotet *gjengir* overrides-status korrekt, ikke bare at reglene fortsatt *anvender seg*. Se friksjonsloggen for full drøfting; mulig spec-konsekvens for `domain-pack-spec.md` D5/materialiserings-mekanikken, ikke besluttet.
- **Mål:** Én sann pack-versjon (0.2.2) overalt; ferskt snapshot i Akashic.
- **Scope-grense:** Ingen innholdsendringer i pack-filene utover manifest/changelog; ingen re-verifisering mot iOS 27 (egen oppføring V1).
- **Avhengigheter:** Ingen (kan gå parallelt med A1/A2).
- **Pin-inventar (re-verifisert 2026-08-11, `grep -rn "ios-app@0\.[12]\.[0-9]" akashic-intelligence/` — full liste, ikke antatt):** 13 treff i 10 filer, som deler seg i to klasser per `domain-pack-spec.md:127` («Slik vet man alltid hvilken pack-versjon som genererte et gitt prosjekt — selv om pakken senere endrer seg»):
- **LIVE pins — skal oppdateres til `ios-app@0.2.2`** (5 av grep-treffene, pluss snapshotet som ikke matcher grep-mønsteret): `state.json:4` (`domain_pack`, app-nivå aktiv pekepinn), `app.md:6` (`domain_packs`), `features/01-sun-position/brief.md:21` (**aktiv** F-001-brief, revision 6, ikke kjørt gjennom Voyage ennå — i motsetning til de avsluttede fase-briefene under), `00-context/pack-overrides.md:3` (prosa-referanse — overrides skal fortsatt gjelde mot nytt snapshot, jf. steg 4), `index.html:162` (dashboard-visningstekst) — **6 filer totalt**, siste er `00-context/domain-pack-ios-app.md` (selve snapshotet; bruker eget `**Versjon:**`-felt, ikke `ios-app@`-strengen, derfor utenfor grep-treffet — aldri re-materialisert forbi 0.1.0).
- **Historiske pins — IKKE rør, permanent genererings-markør per design** (de resterende 8 grep-treffene, i 5 filer utover state.json/index.html over): `01-app-brief.md:6`, `01-app-brief.md:137`, `03-architecture-brief.md:6`, `05-constraints-brief.md:6`, `06-features-brief.md:6`, `02-research-briefs/01-sadhguru-copyright.md:6` (frontmatter `domain_pack`-felt i avsluttede fase-briefer — `phase_status: complete`/`revised` — registrerer hvilken pack-versjon som genererte DEN artefakten, ikke en aktiv pekepinn), `state.json:152` (`domain_pack_version_at_bootstrap` — eksplisitt et engangs-tidsstempel for Xcode-bootstrap/S15, ikke ment å følge senere pack-bumps), `index.html:367` (prosa-fotnote, allerede selv formulert historisk — «pack nå v0.2.0»).
- Tidligere versjoner av denne planen instruerte kun 3 filer (state.json, én brief-frontmatter, app.md) og hadde en verifiseringslinje (`grep "ios-app@0.1.0" → 0 treff`) som var **feil** — den ville aldri kunne bli sann, siden 7 av de 8 historiske pinene legitimt forblir `0.1.0` for alltid (den åttende, `state.json:152`, forblir `0.2.0` — begge korrekte, ulike bootstrap-tidspunkt). Rettet her; korreksjon sendt til Akashic 2026-08-11 (coord-melding, deres innboks var fortsatt uhåndtert).
- **Filer:** `domain-packs/ios-app/pack.json` (app-creator); de 6 LIVE-filene over (akashic-intelligence). De historiske pinene røres ikke.
- **Fremgangsmåte:** (1) pack.json `version` → 0.2.1 (commit `4f152c7`, MCP-gotcha-changelog) → **0.2.2** (commit `a0854a6`, 2026-08-11: verified.against-drift-fix, egen liten oppføring — se § verified.against nedenfor). Begge patch (D5). (2) Re-materialiser Akashic-snapshotet (`00-context/domain-pack-ios-app.md`) fra **0.2.2** per den LÅSTE mekanikken (`domain-pack-spec.md:184-192`), inkl. korrekt kilde-sti — dette er snapshotets FØRSTE re-materialisering noensinne (står fortsatt på 0.1.0 fra 2026-05-13). (3) Oppdater kun de 6 LIVE-pinene (se over) til `ios-app@0.2.2`. (4) Kontroller at pack-overrides fortsatt gjelder mot nytt snapshot.
- **Nøkkelantakelser:** b59928b var eneste umanifesterte endring (test: `git log --oneline -- domain-packs/ios-app/` og diff 0.2.0-tag-punkt→HEAD).
- **Verifisering:** `grep '"version"' domain-packs/ios-app/pack.json` → 0.2.2; `head -6 akashic…/00-context/domain-pack-ios-app.md` viser 0.2.2 + ny dato; alle 6 LIVE-filene viser `ios-app@0.2.2`; de 8 historiske pinene (5 rene historie-filer + `state.json:152` + `index.html:367`) er **uendret** (fortsatt `0.1.0`/`0.2.0` — dette er korrekt, ikke et avvik); begge repo committet.
---
**A4 — Friksjon #16+ etterregistrering** · **S**
- **Mål:** Gjenopprette friksjonsloggen som pålitelig instrument før neste design-revisjon.
- **Scope-grense:** Kun etterregistrering (kilder: Akashic state.json S14S15-loggen, git-historikk, review R-08); ingen nye design-forslag utover det kildene bærer.
- **Avhengigheter:** Ingen.
- **Filer:** `prototype-run/friksjon.md` (append).
- **Fremgangsmåte:** Skriv minst: #16 passiv-gate-svikten (S14e: retroaktiv 0-annotasjons-review godkjente faktafeil; aktiv operatør-spørring fanget den) med foreslått revisjon (aktiv gate-sjekkliste); #17 revisjonslogg-eksplosjonen (brief.md 743→4523 ord over 6 revisjoner; kobling til A2-beslutningen); #18 versjonsdisiplin-brudd (b59928b; kobling til A3 og evt. pack-lint D8). Dater ærlig: «observert S14/S15, etterregistrert 2026-07-XX».
- **Verifisering:** `grep -c "^## #1[678]" prototype-run/friksjon.md` = 3; hver entry har Fase/Type/Observert/Beskrivelse/Foreslått revisjon; commit.
---
**A5 — Fase 7-kontraktdesign: brief_version 2.2** · **M** · **[OPERATØR-beslutning inngår]**
- **Mål:** Omskrevet § Fase 7 som produserer 2.2-briefer og en eksplisitt handover-mekanikk.
- **Scope-grense:** Design i utkastet, ikke omskriving av F-001 (B1) og ikke generator-kode (D4).
- **Avhengigheter:** A1, A2, A4. Operatør bekrefter 2.2 som mål (anbefalt; alternativet — bli på 2.0 — betyr bevisst å stå utenfor framing-forsvaret og dokumenteres i så fall som risiko).
- **Filer:** `docs/phase-design-draft.md` (§ Fase 7).
- **Fremgangsmåte:** (1) Re-les `HANDOVER-CONTRACTS.md` § Handover 1 og `templates/trekbrief-template.md` FØRST (kontrakten kan ha flyttet seg siden 2026-07-10 — premiss-verifisering). (2) Oppdater frontmatter-blokken: `brief_version: "2.2"`, `framing` med avledningsregel (ny feature fra godkjent backlog → `preserve`; revidert feature → `refine`; operatør kan overstyre), `phase_signals`-strategi (generator setter liste, eller `phase_signals_partial: true` som ærlig fallback — begrunn valget), `## TL;DR`-regel (≤5 linjer, genereres fra task+Goal). (3) Definér handover-mekanikk (R-03): anbefalt loose-modus konsekvent (`--brief <sti>` for research og plan) ELLER dokumentert kopieringssteg til `{project_dir}`; rett `How to continue`-templaten. (4) Avklar `research.md`-rollen ærlig: merk som «konsum av Voyage IKKE verifisert — avgjøres i B1». (5) Ny verifikasjonsnote med dato + kontraktversjon.
- **Nøkkelantakelser:** Handover 1 er fortsatt 2.2 (test i steg 1); `phase_signals`-enum `[research, plan, execute, review]` × effort `[low, standard, high]` uendret (test: grep i kontrakten).
- **Verifisering:** `grep -n '"2.2"' docs/phase-design-draft.md` ≥1; `grep -n "framing" docs/phase-design-draft.md` viser avledningsregel; `grep -n "2\.0" docs/phase-design-draft.md` § Fase 7 → 0 normative treff; How-to-continue-templaten inneholder ikke `--project` uten kopieringssteg; commit.
---
**A6 — Forgejo-remote** · **S** · **[OPERATØR]**
- **Mål:** Repoet tracked på privat Forgejo (aldri GitHub).
- **Avhengigheter:** Ingen; bør skje tidlig (backup av 25 commits).
- **Operatør-steg:** Opprett repo på `git.fromaitochitta.com`. Deretter (sesjon eller operatør): `git remote add origin <forgejo-url>` + `git push -u origin main`.
- **Merk:** STATE.md forblir gitignored (privat remote ville tillatt tracking per konvensjon — operatørvalg; dagens `.gitignore`-linje beholdes til det er besluttet).
- **Verifisering:** `git remote -v` viser Forgejo-URL; `git status` viser `origin/main`-tracking; push uten feil.
---
**A7 — app-factory-brief-synk** · **[STRØKET 2026-08-11 — operatør-beslutning]** · *(cross-repo: app-factory)*
- **Opprinnelig mål:** app-factory-briefene sluttet å referere slettede Voyage-flater; v0.4.0-definisjonene identiske.
- **Hvorfor strøket:** app-factory utførte samme arbeid selv i sesjon H0-1 (2026-08-10, commit `954c99b`) — de identifiserte overlappet i sin egen review (`app-factory/docs/review-2026-07.md:74`: «app-creators uratifiserte A7-sesjon foreslår å gjøre deler av dette derfra — eierskapet må avklares (anbefaling: H0-1 eier det)») og anbefalte selv at H0-1 eier det. Varslet app-creator via coord-melding 2026-08-10; operatør besluttet å stryke A7 fremfor å redusere den til en kryss-sjekk-sesjon.
- **Re-verifisert herfra 2026-08-11:** `grep -rn "Handover 8\|v4\.3" app-factory/docs/` → samtlige treff er enten historisk-merket («flaten er slettet i Voyage v5.0.0», «v4.3-tiden») eller negerende («Ikke Handover 8», «Handover-settet er 17», «tidligere referanser … var feil og er fjernet»). Ingen normativ tekst hevder lenger v4.3/Handover 8 er gjeldende.
- **Konsekvens:** C3s avhengighet til A7 er innfridd via app-factory H0-1, ikke via en app-creator-sesjon (se C3). R-01/R-19 lukkes av samme arbeid.
### Fase B — Prototypen: reell round-trip, briefer, Voyage-kjøringer, shipping
---
**B1 — F-001: første reelle Voyage-round-trip** · **M** · **[OPERATØR kjører Voyage]** · *(cross-repo: Akashic)*
- **Mål:** Én app-creator-produsert brief konsumert av Voyage `/trekresearch` + `/trekplan` uten ad-hoc-reparasjon — roadmap-forutsetning #3 innfridd reelt.
- **Scope-grense:** IKKE `/trekexecute` (gates av B7); ingen nye feature-briefer.
- **Avhengigheter:** A5 (og A3 for korrekt pack-pin). **Krever IKKE Apple-portal/Xcode** (review Akse 5.5).
- **Filer:** `features/01-sun-position/brief.md` (oppgradering til 2.2 + revisjonslogg-flytting per A2-beslutning), evt. `revisions.md`; `state.json`; `prototype-run/friksjon.md` (app-creator-repo, ved funn).
- **Fremgangsmåte:** (1) Sesjon: oppgrader F-001 til 2.2 per A5 (framing, TL;DR, phase_signals, korrigert How-to-continue); flytt revisjonslogg per A2; review-gate på endringen (annotate via fungerende cache-sti). (2) **Operatør** kjører `/trekresearch` (AQ-001: NOAA-pakke vs egen impl) og deretter `/trekplan` per den korrigerte handover-mekanikken. (3) Sesjon: dokumentér utfallet — validator-respons, om `research.md` ble konsumert (lukker review-«Ikke verifisert (b)»), AQ-001-svar, plan-kvalitet; oppdater `voyage_run_dir`/status i state; friksjonsfør ALT som skurret.
- **Nøkkelantakelser:** (a) 2.2-brief passerer strict (test: selve kjøringen; ved avvisning er feilmeldingen funnet — logg og fiks). (b) Voyage leser produsent-levert research.md (test: observasjon i steg 2; ved nei: A5-designet justeres — merket risiko).
- **Verifisering:** Voyage-validator uten strict-halt (operatør-bekreftet output); `{project_dir}/plan.md` eksisterer; `state.json` viser `voyage_running: 1` eller research/plan-fase gjennomført; friksjon ført; begge repo committet.
---
**B2 — AQ-003-lukking + backlog rev 2 + revision-pending-lukkinger** · **S** · **[OPERATØR-beslutning inngår]** · *(cross-repo: Akashic)*
- **Mål:** Åpne tråder fra S14 lukket: AQ-003 (F-001 pre-fetch — alt. 1/2/3), app-brief § Omfang #6/#7, constraints § F6/F7-policy.
- **Avhengigheter:** Operatør-svar på AQ-003 (`state.json:111-114` har alternativene; AI-anbefaling der: 2 eller 3).
- **Fremgangsmåte:** Applisér valget i 06-features-brief (rev 2) med review-gate; lukk de to revision-pending-attention-postene (`state.json:117-127`) med små revisjoner av app-brief/constraints-brief; oppdater state.
- **Verifisering:** `state.json.attention` uten `decision-pending`/`revision-pending`-entries for disse; revisjons-logger oppdatert; commit.
---
**B3 — Fase 7-briefer: F-007 + F-002** · **M** · *(cross-repo: Akashic; operatør annoterer)*
**B4 — Fase 7-briefer: F-003 + F-004 + F-005** · **M** · *(dito)*
**B5 — Fase 7-briefer: resterende funksjonelle + F-T01T03** · **L, splittes ved behov (B5a/B5b)** · *(dito)*
- **Mål (felles):** Alle 12 features har operatør-godkjent `brief.md` (2.2) + `context.md` per validert B1-mønster.
- **Scope-grense:** Ingen Voyage-kjøringer i disse sesjonene; ingen template-endringer (avvik → friksjon + evt. A-fase-revisjon).
- **Avhengigheter:** B1 (validert mønster), B2 (stabil backlog). B3 før B4 før B5 (mønster-modning); innbyrdes uavhengig av B7/B8.
- **Fremgangsmåte (per feature):** Les 06-features-entry + relevante ADR/constraints/snapshot-utdrag; skriv brief.md + context.md innenfor A2-tabellen; **aktiv review-gate** (fra friksjon #16): annotate-HTML + eksplisitt sjekkliste til operatør («vis meg reglene»-spørsmål: er vindu-/domene-regler verifisert mot kilde? sporer Success Criteria til backlog-entry? er Non-Goals fullstendige?); applisér annotasjoner; friksjonsfør.
- **Nøkkelantakelser:** F-001-mønsteret generaliserer (test: første brief i B3 sammenlignes strukturelt mot F-001 rev 6 + validator-sjekk når D2 finnes — inntil da papir-sjekk mot kontrakt).
- **Verifisering:** `ls features/*/brief.md | wc -l` → 3 (B3) / 6 (B4) / 12 (B5); hver med `phase_status`-gate gjennomført (state.json per-feature-status per C2-semantikk når den finnes, inntil da feature_summary-tellere); ordtellinger innenfor A2-tabell eller flagget; commit per sesjon.
---
**B6 — Rapid mode × claude-code-plugin-pack: n=2-test** · **M** · *(egen instans-katalog, IKKE Akashic)*
- **Mål:** Første empiri på (a) den utestede default-stien (minimal app-brief → fase 7 direkte) og (b) domene-nøytralitet (n=2).
- **Scope-grense:** Én liten, reell plugin-oppgave fra operatørens faktiske behov; maks én feature-brief; ingen pack-utbygging utover det kjøringen krever (stub-hull dokumenteres som friksjon, tettes bare hvis kjøringen blokkeres).
- **Avhengigheter:** A1 (korrekt doc-base). Uavhengig av B1B5 — kan kjøres når som helst etter A-fasen.
- **Fremgangsmåte:** Operatør velger reell plugin-idé; kjør pre-pipeline init + minimal-variant fase 1 + rapid-mode-hopp til fase 7 per utkastet, med `claude-code-plugin`-packen; friksjonsfør hvert punkt der templater/pack er iOS-farget eller stub-hull stopper flyten.
- **Verifisering:** Instans-katalog med `app.md`, minimal `01-app-brief.md`, `state.json` (`mode: "rapid"`), én `features/01-*/brief.md`; ≥1 ny friksjons-entry om default-stien; commit.
---
**B7 — Xcode-miljø + Apple Developer Portal** · **M** · **[OPERATØR]**
- **Mål:** Bygg-miljøet klart for `/trekexecute`: simulator-runtime installert, portal-stegene (Team ID, Bundle ID + capabilities, App Group) fullført per `akashic…/00-context/apple-developer-portal-checklist.md` (8 steg).
- **Avhengigheter:** Ingen (kan gå parallelt med B1B5). Gater B8.
- **Eksplisitt verifikasjon som del av steget:** Test om simulator-bygg fungerer FØR portal-stegene er komplette (`xcodebuild build -scheme AkashicApp -destination 'generic/platform=iOS Simulator'`) — lukker review-«Ikke verifisert (a)» (App Groups-entitlement vs. tomt DEVELOPMENT_TEAM på sim).
- **Verifisering:** `xcodebuild build` → BUILD SUCCEEDED (sim); portal-checklistens 8 punkter avkrysset; Xcode-versjon notert (26.6+ per juli 2026).
---
**B8 — F-001 gjennom `/trekexecute` + `/trekreview`: pipelinen lukket ende-til-ende** · **M** · **[OPERATØR kjører Voyage]** · *(cross-repo: Akashic)*
- **Mål:** Første feature implementert og reviewet via Voyage — roadmap-forutsetning #1 innfridd; første I/V-datapunkt (fem-nivå-vurderingen).
- **Avhengigheter:** B1 (plan finnes), B7 (byggmiljø).
- **Fremgangsmåte:** Operatør kjører `/trekexecute` + `/trekreview`; sesjon etterpå: observér og dokumentér Voyage-retur-artefaktene (`progress.json`, `review.md` i `voyage_run_dir`) — dette er den empiriske inputen til retur-ingest-designet (parkert utvidelse D) og C2; oppdater feature-status + state; friksjonsfør.
- **Verifisering:** `{voyage_run_dir}/review.md` eksisterer; F-001-status `voyage-complete` (eller ærlig blocked-status med årsak); `state.json.feature_summary` oppdatert; friksjon ført; commit.
---
**B9B12 — Featurevis Voyage-syklus til ≥5 shipped** · **L (serie; ~1 kø-oppføring per 12 features)** · **[OPERATØR kjører Voyage]** · *(cross-repo: Akashic)*
- **Mål:** ≥5 features fra brief til ferdig (v0.4.0-boks 4, `roadmap.md:26`); Akashic reelt byggbar app.
- **Avhengigheter:** B8; briefer fra B3B5 etter dependency-grafen i 06-features-brief (F-001 → F-002/F-003 → …).
- **Mønster per syklus:** operatør: `/trekresearch?`+`/trekplan`+`/trekexecute`+`/trekreview` → sesjon: status-ingest, evt. backtrack-håndtering (første reelle backtrack = observasjons-sesjon for `[åpent]`-mekanikken, `phase-design-draft.md:1063`), friksjonsføring.
- **Verifisering (per syklus + samlet):** `state.json.feature_summary.shipped` teller; ved ≥5: boks 4 kan krysses. Commit per syklus.
---
**B13 — Pre-submission-sporet** · **M** · **[OPERATØR: Isha-brev, App Store Connect]** · *(cross-repo: Akashic)*
- **Mål:** Submission-forutsetningene lukket: Isha-forespørsel sendt (5.2.2-autorisasjon + AQ-004/Alt 5-spørsmålene, `state.json:129-133`), App Privacy re-screen («Data Not Collected»-posisjon), App Store-metadata per pack-scaffold.
- **Avhengigheter:** B9B12 (nær-ferdig app). Selve submission er operatør-milepæl utenfor sesjonskøen.
- **Verifisering:** attention-postene `action-pending`(pre-submission) lukket eller datert sendt; metadata-artefakter finnes; commit.
### Fase C — Konsolidering og kontrakt-låsing
---
**C1 — Friksjonssammenstilling + pre-brief** · **M**
- **Mål:** Roadmap-forutsetning #2 og #5: friksjons-data sammenstilt; pre-brief for implementeringen skrevet basert på observert mønster.
- **Avhengigheter:** A4, B1, B8 (+ løpende friksjon fra B-serien; trenger ikke ≥5 shipped).
- **Filer:** `docs/pre-brief.md` (ny; input til `/trekbrief` for D-fasen), `prototype-run/friksjon.md` (sammenstillings-seksjon).
- **Fremgangsmåte:** Destillér #1#18+ til: hva av utkastet er `[testet]`, hva ble `[justert]`, hva forblir `[hypotese]` (og hvorfor det er akseptabelt); skriv pre-brief med intent/goal/non-goals/constraints/success criteria for plugin-implementeringen — Voyage-kompatibel form slik at D-fasen kan startes med `/trekbrief`-disiplin om ønsket.
- **Verifisering:** `docs/pre-brief.md` finnes med de fem forutsetningene adressert punkt for punkt; roadmap-forutsetningene #1#5 kan krysses av (eller gjenstående eksplisitt datert); commit.
---
**C2 — state.json-schema + eksport-design** · **M**
- **Mål:** Dokumentert, versjonert schema for `state.json` og app-state-eksporten app-factory skal lese (alignment-brief Funn 2-feltene), med R-06-fiksene: `"schema"`-felt, samlet enum, per-feature fase 7-semantikk, attention-vokabular.
- **Scope-grense:** Design + JSON Schema-fil; validator-kode er D3.
- **Avhengigheter:** B8 (eksporten designes mot observert bruk, ikke hypotese — roadmap-forutsetning #4).
- **Filer:** `docs/state-schema.md` + `schemas/app-state.schema.json` (ny katalog).
- **Fremgangsmåte:** Modellér: identitet, per-fase status (kapabilitet-semantikk, jf. review Akse 3.3), feature_summary, per-feature status inkl. voyage_run_status-enum, attention (lukket type-enum: decision-pending/action-pending/revision-pending/environment-blocker/review-pending + definert `phase`-domene), session-felt, review_gate_history, implementation. Valider Akashic-instansen mot skjemaet på papir; avvik → normaliserings-liste.
- **Verifisering:** Skjemafilen parser (`node -e 'JSON.parse(...)'`); alle felter i dagens `akashic/state.json` er enten dekket eller eksplisitt avvist med migrasjonsnote; commit.
---
**C3 — Kontrakt-låsing + roadmap-oppdatering** · **S**
- **Mål:** Brief-handover-format erklært låst (v0.4.0-boks 1) og app-state-schema låst (boks 2); roadmap + alignment-synk oppdatert.
- **Avhengigheter:** B1 + minst tre reelle Voyage-konsumerte briefer (B8/B9-serien påbegynt), C1, C2. (A7 strøket 2026-08-11 — innfridd via app-factory H0-1, commit `954c99b`, ikke via en app-creator-sesjon.)
- **Verifisering:** roadmap-bokser 12 krysset med dato + commit-referanse; `phase-design-draft.md` § Fase 7 merket `[testet <dato> — reell round-trip]`; commit.
### Fase D — Implementering (plugin) — **gate: roadmap-forutsetningene #1#5 reelle (C1 bekrefter)**
Iron Law gjelder alle D-sesjoner: ingen produksjonskode uten feilende test først (`node --test`, zero deps).
---
**D1 — Plugin-skjelett + test-harness** · **M**
- **Mål:** `.claude-plugin/plugin.json` (navn/versjon 0.5.0-dev), katalogstruktur (commands/skills/scripts/schemas/domain-packs), `node --test`-oppsett med første røyk-test.
- **Avhengigheter:** C1 (pre-brief), C3.
- **TDD:** Failing test: `node --test` kjører og finner testkatalog; manifest-validering (plugin-validator) grønn.
- **Verifisering:** `node --test` → pass; plugin-validator uten feil; commit.
---
**D2 — `validate-brief.mjs`** · **M**
- **Mål:** Egen Handover 1-validator (målversjon 2.2) som pre-handover-gate — implementerer PUBLIC CONTRACT, kjører ikke Voyage-kode.
- **Avhengigheter:** D1; A5 (kontraktmål). **Premiss-sjekk først:** re-les HANDOVER-CONTRACTS for drift siden C3.
- **TDD:** Failing tests først: F-001 rev 6-fixture (2.0 → forventet pass m/advarsel om versjon under mål), syntetiske: manglende framing ved 2.2, topics>0∧skipped uten partial, nestet dict, manglende TL;DR, ugyldig phase_signals.
- **Filer:** `scripts/validate-brief.mjs`, `tests/validate-brief.test.mjs`, fixtures.
- **Verifisering:** `node --test` grønn; `node scripts/validate-brief.mjs akashic…/features/01-sun-position/brief.md` → exit 0; dokumentert i README-seksjon; commit.
---
**D3 — `validate-state.mjs`** · **M** — Avh: D1, C2. TDD mot `schemas/app-state.schema.json`; fixture: normalisert Akashic-state. Verifisering: `node scripts/validate-state.mjs akashic…/state.json` → exit 0 etter normalisering (normaliseringen av Akashic-instansen er del av sesjonen, cross-repo).
**D4 — Brief-generator (fase 7)** · **L** — Avh: D2. TDD: generator tar 06-features-entry + upstream-utdrag → brief.md+context.md som passerer D2 i strict; fixtures fra Akashic (F-007). Scope-grense: ingen interaktivitet utover det § Fase 7 spec-er; revisjonslogg per A2-beslutning. Verifisering: generert brief → `validate-brief.mjs` exit 0; diff mot håndskrevet F-007 vurdert i review-gate.
**D5 — init + snapshot-generator** · **M** — Avh: D1. TDD mot den LÅSTE materialiserings-mekanikken (`domain-pack-spec.md:184-192`); fixture: ios-app@0.2.1 → sammenlign strukturelt med Akashic-snapshotet. Verifisering: generert snapshot byte-diffes mot forventet struktur (H1/metadata/patterns-pekere/H2-per-core-fil/overrides-tabell).
**D6a/D6b/D6c — Fase-commands 12 / 3+5 / 6+readiness** · **M×3** — Avh: D1, D5. Hver: command/skill-tekst per phase-design-draft (som revidert i A-fasen), med review-gate-steg innebygd (aktiv sjekkliste fra friksjon #16); TDD for evt. skript-deler, prompt-artefakter verifiseres med tørrkjøring på fixture-app. Scope-grense: fase 4 implementeres IKKE som command (trigges-på-bruk-dokumentasjon holder til behovet oppstår — YAGNI).
**D7 — annotate-vendoring** · **S** · **[OPERATØR-beslutning]** — Avh: D1. Beslutning per review R-05/Akse 3.1: vendor kopi av annotate.mjs (opphav: voyage@<versjon>, resync-notat) slik at review-gaten ikke avhenger av Voyage-interne stier. Hvis utvidelse C (annotasjons-eksport til fil) godkjennes: legg til i den vendorede kopien med TDD. Verifisering: `node scripts/annotate.mjs <fixture.md>``<fixture>.html`; gate-dokumentasjonen peker på vendored sti.
**D8 (valgfri) — `check-pack.mjs`** · **S** — Kun hvis operatør godkjenner utvidelse B. TDD: components↔disk, verified-alder, versjon↔changelog. Verifisering: kjørt mot begge packs → 0 feil.
### Fase E — Per-app HTML
---
**E1 — HTML-spec** · **M** — Avh: C2 (state-schema er datakilden), A1 (drill-down-redefinisjon). Høst Akashic `index.html` (385 l) som prototype; spesifisér: rendering av alle artefakter, fase-progress med kapabilitet-semantikk, attention-liste, drill-down til `voyage_run_dir`-artefakter + annotate-HTML, polling-design (intervall, re-render-guard), theme-bootstrap, WCAG 2.2 AA. Verifisering: spec-dokument med eksplisitt DOM-datakontrakt mot `app-state.schema.json`; operatør-godkjent.
**E2 — HTML-implementasjon** · **L** — Avh: E1, D1. TDD der logikk er testbar (state→DOM-transformasjoner som rene funksjoner testet i node); single-file, vendored DS, zero deps. Verifisering: åpne mot Akashic-instansen via `file://` → alle artefakter rendret, attention synlig, polling observert (endre state.json → UI oppdatert <30s); `node --test` grønn.
**E3 — HTML-verifisering + Akashic-adopsjon** · **S** · *(cross-repo)* — Kontrast-sjekk begge tema (WCAG 2.2 AA), erstatt/suppler statisk index.html i Akashic. Verifisering: kontrastverdier dokumentert; Akashic-commit.
### Fase F — Eksport og v1.0.0
---
**F1 — App-state-eksport + Voyage-retur-ingest** · **M** — Avh: C2, D3, B8 (observerte retur-artefakter). Implementér eksport-skriving (om eksporten er state.json selv eller derivat avgjøres i C2) + ingest av `progress.json`/`review.md``voyage_run_status`/attention (utvidelse D, nå empirisk fundert). TDD. Verifisering: `validate-state.mjs` exit 0 på eksport; papir-test: alignment-brief Funn 2-spørsmålene besvarbare fra eksporten alene.
**F2 — v0.4.0-erklæring** · **S** — Avh: alle fem roadmap-bokser reelle (C3: 12; E2/E3: 3; B9B12: 4; C1: 5). Verifisering: roadmap alle bokser krysset m/dato; CHANGELOG-entry; tag `v0.4.0`; push.
**F3 — v1.0.0** · **M** — Avh: F1, F2 + at DoD-en (pipeline + HTML + generator + eksport) er verifisert i bruk på Akashic. Versjonssync (plugin.json, README, CHANGELOG), lisensvalg (README:38 «TBD»), tag, push. Verifisering: `git tag` viser v1.0.0; alle versjonsreferanser konsistente (grep); Forgejo viser taggen.
### Vedlikeholds-oppføringer (utenfor sekvensen)
**V1 — ios-app-pack reverifisering ved iOS 27-GA (~sept 2026)** · **S** — conventions/gotchas/checklists/pack.json `verified` mot iOS 27 + ny Xcode; bump per D5-reglene i spec-en.
---
## Avhengighetsgraf
```mermaid
graph TD
A1[A1 dok-resync] --> A2[A2 lengde+revlogg]
A1 --> A5[A5 fase7 2.2-design]
A2 --> A5
A4[A4 friksjon 16-18] --> A5
A3[A3 pack 0.2.1 + resync] --> B1
A5 --> B1[B1 F-001 round-trip ⚙]
A6[A6 Forgejo ⚙]
B1 --> B3[B3 F-007+F-002]
B2[B2 AQ-003 ⚙] --> B3
B3 --> B4[B4 F-003..005] --> B5[B5 rest+F-T]
A1 --> B6[B6 rapid×plugin-pack]
B7[B7 Xcode+portal ⚙] --> B8
B1 --> B8[B8 F-001 execute+review ⚙]
B8 --> B9[B9B12 sykluser til ≥5 shipped ⚙] --> B13[B13 pre-submission ⚙]
A4 --> C1
B1 --> C1[C1 friksjon+pre-brief]
B8 --> C1
B8 --> C2[C2 state-schema]
C1 --> C3[C3 kontrakt-låsing]
C2 --> C3
C1 --> D1[D1 plugin-skjelett]
C3 --> D1
D1 --> D2[D2 validate-brief] --> D4[D4 brief-generator]
C2 --> D3[D3 validate-state]
D1 --> D3
D1 --> D5[D5 init+snapshot] --> D6[D6a-c fase-commands]
D1 --> D7[D7 annotate-vendoring ⚙]
C2 --> E1[E1 HTML-spec] --> E2[E2 HTML-impl] --> E3[E3 verif+adopsjon]
D1 --> E2
C2 --> F1[F1 eksport+ingest]
D3 --> F1
B8 --> F1
C3 --> F2[F2 v0.4.0]
E3 --> F2
B9 --> F2
C1 --> F2
F1 --> F3[F3 v1.0.0]
F2 --> F3
```
⚙ = inneholder manuelt operatør-steg.
## Anbefalt sesjonssekvens
**Sprint 1 (opprydding, alt Opus-eksekverbart):** A1 → A2 → A3 → A4 → A5. Parallelt: **A6 [operatør]** når som helst. (A7 strøket 2026-08-11 — app-factory dekket den selv i H0-1.) Begrunnelse: ingenting annet bør bygges på premisser reviewen har felt; A-fasen er billig og fjerner all kjent råte.
**Sprint 2 (bevis før volum):** B1 (med operatørens Voyage-kjøring) → B2 → B3. Begrunnelse: én reell round-trip *før* 11 briefer skrives — hvis kjøringen feller deler av A5-designet, arver ikke briefene feilen. B6 kan flettes inn hvor som helst her (uavhengig spor, gir n=2 + default-sti-empiri billig). **B7 [operatør]** startes parallelt med B3 — den gater bare B8, ikke brief-skrivingen.
**Sprint 3 (to parallelle spor):** *Brief-sporet* B4 → B5 (Opus + operatør-gates) parallelt med *bygge-sporet* B8 → B9… (operatør-tungt). Sporene serialiseres kun der en Voyage-review tvinger backtrack inn i backloggen.
**Sprint 4 (konsolidering):** C1 → C2 → C3 så snart B8 + ~3 konsumerte briefer foreligger — venter ikke på ≥5 shipped (shipping-sporet fortsetter parallelt).
**Sprint 5+ (bygging):** D1 → {D2, D3, D5} → D4 → D6a-c → D7/D8; deretter E1 → E2 → E3; F1. F2 erklæres når shipping-sporet når ≥5; F3 til slutt. Begrunnelse: D/E bygger mot kontrakter som C-fasen har låst mot reelle data; HTML (E) sist av byggefasene fordi den konsumerer state-skjemaet og drill-down-artefakter som først da finnes.
## Kritisk sti (manuelle operatør-blokkere markert)
```
A1 → A5 → B1[⚙ operatør kjører /trekresearch+/trekplan]
→ B8[⚙ B7: Xcode-komponentinstall + Apple-portal (8 steg) MÅ være ferdig]
→ C1/C2 → C3 → D1 → D2 → D4 → E1 → E2 → F1 → F2[⚙ ≥5 shipped via B9B12-sykluser] → F3
```
De harde operatør-blokkerne, i rekkefølge: (1) **Voyage-kjøringene** (B1, B8, B9B12) — per invariant kan ingen sesjon kjøre dem; (2) **Xcode/portal** (B7) — eneste blokker for execute-leddet, IKKE for round-trip; (3) **Forgejo-repo** (A6) — gater ingen sesjon, men backup-risiko løper til den er gjort; (4) **beslutningene** A2 (revisjonslogg-plassering), A5 (2.2-mål), AQ-003 (B2), D7 (vendoring); (5) **Isha-forespørsel + App Store-submission** (B13) — gater kun submission-milepælen. Lengste ledetid er B9B12 (≥5 features × full Voyage-syklus + operatør-review); den bør startes så tidlig som B8 tillater og løpe parallelt med C/D/E — det er derfor F2, ikke D/E, som til slutt venter på den.