# 开发约束 项目最高设计约束:禁止防御性编程。能删除或放宽条件解决的问题,不新增替代机制;不把汇报、经验阈值和辅助状态写成完成门槛。身份、授权、真实来源和执行回执按事实处理,不借此扩大限制。 注重可扩展性和可维护性,不把代码写死,为未来变化留出必要空间。能删或放宽现有条件解决的问题,不新增替代机制;遵守[开篇设计原则](docs/architecture/development-contract.md#0-设计原则)。 去掉限制后仍能完成真实工作的,优先删除;连同下游执行、存储、提示和冻结该限制的测试一起核对。 开始涉及架构、运行时、工具或持久化的修改前,阅读 [共同架构约束](docs/architecture/development-contract.md) 和对应模块的现行文档。 文档入口是 [docs/architecture/README.md](docs/architecture/README.md)。 - **绝不要在写完代码之后再去补单元测试。** - **强烈倾向于把端到端(E2E)测试作为唯一的测试机制。** 用它来验证复杂功能是否正常工作;在 E2E 测试结束时,必须产出一个可验证且可重复复现的产物(artifact)。 - **如果确实需要对系统做隔离测试,必须【先】把所有可能失败的情况全部写出来,【然后】再去写代码。** - 内部事件 ID 沿调用链传递;平台消息 ID 不得用来重建已有内部事件或业务所有权。 - Person ID 是稳定人物身份,不复用为另一个人;人物资料与原历史归属不由今日平台账号、昵称、Binding 或发送路由反向重建。允许 Person 没有账号;同一人显式合并保留原 Person ID、事件、执行与回执来源,账号转给另一人只改变未来归属。 - 超级管理员资格直接归 Person;绑定变化不增删资格,账号转移不携带资格。当前授权核原来源与当前人物,角色不改固定工具声明或原已付请求;原事件、执行与回执保持原事实。 - 协议适配器不加入按内容强制选择 Provider 的路由;失败兜底不得扩大为隐式策略。 - 主 Agent 使用固定工具合同;权限在执行处核验,目录查询不修改已提交声明。 - 角色名称认当前角色资料,SOUL 是唯一用户人格源,程序规则独立装配;改名和换人格不改内部主体、固定工具、原历史或已提交请求。 - 任务恢复按原执行 ID 和持久回执处理,不重置预算、不盲目重跑或重发。 - 查证与身份解析在首次写入前完成;禁止在 SQLite 写事务中等待外部工作或扫描历史。 - 任务书和日期验收按当时基线保留;现行说明与代码不符时直接删改,不叠加矛盾补丁。删除功能时一并核对装配、配置、提示、文档、测试与 CI。 - 验证匹配改动风险,避免重复无关全量检查;遵守用户对测试、提交、上传和部署的明确范围。 - 报告区分本地修改、验证、提交、推送、合并和上线,不把未验证内容写成已完成验收。