← 返回周目标完成情况

目标一任务3后端交接

日期:2026-10-13(Asia/Shanghai)。AIC-2915。任务4可开始。后端/API/fake与生成客户端已交付;AIC-2915保持in_progress,浏览器与三层覆盖须随任务4补齐,不声明完整验收通过。

工作树与授权边界

依据:当前范围与接口、实施与验证决定。

已交付能力与API

  1. 五张执行表及0014迁移:登记、执行、轮次、消息、项目事实;所有者/版本校验、活动执行和活动轮次唯一约束、出网前幂等小回执及预存messageId。带业务数据拒绝降级。
  2. 匹配、明确逐任务派单、用户直接续话、取消/查回、明确失败重试及本人兜底。未知发送不重发;有效租约不允许查回抢占;迟到worker仅补同一活动轮次一致编号,不推进业务状态。
  3. 冻结任务书、项目摘要白名单、登记能力/通道/费用政策、已验上游fact id/version。模板positioning/topic_planning;旧任务缺能力或模板不猜测。DispatchIn可选file_ids只发送用户明确选择的本人项目附件。
  4. 三类fenced JSON、格式问题、逐版交付历史、私有CS附件;网络下载/上传离开数据库事务,回写前再验权限/令牌。签名查询参数从可见文本和嵌套输出移除,原文仅内部轮次留证。合法CRLF换行已纳回归。
  5. 用户接受/退回有精确result_revision和幂等保护;仅接受时原子写事实,下游冻结来源。summary包含未执行任务,counts按任务去重,不代替项目全部待办。

代码入口:apps/api/app/executors/{router,schemas,service,stream,queries,delivery,states,models}.py;说明见apps/api/app/executors/README.md。迁移:apps/api/alembic/versions/0014_project_executions.py。文件公开接缝:apps/api/app/files/service.py。

接口均在/me/projects/{project_id}下:任务的executors/executions/self-executions,执行的详情/messages/deliveries/reconcile/cancel/retry/review/result,项目级execution-summary。GET不暗中外发。SSE的done仅表示请求结束;review专指用户验收。未启用真实适配器按规格503,未知身份409,越权项目/执行404。

生成物:apps/api/openapi.json;apps/web/src/lib/api/的SDK/type/zod;apps/web/src/test/handlers.gen.ts;apps/api/apifox/cases/executors/的本地单接口模板(补齐task_id/execution_id变量,未发布到Apifox)。

测试隔离与启动

独立fake:在apps/api执行uv run --no-sync python -m tests.fake_a2a --port 8893。该服务自身不读开发.env、不出网,提供A2A、BTS和仅本地测试控制接口。测试app须显式override router.local_fake_access,真实NdclawClient/BTS指向回环服务、凭据取fake包测试常量;参考apps/api/tests/executions_support.py。Fake登录本身不能打开生产专家权限。

复跑入口:python3 .artifacts/task3/run.py <label> <相对仓库cwd> <命令...>。只继承基础环境、固定.env.test、清真实模型/云配置,使用假BTS凭据;Python socket仅Unix/回环,未记录非回环尝试。定向覆盖按label独立COVERAGE_FILE。集成用Docker临时Postgres;全量用独立venture-task3-check(Postgres15433/Redis16380),不复用或重启真实配置进程。未运行ndclaw_smoke,未申请/唤醒/删除远端实例。

常用命令:

python3 .artifacts/task3/run.py api-unit . make unit-api
python3 .artifacts/task3/run.py api-bdd apps/api uv run --frozen pytest tests/acceptance/test_专家执行.py -q
python3 .artifacts/task3/run.py tcp-a2a apps/api uv run --frozen pytest tests/integration/test_ndclaw_http.py -q

已取得证据

范围 实际结果 证据
后端全量单元(最后修复后) 2453通过,行/分支100% .artifacts/task3/final-unit.log及JSON
前端全量单元 168文件、1807通过,四项覆盖100% 第二次check的unit-web日志/归档
全部真库集成/API验收 899通过 第二次check的integration日志/归档;后续新增补差另列,不混写为934全量
契约/静态 lint-api、mypy、24条import边界、253契约、Spectral通过;前端lint/type/构建通过;客户端再生成一致 final-static-fixes.log、last-client.log,二次check
工具Python 785通过、18个既有skip,行/分支100%;AC唯一性lint通过 final-tools.log、final-ac-lint.log
完整make mutation exit0,后端81.3%、前端96.3%,前端存活复核完成,source_changed=false 下列mutation原始run;后端补断言后另重跑
执行域最终联合集成 139通过,1305语句、304分支均100%,含35条API BDD实例 integration-final-100.log、integration-final-100-coverage.json;独立覆盖数据文件
最终后端变异 83.2%,10938检测/13140总数;评分exit0 最终执行与补导出记录见下文
新场景 AC-149~172:24组拆35实例,API BDD定点通过;浏览器未绑定 apps/acceptance/团团派单给外部专家.feature、tests/acceptance/test_专家执行.py

完整记录目录(均在.artifacts/testing/goal1-task3/):

后续仅API与测试/登记发生变化,前端源码与完成mutation的指纹逐文件相同(web-mutation-source-match.json),不重复前端变异;最终后端变异与联合集成另列,不把不同轮次包装为同一次全量通过。

注意:生成摘要集成计210只统计BDD cucumber产物,完整pytest日志为899。生成摘要测试变更0只比较已提交HEAD;本轮未提交,实际变更见.artifacts/task3/working-changes.json与record源码指纹。不能据摘要的0声称没有新增测试。

验证修复与已知限制

失败回流资产:短事务与验证隔离复盘。原有6份任务1/6.1文档SHA保持,见preserved-documents.json;主检出其他修改未动。

任务4必须接续

最终收口