docs(test): record the U7 restart matrix and the gate follow-up
Postgres and app reach ready in about a second. Vite cold cache is not the old ten-second stall, and the login form was not measured. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+1
-1
@@ -149,7 +149,7 @@
|
||||
|
||||
| holder | phase | since | scope | queue |
|
||||
|--------|-------|-------|-------|-------|
|
||||
| - | idle | 2026-09-19 | P3 真 PI 已抽样。评审 `quality_failed`(score 20),不占槽。不晋升 test/main | - |
|
||||
| - | idle | 2026-09-19 | U7 矩阵已记。Vite 冷/热模块图约 1.4s/1.1s;postgres+app 到 `/ready` 1.0–1.2s。不晋升 test/main | - |
|
||||
|
||||
**phase**: `idle` | `merging` | `smoke` | `e2e`
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ updated: 2026-09-19
|
||||
| FE App.tsx | 部分收口。登录壳不再静态引用重模块。本地缓存、登录同步、文档补水、服务端文档同步、生命周期、发送消息、块编辑、对话流/任务流重试、卡片动作、立项和成员写操作已分别抽出。文档栏在 `DocumentPane`,聊天栏在 `ChatColumn`,`AppShell` 与工作台弹窗在 `WorkbenchView`。`App.tsx` 仍持有会话状态,不再挂 `<AppShell` |
|
||||
| H1-del | 关闭理由:`allowLegacyTestPrincipal` 仍被 `AllowInMemory && ContextDbHost==""` 的 dev/test 内存测试使用。删除会把这批测试变成未登录 401。保留告警,删除另开、先改测试夹具 |
|
||||
|
||||
仍开放:rdev P3 评审质量门禁未过(建议书已生成,`rd_sw_plan` 规划期关闭已证实,见 [P3 报告](../test-reports/2026-09-19-rdev-p3-real-pi-test-report.md));U7 的 Vite/依赖重启矩阵。工作台壳已挪到 `WorkbenchView`。dev schema 53。U4 n=5 为成员 1、会话 1。U1 慢网 n=20(CPU 4 倍,并阻断 Google 字体):10 Mbps 表单可见 p75 559 ms,2 Mbps p75 1279 ms,都低于拟定 1.5 s / 3 s;这是本机 CDP 抽样,不是公网 SLO。U7 仅 app 重启 5 次到 health:0.433–0.463 s,未覆盖 Vite 与整组依赖。U6 仍不加索引。H2 `TestDocGovCommentsAndAudit_NonMemberIs403_PG` 已在隔离库 PASS。`go test -short` 的 `TestArchitectureBoundaries` 仍有 6 条新 import(intent/squad/template → workflowdef),不是本轮容器改动。test/main 仍是 schema 52。
|
||||
仍开放:`rd_proposal` 终稿未对齐模板标题(没有新的真 PI)。U7 登录表单可见未测(本机无头 Chromium 缺 `libatk`),也不把 1.4 秒模块图写成「较十几秒基线下降 50%」。见 [U7 报告](../test-reports/2026-09-19-initial-load-u7-restart-test-report.md)。工作台壳已挪到 `WorkbenchView`。dev schema 53。U6 仍不加索引。`TestArchitectureBoundaries` 仍有 6 条新 import(intent/squad/template → workflowdef),不是本轮容器改动。test/main 仍是 schema 52。评审门禁的法规表误伤已修,保存的 P3 终稿不再报「问题行缺少」。
|
||||
|
||||
红线关闭(不是实现):
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
| 对话数据治理(D7) | 留存/删除口径、库·备份·日志控制、敏感字段加密边界 | deferred | deferred_enhancement(违规则升 blocker) | [计划](../remediation/2026-09-16-feature-matrix-production-readiness-plan.md) Scope Boundaries;[收口 §7.1](../remediation/2026-09-16-partial-deferred-completion-plan.md);[D7 ADR 草案](../adr/2026-09-17-d7-chat-data-retention.md);[W7 盘点](../audit/2026-09-17-d7-data-inventory.md);[报告](../test-reports/2026-09-17-w7-d7-inventory-test-report.md) | **after W7**:只读盘点完成(sessions/messages/KB/日志/备份/event)。**未发现**已确认基线违规,未写 gap-matrix。口径仍 `pending-compliance-signoff`;禁止按 365/180/30 物理删除。本行不升 done | `chat` |
|
||||
| 智能体小队 | 角色-任务-工作区-黑板 | done | non_blocker | [agent-squad](../system-design/agent-squad/);[test 2026-09-07](../test-reports/2026-09-07-dynamic-squad-planning-test-report.md) | 非关键步骤降级(A5/A6)属 backlog | `squad` |
|
||||
| 工作流治理 | 三正式工作流、设置页/DutyMode、动作级鉴权、真实 PI 三工作流 E2E、full/none 混合长链 | done | non_blocker | [三工作流整改](../remediation/2026-09-12-three-workflows-strict-governance-remediation.md);[409/职责](../test-reports/2026-09-14-workflow-plan-409-frozen-and-optional-duties-test-report.md);[鉴权](../test-reports/2026-09-14-governance-action-level-authz-test-report.md);[PI E2E](../test-reports/2026-09-16-pi-three-workflow-e2e-test-report.md);[Wave2 full/none](../test-reports/2026-09-16-wave2-real-pi-evidence-test-report.md) | full 跨用户审批 + none 免审批不阻塞已签。纯软件自举仍独立 planned | `workflow` |
|
||||
| 研发设计控制(rdev) | 医疗第 4 工作流:13×60 manifest/模板、`squad.rdev_doc.v1` kind 编排、main-completed 硬 precheck、StageKey 动态化;不含前端/真 PI/键名空间化 | partial | deferred_enhancement | [设计](../system-design/project-workflow/07-研发工作流rdev接入-设计与实施计划.md);[short-term](../archive/ops/2026-09-17-rdev-workflow-integration.md);[模板深度](../archive/ops/2026-09-17-rdev-template-depth.md);[S0+S1 首批报告](../test-reports/2026-09-17-rdev-template-depth-test-report.md);[S1 续批报告](../test-reports/2026-09-17-rdev-template-depth-s1-continued-test-report.md);[写作规范](../system-design/project-workflow/08-rdev模板写作规范.md);[backlog](../backlog/2026-09-17-rdev-phase2-backlog.md) | **P0+P1 done**。**模板深度 S0+S1 首批 + S1 续批 done**:60/60 模板已补强;真 PI 抽样 PASS(含 `rd_planning_review` + `rd_design_vv`,项目 6446)。剩余:S3 overlay 与 R2/R3 已接。P2 名称匹配、阶段折叠、批量审批已接。选中 rdev 时显示与服务端相同的 CDO 前置说明(`workflowPrerequisite.test.ts`)。P4 键名空间化已接:发布清单用 `bd_`/`pm_`/`tm_`/`sw_`,旧键仍走同一套步骤和模板,旧 doc_id 仍可查(`keyspace_test.go`)。P3 三样本已在 dev 真 PI 上跑过(项目 6533):`rd_sw_plan` 规划期关闭;`rd_proposal` completed 但未对齐模板标题;`rd_planning_review` 有规定章节但质量门禁 score 20,FAIL。见 [P3 报告](../test-reports/2026-09-19-rdev-p3-real-pi-test-report.md)。nightly 未扩成四工作流。 | `workflow-def` / `rdev-templates` |
|
||||
| 研发设计控制(rdev) | 医疗第 4 工作流:13×60 manifest/模板、`squad.rdev_doc.v1` kind 编排、main-completed 硬 precheck、StageKey 动态化;不含前端/真 PI/键名空间化 | partial | deferred_enhancement | [设计](../system-design/project-workflow/07-研发工作流rdev接入-设计与实施计划.md);[short-term](../archive/ops/2026-09-17-rdev-workflow-integration.md);[模板深度](../archive/ops/2026-09-17-rdev-template-depth.md);[S0+S1 首批报告](../test-reports/2026-09-17-rdev-template-depth-test-report.md);[S1 续批报告](../test-reports/2026-09-17-rdev-template-depth-s1-continued-test-report.md);[写作规范](../system-design/project-workflow/08-rdev模板写作规范.md);[backlog](../backlog/2026-09-17-rdev-phase2-backlog.md) | **P0+P1 done**。**模板深度 S0+S1 首批 + S1 续批 done**:60/60 模板已补强;真 PI 抽样 PASS(含 `rd_planning_review` + `rd_design_vv`,项目 6446)。剩余:S3 overlay 与 R2/R3 已接。P2 名称匹配、阶段折叠、批量审批已接。选中 rdev 时显示与服务端相同的 CDO 前置说明(`workflowPrerequisite.test.ts`)。P4 键名空间化已接:发布清单用 `bd_`/`pm_`/`tm_`/`sw_`,旧键仍走同一套步骤和模板,旧 doc_id 仍可查(`keyspace_test.go`)。P3 三样本已在 dev 真 PI 上跑过(项目 6533):`rd_sw_plan` 规划期关闭;`rd_proposal` completed 但未对齐模板标题;`rd_planning_review` 当时质量门禁 score 20,是把同节后一张法规表算进问题行。门禁已只读第一张表;保存的终稿不再报「问题行缺少」。建议书标题仍未对齐模板。没有新的真 PI。见 [P3 报告](../test-reports/2026-09-19-rdev-p3-real-pi-test-report.md)。nightly 未扩成四工作流。 | `workflow-def` / `rdev-templates` |
|
||||
| 纯软件项目自举 | 软件项目创建、Bootstrap、Delivery、受控工程交接 | partial | deferred_enhancement(明确不挡首发) | [设计](../system-design/2026-09-14-software-project-bootstrap-workflow.md);[ADR](../adr/2026-09-16-software-project-bootstrap-keys.md);[L1 报告](../test-reports/2026-09-16-software-project-bootstrap-test-report.md);[W5a](../test-reports/2026-09-17-w5a-software-bootstrap-ui-pi-test-report.md) | **before**:L1 + UI 仍克隆医疗模板。**after W5a**:catalog 驱动创建、软件不挂医疗 key、docs_only 真 PI 建议 delivery 且不自动激活。**SWBOOT-10 仍 stub**(W5b);本行不升 done | `workflow-design` |
|
||||
| IAM / 鉴权 | 项目级 API 鉴权 + RBAC;会话/阶段授权 | done | 加固 | [v3 full inventory](../audit/authorization-matrix-v3-full.md);[session 中断](../test-reports/2026-09-16-iam-route-inventory-test-report.md);[fail-closed](../test-reports/2026-09-16-wave1-iam-fail-closed-test-report.md);[410 策略](../audit/2026-09-16-bug11-410-retire-decision.md);[R13](../audit/2026-09-16-r13-data-safety-checklist.md) | 全路由 inventory + session 中断负例 + 410 冻结 + R13 基线已签 | `authz` |
|
||||
| 文档治理 | 法定文档生命周期 + 租约 + 受控正文读取 | done | non_blocker | [docgov](../test-reports/2026-09-08-docgov-lifecycle-and-claiming-framework-test-report.md);[正文 UI](../test-reports/2026-09-14-controlled-content-ui-acceptance.md);[canonical hash](../remediation/2026-09-14-controlled-content-canonical-hash-remediation.md) | 项目 143 只读;不终止 | `docgov` |
|
||||
@@ -96,7 +96,7 @@
|
||||
|
||||
## 2026-09-17 首次加载性能专项
|
||||
|
||||
首次加载与重启首访性能优化:**partial**(U2 静态交付已验收;U3 只做了登录壳拆包,未关闭)。[审计](../audit/2026-09-17-initial-load-performance-audit.md) · [方案](../remediation/2026-09-17-initial-load-performance-plan.md) · [U2 报告](../test-reports/2026-09-17-initial-load-perf-u2-test-report.md)。U2:自托管字体 + br/gzip。U3 进展(`fix/audit-remainder-closeout`):导出、预览、管理台、块编辑器、Mermaid/公式改为点击或出现时再加载。入口包 `index-*.js` 由 2.83 MB / br 626 KB 降到 737 kB / br 170 KB(`index-j0BIrjIR.js`,包内无 katex)。公式在气泡或正文里出现时才加载,富文本复制同样延后。U3 的浏览器资源瀑布还没测,本行不关。U5:`/auth/me` 复用本请求已核过的用户,不再第二次解析会话;会话与用户状态合成一次 JOIN。没有锁等待证据,所以不节流 `last_seen`。`TestAuthMe_LogoutNextRequestIs401`。U1、U6、U7 未做。U4 进展:登录不再按项目数拉成员名册,只同步当前项目;其他项目先种入当前用户以保持会话可见,完整名册在打开成员面板时取。会话列表不再因项目数组变化而重拉,迟到响应用代次丢弃,同一项目的在途成员请求合并。`src/data/initFanout.test.ts`。2026-09-19 浏览器证据(`e2e/initial-load-performance.spec.ts`,n=20,本仓 Vite `:3100` 代理 `:8080`):每次登录成员项目数 1、会话列表 GET 1,匿名与登录后资源路径均无 katex/mermaid/docx。同一探针在重建后的 `:8080`(`index-DOO0-Yh7.js`,schema 53,n=5)成员项目 1、会话列表 GET 1,匿名 JS 传输 172,417 B,首屏路径无 katex/mermaid/docx。重建前旧包 n=1 曾是 704/30。慢网 n=3、CPU 4 倍:10 Mbps 表单可见 558–604 ms,2 Mbps 1279–1296 ms,样本不足 20,U1 不关。U6 不加索引:测到的瓶颈是已消失的成员扇出,没有慢 SQL 证据。U7 重启矩阵未做。mutex `web + static-delivery`(U2 done)/ `loading-performance-audit`。
|
||||
首次加载与重启首访性能优化:**partial**(U2 静态交付已验收;U3 只做了登录壳拆包,未关闭)。[审计](../audit/2026-09-17-initial-load-performance-audit.md) · [方案](../remediation/2026-09-17-initial-load-performance-plan.md) · [U2 报告](../test-reports/2026-09-17-initial-load-perf-u2-test-report.md)。U2:自托管字体 + br/gzip。U3 进展(`fix/audit-remainder-closeout`):导出、预览、管理台、块编辑器、Mermaid/公式改为点击或出现时再加载。入口包 `index-*.js` 由 2.83 MB / br 626 KB 降到 737 kB / br 170 KB(`index-j0BIrjIR.js`,包内无 katex)。公式在气泡或正文里出现时才加载,富文本复制同样延后。U3 的浏览器资源瀑布还没测,本行不关。U5:`/auth/me` 复用本请求已核过的用户,不再第二次解析会话;会话与用户状态合成一次 JOIN。没有锁等待证据,所以不节流 `last_seen`。`TestAuthMe_LogoutNextRequestIs401`。U1、U6、U7 未做。U4 进展:登录不再按项目数拉成员名册,只同步当前项目;其他项目先种入当前用户以保持会话可见,完整名册在打开成员面板时取。会话列表不再因项目数组变化而重拉,迟到响应用代次丢弃,同一项目的在途成员请求合并。`src/data/initFanout.test.ts`。2026-09-19 浏览器证据(`e2e/initial-load-performance.spec.ts`,n=20,本仓 Vite `:3100` 代理 `:8080`):每次登录成员项目数 1、会话列表 GET 1,匿名与登录后资源路径均无 katex/mermaid/docx。同一探针在重建后的 `:8080`(`index-DOO0-Yh7.js`,schema 53,n=5)成员项目 1、会话列表 GET 1,匿名 JS 传输 172,417 B,首屏路径无 katex/mermaid/docx。重建前旧包 n=1 曾是 704/30。慢网 n=3、CPU 4 倍:10 Mbps 表单可见 558–604 ms,2 Mbps 1279–1296 ms,样本不足 20,U1 不关。U6 不加索引:测到的瓶颈是已消失的成员扇出,没有慢 SQL 证据。U7 已测未关:[报告](../test-reports/2026-09-19-initial-load-u7-restart-test-report.md)。Vite 监听约 0.3 s;314 个模块冷/热 1.45/1.11 s,不是历史十几秒。postgres+app 到 `/ready` 1.0–1.2 s。无头浏览器缺系统库,登录表单可见未测;不宣称较基线下降 50%。mutex `web + static-delivery`(U2 done)/ `loading-performance-audit`。
|
||||
|
||||
## 2026-09-17 文档编制人兼任方案
|
||||
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
# 首次加载 U7 重启矩阵测试报告
|
||||
|
||||
## 一、 测试背景 (Background)
|
||||
|
||||
[方案 U7](../remediation/2026-09-17-initial-load-performance-plan.md) 要求分别记录 Vite 冷/热启动、仅 app 重启、以及数据库和应用一起启动,直到 ready 与首次页面。此前只有 app 容器重启到 `/health` 的 0.433–0.463 秒,没有 Vite,也没有 postgres 与 app 一起重启。
|
||||
|
||||
## 二、 测试目标 (Test Objectives)
|
||||
|
||||
- 无待执行迁移、数据库已在卷里时,app 与 postgres 一起重启后 `/ready` 的耗时。
|
||||
- Vite 保留依赖缓存与清空 `node_modules/.vite` 之后,从进程启动到入口模块图取完的耗时。
|
||||
- 不把监听成功写成登录表单已经可见。无头浏览器打不开时明确写未测。
|
||||
- 达不到「较历史十几秒基线下降 50%」就不关闭 U7。
|
||||
|
||||
## 三、 测试方案与环境 (Test Plan & Environment)
|
||||
|
||||
- OS:linux。分支:`fix/audit-remainder-closeout`。计时开始时 commit `6bd338e`。
|
||||
- dev:`docker compose -f docker-compose.dev.yml restart system-db app`,n=3。探测 `shuimu-context-pg-dev` 的 Docker health、`GET /api/v1/health`、`GET /ready`、`GET /`。
|
||||
- Vite:`npx vite --host 127.0.0.1 --port 3100 --strictPort`。热启动保留 `.vite`,冷启动先删除。先记 HTML 200,再用无浏览器的模块图抓取从 `/src/main.tsx` 跟完 import(314 个模块,队列清空)。
|
||||
- 未重启 test/main,未 rebuild 镜像,未晋升。
|
||||
- 数字:`.doc/test-reports/assets/2026-09-19-initial-load-u7/timings.json`。
|
||||
|
||||
## 四、 预期结果 (Expected Results)
|
||||
|
||||
- `/ready` p95 ≤ 3 秒(方案对「无迁移且 DB 已就绪」的 app 重启预算;本次是 postgres 与 app 一起重启,单列,不拿去承诺整机开机)。
|
||||
- Vite 冷启动若明显慢于热启动,才考虑 `server.warmup`。总耗时没有下降就不能把等待挪到预热里宣称消失。
|
||||
- 8081 与浏览器登录表单不在本次能测范围里就保持未关。
|
||||
|
||||
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
|
||||
|
||||
### 5.1 postgres + app 一起重启
|
||||
|
||||
- **测试输入**:连续 3 次 `restart system-db app`。卷上已有 schema 53,没有新迁移。
|
||||
- **实际输出**:`/api/v1/health` 与 `/ready` 均为 200,`status=ok schema_version=53 schema_ready=true`。耗时 1.027 / 1.178 / 1.005 秒。Docker 把数据库标成 healthy 是 5.490 / 5.633 / 5.450 秒,间隔是 healthcheck 的 5 秒,晚于 HTTP ready。重启后首页 HTML 200,TTFB < 2 ms。结束后两个容器都是 healthy。
|
||||
- **评价判定**:PASS(这条预算)。p95 约 1.2 秒,低于 3 秒。不外推到宿主机整机重启,也不覆盖 test 的 8081。
|
||||
- **性能与耗时**:见上。三次合计约 16 秒。
|
||||
|
||||
### 5.2 Vite 监听与模块图
|
||||
|
||||
- **测试输入**:热启动 n=3(只测 HTML)与 n=2(模块图);冷依赖缓存 n=2。
|
||||
- **实际输出**:Vite 日志 `ready in` 71–76 ms。从拉起到 HTML 200:热 0.342–0.344 秒,冷 0.345–0.352 秒。314 个模块抓完:热 1.069–1.117 秒,冷 1.433–1.453 秒。从进程启动到图抓完:热 1.29–1.43 秒,冷 1.71–1.73 秒。
|
||||
- **评价判定**:冷缓存不是主因(大约多 0.35 秒)。不改 `vite.config.ts` 做 warmup,避免只把同样的等待挪到启动阶段。历史诊断里的 207 请求 / 12 秒和「重启后十几秒」这次没有复现。
|
||||
- **性能与耗时**:见上。
|
||||
|
||||
### 5.3 登录表单可见
|
||||
|
||||
- **测试输入**:Playwright Chromium。
|
||||
- **实际输出**:`chrome-headless-shell` 与完整 `chrome` 都缺 `libatk-1.0.so.0` 等系统库,进程退出码 127。没有登录框可见时间,也没有请求瀑布。
|
||||
- **评价判定**:未测。U7 因此不关。不能写成首访已经比基线快 50%。
|
||||
|
||||
## 六、 自动化测试套件汇总 (Test Suite Execution)
|
||||
|
||||
本次是重启计时,不是 `go test`。相关回归:
|
||||
|
||||
```text
|
||||
go test ./internal/squad/ -count=1 -run TestRDevQualityGates
|
||||
# ok
|
||||
```
|
||||
|
||||
该测试与 U7 无关,是同一轮里评审门禁误伤的回归,不拿它代替重启证据。
|
||||
|
||||
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
|
||||
|
||||
- postgres 与 app 一起重启到 `/ready` 约 1.0–1.2 秒,满足 3 秒预算。Docker health 的 5 秒是探测间隔,不是数据库没起来。
|
||||
- Vite 冷/热差约 0.35 秒。不加 warmup。
|
||||
- 登录表单、8081、以及相对「十几秒」基线的 50% 下降都没有证据。U7 保持未关。
|
||||
- 测完后 dev 的 app 与 postgres 均为 healthy,Vite 仍听在 `127.0.0.1:3100`。未晋升 test/main。
|
||||
@@ -73,3 +73,7 @@ cd web && npx tsx --test src/components/layout/WorkbenchView.test.ts src/compone
|
||||
- 因此 P3 还不能标成干净通过,也不能据此晋升 test/main。
|
||||
- 轮询原先不把 `quality_failed` 当终态,会空转到超时。脚本已把 `quality_failed` 与 `finalizing_failed` 视为结束。
|
||||
- 红线未动:不写真实软件仓、不合入 FAV、不物理删除 D7。
|
||||
|
||||
## 八、 后续(不改写上面的当次判定)
|
||||
|
||||
2026-09-19 同一分支补了门禁:`markdownTable` 在第一张表结束后停止,不再把「问题与决议」后面的法规对照表算成缺责任人的问题行。`TestRDevQualityGates` 用保存的终稿复读,不再出现「问题行缺少」。这不是新的真 PI,建议书标题对齐仍然失败。
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"commit": "6bd338e",
|
||||
"host": "linux",
|
||||
"note": "headless chromium missing libatk; login-form paint not measured",
|
||||
"vite_listen_html_200_s": {
|
||||
"warm": [0.344, 0.343, 0.342],
|
||||
"cold_dep_cache": [0.352, 0.345]
|
||||
},
|
||||
"vite_module_graph": {
|
||||
"modules": 314,
|
||||
"warm_graph_s": [1.117, 1.069],
|
||||
"cold_graph_s": [1.453, 1.433],
|
||||
"warm_total_from_spawn_s": [1.427, 1.294],
|
||||
"cold_total_from_spawn_s": [1.726, 1.705]
|
||||
},
|
||||
"postgres_and_app_restart": [
|
||||
{"n": 1, "db_docker_healthy_s": 5.490, "health_s": 1.027, "ready_s": 1.027, "schema": 53},
|
||||
{"n": 2, "db_docker_healthy_s": 5.633, "health_s": 1.178, "ready_s": 1.178, "schema": 53},
|
||||
{"n": 3, "db_docker_healthy_s": 5.450, "health_s": 1.005, "ready_s": 1.005, "schema": 53}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user