Compare commits

...
Author SHA1 Message Date
WeiCHEN 45877a4103 docs(ops): record task-bubble-bind promote-to-test evidence 2026-09-23 11:59:31 +08:00
WeiCHEN 19b91ae14f merge: promote local_dev to test (task-bubble-bind assistant_msg_id + error actions) 2026-09-23 11:57:11 +08:00
WeiCHEN 44bed71ccd merge: promote local,dev to test (dialogue current-time anchor) 2026-09-23 11:00:21 +08:00
WeiCHEN 54955c9d1a merge: promote local_dev to test (latest-upload summary + parse wait) 2026-09-23 10:27:21 +08:00
WeiCHEN e217929ccd merge: promote local,dev to test (intent smalltalk + schema 64)
CI / go-vet-and-short-test (push) Failing after 0s
CI / backup-restore-drill (push) Failing after 0s
CI / web (push) Failing after 0s
2026-09-23 10:12:00 +08:00
WeiCHEN 7440ded8f4 merge: gate closeout docs onto test (post rc-v1.1.0-beta.1)
CI / go-vet-and-short-test (push) Failing after 0s
CI / backup-restore-drill (push) Failing after 0s
CI / web (push) Failing after 1s
2026-09-22 21:02:33 +08:00
WeiCHEN 83c6a12aaf merge: promote local dev to test (rc-v1.1.0-beta.1, schema 61)
CI / go-vet-and-short-test (push) Failing after 1s
CI / backup-restore-drill (push) Failing after 0s
CI / web (push) Failing after 0s
2026-09-22 20:57:28 +08:00
13 changed files with 789 additions and 31 deletions
+5 -14
View File
@@ -1,27 +1,19 @@
# 当前焦点
**更新**:2026-09-23(DOCREV UI PASS + FEATURE-MATRIX A–G done / 红线证据入账)。此文件是协调快照;实际分支、进程、执行租约以机器核验为准。能力和发布结论分别见 [FEATURE-MATRIX](../status/FEATURE-MATRIX.md) / [gap-matrix](../remediation/gap-matrix.md)。
**更新**:2026-09-22(dev 门禁复验与 test 晋升收口)。此文件是协调快照;实际分支、进程、执行租约以机器核验为准。能力和发布结论分别见 [FEATURE-MATRIX](../status/FEATURE-MATRIX.md) / [gap-matrix](../remediation/gap-matrix.md)。
本机 macOS 已可用 `agentctl with`/`docs apply`/`validate`/`integrate`(W1-B 进程层);共享文档写走 docs apply 收据。
手工 CAS 前:本 macOS 宿主 `docs apply`/`with`/`validate`/`integrate` 因 `/proc` 不可用;本轮文档与环境写采用手工等效(见任务例外登记)。
## 焦点
0. **全量未完成计划收口**:FEATURE-MATRIX「模块解耦批次 A–G」→ `done`;多意图 I1 / 语义摘要 S1 / 治理 W4 / rdev / 红线证据已登记残差;红线(FAV live / SWBOOT-10 / D7 物理删 / PI 叙事 flag)不放量。详见 [收口短文](./short-term/2026-09-22-unfinished-batch-closeout.md)。
1. **DOCREV UI 重跑已 PASS**:main 18 + post-restart UI-15;20 audit + 9 remediation `done`(`management-implementation-plan` 仍方案态)。schema 63;密封 [sealed-ledger-ui00-16-post-20260923T0400Z](../test-reports/assets/2026-09-22-docrev-ui-rerun/sealed-ledger-ui00-16-post-20260923T0400Z/);证据 [测试报告](../test-reports/2026-09-22-docrev-ui-rerun-test-report.md);worktree cleanup=pending。
2. **dev→test 已晋升**:`origin/dev@591ea601`(schema 61 门禁绿);`origin/test@83c6a12a` + tag `rc-v1.1.0-beta.1`;test 环境 health schema=61、Runner `MiniMax-M3`。[报告](../test-reports/2026-09-22-dev-gate-and-test-promotion-test-report.md)。
3. **本任务 cleanup=pending**:feature / integrate / promote-test worktrees 待独立维护者按门禁复查后清理;不强删。
4. **Agent 规范与 L1 门禁**:R01–R10、共享 .locks 已启用;本机 macOS 上租约路径不可用,受测 Linux 主机仍 enforced。
1. **dev→test 已晋升**:`origin/dev@591ea601`(schema 61 门禁绿);`origin/test@83c6a12a` + tag `rc-v1.1.0-beta.1`;test 环境 health schema=61、Runner `MiniMax-M3`。[报告](../test-reports/2026-09-22-dev-gate-and-test-promotion-test-report.md)。
2. **本任务 cleanup=pending**:feature / integrate / promote-test worktrees 待独立维护者按门禁复查后清理;不强删。
3. **Agent 规范与 L1 门禁**:R01–R10、共享 .locks 已启用;本机 macOS 上租约路径不可用,受测 Linux 主机仍 enforced。
## 并行认领
| owner | task | branch | worktree | mutex | status |
|---|---|---|---|---|---|
| Cursor | integrate-pi-runner-response-size-r2-2026-09-23 | feature/integrate-pi-runner-response-size-2026-09-23 | .worktrees/integrate-pi-runner-response-size-2026-09-23 | git:dev | done |
| Cursor | modular-decouple-residual-b-2026-09-23 | feature/modular-decouple-residual-2026-09-23 | .worktrees/modular-decouple-residual-2026-09-23 | modular-decouple-residual | done |
| Cursor | modular-refactor-impl-plan-2026-09-23 | feature/modular-refactor-impl-plan-2026-09-23 | .worktrees/modular-refactor-impl-plan-2026-09-23 | docs-remediation-modular-impl-plan | done |
| Cursor | modular-refactor-review-2026-09-23 | feature/modular-refactor-review-2026-09-23 | .worktrees/modular-refactor-review-2026-09-23 | ops-audit-modular-refactor-review | done |
| Cursor | 2026-09-22-status-reconcile | feature/status-reconcile-2026-09-22 | .worktrees/status-reconcile-2026-09-22 | ops-status-reconcile | done |
| Cursor | 2026-09-22-dev-prod-ready-test-promotion | feature/dev-prod-ready-test-promotion-2026-09-22 | .worktrees/dev-prod-ready-test-promotion-2026-09-22 | dev-runtime-migration+release-gate+test-promotion | done |
| Cursor | integrate-dev-prod-ready-test-promotion-2026-09-22 | feature/integrate-dev-prod-ready-test-promotion-2026-09-22 | .worktrees/integrate-dev-prod-ready-test-promotion-2026-09-22 | git:dev | done |
@@ -33,7 +25,6 @@
| 路径/事项 | 分类与保留原因 | cleanup_owner | 复查触发 |
|---|---|---|---|
| `.worktrees/docrev-ui-rerun-2026-09-22` / `freeform-project-id-bigint` | 任务 done;UI PASS 密封;cleanup=pending | 独立维护者 | tip 为 local_dev 祖先且无 Playwright 后 remove |
| `.worktrees/dev-prod-ready-test-promotion-2026-09-22` 等本轮三个 worktree | 任务 done;cleanup=pending;证据已入 test-reports / gap-matrix | 独立维护者 | 核对 tip 为 origin/dev 或 origin/test 祖先、无进程后 remove |
| Cline `2026-09-16-partial-deferred-completion` | 仍 in_progress;W5–W7 未关闭 | Cline owner / 维护者 | 单独授权实施或交接 |
| 保护分支 / FAV 相关 | 保护项;故意不合入、不删 | 原 owner / 维护者 | 用户调整保护边界后 |
@@ -0,0 +1,55 @@
---
title: "晋升 task-bubble-bind 至 test"
task_id: promote-task-bubble-bind-test-2026-09-23
status: done
created: 2026-09-23
updated: 2026-09-23
owner: Cursor
task_type: ops
task_tier: multi_stage
policy_revision: "AGENTS+worktree-ops @ 19b91ae1"
branch: feature/promote-task-bubble-bind-test-2026-09-23
worktree: .worktrees/promote-task-bubble-bind-test-2026-09-23
base_dev_sha: "cc91c217e7c0e4732de3923d0fa229fd4bd65798"
head_sha: "19b91ae14f69f058c986385ef945ffb5be965783"
write_scope: ["."]
allowed_environments: ["test"]
mutex: git:test+env:test
review_state: not_required
integration_state: merged_local_test
deployment: test_ok
cleanup: pending
cleanup_owner: 独立维护者
cleanup_trigger: tip 为 local_dev/origin 祖先且无进程占用后 remove
remote_sync: not_requested
---
# 晋升 task-bubble-bind 至 test
## 用户目标与授权
- 用户目标:将已合入本地 `dev` 的任务气泡绑定修复晋升到 test,便于人工验收。
- 授权来源:用户明确「合入 dev,然后再合入 test,我来进行测试」。
- 交付终点:`test` 含 task-bubble-bind 祖先、`rc-v1.1.0-beta.4`、pinned 重建、health/ready 可用。
- 禁止:不晋升 main;不 push 远端(本轮未请求)。
## 结果
- local `test@19b91ae1` + `rc-v1.1.0-beta.4`
- pinned 自 `cc91c217` PASS receipt;`:8081` schema_version=65
- 报告:[../../test-reports/2026-09-23-promote-task-bubble-bind-test-report.md](../../test-reports/2026-09-23-promote-task-bubble-bind-test-report.md)
## 步骤
1. [x] 登记 promote worktree / 任务
2. [x] merge --no-ff local `dev@cc91c217` → 候选 `19b91ae1`(P1=`test@44bed71c`)
3. [x] validate + update-ref `test` + tag `rc-v1.1.0-beta.4`
4. [x] candidate-images-apply + env:test rebuild(pinned)
5. [x] health/ready 冒烟;收口文档
## 验收标准
- [x] `test` 含 `b9b192a8`(task-bubble-bind)祖先
- [x] `:8081` `/health` `/ready` ok,schema_version≥65
- [x] 前端 bundle 含 `assistant_msg_id` 绑定路径
- [x] remote_sync=not_requested(未 push)
@@ -16,11 +16,11 @@ write_scope: ["web/src", "internal/server", ".doc"]
allowed_environments: ["test"]
mutex: "web-task-bubble+task-run-api"
review_state: pending
integration_state: pending
deployment: test_app_overlay_from_worktree
integration_state: merged_local_dev_and_test
deployment: test_ok
cleanup: pending
cleanup_owner: "独立维护者"
cleanup_trigger: "合入 local_dev 且 tip 为祖先后"
cleanup_trigger: "tip 为 local_dev/origin 祖先且无进程占用后 remove"
remote_sync: not_requested
---
@@ -36,8 +36,11 @@ test 环境任务卡双气泡/排序错乱/刷新退化;继续任务按钮无
2. [x] 失败卡:不可 resume 时隐藏 continue;restart 新开 turn/气泡
3. [x] test 重建核验 + 场景/LiveDualTrack 证据
4. [x] web 回归 + 浏览器验证;报告落盘
5. [x] 合入 local `dev@cc91c217`;晋升 local `test@19b91ae1` + `rc-v1.1.0-beta.4`
## 相关
- 报告:[2026-09-23-task-bubble-bind-test-report](../../test-reports/2026-09-23-task-bubble-bind-test-report.md)
- 晋升:[2026-09-23-promote-task-bubble-bind-test](./2026-09-23-promote-task-bubble-bind-test.md) · [晋升报告](../../test-reports/2026-09-23-promote-task-bubble-bind-test-report.md)
- Plan: test 环境验证 + 前端任务卡修复
- 可测入口:http://127.0.0.1:8081/
+14 -14
View File
@@ -49,32 +49,32 @@
| 模块 | 声明范围 | 状态 | 发布关系 | 证据 | 剩余工作 / 关闭条件 | mutex |
|------|----------|------|----------|------|---------------------|-------|
| Agent worktree 治理自动化 | 主目录保护、任务 worktree、机器认领、候选集成、dev 部署与安全清理 | partial | non_blocker | [方案](../remediation/2026-09-21-agent-workflow-governance-plan.md);[L1 验收](../test-reports/2026-09-21-agent-governance-test-report.md);[W1-B macOS](../ops/short-term/2026-09-22-agentctl-macos.md);[W4](../ops/short-term/2026-09-22-governance-automation.md);residual `modular-decouple-residual-2026-09-23` | L1 与 macOS `with/docs apply/validate/integrate` 已合入。W4 landed:durable queue + 完整 docs projection apply(行/整文 CAS)+ deploy/recover 真实收据闭环 + Darwin cwd 可见性测试。仍 deferred:PI 源码镜像 compose、跨机隔离、automation/w4 实现收敛。本行不升 done | `agent-workflow-governance` |
| Agent worktree 治理自动化 | 主目录保护、任务 worktree、机器认领、候选集成、dev 部署与安全清理 | partial | non_blocker | [方案](../remediation/2026-09-21-agent-workflow-governance-plan.md);[L1 验收](../test-reports/2026-09-21-agent-governance-test-report.md) | 本机 .locks/短租约、共享文档 CAS、提交/候选/环境门禁及安全 helper 已验;主仓 7e9317b8 已启用 init/hooks,拒绝无租约 env 操作。后台调度、完整业务部署恢复闭环、产品 PI 镜像交付、OS/跨机隔离与清理可见性仍待[后续](../ops/long-term/2026-09-21-agent-workflow-governance-automation.md) | `agent-workflow-governance` |
| 意图识别 L1 | 18 类 Intent、三分支消解、写/只读分流、双标签 `DOC_BUSY`、intent 纯依赖边界 | done | non_blocker | [intent-recognition](../system-design/intent-recognition/);[工作流作用域](../test-reports/2026-09-21-intent-workflow-scoping-test-report.md);[审计](../audit/2026-09-13-conversation-intent-runtime-state.md);[报告](../test-reports/2026-09-13-conversation-intent-runtime-state-test-report.md);[双标签](../test-reports/assets/2026-09-15-conversation-intent-dual-tab/live.json);[U1](../test-reports/2026-09-15-multi-intent-u1-contracts-test-report.md)–[U3](../test-reports/2026-09-15-multi-intent-u3-intentflow-pg-test-report.md) | **边界 before**:含 U9–U12 叙事混入 → **after**:U9–U12 迁至「多意图扩面」行。关闭:纯依赖边界回归即重开 | `intent` |
| 多意图持久计划(U1–U8 基线) | app/intentflow 生命周期、HITL、默认 `legacy`、U1–U8 代码与安全基线 | partial | non_blocker(默认 legacy) | [设计](../system-design/2026-09-15-multi-intent-hitl-plan.md);[U1](../test-reports/2026-09-15-multi-intent-u1-contracts-test-report.md)–[U8](../test-reports/2026-09-16-multi-intent-u8-task-generate-test-report.md);[Wave2 真 PI](../test-reports/2026-09-16-wave2-real-pi-evidence-test-report.md);[Track I1](../test-reports/2026-09-22-track-i1-query-owner-test-report.md) | **after Track I1**:生产组合根已去 Fake query owner,改真实 QueryOwner;receipt 含 auth scope digest;confirm 后走既有步骤内核 dispatcher。默认仍 `MULTI_INTENT_PLAN_TIER=legacy`。升 `auto_read/confirm` 需 Track I2(项目 allowlist + 频率门)。U9–U12 仍独立 dry-run | `intent-plan` |
| 多意图持久计划(U1–U8 基线) | app/intentflow 生命周期、HITL、默认 `legacy`、U1–U8 代码与安全基线 | partial | non_blocker(默认 legacy) | [设计](../system-design/2026-09-15-multi-intent-hitl-plan.md);[U1](../test-reports/2026-09-15-multi-intent-u1-contracts-test-report.md)–[U8](../test-reports/2026-09-16-multi-intent-u8-task-generate-test-report.md);[Wave2 真 PI](../test-reports/2026-09-16-wave2-real-pi-evidence-test-report.md);[2026-09-20 复核](../ops/research/2026-09-20-capability-enablement-impact-research.md) | legacy 有限只读多意图仍默认启用;新持久计划生产组合根仍使用 Fake query owner,confirm 后缺可靠调度,typed 参数/目标版本不足。原 U1–U8 测试证据保留,但不足以证明升 `auto_read/confirm` 可用。关闭条件见[整改方案](../remediation/2026-09-20-capability-enablement-impact-plan.md) Foundation 1 与 Track I | `intent-plan` |
| 多意图扩面(U9–U12) | U9 LLM 分段实验;U10 mutate;U11 docgov;U12 workflow/run-control | partial | deferred_enhancement | [设计](../system-design/2026-09-15-multi-intent-hitl-plan.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[脚手架](../test-reports/2026-09-16-pu8-u9-u12-flags-test-report.md);[U9](../test-reports/2026-09-17-w4-u9-segment-test-report.md);[U10](../test-reports/2026-09-17-w4-u10-mutate-test-report.md);[U11](../test-reports/2026-09-17-w4-u11-docgov-test-report.md);[U12](../test-reports/2026-09-17-w4-u12-run-control-test-report.md);[2026-09-20 复核](../ops/research/2026-09-20-capability-enablement-impact-research.md) | U9 proposer 已实现和注入但未进入生产聊天分段调用;提议请求已带 reasoning profile。U10–U12 当前为 dry-run/validated-only adapter。历史直接调用/PI 测试继续有效,不代表 live 接线。逐域实现和验收,禁止以 `full` 一次放量 | `intent-plan` |
| 对话 / ctxmgr baseline | 多轮上下文、刷新/重登/重启恢复、授权同集正文与计数、U10 端口化停止扩面 | done | non_blocker | [multi-turn](../system-design/multi-turn-dialogue/);[刷新审计](../audit/2026-09-13-chat-history-refresh-disappears.md);[U10](../test-reports/2026-09-15-chatlog-contextasm-u10-test-report.md);[门禁 B3](../test-reports/2026-09-16-chat-refresh-gate-test-report.md)(项目 6359) | **before**:语义摘要误标 D5 混入 → **after**:摘要迁「语义摘要 D3」;D7 数据治理独立。U10 停止扩面 | `chat` |
| 语义摘要(D3) | 授权后可见集合上的语义摘要;shadow → 可选替换 deterministic | partial | deferred_enhancement | [chat-agent-p6-backlog](../backlog/chat-agent-p6-backlog.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[pu6](../ops/long-term/2026-09-16-pu6-semantic-summary-contract.md);[脚手架](../test-reports/2026-09-16-pu6-semantic-summary-test-report.md);[W2 真 PI](../test-reports/2026-09-17-w2-semantic-summary-shadow-test-report.md);[Track S1](../ops/short-term/2026-09-22-track-s1-summary-consolidation.md) | **after Track S1**:durable `chat_summary_shadow_jobs` + 后台租约/watermark/provenance 已合入;served Narrative 保持确定性。shadow 默认 off;`SEMANTIC_SUMMARY_REPLACE` **未接线**。**2026-09-23 实测** DOCREV 路径 schema **63**。授权可见集 digest 已进 shadow 路径。本行不升 done | `chat` |
| 对话数据治理(D7) | 留存/删除口径、库·备份·日志控制、敏感字段加密边界 | deferred | deferred_enhancement(违规则升 blocker) | [计划](../remediation/2026-09-16-feature-matrix-production-readiness-plan.md) Scope Boundaries;[D7 ADR 草案](../adr/2026-09-17-d7-chat-data-retention.md);[W7 盘点](../audit/2026-09-17-d7-data-inventory.md);[红线证据](../test-reports/2026-09-22-redline-evidence-d7-test-report.md) | 只读盘点 + Track E ID-only 符合性已补。口径仍 `pending-compliance-signoff`;**禁止物理删除**。本行不升 done | `chat` |
| 语义摘要(D3) | 授权后可见集合上的语义摘要;shadow → 可选替换 deterministic | partial | deferred_enhancement | [chat-agent-p6-backlog](../backlog/chat-agent-p6-backlog.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[pu6](../ops/long-term/2026-09-16-pu6-semantic-summary-contract.md);[脚手架](../test-reports/2026-09-16-pu6-semantic-summary-test-report.md);[W2 真 PI](../test-reports/2026-09-17-w2-semantic-summary-shadow-test-report.md);[2026-09-20 复核](../ops/research/2026-09-20-capability-enablement-impact-research.md) | shadow 默认 off。`00058` 增加 `chat_summaries`,写入失败不再伪装成功;运行中的库仍是 schema 53。摘要请求已带 `tool_profile=reasoning`(argv 为 `--no-tools`),当前容器要等镜像或 dev 挂载更新后才生效。授权可见集 digest 仍空。`SEMANTIC_SUMMARY_REPLACE` 未接线。 | `chat` |
| 对话数据治理(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);[D7-TRACE](../remediation/gap-matrix.md) | **after W7**:只读盘点完成(sessions/messages/KB/日志/备份/event)。**未发现**已确认基线违规,未写发布 blocker。口径仍 `pending-compliance-signoff`;禁止按 365/180/30 物理删除。追踪索引另定为 `record`([设计 §9](../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md)),不把本行升 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);[收口](../ops/short-term/2026-09-22-rdev-closeout.md);[报告](../test-reports/2026-09-22-rdev-closeout-test-report.md);[P3 历史](../test-reports/2026-09-19-rdev-p3-real-pi-test-report.md) | **after 2026-09-22 收口**:`rd_proposal` 标题门禁 + 法规表首表截止 dry PASS;nightly 脚本已扩四工作流(FullChain×3+FullNone)。P3 真 PI 三样本重跑因缺 `env:dev` **blocked**(不以 stub 冒充)。剩余:获环境后重跑 P3。本行保持 partial | `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);[红线证据](../test-reports/2026-09-22-redline-evidence-swboot-test-report.md) | **after W5a + 红线证据**:catalog 驱动创建、软件不挂医疗 key。**SWBOOT-10 仍 stub**(L1–L4 证据已补;L5/L6 待授权)。本行不升 done | `workflow-design` |
| 研发设计控制(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);[键统一](../test-reports/2026-09-21-workflow-doc-key-unification-test-report.md) | 项目 143 只读;不终止。`doc_proj*` 同一发布键不能再并存 | `docgov` |
| 文档版本 baseline | 账本、人工修订、确定性 diff+lineage、运行时 UI、负责人通知 | done | non_blocker | [管理](../test-reports/2026-09-13-document-revision-management-test-report.md);[Round20 UI](../test-reports/2026-09-14-document-revision-runtime-ui-test-report.md);[ADR](../adr/2026-09-13-document-version-boundary.md);[proposed/authoritative](../ops/short-term/2026-09-20-proposed-authoritative-reports.md) | **before**:完整 PI narrative 混入 → **after**:迁「PI change-report 叙事」。fallback 报告是本行内显式行为,不是缺口。lineage GET 已按 URL 项目和文档可见性裁剪。test_manager 血缘的下游/上游版本改读文档版本,不再写死 1。Agent 候选报告为 `proposed`,正式提交才写 authoritative 后继并挂到版本;拒绝、替代后旧报告不能再出建议。人工修订、导入和聊天卡仍未分开预估与正式报告,见 [T1](../ops/short-term/2026-09-20-impact-loop-t1.md)。项目追踪索引见下一行 | `docgov` |
| 阶段回溯与影响闭环 | 五表追踪索引、影响报告、L1 文档修订、L2 阶段再打开、待复核软标记、对话修订提案 | done | deferred_enhancement(不挡首发) | [设计](../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md);[Track T](../remediation/2026-09-20-capability-enablement-impact-plan.md);[对话化报告](../test-reports/2026-09-21-trace-panel-to-chat-test-report.md);[T 补强](../ops/short-term/2026-09-22-track-t-strengthen.md) | 已合入 dev。常驻「需求与影响」面板已退役。**2026-09-23 实测** DOCREV 路径 schema **63**;test=`rc-v1.1.0-beta.1` schema 61;main 本轮未晋升。阶段推进确认门禁仍在。不签 D7 对话 ADR | `trace-index` |
| PI change-report 叙事 | 只读消费 diff+lineage 的 PI 叙事;失败全量降级 fallback | partial | deferred_enhancement | [Round20](../test-reports/2026-09-14-document-revision-runtime-ui-test-report.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[pu7](../ops/long-term/2026-09-16-pu7-pi-narrative-contract.md);[W3 真 PI](../test-reports/2026-09-17-w3-pi-change-report-narrative-test-report.md);[红线负例](../test-reports/2026-09-22-redline-evidence-pi-narrative-test-report.md) | flag 默认 **off**(红线不放量)。fallback 全量负例单测已补。pi-agent reasoning 路径已带 `--no-tools`。不打开开关 | `docgov` |
| 阶段回溯与影响闭环 | 五表追踪索引、影响报告、L1 文档修订、L2 阶段再打开、待复核软标记、对话修订提案 | done | deferred_enhancement(不挡首发) | [设计](../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md);[Track T](../remediation/2026-09-20-capability-enablement-impact-plan.md);[对话化报告](../test-reports/2026-09-21-trace-panel-to-chat-test-report.md) | 已合入 dev。常驻「需求与影响」面板已退役,新待复核与下游影响改走已有项目会话。dev schema 59。test/main 未升。阶段推进确认门禁仍在。不签 D7 对话 ADR,不改 `production_ready` | `trace-index` |
| PI change-report 叙事 | 只读消费 diff+lineage 的 PI 叙事;失败全量降级 fallback | partial | deferred_enhancement | [Round20](../test-reports/2026-09-14-document-revision-runtime-ui-test-report.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[pu7](../ops/long-term/2026-09-16-pu7-pi-narrative-contract.md);[脚手架](../test-reports/2026-09-16-pu7-pi-narrative-test-report.md);[W3 真 PI](../test-reports/2026-09-17-w3-pi-change-report-narrative-test-report.md);[2026-09-20 复核](../ops/research/2026-09-20-capability-enablement-impact-research.md);[最小化输入](../ops/short-term/2026-09-20-pi-narrative-clipped-diff.md) | flag 默认 off。`facts.json` 含截断后的 hunk 前后文和影响说明,以及完整 hunk/impact 计数与省略数;摘要 digest 仍不含正文。叙事请求已带 `tool_profile=reasoning`。运行中的 runner 尚未切到 `--no-tools`。不打开开关 | `docgov` |
| 前端工作台 | 三栏 + 块文档 + SSE;错误卡/`TaskRunCard` 竖向进度/busy;版本冲突信封;demo seed 默认关;终止 preview | done | non_blocker | [workbench](../test-reports/2026-09-08-three-column-workbench-and-block-document-test-report.md);[双标签](../test-reports/assets/2026-09-15-conversation-intent-dual-tab/screenshots/tab-b-busy.png);[demo](../test-reports/2026-09-16-demo-seed-pollution-test-report.md);[B4](../test-reports/2026-09-16-frontend-gate-b4-test-report.md)(项目 6363);[TaskRunCard](../test-reports/2026-09-21-taskrun-status-card-persistence-test-report.md) | **before**:空「缺口」却 partial → **after**:本行 done。其他 409 消费方信封复用另列 hardening backlog | `web` |
| PI Runner / 配置链 | pi-agent + MiniMax + typed-result-v1 | done | non_blocker | [piagent](../test-reports/2026-09-13-codex-audit-p0-remediation-test-report.md);[container-env](../test-reports/2026-09-13-container-env-configuration-test-report.md);[typed-result](../test-reports/2026-09-15-pi-typed-result-v1-test-report.md) | 文档生成仍使用读写和搜索工具。`tool_profile=reasoning` argv 为 `--no-tools`。**2026-09-22 实测** pi-agent 已 bind-mount `pi-args.mjs` | `pi-agent` |
| 三环境运维 | dev/test/main + 共享 KB;对话/业务库隔离 | done | non_blocker | [PROJECT.md](../../PROJECT.md) §4;[晋升报告](../test-reports/2026-09-22-dev-gate-and-test-promotion-test-report.md);[DOCREV](../test-reports/2026-09-22-docrev-ui-rerun-test-report.md) | **2026-09-23 实测**:本地/共享 dev DOCREV 路径 schema **63**;test health schema **61**(`rc-v1.1.0-beta.1`);main 本轮未晋升 | `infra` |
| PI Runner / 配置链 | pi-agent + MiniMax + typed-result-v1 | done | non_blocker | [piagent](../test-reports/2026-09-13-codex-audit-p0-remediation-test-report.md);[container-env](../test-reports/2026-09-13-container-env-configuration-test-report.md);[typed-result](../test-reports/2026-09-15-pi-typed-result-v1-test-report.md) | 文档生成仍使用读写和搜索工具。`tool_profile=reasoning` 的 argv 是 `--no-tools` 且不加载搜索扩展;未知 profile 拒绝启动。dev 挂载了 `pi-args.mjs`,但本轮未重启容器 | `pi-agent` |
| 三环境运维 | dev/test/main + 共享 KB;对话/业务库隔离 | done | non_blocker | [PROJECT.md](../../PROJECT.md) §4;CURRENT 环境快照 dev/test schema **48**、main **47** | — | `infra` |
| CI / E2E | PR CI、PG 集成、治理 PG、已签真实 PI 门禁;**nightly** schedule/`workflow_dispatch` + infra/product 分类 receipt | done | 加固(阻止**下一次**晋升,不自动否定已发布) | [BUG-08](../test-reports/2026-09-16-ci-governance-pg-bug08-test-report.md);[PI 三工作流](../test-reports/2026-09-16-pi-three-workflow-e2e-test-report.md);[Wave2B](../test-reports/2026-09-16-wave2b-nightly-promotion-receipt-test-report.md);[Wave2C](../test-reports/2026-09-16-wave2c-same-image-digest-test-report.md);[W1 green](../test-reports/2026-09-17-w1-ci-e2e-green-nightly-test-report.md) + [receipt `6e2476f0…`](../assets/promotion-receipts/6e2476f0f2e408e111fe06ca7c31a38294a340b3.json) | **before**:partial(FullNone product_fail / secrets 文案过时)→ **after**:secrets 已配;duplicate goose 00048 已清;FullNone+U8 nightly `verdict=pass` | `ci` |
| Artifact 同 digest 晋升 | 候选 commit 一次构建、按 digest 晋升、promotion receipt | done | 加固 | [计划 PU5B](../remediation/2026-09-16-feature-matrix-production-readiness-plan.md);[Wave2B](../test-reports/2026-09-16-wave2b-nightly-promotion-receipt-test-report.md);[Wave2C](../test-reports/2026-09-16-wave2c-same-image-digest-test-report.md) | **关闭**:same-image pin(`candidate-images-*` + `PINNED_IMAGE_MODE` + promote `--require-digests`)。**声明**:单机 retag/digest pin;远程 registry 推送另立任务 | `infra` |
| 可靠事件核心 | PG dispatcher、notify/advance/projection live、生产闭包 hook 退出、Phase2 选择性解耦已合入 | done | non_blocker | [E0A–E2](../test-reports/2026-09-15-event-e0a-production-scope-contract-test-report.md) 等;[复盘](../ops/research/2026-09-15-track-e-retrospective.md);[shared live](../test-reports/2026-09-15-event-notify-shared-live-test-report.md);[phase2 closeout](../test-reports/2026-09-15-phase2-closeout-test-report.md) | **before**:与 FAV off 混成 partial → **after**:FAV 独立行。选择性后续解耦按收益触发 | `architecture-docs` / `events` |
| 模块开发规范 | 窄端口、领域事件、wire DTO 三种契约;故障隔离红线;新增模块/表/事件流程。不含批次 A–G 的代码整改 | done | non_blocker | [规范](../system-design/2026-09-20-module-development-standards.md);[审计](../audit/2026-09-20-module-coupling-audit.md);[ADR](../adr/2026-09-14-modular-monolith-decoupling.md) | 文档入口已立。代码整改不在本行 | `module-decoupling-spec` |
| 模块解耦批次 A–G | server 端口装配、chat 解环、docgov 词汇、工作流单向依赖、巨型文件、前端 api client、21 条例外清零 | done | non_blocker | [分批计划](../remediation/2026-09-20-module-decoupling-batch-plan.md);[审计](../audit/2026-09-20-module-coupling-audit.md);[A](../ops/short-term/2026-09-22-server-assembly-cleanup.md);[B](../ops/short-term/2026-09-22-chat-app-decouple.md);[C](../ops/short-term/2026-09-22-docgov-vocabulary-convergence.md);[D](../ops/short-term/2026-09-22-workflow-def-unidirect.md);[E](../ops/short-term/2026-09-22-engine-split.md);[F](../ops/short-term/2026-09-22-web-api-client.md);[G1](../ops/short-term/2026-09-22-g1-exception-clearance.md);[G2/G3](../ops/short-term/2026-09-22-g2-g3-exception-clearance.md) | **after 2026-09-22**:A–F 与 E 已合入;G1/G2/G3 例外清零后 `arch-check --mode block` PASS 且 baseline import/sql_write/path/event **全 0**。关闭本伞行 | `module-decoupling-spec` |
| Final Artifact Vault(FAV) | 不可变终态制品库;`FAV_DEGRADED_READ=false` | partial | deferred_enhancement | [Track E 复盘](../ops/research/2026-09-15-track-e-retrospective.md);[U7 报告](../test-reports/2026-09-16-fav-u7-incremental-test-report.md);[W6 shadow](../test-reports/2026-09-17-w6-fav-subscriber-shadow-test-report.md);[红线证据](../test-reports/2026-09-22-redline-evidence-fav-test-report.md) | subscriber shadow 只计算 intended outcome。**live 未放量**;观察窗起点已登记。`FAV_DEGRADED_READ` 默认 false;禁止整支 merge | `events` |
| 系统管理台 | 全屏系统级管理视图(总览/KB/特性开关/系统设置/工作流/角色/用户/文档 8 分组);`/api/v1/admin/system/*`;`system_settings` 白名单可写;吸收下线 AdminSettingsModal;细粒度 `system:*` + 设置审计日志(goose 00065) | done | non_blocker | [short-term](../ops/short-term/2026-09-17-system-admin-console.md);[测试报告](../test-reports/2026-09-17-system-admin-console-test-report.md);residual `modular-decouple-residual-2026-09-23` | 剩余 deferred:Playwright 实跑、KB 运维动作、白名单项接消费方 | `web` + `sysadmin` |
| 模块解耦批次 A–G | server 端口装配、chat 解环、docgov 词汇、工作流单向依赖、巨型文件、前端 api client、21 条例外清零 | planned | non_blocker | [分批计划](../remediation/2026-09-20-module-decoupling-batch-plan.md);[审计](../audit/2026-09-20-module-coupling-audit.md) | 各批独立 short-term 与验收后另拆行升 `done`。G1 例外 2026-09-28 到期,到期前须迁走或书面延期。禁止把本行标成进行中来代表七批都已开工 | `module-decoupling-spec` |
| Final Artifact Vault(FAV) | 不可变终态制品库;`FAV_DEGRADED_READ=false` | partial | deferred_enhancement | [Track E 复盘](../ops/research/2026-09-15-track-e-retrospective.md);[U7 报告](../test-reports/2026-09-16-fav-u7-incremental-test-report.md);[W6 shadow](../test-reports/2026-09-17-w6-fav-subscriber-shadow-test-report.md);[short-term](../ops/short-term/2026-09-17-w6-fav-subscriber-shadow.md) | **after W6**:subscriber `ObserveShadow` 只计算 intended outcome,不写副作用。仍**禁止**整支 merge;`FAV_DEGRADED_READ` 默认 false;**live 未放量**(staging→artifact→publication 各 ≥7 天观察窗) | `events` |
| 系统管理台 | 全屏系统级管理视图(总览/KB/特性开关/系统设置/工作流/角色/用户/文档 8 分组);`/api/v1/admin/system/*`;`system_settings` 白名单可写;吸收下线 AdminSettingsModal | done | non_blocker | [short-term](../ops/short-term/2026-09-17-system-admin-console.md);[测试报告](../test-reports/2026-09-17-system-admin-console-test-report.md);commit `f1404d5`/`0eaca61`、merge `dc7c31e`(dev);dev 冒烟 schema 49 + 四端点 + 写读回环 PASS | 二期:Playwright 实跑、细粒度 `system:*` 权限、设置审计日志、KB 运维动作、白名单项接消费方 | `web` + `sysadmin` |
| 个人工程中控台(已移出) | 原本地只读看板与后来的 Control Center 都不再属于本仓库 | removed | 进度管理改由独立项目承担 | [历史设计](../archive/design/2026-09-17-personal-engineering-control-center-plan.md);[历史报告](../test-reports/2026-09-17-engineering-dashboard-test-report.md) | 2026-09-19 删除 `cmd/control-center`、`internal/controlcenter`、`control-center/web`、`deploy/control-center`。不恢复 `engineering-dashboard` | — |
---
@@ -100,7 +100,7 @@
## 2026-09-17 首次加载性能专项
首次加载与重启首访性能优化:**done(U1–U5/U7 关账口径;U6 明确不加索引)**。[审计](../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) · [2026-09-22 收口](../test-reports/2026-09-22-initial-load-closeout-test-report.md)。U2:自托管字体 + br/gzip。U3:导出/预览/管理台/块编辑器/Mermaid/公式延迟加载;2026-09-22 对 schema 61 部署包 `index-CgkGfOP7.js` 浏览器瀑布 n=20(含慢网)确认首屏与首可操作路径无 katex/mermaid/docx。U4:登录只同步当前项目成员;会话列表代次合并。U5:`/auth/me` 复用已核用户。U6:不加索引(瓶颈曾是成员扇出,无慢 SQL 证据)。U1:慢网 + CPU 4x 各 n=20 — 10 Mbps 表单 p75 599 ms(预算 1500)、2 Mbps p75 1346 ms(预算 3000),未放宽阈值。U7:[重启报告](../test-reports/2026-09-19-initial-load-u7-restart-test-report.md) postgres+app→`/ready` 1.0–1.2 s;2026-09-22 补测 `/ready` 后冷导航表单可见 n=20,p75 75 ms,相对约 10 s 历史诊断达到 ≤5 s(50%)目标——**仅限该口径**,不宣称宿主机整机开机首访。macOS 用 `PLAYWRIGHT_CHANNEL=msedge`(沙箱无法拉 Playwright Chromium)。mutex `web + static-delivery` / `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,53 @@
---
title: "task-bubble-bind → test 晋升报告"
date: 2026-09-23
task_id: promote-task-bubble-bind-test-2026-09-23
verdict: PASS
---
# task-bubble-bind → test 晋升报告
## 结论
local `test@19b91ae1` + tag `rc-v1.1.0-beta.4` 已含 task-bubble-bind(祖先 `b9b192a8`);test 环境 `:8081` schema_version=65;pinned 重建自 `cc91c217` PASS receipt;health/ready ok。未 push 远端。
## 版本矩阵
| 项 | 值 |
|---|---|
| local test | `19b91ae1` |
| rc tag | `rc-v1.1.0-beta.4` → `19b91ae1` |
| local_dev (P2) | `cc91c217` |
| prior test (P1) | `44bed71c` |
| pinned commit | `cc91c217` |
| app digest | `shuimu-agent-app@sha256:34993447bc984d455f9e89b7648c130e34b0076a62b5779a751707b2c4dbfe5c` |
| pi-agent digest | `shuimu-pi-agent@sha256:3466990213ac21ebd593734540ddcf8e11aad3e341754dcfba6b8366e47a1de8` |
| test health schema | 65 |
| 冒烟 | `/health` ok;`/ready` ok;web bundle 含 `assistant_msg_id` |
## 命令与判定
| 步骤 | 判定 | 说明 |
|---|---|---|
| promotion-receipt-check `--require-digests` @ `cc91c217` | PASS | 收据已就位 |
| merge --no-ff `dev` → promote WT | PASS | `19b91ae1` P1=`44bed71c` P2=`cc91c217` |
| agentctl validate | PASS | sha=`19b91ae1` |
| update-ref `refs/heads/test` | PASS | git:test 租约 |
| candidate-images-apply test | PASS | 写入 `configs/.env.test.images` |
| env-service test rebuild | PASS | pinned recreate,未 rebuild 镜像 |
| health/ready | PASS | schema_version=65 |
## 用户可测入口
- URL:http://127.0.0.1:8081/
- 建议场景:在项目对话中触发任务执行;确认助手气泡不双开、失败卡「继续」仅在可 resume 时可见、「重新开始」开新 turn。
## 状态
| 字段 | 值 |
|---|---|
| review_state | not_required |
| integration_state | merged_local_test |
| deployment | test_ok |
| remote_sync | not_requested |
| cleanup | pending |
@@ -0,0 +1,21 @@
{
"commit": "cc91c217e7c0e4732de3923d0fa229fd4bd65798",
"source_tree": "f51aeb73199c50f122ca29ce24bf5674f3a5cdbe",
"source_context": "git-archive",
"recorded_at": "2026-09-23T03:53:14Z",
"tags": {
"app": "shuimu-agent-app:candidate-cc91c217e7c0",
"events": "shuimu-agent-events:candidate-cc91c217e7c0",
"pi-agent": "shuimu-pi-agent:candidate-cc91c217e7c0"
},
"image_ids": {
"app": "sha256:34993447bc984d455f9e89b7648c130e34b0076a62b5779a751707b2c4dbfe5c",
"events": "sha256:34993447bc984d455f9e89b7648c130e34b0076a62b5779a751707b2c4dbfe5c",
"pi-agent": "sha256:3466990213ac21ebd593734540ddcf8e11aad3e341754dcfba6b8366e47a1de8"
},
"image_digests": {
"app": "shuimu-agent-app@sha256:34993447bc984d455f9e89b7648c130e34b0076a62b5779a751707b2c4dbfe5c",
"events": "shuimu-agent-app@sha256:34993447bc984d455f9e89b7648c130e34b0076a62b5779a751707b2c4dbfe5c",
"pi-agent": "shuimu-pi-agent@sha256:3466990213ac21ebd593734540ddcf8e11aad3e341754dcfba6b8366e47a1de8"
}
}
@@ -0,0 +1,22 @@
{
"verdict": "pass",
"commit": "cc91c217e7c0e4732de3923d0fa229fd4bd65798",
"recorded_at": "2026-09-23T03:53:34Z",
"runner_url": "http://127.0.0.1:18866",
"model_id": "MiniMax-M3",
"protocol": "typed-result-v1",
"image_digests": {
"app": "shuimu-agent-app@sha256:34993447bc984d455f9e89b7648c130e34b0076a62b5779a751707b2c4dbfe5c",
"events": "shuimu-agent-app@sha256:34993447bc984d455f9e89b7648c130e34b0076a62b5779a751707b2c4dbfe5c",
"pi-agent": "shuimu-pi-agent@sha256:3466990213ac21ebd593734540ddcf8e11aad3e341754dcfba6b8366e47a1de8"
},
"suite": "scoped-task-bubble-bind-integrate",
"failure_class": "none",
"evidence_refs": [
".doc/test-reports/assets/promotion-receipts/evidence-cc91c217e7c0-20260923T0352Z/arch-check.txt",
".doc/test-reports/assets/promotion-receipts/evidence-cc91c217e7c0-20260923T0352Z/go-server.txt",
".doc/test-reports/assets/promotion-receipts/evidence-cc91c217e7c0-20260923T0352Z/npm-test.txt",
".doc/test-reports/assets/promotion-receipts/evidence-cc91c217e7c0-20260923T0352Z/commit-subject.txt",
".doc/test-reports/2026-09-23-task-bubble-bind-test-report.md"
]
}
@@ -0,0 +1,5 @@
arch-check mode=block
boundaries=/private/tmp/Agent-System/.worktrees/integrate-task-bubble-bind-2026-09-23/.doc/system-design/module-boundaries.yaml
ok chat-agent-system/internal/archtest 0.546s
ok chat-agent-system/internal/archtest 0.502s
arch-check block: production gate passed
@@ -0,0 +1,2 @@
cc91c217e7c0e4732de3923d0fa229fd4bd65798
merge: feature/task-bubble-bind-2026-09-23 (assistant_msg_id bind + error actions)
@@ -0,0 +1 @@
{"status":"ok","env":"dev","agent_backend":"pi-agent","version":"v1.0","shared_kb_port":5432,"kb_ready":true,"database_ready":true,"schema_version":65,"schema_ready":true,"task_store_ready":true}
@@ -0,0 +1 @@
ok chat-agent-system/internal/server 23.579s
@@ -0,0 +1 @@
ok chat-agent-system/internal/stream 0.333s
@@ -0,0 +1,603 @@
> shuimu-workbench@1.0.0 test
> tsx --test "src/**/!(*InteractiveCard*|*chatWindowArtifact*|*deliverableSync*).test.ts" && vitest run src/components/chat/InteractiveCard.test.ts src/components/chat/chatWindowArtifact.test.ts src/components/chat/deliverableSync.test.ts
✔ AuthClient: 基础登录与 .env 超级管理员鉴权 (5.11725ms)
✔ AuthClient: 自主注册受控流程(仅填用户名密码姓名,职位强制绑定访客待指派) (0.174708ms)
✔ AuthClient: 开启注册需审批时,注册账号处于待审状态并禁止登录 (0.155875ms)
✔ AuthClient: 管理员创建账号必须在首次登录修改密码 (0.103208ms)
✔ mapUserAccount: snake_case Go contract → camelCase (0.399292ms)
✔ mapUserAccount: prefers snake_case when both present (0.05975ms)
✔ mapLoginResult/mapMeResult use top-level must_change_password as sole authority (0.098333ms)
✔ mapUserAccountList maps admin users list (0.063333ms)
✔ AuthClient.login + fetchMe map real snake_case wire payloads (14.867458ms)
✔ shouldAutoRetryChat: disabled until idempotency (0.383083ms)
✔ shouldAutoRetryTask: transient only, max 2 (0.070042ms)
✔ shouldAutoRetryTask: document busy never retries (0.042083ms)
✔ shouldAutoRetry alias delegates to task path (0.709834ms)
✔ autoRetryDelayMs: 1s then 2s (0.05675ms)
✔ fallbackErrorClass: network → transient, workspace → resumable (0.047125ms)
✔ upsertChatSession surfaces safe INTERNAL envelope instead of raw JSON text (36.257292ms)
[sse] 忽略无法解析的帧: {not valid json SyntaxError: Expected property name or '}' in JSON at position 1 (line 1 column 2)
at JSON.parse (<anonymous>)
at parseFrame (/private/tmp/Agent-System/.worktrees/integrate-task-bubble-bind-2026-09-23/web/src/api/chatStream.ts:124:26)
at parseSSEChunk (/private/tmp/Agent-System/.worktrees/integrate-task-bubble-bind-2026-09-23/web/src/api/chatStream.ts:173:20)
at TestContext.<anonymous> (/private/tmp/Agent-System/.worktrees/integrate-task-bubble-bind-2026-09-23/web/src/api/chatStream.test.ts:41:31)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.processPendingSubtests (node:internal/test_runner/test:974:18)
at Test.postRun (node:internal/test_runner/test:1542:19)
at Test.run (node:internal/test_runner/test:1467:12)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
✔ parseSSEChunk: parses event and data lines (0.442917ms)
✔ parseSSEChunk: keeps incomplete frame in rest (0.07675ms)
✔ parseSSEChunk: flush parses final frame without trailing delimiter (0.072792ms)
✔ parseSSEChunk: ignores heartbeat comments and keeps last id (0.052917ms)
✔ parseSSEChunk: skips a single malformed frame and keeps parsing the next valid frame (2.154583ms)
✔ parseSSEChunk: parses CRLF-delimited frames (0.070375ms)
✔ parseSSEChunk: mixed LF and CRLF delimiters (0.048875ms)
✔ API_BASE is empty relative base (0.350917ms)
✔ apiFetch attaches Bearer from session storage (41.351459ms)
✔ apiFetch retries GET on 503 then succeeds (201.180292ms)
✔ apiFetch does not retry POST by default (0.206291ms)
✔ readApiError preserves typed envelope for error cards (0.665166ms)
✔ apiFetch auth:false skips Authorization (0.117541ms)
▶ docgov lifecycle API client
✔ claimDocument posts to /api/v1/docgov/claim with author role (40.303042ms)
✔ submitForReview posts to /api/v1/docgov/submit-review (0.329583ms)
✔ reviewDecision posts action and optional reason (0.216417ms)
✔ approverDecision posts action and rollback_to (0.212792ms)
✔ proposeModification posts to /api/v1/docgov/proposal (0.236625ms)
✔ decideModificationProposal posts to /api/v1/docgov/proposal/decide (0.191542ms)
✔ docgov lifecycle API client (42.030375ms)
✔ updateFreeformDoc exposes CONCURRENCY_CONFLICT on 409 (38.273542ms)
✔ addProjectMember exposes structured ProjectSettingsApiError on 403 (38.880292ms)
✔ updateProjectMember surfaces safe INTERNAL message on 500 duty-sync failure (0.313708ms)
▶ projectSettingsError
✔ keeps status, code, message and issues on PLAN_FROZEN (2.285208ms)
✔ maps revision and concurrent conflicts to distinct recovery (0.074083ms)
✔ joins validation issues but still keeps typed codes (0.079458ms)
✔ prefers envelope code over legacy error field (0.0475ms)
✔ unwraps nested business JSON inside VERSION_CONFLICT envelope (0.060209ms)
✔ maps bare VERSION_CONFLICT envelope to retry_after_switch (0.041208ms)
✔ retains the local draft when a late tab hits PLAN_FROZEN (0.038334ms)
✔ prefers error_code over legacy bare error string (DOC_BUSY) (0.037ms)
✔ projectSettingsError (3.237667ms)
✔ fetchProjectTrace turns null arrays into empty arrays (28.1145ms)
✔ fetchProjectTrace keeps real arrays and rejects failed responses (0.551542ms)
✔ Project workflow types validation (2.927958ms)
✔ createTaskRun exposes DOC_BUSY detail without a retryable run (13.587167ms)
✔ parseSSEChunk tracks id seq for after_seq reconnect (0.188708ms)
✔ subscribeTaskRunEvents reconnects on EOF with advancing after_seq (0.744208ms)
✔ readTaskRunSSEOnce marks non-terminal EOF for reconnect (0.154ms)
✔ subscribeTaskRunEvents fails fast on 401 without retrying (0.159292ms)
✔ subscribeTaskRunEvents fails fast on 404 without retrying (0.110292ms)
✔ buildTaskRequest: maps five project fields + task_key + user identity (0.442625ms)
✔ buildTaskRequest: omits optional fields when absent (0.059625ms)
✔ buildTaskRequest: includes materials when provided and non-empty (0.333166ms)
✔ buildResumeRequest: adds work_dir on top of task request (0.051208ms)
✔ buildTaskRequest: canonicalizes legacy doc-p doc_id (0.112375ms)
✔ buildTaskRequest: UI-05 pinned intake keeps task_key + doc_proj6109_intake (0.070292ms)
✔ buildResumeRequest: forwards add_steps when provided (0.058042ms)
✔ CategoryDock: 渲染顶部 🔔 未读提醒项及角标数字 (6.268042ms)
✔ CategoryDock: isAllReadCompleted 为 true 时渲染完成态提示 (0.997417ms)
✔ CategoryDock: 0 未读时不渲染红色未读角标 (0.728208ms)
✔ CategoryDock: 分类项包含依次跳转与遍历提示信息 (47.769625ms)
✔ chat column lives outside the workbench shell (1.308667ms)
✔ InputArea keeps draft when send preflight fails (1.396541ms)
✔ InputArea clears draft only after accepted send (0.420166ms)
✔ InputArea shows thinking block message (0.065417ms)
✔ InputArea keeps draft when attachment registration fails (0.082ms)
✔ TaskRunCard renders timeline with title badge and current step (4.8ms)
✔ TaskRunCard completed state keeps card with duration and artifact (0.744542ms)
✔ TaskRunCard sanitizes frozen progress labels on completed steps (0.769625ms)
✔ TaskRunCard keeps shell when only taskRunId is present (0.279333ms)
✔ active document pane lives outside the workbench shell (0.967625ms)
✔ isTemplateOnly 交付物应正确识别为初始模板展示态 (0.543458ms)
✔ workbench shell lives outside App (1.086667ms)
✔ 左侧栏鼠标严密绝对跟随与夹紧测试 (Left Rail Exact Pointer Following & Clamping) (0.325708ms)
✔ 右侧栏鼠标严密绝对跟随与反向位移测试 (Right Rail Exact Pointer Following & Inverted Delta) (0.05275ms)
✔ trace panel is not mounted above the chat stream (1.864166ms)
✔ detects legacy mock and neuropulse/ten-projects ids (0.401042ms)
✔ detects colliding demo project ids (0.056542ms)
✔ applyRestoredFileRaw: 以 prev 为权威,只补丁缺失 fileRaw,不丢新增条目 (0.547292ms)
✔ applyRestoredFileRaw: 无可用 fileRaw 时返回同一引用 (0.059625ms)
✔ login member sync stays one request for 1, 30 and 100 projects (1.16475ms)
✔ viewer seed keeps session visibility without a member-list call (0.134084ms)
✔ later session response cannot overwrite a newer user (0.060333ms)
✔ in-flight member sync collapses to one call (0.090958ms)
✔ 每人独立私聊:同一项目不同用户拥有不同 sessionId (0.42475ms)
✔ 左侧会话列表按当前用户过滤,不可见他人私聊 (0.106125ms)
✔ 消息严格归属各自私聊 session,无跨用户混聊 (0.389166ms)
✔ 切换用户时 resolve 到该用户同项目私聊会话 (0.088625ms)
✔ resolve 优先有消息的私聊,跳过空壳 sess-p{N}-u{id} (0.133125ms)
✔ ensurePrivateSessionsForUser 为缺失用户补齐空私聊 (0.186667ms)
✔ 多项目会话消息隔离测试仍成立(endo vs ultrasound) (0.103083ms)
✔ window cache LRU: 驱逐带 userId 前缀的完整 cache key,不留孤儿条目 (0.5745ms)
✔ window cache: 无 schema 的旧载荷不当作有效缓存 (0.066ms)
✔ window cache: 读写同一 userId 前缀,跨用户不串读 (0.0785ms)
✔ same account and first login do not reset workbench storage (0.344375ms)
✔ switching accounts resets workbench storage (0.056833ms)
✔ resetWorkbenchStorage preserves org user directory for cross-account project create (1.447583ms)
✔ parseAnchorHash: 正确解析标准深链 hash (0.7825ms)
✔ formatAnchorHash: 正确构造深链格式 (0.070916ms)
✔ navigateToAnchor: 快路径直接命中 DOM 节点 (0.190166ms)
✔ navigateToAnchor: 慢路径拉取分片后命中 (81.332041ms)
✔ resolveTurnAnchorId: 方案 A 轮次归一化测试 (0.571916ms)
✔ 全链路场景 1: 用户自主受控注册(仅填用户名/密码/姓名,职位严格绑定访客待指派) (1.581292ms)
✔ 全链路场景 2: 系统准入策略(关闭自主注册与开启强制审批流转) (0.32675ms)
✔ 全链路场景 3: 管理员开通账号首次强制改密闭环 (0.107542ms)
✔ 全链路场景 4: 环境标识随登录会话返回(dev/test/main) (0.070791ms)
✔ cleanHeadingContent: 手工多级序号前缀清洗与专业词汇保护 (0.543583ms)
✔ 标题多层级自动编号:单 H1 文档总标题自适应模式 (1 -> 1.1 -> 1.1.1) (0.157833ms)
✔ 标题多层级自动编号:多 H1 标准大章模式 (0.065958ms)
✔ 跨章节图、表、公式多级按章重编号测试 (表 1-1, 表 2-1, 图 3-1, 式 (4-1)) (0.071167ms)
✔ 有序列表与无序列表编号与渲染功能测试 (2.300458ms)
✔ 动态块操作闭环重编号验证 (Insert, Move, Delete) (0.138792ms)
✔ findMatchingBlockForReview: 能够精准按审查关键词(电气安全/EMC/竞品)定位段落块 (0.434958ms)
✔ findMatchingBlockForReview: 能够按外部指定 hint 线索精确命中目标块 (0.080709ms)
✔ createRejectConfirmationCard: 生成合规危险级驳回门禁卡片 (0.865667ms)
✔ isAffirmativeResponse: 准确识别双轨交互中的肯定意图输入 (0.106833ms)
✔ findLastActiveCard: 正确在会话历史中提取最新的待决策卡片 (0.087417ms)
✔ decrementActiveCardsTtl: 多轮对话超时递减与自动失效归档 (0.07475ms)
✔ applyConfirmRejectToDoc & applyUndoRejectToDoc: 驳回挂载批注与60s窗口期撤销完整闭环 (0.140709ms)
✔ resolveCardInMessages & cancelCardInMessages: 消息流中卡片终态沉淀 (0.116708ms)
✔ classifyRejectUtterance: 询问原因 → QUERY_REJECT_REASON (0.490167ms)
✔ classifyRejectUtterance: 明确执行 → EXECUTE_REJECT (0.0545ms)
✔ classifyRejectUtterance: 模糊 → OTHER (0.068ms)
✔ resolveDocGovCard: 编制人查询 → 信息卡且无 confirm_reject (3.623ms)
✔ resolveDocGovCard: 审核人执行 + reviewing → 确认卡 (0.164666ms)
✔ resolveDocGovCard: 编制人误说执行驳回 → 无权纯文本 (0.060292ms)
✔ resolveDocGovCard: 批准人 + approving → 终审确认卡 (0.055083ms)
✔ resolveDocGovCard: 编制人 OTHER → 引导查询无危险按钮 (0.047333ms)
✔ canConfirmReject: 仅审核/批准 (0.059667ms)
✔ deriveFallbackCategory identifies categories correctly (0.449834ms)
✔ enrichMessagesWithCategories backfills categories without overwriting existing ones (0.120125ms)
✔ Markdown ➔ Block AST 解析测试 (标题自适应编号与图表公式全链路) (2.883125ms)
✔ 动态重编号引擎测试 (多 H1 规范章节重排验证) (0.197416ms)
✔ Block AST ➔ Markdown 双向无损往返还原测试 (0.22175ms)
✔ 三层交付物多用户隐私绝对隔离测试 (Multi-user Strict Privacy Isolation) (0.417ms)
✔ 一键共享至项目参考库流转测试 (Promote to Shared Reference Test) (0.081875ms)
✔ 撤回共享恢复私有草稿测试 (Revoke Shared Reference Test) (0.187ms)
✔ 受控工作流纯净性红线检验 (Workflow Purity Security Red Line) (0.047917ms)
✔ isSameMessage: clientTurnId match (0.428542ms)
✔ isSameMessage: serverId match without turn (0.061792ms)
✔ filterPendingLiveMessages: real temp vs server id (0.06775ms)
✔ mergeLiveOverHistory preserves server id from live (0.058166ms)
✔ applyPhaseEvent: appends first phase as running node (0.498792ms)
✔ applyPhaseEvent: completes predecessors when a new phase arrives (0.093625ms)
✔ applyPhaseEvent: same phase refreshes label in place (no duplicate node) (0.085959ms)
✔ applyPhaseEvent: unknown phase falls back to hourglass meta (0.041458ms)
✔ applyPhaseEvent: prefers backend message over short label (0.047916ms)
✔ applyPhaseEvent: step_completed closes running entry without appending (0.106209ms)
✔ applyPhaseEvent: stage_completed closes entries (0.051875ms)
✔ applyPhaseEvent: task_failed appends warning node (0.039042ms)
✔ applyPhaseEvent: decorates label with step index / total steps (0.047333ms)
✔ applyPhaseEvent: repeated step_executing with step_index gets separate nodes (0.076875ms)
✔ applyPhaseEvent: ignores event without phase payload (0.040083ms)
✔ applyPhaseEvent: step_failed marks running entry as failed (keeps step label) (0.05ms)
✔ applyPhaseEvent: step_failed appends failed node when no running entry exists (0.038875ms)
✔ applyPhaseEvent: retry of a failed step resets it to running (0.040917ms)
✔ applyPhaseEvent: stores detail from phase.message (0.027958ms)
✔ PHASE_META: document_parsing and document_summarizing are registered (0.042125ms)
✔ PLAN_CONFIRM 卡片来自 PlanView 且不触达 AST (0.410375ms)
✔ 409 冲突把卡片标为 outdated 并换上最新 revision (0.082041ms)
✔ GET reconcile 用权威 PlanView 覆盖本地 executing,不假装成功 (0.071709ms)
✔ 过期计划映射 expired (0.040958ms)
✔ 非计划卡不被误判 (0.042ms)
✔ 集成验证:项目切换时交付物严格隔离,新建项目即刻包含 7 份模板副本 (4.593875ms)
✔ 集成验证:三层隐私与项目物理隔离双重约束 (0.574917ms)
✔ 用例 1: DEFAULT_ROLES 包含 5 种默认角色且具备预期权限 (0.440292ms)
✔ 用例 2: 系统管理员 (ADMIN) 与具备 perm:manage 用户的通配豁免特权 (0.089625ms)
✔ 用例 3: 常规工作流基线可见性 (workflow:view_all) 判定 (0.094708ms)
✔ 用例 4: 单文档覆盖 - designated_only (仅编制/审核/批准人可见,其他用户被精确拦截) (0.053708ms)
✔ 用例 5: 单文档覆盖 - role_whitelist (仅白名单内角色可见,其他角色被精确拦截) (0.051542ms)
✔ 用例 6: 单文档覆盖 - public (放宽可见性,无 workflow:view_all 权限的访客也能查阅) (0.036875ms)
✔ 用例 7: 私密文档隔离强红线 (category === private 无论任何管理员或单文档覆盖,非创建者绝对不可见) (0.045709ms)
✔ 用例 8: 核心业务动作权限拦截判定 (canPerformDocAction & hasPermission) (0.063292ms)
✔ 用例 9: filterVisibleDeliverablesWithRBAC 能够批处理过滤大盘交付物 (0.3885ms)
✔ 集成场景 1: 动态新增合规审计员角色,并配置其仅能查阅特定单文档覆盖 (0.466541ms)
✔ 集成场景 2: 服务端 capabilities 变更后权限即刻生效 (0.069709ms)
✔ 集成场景 3: 单文档覆盖 designated_only 严格收紧与撤回恢复全流程 (0.080042ms)
✔ renderInlineMarkdown: renders bold, italic, strikethrough (0.7405ms)
✔ renderInlineMarkdown: escapes raw HTML tags to prevent XSS (0.430875ms)
✔ renderInlineMarkdown: blocks javascript: link hrefs (0.079917ms)
✔ renderInlineMarkdown: renders inline code and preserved line breaks (0.132417ms)
✔ renderInlineMarkdown: renders headings lists and tables for chat replies (0.235708ms)
✔ renderInlineMarkdown loads katex only after a formula is seen (17.754875ms)
✔ sanitizeMermaidCode: auto wraps unquoted labels containing brackets or comparison operators (0.259875ms)
(node:14741) ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.
(Use `node --trace-warnings ...` to show where the warning was created)
✔ DOCX 渲染器行内文本与公式解析测试 (parseInlineContent) (4.759291ms)
✔ DOCX 渲染器 LaTeX 原生 OMML 转换引擎测试 (latexToOmml) (2.088ms)
✔ DOCX 渲染器 Mermaid 语法净化与容错测试 (sanitizeMermaidCode) (0.218708ms)
✔ DOCX 渲染器 SVG 净化防 Canvas 污染测试 (cleanSvgForCanvas) (0.284625ms)
✔ DOCX 渲染器全量编译测试 (buildDocxModel & exportDocumentToDocx) (133.161875ms)
✔ XLSX 渲染器多表提取与工作簿编译测试 (buildXlsxWorkbook & exportDocumentToXlsx) (5.430083ms)
▶ Reply Document IR & Export Engine
✔ deriveReplyTitle and sanitizeFilename derive title and safe file name (0.49775ms)
✔ deriveReplyTitle handles text without heading (0.105875ms)
✔ parseReplyMarkdown parses headers, lists, code, and tables (0.933791ms)
✔ renderClipboardHtml renders self-contained styling for office tools (0.208ms)
✔ renderClipboardHtml converts LaTeX formulas to native MathML for Word/Office (4.907083ms)
✔ renderPlainText strips formatting cleanly (0.328583ms)
✔ serializeMarkdown round-trips to valid markdown (0.131333ms)
✔ stripUnsafeHtml strips script tags and dangerous event handlers (0.249667ms)
✔ escapeHtml escapes math error payloads used by BlockEditorModal catch path (0.063791ms)
✔ Reply Document IR & Export Engine (8.051209ms)
✔ createProjectTemplateDeliverables: 必须精确生成 7 份全生命周期受控文档副本 (5.486042ms)
✔ resolveRequirementsTaskKey prefers intake for 初始需求表 (0.489709ms)
✔ resolveRequirementsTaskKey selects user_requirements for explicit URS (0.048917ms)
✔ UI-02 first-round prompt with 首轮+用户需求+摸底 must be intake not user_requirements (0.199333ms)
✔ 首轮 / 需求摸底 / 摸底 beat bare 用户需求 (0.041ms)
✔ bare 用户需求 without V0.1 markers stays user_requirements (0.042125ms)
✔ matchTemplateDeliverable uses intake key when pool only has URS template (0.126875ms)
✔ resolveTaskTemplateForMessage keeps intake key with URS-only pool (0.04875ms)
✔ matchTemplateDeliverable prefers intake when both templates exist (0.034667ms)
✔ read-only request does not start a document task: 总结一下用户初始需求表 (0.043792ms)
✔ read-only request does not start a document task: 查看用户初始需求表 (1.128666ms)
✔ read-only request does not start a document task: 用户初始需求表现在谁在编辑 (0.186791ms)
✔ read-only request does not start a document task: 分析一下用户需求表里的风险 (0.053208ms)
✔ read-only request does not start a document task: 用户初始需求表 (0.03025ms)
✔ explicit write action still starts intake (0.06325ms)
✔ explicit update action still starts URS (0.092417ms)
✔ UI-05 prompt without active doc still keyword-routes to feasibility_reg (0.14525ms)
✔ UI-05 prompt + registered intake pins intake and doc_proj6109_intake (0.098416ms)
✔ read-only current-doc request does not start a task (0.037959ms)
✔ template-only active slot is not pinned; keywords still apply (0.045334ms)
✔ explicit named deliverable can switch away from active intake (0.071208ms)
✔ domain 注册法规 without current-doc deixis still routes feasibility_reg (0.036958ms)
✔ mismatched title vs docId suffix prefers docId taskKey (0.038667ms)
✔ deixis 当前文档 pins registered intake (0.036292ms)
✔ deixis 本文件 pins registered intake (0.02025ms)
✔ deixis 这份文档 pins registered intake (0.021291ms)
✔ deixis 本文档 pins registered intake (0.020792ms)
✔ deixis 本受控文档 pins registered intake (0.01775ms)
✔ no active doc does not invent a pin (0.033334ms)
✔ UI-11 named 系统设计输入 beats negated 需求 background (0.028667ms)
✔ mixed generate-design + do-not-cover-requirements stays prelim_design (0.020333ms)
✔ current-doc pin still wins when no other deliverable is named (0.02425ms)
✔ v3 bd_ task key wins over unprefixed intake alias (0.0385ms)
✔ word-order variants of the intake sheet stay on intake, not the shorter URS title (0.189917ms)
✔ resolveTaskTemplateForMessage blocks cross-workflow document mentions (0.245458ms)
✔ resolveTaskTemplateForMessage keeps in-scope main docs when active is main (0.032667ms)
✔ weighted mode does not let a cross-workflow title hijack an in-scope write (0.142875ms)
▶ document revision overlay modes
✔ pure hides all decorations (0.433792ms)
✔ manual only marks human hunks (0.089709ms)
✔ all marks human and agent differently (0.058292ms)
✔ same human hunk stays amber in manual and all (no pairwise style guarantee) (0.070417ms)
✔ exposes needs-content error code for empty orphan docs (0.041083ms)
✔ matches overlay hunks by section or text when ids differ (0.167083ms)
✔ aligns client block ids from head_block_map by order (0.090958ms)
✔ document revision overlay modes (1.766875ms)
▶ toolbar refresh + report entry reachability
✔ pickLatestChangeReportId prefers highest version with report (0.121209ms)
✔ first squad run alone still exposes a reachable report id (0.054292ms)
✔ second squad run keeps both history report entries and latest shortcut (0.069167ms)
✔ revisionRefreshKey is an independent refresh signal from docId (0.043666ms)
✔ toolbar refresh + report entry reachability (0.399166ms)
▶ change report view model
✔ surfaces risk items, project impact, doc impacts with advice, and open questions (0.251792ms)
✔ marks complete analysis as PI narrative vs factual fields (0.064709ms)
✔ preferReportId prioritizes pending over committed latest (0.031416ms)
✔ change report view model (0.406542ms)
▶ revisionToolbarMount
✔ exposes clear non-error template preview hint copy (0.580042ms)
✔ template doc-p + isTemplateOnly=true does not mount (0.695833ms)
✔ legacy doc-001 does not mount (0.125792ms)
✔ unregistered doc-upload orphan does not mount (must register first) (0.087125ms)
✔ server-registered upload (doc-free) and freeform mount (0.100916ms)
✔ canonical doc_proj and generated non-template doc-p mount (0.067583ms)
✔ revisionToolbarMount (2.5775ms)
✔ login workspace sync lives in one hook (1.025791ms)
✔ block editing lives in one hook (1.434583ms)
✔ interactive card actions live in one hook (1.150708ms)
✔ useChatWindow: 所有 saveSessionWindowCache 调用必须传入 userId (1.145583ms)
✔ window fetch race: stale response ignored by generation (0.484834ms)
✔ mapRecordToMessage: 正确映射服务端消息记录为前端 ChatMessage (1.548792ms)
✔ refresh window: 空 messages 日桶不算有效窗口 (0.068792ms)
✔ mapRawBucket: 正确映射服务端按日分片桶 (0.078875ms)
✔ Category navigation: chip 选中后准确匹配目标分类最新轮次并触发归一化定位 (0.096084ms)
✔ mapRecordToMessage: restores task phase snapshot into card fields (0.225834ms)
✔ controlled document hydration lives in one hook (1.7365ms)
✔ project creation lives in one hook called before the login return (4.493833ms)
✔ document lifecycle actions live in one hook (1.236042ms)
✔ freeform document actions live in one hook (6.525709ms)
✔ in-flight states cover pending and running only (0.371917ms)
✔ hasInFlightParse detects parse polling needs (0.0795ms)
✔ hook + reparse API surface wired (0.860542ms)
✔ project member writes live in one hook before the login return (1.671834ms)
✔ sending a message lives in one hook (1.291291ms)
✔ server document list sync lives in one hook (1.794333ms)
✔ chat and task attempts live in one hook (1.836167ms)
✔ stage unresolved and not-in-active-stage degrade to chat once (0.080666ms)
✔ failed run with error_message surfaces TASK_FAILED not NETWORK_ERROR (0.412208ms)
✔ snake_case blocked_pending_governance is governance, not a network error (0.179ms)
✔ unknown 4xx business code is not reported as a network error (0.350541ms)
✔ turn runtime: session A stream survives session B switch (0.990875ms)
✔ abortAllSessions aborts controllers across all sessions (0.836709ms)
✔ App persists workbench state through one hook and migrates legacy messages once (2.013875ms)
✔ syncAdminUserDirectories calls local reload then parent onRefreshUsers (0.612875ms)
✔ syncAdminUserDirectories fails closed when onRefreshUsers is a dead/missing prop (0.232583ms)
✔ syncAdminUserDirectories surfaces parent refresh errors (no silent swallow) (0.082583ms)
✔ afterProjectMemberPersisted syncs members then refreshes workflow docs (0.630167ms)
✔ afterProjectMemberPersisted does not refresh when member sync fails (0.228875ms)
▶ blockEditorDialogPolicy
✔ pins an accessible dialog label and exact save name (0.293375ms)
✔ rejects page-wide fuzzy /保存/ that would hit private-library buttons (0.110041ms)
✔ blockEditorDialogPolicy (0.829709ms)
▶ resolveSaveTargetBlock
✔ keeps the editor and does not fake success when the block id is gone (0.311333ms)
✔ never retargets another block that happens to share the same content (0.320708ms)
✔ resolveSaveTargetBlock (1.212792ms)
▶ editor session document binding
✔ fail-closes when activeDocId drifts away from the opened editor doc (0.07325ms)
✔ accepts a save only when the editor is still bound to the active doc (0.042791ms)
✔ blocks switching documents while the editor is open (0.052833ms)
✔ editor session document binding (0.257917ms)
▶ interpretBlockSaveError
✔ 409 keeps the draft in the editor (0.068833ms)
✔ other PATCH failures also keep the editor (0.080125ms)
✔ interpretBlockSaveError (0.224917ms)
▶ blockedGovernanceCopy
✔ recognizes blocked run status and fixed hint, not generation success (0.303084ms)
✔ blockedGovernanceCopy (0.689334ms)
▶ resolveChatComposerStreaming
✔ is false when no inflight assistant bubbles (5.178667ms)
✔ is true when inflight bubble and live turn (0.070417ms)
✔ is true when inflight bubble and live task run (0.042042ms)
✔ is false for orphan streaming_status after runtime cleared (0.036458ms)
✔ resolveChatComposerStreaming (5.820041ms)
▶ commentPolicy
✔ lets author/reviewer/approver annotate and keeps their comment role (0.271292ms)
✔ keeps viewer read-only: no add entry and no reviewer/approver cast (0.047625ms)
✔ commentPolicy (0.732917ms)
▶ controlledContentInvalidation
✔ hydrate success then late list_sync keeps cache/ready and does not bump resume (0.682708ms)
✔ post_task invalidation drops active cache and requires a new hydrate epoch (0.095958ms)
✔ editor open / save epoch keeps draft and rejects a stale GET after PATCH (0.159833ms)
✔ never drops the active doc without signaling rehydrate (0.044666ms)
✔ candidate helper keeps template / doc-001 / freeform / upload out of wipe lists (0.88075ms)
✔ dropRecordKeys is a no-op when ids are absent (0.067292ms)
✔ controlledContentInvalidation (2.474958ms)
▶ controlledDocHydrate
✔ shouldLoadControlledContent when non-template workflow doc (0.475667ms)
✔ shouldLoadControlledContent rejects local legacy/mock ids like doc-001 (0.062708ms)
✔ shouldLoadControlledContent keeps canonical, freeform-off, and template preview rules (0.0615ms)
✔ hydrateControlledDocumentContent never requests content/revision for doc-001 (0.105958ms)
✔ hydrateControlledDocumentContent never requests for template preview or registered freeform (0.695208ms)
✔ shouldLoadControlledContent stays inside toolbar server-backed eligibility (0.139292ms)
✔ resolveCanonicalDocId maps doc-p56-intake to doc_proj56_intake (0.180542ms)
✔ canonicalDocIdForTask maps doc-p56-research to doc_proj56_research (0.060125ms)
✔ hydrate treats projection missing as ledger content, not 404 (1.492375ms)
✔ attaches hydrate ETag as PATCH baseline and ignores a later GET (1.52175ms)
✔ rejects hydrate when revision-state network or 5xx fails (2.258042ms)
✔ aligns markdownToBlockAST random ids onto revision-state head_block_map (3.262125ms)
✔ leaves Math.random ids when head_block_map is omitted (why gate + fail-closed remain) (0.242042ms)
✔ rejects controlled hydrate on NOT_FOUND or NEEDS_CONTENT (0.117708ms)
✔ fingerprint stays stable when only object identity changes (0.037709ms)
✔ dedupes in-flight hydrate for the same doc fingerprint (0.095042ms)
✔ aligned late hydrate still cannot overwrite a PATCH-success baseline (0.170417ms)
✔ controlledDocHydrate (16.843125ms)
✔ createClientTurnId uses randomUUID when available (0.375208ms)
✔ createClientTurnId falls back to getRandomValues UUID v4 (0.196042ms)
✔ createClientTurnId throws when no secure random API exists (0.1645ms)
✔ selectNonCreatorInitialMembers skips creator only (0.603792ms)
✔ buildManagedMemberUpsertPayload sends document_duty on add/update/restore (0.10425ms)
✔ buildInitialMemberUpsertPayload maps reviewer UI role to member API role (0.056625ms)
✔ persistInitialProjectMembers awaits each add and stops on failure (0.243209ms)
✔ ensureCreatedProjectWithMembers skips recreate on bootstrap id and retries members (0.229084ms)
✔ beginCreateProjectSubmit rejects concurrent second entry until end (30.709375ms)
✔ resolveCreateProjectSubmitPhase uses bootstrap to choose syncing label (0.168875ms)
✔ createProjectSubmitButtonLabel and close block while submitting (0.057417ms)
✔ shouldCloneMedicalTemplates skips the 7-pack for software domain (0.036709ms)
▶ resolveCurrentDocRole
✔ resolves A as author by authoritative user id (0.360792ms)
✔ does not promote reviewer B or stranger to author (0.061417ms)
✔ resolves real USER_B id as reviewer and never name-promotes placeholder 2 (0.0485ms)
✔ fail-closes unknown identity to viewer even if projectPermission says author (0.039708ms)
✔ matches name only for legacy local docs without duty ids (0.044042ms)
✔ does not name-promote when server controlled duties are zero ids (0.047666ms)
✔ resolveCurrentDocRole (1.1365ms)
▶ currentProjectRestore
✔ rejects empty project names (0.379166ms)
✔ rejects page-wide project name when banner and sidebar both match (0.108167ms)
✔ scopes the visible entry to complementary exact title (0.339083ms)
✔ scopes the current project assertion to banner exact text (0.0745ms)
✔ currentProjectRestore (2.169958ms)
▶ deliverableLeaseSync
✔ returns the same array reference when leases are unchanged (0.308041ms)
✔ returns a new array only when a lease actually changes (0.610208ms)
✔ deliverableLeaseSync (1.363792ms)
▶ docGovActionVisibility
✔ hides all approval actions on unmanaged docs (0.309833ms)
✔ gates separated duties by user id, not folded role label (0.063458ms)
✔ author_only: same user holds all three duties and sees all actions (0.044333ms)
✔ author_only: non-duty user sees no actions (0.039917ms)
✔ docGovActionVisibility (0.935209ms)
▶ documentBlockDomAttrs
✔ marks a real DocumentBlock in pure mode without overlay kind (0.279583ms)
✔ keeps the same stable attrs when overlay is later attached separately (0.068042ms)
✔ documentBlockDomAttrs (0.767291ms)
▶ durableBodySnippet
✔ rejects empty persisted snippets (0.849333ms)
✔ lets a later successful revision replace the old snippet (0.105292ms)
✔ does not promote a conflict-failed draft to the expected body (0.054083ms)
✔ durableBodySnippet (1.5185ms)
▶ dutyCellAssertion
✔ parses author, reviewer, and viewer from select value or badge role (0.343291ms)
✔ must not infer author from a row whose option labels include 编制负责人 (0.231291ms)
✔ accepts only a disabled non-assignable reviewer select (0.054959ms)
✔ rejects an enabled reviewer select when the reviewer cannot assign leads (0.049125ms)
✔ rejects canAssignLead=true even if the reviewer select is disabled (0.048875ms)
✔ rejects viewer, author, approver, and unknown values for USER_B (0.068959ms)
✔ dutyCellAssertion (1.333875ms)
▶ decideHydrationApply
✔ applies only when gen, doc, save epoch match and editor is closed (0.602583ms)
✔ rejects a response for another document (0.0605ms)
✔ rejects a superseded generation (0.041958ms)
✔ decideHydrationApply (1.188959ms)
▶ createEditorHydrationGate
✔ does not start a new hydrate while the editor is open (UI-06 fill-window GET) (1.258375ms)
✔ deferred hydrate that resolves after the editor opens does not replace the session (0.0885ms)
✔ covers hydrate resolving between fill and save (0.07425ms)
✔ asks for a hydrate resume after editor_open blocked the first apply (0.068666ms)
✔ asks for a hydrate resume when beginHydration is skipped while editing (0.058916ms)
✔ requestHydrationResume is consumed once after a protected edit session (0.229583ms)
✔ late hydrate after a successful PATCH does not roll back the new baseline (0.185208ms)
✔ createEditorHydrationGate (2.262167ms)
✔ redactResourceUrl drops query and origin (0.525709ms)
✔ summarizeResources flags deferred heavy chunks (0.735875ms)
✔ firstPaintHeavyHits lists only deferred module paths (0.260583ms)
✔ countInitRequests separates member fanout from session lists (0.279375ms)
✔ percentile uses nearest-rank and stays null on empty input (0.154083ms)
✔ summarizeLatencies reports p50/p75/p95 (0.371208ms)
✔ mergeSessionUser prefers session identity over stale catalog entry (1.845042ms)
▶ playwrightPhaseArtifacts
✔ defaults unknown or empty UI_PHASE to main (0.355208ms)
✔ keeps post-restart distinct from main so the second run cannot overwrite traces (0.097541ms)
✔ keeps main results at the historical filename and isolates post-restart recordPass (0.050333ms)
✔ shares phase-state and secrets across phases (0.047584ms)
✔ defaults assets to the 2026-09-22 rerun tree, not project-143 history (0.10425ms)
✔ refuses historical controlled-content and Round20 evidence dirs (0.319208ms)
✔ lists closeout groups covering UI-03/05/06/07-08-09/11/13/post-restart (0.335ms)
✔ playwrightPhaseArtifacts (1.874666ms)
✔ mapServerProjectToProjectInfo maps creator and preserves local members (0.388666ms)
✔ mergeProjectLists drops local-only demo seed projects by default (0.135791ms)
✔ mergeProjectLists can retain local-only demo when explicitly opted in (0.053041ms)
✔ documentDutyFromMemberRole maps UI reviewer and creator (0.330875ms)
✔ exclusiveMemberRoleChange keeps a single reviewer (0.084834ms)
✔ memberRoleFromDocumentDuty does not invent reviewer from access role (0.047084ms)
✔ toApiProjectRole maps doc roles to member and creator to owner (0.336959ms)
✔ fromApiProjectRole maps owner to creator for project creator (0.071834ms)
✔ mapApiMemberToProjectMember builds UI record (0.075334ms)
▶ projectSettingsDuties
✔ toggles full to none by atomically clearing duties (0.597417ms)
✔ blocks partial saves and locates required/governance issue codes (0.197833ms)
✔ allows an all-none configurable draft without three members (0.076792ms)
✔ requires three members once any document is managed (0.044375ms)
✔ resolves author_only to A/A/A without three-member requirement (0.101833ms)
✔ rejects author_only without author or with conflicting reviewers (0.060666ms)
✔ mixed full + author_only still requires three members for the full doc (0.046ms)
✔ toggleAuthorOnly clears review/approve slots and restores on disable (0.056625ms)
✔ folds later rdev stages and batches human approval keys (0.09575ms)
✔ projectSettingsDuties (1.830166ms)
▶ projectSettingsMode
✔ enters frozen when can_edit_plan is false or the project is active (0.347417ms)
✔ keeps an active workflow editable except the definition switch (0.063292ms)
✔ stays planning only for an editable draft (0.038875ms)
✔ lists enabled duties for the frozen snapshot and skips disabled tasks (0.340792ms)
✔ keeps the local draft after PLAN_FROZEN refresh and switches to frozen (0.048417ms)
✔ projectSettingsMode (1.355375ms)
▶ recheckAck
✔ requires an explicit acknowledgement before advance (0.27425ms)
✔ recheckAck (0.675459ms)
▶ revisionEtag
✔ uses stale hydrate ETag for PATCH and never the latest GET (0.318375ms)
✔ does not invent 0:0 when controlled hydrate misses etag or errors (0.054041ms)
✔ refuses controlled save without a hydrate ETag (0.200458ms)
✔ allows freeform bootstrap 0:0 only (0.042875ms)
✔ revisionEtag (1.095833ms)
▶ saveControlledBlockEdit
✔ successful save calls PATCH once with bound docId, hydrate ETag, body and client_block_map (1.68525ms)
✔ does not PATCH when editorDocId and activeDocId diverge (0.107583ms)
✔ does not PATCH on stale block id and keeps the draft (0.069834ms)
✔ 409 does not close the editor or drop the draft (0.370125ms)
✔ network errors do not close the editor or drop the draft (0.092875ms)
✔ saveControlledBlockEdit (3.416541ms)
✔ parseProjectIdFromSessionId decodes sess-p{id}-u{user} (0.39275ms)
✔ resolveSessionProjectId prefers explicit id then session id encoding (0.065375ms)
✔ mapServerSessionToProjectSession fills project metadata (4.473542ms)
✔ mergeSessionLists keeps local stage while applying server counts (0.116666ms)
▶ squadCompletionObservation
✔ accepts a directly completed adjacent assistant without requiring inflight (0.363542ms)
✔ accepts a turn that passed through inflight then completed (0.059375ms)
✔ rejects error terminals, missing correspondence, and visible errors (0.051459ms)
✔ keeps waiting while still inflight and does not treat inflight as success (0.035791ms)
✔ cancelInflightAssistantMessages settles only this-session assistant inflight (0.06225ms)
✔ squadCompletionObservation (1.069125ms)
✔ running bubble without phases needs replay (0.78725ms)
✔ interrupted bubble without phases needs replay (0.063166ms)
✔ bubble that already has phases is not replayed (0.044167ms)
✔ completed bubble without snapshot needs replay for legacy rows (0.035083ms)
✔ completed bubble with snapshot is not replayed (0.038875ms)
✔ phase replay key ignores completed chatter (0.05025ms)
✔ resolveTaskRunCardTitle prefers artifact title (0.384167ms)
✔ resolveTaskRunCardTitle falls back to user message then taskKey (0.066292ms)
✔ truncateTitle ellipsizes long text (0.06975ms)
✔ formatTaskDuration covers seconds minutes hours (0.060291ms)
✔ resolveTaskRunCardBadge maps terminal and live states (0.330333ms)
✔ shouldRenderTaskRunCard keeps card shape when run id exists (0.055ms)
✔ runningPhaseDetail prefers live label when it differs from step (0.059667ms)
✔ 403 revision denial is not reported as a network error (0.419625ms)
✔ TASK_SCOPE_UNRESOLVED names the missing workflow stage (0.591833ms)
✔ resolveReconnectRunId prefers explicit opts and ignores attempt without opts (0.547042ms)
✔ shouldSubscribeExistingRun only for in-flight statuses (0.079792ms)
✔ isRemoteTaskTerminal covers confirmation and quality_failed (0.056541ms)
✔ nextAttemptOpts carries retained runId for reconnect without new POST (0.049792ms)
✔ template documents are labeled as preview, not 编制中 or 已生效受控 (1.102375ms)
▶ uploadFreeformRegister
✔ buildUploadClientKey prefers explicit hint then doc-upload stamp (0.310916ms)
✔ registerUploadAttachments hard-fails without creating orphan on API error (34.222792ms)
✔ registerUploadAttachments rejects local doc-upload id from server (0.206417ms)
✔ registerUploadAttachments returns server doc-free ids and freeform facts (0.297167ms)
✔ deliverableFromFreeformUpload maps server id and upload facts (0.075542ms)
✔ uploadFreeformRegister (35.817125ms)
▶ workflowCategoryNavigation
✔ private menu cannot see doc_proj* so it must switch to workflow before exact select (1.017167ms)
✔ fail-closes when the workflow menu is showing but the exact doc is missing (0.112875ms)
✔ label and taskKey opens always require the workflow category (0.057375ms)
✔ workflowCategoryNavigation (1.66325ms)
✔ rdev selection explains the CDO prerequisite (0.382916ms)
✔ login shell does not statically import export, preview, admin, or chart engines (46.532333ms)
▶ no external Google Fonts on login shell
✔ index.html has no fonts.googleapis / fonts.gstatic (0.678625ms)
✔ styles reference self-hosted fonts.css (0.388583ms)
✔ no external Google Fonts on login shell (1.625083ms)
▶ 用户上传文档多格式在线预览体系与渲染分流测试
✔ 1. 上传附件时正确注入 sourceType: "uploaded_file" 与完整 fileMeta 元数据 (0.406209ms)
✔ 2. 扩展名分类规则准确分发至对应的高保真渲染器类型 (0.096959ms)
✔ 3. 受控工作流交付物严格隔离:绝不命中 FilePreviewPanel,保持 BlockRenderer 纯净 (0.055334ms)
✔ 4. 上传文档支持受控流转:从个人私密一键共享至项目参考库后,在线预览依然可用且权限标态正确 (0.065833ms)
✔ 用户上传文档多格式在线预览体系与渲染分流测试 (1.119291ms)
▶ 项目立项、成员职责分配与退出留痕治理测试套件
✔ 1. 默认项目库包含完整元数据与法定三权成员 (active 状态) (0.309458ms)
✔ 2. 跨用户会话可见性严格隔离:未加入成员完全不可见 (0.121167ms)
✔ 3. 创建者添加新成员并分配职责后,新成员即刻可见该项目会话 (0.069875ms)
✔ 4. 中途加入后期退出 (exited):保留项目会话但标记已退出只读留痕 (0.073167ms)
✔ 5. 超级管理员 (ADMIN) 享有全量通配可见与管理兜底特权 (0.049625ms)
✔ 项目立项、成员职责分配与退出留痕治理测试套件 (1.246667ms)
▶ 新建项目工程文档模板质量与纯净性保障套件(对标官方参考系统)
✔ 1. 必须精确生成 7 份官方全流程受控工作流模板且标记纯净 (0.333833ms)
✔ 2. 杜绝旧项目 CUSA-NeuroPulse 串号泄露,动态注入新项目信息 (0.313375ms)
✔ 3. 严格对标参考系统模板规范要素,绝非 3 行残缺摘要 (0.164708ms)
✔ 4. 缓存丢失场景下即时自愈重建 AST 能力验证 (0.1785ms)
✔ 新建项目工程文档模板质量与纯净性保障套件(对标官方参考系统) (4.20775ms)
▶ 用户上传文档私密归档与共享流转测试
✔ 10 个评审项目均包含已共享的 URS 交付物与 AST,支持跨角色合规查阅且会话均以 assistant 闭环 (0.86575ms)
✔ 用户上传附件自动生成私密交付物并在 AST 中建立隔离,支持流转至项目参考库 (1.390041ms)
✔ 单轮对话支持一次上传多个文档(上限5个),批量生成私密交付物并遵循数量约束 (0.332917ms)
✔ 用户上传文档私密归档与共享流转测试 (3.035416ms)
▶ 工作流切换与消息展示时序测试套件
✔ 1. 当存在历史 seed 消息且追加新实时消息时,新消息必须严格沉淀在末尾 (0.441ms)
✔ 2. 切回项目时相同正文不应因 temp/server id 差异重复展示 (0.070666ms)
✔ 工作流切换与消息展示时序测试套件 (0.936167ms)
✔ DeliverableItem 必须包含 projectId 与 isTemplateOnly 属性 (0.338959ms)
ℹ tests 491
ℹ suites 38
ℹ pass 491
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 2609.99725
RUN v5.0.0 /private/tmp/Agent-System/.worktrees/integrate-task-bubble-bind-2026-09-23/web
Test Files 3 passed (3)
Tests 34 passed (34)
Start at 11:51:32
Duration 327ms (transform 63%, import 29%, tests 6%, worker 2%)