---
name: prototype
description: 构建原型 Demo 来回答设计问题。当用户想要检验状态模型或逻辑是否合理，或探索 UI 应该是什么样时使用。
---

# 原型

原型是**回答一个问题的一次性代码**。问题决定形式。

## 选择分支

从用户提示、周边代码判断要回答哪个问题，用户在线时可以直接问：

- **“这个逻辑 / 状态模型感觉对吗？”** → [LOGIC.md](LOGIC.md)：可分享的单个 HTML 文件，非开发者也能推着状态机走案例。
- **“它应该看起来怎么样？”** → [UI.md](UI.md)：同一路由上多个截然不同的 UI 变体，URL 参数切换。

问题含糊且联系不到用户时，选更贴合周边代码的分支（后端模块 → 逻辑；页面或组件 → UI），并在原型顶部写明这一假设。

## 两个分支共用的规则

1. **标明一次性。** 原型放在它所原型化的模块或页面旁边，命名让随手阅读的人看出它是原型而非生产代码。
2. **一步启动。** UI 原型用项目 task runner 里的一条命令启动（`pnpm <name>`、`python <path>`、`bun <path>` 等）；逻辑演示是双击即可打开的单个 HTML 文件。
3. **默认不持久化。** 状态放内存。问题明确涉及数据库时，用临时数据库或本地文件，命名为 “PROTOTYPE — wipe me”。
4. **跳过打磨。** 不写测试，错误处理只到能跑为止，不抽象。
5. **展示状态。** 每次 action 后（逻辑）或每次切换变体时（UI），渲染全部相关状态，让用户看见变化。
6. **完成后记录。** 验证过的决策纳入真实代码；原型本身提交到一次性分支（不进主分支），在实现 issue 上链接该分支；答案（结论及它解决的问题）写进 issue 或 commit。主分支只保留验证过的决策。
