From 2c20bdcdb84b4eaba8f71a53900469a290bd9e5e Mon Sep 17 00:00:00 2001 From: Rogee Date: Wed, 23 Sep 2026 00:29:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=20docs=20=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E5=B9=B6=E5=BD=92=E6=A1=A3=E5=8E=86=E5=8F=B2=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- docs/README.md | 46 +++++++++++++++++++ docs/archive/README.md | 13 ++++++ .../evidence/20260920-acceptance-status.md | 6 +-- .../20260920-local-oss-mq-integration.md | 0 .../evidence/20260920-local-p1-acceptance.md | 0 .../20260921-mq-only-adjustment-baseline.md | 0 docs/{ => archive}/references/a.md | 0 docs/evidence/20260918-acceptance-matrix.md | 2 +- docs/evidence/20260918-g0-status.md | 2 +- docs/plan-0918.md | 6 +-- 11 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 docs/README.md create mode 100644 docs/archive/README.md rename docs/{ => archive}/evidence/20260920-acceptance-status.md (87%) rename docs/{ => archive}/evidence/20260920-local-oss-mq-integration.md (100%) rename docs/{ => archive}/evidence/20260920-local-p1-acceptance.md (100%) rename docs/{ => archive}/evidence/20260921-mq-only-adjustment-baseline.md (100%) rename docs/{ => archive}/references/a.md (100%) diff --git a/README.md b/README.md index cbf2a93..605f00c 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ sip-go-agent agent upload-retry --spool /path/to/agent-spool \ ## 文档 -后续Agent先读 [项目开发计划与需求阅读索引](docs/plan-0918.md),按W/子任务确认I/M/G前置并阅读详细设计/权威契约。并行开发按§9登记单写范围、隔离工作区/测试资源和合并回归,由集成负责人统一维护总台账;开发子Agent固定使用 **gpt-5.6-luna+max+fast**,不可用时报告阻塞,不静默降级。本轮未启动开发子Agent。 +文档目录总览见 [`docs/README.md`](docs/README.md)。后续Agent先读 [项目开发计划与需求阅读索引](docs/plan-0918.md),按W/子任务确认I/M/G前置并阅读详细设计/权威契约。并行开发按§9登记单写范围、隔离工作区/测试资源和合并回归,由集成负责人统一维护总台账;开发子Agent固定使用 **gpt-5.6-luna+max+fast**,不可用时报告阻塞,不静默降级。本轮未启动开发子Agent。 | 文档 | 内容 | | --- | --- | @@ -86,4 +86,4 @@ sip-go-agent agent upload-retry --spool /path/to/agent-spool \ 3. **第二阶段:** 真实 SaaS/MQ 对接、RabbitMQ ACL/TLS及适用的业务回执、真实供应商/ECS 联调,以及双节点、第二 Cell、第二租户公平调度。 4. **后续另立项:** 在线动态发布、自动跨供应商FALLBACK、多Dispatcher HA/分布式配额、权重借用、文本OSS归档、1000路完整AI/N+1。既有call/command整体补传不是通用回放平台,当前单节点首发仍保留。 -阶段目标详见主方案§1/§10,首发验收见验收方案§1.1–§1.2;文件名保持不变。本次MQ-only本地门禁以计划§8.2和`docs/evidence/20260922-mq-only-local-final.md`为准;真实依赖、供应商、云/拨号、生产receipt、容量和切换仍属第二阶段,旧证据见 `docs/evidence/20260920-local-p1-acceptance.md`。 +阶段目标详见主方案§1/§10,首发验收见验收方案§1.1–§1.2;文件名保持不变。本次MQ-only本地门禁以计划§8.2和`docs/evidence/20260922-mq-only-local-final.md`为准;真实依赖、供应商、云/拨号、生产receipt、容量和切换仍属第二阶段,归档旧证据见 `docs/archive/evidence/20260920-local-p1-acceptance.md`。 diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..4801830 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,46 @@ +# 文档导航 + +`docs/` 是本项目唯一的设计、契约、决策和验证文档目录。 + +## 首读顺序 + +1. [`plan-0918.md`](plan-0918.md):W00–W16 任务台账、阅读索引、I/M/G 门禁和当前范围。 +2. [`Go重写方案_v0.3.md`](Go重写方案_v0.3.md):单节点、单 Cell、单租户的总体方案与分期。 +3. [`contracts/`](contracts/):SaaS、Dispatcher、Agent、RabbitMQ 和 OSS 的项目内契约。 +4. [`验证与切换验收_v0.3.md`](验证与切换验收_v0.3.md):验收门禁、证据要求和第二阶段边界。 +5. [`evidence/20260922-mq-only-local-final.md`](evidence/20260922-mq-only-local-final.md):当前 MQ-only 本地/隔离范围的最新汇总证据。 + +## 按职责查找 + +### 方案与范围 + +- [`Go重写方案_v0.3.md`](Go重写方案_v0.3.md):产品范围、运行边界和阶段目标。 +- [`通信与事件数据交互_v0.1.md`](通信与事件数据交互_v0.1.md):通信、事件、AI 配置和上传边界。 +- [`G0开发准备与契约冻结提案_v0.1.md`](G0开发准备与契约冻结提案_v0.1.md):D01–D10 方向及 G0 前置。 +- [`开源组件选型与复用清单_v0.2.md`](开源组件选型与复用清单_v0.2.md):组件、SDK、版本和 PoC 门禁。 +- [`OpenAPI与MQ字段索引_v0.1.md`](OpenAPI与MQ字段索引_v0.1.md):旧源只读索引,不是当前 MQ-only Schema。 + +### 契约与决策 + +- [`contracts/saas-dispatcher.md`](contracts/saas-dispatcher.md):SaaS↔Dispatcher 的 MQ-only 边界、D 身份和专用 Topic。 +- [`contracts/dispatcher-agent.md`](contracts/dispatcher-agent.md):Dispatcher↔Agent 的 Unary 与异步结果边界。 +- [`contracts/saas-rabbitmq-oss-dispatcher-agent-timeline.md`](contracts/saas-rabbitmq-oss-dispatcher-agent-timeline.md):全链路时序和 OSS 直传路径。 +- [`contracts/mq-only-v1-freeze-proposal.md`](contracts/mq-only-v1-freeze-proposal.md):已确认的 MQ-only v1 冻结方向。 +- [`decisions/`](decisions/):已记录的关键技术决策。 + +### 证据 + +- `evidence/` 保存可复核的运行事实、测试结果和边界说明;历史证据不因当前契约变化而改写。 +- 当前 MQ-only 本地结论以 [`plan-0918.md` §8.2](plan-0918.md) 和 [`20260922-mq-only-local-final.md`](evidence/20260922-mq-only-local-final.md) 为准。 +- 证据中的 `mock`、`mixed`、`real` 必须按原记录理解;本地或隔离通过不等于真实 SaaS、供应商、生产或容量验收通过。 + +### 归档 + +- [`archive/`](archive/) 保存已被当前基线替代、但仍需保留追溯价值的文档,以及无项目归属的旧参考资料。 +- 归档文件不作为当前实现、契约或验收依据;需要引用历史事实时必须使用归档路径。 + +## 维护规则 + +- 不在 `docs/` 复制上游 Schema;上游契约包、生成物和字段索引保持单一来源。 +- 不把证据摘要改写成新的通过结论;范围、环境和未执行项必须保持可追溯。 +- 新增文档先归入方案、契约、决策、证据或归档中的一个明确类别,不在根目录新增无类别文件。 diff --git a/docs/archive/README.md b/docs/archive/README.md new file mode 100644 index 0000000..4426bc8 --- /dev/null +++ b/docs/archive/README.md @@ -0,0 +1,13 @@ +# 归档文档 + +这里保留已被当前基线替代、但仍有追溯价值的历史记录;归档不等于删除。 + +## 本次归档 + +- `evidence/20260920-acceptance-status.md`:MQ-only 修订前的验收状态摘要。 +- `evidence/20260920-local-p1-acceptance.md`:修订前的单节点本地 P1 汇总,不能覆盖当前 MQ-only 修订。 +- `evidence/20260920-local-oss-mq-integration.md`:旧 OSS/MQ 验证,仍保留 `recording.ready` 等历史事实。 +- `evidence/20260921-mq-only-adjustment-baseline.md`:MQ-only 改造前基线,已被当前实现和 [`evidence/20260922-mq-only-local-final.md`](../evidence/20260922-mq-only-local-final.md) 取代。 +- `references/a.md`:无项目入站引用的外部 FreeSWITCH 资料,不属于本项目契约或验收依据。 + +归档证据只用于还原当时的环境、命令和结果,不得用来宣称当前实现、真实供应商、生产 SaaS/MQ receipt 或生产切换已通过。 \ No newline at end of file diff --git a/docs/evidence/20260920-acceptance-status.md b/docs/archive/evidence/20260920-acceptance-status.md similarity index 87% rename from docs/evidence/20260920-acceptance-status.md rename to docs/archive/evidence/20260920-acceptance-status.md index e70f9ec..33cb5e9 100644 --- a/docs/evidence/20260920-acceptance-status.md +++ b/docs/archive/evidence/20260920-acceptance-status.md @@ -1,18 +1,18 @@ # 2026-09-20 W00–W15 验收状态摘要 -> 本阶段范围以 [`20260920-scope-amendment.md`](20260920-scope-amendment.md) 为准:单节点、单 Cell、单租户;生产 SaaS/MQ 联调、双节点、第二 Cell、第二租户和生产切换延期第二阶段。契约结构通过不等于生产联调通过。 +> 本阶段范围以 [`20260920-scope-amendment.md`](../../evidence/20260920-scope-amendment.md) 为准:单节点、单 Cell、单租户;生产 SaaS/MQ 联调、双节点、第二 Cell、第二租户和生产切换延期第二阶段。契约结构通过不等于生产联调通过。 ## 已有可复核证据 - **W00–W02**:项目范围、契约包、Proto/stubs、严格校验和状态/幂等合同已通过本地检查。 - **W03–W10 本地/隔离部分**:`go test -race ./...`、`go vet ./...`、`go mod verify`、契约/Proto 检查通过;AI mock/provider smoke、PCMA/RTP/ARI、三轮 CallFlow、无效通话早停和美吧口腔配置已有证据。 - **SIP 时间门禁**:新增 `internal/callwindow`,按 Asia/Shanghai `[09:00,20:00)` 覆盖 08:59:59、09:00:00、19:59:59、20:00:00 及 UTC 转换;`runCallOnce` 和 real/mixed Agent RPC 的 permit/execute 入口窗口外 fail-closed。全套 race、vet、build 和本地验收通过。 -- **W11 Alibaba OSS 部分**:Dispatcher 使用官方 Alibaba OSS Go SDK v2 签发15分钟 presigned PUT,Agent 直传并保留源文件;授权真实测试已通过 PUT/HEAD 大小与 SHA-256 metadata、SQLite durable grant/completion、`recording.ready` outbox、显式过期后重新申请及重复请求/完成幂等;重建 ECS 上还完成了 mTLS gRPC→OSS 内网 endpoint 的 real-call WAV 实际上传。见 `docs/evidence/20260920-local-oss-mq-integration.md`。 +- **W11 Alibaba OSS 部分**:Dispatcher 使用官方 Alibaba OSS Go SDK v2 签发15分钟 presigned PUT,Agent 直传并保留源文件;授权真实测试已通过 PUT/HEAD 大小与 SHA-256 metadata、SQLite durable grant/completion、`recording.ready` outbox、显式过期后重新申请及重复请求/完成幂等;重建 ECS 上还完成了 mTLS gRPC→OSS 内网 endpoint 的 real-call WAV 实际上传。见 `docs/archive/evidence/20260920-local-oss-mq-integration.md`。 - **W12 本地/OSS outbox 部分**:RabbitMQ/Dispatcher integration、outbox/replay、事件 Schema、业务日志以及 verified recording→SQLite `recording.ready` outbox 测试通过;Dispatcher 的 `ReportExecutionEvent`、`RequestUpload`、`CompleteUpload` 已统一注册在同一个 AgentControl gRPC listener,并覆盖 durable fact、digest 幂等/冲突和 Dispatcher-owned aggregate version;见 `docs/evidence/20260920-dispatcher-unified-grpc.md`。生产 broker 的 SaaS application receipt 按本阶段契约/fixture 状态机签收,真实 receipt 延期第二阶段。 - **W13-a**:Debian 13/systemd package、非 root 目录/权限、capture-first 入口、SIP/RTP PCAP、PJSIP logger、结构化 SIP summary 和每日 trunk×手机号 3 次 fail-closed 门禁已安装并验证;新 ECS `i-2zeac4n2cpgkqgikkqg1` 已重新完成非生产 `--preflight-only`,最终制品 `491feb9a052fdd3ad50987d64fbe59fd8e02f9c42e3e74fbe794658baff6df71` 重启后 Agent/Dispatcher 仍 active。见 `docs/evidence/20260920-sip-attempt-guard.md`、`docs/evidence/20260920-new-ecs-preflight.md`。 - **真实 provider-third 单节点**:原始号码 `15003164745` 完成约49秒三轮 AI、PCMA/8000 RTP、3段入站+4段出站录音和双方文本事实。见 `docs/evidence/20260920-real-provider-third-capture-first.json`。 - **真实失败证据**:provider-primary 为 `100/183/486 Busy Here`,provider-second 为 `100/404`,均有完整 capture-first PCAP;不是无证据重试。见对应 provider evidence JSON。 -- **本阶段本地签收**:`docs/evidence/20260920-local-p1-acceptance.md` 已覆盖 W13/W14 适用的单节点/单 Cell/单租户构建、故障语义、契约、AI/媒体、OSS、MQ 隔离和时间门禁检查。 +- **本阶段本地签收**:`docs/archive/evidence/20260920-local-p1-acceptance.md` 已覆盖 W13/W14 适用的单节点/单 Cell/单租户构建、故障语义、契约、AI/媒体、OSS、MQ 隔离和时间门禁检查。 ## 第二阶段或明确不适用事项 diff --git a/docs/evidence/20260920-local-oss-mq-integration.md b/docs/archive/evidence/20260920-local-oss-mq-integration.md similarity index 100% rename from docs/evidence/20260920-local-oss-mq-integration.md rename to docs/archive/evidence/20260920-local-oss-mq-integration.md diff --git a/docs/evidence/20260920-local-p1-acceptance.md b/docs/archive/evidence/20260920-local-p1-acceptance.md similarity index 100% rename from docs/evidence/20260920-local-p1-acceptance.md rename to docs/archive/evidence/20260920-local-p1-acceptance.md diff --git a/docs/evidence/20260921-mq-only-adjustment-baseline.md b/docs/archive/evidence/20260921-mq-only-adjustment-baseline.md similarity index 100% rename from docs/evidence/20260921-mq-only-adjustment-baseline.md rename to docs/archive/evidence/20260921-mq-only-adjustment-baseline.md diff --git a/docs/references/a.md b/docs/archive/references/a.md similarity index 100% rename from docs/references/a.md rename to docs/archive/references/a.md diff --git a/docs/evidence/20260918-acceptance-matrix.md b/docs/evidence/20260918-acceptance-matrix.md index c30a968..3c35eb7 100644 --- a/docs/evidence/20260918-acceptance-matrix.md +++ b/docs/evidence/20260918-acceptance-matrix.md @@ -16,7 +16,7 @@ | W08 Permit/Execute | **隔离 mock mTLS 通过 / 生产阻塞** | 当前工作树项目 `internal/rpc.DialFromFiles` + `dispatcher.AgentCoordinator.ExecuteRaw` 已在 owner-authorized ECS mock Agent 上完成 R01/R02、执行许可、Execute 和 accepted receipt;同一工作树 `Dispatcher.ExecuteReserved` 通过 SQLite quota/command/reservation 串联 mTLS Agent,结果为 accepted receipt、task_status=running(`docs/evidence/20260918-w06-mtls-cloud.md`);没有跨 Cell 最后发起屏障、Agent/Asterisk 业务路径的 SIP originate、真实 MQ application receipt 或故障注入验收;三条直连 SIPp INVITE 仅是独立线路诊断。 | | W07/W10 双 AI | **本地 Mock/授权/SDK API PoC 通过 / 真实参数门禁阻塞** | W01 双模式 Schema、不可变摘要、Agent RPC 对 permit/Execute 的授权绑定校验、bounded/cancellable ASR-only/full-AI mock pipeline 和阶段调用测试通过;隔离 `openai-go/v3.62.0` streaming 参数/禁重试、`dashscopego/v0.1.2` Paraformer surface、`doubao-speech-go` ASR/TTS surface 均编译通过;Volcengine TTS 当前缺 speed/volume/pitch 可达性,DashScope endpoint injection/两家真实供应商的取消/背压/能力验收仍未完成,禁止复用旧 LLM/TTS。 | | W09 SIP/ARI/RTP | **隔离 Asterisk/ARI runtime PoC 通过 / 业务媒体与真实阻塞** | 已锁定并引入 Pion RTP `v1.10.5`,`internal/media` 只做 bounded policy adapter,库解析和 payload/SSRC/包长边界测试通过;新增 `TestPacketGuardPreservesPCMAPayloadByteForByte` 通过 160-byte PT=8 fixture 的精确 payload/header 保真;`internal/contract.ValidateStaticArtifact` 覆盖 Schema、Cell/source/digest/revision、egress allowlist、必需 trunk 和重复 trunk 拒绝;临时 module `ari/v5.3.1` 已在固定 Asterisk `22.10.1` 隔离容器运行:内部 Stasis channel、mixing bridge、RTP/UDP PCMA ExternalMedia、`UNICASTRTP_LOCAL_ADDRESS/PORT`、`StasisEnd` 均通过;双 ExternalMedia 合成 RTP 经过 bridge 转发并验证 RTP v2/PT=8(证据:`docs/evidence/20260918-w09-ari-runtime.md`)。隔离 SIPp-to-PJSIP/ARI signaling 已通过(证据:`docs/evidence/20260918-w09-sip-ari.md`);进一步的 PJSIP/PJSUA2 mock leg 已通过真实 SIP RTP 双向 PCMA、U1/U2/U3 播放、端点 WAV 封口和 ARI 清理(证据:`docs/evidence/20260918-w09-sip-rtp-ari.md`)。另在 owner-authorized Debian ECS 通过现有 SIPp image 从固定 EIP 对 `61.132.228.221:5060`、`60.171.24.90:5060`、`160.202.254.79:5060` 各发一条 OPTIONS,均收到 `SIP/2.0 200 OK`(证据:`docs/evidence/20260918-ecs-sip-deployment.md`);这不证明 provider authorization、registration、caller-ID/dial-prefix 或真实媒体。另在 owner-authorized ECS 按用户选择对三条登记线路各发一条真实 INVITE:数企 `480 Temporarily Unavailable`、中鼎 `404 Not Found`、百应含 PCMA SDP 的 `183 Session Progress` 后无 `200 OK`,均未形成已接通对话(证据:`docs/evidence/20260918-real-sip-provider-calls.md`、`docs/evidence/20260919-real-sip-provider-calls-retry.md`)。后续允许窗口重试仍无最终 `200 OK`;2026-09-19 新 ECS 对两个白名单目标直连真实供应商,数企/百应仍无最终 `200`,中鼎第二目标一次信令达到 `200`,但 media probe 未干净完成,未验收 RTP/录音;用户即时确认后又对 provider-second 做了 1 次真实 direct-PJSIP 外呼,临时 PCAP 观察 8 个 SIP 包、0 个媒体包和 `100/200/404` token,原始 PCAP 已删除且未自动重试;证据:`docs/evidence/20260919-real-provider-ecs-direct.md`。这仍未证明供应商真实媒体、端到端生产 PCMA sample preservation、录音 retention/OSS handoff、重连、Agent 集成,`docs/evidence/20260919-sip-routing-implementation-comparison.md` 进一步记录父目录线路配置与 Go Agent 的注册/认证、From/PAI、前缀和选路边界;ARI 也未锁入生产 module。 | -| W11 OSS/录音 | **Alibaba OSS 本地/ECS通过 / 生产闭环阻塞** | W01 OSS control-plane Schema、受限 HTTPS grant 的 host/size/checksum/expiry/object-key/redirect 校验、Agent 直接 PUT client 和 upload metadata RPC handlers 通过;Dispatcher 使用 Alibaba 官方 OSS Go SDK v2,15分钟单次 grant,显式重新申请,源资产保留;本地及新 ECS mTLS gRPC→OSS 内网 endpoint 已完成 PUT/HEAD、SQLite completion、`recording.ready` outbox 和幂等验证(证据:`docs/evidence/20260920-local-oss-mq-integration.md`、`docs/evidence/20260920-new-ecs-preflight.md`);没有生产 SaaS application receipt、生产 broker ACL/TLS 和真实 provider-third 新录音闭环。 | +| W11 OSS/录音 | **Alibaba OSS 本地/ECS通过 / 生产闭环阻塞** | W01 OSS control-plane Schema、受限 HTTPS grant 的 host/size/checksum/expiry/object-key/redirect 校验、Agent 直接 PUT client 和 upload metadata RPC handlers 通过;Dispatcher 使用 Alibaba 官方 OSS Go SDK v2,15分钟单次 grant,显式重新申请,源资产保留;本地及新 ECS mTLS gRPC→OSS 内网 endpoint 已完成 PUT/HEAD、SQLite completion、`recording.ready` outbox 和幂等验证(证据:`docs/archive/evidence/20260920-local-oss-mq-integration.md`、`docs/evidence/20260920-new-ecs-preflight.md`);没有生产 SaaS application receipt、生产 broker ACL/TLS 和真实 provider-third 新录音闭环。 | | W12 事件/观测/故障 | **本地资源样本/事件部分通过** | command.result outbox/replay、8 种 strict event Schema/fixtures、`transcript.updated` archive/realtime builder、gopsutil 资源样本 freshness/unknown、contract-backed local flow、状态和本地检查有证据;新增 `internal/calllog` 的 HMAC `phone_ref`、掩码手机号和 allow-list JSONL 业务日志,覆盖执行/呼叫状态/终态/attempt/录音事实,验证原始号码不落盘,证据见 `docs/evidence/20260919-phone-call-business-log.md`;W12 定向 replay/outbox/no-originate-retry 证据见 `docs/evidence/20260918-w06-w12-local.md`;最新 race/vet/module/契约/Proto 回归通过;指标、应用收讫、整体补传和故障注入未闭合。 | W13-a 本地构建 | **本地通过 / 生产候选未冻结** | `make acceptance-local`:契约哈希、`go mod verify`、`go test -race ./...`、`go vet ./...`、`go build`、mock smoke 和 real-mode fail-closed 均通过;`make release` 生成带源脏状态、模块/二进制 SHA-256、Go版本和无凭据声明的本地 manifest;该 release 已复制到 ECS hash-named releases 目录并按 manifest 校验 binary/go.mod/go.sum,仍明确 `production_approval=false`;新增物理 Debian 13 systemd 上传包 `0.1.0-p1.20260919`,`deploys/install.sh` 在 owner-authorized ECS 完成 checksum/OS/权限和 `systemd-analyze verify` smoke,详见 `docs/evidence/20260919-physical-systemd-deployment.md`。 | | W13-b/P1 两 Cell | **物理单机安装 smoke / 两 Cell 真实阻塞** | 已有两套隔离 mock Cell 的 Agent session/permit/execute 测试;一台 Debian ECS 已创建、加固并完成当前候选二进制 Agent/Dispatcher mock 启动、隔离 RabbitMQ tenant consume→SQLite→outbox flush、Asterisk mock、三条 SIP endpoint OPTIONS 200 smoke,以及三条线路真实 INVITE 的非接通结果及后续允许窗口重试,证据:`docs/evidence/20260918-ecs-sip-deployment.md`、`docs/evidence/20260918-rabbitmq-integration.md`、`docs/evidence/20260918-real-sip-provider-calls.md`、`docs/evidence/20260919-real-sip-provider-calls-retry.md`、`docs/evidence/20260918-cloud-host-bootstrap.md`。仍没有物理两 Agent/两 Asterisk/三供应商真实媒体/真实双 AI/录音验收、生产镜像 digest、容量或 N+1 证据;初始账户失败保留在 `docs/evidence/20260918-aliyun-provisioning-blocker.md`。 | diff --git a/docs/evidence/20260918-g0-status.md b/docs/evidence/20260918-g0-status.md index 7e7c6cb..330000e 100644 --- a/docs/evidence/20260918-g0-status.md +++ b/docs/evidence/20260918-g0-status.md @@ -42,7 +42,7 @@ repository is `go-sip`; local release manifests preserve the historical fact. | D04 Unary/last permit | Generated `agent.v1` Unary service, TLS 1.3 mTLS/SAN checks, session fencing, CAS, SQLite reservation-to-Agent execution seam, unknown-result preservation, contract-backed local flow joining command/quota/Agent/event boundaries, owner-authorized ECS mock mTLS R01/R02→permit→Execute→accepted receipt smoke, and full `Dispatcher.ExecuteReserved` quota/command/reservation→mTLS Agent result with `task_status=running` | Approved business semantics/sign-off, cross-Cell final barrier, ARI submission boundary, real MQ application receipt, and fault-injection evidence | | D05 sessions/certificates | Peer/SAN validation, durable session-generation journal, old-generation fencing, boot/epoch tests, local trust-root rotation rejection; owner-authorized Debian ECS loopback-only smoke with disposable TLS1.3 CA/client/server certificates, pre-activation R01 `GetAgentStatus` + R02 session status, negative rejection of no-client/rogue-CA clients, project `internal/rpc.DialFromFiles` + `dispatcher.AgentCoordinator`, actual Dispatcher Cobra endpoint-inventory startup, same-host two-Agent/two-Cell session binding, configured Agent/Cell identity rejection, wrong-inventory `PermissionDenied`, restart-based CA root replacement with old-client rejection, same-boot Dispatcher generation 1→2 recovery, and Agent-side leaf fingerprint allowlist with same-CA unauthorized-client rejection | Physical two-Cell/cross-host process interop, fleet-wide endpoint-role rotation/revocation distribution, cross-host deployment certificate interop, and production health evidence; smoke record: `docs/evidence/20260918-w06-mtls-cloud.md` | | D06 static Cell artifact | Schema-first artifact validation, source/Cell/digest/revision/egress/trunk checks, real-mode startup path, activation rejection tests | Management approval matrix, unique deployment writer, actual Asterisk load evidence, and maintenance-window proof | -| D07 OSS handoff | HTTPS/host/redirect/size/checksum/expiry/object-key grant guards, 15-minute single-use grant policy with explicit re-request, upload binding/expiry completion checks, direct PUT and metadata RPC tests, source-asset retention after direct upload until verified handoff, Alibaba OSS SDK PUT/HEAD, durable completion, outbox and `recording.ready` closure (`docs/evidence/20260920-local-oss-mq-integration.md`, `docs/evidence/20260920-new-ecs-preflight.md`) | Production SaaS upload-session/complete/application receipt, production broker ACL/TLS, approved retention cleanup and current provider-third recording evidence | +| D07 OSS handoff | HTTPS/host/redirect/size/checksum/expiry/object-key grant guards, 15-minute single-use grant policy with explicit re-request, upload binding/expiry completion checks, direct PUT and metadata RPC tests, source-asset retention after direct upload until verified handoff, Alibaba OSS SDK PUT/HEAD, durable completion, outbox and `recording.ready` closure (`docs/archive/evidence/20260920-local-oss-mq-integration.md`, `docs/evidence/20260920-new-ecs-preflight.md`) | Production SaaS upload-session/complete/application receipt, production broker ACL/TLS, approved retention cleanup and current provider-third recording evidence | | D08 profile/recovery | SQLite quotas, leases, reservation finalization, file recovery/quarantine, gopsutil host/process sampling with media/AI dimensions explicit unknown, two mock Cell isolation, one hardened Debian ECS host smoke | Approved numeric budget/profile, backup/RPO/RTO and disk/clock/lease fault evidence; no two-Cell or production capacity evidence | | D09 independent contract package | Self-contained project-owned baseline, manifests, hashes, contract/proto checks, local release manifest | External source commit/release and reproducible clean isolated import/build sign-off | | D10 reuse/PoCs | Go module licenses (including gopsutil), `go mod verify`, clean `govulncheck`; isolated ARI, OpenAI, DashScope and Volcengine compile/protocol-mock records; fixed Asterisk 22.10.1 + temporary `ari/v5.3.1` runtime probes created Stasis channels, mixing bridges, PCMA ExternalMedia address/port/lifecycle, synthetic bridge forwarding, and a PJSIP/PJSUA2 mock leg with bidirectional PCMA and closed endpoint WAVs; owner-authorized ECS also recorded three non-connected provider INVITE outcomes | Lockable production versions, Asterisk/provider/OSS/broker compatibility, successful supplier/real media, recording retention/OSS/reconnect evidence, DashScope endpoint injection, Volcengine TTS speed/volume/pitch reachability, and O review/sign-off | diff --git a/docs/plan-0918.md b/docs/plan-0918.md index 4e89cd5..46ff374 100644 --- a/docs/plan-0918.md +++ b/docs/plan-0918.md @@ -242,7 +242,7 @@ go build ./... | W11 | 完成 | W01 OSS upload control-plane Schema、Agent 受限 grant 的 HTTPS/host/size/checksum/expiry/object-key/redirect 防护、直接 PUT client 和 upload metadata RPC handlers 已通过本地测试;Alibaba OSS SDK v2 presigned PUT、PUT、SHA-256、SQLite durable grant/completion、旧`recording.ready` outbox(已删除,当前为`recording.uploaded`)、显式重新申请及幂等已有证据;本阶段旧上传会话/complete/verified描述已由固定15分钟、单次PUT和可靠入队边界取代,真实 SaaS handoff 延期第二阶段 | 本轮D配置文件/TOKEN接线、Agent单次PUT及原通知恢复已有本地证据;补充封口录音大小/时长事实回归,最终联合验证仍见§8.2;不再实现SaaS会话/verified | | W12 | 完成 | 8种事件 strict Schema/fixtures、command.result outbox、`transcript.updated` builder、资源 freshness/unknown、invalid alias rejection 和 contract-backed local flow 已通过本地测试;`internal/calllog` 脱敏业务日志、统一 AgentControl listener、R11 fact durable 去重/冲突和 Dispatcher-owned aggregate version 已有专项证据;本阶段按契约结构、fixture、confirm/outbox 状态机和隔离 RabbitMQ 验收,生产 broker ACL/TLS/application receipt 延期第二阶段 | 实现MQ来源/关联和整体结果补传,移除HTTP与重投执行的旧补传路径,见§8.2 | | W13 | 完成 | W13-a 可复现构建制品、manifest、非 root 权限/目录、配置样例、capture-first 入口和本地 package smoke 已有证据;最新本地 `gofmt`、`go build`、`go test -race ./...`、`go vet ./...`、`go mod verify`、契约和 Proto 检查通过;本轮只需在本地/隔离单 Cell 注入重启、断连、证书、磁盘、额度和 OSS 故障,不要求 ECS 或第二 Cell | 依据新MQ合同更新候选配置/手册,重新验证消息及上传故障,见§8.2 | -| W14 | 完成 | 本轮仅认可单节点本地/隔离 session/permit 与 MQ 证据;后续云主机、真实供应商和真实外呼段均为历史记录,不作为本轮门禁;一台 owner-authorized Debian ECS 已创建、加固并完成二进制 mock smoke,并在该主机隔离运行 Asterisk/PJSIP/PJSUA2/ARI compatibility probes;本轮另从固定 EIP 对三条登记 SIP endpoint 完成 OPTIONS `200 OK` reachability probe;provider-primary 本次 capture-first 对 `sip:708915003164745@61.132.228.221:5060` 返回 `100/183/486 Busy Here`,provider-second 此前对 `sip:15003164745@60.171.24.90:5060` 返回 `100/404`;两次均有完整失败 PCAP,但未进入媒体;经本次当前会话确认,provider-third `160.202.254.79:5060` 对原始号码 `15003164745` 返回 `100/183/180/200`,完成约49秒三轮真实 AI 通话、3段入站+4段出站 PCM16/16k录音和双方文本事实;新 ECS 两白名单目标的直接真实供应商探针和物理 Asterisk bounded call 见 `docs/evidence/20260919-real-provider-ecs-direct.md`。新增 physical-host systemd package 安装 smoke,但其 manifest 仍为 dirty/non-production,未启动生产服务。仍没有批准生产 broker/SaaS application receipt、真实 provider-third 录音上传闭环、第二 Cell/第二 Asterisk 及完整 3 供应商真实证据(已移出本轮范围);Alibaba OSS grant/PUT/HEAD、15分钟单次 token/显式重新申请、durable completion 和 recording.ready outbox 已完成授权本地及新 ECS mTLS gRPC→OSS 实际上传验证;provider-third 的单 Cell SIP/RTP/AI/录音/文本成功仅为部分证据,隔离 ECS RabbitMQ candidate receipt 仅为部署证据。证据:`docs/evidence/20260918-cloud-host-bootstrap.md`、`docs/evidence/20260918-rabbitmq-integration.md`、`docs/evidence/20260918-real-sip-provider-calls.md`、`docs/evidence/20260919-real-sip-provider-calls-retry.md`、`docs/evidence/20260919-real-provider-callflow-attempts.json`、`docs/evidence/20260919-physical-systemd-deployment.md`、W09 evidence;2026-09-20 已按用户授权创建并加固 Debian 13 ECS `i-2zeew9pswry8sr33095l`,绑定固定 EIP `123.56.71.98`,安装 Asterisk/Go Agent;一次真实 provider-second 外呼曾观察到双向 RTP但 ASR 为空,新版三轮重试以 `cause=1` 在 StasisStart 前结束;capture-first v4 的 PJSIP logger 明确记录 provider-second 对 `sip:15003164745@60.171.24.90:5060` 返回 `100 Trying` 后 `404 Not Found`,但短事务 PCAP 为 header-only,entrypoint 已加入 drain,真实三轮/录音/双方文本/OSS/MQ 仍未闭合;部署与失败证据:`docs/evidence/20260918-cloud-host-bootstrap.md`、`docs/evidence/20260920-real-provider-second-15003164745.json`、`docs/evidence/20260920-real-provider-second-3turn-attempt.json`、`docs/evidence/20260920-real-provider-second-capture-first-v4.json`、`docs/evidence/20260920-real-provider-second-capture-first-v7-package.json`、`docs/evidence/20260920-real-provider-second-capture-first-v9.json`、`docs/evidence/20260920-real-provider-third-capture-first.json`、`docs/evidence/20260920-real-provider-primary-capture-first.json`、`docs/evidence/20260920-real-sip-attempt-ledger.json`、`docs/evidence/20260920-sip-attempt-guard.md`、`docs/evidence/20260920-acceptance-status.md`、`docs/evidence/20260920-real-cloud-inventory.md` | 重新执行MQ-only本地全流程及D1/D2路由fixture,旧验收不覆盖修订,见§8.2;真实联调仍另授权 | +| W14 | 完成 | 本轮仅认可单节点本地/隔离 session/permit 与 MQ 证据;后续云主机、真实供应商和真实外呼段均为历史记录,不作为本轮门禁;一台 owner-authorized Debian ECS 已创建、加固并完成二进制 mock smoke,并在该主机隔离运行 Asterisk/PJSIP/PJSUA2/ARI compatibility probes;本轮另从固定 EIP 对三条登记 SIP endpoint 完成 OPTIONS `200 OK` reachability probe;provider-primary 本次 capture-first 对 `sip:708915003164745@61.132.228.221:5060` 返回 `100/183/486 Busy Here`,provider-second 此前对 `sip:15003164745@60.171.24.90:5060` 返回 `100/404`;两次均有完整失败 PCAP,但未进入媒体;经本次当前会话确认,provider-third `160.202.254.79:5060` 对原始号码 `15003164745` 返回 `100/183/180/200`,完成约49秒三轮真实 AI 通话、3段入站+4段出站 PCM16/16k录音和双方文本事实;新 ECS 两白名单目标的直接真实供应商探针和物理 Asterisk bounded call 见 `docs/evidence/20260919-real-provider-ecs-direct.md`。新增 physical-host systemd package 安装 smoke,但其 manifest 仍为 dirty/non-production,未启动生产服务。仍没有批准生产 broker/SaaS application receipt、真实 provider-third 录音上传闭环、第二 Cell/第二 Asterisk 及完整 3 供应商真实证据(已移出本轮范围);Alibaba OSS grant/PUT/HEAD、15分钟单次 token/显式重新申请、durable completion 和 recording.ready outbox 已完成授权本地及新 ECS mTLS gRPC→OSS 实际上传验证;provider-third 的单 Cell SIP/RTP/AI/录音/文本成功仅为部分证据,隔离 ECS RabbitMQ candidate receipt 仅为部署证据。证据:`docs/evidence/20260918-cloud-host-bootstrap.md`、`docs/evidence/20260918-rabbitmq-integration.md`、`docs/evidence/20260918-real-sip-provider-calls.md`、`docs/evidence/20260919-real-sip-provider-calls-retry.md`、`docs/evidence/20260919-real-provider-callflow-attempts.json`、`docs/evidence/20260919-physical-systemd-deployment.md`、W09 evidence;2026-09-20 已按用户授权创建并加固 Debian 13 ECS `i-2zeew9pswry8sr33095l`,绑定固定 EIP `123.56.71.98`,安装 Asterisk/Go Agent;一次真实 provider-second 外呼曾观察到双向 RTP但 ASR 为空,新版三轮重试以 `cause=1` 在 StasisStart 前结束;capture-first v4 的 PJSIP logger 明确记录 provider-second 对 `sip:15003164745@60.171.24.90:5060` 返回 `100 Trying` 后 `404 Not Found`,但短事务 PCAP 为 header-only,entrypoint 已加入 drain,真实三轮/录音/双方文本/OSS/MQ 仍未闭合;部署与失败证据:`docs/evidence/20260918-cloud-host-bootstrap.md`、`docs/evidence/20260920-real-provider-second-15003164745.json`、`docs/evidence/20260920-real-provider-second-3turn-attempt.json`、`docs/evidence/20260920-real-provider-second-capture-first-v4.json`、`docs/evidence/20260920-real-provider-second-capture-first-v7-package.json`、`docs/evidence/20260920-real-provider-second-capture-first-v9.json`、`docs/evidence/20260920-real-provider-third-capture-first.json`、`docs/evidence/20260920-real-provider-primary-capture-first.json`、`docs/evidence/20260920-real-sip-attempt-ledger.json`、`docs/evidence/20260920-sip-attempt-guard.md`、`docs/archive/evidence/20260920-acceptance-status.md`、`docs/evidence/20260920-real-cloud-inventory.md` | 重新执行MQ-only本地全流程及D1/D2路由fixture,旧验收不覆盖修订,见§8.2;真实联调仍另授权 | | W15 | 完成 | 生产切换、真实唯一写入权交接和未知执行回迁不属于本轮;本地恢复/回滚和唯一写入规则已按适用范围验收,生产切换延期第二阶段 | 保留 scope amendment 和本地恢复证据;第二阶段另行授权 | | W16 | 完成 | 双租户公平、第二 Cell 汇总和真实 broker 背压/DLQ不在本轮开发或验收范围;已有单租户有界窗口/SQLite恢复测试,范围修订已记录 | 第二阶段另行安排;本轮不开放第二真实租户,不作为 P1 阻塞 | @@ -269,8 +269,8 @@ go build ./... | W11 / 完成 | D配置文件、固定15分钟授权、原请求/显式新请求、单次PUT及recording.uploaded恢复已有本地证据,见`20260921-mq-upload-progress.md` | 不等待SaaS verified/OSS ID;不宣称SaaS消费 | | W13/W14 / 完成 | 本地/隔离联合MQ、D1/D2隔离、断连/不可路由/confirm/DLQ/重启/覆盖率和acceptance已通过;`deploys/cell/nonprod-call-evidence.sh --preflight-only`已实际执行并因当前主机缺Asterisk/tcpdump且非root而fail-closed,未将其记为mixed/real通过 | 本地门禁已解除;物理部署诊断具备相应主机条件后另行执行,不得用本地Mock代替mixed/real诊断 | -当前负责人为本会话Agent,用户明确要求不启动子Agent。实现前基线已完成,见[基线证据](evidence/20260921-mq-only-adjustment-baseline.md);v2方向及AI JCS摘要已获确认,本地v3契约和主要MQ实现已有新增证据。W01/W02/W05/W07/W08/W11/W12的项目内门禁已按§8.2关闭;W04项目内门禁和W13/W14本地/隔离门禁已关闭;外部权威签收及物理部署诊断需具备相应外部条件后另行执行,不属于本地MQ-only目标的完成条件。旧通过数和`20260920-local-p1-acceptance.md`不覆盖新修订。 +当前负责人为本会话Agent,用户明确要求不启动子Agent。实现前基线已完成,见[基线证据](archive/evidence/20260921-mq-only-adjustment-baseline.md);v2方向及AI JCS摘要已获确认,本地v3契约和主要MQ实现已有新增证据。W01/W02/W05/W07/W08/W11/W12的项目内门禁已按§8.2关闭;W04项目内门禁和W13/W14本地/隔离门禁已关闭;外部权威签收及物理部署诊断需具备相应外部条件后另行执行,不属于本地MQ-only目标的完成条件。旧通过数和`docs/archive/evidence/20260920-local-p1-acceptance.md`不覆盖新修订。 -**历史本地结果:**修订前W01–W14 的项目内单节点/单 Cell/单租户适用范围曾由本地回归、契约/fixture、隔离故障矩阵和 `20260920-local-p1-acceptance.md` 签收;本轮受影响项以§8.2当前的完成结论为准:本地MQ-only门禁已完成;外部权威签收及物理诊断另行执行。W15生产切换、真实 SaaS/MQ receipt、真实供应商/ECS、双节点/第二 Cell/双租户、容量/N+1属于第二阶段,不阻塞本轮,也不能被本地证据反写成生产已完成。生产服务未来仍须使用 `deploys/` 的 Debian 13/systemd 包,真实外呼继续遵守逐次确认、capture-first、白名单、09:00–20:00 Asia/Shanghai 和每日额度规则。 +**历史本地结果:**修订前W01–W14 的项目内单节点/单 Cell/单租户适用范围曾由本地回归、契约/fixture、隔离故障矩阵和 `docs/archive/evidence/20260920-local-p1-acceptance.md` 签收;本轮受影响项以§8.2当前的完成结论为准:本地MQ-only门禁已完成;外部权威签收及物理诊断另行执行。W15生产切换、真实 SaaS/MQ receipt、真实供应商/ECS、双节点/第二 Cell/双租户、容量/N+1属于第二阶段,不阻塞本轮,也不能被本地证据反写成生产已完成。生产服务未来仍须使用 `deploys/` 的 Debian 13/systemd 包,真实外呼继续遵守逐次确认、capture-first、白名单、09:00–20:00 Asia/Shanghai 和每日额度规则。 后续每次完成任务时按负责人和证据规则更新本节、实际运行说明及证据;只有需求变化才修改§4/阶段范围并注明用户确认,不能用更新进度掩盖变更。