Add REST endpoints and frontend wiring for per-language project actions:
- POST /api/workspace/{project}/translation/{lang}/queue — queue translation
- POST /api/workspace/{project}/audio/{lang}/queue — queue audio generation
- GET/POST /api/workspace/{project}/format/{lang} — format metadata (EPUB/PDF)
- GET /api/workspace/{project}/review/{lang}/chapters/{chapter} — utterance review
- GET/POST /api/workspace/{project}/front-matter/{lang} — front matter editor
- GET /api/workspace/{project}/chapters/{lang} — chapter list
- GET /api/workspace/{project}/chapter-content/{lang}/{chapter} — chapter text
Frontend fixes:
- Review page shows per-language text (English source, Chinese translation, etc.)
- Non-translated languages show 'Queue translation' button only
- Speaker data from English source matched by paragraph ID
- UmbraAudio column layout: Speaker, Variation, Text, Actions
- Chapter tree in left sidebar: Front matter, Back matter, Body
- Audio Format label at top of sidebar
- Pandoc formatting toolbar for front matter text editing
3.1 KiB
3.1 KiB
Task List — Umbra Tools UI and project-status backend
Updated: 2026-10-22 Plan: Docs/Plan_Umbra_Tools_UI.md
Legend: [ ] todo [~] in progress [x] done [!] blocked
F1 — Shell routing and defaults
- Default activity: control for administrators, project for members (D2)
- Activity change repaints left rail AND main panel reliably
- Deep links:
#control,#project,#project/<id>,#edit,#audio - Banner: logo + activity dropdown / project name / user + role + account menu
- Guard: hidden/disabled control option for non-administrators
- Session + workspace loaded before first paint (no empty flash)
B1 — Project status endpoint (D4)
GET /api/projects/{id}— project detail (membership-checked)GET /api/projects/{id}/status— per-language edition status- Status adapter over
productions/<book>-<lang>/with a store seam - Report translation chapters done / total, last update
- Report per-output format availability (epub, pdf-paperback, pdf-hardback)
- Report audio state
- Report review tags (needs review / needs update)
- Tests for scope enforcement (member vs platform admin, foreign org)
F3 — Projects activity (D3)
- List projects in scope using
/api/workspace - Assigned to me filter
- Honest empty and error states (reuse workspace.html wording)
- Click a project → detail (F4)
F4 — Project detail: language rows
- One row per language from B1 status
- Source row → Edit activity
- Translate / Create audio / Format buttons, gated by state with reasons
- EPUB↓ / PDF↓ download links when available
F2 — Embeddable admin module (D1)
- Extract admin views into
assets/admin-view.js(mount function) - Standalone
uadmin/index.htmluses the module, unchanged behaviour - Shell mounts the module inline, keeps its own banner
- Verify framing policy untouched (DENY remains on the standalone page)
- Admin module tests / smoke check
B2 — Edition + output metadata endpoints (D5, §32)
GET /api/projects/{id}/editionsGET /api/editions/{id}/metadata?format=(resolved view, §32.4)PUT /api/editions/{id}/outputs/{format}with rev checkPOST /api/metadata/proposals(+ accept/reject) §32.6- Gate evaluation for §32.7
- Schema/migration for editions, outputs, bindings, proposals
F5 — Format activity (D5, §32)
- Metadata matrix: fields × editions/outputs
- Mode badge (L/R/S/U) and state chip per cell
- EPUB and PDF tabs
- Needs-attention panel from §32.7 gates
- ISBN entry with check-digit validation and duplicate rejection
- Add Language: edition + outputs + proposals
F6 — Edit and Audio activities
- Edit: binder + composing editor, autosave (labelled not-saving until wired)
- Edit: Save version, keep last ten revisions
- Audio: mount existing Umbra Audio UI, sections in left rail
Cross-cutting
- Bump SERVICE_VERSION on each shipped slice
- Restart
umbratrans-weband verify served files match the repo - Update status notes after each slice