feat(backend): Phase 0 项目骨架完成 — 后端/前端/数据库/Docker
- 后端:FastAPI + SQLAlchemy + Alembic,7 张核心表迁移成功 - 前端:Next.js 16 + TailwindCSS 4 + 三端布局(投资人/创始人/Admin) - 数据库:PostgreSQL 16,7 张核心实体表(tenants/users/companies/monthly_reports/health_scores/risk_events/audit_logs) - Docker:docker-compose.yml + 前后端 Dockerfile - 测试:健康检查 4 个测试全部 GREEN - 文档:README/run.md/AGENTS.md/docs 体系完整
This commit is contained in:
@@ -0,0 +1,244 @@
|
||||
# 应用构建方法论 v3.0(融合 Superpowers)
|
||||
|
||||
> 基于 v2.5 + [obra/superpowers](https://github.com/obra/superpowers) 流程纪律,针对 AIPortPilot 项目优化。
|
||||
> 核心理念:**结构化 > 自由发挥 / 快照 > 覆盖 / 演进 > 重写 / 先想再写 / 先测再码**
|
||||
|
||||
---
|
||||
|
||||
## 一、七步开发流程(强制执行)
|
||||
|
||||
每一步都是**必须执行的工作流**,不是建议。Agent 在任何任务前先检查当前处于哪一步。
|
||||
|
||||
### Step 1:Brainstorming(头脑风暴)
|
||||
|
||||
**触发**:用户提出新功能/新模块需求时
|
||||
**动作**:
|
||||
- 不急着写代码,先苏格拉底式提问
|
||||
- 探索替代方案,权衡取舍
|
||||
- 分段展示设计,每段短到用户能读完就消化
|
||||
- 产出:`docs/1-prd.md`(产品设计文档)
|
||||
**完成标志**:用户对 PRD 签字确认
|
||||
|
||||
### Step 2:Design Document(设计文档)
|
||||
|
||||
**触发**:PRD 签字后
|
||||
**动作**:
|
||||
- 技术架构设计(技术栈、数据模型、API 设计、UI/UX 方案)
|
||||
- 产出:`docs/1-prd.md` 中的技术设计章节
|
||||
**完成标志**:用户对技术方案签字确认
|
||||
|
||||
### Step 3:Writing Plans(任务拆解)
|
||||
|
||||
**触发**:设计批准后
|
||||
**动作**:
|
||||
- 将工作拆成 **2-5 分钟** 的小任务
|
||||
- 每个任务有:精确文件路径、完整代码描述、验证步骤
|
||||
- 任务之间无循环依赖,可并行标注
|
||||
- 产出:`docs/2-task.md`(任务清单)
|
||||
**完成标志**:用户对任务清单签字确认
|
||||
|
||||
### Step 4:Feature Branch(特性分支)
|
||||
|
||||
**触发**:任务清单批准后
|
||||
**动作**:
|
||||
- `git checkout -b feature/{module-name}`
|
||||
- 确保干净测试基线
|
||||
**完成标志**:分支创建成功
|
||||
|
||||
### Step 5:TDD Implementation(测试驱动实现)
|
||||
|
||||
**触发**:分支创建后
|
||||
**动作**:
|
||||
- **RED**:先写失败测试,运行确认失败
|
||||
- **GREEN**:写最小代码让测试通过
|
||||
- **REFACTOR**:重构,保持测试绿色
|
||||
- **COMMIT**:每个 RED-GREEN 循环提交一次
|
||||
- **禁止**:先写代码后补测试
|
||||
**完成标志**:所有任务测试通过
|
||||
|
||||
### Step 6:Code Review(代码审查)
|
||||
|
||||
**触发**:每个任务完成后
|
||||
**动作**:
|
||||
- 对照计划检查规格符合度
|
||||
- 检查代码质量(命名、结构、安全、性能)
|
||||
- 严重问题阻断进度,必须修复后继续
|
||||
**完成标志**:审查通过
|
||||
|
||||
### Step 7:Finishing Branch(收尾合并)
|
||||
|
||||
**触发**:所有任务完成且审查通过
|
||||
**动作**:
|
||||
- 运行全量测试
|
||||
- 提供选项:合并到 master / 创建 PR / 保留分支 / 丢弃
|
||||
- 合并后清理分支
|
||||
**完成标志**:代码进入 master
|
||||
|
||||
---
|
||||
|
||||
## 二、三原则
|
||||
|
||||
1. **结构化 > 自由发挥**:先文档后代码,先设计后实现
|
||||
2. **快照 > 覆盖**:用 `*_snapshot` JSON 保存历史,不删旧数据
|
||||
3. **演进 > 重写**:版本号 + `is_current` 指针,增量演进
|
||||
|
||||
---
|
||||
|
||||
## 三、文档骨架(必有)
|
||||
|
||||
| 文件 | 内容 | 何时写 |
|
||||
|---|---|---|
|
||||
| `README.md` | 项目介绍、技术栈、快速启动 | Step 2 |
|
||||
| `run.md` | 10 板块运维手册 | Step 2 |
|
||||
| `AGENTS.md` | Agent 协作规则 | Step 2 |
|
||||
| `docs/0-req.md` | 需求文档(从方案文档提炼) | Step 1 |
|
||||
| `docs/1-prd.md` | PRD + 技术设计 | Step 1-2 |
|
||||
| `docs/2-task.md` | 任务清单(2-5 min 粒度) | Step 3 |
|
||||
| `docs/daily/` | 日报 | 每日 |
|
||||
|
||||
### run.md 十板块
|
||||
|
||||
技术栈 / 首次准备 / 基础设施启停 / 应用启停 / DB 命令 / 排错 / 端口表 / env / 部署备份 / FAQ
|
||||
|
||||
### 铁律
|
||||
|
||||
- 命令可复制粘贴
|
||||
- 标注 `[Docker]` / `[Native]`
|
||||
- 危险操作标红
|
||||
- 版本号写死
|
||||
- 过时即同步
|
||||
|
||||
---
|
||||
|
||||
## 四、数据 8 铁律
|
||||
|
||||
1. 快照隔离历史(`*_snapshot` JSON)
|
||||
2. 版本号 + `is_current` 唯一指针,不删旧
|
||||
3. 内部状态机与用户可见状态分离
|
||||
4. 租户隔离走 `session.tenant_id`,不信任请求体
|
||||
5. 配置粒度对齐"谁应该决定"(全局/租户/用户)
|
||||
6. 字段演进:nullable + 默认值;枚举用字符串;时间戳 `*_at`
|
||||
7. 审计字段:`created_by/updated_by/deleted_by + *_at`;关键操作落 `audit_logs` ≥ 6 月
|
||||
8. UTC 存储;金额用 decimal/整数;禁止 float
|
||||
|
||||
---
|
||||
|
||||
## 五、安全与权限
|
||||
|
||||
- 密钥进 KMS/Vault,**绝不进 Git**,仅 commit `.env.example`
|
||||
- 后端必须独立校验权限,前端隐藏 ≠ 后端放权
|
||||
- PII 全链路脱敏(手机/身份证/邮箱),日志中用 `138****1234`
|
||||
- 注入防御:SQL 参数化 / 命令 `shell=False` / XSS 自动转义 + CSP / CSRF 走 SameSite
|
||||
- 限流熔断:登录 5次/min/IP,写接口按用户限流,429 带 `Retry-After`
|
||||
- JWT 短 TTL(≤2h)+ refresh;Cookie 必 HttpOnly+Secure+SameSite
|
||||
- **本项目特殊**:投后数据高度敏感,优先私有化部署,数据不出域
|
||||
|
||||
---
|
||||
|
||||
## 六、API 设计
|
||||
|
||||
- REST 资源命名(名词复数 + 层级),版本进 URL 不进 query
|
||||
- HTTP 状态码语义化,禁全 200 塞 error
|
||||
- 统一响应壳:`{code, message, data, trace_id, timestamp}`
|
||||
- 分页 `?page&page_size&sort&filter[k]=v`,大数据集用 keyset 游标
|
||||
- 写接口接受 `Idempotency-Key`,订单/支付**必须**
|
||||
- `trace_id` 全链路(网关→后端→DB→前端 `X-Trace-Id`)
|
||||
- OpenAPI 自动生成进 Git,废弃接口 `Deprecation` + `Sunset`
|
||||
|
||||
---
|
||||
|
||||
## 七、AI / 智能集成
|
||||
|
||||
- 接口抽象,业务面对自家"智能服务接口"
|
||||
- 多源容灾 + 兜底降级(规则/缓存/默认),不拖垮主流程
|
||||
- 强制 Structured Output / JSON Schema,禁编造
|
||||
- 决策证据化:输出 `score / confidence / evidence / concerns / fallback_used`
|
||||
- Prompt 进 Git,不只在 DB;可 diff、可回滚
|
||||
- 单次/用户/租户分级成本预算;缓存优先;慢路径异步化
|
||||
- 用户输入与系统 prompt **分离 role**,加分隔符 `<<<USER_INPUT>>>`,防注入
|
||||
- LLM 输出代码绝不直接 exec/eval,必经语法检查 + 沙箱
|
||||
- PII 进 LLM 前脱敏,响应再回填
|
||||
- `confidence < 0.6` 显式提示人工核对
|
||||
|
||||
---
|
||||
|
||||
## 八、客户端 + 多端 UIUX
|
||||
|
||||
### 三端角色化
|
||||
|
||||
- **投资人端(B 端专业)**:主色 `gray-900`,左 Sidebar(`w-52 sticky`)+ 内容 `bg-[#f8f9fb]`,信息密集
|
||||
- **创始人端(C 端温暖)**:主色 `indigo-600`,顶部 sticky Header(`h-14 bg-white/95 backdrop-blur`),渐变背景
|
||||
- **Admin 端(警示)**:Header `bg-slate-950` + 主色 `amber-400`,内容 `bg-slate-100`,必带 ADMIN 徽章
|
||||
|
||||
### 共享 Token
|
||||
|
||||
- Geist 字体 / oklch 色彩 / `--radius: 0.625rem`,**禁硬编码 hex**
|
||||
- shadcn + @base-ui + lucide + sonner + recharts,**禁多 UI 库混用**
|
||||
|
||||
### Layout 统一
|
||||
|
||||
- 容器 `container mx-auto max-w-7xl px-4`,Header 全应用 `h-14`
|
||||
|
||||
### 交互统一
|
||||
|
||||
- `<LoadingSpinner>` / `<EmptyState>` / sonner toast / `<Dialog>` 二次确认
|
||||
- 状态色三件套:`emerald(success) / amber(warning) / rose(destructive)`
|
||||
|
||||
### 响应式
|
||||
|
||||
- sm/md/lg/xl/2xl 五断点
|
||||
- Sidebar < md 折叠为抽屉/下拉,不丢功能入口
|
||||
|
||||
### a11y
|
||||
|
||||
- 键盘可达 / 对比度 ≥ 4.5:1 / 语义化标签 / aria-label,**禁 `<div onClick>`**
|
||||
|
||||
### 其他
|
||||
|
||||
- i18n:文案进 JSON,用 `Intl.*` 格式化
|
||||
- 报告页强制 `@media print`
|
||||
- 流式输出 RAF 批量刷新,禁每 token 触发 React 重渲染
|
||||
- **禁 `alert()/confirm()`、禁多 UI 库、禁硬编码主色 hex、禁三端共用 Header**
|
||||
|
||||
---
|
||||
|
||||
## 九、五防一兜底
|
||||
|
||||
1. 防异步穿越(AbortController / 引用保存)
|
||||
2. 防外部单点(超时+重试+熔断+多源)
|
||||
3. 防资源缺失(启动校验字体/翻译/配置)
|
||||
4. 防 API 弃用(季度内替换 + 灰度升级)
|
||||
5. 防数据丢失(事务 / 幂等键 / 持久化队列 / beforeunload)
|
||||
6. 一兜底:最差体验是"功能受限可用",不是白屏
|
||||
|
||||
---
|
||||
|
||||
## 十、部署运维
|
||||
|
||||
- 部署脚本"只清自己",禁 `pm2 delete all`、禁 `redis-cli FLUSHALL`、禁 `rm -rf /`
|
||||
- 跨子域 cookie 名独立 + `domain=.example.com`
|
||||
- DB migrate 走 CI/CD 自动应用
|
||||
- 备份:每天 2 次 + 滚动 7 天 + 双副本(本机 + 异地)+ 每月恢复演练
|
||||
- 监控 4 金指标:Latency / Traffic / Errors / Saturation
|
||||
- 灰度 1% → 10% → 50% → 100%,每档观察 ≥ 30 分钟
|
||||
- 回滚 SOP 必备,回滚比修复快
|
||||
|
||||
---
|
||||
|
||||
## 十一、测试纪律
|
||||
|
||||
- **70/20/10**:单元/集成/E2E
|
||||
- **TDD 强制**:RED-GREEN-REFACTOR,先写失败测试再写代码
|
||||
- 关键路径必覆盖(登录/支付/导出/权限/AI 主流程)
|
||||
- 集成测试用 testcontainers 跑真实 DB,禁 mock DB
|
||||
- 修 bug 必先写复现测试,禁删测试、禁 `@skip/it.only` 进 PR
|
||||
|
||||
---
|
||||
|
||||
## 十二、协作纪律
|
||||
|
||||
- 每步完成后更新 `docs/2-task.md` 状态
|
||||
- 日报写 `docs/daily/YYYY-MM-DD.md`
|
||||
- 重大决策记 `docs/decisions/`(ADR 格式)
|
||||
- 代码审查问题按严重度分级:Critical(阻断)/ Major(必须修)/ Minor(建议)
|
||||
- 提交信息格式:`type(scope): description`,type ∈ feat/fix/refactor/test/docs/chore
|
||||
Reference in New Issue
Block a user