chore(tasks): include T-211 claim handler boundary

This commit is contained in:
QiuSW
2026-08-05 01:18:23 +08:00
parent 63c2c59b41
commit 57a5b2e91c
+10 -2
View File
@@ -15,13 +15,14 @@ write_paths:
- docs/api.md - docs/api.md
- admin/internal/tasks/** - admin/internal/tasks/**
- admin/internal/taskclaim/** - admin/internal/taskclaim/**
- admin/internal/server/task_claims.go
- admin/internal/server/task_claims_test.go - admin/internal/server/task_claims_test.go
- client/src/cmbuyer_client/core/** - client/src/cmbuyer_client/core/**
- client/tests/core/** - client/tests/core/**
- client/tests/remote/** - client/tests/remote/**
--- ---
<!-- BEGIN VIKUNJA EXPORT id=55 synced=2026-08-04T17:11:09Z sha256=c50ecf831dbc2fefaba320386dfa4ed4f6e2e2a07a1cc1f2a309a776dcc08e56 --> <!-- BEGIN VIKUNJA EXPORT id=55 synced=2026-08-04T17:18:14Z sha256=a96dc25e291e2ce904f3f78554e2354d450342d164601740c005d240c4d33c30 -->
## 问题 / 背景 ## 问题 / 背景
claim 成功响应受 32 KiB 总 body 上限保护,但创建、授权快照、candidate 和重放链路尚未统一约束各自由文本字段,客户端也未冻结同一单字段合法域。异常或历史超长值可能让合法业务事实变成不可传输响应。 claim 成功响应受 32 KiB 总 body 上限保护,但创建、授权快照、candidate 和重放链路尚未统一约束各自由文本字段,客户端也未冻结同一单字段合法域。异常或历史超长值可能让合法业务事实变成不可传输响应。
@@ -40,6 +41,7 @@ claim 成功响应受 32 KiB 总 body 上限保护,但创建、授权快照、
3. 在创建、开始采购授权快照、claim candidate、持久化响应与幂等重放边界逐层 fail closed;不迁移、不截断或改写既有数据。 3. 在创建、开始采购授权快照、claim candidate、持久化响应与幂等重放边界逐层 fail closed;不迁移、不截断或改写既有数据。
4. 客户端 wire model 使用相同边界,漂移响应按协议错误拒绝。 4. 客户端 wire model 使用相同边界,漂移响应按协议错误拒绝。
5. 增加最坏合法字段的 claim JSON 契约测试,明确编码后小于既有 32 KiB 响应上限。 5. 增加最坏合法字段的 claim JSON 契约测试,明确编码后小于既有 32 KiB 响应上限。
6. HTTP claim handler 在序列化前重验完整 service 响应并保持 32 KiB 上限;因此将精确文件 admin/internal/server/task_claims.go 纳入写路径,不扩大到其他 server 文件。
## 验收要点 ## 验收要点
@@ -47,6 +49,7 @@ claim 成功响应受 32 KiB 总 body 上限保护,但创建、授权快照、
- 创建、授权、candidate、首次 claim 与重放均覆盖畸形既有数据并失败闭合。 - 创建、授权、candidate、首次 claim 与重放均覆盖畸形既有数据并失败闭合。
- 客户端 title/SKU/goods_id/money 与服务端同界。 - 客户端 title/SKU/goods_id/money 与服务端同界。
- 最坏合法 claim JSON 明确小于 32768 字节,保持现有 HTTP body cap。 - 最坏合法 claim JSON 明确小于 32768 字节,保持现有 HTTP body cap。
- handler 拒绝越界或畸形 service 输出,且不泄露响应内容。
- 两端完整测试、vet/build、compileall、根 init、上下文与 diff-check 通过。 - 两端完整测试、vet/build、compileall、根 init、上下文与 diff-check 通过。
## 执行记录 ## 执行记录
@@ -58,6 +61,10 @@ claim 成功响应受 32 KiB 总 body 上限保护,但创建、授权快照、
### 2026-08-04T17:11:07Z · ila ### 2026-08-04T17:11:07Z · ila
2026-08-05 主脑预审收紧:Go 必须先 utf8.ValidString,再按既有 TrimSpace 后实际持久化值计算 code point;start/authorization 遇既有畸形 task 原子失败,claim replay 重验持久化响应快照;不增加迁移。 2026-08-05 主脑预审收紧:Go 必须先 utf8.ValidString,再按既有 TrimSpace 后实际持久化值计算 code point;start/authorization 遇既有畸形 task 原子失败,claim replay 重验持久化响应快照;不增加迁移。
### 2026-08-04T17:18:04Z · ila
2026-08-05 实现范围收紧:HTTP handler 是 service 输出的最后边界,已获总控批准将精确文件 admin/internal/server/task_claims.go 纳入 write_paths;handler 序列化前重验 claim response 与 32 KiB 上限,不扩大到其他 server 文件。
<!-- END VIKUNJA EXPORT --> <!-- END VIKUNJA EXPORT -->
## 边界 ## 边界
@@ -73,7 +80,8 @@ claim 成功响应受 32 KiB 总 body 上限保护,但创建、授权快照、
start/authorization 遇到既有畸形 task 必须原子失败,claim replay 还必须重新校验持久化响应快照。 start/authorization 遇到既有畸形 task 必须原子失败,claim replay 还必须重新校验持久化响应快照。
任一层发现超限或畸形既有数据都失败闭合,不迁移、不截断、不覆盖或修复历史行。 任一层发现超限或畸形既有数据都失败闭合,不迁移、不截断、不覆盖或修复历史行。
- claim 成功响应继续受既有 32 KiB HTTP body 上限约束;最坏合法字段组合的编码结果必须由契约测试 - claim 成功响应继续受既有 32 KiB HTTP body 上限约束;最坏合法字段组合的编码结果必须由契约测试
明确证明小于该上限,不得调高响应上限掩盖无界字段。 明确证明小于该上限。HTTP handler 在序列化前重验完整 claim response,并拒绝任何越界 service
输出;不得调高响应上限掩盖无界字段。
- 客户端 claim wire model 与服务端使用完全相同的上限;未知、缺失、超限或格式漂移响应必须拒绝, - 客户端 claim wire model 与服务端使用完全相同的上限;未知、缺失、超限或格式漂移响应必须拒绝,
不得静默接受后再截断入库。 不得静默接受后再截断入库。
- 本任务不修改数据库迁移或 schema,不连接设备,不改变授权、身份、租约、幂等、int64、金额或安全 - 本任务不修改数据库迁移或 schema,不连接设备,不改变授权、身份、租约、幂等、int64、金额或安全