abelien-harness 0.20.0 → 0.20.1

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "abelien-harness",
3
- "version": "0.20.0",
3
+ "version": "0.20.1",
4
4
  "description": "npx-installable multi-agent skill harness: generic kernel + pluggable domain packs",
5
5
  "type": "module",
6
6
  "engines": {
@@ -1251,7 +1251,10 @@ export function createRuntime(options) {
1251
1251
  async function deliverReceipt(receipt, { result } = {}) {
1252
1252
  const op = await ledger.getOperation({ tenant_id: receipt.tenant_id }, receipt.operation_id);
1253
1253
  if (!op) throw runtimeError("NOT_FOUND", `receipt ${receipt.receipt_id} names an unknown operation`);
1254
- if (receipt.outcome === "failed" && (receipt.error?.category === "unknown" || receipt.error?.recovery?.action === "reconcile"))
1254
+ // A model step has no query (MODEL_BINDING): nothing can reconcile it, so the host's unknown verdict is final and blocks the step.
1255
+ // Only actions take the unknown → reconcile path.
1256
+ if (receipt.outcome === "failed" && op.identity.action_id !== MODEL_BINDING.action_id
1257
+ && (receipt.error?.category === "unknown" || receipt.error?.recovery?.action === "reconcile"))
1255
1258
  throw runtimeError("RECEIPT_INVALID", "an unknown outcome is a reconciliation diagnostic, not a confirmed failure receipt");
1256
1259
  if (receipt.outcome === "succeeded") {
1257
1260
  if (digest(normalize(result)) !== receipt.result_digest) throw runtimeError("RECEIPT_INVALID", "receipt result does not match result_digest");
@@ -25,7 +25,7 @@ export { interpolate, findWorkflow, loadWorkflow, workflowDefinitionDigest, pars
25
25
  // doctor must report the shipped package version, never a frozen constant (0.2.3 drifted across
26
26
  // six releases). The npm tree always ships package.json at the skill root; standalone skill copies
27
27
  // fall back to FALLBACK_VERSION, which scripts/release-check.mjs pins to package.json.
28
- const FALLBACK_VERSION = "0.20.0";
28
+ const FALLBACK_VERSION = "0.20.1";
29
29
  export let VERSION = FALLBACK_VERSION;
30
30
  try {
31
31
  VERSION = String(JSON.parse(fs.readFileSync(new URL("../../../package.json", import.meta.url), "utf8")).version || FALLBACK_VERSION);