Summary
Memories synced from a connector are unretrievable. A Gmail thread that was ingested successfully never comes back from recall, on a live instance.
Problem
Four independent failures stack up, each enough on its own to make a synced memory invisible:
- Deficient vectors are invisible and never repaired. A chunk whose batch embed failed is stored text-only, and a partial cloud failure writes degenerate short vectors. Recall drops any chunk whose dimension differs from the live query, so both are permanently unreachable — and nothing re-derives them.
- The Gmail response reshape lost its caller in the TinyCortex engine migration, so the sync stores raw provider JSON rather than one record per message.
- The tree's active signature names a different provider than the namespace store's embedder, so the two disagree about what a stored vector even is.
- Auto-recall is global-only.
RecallOpts::default() resolves to the global namespace, so the per-turn context never searches connector namespaces at all.
Steps to reproduce:
- Connect Gmail and let the sync ingest a thread.
- Ask the agent about something only that thread contains.
- The agent answers as if the memory does not exist. A direct namespace query shows the row present but not retrievable.
Solution (optional)
Treat deficient vector_chunks rows as their own durable work-list and sweep them (startup, sync completion, login, embedder switch), writing a vector back only when its width matches the active embedder. Restore the reshape via an executor wrapper, carry the embedding provider into the tree config, and fan auto-recall out to the connector namespaces.
Acceptance criteria
Related
Fix: #5258, which depends on tinyhumansai/tinycortex#132 landing first.
Summary
Memories synced from a connector are unretrievable. A Gmail thread that was ingested successfully never comes back from recall, on a live instance.
Problem
Four independent failures stack up, each enough on its own to make a synced memory invisible:
RecallOpts::default()resolves to theglobalnamespace, so the per-turn context never searches connector namespaces at all.Steps to reproduce:
Solution (optional)
Treat deficient
vector_chunksrows as their own durable work-list and sweep them (startup, sync completion, login, embedder switch), writing a vector back only when its width matches the active embedder. Restore the reshape via an executor wrapper, carry the embedding provider into the tree config, and fan auto-recall out to the connector namespaces.Acceptance criteria
Related
Fix: #5258, which depends on tinyhumansai/tinycortex#132 landing first.