diff --git a/tasks.md b/tasks.md index a4b6211..f266ad0 100644 --- a/tasks.md +++ b/tasks.md @@ -40,6 +40,7 @@ Fase 17 (lydstudio-utbedring) — ingen avhengigheter, kan kjøres parallelt Fase 10 + 13 → Fase 18 (AI-verktøy) Fase 3 + 13 → Fase 19 (arbeidsflaten — spatial canvas) Fase 19 → Fase 20 (universell overføring + panelrework) +Fase 2 → Fase 21 (CLI-verktøy — unix-filosofi) Alt → Fase 12 (herding) ``` @@ -151,7 +152,8 @@ Uavhengige faser kan fortsatt plukkes. - [x] 14.7 Publiseringsflyt i frontend (personlig): publiseringsknapp på noder i samlinger med `publishing`-trait der `require_approval: false`. Forhåndsvisning, slug-editor, bekreftelse. Avpublisering ved fjerning av edge. - [x] 14.8 RSS/Atom-feed: samling med `rss`-trait genererer feed automatisk ved publisering/avpublisering. `synops.no/pub/{slug}/feed.xml`. Maks `rss_max_items` (default 50). - [x] 14.9 Custom domains: bruker registrerer domene i `publishing`-trait. Maskinrommet validerer DNS, Caddy on-demand TLS med validerings-callback. Re-rendring med riktig canonical URL. -- [ ] 14.10 Redaksjonell innsending: `submitted_to`-edge med status-metadata (`pending`, `in_review`, `revision_requested`, `rejected`, `approved`). Maskinrommet validerer at kun roller i `submission_roles` kan opprette `submitted_to`, og kun owner/admin kan endre status eller opprette `belongs_to`. Ref: `docs/concepts/publisering.md` § "Innsending". +- [~] 14.10 Redaksjonell innsending: `submitted_to`-edge med status-metadata (`pending`, `in_review`, `revision_requested`, `rejected`, `approved`). Maskinrommet validerer at kun roller i `submission_roles` kan opprette `submitted_to`, og kun owner/admin kan endre status eller opprette `belongs_to`. Ref: `docs/concepts/publisering.md` § "Innsending". + > Påbegynt: 2026-03-18T01:53 - [ ] 14.11 Redaktørens arbeidsflate: frontend-visning av noder med `submitted_to`-edge til samling, gruppert på status. Kanban-stil drag-and-drop for statusendring. Siste kolonne ("Planlagt") setter `publish_at` i edge-metadata. - [ ] 14.12 Planlagt publisering: maskinrommet sjekker periodisk (cron/intervall) for `belongs_to`-edges med `publish_at` i fortiden som ikke er rendret. Ved treff: render HTML → CAS → oppdater RSS. - [ ] 14.13 Redaksjonell samtale: ved innsending kan redaktør opprette kommunikasjonsnode knyttet til artikkel + forfatter for diskusjon/feedback utover kort notat i edge-metadata. @@ -232,6 +234,37 @@ Ref: `docs/features/universell_overfoering.md`, `docs/retninger/arbeidsflaten.md - [ ] 20.8 Panelrework — Editor/Artikkelverktøy: gjør artikkelverktøy til BlockShell-panel med source_material mottak fra andre paneler. Ref: `docs/features/artikkelverktoy.md`. - [ ] 20.9 Panelrework — Studio: gjør StudioTrait til BlockShell-panel med drop-aksept for lydfiler, fullskjerm, responsivt. +## Fase 21: CLI-verktøy — Unix-filosofi + +Ref: `docs/retninger/unix_filosofi.md`. Bryt ut prosessering fra maskinrommet til +standalone CLI-verktøy i `tools/`. Maskinrommet kaller dem fra jobbkøen, Claude +kaller dem direkte. Samme verktøy, to brukere. + +### Prosessering (erstatter jobbkø-handlere) + +- [ ] 21.1 `synops-transcribe`: Whisper-transkribering. Input: `--cas-hash --model [--initial-prompt ]`. Output: JSON med segmenter. Skriver segmenter til PG, oppdaterer node metadata. Erstatter `transcribe.rs`. +- [ ] 21.2 `synops-audio`: FFmpeg-prosessering. Input: `--cas-hash --edl `. Output: ny CAS-hash. Erstatter `audio.rs`. Inkluder parametervalidering (fase 17.2–17.3). +- [ ] 21.3 `synops-render`: Tera HTML-rendering. Input: `--node-id --theme `. Output: CAS-hash for rendret HTML. Erstatter `publishing.rs`. +- [ ] 21.4 `synops-rss`: RSS/Atom-generering. Input: `--collection-id `. Output: XML til stdout. Erstatter `rss.rs`. +- [ ] 21.5 `synops-tts`: Tekst-til-tale. Input: `--text --voice `. Output: CAS-hash for lydfil. Erstatter `tts.rs`. +- [ ] 21.6 `synops-summarize`: AI-oppsummering. Input: `--communication-id `. Output: sammendrag som tekst. Erstatter `summarize.rs`. +- [ ] 21.7 `synops-suggest-edges`: AI-foreslåtte edges. Input: `--node-id `. Output: JSON med forslag (target, edge_type, confidence). Erstatter `ai_edges.rs`. +- [ ] 21.8 `synops-respond`: Claude chat-svar. Input: `--communication-id --message-id `. Output: svartekst. Erstatter `agent.rs` sin prosessering (auth/ratelimit forblir i maskinrommet). +- [ ] 21.9 `synops-prune`: Opprydding av gamle noder. Input: `--dry-run` for forhåndsvisning. Erstatter `pruning.rs`. + +### Oppslag (Claude-verktøy) + +- [ ] 21.10 `synops-context`: Hent kontekst for en samtale. Input: `--communication-id `. Output: markdown med spec, deltakere, historikk, relaterte noder. +- [ ] 21.11 `synops-search`: Fulltekstsøk i grafen. Input: ` [--kind ] [--limit N]`. Output: matchende noder med utdrag. +- [ ] 21.12 `synops-tasks`: Parse tasks.md og vis status. Input: `[--phase N] [--status todo|done|blocked]`. Output: formatert oppgaveliste. +- [ ] 21.13 `synops-feature-status`: Sjekk feature-status. Input: ``. Output: spec-sammendrag, oppgavestatus, nylige commits, ubesvart feedback. +- [ ] 21.14 `synops-node`: Hent/vis en node med edges. Input: ` [--depth N] [--format json|md]`. Output: node-data med edges. + +### Infrastruktur + +- [ ] 21.15 Jobbkø-dispatcher: endre maskinrommets jobbkø-handlere til å spawne CLI-verktøy (`Command::new("synops-X")`) i stedet for inline-kode. Stdout → jobbresultat, stderr → feillogg, exitkode → status. +- [ ] 21.16 Felles lib: `synops-common` crate med PG-tilkobling, CAS-helpers, og node/edge-typer. Deles mellom alle CLI-verktøy for å unngå duplisering. + ## Fase 12: Herding - [ ] 12.1 Observerbarhet: strukturert logging, metrikker (request latency, queue depth, AI cost).