# 执行进度记录 > 只追加的历史流水:每轮做了什么、跑了什么验证、遇到什么阻塞、做了什么决策。 > 当前目录/命令/下一步等可覆盖快照写 [`docs/current-state.md`](docs/current-state.md),不在本文重复。 > 任务状态以 [`tasks.md`](tasks.md) 为准。 ## 记录格式 ```markdown ## YYYY-MM-DD T-编号 任务名(或事件名) - 状态:DONE / BLOCKED / PARTIAL - 变更:改了哪些文件或模块 - 验证:运行的真实命令和结果 - 阻塞:如有,写明原因和需要谁决策 - 决策:如有,记录本轮确定的关键取舍 - 下一步:建议下一个任务 ID 或待确认事项 ``` ## 执行记录 ## 2026-05~06 设计文档集初始化(pre-code) - 状态:DONE - 变更:`docs/01~06` 设计文档集、`CLAUDE.md`、`.gitignore`(源材料不入库)。详见 `git log 3498542..1fd2569`。 - 决策:扁平目录布局对齐 chis_upload;OSI 为无状态 MD5 签名接口,不引入旧项目逆向复杂度;幂等键用 checkId。 ## 2026-07-06 JKDA00002 联调打通 + 文档校准 - 状态:DONE - 变更:`scripts/query_health_record.py`(本地,不入库)打通真实查询;据实测样本校准 `docs/01`(成功码/信封/机构码分层/坑点坐实)、`docs/04`(新增 §8 实测契约)、`docs/06`(A1~A9/B3/B6/C3/D2/D3 回填)。 - 验证:沙箱真实请求返回 `code="01" message="操作成功"`,`data` 为档案聚合数组;脚本离线自检(编译 + 信封 + 判码逻辑)通过。 - 决策:**成功码为 `"01"` 非 docx 所示 `"1"`**,判定按去前导零;**查询也走 `uploadinfo` 信封**;请求头 `orgCode` 用 18 位统一社会信用代码(9 位码是 `manaUnitId`,两者不可混用)。 - 阻塞:`tests/test_query_health_record.py` 测的是旧脚本 API,已失效(import 报错)→ 登记为 T-000。 - 下一步:T-000,然后 T-001 起步阶段 0。 ## 2026-07-06 接入 harness coding 文档工件 - 状态:DONE - 变更:新建 `tasks.md`(看板)、`progress.md`(本文)、`docs/current-state.md`(快照)、`init.sh`(统一验证入口)、`AGENTS.md`(通用 agent 薄入口);更新 `CLAUDE.md` 会话启动流程与文档同步表、`docs/README.md` 导航、`docs/05` 成功码勘误。 - 决策:任务看板放根目录 `tasks.md`;现有 `docs/01~06` 设计文档不重命名不重排;模板可选增强集(rubric/quality/method-map)暂不引入。 - 下一步:T-000。 ## 2026-07-06 T-000 处理失效测试 - 状态:DONE - 变更:删除 `tests/`(`test_query_health_record.py` 及 `__pycache__`)——文件从未被 git 跟踪,无需 `git rm`。 - 验证:`git status --short` 确认删除前后均无该目录的跟踪历史;删除后工作区干净。 - 决策:不改写为新契约的最小测试,直接删除——脚本是硬编码的本地联调工具(不入库),暂不需要自动化测试覆盖。 - 下一步:T-001,进入路线图阶段 0(go module + 双子命令骨架)。 ## 2026-07-06 T-001 初始化 Go module 与双子命令骨架 - 状态:DONE - 变更:新增 `go.mod`/`go.sum`、`main.go`、`main_test.go`、`config/config.go`、`config/config_test.go`、`config.yaml.example`;`tasks.md` 标记 T-001 完成;`docs/05` 勾选阶段 0 第一项。 - 验证:`go test ./...` 通过;`go build ./...` 通过;`go run . -mode server -config config.yaml.example` 输出 `chis_osi mode=server`;`go run . -mode deliver -config config.yaml.example` 输出 `chis_osi mode=deliver`。 - 验证补充:`bash init.sh` 在当前 Windows 环境失败,系统提示未安装 WSL;已用等价 Go 命令完成验收。 - 决策:Go module 使用本地模块名 `chis_osi`;`main.go` 只打印 mode,不打印配置值,避免泄露真实环境信息;`config.yaml.example` 只保留占位值。 - 下一步:T-002(`osi/sign.go` MD5 头签名 + 单测)。 ## 2026-07-06 T-002 MD5 头签名 - 状态:DONE - 变更:新增 `osi/sign.go` 与 `osi/sign_test.go`;`BuildHeaders` 组装 OSI 必需请求头,`SignPassword` 按 `md5("ts=&ask=")` 输出 32 位小写;`tasks.md` 标记 T-002 完成;`docs/05` 勾选阶段 0 第二项。 - 验证:先运行 `go test ./osi` 看到缺少 `SignPassword`/`BuildHeaders`/`HeaderInput` 的预期失败;实现后 `go test ./osi` 通过;`go test ./...` 通过;`go build ./...` 通过。 - 决策:固定测试向量 `ts=1700000000123&ask=secret-key -> 008aceff8247cb42d2a99b2c48d0ac88` 来自 Python `hashlib.md5(...).hexdigest()`,用于对齐本地联调脚本签名算法;`ask` 只参与签名,不进入 headers。 - 下一步:T-003(`osi/transport.go` 传输层,保留 SOCKS5/超时)。 ## 2026-07-06 看板重排(查询先行) - 状态:DONE(规划调整,无代码) - 变更:`tasks.md` 把 Phase 1(字典)/Phase 2(档案) 重排为 Phase Q(查询)→M(映射)→D(字典+创建);`osi/jkda.go` 拆为 T-203(Find/FindRqbj) 与 T-206(Create/Update);`docs/05` 加执行顺序注记。任务 ID 不变。 - 决策:查询档案(Find)不依赖字典,映射纯函数单测只需码表+注入假字典快照,只有真实创建闭环才需 T-101/T-103 字典反查——故把字典接口降到创建之前、查询之后。顺带把"Create 依赖字典缓存"从隐性依赖显式化到 T-206。 - 下一步:仍是 T-003(Phase 0 未变),Phase 0 完成后按 Q→M→D 领取。