diff --git a/docs/current-state.md b/docs/current-state.md index a0eb961..59c6cd0 100644 --- a/docs/current-state.md +++ b/docs/current-state.md @@ -28,9 +28,10 @@ 凭据保护、SQLite append-only 恢复状态图、Global named mutex 与 durable gateway。真机能力尚待最终人工 验收,数量/确认页/提交仍未开放。 - 测试:采购服务已覆盖登录、建单、授权、详情/证据、设备身份、迁移、原子 claim/renew 与竞态; - 采购工具 189 项离线单元测试(全部 mock,不连接真机)。 + 采购工具 192 项离线单元测试(全部 mock,不连接真机)。 - 数据:受保护迁移已落到 `00005_task_claims.sql`。旧两趟模型已移除;开始采购会锁定任务快照并签发 - 一次性授权,领取会创建唯一 attempt/claim、HMAC claim token 与有界租约。仓库不含业务实例数据。 + 一次性授权,领取会创建唯一 attempt/claim、HMAC claim token 与有界租约。T-211 已统一 title、SKU、 + goods_id 与金额的双端 wire 上限,并证明最坏合法 claim 响应小于 32 KiB。仓库不含业务实例数据。 - 标准启动路径:Windows PowerShell 运行 `./init.ps1`,Unix shell 运行 `./init.sh`。Windows 入口 优先使用合规的既有 venv;仅在其缺失时才从 Python Launcher 已安装版本中选择最高的 Python 3.11+, 并且不覆盖低版本环境;成功后打印真实启动命令。 @@ -53,7 +54,7 @@ | 路径 | 状态 | 说明 | | --- | --- | --- | | `docs/` | 已有 | 项目规范化文档,本次已完整生成 | -| `docs/tasks/` | 已有(含 T-001~T-111、T-201~T-210、T-301~T-308、T-400~T-405) | T-302 已完成;T-103 等最终真机验收;双端围栏、真实提交、调和、打包与只读验收均已落成任务 | +| `docs/tasks/` | 已有(含 T-001~T-111、T-201~T-211、T-301~T-308、T-400~T-405) | T-303、T-211 已完成;T-103 等最终真机验收;双端围栏、真实提交、调和、打包与只读验收均已落成任务 | | `docs/design/` | 已有(6 个原型) | web 登录 / 建单 / 工作台 / 详情,desk 采购执行 / 配置;均已人工确认 | | `scripts/` | 已有 | 上下文门禁、Vikunja 单向导出与 MCP 启动包装 | | `admin/` | 已初始化 | Go 1.23+ / gin / SQLite,含建单/授权/详情/证据/设备身份与原子 claim/renew;不执行真机动作 | @@ -81,6 +82,8 @@ T-304/T-306/T-307/T-308,再与 T-305 汇合到 T-400 离线一次性提交安全编排。围栏后管理链为 T-403 → T-402;T-401 必须在新的真实单趟重新 通过三闸门,首次点击后固定进入 `UNKNOWN`/人工调和,T-405 打包后由 T-404 只读验收。 +- T-211 已完成 claim wire 字段上限闭合:创建、授权、candidate、持久化快照、重放、HTTP 输出和 + 客户端解析使用同一合法域;单侧畸形历史数据失败闭合且不写 EMPTY,最坏合法响应严格小于 32 KiB。 - 已确认原型继续只作信息架构依据;原型假数据不调用真实接口、不驱动真机。真机结论改变 可读字段时必须先回修原型与交互清单。 diff --git a/docs/tasks/T-211.md b/docs/tasks/T-211.md index e461b7c..b46c456 100644 --- a/docs/tasks/T-211.md +++ b/docs/tasks/T-211.md @@ -3,7 +3,7 @@ id: T-211 title: claim wire 输出字段上限闭合 phase: 2 deps: [T-203, T-302, T-303] -status: DOING +status: DONE created: 2026-08-05 vikunja_task_id: 55 context_ref: cfb238d @@ -13,6 +13,7 @@ needs_human_review: false write_paths: - docs/tasks/T-211.md - docs/api.md + - docs/current-state.md - admin/internal/tasks/** - admin/internal/taskclaim/** - admin/internal/server/task_claims.go @@ -22,7 +23,7 @@ write_paths: - client/tests/remote/** --- - + ## 问题 / 背景 claim 成功响应受 32 KiB 总 body 上限保护,但创建、授权快照、candidate 和重放链路尚未统一约束各自由文本字段,客户端也未冻结同一单字段合法域。异常或历史超长值可能让合法业务事实变成不可传输响应。 @@ -73,6 +74,10 @@ claim 成功响应受 32 KiB 总 body 上限保护,但创建、授权快照、 ### 2026-08-04T17:38:44Z · ila 2026-08-05 审阅修复:统一 Go/Python 持久化文本域,客户端使用 Go Unicode White_Space 固定集,两端均拒绝任意位置 U+001C--U+001F,并补 NBSP/C0 回归。候选查询不再用 SQL 相等条件静默过滤:先读取 task 与 authorization 两侧快照并分别验证,单侧畸形立即回滚且不写 EMPTY/attempt;两侧均合法但不一致才按既有语义跳过。最坏合法 JSON 也覆盖 int64 版本编码上界。 + +### 2026-08-04T17:48:38Z · ila + +2026-08-05 completion verification: main-agent review PASS; independent adversarial audit PASS; fixed SHA `f6cd65208db5f35155946a7855773ee56e7a9d65`; client 192 tests PASS; `go test -count=1 ./...` PASS; `go vet ./...` PASS; repository-root `init.ps1` PASS. ## 边界