# Project Rules — 愈心谷 Inherits: `$ESS_ROOT/product-governance/PROJECT_RULES.md`(流程) Product/DoD 权威:`.ai/`(不在此复制长文) ## ESS Intake(本仓覆盖) ```yaml ess_intake: strict ``` - **权威入口:** `$ESS_ROOT/governance/SESSION_BOOTSTRAP.md`(G0 Mode 块) - **Solo multi-role:** `$ESS_ROOT/governance/AGENT_OPERATIONS.md` - **Execution Context:** 同时只绑定 **一个** Active ECR(或一个 L1 TASK);新主题 = OUT OF SCOPE,禁止顺手改码 - **retro-ecr:** 本仓 **FAIL**(须 `Retrospective: true` + Original drift + Scope freeze + Process debt;不得伪装正序路径)。通用 ESS 默认为 WARN;脚本强制见后续门禁 PR,**规则即时约束 Agent** - **Loop / Adapter:** 不在本仓维护;已授权执行不扩展 ESS Intake 职责 - **ESS 0.2.0-intake / Loop / Adapter:** 本仓视为 **FROZEN**;仓库治理问题不塞进 ESS 内核或 Loop ## Repository governance(仓侧 · 非 Loop) 独立于 ESS Loop。Merge / 开 ECR / 写 migration 前执行: ```bash python scripts/repo-governance-check.py python scripts/repo-governance-check.py --print-anchors ``` 权威锚点:`docs/TRACEABILITY.md` 顶部 **Next ECR** · **Max Migration**。 ### ECR identity(硬规则) - **`ECR-NNN`(及带字母/后缀的完整 identity)在仓库历史内全局唯一。** 即使已 Closed,也**禁止**把同一编号重新解释成另一件事。 - **禁止同号双义**(例如两个文件都自称 `# ECR-012`)。 - 分叉只允许:**`ECR-012-star`** · **`ECR-013A`** · **`ECR-013B`** 等形式;不得再开第二个裸 `ECR-012`。 - **预占:** 开新 ECR 前读 TRACEABILITY **Next ECR**;占用后立即更新该锚点(或跑 `--print-anchors` 核对后写回)。 - **Canonical-ID:** 仅作历史分叉过渡字段;长期以唯一 H1 / identity 为准,不发展成并行别名体系。 - Agent **Single ECR Context** 绑定的必须是上述唯一 identity(查 TRACEABILITY,勿猜)。 ### Migration stem(硬规则) - `apps/api/migrations/` 下 **6 位版本号唯一**(禁止 `000015_foo` 与 `000015_bar` 并存)。 - **禁止**凭记忆递增。Create 流程: ```text Read repo state → Max Migration (TRACEABILITY / --print-anchors) → allocate next stem → write file → repo-governance-check PASS ``` - 并行 branch + merge 是已知攻击面;合入含 migration 的变更必须过 uniqueness 检查。 - 已发生撞号的修复说明:`docs/MIGRATION_RENUMBER.md`(playbook 保留,本阶段不扩展)。 ### L0 / L1 UI(轻规则 · 不过度治理) 无 API / DB / Domain 新概念 / 权限 / 新业务状态、且不改既定 Acceptance → 可 L0/L1,**不必**为大 ECR。 若改变**用户可见主路径**语义 → 对照相关 Active Feature Spec 做 consistency check(不必因此自动升 L2)。 ## Domain invariants 1. 语言契约:只用 `.ai/product/lexicon.md` 中的愈心谷用词;禁止竞品品牌词与恐吓/吉凶话术。 2. API 信封固定为 `{code,message,data}`;不发明表名、端点、领域同义词。 3. 调用链:UI → `@yuxingu/sdk` → Handler → Service → Repository → DB。 4. 新功能 / 扩行为:必须有 Active `.ai/product/feature-spec/.md`;L2+ 另须 Approved `docs/ECR/`;**涉后台**另须 Approved `docs/BACKEND_DESIGN/`。 5. 本地默认:本机 `go run` + Vite;compose 只起 DB。 6. Done ≠ build 通过:须过 `.ai/definition-of-done.md` 并输出 Review Report。 ## Change levels(映射) | ESS | 本仓要求 | |-----|----------| | L0 | 文档/注释/无行为;可无 ECR | | L1 | 明确 bugfix;可无新 Feature Spec,但不得扩行为 | | L2 | 功能行为变更 → Feature Spec Active + ECR Approved + HANDOFF | | L2-BLOCKED | 无 Approved ECR 时禁止改 `apps/` / `packages/` / `proto/` / `migrations/` | | L3 | 栈/包边界/架构 → ADR(`.ai/adr/`)+ ECR + ENGINEERING_SPEC | ## Forbidden(extra) - 猜需求继续写(ASK FIRST) - Architect 角色改 `apps/` / `packages/` 生产实现 - 无 Human 批准把实验当 Live 行为推广 - 提交 `config.local.yaml`、`.env`、密钥 - 同一 review turn Approve + Modify - 在已绑定 ECR 的 Execution Context 内「顺便」做第二功能 - 同号双义 ECR;凭记忆分配 migration 版本号 - Retro 批量追认已 merge 行为;把仓库治理机制扩进 ESS Loop ## Completion 1. 开场 ESS Mode 块(G0)通过且 `Action: CONTINUE`(或明确 L0) 2. 仓侧(改 ECR / migration / merge 前):`python scripts/repo-governance-check.py` PASS 3. ESS gate(有 ECR 时):`python scripts/ess-validate.py --phase --ecr ECR-xxx` 4. 本仓 DoD:`.ai/definition-of-done.md` + `.ai/review.md` 5. 有行为变更时更新/尊重 `.ai/product/p1-status.md` 标签