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.