docs: STATUS.md auf Phase-9-Welle-3-Stand
Some checks are pending
CI / validate (push) Waiting to run
Some checks are pending
CI / validate (push) Waiting to run
24 Commits / 129 Tests / Phase 9 weit ausgebaut. Subtilität #11 (MinIO-Media-Storage, ObjectKey-Format <userId>/<ulid>.<ext>) und #12 (Image-Occlusion-Architektur, MaskRegion-Schema, Editor/View- Komponenten) ergänzt. MVP-Card-Set jetzt 4-mitgliedrig: basic, basic-reverse, cloze, image-occlusion. Lokal-Dev-Setup um Bucket- Container erweitert. Git-Historie + "Was als Nächstes" auf neuesten Stand — Phase 9 ist jetzt im Wesentlichen fertig, Image-Occlusion- Polish (Resize/Move) und weitere CardTypes (type-in, audio, mc) sind die nächsten autonomen Items. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
39b1791fb9
commit
04c48ed930
1 changed files with 59 additions and 21 deletions
80
STATUS.md
80
STATUS.md
|
|
@ -13,10 +13,10 @@ in 5 Minuten den vollen Kontext geben. Lies es vor allem anderen.
|
|||
Code-Übernahme aus dem alten `mana-monorepo`, sauber neu gebaut —
|
||||
mit einer dokumentierten Ausnahme für den Anki-Format-Parser
|
||||
(Phase 8c, standalone Parser-Logik).
|
||||
- **22 saubere Commits** auf `main`. Type-check 4/4 grün, **105 Tests
|
||||
grün** (51 Domain + 49 API + 5 Web), lokaler E2E-Smoke (Postgres →
|
||||
API → Frontend → Föderations-Endpunkte → Cloze-Card mit Hint →
|
||||
/stats → /me/export → /cards/hashes) durch.
|
||||
- **24 saubere Commits** auf `main`. Type-check 4/4 grün, **129 Tests
|
||||
grün** (66 Domain + 56 API + 7 Web), lokaler E2E-Smoke (Postgres →
|
||||
API → MinIO → Frontend → Cloze + Image-Occlusion + Anki-Import mit
|
||||
Media → /stats → /me/export → /cards/hashes) durch.
|
||||
- **Phasen 0, 1, 3, 4, 5, 8 vollständig durch.** **Phase 9 Polish-
|
||||
Welle teilweise** (Card-Edit, Cloze-Editor, Inbox-Banner, Account-
|
||||
/DSGVO-Self-Service, Statistik-Dashboard) — i18n + Image-Occlusion
|
||||
|
|
@ -67,9 +67,9 @@ Diese stehen — nicht ohne explizite Diskussion antasten:
|
|||
4. **Föderations-Endpoints als Pflicht** — alle aus `app-manifest.json`
|
||||
implementiert (siehe Phase 5 unten).
|
||||
5. **Encryption initial AUS.** Nachrüstbar via mana-auth-MK.
|
||||
6. **MVP-Card-Types `basic` + `basic-reverse` + `cloze`** (Cloze in
|
||||
Phase 8 ergänzt). Schema vorbereitet auf full-set (type-in,
|
||||
image-occlusion, audio, multiple-choice).
|
||||
6. **MVP-Card-Types `basic` + `basic-reverse` + `cloze` +
|
||||
`image-occlusion`** (Cloze Phase 8, Image-Occlusion Phase 9l).
|
||||
Schema vorbereitet auf type-in, audio, multiple-choice.
|
||||
|
||||
Vollständiger Plan: [`mana/docs/playbooks/CARDS_GREENFIELD.md`](../mana/docs/playbooks/CARDS_GREENFIELD.md)
|
||||
(im Plattform-Repo, weil er Verein-übergreifend gilt).
|
||||
|
|
@ -89,7 +89,7 @@ Vollständiger Plan: [`mana/docs/playbooks/CARDS_GREENFIELD.md`](../mana/docs/pl
|
|||
| 6 | Subscriptions/Credits via mana-credits | ⏸ offen | autonom möglich |
|
||||
| 7 | AI/MCP-Integration | ⏸ offen | braucht laufende mana-mcp |
|
||||
| 8 | Anki-Import (.apkg-Parser, Cloze-Support) | ✅ | 92 Tests grün, /import-Route benutzbar, Cloze als 3. MVP-Card-Type |
|
||||
| 9 | Polish (DSGVO-UI, Settings, Account, Statistik, i18n, A11y) | 🟡 weit | Card-Edit + Cloze-Editor + Inbox-Banner + Account/DSGVO + Statistik + Pre-Flight-Swap + i18n DE/EN + A11y-Pass + Cloze-Hint-Anzeige + Anki-Re-Import-Dedupe durch (9a–9j). Verbleibend: Image-Occlusion, manueller Cloze-Hint-Editor-Help-UI, Media-Upload für Anki-Import |
|
||||
| 9 | Polish (DSGVO-UI, Settings, Account, Statistik, i18n, A11y, Media, Image-Occlusion) | 🟡 weit | Card-Edit + Cloze-Editor + Inbox-Banner + Account/DSGVO + Statistik + Pre-Flight-Swap + i18n DE/EN + A11y-Pass + Cloze-Hint-Anzeige + Anki-Re-Import-Dedupe + MinIO-Media-Upload + Image-Occlusion durch (9a–9l). Verbleibend: type-in, audio, multiple-choice (Schema vorbereitet) |
|
||||
| 10 | Production-Deploy (Mac Mini, Cloudflare-Tunnel) | ⏸ offen | braucht DNS + Tunnel-Config |
|
||||
| 11 | Decommission Cards-Modul aus mana-monorepo | ⏸ offen | erst nach Phase 10 |
|
||||
|
||||
|
|
@ -105,9 +105,10 @@ Legende: ✅ erledigt + verifiziert · 🚧 blockiert · ⏸ noch nicht begonnen
|
|||
cd /Users/till/Documents/Code/cards
|
||||
|
||||
# 1. Dependencies (idempotent)
|
||||
pnpm install
|
||||
NPM_AUTH_TOKEN=<verdaccio-token> pnpm install
|
||||
|
||||
# 2. Postgres-Container (auf :5435, kollidiert nicht mit Mana-Plattform-:5432)
|
||||
# 2. Postgres + MinIO-Container (Postgres :5435, MinIO :9100/:9101 —
|
||||
# kollidiert nicht mit Plattform-:5432/:9000/:9001)
|
||||
pnpm docker:up
|
||||
|
||||
# 3. Drizzle-Schema pushen
|
||||
|
|
@ -231,6 +232,9 @@ Volle Konventionen: [`CLAUDE.md`](CLAUDE.md)
|
|||
## Git-Historie
|
||||
|
||||
```
|
||||
39b1791 Phase 9l: Image-Occlusion als 4. MVP-CardType
|
||||
c9eb0a6 Phase 9k: Media-Upload via MinIO-Container
|
||||
e7ae93d docs: STATUS.md auf Phase-9-Welle-2-Stand
|
||||
593d447 Phase 9j: Anki-Re-Import-Dedupe via content_hash
|
||||
4b451f1 Phase 9i: Cloze-Hint-Anzeige
|
||||
fd86d96 Phase 9h: A11y-Pass
|
||||
|
|
@ -371,6 +375,38 @@ in parse.ts). Bei Update von `sql.js` muss die Datei neu kopiert
|
|||
werden: `cp apps/web/node_modules/sql.js/dist/sql-wasm.wasm
|
||||
apps/web/static/sql-wasm.wasm`.
|
||||
|
||||
### 11. MinIO-Media-Storage (Sprint 9k)
|
||||
|
||||
`cards-minio`-Container im `infrastructure/docker-compose.yml` auf
|
||||
9100/9101 (Plattform-MinIO ist 9000/9001 — wir bleiben isoliert).
|
||||
`apps/api/src/services/storage.ts` ist ein dünner Wrapper um den
|
||||
`minio`-Client; `ensureBucket()` ist idempotent. ObjectKey-Format
|
||||
`<userId>/<ulid>.<ext>` ermöglicht Bucket-Prefix-Sweep beim
|
||||
DSGVO-Delete (kein S3-Cascade).
|
||||
|
||||
Konfiguration via `CARDS_S3_*`-env-Vars; Default lokaler Container.
|
||||
Phase-10-Prod kann gegen denselben Container auf dem Mac Mini laufen
|
||||
(eigener Bucket) oder gegen Plattform-MinIO. Keine Code-Änderung,
|
||||
nur env.
|
||||
|
||||
### 12. Image-Occlusion (Sprint 9l)
|
||||
|
||||
Field-Schema: `image_ref` zeigt auf eine `media_files.id` (Sprint 9k
|
||||
Storage), `mask_regions` ist ein JSON-Array mit Schema:
|
||||
`{ id, x, y, w, h, label? }`, alle Coords 0..1 relativ.
|
||||
`subIndexCount('image-occlusion')` wirft analog zu cloze; Card-POST
|
||||
nutzt `maskRegionCount(mask_regions)`.
|
||||
|
||||
Editor (`ImageOcclusionEditor.svelte`): SVG-Overlay über `<img>`,
|
||||
Drag-to-create für Masken, Mindestgröße 2% damit Klicks gefiltert
|
||||
werden. Touch-tauglich via Pointer-Events. Mask-Liste mit Inline-
|
||||
Label-Edit + Delete.
|
||||
|
||||
Study-View (`ImageOcclusionView.svelte`): aktive Maske ist im Prompt
|
||||
opake schwarz, im Reveal transparent grün mit Label-Text-Overlay
|
||||
(SVG-Text mit stroke-Outline gegen Bild-Hintergründe). Andere Masken
|
||||
bleiben dezent gelb-durchsichtig als Lern-Hinweis.
|
||||
|
||||
### 10. content_hash auf cards (Sprint 9j)
|
||||
|
||||
Jede neue Karte bekommt einen SHA-256-`content_hash` über
|
||||
|
|
@ -423,23 +459,25 @@ In Reihenfolge meiner Empfehlung:
|
|||
`mana-ev/cards`, mana-auth-App-Reg (Service-Key + Public-Key),
|
||||
mana-share-Manifest-Reg. Hängt an User-Aktion + laufender
|
||||
Plattform.
|
||||
2. **Media-Upload für Anki-Import** (Sprint-Kandidat 15) — lokaler
|
||||
`POST /api/v1/media/upload`-Endpoint mit MinIO oder Disk;
|
||||
Anki-Importer reicht die Filename→URL-Map durch sanitizeAnkiHtml.
|
||||
Open: Storage-Backend-Wahl (MinIO vs. lokal). 1–2 Tage.
|
||||
3. **Phase 6 (Subscriptions)** — braucht laufende mana-credits +
|
||||
2. **Phase 6 (Subscriptions)** — braucht laufende mana-credits +
|
||||
Phase 2 Auth-Föderation.
|
||||
4. **Phase 7 (AI/MCP)** — braucht laufende mana-mcp.
|
||||
5. **Phase 10 (Production-Deploy)** — Mac Mini + Cloudflare-Tunnel,
|
||||
nach allen Pre-Flight-Items.
|
||||
6. **content_hash-Backfill** — Pre-Phase-9j-Karten haben null
|
||||
3. **Phase 7 (AI/MCP)** — braucht laufende mana-mcp.
|
||||
4. **Phase 10 (Production-Deploy)** — Mac Mini + Cloudflare-Tunnel
|
||||
(cardecky.mana.how + cards-api.mana.how) + MinIO-Bucket
|
||||
(eigener Container oder Plattform), nach allen Pre-Flight-Items.
|
||||
5. **content_hash-Backfill** — Pre-Phase-9j-Karten haben null
|
||||
content_hash; ein einmaliges Skript würde sie nachziehen, sodass
|
||||
Re-Import-Dedupe lückenlos funktioniert. Phase 10-Polish, sobald
|
||||
Live-User da sind.
|
||||
6. **Weitere CardTypes** — type-in, audio, multiple-choice sind
|
||||
im Future-Schema vorbereitet, kommen wenn der User-Wunsch klar
|
||||
ist.
|
||||
7. **Image-Occlusion-Polish** — Resize/Move existierender Masken
|
||||
(aktuell: nur Draw + Delete), Mask-Reorder, Mehrere Masken in
|
||||
einem Cluster (mehrere als ein Review).
|
||||
|
||||
Was nicht autonom geht: Phase 2, 6, 7, 10 — alle hängen an Pre-Flight
|
||||
oder Plattform-Diensten. Phase 9 ist breit ausgebaut; Image-Occlusion
|
||||
und Image-Occlusion-Editor wären die nächsten autonomen Polish-Items.
|
||||
oder Plattform-Diensten. Phase 9 ist sehr breit ausgebaut.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue