test(memory)!: 块 union 化判据重写(CAS 淘汰第二阶段:测试)

生产已在上一提交(86572d13)全绿;本提交把 CAS 专属测试改到块语义,
并修掉几处判据自身的缺陷(判据错 ≠ 生产错):

- sdk/memory_impl_test: media.Store→块;NewGraphMemoryWithPlugin
- core/{graphmedia,mediaref,medialive,medialoop,inputunify}_test:
  mediaStore→memory;PayloadDigest→Data/BlockData;shortDigest→shortID
- graphmedia: 无引用句子用独立块 ID(shortID 20 字符会与 blk_src_ 撞长度)
- memory/sentence_block: BlockByIDPrefix 加 len<12 下限(短引用守卫)
- core/medialoop: reembedOneBlock 按 BlockData 兜底取字节(lean 列无 data)
- knowledge: broken.png 改目录造读失败(chmod 0000 对 root 无效);
  dense/attach 测试补 Data 并先落盘后 AttachMedia
- webui: graph_pulse fixture payload_digest→has_data

注:internal/plugin/proc 的 shmVersion 不匹配(内核1/插件2)是
SDK 仓(777c3a0,v2 模板)与本分支内核(v1)的跨仓版本错位,
与块 union 无关(stash 全部改动后仍复现),属 proc-extra 特性线。
This commit is contained in:
JianFeeeee
2026-10-12 14:26:13 +08:00
parent 86572d134d
commit 33e1a0bfaf
16 changed files with 630 additions and 858 deletions

View File

@ -1,6 +1,7 @@
package core
import (
"fmt"
"log"
"sync"
"sync/atomic"
@ -44,9 +45,10 @@ func (a *Agent) reembedStaleMedia() {
}
// 只迁图像:多模态空间当前覆盖 text+image,音频/视频不在其内
// (不拿别的模态的向量顶替——那是静默错配)。
// StaleBlockVectors 只给元数据(lean 列),字节由 reembedOneBlock 按需取。
var targets []memory.MemoryBlock
for _, b := range stale {
if b.Modality == memory.BlockImage && len(b.Data) > 0 {
if b.Modality == memory.BlockImage {
targets = append(targets, b)
}
}
@ -102,7 +104,19 @@ func (a *Agent) reembedOneBlock(b memory.MemoryBlock, fp string) error {
if mime == "" {
mime = "image/png"
}
vec, err := a.multimodalSpace.EmbedImageDense(b.Data, mime)
// 负载不在 lean 列里:按块 ID 单取字节(块即 union)。
data := b.Data
if len(data) == 0 {
var err error
data, err = a.memory.BlockData(b.ID)
if err != nil {
return err
}
}
if len(data) == 0 {
return fmt.Errorf("block %s has no payload", b.ID)
}
vec, err := a.multimodalSpace.EmbedImageDense(data, mime)
if err != nil {
return err
}