#5192·gbrain

Google connector sources cannot sync under managed mode, and `writer activate --dry-run` does not report it

Author: mmakunasCreated Sep 17, 2026Updated Sep 17, 2026

Observed (0.51.0.0, Postgres 17, macOS; schema v149 → v159 applied)

Brain with 11 kind: google sources (one Gmail, ten Calendar) and one hardened workspace source. gbrain sources writer activate --confirm-quiesced --dry-run --json returned only:

{"error":"writer_registration_required","message":"Source 'gcal-8th-hawks' needs an active canonical owner before activation."}

Nothing in the dry run, in skills/migrations/v0.51.0.0.md, or in docs/guides/concurrent-writes.md states that Google sources have no sync path once managed mode is enabled. We did not activate.

Mechanism (read in the v0.51.0.0 tree)

  • runGoogleSync calls assertUnmanagedCanonicalWriter(engine, 'Google source sync') before any work (src/core/google/google-source.ts:963); the assertion throws writer_coordinator_required when persistence_brain.enabled is true (src/core/persistence/maintenance.ts:9-13).
  • The managed sync path refuses any source with config.kind set: performSync routes to performManagedSync when managed (src/commands/sync.ts:618-619) and resolveManagedSyncContext throws writer_coordinator_required: Connector sync requires its dedicated coordinator. (src/core/persistence/sync-discovery.ts:60).
  • Activation validates owner bindings, native locks, legacy leases and pending requests (src/core/persistence/activation.ts:32-89) and does not read sources.config.kind.

Acceptance criteria

  • sources writer activate --confirm-quiesced --dry-run on a brain with an active kind: google source reports that source as unsupported under managed mode, or activation refuses, naming the sources.
  • The v0.51.0.0 migration skill states which source kinds have no managed sync path.

Related

#5175, #5176, #5182 (other managed-mode gaps, same release). This one concerns connector kinds.