mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-12 20:27:30 +00:00
延续批次 1/2 的形态:只调模块**本来就有**的导出接口,输入 → 可观察输出。
2 个文件全部在 `<module>/test/`,源码目录仍零 `_test.go`。
共 17 条判据。
## internal/memory(10 条)
纯函数(输入文本 → 输出):
TestCleanText 空白/「,」前缀(实现剥两次)
TestChannelScene "qq" → "chan:qq",空 → 空
TestFilterNoiseTriples 噪音主语/宾语被过滤,且不改输入切片
TestSentenceBlockIDIsStable 同文本同 ID
TestNewSentenceBlockFields Trim 后的 Text 与 ID
TestBuildCentroid 中心向量均值 = 输入算术均值
GraphDB 真实构造 → 写入 → 可观察输出:
TestCommitThenGraphData Commit → GraphData 给出 nodes 结构
TestReadOnlyHandleRejectsWrite OpenGraphDBReadOnly 在 SQLite 层拒写
`TestReadOnlyHandleRejectsWrite` 守的是「子 agent 改不了主记忆」的
**结构性**保证(PRAGMA query_only=1),不是靠调用方自觉。
**判据写错过两次,按真实契约修正**:
① `CleanText` 连剥两次「,」,第一版按"只剥一次"写 ⇒ 红。
② 只读句柄的第一版三元组用了单字符实体名,被 `validEntityName`
提前拒掉、根本走不到 SQL 层 ⇒ 假绿。换成合法实体名后才真正验到
query_only。这个坑值得记:**判据的输入必须能走到被测路径**。
## internal/agent/core(7 条)
TestAgentID New(AgentConfig{ID}) → ID()
TestOutputAllowlist 空白名单=完整授权;非空=白名单
TestDuplicateInputWindow 同源同内容第二次判重;异源/异内容否
TestRealtimeFlag 普通 agent=false;nil receiver 安全
TestEmptyCollectionsOnFreshAgent Residents/RTChildren/DumpScheduler 为空
TestResolveOutputTargetWithoutRegistry 无注册表 → ok=false,不 panic
TestGetKernelStatusNeverNil 状态查询返回可用对象
只用 `New(AgentConfig)` 装配,不启动事件循环(已核实 `New` 里没有
`go a.xxx` / `Start()`),不构造 TaskFrame、不调 stepLLM/runStage、
不碰 a.sched、不读源码。
## 变异验证(改回旧实现必须红)
memory CleanText 不剥前缀 → ★ CleanText(",,你好")=",你好"
memory 只读句柄不设 query_only → ★ 只读句柄接受了写入
core 白名单恒放行 → ★ 白名单外的通道被放行
core 去重恒 false → ★ 同源同内容第二次未判重
全部还原后复跑全绿。
## 验证
go build ./... PASS
go vet ./... PASS
gofmt -l 干净
python3 .github/scripts/check-ci-gates.py PASS
go test ./... -count=1 14 个测试包 / 100 包无测试 / 0 FAIL
2 个新包 -race 全绿
源码目录 _test.go 0