65 lines
5.1 KiB
Markdown
65 lines
5.1 KiB
Markdown
# 全部改动合入 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。
|