fix(trace): 白名单放行 session —— 归属标识可读,正文边界不动
主人 2026-10-26 裁定:session 是**业务标识**,不是正文。它是排障时把一条 stderr 日志对回某个会话的唯一线索;而 /admin/flow/graph 本来就按会话返回、连 sessionId 都给了,图里多一个 session 不构成新的暴露。因此把 session 加进共享白名单 (safePropKeys,走 redactValue 的普通清洗),不再被写侧折成 Digest。 「不放宽白名单」仍是原则:本次只放行这一个键,正文的边界一个字没动 —— - trace 侧新增 TestJSONRecorder_KeepsSessionReadableDropsBody,**一条用例同时钉 两件相反的事**:JSONL 里 `"session":"web#lane-2"` 原文可读;同一 span 里的 result / text 哨兵正文仍然搜不到,且只在 omitted 里留下体积与指纹。 - loop 侧真循环用例补一句断言:落盘里 `"session":"sess"` 可读,而工具结果哨兵 同时仍不可见。 - 变异验证:把 session 从白名单摘掉,上述两处都会变红(session 落到 omitted)。 回归:go build ./... + go vet ./... + go test -count=1 ./... 全绿; trace/loop/orchestration 另跑 -race 全绿。
This commit is contained in:
1 parent
003d12a712
commit
6d0df6a825
3 files changed
+52
-2
No files matched your search
@@ -24,11 +24,17 @@ import "strings"
|
||||
// - memory(裁决 11.4.2):hits / count / failed(命中、写入与失败条数)、
|
||||
// bytes(注入块字节数)、scope / action(记忆作用域与操作名)—— 只记元数据,
|
||||
// 不含任何记忆正文;
|
||||
// - orchestration(裁决 11.4.2):subagent(被派发的子代理 id)。
|
||||
// - orchestration(裁决 11.4.2):subagent(被派发的子代理 id);
|
||||
// - 归属:session —— span 所属的 flow 图/会话标识(`{会话}[#{路}]`)。
|
||||
//
|
||||
// 表外的键**一律不出图、也不进 JSONL**。确实需要保留诊断线索的,用 Digest
|
||||
// (digest.go)作为 prop 值 —— 它由本包构造,构造上不含正文,两条投影都会放行。
|
||||
//
|
||||
// session 是**业务标识,不是正文**(主人 2026-10-26 裁定放行):它是排障时把
|
||||
// 一条 stderr 日志对回某个会话的唯一线索,而 `/admin/flow/graph` 本来就按会话
|
||||
// 返回、连 sessionId 都给了,因此放行它不构成新的暴露。它走 redactValue 的普通
|
||||
// 清洗(自身没有凭据形状),不做摘要 —— 变成 Digest 就失去了「对回会话」的用途。
|
||||
//
|
||||
// persona 是子代理分支根节点上的「目标角色 id」:orchestration/scheduler.go 只在
|
||||
// subagent_spawn 显式指定角色时才设置它,且该 id 必须先通过角色注册表校验
|
||||
// (ErrUnknownPersona 会拒绝未注册的 id,orchestration/persona.go),因此它是注册表里
|
||||
@@ -41,7 +47,7 @@ var safePropKeys = []string{
|
||||
"args_keys", "args_summary", "result_summary",
|
||||
"allow", "action", "elapsed_ms",
|
||||
"hits", "count", "failed", "bytes", "scope",
|
||||
"subagent",
|
||||
"subagent", "session",
|
||||
}
|
||||
|
||||
// safePropKeySet 是 safePropKeys 的查表形态。它在包初始化时由同一张表构造一次,
|
||||
|
||||
Reference in new issue
Block a user