docs/architecture/deviations.md 自动同步生成。本项目计划采用 g2rain java-domain-service 1.0.0。下列事实来自 2026-09-05 的当前工作树;新增需求不得扩大这些偏差。
# CMS-001:自动化测试为空
状态:待补齐。
API、Biz 和 Startup 均没有测试源码,mvn clean verify 三个模块都报告 No tests to run。当前只验证编译、打包和文档产物生成,不能证明 SQL、租户、事务、接口或启动集成行为。
# CMS-002:组织数据隔离覆盖不一致
状态:高风险,待统一。
所有主要领域表都包含 organ_id,但当前仅 ArticleDao 显式声明 @DataIsolation;其余 DAO 未发现同等声明。文章又新增了四个 @IgnoreIsolation 方法,当前没有明确的受信 Service、调用方、权限和组织范围校验设计。
# CMS-003:写入 DTO 接受组织与来源字段
状态:待收口。
多个 Biz 写入 DTO 接受 organId,当前文章写入还接受 sourceApplicationId 与 sourceTraceId;文章新增流程已移除从可信 PrincipalContext 设置来源应用的逻辑。需要明确这些字段由拦截器覆盖、由受信接口提供,还是普通客户端可提交,并增加越权测试。
# CMS-004:逻辑删除唯一键语义未统一
状态:决策待补。
space(organ_id, space_code) 和 web_site(organ_id, site_code) 使用不包含 delete_flag 的普通唯一键,意味着删除后业务编码仍永久占位;文档和 ADR 尚未确认这是领域决策。若要求删除后重建,应使用中央 Profile 规定的函数唯一索引并提供增量迁移。
# CMS-005:文章标签关系缺少并发唯一防线
状态:待修复。
article_tag_relation 只有普通非唯一索引。batchAddTags 通过事务内“先查后写”过滤已有关系,但并发请求仍可能产生重复有效关系。需要数据库唯一约束、冲突处理和真实数据库并发测试。
# CMS-006:文章列表/分页直接返回正文
状态:当前工作树行为,待确认契约。
当前未提交改动删除文章详情契约,并把 content 加入 ArticleSelectDto、ArticleVo 及列表 Mapper。列表和分页可能返回/按正文精确筛选,增加响应体、数据库扫描和内容暴露风险。需要明确列表摘要与详情契约,再由测试和 API 文档固定。
# CMS-007:开发配置包含仓库内凭据默认值
状态:待治理。
默认配置为 Nacos 账户提供开发回退值,application-dev.yml 还包含本地数据库字面量凭据。生产环境必须外部注入;后续应改为无敏感默认值的环境变量或本地私有覆盖文件。
# CMS-008:数据库变更只有初始化脚本
状态:待补迁移流程。
仓库提供 scripts/cms.sql 初始化 DDL,但没有已识别的增量迁移工具或历史数据升级脚本。结构变更需要另行说明执行顺序、兼容性、验证和回滚,不能在已有环境重复执行初始化脚本。