Files
Agent-System/.doc/ops/short-term/2026-09-25-server-image-field-closeout.md
T
weichen 0634ffb8ee fix(storage): deterministic ID ordering in memory-mode ListProjectRefs
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.
2026-09-25 13:17:25 +00:00

5.3 KiB
Raw Blame History

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
internal/server/
internal/app/
internal/storage/
deploy/postgres/goose/
.doc/ops/short-term/
.doc/test-reports/
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 对照)。

实施内容

  1. 删除 Server 24 个 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 装配行同步删除。
  2. 新增 internal/server/runtime_accessors.go:同名 nil 安全访问器(s.gov() → s.rt.Gov),集中承接领域服务访问;测试注入走 serverTestOverrides + setOverride* setter(显式 nil 经 authorizerNil/instSvcNil 位标记支持 fail-closed 用例)。
  3. 574 处调用点机械替换 s.X/srv.X → s.X()/srv.X()(脚本 + 编译核对)。
  4. 附带修复(既有债务撞车):
    • Shutdown 与 4 个后台循环(sweeper/publisher/reminder/wsGC)对 stop 通道的 DATA RACE——dev 基线 44161d2a 复测同样失败(chat_turn_sweeper.go:21 vs server.go:471)。新增 backgroundLoop(mutex + sync.Once 通道),通道只在 loop goroutine 内创建持有,Shutdown 经 stop() 通知。
    • goose 00071 版本号冲突:1da17a28 dialogue 合并同时带入两个 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_DedupHint 20 轮 2 失败复现)。内存路径补 sort.Slice(by ID) 与 PG ORDER BY id ASC 对齐,修复后 30 连跑全绿。
  5. 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

收口与交接

相关链接