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>
This commit is contained in:
@@ -172,6 +172,7 @@
|
||||
| 发布缺口 | [gap-matrix](../remediation/gap-matrix.md)(`production_ready=yes`;Wave 0 IAM 只读未发现旁路) |
|
||||
| 连续性审计/计划 | [audit](../audit/2026-09-16-feature-matrix-production-readiness-audit.md) · [remediation](../remediation/2026-09-16-feature-matrix-production-readiness-plan.md) · [Wave 0 任务](./short-term/2026-09-16-feature-matrix-wave0-calibration.md) |
|
||||
| 测试报告 | [test-reports/](../test-reports/) |
|
||||
| dev→test 晋升前复核 | [research](./research/2026-09-19-pre-test-promotion-review.md)(2026-09-19 只读;静态门禁过,容器未 rebuild,暂不合并) |
|
||||
| D7 盘点(W7) | [audit](../audit/2026-09-17-d7-data-inventory.md) · [报告](../test-reports/2026-09-17-w7-d7-inventory-test-report.md) · ADR 仍 `pending-compliance-signoff` |
|
||||
| Wave 7 编排确认 | [决策记录](./short-term/2026-09-18-wave7-roadmap-orchestration.md) |
|
||||
| Agent 手册 | [AGENTS.md](../../AGENTS.md) |
|
||||
|
||||
@@ -0,0 +1,151 @@
|
||||
---
|
||||
title: "dev→test 晋升前复核:功能权限、合并可行性、已知缺陷"
|
||||
created: 2026-09-19
|
||||
updated: 2026-09-19
|
||||
status: done
|
||||
confidence: high
|
||||
---
|
||||
|
||||
# 调研:dev→test 晋升前复核
|
||||
|
||||
只读复核。不改业务代码、不 rebuild 容器、不合入 `test`/`main`、不修复 [medium/low backlog](../long-term/2026-09-19-audit-remainder.md)。
|
||||
|
||||
## 结论
|
||||
|
||||
1. **规划内的功能、权限与流程已按声明范围接入。** [FEATURE-MATRIX](../../status/FEATURE-MATRIX.md) 主表里,除明确标成 `partial` / `deferred` 的行以外,其余能力均为 `done`,并有测试报告或 commit 证据。没有发现「规划了但完全未实现」的模块。未完成项是主动延后,且 [gap-matrix](../../remediation/gap-matrix.md) 已判定不挡首发。
|
||||
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](../../status/FEATURE-MATRIX.md)(更新 2026-09-19)与 [gap-matrix](../../remediation/gap-matrix.md)(`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](../../audit/authorization-matrix-v3-full.md) |
|
||||
| 前端工作台、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 报告](../../test-reports/2026-09-19-audit-b2-authz-hardening-test-report.md)。
|
||||
|
||||
### 明确未完成(不是遗漏)
|
||||
|
||||
| 行 | 状态 | 剩余 | 是否挡首发 |
|
||||
|----|------|------|------------|
|
||||
| 研发设计控制(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](../../../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 报告](../../test-reports/2026-09-19-audit-b2-authz-hardening-test-report.md) 写明:非项目成员访问 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)
|
||||
|
||||
来源:[系统深度体检](../../audit/2026-09-19-system-deep-audit.md)。四批均已合入 `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](../long-term/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 表述。
|
||||
Reference in New Issue
Block a user