Found by adversarial audit @ 261d00b, survived refutation (conf 0.93).
Interleave: rename-namespace runs scanKeys snapshot → dropIndex(source) (clears knownIndexes/dimensionMap, translate/index.ts:180-181) → per-key RENAME loop → registry srem/sadd → ensureIndex(target) — no transaction or per-namespace lock (pendingIndexCreations only coalesces same-index FT.CREATEs; namespaces.ts:88-114). A concurrent POST /upsert/source mid-loop passes loadDimension (map cleared), recreates idx:source via FT.CREATE, writes v:source:* hashes, SADDs source (upsert.ts:139) — rename's later SREM (namespaces.ts:103) removes that registration: final state has a live idx:source index plus orphan v:source:* keys invisible to list-namespaces (reads only _ns_registry) but fully queryable. Crash windows mid-loop persist the same split; syncIndexes repairs only index→registry direction, never this.
Fix direction: serialize mutating namespace operations per-namespace (in-flight map pattern like pendingIndexCreations) or perform the move atomically (Lua).
Found by adversarial audit @ 261d00b, survived refutation (conf 0.93).
Interleave: rename-namespace runs scanKeys snapshot → dropIndex(source) (clears knownIndexes/dimensionMap, translate/index.ts:180-181) → per-key RENAME loop → registry srem/sadd → ensureIndex(target) — no transaction or per-namespace lock (pendingIndexCreations only coalesces same-index FT.CREATEs; namespaces.ts:88-114). A concurrent POST /upsert/source mid-loop passes loadDimension (map cleared), recreates idx:source via FT.CREATE, writes v:source:* hashes, SADDs source (upsert.ts:139) — rename's later SREM (namespaces.ts:103) removes that registration: final state has a live idx:source index plus orphan v:source:* keys invisible to list-namespaces (reads only _ns_registry) but fully queryable. Crash windows mid-loop persist the same split; syncIndexes repairs only index→registry direction, never this.
Fix direction: serialize mutating namespace operations per-namespace (in-flight map pattern like pendingIndexCreations) or perform the move atomically (Lua).