docs: record unified content classifier deployment evidence

This commit is contained in:
2026-10-10 02:32:40 +08:00
parent 2683d985d2
commit 902eaa87e4
3 changed files with 16 additions and 2 deletions
+2
View File
@@ -81,6 +81,8 @@
- **当前日志与抓包规则**:Dispatcher、Agent 的 `--debug/-D` 仅开启 Logrus 详细收发日志;普通模式记录自身关键工作流程、方向、身份、结果、耗时及错误。HTTP/MQ/RPC 正文只在 Debug 中记录安全副本,禁止密钥、Token、签名 URL、完整提示词/对话/音频及原始 SIP;不截断其余可读业务 JSON,不修改发送数据、不吞错误。Agent 原 `--debug` 抓包含义移除,逐通外部抓包凭证检查改为独立 `--capture`,不足时仍失败关闭。独立 `sip-call` 的 Debug 抓包参数不变。详细规则见 [`docs/logging.md`](docs/logging.md)。
- **2026-10-10 02:16 Logrus 唯一内容分类最终现场**:第五次审查的conversation/history和JSON数组分类偏离在 `2683d98` 根因修复:唯一内容分类同时供sensitive、标量/文本续行、Markup、JSON使用,移除另一份别名表。16种内容字段×两模式×error/detail/message/HTTP text+JSON及错误JSON数组反例先失败后通过,业务原因与标识保留。最终完整检查/发布检查/Python21通过、业务覆盖率72.0%。两实际SHA256 `2f834e0cf4d1e94d264d47050c60b7462ee4f573b040633c0e3b6ef420a705cc`,Agent2902409/D2902421 enabled+active、0重启、Debug无Capture;Asterisk777461不变、通道/tcpdump0。实际HTTP/RPC安全日志再次核验,现场无非JSON/MQ业务/呼叫/真实恢复故障,不代签这些或生产;无reset/迁移/抓包/主动投递/额外AI OSS。源码/最终证据仍 `.local/logging-isolated` main,根并行改动保留;见 [`docs/evidence/dispatcher-agent-logrus-debug-deployment-20261009.md`](docs/evidence/dispatcher-agent-logrus-debug-deployment-20261009.md)。
- **2026-10-10 01:54 Logrus 对话跨空行最终现场**:第四次审查的空行终止对话归属已在 `b093f4d` 根因修复;对话标签及后续内容跨空白段落/CRLF仍受保护,仅明确非对话业务字段结束。新增多标签/四种空行/两模式scalar与HTTP、真实长HTTP夹入对话且bytes不变反例先失败后通过。最终完整检查/发布检查/Python21通过、业务覆盖率72.0%;两真实SHA256 `06592d03b7e754d24c70f352d6ab2aa224761a704a8516029dd9d684086c8745`,Agent2902174/D2902186 enabled+active、0重启、Debug无Capture,Asterisk777461不变、通道/tcpdump0。再次真实HTTP/RPC安全日志验证,未发生非JSON正文/MQ业务/通话/真实恢复故障,不代签这些或生产;未reset/迁移/抓包/投递/额外AI OSS。最终固定代码与证据仍 `.local/logging-isolated` main,根并行修改保留;详情见 [`docs/evidence/dispatcher-agent-logrus-debug-deployment-20261009.md`](docs/evidence/dispatcher-agent-logrus-debug-deployment-20261009.md)。
- **2026-10-10 01:39 Logrus 对话字段统一保护最终现场**:第三次审查的 textarea 与普通错误多行messages缺口已在 `02e6ab9` 根因修复:共享 cleanString 对 message/error/detail统一保护;敏感name的非void控件保护value及内容,void input不吞后续普通节点;仅对话字段保护续行,认证/凭据不隐藏其后正常诊断。新增断言先失败后通过。最终完整检查/发布检查/Python21通过、业务覆盖率72.0%;两个实际制品SHA256 `296223c111a15dc48200c26548c4ffb7ec206736dbe389b6c107ef69c59181cd`,Agent2901955/D2901966 enabled+active/running、0重启、Debug无Capture,Asterisk777461不变、零通道/tcpdump。真实HTTP/RPC安全正文再次验证,无MQ/呼叫/真实恢复/非JSON现场事件,未签收这些事实或生产;未reset/迁移/外呼投递/额外AI OSS。源码与最终证据仍隔离main `.local/logging-isolated`,根并行修改保留。完整证据见 [`docs/evidence/dispatcher-agent-logrus-debug-deployment-20261009.md`](docs/evidence/dispatcher-agent-logrus-debug-deployment-20261009.md)。
@@ -1,6 +1,18 @@
# Dispatcher / Agent Logrus Debug 实现与固定环境部署
## 最终已安装版本:b093f4d(2026-10-10 01:54 CST 现场)
## 最终已安装版本:2683d98(2026-10-10 02:16 CST 现场)
第五次审查发现敏感值与文本归属分别分类,conversation/history及JSON conversation数组漏保护。已根因合并:`redact.go`中的唯一内容分类 `conversationField(normalizedField(key))` 同时供 `sensitive`、文本续行、Markup和JSON使用,移除 `text.go`重复表;内容分类必定敏感,不再两份别名表相互偏离。
新增 `TestContentFieldClassificationAndEveryLoggingPathAgree` 对 conversation/history/messages/system_message/final_transcript/message_content/utterance/sentence/sentences/words/opening_remark/opening_remarks/greeting/chat_history/conversation_history/dialogue逐项验证两分类一致,以及普通/Debug error/detail/message、HTTP text/JSON和错误嵌入JSON数组的用户/助手内容不泄漏;task_id/status/attempts与失败原因保留。先运行失败复现,再实现通过;之前空行/Markup/Pem/Auth/长HTTP不改bytes等断言仍通过。
最终源码 `2683d985d237153eb0c25355fdb680ced8a641d7` 已推送核对main,干净固定提交构建安装。最终make check/release-check-local(格式/合同Proto/vet/全包race/build/真实隔离RabbitMQ HTTPS mTLS及现有验收对照)、Python21均通过,业务覆盖率 **72.0%**;记录 `.local/classifier-final-check.log`、`.local/classifier-coverage.log`、`.local/classifier-release-check.log`。
2026-10-10 02:16 CST现场:Agent `2902409`/Dispatcher `2902421` 两实际SHA256 `2f834e0cf4d1e94d264d47050c60b7462ee4f573b040633c0e3b6ef420a705cc`,enabled+active/running、0重启、实际Debug无Capture;Asterisk `777461` 不变,通道/tcpdump0。先关闭D准入、只读核对零活动/未知执行/恢复状态才部署,无reset/迁移/Asterisk重启/抓包/独立拨号/主动外呼投递/额外AI OSS。
实际14HTTP请求/响应200、两端各8DebugRPC正文、仅LogrusJSON,0error/redaction_error/已观测敏感字段及签名URL泄漏、13隐藏标记。现场无非JSON正文/MQ业务/呼叫/真实恢复故障,新增反例仅本地断言,不伪造现场发生或业务/生产;独立probe仍saas_pending/business_ready=false。私密摘要本机 `.local/logging-deployment/classifier-{preflight,deploy,field-summary}.json`(文件0600目录0700)。权威源码/文档隔离main `.local/logging-isolated`,根并行修改保留;更旧版本只作为历史。
## 上一版部署记录:b093f4d(2026-10-10 01:54 CST 历史)
第四次审查的空行边界泄漏已复现并修复:空行是同一对话的段落,不作为字段归属结束。`redactConversationLines` 在跨空行/仅空白行/CRLF 时保持对话保护,仅遇到明确的非对话业务字段才结束;不是某个对话字符串的匹配特例。
+1 -1
View File
@@ -25,7 +25,7 @@ Agent 的抓包开关独立为 `--capture`:只在显式开启时要求 `AGENT_
## 正文边界
密钥、Token、认证信息、完整 prompt/messages/transcript/text/content/结束语、原始 SIP 内容及音频不输出。敏感字段按键名隐藏,重复键逐个处理;其他 JSON 的空白、重复键和数字写法保留,原业务字节与对象不修改。所有普通/Debug 日志的 message、error 和其他标量共用字段/对话保护;对话保护跨空行和仅空白段落保持,不以空行作为结束边界,仅明确非对话业务字段结束归属;named 敏感非 void 控件保护其包裹内容,void input 不影响后续普通节点。纯文本以 UTF-8 安全副本记录;敏感键值/多行提示词、Markup 的敏感标签/输入值、表单敏感字段排除,其他可读正文保留。HTTP 二进制和升级后的 WebSocket 流不进入正文日志。
密钥、Token、认证信息、完整 prompt/messages/transcript/text/content/结束语、原始 SIP 内容及音频不输出。敏感字段按键名隐藏,重复键逐个处理;其他 JSON 的空白、重复键和数字写法保留,原业务字节与对象不修改。内容字段仅一份分类表(含conversation/history及其别名),所有JSON、Markup、文本续行和标量路径共用;内容分类必定敏感,避免字段分类分离。所有普通/Debug 日志的 message、error 和其他标量共用字段/对话保护;对话保护跨空行和仅空白段落保持,不以空行作为结束边界,仅明确非对话业务字段结束归属;named 敏感非 void 控件保护其包裹内容,void input 不影响后续普通节点。纯文本以 UTF-8 安全副本记录;敏感键值/多行提示词、Markup 的敏感标签/输入值、表单敏感字段排除,其他可读正文保留。HTTP 二进制和升级后的 WebSocket 流不进入正文日志。
自由文本里的 Authorization/Proxy-Authorization(包括 Basic/Digest)、Cookie、无字段名的私钥 PEM 块,以及错误里嵌入的 JSON 对象/数组和 quoted API key/Token,同样排除;已隐藏的 JSON 认证字段不删掉后面的非敏感业务原因。实际错误仍返回,原原因保留。非法 JSON、无法安全展开的嵌套数据或部分读取不能退回打印未经处理的正文:输出 `redaction_error`、字节数及 SHA-256。HTTP `body_complete=false` 只表示已观测部分,不能把它当作完整网络正文;原读取/关闭错误继续返回,不因日志改变重试、确认或业务结果。