Venice Forge v1.0.6
What's Changed
Production Media Studio handoffs, derivative lineage, and 29-role semantic theme contract
- Production transient handoffs (VERIFY-040) —
useImageWorkspaceStorenow drives Use settings, Regenerate, Same seed, Remix & Generate, Upscale, and Edit without any dev-onlywindow.__veniceImageStudiobridge. The store is non-persisted and consumes each request exactly once. - Derivative lineage —
upsertDerivativepersists the child, deduplicates the parent'schildrenIds, and rolls back the child if the parent-write fails. Regenerate, Upscale, Edit, Remix, and Background-remove now produce correctly typed derivatives with both directions of the parent ↔ child link. - Model-aware image sizing — 13 width × height pairs and aspect ratios for aspect-only / aspect-resolution models. Seed control covers the full signed range, with a central
clampSeed/randomSeed/serializeSeedhelper. Quality and variants are gated on model capabilities and only emitted when supported. - 29-role semantic theme contract (VERIFY-041) — themes now normalize legacy persisted data, expose complete runtime / bootstrap / Tailwind variables, round-trip full snake_case YAML, and apply semantic roles to global / shared controls. Forge Dracula has WCAG AA pair coverage for text, inputs, buttons, statuses, selection, disabled text, and focus.
Windows path-canonicalization fix
mediaService.tsallowlist bases are now canonicalized throughfs.realpath()before containment comparison. Previously the child path was realpath'd but the allowlist bases were onlypath.resolve()'d, so on Windows CI (C:\Users\RUNNER~1↔C:\Users\runneradmin8.3 short-name mismatches)isWithin()returned false for files that legitimately lived inside the allowed directory. Three call sites updated:importMediaFromPath,revealMediaInFolder,readMediaMeta. Production security posture unchanged — symlink / junction escape protection, null-byte and overlong-path rejection, sibling-traversal rejection, and thePictures/Venice Forgesubfolder requirement are all preserved.
Windows test fixture stability
- The
mediaService.test.tscleanup helpers now delete only the named fixture files, never the parent temp dirs, so therealpathSync'd mock paths stay stable for the entire test run. Added diagnostic messages to everyexpect(result.ok)assertion that includeresult.error, the target path, the mocked temp root, and the mockedapp.getPath('downloads')value, so future CI failures are self-diagnosing.
Internal prompt-enhancer LLM
- New
prompt-enhancer-service.ts(config-driven model, temperature, max tokens, system prompts) honoursinternal_prompt_enhancer.enabledinconfig.yaml. Inspector Enhance / Remix buttons present a review modal and patch the result viaonPatchonly after explicit user approval. Default system prompts affirm safety-guard authority; the model id isvenice-uncensored-1-2.
Character avatars (HTTPS-allowlisted)
resolveCharacterImageUrlreads all known image fields (photoUrl/photo_url/avatar_url/image/image_url/ nested{url}), normalizes relative URLs, and rejects anything outside the Venice-host allowlist (outerface.venice.ai,venice.ai,api.venice.aiover HTTPS only).data:,file:,blob:,javascript:,localhost, and private-IP / loopback / link-local avatars are all blocked at the URL-resolver layer.
Repo hygiene
- Removed
POST_AUDIT_FINDINGS.md,docs/AUDIT_TODO.md,docs/deep-research-report.md(stale duplicates). docs/design/VENICE_UI_EXTRACTION.mdanddocs/design/VENICE_UI_PARITY_REFERENCE.mdgitignored as local-only design-roadmap scratchpads.docs/POST_VENICE_JINA_AUDIT_2026_06_06.mdanddocs/AUDIT_FOLLOWUP_2026_06_05.mdeach gained a "Status: historical, canonical source isdocs/summary_of_work.md" header.verify-markdown-linkshonours root.gitignore(mini-gitignore parser supports anchoring, negation, and globs) — locked byVERIFY-034. This unblocks CI on local-onlydocs/AGENTS/*.mdfiles..github/workflows/ci.ymlgained awindows-sensitive-testsjob (nocontinue-on-error)..github/workflows/release.ymlgained per-job timeouts and a concurrency group.
Misc hardening
- 2 MiB Jina response cap with stream cancellation and normalized 413 failures (VERIFY-039).
- Web-mode Jina keys remain ephemeral and never enter
localStorage/sessionStorage/ IndexedDB (VERIFY-038). - OS-secure configured state enables Venice UI actions without copying the persisted key into renderer memory (VERIFY-037).
- Linux packaging now ships arm64 AppImage + deb + rpm.
- Built artifacts contain no source maps.
Full changelog: v1.0.5...v1.0.6