# AGENT.md — 健身房管理系统 AI 协作工作流 ## 概述 本项目采用"需求驱动开发"(Requirement-Driven Development)工作流,通过以下四个核心命令完成从模糊需求到可运行代码的全流程。遇到复杂 Bug 时可随时调用 `/systemic-debugging` 进行系统化诊断。 --- ## 项目技术栈与模块结构 ### 技术栈总览 | 层 | 技术栈 | 目录 | 测试框架 | |---|---|---|---| | 后端 API | Java Spring Boot(Maven 多模块) | `gym-manage-api/` | JUnit + Spring Boot Test | | 管理后台 Web | Vue.js | `gym-manage-web/` | Playwright E2E | | 会员小程序 | UniApp | `gym-manage-uniapp/` | — | | 端到端测试 | Playwright | `e2e-tests/` | Playwright | ### 后端模块映射 | 模块 | 目录 | 职责 | |---|---|---| | manage-app | `gym-manage-api/manage-app/` | 应用启动入口、配置中心 | | manage-gateway | `gym-manage-api/manage-gateway/` | API 网关、路由转发 | | manage-common | `gym-manage-api/manage-common/` | 公共工具、通用组件 | | manage-db | `gym-manage-api/manage-db/` | 数据库迁移(Flyway)、基础实体 | | manage-sys | `gym-manage-api/manage-sys/` | 系统管理(用户/角色/权限/菜单/字典/文件/通知/日志) | | manage-audit | `gym-manage-api/manage-audit/` | 审计日志 | | manage-file | `gym-manage-api/manage-file/` | 文件管理 | | manage-notify | `gym-manage-api/manage-notify/` | 消息通知 | | gym-auth | `gym-manage-api/gym-auth/` | 认证授权、JWT | | gym-member | `gym-manage-api/gym-member/` | 会员管理(注册/信息/会员卡) | | gym-groupCourse | `gym-manage-api/gym-groupCourse/` | 团课管理、团课预约 | | gym-checkIn | `gym-manage-api/gym-checkIn/` | 签到管理 | | gym-dataCount | `gym-manage-api/gym-dataCount/` | 数据统计 | | gym-payment | `gym-manage-api/gym-payment/` | 支付集成、支付对账 | ### 涉及模块的判断原则 在 `/to-issues` 和 `/test-driven-development` 阶段,根据功能需求确定涉及的模块。例如: - "会员卡购买" → `gym-member` + `gym-payment` + `gym-manage-web` + `gym-manage-uniapp` - "团课预约" → `gym-groupCourse` + `gym-member` + `gym-manage-uniapp` - "系统管理"类功能 → `manage-sys` + `gym-manage-web` --- ## 工作流总览 ``` /grill-with-docs → /to-prd → /to-issues → /test-driven-development ↓ ↓ ↓ ↓ 需求澄清 结构化PRD 任务拆解 TDD实现 + 领域建模 (CONTEXT.md) ``` --- ## 0. /domain-modeling — 领域建模(贯穿全流程) **目标**:建立并维护项目的统一语言(Ubiquitous Language),确保需求、设计、代码中术语一致。 ### 核心产出 - 项目根目录的 [CONTEXT.md](./CONTEXT.md) — 术语表,不含任何实现细节,纯粹的概念定义和关系。 ### 执行时机 - **在 `/grill-with-docs` 阶段**:识别新术语,与用户确认定义,写入 `CONTEXT.md`。 - **在 `/to-prd` 阶段**:引用 `CONTEXT.md` 中的术语,保持 PRD 术语一致。 - **在 `/to-issues` 阶段**:确保每个 Issue 使用的术语与 `CONTEXT.md` 对齐。 - **在 `/test-driven-development` 阶段**:代码中的类名、方法名、变量名需反映领域术语。 ### 领域术语规则 1. **挑战模糊语言**:当用户使用模糊或过载的术语时,提出精确的规范术语。例如:"你说的'账户'是指会员(Member)还是用户(User)?它们是不同的概念。" 2. **冲突检测**:当用户使用的术语与 `CONTEXT.md` 中已定义的不同时,立即指出:"你的术语表将'取消'定义为 X,但你现在似乎指 Y — 是哪个?" 3. **场景验证**:用具体的边界场景压力测试领域关系。例如:"如果会员卡已过期,预约还能取消吗?" 4. **代码交叉验证**:当需要确认某个术语的实际语义时,查阅现有代码实现,如有矛盾及时指出。 ### 更新原则 - 术语一经确认,立即更新 `CONTEXT.md`,不要批量处理。 - 只在有实际产出时才创建或修改 `CONTEXT.md`。 --- ## 1. /grill-with-docs — 需求澄清与领域建模 **目标**:通过结构化问答 + 领域建模,将模糊需求转化为清晰、文档化的共识。 ### 触发条件 - 用户提出新功能需求但描述不完整 - 需求存在歧义或矛盾 - 需要明确验收标准 ### 执行流程 1. **收集原始需求**:理解用户意图,记录关键信息。 2. **启动领域建模**:识别需求中涉及的领域概念,对照 [CONTEXT.md](./CONTEXT.md) 检查术语一致性,新术语与用户确认后写入。 3. **识别模糊点**:主动指出需求中的歧义、缺失、矛盾之处。 4. **逐轮问答**:每次只问 1-2 个关键问题,避免信息过载。使用 `AskUserQuestion` 工具。 5. **生成共识文档**:将确认后的需求写入 `docs/superpowers/plans/` 目录,文件名格式为 `{YYYY-MM-DD}-{功能名称}-grill.md`,内容包括: - 功能概述 - 用户故事 - 业务流程(Mermaid 流程图) - 验收标准 - 涉及的领域概念(引用 `CONTEXT.md`) - 非功能需求 - 待确认项(如有) ### 规则 - 不要在分歧未解决前进入下一阶段。 - 所有关键决策需用户确认。 - 文档使用中文,保持与项目已有文档风格一致。 - 新术语必须写入 `CONTEXT.md` 后再用于文档。 --- ## 2. /to-prd — 生成产品需求文档 **目标**:将澄清后的需求转化为结构化的 PRD。 ### 输入 - `/grill-with-docs` 生成的共识文档(`docs/superpowers/plans/{日期}-{功能名称}-grill.md`) - 项目的功能清单文档([基础版功能清单.md](./基础版功能清单.md)) - 领域术语表([CONTEXT.md](./CONTEXT.md)) ### 执行流程 1. **读取共识文档**:理解需求全貌。 2. **参考现有规范**:对照 [基础版功能清单.md](./基础版功能清单.md) 中的优先级定义(P0/P1/P2/P3)、技术规范和文档风格。 3. **术语对齐**:对照 [CONTEXT.md](./CONTEXT.md),确保 PRD 使用的所有业务术语与术语表一致。 4. **生成 PRD**:将 PRD 写入 `docs/superpowers/specs/` 目录,文件名格式为 `{YYYY-MM-DD}-{功能名称}-prd.md`,内容结构: - 文档元信息(编号、版本、日期、状态) - 功能概述与目标 - 用户故事(As a... I want... So that...) - 功能详细描述(功能点、优先级、验收标准、依赖关系、预计工时) - 涉及的后端模块(参考模块映射表) - 业务流程(Mermaid 流程图) - 业务规则 - 非功能需求(性能、安全、可用性) - UI/UX 要求(如适用) - 技术要点建议 ### 规则 - PRD 格式严格对齐 [基础版功能清单.md](./基础版功能清单.md) 的风格。 - 优先级标记使用 P0/P1/P2/P3 体系。 - 每个功能点必须有明确的验收标准。 - 必须在 PRD 中标注涉及的后端模块和前端应用。 --- ## 3. /to-issues — 任务拆解 **目标**:将 PRD 拆解成可独立执行、可验证的具体任务(Issues)。 ### 输入 - `/to-prd` 生成的 PRD(`docs/superpowers/specs/{日期}-{功能名称}-prd.md`) - 领域术语表([CONTEXT.md](./CONTEXT.md)) ### 拆解原则 **纵向拆分(全栈 Issue)**:每个 Issue 按功能维度拆分,覆盖完整的前后端链路。 - 一个 Issue = 一个可独立交付的功能点,包含后端 API + Web 前端 + 小程序(按需)。 - TDD 顺序:后端单元测试 → 后端实现 → 前端 E2E 测试 → 前端实现。 **粒度控制**: - 预计工时不超过 2 天,超过则继续拆解。 - Issue 粒度应足够小,确保一个 Issue 可以在一轮对话中实现。 **优先级与排序**: - P0 任务排在 P1 之前,同一优先级下按依赖拓扑排序。 - 每个 Issue 标注依赖关系。 ### 输出 写入 `docs/superpowers/issues/` 目录(如不存在则创建),文件名格式为 `ISSUES-{功能名称}.md`,内容结构: ```markdown ## GYM-{编号}: {标题} - **优先级**: P0 / P1 / P2 / P3 - **预计工时**: {天数}天 - **依赖**: GYM-{编号} 或 无 - **涉及模块**: 后端模块列表 + 前端应用列表 - **领域术语**: 引用的 CONTEXT.md 术语 ### 验收标准 1. 后端单元测试通过 2. E2E 测试通过 3. ... ### 技术要点 - 要点 1 - 要点 2 ``` --- ## 4. /test-driven-development — 测试驱动开发 **目标**:采用 TDD 方式,按 Red-Green-Refactor 循环逐个实现 Issues。 ### 前置步骤(每个 Issue 开始前必须执行) 1. **阅读 Issue 描述**:理解全栈范围(涉及哪些后端模块和前端应用)。 2. **阅读 [CONTEXT.md](./CONTEXT.md)**:确认使用的领域术语,确保代码命名一致。 3. **阅读现有测试基础设施**: - E2E 测试:`e2e-tests/helpers/`(TestDataManager、TestStabilityHelper、auth.ts)、`e2e-tests/pages/`(Page Object 模式)、`e2e-tests/fixtures/`、`e2e-tests/utils/`(TestDataFactory、RetryHelper、api-client) - 后端测试:参考 `gym-checkIn/src/test/`、`gym-payment/src/test/` 等现有模块测试用例的风格和结构 - 遵循已有的 Page Object、DataFactory、Smoke/Journey 测试分层 pattern ### 执行流程 按 Issue 顺序逐个实现,每个 Issue 遵循三步循环: #### Step 1: Red — 编写失败的测试 1. 先写后端单元测试(JUnit),验证 API 逻辑和边界条件。 2. 运行后端测试,确认测试失败(红色)。 3. 写前端 E2E 测试(Playwright),覆盖用户操作链路。 4. 运行 E2E 测试,确认测试失败(红色)。 #### Step 2: Green — 编写最小实现 1. 编写后端 API 代码,刚好让单元测试通过。 2. 运行后端测试,确认通过(绿色)。 3. 编写前端代码,刚好让 E2E 测试通过。 4. 运行 E2E 测试,确认通过(绿色)。 5. 不添加任何测试未覆盖的功能。 #### Step 3: Refactor — 重构优化 1. 在全部测试保持绿色的前提下重构代码。 2. 消除重复、改善命名(对齐 `CONTEXT.md` 术语)、优化结构。 3. 运行全部测试,确认仍然通过。 ### 规则 - 一个 Issue 完成后再开始下一个。 - 每次只改最少代码。 - 测试优先覆盖核心逻辑和边界条件。 - 代码风格严格遵循项目现有规范。 - 代码命名必须对齐 [CONTEXT.md](./CONTEXT.md) 中的领域术语。 - 所有测试通过后方可标记 Issue 为完成。 --- ## 5. /systemic-debugging — 系统化调试 **目标**:当遇到复杂 Bug 时,通过系统化诊断流程定位根因并修复。 ### 触发条件 - 遇到难以复现的 Bug - 多轮尝试修复无效 - 用户明确请求调试 ### 执行流程 1. **定义问题**:明确描述 Bug 的现象、触发条件和预期行为。 2. **收集证据**:查看相关日志、错误堆栈、数据库状态(检查 Flyway 迁移版本)、网络请求等。 3. **建立假设**:基于证据提出 1-3 个可能的根因假设。 4. **验证假设**:通过添加日志、编写最小复现用例、断点调试等方式验证或排除假设。一次只验证一个假设。 5. **修复与验证**:定位根因后编写修复代码,确保测试覆盖该场景。 6. **回归检查**:运行全部测试(后端 JUnit + 前端 E2E),确保修复未引入新问题。 ### 规则 - 不要猜测式修复,每一步必须有证据支撑。 - 每次只验证一个假设。 - 修复后必须添加对应的回归测试。 --- ## 目录结构约定 ``` gym-manage/ ├── AGENT.md # 本文件 ├── CONTEXT.md # 领域术语表(统一语言) ├── 基础版功能清单.md # 项目功能清单(参考规范) ├── docs/ │ └── superpowers/ # AI 协作产出物 │ ├── plans/ # 需求澄清文档(/grill-with-docs 产出) │ │ └── {YYYY-MM-DD}-{功能名称}-grill.md │ ├── specs/ # PRD(/to-prd 产出) │ │ └── {YYYY-MM-DD}-{功能名称}-prd.md │ └── issues/ # 任务拆解(/to-issues 产出) │ └── ISSUES-{功能名称}.md ├── gym-manage-api/ # 后端 Java Spring Boot 多模块 │ ├── manage-app/ # 应用启动入口 │ ├── manage-gateway/ # API 网关 │ ├── manage-common/ # 公共组件 │ ├── manage-db/ # 数据库迁移 │ ├── manage-sys/ # 系统管理 │ ├── manage-audit/ # 审计日志 │ ├── manage-file/ # 文件管理 │ ├── manage-notify/ # 消息通知 │ ├── gym-auth/ # 认证授权 │ ├── gym-member/ # 会员管理 │ ├── gym-groupCourse/ # 团课管理 │ ├── gym-checkIn/ # 签到管理 │ ├── gym-dataCount/ # 数据统计 │ └── gym-payment/ # 支付集成 ├── gym-manage-web/ # 管理后台 Web 前端 ├── gym-manage-uniapp/ # 会员小程序前端 └── e2e-tests/ # 端到端测试 ├── helpers/ # TestDataManager、auth 等 ├── pages/ # Page Object 模式 ├── fixtures/ # 测试数据 ├── utils/ # TestDataFactory、RetryHelper ├── journeys/ # 用户旅程测试 └── smoke/ # 冒烟测试 ``` --- ## 通用规则 - **语言**:所有文档和代码注释使用中文,代码标识符使用英文。 - **术语对齐**:所有文档和代码中的业务术语必须对齐 [CONTEXT.md](./CONTEXT.md)。 - **风格对齐**:严格遵循项目现有代码风格和文档风格。 - **每一步确认**:关键产出(grill 文档、PRD、Issues)完成后通知用户确认再继续。 - **最小化原则**:不添加需求范围外的功能,不引入不必要的复杂度。 - **测试优先**:后端单元测试和前端 E2E 测试必须在新代码之前编写。