# M71 · DEV-6 服务/回执验证计划 > 权威:`GOAL_ABG_MVP_QUALITY.md` + AGENTS.md。前置:M68/DEV-6R UI 迁移、M70 清理。 > Owner 指示(2026-09-14):"先不打包,先做 3",随后确认开 DEV-6 玩法/服务。 ## Player-visible stopping point 解雇、合同返回、装备购买的**服务层语义**(回执、幂等、冲突、锁定、余额/库存/成长保持) 由 `runtime/tests/dev6/*` 规格测试证明通过;全部规格测试与采集/安全测试在**单一 1280×720** 下 green,且现行全部严格门不受影响。 ## Measured facts (2026-09-14) - `guild_contract_service.gd` 已含 `create_contract` / `hire_recruit` / `purchase_equipment` / `dismiss_recruit` / `return_contract`(含 `operation_id`/`intent_hash`/`receipt_hash` 幂等与冲突码)。 - dev6 三个规格测试此前失败的真因是**测试卫生**:固定帧等待 + 旧多尺寸(844×390/EXPAND) → 触摸落空 → 后续断言读空对象崩溃;并非服务缺失。 - 采集/安全测试(4 个)同样带旧尺寸 fixture 与过期 marker 文本。 ## Ordered steps 1. **M71-A**:**COMPLETE (2026-09-14)**。:dev6 七个测试收敛到单尺寸 + 条件等待(`_wait_for_node` 含布局稳定帧); 过期 marker 文本改为真实矩阵。规格语义不改。 2. **M71-B**:**COMPLETE (2026-09-14)**,attempt `m71-dev6` `20260914T095702Z-52977`。源绑定验证(dev6 七个 + 现行全部严格门 + 入口/全流程)。 3. **M71-C**:**COMPLETE (2026-09-14)**。结清 `M65-I04`/`M68-I02`(回执链路已实现并验证),更新账本/checkpoint,推送。 ## Acceptance checks - `ABG_DEV6_ROSTER_OK`、`ABG_DEV6_RETURN_OK`、`ABG_DEV6_GROWTH_OK`、 `ABG_M45_CONTRACT_RETURN_SAFETY_OK`、`ABG_M16_COMPANY_CAPTURE_OK`、 `ABG_M45_CONTRACT_RETURN_CAPTURE_OK`、`ABG_DEV6_CAPTURE_OK` 各恰好一次 - 现行门(m63/m53/m54/m52/m55/m66/m67/m68)与入口/全流程 marker 全部保持恰好一次 - 无修改服务语义(只改测试;如暴露真缺陷则修产品并记录) ## Frozen scope - 不改玩法数值、经济公式、存档结构;不加新系统。 - 不重做页面视觉;单尺寸 1280×720。 ## M71 结果(2026-09-14) - **DEV-6 服务层早已实现且语义完整**:`purchase_equipment` / `dismiss_recruit` / `return_contract` 具备操作 ID、意图哈希、回执哈希、幂等重试、冲突拒绝、阵型锁、余额/库存/成长保持。 - 三个规格测试此前失败的真因是**测试卫生**(固定帧触摸 + 旧 844×390):触摸落空 → 断言读空对象。 收敛为单尺寸 + `_wait_for_node`(含 2 帧布局稳定)后全部通过,且**未改任何服务语义**。 - 采集/安全测试(4 个)同步收敛;过期 marker 文本改为真实矩阵(`matrix=1280x720`)。 - 七个 dev6 测试 + 现行门(入口 22 / 委托 2 / 市场 6 / 适配器)+ DEV2 全流程全部 green, 11 个 required marker 各恰好 1 次、strict 0。 ## Issue register | ID | 状态 | 内容 | | --- | --- | --- | | `M71-I01` | RESOLVED | 三个规格测试的失败真因 = 固定帧触摸 + 旧尺寸;服务层无缺失 | | `M71-I02` | RESOLVED | 采集测试 marker 文本中的旧矩阵字符串(本轮已改为 1280×720 真实值) |