@praxisflux/gates 0.6.4 → 0.6.5
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/package.json +1 -1
- package/spec-bridge/gates/bridge.mjs +19 -0
package/package.json
CHANGED
|
@@ -119,6 +119,25 @@ export function checkBridge(root) {
|
|
|
119
119
|
warnings.push(
|
|
120
120
|
`[spec-bridge] ${task.id} is "${task.status}" but ${task.specDir} already derives "${derived.status}" — run the spec-bridge sync skill to catch the board up.`
|
|
121
121
|
);
|
|
122
|
+
} else if (
|
|
123
|
+
// Strict-mode near-miss: the status is honest ("ok"), every checkbox is checked, and
|
|
124
|
+
// the ONLY thing between this task and Done-eligible is the analysis requirement.
|
|
125
|
+
// Without this notice the state is silent — Done is out of reach and nothing says so
|
|
126
|
+
// until someone thinks to run `state`. Warn (the warn channel), never block.
|
|
127
|
+
v === "ok" &&
|
|
128
|
+
derived.analysis?.required &&
|
|
129
|
+
derived.status !== STATUS.DONE_ELIGIBLE &&
|
|
130
|
+
derived.tasksTotal > 0 &&
|
|
131
|
+
derived.tasksDone === derived.tasksTotal &&
|
|
132
|
+
existsSync(join(root, task.specDir, "plan.md"))
|
|
133
|
+
) {
|
|
134
|
+
const a = derived.analysis;
|
|
135
|
+
warnings.push(
|
|
136
|
+
`[spec-bridge] ${task.id}: all ${derived.tasksTotal} spec tasks checked; Done blocked by strict mode: ` +
|
|
137
|
+
(!a.present
|
|
138
|
+
? "analysis.md missing — run /speckit.analyze and save its report as " + `${task.specDir}/analysis.md`
|
|
139
|
+
: `unresolved CRITICAL finding(s) in analysis.md: ${a.criticals.join(" | ")}`)
|
|
140
|
+
);
|
|
122
141
|
}
|
|
123
142
|
}
|
|
124
143
|
return { links, problems, warnings };
|