1.0.6
Fixed (#368)
- Scratchpad больше не «пустой» в heartbeat-витках (#368): запись идёт в scope
(agent, user_id), а heartbeat/cron (ProcessDirect,UserID: nil) читал строго(agent, user_id IS NULL)— данные, оставленные агентом в чате, плановые прогоны не видели (гипотеза теста «новая сессия на каждый heartbeat» не подтвердилась — сессий в ключе нет вообще). Массовое чтение (ScratchpadReadAll/ScratchpadReadAllWithMeta, SQLite+PG) стало кросс-scope и симметричным одиночномуScratchpadRead:userID == nilвидит все записи агента,userID != nil— agent-scope плюс собственные; одинаковый ключ в разных scope разрешается в пользу user-строки (ORDER BY user_id IS NOT NULL, в WithMeta дубликат схлопывается) — тот же приоритет, что у одиночного чтения. Запись, delete и clear не менялись, миграций нет; описаниеscratchpad_readдополнено видимостью между scope. Побочный эффект: админ-листинг scratchpad (handler/memory.go, nil) теперь показывает и пользовательские записи агента. Тест:TestScratchpadReadAll_CrossScopeVisibility.