Skip to content

Latest commit

Β 

History

History
469 lines (329 loc) Β· 27.4 KB

File metadata and controls

469 lines (329 loc) Β· 27.4 KB

WorldScript Studio β€” Roadmap

Vision

WorldScript Studio aims to become the leading open-source platform for AI-assisted creative writing β€” offline-first, privacy-friendly, and extensible.

UX / PWA baseline audit (2026-05-11)

Benchmarks from the UI/PWA deep-dive (implemented in repo, no new mandatory docs):

  • Core paths: Welcome β†’ Blank/Demo β†’ Manuscript / Writer β†’ Export β†’ Settings β€” navigation via Sidebar, Command Palette and consistent glossary terms (docs/BEST-PRACTICES.md).
  • Responsive: Mobile-shell E2E tests/e2e/mobile-shell.spec.ts; small viewports tested manually for Bottom Sheet and Writer split.
  • Design tokens: Hotspots migrated incrementally to --sc-* / --ring-focus (docs/Design-System.md); legacy bridge in index.css until migration is complete.
  • Deep links: ?view= is validated against valid views on startup (hooks/useApp.ts); PWA shortcuts in the manifest point to the same keys (public/manifest.json).
  • Share target: GET parameters share_title / share_text / share_url β†’ Toast + sessionStorage + URL cleanup (App.tsx).
  • Service Worker: APP_VERSION follows package.json via scripts/sync-sw-version.mjs (predev/prebuild); Network-only for AI and local inference hosts (public/sw.js); precache only via install + injected __WB_MANIFEST (no second parallel precacheAndRoute track).
  • HTML lang: follows the selected UI language (App.tsx).

Current sprint tasks β†’ TODO.md Completed items archive β†’ docs/history/


Desktop runtime β€” Qt 6 + GPUI native strategy (PLANNED β€” Rust Core prerequisite work not yet started)

WorldScript Studio's desktop runtime plan is React/PWA (first-class web product) β†’ Tauri 2 (transitional only, retired once Qt reaches Stable) β†’ an authoritative Rust Core β†’ Qt 6/Qt Quick (QML) as the primary native desktop product β†’ GPUI admitted later as a secondary native product behind a strict gate. CEF was evaluated and retired from the target architecture because Crashpad cannot produce sandboxed-renderer crash dumps under Linux's default Yama ptrace_scope=1 without weakening the sandbox β€” R-19. Not part of the v2.0 Foundation scope below, tracked separately. Full strategy, waves, and gates: ADR-0021 Β· docs/native/ROADMAP-QT-GPUI-DESKTOP.md. Superseded CEF decision record: ADR-0019 Β· docs/historical/cef/README.md.


Upcoming β€” v2.0 Foundation (PLANNED)

Forward-looking work carried out of the v1.24 cycle (i18n expansion and the six-PR hardening sequence below both shipped in v1.24.0/v1.24.1; the worker-generation-duplication item deferred in v1.24.2 shipped as the v1.24.3 WorkerBus v2 consolidation β€” see the RELEASED sections):

  • Coverage targets: lift toward Lβ‰₯85 % / Bβ‰₯75 % / Fβ‰₯80 % β€” focus on AI routing, Voice, Copilot.
  • Local AI & Voice hardening: Whisper/Kokoro on low-end devices, model-integrity checks, Eco-Mode.
  • Error boundaries + structured logging for AI/worker failures.
  • Accessibility deep-dive: manual keyboard + screen-reader passes.
  • Plugin Registry Beta: graduate from the sandbox-hardening phase.
  • Bundle optimisation: further code-splitting for heavy chunks.
  • Local-first: advance ADR-0008 β€” B2.1 Y.Text migration β†’ B2.2 SoT flip behind enableLocalFirstSync.
  • i18n human native review: 14 Beta/RTL locales (all except de/en/es/fr/it) are machine-translated to ~96-100 %; native-speaker review still open (checklist in docs/TRANSLATION-GUIDE.md). See docs/LANGUAGE-EXPANSION-2026.md.

v1.24.3 β€” WorkerBus v2 Worker-Generation Consolidation (RELEASED 2026-07-30)

Status: Merged (5 stacked PRs #286–288/#290–291, plus independent #289) and tagged. See CHANGELOG.md [1.24.3] and ADR-0015 for the full decision record.

  • Closed out the v1/WorkerBus-v2 duplication flagged as tracked debt in v1.24.2: DuckDB analytics, local embeddings, and local NLP now all route through the shared WorkerBus v2 pool instead of dedicated new Worker(...) instances per service.
  • Recovered a merge queue interrupted mid-session by a local editor crash β€” all five PRs required a fresh sync-merge conflict resolution against accumulated fixes before landing.
  • Fixed a DuckDB abort-listener leak and hardened WorkerBus re-registration failure handling.
  • Paused Vercel auto-deploy mid-term after 2 undiagnosed preview-deployment failures (GitHub Pages and Cloudflare Pages remain live and unaffected).

v1.24.2 β€” CSP / Crypto / Doc-Truth Hardening (released 2026-07-29)

Status: Merged (PR #284) and tagged. See CHANGELOG.md [1.24.2], AUDIT.md "Audit 2026-07-29 β€” CSP / Crypto / Truth" for the full finding table and post-mortem, and docs/audit/WS-RUN-LOG-2026-07-29.md for the per-workstream execution record.

  • CSP functional-truth restored: 'wasm-unsafe-eval' had been missing on all 5 deployment surfaces for two months, silently blocking the entire advertised local-inference stack (WebLLM, ONNX Runtime Web, Transformers.js, DuckDB-WASM, Whisper-STT, Kokoro-TTS) in every deployed Chromium browser. New 3-layer CSP test architecture so this class of defect can't recur silently.
  • Desktop API-key encryption hardened from an unsalted single-SHA-256 scheme to PBKDF2 600k + salt.
  • DuckDB-WASM self-hosted, replacing an unversioned, already-unreachable third-party CDN.
  • Doc-truth fixes (fabricated OS-keychain claim removed, canonical production URL unified with a new drift gate) and CI housekeeping (Storybook build dedup + a genuinely broken test-runner invocation fixed; coverage ratchet raised to CI-measured values).
  • Worker-generation duplication (v1 vs. WorkerBus v2, both live) documented as tracked debt β€” consolidation is out of scope here, deferred to a dedicated migration sprint.

v1.24.1 β€” Local-AI Reliability, Heuristic Fallbacks, LanguageTool (RELEASED 2026-07-28)

Status: βœ… Released β€” see CHANGELOG.md [1.24.1].

  • Local-AI reliability: desktop Ollama/LM Studio/vLLM discovery fixes, corrected a misleading browser AI-status badge.
  • AI heuristic-fallback foundation (ADR-0011) + per-feature generators for Outline, Character, World profiles, and Plot Board "suggest next beat" β€” offline-capable degradation when cloud/local AI is unavailable.
  • Real self-hosted LanguageTool grammar/spelling integration (privacy-first, replaces a placeholder typo list).
  • 20-PR Dependabot backlog triage (16 merged, 4 closed as superseded after root-causing AI SDK v4/Biome 2.5.x/dev-tooling blockers).
  • Issue #60 vendor-fork audit closeout (packages/collab-transport vs. upstream y-webrtc 10.3.0).
  • Security/build hardening: persist-credentials (CWE-522), a Tailwind ltr/rtl fix, 3 ineffective dynamic imports, 2 CWE-209 fixes.

v1.24.0 β€” Critical Hardening + 17β†’19 Locale Expansion (RELEASED 2026-06-21)

Status: βœ… Released β€” see CHANGELOG.md [1.24.0].

  • Six stacked PRs: privacy, experimental-feature labeling, coverage, voice consent, local-AI, and doc/hygiene hardening.
  • i18n expansion: added fi/sv/hu/is/eu (Beta) + fa (RTL, Persian) β€” 11β†’17 locales at release time; ru/ko followed in a later v1.24.x patch, bringing the current total to 19. Priority chrome hand-translated; remaining modules machine-translated (glossary v2.0, placeholder-masked) to ~96-100 % across all Beta locales.

v1.23.0 β€” Rebrand to WorldScript Studio + AI/i18n/Local-First Hardening (RELEASED 2026-06-16)

Status: βœ… Released β€” see CHANGELOG.md [1.23.0].

  • Rebrand StoryCraft β†’ WorldScript Studio: repository metadata, build/URLs/PWA, Tauri identity, storage keys, UI components, i18n values and placeholder assets (8-phase sweep, PRs #142–#148); WorldScript "W" 8-bit monogram icons.
  • AI error taxonomy + fail-fast retry classification: localized Copilot/Writer error messages, AI request correlation IDs, transient-vs-fatal retry gating.
  • Local-first data foundation (ADR-0008): A0.1 perf harness β†’ B0.1 PoC β†’ ADR-0008 β†’ B1.1 Yjs shadow sync, all behind enableLocalFirstSync (Redux stays source of truth).
  • Plug-and-play Local AI settings: capability detection, model downloads, storage management, fallback.
  • OpenRouter + AI Execution Mode settings sections: localized, modernized (Card + radiogroup), reactive cloud-policy block.
  • Bundle split & budget tightening (PR #130): named vendor-webllm/vendor-onnx/vendor-transformers chunks; ceilings 6200 KB / 2500 KB entry.
  • i18n interpolation bug-class fix + i18nPlaceholders regression guard.
  • Tauri blank-screen fix + updater asset-URL normalization.
  • i18n: 2 709 keys Γ— 11 locales.

Manual rebrand smoke-test sign-off matrix: docs/V1.23-REBRAND-SMOKE-TEST.md (human-only step).


v1.22.0 β€” Phase 5: AI Execution Modes, OpenRouter & Copilot v2 (RELEASED 2026-06-11)

Status: βœ… Released β€” siehe CHANGELOG.md [1.22.0].

  • OpenRouter provider (Cloud 5): Unified Gateway zu 100+ Open-Source-Modellen mit Circuit-Breaker, RPM-Tracking und Free-Tier-Katalog.
  • AI Execution Modes: hybrid | cloud | local | eco β€” vier Routing-Strategien in Settings β†’ AI & Models; AiModeIndicator im Copilot-Header.
  • Ultimate Copilot AI v2: Markdown-Rendering (DOMPurify), Sidebar/Dialog-Mode, Apply-to-Chapter (Undo), InlineAnnotationLayer, ProForge Ask-Copilot-Chip.
  • WebLLM Worker Offload: @mlc-ai/web-llm lΓ€uft im dedizierten WorkerBus-v2-Pool mit automatischem Main-Thread-Fallback.
  • Whisper WASM STT End-to-End: Deterministische Deep-E2E-Suite fΓΌr Model-Download, STTβ†’Intentβ†’Command und Stop-Listening.
  • Prompt-Injection & Plugin-Isolation Hardening (PR #114): C0-Control-Character-Filter, DOMPurify-HΓ€rtung, Plugin-Storage-Key-Validierung, Worker-Sandbox mit Function/eval/WebAssembly-Guards.
  • i18n: 2 594 Keys Γ— 11 Locales.

v1.21.0 β€” Integrity & Hardening Cycle (RELEASED 2026-06-10)

Status: βœ… Released β€” siehe CHANGELOG.md [1.21.0].

  • CSP connect-src Option B: redundante Cloud-Endpoints entfernt, intentional https: fΓΌr BYOK behalten; ADR-0004 + Regressionstest.
  • Suppression-Debt Ratchet Gate: scripts/check-suppressions.mjs mit Baseline 159 in CI; erste Abatement-Tranche (22 noExplicitAny).
  • Bundle-Budget Single Source of Truth: package.json bundle:budget = --max-kb 6500 --max-entry-kb 4000 (later tightened to 6200 / 2500 in PR #130, 2026-06-14).
  • Whisper WASM STT Download UI + VADβ†’Whisper Bridge: VoiceModelDownloadModal, VoiceActivityCoordinator.
  • Sepia Dark Mode β€” "Candlelit Manuscript" als vierter Theme-Variant.
  • Deep E2E Coverage Layer: Feature-Flag-Matrix + Error-Path-Specs.
  • Coverage Batches A–C: Thresholds gehalten bei L74/B60/F67/S72.

v1.20.0 β€” Deep Correction & Release Hardening (RELEASED 2026-06-07)

Status: βœ… Released β€” siehe CHANGELOG.md [1.20.0].

  • Tauri Desktop Pipeline repariert: pnpm-Config-Migration, Signing-Fix, Native File Associations (.worldscript/.scst), Single-Instance, Deep-Link-Handler.
  • UI Modernization Phase 1: LanguageSelector, RadioGroup, Tabs, ToggleSwitch.
  • Phase 3 i18n Expansion: ja/zh/pt/el Beta-Sprachen + Intl APIs (PluralRules, NumberFormat, RelativeTimeFormat, Collator, ListFormat, DisplayNames).
  • Coverage C-7: +96 Tests; Thresholds angehoben.
  • Quality Gates stabil: lint βœ… Β· typecheck βœ… Β· i18n:check βœ… Β· parity:check βœ… Β· bundle:budget βœ… Β· smoke:prod βœ….

v1.19.0 β€” Phase 2: Security, Voice WASM, Collab Transport, A11y Gate, RTL Beta (RELEASED 2026-05-28)

Status: βœ… Released β€” siehe CHANGELOG.md [1.19.0] und docs/SPRINT-HANDOFF-2026-05-28.md.

  • B-1 β€” IDB At-Rest Encryption: AES-256-GCM passphrase-derived encryption, PBKDF2 600k iter, { extractable: false }.
  • B-2 β€” Voice WASM Scaffold: Whisper.cpp WASM STT + Silero VAD v4 via ONNX Runtime Web.
  • B-3 β€” collab-transport Vendor Fork: y-webrtc 10.3.0 mit RTCDataChannel E2E encryption.
  • B-4 β€” axe-core E2E Accessibility Gate: 8-view WCAG 2.2 AA Scan, zero violations.
  • B-5 β€” RTL Layout Beta: ar/he Locale Stubs + enableRtlLayout Flag.
  • B-6 β€” StructuredLogger: IDB + Tauri JSONL sinks, GDPR sanitizeLogContext.
  • B-7 β€” Coverage Thresholds Raised: L71/F63/B57/S69; gemessen L73/F65/B59/S71.
  • B-8 β€” Stryker Gate Raised: break 70 β†’ 75; 40 Mutations-Targets.

v1.18.0 β€” ProForge Humanization & Refinement Sprint (RELEASED 2026-05-27)

Status: βœ… Released β€” commit 60f12fd, siehe CHANGELOG.md [1.18.0].

  • Phase H: Author-facing Labels, "context passages" Rename, Feature-Flag-Beschreibungen, behavioral tests.
  • Phase A: BaseAgent Abstract Class, aiConstants.ts, addDebouncedListener Factory.
  • Phase P: SupervisorAgent, executeStageWithSupervision, BaseAgent.selfReflect(), Honest Fallbacks, PipelineReviewPanel Redesign.
  • Phase X: Settings-Nav Semantische Gruppierung, Flow Mode, Empty States.

v1.17.0 β€” Voice Full Support Foundation (RELEASED 2026-05-24)

Status: βœ… Released β€” siehe CHANGELOG.md [1.17.0].

  • Engine-Abstraktionen (SttEngine, TtsEngine, VadEngine, WakeWordEngine, IntentEngine).
  • Web Speech API Fallbacks, Hybrid Intent Engine, VoiceCommandService, voiceSlice.
  • React Hooks (useVoice, usePushToTalk, useVoiceDictation, useVoiceAccessibility).
  • UI Components (VoiceIndicator, VoiceControlPanel, VoiceSettingsSection).
  • Audio Navigator + Feedback Service; 83 Voice-Unit-Tests.

v1.1 β€” Stabilization & Hardening

Status: βœ… Completed (see docs/history/completed-v1.1.md for details)

All critical, high, and most medium-priority items have been completed, including:

  • ManuscriptView resize-listener cleanup (AbortController + throttle)
  • Feature-flag system (localStorage-based, UI in Settings)
  • DevContainer configuration
  • Request deduplication (abort-previous pattern in aiThunkUtils.ts)
  • Self-hosted fonts (no CDN, no Google Fonts)

v1.1.2 β€” Hotfix: Critical Bugs

Status: βœ… Completed

  • codexService infinite-loop fix (while+continue β†’ for...of matchAll)
  • Modal focus-trap cleanup consolidated (fragile 2-return β†’ single cleanup)
  • FOUC theme-init fixed (inline script + localStorage mirror)
  • Untranslated languages (FR/ES/IT) removed from selector
  • Dead code removed (buildDeduplicationKey, persist/PERSIST)

v1.3 β€” Dual persistence, Codex hardening, quality gates

Status: βœ… Released as v1.3.0 (2026-05-08) β€” see CHANGELOG.md, AUDIT.md (Follow-up 2026-05-08).

  • Legacy β†’ dual IndexedDB migration, Story Bible / Codex feature flags, scene visualization, @google/genai v2, Stryker + Playwright visual/a11y harness, Biome --error-on-warnings.
  • Documentation (2026-05-06): Complete 15-file inventory + README Documentation Hub incl. .github/ACTIONS-OPTIMIZATIONS.md; CI/Copilot texts on dual-DB and E2E helpers β€” see AUDIT.md β€œMarkdown corpus” and CHANGELOG.md [Unreleased].

v1.2 β€” Security, Quality & Local AI

Status: βœ… Completed (security hardening, Tauri parity, i18nΓ—5, Spotlight tour β€” see CHANGELOG [1.2.0])

Security Hardening βœ… completed

  • βœ… CryptoKey non-extractable (crypto.subtle.generateKey())
  • βœ… CSP img-src hardening (frame-ancestors 'none', upgrade-insecure-requests)
  • βœ… Import JSON schema validation with Valibot
  • βœ… Collaboration awareness-state validation
  • βœ… communityTemplateService β†’ local static asset path
  • βœ… OpenAI stream abort-check, silent model-downgrade stopped
  • βœ… Gemini connection test (real API call)

Code Quality βœ… mostly completed

  • βœ… Documentation 2026-05: docs/CI.md, README β€œDocumentation Hub”, CONTRIBUTING (Biome/Node 22/Vite 8), Copilot/CLAUDE/AUDIT synchronized with current workflow
  • βœ… Coverage config migrated to glob patterns
  • βœ… TypeScript 6.0 adopted (stableTypeOrdering, native RegExp.escape)
  • βœ… Project/settings save listeners separated (performance)
  • βœ… SettingsView.tsx split into 8 section components (2116 LOC β†’ ~234 LOC)
  • βœ… constants.tsx split into icons/defaults/index
  • βœ… projectSlice.ts split into 6 thunk domain files (777 β†’ 248 LOC)
  • βœ… Lighthouse CI hard-fail enabled
  • βœ… Test suite expanded to 160+ tests (CI green on Node LTS + Node 24)
  • βœ… StorageBackend interface β€” storageBackend.ts, strict StoryProject types on proxy

Tauri Feature Parity βœ… completed

  • βœ… fileSystemService: retry logic, LZ-string compression, numeric snapshot IDs, deleteImage(), hasSavedData(), auto-snapshot (5 min, max 20)
  • βœ… Story Codex + RAG vectors: file-per-project storage (projects/{id}/codex/)
  • βœ… storageService / codexService route everything through the StorageBackend interface

Ollama / Local-AI Integration βœ… completed

Architecture: aiProviderService.ts β†’ ollamaService.ts (HTTP client for localhost:11434)

Model Parameters VRAM (min) Strengths Recommendation
Qwen3 8B 8B 6 GB Multilingual, Reasoning ⭐ Primary
DeepSeek V3.2 7B 7B 6 GB Coding, Reasoning Alternative
Llama 4 Scout 17B 17B 12 GB Multilingual, long-context Power user
Gemma 3 4B 4B 4 GB Compact, fast Low-end
Mistral Small 3.2 24B 24B 16 GB Multilingual Instruction High-end
Phi-4 Mini 3.8B 3.8B 4 GB Reasoning, compact Low-end
GLM-4 9B 9B 8 GB Chinese+English Niche
Kimi K2 Instruct 32B (MoE) 16 GB+ Agentic, Tool-Use Experimental

Hardware matrix:

  • Minimum (4 GB VRAM): Gemma 3 4B, Phi-4 Mini β€” basic text generation
  • Recommended (8 GB VRAM): Qwen3 8B, DeepSeek V3.2 β€” complete toolchain
  • Optimal (16+ GB VRAM): Llama 4 Scout, Mistral Small β€” long manuscripts, complex analysis

UX specification:

Settings β†’ AI Provider β†’ [Gemini Cloud | Ollama Local]
  ↳ If Ollama: model dropdown (auto-detect via GET /api/tags)
  ↳ Server URL: localhost:11434 (configurable)
  ↳ Status indicator: 🟒 Connected / πŸ”΄ Unreachable

Implementation steps: βœ… all completed

  1. βœ… services/ollamaService.ts β€” HTTP client (/api/generate, /api/chat, /api/tags)
  2. βœ… aiProviderService.ts β€” provider registry with fallback chain (Gemini fallback on Ollama error)
  3. βœ… features/settings/settingsSlice.ts β€” advancedAi.provider, advancedAi.model, advancedAi.ollamaBaseUrl
  4. βœ… components/settings/AiProviderCard.tsx + AiSections.tsx β€” provider toggle, model auto-detect, status indicator
  5. βœ… Prompt adapter β€” sanitizeOllamaPrompt + buildOllamaPrompt in ollamaService.ts
  6. βœ… Default model: Qwen3 8B (ollama/qwen3:8b)

Codex Auto-Tracking (Story Codex)

Automatic extraction and maintenance of a β€œStory Bible” from the manuscript:

  • RAG enhancement: Entities (characters, locations, objects) are automatically extracted while writing
  • Knowledge graph: Visualize and maintain relationships between entities
  • Contradiction detection: Real-time consistency check against the Codex
  • Foundation: Existing RAG vector store in IndexedDB v5

Story Bible Light

Simplified automatic consistency checking:

  • Character profiles are matched against manuscript mentions
  • Warnings on name changes, age inconsistencies, location shifts
  • Timeline view for chronological consistency

Visualize Button (Image Gen)

  • Gemini image generation already implemented (character portraits, world ambiance)
  • Extension: β€œVisualize scene” button in Writer view
  • Optional: Stable Diffusion via Ollama/ComfyUI for local image generation

v1.2.1 β€” Release Blockers

Status: πŸ“‹ Planned (required before first Tauri release)

  • βœ… StorageBackend interface β€” storageBackend.ts, strict StoryProject types on proxy
  • βœ… Guided tour (Spotlight with driver.js, Dashboard + Help as entry point)
  • βœ… Tauri release pipeline: GitHub Release with installers on v* tags β€” docs/TAURI-CI.md / tauri-build.yml
  • ⬜ Tauri v2 auto-update (tauri-plugin-updater) + code signing β€” deferred to dedicated PR
  • βœ… FR/ES/IT key parity + CI gate (pnpm run i18n:check) β€” qualitative translations iterative
  • βœ… Bundle size budgets + rollup analysis as CI (pnpm run bundle:budget, analyze artifact β€” see docs/CI.md); optional LHCI performance budget still roadmap-open

v1.4 β€” Command Center, Gold-Standard Pipeline & Security Hardening

Status: βœ… Released as v1.4.0 (2026-05-12) β€” see CHANGELOG.md

  • Command Center: services/commands/ registry + CommandPalette.tsx (fuzzy search, recent/pinned, AI suggestions); CommandExecutorProvider; global shortcuts (services/keyboard/, useGlobalKeyboardShortcuts.ts); Settings β†’ Shortcuts
  • Settings hub: search over control hints; settings JSON import/export
  • Gold-Standard author pipeline: Binder, research split, compile profile, Pandoc EPUB, VC word-level diff, scene timeline, readability sampling, LanguageTool, local RAG rebuild, WebGPU leader election
  • Hybrid-AI: local backend presets (Ollama/LM Studio/vLLM), OpenAI-compatible base URL, configurable fallback chain, desktop port scan
  • Security: all GitHub Actions pinned to SHA, CodeQL SAST, OpenSSF Scorecard, gitleaks, SLSA attestation, Dependabot, branch protection
  • Quality: pnpm strict config, Lighthouse accessibility error gate (WCAG 2.2)

v1.4.x β€” Quality Enhancement (Master Perfection Plan)

Status: βœ… Completed (2026-05-16) β€” partial release of v1.4.0 cycle; details in CHANGELOG.md and TODO.md.

Unit Test Coverage: Phases 1–5

  • 178 test files, totaling 2 024 tests (v1.6.2); Vitest thresholds at 63/62/48/54 (Lines/Statements/Branches/Functions)
  • Measured coverage (2026-05-20, v1.6.2): 65.91 % Lines Β· 50.59 % Branches Β· 56.74 % Functions Β· 64.25 % Statements β€” all thresholds green

Phase 3A β€” Cross-Project Search Service βœ…

  • services/crossProjectSearchService.ts: searchAcrossProjects() via fuzzyScore, 5 locales (8 keys), transientUiStore integration (isCrossProjectSearchOpen), command palette command
  • v1 scope: single project (multi-project requires DB_VERSION bump)

Phase 3B β€” WebLLM Model Selector βœ…

  • WEBLLM_SUPPORTED_MODELS (4 MLC checkpoints: Llama 3.2 1B/3B, Phi-3.5 Mini, Gemma 2 2B), modelId/onProgress parameters, Settings UI with dropdown + WCAG progress indicator (role="progressbar", useRef mounted guard)
  • Localized in all 5 languages (3 new keys per locale in settings.json)

Phase 3C β€” Collaboration Security Warning βœ…

  • CollaborationPanel.tsx: security warning banner (role="alert", aria-live="polite", WCAG 2.2 AA) visible before connection establishment

Phase 4 β€” Stryker Extension + E2E Tests βœ…

  • stryker.conf.json: 3 additional mutation targets (fuzzyScore.ts, palettePreferences.ts, commandBuilder.ts)
  • tests/e2e/commands.spec.ts (palette Ctrl+K, "dashboard" search, fuzzy "wrt", Enter-navigate)
  • tests/e2e/collaboration.spec.ts (security warning banner before connection)

One-Click Library Export βœ…

  • services/libraryBackupService.ts: encrypted ZIP export (AES-GCM, META.json + vault.bin) β†’ Settings β†’ Data

v1.5 β€” Local AI, Mobile Touch & Collaboration Security

Status: βœ… Released 2026-05-19

  • βœ… WorkerBus v2, GpuResourceManager, EcoModeService, InferenceProgressEmitter
  • βœ… Active ONNX + Transformers.js inference (worker-offloaded)
  • βœ… LocalEmbeddingService (MiniLM-L6-v2), LocalNlpService (sentiment / summary / topics)
  • βœ… Hybrid RAG service (lexical + semantic + recency, 60/30/10)
  • βœ… Cross-Project Search v2 (privacy-preserving IDB index, two-phase search)
  • βœ… Yjs AES-256-GCM encryption foundation
  • βœ… Tauri v2 auto-updater pipeline + signing pipeline
  • βœ… Mobile PointerEvent resize, useLongPress, useSwipeGesture, BottomSheet, useHaptics
  • βœ… PromptLibrary + StyleTransfer / PlotHoleFix / ChapterAutoGeneration prompts
  • βœ… PluginRegistry + UsageAnalyticsService (opt-in)
  • βœ… 1 851 tests / 166 files; coverage 64.68 % lines / 49.06 % branches / 54.10 % functions

v1.6 β€” Plot-Board v2 & Writer Experience

Status: βœ… Released 2026-05-19

  • βœ… Plot-Board v2 β€” free-form canvas, SVG connections (5 types), subplot system, tension curve, beat-sheet overlays, snap-to-grid, mobile pinch/pan gestures
  • βœ… Real-Time Book Preview β€” scrollable Scrivener-style book view, live TOC, fullscreen, font controls
  • βœ… Reference Panel / Split-View β€” 6-tab panel (Characters, World, Notes, Binder, Comments, Revisions)
  • βœ… Per-Scene Revision History β€” IDB-backed snapshots, word-level diff, two-step restore
  • βœ… Threaded Comments β€” resolve/unresolve, nested replies, unresolved badge
  • βœ… Progress Tracker Dashboard β€” circular progress ring, live session timer, 30-day velocity chart, 12-week heatmap, streak system
  • βœ… Mobile Polish β€” foldable layout hook (Device Posture API), URL hash deep-linking, named haptic pattern library
  • βœ… 2 024 tests / 178 files; coverage 65.91% lines / 50.59% branches; lint βœ… typecheck βœ… i18n 1590 keys βœ…

v2.0 β€” Community & Collaboration

Status: πŸ’‘ Vision (partial delivery in v1.19.0 Phase 2)

  • Full E2E encryption for P2P collaboration (RTCDataChannel in-flight encryption) βœ… Done in B-3 (packages/collab-transport)
  • Community model list (curated Ollama models for creative writing)
  • RTL language support β€” ar/he stubs in B-5; full translation content + Persian still v2.0
  • Fine-tuning/LoRA support for personalized writing styles
  • Cloud sync option (optional, E2E-encrypted)
  • Plugin system for custom AI tools (build on PluginRegistry)
  • AI creativity presets per project (not global)
  • Visual regression tests (Playwright screenshots + Storybook Chromatic)

Architecture Decisions

Why Ollama instead of OpenAI-compatible?

  • Privacy: All data stays local
  • No costs: No API fees after hardware investment
  • Flexibility: Any GGUF model usable
  • Offline: Works without internet connection

Why not full E2E in v1.x?

  • Complexity: Yjs document encryption requires a key-exchange protocol
  • Pragmatism: PSK-based room isolation already provides good protection
  • Scope: Focus on writing UX rather than crypto infrastructure