Data Model: Team Kitty launch defaults for the CLI

Entities

HostedTarget

The address hosted operations use, with provenance.

FieldTypeRule
resolved_server_urlnormalized URLnever blank; trailing slash stripped
sourceenvironment \configuration \
environment_server_urlURL or nullfrom SPEC_KITTY_SAAS_URL
configured_server_urlURL or nullfrom config.toml [team_kitty] server_url; malformed or blank reads as null
override_modeexisting enumunchanged; packaged default never participates in a disagreement

Invariants:

  • source = environment iff environment_server_url is set and either equals the configured value or no configured value exists.
  • source = configuration iff no environment value and a configured value exists.
  • source = packaged_default iff neither exists.
  • environment and configuration present and different ⇒ fail closed (ServerTargetSplitBrain), unchanged from today.

AuthenticationState

StateMeaningHosted behavior
authenticatedusable session (refreshable) or service token presentmoments publish; readiness may nag on connected-team logout
unauthenticatedno session, no tokenzero hosted requests of any kind
expired_unrefreshablestored session cannot be refreshedtreated as unauthenticated; hint eligible

Transitions: auth login → authenticated; auth logout → unauthenticated (and resets the sign-in hint marker); refresh failure → expired_unrefreshable.

SignInHintMarker

Per-machine record under the runtime state root that the one-time sign-in hint was shown.

FieldRule
shown_atISO timestamp; written only when the hint is actually printed
locationruntime state root (never the project); one per SPEC_KITTY_HOME
resetremoved by auth logout

Rules: printed only when interactive, not in JSON/help/version/non-TTY output; concurrent invocations may race, the marker is written atomically and the worst case is one duplicate hint.

Capability (unchanged)

Relay-scoped grant (team, deployment, repo, kind) minted by the SaaS, cached under the runtime state root by zeitgeist_client/credentials.py. Not modified by this mission; referenced because owned checkouts now use it identically.

OptOut switches

NameScopeReplaces
SPEC_KITTY_SKIP_PRE_REVIEW_GATEskips the pre-review regression gate on --to for_reviewSPEC_KITTY_SYNC_DISABLE / SPEC_KITTY_SYNC_MINIMAL_IMPORT as gate opt-outs
SPEC_KITTY_NO_MOMENT_HANDLERSregisters no moment handlers at import (test isolation)SPEC_KITTY_SYNC_MINIMAL_IMPORT

Neither affects hosted egress semantics beyond its stated scope.

Retired identifiers (no successor)

SPEC_KITTY_ENABLE_SAAS_SYNC, SPEC_KITTY_SYNC_DISABLE, SPEC_KITTY_SYNC_MINIMAL_IMPORT, SYNC_DISABLE_ENV_VARS, first_set_sync_disable_env, is_saas_sync_enabled, sync_active, saas_sync_disabled_message, SAAS_SYNC_ENV_VAR, OWNED_SYNC_UNSUPPORTED, config table [sync].