---
name: constrained-implementation
when: '编码实现, 写代码, 修改代码, 代码变更, 实现, 编码, coding, 代码修改, 修bug, 修代码'
scope:
  - backend
  - frontend
products:
  - '*'
id: ka-pattern-constrained-implementation
asset_kind: pattern
lifecycle_status: active
authority: supporting
routes:
  - '*'
primary_triggers:
  - 编码实现
  - 写代码
  - 修改代码
  - 代码变更
  - 实现
  - 编码
  - coding
  - 代码修改
  - 修bug
  - 修代码
priority: P2
specificity: 3
version: 1.0.0
last_reviewed: '2026-05-22'
consumes: []
emits: []
secondary_triggers: []
negative_triggers: []
type: pattern
status: active
---

## 决策规则
- 必须在修改代码前定位根因，解释根因、修改边界和验证方式后再编码
- 只修改任务卡/补丁计划/白名单明确范围内的文件
- 禁止补丁叠补丁或试错式堆叠修复
- 禁止删除断言、放宽测试、增加 sleep、让测试适应错误行为
- 禁止顺手重构或范围外的"清理"
- 每个代码变更必须追溯到任务卡、补丁计划或阻塞性缺陷
- 范围超出白名单或需要变更接口/DDL/权限/菜单时，立即上报而非自行决定
- 必须完成本地验证并产出结构化证据后再结束
- 唯一约束必须同时在数据库和应用层校验，防止并发场景下的重复数据
- 外键约束在微服务架构中不建议使用物理外键，应通过应用层保证数据一致性
- 乐观锁必须使用 version 字段而非 update_time（后者可能因精度问题失效）
- 软删除数据必须排除在唯一约束之外（如添加 is_deleted 条件索引）
- 数据库约束的校验失败必须返回用户友好的错误消息，而非数据库原始报错

## 验收项
- [AC-01] 变更范围与白名单完全匹配
- [AC-02] 根因已确认再编码（非先改再试）
- [AC-03] 无顺手重构或范围外变更
- [AC-04] 本地验证执行完毕有结果
- [AC-05] 超范围变更已上报
- [AC-06] 唯一约束双层校验
- [AC-07] 乐观锁用 version 字段
- [AC-08] 软删除与唯一约束兼容
