@miraland-labs/conduit-bridge 0.16.103 → 0.16.104

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.
@@ -45,14 +45,24 @@ export function pickVerificationCommand(commands) {
45
45
  * a declared gate neither dry-run nor witnessed unless an acceptance criterion happened to name it.
46
46
  * So the declared gates run beside the aggregate, in declared order, de-duplicated.
47
47
  */
48
- export function verificationEvidenceCommands(commands, declared = []) {
48
+ export function verificationEvidenceCommands(commands, declared = [], acceptance = null) {
49
49
  const bounded = [...new Set(commands
50
50
  .map((command) => command.trim())
51
51
  .filter((command) => command && isRunnableVerificationCommand(command)))];
52
+ const declaredGates = bounded.filter((command) => declared.some((line) => line.trim() === command));
53
+ // T191: the gate is what the project declared for itself plus what the contract will be judged
54
+ // on — the commands its acceptance criteria name. Every other discovered script (this repository's
55
+ // ten-minute `npm run verify` for a docs change judged on `npm run typecheck`) is a candidate the
56
+ // planner may name, not a gate the Bridge runs unasked. When the criteria name no command the
57
+ // discovered rule below decides, as before (T31: a declared gate runs beside the aggregate).
58
+ if (acceptance !== null) {
59
+ const named = acceptanceVerificationCommands([...acceptance], commands).commands;
60
+ if (named.length)
61
+ return [...new Set([...declaredGates, ...named])];
62
+ }
52
63
  const aggregate = bounded.find((command) => /^(?:npm run|pnpm|yarn) verify$|^make check$/.test(command));
53
64
  if (!aggregate)
54
65
  return bounded;
55
- const declaredGates = bounded.filter((command) => declared.some((line) => line.trim() === command));
56
66
  return [...new Set([...declaredGates, aggregate])];
57
67
  }
58
68
  /**
@@ -475,7 +485,7 @@ export async function ensureTestEvidence(input) {
475
485
  // The project's gate first, then every bounded command the criteria name that the workspace
476
486
  // authorizes. Each is witnessed on its own, so the reviewer sees the criterion's own proof.
477
487
  const commands = [...new Set([
478
- ...verificationEvidenceCommands(input.verificationCommands, input.declaredVerificationCommands ?? []),
488
+ ...verificationEvidenceCommands(input.verificationCommands, input.declaredVerificationCommands ?? [], acceptance),
479
489
  ...named.commands,
480
490
  ])];
481
491
  if (commands.length === 0) {
package/dist/execution.js CHANGED
@@ -1285,7 +1285,7 @@ async function runAttempt(client, config, driver, workspace, brief, taskId, watc
1285
1285
  await removeReleasedDiagnosticWorktree(response);
1286
1286
  return;
1287
1287
  }
1288
- const evidenceCommands = verificationEvidenceCommands(attemptBrief?.verification ?? [], attemptBrief?.declared_verification ?? []);
1288
+ const evidenceCommands = verificationEvidenceCommands(attemptBrief?.verification ?? [], attemptBrief?.declared_verification ?? [], spec.acceptance ?? []);
1289
1289
  // Ahead of the dry run and of the model: the contract requires test evidence and this worktree
1290
1290
  // offers no command that can witness it. Every fact is known here — the required evidence, the
1291
1291
  // test_run grant, the attempt worktree's own gates — and the same question was asked only after
@@ -1323,6 +1323,7 @@ async function runAttempt(client, config, driver, workspace, brief, taskId, watc
1323
1323
  workspace: attemptWorkspace,
1324
1324
  verificationCommands: attemptBrief?.verification ?? [],
1325
1325
  declaredVerificationCommands: attemptBrief?.declared_verification ?? [],
1326
+ acceptance: spec.acceptance ?? [],
1326
1327
  changeScope: spec.change_scope ?? [],
1327
1328
  });
1328
1329
  if (dryRun.ranNothing) {
@@ -2791,7 +2792,7 @@ export function verificationScopeConflictDetail(paths, changeScope) {
2791
2792
  * discarded before the agent starts, so the agent always begins in the tree of the base commit.
2792
2793
  */
2793
2794
  export async function verificationScopeDryRun(input) {
2794
- const commands = verificationEvidenceCommands(input.verificationCommands, input.declaredVerificationCommands ?? []);
2795
+ const commands = verificationEvidenceCommands(input.verificationCommands, input.declaredVerificationCommands ?? [], input.acceptance ?? null);
2795
2796
  if (!commands.length)
2796
2797
  return { ranNothing: null, redBase: null, outsideScope: [] };
2797
2798
  const run = input.runCommand ?? runBoundedVerificationCommand;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miraland-labs/conduit-bridge",
3
- "version": "0.16.103",
3
+ "version": "0.16.104",
4
4
  "description": "Conduit Bridge CLI \u2014 join, connect, disconnect, multi-driver lanes, and run Claude Code / Codex / Cursor / OpenCode / Pi / Kiro / Antigravity / Grok Build agents for a Conduit organization",
5
5
  "type": "module",
6
6
  "bin": {