refactor: remove obsolete business paths

This commit is contained in:
2026-09-23 00:17:09 +08:00
parent ab5ef5a19b
commit d78c301658
166 changed files with 88 additions and 16159 deletions
+2 -2
View File
@@ -166,7 +166,7 @@ Dispatcher 从已校验的 `call.execute` 构造 binding;Agent 回报不能改
响应:`ResponseMeta`、`state`、`runtime_configs[]`、`UploadPolicy`:
- `ConfigReference`:`kind`、`version`、`sha256`、`source`;
- `UploadPolicy`:`enabled`、`max_asset_bytes`、`min_retention_ms`、`allowed_hosts[]`。
- `UploadPolicy`:`enabled`、`max_asset_bytes`、`allowed_hosts[]`。
当前 Dispatcher 启动绑定流程只执行 status + activate,没有调用 bootstrap。
@@ -284,7 +284,7 @@ Dispatcher 侧额外要求:
- 同upload ID、同operation ID及原请求正文返回原grant,包括原到期时间;绑定或正文不同返回冲突;
- 重新签发必须使用显式新请求身份,保持原资产及对象绑定;不因原请求重放自动续期,不向SaaS申请TOKEN。
新请求当前返回 `UPLOAD_STATE_REQUESTED`;持久层状态为 `granted`。`UPLOADING` 枚举存在,但当前 Dispatcher handler 不把 Agent 的 PUT 过程映射为该状态。
新请求当前返回 `UPLOAD_STATE_REQUESTED`;持久层状态为 `granted`。上传通知可靠入队后返回 `UPLOAD_STATE_COMPLETED`,失败返回 `UPLOAD_STATE_FAILED`。
目标流程为 **D 依据自身配置文件向 A 提供临时上传 TOKEN,不向 SaaS 申请 OSS 配置/TOKEN**。D 侧配置缺失/无效时明确失败,不切换配置源;长期凭据不交给 A,不写入示例、日志或证据。当前TOKEN形态为官方SDK生成的受限预签名PUT信息,映射到UploadGrant;它不是OSS原生强制一次性凭据,Agent通过持久尝试状态保证每次授权尝试最多一次PUT。
+3 -3
View File
@@ -143,7 +143,7 @@ P1 仍只运行一个单活 Dispatcher。现在必须在合同及本地路由测
}
```
源枚举为 `command.result`、`call.status`、`transcript.updated`、`call.finished`、`recording.ready`、`recording.failed`、`transcript.failed`、`contact.opt_out`。它们不自动覆盖新增的配置/查询/上传响应消息。
源枚举为 `command.result`、`call.status`、`transcript.updated`、`call.finished`、`recording.uploaded`、`recording.failed`、`transcript.failed`、`contact.opt_out`。它们不自动覆盖新增的配置/查询/上传响应消息。
事件同时通过 `mq.schema.json` 和 `event-payloads.schema.json`;`EventBuilder` 拒绝未知字段。旧实现由 SQLite 按 `aggregate_type + aggregate_id` 递增版本,Agent 不能指定版本;新基线仍须验证租户/Dispatcher 归属,不将旧实现等同完整隔离。
@@ -171,12 +171,12 @@ P1 仍只运行一个单活 Dispatcher。现在必须在合同及本地路由测
| `call.status` | `call_id`, `execution_id`, `call_state`, `call_version`, `attempt_id`, `attempt_state` |
| `transcript.updated` | `call_id`, `turn_id`, `segment_id`, `role`, `revision`, `text`, `is_final`, `start_ms`, `end_ms`, `playback_state` |
| `call.finished` | `call_id`, `execution_id`, `call_version`, `outcome`, `started_at`, `ended_at`, `duration_ms`, `reason_code` |
| `recording.ready` | `call_id`, `recording_id`, `oss_id`, `format`, `channels`, `sample_rate_hz`, `duration_ms`, `size_bytes`, `checksum_sha256` |
| `recording.uploaded` | `call_id`, `recording_id`, `upload_id`, `bucket`, `object_key`, `format`, `channels`, `sample_rate_hz`, `duration_ms`, `size_bytes`, `checksum_sha256` |
| `recording.failed` | `call_id`, `recording_id`, `stage`, `reason_code`, `retryable` |
| `transcript.failed` | `call_id`, `reason_code`, `retryable` |
| `contact.opt_out` | `call_id`, `task_id`, `task_item_id`, `requested_at` |
v2已用`recording.uploaded`取代本项目的`recording.ready`;不得返回虚构OSS ID或等待SaaS verified。新字段与可靠入队边界见§6.1,旧表不作为v2校验依据。
`recording.uploaded`只表示上传事实已可靠进入指定持久队列,不表示SaaS已消费或处理;字段与可靠入队边界见§6.1。
### 4.4 Outbox 交付
+1 -1
View File
@@ -6,7 +6,7 @@
| 门禁 | 本地结果 | 证据/未决项 |
| --- | --- | --- |
| G0 / W01 契约发布 | **本地通过 / 外部阻塞** | 项目内 `contracts/archive/upstream/2026-09-18-p1-baseline` 已完成严格事件/双模式 AI/授权/OSS/静态制品/profile Schema、正反例与哈希;明确继承 dirty source 且非外部权威,真实预算/授权仍未签收。 |
| G0 / W01 契约发布 | **本地通过 / 外部阻塞** | 项目内早期 W01 契约快照已完成严格事件/双模式 AI/授权/OSS/静态制品/profile Schema、正反例与哈希;该历史快照已从当前工作树移除,明确继承 dirty source 且非外部权威,真实预算/授权仍未签收。 |
| W02 Unary Proto/会话 | **本地通过 / 集成待验证** | `agent.v1.AgentControlService` Proto、生成 stubs、`proto/ERRORS.md`、Buf manifest 和生成/handler 测试通过;Dispatcher/Agent部署级运行会话仍需联测。 |
| W03-a 工具链/依赖 | **本地通过** | `go.mod` Go 1.27.1、Cobra 双子命令、`go mod verify`、依赖许可证清单和 `govulncheck@v1.7.0` 无漏洞扫描;ARI/LLM/ASR/TTS 隔离 API/协议 Mock PoC 已记录,正式锁版和真实供应商仍未验收。 |
| W03-c SQLite/MQ PoC | **本地通过 / 外部未验收** | inbox、幂等、outbox、publisher-confirm 边界、租户队列/版本化 exchange、lease、配额和控制 CAS 有 race 单测;`make mq-integration-local` 以 disposable RabbitMQ 4.1.8 验证 adapter confirm/ACK/permanent reject→DLQ/consumer cancellation,并验证 Dispatcher tenant consume→SQLite inbox/task/outbox→event publish;当前候选二进制另在 owner-authorized ECS 通过隔离 RabbitMQ 完成 `routed=true`、`inbox=1/task=1/outbox=1`,再由候选 Dispatcher flush 为 `task_status=accepted/outbox_status=published`(证据:`docs/evidence/20260918-rabbitmq-integration.md`);SaaS 侧使用版本化 contract/fixture Mock,边界记录在 `docs/evidence/20260919-local-saas-contract-mock.md`;没有批准 broker 版本/ACL/崩溃注入/SaaS application receipt。 |
@@ -2,7 +2,7 @@
The user selected **provide formal W01/W02 artifacts and continue**. The only
new candidate found in the parent worktree was copied read-only into
`contracts/archive/upstream/2026-09-17-snapshot/` and verified against its recorded
the pre-v1 contract snapshot from the repository history and verified against its recorded
file hashes.
It is not yet a formal release:
+1 -1
View File
@@ -49,7 +49,7 @@ repository is `go-sip`; local release manifests preserve the historical fact.
## References
- Project baseline: `contracts/archive/upstream/2026-09-18-p1-baseline/`
- Project baseline: the historical pre-v1 contract snapshot (removed from the current work tree)
- Local evidence: `docs/evidence/20260918-local-development.json`
- W05 SQLite restart evidence: `docs/evidence/20260918-w05-restart.md`
- W06/W12 targeted local evidence: `docs/evidence/20260918-w06-w12-local.md`
@@ -3,7 +3,7 @@
"scope": "go-sip local development only",
"working_tree": "dirty-project-worktree",
"source_contract": {
"active_bundle": "contracts/archive/upstream/2026-09-18-p1-baseline",
"active_bundle": "contracts/upstream/v1",
"release_kind": "project-owned-development-baseline",
"external_authority": false,
"source_bundle": "2026-09-17-snapshot",
+2 -2
View File
@@ -22,7 +22,7 @@
需求依据顺序:
1. 当前适用的用户确认和 [项目约束](../AGENTS.md)。已确认方向不重复索要审批;缺失字段、预算及偏离方案的变更不能自行补成“已批准”。
2. 外部字段/路径/状态在外部权威闭包可用时来自上游版本化契约包;早期项目内 W01 基线已归档至 `contracts/archive/upstream/2026-09-18-p1-baseline`,当前代码只使用项目内唯一的 `contracts/upstream/v1` 契约包;未发生契约迁移前不新增或合并契约。内部接口来自项目内 `agent.v1` Proto;不能将未进入当前契约包的说明文字当作 Schema。
2. 外部字段/路径/状态在外部权威闭包可用时来自上游版本化契约包;早期项目内 W01 基线不再属于当前工作树,当前代码只使用项目内唯一的 `contracts/upstream/v1` 契约包;未发生契约迁移前不新增或合并契约。内部接口来自项目内 `agent.v1` Proto;不能将未进入当前契约包的说明文字当作 Schema。
3. [G0确认方案](G0开发准备与契约冻结提案_v0.1.md)记录最新确认和待交付门禁;总体、通信、组件和验收文档补充实施细则。
4. 本计划只编排任务和阅读入口。若发现来源冲突,列明两个出处并暂停受影响部分;不得用计划、旧实现或 SDK 默认值覆盖权威合同。
@@ -32,7 +32,7 @@
2. **每个 Dispatcher 有全局唯一、不重复的 ID 和独立接收 Topic/队列**。消息必须定向到指定 D,响应回原 D,来源可追溯;不能多个 D 共用一条队列竞争消费或广播后过滤。Dispatcher 身份不等于 tenant/Agent/Cell ID 或 `dispatcher_epoch`,租户独立队列与原值 `tenant_key` 仍保留。
3. 精确 ID 生成/持久化/重复身份处理、Topic/队列/绑定命名、信封关联/错误/超时以及新 routing key 的完整字节预算须由 W01 冻结;方向已经确认,但不能自行往严格旧 Schema 加字段。P1仍是单活 D,D1/D2 路由隔离只作本地契约/消息 fixture,不新增多 D 调度、HA、共享额度或生产资源。
4. **D↔A 仍为 Unary,A→OSS 仍直传**。MQ-only 不禁止 OSS/ARI/供应商 HTTP(S) 或 gRPC HTTP/2。OSS 配置由 D 配置文件提供,临时 TOKEN 由 D 向 A 提供,不再由 SaaS 下发;保留 D 签发能力。R12 提供原请求绑定的临时授权;R13 持久保存上传事实及原通知身份,并以指定队列可靠入队作为本项目完成条件。不等待 SaaS 处理,也不把本地 outbox 写入等同 MQ 入队。
5. 旧 AI GET、控制/查询/补传 HTTP 和上传 HTTP 方案被本修订替代;`contracts/upstream/v1/` 是当前代码唯一使用的项目内 V1 合同包;未使用的旧快照和 OpenAPI 已移至 `contracts/archive/upstream/`,不能在包外另造兼容合同或绕过其哈希。未发生契约迁移前不新增或合并契约;禁止先实现猜测消息再补合同。
5. 旧 AI GET、控制/查询/补传 HTTP 和上传 HTTP 方案被本修订替代;`contracts/upstream/v1/` 是当前代码唯一使用的项目内 V1 合同包;未使用的旧快照和 OpenAPI 不属于当前工作树,不能在包外另造兼容合同或绕过其哈希。未发生契约迁移前不新增或合并契约;禁止先实现猜测消息再补合同。
6. 文档修订阶段已结束;当前目标已获批准实施本项目契约、代码、配置和测试,由当前Agent独立执行,不启动子Agent。已确认细节见[MQ-only V1冻结方案](contracts/mq-only-v1-freeze-proposal.md),不重开已批准方向;仍不访问真实SaaS/供应商/云/拨号,本地隔离broker可用于合同测试。文档或局部代码完成不关闭§8.2联合门禁。
目标语义见 R8,当前内部实现事实与差异见 R9,完整 MQ 目标时序见 R10。R1–R6 或历史证据中与本修订冲突的旧传输、路由及通过结论,不得继续作为新接入依据;只读来源包的变更必须走新版本发布。