Parent roadmap: #30
Positioning
The Windows desktop client is an independent productization track, not proof that Game Localizer needs a full agentic harness.
A Tauri shell can be valuable simply by packaging the existing Python application, Dashboard, project selection, native filesystem integration, lifecycle, and credential/session boundaries. It must not wait for a broad AgentRuntime before a technical packaging prototype is possible.
Priority is P2 within M8 because current engineering focus is Eval/TM/controlled intelligence foundations, not because desktop packaging has low product value.
Goal
Ship the first Windows x86-64 desktop client that starts and supervises a packaged Python sidecar, establishes a versioned local session securely, reuses the existing WebUI/application services, and fails closed when client/sidecar protocol or security assumptions do not match.
Phase 0: thin technical prototype
A prototype may begin independently of #7/#11 and should prove only:
Tauri -> packaged Python sidecar -> 127.0.0.1 random port -> health/protocol handshake -> existing Dashboard
Stop the prototype once packaging/lifecycle feasibility is demonstrated. Do not use it as an excuse to duplicate frontend or domain logic in Rust/TypeScript.
Production scope
Sidecar protocol
- dedicated sidecar entry point such as
localizer-sidecar desktop-server --config <project.yaml> --port 0
- bind production sessions to
127.0.0.1 on a random port
- emit exactly one machine-readable startup handshake containing protocol version, port, PID, and project identity
- keep later business logs off the handshake channel
- gate writable UI readiness on
/api/health plus compatible protocol/project readiness
Session/security boundary
- fresh short-lived session capability on each launch
- no session secrets in argv, URLs, local storage, Prompt files, or persistent logs
- mutating local APIs require the capability plus existing write-action protection
- fail closed on protocol mismatch
- constrain WebView external navigation; approved external links open in the system browser
- paths from native dialogs are revalidated in Python using resolved/scope-checked paths
- credentials use an OS-reviewed mechanism (or explicitly reviewed equivalent) and are injected only into the task that needs them
Lifecycle
- Tauri owns window/native picker/single-instance/sidecar lifecycle only
- Python application services remain authoritative for localization, TM, QA, build, and publish
- normal exit checks active run state before sidecar termination
- never silently kill a sidecar while checkpoint/TM writes are active
- unexpected client termination uses bounded cleanup and existing owner-lock/task-snapshot/checkpoint recovery on restart
- preserve explicit macOS/Linux packaging boundaries without requiring those platforms in the first release
Agent independence
Non-goals
Acceptance criteria
Dependencies / priority
Priority: P2 in the M8 roadmap.
The sidecar packaging prototype is independent. Production integration should consume stable existing application/security contracts and may later expose controlled-intelligence APIs, but a full #7/#11 implementation is not a prerequisite for the desktop product itself.
Parent roadmap: #30
Positioning
The Windows desktop client is an independent productization track, not proof that Game Localizer needs a full agentic harness.
A Tauri shell can be valuable simply by packaging the existing Python application, Dashboard, project selection, native filesystem integration, lifecycle, and credential/session boundaries. It must not wait for a broad AgentRuntime before a technical packaging prototype is possible.
Priority is P2 within M8 because current engineering focus is Eval/TM/controlled intelligence foundations, not because desktop packaging has low product value.
Goal
Ship the first Windows x86-64 desktop client that starts and supervises a packaged Python sidecar, establishes a versioned local session securely, reuses the existing WebUI/application services, and fails closed when client/sidecar protocol or security assumptions do not match.
Phase 0: thin technical prototype
A prototype may begin independently of #7/#11 and should prove only:
Tauri -> packaged Python sidecar -> 127.0.0.1 random port -> health/protocol handshake -> existing DashboardStop the prototype once packaging/lifecycle feasibility is demonstrated. Do not use it as an excuse to duplicate frontend or domain logic in Rust/TypeScript.
Production scope
Sidecar protocol
localizer-sidecar desktop-server --config <project.yaml> --port 0127.0.0.1on a random port/api/healthplus compatible protocol/project readinessSession/security boundary
Lifecycle
Agent independence
Non-goals
Acceptance criteria
Dependencies / priority
Priority: P2 in the M8 roadmap.
The sidecar packaging prototype is independent. Production integration should consume stable existing application/security contracts and may later expose controlled-intelligence APIs, but a full #7/#11 implementation is not a prerequisite for the desktop product itself.