@miraland-labs/conduit-bridge 0.14.5 → 0.14.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/dist/driver.js +17 -2
- package/dist/execution.js +23 -1
- package/package.json +1 -1
package/dist/driver.js
CHANGED
|
@@ -227,7 +227,18 @@ export function parseAgentReport(text, acceptance) {
|
|
|
227
227
|
if (new Set(reported).size !== reported.length || acceptance.some((criterion) => !reported.includes(criterion))) {
|
|
228
228
|
throw new Error("Agent report must include every acceptance criterion exactly once");
|
|
229
229
|
}
|
|
230
|
-
|
|
230
|
+
// Missing evidence mappings cannot support a "met" claim. Preserve the evidence itself, but
|
|
231
|
+
// downgrade only the unsupported result to unknown so the existing quality loop can assess the
|
|
232
|
+
// completed work instead of throwing the whole implementation away.
|
|
233
|
+
const mappedCriteria = new Set(parsed.data.evidence.flatMap((item) => item.acceptance_criteria));
|
|
234
|
+
return {
|
|
235
|
+
...parsed.data,
|
|
236
|
+
acceptance_results: parsed.data.acceptance_results.map((item) => ({
|
|
237
|
+
...item,
|
|
238
|
+
status: item.status === "met" && !mappedCriteria.has(item.criterion) ? "unknown" : item.status,
|
|
239
|
+
evidence_artifact_ids: [],
|
|
240
|
+
})),
|
|
241
|
+
};
|
|
231
242
|
}
|
|
232
243
|
/**
|
|
233
244
|
* Artifact publication receipts require `sha256:<64 hex>`. Agents often paste bare `shasum` output;
|
|
@@ -266,7 +277,11 @@ function sanitizeReportShape(raw) {
|
|
|
266
277
|
const evidence = item;
|
|
267
278
|
if ("details" in evidence)
|
|
268
279
|
evidence.details = cleanList(evidence.details);
|
|
269
|
-
|
|
280
|
+
// Experimental lanes have repeatedly omitted this list on otherwise-useful test evidence.
|
|
281
|
+
// An empty mapping asserts nothing; later logic downgrades any now-unsupported "met" result.
|
|
282
|
+
if (!("acceptance_criteria" in evidence) || evidence.acceptance_criteria == null)
|
|
283
|
+
evidence.acceptance_criteria = [];
|
|
284
|
+
else
|
|
270
285
|
evidence.acceptance_criteria = cleanList(evidence.acceptance_criteria);
|
|
271
286
|
// Agents emit null/"" for optional fields they have no value for — treat as absent.
|
|
272
287
|
if ("digest" in evidence && (typeof evidence.digest !== "string" || evidence.digest.trim() === ""))
|
package/dist/execution.js
CHANGED
|
@@ -912,7 +912,29 @@ async function runClaimedAssignment(client, config, driver, workspace, brief, ta
|
|
|
912
912
|
catch (repairError) {
|
|
913
913
|
parseError = repairError instanceof Error ? repairError.message : "Repaired delivery report was invalid";
|
|
914
914
|
if (repairTurn >= maxRepairs) {
|
|
915
|
-
|
|
915
|
+
const detail = `Delivery report repair exhausted: ${parseError}`;
|
|
916
|
+
// Implementation finished; only its response envelope is invalid. Preserve the exact
|
|
917
|
+
// tree and identify this narrow condition so the control plane can prepare repair
|
|
918
|
+
// guidance instead of discarding the work and asking the owner to debug JSON.
|
|
919
|
+
retainAttemptWorktree = true;
|
|
920
|
+
const response = await queueTerminal(client, taskId, {
|
|
921
|
+
action: "fail",
|
|
922
|
+
body: {
|
|
923
|
+
error: detail,
|
|
924
|
+
retryable: false,
|
|
925
|
+
failure: {
|
|
926
|
+
code: "delivery_report_invalid",
|
|
927
|
+
class: "contract",
|
|
928
|
+
disposition: "rework",
|
|
929
|
+
responsible_party: "conduit",
|
|
930
|
+
message: "Conduit could not prepare a valid delivery report from the completed agent run.",
|
|
931
|
+
next_action: "Conductor will prepare bounded recovery guidance. You do not need to edit technical constraints.",
|
|
932
|
+
diagnostic_detail: detail,
|
|
933
|
+
},
|
|
934
|
+
idempotency_key: `bridge:delivery-repair-invalid:${active.attemptId}`,
|
|
935
|
+
},
|
|
936
|
+
});
|
|
937
|
+
retainAttemptWorktree = retainDiagnosticWorktree(response);
|
|
916
938
|
console.error(`Assignment ${taskId} exhausted its report-only repair: ${redactSecrets(parseError)}`);
|
|
917
939
|
const replyTail = previousReply.slice(-8_000);
|
|
918
940
|
console.error(`Assignment ${taskId} repaired reply tail (${previousReply.length} chars total, redacted): ${redactSecrets(replyTail) || "<empty>"}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@miraland-labs/conduit-bridge",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.6",
|
|
4
4
|
"description": "Conduit Bridge CLI — join, connect, disconnect, multi-driver lanes, and run Claude Code / Codex / Cursor / OpenCode / Pi / Kiro / Antigravity agents for a Conduit organization",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|