Files
go-sip/docs/evidence/all-changes-main-debug-deployment-20261010.md
T

5.1 KiB
Raw Blame History

全部改动合入 main 后的 Debug 部署

范围与来源

使用者确认“所有变更”包括尚未合入 main 的业务提交 09e273b,不只日志修改。

最终合并提交:a2cafd419b56a2ddf60322b813b4e22f2d62a6b9,已快进到 main、推送并核对远端一致。合并保留 main 上已经审查通过的完整日志防泄漏修复,同时包含业务分支的结构错误拒绝反馈、幂等和 SIP 来源快照等改动。根工作区中旧日志改动以最新主线实现为准,不用旧版本覆盖新修复;根工作区文件和并行内容未清理或覆盖。

共享合同在合并前执行 make contracts-update 成功,固定提交 8e6c332bb9d5b3d331cef3e5cbc35a1b8b4b7c86。本项目指针、实现、测试和文档随合并一起更新。SaaS 对可识别错误消息的拒绝反馈仍须确认实际接收,MQ publisher confirm 不代表 SaaS 已处理。

权威构建工作区:.local/logging-isolated 的干净 main。没有从根工作区未提交的旧日志代码构建发布。

合并与验证

两处合并冲突实际解决:

  • Dispatcher 保留日志身份上下文和新拒绝身份幂等分支,重放已拒绝身份不执行,记录 idempotent_rejection。
  • MQ 保留实际收件与 ACK/NACK/Reject 观察,同时使用新拒绝处理链路,移除旧的提前丢弃分支。处理完成记录 rejected_handled,随后才 ACK。

TestMergedRejectionKeepsReceiveLogsWireBytesAndDurableAck 两模式先红后绿,验证原始收件字节不变、无效输入不进入业务执行、处理先于 ACK、实际接收/处理/确认各阶段和已有身份保留、原 schema 原因可见、密钥隐藏及普通/Debug 正文差异。既有失败重入队、身份不可复活及全部日志隐私测试保持。

最终验证全部通过:

  • make check:格式、当前合同和 Proto、vet、全包 race、构建、实际隔离 RabbitMQ/HTTPS/mTLS 及现有验收对照。
  • 部署 Python 测试 21 项。
  • make coverage:业务覆盖率 72.6%,高于 65%。
  • make release-check-local;固定提交后再次通过,source_dirty=false,production_approval=false。
  • 暂存及工作区 git diff --check。

隔离工作区私密验证日志:.local/all-main-{final-check,deployment-tests,coverage,release-check,fixed-release-check}.log,覆盖率文件 .local/all-main-{all,business}-coverage.out。

实际部署与现场

现场摘要时间:2026-10-09T23:40:15.653991+00:00(2026-10-10 07:40 CST)。登记主机 server.sip,原固定服务、目录和 nonprod-real 配置。

部署前严格核对登记 SSH 主机指纹和 ARI 文件归属/0600,确认零通道,关闭 Dispatcher 新准入,再只读排除未知执行及 Agent 恢复阻断。无阻断才从固定提交部署。

项目 实际结果
安装源码 a2cafd419b56a2ddf60322b813b4e22f2d62a6b9
Agent PID 2904634,enabled+active/running,0 重启
Dispatcher PID 2904645,enabled+active/running,0 重启
两服务实际参数 Debug 开启,Capture 关闭
两进程实际 SHA-256 bf81d096a46ddecede59329afa0fbae12aadd74bb919fc6ae9fc4d139a7d1a1e
Asterisk PID 777461 不变,enabled+active/running,未重启
活动通道/tcpdump 均为 0
实际 HTTP 14 次请求及响应,状态 200
实际 Debug RPC 正文 Agent、Dispatcher 各 8 条
日志格式/错误 仅 Logrus JSON;0 error、redaction_error
已观察正文的敏感字段/签名 URL/音频 data URI 泄漏 0,13 个隐藏标记;URL 检查忽略 scheme 大小写

安装器报告 artifact_hashes_match=true。另在同一干净固定提交使用部署器相同命令 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath 独立重建,SHA-256 与两个实际运行进程一致,构建信息明确 vcs.revision=a2cafd4…、vcs.modified=false。

发布门禁制品 SHA-256 cf43288862338087ef757e28bae81fd36eecfcd70594119379207f61b415b221 不是上述部署制品:scripts/build-release.sh 明确使用 -buildvcs=false,部署器保留干净 Git 提交信息。初次现场检查错误地比较了两种构建的 hash,断言失败;定位构建参数差异后用相同部署构建独立复现并核对,不放宽为任意 hash。

验证边界

本次没有清数据、迁移旧库、重启 Asterisk、启动抓包、独立试拨、主动生成外呼/MQ 消息或额外调用 AI/OSS。

现场未发生无效 MQ 业务消息、拒绝反馈接收、内嵌音频、非 JSON/form 正文、真实通话或真实恢复故障;相应新分支仅声明本地实际隔离测试通过,不以正常启动、零泄漏计数或 MQ confirm 代签 SaaS 应用接收、真实 AI/OSS 通话或生产。

部署器仍返回 dependency_state=saas_pending、business_ready=false、real_reboot_verified=false,保留原事实;不能据此伪称生产验收,也不把该独立 probe 标签当作两个实际服务未启动。

私密本机摘要(目录0700、文件0600):.local/logging-deployment/all-main-{preflight,deploy,field-summary}.json。不提交原始正文、凭据、录音或 SIP。