Files
Agent-System/.doc/ops/research/2026-09-19-pre-test-promotion-review.md
weichenandCursor 62ce2781ae docs(ops): record pre-test promotion readiness review
Capture the read-only check that planned capabilities are wired, while dev is not ready to merge into test until the container is rebuilt and the remaining gates run.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-19 08:36:58 +00:00

10 KiB
Raw Permalink Blame History

title, created, updated, status, confidence
title created updated status confidence
dev→test 晋升前复核:功能权限、合并可行性、已知缺陷 2026-09-19 2026-09-19 done high

调研:dev→test 晋升前复核

只读复核。不改业务代码、不 rebuild 容器、不合入 test/main、不修复 medium/low backlog。

结论

  1. 规划内的功能、权限与流程已按声明范围接入。 FEATURE-MATRIX 主表里,除明确标成 partial / deferred 的行以外,其余能力均为 done,并有测试报告或 commit 证据。没有发现「规划了但完全未实现」的模块。未完成项是主动延后,且 gap-matrix 已判定不挡首发。
  2. dev 的静态质量达标,但现在不建议直接合并入 test。 go vet 与 go test -short 全绿,2026-09-19 深度审计的 critical/high 已合入 dev。合并前仍缺三件事:dev 容器 rebuild 冒烟、治理 PG 集成与前端构建、批 2 越权负例的自动化覆盖。
  3. critical/high 已关闭;medium/low 仍在,且本轮不修。 新发现的观察项是文档漂移和 test 分支上 9 个晋升提交,不是新的代码缺陷。

一、功能、权限、流程

对照 FEATURE-MATRIX(更新 2026-09-19)与 gap-matrix(production_ready=yes,门禁 B1–B4 已签)。

已关闭(声明范围内 done)

能力 接入情况
意图识别 L1、多意图 U1–U8、多意图扩面 U9–U12 代码与报告齐全;MULTI_INTENT_PLAN_TIER 仍为 legacy,未默认升 confirm/full
对话 / ctxmgr、语义摘要 D3、PI change-report 叙事 刷新恢复门禁已签;摘要与叙事 flag 默认 off,REPLACE 未启用
工作流治理 三正式工作流、动作级鉴权、真实 PI E2E
文档治理、文档版本 baseline 法定生命周期、租约、受控正文、运行时 UI
IAM / 鉴权 项目级 API + RBAC;路由清单见 authorization-matrix-v3
前端工作台、PI Runner、三环境运维、CI/E2E、Artifact 同 digest、可靠事件核心、系统管理台 各自行有报告;系统管理台二期(Playwright、细粒度 system:*、设置审计)不在本行关闭条件内
文档编制人兼任(U1–U6) 已合入 dev;总开关默认 off

2026-09-19 审计批 2 已把鉴权缺口接到主链:H1 给 dev/test legacy 兜底加了告警(未删除兜底)、H2 批注/认领 actor 取 principal 且读类端点校验项目成员、H3 会话查询跨用户 403、H4 登录限流、H8 compose 口令改为必填。证据:批 2 报告。

明确未完成(不是遗漏)

行 状态 剩余 是否挡首发
研发设计控制(rdev) partial S2/S3、P2 前端、P3 三样本 E2E、P4 键名空间化 否
纯软件项目自举 partial SWBOOT-10 仍 fail-closed stub 否
Final Artifact Vault partial live 未放量;禁止整支 merge;FAV_DEGRADED_READ=false 否
对话数据治理(D7) deferred pending-compliance-signoff;禁止按口径物理删除 否(违规则才升 blocker)
首次加载性能 partial(矩阵外专项) U2 已验收;U1/U3–U7 未做 否

红线与代码/compose 对齐(深度审计已核实,本轮未再改 flag):MULTI_INTENT_PLAN_TIER=legacy、SEMANTIC_SUMMARY_REPLACE 未接线、FAV_DEGRADED_READ=false、SWBOOT-10 fail-closed stub、项目 143 只读。

二、dev 能否合入 test

判断:静态门禁通过,运行态与回归门禁未补齐,暂不合并。

已满足

  • dev 工作树在复核时干净;dev HEAD 为 66421b1(含审计批 1–4:844f757、08f4e0b、a2a49a6、d73bc79)。
  • go vet ./... 零告警。
  • go test -short ./... 全包 PASS(internal/server 本轮实测约 14s,非缓存)。
  • 三环境 GET /api/v1/health 均为 status=ok、schema_version=52、schema_ready=true。goose 最新文件为 00052。迁移版本本身不阻塞晋升。
  • internal/、cmd/ 生产代码中无 TODO/FIXME/XXX。

合并前必须处理

  1. dev 容器仍是旧二进制。 批 1–3 报告写明未执行 ./scripts/env-service.sh dev rebuild。:8080 健康只证明旧镜像在跑,不能证明审计修复已部署。按 AGENTS.md §6.3,合入共享环境前要占集成槽位并冒烟。
  2. dev 领先 test 225 个 commit。 差异覆盖 rdev 模板、系统管理台、docgov 加固、Control Center 移除等。-short 不够。晋升前至少再跑:TEST_DATABASE_URL 下治理 PG 集成,以及 cd web && npm test && npm run build。
  3. 批 2 的越权负例仍是人工兜底。 批 2 报告 写明:非项目成员访问 docgov 应 403 的 HTTP/Playwright 负例未补,目前靠既有鉴权测试不回退加 code review。

test 上多出来的 9 个提交

git rev-list --count dev..test = 9。这些提交是历次 release-candidate / 晋升文档同步(含 rc-v1.0.0-beta.2 至 beta.4),不是 dev 上缺失的产品代码。下次晋升应把 dev merge 进 test,不要把 test reset 到 dev,否则这 9 个提交的晋升记录会丢。

CURRENT.md 文首仍写 test schema_version=48,同文「环境快照」表与本次 health 实测已是 52。这是文档漂移,不是运行时缺陷。更正留给下次晋升文档,本笔记不改那一行。

三、缺陷

已修复(2026-09-19 深度审计 critical/high)

来源:系统深度体检。四批均已合入 dev。

批 项 merge
1 数据一致性 C1 docgov 吞错与 fencing 读回;C2 Session 竞态与跨项目污染;C4 计划保存事务与 completed_by;H10 请求 ctx 844f757
2 鉴权 H1–H4、H8、M8 08f4e0b
3 SSE/事件 C3 心跳与写超时;H5 任务 SSE 幂等;H6 stale fencing 日志;H7 迁移注释(历史 SQL 不能补 down) a2a49a6
4 前端 H9 占位符 XSS;未读回滚;Excel 预览上限 d73bc79

H1 的 legacy user-id=1 兜底只加了日志,删除仍在 backlog(H1-del)。H7 的 00001–00009 无 down 不能改已应用文件,只加了注释。

已知未修(维持 backlog,本轮不启动)

清单 SSOT:2026-09-19-audit-remainder.md。均为 medium/low,不回写 gap-matrix。

ID 项
M1 缺 nosniff / X-Frame-Options / Referrer-Policy,CSP 未收敛
M2 租约 TTL 无上限;Acquire 前未校验编辑权
M3 关键词改写意图;硬编码「张工」
M4 u_sess_* 解析失败得到 UserID=0
M5 Runtime.Start 双调用且吞错
M6 sessions 无硬上限
M7 修订三阶段写无事务
M9 SEMANTIC_SUMMARY_REPLACE 只在 dev compose 声明;dev/test 默认模型不一致
M10 cutover 只允许 dev
M13 deploy/postgres/migrations/ 与 goose 重复
M14 ResolveDocTask 静默 0 值三权
M15 PG 投递允许乱序,MemoryBus 有 gap
L1 health 每次两次 DB
L2 SSE marshal 错误被吞
L3 ReplayPlan digest 不含 DryRun
H1-del 删除 legacy user-id=1 兜底前须盘点调用方
FE App.tsx 巨石、localStorage 无版本、lucide 来源待确认

M8(测试 flag 名 FAV_PUBLISHER_ENABLE 少一个 D)已在批 2 修复,不在上表。M11/M12 的未读回滚与 Excel 行数上限已在批 4 处理;批 4 报告写明浏览器端到端未覆盖这两条,单测已钉住 XSS 主路径。

本轮新观察(不单独立项)

  • 文首 schema 数字与实测不一致,见第二节。
  • test 独有 9 个晋升提交,合并时用 merge,不要 reset。

证据

复核时间:2026-09-19。工作区当时在 docs/audit-remediation-backlog(树与 dev@66421b1 一致),随后本笔记落在 docs/pre-test-promotion-review。

项 路径/命令 结果
工作树 git status clean
dev 领先 test git rev-list --count test..dev 225
test 领先 dev git rev-list --count dev..test 9(晋升/文档提交)
静态检查 go vet ./... 零告警,exit 0
短测 go test -short ./... 全包 PASS;internal/server 14.044s
dev health curl -s http://127.0.0.1:8080/api/v1/health env=dev schema_version=52 status=ok
test health curl -s http://127.0.0.1:8081/api/v1/health env=test schema_version=52 status=ok
main health curl -s http://127.0.0.1:8000/api/v1/health env=main schema_version=52 status=ok
迁移文件 deploy/postgres/goose/ 52 个 SQL,最新 00052_2026-09-17-document-duty-locked.sql
worktree git worktree list 主仓 + dev-rdev-merge + feature-initial-load-performance-plan + fix-dev-runtime-data-root-guard(检出 feature/final-artifact-vault)
待办标记 grep TODO|FIXME|XXX 于 internal/ cmd/(排除 _test.go) 0
容器 docker ps dev/test/main app+events+pi-agent 均为 healthy;dev app 已运行约 5 小时,早于批 1–4 合入后的 rebuild(未做)

开放问题

  • dev 与 test/main 默认模型不一致(M2.7-highspeed vs M3)是否刻意?深度审计已记,本轮无新证据。
  • deploy/postgres/migrations/ 是否仍有外部工具依赖?无则再归档(M13)。
  • H2/H3 越权负例补到哪一层才算晋升门禁:HTTP 集成即可,还是必须 Playwright?

建议动作

按顺序,全部另开任务,不在本笔记内执行:

  1. 占集成槽位,./scripts/env-service.sh dev rebuild,curl -sf http://127.0.0.1:8080/health(或 /api/v1/health)确认 schema 52 且二进制含批 1–4。
  2. TEST_DATABASE_URL 下跑治理 PG 集成;cd web && npm test && npm run build。
  3. 为 H2/H3 补至少一条跨用户/非成员 403 负例。
  4. 通过后再把 dev merge 入 test(保留 test 上 9 个晋升提交),打 rc tag,并顺手更正 CURRENT.md 文首的 test schema 表述。