- backend: FastAPI 应用工厂、统一错误信封、JWT、短信登录、工作区/成员/邀请、幂等中间件 - alembic 0001: workspace/member/invitation/audit_log/app_user + RLS 策略 + 双角色 GRANT - tests: 认证/工作区/租户隔离/幂等 四组用例(尚未在本机执行) - web: React18+Vite 骨架(登录、工作区、邀请落地页) - android: Compose 骨架(登录、工作区列表) - 2.Design: PRODUCT-PLAN / ROADMAP-M0-M1 / NAMING / DEVELOPMENT
70 lines
2.6 KiB
Markdown
70 lines
2.6 KiB
Markdown
# AGENTS.md — 达道Task 仓库工作约定
|
||
|
||
> 给所有在本仓库工作的 AI / 人类协作者的强制约定。**改动前先读完此文件。**
|
||
|
||
## 1. 项目是什么
|
||
|
||
达道Task:任务管理(todo)→ 工单协同 → 知识库,三件事一条流,LLM 贯通。
|
||
Web(React)+ 安卓(Compose)+ 后端(FastAPI),SaaS 多租户形态。
|
||
|
||
- 方案:[`2.Design/PRODUCT-PLAN.md`](2.Design/PRODUCT-PLAN.md)
|
||
- 实施清单:[`2.Design/ROADMAP-M0-M1.md`](2.Design/ROADMAP-M0-M1.md)
|
||
- 命名:[`2.Design/NAMING.md`](2.Design/NAMING.md)
|
||
|
||
## 2. 铁律(违反即回滚)
|
||
|
||
1. **改完必须提交并 push**。本地有未推送提交视为未完成。
|
||
2. **生产不得领先仓库**。部署的代码必须是仓库 HEAD,不允许"服务器上手动改一下"。
|
||
3. **前端产物只能由仓库 HEAD 构建**,不允许本地构建后上传 dist。
|
||
4. **部署后必须校验 build 标记**:`curl /version` 返回的 commit 必须等于 `git rev-parse --short HEAD`。
|
||
5. **多租户安全不讨价还价**:任何新增租户表,必须同时提交 ① `workspace_id NOT NULL` 列 ② RLS 策略 ③ 跨租户隔离测试。三者缺一,PR 直接拒。
|
||
|
||
## 3. 技术栈(不得擅自更换)
|
||
|
||
| 层 | 选型 |
|
||
|---|---|
|
||
| 后端 | FastAPI + SQLAlchemy 2.0 async + PostgreSQL 16(RLS + pgvector)+ Redis |
|
||
| 迁移 | Alembic(autogenerate 后**必须人工复核**,不准盲上) |
|
||
| Web | React 18 + TypeScript + Vite + Tailwind |
|
||
| 安卓 | Kotlin + Jetpack Compose |
|
||
| LLM | OpenAI 兼容网关;平台兜底 DeepSeek,用户可配 |
|
||
|
||
## 4. 目录
|
||
|
||
```
|
||
backend/ FastAPI 服务(app/ 业务,tests/ 测试,alembic/ 迁移)
|
||
web/ React 前端
|
||
android/ Kotlin 安卓端
|
||
deploy/ 部署脚本与 compose
|
||
2.Design/ 设计文档(大写连字符命名,如 API.md、DEPLOY.md)
|
||
```
|
||
|
||
## 5. 提交规范
|
||
|
||
```
|
||
feat(task): 支持批量改状态
|
||
fix(auth): 刷新令牌未轮换
|
||
docs(plan): 补充工单状态机
|
||
```
|
||
|
||
- 一个提交只做一件事;格式化与业务分开提交。
|
||
- `main` 受保护,功能走 `feat/*` 分支。
|
||
|
||
## 6. 本地开发
|
||
|
||
```bash
|
||
# 依赖
|
||
cd deploy && docker compose -f docker-compose.dev.yml up -d
|
||
|
||
cd backend && pip install -r requirements.txt
|
||
pytest # 必须全绿才能提交
|
||
ruff check . && ruff format --check .
|
||
```
|
||
|
||
## 7. 禁区
|
||
|
||
- 不准把密钥、token、真实用户手机号写进仓库或测试夹具。
|
||
- 不准在日志里打印 `password` / `token` / `api_key`(中间件已做脱敏,别绕开它)。
|
||
- 不准跳过租户隔离测试,哪怕"这次只是改文档"。
|
||
- 不准直接读写 `.dsh/memory-vault`(记忆库只能通过工具/API 写入)。
|