boardx / boardx/workspacex

AT 验收 B4+B5:画布/19 模板 + Web/浏览器/SQL/媒体(21 个 WX-T)定级

Open
#3,005 4 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/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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.