boardx / boardx/workspacex

acceptance: F2 断线重连与 C2 画布保存往返的复核结论(两条都已真执行且绿)

Open Beginner friendly
#3,106 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
0
Forks
0
Avg merge
1h 7m
Merged PRs (30d)
969

Description

验收报告 `docs/reports/2026-09-08-chat-37-path-acceptance-report.md`(实测 SHA `303d00224`)里派下来的两条无人跟进路径,本 issue 是**在当前 main 上的重新核对**。结论:**两条都已经真实执行且绿,不需要改代码**。证据如下。

## F2 断线重连 —— 报告的 ❌ 已被 #3071 解掉,现在真执行且绿

- 报告结论「死在 `spec:85` 自检守卫、判据零执行」绑定的是 `303d00224`,**不含 PR #3071**(十步滚动替身按半步推进,`e77c9bb33`)。
- 当前 main 上的最新一次 `chat-path-coverage` 实跑:run [34220982582](https://github.com/boardx/workspacex/actions/runs/34220982582) job `102043783137`,SHA `663a37037`(`git merge-base --is-ancestor e77c9bb33 663a37037` → 真,#3071 已在内):

```
✓ 2 [chat-path-coverage] › e2e/chat-path-f2-network-drop-reconnect.spec.ts:40:5 › @path:F2 断线重连:网络中断后 run 继续,网络恢复后界面自己续上,不重复不空转 (30.2s)
```

- **「绿 ≠ 跑过」的核对**:这条用例不是 skipped、不是 fixme、也没有提前 return——它的两道自检本身就是**会红的断言**,绿只能由「它们没命中」得到:
- `spec:85`「断网时 run 已是终态」→ `expect(...).toBe(false)`:绿 ⇒ 断网那一刻 run **非终态**,断网窗口确实开在 run 进行中;
- 文件末尾「断网期间就已经拿到最终回答」→ `expect(...).toBe(false)`:绿 ⇒ 断网期间界面**没有**最终回答;
- 中间的三条判据因此真的执行了:不刷新界面自己续上「十步滚动验收执行完成」、人类消息只落库 1 条、最终回答只落库 1 条且挂在**同一次** run 上。
- 30.2s 的时长也与「发送 → 权威读 → 断网 → 等 3s → 恢复 → 追上」这条路径吻合(16.5s 那次是剧本已跑完的假窗口形态)。
- 同一跑里 C5 ✓、F6 ✘(F6 死在 fixture 新建线程,归 `fix/acceptance-f6-d2`)——**不是车道整体红**,F2 的绿是它自己的。

⚠ 保留一条诚实边界:矩阵文档「搬家翻车」一节写的**竞态没有被消除**,只是窗口被 #3071 拉大了。因此本轮**不把 F2 搬进阻塞 `chat-read` 车道**(连绿两次也不搬——这正是那一节新加的规则)。要由构造保证,得让确定性替身扣住最后一段直到客户端重连。

## C2 画布保存往返 —— 报告已判 ✅,本轮复核仍成立

派工说 `:278` ✘/在飞,与报告正文不符;以 CI 日志为准。run [34210666232](https://github.com/boardx/workspacex/actions/runs/34210666232) job `102010635957`(`e2e-full` 的 `verify:chat-read` step):

```
✓ 26 [chat-read] › chat-diagram-save-reopen-roundtrip.spec.ts:108:5 › G2 生成画像 → 最大化编辑保存 → reload 重开看到保存版提示条 → 回到原始版 (38.0s)
✓ 28 [chat-read] › chat-diagram-save-reopen-roundtrip.spec.ts:278:5 › 只读预览挂载即读回:保存后立即可见 + reload 不点最大化也可见(issue #1668) (41.4s)
```

两条都是 `test()`(非 fixme/skip),`:278` 覆盖的正是「不点最大化的只读预览」那一段。**C2 无缺口,无需补齐。**

## 处置

- 不改产品代码,不改 spec:两条路径都不存在产品缺陷或用例缺陷。
- 只把上述取证结论写进唯一事实源 `.harness/instructions/chat-path-coverage-matrix.md`(不动 `docs/reports/`),并在 PR 上再跑一趟 `chat-path-coverage` 拿第二个 F2 数据点。
- 单趟红不作回归证据(车道无逐测试隔离,#3047 已重开);反之单趟绿也只在自检断言真执行的前提下才算数——上面已逐条核过。

Contributor guide

No contributing guide indexed for this repository

Research direction

Update `.harness/instructions/chat-path-coverage-matrix.md` with the verified F2 and C2 conclusions; do not change product code, specs, or `docs/reports/`. Start by reviewing the cited `chat-path-coverage` and `verify:chat-read` runs and the referenced E2E specs. Done means the matrix records both paths as verified, preserves the F2 race caveat, and includes the supporting run evidence.

Written by the indexing model from the issue text.

Assessment

Tech stack
github-actions, playwright, typescript
Domain
ci-cd, documentation, testing
Issue type
Documentation
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
78/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.