Problem
The completed Phase-L product has three entry surfaces (sith, sith ui, and sith desktop) but no obvious one-command graphical launch path. This makes a healthy, feature-complete local client feel unfinished during first-run and demo use.
Scope
Add sith launch as orchestration over the existing local surfaces. It must not create another UI, deploy fixtures, persist kubeconfig paths, or change the local-versus-governed action boundary.
Acceptance criteria
sith launch selects the native desktop on macOS and the loopback-only web UI on other supported platforms.
--mode auto|desktop|ui provides an explicit override and rejects unknown values.
--kubeconfig-dir reuses the existing bounded, in-memory directory importer.
- UI-only listener/browser flags remain explicit and are rejected when desktop mode is selected rather than silently ignored.
- Missing backends, unsupported desktop platforms, invalid paths, and cancellation fail safely with sanitized errors.
- Unit tests cover mode selection, invalid combinations, dependency validation, and command registration.
- README first-run and demo guidance leads with
sith launch.
- No workload, credential, telemetry, external listener, or cluster mutation is introduced by the launcher itself.
Verification
- Focused race tests for
internal/cli.
- Full
make ci.
- Local launch smoke using an isolated kubeconfig-directory fixture.
Refs #29 #34 #166 #27.
Problem
The completed Phase-L product has three entry surfaces (
sith,sith ui, andsith desktop) but no obvious one-command graphical launch path. This makes a healthy, feature-complete local client feel unfinished during first-run and demo use.Scope
Add
sith launchas orchestration over the existing local surfaces. It must not create another UI, deploy fixtures, persist kubeconfig paths, or change the local-versus-governed action boundary.Acceptance criteria
sith launchselects the native desktop on macOS and the loopback-only web UI on other supported platforms.--mode auto|desktop|uiprovides an explicit override and rejects unknown values.--kubeconfig-dirreuses the existing bounded, in-memory directory importer.sith launch.Verification
internal/cli.make ci.Refs #29 #34 #166 #27.