Launch-Readiness Behavior (Coming Soon)
Status: pre-launch. This page describes the behavior the Spec Kitty CLI will adopt at the public Teamspace launch milestone. None of this is in effect today. For today's local-first experience, see the README. For the internal hosted-readiness preview that lets contributors dogfood the hidden mode now, see Internal Hosted-Readiness Mode (Pre-Launch).
Why this doc exists
The Spec Kitty CLI today is local-first. Hosted auth, sync, and
tracker flows are opt-in behind the SPEC_KITTY_ENABLE_SAAS_SYNC=1
environment variable. At the public Teamspace launch, the user-facing
defaults change. This doc is the reference the launch coordinator
flips on. Until that flip happens, treat every section below as a
design intent, not a description of current behavior.
If you are an end user today, you will not see any of this. The public docs and the CLI's defaults continue to describe the local-first experience.
What changes at launch
The table below frames the launch as a delta from today. "Today"
columns describe behavior on main right now; "At launch" columns
describe behavior that will ship at the launch milestone.
| Dimension | Today (pre-launch) | At launch |
|---|---|---|
SPEC_KITTY_ENABLE_SAAS_SYNC |
Opt-in gate. Unset / falsy = local-first; truthy = hidden hosted-readiness mode for internal operators. | Override only. Hosted readiness is on by default; the variable becomes an internal escape hatch (e.g., SPEC_KITTY_ENABLE_SAAS_SYNC=0 to force local-only). |
| Default SaaS URL | Operators must set SPEC_KITTY_SAAS_URL explicitly to dial dev / staging. There is no user-facing default. |
A user-facing default URL ships baked into the CLI. End users do not set SPEC_KITTY_SAAS_URL. |
| Sync default | Sync commands no-op unless hosted mode is explicitly enabled. | Sync runs by default for Teamspace-connected repos. The same suppression contract still applies (interactive / non-interactive / machine-output). |
| Tracker discovery | Tracker calls only happen behind the opt-in gate. | Tracker discovery happens by default for Teamspace-connected repos; unreachable-tracker states surface via the readiness coordinator. |
spec-kitty auth login |
Documented as the canonical hosted login flow for internal operators dogfooding the hidden mode. | Documented as the canonical hosted login flow for all users joining a Teamspace. |
| Public docs framing | Local-first. Hosted is "optional / opt-in / later". | Local-first remains the on-ramp; Teamspace becomes "available" — never retroactively backdated as "always was". |
Dev / staging overrides still apply after launch
SPEC_KITTY_SAAS_URL and the other operator-only overrides survive
the launch flip. They remain internal developer tools — they are not
user behavior either before or after launch. Internal contributors
who need to point a session at a dev or staging hosted environment
continue to use the workflow documented in
Internal Hosted-Readiness Mode (Pre-Launch).
In other words: the dev/staging override path is the same forever; only the user-facing defaults change at launch.
Launch-day remediation commands
These commands are what end users will run at launch in each readiness scenario the coordinator surfaces. They are copy-pasteable; each appears on its own line so a CLI nag panel can render them verbatim.
spec-kitty auth login
spec-kitty upgrade --cli
spec-kitty sync doctor
| Scenario at launch | Command users will run |
|---|---|
| Logged out on a connected Teamspace | spec-kitty auth login |
| CLI upgrade required for compatibility with the hosted side | spec-kitty upgrade --cli |
| Sync / tracker subsystem unreachable | spec-kitty sync doctor |
The exact wording the CLI prints in each case is set by the readiness coordinator and its sister modules. This doc does not restate the byte-stable strings; it points the reader at them.
Upgrade readiness UX
The launch readiness coordinator owns the upgrade prompt. It uses the
existing compatibility planner and NagCache state, then adds user-facing
choices:
- Upgrade now.
- Always keep me up to date.
- Not now.
- Never ask again.
"Not now" snoozes the same remote version on a conservative cadence: 24 hours, then 48 hours, then 7 days. A newly discovered remote version restarts that cadence. "Never ask again" is also anchored to the remote version the user dismissed.
Auto-upgrade is fail-closed. It only runs for known-safe install methods
where the CLI can call the owning package manager directly (pipx, uv tool,
Homebrew, and pip installs). Unknown, source, or system-package installs print
manual guidance and do not mutate the environment.
Upgrade readiness never prompts, mutates the upgrade cache, or invokes an
auto-upgrade subprocess during JSON, quiet, help, version, CI, non-TTY, or
SPEC_KITTY_NO_NAG=1 invocations. These outputs remain safe for wrappers that
parse stdout.
Operator overrides:
SPEC_KITTY_UPGRADE_DISABLED=1 spec-kitty status
SPEC_KITTY_UPGRADE_AUTO=1 spec-kitty status
SPEC_KITTY_UPGRADE_NEVER_ASK=1 spec-kitty status
SPEC_KITTY_NAG_THROTTLE_SECONDS=86400 spec-kitty status
See Environment Variables Reference for the exact active env keys.
Operator playbook for the launch flip
This is the high-level launch coordinator checklist, not a
release-cut runbook. Exact versions, dates, and step ordering live
in the release-cut documentation in architecture/ and the
spec-kitty-saas repo.
- Confirm the hosted side is generally available and the readiness
coordinator has clean dogfooding evidence behind
SPEC_KITTY_ENABLE_SAAS_SYNC=1. - Cut a CLI release where the default behavior of the rollout gate inverts: hosted readiness is on unless explicitly disabled.
- Update public docs (README,
docs/index.md, the relevant tutorials) to introduce Teamspace as available — never as "always was". The current pre-launch local-first framing remains the on-ramp. - Move this doc from
docs/explanation/to a launch-day "what's new" location, or update its banner fromStatus: pre-launchtoStatus: launchedonce the flip is live. Do not retroactively edit this doc as if its content were always current. - Keep the internal hosted-readiness how-to in place; rewrite its "When this page applies" section to reflect that the dev / staging override path is now the only thing it covers.
Step 3's "available — never as 'always was'" line is the load-bearing editorial rule. It is what keeps the launch honest.
What this doc deliberately does not specify
- Exact dates or version numbers. Those live in the release-cut runbook, not in a conceptual explanation doc.
- Server-side behavior. Hosted-side changes are owned by the
spec-kitty-saasrepo and its release notes. - Marketing copy. This doc speaks to operators planning the flip; user-facing announcement copy is owned elsewhere.
- Migration steps for users who set
SPEC_KITTY_ENABLE_SAAS_SYNC=1pre-launch. Their setup keeps working; the variable becomes a no-op-redundant override at launch. If a deprecation is needed, it ships in a separate release-cut PR.
Related
- Internal Hosted-Readiness Mode (Pre-Launch) — the active dogfooding doc for today.
- Recovery: Logged out on a connected teamspace — the recovery contract that ships at launch unchanged.
- Environment variables reference
— the canonical entries for
SPEC_KITTY_ENABLE_SAAS_SYNCandSPEC_KITTY_SAAS_URL. - Upgrade the Spec Kitty CLI
— backs the
spec-kitty upgrade --cliremediation snippet.