status: reviewed_passed created: 2026-07-16
execution-log.md。| 项目 | 值 |
|---|---|
| 后端 | JUnit 5 + Mockito;Maven enable-tests profile |
| 前端 | Vitest;Node v20.19.0 |
| SQL/XML | xmllint、rg 静态契约检查 |
| 构建 | Java 17 Admin reactor;Vite production build |
| 类/模块 | 场景 | 输入 | 预期结果 |
|---|---|---|---|
SegmentSequenceGenerator |
新 key 起始值 | start=25 | 首值 25 |
SegmentSequenceGenerator |
跨号段 | 连续取 1200 个 | 无重复且单实例严格连续 |
SegmentSequenceGenerator |
并发取号 | 8 线程各 500 个 | 4000 个唯一值 |
CodeRuleRadixCodec |
五种进制 | 边界值和长度 | 固定宽度结果正确 |
CodeRuleRadixCodec |
易混淆字符 | I/O/Z 前后边界 | 开启后字符集不含 I/O/Z |
CodeRuleRadixCodec |
溢出 | value=capacity | 抛业务异常,不截断 |
CodeRuleEngine |
五种段组合 | 日期、固定、序列、变量、系统变量 | 拼接顺序和逐段结果正确 |
CodeRuleEngine |
多分组段 | 两个不同组合 | groupHash 不同且 key 长度受控 |
CodeRuleEngine |
SYS_VAR 防伪造 | fields 含 tenantId/userId | 使用可信 Session 值或失败关闭 |
CodeRuleEngine |
预览 | 任意规则 | 不调用序列服务 |
LegacyCodeRuleParser |
旧内置模板 | 11 条旧规则 | 生成等价分段 |
LegacyCodeRuleParser |
不可解析模板 | 未知 token | 保留 legacy 警告,不丢数据 |
CodeRuleMapper.xml 分页、详情、唯一校验显式过滤 tenant_id 和 del_flag。CodeRuleSegmentMapper.xml 按 segment_order,id 稳定排序,逻辑删除和批量插入在同一事务中。NOT EXISTS 防重复。/system/code-rule DTO 使用 JSR303 校验,方法具备独立权限和加解密注解。/ai/code-rule/list|preview|generate 对旧请求字段保持兼容。DynamicCrudService 将 recordData 作为 VARIABLE fields 传入,不允许其覆盖 SYS_VAR。| 时间 | 范围 | 命令 | 结果 | 备注 |
|---|---|---|---|---|
| 2026-07-16 | 需求分析 | 只读检查现有 CodeRule/Sequence/UI/Flyway | passed | 未执行构建或运行服务 |
| 时间 | 变更范围 | 必跑项 | 实际命令 | 结果 | 跳过/警告 |
|---|---|---|---|---|---|
| 2026-07-16 | SDD 文档及全部差异 | tracked/untracked diff check | git diff --check;untracked 文件逐项 git diff --no-index --check |
passed | 28 个 untracked 文件已覆盖 |
| 2026-07-16 | 序列底座 | JUnit | mvn -Penable-tests -pl forge-framework/forge-starter-parent/forge-starter-id -Dtest=SegmentSequenceGeneratorTest test |
passed,3/3 | 首次 Red 为缺少起始值接口;首次 Green 被 Mockito attach 环境限制阻断,改用 JDK Proxy 后通过 |
| 2026-07-16 | 结构化引擎、legacy、Controller、低代码 | JUnit | Generator 模块 mvn -Penable-tests -Dtest=CodeRuleEngineTest,LegacyCodeRuleParserTest,DynamicCrudServiceAutoGenerationTest,SystemCodeRuleControllerContractTest test |
passed,10/10 | 聚合定向测试先被上游 datascope 测试引擎配置拦截,改为目标模块直跑后通过 |
| 2026-07-16 | 前端工具函数 | Vitest | pnpm exec vitest run src/views/app-center/__tests__/code-rule-utils.spec.js |
passed,6/6 | Node v20.19.0 |
| 2026-07-16 | 前端页面与组件 | production build | NODE_OPTIONS=--max-old-space-size=8192 pnpm build |
passed,8691 modules | 仅仓库既有动态/静态导入、CSS // 注释和组件同名警告 |
| 2026-07-16 | 主应用装配 | Admin reactor compile | mvn -pl forge-admin-server -am compile -DskipTests |
passed,42/42 | Java 17;使用临时只读镜像 Maven 仓库配置 |
| 2026-07-16 | Mapper/Flyway | XML 与静态检查 | xmllint --noout ...、rg -n '\$\{[^}]+\}' forge-server/db/migration |
passed | placeholder 检查无输出;补验主表逻辑删除字段与唯一索引 |
| 2026-07-16 | 真实环境 | Flyway/HTTP | 未执行 | skipped | 未启动 Admin/MySQL/Redis,按既定分工由可用环境补充 |
execution-log.md:同目录增量追加。SegmentSequenceGenerator,不能覆盖两个实例在 UPDATE 与 SELECT 之间交错导致的重复号段。max_id 与 JVM SegmentHolder 一致性的集成测试。code-rule:* 计数器的升级场景,未验证新引擎首次生成值大于历史已分配水位。category 字段后中断、修复后重跑的幂等测试。REQUIRES_NEW 传播。| 范围 | 结果 | 关键证据 |
|---|---|---|
| Starter ID | passed,6/6 | 覆盖旧水位首号、两个生成器交错分配、本实例快照区间和 REQUIRES_NEW 提交契约 |
| Generator | passed,11/11 | Engine 4、migration contract 1、legacy parser 2、Dynamic CRUD 3、Controller contract 1 |
| 前端工具函数 | passed,8/8 | 新增 latest request guard 与独立权限判断用例 |
| 前端生产构建 | passed | Node v20.19.0;8691 modules;exit 0,仅仓库既有非阻断警告 |
| Admin 聚合编译 | passed,42/42 | Java 17;Starter ID、Generator、Admin 均成功 |
| XML/Flyway/差异 | passed | 三个 Mapper XML;placeholder 和 @category_added 扫描无输出;tracked/untracked 格式检查无输出 |
| 真实环境 | skipped | 未启动 Admin/MySQL/Redis,未实跑 Flyway 和登录态 HTTP |
| 检查 | 结果 | 证据 |
|---|---|---|
| 主题变量静态检查 | passed | 编码规则三个 Vue 文件不再使用 --body-color、--n-color、--n-action-color 等页面背景变量 |
| 定向 ESLint | passed | code-rules.vue、CodeRuleEditorWorkspace.vue、CodeRuleSegmentEditor.vue 0 errors |
| 前端回归 | passed,8/8 | code-rule-utils.spec.js |
| 生产构建 | passed | 8691 modules,exit 0;仅仓库既有非阻断警告 |
| 检查 | 结果 | 证据 |
|---|---|---|
| 抽屉移除契约 | passed | 编码规则入口和工作台无 n-drawer、show/update:show 或旧 Drawer 引用 |
| 同路由权限边界 | passed | 使用 `/app-center/code-rules?editor=create |
| 操作列可见性 | passed | 分段表头“操作”和行内按钮均使用 position: sticky; right: 0 |
| 定向 ESLint | passed | 三个相关 Vue 文件 0 errors/warnings |
| 前端回归 | passed,8/8 | code-rule-utils.spec.js |
| 生产构建 | passed | 8691 modules,exit 0;仅仓库既有非阻断警告 |
objectCode 上下文。| 范围 | 结果 | 证据 |
|---|---|---|
| Generator | passed,15/15 | Controller 2、migration 2、engine 4、legacy 2、Mapper 1、Dynamic CRUD 3、对象绑定 1 |
| 前端 ESLint/Vitest | passed,9/9 | 6 个相关前端文件 0 errors;VARIABLE 来源对象校验新增用例 |
| 前端生产构建 | passed | 8691 modules,exit 0;仅仓库既有非阻断警告 |
| Admin 聚合编译 | passed,42/42 | Java 17;Generator 与 Admin 装配成功 |
| XML/Flyway | passed | 三个 Mapper XML;placeholder 无残留;来源对象补列先于索引;场景字典 tenant_id=1 |
| 真实环境 | skipped | 未启动 Admin/MySQL/Redis,未实跑 Flyway 和登录态 HTTP |
segmentValue。objectCode 可生成;LOWCODE/混合规则继续拒绝缺失或不匹配的 objectCode。${field:xxx} 和未知历史变量默认 CUSTOM;Flyway 包含 variable_source 防重补列及已绑定存量分段 LOWCODE 回填。| 范围 | 结果 | 证据 |
|---|---|---|
| Red | passed | 前端旧实现 2 项失败;后端测试编译 7 处缺少 variableSource/分类契约 |
| Generator | passed,20/20 | Controller 2、migration 3、engine 4、legacy 2、Mapper 2、Dynamic CRUD 3、对象绑定 4 |
| 前端 ESLint/Vitest | passed,11/11 | 4 个相关 Vue/JS 文件 0 errors;纯函数用例全部通过 |
| 前端生产构建 | passed | 8691 modules,exit 0;仅仓库既有非阻断警告 |
| Admin 聚合编译 | passed,42/42 | Java 17,Generator 与 Admin 装配成功 |
| XML/Flyway/差异 | passed | Mapper XML 语法、placeholder 和 git diff --check 通过 |
| 真实环境 | skipped | 未启动 Admin/MySQL/Redis,未实跑 Flyway、HTTP 和浏览器登录态验收 |
applyLowCodeVariableMapping 用例,旧实现因函数不存在而失败。segment-editor__mapping;选择 LOWCODE 和行内重新映射均触发工作台 Modal。| 范围 | 结果 | 证据 |
|---|---|---|
| Red | passed | 新增 2 个映射原子应用用例,旧实现因 applyLowCodeVariableMapping is not a function 失败 |
| Vitest | passed,13/13 | 同对象保留、换对象清理、CUSTOM 保留与既有双来源用例全部通过 |
| ESLint | passed | code-rule-utils.js、定向测试和两个编辑组件 0 errors |
| 交互静态契约 | passed | 无顶部 segment-editor__mapping;存在行内 request-low-code-mapping、工作台 n-modal 和原子应用函数 |
| 前端生产构建 | passed | 8691 modules,exit 0;仅仓库既有非阻断警告 |
| 真实页面 | skipped | 未启动 Admin/MySQL/Redis,未执行登录态浏览器点击验收 |
1001,避免水位回退和立即溢出。| 范围 | 结果 | 证据 |
|---|---|---|
| Red | passed | CodeRuleEngineTest 新契约在旧接口下 testCompile 失败 |
| Starter ID | passed,7/7 | 起始值、跨段、并发、多实例、旧水位只读解析和 REQUIRES_NEW |
| Generator | passed,21/21 | Engine 5,其余编码规则/低代码回归 16 |
| Admin 聚合编译 | passed,42/42 | Starter ID、Generator 与 Admin 装配成功 |
| 真实环境 | skipped | 未启动 Admin/MySQL/Redis,未执行真实 Flyway、HTTP 或浏览器验收 |
REQUIRES_NEW 同时显式使用 READ_COMMITTED。HHmmss + AUTO 保持 NONE/all;旧 all 水位续接。| 范围 | 结果 | 证据 |
|---|---|---|
| Starter ID | passed,9/9 | 高基数缓存、淘汰唯一性、READ_COMMITTED、旧 all 水位及既有回归 |
| Generator | passed,25/25 | Engine 6、legacy 2、migration 4、Mapper 3、Controller 2、Dynamic CRUD 3、对象/SEQ identity 5 |
| Admin 聚合编译 | passed,42/42 | 新 Caffeine 依赖、Starter ID、Generator 与 Admin 装配成功 |
| 前端基线 | reused | Vitest 13/13、定向 ESLint 0 errors、生产构建 8691 modules |
| 真实环境 | skipped | 未启动 Admin/MySQL/Redis,未实跑 Flyway、HTTP 或浏览器登录态验收 |
git diff --check 通过。CodeRuleMapper.xml、CodeRuleSegmentMapper.xml、SysIdSequenceMapper.xml 通过 xmllint --noout。V1.0.36__add_structured_code_rule_segments.sql 无 Flyway ${...} placeholder。/sequence API 默认关闭、仅 POST、具备专用权限和 bizKey 边界。SegmentSequenceGeneratorTest,SequenceControllerContractTest。code-rule-utils.spec.js、相关 API/工作台 ESLint 和生产构建。xmllint、V1.0.36/V1.0.37 placeholder、git diff --check。| 范围 | 结果 | 关键证据 |
|---|---|---|
| Red / Task 15-16 | passed | 六参数 nextId 缺失导致 Starter ID testCompile 失败;新增容量、缓存淘汰、API 默认关闭/POST/权限/边界契约可识别旧实现 |
| Red / Task 17 | passed | SysIdSequenceMapperContractTest 在旧 LEFT(biz_key,...) 查询下 1 项失败;V1.0.37 和 legacy 标记契约随后补齐 |
| Red / Task 18 | passed | CodeRuleServiceDefinitionCacheTest 因旧 loadDefinition 私有且无缓存契约导致 testCompile 3 处失败 |
| Starter ID | passed,15/15 | SegmentSequenceGeneratorTest 12、SequenceControllerContractTest 2、SysIdSequenceMapperContractTest 1 |
| Generator | passed,31/31 | Controller 3、migration 5、engine 8、legacy 2、Mapper 4、Dynamic CRUD 3、对象/SEQ identity 5、定义缓存 1 |
| 前端 | passed,14/14 | latest guard、取消识别和既有分段/映射/权限用例;相关 API/JS/Vue ESLint 0 errors |
| 前端生产构建 | passed | Node v20.19.0;8691 modules;仅仓库既有组件同名、动态/静态导入及 CSS 注释警告 |
| Admin 聚合编译 | passed,42/42 | Java 17;Starter ID、Generator、Caffeine 和 Admin 装配成功 |
| XML/Flyway/差异 | passed | 三个 Mapper xmllint;V1.0.36/V1.0.37 placeholder、LEFT(biz_key 和空白检查无输出 |
| 两阶段 Review | PASS / PASS_WITH_COMMENTS | P0/P1 为零;合法高基数计数器行的监控/留存策略作为 P2 运维治理项 |
| 真实环境 | skipped | 未启动 Admin/MySQL/Redis,未实跑 Flyway、登录态 HTTP 或浏览器点击验收 |
-am 定向测试尝试仍会在既有 forge-starter-datascope 的 surefire groups/engine 配置处提前失败;按历史基线改为目标模块直跑,目标测试均成功,Admin reactor compile 另行覆盖完整装配。