Repository navigation
Antigravity shows "Needs attention: Google account access is not checked yet" after a server process restart, even when already signed in #10110
Description
Activity
Triage
Confirmed. This is a real UX bug, but the restart-unknown state is already an intentional Antigravity design — chat was patched for it, Settings was not.
What is going on
makeAntigravityProvideralways starts with in-memoryauth.status: "unknown". The only write to"authenticated"isonSessionStarted(a real ACP session, interactive Google sign-in, or Refresh provider status /refreshModels). The periodic health probe only callsruntime.initialize()and never restores auth. That is test-locked (treats initialize as installation proof, not account or model discovery) and called out in the provider (Health uses initialize only).A successful probe therefore publishes
status: "warning"+AUTH_UNCHECKED_MESSAGE. SettingsgetProviderSummaryrenders any warning as Needs attention. Provider setup also shows Sign in with Google whenever auth is not"authenticated". Onboarding uses the same summary and treats warning as attention.The on-disk provider status cache does remember a previous
authenticatedsnapshot at boot, butmergeProviderSnapshotlets the live unknown snapshot overwrite auth/status/message (it only special-cases models). That merged unknown row is then written back to the cache.warning+unknownis load-bearing for model retention (isPendingAntigravityAuthentication); do not flip the probe toreadywithout updating that merge.Service-launcher zero-downtime nightly updates (and Electron child restarts) replace the Node process, so this comes back often even when the supervisor/machine never went down. While the process stays up,
checkProviderpreservesauthenticated— the health-check interval is not the flap.continueThreadsAfterServerUpdatecan hide it by starting a session.Already shipped
#9647 (
fix(web): resume Antigravity threads without repeated sign-in) already treats this as “not a failure”:- chat send gating allows
auth.unknown - the chat provider banner is hidden for installed Antigravity
warning+unknown - user docs say session startup checks saved credentials, and Refresh provider status is how to verify access
That PR did not update Settings / setup / onboarding. This issue is that leftover.
Not a duplicate of #9650 (same disposable
initialize()probe, different Windows temp-disk symptom). That issue is also why the periodic probe must not start a full session.Workaround
Refresh provider status in Settings (not the health-check interval). That RPC passes
refreshModels: true, which for Antigravity runsstart()and restores Authenticated the same way a new session does. Re-clicking Sign in with Google looks instant because the CLI already has cached Google credentials.Suggested fix
Do not make the periodic health probe call
start().Smallest change: apply the same
installed && warning && auth.unknownpredicate fromProviderStatusBannerto Settings (getProviderSummary, setup CTA) and onboarding readiness, so unchecked auth is not Needs attention / a fake re-login. Keep confirmedunauthenticatedand install/startup errors.Optional later: restore last-known auth from the status cache (or a cheap
acp_token.jsonpresence check) if the card should again say Authenticated after restart without a session.Surfaces
- Settings card + provider setup CTA: yes (bug lives here)
- Onboarding / Welcome Wizard: yes
- Chat + desktop-wrapped web: already handled by fix(web): resume Antigravity threads without repeated sign-in #9647
- Mobile: no provider setup; send/model selection already ignore
unknown
Accepting as a bug.
- chat send gating allows
- addedvia-triageFiled through npx t3 triageFiled through npx t3 triagebugSomething is broken or behaving incorrectly.Something is broken or behaving incorrectly.acceptedfeature request acceptedfeature request accepted
on Sep 5, 2026
Before submitting
Area
apps/server (provider/antigravity)
What happened
Antigravity continuously shows "Needs attention · Antigravity is installed. Google account access is not checked yet." As soon as I press "Sign in with Google" it works, but I've had to do this repeatedly, at random intervals, on two separate always-on installs (a desktop app talking to a local server, and a
t3 servedaemon on a remote VPS), while the server stays up the whole time from my perspective.Diagnosis
AUTH_UNCHECKED_MESSAGEconstant (apps/server/src/provider/Layers/AntigravityProvider.ts:36-38), used as the fallbackmessageincheckProvider(same file, ~lines 197-204) wheneverauth.statusis neitherauthenticatednorunauthenticated, alongsidestatus: "warning".getProviderSummary(apps/web/src/components/settings/providerStatus.ts:57-63) renders anystatus === "warning"as "Needs attention" and just displaysprovider.messageas the detail line. Theauth.status === "unknown"condition is decided entirely server-side — the client is a faithful mirror, not where the bug lives.auth.statusstarts as"unknown"in the provider's initial in-memory state (AntigravityProvider.ts:147, built via a freshSubscriptionRef.makeat:158). It is written to"authenticated"in exactly one place (AntigravityProvider.ts:281, insideonSessionStarted), reached by two callers: a real ACP chat session starting (AntigravityDriver.ts:304), or completion of an interactive Google sign-in (AntigravityAuth.ts:282→AntigravityDriver.ts:228→onSessionStarted).checkProvider,AntigravityProvider.ts:168-232) only callsruntime.initialize()(wired inAntigravityDriver.ts:257-273), never.start(), and only readsdraft.auth.status(:197) — it can never itself set or restoreauthenticated.makeAntigravityProvideralways builds a freshSubscriptionRef(AntigravityProvider.ts:158), and the service launcher's handoff payload carries only{protocol, childVersion, update}(serviceLauncher.ts:400-404) — no runtime state.service-launcher.mjsperforms zero-downtime updates by spawning a brand-newt3 servechild and terminating the old one (#handleUpdateRequest/#beginTrial,serviceLauncher.ts~lines 453-509,#spawnChild~lines 405-408) — a genuinely fresh Node process. Confirmed live: the launcher had been running 20h55m while its currentt3 servechild was only 34 minutes old, with three different nightly runtimes present under the runtime directory within the same 24-hour window.service-launcher.mjs; the restart mechanism differs, but the same underlying defect applies — any restart of that process rebuilds the Antigravity provider from scratch withauth.status: "unknown".onSessionStartedagain — which appears to work instantly only because the underlyingantigravityCLI already holds valid cached Google credentials; the click is not performing a real re-authentication.continueThreadsAfterServerUpdate(consumed byreconcileProviderSessions,serverRuntimeStartup.ts:470-484) can incidentally resume a session across a restart and heal this side effect, which plausibly explains why the symptom is intermittent rather than guaranteed on every single restart.0) on one install did not stop the symptom from recurring, consistent with the probe never being able to setauthenticatedin the first place.Steps to reproduce
t3 servedaemon install this happens automatically via the service launcher's zero-downtime update handoff whenever a newer nightly is available; it can also be forced by restarting thet3 serveprocess directly.Version or commit
0.0.39-nightly.20260905.1286 (reproduced on two separate installs on this same version)
Environment
macOS 25.6.0 arm64 (T3 Code desktop app) and a Linux VPS running
t3 serveunderservice-launcher.mjs. Node v26.0.0.Logs or stack traces
(the actual server process is ~35x younger than its own supervisor, despite the machine and supervisor never having gone down; three separate nightly runtimes were present under the runtime directory within the same 24 hours)
Related issues
#9650 (Antigravity health checks leave large
_MEIfolders) confirms the same "disposable per-interval ACP probe" design elsewhere in this provider. Different symptom, not a duplicate.Workaround
None available at the config level. The provider-health-check-interval setting does not affect this — confirmed by disabling it entirely on one install without the symptom stopping. No reliable user-side workaround beyond re-clicking sign-in after it flaps.
Filed by
claude (opus-5) via t3 triage