docs(agents): fold recurring cross-agent lessons into AGENTS.md
Adds rules previously kept only in Claude's local memory so Codex/Cursor follow them too: path-scoped docs commits (ERR-112), PostgREST compat layer needs real queries (BUG-990), grep source-text contract tests before moving code (BUG-933/934/939/992/1014), privacy marker test for docs with measurements, quick gate for any scripts/tests change, Node `# cancelled` check (BUG-995), and history-open check on Skill bumps (BUG-621). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
6c407ea762
commit
828aca0a41
@@ -66,6 +66,7 @@
|
||||
- 或 `git diff > /tmp/x.patch` 后手工恢复。
|
||||
已经误弹了:立刻 `git fsck --unreachable | grep commit` 找回对方的 stash commit,用 `git stash store <sha> -m "RECOVERED …"` 原样放回栈上并告知对方 sha,不要自行替对方 apply。
|
||||
6. 两个同时改 `frontend/src/app/(app)/page.tsx` 或同一组件的轮次必须串行,任务书里写明先后。
|
||||
7. 文档提交只 `git add <具体路径>`,提交前看 `git diff --cached --stat` 确认只有文档;不得用 `git commit -a` / `-am`。起因 ERR-112:`-am` 把工作树里早已存在的删除一起推上 staging,打红门禁,还碰了只有产品负责人能动的 `.gitea/`。
|
||||
|
||||
## 4. 记录文件放哪
|
||||
|
||||
@@ -112,8 +113,9 @@
|
||||
3. 测试总数不得低于开工时 `origin/staging` 的实测;改任何既有断言必须写"原值 / 新值 / 原因"三栏说明,不得静默弱化。
|
||||
4. 合同测试的 fixture 必须来自真实引擎响应(golden),不得手造形状。
|
||||
5. 改 UI 的提交同时更新 `frontend/DESIGN.md`;新文案对照 `frontend/docs/VOICE.md`。
|
||||
6. 不改数据库结构的轮次不得顺带动迁移;动表的轮次必须真跑 `npm run test:db`。staging 迁移在部署之前自动应用,因此必须对当前已部署的那一版代码向后兼容:加列、加表、加索引、加触发器、加函数可以同轮;删列、删表、重命名、收紧 `NOT NULL` / `CHECK`、改类型必须拆成两轮——先加新的并部署代码,再删旧的。
|
||||
6. 不改数据库结构的轮次不得顺带动迁移;动表的轮次必须真跑 `npm run test:db`。staging 迁移在部署之前自动应用,因此必须对当前已部署的那一版代码向后兼容:加列、加表、加索引、加触发器、加函数可以同轮;删列、删表、重命名、收紧 `NOT NULL` / `CHECK`、改类型必须拆成两轮——先加新的并部署代码,再删旧的。自托管 PostgreSQL 兼容层的 stub 测不到真实查询语法,新用到的查询写法必须 `test:db` 真查或部署后 smoke(BUG-990:未实现的 `not(col,"is",null)` 让归档列表 500 了两周)。
|
||||
7. 不得顺手升级依赖、不得顺手修不在任务书里的 warning;发现了写进 `BLOCKED.md` 或进度记录。
|
||||
8. 移动、删除或改写组件与语句前,先在 `frontend/tests/` 和 `tests/` 里 grep 该文件路径、要删的类名与语句,找出按源码文本断言的合同测试,同一轮跟着改(按第 3 条写三栏)。漏改会让门禁红而业务代码是对的,已发生多次:BUG-933 / 934 / 939 / 992 / 1014。
|
||||
|
||||
## 8. 隐私与安全
|
||||
|
||||
@@ -121,6 +123,7 @@
|
||||
2. 不得读取、猜测或借用他人的凭据与账号做验收;没有受控账号就把该项写进 `BLOCKED.md`。
|
||||
3. 供应商地址必须经服务端 SSRF 防护;不得把任何 key 放进前端。
|
||||
4. 不得放宽置信度或验证边界,除非有外部 benchmark 证据。
|
||||
5. 写了实测数字的文档(任务书、进度、研究记录)推送前先跑 `.venv/bin/python -m pytest tests/test_repo_privacy_markers.py -q`;实测段落只写"真实个人资料",不写具体出生信息。
|
||||
|
||||
## 9. 开工预检(引擎 / 基础设施 / 发布类任务)
|
||||
|
||||
@@ -151,6 +154,10 @@
|
||||
| 数据库 | `npm run test:db --prefix frontend`(需 Docker) | 动表 |
|
||||
| 发布前 | `run_quality_gate.py --profile release` | 提升 `main` 前 |
|
||||
|
||||
- 定向测试通过不能代替快速门:改动只要含 `scripts/**` 或 `tests/**`(包括 `scripts/research/` 下的调研脚本),验收就跑快速门全量。`tests/test_api_server_growth_contract.py` 按文本计数,注释里出现 `JyotishAPIHandler.__new__` 也算一个伪造点。
|
||||
- 读 Node 测试结果要同时看 `# cancelled` 和退出码,不能只看 `# fail`;测试接管 stdout 时 `fail=0` 也可能是漏报(BUG-995)。
|
||||
- 升级生时校正 Skill 版本的轮次,必须验证升级前创建的历史 Case 仍能从列表打开(BUG-621)。
|
||||
|
||||
已知环境缺口,遇到时如实写进 `BLOCKED.md` 而不是宣称通过:无 Docker(DB/部署套件阻塞,用与基线逐条一致的失败清单代替);无登录态与 Chrome(浏览器级验收留给 `docs/testing/` 清单);无模型凭据(真实模型输出留待部署后复核)。
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user