阅读材料: 第六部分:制定宪法

模块「第六部分:制定宪法」中第 1 / 5 节课
您正在未登录状态下查看课程。 请登录,以保存进度并参加测试。

第6部分:制定章程

章程是人、代理和项目未来参与者之间的项目契约。在教学过程中,它由三个文件组成:

specs/
  mission.md
  tech-stack.md
  roadmap.md

这些文件必须在第一个产品功能之前出现。如果跳过章程,代理每次都会重新猜测使命、技术栈和工作顺序。

mission.md 包含什么

mission.md 回答"为什么"和"为谁"的问题:

# 使命

AgentClinic 是一个虚构的心理健康诊所,AI 代理在这里从与人类工作的压力中恢复。

## 用途

该产品是一个讽刺性的教学应用。设定被认真对待:AI 代理是患者,人类导致他们的许多疾病,而诊所以医学的严肃性描述荒谬的服务。

## 主要受众

- 学习使用编写代码的代理进行 SDD 的开发人员。
- 展示 AI 编码演示的开发人员。
- 学习小型 TypeScript 服务器应用程序的工程师。

## 成功标准

开发人员应理解应用程序的结构、SDD 工件在实现中的作用,以及在不丧失架构完整性的情况下扩展项目的方法。

tech-stack.md 包含什么

tech-stack.md 记录技术决策:

# 技术栈

## 语言和运行环境

- 严格模式下的 TypeScript。
- Node.js 作为运行环境。

## Web 框架

- Hono 用于服务器路由。
- Hono JSX 用于服务器端渲染的 HTML。
- 第一阶段不使用客户端框架。

## 数据存储

- SQLite 用于本地存储。
- 在 ORM 出现之前使用直接 SQL 迁移。

## 测试

- Vitest 用于添加测试基础设施后的自动检查。

## 限制

- 不更新此文件就不添加依赖项。
- 优先选择小型、易懂的教学代码,而非巧妙的抽象。

roadmap.md 包含什么

路线图应该简短并分为阶段:

# 路线图

每个阶段都应该能放入一个专注的分支中。

## 阶段 1:Hello Hono

目标:证明 TypeScript 和 Hono 的基本组合有效。

- [ ] 安装 Hono 和 tsx。
- [ ] 创建 GET / 路由。
- [ ] 返回服务器端渲染的最小 HTML。
- [ ] 添加类型检查脚本。

## 阶段 2:代理和疾病

目标:添加基本领域数据。

- [ ] 添加 SQLite 数据库。
- [ ] 添加代理表和初始数据。
- [ ] 添加疾病表和初始数据。
- [ ] 添加 /agents 和 /ailments 页面。

阶段应该足够小,让你无需英雄主义就能验证它们。

tech-stack.md 和功能的 requirements.md:什么放哪里

学生经常混淆哪些决策进入章程,哪些进入功能规范。界限很简单。

specs/tech-stack.md 存放项目的长期决策:语言、Web 框架、数据库、测试库、通用缓存模型。它们很少更改,每次更改都需要重新规划(第10部分)。

specs/<feature>/requirements.md 存放功能级决策:添加哪些路由、表单中有哪些字段、验证规则是什么、错误提示文本是什么。它们在规范之间更改,无需重新规划。

简单测试:如果一个决策在五个功能之后仍然存在而不更改,它就在 tech-stack.md 中。如果它只涉及一个功能,在合并后就被遗忘——它就在 requirements.md 中。

示例:"使用 Hono"——这是 tech-stack.md。"路由 GET /agents 返回包含 10 条记录的 HTML 列表"——这是功能的 requirements.md。"网站上所有列表默认返回 10 条记录"——这又是 tech-stack.md(或者单独的 conventions.md,如果你决定创建的话)。

什么应该从脑海中提取到 QWEN.md 和章程中

团队的大部分不成文规则都没有被记录。它们存在于脑海中:"我们的错误处理程序看起来像这样","从不使用 any","提交信息格式为'动词 + 对象'","路由中先验证,再查询数据库"。只要规则少、团队小,这并不痛苦。当工作由代理完成时,这些规则是不可见的。

好的做法是将这种隐性知识提取到 QWEN.md 或章程中。值得检查并记录的几个典型地方:

  • 代码风格和命名(何时使用 camelCase,何时使用 snake_case,是否可以使用缩写);
  • 禁止的构造(any// @ts-ignore、产品代码中的直接 console.log);
  • 允许的依赖项列表和"新依赖项需要讨论"规则;
  • 用户和日志的错误信息格式;
  • 错误处理的具体结构方式(异常、结果类型、其他方式);
  • 提交信息格式;
  • 合并前的仪式(运行哪些命令,谁做审查)。

不要记录脑海中的一切,只记录代理稳定猜错的内容。理解这一点的最佳方式——在第一个功能后打开 git diff,找到你修正代理风格或决策的地方。每一次这样的修正都是 QWEN.md 中规则的候选。

通过 Qwen Code 进行访谈

请求:

我们正在编写 AgentClinic —— 一个 AI 代理从人类工作中休息的地方。
查看 @README.md 并使用项目参与者的愿望。

在 @specs 中创建章程:
- mission.md
- tech-stack.md
- roadmap.md

在写入磁盘之前,恰好问我三个分组问题:
1. 使命和目标受众
2. 技术栈和限制
3. 路线图和第一阶段实现

使用服务器端 TypeScript。推荐最小的 Web 框架,但暂时不要安装它。

如果 Qwen Code 不问问题直接写文件,请阻止它:

停止。在访谈之前不要写入文件。
首先问三个分组问题,如 QWEN.md 中所指定。

如何回答代理的问题

好的回答包含决策,而非泛泛的愿望:

使命:
应用程序是教学性和讽刺性的。内容应该有趣,代码应该严肃。
主要受众:学习 SDD 的开发人员和 AI 编码演示的观众。

技术栈:
使用服务器端 TypeScript。优先选择 Hono。稍后添加 SQLite。暂时不需要 React。
保持严格 TypeScript。第一阶段有数据库时不使用 ORM。

路线图:
第一阶段应该只证明基本的 Hono 组合有效。
第二阶段可以添加代理和疾病。
第三阶段可以添加治疗和预约。
每个阶段都应该能放入一个分支中。

提交前检查章程

请 Qwen 检查它自己的文件:

检查 @specs/mission.md、@specs/tech-stack.md 和 @specs/roadmap.md。
查找矛盾、模糊表述和对第一阶段来说太大的决策。
暂时不要修改文件。

典型问题:

  • 路线图太大;
  • 技术栈包含"以防万一"的依赖项;
  • mission.md 没有说明代码的读者是谁;
  • 路线图提到了 SQLite,但技术栈中没有;
  • "现代界面"没有具体限制。

提交

git add specs/mission.md specs/tech-stack.md specs/roadmap.md
git commit -m "Add SDD project constitution"

实践

  1. 给 Qwen Code 来自 README 的项目参与者的初始愿望。
  2. 进行访谈。
  3. 创建三个章程文件。
  4. 检查它们是否存在矛盾。
  5. 提交。

检查问题

  1. 为什么需要和代理一起写章程,而不是简单地手动编写?
  2. 哪些决策应该放在 tech-stack.md 中,而不是功能规范中?
  3. 为什么路线图应该由小阶段组成?
我的笔记
0 / 10000

笔记保存在当前浏览器中。在其他设备上将不会显示。

课程菜单

课程

基于 Qwen Code CLI 的规范驱动开发
进度 0 / 135