44 lines
2.0 KiB
Markdown
44 lines
2.0 KiB
Markdown
# 3-28 dev:hot seed smoke 启动契约缺失
|
||
|
||
## 状态
|
||
|
||
- 已修复
|
||
- 日期:2026-07-11
|
||
- Owner:`03-rust-web`
|
||
|
||
## 症状
|
||
|
||
依赖 `scripts/lib/control-plane-dev-seed.js` 的 browser smoke 在当前 `dev:hot` 服务上调用 `/api/dev/seed` 时返回:
|
||
|
||
```text
|
||
403 dev_seed_disabled
|
||
```
|
||
|
||
脚本在创建测试 workspace / AI policy 前终止,导致真实 UI 交互未执行。由于 cargo-watch 只重启 Rust 子进程,临时修改启动环境但不重启 Node `dev:hot` 主进程也不会生效。
|
||
|
||
## 根因
|
||
|
||
- `dev:hot` 没有建立“默认可运行 seed 依赖 smoke”的启动契约。
|
||
- `MNOTE_WEB_ALLOW_DEV_FIXTURES` 只能由操作者临时记忆和手工补充。
|
||
- seed helper 只返回通用 403,未明确指出应重启哪个启动链。
|
||
|
||
## 修复
|
||
|
||
- `npm run dev:hot` 默认设置 `MNOTE_WEB_ALLOW_DEV_FIXTURES=1`。
|
||
- 显式 `MNOTE_WEB_ALLOW_DEV_FIXTURES=0 npm run dev:hot` 仍可关闭。
|
||
- `desktop:hot` 与生产启动保持默认关闭,不扩大正式运行边界。
|
||
- dev seed helper 对 `dev_seed_disabled` 输出明确的启动与重启指令。
|
||
- Pi RPC API smoke 不再把 `dev_seed_disabled` 静默标记为 skipped,而是明确失败并要求恢复正确启动契约。
|
||
- 完整 RPC smoke 暴露了 abort 后迟到 `agent_end` 将 `aborted` 覆盖为 `runtime_running` 的竞态;runtime 现在保持 `aborted/error` 终态,迟到空回复事件也不会覆盖已中止状态。
|
||
- RPC smoke 按当前 status 合同验收:已中止会话退出 auto-resume `status.session`,并通过 `/api/page-ai/pi/sessions/{sessionId}` 验证持久化状态为 `aborted`。
|
||
- `scripts/TESTING_REFERENCE.md` 增加 seed 依赖 smoke 的统一启动契约。
|
||
- `task-dev-hot-plan-test.js` 固化默认开启和显式关闭行为。
|
||
|
||
## 验证
|
||
|
||
- `node scripts/task-dev-hot-plan-test.js`
|
||
- 重启 `npm run dev:hot`
|
||
- `node scripts/task-pi-lab-input-controls-smoke.js`
|
||
- `node scripts/task-pi-lab-model-thinking-controls-smoke.js`
|
||
- `node scripts/task-pi-lab-rpc-api-smoke.js`
|