soloforge 1.4.5 → 1.4.6
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/README.md +1 -1
- package/dist/bin/soloforge.js +11 -1
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/design_artifact_pack.d.ts.map +1 -1
- package/dist/engine/design_artifact_pack.js +10 -0
- package/dist/engine/design_artifact_pack.js.map +1 -1
- package/dist/engine/design_lifecycle_contract.d.ts +1 -1
- package/dist/engine/design_lifecycle_contract.d.ts.map +1 -1
- package/dist/engine/design_lifecycle_contract.js +3 -1
- package/dist/engine/design_lifecycle_contract.js.map +1 -1
- package/dist/engine/next_action_planner.d.ts.map +1 -1
- package/dist/engine/next_action_planner.js +87 -18
- package/dist/engine/next_action_planner.js.map +1 -1
- package/dist/engine/project_knowledge_contract.d.ts.map +1 -1
- package/dist/engine/project_knowledge_contract.js +35 -16
- package/dist/engine/project_knowledge_contract.js.map +1 -1
- package/dist/engine/traceability.d.ts.map +1 -1
- package/dist/engine/traceability.js +8 -1
- package/dist/engine/traceability.js.map +1 -1
- package/dist/knowledge/conflict_detector.d.ts.map +1 -1
- package/dist/knowledge/conflict_detector.js +18 -16
- package/dist/knowledge/conflict_detector.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -158,7 +158,7 @@ soloforge migrate --apply --confirm # 确认后迁移
|
|
|
158
158
|
|
|
159
159
|
- **架构设计** — 让 AI 设计架构时,会生成结构化方案(含架构边界、技术栈、模块关系),输出目录会先征求你确认,不会自作主张写到你不想放的位置。
|
|
160
160
|
- **决策研讨** — 高影响或不确定任务会先进入决策研讨,而不是直接生成方案或代码。架构设计会覆盖业务流程、数据架构、安全架构、后端架构、前端架构、基础设施六类架构决策;技术选型、数据迁移、安全策略、部署、产品范围、重构和第三方集成等任务会展开对应决策包。必要决策未确认时,不会把草案冒充正式结论。
|
|
161
|
-
- **设计产物包** — 架构设计、数据库设计、API 规格不再各自漂移。标准产物包包含 `docs/architecture/00-架构决策记录.md`、`01-架构设计文档.md`、`02-数据库设计文档.md`、`03-API接口规格文档.md`、`04-开发切片计划.md`、`99-设计一致性验收报告.md`、`docs/traceability/01-需求原型设计实现追踪矩阵.md`、`docs/api/openapi.yaml` 和 `db/migration`/`db/migrations`/`db/schema`/`db/changelog` 下的数据库结构资产。`04-详细设计文档.md` 只是旧项目或复杂模块的可选补充,不是必需详细设计载体;旧的 `04-第一阶段开发切片计划.md`
|
|
161
|
+
- **设计产物包** — 架构设计、数据库设计、API 规格不再各自漂移。标准产物包包含 `docs/architecture/00-架构决策记录.md`、`01-架构设计文档.md`、`02-数据库设计文档.md`、`03-API接口规格文档.md`、`04-开发切片计划.md`、`99-设计一致性验收报告.md`、`docs/traceability/01-需求原型设计实现追踪矩阵.md`、`docs/api/openapi.yaml` 和 `db/migration`/`db/migrations`/`db/schema`/`db/changelog` 下的数据库结构资产。`04-详细设计文档.md` 只是旧项目或复杂模块的可选补充,不是必需详细设计载体;旧的 `04-第一阶段开发切片计划.md` 会作为兼容别名读取并给出迁移提示,正式权威路径仍应迁移为 `04-开发切片计划.md`。
|
|
162
162
|
- **全链路追踪矩阵** — 需求、原型、架构、详细设计、阶段、切片、实现、测试和验收使用两位数 ID 绑定,例如 `REQ-01`、`PROTO-01`、`ARCH-01`、`DD-T01`、`DD-A01`、`PHASE-01`、`SLICE-01`、`AC-01`。编码任务必须能绑定 `PHASE-*`、`SLICE-*`、`DD-*` 和 `AC-*`,不能只说“已按设计实现”。
|
|
163
163
|
- **标准资产契约** — 模板、规则、流程、验收清单、审查规则、脚手架和 adapter workflow 不是“参考文件”。SoloForge 会按资产契约检查正式产物的章节、字段表、权威资产、适用技术栈和修复重验状态;API 文档必须有每个接口的请求/响应字段说明表,数据库/API Markdown 必须绑定 SQL/OpenAPI 权威资产。
|
|
164
164
|
- **模板可见性** — 内部治理资产可以随 npm 包发布,供 SoloForge runtime、审计和发布门禁使用,但不会同步到用户项目,也不会注入到 AI prompt。用户项目只获得可见且适用的知识资产;脚手架只由脚手架命令消费,不进入知识索引;不匹配技术栈的内置脚手架不会 fallback 生成。
|
package/dist/bin/soloforge.js
CHANGED
|
@@ -1076,6 +1076,7 @@ async function cmdValidate() {
|
|
|
1076
1076
|
}
|
|
1077
1077
|
// 使用共享函数验证配置优先级
|
|
1078
1078
|
let hasHardFail = false;
|
|
1079
|
+
const hardFailSources = new Set();
|
|
1079
1080
|
try {
|
|
1080
1081
|
const { reports, entries } = await resolveCurrentProjectConfigReports(projectPath);
|
|
1081
1082
|
const findings = validateConfigPrecedence(reports, entries);
|
|
@@ -1083,6 +1084,7 @@ async function cmdValidate() {
|
|
|
1083
1084
|
const advisory = findings.filter(f => f.severity === "advisory");
|
|
1084
1085
|
if (hardFails.length > 0) {
|
|
1085
1086
|
hasHardFail = true;
|
|
1087
|
+
hardFailSources.add("配置优先级");
|
|
1086
1088
|
userInfo(`❌ 配置优先级: ${hardFails.length} hard_fail`);
|
|
1087
1089
|
for (const f of hardFails) {
|
|
1088
1090
|
userInfo(` - [${f.rule}] ${f.field_path ?? "N/A"}: ${f.message}`);
|
|
@@ -1117,6 +1119,7 @@ async function cmdValidate() {
|
|
|
1117
1119
|
userInfo(` - [${f.kind}] ${f.message_zh}`);
|
|
1118
1120
|
}
|
|
1119
1121
|
hasHardFail = true;
|
|
1122
|
+
hardFailSources.add("知识治理");
|
|
1120
1123
|
}
|
|
1121
1124
|
else {
|
|
1122
1125
|
userInfo(`✅ 知识治理检查: ${kgReport.warning_count} warning, 0 hard_fail`);
|
|
@@ -1155,6 +1158,7 @@ async function cmdValidate() {
|
|
|
1155
1158
|
}
|
|
1156
1159
|
}
|
|
1157
1160
|
hasHardFail = true;
|
|
1161
|
+
hardFailSources.add("项目知识承载");
|
|
1158
1162
|
}
|
|
1159
1163
|
else {
|
|
1160
1164
|
userInfo(`✅ 项目知识承载: ${pkReport.total} 条,${pkReport.injectable} 条可注入,${pkReport.index_only} 条仅索引,0 hard_fail`);
|
|
@@ -1169,6 +1173,7 @@ async function cmdValidate() {
|
|
|
1169
1173
|
for (const v of extResult.violations)
|
|
1170
1174
|
userInfo(` - ${v}`);
|
|
1171
1175
|
hasHardFail = true;
|
|
1176
|
+
hardFailSources.add("扩展清单");
|
|
1172
1177
|
}
|
|
1173
1178
|
else {
|
|
1174
1179
|
userInfo(" ✓ 扩展清单校验通过");
|
|
@@ -1194,6 +1199,7 @@ async function cmdValidate() {
|
|
|
1194
1199
|
if (platformReport.platform_compatibility_status === "blocked") {
|
|
1195
1200
|
userInfo(` ✗ 平台兼容性阻断: ${platformReport.issues_found.join(", ")}`);
|
|
1196
1201
|
hasHardFail = true;
|
|
1202
|
+
hardFailSources.add("平台兼容性");
|
|
1197
1203
|
}
|
|
1198
1204
|
else {
|
|
1199
1205
|
userInfo(` ✓ 平台兼容性检查: ${platformReport.platform_compatibility_status}`);
|
|
@@ -1220,6 +1226,7 @@ async function cmdValidate() {
|
|
|
1220
1226
|
for (const hf of hardFails)
|
|
1221
1227
|
userInfo(` - ${hf.message_zh}`);
|
|
1222
1228
|
hasHardFail = true;
|
|
1229
|
+
hardFailSources.add("README 命令漂移");
|
|
1223
1230
|
}
|
|
1224
1231
|
else if (warnings.length > 0) {
|
|
1225
1232
|
userInfo(" ⚠ README 命令漂移警告:");
|
|
@@ -1291,6 +1298,7 @@ async function cmdValidate() {
|
|
|
1291
1298
|
if (tsHardFail) {
|
|
1292
1299
|
userError(`❌ 测试策略覆盖验证失败: ${tsChecked} 个已检查, ${tsPending} 个元数据缺失`);
|
|
1293
1300
|
hasHardFail = true;
|
|
1301
|
+
hardFailSources.add("测试策略覆盖");
|
|
1294
1302
|
}
|
|
1295
1303
|
else {
|
|
1296
1304
|
userInfo(`✅ 测试策略覆盖: 已检查 ${tsChecked} 个 enforced 契约`);
|
|
@@ -1299,6 +1307,7 @@ async function cmdValidate() {
|
|
|
1299
1307
|
catch (e) {
|
|
1300
1308
|
userError(`❌ 测试策略验证异常: ${e.message}`);
|
|
1301
1309
|
hasHardFail = true;
|
|
1310
|
+
hardFailSources.add("测试策略覆盖");
|
|
1302
1311
|
}
|
|
1303
1312
|
} // 双层机制检查结束
|
|
1304
1313
|
try {
|
|
@@ -1314,7 +1323,8 @@ async function cmdValidate() {
|
|
|
1314
1323
|
userInfo(` ⚠ 导航摘要异常: ${e instanceof Error ? e.message : String(e)}`);
|
|
1315
1324
|
}
|
|
1316
1325
|
if (hasHardFail) {
|
|
1317
|
-
|
|
1326
|
+
const sources = hardFailSources.size > 0 ? Array.from(hardFailSources).join("、") : "校验项";
|
|
1327
|
+
userError(`❌ validate 失败: ${sources} 存在 hard_fail`);
|
|
1318
1328
|
process.exit(1);
|
|
1319
1329
|
}
|
|
1320
1330
|
}
|