Admin 尚未完成,Client 需要先有稳定的 Admin 边界和可测试 Mock,供后续任务协调器开发。当前不能让业务代码直接依赖 HTTP 字典,也不能臆造状态查询、租约或心跳接口。
AdminGateway
MockAdminGateway
unittest
client/src
dataclass
ABC
claim_next(client, capabilities)
AdminTask
None
submit_result(task_id, idempotency_key, result)
submit_failure(...)
code
retryable
预计修改:
client/src/admin_gateway.py
client/src/mock_admin_gateway.py
client/test/test_admin_gateway_contract.py
IDEMPOTENCY_CONFLICT
git diff --check
从 client/ 执行:
client/
C:/Python310/python.exe -m py_compile src/admin_gateway.py src/mock_admin_gateway.py test/test_admin_gateway_contract.py C:/Python310/python.exe -m unittest discover -s test -p "test_*.py" -v
状态:进行中。先实现无网络依赖的 Gateway 边界与 Mock 契约;HTTP、UI 轮询和 SQLite/Outbox 接入后续拆单。
验证:全量 33 项 unittest 通过,语法检查和 git diff --check 通过。离屏 Qt 字体目录警告不影响结果。
实现提交:c412e8a。归档提交:11f9d91。本地归档:docs/task/10-定义-admin-gateway-并实现-mock-契约.md。
c412e8a
11f9d91
docs/task/10-定义-admin-gateway-并实现-mock-契约.md
工单保持打开,等待用户验收。
需求变更记录:用户提出新增 Admin 心跳接口,用于保存当前设备后登记/更新 Client。该扩展已拆为 #11;待 Admin 接口文档确认后,再更新 Gateway 基线与实现。#10 当前仍等待用户验收。
最终决策:不增加心跳;由 #12 新增无任务副作用的幂等登记接口,后续 #11 会把 AdminGateway 从三个任务方法扩展为“登记 + 三个任务方法”。#10 记录其完成时的三方法基线,扩展由后续工单负责。
在 WSL + Python 3.10 下实际执行:
admin_gateway.py
mock_admin_gateway.py
关键测试与验收标准一一对应,包括三条最容易写错的:
test_cancelled_task_still_accepts_result_and_failure
test_same_idempotency_key_with_different_content_conflicts
test_unclaimed_task_submission_is_rejected
工单正文写“AdminGateway 抽象,只有领取、提交结果、提交失败三个方法”, 实际为四个——多了 register_client。
register_client
该方法由 #11 / #12 引入的独立登记接口带来,是本工单之后的既定变更; 测试也已同步为 test_gateway_has_only_four_business_methods。
test_gateway_has_only_four_business_methods
是工单正文过时,不是实现偏差。 据此关闭。
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
Admin 尚未完成,Client 需要先有稳定的 Admin 边界和可测试 Mock,供后续任务协调器开发。当前不能让业务代码直接依赖 HTTP 字典,也不能臆造状态查询、租约或心跳接口。
做什么 / 不做什么
AdminGateway抽象,只有领取、提交结果、提交失败三个方法;MockAdminGateway;unittest编写契约测试。怎么做
client/src扁平结构,数据对象使用dataclass,Gateway 使用ABC。claim_next(client, capabilities)返回一个AdminTask或None。submit_result(task_id, idempotency_key, result)与submit_failure(...)返回提交确认对象。code和retryable的 Gateway 异常。预计修改:
client/src/admin_gateway.pyclient/src/mock_admin_gateway.pyclient/test/test_admin_gateway_contract.py验收标准
None;IDEMPOTENCY_CONFLICT;git diff --check通过。怎么验证
从
client/执行:状态:进行中。先实现无网络依赖的 Gateway 边界与 Mock 契约;HTTP、UI 轮询和 SQLite/Outbox 接入后续拆单。
实施完成,等待用户验收
AdminGateway;验证:全量 33 项 unittest 通过,语法检查和
git diff --check通过。离屏 Qt 字体目录警告不影响结果。实现提交:
c412e8a。归档提交:11f9d91。本地归档:docs/task/10-定义-admin-gateway-并实现-mock-契约.md。工单保持打开,等待用户验收。
需求变更记录:用户提出新增 Admin 心跳接口,用于保存当前设备后登记/更新 Client。该扩展已拆为 #11;待 Admin 接口文档确认后,再更新 Gateway 基线与实现。#10 当前仍等待用户验收。
最终决策:不增加心跳;由 #12 新增无任务副作用的幂等登记接口,后续 #11 会把 AdminGateway 从三个任务方法扩展为“登记 + 三个任务方法”。#10 记录其完成时的三方法基线,扩展由后续工单负责。
验收核查(独立实跑,非采信勾选)
在 WSL + Python 3.10 下实际执行:
admin_gateway.py164 行 /mock_admin_gateway.py319 行 / 契约测试 252 行关键测试与验收标准一一对应,包括三条最容易写错的:
test_cancelled_task_still_accepts_result_and_failuretest_same_idempotency_key_with_different_content_conflictstest_unclaimed_task_submission_is_rejected一处与工单正文不符(非缺陷)
工单正文写“
AdminGateway抽象,只有领取、提交结果、提交失败三个方法”,实际为四个——多了
register_client。该方法由 #11 / #12 引入的独立登记接口带来,是本工单之后的既定变更;
测试也已同步为
test_gateway_has_only_four_business_methods。是工单正文过时,不是实现偏差。 据此关闭。