docs: record event identity deployment and approved reset
This commit is contained in:
@@ -79,6 +79,8 @@
|
||||
|
||||
## 当前范围与权威入口
|
||||
|
||||
- **2026-10-10 event_id 修复获批部署与重置现场**:使用者在要求直接部署后最终同意必要私密备份与测试运行数据重置。修复 `f7aa766` 已合入并推送 main,安装至登记 `server.sip`,共享合同固定 `ef3009d`。先停 Dispatcher 关准入,核实零通道、无未完成/未知执行、无待确认反馈/Agent 恢复;MQ 控制及任务3–5队列为空/消费者0,任务1–2队列不存在,无发布/消费/ACK/purge。私密备份与原29文件 bytes/清单完全一致,恢复验证包含 WAL/SHM,保留原版本3、8条完成及25条确认事实;不改写旧结果。新运行库布局4、inbox/outbox0,不继承旧事件防重历史,不主动重投旧命令。实际独立复现二进制 SHA-256 `6886987795b208e79964053328262c450a3249ee3c3f7e9e75bc7ca1c10c0586`;Agent2910678 enabled+active、0重启、Debug开启/Capture关闭。Dispatcher enabled且实际auto-restart,最新结构化错误为SaaS HTTP502(初始独立探测404),`business_ready=false`,不把failed/数据库/证书/未知错误算等待成功。Asterisk777461保持不变、0通道;未重启、抓包、主动投递/试拨或额外AI/OSS,未清外部SaaS/MQ/OSS。程序安装与获批重置完成,但线上event_id反馈/真实通话/生产未验证。证据与源制品边界见 [`docs/evidence/event-id-lifecycle-20261010.md`](docs/evidence/event-id-lifecycle-20261010.md) 文末与 `.local/event-id-deployment/`。本条新授权与现场事实优先于下方本地未部署的历史阶段。
|
||||
|
||||
- **2026-10-10 event_id 全链路原值规则(本地修复,未部署)**:针对已接收事件的回执、拒绝、执行反馈及 `call.execute.result` 必须原样保留源 `event_id`,包括其中的 numberID,不哈希、拼接或清洗。共享合同 `ef3009d` 已推送;本项目同步固定引用及实现/测试。Dispatcher 外发保存、查询、发送确认及恢复统一以 `(dispatcher_id,event_type,event_id)` 区分,同 ID 的派发回执与最终结果独立处理;录音授权只检查实际最终结果。移除测试专用 SaaS Mock 的旧派生 ID 判定,不改变真实 SaaS 代码。SQLite 当前布局为 **4**,旧布局只读拒绝,不自动迁移、重置或绕过;现存业务数据与运行服务未改。源码文件名、录音存储键、上传及 RPC 动作编号不是源 event_id,保留各自独立身份。核验及 SaaS 开发同步说明见 [`docs/evidence/event-id-lifecycle-20261010.md`](docs/evidence/event-id-lifecycle-20261010.md)。
|
||||
|
||||
- **2026-10-10 SaaS 就绪延期授权**:此次任务回执更新部署中,真实任务接口 HTTP 200 返回 `code=500` 错误正文而非任务列表;使用者明确批准暂不等待 SaaS 修复、继续部署。新增显式 `deploy --defer-saas-readiness`,只延期已通过 MQ 独立登录/关闭、HTTP 200 合同验证失败的 SaaS 就绪检查,默认关闭;不修改运行 Schema、不启用旧配置、Mock 或业务准入。探测保留安全路径/原因与延期标记,Dispatcher 必须实际 auto-restart 且最新错误确认为 SaaS 配置校验,不能把 failed、数据库/证书/未知故障算完成。业务始终标记未 ready,原生 Asterisk、数据、真实呼叫授权与 Debug/Capture 边界不变。规则见 [`deploys/production/README.md`](deploys/production/README.md)。
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
# event_id 生命周期一致性:本地修复与核验
|
||||
# event_id 生命周期一致性:修复、核验与部署
|
||||
|
||||
**最新现场:修复提交 `f7aa766` 已于本次后续授权中合入并推送 main,安装至 `server.sip`。经必要私密备份后重置本项目测试运行数据;Agent 正常,Dispatcher 因实际 SaaS HTTP 502 等待重试,业务未就绪。完整记录见文末「后续获批部署」。**
|
||||
|
||||
## 范围与来源
|
||||
|
||||
@@ -31,7 +33,7 @@
|
||||
|
||||
SQLite 布局由 3 改为 **4**,`dispatcher_outbox` 主键为 `(dispatcher_id,event_type,event_id)`。启动先验证版本及这三个主键字段;旧布局明确报错且拒绝打开,不自动迁移、清库或用新空目录绕过。
|
||||
|
||||
`TestSourceEventIdentityRejectsVersionThreeWithoutWriting` 核实拒绝后旧版本号、表结构和既有反馈正文没有变化。本次仅在临时测试数据库中验证;未打开或改写线上数据库、Agent 恢复文件、录音或其他业务数据。**当前运行环境尚未切换此版本;不能直接用旧布局启动新版。** 后续若需要使用现存数据,必须另行确认数据处置方案,不能把本地通过当作迁移授权。
|
||||
`TestSourceEventIdentityRejectsVersionThreeWithoutWriting` 核实拒绝后旧版本号、表结构和既有反馈正文没有变化。本次仅在临时测试数据库中验证;未打开或改写线上数据库、Agent 恢复文件、录音或其他业务数据。**本地修复阶段尚未切换运行环境;不能直接用旧布局启动新版。** 后续部署已另获必要备份与重置测试数据的批准,见文末;没有迁移旧记录或把本地测试当作数据处置授权。
|
||||
|
||||
## TDD 与验证
|
||||
|
||||
@@ -75,10 +77,62 @@ SQLite 布局由 3 改为 **4**,`dispatcher_outbox` 主键为 `(dispatcher_id,
|
||||
|
||||
共享合同 `main` 已包含本次变更,入口是 `ef3009d` 及正常 MQ 示例。最终结果返回下发的原 `event_id`,因此源 ID 中的 numberID 无需另加字段或解析哈希即可保留;派发回执与最终结果仍是不同事件类型。字段范围没有增加旧执行字段或兼容通道。
|
||||
|
||||
本说明用于交给 SaaS 开发人员同步现行合同;**尚无对方已读取、应用已修改或线上已收到新结果的事实,不代签这些事项。** 当前项目源码仅在本地分支提交,不推送本项目远端、不合入 main。
|
||||
本说明用于交给 SaaS 开发人员同步现行合同;**尚无对方已读取、应用已修改或线上已收到新结果的事实,不代签这些事项。** 本地修复阶段仅提交本地分支;后续使用者另行批准合入并推送 main 及部署,见文末。
|
||||
|
||||
## 发布检查补充
|
||||
|
||||
固定源码提交 `c2ee8a5a4bd590568af1225b64adbbd71066fec6` 后执行 `make release-check-local` 通过;实际构建记录 `source_dirty=false`、`production_approved=false`,合同指针为 `ef3009df3a90f6e941ca0b24e46134aef17a374d`。该次本地制品 SHA-256 为 `d704bcef6eb506bdae436e25571550643e3540ed989d378ae6a357577ef93ec2`,日志在 `.local/event-id-lifecycle/release-check-local.log`。
|
||||
|
||||
本次仅形成可追溯本地提交及本地发布验证制品;没有推送本项目远端、合入 main、部署、拨号或操作现存业务数据。SaaS 实际收到新反馈、线上数据库切换与生产验收均未验证。
|
||||
上述本地修复阶段仅形成提交及发布验证制品,未部署或操作现存业务数据。后续获批部署与数据库重置另记如下;SaaS 实际收到新反馈、真实通话与生产验收仍未验证。
|
||||
|
||||
## 后续获批部署
|
||||
|
||||
### 授权与发布来源
|
||||
|
||||
使用者随后要求直接部署,经确认授权合入 main 并推送,保持 Debug 开启、Capture 关闭、不重启 Asterisk;遇到旧数据库先停下单独确认。发现版本 3 不兼容后,使用者最终同意必要私密备份、停服务复核并重置本项目测试运行数据。没有把最初“不备份直接部署”的答复当成跳过备份的许可。
|
||||
|
||||
- 实际安装源码:`f7aa76662f6b1341bf118d5adf4c7fbce8062b15`,推送后核对远端 main;共享合同仍固定 `ef3009d`。
|
||||
- 入口:`deploys/production/production.py`,登记目标 `server.sip`,使用既有根目录三份私有配置及固定配置/数据/制品目录,非生产 `nonprod-real` 不变。
|
||||
- 使用显式 `--reset-state --confirm-reset --debug --defer-saas-readiness`;不使用旧 Schema、Mock、迁移、额外业务目录或数据回退。
|
||||
- 登记 SSH 指纹严格核对,私有源文件 0600;凭据仅在受限进程中读取和传输,不在命令参数、聊天或证据中公开。
|
||||
|
||||
### 重置前门槛及备份完整性
|
||||
|
||||
先关闭 Dispatcher 准入,再核对原生零通道、没有未完成/未知执行、没有待确认反馈及 Agent 恢复文件,才停止 Agent。Asterisk 保持运行。
|
||||
|
||||
实际只读 RabbitMQ 检查由登记服务器执行:控制队列为空;任务 3–5 队列为空,任务 1–2 队列不存在;各已存在队列消费者为 0。缺失队列明确标记,不把缺失冒充正常队列。连接及各通道关闭确认,不发布、消费、ACK、purge、创建或删除外部业务队列。
|
||||
|
||||
停止后的私密清单记录 29 个文件及逐文件大小/SHA-256。正式部署脚本在删除旧运行数据前创建备份:
|
||||
|
||||
- 测试机私密归档:`~/.local/share/go-sip-backups/reset-20261010T084230675268Z.tar`,0600。
|
||||
- 归档 SHA-256:`9630c6ab662a8e2b29f56eb1b409051abeff1c2d5c5be77157c675bb526a216f`。
|
||||
- 归档文件集合及全部 29 个文件的原始 bytes 与停止清单逐一完全相等。
|
||||
- 将 SQLite 主文件和 WAL/SHM 一并恢复到隔离私密验证目录后,`integrity_check=ok`;原版本 3、8 条已完成 inbox 记录及 25 条已确认反馈均完整保存。临时恢复不参与运行。
|
||||
|
||||
首次校验只恢复 SQLite 主文件,未带 WAL,无法读到完整已提交事实;这是验证方式遗漏,不是备份丢失。补齐 WAL/SHM 后完整事实验证通过,不重建、不伪造旧结果。归档保留旧消息身份,包括历史派生结果 ID,不改写历史证据。
|
||||
|
||||
**重置后的新运行库不继承旧事件的防重复历史。不得把旧事件再次投递或自动补发当成新任务;旧事实保留在上述备份,而非新库。** 未清外部 SaaS、MQ 或 OSS。
|
||||
|
||||
### 实际制品与运行核验
|
||||
|
||||
生产脚本使用固定 main 在临时构建目录编译。按同一 `CGO_ENABLED=0 GOOS=linux GOARCH=amd64`、`-trimpath` 独立重建,实际安装主程序 SHA-256 完全相同:
|
||||
|
||||
`6886987795b208e79964053328262c450a3249ee3c3f7e9e75bc7ca1c10c0586`
|
||||
|
||||
不要与上面的本地发布门禁构建混用:两者提交、构建参数与制品用途不同。
|
||||
|
||||
| 现场项 | 结果 |
|
||||
| --- | --- |
|
||||
| Agent | enabled、active/running;PID `2910678`,两次实际读取稳定,`NRestarts=0`;Debug 开启、Capture 关闭。 |
|
||||
| Dispatcher | enabled,实际 `activating/auto-restart`,不是 failed;Debug 开启、Capture 关闭。两次读取重试计数从 102 到 103,与当前 SaaS 等待相符。 |
|
||||
| 最新实际失败原因 | 解析原生结构化日志的最新 Dispatcher error,再交给正式部署脚本相同的等待判定;本次 HTTP 502、`saas_http_unavailable`。初始独立探测曾返回 HTTP 404。不是数据库、证书或未知故障的宽免。 |
|
||||
| 业务准入 | `business_ready=false`;不使用旧任务缓存或 Mock 开启准入。 |
|
||||
| Asterisk | enabled、active/running;PID `777461` 与重置前相同,`NRestarts=0`;前后 ARI 通道均为 0,未重启。 |
|
||||
| 新数据库 | 布局 4,主键 `(dispatcher_id,event_type,event_id)`;inbox/outbox 均为 0。 |
|
||||
| 外部操作 | 没有主动发布外呼消息、试拨、抓包或额外 AI/OSS 请求;本次没有新通话及最终反馈可核验。 |
|
||||
|
||||
受控现场材料在未提交的 `.local/event-id-deployment/`:`preflight.json`、`stopped-before-reset.json`、`queues-before-reset.json`、`deploy.log`、`journal-shape.json`、`verified.json`;目录 0700,脚本与 JSON/日志 0600。部署辅助程序 API/路径、归档命名和 JSON 日志格式的诊断错误均在辅助校验阶段显式失败后纠正,不更改业务实现,不以失败校验代签通过。
|
||||
|
||||
### 交付边界
|
||||
|
||||
此次程序安装、必要备份与获批重置已完成;业务仍等待实际 SaaS 恢复。没有新的实际 MQ 呼叫反馈,因此不能用部署成功代签线上 event_id 收发一致、SaaS 应用收讫、真实通话或生产验收。后续文档提交不改变此次安装的固定源码/制品身份。
|
||||
|
||||
Reference in New Issue
Block a user