- Übersetzungs-Kern (Claude + Platzhalter-Schutz) nach src/lib/translate.js
ausgelagert; claude.js importiert von dort (Endpoints unverändert).
- Neuer Endpoint POST /pairs/:id/translate: füllt fehlende Sprachen für
Frage, Statements bzw. (bei word-Typ) verlinkte Wörter und liefert das
3-sprachige Inhalts-Bündel fürs Review-Modal.
- POST /pairs/:id/review hebt verlinkte Objekte + Bilder zusätzlich auf
'reviewed' (idempotent).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Leere Hüllen-Zeilen (in allen Sprachen leer, z.B. word-Typ-Statements ohne
Satztext) wurden als fehlend gezählt, obwohl translate-missing sie mangels
Quelltext nie anrührt. Dadurch zeigte die UI viele offene Übersetzungen, der
Button meldete aber 'Fertig: 0 übersetzt'. total/missing basieren jetzt auf
dem übersetzbaren Bestand (Text in mind. einer Sprache).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- pictures: reviewed-Status (Constraint + ALLOWED_STATUSES + Auto-Trigger beim Object-Linking)
- objects: STATUSES um reviewed erweitert; Auto-Trigger draft→reviewed wenn Pair verlinkt
- pairs/statements/questions: STATUSES um reviewed (Phase-1-Lücke)
- pairs: POST /:id/review kaskadiert Pair+Frage+Statements (verlangt alle 3 Sprachen)
- words: Auto requested→translated wenn alle titel_* gefüllt (POST+PATCH)
- audios computeUnits: nur vertonbar wenn ALLE 3 Sprachen pro Feld gefüllt
- claude: translate-text/translate-row/translate-missing mit Placeholder-Schutz
(⟦PHn:label⟧-Tokenisierung, Label übersetzt, UUID erhalten); translation-coverage
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- reviewed-Status für objects/questions/statements/pairs (Constraints)
- feed: nur fertige Inhalte (published + Bild + Audio-Gate), audio_url
- pairs: Publish-Gating (draft→published = 409)
- audios: source_table/source_id/source_field/language + Unique-Index;
generate-for, generate-batch, GET /coverage; voices.js (Voice je Sprache)
- auth: POST /auth/progress, /auth/me mit total_ep/streak/level;
users_public EP-Spalten + user_pair_progress.earned_points
- claude: POST /generate-words; words POST akzeptiert status
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Extends prompt to 40 pairs: adds 10 × word type with positive_words
and negative_words arrays. Difficulty easy/medium maps to level 1/2.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
POST /api/claude/generate-pairs — proxies image + objects to Claude
Haiku and returns 30 structured pairs (text/yes_no/question, easy/medium)
as JSON. Keeps the Anthropic API key server-side via ANTHROPIC_API_KEY.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>