30 KiB
Dispatcher / Agent Logrus Debug 实现与固定环境部署
最终已安装版本:1202b9a(2026-10-10 05:27 CST 现场)
第九次审查的合法单字段URL编码表单泄漏已根因修复:redactForm 不再要求 &,一对与多对字段使用同一标准百分号解码和敏感分类,并接入共享 cleanString 覆盖普通/Debug error/detail,不仅HTTP正文。裸flag是合法空值字段;逐key/value解码失败明确以 INVALID_FORM 标记隐藏该字段,不回退整个原始表单、不撤销此前脱敏,其余真实诊断字段继续保留。只处理日志副本,传输字节不改。
新 TestPercentEncodedSingleAndMixedFormsKeepWireBytesAndHideSecrets 七种单字段token/messages、多字段、坏key、坏value、bare flag、坏字段在敏感字段之前/之后形态×两模式,通过真实HTTP请求/响应观察器与error/detail验证秘密排除、task_id/status保留及INVALID_FORM可见,实际服务器收到和客户端读到的原始bytes完全相等。先运行失败复现,再实现通过;此前全部JSON相邻诊断、quoted标签/Unicode名字、持续归属、字段分类、>150KB不截断与认证/PEM等回归保持。
最终源码 1202b9acc96e31d0dc2bd0a7e80e22e0de8f5ea6 已推送核对main,从干净固定提交构建安装。最终make check/release-check-local(格式/合同Proto/vet/全包race/build/实际隔离RabbitMQ HTTPS mTLS及现有验收对照)、Python21通过,业务覆盖率 72.2%;记录 .local/form-final-check.log、.local/form-coverage.log、.local/form-release-check.log。
2026-10-10 05:27 CST实际现场:Agent 2903610/Dispatcher 2903622 两实际SHA256 1fcb84b17d6459c592021e224b4b5e622fcfde115f8a74f334c07261193f24f8,enabled+active/running、0重启、实际Debug无Capture;Asterisk 777461 不变,通道/tcpdump0。严格登记SSH指纹,关D新准入并只读确认零活动/未知执行/恢复阻断才部署;无reset/迁移/Asterisk重启/抓包/独立拨号/主动投递/额外AI OSS。
实际14HTTP请求响应200、两端各8DebugRPC正文、仅LogrusJSON、0error/redaction_error/已观测敏感字段签名URL泄漏、13隐藏标记。现场无非JSON/form正文/MQ业务/呼叫/真实恢复故障,新增表单反例仅本地真实HTTP断言,不伪造这些或业务/生产签收;独立probe仍saas_pending/business_ready=false。私密摘要本机 .local/logging-deployment/form-{preflight,deploy,field-summary}.json(文件0600目录0700)。源码/最终文档权威仍干净隔离main .local/logging-isolated,根并行修改保留;以下旧版仅历史。
上一版部署记录:a66e111(2026-10-10 04:53 CST 历史)
第八次审查的带引号内容标签未建立归属已根因修复:文本标签与诊断投影共用同一个引号/非引号词法器、字段名解码与归一化入口。JSON 引号字段经标准 JSON 解码,Unicode 转义不能绕过内容分类;非法引号字段不能可靠分类时,其尾部保持隐藏。完整嵌入 JSON 保留结构边界,由既有结构化脱敏处理,不让自由文本词法器吞掉其相邻 reason/task_id 等诊断字段。
新 TestQuotedContentLabelsEstablishOwnershipOnEveryLoggingPath 覆盖双引号、单引号、backtick、两种排版引号、escaped引号、JSON Unicode转义、非法JSON名字转义八形态×普通/Debug error/detail/message/HTTP TextBody;完整用户助手内容排除、真实失败前缀/status/task_id/attempts保留。先失败复现审查原例再实现通过;过程中的授权JSON相邻业务字段损失由既有测试发现后,按完整JSON结构边界修复,不移除或减弱断言。前七轮内容持续归属/类型诊断投影/统一分类/段落/Markup/认证PEM/传输bytes等回归保持。
最终源码 a66e1118abfcc75c25a2fc8c5e4b276ba00079c6 已推送核对main,从干净固定提交构建安装。最终make check/release-check-local(格式/合同Proto/vet/全包race/build/实际隔离RabbitMQ HTTPS mTLS及现有验收对照)、Python21通过,业务覆盖率 72.1%;记录 .local/quoted-final-check.log、.local/quoted-coverage.log、.local/quoted-release-check.log。
2026-10-10 04:53 CST实际现场:Agent 2903352/Dispatcher 2903363 两实际SHA256 24404b7f5e0bc41d12887fcd54a5128bf36b62bda7ce3a8888fc0e3807578b84,enabled+active/running、0重启、实际Debug无Capture;Asterisk 777461 不变,通道/tcpdump0。严格登记SSH指纹,关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/quoted-{preflight,deploy,field-summary}.json(文件0600目录0700)。源码/最终文档权威仍干净隔离main .local/logging-isolated,根并行修改保留;旧版本以下只历史。
上一版部署记录:01b2f82(2026-10-10 04:08 CST 历史)
第七次审查的 role/message、human 等任意对话内部字段误解除保护已根因修复:不再维护说话者名称名单,也不因任意冒号、未知字段或状态行推断结束。无明确结构结束符的自由文本,内容标签拥有后续文本;diagnosticTextLine 只逐行投影已校验类型的数值、UUID、时间戳和已知状态,这些行不释放后续内容归属。嵌套字段不投影,未知/未通过类型校验的字段继续隐藏。JSON/Markup/form 外部业务字段仍按真实结构保留;原传输字节不改。
新 TestUnknownDialogueFieldsCannotEndContentOwnership 覆盖 role/message、human/assistant、任意participant字段、未知嵌套字段、嵌套status、status/attempts夹在对话中、伪status私密值;messages/conversation/history/prompt×普通/Debug error/detail/message/HTTP TextBody均排除完整内容、保留前置失败原因与真实status/task_id/attempts。先运行失败,再实现通过。大于150KB真实HTTP回归将明确非内容的长业务部分置于内容标签之前,仍断言请求/响应原bytes完全一致、普通无正文、Debug长业务段不截断与全部秘密排除;不再把私密自由文本尾部的无结构边界误当普通正文。
最终源码 01b2f82c81826e17ed869debdd172b91f847ae56 已推送核对main,从干净固定提交构建安装。最终make check/release-check-local(格式/合同Proto/vet/全包race/build/实际隔离RabbitMQ HTTPS mTLS及现有验收对照)、Python21通过,业务覆盖率 72.0%;日志 .local/ownership-final-check.log、.local/ownership-coverage.log、.local/ownership-release-check.log。
2026-10-10 04:08 CST实际现场:Agent 2903064/Dispatcher 2903075 两实际SHA256 d74078bae03c0044967de8b7cad61e92cbaf694339520cdfd5b6bc6556411036,enabled+active/running、0重启、实际Debug无Capture;Asterisk 777461 不变,通道/tcpdump0。严格登记SSH指纹,关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/ownership-{preflight,deploy,field-summary}.json(文件0600目录0700)。源码/最终文档权威仍隔离main .local/logging-isolated,根并行修改保留;以下旧版均历史。
上一版部署记录:bfe7630(2026-10-10 03:04 CST 历史)
第六次审查复现错误前缀后的内容标签漏保护,已根因修复:文本字段归属由行中敏感标签建立,不再只看行首;保持唯一内容分类,保留标签之前真实失败前缀,对其后对话段落持续隐藏。
新 TestPrefixedContentLabelsKeepReasonAndOwnFollowingDialogue 覆盖简单/多层冒号错误前缀、分号前缀、中文前缀,以及 conversation/history/messages/system_message/prompt/final_transcript;普通/Debug error/detail/message/HTTP TextBody均排除用户助手内容、保留原失败原因/status/attempts。先运行失败后实现通过;旧统一分类、空行、Markup、认证/PEM、JSON原因保留及长HTTPbytes不变断言继续通过。
最终源码 bfe763021ecfec65e9107ff8ce9c5327841e1c71 已推送核对main,从干净固定提交构建安装。最终make check/release-check-local(格式/合同Proto/vet/全包race/build/实际隔离RabbitMQ HTTPS mTLS及现有验收对照)、Python21通过,业务覆盖率 72.0%;记录 .local/prefix-final-check.log、.local/prefix-coverage.log、.local/prefix-release-check.log。
2026-10-10 03:04 CST现场:Agent 2902748/Dispatcher 2902759 两实际SHA256 c29200e39e8274aa5a806eaa0037fe878712829864ee2f58d9707c9d25682ff9,enabled+active/running、0重启、实际Debug无Capture;Asterisk 777461 不变,通道/tcpdump0。关D新准入再只读确认零通话/未知执行/恢复状态才部署;无reset/迁移/Asterisk重启/抓包/独立拨号/主动投递/额外AI OSS。
实际14HTTP请求响应200、两端各12DebugRPC正文、仅LogrusJSON,0error/redaction_error/已观测敏感字段及签名URL泄漏、15隐藏标记。现场无非JSON正文/MQ业务/呼叫/真实恢复故障,新反例只本地断言,不伪造现场发生或业务生产签收;独立probe仍saas_pending/business_ready=false。私密摘要本机 .local/logging-deployment/prefix-{preflight,deploy,field-summary}.json(文件0600目录0700)。源码/文档权威仍隔离main .local/logging-isolated,根并行修改保留;旧版仅历史。
上一版部署记录: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 时保持对话保护,仅遇到明确的非对话业务字段才结束;不是某个对话字符串的匹配特例。
新增回归覆盖 messages/prompt/transcript/content 标签及四种空行组合;同一值通过普通/Debug的 error/detail/message 与HTTP TextBody,全部排除用户/助手原话且保留失败前缀/status/attempts。真实HTTP长正文夹入空行对话,收发bytes相等、秘密排除及普通不输出正文断言同样通过。先运行失败再修复通过。
最终源码 b093f4d0261b1563ffae4b7dfeb3a8c7a4658491 已推送核对main,并从干净提交构建安装。最终 make check/release-check-local(fmt/合同Proto/vet/全包race/build/实际隔离RabbitMQ HTTPS mTLS及现有验收对照)、Python21全部通过,业务覆盖率 72.0%。记录 .local/boundary-final-check.log、.local/boundary-coverage.log、.local/boundary-release-check.log。
2026-10-10 01:54 CST 现场:Agent 2902174/Dispatcher 2902186 两实际制品 SHA-256 06592d03b7e754d24c70f352d6ab2aa224761a704a8516029dd9d684086c8745,enabled+active/running、0重启、真实Debug无Capture;Asterisk 777461 不变,通道/tcpdump=0。先关D准入再只读核对零通话/未知执行/恢复状态才安装;无reset/迁移/Asterisk重启/抓包/独立拨号/主动外呼投递/额外AI OSS。
实际14HTTP请求/响应200、两端各8DebugRPC正文、仅LogrusJSON,0 error/redaction_error/已观测敏感字段及签名URL泄漏、13隐藏标记。现场无非JSON正文、MQ业务收发、呼叫或真实恢复故障,新增场景只本地断言,不伪造现场发生或业务/生产签收;独立probe仍saas_pending/business_ready=false。
私密现场摘要:本机 .local/logging-deployment/boundary-{preflight,deploy,field-summary}.json(文件0600、目录0700)。源码/文档权威仍隔离main .local/logging-isolated;根工作区并行修改保留。下述02e6及更旧版仅历史,非最终完成依据。
上一版部署记录:02e6ab9(2026-10-10 01:39 CST 历史)
第三次独立审查复现 named textarea 内提示词与普通错误消息中的多行 messages;已根因修复,不以旧 6ee95e4 记录作最终完成:
cleanString共享入口应用 Markup/对话行保护,普通与 Debug 的 message/error/其他标量一致,不再只给 HTTP TextBody 作保护。- Markup 按字段归属保护:敏感
name的非 void 控件(textarea/select/custom)同时隐藏 value 与包裹内容;void input 只隐藏自身值,不吞后面的普通业务节点。不是针对某个文本或单个 textarea 的特判。 - 对话字段才拥有后续对话行;认证/凭据只拥有其本行,保留之后的普通失败原因。新增两模式 message/error/detail、named textarea/select/custom 与 input 前后普通节点回归断言,先失败后通过。
最终源码 02e6ab938061fae360c6e9925d940fc4db27a914 已推送并从干净 main 构建安装;最终 make check/release-check-local(fmt/合同Proto/vet/全包race/build/实际隔离RabbitMQ HTTPS mTLS/现有验收对照)、Python21全部通过,业务覆盖率 72.0%。记录 .local/scalar-final-check.log、.local/scalar-coverage.log、.local/scalar-release-check.log。
2026-10-10 01:39 CST 现场:Agent 2901955/Dispatcher 2901966 两个实际制品 SHA-256 296223c111a15dc48200c26548c4ffb7ec206736dbe389b6c107ef69c59181cd,enabled+active/running、0重启、真实Debug且无Capture;Asterisk 777461 不变,活动通道/tcpdump=0。先关 D 准入并只读确认零活动/未知执行/恢复状态后部署,无 reset/迁移/Asterisk重启/抓包/独立拨号/外呼投递/额外AI OSS。
实际14 HTTP请求/响应200、两端各8 Debug RPC正文、仅Logrus JSON,0 error/redaction_error/敏感字段泄漏/签名URL泄漏,13隐藏标记。现场仍无非JSON正文、MQ业务收发、呼叫、真实恢复故障,这些只本地断言,未伪造真机发生或业务/生产签收;独立probe仍saas_pending/business_ready=false。
私密现场原摘要:根本机 .local/logging-deployment/scalar-{preflight,deploy,field-summary}.json(文件0600、目录0700);权威源码/文档仍 .local/logging-isolated main,根并行改动保留。
上一版部署记录:6ee95e4(2026-10-10 01:19 CST 历史)
第二次独立审查发现自由文本 Basic 认证/无标签 PEM 及非 JSON 可读正文仍有缺口;下述旧 fd37a67 记录是历史,不作为最终完成。现已实际修复:
cleanString隐藏自由文本中的 Authorization/Proxy-Authorization(包含 Basic/Digest)、Cookie,以及没有字段标签的 RSA/EC/OpenSSH/PKCS8 私钥 PEM 块。JSON 嵌入错误先结构化处理,已隐藏的认证值不导致其后非敏感业务原因/标识被删掉。- HTTP Debug 观察 JSON 之外的可读文本(text/*、XML、表单),按 UTF-8 记录实际读取的正文,不按 JSON MIME 单独决定是否可记录;普通模式仍没有完整正文。原请求/响应 bytes 不改、不截断,二进制仍仅记录类型/长度。
- 文本内 JSON、敏感键值/多行提示词、Markup 敏感标签及 password/API-key input 值、表单敏感字段作安全副本;使用项目现有 x/net HTML tokenizer,不另造解析器。裸 PEM、认证、签名地址仍排除。
- 新
internal/logging/text_security_test.go先失败后通过:两种模式下 Basic/Digest/裸 PEM 排除;超过 150 KB 的 text/plain 请求与响应保留非敏感业务详情且 bytes 完全不变;HTML/XML、form、多行提示词排除;JSON 错误认证字段不删除后面的 task_id/reason。
最终代码 6ee95e4bfbaada6b46f5967a149d1fed4134093d 已推送远端 main,干净固定提交构建安装。最终 make check/完整 race-vet-build/合同 Proto/实际隔离 RabbitMQ HTTPS mTLS/make release-check-local 全部通过;Python 21 项通过,业务覆盖率 72.0%。最终检查记录在隔离工作区 .local/text-accepted-{check,coverage,release-check}.log。
2026-10-10 01:19 CST:Agent PID 2901719、Dispatcher 2901731,两实际制品 SHA-256 同为 38a1e553312ea7ffbff6e11ad9ececc99cb73b6dedb3339f03f55a71568f72b1;enabled+active/running、0 重启、真实 Debug、无 Capture。Asterisk 777461 不变;零活动通道、零 tcpdump。部署前关 D 准入再复核零通话/未知执行/恢复状态,未 reset/迁移/重启 Asterisk、投递外呼或额外调用 AI/OSS。
现场再次观测 14 HTTP 请求/响应(200)、两端各 8 Debug RPC 正文、仅 Logrus JSON,无 error/redaction_error;已发生正文敏感字段/签名 URL 检查 0 泄露、13 隐藏标记。现场没有非 JSON HTTP 正文、MQ 业务收发、呼叫或真实恢复故障;新增格式/失败分支的本地断言不代签现场发生。独立 probe 的 saas_pending/business_ready=false 仍保留,不伪造业务/生产签收。
最终现场私密摘要:本机 .local/logging-deployment/text-{preflight,deploy,field-summary}.json(0600);源码及本文权威位置为隔离工作区 /home/rogee/Workspace/sip-go-agent/.local/logging-isolated 的 main,根工作区并行改动保留。
上一版部署记录:fd37a67(2026-10-10 00:37 CST 历史)
最终源码 fd37a67ef888c6ca7b49cc43e473e3b54e5781fb 已提交并推送 main,远端核对一致,制品来自干净固定提交。包含下述完整诊断修复,并额外保留文件 stat/JSON decode 的原失败原因;私钥/Pem 及签名 WS/WSS 地址在普通/Debug 模式均隐藏,相关新断言先失败后通过。
最终重新执行 make check、全包 race/vet/build、当前合同/Proto、实际隔离 RabbitMQ/HTTPS/mTLS、make release-check-local 和 Python 21 项测试,均通过;业务覆盖率 71.7%。最后版本的检查日志为隔离工作区 .local/privacy-{final-check,coverage,release-check}.log。
2026-10-10 00:37 CST 实际两进程 SHA-256 均为 7b606adf83147fdf966d455b6a2d3543955adcedca608b306f438dcbfcc424ad;Agent PID 2901451、Dispatcher PID 2901463,两者 enabled+active/running、零重启、真实 --debug、无 --capture。Asterisk PID 777461 不变;零活动通道、零 tcpdump。部署前先关 D 准入再检查零未知执行/恢复状态,未 reset/迁移、未额外投递或调用 AI/OSS。
本次再次观测 14 次 HTTP 请求/响应(200)、两端各 8 条 Debug RPC 正文;所有业务进程日志为 Logrus JSON,无 error/redaction_error,已观测敏感字段/签名 URL 泄露 0、隐藏标记 13。MQ 收发、真实呼叫执行和真实恢复故障未发生,保持现场未验证,本地失败路径断言不代替真机故障事实。部署器独立探测仍 saas_pending/business_ready=false,不伪改、不代签生产。
最终私密现场摘要为本机 .local/logging-deployment/accepted-{preflight,deploy,field-summary}.json(0600);源码与本文均以隔离工作区 /home/rogee/Workspace/sip-go-agent/.local/logging-isolated 的 main 为准,根工作区并行改动未覆盖。
诊断完整性修复记录:592c2fe(23:57 CST 历史现场)
初版完成请求经独立审查发现拒绝、等待和逐条恢复失败日志不足,因此初版不能作为最终完成。已按以下项目修复,并重新完整验证、推送及部署:
- Dispatcher 的无效号码、未来 issued_at、容量/准入等待、重复执行、拨号前变更导致取消、已证实未发起的拒绝及交付未知保留占用,均记录已有任务/事件/租户/Dispatcher 身份、具体原因和处理阶段。读取配置、线路、占用、预占及执行/保存失败按实际节点记录原错误,不只打印类型或静默返回。
- 录音恢复逐条记录验证/加载失败、申请原上传授权、PUT 前持久屏障、失败后的实际退避保存、原结果回报、确认保存及等待/到期/未知结果保留人工检查;关联 event/tenant/dispatcher/recording/upload ID、状态、尝试次数和下次尝试时间。
- 原结果恢复逐条记录校验、原挂断确认、持久化、原结果回报和确认文件清理的原因与身份。恢复循环及回调记录实际错误,不只记录
%T或汇总数量。 - 原授权失败原因通过
%w/errors.Join保留,状态、对象、身份、48 小时策略及 PUT 重试次数规则不改。错误里嵌入的 JSON 对象/数组同样结构化隐藏提示词、对话与凭据,非法嵌入 JSON 不退回打印;quoted token/API key 也排除。 - 新增三份流程/恢复日志测试:
internal/dispatcher/execute_logging_test.go、internal/agent/recovery_logging_test.go、cmd/sip-go-agent/agent_recovery_logging_test.go。断言普通模式下具体原因、身份、节点及退避,且文件和占用状态保持原规则;新增失败测试先红后绿。
最终验证:重新完成 make check、实际隔离 RabbitMQ/HTTPS/mTLS、全包 race/vet/build/合同及 Proto 检查、make release-check-local、Python 21 项测试;最终业务覆盖率 71.7%。
最终部署:源码 592c2fe9a37ed5be1b368c3f2c1d09e6d1643dda 已推送远端 main 并核对;从干净固定提交构建,实际两进程 SHA-256 均为 e3aa61d75768e6aca2b3567864890da4ba5bf3ebd53fba678cca242ae030a2b4。Agent PID 2900896、Dispatcher PID 2900908,均 enabled+active/running、零重启、实际 --debug 且无 --capture;Asterisk PID 777461 不变。
部署前再次停止 D 关准入并复核零活动通话、零未知占用/执行恢复文件,未 reset、迁移或主动投递。23:57 CST 现场重新确认 14 次 HTTP 请求/响应(200)、两端各 8 条 Debug RPC 正文;只有 Logrus JSON,无 error/redaction_error,已观测敏感字段/签名查询 URL 泄露 0、隐藏标记 13;活动通道/tcpdump 均 0。
现场仍无 MQ 业务收发、呼叫执行及真实恢复故障。上述新增失败/重试分支有本地断言,并不声称这些故障已经在真机发生。原部署器独立 probe 仍 saas_pending/business_ready=false,保留事实,不签收真实通话/AI/OSS或生产。
本轮最终权威源码工作区为 /home/rogee/Workspace/sip-go-agent/.local/logging-isolated 的 main;根工作区并行改动未覆盖。新现场摘要在 .local/logging-deployment/rework-{preflight,deploy,field-summary}.json,均 0600。
初版部署记录(以下为历史,不代替上述最终版本)
结论与来源
- 源码
669f3a5868a08e96029f6e76f08f7330c25f5159已合入并推送main,远端提交号核对一致;制品来自该干净固定提交。 - 已部署登记主机
server.sip的固定nonprod-real服务,两角色均启用--debug,不启用--capture。 - 2026-10-09 23:14–23:16 CST 现场核验,两业务服务均
enabled+active/running,PID 稳定、零重启,实际进程与服务命令均含--debug、不含--capture。 - 两个实际运行进程制品 SHA-256 相同:
c2bf4c50f19fed2842307356514da1e10cb51b8a2c2c053c1d846d12a6a33919;部署入口校验artifact_hashes_match=true。
| 服务 | PID | NRestarts | Debug | Capture |
|---|---|---|---|---|
| Agent | 2900602 | 0 | true | false |
| Dispatcher | 2900614 | 0 | true | false |
| Asterisk | 777461 | 0 | false | false |
Asterisk PID 与部署前相同,未重启。现场 ARI 活动通道数为 0,tcpdump 进程数为 0。
实现与参数
- Logrus 是唯一日志输出,已有 slog/标准 log 通过同一输出记录,不建立第二套日志配置。
- 两角色
--debug/-D只开启详细日志;Agent 原 Debug 抓包语义移除,外部逐通抓包凭证检查改为独立--capture。独立sip-call参数未改变,仅同步其说明中对业务 Agent 的示例。 - 普通模式记录启动、收发方向、节点、身份、处理结果、耗时和失败原因;Debug 追加实际 HTTP/MQ/Unary RPC 边界的安全正文。
- HTTP/MQ 保留安全 JSON 的原始空白、重复键和数字写法;RPC 明确标注 protobuf 的 JSON 投影,并展开
*_json字段,不冒充原始 protobuf 线格式。 - 敏感字段、提示词、完整对话、音频和原始 SIP 不输出;非法或无法安全展开的内容输出诊断,不退回打印原文。日志不改业务字节、返回错误、确认或重试规则。
- HTTP 101 保留 WebSocket 的原始读写流;SDK native ARI 无 HTTPClient 注入入口,服务启动时观察默认 HTTP transport;可注入的客户端避免重复观察,保留原 TLS/超时/重定向设置。
使用说明:日志与抓包。
本地验证
在独立工作区、当前共享合同 ff74afe396eb811745a20cd88d167585d6593132 上完成:
- TDD:Debug/普通模式、两个角色的参数、抓包分离、正文不截断、不改变消息、重复敏感键、嵌套 JSON、非法正文、HTTP 读取失败、升级流、RPC/MQ 失败及确认含义。
- 最终
make check成功:格式、共享合同/Proto、go vet ./...、全包go test -race ./...、构建、实际运行的隔离 RabbitMQ/HTTPS/mTLS 检查。 make release-check-local成功,发布包仍明确production_approval=false。- 项目既定口径的业务覆盖率 71.4%,高于 65%;生产部署 Python 测试 21 项通过。
- A01–A12/K01–K16 沿用并核对既有单节点验收边界及相关测试,未改策略/契约/拓扑、不扩展真实或生产签收:P08 本地验收。
现场真实日志核验
摘要取自部署后 systemd journal,在受限进程中解析原日志;只保留计数、状态、阶段、方法和哈希,不提交正文。
- Dispatcher 实际完成 14 次 HTTP 请求和 14 次 HTTP 响应,正文读取和 Debug 日志均存在;响应均为 HTTP 200。
- 两端实际 Unary RPC 覆盖
GetAgentStatus、ActivateAgent、ApplySIP、GetLoadedSIP。Agent 和 Dispatcher 各有 8 条 Debug RPC 正文,请求/响应方向与阶段分别可见。 - Agent 可见结果恢复完成、录音恢复扫描开始/完成等普通流程日志。两个业务进程的日志均为 Logrus JSON,无非 JSON 进程日志、无 error 记录、无 redaction_error。
- 已观测正文中敏感字段及 URL 检查:0 个敏感字段值泄露,0 个带查询的完整 URL,13 处隐藏标记。这是对本次实际发生内容的核验,不宣称已覆盖供应商所有返回形式。
- 现场未发生 MQ 业务收发,因此现场 MQ 正文、ACK/confirm 的真实数据仍未验证;隔离 RabbitMQ 与单元测试通过不能冒充这项现场事实。
- 现场没有呼叫执行日志;不借本次日志部署声称真实通话、ASR/LLM/TTS、录音或 OSS 全链路通过。
部署工具仍显示 dependency_state=saas_pending/business_ready=false,未将该标签伪改为成功。实际两服务正常运行并有上述 HTTP/RPC 交互;本次不将旧独立探测标签或这些启动事实当作完整业务/生产验收。
数据与权限边界
- 使用原配置、业务数据和发布固定目录;未 reset、未迁移数据库、未修改线路地址/主叫/鉴权/AI 参数或 MQ 拓扑。
- 部署前先核对零活动通话,停止 Dispatcher 关闭新准入,再复核零通道及零未确认执行;Dispatcher inbox 无占用,Agent 恢复文件为 0,才允许安装重启业务服务。
- 未重启 Asterisk、开启抓包、调用独立 sip-call、生成外呼消息或额外调用真实 AI/OSS。
- 根工作区的并行合同/拒绝数据改动未覆盖、回退、暂存或纳入本次提交。契约更新在该工作区遇到 dirty 后停止;按使用者允许继续的答复,另建隔离工作区同步最新共享 main,仅验证和提交本轮文件。
- 私密原始工具输出保留在本机
.local/logging-deployment/,摘要文件0600、目录0700,不提交配置、原始正文或凭据。