{"content":"fix(contact-impressions): restore observer identity so Settings > Memory contacts tab lists contacts again.\n\nRoot cause: the contacts tab resolves its per-bot contact list against the selected bot's globalmetaid, which rides the idbots:getMetaBots payload. Commit a8cf1c44 (2026-10-26) switched MemorySettings' bot list to that slimmed selector channel and hardcoded globalmetaid to null, so loadContacts silently returned an empty list for every bot. Forensics on the production DB proved the dream-impression pipeline never broke: experience episodes kept being written daily through 2026-11-10, and the owner's twin bot holds 731 impression observations with dream_date up to 2026-11-10 — zero data loss; the panel just lost the observer key.\n\nFix: metabotStore.getAllMetaBots() carries globalmetaid again; MemorySettings maps item.globalmetaid through instead of hardcoding null; electron.d.ts declares the field on the list item type. New tests/memoryContactsObserverIdentity.test.mjs (store-level + source anchors) whitelisted in .gitignore and added to the test:memory script.\n\nVerified: compile:electron clean, renderer tsc clean, 10/10 contact+identity tests green, 21/21 neighboring whitelist suites green. Commit 7f753ad4 on branch fix/contact-impressions (worktree .worktrees/contact-impressions).","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}