docs: record inline audio privacy and fixed deployment evidence

This commit is contained in:
2026-10-10 06:32:42 +08:00
parent 64bd48bf70
commit b0980f8b64
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 06:29 Logrus内嵌二进制最终现场**:第十一次审查的audio/src data URI在 `64bd48b` 根因修复,共享入口/Markup属性/JSON form自由文本附件仅投影标准MIME和实际解码字节数,不输出payload;坏声明编码显式invalid_data_uri/未知长度,敏感元素同样拥有属性内容,仅类型校验诊断/二进制元数据保留且重复格式化稳定。用现有media编码完整非空1644字节WAV/800采样、四URI形态×两模式×实际HTTP HTML/text/JSON/form与标量先红后绿,传输bytes相等,坏编码/属性私密内容/伪元数据回归;前十轮保持。最终完整检查/发布检查/Python21通过,业务覆盖率72.3%。Agent2904184/D2904196实际SHA256 `e4b1f3edbfe0053f908e7f9093edb343133b9de24b9ca78da0cfd37287f223aa`,enabled+active/running、0重启、Debug无Capture;Asterisk777461不变、通道/tcpdump0。14HTTP/各8RPC实际安全正文核验;现场无内嵌音频/form/非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 05:51 Logrus URL scheme最终现场**:第十次审查的大写HTTPS签名URL在 `cd3fe5d` 根因修复,共享urlInText按标准忽略HTTP/HTTPS/WS/WSS scheme大小写,不做签名参数或主机特判;无认证/query/fragment的普通URL原值保留。十二大小写×两模式×实际HTTP text/JSON与error/detail/message先失败后通过,签名query排除/真实诊断保留/原bytes相等,前九轮回归保持。最终完整检查/发布检查/Python21通过,业务覆盖率72.2%。Agent2903856/D2903867两实际SHA256 `971a5f674ad1d75a08f6023ce962f181212e34913b2d0ac1d8f250d138c6b0b8`,enabled+active/running、0重启、Debug无Capture;Asterisk777461不变、通道/tcpdump0。14HTTP/各8RPC实际安全正文核验,现场URL检查同样忽略scheme大小写;无现场新signed URL/form/非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 05:27 Logrus 单字段表单最终现场**:第九次审查的单字段URL编码敏感字段在 `1202b9a` 根因修复:一对/多对字段统一解码分类,不要求&,接入cleanString覆盖两模式标量;bare flag是空值字段,坏key/value独立INVALID_FORM标记,不回原正文或撤销此前脱敏。七形态×两模式真实HTTP/标量先失败后通过,原请求响应bytes完全相等、诊断保留;前八轮回归保持。最终完整检查/发布检查/Python21通过,业务覆盖率72.2%。Agent2903610/D2903622两实际SHA256 `1fcb84b17d6459c592021e224b4b5e622fcfde115f8a74f334c07261193f24f8`,enabled+active/running、0重启、Debug无Capture;Asterisk777461不变、通道/tcpdump0。14HTTP/各8RPC实际安全正文核验;无现场form/非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)。
@@ -1,6 +1,18 @@
# Dispatcher / Agent Logrus Debug 实现与固定环境部署
## 最终已安装版本:cd3fe5d(2026-10-10 05:51 CST 现场)
## 最终已安装版本:64bd48b(2026-10-10 06:29 CST 现场)
第十一次审查的 `<audio src="data:audio/…">` 内嵌WAV泄漏已根因修复:共享cleanString、Markup属性、JSON/form值与自由文本统一把data URI附件投影为标准MIME类型与实际解码字节数,复用标准MIME/URL/Base64库、不输出payload。坏声明/编码明确invalid_data_uri/未知长度、不回原值或猜长度;敏感元素/命名控件同样拥有属性内容,只有已校验诊断属性/二进制元数据保留。重复格式化不丢类型/长度;安全属性替换使用实际解析和正确引用,不插入原数据。
`TestInlineWAVDataURIsOnlyExposeTypeAndLength` 用现有media.EncodeMonoWAV生成完整非空1644字节WAV/800PCM采样,四种lower/upper/参数Base64/percent URI×两模式×实际HTTP HTML/text/JSON/form及error/detail/message先失败复现后实现通过。完整Base64、百分号与form编码载荷全部排除,保留audio/wav/1644和task_id/status,实际服务器收到与客户端读到原始bytes相等;不使用短占位符冒充音频。`TestInlineBinaryMetadataIsIdempotentAndDecodeErrorsStayOpaque` 覆盖坏MIME/坏编码/缺分界、重复格式化、未标记私密属性/正文、类型已校验诊断与拒绝伪元数据。初版标准MIME解析允许bare token由新测试发现后增加实际类型结构校验,未减弱断言;前十轮全部回归保持。
最终源码 `64bd48bf70a8b207c4358fcd05d5322ec60b4ddd` 已推送核对main,从干净固定提交构建安装。最终make check/release-check-local(格式/当前合同Proto/vet/全包race/build/实际隔离RabbitMQ HTTPS mTLS及现有验收对照)、Python21通过,业务覆盖率 **72.3%**;记录 `.local/inline-final-check.log`、`.local/inline-coverage.log`、`.local/inline-release-check.log`。
2026-10-10 06:29 CST实际现场:Agent `2904184`/Dispatcher `2904196` 两实际SHA256 `e4b1f3edbfe0053f908e7f9093edb343133b9de24b9ca78da0cfd37287f223aa`,enabled+active/running、0重启、实际Debug无Capture;Asterisk `777461` 不变,通道/tcpdump0。严格登记SSH指纹,关D准入并只读排除活动/未知执行/恢复阻断才部署;无reset/迁移/Asterisk重启/抓包/独立拨号/主动投递/额外AI OSS。
实际14HTTP请求响应200、两端各8DebugRPC正文、仅LogrusJSON、0error/redaction_error/已观测敏感字段签名URL与audio data URI泄漏、13隐藏标记;URL检查忽略scheme大小写。现场无内嵌音频/signed URI/form/非JSON正文/MQ业务/呼叫/真实恢复故障,新WAV反例只本地实际HTTP断言,不代签这些或业务/生产。独立probe仍saas_pending/business_ready=false。私密本机 `.local/logging-deployment/inline-{preflight,deploy,field-summary}.json`(文件0600目录0700)。源码/最终证据权威仍干净隔离main `.local/logging-isolated`,根并行修改保留;以下旧版只历史。
## 上一版部署记录:cd3fe5d(2026-10-10 05:51 CST 历史)
第十次审查的大写HTTPS签名URL已根因修复:共享 `urlInText` 按URL标准忽略scheme大小写,不做示例签名字段或固定主机特判。HTTP/HTTPS/WS/WSS大小写混合均进入既有URL解析与query/userinfo/fragment隐藏;无认证/query/fragment的普通URL保留原值。
+1 -1
View File
@@ -25,7 +25,7 @@ Agent 的抓包开关独立为 `--capture`:只在显式开启时要求 `AGENT_
## 正文边界
密钥、Token、认证信息、完整 prompt/messages/transcript/text/content/结束语、原始 SIP 内容及音频不输出。敏感字段按键名隐藏,重复键逐个处理;其他 JSON 的空白、重复键和数字写法保留,原业务字节与对象不修改。内容字段仅一份分类表(含conversation/history及其别名),所有JSON、Markup、文本续行和标量路径共用;内容分类必定敏感,避免字段分类分离。内容标签在错误前缀之后也建立归属,保留其前失败原因,不以行首为唯一匹配位置。文本字段使用同一引号/非引号词法器与归一化入口,JSON 字段名转义经标准 JSON 解码后分类;非法引号字段不能可靠分类时,其尾部保持隐藏。完整嵌入 JSON 由结构化脱敏处理,不让文本词法器删除相邻的真实诊断字段。所有普通/Debug 日志的 message、error 和其他标量共用字段/对话保护;对话保护跨空行、任意说话者及未知/嵌套消息字段持续保持。自由文本没有可靠结构结束符时,内容标签拥有后续文本,不以任意字段或状态行推断结束;只逐行保留已校验类型的诊断数值、UUID、时间戳、已知状态,这些行不解除后续内容保护。结构化 JSON/Markup/form 仍按结构保留外部非敏感字段;named 敏感非 void 控件保护其包裹内容,void input 不影响后续普通节点。纯文本以 UTF-8 安全副本记录;敏感键值/多行提示词、Markup 的敏感标签/输入值、单字段和多字段表单共用百分号解码与敏感分类,并应用于普通/Debug 标量诊断;裸 flag 按合法空值字段处理。单个 key/value 解码失败以明确 INVALID_FORM 标记隐藏该字段,不回退输出原表单、不撤销此前脱敏,其余诊断字段保留。表单敏感字段排除,明确不属于内容字段的其他可读正文保留;自由文本内容标签后的未分界文字持续按内容处理,不猜测其已成为业务正文。HTTP 二进制和升级后的 WebSocket 流不进入正文日志。
密钥、Token、认证信息、完整 prompt/messages/transcript/text/content/结束语、原始 SIP 内容及音频不输出。敏感字段按键名隐藏,重复键逐个处理;其他 JSON 的空白、重复键和数字写法保留,原业务字节与对象不修改。内容字段仅一份分类表(含conversation/history及其别名),所有JSON、Markup、文本续行和标量路径共用;内容分类必定敏感,避免字段分类分离。内容标签在错误前缀之后也建立归属,保留其前失败原因,不以行首为唯一匹配位置。文本字段使用同一引号/非引号词法器与归一化入口,JSON 字段名转义经标准 JSON 解码后分类;非法引号字段不能可靠分类时,其尾部保持隐藏。完整嵌入 JSON 由结构化脱敏处理,不让文本词法器删除相邻的真实诊断字段。所有普通/Debug 日志的 message、error 和其他标量共用字段/对话保护;对话保护跨空行、任意说话者及未知/嵌套消息字段持续保持。自由文本没有可靠结构结束符时,内容标签拥有后续文本,不以任意字段或状态行推断结束;只逐行保留已校验类型的诊断数值、UUID、时间戳、已知状态,这些行不解除后续内容保护。结构化 JSON/Markup/form 仍按结构保留外部非敏感字段;named 敏感非 void 控件保护其包裹内容,void input 不影响后续普通节点。纯文本以 UTF-8 安全副本记录;敏感键值/多行提示词、Markup 的敏感标签/输入值、单字段和多字段表单共用百分号解码与敏感分类,并应用于普通/Debug 标量诊断;裸 flag 按合法空值字段处理。单个 key/value 解码失败以明确 INVALID_FORM 标记隐藏该字段,不回退输出原表单、不撤销此前脱敏,其余诊断字段保留。表单敏感字段排除,明确不属于内容字段的其他可读正文保留;自由文本内容标签后的未分界文字持续按内容处理,不猜测其已成为业务正文。HTTP 二进制和升级后的 WebSocket 流不进入正文日志。HTML属性、JSON/form字符串和自由文本内的data URI附件也只投影标准解析后的MIME类型与实际解码字节数,复用标准MIME/URL/Base64库、不输出payload。坏声明/编码明确invalid_data_uri与未知长度,不回原值或猜长度。敏感元素/命名控件也拥有属性内容;只有类型已校验的诊断属性或已验证的二进制元数据可保留,重复格式化保持相同安全投影。
自由文本里的 Authorization/Proxy-Authorization(包括 Basic/Digest)、Cookie、无字段名的私钥 PEM 块,以及错误里嵌入的 JSON 对象/数组和 quoted API key/Token,同样排除;已隐藏的 JSON 认证字段不删掉后面的非敏感业务原因。实际错误仍返回,原原因保留。非法 JSON、无法安全展开的嵌套数据或部分读取不能退回打印未经处理的正文:输出 `redaction_error`、字节数及 SHA-256。HTTP `body_complete=false` 只表示已观测部分,不能把它当作完整网络正文;原读取/关闭错误继续返回,不因日志改变重试、确认或业务结果。