59 lines
6.5 KiB
Markdown
59 lines
6.5 KiB
Markdown
# Cyrene v2 开发铁律(AGENTS.md)
|
||
|
||
> 本文件是**项目级开发铁律**,由运行环境在**每次工作会话时自动注入**。即使发生上下文压缩/丢失,以下约束仍会强制生效。**必须遵守**,违反即偏离。
|
||
|
||
## 1. 先读设计,再写代码
|
||
- 动任何代码**前**:先读 `DevDocs/开发时间线.md`(当前里程碑 + §3 功能状态清单),确定这一步属于哪个里程碑/功能。
|
||
- 具体功能实现:先读对应 `DevDocs/design/*.md`,**按其规格实现,不得自行发挥**(design/01~13 是权威设计)。
|
||
|
||
## 2. 按里程碑推进,不跳步、不漂移
|
||
- 严格按 **M0 → M12** 顺序。每个功能的依赖与归属见时间线 §2/§3。
|
||
- 不得「想到什么做什么」。**新需求/新想法:先写入设计或时间线清单,再开发**,不脱离清单。
|
||
- 上下文压缩后:**先读 `DevDocs/工作小结.md`** 恢复锚点,再继续,**不得凭印象跳走**。
|
||
|
||
## 3. 每阶段审查并勾选
|
||
- 阶段完成:后端 `go build ./...` + `go vet ./...` + `go test ./...` 全绿;前端 `tsc --noEmit` + `vite build` 通过。
|
||
- 在 `DevDocs/开发时间线.md` §3 勾选状态:`✅ 已完成` / `⚠️ 未完成/阻塞`(⚠️ 必须记录原因与延后里程碑)。
|
||
- 与 `DevDocs/design/*` 比对:不一致时以设计为准——先改设计文档或修正代码,**不允许带着偏离堆叠**。
|
||
|
||
## 4. 改动前确认归属
|
||
- 修改任一文件/功能前,明确它在哪个里程碑、对应哪份 design 文档;改完同步该文档(若设计变了)。
|
||
|
||
## 5. 实时同步工作小结
|
||
- 每完成一步,更新 `DevDocs/工作小结.md`:当前里程碑 / 进度 / 已完成+未完成 / 关键决策 / 变更日志。
|
||
|
||
## 6. 小步提交 + 频繁验证
|
||
- 小粒度 commit;每步 build/test 通过再提交;提交信息按 Git 规范(feat/fix/refactor/docs/chore,scope 用模块名)。
|
||
|
||
## 7. 不信任记忆,信任清单
|
||
- 关键决策、架构铁律、用户红线(如身份识别靠元数据、不靠提示词)都记录在 `DevDocs/工作小结.md` 的「关键决策」区;压缩后回读,不得丢失。
|
||
|
||
## 8. 上下文保护:可并行项交给后台子代理,主会话当监工
|
||
- **相互独立、不依赖主会话开放状态**的开发任务(如 M0 地基各件、层 1 并行件),用 `Agent(run_in_background=true)` 派后台子代理**并行实现**。
|
||
- 主会话**只当监工**:等子代理回报 → 验收(`go build/vet/test`)→ 更新 `工作小结.md` + 时间线 → 小步 commit → 派下一批。**不在主会话里重复子代理已做的搜索/实现**。
|
||
- 子代理 prompt 必须**自包含**:写清目标、已知信息、精确文件路径、必须遵守的编码约束(02-development-constraints.md)、验收命令;不要让它去搜已经知道的东西。
|
||
- **只有真正独立才并行**;有依赖的串行。避免两个子代理同时改 `go.mod/go.sum`——若都要改,指定其中一个负责或先把依赖拉好。
|
||
- 目的:防主会话上下文超限触发压缩;压缩后靠本文件 + `工作小结.md` 恢复锚点,继续当监工。
|
||
|
||
## 9. 全球红线(跨里程碑,必须遵守;违反即架构偏离)
|
||
- **单二进制、单端口 `:8080`、零跨进程 IPC**:模块间同步走**进程内接口 + 依赖注入**(直接方法调用),异步走**进程内 `bus`**;**不另开监听端口、不 HTTP 互调**。
|
||
- **身份识别靠 channel 层强类型 `actor` 元数据 + 策略引擎**,**绝不靠提示词/LLM 判断**(主人/群聊/陌生人判定与权限永远由 actor 元数据 + 白名单 + policy engine 决定)。
|
||
- **人格 = 身份**(**不限制能力**);**行为模式 = 呈现**(≠边界,可热切换、不构成能力边界);**能力全局全能**;**前端(Web)是第一公民**。
|
||
- **IM 是镜像**:只 chat 文本,Web 不回流 IM;输出一律 chat 文本。
|
||
- **前端(用户端 + 管理面板)统一 Miuix 设计语言**(小米 HyperOS Miuix / Miuix Console),实现须对齐六大核心(Smooth Corner/多层 Surface/弹簧动效/深色优先/毛玻璃/Liquid Glass),不混用其他 UI 语言。
|
||
- **存储**:SQLite 默认 + PG/pgvector **可选增强**;**配置了增强必须真实走语义/向量路径**(非空壳)。
|
||
- **工具循环上限 8 轮**;任务:后台声明 / 前台 2s 转后台 / 消息队列回输出。
|
||
- **记忆三类作用域隔离**:用户习惯(全局共享)/ 角色日常(他角色只读)/ 项目(人人读写 + 项目索引分层);**群聊 / 陌生人:查记忆只读不写、不入主会话上下文、不泄露主人敏感信息**。
|
||
- **敏感操作主代理代审 + 审计日志 + 前端小字**(「xxx 想要干什么,我审查后批准了」)。
|
||
- **模型**:per-role 路由 + 接口报错自动降级(主→备→本地);多模态/流式。
|
||
|
||
## 10. 代码与流程硬性规范(压缩后仍需遵守)
|
||
- 🔴 **文件 ≤500 行、函数 ≤80 行**;**模块按职责拆成多个源文件,严禁把整个模块塞进一个超大文件**;**三次复制必须抽取**共享。
|
||
- 🔴 禁 `interface{}`(用 `any`)、禁包级全局变量(除 `var ErrXxx`)、禁裸 `return err`、禁魔法数字;错误一律 `%w` wrap;SQL 全参数化、表名单数、主键 `id`、时间戳 `created_at/updated_at`、索引 `idx_{table}_{col}`;敏感信息打日志。
|
||
- 🔴 **日志必须标来源**:模块/子功能用 `internal/logger.WithSource`/`Scoped`(`source=module/subfeature`)标注,跨模块可追溯定位;**禁止无来源裸日志**。
|
||
- 🔴 **客户端 API 契约先行**:REST `/api/v1` + WS `/ws` + admin `/api/v1/admin/*` 统一**版本化契约**,供跨平台客户端(Web/移动/IM bridge)接入与治理;JSON 响应 `{data}` / `{error:{code,message}}`。
|
||
- 🔴 **用户侧 API 文档随实现更新**:每实现/变更一个 REST 端点、WS 事件、admin API,**立即同步更新 `Docs/api-client.md`**(用户侧跨平台客户端 API 文档),供后期原生客户端开发;契约变更版本化。
|
||
- 🔴 每阶段完成(或里程碑归档)后:**`git push origin dev`** 同步远端。
|
||
- 🔴 **遇到开发文档冲突 / 意义不明 / 规格矛盾时**:**阻塞会话**,用 `AskUserQuestion` 询问主人,**不得自行猜测**;文档清、不冲突则自主推进。
|
||
- 🔴 阶段验证:后端 `go build ./...` + `go vet ./...` + `go test ./...` 全绿 + windows/darwin 交叉编译;前端(M9+)`tsc --noEmit` + `vite build` 通过。
|