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>
10 KiB
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。
结论
- 规划内的功能、权限与流程已按声明范围接入。 FEATURE-MATRIX 主表里,除明确标成
partial/deferred的行以外,其余能力均为done,并有测试报告或 commit 证据。没有发现「规划了但完全未实现」的模块。未完成项是主动延后,且 gap-matrix 已判定不挡首发。 dev的静态质量达标,但现在不建议直接合并入test。go vet与go test -short全绿,2026-09-19 深度审计的 critical/high 已合入dev。合并前仍缺三件事:dev 容器 rebuild 冒烟、治理 PG 集成与前端构建、批 2 越权负例的自动化覆盖。- 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工作树在复核时干净;devHEAD 为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。
合并前必须处理
- dev 容器仍是旧二进制。 批 1–3 报告写明未执行
./scripts/env-service.sh dev rebuild。:8080健康只证明旧镜像在跑,不能证明审计修复已部署。按 AGENTS.md §6.3,合入共享环境前要占集成槽位并冒烟。 dev领先test225 个 commit。 差异覆盖 rdev 模板、系统管理台、docgov 加固、Control Center 移除等。-short不够。晋升前至少再跑:TEST_DATABASE_URL下治理 PG 集成,以及cd web && npm test && npm run build。- 批 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?
建议动作
按顺序,全部另开任务,不在本笔记内执行:
- 占集成槽位,
./scripts/env-service.sh dev rebuild,curl -sf http://127.0.0.1:8080/health(或/api/v1/health)确认 schema 52 且二进制含批 1–4。 TEST_DATABASE_URL下跑治理 PG 集成;cd web && npm test && npm run build。- 为 H2/H3 补至少一条跨用户/非成员 403 负例。
- 通过后再把
devmerge 入test(保留 test 上 9 个晋升提交),打 rc tag,并顺手更正CURRENT.md文首的 test schema 表述。