Memory CAS iterated memoryRefs map (random order) while PG path uses ORDER BY id ASC; asset dedup-hint 'first reference unflagged' logic depends on stable order. Flaky TestUploadProjectAsset_DedupHint reproduced 2/20 rounds before fix, green 30/30 after.
5.3 KiB
5.3 KiB
title, task_id, status, created, updated, owner, task_type, task_tier, policy_revision, branch, worktree, base_dev_sha, write_scope, allowed_environments, head_sha, mutex, review_state, integration_state, deployment, cleanup, cleanup_owner, cleanup_trigger, remote_sync
| title | task_id | status | created | updated | owner | task_type | task_tier | policy_revision | branch | worktree | base_dev_sha | write_scope | allowed_environments | head_sha | mutex | review_state | integration_state | deployment | cleanup | cleanup_owner | cleanup_trigger | remote_sync | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| P7: Server 镜像字段增量收口 | server-image-field-closeout-r3-2026-09-25 | in_progress | 2026-09-25 | 2026-09-25 | cursor-auto | implementation | small | agent-governance-2026-09-21-r1 | feature/server-image-field-closeout-2026-09-25 | .worktrees/server-image-field-closeout-2026-09-25 | 44161d2ad2 |
|
module-decoupling-spec | pending | pending | not_required | pending | independent maintainer after owner exit | acceptance green + optional owner exit | not_requested |
P7: Server 镜像字段增量收口
用户目标与授权
- 用户目标:
/goal 把这些任务都进行规划,并推进至完成→ 总控 P7 批次。 - 来源:MATRIX
module-batches-ag行尾注「Server 镜像字段增量收口另立任务」;batch A 残留债务表「gov等镜像字段:迁完用例前保留镜像」。 - 交付终点:删除
Server全部 Runtime 镜像字段、短测+race 绿、arch-check PASS、可合入 dev。 - 禁止项:不 push;不改 HTTP 状态码语义;不动 FAV live / production_ready。
开工检索
matrix|镜像字段|module-batches-ag→ ISSUES 无命中;lessons INDEX 无命中。- 采纳检查:全仓 grep(镜像字段访问
s.X穷举 485 处)+ 基线 race 复测(临时 worktree 对照)。
实施内容
- 删除
Server24 个 Runtime 镜像字段(svc/pwSvc/rec/engine/authSvc/taskRuns/authorizer/authzSvc/wfDefSvc/instSvc/notifySvc/resolver/wsCap/cmds/stageflow/gov/rev/ctxMgr/cas/freeDoc/kb/sysadmin/maintenance及 stop 通道),NewFromRuntime装配行同步删除。 - 新增
internal/server/runtime_accessors.go:同名 nil 安全访问器(s.gov()→s.rt.Gov),集中承接领域服务访问;测试注入走serverTestOverrides+setOverride*setter(显式 nil 经authorizerNil/instSvcNil位标记支持 fail-closed 用例)。 - 574 处调用点机械替换
s.X/srv.X→s.X()/srv.X()(脚本 + 编译核对)。 - 附带修复(既有债务撞车):
Shutdown与 4 个后台循环(sweeper/publisher/reminder/wsGC)对 stop 通道的 DATA RACE——dev 基线44161d2a复测同样失败(chat_turn_sweeper.go:21vsserver.go:471)。新增backgroundLoop(mutex +sync.Once通道),通道只在 loop goroutine 内创建持有,Shutdown经stop()通知。- goose 00071 版本号冲突:
1da17a28dialogue 合并同时带入两个00071_*(maintenance-windows、context-conflict-adjudications),goose sort panic 阻塞全仓go test。dev 库(agent_system_dev@5433)已应用至 00070、两个 00071 均未应用 →context-conflict-adjudications.sql重编号00072,零数据迁移。 ListProjectRefs内存模式排序缺失:map 迭代顺序随机令「同 SHA 首条引用不标 dedup」判定不稳定(TestUploadProjectAsset_DedupHint20 轮 2 失败复现)。内存路径补sort.Slice(by ID)与 PGORDER BY id ASC对齐,修复后 30 连跑全绿。
task_finalize_test.go改用newMinimalRuntime(仅测试所需字段的app.Runtime)。
非目标
- 迁移 handler 到
internal/app用例层(batch-plan 原愿景):本批完成镜像字段删除后,app.Runtime已是唯一服务持有者,后续用例迁移不再受镜像字段干扰。 supplementImpact字段保留:本包接口类型非 Runtime 镜像。intentPlans测试 override 经intentPlansOverride字段(setter 语义无法用访问器表达)。
验证与证据
| 范围 / 被测 SHA | 命令与环境 | 预期 | 实际 / 判定 | 证据 |
|---|---|---|---|---|
| server 包短测 | go test -short -count=1 ./internal/server/ |
PASS | PASS(19.9s) | 本机 Linux |
| server 包 race | go test -race -short -count=1 ./internal/server/ |
PASS | PASS(232s,含既有 race 修复后) | 基线 44161d2a 同用例 FAIL(DATA RACE)已复测留证 |
| 相邻包 | go test -short ./internal/app/... ./internal/chat/... ./internal/intent/... |
PASS | PASS 全 12 包 | |
| 全仓 short | go test -short -count=1 ./... |
PASS | PASS(含 goose 00072 修复后 bizdev-cli) | 基线因 00071 重复 panic |
| 架构门禁 | ./scripts/arch-check.sh --mode block |
PASS | PASS | |
| 工程工具 | python3 -B -m unittest discover -s scripts/tests |
PASS | PASS 234 tests |
收口与交接
- 本地提交 / 待 validate + integrate 合入 dev / 不部署 / 不 push。
- 详见测试报告:2026-09-25-p7-server-image-field-closeout-test-report.md