soloforge 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/claude_code/server.d.ts.map +1 -1
- package/dist/adapters/claude_code/server.js +2 -25
- package/dist/adapters/claude_code/server.js.map +1 -1
- package/dist/adapters/claude_code/tools.d.ts +8 -13
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +192 -85
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/adapters/codex/codex_rules.d.ts.map +1 -1
- package/dist/adapters/codex/codex_rules.js +23 -1
- package/dist/adapters/codex/codex_rules.js.map +1 -1
- package/dist/bin/soloforge.js +0 -5
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/audit_verifier.d.ts +1 -1
- package/dist/engine/audit_verifier.js +1 -1
- package/dist/engine/audit_verifier.js.map +1 -1
- package/dist/engine/capability_registry.d.ts +36 -0
- package/dist/engine/capability_registry.d.ts.map +1 -0
- package/dist/engine/capability_registry.js +133 -0
- package/dist/engine/capability_registry.js.map +1 -0
- package/dist/engine/knowledge_config_loader.d.ts +1 -1
- package/dist/engine/knowledge_config_loader.js +1 -1
- package/dist/engine/llm_gateway.js +2 -2
- package/dist/engine/llm_gateway.js.map +1 -1
- package/dist/engine/task_context.js +1 -1
- package/dist/engine/task_context.js.map +1 -1
- package/dist/engine/test_quality.js +2 -2
- package/dist/engine/test_quality.js.map +1 -1
- package/dist/engine/verifier.d.ts.map +1 -1
- package/dist/engine/verifier.js +91 -19
- package/dist/engine/verifier.js.map +1 -1
- package/dist/types.d.ts +0 -84
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/knowledge/domain//345/256/241/350/256/241/346/227/245/345/277/227.md +6 -7
- package/templates/knowledge/domain//345/257/274/345/205/245/345/257/274/345/207/272/350/247/204/345/210/231.md +3 -3
- package/templates/knowledge/domain//351/200/232/347/224/250/346/234/272/346/242/260/346/235/241/346/254/276.md +24 -14
- package/templates/knowledge/procedures//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +1 -1
- package/templates/knowledge/procedures//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/347/250/213.md +1 -1
- package/templates/knowledge/review_rules//345/271/266/345/217/221/345/256/241/346/237/245/350/247/204/345/210/231.md +1 -1
- package/templates/knowledge/review_rules//346/200/247/350/203/275/345/256/241/346/237/245/350/247/204/345/210/231.md +1 -1
- package/templates/knowledge/review_rules//346/216/245/345/217/243/345/245/221/347/272/246/345/256/241/346/237/245/350/247/204/345/210/231.md +1 -1
- package/templates/knowledge/review_rules//346/236/266/346/236/204/345/256/241/346/237/245/350/247/204/345/210/231.md +1 -1
- package/templates/knowledge/review_rules//350/264/250/351/207/217/345/256/241/346/237/245/350/247/204/345/210/231.md +1 -1
- /package/templates/knowledge/checklists/{session_recovery.md → /344/274/232/350/257/235/346/201/242/345/244/215.md"} +0 -0
- /package/templates/knowledge/patterns/core/{decision_gateway.md → /345/206/263/347/255/226/347/275/221/345/205/263.md"} +0 -0
- /package/templates/knowledge/patterns/core/{mutation_audit.md → /345/217/230/345/274/202/345/256/241/350/256/241.md"} +0 -0
- /package/templates/knowledge/patterns/core/{concurrency_lock.md → /345/271/266/345/217/221/351/224/201.md"} +0 -0
- /package/templates/knowledge/patterns/core/{developer_constitution.md → /345/274/200/345/217/221/350/200/205/345/256/252/346/263/225.md"} +0 -0
- /package/templates/knowledge/patterns/core/{streaming_protocol.md → /346/265/201/345/274/217/345/277/203/350/267/263.md"} +0 -0
- /package/templates/knowledge/patterns/core/{authority.md → /347/237/245/350/257/206/344/270/273/346/235/203.md"} +0 -0
|
@@ -8,25 +8,24 @@ products: ["*"]
|
|
|
8
8
|
|
|
9
9
|
## 业务规则
|
|
10
10
|
1. 所有关键业务操作(创建、修改、删除、导出、权限变更)必须记录审计日志
|
|
11
|
-
2.
|
|
12
|
-
3.
|
|
11
|
+
2. 审计日志不可修改和删除(append-only),至少保留 3 年
|
|
12
|
+
3. 每条审计日志必须包含:操作人、操作时间、操作类型、操作对象、变更前后数据
|
|
13
13
|
4. 敏感操作(删除、权限变更、导出)需额外通知管理员
|
|
14
|
-
5.
|
|
15
|
-
6.
|
|
16
|
-
7.
|
|
14
|
+
5. 审计日志查询必须支持按时间范围、操作人、操作类型、目标对象筛选
|
|
15
|
+
6. 审计日志必须记录操作来源(Web/API/定时任务/系统),便于问题追溯
|
|
16
|
+
7. 批量操作必须合并为一条审计记录,包含操作数量和关键参数
|
|
17
17
|
|
|
18
18
|
## 约束条件
|
|
19
19
|
- 审计日志存储在独立表中(audit_log),不与业务数据混存
|
|
20
20
|
- 通过 AOP 切面自动记录,减少开发人员手动埋点
|
|
21
21
|
- 变更前后数据使用 JSON 格式存储(before/after 字段)
|
|
22
22
|
- 审计日志表不支持 UPDATE 和 DELETE(数据库层权限控制)
|
|
23
|
-
- 审计日志必须独立存储,不能与业务数据混用同一张表
|
|
24
23
|
- 审计日志保留期限必须符合合规要求(如 ≥ 180 天)
|
|
25
24
|
|
|
26
25
|
## 例外情况
|
|
27
26
|
- 查询操作(GET)一般不记录审计日志(除导出操作)
|
|
27
|
+
- 系统内部自动任务的操作记录标注为"系统"操作人
|
|
28
28
|
- 批量操作合并为一条审计记录(含数量信息)
|
|
29
|
-
- 查询类操作(GET)通常不记录审计日志,除非有特殊合规要求
|
|
30
29
|
|
|
31
30
|
## 关联模式
|
|
32
31
|
参见 logging 模式(日志记录规范)、error-handling 模式(异常处理与审计)
|
|
@@ -9,7 +9,7 @@ products: ["*"]
|
|
|
9
9
|
## 业务规则
|
|
10
10
|
- 导入必须提供标准模板下载功能,模板字段与校验规则一一对应
|
|
11
11
|
- 导入数据必须全量校验后再入库,禁止边校验边入库(部分成功部分失败难以处理)
|
|
12
|
-
-
|
|
12
|
+
- 校验失败必须返回完整错误报告(行号 + 字段名 + 错误原因),禁止只返回"导入失败"
|
|
13
13
|
- 超过 1000 条的导入必须走异步处理,返回任务 ID 和进度查询接口
|
|
14
14
|
- 导入更新模式必须明确:新增/覆盖/跳过已存在记录
|
|
15
15
|
- 导出字段必须与导入模板字段对齐,导入的数据可通过导出还原
|
|
@@ -17,7 +17,7 @@ products: ["*"]
|
|
|
17
17
|
- 导入模板必须与当前系统版本一致,字段变更时同步更新模板
|
|
18
18
|
- 导出数据必须遵循数据权限规则,用户只能导出权限范围内的数据
|
|
19
19
|
|
|
20
|
-
##
|
|
20
|
+
## 约束条件
|
|
21
21
|
- 导入文件大小限制(建议 10MB),超过限制前端拦截不提交
|
|
22
22
|
- 导入文件类型限制(仅允许 .xlsx/.xls/.csv),禁止 .exe/.sh 等可执行文件
|
|
23
23
|
- 导入操作必须有审计日志(操作人、时间、记录数、成功/失败数)
|
|
@@ -25,7 +25,7 @@ products: ["*"]
|
|
|
25
25
|
- 导入文件大小必须限制(如 ≤ 20MB),超过限制拒绝处理
|
|
26
26
|
- 导入操作必须有操作日志,记录导入人、时间、记录数、成功/失败数
|
|
27
27
|
|
|
28
|
-
##
|
|
28
|
+
## 例外情况
|
|
29
29
|
- 小数据量(< 100 条)可同步导入,直接返回结果
|
|
30
30
|
- 参考数据(字典、配置)导入可简化校验
|
|
31
31
|
- 系统管理员导出数据可以绕过数据权限,但必须有审批流程
|
|
@@ -6,19 +6,29 @@ scope: [backend]
|
|
|
6
6
|
products: ["*"]
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## 业务规则
|
|
10
|
+
1. 幂等:同一请求多次执行结果必须一致,适用于 PUT/DELETE 接口、支付回调、消息消费等场景
|
|
11
|
+
2. 乐观锁:基于版本号(version 字段)的并发控制,更新时必须校验版本号,冲突时抛出业务异常而非静默覆盖
|
|
12
|
+
3. 软删除:标记删除(is_deleted / deleted_at)而非物理删除,适用于有审计要求或可恢复需求的数据
|
|
13
|
+
4. 硬删除:物理移除数据,仅适用于临时数据、可重建数据、日志明细等无审计要求的场景
|
|
14
|
+
5. 级联:主记录变更自动传递到子记录(如主表状态变更联动子表),必须明确级联范围,禁止无限制级联
|
|
15
|
+
6. 可恢复删除:删除后可在一定窗口内恢复(如回收站机制),窗口期到期后自动物理删除或归档
|
|
16
|
+
7. 补偿:正向操作失败时执行反向操作,用于分布式事务 saga 模式,补偿操作本身也必须幂等
|
|
10
17
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
| 可恢复删除 | 删除后可在一定窗口内恢复 | 回收站、误删保护 |
|
|
19
|
-
| 补偿 | 正向操作失败时执行反向操作 | 分布式事务、saga 模式 |
|
|
18
|
+
## 约束条件
|
|
19
|
+
- 需求中出现上述条款时必须明确其在本项目中的具体实现语义,不得假设"大家都懂"
|
|
20
|
+
- 机械条款的选择属于裁决(团队决策),不属于需求事实,必须在需求澄清阶段确认
|
|
21
|
+
- 幂等字段必须建立唯一索引(如支付流水号、消息 ID),依赖数据库约束保证幂等性
|
|
22
|
+
- 乐观锁 version 字段禁止在 DTO 中暴露给前端,仅服务端内部使用
|
|
23
|
+
- 软删除的查询必须全局过滤已删除记录(MyBatis 拦截器或全局 scope),禁止每条 SQL 手动加条件
|
|
24
|
+
- 级联删除必须在 Entity 层配置(如 @OneToMany(cascade = CascadeType.REMOVE)),禁止在 Service 层手动循环删除
|
|
20
25
|
|
|
21
|
-
##
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
26
|
+
## 例外情况
|
|
27
|
+
- 日志明细、临时文件等可重建数据允许硬删除
|
|
28
|
+
- 数据迁移期间可临时绕过乐观锁,但必须记录变更并事后审计
|
|
29
|
+
- 性能敏感的批量操作(如定时任务清理)可绕过软删除全局过滤,但须显式声明
|
|
30
|
+
|
|
31
|
+
## 关联模式
|
|
32
|
+
- [[concurrency-control]] 并发控制实现模式
|
|
33
|
+
- [[transaction-pattern]] 事务与补偿模式
|
|
34
|
+
- crud-operation
|
|
@@ -20,7 +20,7 @@ description: 写操作 Service 方法必须标注 @Transactional(rollbackFor = E
|
|
|
20
20
|
|
|
21
21
|
## API-03: 接口缺少权限注解
|
|
22
22
|
pattern: "@(PostMapping|PutMapping|DeleteMapping)"
|
|
23
|
-
severity:
|
|
23
|
+
severity: critical
|
|
24
24
|
scope: backend
|
|
25
25
|
description: 写接口必须有 @PreAuthorize 或 @Secured 注解,禁止裸露写操作
|
|
26
26
|
|
|
@@ -20,7 +20,7 @@ description: Controller 返回类型禁止使用 Entity,必须通过 DTO/VO
|
|
|
20
20
|
|
|
21
21
|
## ARC-03: 缺少 @Transactional 注解的写操作
|
|
22
22
|
pattern: /public\s+\w+\s+(?:save|create|update|delete|insert|remove)\w*\s*\(/
|
|
23
|
-
severity:
|
|
23
|
+
severity: critical
|
|
24
24
|
scope: backend
|
|
25
25
|
description: 写操作 Service 方法必须标注 @Transactional(rollbackFor = Exception.class)
|
|
26
26
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|