AT 验收 B4+B5:画布/19 模板 + Web/浏览器/SQL/媒体(21 个 WX-T)定级
- Dominant language
- TypeScript
- Stars
- 0
- Forks
- 0
- Avg merge
- 1h 7m
- Merged PRs (30d)
- 969
Description
> 权威方案:`docs/design/standard-capabilities/acceptance-test-plan.md`,分支 `codex/2985-capability-acceptance-plan`(跟踪 #2985)。**先完整读 §1 §3 §8 §11 §12。**
> 基线见 **#2996**,绑定 SHA `938d16bf3a49c4047f42bbc697833cd921d1053e`。
## 范围
方案 §6 Tools 矩阵中「组合」列为 **CANVAS(2)**、**BROWSER(5)**、**SQL(4)**、**WEB(2)**、**MEDIA(2)**、**DOC(2)**、**SCHEDULE(3)**、**AUTHOR(1)** 的全部行,共 21 个 WX-T。
加方案 §8 画布模板验收:**§8.1 内置模板身份**(19 个 key 必须与 `@repo/fabric-markdown` 注册表集合**相等**,且 displayName、字段 key、section、布局、版本均可读取,AT-C001…AT-C019)与 **§8.2 生命周期和权限场景**。
⚠ §11 要求的反证之一逐字是:**「把模板注册表替换成同样数量的假 key,集合测试必须失败」**——这条必须真做,它是防「数对了但内容错了」的唯一手段。
## 与你相关的已知事实
- 基线里 `api tests/canvas` = 40 files / **448 passed / 0 failed**,起点干净。
- **BROWSER**:`apps/browser-runtime` 的 compose 栈刚由 PR #2971 接进 S013 车道——此前那个 MCP 端点**从来没人启动过**,而 preflight 的检查是 `real_model_require_vars WORKSPACEX_BROWSER_MCP_ENDPOINT`,**那个变量恰恰由 workflow 自己硬编码**,是恒真门控。PR #2981 又让浏览器工具失败**可归类**(此前 `except Exception: … from None` 把陈旧引用被拒 / 5xx / 超时 / 响应超限 / schema 违规**全部坍缩成同一句话**)。
- **SQL**:`standard-sql-source-real-db.test.ts` 与 `standard-sql-database.test.ts` 要求 `COMPOSE_PROJECT_NAME` 以 `wsx-` 开头(`standard-sql-tls.ts:14`),**必须走 `with-test-isolation.ts` 自己的栈**。基线里这两个标为**未执行**,不是失败。
- **MEDIA**:S016 ASR 真实供应商证据车道已合入(PR #2961)。真实模型层需 main-only trusted runner。
## 交付物:状态表 + issue,不是「把它修绿」
对负责的每一项,按方案 §1 的枚举定级并给出**实测证据**(命令 + 真实用例数 + exact SHA):
| 状态 | 含义 |
|---|---|
| `PASS` | 所有适用层级和反证通过(**必须同时有正向与至少一条反向/越权证据**) |
| `PARTIAL` | 组件通过,但真实模型 / DevApp / 视觉 / 权限层尚缺 |
| `BLOCKED` | 实现或环境前置缺失 |
| `FAIL` | 已执行且行为不符合契约 |
| `N/A` | 该层不适用,须写明理由 |
⚠ **缺实现或缺环境 ⇒ `BLOCKED`,不是 `FAIL`。** 每个 `FAIL` / `BLOCKED` 单独开 issue,标题带 AT-* / WX-* ID,并在本 issue 里登记编号。
## 方案本身有两处缺陷(已立案,别照抄)
- **#2991**:§10 的真库命令**收集到零个测试文件**(`No test files found`),而 §11 自己明令「零收集必须失败」。另有三条 api 命令写成裸跑(实测 `no tests` + exit 1),并漏写两个前置(`uv sync --frozen --extra dev`;SQL-TLS 要求 `COMPOSE_PROJECT_NAME` 以 `wsx-` 开头)。
- **§14 把记分牌当红线**:`chat-task-workbench` **按设计就是红的**(`playwright.chat-read.config.ts:210-214`),是能力缺口记分牌不是回归门。**别去修它那 14 条。**
## 判据纪律(本轮已栽六次)
1. **红 ≠ 跑过**:先在日志里找**该测试自己的断言输出**(用例数、期望 vs 实际)。只有 `beforeEach` 报错、`spawn ENOENT`、连接失败、超时这类,一律先判「没跑到」。本轮 19 项 e2e-full 失败里有 **9 项从来没执行过一条断言**。
2. **绿灯 ≠ 跑过**:`harness-verify` 的 `success` 里 `e2e-full` 常常是 **skipped**(见 #2996)。引用绿灯前先确认该 job 不是 skipped。
3. **重跑绿才是判据**,重跑本身不是。
4. **空测试集合 = 失败**:`pnpm --filter` 缺脚本时 exit 0;vitest 过滤器按 **cwd** 解析不按 `--root`。**每条命令核对真实用例数。**
5. `cmd | grep` 的退出码是 grep 的。
6. 已知 #2989:fixture id 撞**全局**主键,**碰撞确定、受害者随机**。看到 `beforeEach` duplicate key 先想到它。
7. 已知 #2968:整族 `agui-bridge-*` 共享固定 30s 预算,**一天内骗过三个不相关的 PR**。
## 进度回写(硬性要求)
**每完成一个子项就在本 issue 回一条评论**,不要攒到最后:已定级哪些、证据是什么、开了哪些 issue。协调者靠这些评论掌握进度,写在别处看不到。
## 边界
- **绝不碰 `/Users/shenyanbin/Documents/workspacex` 根工作区**。独立 worktree,先 `./init.sh`。
- 尽量不起 docker compose 栈;必须起说明理由,跑完 `down -v`。可复用已运行的 `workspacex-kernel-postgres-1`(`127.0.0.1:55432`),独立 `WORKSPACEX_DB`,用完 DROP。
- 修法很小可直接开 PR(正文首行 `Closes #NNNN`);大改先开 issue 写清根因与建议。**不要合并 PR。**
Contributor guide
No contributing guide indexed for this repository
Research direction
Read docs/design/standard-capabilities/acceptance-test-plan.md sections 1, 3, 8, 11, and 12, then inspect baseline #2996 at SHA 938d16bf3a49c4047f42bbc697833cd921d1053e. Start with the named api tests/canvas, standard-sql-source-real-db.test.ts, standard-sql-database.test.ts, and the browser and media workflows; verify real assertion counts rather than job status. Done means a status table with commands, counts, and exact SHAs, separate issues for each FAIL or BLOCKED item, and progress comments.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- docker-compose, playwright, postgresql, sql, typescript
- Domain
- databases, devops, testing
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 28/100