docs(test): record E1B workflow-advance shadow/live/rollback evidence

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
weichen
2026-09-15 09:43:09 +00:00
co-authored by Cursor
parent 0ebaaaed87
commit 7d1b7e736b
9 changed files with 195 additions and 7 deletions
+4 -3
View File
@@ -5,7 +5,7 @@
## 焦点
1. **TRACK-E**: [持久事件交付](./short-term/2026-09-15-durable-event-track-e.md)(E0A/E0B/E1A PASS;下一开工 E1B workflow advance,默认 dispatcher mode 仍 off)
1. **TRACK-E**: [持久事件交付](./short-term/2026-09-15-durable-event-track-e.md)(E0A/E0B/E1A/E1B PASS;下一开工 E1C projection,默认 dispatcher mode 仍 off)
2. **CHAT-INTENT**: [对话意图运行时状态](../test-reports/2026-09-13-conversation-intent-runtime-state-test-report.md)(双标签 busy 已签:项目 **6275** / `DOC_BUSY` 单 run;不删 `sess-p143-u9` 探针)
3. **CHAT**: [对话历史刷新活验已补](../test-reports/2026-09-13-chat-history-refresh-test-report.md)(项目 6252 闲聊刷新同集 + guest 403;编制任务链仍开放)
@@ -60,7 +60,8 @@
| Cursor | leftover-branch-cleanup | chore/leftover-branch-cleanup | - | ops | done |
| Cursor | event-e0a-production-scope-contract | fix/event-production-scope-contract | - | events | done |
| Cursor | event-e0b-dispatcher-pg | feature/events-dispatcher-pg | - | events | done |
| Cursor | event-e1a-notify-cutover | fix/event-notify-cutover | - | events | in_progress |
| Cursor | event-e1a-notify-cutover | fix/event-notify-cutover | - | events | done |
| Cursor | event-e1b-workflow-advance | fix/event-workflow-advance | - | events | in_progress |
> 新任务开始前登记。`branch` 必须为 `feature/<slug>` 或 `fix/<slug>`,**禁止** `dev` / `test` / `main`。同一 `mutex` 同时仅一个 `in_progress`。
@@ -72,7 +73,7 @@
| holder | phase | since | scope | queue |
|--------|-------|-------|-------|-------|
| Cursor | merging | 2026-09-15 | E1A notify cutover;mode=off | - |
| Cursor | merging | 2026-09-15 | E1B workflow advance;mode=off | - |
**phase**: `idle` | `merging` | `smoke` | `e2e`
@@ -4,7 +4,7 @@ status: in_progress
created: 2026-09-15
updated: 2026-09-15
owner: Cursor
branch: fix/event-notify-cutover
branch: fix/event-workflow-advance
worktree: "-"
mutex: events
---
@@ -30,7 +30,7 @@ mutex: events
1. [x] E0A 单独建 short-term/分支,dispatcher 保持 off。
2. [x] E0A 报告通过后再认领 E0B。
3. [ ] 依次交付 E1A notify、E1B workflow advance、E1C projection;每步独立 go/no-go。E1A 报告已过,下一开工 E1B。
3. [ ] 依次交付 E1A notify、E1B workflow advance、E1C projection;每步独立 go/no-go。E1A/E1B 报告已过,下一开工 E1C。
4. [ ] 一个兼容发布窗口后 contract 删除闭包 API。
5. [ ] 同步 test report、CURRENT、FEATURE-MATRIX、gap-matrix。
@@ -1,6 +1,6 @@
---
title: "E1A notify shadow 与切换"
status: in_progress
status: done
created: 2026-09-15
updated: 2026-09-15
owner: Cursor
@@ -0,0 +1,44 @@
---
title: "E1B workflow advance shadow 与切换"
status: in_progress
created: 2026-09-15
updated: 2026-09-15
owner: Cursor
branch: fix/event-workflow-advance
worktree: "-"
mutex: events
---
# E1B workflow advance shadow 与切换
## 目标
workflow_advance 具备 shadow/live/rollback;并发或重放批准只产生一次阶段可推进可见结果。生产集群保持 off。
## 范围
- Goose 00042、`docadvance.EventConsumer`、`EmitVisibleStageReady`、MarkDocTaskApproved 走 fenced tx
- cmd/events 注册 workflow_advance
## 非目标
- 不把共享环境 workflow_advance 切 live
- 不删除 AddOnApprovedHook
- 不激活 FAV / projection live
## 步骤
1. [x] 从 E1A 后 `dev` 开 `fix/event-workflow-advance`
2. [x] additive source_event_id on stage_advance_requests
3. [x] consumer 重读文档并同事务 ack
4. [x] 隔离库并发/重放/quarantine/rollback
5. [x] 报告
## 验收标准
- [x] [E1B 测试报告](../../test-reports/2026-09-15-event-e1b-workflow-advance-test-report.md)
## 相关链接
- Track E: [./2026-09-15-durable-event-track-e.md](./2026-09-15-durable-event-track-e.md)
- Report: [../../test-reports/2026-09-15-event-e1b-workflow-advance-test-report.md](../../test-reports/2026-09-15-event-e1b-workflow-advance-test-report.md)
+1 -1
View File
@@ -27,7 +27,7 @@
| PI Runner / 配置链 | pi-agent + MiniMax 真实链路 | done | [test 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) | — | `pi-agent` |
| 三环境运维 | dev/test/main + 共享 KB | done | [PROJECT.md](../../PROJECT.md) §4;四环境 healthy | — | `infra` |
| CI / E2E | PG 集成 + 真实 PI E2E | partial | [gap-matrix BUG-08](../remediation/gap-matrix.md);[test pg-ci](../test-reports/2026-09-12-pg-ci-soak-e2e-test-report.md);[运行时 UI Round20](../test-reports/2026-09-14-document-revision-runtime-ui-test-report.md) | CI `TEST_DATABASE_URL` 隔离库仍缺;文档运行时真实 UI 已按 UI_PHASE 分文件且 post-restart 断言最终 A1 正文。`-race` 全包并行 TempDir flake 为基建残留 | `ci` |
| 模块解耦与可靠事件 | 文档可靠性纵向试点、PG 持久事件交付与选择性模块化 | partial | [架构](../system-design/2026-09-14-module-decoupling-architecture.md);[ADR](../adr/2026-09-14-modular-monolith-decoupling.md);[Phase 1](../remediation/2026-09-14-module-decoupling-refactor-plan.md);[Phase 2 审阅](../audit/2026-09-15-module-decoupling-phase2-plan-review.md);[Phase 2 修订计划](../remediation/2026-09-15-module-decoupling-ipc-phase2-remediation-plan.md);[E0A 报告](../test-reports/2026-09-15-event-e0a-production-scope-contract-test-report.md);[E0B 报告](../test-reports/2026-09-15-event-e0b-dispatcher-pg-test-report.md);[E1A 报告](../test-reports/2026-09-15-event-e1a-notify-cutover-test-report.md) | E0A/E0B/E1A 已过隔离库门;dispatcher 与 notify 默认 off。下一波 E1B。Track S 与 HTTP/PI 协议分别规划;FAV 保持独立审计 | `architecture-docs` |
| 模块解耦与可靠事件 | 文档可靠性纵向试点、PG 持久事件交付与选择性模块化 | partial | [架构](../system-design/2026-09-14-module-decoupling-architecture.md);[ADR](../adr/2026-09-14-modular-monolith-decoupling.md);[Phase 1](../remediation/2026-09-14-module-decoupling-refactor-plan.md);[Phase 2 审阅](../audit/2026-09-15-module-decoupling-phase2-plan-review.md);[Phase 2 修订计划](../remediation/2026-09-15-module-decoupling-ipc-phase2-remediation-plan.md);[E0A 报告](../test-reports/2026-09-15-event-e0a-production-scope-contract-test-report.md);[E0B 报告](../test-reports/2026-09-15-event-e0b-dispatcher-pg-test-report.md);[E1A 报告](../test-reports/2026-09-15-event-e1a-notify-cutover-test-report.md);[E1B 报告](../test-reports/2026-09-15-event-e1b-workflow-advance-test-report.md) | E0A–E1B 已过隔离库门;dispatcher/notify/advance 默认 off。下一波 E1C。Track S 与 HTTP/PI 协议分别规划;FAV 保持独立审计 | `architecture-docs` |
---
@@ -0,0 +1,79 @@
# E1B workflow advance shadow/live/rollback 测试报告
## 一、 测试背景 (Background)
E1A 已把 notify 接到同事务 Handler。本波把 `document.approved` 的 workflow_advance 接到同一 dispatcher:重读文档/项目/阶段、service principal 鉴权,用已有 `stage_advance_requests (stage_instance_id, readiness_revision)` 唯一约束保证并发/重放只产生一次阶段可推进可见结果。生产集群 mode 保持 **off**。
## 二、 测试目标 (Test Objectives)
- Goose 00042 additive:`stage_advance_requests.source_event_id` + 部分唯一索引。
- Shadow dry-run 不写 `stage_advance_requests`;MarkDocTaskApproved 走 fenced tx,Rollback 可撤销。
- Live 两次 RunOnce + 双 worker 并行:同一 workflow instance 仅 1 条 stage-ready 请求与 1 条通知。
- 缺文档 / 跨项目 → quarantine。
- 第二份 approved envelope 不新增 stage_advance_requests。
- mode=off 回滚不再 claim。
## 三、 测试方案与环境 (Test Plan & Environment)
| 项 | 值 |
|----|-----|
| OS | Linux 7.0.0-31-generic |
| Go | go1.27.1 linux/amd64 |
| 分支 | `fix/event-workflow-advance` |
| Schema | **42** |
| PostgreSQL | 隔离库 `agent_rel_e1b`(`:5434`);测完 DROP |
| 项目 143 | 只读 |
| 默认 mode | off |
| 证据 | `.doc/test-reports/assets/2026-09-15-event-e1b-workflow-advance/` |
语义:至少一次投递 + 恰好一个可见结果。不是 exactly-once delivery。
## 四、 预期结果 (Expected Results)
| 用例 | 期望 |
|------|------|
| shadow | stage_advance_requests=0;有 recon |
| live 并行 + 再 RunOnce | requests=1;notifications=1 |
| 重复 approved 事件 | requests 仍为 1 |
| missing doc | delivery=quarantine |
| mode=off | claim=0 |
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 隔离库 PG
- **测试输入**: `TEST_DATABASE_URL` → `127.0.0.1:5434/agent_rel_e1b`;`go test -v ./internal/app/docadvance -run TestE1B_`
- **实际输出**: `assets/.../pg-test.txt` goose 至 42;`TestE1B_AdvanceShadowLiveRollback_PG` PASS(0.33s)
- **评价判定**: **PASS**
- **性能与耗时**: 含 goose 0.33s
### 5.2 race
- **测试输入**: 同上;`go test -race ./internal/app/docadvance -run TestE1B_`
- **实际输出**: `assets/.../race.txt` PASS(1.12s)
- **评价判定**: **PASS**
### 5.3 共享库 mode(只读)
- **测试输入**: `SELECT environment, consumer, mode FROM event_consumer_modes`
- **实际输出**: 全部 off(`assets/.../consumer-modes.txt`)
- **评价判定**: **PASS**
### 5.4 arch-check / short
- **测试输入**: `./scripts/arch-check.sh --mode block`;`go test -short ./internal/events ./internal/archtest ./internal/app/docadvance`
- **实际输出**: PASS
- **评价判定**: **PASS**
## 六、 自动化测试套件汇总 (Test Suite Execution)
| 命令 | 结果 |
|------|------|
| 隔离库 `TestE1B_*` | PASS schema 42 |
| `go test -race ./internal/app/docadvance` | PASS |
| `arch-check --mode block` | PASS |
| 生产 workflow_advance mode | **off**;闭包 `AddOnApprovedHook` 仍是 HTTP 进程写者 |
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
E1B **PASS**。cmd/events 已注册 workflow_advance,集群开关仍 off。下一波 E1C:projection no-replace + 三类 worker 重启 + 授权页面刷新。不激活 FAV。不删除批准 hook(E2)。
@@ -0,0 +1,16 @@
environment | consumer | mode
-------------+------------------+------
dev | fav | off
dev | notify | off
dev | projection | off
dev | workflow_advance | off
main | fav | off
main | notify | off
main | projection | off
main | workflow_advance | off
test | fav | off
test | notify | off
test | projection | off
test | workflow_advance | off
(12 rows)
@@ -0,0 +1,47 @@
=== RUN TestE1B_AdvanceShadowLiveRollback_PG
2026/09/15 09:40:43 OK 00001_baseline.sql (53.34ms)
2026/09/15 09:40:43 OK 00002_2026-09-09-doc-edit-lease.sql (2.64ms)
2026/09/15 09:40:43 OK 00003_2026-09-09-uq-context-memory-chunk-hash.sql (1.37ms)
2026/09/15 09:40:43 OK 00004_2026-09-10-chat-daily-digests-and-search.sql (851.49µs)
2026/09/15 09:40:43 OK 00005_2026-09-10-chat-messages-day-window.sql (937.18µs)
2026/09/15 09:40:43 OK 00006_2026-09-11-chat-read-positions.sql (432.67µs)
2026/09/15 09:40:43 OK 00007_2026-09-11-chat-turns.sql (459.93µs)
2026/09/15 09:40:43 OK 00008_2026-09-11-freeform-documents.sql (8.96ms)
2026/09/15 09:40:43 OK 00009_2026-09-11-message-export-policy.sql (4.22ms)
2026/09/15 09:40:43 OK 00010_2026-09-11-project-workflows-and-lineage.sql (12.49ms)
2026/09/15 09:40:44 OK 00011_2026-09-11-seed-ten-projects.sql (5.39ms)
2026/09/15 09:40:44 OK 00012_2026-09-11-seed-ten-projects-chat.sql (30.46ms)
2026/09/15 09:40:44 OK 00013_2026-09-11-task-run-lineage.sql (1.47ms)
2026/09/15 09:40:44 OK 00014_project_members.sql (3.58ms)
2026/09/15 09:40:44 OK 00015_2026-09-12-iam-core.sql (16.97ms)
2026/09/15 09:40:44 OK 00016_2026-09-12-workflow-definitions-and-templates.sql (11.85ms)
2026/09/15 09:40:44 OK 00017_2026-09-12-project-workflow-instances.sql (14.83ms)
2026/09/15 09:40:44 OK 00018_2026-09-12-outbox-notifications-stage-advance.sql (9.49ms)
2026/09/15 09:40:44 OK 00019_2026-09-12-task-runs-events.sql (5.74ms)
2026/09/15 09:40:44 OK 00020_2026-09-12-task-run-worker-lease.sql (1.05ms)
2026/09/15 09:40:44 OK 00021_2026-09-12-iam-hardening.sql (2.48ms)
2026/09/15 09:40:44 OK 00022_2026-09-12-workflow-schema-v2.sql (1.76ms)
2026/09/15 09:40:44 OK 00023_2026-09-12-instance-integrity.sql (999.81µs)
2026/09/15 09:40:44 OK 00024_2026-09-12-workflow-catalog-governance.sql (6ms)
2026/09/15 09:40:44 OK 00025_2026-09-13-sync-seed-sequences.sql (882.03µs)
2026/09/15 09:40:44 OK 00026_2026-09-13-chat-message-scope.sql (2.52ms)
2026/09/15 09:40:44 OK 00027_2026-09-13-chat-message-scope-backfill.sql (2.02ms)
2026/09/15 09:40:44 OK 00028_2026-09-13-document-revisions.sql (14.72ms)
2026/09/15 09:40:44 OK 00029_2026-09-13-freeform-client-key.sql (1.13ms)
2026/09/15 09:40:44 OK 00030_2026-09-13-task-run-pending-author-confirmation.sql (987.41µs)
2026/09/15 09:40:44 OK 00031_2026-09-13-project-member-document-duty.sql (1.65ms)
2026/09/15 09:40:44 OK 00032_2026-09-14-document-revision-migration-repair.sql (615.34µs)
2026/09/15 09:40:44 OK 00033_2026-09-14-task-run-blocked-pending-governance.sql (467.41µs)
2026/09/15 09:40:44 OK 00034_2026-09-14-workspace-lease-fencing.sql (457.44µs)
2026/09/15 09:40:44 OK 00035_2026-09-14-durable-event-delivery.sql (4.93ms)
2026/09/15 09:40:44 OK 00036_2026-09-14-final-artifact-vault.sql (8.41ms)
2026/09/15 09:40:44 OK 00037_2026-09-15-task-run-manifests.sql (2.33ms)
2026/09/15 09:40:44 OK 00038_2026-09-15-dataset-lifecycle.sql (7.16ms)
2026/09/15 09:40:44 OK 00039_2026-09-15-event-inventory-and-principals.sql (5.73ms)
2026/09/15 09:40:44 OK 00040_2026-09-15-event-dispatcher.sql (6.9ms)
2026/09/15 09:40:44 OK 00041_2026-09-15-notification-visible-outcome.sql (1.13ms)
2026/09/15 09:40:44 OK 00042_2026-09-15-workflow-advance-outcome.sql (1.03ms)
2026/09/15 09:40:44 goose: successfully migrated database to version: 42
--- PASS: TestE1B_AdvanceShadowLiveRollback_PG (0.33s)
PASS
ok chat-agent-system/internal/app/docadvance 0.334s
@@ -0,0 +1 @@
ok chat-agent-system/internal/app/docadvance 1.115s