From 2a5d4f2365c77f677c4a041ade6b6afe95ac668c Mon Sep 17 00:00:00 2001 From: Rogee Date: Mon, 12 Oct 2026 11:28:07 +0800 Subject: [PATCH] Record connected-duration deployment and SaaS readiness limits --- AGENTS.md | 2 ++ docs/evidence/connected-call-duration-local.md | 13 ++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 51bfa26..03650ed 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -79,6 +79,8 @@ ## 当前范围与权威入口 +- **2026-10-12 接通时长字段已合入并部署登记测试机**:共享契约 `bfa3380` 已推送,本项目业务源码 `8340efd` 已快进合入、推送 `main` 并在 `server.sip` 固定部署。`call.execute.result` 增加 `answered_at` 与 `connected_duration_ms`,原 `duration_ms` 不变;未接通且确认结束为 0,原通道 Up/Destroyed 时间证据缺失为 null,SaaS 不应从 outcome 推断接通时长。重新部署未重置数据、不重启 Asterisk、不抓包/主动试拨;Agent/Dispatcher 均 Debug 开、Capture 关,Asterisk PID 777461 不变,零活动通道,服务均 enabled+active、零重启;实际制品 SHA-256 独立复现。SaaS 探测 `saas_pending`、`business_ready=false`,未观测新字段真实到达、接通通话或生产签收,仍需 SaaS 开发对接与确认。文档后续补记不改变已安装的业务源码版本。详见 [`docs/evidence/connected-call-duration-local.md`](docs/evidence/connected-call-duration-local.md)。 + - **SQLite cleanup v0.1 首期(开发分支,本地验收)**:`feat/sqlite-cleanup-v0.1` 仅调整完成数据的本地保留周期。源 `event_id`(含 numberID)原样回传,不新增 `execution_id`,SaaS 如何处理重复结果不在范围;用户在复审中批准仅必要一句文字对齐,共享合同 `7b4448f` 已发布并固定本项目引用,限定首次事实保护为本地执行/回执仍保留期间;接口/Schema/类型/路由不变,不涉及 SaaS 重复处理或等待适配。Agent 不再读写永久 `.approved`;活动 TaskCalls 与 Dispatcher 未决/未知保护保留。已派发呼叫需终结/结果成功及派发回执、最终结果分别 MQ confirm;未发起拒绝只需拒绝确认;取消记录需 durable stopped 和成功 stop confirm。清理事务不删共享配置/任务停止状态,布局仍为 **4**,无迁移/重置。录音仅 delivered 且无未完成 `.results` 引用后删音频、信息、空叶;删除前在私有 `.recording-cleanup` 保存原 delivered 信息临时副本,精确空叶删除并同步父目录后才删副本。info/空叶删除之间硬退出也可按该依据续处理,不泛扫未知空目录、不留永久完成历史;同 OSS 目标在副本清完前拒绝新恢复写入,不再 PUT/报告;拒绝原件按完整回执/原身份/内容精确关联,先全部原件后回执。新原件文件名为回执 SHA-256 与完整记录 SHA-256,仅磁盘关联,不是业务编号;既有完整文件校验读取、不迁移,不能关联的损坏旧文件和潜在依据保留待人工。两角色独立 Asia/Shanghai 每日 24:00 补扫复用实时资格,无 12:00/年龄删除/VACUUM/永久清理历史,清理错误不关闭业务准入。仅测试目录验证 `.approved` 退役,没有实际主机退役、部署、真实数据/OSS 删除、拨号、抓包、AI/OSS 调用或 main 合入/推送;本地通过不代表真实服务验收。检查和逐项证据见 [`docs/evidence/sqlite-cleanup-v0.1-local.md`](docs/evidence/sqlite-cleanup-v0.1-local.md)。此条是开发分支状态,不改变下述线上事实。 - **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/`。本条新授权与现场事实优先于下方本地未部署的历史阶段。 diff --git a/docs/evidence/connected-call-duration-local.md b/docs/evidence/connected-call-duration-local.md index 65872a8..791e2bc 100644 --- a/docs/evidence/connected-call-duration-local.md +++ b/docs/evidence/connected-call-duration-local.md @@ -1,7 +1,14 @@ -# 接通通话时长:本地开发与 SaaS 对接说明 +# 接通通话时长:开发、部署与 SaaS 对接说明 -共享契约固定版本:`bfa3380a5e01f4bfaea918383fceed81548252d1`(已推送 `sip-contracts/main`)。本项目开发分支:`feat/connected-call-duration`,尚未部署、合入或推送本项目。 +共享契约固定版本:`bfa3380a5e01f4bfaea918383fceed81548252d1`(已推送 `sip-contracts/main`)。本项目源码 `8340efd889e039584cf492138d9c2cc7ccf55c06` 从 `feat/connected-call-duration` 快进合入并推送 `main`;登记测试机 `server.sip` 已安装此固定版本。 SaaS 应从 `call.execute.result.payload.connected_duration_ms` 读取接通后的时长,单位毫秒。原 `duration_ms` 保留既有含义,不能作为接通时长。`answered_at` 为原始外呼通道首次 `Up` 事件时间;接通时长从该事件计到同一通道的 `ChannelDestroyed` 事件。确认未接通并结束时为 `answered_at=null`、`connected_duration_ms=0`;缺少可核验时间证据时为 `null`,不得把未知当成零或从录音长度推断。接通后的媒体/业务失败也可能报告 `outcome=failed`,SaaS 不应仅凭 outcome 推算时长。字段在所有新结果中均出现。SaaS 开发人员应按上述共享版本调整解析、展示及测试;发布顺序和生产收到消息尚未验证。 -已验证:Schema、正反例与离线来源检查;结果生成、原通道 Up/Destroyed 计时、无证据/未接通边界的单元测试;`make check`、`make release-check-local`、`go test -race ./...` 和 `./scripts/coverage.sh` 通过,业务覆盖率 73.1%。所有核验为本地隔离环境,未拨号、部署或调用真实外部服务;实际 Asterisk 事件时间及 SaaS 收取仍需独立现场验证。 +已验证:Schema、正反例与离线来源检查;结果生成、原通道 Up/Destroyed 计时、无证据/未接通边界的单元测试;`make check`、`make release-check-local`、`go test -race ./...` 和 `./scripts/coverage.sh` 通过,业务覆盖率 73.1%。上述测试核验为本地隔离环境;实际 Asterisk 事件时间及 SaaS 收取仍需独立现场验证。 + +## 2026-10-12 固定测试机部署 + +- 合入前和合入后的 `make check`、`make release-check-local` 均通过;远端 `origin/main=8340efd889e039584cf492138d9c2cc7ccf55c06` 已核对,工作区干净。部署入口为 `python3 deploys/production/production.py deploy --debug`,不带 `--reset-state` 或 `--defer-saas-readiness`。 +- 部署前后原生 Asterisk PID 均为 `777461`,0 活动通道、0 重启;Dispatcher SQLite 布局 4,inbox 为空,未确认 outbox 为 0;没有清库或修改旧通话、录音及恢复事实。新 Agent PID `3034209`、Dispatcher PID `3034221`,两者及 Asterisk 均 enabled+active、0 重启;Debug 开、Capture 关,未发现运行中的 tcpdump。安装后的业务制品 SHA-256 `3ec30b6c1c51cc6314ad56a5d64d7321cef24556aad433b0a4c3efdec8dc2ab2`、独立 probe SHA-256 `2b5f4b03d13f0b0e2e9b73ad8e85f2e9b6bf432c249a98125cc4e0db71346b55`,均经本机固定源码独立构建逐项核对。 +- 状态核验 `ok=true`、MQ 独立检查通过,但 SaaS 探测为 `saas_pending`(`tasks` 阶段连接不可用,`http_status=0`),`business_ready=false`,没有把等待记作就绪。未主动投递消息、试拨、抓包或调用额外 AI/OSS;尚无新结果到 SaaS、实际接通时长或生产签收证据。没有直接给 SaaS 开发人员发送消息,需将本说明与共享契约版本转交并等其确认对接。 +- 本文件后续更新只记录部署事实,不改变服务器固定的 `8340efd` 业务制品;不以文档提交号冒充已安装版本。