Prioritized task tracker for the current sprint. Status: π in progress | β¬ open | β done
Completed items are archived in
docs/history/. Long-term features and quarterly planning βROADMAP.md.
Status: π in progress. The authoritative native sequence remains
docs/native/ROADMAP-QT-GPUI-DESKTOP.md, with the next Rust-Core capability choice recorded indocs/native/CORE-MIGRATION-LEDGER.md. R-15 implementation stays blocked behind the still-open Wave 2 prerequisite (ledger row 9). No Qt, GPUI, or R-15 implementation work is part of this sprint.
- β
v1.28.5tagged (PR #676, 2026-09-09) β but its tag-triggered Tauri desktop release build failed on every platform with a Rust/npm plugin version mismatch (tauri-plugin-http,tauri-plugin-notificationdrifted ahead of their npm counterparts after #661's Rust-only bump), so no GitHub desktop Release or installer/updater assets were ever published for it. This was desktop-build-specific: the separate Docker/GHCR publish workflow for this tag succeeded, so a container image forv1.28.5does exist. Thev1.28.5tag is permanently kept as-is (never deleted/moved/re-tagged) as the historical failed/incomplete desktop-release cut; the corrected release ships asv1.28.6. - β
PR #678 merged (2026-09-09): aligned the drifted npm plugin versions and added
check-tauri-plugin-versions.mjs, a cheap CI guard mirroring Tauri's own build-time Rust/npm parity check for every workspace importer, so this class of mismatch is caught before the next release tag instead of at tag-triggered release time. Cross-platform Windows/Ubuntu/macOStauri-build.ymlqualification succeeded on the exact final PR head / merge-candidate SHA (52f14d15aebede5a0482225ba6327221ef81d9c8) before merge; the resulting squash-merge commit onmainwas a different SHA, produced only after that qualification. - β
PR #679 merged (2026-09-09): resulting-
mainCI failed once post-#678 on the CHANGELOG completeness gate's PR-number-reference requirement. PR #678's number was already known before merge; what didn't exist yet was the final squash commit. The PR-branch check doesn't enforce a current PR's own already-known number against[Unreleased], only resulting-main's commit history, so PR CI stayed green and only resulting-main'sdocs:checkcaught the missing reference; a one-line CHANGELOG fix restored it to green. (A possible future pre-merge hardening of this check is recorded as deferred, memory-only follow-up β not part of this release cut.) - β
v1.28.6released (PR #680, 2026-09-09): version/CHANGELOG.md/TODO.md/README.mdreconciliation for the Tauri plugin-parity recovery, merged after an exact-SHA Windows/Ubuntu/macOStauri-build.ymlqualification passed on the intended tag commit. Tagv1.28.6and its GitHub Release (full desktop installer/updater asset set, all platforms) are published; the tag-triggered Tauri/CI/Docker workflows and the post-releaseAUDIT.mdevidence entry (PR #681) are complete. - β
PR #674 merged (2026-09-09): the CHANGELOG completeness gate upgraded from accepting any
non-empty
[Unreleased]section forever to requiring every governed commit to be individually referenced by PR number or subject slug; backfilled 13 previously-undocumented entries. The remaining structural heuristic-matching limitation (a short token like a version number can still clear the word-overlap ratio in an otherwise-matching sentence) is intentionally out of this gate's deterministic, non-NLP scope and is tracked separately as #675. - β¬ Ledger row 9 (project state-shape compatibility adapter) remains open: durable
source-generation fencing, writer integration, universal ingress/egress, and authority switch
per
docs/native/CORE-MIGRATION-LEDGER.mdrow 9. Wave 3/4 R-15 implementation stays blocked (S5_IMPLEMENTATION_READY=NO, recorded on row 10) until row 9 andS5_TERMINAL=YESare both true β no target release is set for that yet (tracked, not invented). - β¬ #614 (narrow concurrent-first-install multi-tab race), #532 (WelcomePortal E2E entry nondeterminism root cause), and #675 (deterministic contract for the changelog gate's unnumbered-commit heuristic) remain open, tracked separately β not part of this sprint unless they directly block release or R-15 work.
- β
v1.28.4released (PR #615, tag+release published 2026-09-05); the prior sprint's release and governance work (attribution-hygiene guard PR #672, security-docs truth fix PR #673) closed out. - β PR #674 merged (2026-09-09): CHANGELOG completeness-gate upgrade (see current sprint entry above for the full description, carried forward since it remains active work).
- β
v1.28.5release-prep PR #676 merged and tagged (2026-09-09) β see current sprint above for why this release cut is superseded byv1.28.6.
Status: β Superseded by the current sprint above.
v1.28.4shipped 2026-09-05; PR #674, thev1.28.5release cut, and itsv1.28.6desktop-release-build recovery are the current sprint's continuation of this same work.
- β
v1.28.2(2026-08-27) andv1.28.3(2026-08-27) released, closing out the prior sprint's accumulated reconstruction-reconciliation and documentation-truth work. - β PWA first-install unprompted-reload fix (#585, PR #613) and shared-origin service-worker cache-read isolation fix (#514, PR #612) merged.
- β
WCAG AA contrast +
prefers-reduced-motioncascade fix and default-appearance-preset change (#565, PR #609); ManuscriptEditor contrast fix (#341, PR #560). - β Preserve-first desktop corruption recovery (PR #542) and a distinct filesystem-I/O recovery action (PR #545) landed.
- β Visual regression testing repaired β baselines previously pointed at directory listings, not the application (PR #610).
- β
v1.28.4released (PR #615, tag+release published 2026-09-05): version/CHANGELOG.md/TODO.md/README.mdreconciled,v1.28.4tag and GitHub Release published with all expected Desktop artifacts; post-merge main CI and CodeQL green (CodeQL has no tag trigger), tag-triggered CI/Tauri/Docker all green, andAUDIT.mdupdated with real evidence. - β Attribution-hygiene guard merged (PR #672): fail-closed rejection of AI/session attribution trailers and footers in commits, tags, and PR titles/bodies (commit-msg hook, pre-push scan, CI).
- β
Post-audit truth/governance remediation PR #673 merged: stale
#356-active-remediation citations indocs/SECURITY-THREAT-MODEL.md/docs/IDB-ENCRYPTION.mdrewritten to anchor on the living ledger state, with a mechanicalcheck-doc-metrics.mjsguard against recurrence (first slice of the 2026-09-08 external audit's S1βS10 remediation sequence; further slices in progress).
The completed release and infrastructure sections below are retained for provenance. They are not the current sprint plan; long-term native sequencing belongs in the linked roadmap and ledger.
Archived β Post-#477 reconstruction reconciliation, Dependabot, and documentation truth (2026-08-26)
Status: β Superseded by the current sprint above. The release this section's final bullet anticipated shipped as
v1.28.2andv1.28.3(2026-08-27).
- β
PR #477 (Qt/PWA architecture-governance roadmap) merged;
v1.28.1released 2026-08-23. - β
Reconstruction reconciliation: the frozen PR #491 bundle's three genuinely-still-required
residual pieces were rebuilt fresh against current
mainand merged β structural workflow-policy YAML authority (#505, S4), Intel macOS qualification-only build lane (#508, S5), and tiered PR-size governance (#509, plus an incidental lint-info cleanup #511). #491 and #493 were closed with terminal reconciliation ledgers; every other frozen cluster was either already shipped via #494/#498β#502, or is a deliberately deferred architecture question with durable tracking (isolated-worktree hermetic-sandbox verification, issue #504). - β
Dependabot backlog cleared: #495 (
osv-scanner-action2.5.0β2.5.1 β plus a real pre-existing test-oracle fix for the hardcoded SHA it changed) and #496 (docker/setup-buildx-action4.2.0β4.3.0) merged. - β
Documentation truth pass (
AUDIT.md/TODO.md, this update).
Status: β Superseded by the current sprint above.
- β
P0 CI/deployment authority stabilization merged in PR #427 at
0309a255. - β Cross-workspace Tauri path-dependency coverage and aggregate deployment gating are now regression-tested in the quality job.
- β G1 partial-completion items (task supervision, diagnostics, contract versioning) were carried forward into PR #477's architecture-governance roadmap, now merged.
Status: β Done. Tagged, released, and live β see the GitHub Release link below.
Native Grok/Claude providers, opt-in Browser-Ollama, and DuckDB codex_mentions.excerpt
cell-level encryption (SEC-6) all shipped in this cycle β see
docs/history/completed-v1.25.0-providers.md for
the full completed checklist. CHANGELOG.md, package.json/README.md, and src-tauri/public/sw.js
are all version-bumped and synced for this release.
- β
PR #303 (DuckDB excerpt encryption SEC-6 + CodeRabbit fix + doc-truth fixes) merged to
mainat256264d3via admin-bypass squash-merge (fresh maintainer authorization;mergeStateStatuscache-lag artifact β all 20/20 checks green, 0 unresolved review threads, Tauri Rust build manually verified green on all 3 platforms before merge). - β
Tagged and published
v1.25.0aftermain's post-merge CI (build+e2e) went green β the GitHub Release is live with all Tauri installer assets (macOS/Linux/Windows) and.sigfiles; seev1.25.0on GitHub.
Status: Resolved same-day. Briefly paused via
vercel.json'sgit.deploymentEnabled: falseafter 2 consecutive preview-deployment failures with only a generic "Deployment has failed" message and no further detail from the GitHub Checks API.npx vercel inspect --logsneeds an interactive account login unavailable in-session, so the actual fix came from noticing Vercel'sbuildCommandrunspnpm run build:edge(node scripts/build-edge.mjsβvite buildwithDEPLOY_TARGET=edge) β a different command than the plainpnpm run buildused for the earlier (misleading) local repro attempt, which succeeded and pointed away from a code cause. Reproducing the exact Vercel command locally (NODE_OPTIONS=--max-old-space-size=3072 pnpm run build:edge) immediately surfaced the real error:[MISSING_EXPORT] "ensureInferencePool" is not exported by "services/workerBusManager.ts"βservices/ai/localEmbeddingService.ts(part of the in-flight worker-generation-consolidation migration, PR #288) imported and called a function that was never actually added toworkerBusManager.ts. Vitest never caught it becauselocalEmbeddingService.test.tsmocks the entireworkerBusManagermodule (vi.mock(...)wholesale replacement), so the real file's missing export was invisible to that suite;tsgo's local typecheck also passed clean for reasons not fully understood (worth a follow-up look at cache behavior) β only rolldown's stricter static bundling in the real production build caught it. Fixed by adding the missingensureInferencePool()(mirrorsensureDuckDbPool()'s shape) plus aworkerBusManager.test.tssuite that imports the real module instead of mocking it β that suite would have caught this immediately.git.deploymentEnabledreverted to enabled; verified fixed via a clean localbuild:edgere-run before re-enabling.Lesson for future Vercel-build debugging in this repo: always reproduce with the exact
vercel.jsonbuildCommand, notpnpm run buildβ they differ (build:edgesetsDEPLOY_TARGET=edgeand runsscripts/sync-deploy-base.mjsfirst) and a plainbuildpassing does not prove the deploy build would.
Status: Merged (PR #284) and released as
v1.24.2on 2026-07-29. Full record:docs/audit/WS-RUN-LOG-2026-07-29.md,docs/adr/0013-csp-wasm-and-blob-frames.md,docs/adr/0014-worker-generation-duplication.md. All 14 findings (F-01β¦F-14) code-complete β seeAUDIT.md's new audit section for the finding table.
- β
CSP functional truth β
'wasm-unsafe-eval'+frame-src blob:on all 5 surfaces; the local-inference stack (WebLLM/ONNX/Transformers.js/DuckDB-WASM/Whisper/Kokoro) had been silently broken in production for two months. New 3-layer CSP test architecture. - β Desktop API-key encryption β PBKDF2 600k + random salt, replacing an unsalted single-SHA-256 scheme.
- β DuckDB-WASM self-hosted β replaced an unversioned, already-CSP-dead third-party CDN.
- β
Doc-truth fixes β fabricated
tauri-plugin-strongholdclaim removed; canonical Vercel URL unified with a new drift gate; CI Storybook 3Γβ1Γ + a genuinely broken test-runner invocation fixed. - β Coverage ratchet raised to CI-measured values (L79/F72/B65/S77).
- β
Worker-generation consolidation (F-14) β the dedicated migration sprint
docs/adr/0014-worker-generation-duplication.mddeferred, executed as 4 stacked PRs: #286 (parity gate + real handler tests for the previously-untested v2 workers), #287 (DuckDB βduckdbClient.tsmigrated,workers/duckdbWorker.tsdeleted), #288 (embeddings βlocalEmbeddingService.tsmigrated), #290 (NLP βlocalNlpService.tsmigrated,workers/inference.worker.tsdeleted, closing out v1 entirely). Decision record:docs/adr/0015-worker-generation-consolidation.md(supersedes 0014). Correction loops on #287/#288 surfaced and fixed real bugs the original v2 files had never been exercised against: DuckDBparamswere silently dropped (already live intelemetryService.ts's parameterized writes),terminatePool()could leave tasks hanging forever, a respawned DuckDB worker lost its connection, andensureInferencePool()was imported but never defined (broke Vercel's prod build β see the entry below). Merge status: #286 merged; #287/#288/#290 open, stacked, CI green β merge in order before the next release. - β
Pre-existing, unrelated E2E a11y finding surfaced during this sprint's CI runs β
tests/e2e/a11y.spec.ts"writer version control panel has no serious axe violations" failed deterministically (color-contrast4.47 vs. 4.5 required,--sc-accent#92400eover its own/20-opacity background#e0cab0). Confirmed unrelated to the CSP/crypto sprint, but small and well-scoped, so fixed directly rather than deferred:components/writing/WriterViewUI.tsx's active-toggle classes reused--sc-accentfor both background tint and text instead of the already-vetted--nav-background-active/--nav-text-activetoken pair; switched all 3 occurrences (Writer VC desktop/mobile + mobile ProForge, same shared pattern). - β
Tag
v1.24.2+ publish the GitHub Release β stale entry, already done (verified viagit tag/gh release list:v1.24.2tagged and published 2026-07-29T11:25:42Z).
- β
ProForge β opt-in β flipped
enableProForgedefault tofalse(experimental, token-heavy); now 17 on / 6 off. Slice + tests +FEATURE-PARITY.md+CLAUDE.mdupdated in lockstep. - β
Feature catalog reconciled β
featureCatalog.tscovers all 23 flags;defaultOnderived from the slice (drift now impossible, guarded bytests/unit/featureCatalog.test.ts); added risk/desktop/dependency metadata. - β Grouped Settings UI β Experimental flags grouped by category with risk hints, dependency-aware disabling (Voice WASM β Voice Support), "Desktop only" note (Rust Compute), and Reset-to-defaults.
- β
WebNN flag decision β the ghost/stub
enableWebnnInferencetoggle was retired (removed fromfeatureFlagsSlice.ts's 22 flags); seetests/unit/featureFlagsSlice.test.ts:96("WebNN flag (a ghost/no-op toggle) was removed β 22 flags"). This line was stale β reconciled 2026-07-29. - β¬ CII Best Practices badge β removed from
README.md(was a literalprojects/XXXXplaceholder β broken image, dead link). Register the project at https://bestpractices.coreinfrastructure.org/ (external, interactive signup β maintainer-only action), then re-add the badge with the real project ID.
All P0 release-blockers closed and v1.23.0 shipped 2026-06-16. The only item still open is the human-only manual smoke-test sign-off (below). Forward-looking P1/P2 work has moved to the Upcoming β v1.24 / v2.0 Foundation block in
ROADMAP.md. Archived v1.22 tasks βdocs/history/completed-v1.22.md.
- β
ROADMAP/TODO sync β
ROADMAP.md,TODO.mdundAUDIT.mdwiderspruchsfrei auf v1.22.0 + v1.23-Ziele gebracht (2026-06-13). Vorheriger Drift: ROADMAP markierte alle P0 β , TODO noch β¬ β jetzt evidenzbasiert abgeglichen. - β
Tauri Desktop Pipeline final verifizieren β
tauri-build.ymlgrΓΌn auf Ubuntu/macOS/Windows (Run #27439443241). Signing-Secret/Updater bleibt offen fΓΌrv*Releases (kein Secret fΓΌr workflow_dispatch). - β
Dependency-Hygiene β
pnpm audit --audit-level=highund--audit-level=moderateβ 0 Vulnerabilities (verifiziert 2026-06-13).pnpm outdatedneu erhoben: nur Patch/Minor-Drift, keine Majors.AUDIT.mdKnown Overrides Table aktualisiert:esbuild >=0.28.1-Row ergΓ€nzt, Platzhalter-CVE-Refs durch verifizierte Advisory-IDs ersetzt, Status-Datum auf 2026-06-13. - β
i18n Parity β
pnpm run i18n:checkgrΓΌn (2590 Keys Γ 11 Locales).ja/zh/pt/el+ar/heerreichen Projekt-Ziel β€5 % EN-Placeholders;ar/heUI vollstΓ€ndig ΓΌbersetzt, native Review offen.--qualityScan zeigt zusΓ€tzliche "likely untranslated" EintrΓ€ge (v.a. technische Begriffe), die kein CI-Gate blockieren β siehedocs/V1.22-SMOKE-TEST.mdfΓΌr manuelle Locale-PrΓΌfung. - β
Smoke-Test-Protokoll authored β
docs/V1.22-SMOKE-TEST.mdmit manuellen Szenarien fΓΌr alle v1.22-Features (AI-Modi, OpenRouter, Copilot v2, Voice-Download, PWA, Core, Tauri).- β¬ Manuelle AusfΓΌhrung (Human-only): Protokoll gegen beide Live-Demos (GH Pages + Vercel) + lokalen Tauri-Build durchspielen und Sign-off-Tabelle ausfΓΌllen. Kein Code-Task β bleibt offen bis ein Tester die Matrix abhakt.
- β
Plugin Sandbox post-fix validation β adversarial Worker-Tests ergΓ€nzt (WebAssembly-Denial, Generator/AsyncGenerator-Constructor-Escape, Guard-Restoration auf Success- und Error-Pfad) in
tests/unit/workers/plugin.worker.test.ts(23 Tests grΓΌn).pluginRegistry.test.tsdeckt Storage-Key-Validierung (Prefix/LΓ€nge/..-Traversal/Separatoren) + 2-MiB-Value-Cap bereits ab. Tracking + Follow-up FU-1 (Function.prototype.constructor Restore-Asymmetrie, low impact) indocs/AUDIT-PERFECTION-PLAN-v1.23.md.
- β¬ Coverage-Ziele erreichen (Lβ₯85 %, Bβ₯75 %, Fβ₯80 %) β Fokus AI-Routing, Voice, Copilot.
- β¬ Local AI & Voice hΓ€rten (Whisper/Kokoro Low-End, Eco-Mode, RAM/GPU-Monitoring).
- β¬ Error Boundaries + Logging fΓΌr AI/Worker-Failures konsistent.
- β¬ Accessibility Deep-Dive (Keyboard + Screen-Reader).
- β
AI Execution Mode section β Card shell, native ARIA radiogroup (arrow-key nav + roving tabindex), live-region announce, dynamic WebGPU/offline capability hints, full localization (AiModeIndicator hardcodes β i18n, +7 keys Γ 11 locales), new
AiExecutionModeSection.test.tsx(10). (Delivered 2026-06-14 infeat/ai-execution-mode-perfection)
- β
AI Execution Mode section β Card shell, native ARIA radiogroup (arrow-key nav + roving tabindex), live-region announce, dynamic WebGPU/offline capability hints, full localization (AiModeIndicator hardcodes β i18n, +7 keys Γ 11 locales), new
- β
Command Palette Integration fΓΌr OpenRouter β
ai.mode.openrouter.toggle(enable/disable provider + confirmation toast) undai.mode.openrouter.resetCircuit(when-gated: nur sichtbar wenn OpenRouter aktiv und Circuit offen; ruftresetOpenRouterCircuit()+ Toast).CommandRuntimeDeps.openRouterEnabledergΓ€nzt (CommandPalette + App.tsx executeCommand). +5 i18n-Keys Γ 11 Locales (palette.openRouter.*), +5 Tests incommandDefinitions.test.ts. lint/typecheck/i18n/tests grΓΌn. (Delivered 2026-06-14)
- β
tests/unit/settings/openRouterSection.test.tsxβ toggle, key input, model selector. (Delivered 2026-06-13 infeat/openrouter-section-perfection) - β¬
pnpm exec tsx scripts/audit-feature-parity.tsβ 0 drifts.
- β
Desktop Ollama/LM Studio/vLLM discovery fixed (#266) β
vite.config.ts'srollupOptions.externalwas unconditionally externalizing@tauri-apps/*even for the Tauri desktop build itself, leavingservices/localServerHttp.ts's@tauri-apps/plugin-httpimport unresolvable in the packaged.deb/.msi. Fixed via a sharedisTauriBuild()check; see the 2026-07-28 update in ADR 0012. - β
Misleading "Ready" status badge for Ollama in the browser fixed (#266) β the status badge and the desktop-only banner were driven by two unreconciled state signals; badge now shows a distinct "Not available in browser" label. Scan also now prefers native
/api/tagsover the OpenAI-compat shim for Ollama. - β
Dependabot batch β 20 PRs resolved (16 merged, 4 closed as superseded) β 14 were straightforward bumps merged directly (Actions bumps, small JS/dev-tooling patches, Tauri/Rust crates, the tauri-deps group, and a stray
logcrate bump in/src-tauri, #246). The remaining 6 all had real breaking-change blockers, root-caused and fixed rather than force-merged or suppressed:- #255 / #249 / #253 / #250 (
@ai-sdk/google/@ai-sdk/openai/@ai-sdk/react/aimajor bumps) β@ai-sdk/google@4alone emitsLanguageModelV4, incompatible with the pre-upgradeaipackage'sLanguageModeltype; root cause was a partial-family upgrade. Fixed by bumping all four together in PR #275 (feat/ai-sdk-v4-upgrade), which supersedes these 4 PRs β closed once #275 merged. - #252 (
@biomejs/biome2.4β2.5) β schema-version mismatch plus 2 real new lint findings (noUnsafeOptionalChainingΓ4,noUndeclaredEnvVarsΓ21 viaturbo.jsonglobalEnv) fixed with real code changes, no suppressions; pushed directly onto the Dependabot branch. - #265 (dev-tooling group) β
@babel/core@8transitively brokereact-docgen@8.0.3's Storybook build (loadPartialConfigremoved); fixed by capping the existingpnpm-workspace.yamloverride at<8, verified with a realbuild-storybookrun; pushed directly onto the Dependabot branch.
- #255 / #249 / #253 / #250 (
- β
Issue #60 (vendor-fork audit) β status comment posted confirming the audit is done (fork at
10.3.0-sc2,verify:vendorCI guard); issue stays open per its own "permanent reminder" note. - β
CLAUDE.md locale-count drift fixed β i18n section undercounted the locale roster (17 vs. the actual 19 β
ru/kowere added in a prior PR but never reflected) and the per-locale module count (20 vs. 21). - β
pnpm run buildwarnings fixed β invalid[dir:ltr]/[dir:rtl]Tailwind arbitrary variant (compiled to the invalid CSS pseudo-class:is(dir:ltr)) replaced with the built-inltr:/rtl:direction variants; 3 ineffective dynamicimport()calls (already statically imported elsewhere) converted to static imports. - β
CodeRabbit findings that failed to post inline on PR #274 β a rate-limited re-review posted 10 findings as review-body text instead of formal threads (GitHub API error). Verified each against current code: 2 already fixed, 5 real (a11y + a genuine CWE-209 stale-request race in
AiProviderCard.handleTest, an unsafeLocalServerError.messagepassthrough inollamaService.ts, a loose test assertion) fixed with code + dedicated regression tests, 1 already resolved by an earlier commit, 2 judged already-adequately-covered by existing comments. - β¬ Re-open: native Intel-Mac (x86_64) desktop builds β the
macos-13hosted runner (added totauri-build.yml's matrix for this) never actually provisions a runner; the job sits in GitHub's queue indefinitely instead of starting, so 3 consecutive tagged-release builds each hung the full ~24h queue ceiling and blocked the entire release (thereleasejob'sneeds: [bundle]only resolves once every matrix leg reaches a terminal state) even though Ubuntu/Windows/macOS-ARM finished in ~12 minutes. Removedmacos-13from the matrix on 2026-07-28 (seedocs/TAURI-CI.md); Intel Mac users get no native build/auto-update until a working runner option is found (self-hosted,macos-latest-large, or a replacement GitHub-hosted Intel image).
pnpm-workspace.yamlhardening (strictDepBuilds: true,blockExoticSubdeps: true,minimumReleaseAge: 10080) is active.pnpm audit --audit-level=highβ 0 vulnerabilities;pnpm audit --audit-level=moderateβ 0 vulnerabilities. Aktueller Status inAUDIT.mdΒ§ Known Overrides Table.
- β¬ pnpm override housekeeping β nach
@storybook/test-runnerUpgrade auf jest-process-manager 1.x (drops wait-on@7), direkten Lockfile-Patch aufjoientfernen. - β¬ Renovate grouping β
@storybook/*bumps atomisch upgraden. - β¬ Moderate audit threshold β CI
pnpm audit --audit-levelvonhighaufmoderateanheben, sobald joi/wait-on aus dem dep tree sind.
Master Plan:
.claude/plans/master-prompt-worldscript-studio-glistening-pnueli.md(Deep Audit 2026-06-09, findings F-1β¦F-9). NOTE: prior sprint blocks are retained inline below (file convention), not moved todocs/history/.
- β
WS-1 (F-1/F-3/F-5,
bc53bbc) β README badge v1.21.0βv1.20.0 + metrics (433 test files / 2 357 i18n keys); 28 misfiled CHANGELOG entries migrated[Unreleased]β[1.19.0]; this TODO rollover. - β
WS-2 (F-2,
5e7e49e) β CSPconnect-srcOption B: removed redundant cloud endpoints, kepthttps:for shipped BYOK; ADR-0004 +tests/unit/csp.test.ts(6/6); Tauri CSP stays strict. - β
WS-3 (F-6,
6ce236f) β@huggingface/transformers4.2.0 verified against ai-core/voice: APIs unchanged, typecheck clean, 63 tests green; no source change. - β
WS-4 (F-4,
f3cc74f+6cc3e7d) β suppression-debt ratchet gate (scripts/check-suppressions.mjs, baseline 181) wired into CI; abated 22noExplicitAny(3 production + 19 test mocks βservices/had none) β baseline 159. - β
WS-5 (F-8,
8e5bd4a) β bundle-budget single source of truth:--max-kb 6500 --max-entry-kb 4000, script defaults aligned; corrected the inaccurate "~4000 KB entry" claim (real entry β 496 KB). - β
WS-6 (F-7/F-9,
3e0aa82) βVENDOR-FORKS.mdCVE/OSV-coverage section (vendored y-webrtc invisible to OSV β manual process) + newdocs/COVERAGE-POLICY.mdratchet rule.
- β
P1-1 β WebLLM Worker Offload (ADR-0005): dedicated WorkerBus v2
webllmpool (workers/v2/webllm.worker.ts, capabilityinference.webllm);generateLocalTextis worker-first with automatic main-thread fallback (NO_WEBGPU / spawn fail / circuit-open), decoupled fromenableWorkerBusV2viaensureWebLlmPool(); GPU mutex + tab election stay main-thread; progress bridges toinferenceProgressEmitter. Tests:webllmWorkerHandler.test.ts+ updatedlocalAiFacade.test.ts. - β
P1-2 β Whisper WASM STT end-to-end: download UI β
+ VADβSTT bridge β
+ E2E β
β deterministic deep suite
tests/e2e/deep/voice/whisper-stt.spec.ts(download progress/cancel/errorβretry, STTβintentβcommand, stop-listening) via guarded seamservices/voice/voiceTestSeam.ts; nightly real-inferencevoice-nightly.yml+whisper-real.spec.ts. Remaining (follow-up, both CI/Playwright-only β cannot be reproduced or verified on the constrained local host): (a) real-audio transcription assertion needs a committed speech WAV driven via--use-file-for-fake-audio-capture(a valid speech fixture can't be generated offline here); (b) two STTβcommand navigation deep tests aretest.fixmeβ the headless mock-STT β push-to-talk β command-dispatch chain doesn't fire reliably under fake-media. Re-enable after capturing a Playwright trace of the CI voice-init sequence. The covered substitute is explicit unit coverage of the service chain: transcriptβintentβvoice-commandCustomEvent (tests/unit/services/voice/voiceDownloadAndIntent.test.tsprocessTranscriptβ asserts the dispatchedcommandId) + the App-levelvoice-commandβexecuteCommandβrunCommandByIdbridge (App.tsx:512). Consent clarity DONE (v1.24.0, PR D): the misleading "all voice runs locally" intro is corrected and a per-engine cloud-vs-on-device privacy note now renders beside the STT engine selector (settings.voice.engine.privacyNote, 17 locales). - β
P1-7 β Bundle Budget single source of truth (F-8):
package.jsonbundle:budget=--max-kb 6500 --max-entry-kb 4000;scripts/check-bundle-budget.mjsdefaults match. Real sizes (CI 2026-06-09): entryindex-*β 496 KB; largest vendor chunklib-*β 6 054 KB (~446 KB headroom under the 6500 per-chunk ceiling). Superseded 2026-06-14 by PR #130 β budget tightened to--max-kb 6200 --max-entry-kb 2500;lib-*split into namedvendor-webllm(~6.0 MB, binding constraint) /vendor-onnx/vendor-transformerschunks. SeeAUDIT.mdΒ§ v1.23 Bundle Split. - β¬ P2-2..P2-4 β v2.0 foundation (Cloud-Sync conflict resolution, Plugin Registry Beta, ADRs 0005+).
Master Plan:
docs/AUDIT-2026-06-06-Deep-Correction-Plan.md(aus.kimi/plans/obsidian-swamp-thing-tempest.md)
- β
P0-1 β Tauri Desktop Pipeline: pnpm config migration + signing fix + production hardening audit. Vercel green; CI Quality Gate running; Tauri builds active with new signing key. Commits
946045eβ9d222c3. - β
P0-2 β Coverage C-7: 96 neue Tests geschrieben (Ziel 90 ΓΌbertroffen).
- LoRA: datasetBuilder (19) + evaluationService (16)
- Voice: intentEngine (17) + feedbackService (23) + audioNavigator (21)
- β
P0-4 β Native File Associations + Single-Instance:
.worldscript/.scstextensions registered, deep link handler inservices/tauriDeepLink.ts, RustRunEvent::Opened/RunEvent::SecondInstancehandlers inlib.rs. - β
P0-3 β Quality Gates stabil: lint β
Β· typecheck β
Β· i18n:check β
Β· parity:check + bundle:budget + smoke:prod green on
main(CI confirmed through PR #103, merged 2026-06-09).
- π P1-2 β Whisper WASM STT end-to-end: Download UI β
(v1.21, 2026-06-09) Β· VADβSTT bridge β
(2026-06-09) β
VoiceActivityCoordinatorwires WebRtcVadEngine PCM frames into WasmSttEngine; MIN_SPEECH_CHUNKS gate + MAX_BUFFER_MS flush; voiceCommandService routes through coordinator when enableVoiceWasm + whisper active. 12 unit tests. Remaining: full E2E integration test (CI-only) - β
P1-3 β Redux-Undo Γ Zustand Race Condition:
manuscriptPinnedBinderNodeIdreconciler inlistenerMiddleware.tsβ prΓΌft nach project save/undo/redo/import ob pinned node noch existiert, reset aufnullwenn stale. Commita799bc9.- Hinweis: Rust TaskSupervisor UI (ManuscriptStatsPanel) ist separat in WorkerBus v2 Phase 3 (siehe unten).
- π’ Language expansion β 6 neue Locales (11 β 17):
fi/sv/hu/is/eu(Beta) +fa(RTL, Persisch). Infra + Glossar (v2.0, ~44 Anker-Begriffe), Priority-Files hand-ΓΌbersetzt; alle ΓΌbrigen Module bulk-ΓΌbersetzt (glossar-verankert, Placeholder-maskiert) β ~96-100 % ΓΌber alle 10 Beta-Locales.glossaryTranslatePartial-Match-Bug behoben (jetzt Exact-Match-only; ~1.300 teil-englische Strings neu ΓΌbersetzt). Offen: menschliche Native-Review (Checkliste indocs/TRANSLATION-GUIDE.mdΒ§6). Siehedocs/LANGUAGE-EXPANSION-2026.md. - β
P1-5 β Beta-Sprachen ja/zh/pt/el β€ 5% English-Placeholders erreicht (verifiziert 2026-06-09: pt 2.2% Β· el 2.8% Β· ja 0.9% Β· zh 0.5%). Tooling:
scripts/bulk-translate-locales.mjs(Google-Translate-Endpoint mit Rate-Limiting/Retry/Checkpointing/Glossary) +locales/translation-glossary.json+docs/BULK-TRANSLATION.md. Command:node scripts/bulk-translate-locales.mjs --lang=ja,zh,pt,el --all --delay=400. - β
P1-4 β Error Boundaries + Logging: Alle 19+ Views in
App.tsxmitErrorBoundary/ViewErrorBoundarygewrappt (WelcomePortal frΓΌher Return-Path + alle Modals/Portals). Commitsf810d51+6305d64.
- β
P1-6 β Race-Condition Audit: Redux-Undo + Zustand reconcile (
listenerMiddleware.tsclearsmanuscriptPinnedBinderNodeIdwhen node no longer exists after project change/undo/redo). Commita799bc9. - β
P1-7 β Bundle Budget: ceilings unified in one place (
bundle:budget=--max-kb 6500 --max-entry-kb 4000; script defaults match). Correction: the prior "~4000 KB Entry (nahe Limit)" note was inaccurate β theindex-*entry is ~496 KB; the binding constraint is thelib-*vendor chunk (~6 054 KB vs the 6500 per-chunk ceiling). See WS-5 / F-8. - β¬ P2-1 β Error Boundaries + Logging: Alle 19 Views, Kein console.error
- β¬ P2-2 β Cloud-Sync Conflict Resolution
- β¬ P2-3 β Plugin Registry Beta
- β¬ P2-4 β ADRs 0004/0005 + CLAUDE.md/AGENTS.md Update
- β
pnpm lockfile sync β
@xenova/transformersβ@huggingface/transformers@^3.8.1;ERR_PNPM_OUTDATED_LOCKFILEblocked all CI runs - β 14 CodeAnt AI issues fixed β webllm dispose on eviction, releaseWebLlm both variants, await releaseAllOnnxSessions, computeShaderFactory race condition, localAiDeviceProfiler backend recommendation, adaptiveAiEngine task field, telemetryService feature flag gate, window guards, AiSections conditional mount, AdaptiveAiHardwarePanel i18n (2160 keys Γ 5 locales)
- β E2E stabilisation (24 β ~0 failures) β VRT baselines, WelcomePortal contrast, waitForSpaReady theme-wait, seedGeminiApiKey role=switch fix, SceneBoard ARIA (toolbar/li), LoRA wizard skip, a11y locators, export localStorageOnly
- β Local AI Perfection β Phase 1 + 2.1 complete β IDB session lock + key rotation, Silero VAD + Kokoro TTS async, GPU diagnostics, real text-gen pipelines, AbortSignal
- β Scorecard Pinned-Dependencies #72 β graphifyy pip install pinned by SHA256 hash
- β prune-deployments.yml β all-environment pruning (Production/Preview/github-pages); 156 records deleted; github-script v7βv9 (node24)
- β Storybook cloud-first CI β storybook-debug.yml (manual dispatch), Playwright browser cache v5 (node24)
- β
Local AI Perfection Phase 2.2 β LoRA productionization (2026-06-02):
LoraViewcontainer assembles library/dataset/evaluation/wizard behindLoraViewContext; gatedloraroute in App.tsx; conditional sidebar nav (enableLoraAdapters);View/APP_SECTIONS/viewNavigationLabels/LORAicon/sidebar.lora(7 locales);lora-wizard.spec.tsre-enabled; LoraView unit test - β
AI retry/fetch hardening (2026-06-02) β
aiRetryexponential backoff + jitter + Retry-After (P1-F5);fetchAdapteropt-in streaming-safe timeout (P1-F6) - π Local AI Perfection Phase 2.3 β Performance hardening. β
(2026-06-02) Pipeline LRU cache unified into
services/ai/pipelineLruCache.ts(was duplicated inworkers/inference.worker.ts+workers/v2/inference.worker.ts); adds dispose-on-evict (closes VRAM/RAM leak) + in-flight load dedup; 9 deterministic tests. β¬ Remaining: WebLLM worker offload, LRU result-pipeline warmup tuning - π Local AI Perfection Phase 2.4 β Coverage. Correction:
sileroVadEngine.ts(5 tests) +kokoroTtsEngine.tsalready had tests since 2026-05-31 (TODO "0 tests" was stale). β (2026-06-02) Filled real Kokoro gaps βcancel()/pause()/resume()/dispose()+ no-WebAssembly branch (+4 tests β 10). Inference-worker LRU now covered viapipelineLruCache.test.ts(13). β¬ Remaining: threshold bump to CI-measured floor - β
OpenRouter Settings Section hardening (2026-06-13) β searchable design-system
Select, authenticated model catalog fetch/cache, key validation/test-connection, full i18n (38 new keys Γ 11 locales),ViewErrorBoundarywrapping, 10OpenRouterSectionunit tests + 12openrouterModelstests + 4 provider tests. All 11 CodeAnt AI inline comments addressed (free-model i18n, cloud AI policy gates, cache validation, Escape propagation, authenticated catalog, error-resilient Select, re-fetch on credential change). PRfeat/openrouter-section-perfection. - β
WorkerBus v2 Phase 1 β
@domain/worker-buspackage: typed worker pool, circuit breakers, dead-letter queue, priority task queue, progress emitter, protocol handler; 123 tests / 12 suites; 84.5% coverage - β
WorkerBus v2 Phase 2 β runtime wiring complete (2026-06-02):
workerBusManager(singleton lifecycle),hybridRouter(web/Rust routing),legacyWorkerBusAdapter(ai-core shim),tauriTaskBridge(Tauri invoke); feature flag UI exposed; listenerMiddleware listeners; 154 combined tests; Rust backend stub deferred to Phase 3 - β WorkerBus authoritative scheduler hotfix (2026-08-01) β completed tasks drain from the live queue; dispatch honors priority/FIFO and pool capacity; pool waits are event-driven; queue wait is covered by the progress-rearmed inactivity watchdog; critical work has a hard eight-task reserve.
- π WorkerBus v2 Phase 3 β Rust TaskSupervisor. β
(2026-06-03)
src-tauri/src/commands/task_supervisor.rs+commands/mod.rs;worldscript_task_supervisor_ping(version) +worldscript_task_supervisor_submit(taskType dispatcher, honestsuccess:falseon unknown/bad payload) registered inlib.rs. First real compute tasktext.analyze(word/char/sentence/syllable counts + Flesch Reading Ease, pure-Rust, 8#[cfg(test)]tests). TS front-endservices/rustTaskSupervisor.ts(analyzeTextViaRustβ probesisRustComputeAvailablebefore routing so a Rust-only task never hits the web pool; null β JS fallback) + 5 unit tests. β¬ Remaining: fullcargo build/desktop verification (CI/Tauri β heavy locally); wire a real UI consumer (analytics/progress health); add more native tasks;candlerust-computefeature inference path - π C-7 β Coverage L85%/B75%/F80%; Stryker break 75β80
- β Stryker Config: concurrency 3, timeoutFactor 1.5, reporters [progress,json], tempDirName, slow warnings
- β Matrix-Parallelisierung: 5 Jobs (services-commands, services-core, services-ai, features-project, features-misc)
- β Incremental Caching pro Modul (actions/cache) mit force/incremental Mode-Switch
- β Timeout: 30 min pro Job (statt 45 min single job)
- β Aggregate Job mit kombinierter Summary-Tabelle
- β¬ Erste Test-Run auf GitHub Actions dispatchen und validieren
- β¬ Neue Dateien zur mutate-Liste hinzufΓΌgen (nach lokalem Test)
- π C-6 β ar/he Beta shipped (2026-06-03): all 18 UI modules fully translated (ar + he), Noto Sans Arabic/Hebrew + Naskh fonts wired,
[dir="rtl"]CSS net + shell logical-property conversion + canvas LTR islands, WelcomePortal ar/he selectors, "(Beta)" labels retained.i18n:checknow validates ar/he parity (2259 keys Γ 7 locales). Help Center gained an Advanced & Power Features category (8 articles, en/de/fr/es/it; ar/he English fallback) + 3 offline RAG chunks; in-app Settings Guide now documents every live category (Fine-Tuning/LoRA, Community, Plugins). β¬ Remaining: native-speaker review +help.jsonlong-form prose (English fallback for Beta) β community follow-up
- β
B-1 β
services/storage/storageEncryptionService.tsβ AES-256-GCM IDB at-rest encryption; PBKDF2 (310k iter), 32-byte random salt,extractable: false;enableIdbAtRestEncryptionflag - β
B-2 β
services/voice/wasmSttEngine.ts+sileroVadEngine.tsβ Whisper WASM STT scaffold + Silero VAD v4 via ONNX;enableVoiceWasmflag - β
B-3 β
packages/collab-transportβ vendor fork of y-webrtc 10.3.0 with RTCDataChannel E2E encryption baked in (replaces pnpm patch approach) - β
B-4 β
tests/e2e/a11y-axe.spec.tsβ 8-view axe-core WCAG 2.2 AA E2E gate (CI-enforced, zero violations) - β
B-5 β
locales/ar/+locales/he/locale stubs;enableRtlLayoutflag activateshtml[dir="rtl"]+ BiDi context provider - β
B-6 β
services/logger.tsStructuredLogger rewrite β IDB sink (1 000-entry LRU), Tauri JSONL sink, GDPRsanitizeLogContext;createLogger(module)+.withContext(ctx)API - β B-7 β Coverage thresholds raised: L 71 / F 63 / B 57 / S 69 (measured: 73/65/58/71)
- β
B-8 β Stryker
break70β75;mutatetargets 34β40 files - β
Docs β
docs/SPRINT-HANDOFF-2026-05-28.md, CHANGELOG[1.19.0], ROADMAP, TODO, README, CLAUDE.md, SECURITY.md, IDB-ENCRYPTION.md, VOICE_MASTER_PLAN.md all updated - β Quality gate β lint β Β· typecheck β Β· i18n:check β Β· tests β
- β
C-1 β
packages/collab-transport/src/crypto.jssecurity hardening: PBKDF2 100kβ310k, extractable:false, return promise.reject() fix - β
C-2 β Reference plugins:
services/plugins/wordCountOverlay.plugin.ts+sceneAppender.plugin.ts(8 tests) + runtime flag gate (2026-05-29) - β
C-3 β LoRA Ollama wiring:
LoraAdapter.ollamaModelTag,AIRequestOptions.loraModelPath,selectActiveLoraOllamaTag; parity fix (2026-05-29): selector now wired intouseWorldScriptAI+worldScriptCompletionFetch - β
C-4 β Cloud-Sync verified:
services/cloudSync/(3 files, 41 tests, AES-256-GCM);create()structural flag gate added (2026-05-29) - β
C-5 β GitHub Issue Templates (
bug_report.yml,feature_request.yml,translation_pr.yml) + AGENTS.md hardening - β
Feature Parity Audit (2026-05-29) β 8 critical drifts fixed;
docs/FEATURE-PARITY.md+features/featureCatalog.ts+scripts/audit-feature-parity.ts - β C-7 partial (2026-05-28) β +130 tests; thresholds raised L73/F65/B58/S71; 4 192 tests / 392 files
β Codespace Uplift (2026-05-30) β CLAUDE.md environment-aware shell rules; devcontainer re-activated (8-core/16GB);REVERTED β DevContainer/Codespaces config removed; local low-end hardware only.devcontainer/README.mdModus Operandi section- β
Vercel blank screen fix (2026-05-30) β
index.html%BASE_URL%for manifest/favicon/og;index.tsxerror safety net; 382 test files / 4567 tests all green - β
Production blank screen β zod/rolldown DCE (2026-06-02) β
init_locales is not defined: rolldown's prod DCE dropped zod's__esminit wrappers (zodsideEffects:false). Fixed viapatches/zod@4.4.3.patch(sideEffects:true). Addedsmoke:prod(headless mount check on builtdist/) to CI build job +unhandledrejectionstartup handler β closes the dev-mode-E2E blind spot - π C-6 β ar/he UI translation complete (2026-06-03): 18 modules translated in
locales/{ar,he}/(help.json English fallback), Noto fonts + RTL shell layout shipped as Beta. Remaining: native-speaker review + help-article prose β community task. Seedocs/I18N-GLOSSARY-RTL.md - π C-7 remainder β Coverage β L85%/B75%/F80%; Stryker break 75β80 (current thresholds: L73/F65/B58). Phase 3 started (2026-06-02): +33 LoRA tests (useLoraView, training wizard, sub-panels β were 0%)
- π‘ IDB at-rest encryption lifecycle (2026-08-11 reconciliation) β startup unlock, session lock, fail-closed protected writes, and a versioned single-owner migration journal are implemented. Disable, forgot-passphrase deletion, and passphrase rotation are intentionally blocked until per-store conversion, verification, cross-tab recovery, and recovery UX exist; do not describe them as completed.
- β
P0-2 β Plugin worker isolation (
workers/plugin.worker.ts) β routes plugin execution to isolated worker context with timeout and sandboxed API - π‘ P0-4 β DuckDB OPFS at-rest encryption (
services/duckdb/duckdbEncryption.ts) β cell-level encryption is now wired for the one column holding literal manuscript prose,codex_mentions.excerpt(v1.25.0):duckdbCodexWrite()encrypts it intoexcerpt_enc BLOBwhenenableIdbAtRestEncryptionis active, withservices/duckdb/codexExcerptEncryptionMigration.tsbackfilling pre-existing plaintext rows. Full OPFS file-level encryption remains infeasible (DuckDB-WASM owns the OPFS file handle directly) and is an accepted, permanent limitation, not a remaining task β see.github/SECURITY.mdSEC-6. - β
P0-5 β Voice WASM model download UI (
components/voice/VoiceModelDownloadModal.tsx) β progress modal for Whisper/Kokoro model downloads with cancel/retry - π Whisper WASM STT model download + inference pipeline (B-2 continuation) β engine (
services/voice/wasmSttEngine.ts) + download UI (P0-5 above) shipped; remaining scope narrowed to E2E integration test coverage only β stale β¬ reconciled 2026-07-30. - π Kokoro/Piper TTS WASM engines β Kokoro DONE (
services/voice/kokoroTtsEngine.ts, tested since 2026-05-31); Piper remains an unimplemented type-level placeholder only (preferredTtsEngine: 'piper'invoiceCommandService.tshas no backing engine file) β stale β¬ reconciled 2026-07-30. - β¬ PLANbib v1.7 features (Objects β MindMap β Interviews β Timeline β Wizard β Analysis β ReadMode β Guide β Desktop) β 9 phases, go-ahead from user required
- β
All pre-existing TypeScript errors fixed β zero
tsc --noEmiterrors across 47 changed files - β
BaseAgent.buildAiOpts()β new protected helper derives validAIRequestOptions(model + provider) fromPipelineConfig; applied to all 7 pipeline agents +selfReflect() - β
Voice components β
VoicePrivacyConsentModal+VoicePrivacyStatusimport paths, action names, and selector names corrected - β
versionControlSliceβ added stubrestoreSnapshotreducer (typed cross-slice signal) - β 35+ test fixture corrections β StorySection shape, AiModel/Theme/MindMapNodeType/StoryObjectType literals, PrivacySettings required fields, DeviceHealthReport shape, FlatHelpArticle.contentKey
- β Quality gate β lint β Β· typecheck β Β· i18n:check β Β· tests β
- β Phase H β Author-facing vocabulary: stage labels, loading messages, RAG "passages" rename, flag descriptions, behavioral tests
- β
Phase A β
BaseAgentabstract class (~200 LOC removed);aiConstants.tsconsolidation;addDebouncedListenerfactory inlistenerMiddleware.ts - β
Phase P-1 β
SupervisorAgent: heuristic quality gates (no AI calls), fallback sentinel detection - β
Phase P-2 β Orchestrator
executeStageWithSupervisionretry loop; hard gate: intakequalityScore < 30 - β
Phase P-3 β
BaseAgent.selfReflect()self-evaluation loop; DiagnosticAgent + StructuralAgent re-run on INCOHERENT flag - β
Phase P-4 β Honest fallbacks: all
createFallback*use 0 scores +isFallback: true - β
Phase P-5 β
PipelineReviewPanelredesign: Critical Actions card, severity-grouped view, Quick Accept High-Confidence button - β
Phase X-1 β Settings nav semantic grouping:
NAV_GROUPS+NavGroupHeader - β
Phase X-2 β Flow Mode:
transientUiStoreflowMode/setFlowMode;Escapeexits - β Phase X-3 β Empty states for Characters, World, SceneBoard, ProForge views
- β
i18n parity β 2055 keys Γ 5 locales;
proforge.pipeline.title/noneActiveadded to DE/ES/FR/IT - β
Test fixes β 84 previously-failing tests green:
listenerMiddleware(syncgetOriginalState),WriterViewUI(context mock),ProForgeDashboard(i18n key assertion), 3Γ thunk files (aiPolicy mock) - β Quality gate β lint β Β· i18n:check β Β· typecheck β Β· tests β (84 tests recovered, 0 regressions)
- β 89 new test files β settings, writing, manuscript, mind-map, ui, services, hooks, root components
- β ~400 new unit tests β AiScratchpad, ContextPanel, ToolInputs, InspectorPanel, NavigatorPanel, MindMapNodeEditor, MindMapNodeShape, ecoModeService, creativityTemperature, useCharacterInterviewsView, GpuMetricsPanel, FeatureFlagsSection, PrivacySection, SettingsOverviewCard, SettingsModals, + 70 more modules
- β Biome lint clean β 895 files, 0 errors
- β Total test files: 360 (was 178 files before this sprint)
- β ProForge test suite TypeScript errors fixed β 15 test files, 30+ TS errors resolved (EntityState, ProForgeState shape, PipelineStage/ReviewItemType/ReviewItemSeverity casts, i18n generic mock, biome-ignore placement)
- β Coverage Sprint test failures fixed β NotificationsSection (role=switch), Progress (CSS selector), ManuscriptEditor (word count regex), AnalyticsBootstrap (mock reset), ragPromptAssembly (token budget)
- β
Dependencies updated β 16 packages (patch + minor);
pnpm audit: 0 vulnerabilities - β Coverage (2026-05-26): Stmts 71.29% / Branches 58.79% / Funcs 65.18% / Lines 73.06% β all CI thresholds passed (Sβ₯67/Bβ₯55/Fβ₯60/Lβ₯68); 4 044 tests / 360 files, 0 failures
- β
Abstract Engine Interfaces β
SttEngine,TtsEngine,VadEngine,WakeWordEngine,IntentEngineinservices/voice/voiceTypes.ts - β
Web Speech API Fallbacks β
WebSpeechSttEngine,WebSpeechTtsEngine,WebRtcVadEngine,EnergyThresholdWakeWordEngine(immediately available, 0 downloads) - β Hybrid Intent Engine β template matching (exact) β Jaccard fuzzy scoring β slot extraction (navigation); view-context filtering; 25 static voice commands
- β VoiceCommandService β singleton orchestrator with state machine (idle β listening β processing β speaking β idle)
- β
Redux State β
voiceSlice(mode, transcript, processing, dictation, engine status, microphone permission, onboarding);VoiceSettingsinsettingsSlice;enableVoiceSupportinfeatureFlagsSlice - β
React Hooks β
useVoice(service bridge),usePushToTalk(Ctrl+Shift+V),useVoiceDictation(editor insertion),useVoiceAccessibility(ARIA + focus) - β
UI Components β
VoiceIndicator(status overlay),VoiceControlPanel(command panel),VoiceSettingsSection(settings tab with onboarding) - β
App Integration β
App.tsx(conditional rendering,document.body.dataset['view']for intent engine),Header.tsx(voice status),ManuscriptEditor.tsx(dictation support) - β
Audio Navigator β
audioNavigatorsingleton: ARIA landmark scanning, focus management,aria-liveregions - β Feedback Service β 3 verbosity levels (minimal/standard/verbose); TTS queue; event listeners for visual feedback
- β i18n β 2025 keys Γ 5 locales (voice.* settings added)
- β Tests β 83 unit tests / 9 test files (voiceSlice, intentEngine, feedbackService, sttEngine, ttsEngine, vadEngine, wakeWordEngine, audioNavigator, commandVoiceMappings)
- β Quality gate β lint β Β· i18n:check β Β· typecheck β Β· 83/83 voice tests β
- β
CodeGraph Setup β global install,
codegraph init -i,.codegraph/solo-repo policy - β
pnpm Scripts β
codegraph:*+graphs:update+codegraph:affected - β VS Code: Tasks β CodeGraph status/update/report + Dual-Graph update
- β
Documentation β
docs/codegraph.md,docs/dual-graph-setup.md, README Hub, CONTRIBUTING - β
Agent Instructions β
CLAUDE.md+.github/copilot-instructions.mdCodeGraph rules - β
Automation β
scripts/codegraph-report.mjs,scripts/dual-graph-update.mjs,scripts/pre-commit-codegraph.mjs - β
CI-AUDIT.md β
graphs:updateas post-feature repo policy - β
Quality gate β lint β
Β· Biome ignores
.codegraph/β
- β
Full RTCDataChannel in-flight E2E encryption (Yjs y-webrtc patch) β DONE, vendor fork
packages/collab-transport(y-webrtc 10.3.0, C-1); see itsAUDIT.md("RTCDataChannel payloads are now E2E-encrypted whenroom.keyis set") β stale β¬ reconciled 2026-07-30. - π RTL language support (Arabic, Hebrew, Persian) β Beta shipped behind
enableRtlLayout(B-5); see the more current "C-6" entry above for the ar/he UI-translation detail and remaining native-speaker-review scope β stale duplicate β¬ reconciled 2026-07-30. - β
Fine-tuning / LoRA support for personalized writing styles β DONE,
enableLoraAdaptersshipped default-on (Settings β AI β Fine-Tuning, Ollama Modelfile activation) β stale β¬ reconciled 2026-07-30. - β¬ Cloud sync (optional, E2E-encrypted)
- β
DS-5: Delete legacy bridge block from index.css (after DS-1 verified in production) β DONE: bridge block already removed in prior sprints; remaining aliases (
--nav-*,--glass-*,--border-interactive,--ring-focus) are intentional semantic tokens, not legacy bridges.
- β LanguageSelector β Modern combobox with search, flag emojis, RTL support
- β RadioGroup β Accessible radio group component
- β Tabs β WAI-ARIA compliant tabs component
- β ToggleSwitch β RTL-aware with reduced-motion support
- β WelcomePortal β Updated to use new LanguageSelector
- π Select/Combobox β Design-system
Selectextended with optionalsearchablefiltering; OpenRouter section migrated. Remaining: replace native<select>in other Settings/AI sections incrementally. - β¬ Dropdown Menu β Action menus with icons and keyboard navigation
- β¬ Unit tests β Add tests for LanguageSelector, RadioGroup, Tabs
- β¬ Storybook stories β Add stories for new components
- β¬ CI verification β Wait for green CI before merge
- β
Cloudflare deploy fix (P0) β
resolve-deploy-base.mjsbaseβdeployBase;sync-deploy-base.mjserror propagation - β
services/dbInitialization.tsβinitializeStorage()+resetAllDatabases()extracted from inline IIFE - β
StorageBackend retries β
retryDb()applied tosaveProject+saveSettingsindbService.ts - β
StorageErrorScreenrecovery UI βindex.tsxshows React component with Reload + Reset on DB init failure - β
Settings auto-save toast β
listenerMiddleware.tscatch dispatches error notification - β Help Center complete β 13 stub articles fully written (700β1000 chars HTML) Γ 5 locales; 1931 keys Γ 5 at parity
- β
Tests β
dbInitialization.test.ts(8 tests) +dbServiceRetry.test.ts(7 tests) - β Quality gate β lint β Β· i18n:check β Β· typecheck β Β· 15/15 new tests β
- β DuckDB-WASM P0βP3 β worker, client, schema (10 tables + 5 views), analytics queries, migration, dual-write, RAG vectors, cross-project, codex, scene timeline
- β DuckDB resilience β init retry (3Γ), dual-write retry (3Γ), OPFS fallback to in-memory, error surface to Redux
- β
Hybrid RAG wired end-to-end β
ragModesetting, mode selector UI, consistency checker uses RAG context, Re-Index button in Reference Panel, Settings button bug fix - β ONNX + Transformers.js as selectable primary AI providers
- β
Service-level dedup β
aiThunkUtilsprevents concurrent duplicate AI requests - β Per-project AI preset β hash-based deep links, dedup key hardening
- β
WorkerBus backpressure β
MAX_QUEUE_SIZE= 32, telemetry extended - β Y-WebRTC E2E encryption β AES-256-GCM, PBKDF2 310k iter, CollaborationPanel badge
- β PlotCanvas rAF throttle β eliminates 60 Hz Redux dispatch storm
- β i18n β 1 625 keys Γ 5 locales (+35 new keys)
- β Quality gate β lint β typecheck β i18n β 2 024+ tests / 178 files β
- β
assembleRAGPromptβservices/ragPromptAssembly.ts+ PromptLibrary templates - β Writer β RAG toggle + chunk badge; continuation/brainstorm/critic use hybrid context
- β
Plot Board AI β
suggestNextBeatThunk+ modal UI - β
DuckDB embedding β
rag_chunks.embedding384-dim migration + dual-write fix - β
PWA audit β
docs/PWA-AUDIT.md,handle_links, SW comment for WASM/ONNX - β
Settings & Help β RAG hybrid hint, help article +
tryActionId,helpDocRetrievalchunk - β
UI tokens β Writer, Command Palette, Modal, Project AI preset (
--ring-focus) - β
Docs β README hub, ROADMAP, CHANGELOG
[Unreleased], AUDIT,.cursor/index.mdc - β
Tauri audit β
docs/TAURI-CI.mdchecklist v1.8 - β
Sprint ref β
docs/SPRINT-V1.8.md
- β¬ DuckDB
rag_chunksschema migration:FLOAT[64]BoW βFLOAT[384]semantic vectors β superseded by v1.8 embedding column (verify on device) - β
Full RTCDataChannel in-flight E2E encryption (Yjs y-webrtc patch) β DONE, vendor fork
packages/collab-transport(y-webrtc 10.3.0, C-1); see itsAUDIT.md("RTCDataChannel payloads are now E2E-encrypted whenroom.keyis set") β stale β¬ reconciled 2026-07-30. - π RTL language support (Arabic, Hebrew, Persian) β Beta shipped behind
enableRtlLayout(B-5); see the more current "C-6" entry above for the ar/he UI-translation detail and remaining native-speaker-review scope β stale duplicate β¬ reconciled 2026-07-30. - β
Fine-tuning / LoRA support for personalized writing styles β DONE,
enableLoraAdaptersshipped default-on (Settings β AI β Fine-Tuning, Ollama Modelfile activation) β stale β¬ reconciled 2026-07-30. - β¬ Cloud sync (optional, E2E-encrypted)
- β Branches coverage β₯ 55 % (v1.10: Vitest gate 55 %, RAG/help/plot tests)
- β
Plot-Board v2 β
plotBoardSlice,plotBoardService,PlotCanvas,ConnectionLayer,SubplotPanel,TensionCurvePanel,ConnectionToolbar, beat-sheet overlays, mobile pinch/pan - β
Real-Time Book Preview β
BookPreviewView,useBookPreviewView,BookPreviewContext, IntersectionObserver TOC, fullscreen - β
Reference Panel β
ReferencePanelView(6 tabs: Characters, World, Notes, Binder, Comments, Revisions) - β
Per-Scene Revision History β
sceneRevisionService(IDB),SceneRevisionPanel, word-level diff, named snapshots - β
Threaded Comments β
sceneCommentsSlice,CommentsPanel, resolve/reply/delete - β
Progress Tracker β
progressTrackerSlice,ProgressTrackerView, session timer, streak, velocity chart, heatmap - β
Mobile Polish β
useFoldableLayout,deepLinkService,HAPTIC_PATTERNSnamed library - β i18n β 1590 keys Γ 5 locales
- β Quality gate β lint β typecheck β 2024 tests / 178 files (0 failures) β coverage 65.91% lines β
- β
Full RTCDataChannel in-flight E2E encryption (Yjs y-webrtc patch) β DONE, vendor fork
packages/collab-transport(y-webrtc 10.3.0, C-1); see itsAUDIT.md("RTCDataChannel payloads are now E2E-encrypted whenroom.keyis set") β stale β¬ reconciled 2026-07-30. - π RTL language support (Arabic, Hebrew, Persian) β Beta shipped behind
enableRtlLayout(B-5); see the more current "C-6" entry above for the ar/he UI-translation detail and remaining native-speaker-review scope β stale duplicate β¬ reconciled 2026-07-30. - β
Fine-tuning / LoRA support for personalized writing styles β DONE,
enableLoraAdaptersshipped default-on (Settings β AI β Fine-Tuning, Ollama Modelfile activation) β stale β¬ reconciled 2026-07-30. - β¬ Cloud sync (optional, E2E-encrypted)
- β¬ AI creativity presets per project (not global)
- β Branches coverage β₯ 55 % (v1.10: Vitest gate 55 %, RAG/help/plot tests)
Complete
.mdinventory (19 curated sources):AUDIT.mdΒ§ Markdown corpus; navigation:README.md. Heavy tests CI-first:docs/CI.md.
- β Unit test coverage target range 50β70 % β v1.10: Vitest thresholds 63 Lines Β· 55 Branches Β· 54 Functions Β· 62 Statements; focus tests: RAG, help index, plot snap, AI streaming
- β
E2E mobile selectors (2026-05-17) β
clickNavItem()helper + ARIA tabs in WriterViewUI +data-testidanchors in VersionControlPanel/ExportView; all 4 spec files migrated to 2026 golden hierarchy (CI gate green again) - β
CI hardening (2026-05-17) β Stryker
break: 30enforced, Lighthouse performanceβerror, OSV scanner in security job, concurrency fix (cancel-in-progress for PRs only), artifact retention unified, JUnit E2E upload - β
WebLLM model selector β
WEBLLM_SUPPORTED_MODELS(4 MLC checkpoints: Llama 3.2 1B/3B, Phi-3.5 Mini, Gemma 2 2B),modelId/onProgressparameters, Settings UI with dropdown + progress indicator (WCAG 2.2role="progressbar",useRefmounted guard) βpackages/ai-core,services/localAiFacade.ts,components/settings/AiSections.tsx - β
Cross-project search v2 (2026-05-18) β DB_VERSION 8,
projects-index-store,crossProjectIndexService.ts(privacy-preserving IDB index),searchAcrossProjectIndex(), two-phase CrossProjectSearchPanel; indexing on save via listenerMiddleware is the next step - β
Cross-project search service v1 β
services/crossProjectSearchService.ts,searchAcrossProjects()via fuzzyScore, transientUiStore integration (isCrossProjectSearchOpen), commandDefinitions command - β
Collaboration security warning β security warning banner in CollaborationPanel (
role="alert",aria-live="polite", WCAG 2.2 AA) visible before connection establishment; disappears after connect - β Phase 1+2 unit tests β 17 new test files, 733 tests total; Vitest thresholds raised to 35/30/22/33 (previously 25/21/17/24)
- β
Stryker extension (phase 4) β
fuzzyScore.ts,palettePreferences.ts,commandBuilder.tsas additional mutation targets - β
E2E tests (phase 4) β
commands.spec.ts(palette Ctrl+K, "dashboard" search, fuzzy "wrt", Enter-navigate),collaboration.spec.ts(security warning banner visible before connection) - β
One-click encrypted library export (ZIP + AES-GCM, META.json + vault.bin) β
services/libraryBackupService.ts, Settings β Data - β
WebLLM as selectable provider (
webllm/browser, privacy same as Ollama) βservices/aiProviderService.ts,packages/ai-core
- β
i18n comprehensive sweep (2026-05-18) β all hardcoded strings eliminated; 1 440 keys in 5 locales (
help.tryTour,Chapter 1,manifest.resizer.*,export.pasteSection.heading,outline.result.body,templates.tabs.*,error.boundary.*and many more); ErrorBoundary refactored withErrorFallbackfunction component foruseTranslation(); TypeScript 6 strict fixes (TS2322/TS2352/TS4111/TS2375); test mocks adjusted forErrorBoundary.test.tsx+AdvancedImportExport.test.tsx - β Complete markdown documentation sync (README Hub, CONTRIBUTING, docs/CI, AUDIT, Copilot, CLAUDE, SECURITY, TAURI/graphify, CHANGELOG/ROADMAP/TODO) β 2026-05-16
- β Expand E2E tests (project import, character CRUD, snapshot flow + auto-snapshot)
- β
StorageBackend interface β
services/storageBackend.tsas contract,StorageManager.saveProject(StoryProject) - β Logger with ring buffer + sink for crash diagnostics
- β
Make signaling URL for collaboration configurable in Settings (
webrtcSignalingUrls, Settings β Collaboration) - β
Yjs AES-256-GCM encryption foundation (2026-05-18) β
collaborationService.tsgainsencryptUpdate/decryptUpdate/deriveEncryptionKey/getEncryptionStatus; CollaborationPanel shows encryption badge; full RTCDataChannel in-flight encryption requires y-webrtc patching (v2.0)
- β Documentation audit (CI.md, README Hub, CONTRIBUTING, AUDIT follow-up, Copilot/CLAUDE/SECURITY/Graphify) β 2026-05-02
- β
Visual regression (
tests/e2e/visual-regression.spec.ts) β Chromium baseline undertests/e2e/*-snapshots/(snapshotPathTemplatewithout OS suffix) - β
Bundle size budgets + rollup analysis in CI (
pnpm run bundle:budget,pnpm run analyze, artifactbundle-analysis) - β
FR/ES/IT key parity + CI gate (
pnpm run i18n:check) β translation content can be improved iteratively - β
Renovate auto-merge for patch updates (
renovate.json) - β
Onboarding spotlight tour (
driver.js, Dashboard + Help) - β
Tauri v2 release pipeline (2026-05-18) β
tauri-build.ymlgenerateslatest.jsonfrom signed.sigartifacts;TAURI-UPDATER.mdhas full secrets table;TAURI-CI.mdhas 7-step first-release checklist; macOS notarization + Windows Authenticode still require maintainer certificates
- β Expand E2E tests: project-import.spec.ts (3 tests), characters.spec.ts (4 tests), snapshots.spec.ts (4 tests)
- β Ollama / local AI integration: ollamaService.ts + aiProviderService.ts + Settings UI complete, default model set to Qwen3 8B
- β
Split projectSlice.ts into thunk modules (14 AI thunks β
features/project/thunks/) - β Tauri parity: 6 missing features β fileSystemService retry/compression/snapshot-ID/deleteImage/hasSavedData/auto-snapshot + Story Codex & RAG vectors (gap 3)
- β Test suite expanded from ~80 to ~160+ tests (12 new test files)
- β Node 24 localStorage polyfill (CI green on Node LTS + current)
- β codexService infinite-loop fix (CRIT-1)
- β Modal focus-trap cleanup consolidated (BUG-1)
- β FOUC theme-init fixed (BUG-2)
- β Untranslated languages removed from selector (CRIT-2)
- β Dead code removed (buildDeduplicationKey, persist/PERSIST)
- β ManuscriptView resize-listener cleanup (already fixed, TODO was stale)
- β DevContainer configuration (already fixed, TODO was stale)
- β Redundant deploy.yml (already fixed, TODO was stale)
- β Feature-flag system (already fixed, TODO was stale)
- β Request deduplication (abort-previous pattern in aiThunkUtils.ts)