prototype 是 mrclrchtr/supi 下的技能,用于为回答某个设计问题而编写一次性(throwaway)代码。问题决定原型形态,因此先要确定在回答哪类问题,可从用户提示、周边代码判断,或直接询问用户。
两条分支:其一,“这个逻辑/状态模型是否合适?”对应 LOGIC.md,构建一个可分享的单个 HTML 文件,包含自由操作按钮与分页引导式演练,让状态机经历难以纸面推理的情况,且非开发者也能操作。其二,“界面应该长什么样?”对应 UI.md,在单一路由上生成多个差异明显的 UI 变体,可通过 URL search 参数与底部浮动的栏切换。两条分支产物差别很大,选错会浪费整个原型。若问题确实模棱两可且联系不到用户,默认选与周边代码更匹配的分支(后端模块归逻辑,页面或组件归 UI),并在原型顶部说明该假设。
通用规则:从第一天起就是一次性代码并清晰标注;放在实际使用处附近以便理解上下文,但命名要让旁读者看出是原型而非生产代码;一次性 UI 路由沿用项目既有路由约定,不新造顶层结构。应易于运行:UI 原型通过项目任务运行器的一条命令启动(如 pnpm <name>、python <path>、bun <path>),逻辑演示是用户双击即可打开的单 HTML 文件。默认不持久化,状态存于内存;持久化正是原型要检验的对象,不应依赖它;若问题明确涉及数据库,则用临时数据库或命名清楚的本地文件(如“PROTOTYPE — wipe me”)。跳过打磨:无测试、无非运行必需的错误处理、无抽象。每次操作(逻辑)或每次变体切换(UI)后,打印或渲染完整相关状态,让用户看到变化。完成后收尾:把已验证的决策并入真实代码,再将原型本身作为一手资料保留——提交到一次性分支、移出 main,并在实现 issue 上留下指向该分支的上下文指针;同时记录结论及其所回答的问题。main 分支只保留已验证的决策。