Context: Team Kitty and Zeitgeist
Status (2026-10-14): the hosted, sync and drain surfaces and their clients were removed from open-core in #6164. The removed code is preserved in
spec-kitty/event-router(PR #45). This page is now a glossary and a map of what is gone, so a reader who meets the old vocabulary can translate it. Do not build toward hosted surfaces unless the operator asks.
What was removed
Team Kitty is the hosted product. Zeitgeist is the per-team presence-and-moments relay it runs. Until #6164 the CLI shipped the client side of that: it authenticated, minted a capability, and published each status moment to the team's relay when an opt-in called drain was on. All of that client code left this repository:
- the
auth,issue-search,live-work,moments,routesandzeitgeistCLI entries; - the
zeitgeist_client/andsaas_client/packages and the auth package; - the drain posture (
core/hosted_posture.py) andstatus/zeitgeist_bridge.py.
Nothing hosted ships configured or gates a release. The SaaS and relay repositories are separate and are not covered here.
What stays
- The produce seam.
src/specify_cli/status/adapters.pyis the publish/subscribe surface for status events. Open-core ships no default handler, so everyfire_*call is a no-op until a transport owner registers one. Producing an event never depends on a drain.status/emit.pystill writes the canonical event log first. - The Mission Status Read API (producer) and the consumer side built on it ("Multiplayer Mode": mission-ui, the pack composer). See ADR 2026-10-01-2 and the Amendment in ADR 2026-10-06-1 (its drain and hiding mechanics are now historical).
- One-way cleanup migrations. For example
m_4_0_0_retired_hosted_targetdeletes a staleconfig.toml [sync].server_urlthat names the retiredapp.spec-kitty.ai. It is self-contained and touches nothing else.
"Sync" is dead
The transport called "sync" (a local daemon, an offline queue, a per-project consent
store, spec-kitty sync opt-in, api/v1/sync/*) was deleted in August 2026, and the
specify_cli.sync package with it. tests/architectural/test_no_retired_subsystems.py
refuses its return. The word survives only as residue in identifiers, stale docs and
comments. When you read "sync" here, translate it: it is leftover naming, never design
against or "re-enable" it. spec-kitty charter sync is unrelated: it syncs charter
artifacts.
Canonical vocabulary
For where Team Kitty sits among the Spec Kitty Inc. product lines (Build Kitty, Brain Kitty), see Product Lines.
| Term | Meaning | Do not say |
|---|---|---|
| Team Kitty | The hosted product (separate SaaS repository). Not part of open-core. | "the SaaS sync", "Spec Kitty Cloud" |
| Zeitgeist | The presence-and-gossip relay Team Kitty runs, one container per team. | "the event server", "sync server" |
| Moment | One content-agnostic, bounded status event published to a relay. | "sync event" |
| Drain | The former client-side opt-in for automatic outbound hosted interaction. Removed with the hosted surfaces. | "sync", "fan-out enabled" |
Stale surfaces you will meet
Marked deprecated and kept for history: docs/guides/project-sync-consent.md and the 2.x/3.x
sync ADRs. docs/architecture/team-kitty-saas.md and docs/operations/logged-out-teamspace.md
are now stubs that only keep old links resolving; docs/operations/sync-drain.md and
docs/operations/ci-machine-auth.md were deleted (#6219). The removed code lives in the
spec-kitty/event-router repository. ADR hosted interaction is opt-in
and convergence retirement and client-repo inversion
describe the earlier design. See also system events for the canonical
event envelope.