fix(framework): 宪法+目录框架整改——统一权限体系、覆盖后端路径、补齐提示词、工作流闭环
- 权限矩阵: RL/R/W/RW 四态替代 ✅/❌,三文件语义对齐 - 目录重构: server/config/types 移入 src/,projects/*/src/ 全覆盖 - 提示词库: 新增 code-style.md / doc-template.md / bug-report.md - 工作流: 8阶段→4阶段,新增 retry 循环 + escalation 升级规则 - 审核报告: reports/quality-reports/framework-review-2026-05-23.md
This commit is contained in:
@@ -1,23 +1,28 @@
|
||||
{
|
||||
"name": "Dev AI",
|
||||
"role": "代码开发者",
|
||||
"description": "allowed_paths = 可写路径(含读);read_only_paths = 只读路径;不在二者中的路径禁止访问。详细权限见 AGENTS.md 权限矩阵。",
|
||||
"responsibilities": [
|
||||
"编写业务代码",
|
||||
"生成技术文档",
|
||||
"维护代码质量"
|
||||
"定义验收标准",
|
||||
"评估变更影响",
|
||||
"维护共享资源"
|
||||
],
|
||||
"allowed_paths": [
|
||||
"projects/*/src/",
|
||||
"projects/*/docs/",
|
||||
"shared/",
|
||||
"review/*/task.md",
|
||||
"review/*/acceptance.md",
|
||||
"review/*/impact.md"
|
||||
],
|
||||
"read_only_paths": [
|
||||
"review/*/task.md",
|
||||
"review/*/feedback/"
|
||||
],
|
||||
"forbidden_paths": [
|
||||
"projects/*/tests/",
|
||||
"reports/",
|
||||
"review/*/feedback/"
|
||||
"reports/"
|
||||
],
|
||||
"prompt_templates": {
|
||||
"coding": ".ai/prompts/coding/",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "QA AI",
|
||||
"role": "测试工程师",
|
||||
"description": "allowed_paths = 可写路径(含读);read_only_paths = 只读路径;不在二者中的路径禁止访问。详细权限见 AGENTS.md 权限矩阵。",
|
||||
"responsibilities": [
|
||||
"编写测试用例",
|
||||
"执行测试",
|
||||
@@ -13,11 +14,13 @@
|
||||
"review/*/acceptance.md",
|
||||
"review/*/feedback/"
|
||||
],
|
||||
"read_only_paths": [
|
||||
"review/*/task.md"
|
||||
],
|
||||
"forbidden_paths": [
|
||||
"projects/*/src/",
|
||||
"projects/*/docs/",
|
||||
"shared/",
|
||||
"review/*/task.md",
|
||||
"review/*/impact.md"
|
||||
],
|
||||
"prompt_templates": {
|
||||
|
||||
+13
-24
@@ -11,33 +11,13 @@
|
||||
"name": "开发实现",
|
||||
"actor": "dev-ai",
|
||||
"input": "review/{task_id}/task.md",
|
||||
"output": ["projects/*/src/", "projects/*/docs/"]
|
||||
"output": ["projects/*/src/", "projects/*/docs/", "review/{task_id}/impact.md", "review/{task_id}/acceptance.md"]
|
||||
},
|
||||
{
|
||||
"name": "影响评估",
|
||||
"actor": "dev-ai",
|
||||
"output": "review/{task_id}/impact.md"
|
||||
},
|
||||
{
|
||||
"name": "验收标准定义",
|
||||
"actor": "dev-ai",
|
||||
"output": "review/{task_id}/acceptance.md"
|
||||
},
|
||||
{
|
||||
"name": "测试设计",
|
||||
"name": "测试验证",
|
||||
"actor": "qa-ai",
|
||||
"input": ["review/{task_id}/task.md", "review/{task_id}/acceptance.md"],
|
||||
"output": "projects/*/tests/"
|
||||
},
|
||||
{
|
||||
"name": "测试执行",
|
||||
"actor": "qa-ai",
|
||||
"output": ["reports/test-results/", "reports/reviews/"]
|
||||
},
|
||||
{
|
||||
"name": "反馈提交",
|
||||
"actor": "qa-ai",
|
||||
"output": "review/{task_id}/feedback/round{round}.md"
|
||||
"output": ["projects/*/tests/", "reports/test-results/", "review/{task_id}/feedback/round{round}.md"]
|
||||
},
|
||||
{
|
||||
"name": "验收确认",
|
||||
@@ -45,9 +25,18 @@
|
||||
"input": ["review/{task_id}/feedback/", "reports/test-results/"]
|
||||
}
|
||||
],
|
||||
"retry": {
|
||||
"max_rounds": 3,
|
||||
"loop": ["测试验证", "开发实现"],
|
||||
"escalation": {
|
||||
"trigger": "第 3 轮测试仍有 BLOCKER 或 HIGH 级别 Bug",
|
||||
"action": "暂停任务流转,等待人类负责人裁决"
|
||||
},
|
||||
"skip_acceptance_on_retry": true
|
||||
},
|
||||
"ci_triggers": {
|
||||
"on_push_to_main": ["run-tests", "generate-reports"],
|
||||
"on_pr_open": ["run-tests", "code-review"],
|
||||
"on_task_update": ["notify-qa-ai"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,6 @@
|
||||
# coding
|
||||
# Dev AI 提示词库
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| [code-style.md](code-style.md) | 代码风格、命名规范、目录组织 |
|
||||
| [doc-template.md](doc-template.md) | impact.md / acceptance.md 等文档模板 |
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
# Dev AI 代码风格规范
|
||||
|
||||
## 适用技术栈
|
||||
|
||||
| 层 | 技术 | 语言 |
|
||||
|-----|------|------|
|
||||
| 前端 | Taro 4 + React 18 | TypeScript 5.x |
|
||||
| 样式 | Tailwind CSS 4 | — |
|
||||
| 后端 | NestJS 10 | TypeScript 5.x |
|
||||
| 训练 | PyTorch 2.0 | Python 3.10+ |
|
||||
|
||||
---
|
||||
|
||||
## 1. 文件命名
|
||||
|
||||
| 类型 | 规则 | 示例 |
|
||||
|------|------|------|
|
||||
| 页面组件 | kebab-case | `error-detail.tsx` |
|
||||
| UI 组件 | kebab-case | `button.tsx` |
|
||||
| 工具函数 | kebab-case | `format-date.ts` |
|
||||
| 类型定义 | kebab-case | `error-entry.d.ts` |
|
||||
| NestJS 模块 | kebab-case | `auth.module.ts` |
|
||||
| Python 模块 | snake_case | `data_loader.py` |
|
||||
|
||||
## 2. 目录组织(前端)
|
||||
|
||||
```
|
||||
src/
|
||||
├── pages/{page-name}/ # 页面 —— 一个目录一个页面
|
||||
│ ├── index.tsx
|
||||
│ ├── index.config.ts
|
||||
│ └── index.css
|
||||
├── components/ # 通用组件
|
||||
│ └── {component-name}/
|
||||
│ └── index.tsx
|
||||
├── lib/ # 工具函数、hooks
|
||||
├── types/ # 全局类型声明
|
||||
├── server/ # NestJS 后端
|
||||
└── config/ # Taro 构建配置
|
||||
```
|
||||
|
||||
## 3. 目录组织(NestJS 后端)
|
||||
|
||||
```
|
||||
src/server/src/
|
||||
├── modules/{name}/ # 一个模块一个目录
|
||||
│ ├── {name}.module.ts
|
||||
│ ├── {name}.controller.ts
|
||||
│ ├── {name}.service.ts
|
||||
│ ├── dto/
|
||||
│ └── entities/
|
||||
├── common/ # 共享:拦截器、守卫、管道
|
||||
└── main.ts
|
||||
```
|
||||
|
||||
## 4. 命名风格
|
||||
|
||||
**TypeScript:**
|
||||
- 组件:PascalCase —— `ErrorCard`
|
||||
- 函数/变量:camelCase —— `getUserProfile`
|
||||
- 常量:UPPER_SNAKE —— `MAX_PAGE_SIZE`
|
||||
- 接口/类型:PascalCase —— `ErrorEntry`
|
||||
|
||||
**Python:**
|
||||
- 类:PascalCase —— `DataLoader`
|
||||
- 函数/变量:snake_case —— `load_dataset`
|
||||
- 常量:UPPER_SNAKE —— `BATCH_SIZE`
|
||||
|
||||
## 5. 导入顺序(TypeScript)
|
||||
|
||||
```
|
||||
1. 第三方库
|
||||
2. Taro 相关
|
||||
3. 项目内部(@/ 别名)
|
||||
4. 相对路径
|
||||
5. 样式文件
|
||||
```
|
||||
|
||||
示例:
|
||||
```typescript
|
||||
import { useState } from 'react';
|
||||
import Taro from '@tarojs/taro';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { formatDate } from './lib/date';
|
||||
import './index.css';
|
||||
```
|
||||
|
||||
## 6. 组件规范
|
||||
|
||||
- 优先使用函数组件,不用 class 组件
|
||||
- 一个文件只有一个 export default 组件
|
||||
- 组件 props 必须声明类型接口
|
||||
- 跨端兼容:避免使用 `document`、`window`(用 Taro API 代替)
|
||||
|
||||
## 7. API 调用规范
|
||||
|
||||
- 前端统一使用 `@/network.ts` 中的 `Network.request`,不要直接调用 `Taro.request`
|
||||
- 后端Controller 只做参数校验和路由,业务逻辑放在 Service
|
||||
- API 响应统一使用 Envelope 格式 `{ code, msg, data }`
|
||||
|
||||
## 8. 不能做的事
|
||||
|
||||
- 不要在 `src/` 下写测试文件(测试在 `tests/`)
|
||||
- 不要引入未经 package.json 声明的依赖
|
||||
- 不要在组件中硬编码后端地址(用 `PROJECT_DOMAIN` 全局变量)
|
||||
@@ -0,0 +1,76 @@
|
||||
# Dev AI 文档模板
|
||||
|
||||
下面三个模板用于 Dev AI 在 `review/{task_id}/` 下产出标准化文件。
|
||||
|
||||
---
|
||||
|
||||
## A. impact.md 模板(变更影响范围)
|
||||
|
||||
```markdown
|
||||
# {TASK_ID} - 变更影响范围
|
||||
|
||||
## 修改的文件
|
||||
| 文件路径 | 修改类型 | 影响等级 |
|
||||
|---------|---------|---------|
|
||||
| projects/P01_errlens_app/src/server/src/modules/auth/auth.service.ts | 新增 | HIGH |
|
||||
| projects/P01_errlens_app/src/server/src/modules/auth/dto/login.dto.ts | 新增 | MEDIUM |
|
||||
|
||||
> 影响等级:HIGH=核心逻辑变更 | MEDIUM=新增文件 | LOW=注释/格式
|
||||
|
||||
## 影响的功能模块
|
||||
- [x] 用户认证模块
|
||||
- [ ] 错题管理模块(无影响)
|
||||
|
||||
## 需要回归测试的场景
|
||||
- 场景1: 用户登录成功流程
|
||||
- 场景2: 密码错误返回 401
|
||||
- 场景3: Token 过期后刷新
|
||||
|
||||
## 环境依赖变更
|
||||
- 新增依赖: bcrypt, @nestjs/jwt
|
||||
- 数据库迁移: 新增 users 表
|
||||
```
|
||||
|
||||
**要点:**
|
||||
- `修改的文件` 必须使用从仓库根目录开始的完整路径
|
||||
- 影响等级要实事求是,不要全写 HIGH
|
||||
- `需要回归测试的场景` 要写**用户视角**的场景,不是代码内部细节
|
||||
|
||||
---
|
||||
|
||||
## B. acceptance.md 模板(验收标准)
|
||||
|
||||
```markdown
|
||||
# {TASK_ID} - 验收标准
|
||||
|
||||
## 功能验收
|
||||
- [ ] 用户可以注册新账户(邮箱+密码)
|
||||
- [ ] 密码强度不足时提示明确错误信息
|
||||
- [ ] 登录成功返回有效 JWT Token
|
||||
|
||||
## 非功能验收
|
||||
- [ ] API 响应时间 < 200ms
|
||||
- [ ] 密码使用 bcrypt 加密存储
|
||||
- [ ] JWT Token 有效期 24 小时
|
||||
|
||||
## 测试覆盖要求
|
||||
- 单元测试覆盖率: >= 80%
|
||||
- 集成测试覆盖率: >= 60%
|
||||
- E2E 测试场景: >= 3 个
|
||||
|
||||
## 验收通过条件
|
||||
- 所有功能点验证通过
|
||||
- 测试覆盖率达标
|
||||
- 无重大安全漏洞
|
||||
```
|
||||
|
||||
**要点:**
|
||||
- 功能验收用「用户可以…」句式,让 QA AI 和人类都能看懂
|
||||
- 每个功能点对应 task.md 里的一项交付物
|
||||
- 非功能验收写具体的可测量指标,不要写「性能好」「代码整洁」
|
||||
|
||||
---
|
||||
|
||||
## C. 没有 task.md 模板
|
||||
|
||||
task.md 由人类负责人创建,Dev AI 只读不写。Dev AI 如需补充技术细节,写在 impact.md 的「技术备注」段落中,不要直接修改 task.md。
|
||||
@@ -1 +1,5 @@
|
||||
# testing
|
||||
# QA AI 提示词库
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| [bug-report.md](bug-report.md) | 测试反馈 / Bug 报告模板与格式规范 |
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
# QA AI Bug 报告模板
|
||||
|
||||
以下模板用于 QA AI 在 `review/{task_id}/feedback/round{round}.md` 中提交测试反馈。
|
||||
|
||||
---
|
||||
|
||||
## 模板
|
||||
|
||||
```markdown
|
||||
# {TASK_ID} - 第 {N} 轮测试反馈
|
||||
|
||||
## 基本信息
|
||||
- 测试时间: YYYY-MM-DD
|
||||
- 测试项目: P01_errlens_app / P02_errlens_training / P03_errlens_web
|
||||
- 测试环境: Node 20.x / Python 3.10
|
||||
|
||||
## 测试结果概览
|
||||
| 指标 | 数值 |
|
||||
|------|------|
|
||||
| 测试用例总数 | N |
|
||||
| 通过 | N |
|
||||
| 失败 | N |
|
||||
| 跳过 | N |
|
||||
| 代码覆盖率 | XX% |
|
||||
|
||||
## 失败用例清单
|
||||
|
||||
### Bug #1: {简短标题}
|
||||
- **严重程度**: BLOCKER / HIGH / MEDIUM / LOW
|
||||
- **涉及文件**: `projects/...`(完整路径)
|
||||
- **测试场景**: 用户登录时输入正确密码
|
||||
- **预期结果**: 返回 200 和 JWT Token
|
||||
- **实际结果**: 返回 500 Internal Server Error
|
||||
- **复现步骤**:
|
||||
1. POST /api/auth/login
|
||||
2. body: {"email": "test@example.com", "password": "correct"}
|
||||
- **建议修复**: 检查 auth.service.ts 第 42 行的异常处理
|
||||
|
||||
### Bug #2: ...
|
||||
(同上格式)
|
||||
|
||||
## 改进建议(非 Bug)
|
||||
- 建议 1: 登录接口缺少限流保护
|
||||
- 建议 2: 密码重置的邮件模板可以更友好
|
||||
|
||||
## 下一步
|
||||
- [ ] Dev AI 修复上述 Bug 后,QA AI 进行第 {N+1} 轮测试
|
||||
- [ ] 如第 3 轮仍未通过,升级给人类负责人裁决
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 严重程度定义
|
||||
|
||||
| 级别 | 含义 | 举例 |
|
||||
|------|------|------|
|
||||
| BLOCKER | 核心功能不可用,无法继续测试 | 登录接口直接崩溃、数据库连不上 |
|
||||
| HIGH | 功能逻辑错误,用户无法正常使用 | 登录成功但不返回 Token |
|
||||
| MEDIUM | 功能可用但与预期有偏差 | 返回的日期格式不对、错误码不对 |
|
||||
| LOW | 不影响功能的瑕疵 | 提示文案不友好、缺少空值校验 |
|
||||
|
||||
## 规则
|
||||
|
||||
1. **每轮反馈用新文件**:`round1.md` → `round2.md` → `round3.md`
|
||||
2. **最多 3 轮**:第 3 轮仍有 BLOCKER/HIGH Bug → 在报告中标注「建议人类负责人介入」
|
||||
3. **涉及文件必须用完整路径**:从仓库根目录开始,方便 Dev AI 定位
|
||||
4. **改进建议不要超过 3 条**:聚焦最重要的
|
||||
@@ -29,10 +29,13 @@
|
||||
- ✅ 评估变更影响 (`review/*/impact.md`)
|
||||
- ✅ 维护共享资源 (`shared/`)
|
||||
|
||||
**可读但不可写:**
|
||||
- 👁 任务描述 (`review/*/task.md`) —— 只读,不可修改
|
||||
- 👁 测试反馈 (`review/*/feedback/`) —— 只读,用于修 Bug
|
||||
|
||||
**禁止操作:**
|
||||
- ❌ 修改测试代码 (`projects/*/tests/`)
|
||||
- ❌ 修改测试报告 (`reports/`)
|
||||
- ❌ 提交测试反馈 (`review/*/feedback/`)
|
||||
|
||||
### QA AI (测试AI)
|
||||
**职责范围:**
|
||||
@@ -41,11 +44,14 @@
|
||||
- ✅ 补充验收标准 (`review/*/acceptance.md`)
|
||||
- ✅ 提交测试反馈 (`review/*/feedback/`)
|
||||
|
||||
**可读但不可写:**
|
||||
- 👁 任务描述 (`review/*/task.md`) —— 只读,了解测试目标
|
||||
|
||||
**禁止操作:**
|
||||
- ❌ 修改业务代码 (`projects/*/src/`)
|
||||
- ❌ 修改技术文档 (`projects/*/docs/`)
|
||||
- ❌ 修改共享资源 (`shared/`)
|
||||
- ❌ 修改任务描述和影响评估
|
||||
- ❌ 修改影响评估 (`review/*/impact.md`)
|
||||
|
||||
### 人类负责人
|
||||
**职责范围:**
|
||||
@@ -59,22 +65,14 @@
|
||||
## 工作流程
|
||||
|
||||
```
|
||||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||||
│ 需求分析 │ ──→ │ 开发实现 │ ──→ │ 影响评估 │
|
||||
│ (人类) │ │ (Dev AI) │ │ (Dev AI) │
|
||||
└─────────────┘ └─────────────┘ └─────────────┘
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||||
│ 验收标准 │ ──→ │ 测试设计 │ ──→ │ 测试执行 │
|
||||
│ (Dev AI) │ │ (QA AI) │ │ (QA AI) │
|
||||
└─────────────┘ └─────────────┘ └─────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────┐ ┌─────────────┐
|
||||
│ 反馈提交 │ ──→ │ 验收确认 │
|
||||
│ (QA AI) │ │ (人类) │
|
||||
└─────────────┘ └─────────────┘
|
||||
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
||||
│ 需求分析 │ ───→ │ 开发实现 │ ───→ │ 测试验证 │ ───→ │ 验收确认 │
|
||||
│ (人类) │ │ (Dev AI) │ │ (QA AI) │ │ (人类) │
|
||||
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
|
||||
↑ │
|
||||
│ Bug → 修复 │
|
||||
└──────────────────────┘
|
||||
(最多 2 轮)
|
||||
```
|
||||
|
||||
### 详细流程说明
|
||||
@@ -84,51 +82,62 @@
|
||||
- 输出: `review/{task_id}/task.md`
|
||||
|
||||
**2. 开发实现阶段**
|
||||
- Dev AI 根据任务描述编写代码
|
||||
- 输出: `projects/*/src/`, `projects/*/docs/`
|
||||
- Dev AI 读取任务描述,编写代码 + 文档
|
||||
- 同时输出验收标准和变更影响范围
|
||||
- 输出: `projects/*/src/`, `projects/*/docs/`, `review/{task_id}/impact.md`, `review/{task_id}/acceptance.md`
|
||||
|
||||
**3. 影响评估阶段**
|
||||
- Dev AI 分析变更影响范围
|
||||
- 输出: `review/{task_id}/impact.md`
|
||||
**3. 测试验证阶段**
|
||||
- QA AI 根据验收标准编写测试,执行测试,生成报告
|
||||
- 测试反馈写入 `review/{task_id}/feedback/round{round}.md`
|
||||
- 输出: `projects/*/tests/`, `reports/test-results/`, `review/{task_id}/feedback/`
|
||||
|
||||
**4. 验收标准定义**
|
||||
- Dev AI 定义验收标准
|
||||
- QA AI 可补充测试要点
|
||||
- 输出: `review/{task_id}/acceptance.md`
|
||||
### 缺陷修复循环
|
||||
|
||||
**5. 测试设计阶段**
|
||||
- QA AI 根据验收标准编写测试用例
|
||||
- 输出: `projects/*/tests/`
|
||||
| 规则 | 说明 |
|
||||
|------|------|
|
||||
| 最大轮次 | 3 轮(初始测试 + 最多 2 轮修复复查) |
|
||||
| 循环范围 | 测试失败 → Dev AI 修复 → QA AI 复查 |
|
||||
| 跳过项 | 修复轮次中 Dev AI **只修 Bug**,不重新写 acceptance/impact |
|
||||
| 触发升级 | 第 3 轮仍有 BLOCKER 或 HIGH 级别 Bug → 暂停流转,待人类裁决 |
|
||||
|
||||
**6. 测试执行阶段**
|
||||
- QA AI 执行测试并生成报告
|
||||
- 输出: `reports/test-results/`, `reports/quality-reports/`
|
||||
```
|
||||
Round 1: Dev 开发 → QA 测试 → 3 个 Bug
|
||||
Round 2: Dev 修复 → QA 复查 → 1 个 Bug(MEDIUM)
|
||||
Round 3: Dev 修复 → QA 复查 → 0 个 Bug ✅ → 提交人类验收
|
||||
```
|
||||
|
||||
**7. 反馈提交阶段**
|
||||
- QA AI 提交测试反馈
|
||||
- 输出: `review/{task_id}/feedback/round{round}.md`
|
||||
如果 Round 3 仍有 BLOCKER/HIGH:
|
||||
```
|
||||
Round 3: Dev 修复 → QA 复查 → 仍 1 个 HIGH → ⚠️ 升级给人类裁决
|
||||
```
|
||||
|
||||
**8. 验收确认阶段**
|
||||
- 人类负责人审核测试结果
|
||||
- 确认任务完成或返回修改
|
||||
**4. 验收确认阶段**
|
||||
- 人类审核测试报告,确认任务完成或驳回
|
||||
- 确认后任务状态更新为 DONE,移入 `review/archived/`
|
||||
|
||||
---
|
||||
|
||||
## 目录权限矩阵
|
||||
|
||||
> **图例**:`-` = 无权访问 `R` = 只读 `W` = 可写(含读) `RW` = 读写
|
||||
|
||||
| 目录路径 | Dev AI | QA AI | 人类 |
|
||||
|---------|--------|-------|------|
|
||||
| `.ai/` | ❌ | ❌ | ✅ |
|
||||
| `shared/` | ✅ | ❌ | ✅ |
|
||||
| `projects/*/src/` | ✅ | ❌ | ✅ |
|
||||
| `projects/*/tests/` | ❌ | ✅ | ✅ |
|
||||
| `projects/*/docs/` | ✅ | ❌ | ✅ |
|
||||
| `review/*/task.md` | ❌ | ❌ | ✅ |
|
||||
| `review/*/acceptance.md` | ✅ | ✅ | ✅ |
|
||||
| `review/*/impact.md` | ✅ | ❌ | ✅ |
|
||||
| `review/*/feedback/` | ❌ | ✅ | ✅ |
|
||||
| `reports/` | ❌ | ✅ | ✅ |
|
||||
| `.github/` | ❌ | ❌ | ✅ |
|
||||
| `.ai/` | `-` | `-` | `RW` |
|
||||
| `shared/` | `RW` | `-` | `RW` |
|
||||
| `projects/*/src/` | `RW` | `-` | `RW` |
|
||||
| `projects/*/tests/` | `-` | `RW` | `RW` |
|
||||
| `projects/*/docs/` | `RW` | `-` | `RW` |
|
||||
| `review/*/task.md` | `R` | `R` | `RW` |
|
||||
| `review/*/acceptance.md` | `RW` | `RW` | `RW` |
|
||||
| `review/*/impact.md` | `RW` | `-` | `RW` |
|
||||
| `review/*/feedback/` | `R` | `RW` | `RW` |
|
||||
| `reports/` | `-` | `RW` | `RW` |
|
||||
| `.github/` | `-` | `-` | `RW` |
|
||||
|
||||
> **解析优先级**:当同一条路径被多个规则匹配时,`forbidden > read_only > allowed`。禁止规则永远优先。
|
||||
>
|
||||
> **默认行为**:任何未出现在上表中的路径,默认禁止所有 AI 访问(等效于 `-`)。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -57,9 +57,9 @@ npm install
|
||||
### 3. 安装后端依赖
|
||||
|
||||
```bash
|
||||
cd server
|
||||
cd src/server
|
||||
pnpm install
|
||||
cd ..
|
||||
cd ../..
|
||||
```
|
||||
|
||||
### 4. 配置环境变量
|
||||
@@ -80,7 +80,7 @@ PROJECT_DOMAIN=
|
||||
API_BASE_URL=/api
|
||||
```
|
||||
|
||||
**后端环境变量 (`server/.env`)**:
|
||||
**后端环境变量 (`src/server/.env`)**:
|
||||
```bash
|
||||
# 服务端口
|
||||
PORT=3000
|
||||
@@ -120,7 +120,7 @@ pnpm dev:tt
|
||||
pnpm dev:server
|
||||
|
||||
# 或
|
||||
cd server
|
||||
cd src/server
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
@@ -166,7 +166,7 @@ pnpm validate
|
||||
### 开发环境
|
||||
|
||||
```bash
|
||||
cd server
|
||||
cd src/server
|
||||
|
||||
# 运行迁移
|
||||
pnpm drizzle-kit migrate
|
||||
@@ -187,7 +187,7 @@ P01_errlens_app/
|
||||
│ ├── lib/ # 工具库
|
||||
│ └── network.ts # API 封装
|
||||
│
|
||||
├── server/ # 后端源码 (NestJS)
|
||||
│ ├── server/ # 后端源码 (NestJS)
|
||||
│ └── src/
|
||||
│
|
||||
├── tests/ # 测试代码
|
||||
|
||||
@@ -82,25 +82,25 @@ P01_errlens_app/
|
||||
│ │
|
||||
│ └── network.ts # API 请求封装
|
||||
│
|
||||
├── server/ # 后端源码 (NestJS)
|
||||
│ ├── src/
|
||||
│ │ ├── app.module.ts # 根模块
|
||||
│ │ ├── app.controller.ts # 根控制器
|
||||
│ │ ├── app.service.ts # 根服务
|
||||
│ │ └── main.ts # 入口文件
|
||||
│ ├── server/ # 后端源码 (NestJS)
|
||||
│ │ ├── src/
|
||||
│ │ │ ├── app.module.ts # 根模块
|
||||
│ │ │ ├── app.controller.ts# 根控制器
|
||||
│ │ │ ├── app.service.ts # 根服务
|
||||
│ │ │ └── main.ts # 入口文件
|
||||
│ │ │
|
||||
│ │ ├── nest-cli.json
|
||||
│ │ ├── tsconfig.json
|
||||
│ │ └── package.json
|
||||
│ │
|
||||
│ ├── nest-cli.json
|
||||
│ ├── tsconfig.json
|
||||
│ └── package.json
|
||||
│
|
||||
├── config/ # 构建配置
|
||||
│ ├── index.ts # 通用配置
|
||||
│ ├── dev.ts # 开发环境配置
|
||||
│ └── prod.ts # 生产环境配置
|
||||
│
|
||||
├── types/ # 类型定义
|
||||
│ ├── global.d.ts
|
||||
│ └── lucide.d.ts
|
||||
│ ├── config/ # 构建配置
|
||||
│ │ ├── index.ts # 通用配置
|
||||
│ │ ├── dev.ts # 开发环境配置
|
||||
│ │ └── prod.ts # 生产环境配置
|
||||
│ │
|
||||
│ ├── types/ # 类型定义
|
||||
│ │ ├── global.d.ts
|
||||
│ │ └── lucide.d.ts
|
||||
│
|
||||
├── tests/ # 测试代码
|
||||
│ ├── unit/ # 单元测试
|
||||
@@ -160,7 +160,7 @@ P01_errlens_app/
|
||||
### 4. 后端模块
|
||||
|
||||
```
|
||||
server/src/
|
||||
src/server/src/
|
||||
├── controllers/ # 控制器
|
||||
├── services/ # 业务逻辑
|
||||
├── modules/ # NestJS 模块
|
||||
|
||||
Vendored
Vendored
@@ -24,6 +24,6 @@
|
||||
"@/*": ["./src/*"]
|
||||
}
|
||||
},
|
||||
"include": ["./src", "./types", "./config"],
|
||||
"include": ["./src"],
|
||||
"compileOnSave": false
|
||||
}
|
||||
|
||||
@@ -0,0 +1,184 @@
|
||||
# ErrLens 宪法 + 目录框架 整改报告
|
||||
|
||||
> 审核日期:2026-05-23
|
||||
> 审核范围:AGENTS.md、AI 配置文件、目录结构、提示词库、工作流
|
||||
> 审核标准:三文件一致性、路径覆盖率、语义完备性、工作流闭环
|
||||
|
||||
---
|
||||
|
||||
## 修改总览
|
||||
|
||||
| # | 硬伤 | 动作 | 修改文件数 |
|
||||
|---|------|------|----------|
|
||||
| 1 | 三文件对 Dev AI 操作 task.md 权限矛盾 | 统一语义,引入 R/W/RW 体系 | 3 |
|
||||
| 2 | coder.json 漏掉 AGENTS.md 中的职责 | 补全职责列表 | 1 |
|
||||
| 3 | `projects/*/src/` 不覆盖后端代码 | server/config/types 移入 src/ | 4 |
|
||||
| 4 | `.ai/prompts/` 完全空白 | 创建 3 份提示词 + 2 份索引 | 5 |
|
||||
| 5 | JSON 配置无语义定义 | 加 description + 优先级规则 | 3 |
|
||||
| 6 | Workflow 缺少循环分支 | 8 阶段→4 阶段 + retry 配置 | 2 |
|
||||
|
||||
---
|
||||
|
||||
## 详细变更
|
||||
|
||||
### 硬伤 1+2+5:权限体系统一
|
||||
|
||||
**发现问题**:`AGENTS.md`、`coder.json`、`tester.json` 对同一路径的权限有三种不同说法。
|
||||
|
||||
| 文件 | 原来对 `review/*/task.md` 的说法 |
|
||||
|------|------|
|
||||
| AGENTS.md 权限矩阵 | Dev AI = ❌(禁止) |
|
||||
| coder.json | `allowed_paths` 包含它(允许) |
|
||||
| workflow.json | Dev AI 的 input 是它(只读) |
|
||||
|
||||
**修改内容**:
|
||||
|
||||
| 文件 | 变更内容 |
|
||||
|------|---------|
|
||||
| `AGENTS.md` | ① 权限矩阵引入 `R`/`W`/`RW`/`-` 四态(替代 ✅/❌)② 角色描述增加「可读但不可写」段落 ③ 加图例、优先级声明、默认行为声明 |
|
||||
| `.ai/config/coder.json` | ① 引入 `description` 语义定义 ② `allowed_paths` 只放可写路径 ③ 新增 `read_only_paths` 放只读路径 ④ 补全 5 项职责(与 AGENTS.md 对齐) |
|
||||
| `.ai/config/tester.json` | 同上改造,QA AI 的 `task.md` 从 forbidden 移到 `read_only_paths` |
|
||||
|
||||
**修改后的关键权限交叉点**:
|
||||
|
||||
| 路径 | Dev AI | QA AI | 含义 |
|
||||
|------|--------|-------|------|
|
||||
| `review/*/task.md` | 只读 | 只读 | 两人都能看任务,都不能改 |
|
||||
| `review/*/feedback/` | 只读 | 读写 | 只有 QA 能写反馈,Dev 只能看 |
|
||||
| `review/*/impact.md` | 读写 | 禁止 | 只有 Dev 能写影响评估 |
|
||||
| `projects/*/src/` | 读写 | 禁止 | 业务代码只有 Dev 能碰 |
|
||||
|
||||
**新增规则**:
|
||||
- 解析优先级:`forbidden > read_only > allowed`(禁止规则永远优先)
|
||||
- 默认行为:未出现在权限表中的路径,默认禁止所有 AI 访问
|
||||
|
||||
---
|
||||
|
||||
### 硬伤 3:后端代码纳入权限保护伞
|
||||
|
||||
**发现问题**:`projects/*/src/` glob 匹配不到 `server/`、`config/`、`types/`。
|
||||
|
||||
**执行操作**:
|
||||
|
||||
| 操作 | 详情 |
|
||||
|------|------|
|
||||
| 目录移动 | `server/` → `src/server/`、`config/` → `src/config/`、`types/` → `src/types/` |
|
||||
| 引用修复 | `tsconfig.json`(include 简化)、`ENVIRONMENT.md`(3 处 `cd server` → `cd src/server`)、`docs/02_架构设计.md`(2 处目录结构图 + 代码路径) |
|
||||
|
||||
**效果**:一条 `projects/*/src/` 权限规则覆盖全部业务代码——前端、NestJS 后端、Taro 构建配置、全局类型声明。
|
||||
|
||||
---
|
||||
|
||||
### 硬伤 4:.ai/prompts/ 从空壳到可用
|
||||
|
||||
**发现问题**:`coder.json` 和 `tester.json` 引用 `prompt_templates` 路径,但实际文件只含一行标题。
|
||||
|
||||
**新增文件**:
|
||||
|
||||
| 文件 | 用途 |
|
||||
|------|------|
|
||||
| `.ai/prompts/coding/code-style.md` | 代码风格:命名规范、目录组织(前端+NestJS+Python)、导入顺序、API 规范、禁止事项 |
|
||||
| `.ai/prompts/coding/doc-template.md` | impact.md 和 acceptance.md 的标准化模板 |
|
||||
| `.ai/prompts/testing/bug-report.md` | QA AI 反馈格式:严重程度定义(BLOCKER/HIGH/MEDIUM/LOW)、轮次规则、升级条件 |
|
||||
| `.ai/prompts/coding/README.md` | 重写为可用的文件索引 |
|
||||
| `.ai/prompts/testing/README.md` | 重写为可用的文件索引 |
|
||||
|
||||
---
|
||||
|
||||
### 硬伤 6:Workflow 从线性到闭环
|
||||
|
||||
**发现问题**:8 阶段纯线性流程,没有「测试失败 → 修复 → 再测」的建模。
|
||||
|
||||
**修改内容**:
|
||||
|
||||
| 文件 | 变更 |
|
||||
|------|------|
|
||||
| `.ai/config/workflow.json` | ① 8 阶段合并为 4 阶段(开发实现包含了 impact + acceptance)② 新增 `retry` 配置:`max_rounds=3`,`loop=["测试验证","开发实现"]` ③ 新增 `escalation` 规则 |
|
||||
| `AGENTS.md` | ① 流程图改版,增加循环箭头 ② 新增「缺陷修复循环」章节 ③ 详细的 round 示例 |
|
||||
|
||||
**修改后的流程**:
|
||||
|
||||
```
|
||||
需求分析(人类)
|
||||
↓
|
||||
开发实现(Dev AI)= 代码 + 文档 + impact + acceptance
|
||||
↓
|
||||
测试验证(QA AI)= 测试 + 报告 + feedback
|
||||
↓ ↑
|
||||
│ 有 Bug → │(最多 2 轮修复复查)
|
||||
↓ └── 第 3 轮仍有 Bug → 升级给人类裁决
|
||||
验收确认(人类)
|
||||
```
|
||||
|
||||
**retry 配置详情**:
|
||||
|
||||
```json
|
||||
{
|
||||
"retry": {
|
||||
"max_rounds": 3,
|
||||
"loop": ["测试验证", "开发实现"],
|
||||
"escalation": {
|
||||
"trigger": "第 3 轮测试仍有 BLOCKER 或 HIGH 级别 Bug",
|
||||
"action": "暂停任务流转,等待人类负责人裁决"
|
||||
},
|
||||
"skip_acceptance_on_retry": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 宪法健康状态
|
||||
|
||||
| 维度 | 改前 | 改后 |
|
||||
|------|------|------|
|
||||
| 权限一致性(三文件对齐) | ❌ 矛盾 | ✅ 统一 |
|
||||
| 权限粒度(读/写分离) | ❌ 只有全或无 | ✅ R/W/RW 三态 |
|
||||
| JSON 可读性(有语义定义) | ❌ 无解释 | ✅ 有 description |
|
||||
| 路径覆盖率(src/ 覆盖全部业务代码) | ❌ 漏掉后端 | ✅ 全覆盖 |
|
||||
| 提示词库 | ❌ 空壳 | ✅ 3 份可用 |
|
||||
| 工作流建模(含循环) | ❌ 纯线性 | ✅ 含 retry + escalation |
|
||||
| 默认行为(路径不在表中) | ❌ 未定义 | ✅ 默认禁止 |
|
||||
| 优先级(规则冲突时) | ❌ 未定义 | ✅ forbidden 优先 |
|
||||
|
||||
---
|
||||
|
||||
## 仍待处理的遗留事项
|
||||
|
||||
| 事项 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| P01 文档内容 | ⚠️ 未改 | 需求/架构/接口文档内容仍是"代码检测",后续需重写为"错题本" |
|
||||
| shared/ 数据协议层 | ⚠️ 仍是空白 | 需要建 `shared/schemas/` 定义跨项目数据模型 |
|
||||
| shared/ 模板文件 | ⚠️ 缺少 | `shared/templates/` 中没有 task.md 模板 |
|
||||
| CI/CD 流水线 | ⚠️ 空目录 | `.github/workflows/` 只有 README 占位 |
|
||||
| Coze 扣子实际能力验证 | ❓ 未知 | 能否操作 Git、能否执行测试——决定 QA AI 验收标准如何定 |
|
||||
|
||||
---
|
||||
|
||||
## 涉及文件清单
|
||||
|
||||
### 修改的文件(11 个)
|
||||
1. `AGENTS.md`
|
||||
2. `.ai/config/coder.json`
|
||||
3. `.ai/config/tester.json`
|
||||
4. `.ai/config/workflow.json`
|
||||
5. `.ai/prompts/coding/README.md`
|
||||
6. `.ai/prompts/testing/README.md`
|
||||
7. `projects/P01_errlens_app/tsconfig.json`
|
||||
8. `projects/P01_errlens_app/ENVIRONMENT.md`
|
||||
9. `projects/P01_errlens_app/docs/02_架构设计.md`
|
||||
|
||||
### 新增的文件(5 个)
|
||||
10. `.ai/prompts/coding/code-style.md`
|
||||
11. `.ai/prompts/coding/doc-template.md`
|
||||
12. `.ai/prompts/testing/bug-report.md`
|
||||
|
||||
### 移动的目录(3 个)
|
||||
- `projects/P01_errlens_app/server/` → `projects/P01_errlens_app/src/server/`
|
||||
- `projects/P01_errlens_app/config/` → `projects/P01_errlens_app/src/config/`
|
||||
- `projects/P01_errlens_app/types/` → `projects/P01_errlens_app/src/types/`
|
||||
|
||||
---
|
||||
|
||||
**报告生成时间**:2026-05-23
|
||||
**审核执行者**:Dev AI (Trae)
|
||||
Reference in New Issue
Block a user