From 306bf084528d0a19dc44a9e49b395767c5070b3b Mon Sep 17 00:00:00 2001 From: Sterister Date: Thu, 9 Jul 2026 19:04:48 +0200 Subject: [PATCH] chore: adopter Scaffold plan-kontrakt Co-Authored-By: Claude Fable 5 --- .../android}/shade-android/ROADMAP-ANDROID.md | 0 {docs => .scaffold/archive/docs}/ROADMAP.md | 0 .scaffold/log.md | 13 +++++++++ .scaffold/plan.md | 27 +++++++++++++++++++ .scaffold/tasks.yaml | 17 ++++++++++++ CLAUDE.md | 4 +++ 6 files changed, 61 insertions(+) rename {android => .scaffold/archive/android}/shade-android/ROADMAP-ANDROID.md (100%) rename {docs => .scaffold/archive/docs}/ROADMAP.md (100%) create mode 100644 .scaffold/log.md create mode 100644 .scaffold/plan.md create mode 100644 .scaffold/tasks.yaml create mode 100644 CLAUDE.md diff --git a/android/shade-android/ROADMAP-ANDROID.md b/.scaffold/archive/android/shade-android/ROADMAP-ANDROID.md similarity index 100% rename from android/shade-android/ROADMAP-ANDROID.md rename to .scaffold/archive/android/shade-android/ROADMAP-ANDROID.md diff --git a/docs/ROADMAP.md b/.scaffold/archive/docs/ROADMAP.md similarity index 100% rename from docs/ROADMAP.md rename to .scaffold/archive/docs/ROADMAP.md diff --git a/.scaffold/log.md b/.scaffold/log.md new file mode 100644 index 0000000..ec34c1a --- /dev/null +++ b/.scaffold/log.md @@ -0,0 +1,13 @@ +# Logg — Shade + +## 2026-07-09 — Adoptert Scaffold plan-kontrakt +Migrerte `docs/ROADMAP.md` og `android/shade-android/ROADMAP-ANDROID.md` til `.scaffold/`: nåbildet destillert inn i `plan.md`, originalene arkivert under `.scaffold/archive/` med opprinnelig mappestruktur. Versjonsdesigndokumentene (`docs/V5.0.md`, `docs/archive/V*.md`) er bevisst latt stå — de er spesifikasjoner, ikke planfiler. + +## 2026-05-15 — v4.11: streaming Double-Ratchet sub-sessions +Siste post-GA-økning på 4.x-linjen: `ShadeStream` gir in-memory sub-sessions (seal/open uten keystore-I/O per frame) med nye wire-typer 0x31–0x33. Låst beslutning: stream-ratchets persisteres aldri — en droppet stream gjenåpnes, aldri gjenopptas. + +## 2026-05-09 — Android M-Cross 1–4 fullført + Keystore-adapter +All kryptografisk paritet TS↔Kotlin grønn via delte test-vektorer: KDF-kjede, HKDF-labels, X3DH, ratchet-steg, fingerprint, wire 0x02 og 0x11 (streams), backup-HKDF, group sender-keys og storage-HKDF. Etterslepet fra Android-roadmapen landet samme dag: scrypt + argon2id via Bouncy Castle og `shade-android-keystore`-modulen (hardware-backed master key + `KeystoreStorage`). Gjenstår: socket-interop-test og instrumenterte Keystore-tester. + +## 2026-05-03 — V4.0 GA: V3.x-konsolidering og audit-pakking +Alle fasene V3.1–V3.12 ferdige og merget: dokumentasjon/hardening, at-rest storage-kryptering, trust-UX, observability (OTel), Android-paritet, inbox (store-and-forward), transport-bridge, web workers-krypto, filmetadata, social key recovery, WebRTC P2P og key transparency. Wire-formatet låst — uendret fra 0.4.x, så 4.0-peers interopererer byte-for-byte med 0.4.x. Kjernen pakket for ekstern review. Låst beslutning: alt VOIP/video skilt ut til V5.0, bygget oppå den frosne 4.0-stacken via reserverte envelope-typer (ikke breaking). diff --git a/.scaffold/plan.md b/.scaffold/plan.md new file mode 100644 index 0000000..68f9608 --- /dev/null +++ b/.scaffold/plan.md @@ -0,0 +1,27 @@ +--- +project: "Shade" +phase: "Post-4.x GA — V5.0 (Voice & Video) i idéfase" +updated: 2026-07-09 +focus: "4.x-kjernen er GA-frosset og revisjonsklar; neste løft er V5.0 sanntid oppå den låste stacken" +blockers: [] +--- + +# Plan — Shade + +## Mål +- E2EE-bibliotek som implementerer Signal-protokollen (X3DH + Double Ratchet) for TypeScript/Bun — drop-in for frontend, backend og mobil, med forward secrecy og post-compromise recovery. +- Byte-for-byte kryssplattform-paritet: Kotlin/Android-porten verifiseres kontinuerlig mot TS-referansen via delte test-vektorer i `test-vectors/`. +- GA-frosset, revisjonsklar 4.0-kjerne som fundament; nye kapabiliteter (sanntid i V5.0) bygges oppå uten å røre kjernekrypto-revisjonen. + +## Nå +- [ ] V5.0 fra `Idea` til `Design`: designnotatet `docs/V5.0.md` (SFrame-style frame encryption, `@shade/voice` / `@shade/video` / `@shade/broadcast`) må modnes og godkjennes +- [ ] Ende-til-ende interop-test TS-server ↔ Kotlin-klient over ekte socket (anbefalt før «production»-label på Android) +- [ ] Instrumenterte tester for `KeystoreStorage` (krever Android-emulator/enhet — utsatt i v4.9/v4.10-porten) + +## Neste +- V5.0-implementasjon: `@shade/voice` (1:1 voice) → `@shade/video` → `@shade/broadcast` (1:N med relay-helper) +- «Production»-label på Android når interop-testen er grønn + +## Senere +- Re-pinne backup-vektoren når begge porter bytter til argon2id som passord-KDF (HKDF-placeholder flagget i threat-model; `deriveMasterKeyArgon2id` finnes allerede i Kotlin) +- Versjonsdesigndokumentene bor fortsatt i `docs/V5.0.md` og `docs/archive/V*.md` — de er spesifikasjoner, ikke planfiler diff --git a/.scaffold/tasks.yaml b/.scaffold/tasks.yaml new file mode 100644 index 0000000..f1148bf --- /dev/null +++ b/.scaffold/tasks.yaml @@ -0,0 +1,17 @@ +# Scaffold kanban-kort. Skjema per kort: +# - id: kort-slug # unik i fila +# title: "" +# description: "" +# status: todo # todo | doing | done | blocked +# column: todo # speiler status (kanban-kolonne) +# priority: medium # low | medium | high +# assignee: human # cursor | claude | human | any +# context: "" # valgfri: hvorfor/hvor i koden +# acceptance: "" # valgfri: hva «ferdig» betyr +# todos: +# - text: "Underoppgave" +# done: false +# created: 2026-07-09 +# updated: 2026-07-09 +# completed_at: null +tasks: [] diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..82c3acc --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,4 @@ +## Planlegging +Planen for dette prosjektet bor i `.scaffold/`: `plan.md` er nåbildet (hold den kort, +bump `updated` i frontmatter ved endring), `log.md` er append-only historikk (nyeste øverst), +`tasks.yaml` er kanban. Ikke opprett planfiler andre steder.