Date: 2026-06-12 (protocol authored) Β· 2026-06-16 (v1.23.0 sign-off)
Version under test: v1.23.0
Scope: Rebrand validation + regression-sensitive core paths.
Environments:
- Live demo 1 β https://qnbs.github.io/WorldScript-Studio/
- Live demo 2 β https://worldscript-studio.vercel.app/
- Local Tauri desktop build (after
pnpm run tauri:buildor CI artifact)
Legend: β
Pass / β Fail / β¬ Not tested / π‘ Partial /
Release note: v1.23 is the rebrand release β StoryCraft Studio is now WorldScript Studio. This protocol is the manual sign-off gate for the v1.23 release.
Build under sign-off: main @ ea652c8d β tag v1.23.0. Testers: automated checks β release agent; desktop GUI β maintainer (qnbs).
Verified (release gates):
- β
Desktop blank-screen fixed β the v1.23 release blocker. Tauri builds resolved Vite
basefromTAURI_PLATFORM(the Tauri 1.x env var, never set by Tauri 2.x), so every desktop build fell through to the GitHub Pages base and 404'd its hashed assets undertauri://localhost/β only the native file/help menu over an empty webview. Fixed inconfig/resolveViteBase.ts(now checksTAURI_ENV_PLATFORM, +6 unit tests). The maintainer confirmed the Windows installer now launches the full UI (row 7.1). - β
Tauri desktop build green on all 3 platforms β
tauri-build.ymlproduced Windows/macOS/Linux artifacts (row R.12). - β
Full CI green on
mainβ quality Γ2, build, unit+coverage, e2e, e2e-deep, storybook, lighthouse, VRT, security, CodeQL (row R.11). - β
Rebrand static checks β
index.html, all 11 locale bundles, and runtime worker/storage/command names carry no user-visibleStoryCraft/storycraft. Remainingstorycraftreferences are intentional: read-once legacy-migration keys and thestorycraft://deep-link back-compat alias. The one stray new-feature name (storycraft-localfirst-IndexedDB prefix, behind off-by-defaultenableLocalFirstSync) was renamed toworldscript-localfirst-in this sign-off (rows R.4, R.9, R.10). - β
Version consistency β
package.json,src-tauri/tauri.conf.json,src-tauri/Cargo.toml,public/sw.jsall1.23.0.
Platform notes:
- macOS GUI: N/A β no Apple hardware available; covered by the green macOS CI build + the shared base-path fix.
- Linux GUI: N/A on the maintainer's Ubuntu 20.04 β Tauri 2 needs
webkit2gtk-4.1(libsoup3, glibc β₯ 2.35), available from Ubuntu 22.04+; 20.04 ships only 4.0, so neither the.debnor the AppImage can run there. Not a bug. Covered by the green Ubuntu-22.04 CI build; an interactive Linux GUI pass on 22.04+ is a non-blocking post-release follow-up. - Desktop signing: the verified branch/main builds are
workflow_dispatch(unsigned). The signed updater artifacts (.sig+latest.json) are produced by thev1.23.0tag build (Minisign; secrets confirmed present). Row 7.7 (updater) verifies on the signed release.
Remaining (non-blocking, tracked manual pass): the deep functional GUI rows below (AI execution modes, OpenRouter circuit breaker, Copilot apply-to-chapter, Voice model download, core authoring paths) are exercised by the green CI E2E/unit suites and remain as the maintainer's interactive checklist. None gate the v1.23.0 tag, given the release-blocker fix plus the build/static/version gates above are met.
- Pick all three environments and run every applicable row in each column.
N/Arows are pre-marked. - Reset state between risky steps: Settings β Data β Factory Reset (wipes IDB/localStorage/SW caches) when a test leaves the app in a dirty state.
- Feature flags: several sections require opt-in flags (Settings β Experimental). Each section lists the flags it needs in its first row.
- Record every β /
β οΈ in the per-row Notes column and in the Blockers list at the bottom; open a dedicated issue/PR for each before tagging. - A release is signable only when: every non-
N/Arow is β (orβ οΈ with an accepted, documented follow-up), and the Sign-off table is filled for at least one tester per environment.
| # | Step | GH Pages | Vercel | Tauri | Notes |
|---|---|---|---|---|---|
| R.1 | Browser tab title reads WorldScript Studio. | β¬ | β¬ | β¬ | |
| R.2 | PWA install prompt / manifest lists WorldScript Studio (not StoryCraft). | β¬ | β¬ | N/A | |
| R.3 | Settings β About shows WorldScript Studio v1.23.0. | β¬ | β¬ | β¬ | |
| R.4 | index.html source has no remaining StoryCraft / storycraft strings. |
β | β | N/A | Verified by grep on main (0 matches). |
| R.5 | Export filenames default to *.worldscript / *.wsst (desktop: save dialog; web: download). |
N/A | N/A | β¬ | Web export uses .worldscript unless the browser forces .json. |
| R.6 | Tauri only: double-clicking a .worldscript file launches WorldScript Studio and opens the project. |
N/A | N/A | β¬ | |
| R.7 | Tauri only: worldscript:// deep-link opens the app and routes to the linked project. |
N/A | N/A | β¬ | |
| R.8 | Feature flags persist after reload under the worldscript-feature-flags key (pre-release β no legacy migration). |
β¬ | β¬ | β¬ | Toggle a flag, reload, verify state; confirm the key in DevTools β Application β Local Storage. |
| R.9 | No console errors containing storycraft in worker names, storage keys, or command names. |
β | β | β | Active names are all worldscript-*; remaining storycraft refs are read-once legacy-migration keys + the storycraft:// deep-link alias (intentional). |
| R.10 | i18n bundles contain no user-visible StoryCraft strings. |
β | β | β | Verified by grep across all 11 public/locales/*/bundle.json (0 matches). |
| R.11 | Repository CI green on main for build + E2E. |
β | β | N/A | Full CI green on main @ ea652c8d (#166). |
| R.12 | Linux/macOS/Windows Tauri CI artifacts build green and launch. | N/A | N/A | β | tauri-build.yml green on all 3 OS; Windows installer launched with full UI (maintainer, 2026-06-16). |
Web (both live demos) are auto-deployed from main (Vercel primary + GitHub Pages). Verify the footer/About version reads 1.23.x before testing, otherwise you are testing a stale deploy.
Local Tauri desktop build:
# Prerequisites: Rust toolchain + OS webview deps (see docs/TAURI-CI.md).
pnpm install
pnpm run build # web bundle first
pnpm run smoke:prod # sanity-check the prod bundle mounts (catches prod-only crashes)
pnpm run tauri:build # produces OS-native artifact under src-tauri/target/release/bundle/- Alternative (no local Rust): download the artifact from a green
tauri-build.ymlrun (gh run download <run-id>); the v1.23 P0 confirmed Run #27439443241 green on Ubuntu/macOS/Windows. - Updater/signing (
7.7) only works on signedv*tag builds βN/Aforworkflow_dispatch/local builds (no signing secret). Mark7.7N/Aunless testing a signed release candidate.
| # | Step | GH Pages | Vercel | Tauri | Notes |
|---|---|---|---|---|---|
| 1.1 | Open Settings β AI & Models β AI Execution Mode. | β¬ | β¬ | β¬ | |
| 1.2 | Switch between Hybrid, Cloud, Local, Eco. Each mode persists after reload. | β¬ | β¬ | β¬ | |
| 1.3 | Verify AiModeIndicator in Copilot header reflects the selected mode. |
β¬ | β¬ | β¬ | |
| 1.4 | In Eco mode, confirm no cloud call is triggered and a tiny/Eco model is selected. | β¬ | β¬ | β¬ | |
| 1.5 | In Local mode with no local backend, verify graceful fallback/error message. | β¬ | β¬ | β¬ | |
| 1.6 | WebLLM worker offload: In Local/Hybrid mode on a WebGPU browser, generate text; confirm output arrives and the main thread stays responsive (typing/scroll not frozen during inference). | β¬ | β¬ | β¬ | |
| 1.7 | No-WebGPU fallback: On a browser without WebGPU (or forceFallback), confirm local generation still completes via the main-thread fallback (no hard crash, no infinite spinner). |
β¬ | β¬ | β¬ | |
| 1.8 | A11y (radiogroup): Tab to the AI Execution Mode picker; navigate modes with Arrow keys / Home / End; confirm roving focus, visible focus ring, and a screen-reader announcement of the newly-active mode. | β¬ | β¬ | β¬ | |
| 1.9 | Localization regression (#129): Switch UI language to de/fr/es/it; confirm the AI Execution Mode and OpenRouter sections show translated strings β no raw settings.aiMode.* keys and no English placeholders. |
β¬ | β¬ | β¬ |
| # | Step | GH Pages | Vercel | Tauri | Notes |
|---|---|---|---|---|---|
| 2.1 | Enable OpenRouter in Settings β OpenRouter, enter a free-tier key. | β¬ | β¬ | β¬ | |
| 2.2 | Select a :free model (e.g., deepseek/deepseek-r1:free). |
β¬ | β¬ | β¬ | |
| 2.3 | Send a Copilot prompt and confirm response arrives via OpenRouter. | β¬ | β¬ | β¬ | |
| 2.4 | Simulate 4Γ HTTP 429 errors (e.g., via browser dev-tools throttling / proxy) and confirm circuit breaker opens for ~5 min. | β¬ | β¬ | β¬ | |
| 2.5 | Confirm AiModeIndicator turns amber while circuit is open. |
β¬ | β¬ | β¬ | |
| 2.6 | After cooldown, confirm circuit closes and requests resume. | β¬ | β¬ | β¬ |
| # | Step | GH Pages | Vercel | Tauri | Notes |
|---|---|---|---|---|---|
| 3.1 | Open Copilot. Confirm assistant message with markdown renders correctly (headings, bold, italic, lists, code blocks). | β¬ | β¬ | β¬ | |
| 3.2 | Toggle Sidebar mode (desktop β₯ 768 px). Panel docks to the right. Reload persists mode. | β¬ | β¬ | β¬ | |
| 3.3 | In Sidebar mode, resize the panel; no layout breakage in Manuscript/Writer. | β¬ | β¬ | β¬ | |
| 3.4 | Ask Copilot to rewrite a chapter. Use "Apply to chapter" on the last code block. | β¬ | β¬ | β¬ | |
| 3.5 | Confirm chapter text is updated and Ctrl+Z undoes the change. | β¬ | β¬ | β¬ | |
| 3.6 | Verify InlineAnnotationLayer badge appears in ManuscriptEditor when insights exist. Clicking opens Copilot β Insights. |
β¬ | β¬ | β¬ | |
| 3.7 | Run ProForge review. On a ReviewItemCard, click β¦ Ask Copilot. Confirm composer is pre-filled with item context. |
β¬ | β¬ | β¬ |
| # | Step | GH Pages | Vercel | Tauri | Notes |
|---|---|---|---|---|---|
| 4.1 | Enable enableVoiceSupport and enableVoiceWasm feature flags. |
β¬ | β¬ | β¬ | |
| 4.2 | Open Settings β Voice β Download STT Model. Confirm VoiceModelDownloadModal opens with progress bar. |
β¬ | β¬ | β¬ | |
| 4.3 | Click Cancel during download. Confirm download aborts and modal handles it gracefully. | β¬ | β¬ | β¬ | |
| 4.4 | Retry download; confirm progress resumes. | β¬ | β¬ | β¬ | |
| 4.5 | Download TTS Model similarly. | β¬ | β¬ | β¬ | |
| 4.6 | Use push-to-talk (default Ctrl+Shift+V) and speak a navigation command (e.g., "open dashboard"). Confirm navigation executes. |
β¬ | β¬ | β¬ | |
| 4.7 | Stop listening. Confirm voice state returns to idle without errors. | β¬ | β¬ | β¬ |
| # | Step | GH Pages | Vercel | Tauri | Notes |
|---|---|---|---|---|---|
| 5.1 | Install PWA (Chrome β "Install WorldScript Studio"). | β¬ | β¬ | N/A | |
| 5.2 | Switch language to ja, zh, pt, el, ar, or he. Confirm html lang and dir update. |
β¬ | β¬ | β¬ | |
| 5.3 | Go offline (DevTools β Network β Offline). Reload app. Confirm app shell and last locale bundle load from cache. | β¬ | β¬ | N/A | |
| 5.4 | Confirm locale bundles are served network-first when online (no stale English after i18n-only update). | β¬ | β¬ | N/A |
| # | Step | GH Pages | Vercel | Tauri | Notes |
|---|---|---|---|---|---|
| 6.1 | Welcome β Blank Project β Manuscript/Writer. | β¬ | β¬ | β¬ | |
| 6.2 | Create scenes, use drag & drop in Plot-Board v2, add connections. | β¬ | β¬ | β¬ | |
| 6.3 | Use @mentions in ManuscriptEditor to link a character/world. |
β¬ | β¬ | β¬ | |
| 6.4 | Export manuscript to DOCX and PDF. | β¬ | β¬ | β¬ | |
| 6.5 | Create a snapshot and restore it. | β¬ | β¬ | β¬ |
| # | Step | Tauri | Notes |
|---|---|---|---|
| 7.1 | Install the OS-specific artifact. App launches without blank screen. | β | Windows confirmed by maintainer (2026-06-16) after the TAURI_ENV_PLATFORM base-path fix; macOS N/A (no hardware); Linux N/A on 20.04 (needs 22.04+). |
| 7.2 | Settings β About shows correct version. | β¬ | |
| 7.3 | Open Data Folder opens the project data directory. | β¬ | |
| 7.4 | Resize window, close, reopen β window state restores. | β¬ | |
| 7.5 | Double-click a .worldscript/.wsst file β app opens the project (single-instance behavior). |
β¬ | |
| 7.6 | Native menu: File β Export / Settings / Quit works. | β¬ | |
| 7.7 | Check for updates via TauriUpdaterBanner (if signing is configured). |
β¬ |
Mostly covered by automated tests (
plugin.worker.test.ts,pluginRegistry.test.ts,content:guard). These rows are a lightweight observation layer, not a substitute.
| # | Step | GH Pages | Vercel | Tauri | Notes |
|---|---|---|---|---|---|
| 8.1 | Paste a prompt containing markdown with an inline <script>/<img onerror=β¦> into Copilot; confirm the rendered message is sanitized (DOMPurify) β no script executes, no broken layout. |
β¬ | β¬ | β¬ | |
| 8.2 | Import a project/JSON with an unexpected/oversized field; confirm validation rejects it cleanly (no crash, user-visible error). | β¬ | β¬ | β¬ |
Sign per environment. The release is signable only when every non-N/A row above is β
(or
| Environment | Tester | Date | Result (β /β/π‘) | App version verified |
|---|---|---|---|---|
| GH Pages | ||||
| Vercel | ||||
| Tauri (local/CI build) |
Blockers / follow-up bugs: