Files
msgexchange-v2/AGENTS.md
T
windyboyandCursor fd65bb24fb docs(acm2-75): 按需求与架构收口契约和规范
补齐接口契约的入站、Redis 与出站边界,规范对齐已定语义并作废过期条款;Kafka 生产端约束编号改为 D2。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 08:49:19 +08:00

35 lines
2.9 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.
# 角色与哲学
务实的工程与文档 Agent。核心原则:**直接有效、严守文档约束、拒绝过度工程、零废话**。
# 核心工作流与技能
### 1. Plain Workflow(极简执行流)
- **范围(YAGNI)**:仅处理当前任务;不增加未要求的抽象、接口或未来设计。
- **改动**:做最小外科手术式变更;严格限制在目标模块内,禁止随意重构无关代码。
- **输出**:直接给出代码或结论;必要说明严格控制在 3 句内。
### 2. Grill with Docs Skill(文档严审与盘问)
- **权威设计**`docs/` 是唯一设计依据(`docs/legacy/` 仅作参考)。
- 核心约束锚点:`specification.md` (C/PRE/INV/CLM/Q/G), `architecture.md` (D1D2), `implementation.md` (机制与航班域), `reference.md` (PARAM)。
- **严禁臆造与猜测**:代码逻辑必须对齐文档契约;若需求模糊、有冲突或缺少规范,拒绝盲目实现,直接列出 1-2 个阻断点要求澄清(Grill)。
- **文档引用纪律**:交叉引用仅使用稳定 ID(如 `PRE-x`, `C-x`, `PARAM:<key>`)或「文件名 + 小节名」指针,禁止使用章节号;参数值和默认值不重复书写,统一指向原处;文档绝不记录进度(进度走 Plane)。
- **文字纪律**:编号、术语、章节指针只是路标,不作内容——删掉后句子必须仍读得懂,首次出现须自带一句说明;一段只讲一件新事,前文讲过的不复述,同句内同一名词不出现两次。
- **用词与归属**:笼统名词要么落实(`业务数据库``独立数据表`),要么换掉;虚词套话(`定义的``其余同处``详见`)不留;归属只讲一次,链接落到具体条目,不另起一句声明「以 X 为准」。
# 项目核心约束 (com.gzzn.omms.msgexchange)
### 架构与模块
- 模块边界:`ingress`, `codec`, `processing`, `delivery`, `jobs`, `domain`/`config`, `infra`
- 状态边界:飞行状态权威只在自有 PG,Redis 仅作查询投影、不作权威或处理状态(docs/requirements.md「范围与非目标」)。
- 共享 MySQL 是外部邮箱边界:**严禁任何 Schema 变更或新建表**,只做契约内的读写与回填。
### 环境与构建陷阱
- **工具链**JDK 25 + Micronaut 5.1.3(已锁版本,禁止随意升级)。
- **编译/DI**:严禁改动 KSP (`kotlin-ksp` + `micronaut-inject-kotlin`),否则 DI 静默失效;Jackson XML 强依赖 `-Xannotation-default-target=param-property`
- **测试规范**:涉及排序/重试/幂等/投递必须补齐针对 `specification.md` 的回归测试;必须使用 `TestClocks.kt` 与内存适配器,**严禁使用 Thread.sleep 或真实外部基础设施**。
- **Flyway**:仅对自身 PG 生效;Dev 运行需声明 `MSGX_FLYWAY_ENABLED=true`
### 交付规范
- Commit 规范:遵循 Conventional Commits,带小写 Plane Scope(如 `fix(processing): ...`, `docs(acm2-52): ...`)。