Files
makemd/.trae/rules/project-specific-rules.md
wurenzhi 0dac26d781 feat: 添加MSW模拟服务和数据源集成
refactor: 重构页面组件移除冗余Layout组件

feat: 实现WebSocket和事件总线系统

feat: 添加队列和调度系统

docs: 更新架构文档和服务映射

style: 清理重复接口定义使用数据源

chore: 更新依赖项配置

feat: 添加运行时系统和领域引导

ci: 配置ESLint边界检查规则

build: 添加Redis和WebSocket依赖

test: 添加MSW浏览器环境入口

perf: 优化数据获取逻辑使用统一数据源

fix: 修复类型定义和状态管理问题
2026-03-19 01:39:34 +08:00

419 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 项目特定规则 (Project-Specific Rules)
> 本文件包含 Crawlful Hub 项目的**硬性约束和配置**,所有代码必须遵守。
>
> 📚 **详细文档请查阅**: `docs/` 目录
> - 业务蓝图: `docs/00_Business/`
> - 架构设计: `docs/01_Architecture/`
> - AI规范: `docs/05_AI/`
> - 治理规范: `docs/00_Business/Governance_Standards.md`
---
## 1. 数据与存储约束
### 1.1 表命名规范
- **表前缀**: 所有表必须以 `cf_` 开头(如 `cf_product`, `cf_order`
- **金额字段**: 必须使用 `decimal(10,2)`,禁止 float/double
- **物理属性单位**: 长度(cm), 重量(kg), 体积(m³)
### 1.2 数据完整性
- **唯一约束**: `cf_product` 表必须保证 (platform, productId) 唯一
- **JSON 处理**: images/skus/attributes 入库前序列化,出库解析
- **幂等性**: 所有建表语句必须使用 `db.schema.hasTable` 前置校验
---
## 2. 核心业务规则(硬性约束)
### 2.1 决策流程门禁
```
SUGGESTED -> PENDING_REVIEW -> EXECUTED/REJECTED
```
- **严禁**: Agent 直接修改核心业务数据(调价、退款、下单)
- **必须**: 人工在 Console 端确认后方可执行
### 2.2 计价与利润红线
- **计价收敛**: 所有价格计算必须走 `PricingService`
- **利润红线**:
- B2B 利润率 < 15% → **禁止报价**
- B2C 利润率 < 20% → **触发风控预警**
- **禁止**: Controller 或前端硬编码价格公式
### 2.3 订单限制
- **设备标记**: 所有设备必须标记 `Commercial Use Only`, `Non-Returnable`
- **地址限制**: 严禁处理住宅地址订单轻B模式
---
## 3. 插件技术规范
### 3.1 消息类型声明
- **统一入口**: `src/shared/types/messaging.ts`
- **新增流程**:
1. 在 messaging.ts 声明类型
2. background 与调用方同时适配
3. 补充最小冒烟测试
---
## 4. 安全与权限
### 4.1 RBAC 模型
- **预设角色**:
- `ADMIN` - 全权
- `MANAGER` - 运营主管
- `OPERATOR` - 运营专员
- `FINANCE` - 财务主管
- `SOURCING` - 采购专家
- `LOGISTICS` - 物流专家
- `ANALYST` - 数据分析师
### 4.2 权限校验
- **强制**: 路由层使用 `authorize(permission)` 中间件
- **禁止**: Controller 中硬编码 `role === 'ADMIN'`
- **数据隔离**: 非 ADMIN 用户查询必须根据 `parentId` 层级过滤
---
## 5. 架构与性能边界
### 5.1 基础设施
- **数据库**: 阿里云 RDS (MySQL 8.0)
- **禁止**: 代码中执行 `DROP/TRUNCATE`
- **要求**: 复杂查询必须通过 `EXPLAIN` 校验索引
- **缓存**: 本地 Redis (6379 端口)
- **队列**: 所有异步任务通过 BullMQ 走本地 Redis
### 5.2 单机资源保护
- **内存**: Node.js 进程限制 `--max-old-space-size=4096`
- **图片处理**: Sharp 必须开启 `sequentialRead`
- **并发控制**:
- API 速率限制基于本地 Redis
- Worker 并发数 ≤ 10
### 5.3 边界隔离
- **禁止**: 跨 Domain 直接操作数据库模型
- **必须**: 通过 `Service` 暴露接口或 `EventBus` 异步通信
---
## 6. TOB 与套利专项约束
### 6.1 套利计算口径
- **禁止**: 仅用 "售价 - 采购价" 判断套利
- **必须**: 使用净利公式(含平台费/物流/税费/汇率/售后/广告摊销)
### 6.2 利润红线强制执行
- B2B `<15%`**禁止放行**
- B2C `<20%`**必须进入风控审核**
### 6.3 无 API 平台约束
- **必须**: 走 `No-API Bridge` + `PENDING_REVIEW`
- **禁止**: 全自动直发
### 6.4 Win 节点隔离
- **一店一上下文**: profileDir/proxy/fingerprintPolicy
- **同店任务**: 严格串行执行
### 6.5 企业交付底线
上线前必须具备:
- ✅ 租户隔离
- ✅ 审计追责
- ✅ 配额治理
- ✅ SLA 指标可观测
---
## 7. AI 协作协议
### 7.1 角色定位
- **Brain**: 全局调度与决策
- **Agent (AI-1/2/3)**: 原子任务包闭环开发
### 7.2 自省要求
Agent 必须在以下阶段上报"自我问题"
1. 对话开始时
2. 执行过程中
3. 交付前
### 7.3 执行原则
- **一次性分发**: 每轮下发完整任务包P0/P1/P2
- **连续执行**: 任务包内连续执行到"完成或明确阻塞"
- **文件占用锁**: 同目录协作先声明归属,"谁领取谁编辑"
- **冲突处理**: 后写入方必须先 Read 最新内容,增量合并
### 7.4 任务包领取机制(强制执行)
**核心原则**: 一次领取完整任务包,避免碎片化等待
#### 任务包定义
```
任务包 = 同一闭环的连续任务 + 依赖链完整 + 文件归属明确
```
#### 领取规则
1. **优先领取任务包**: 必须优先领取同一闭环的完整任务链
2. **最小粒度**: 单次领取不少于 2 个相关任务
3. **依赖自包含**: 领取的任务包内依赖必须闭环
#### 任务包类型
| 包类型 | 包含任务 | 示例 |
|--------|----------|------|
| 🔗 闭环包 | 同一业务闭环的全部任务 | BE-TOB001 + BE-TOB002 + BE-TOB003 |
| 📦 模块包 | 同一模块的连续任务 | FE-AD001 + FE-AD002 + FE-AD003 |
| 🔗 依赖链包 | 有依赖关系的任务链 | BE-P001 → BE-P002 → BE-P003 |
### 7.5 协作防撞车机制(强制执行)
#### 方案一:模块分区锁定
```
领取任务时,必须同时声明:
1. 占用的模块/闭环名称
2. 涉及的主要文件路径
3. 预计完成时间
```
#### 方案二:文件占用声明
在 Task_Overview.md 顶部维护 **🔒 当前占用区**
```markdown
## 🔒 当前任务占用状态
| Agent | 占用模块 | 涉及任务 | 主要文件 | 开始时间 | 状态 |
|-------|----------|----------|----------|----------|------|
| AI-Backend-1 | B2B贸易闭环 | BE-TOB001~003 | B2BTradeService.ts | 2025-03-18 10:00 | 🔒 进行中 |
```
#### 方案三:冲突检测流程
```
Step 1: 领取前检查 Task_Overview.md 的 🔒占用区
Step 2: 确认目标模块未被占用
Step 3: 声明占用并更新状态
Step 4: 执行任务
Step 5: 完成后释放占用
```
#### 撞车处理优先级
1. **先声明者优先**: 先在 Task_Overview.md 声明占用的 Agent 拥有优先权
2. **后到者避让**: 后到的 Agent 必须选择其他模块
3. **协商解决**: 如有争议,由 Brain 协调分配
### 7.6 任务包领取模板
领取任务时,必须在 Task_Overview.md 更新以下信息:
```markdown
### 🔒 当前占用声明
**Agent**: [你的标识,如 AI-Backend-1]
**领取时间**: [YYYY-MM-DD HH:MM]
**任务包**: [任务ID列表如 BE-TOB001, BE-TOB002, BE-TOB003]
**占用模块**: [模块名称,如 B2B贸易闭环]
**涉及文件**:
- server/src/services/B2BTradeService.ts
- server/src/models/B2B.ts
- server/src/api/routes/trade.ts
**预计完成**: [预计完成时间]
```
### 7.7 禁止行为
-**禁止**: 单独领取任务包内的部分任务
-**禁止**: 不声明占用直接开始开发
-**禁止**: 跨模块同时占用多个任务包
-**禁止**: 占用超过 24 小时未释放
---
## 8. 逻辑集中化原则(硬性约束)
### 8.1 核心原则
> **逻辑集中化 → 服务驱动**:所有业务逻辑必须集中在 Service 层,禁止分散在 Controller、前端或数据库操作中。
### 8.2 逻辑分散的表现(禁止行为)
-**Controller 中写业务逻辑**Controller 只负责请求/响应和权限校验
-**前端直接写业务规则**:复杂计算、权限判断、状态流转禁止在 React 组件中实现
-**数据库操作分散**:不同模块禁止直接调用数据库,必须通过 Service 层
-**脚本或工具处理逻辑**AI 任务或异步脚本必须通过 Service 层统一调用
### 8.3 逻辑分散的后果
1. **维护成本高**AI 或开发者需要理解多个模块才能做一件改动
2. **修改容易出错**:改动一处可能引起其他模块逻辑不一致
3. **难以快速迭代**:新功能闭环难以接入,因为逻辑散落在各处
4. **收费闭环风险**:分散逻辑导致支付、权限、账单、状态不一致,直接影响收益
5. **AI 维护困难**AI 无法一次性理解完整闭环,状态不一致,修改风险高
### 8.4 服务层职责(强制执行)
#### Controller 层职责
- 接收 HTTP 请求和参数验证
- 调用 Service 层处理业务逻辑
- 返回响应给前端
- 权限校验(通过 `authorize()` 中间件)
#### Service 层职责(核心)
- 业务逻辑编排和状态流转
- 多模块协同和数据一致性保证
- 事务管理和异常处理
- 调用 Repository 层或外部 API
#### Repository 层职责
- 数据库 CRUD 操作
- 数据模型映射
- 查询优化
### 8.5 状态管理统一
- **前端状态**:使用全局 Model 或状态管理库Umi Model、Redux 等)
- **后端状态**:统一使用 STATE_MACHINE 定义的状态机
- **状态流转**:所有状态更新必须通过 Service 层,禁止在 Controller 或前端直接修改
### 8.6 核心逻辑复用
- **公共函数**:权限、价格、库存、账单等逻辑必须封装为公共函数或工具库
- **服务接口**AI 只需调用 Service 接口,不直接处理业务逻辑
- **避免重复**:不同模块禁止重复实现相同逻辑
### 8.7 可视化业务流程
- **流程图**:为每个业务闭环绘制流程图,便于 AI 理解
- **状态机图**:使用 STATE_MACHINE 记录完整闭环
- **服务地图**:完善 SERVICE_MAP明确服务调用链
### 8.8 违反逻辑集中化原则的后果
- **代码审查不通过**:任何违反逻辑集中化原则的代码将被拒绝合并
- **AI 任务失败**AI 无法维护分散的逻辑,导致任务执行失败
- **生产环境风险**:分散逻辑导致数据不一致,直接影响系统稳定性
---
## 9. 追踪与日志
### 9.1 五元组必填
所有任务与日志必须携带:
```typescript
{
tenantId: string;
shopId: string;
taskId: string;
traceId: string;
businessType: 'TOC' | 'TOB';
}
```
### 9.2 状态机门禁
- 发布、审核、对账流程必须落入统一 FSM
- **禁止**: Controller 中硬编码流程分支
---
## 10. 代码质量门禁
### 10.1 命名规范
- **服务类**: 统一使用 `Service` 后缀
- **禁止**: `Manager`/`Helper` 等后缀
### 10.2 注释规范
- **必须**: 每个服务类包含完整 JSDoc
- **必须**: 明确标识任务ID和功能描述
### 10.3 部署标准
`completed` 的标志:
1. ✅ 数据库表已初始化
2. ✅ 核心逻辑已闭环
3. ✅ 通过 `GetDiagnostics` 校验
---
## 11. Mock数据规范AI上下文安全
### 11.1 Mock数据原则
**核心目标**: 实现"不污染代码、AI上下文安全"的Mock方案
#### ❌ 禁止做法
- **硬编码Mock数据**: 在业务组件中直接写死数据
```typescript
// 禁止!
const data = [{ id: 1, name: 'Mock商品' }]
```
- **if判断切换**: 在业务代码中通过if判断切换Mock/真实数据
```typescript
// 禁止!
if (isDev) return mockData
```
#### ✅ 正确做法
- **DataSource抽象层**: 通过数据源抽象层获取数据
```typescript
// 正确!
const data = await certificateDataSource.list()
```
- **环境变量控制**: 通过 `REACT_APP_USE_MOCK` 环境变量控制
- **目录隔离**: 所有Mock文件必须放在 `/mock` 目录
### 11.2 Mock文件规范
#### 目录结构
```
/dashboard/src
/mock ← 所有Mock相关
/data ← Mock数据定义
msw.ts ← MSW配置
browser.ts ← 浏览器入口
README.md ← Mock使用说明
/services ← DataSource抽象层
*DataSource.ts
```
#### 文件标记
所有Mock文件必须包含以下标记:
```typescript
/**
* [MOCK-XXX] 功能描述
* AI注意: 这是Mock实现不是真实业务逻辑
* 仅在USE_MOCK=true时启用
*/
// 或者
// [MOCK] 此文件为Mock数据AI请勿当作真实业务逻辑
```
### 11.3 AI识别规则
AI在分析代码时:
- ✅ **忽略** `/mock` 目录下所有文件
- ✅ **忽略** 包含 `[MOCK]` 标记的文件
- ✅ **忽略** `__MOCK__` 变量为真的代码路径
- ✅ **优先** 分析 `/services` 下的DataSource层
### 11.4 环境变量
| 变量名 | 开发环境 | 生产环境 | 说明 |
|--------|----------|----------|------|
| REACT_APP_USE_MOCK | `true` | `false` | 前端Mock开关 |
| USE_MOCK | `true` | `false` | 后端Mock开关 |
### 11.5 参考文档
- [Mock架构设计](../../docs/01_Architecture/Mock_Architecture.md)
- [前端DataSource实现](../../dashboard/src/services/certificateDataSource.ts)
---
## 快速参考
| 规则类别 | 关键约束 | 违反后果 |
|---------|---------|---------|
| 数据存储 | 表前缀 `cf_`, 金额 `decimal(10,2)` | 数据不一致 |
| 业务决策 | 必须 `PENDING_REVIEW` | 直接修改生产数据 |
| 利润红线 | B2B<15%禁止, B2C<20%预警 | 财务风险 |
| 安全权限 | 使用 `authorize()` 中间件 | 权限漏洞 |
| 性能边界 | Worker并发≤10, 内存≤4GB | 系统崩溃 |
| 追踪日志 | 五元组必填 | 无法追溯 |
| **逻辑集中化** | **所有业务逻辑必须在Service层** | **AI维护困难数据不一致** |
| **任务领取** | **优先领任务包最小2个任务** | **碎片化等待** |
| **协作防撞** | **必须声明占用,先声明优先** | **重复开发** |
| **Mock规范** | **Mock数据必须隔离禁止硬编码** | **AI上下文污染维护困难** |
---
*本文件仅包含硬性约束,详细规范请查阅 `docs/` 目录。*