diff --git a/AGENTS.md b/AGENTS.md index 8cb9c35..8c53184 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -79,6 +79,8 @@ ## 当前范围与权威入口 +- **2026-10-10 07:40 全部改动 main Debug 部署**:使用者明确包含业务提交 `09e273b`,合并提交 `a2cafd419b56a2ddf60322b813b4e22f2d62a6b9` 已推送并安装;共享合同 `8e6c332` 经 contracts-update 核验,保留全部最新日志隐私修复与新增拒绝反馈/SIP 来源快照。冲突解决保留实际收件/确认日志、持久拒绝与拒绝身份幂等;新增两模式合并回归先红后绿。完整检查/固定提交发布检查/Python21通过,业务覆盖率72.6%。Agent2904634/D2904645 enabled+active/running、0重启、Debug开启/Capture关闭;实际SHA256 `bf81d096a46ddecede59329afa0fbae12aadd74bb919fc6ae9fc4d139a7d1a1e` 经相同部署构建独立复现,Asterisk777461不变、通道/tcpdump0;实际14HTTP/各8RPC安全日志核验。无reset/旧库迁移/Asterisk重启/抓包/试拨/主动消息/额外AI OSS。无效MQ/拒绝反馈实际SaaS接收、通话和生产仍未验证,原独立probe saas_pending/business_ready=false/real_reboot_verified=false保留。权威为干净隔离main,根工作区旧日志及并行内容不覆盖或清理;见 [`docs/evidence/all-changes-main-debug-deployment-20261010.md`](docs/evidence/all-changes-main-debug-deployment-20261010.md)。 + - **当前日志与抓包规则**: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)。 diff --git a/docs/evidence/all-changes-main-debug-deployment-20261010.md b/docs/evidence/all-changes-main-debug-deployment-20261010.md new file mode 100644 index 0000000..8d88ed2 --- /dev/null +++ b/docs/evidence/all-changes-main-debug-deployment-20261010.md @@ -0,0 +1,64 @@ +# 全部改动合入 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。 diff --git a/docs/evidence/dispatcher-agent-logrus-debug-deployment-20261009.md b/docs/evidence/dispatcher-agent-logrus-debug-deployment-20261009.md index 1cb0894..2d1a6cc 100644 --- a/docs/evidence/dispatcher-agent-logrus-debug-deployment-20261009.md +++ b/docs/evidence/dispatcher-agent-logrus-debug-deployment-20261009.md @@ -1,6 +1,8 @@ # Dispatcher / Agent Logrus Debug 实现与固定环境部署 -## 最终已安装版本:64bd48b(2026-10-10 06:29 CST 现场) +最新全部改动合并部署为 `a2cafd4`;见 [2026-10-10 全部改动 main Debug 部署](all-changes-main-debug-deployment-20261010.md)。下方保留单独日志审查通过后的现场历史。 + +## 日志审查通过版本:64bd48b(2026-10-10 06:29 CST 历史现场) 第十一次审查的 `