opencode-swarm 7.199.5 → 7.200.0

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.
Files changed (106) hide show
  1. package/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
  2. package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
  3. package/dist/cli/attest-task-8ekwny8v.js +2209 -0
  4. package/dist/cli/{auto-checkpoint-tje4xvtw.js → auto-checkpoint-dqjk82s7.js} +9 -9
  5. package/dist/cli/{checkpoint-wyh8nkhb.js → checkpoint-2ahps2sp.js} +17 -17
  6. package/dist/cli/{coder-settlement-d0ca5fb3.js → coder-settlement-1dk37pa9.js} +12 -12
  7. package/dist/cli/{config-doctor-swg02esj.js → config-doctor-73rctg85.js} +16 -16
  8. package/dist/cli/{core-yh8ae69m.js → core-y5mfws8v.js} +3 -3
  9. package/dist/cli/{curation-policy-w9y0db1n.js → curation-policy-43gq6t0y.js} +6 -6
  10. package/dist/cli/{curator-drift-85qect05.js → curator-drift-k7j9rcgp.js} +8 -8
  11. package/dist/cli/curator-llm-factory-rke0964p.js +82 -0
  12. package/dist/cli/{curator-9vzqhesg.js → curator-m278hyrq.js} +43 -43
  13. package/dist/cli/{doctor-knowledge-receipt-phase-id-eqzsh3b7.js → doctor-knowledge-receipt-phase-id-1m7pkzvt.js} +9 -9
  14. package/dist/cli/{evidence-summary-service-hc513kyq.js → evidence-summary-service-19k8x1g9.js} +20 -20
  15. package/dist/cli/{gate-evidence-a10epye0.js → gate-evidence-hche0hf8.js} +15 -7
  16. package/dist/cli/guardrail-explain-jg5png4a.js +83 -0
  17. package/dist/cli/{guardrail-log-caspzygc.js → guardrail-log-tvbgnxns.js} +7 -7
  18. package/dist/cli/{guardrail-reset-48r2n8mz.js → guardrail-reset-v8kvh9cn.js} +43 -43
  19. package/dist/cli/{hive-promoter-sd3a61mq.js → hive-promoter-bqfa763z.js} +43 -43
  20. package/dist/cli/{index-hx2f3j9w.js → index-0wg5q595.js} +2 -2
  21. package/dist/cli/{index-6xv2hz0e.js → index-1rfgzsaw.js} +4 -4
  22. package/dist/cli/{index-zbygz217.js → index-1tpz99db.js} +2 -2
  23. package/dist/cli/{index-xtda4xsn.js → index-22atsy06.js} +6 -6
  24. package/dist/cli/{index-gyz59cbh.js → index-35tf03js.js} +21 -14
  25. package/dist/cli/{index-gx2vp8gx.js → index-3t46mez1.js} +27 -1
  26. package/dist/cli/{index-b0kr8720.js → index-511hw14d.js} +47 -45
  27. package/dist/cli/{index-yg5xd4am.js → index-58cr1xg0.js} +172 -14
  28. package/dist/cli/{index-6xyt6d5m.js → index-71bqn1nn.js} +7 -7
  29. package/dist/cli/{index-ybvnf7rt.js → index-7v74n9a1.js} +12 -8
  30. package/dist/cli/{index-4cyc18bc.js → index-8a3aasag.js} +7 -7
  31. package/dist/cli/{index-my753e0g.js → index-8rrs1nc0.js} +3 -3
  32. package/dist/cli/{index-j3rfbs45.js → index-99zt998b.js} +2 -2
  33. package/dist/cli/{index-76skvj8z.js → index-9nmrw7ek.js} +3 -3
  34. package/dist/cli/{index-jmhn6ab5.js → index-ac8vdmgv.js} +2 -2
  35. package/dist/cli/{index-eyq1q1xn.js → index-bp476gwc.js} +2 -2
  36. package/dist/cli/{index-dtwj4hsk.js → index-c2k7q723.js} +2 -2
  37. package/dist/cli/{index-snx2vb1x.js → index-d083d1q7.js} +1 -1
  38. package/dist/cli/{index-n1ddn12j.js → index-dng8z8me.js} +1 -1
  39. package/dist/cli/{index-85vd6sxy.js → index-e8m8bb1r.js} +4 -4
  40. package/dist/cli/{index-3ckvw3j2.js → index-gwc7jahh.js} +1 -1
  41. package/dist/cli/{index-26dmsdx3.js → index-hg4qa0aq.js} +2704 -2208
  42. package/dist/cli/{index-zte3djpf.js → index-hxp5jgd8.js} +2 -2
  43. package/dist/cli/{index-0aj9tvms.js → index-jbm301bq.js} +43 -43
  44. package/dist/cli/{index-0veqvgny.js → index-jy0mgzjq.js} +1 -1
  45. package/dist/cli/{index-esakwcr3.js → index-kwfhr3mz.js} +1 -1
  46. package/dist/cli/{index-0ra0vs2p.js → index-m9j9varx.js} +3 -3
  47. package/dist/cli/{index-3fz5w2wb.js → index-md2180vx.js} +3 -3
  48. package/dist/cli/{index-bgydmx8k.js → index-n5k81wym.js} +7 -7
  49. package/dist/cli/{index-0je0mees.js → index-nq3zcrhm.js} +1 -1
  50. package/dist/cli/{index-xyg7des8.js → index-p5m71yph.js} +4 -4
  51. package/dist/cli/{index-p5d32v0x.js → index-pyv8vzkx.js} +6 -6
  52. package/dist/cli/{index-270zfq1f.js → index-q1x73nnd.js} +6 -6
  53. package/dist/cli/{index-dz15f98h.js → index-q8vfw61p.js} +1 -1
  54. package/dist/cli/{index-10wwrgj2.js → index-qnabg1wp.js} +6 -6
  55. package/dist/cli/{index-9n40q82y.js → index-qnst0jwc.js} +3 -3
  56. package/dist/cli/{index-tsg61z0r.js → index-r02aqt0a.js} +2 -2
  57. package/dist/cli/{index-4pbzepgw.js → index-rfvnq6wd.js} +10 -10
  58. package/dist/cli/{index-9c0vp5yj.js → index-sk1rva12.js} +2 -2
  59. package/dist/cli/{index-v4mremxw.js → index-tv9c3b3q.js} +4 -4
  60. package/dist/cli/{index-9y6yk1n0.js → index-vmevv6my.js} +1 -1
  61. package/dist/cli/{index-zdfzrwbk.js → index-vqtca3xv.js} +2 -2
  62. package/dist/cli/{index-34jat4f2.js → index-wfb6vrc2.js} +2 -2
  63. package/dist/cli/{index-3mzc5rqc.js → index-wr0n2w3z.js} +3 -3
  64. package/dist/cli/{index-b3ws03kp.js → index-x1z5d5kj.js} +1 -1
  65. package/dist/cli/{index-d7y3cafq.js → index-x25rhkmk.js} +6 -6
  66. package/dist/cli/{index-6ssraqaa.js → index-yss701b3.js} +5 -5
  67. package/dist/cli/{index-dengtwpp.js → index-yvv0my1a.js} +1 -1
  68. package/dist/cli/index.js +44 -44
  69. package/dist/cli/{knowledge-escalator-9wqe0m8j.js → knowledge-escalator-qcra58bx.js} +15 -15
  70. package/dist/cli/{knowledge-events-m5vdchaa.js → knowledge-events-9mnx1a3f.js} +13 -13
  71. package/dist/cli/{knowledge-link-t0ce3mw7.js → knowledge-link-2jsn9f6a.js} +5 -5
  72. package/dist/cli/{knowledge-store-ff4hy057.js → knowledge-store-fdneqf7z.js} +6 -6
  73. package/dist/cli/{knowledge-validator-erj5thtq.js → knowledge-validator-7nj987ga.js} +8 -8
  74. package/dist/cli/{mcp-d0hz5gfp.js → mcp-0g34wmz4.js} +1 -1
  75. package/dist/cli/{model-preflight-p34x0k25.js → model-preflight-g11ykgc0.js} +43 -43
  76. package/dist/cli/{pending-delegations-1j6dx1mf.js → pending-delegations-5vme18wx.js} +13 -13
  77. package/dist/cli/{pr-subscriptions-b1g41jce.js → pr-subscriptions-cbx5p838.js} +12 -12
  78. package/dist/cli/{pr-workflow-gate-zjwt050h.js → pr-workflow-gate-376gw6yj.js} +43 -43
  79. package/dist/cli/{runner-wq954cda.js → runner-vvd26z2z.js} +6 -6
  80. package/dist/cli/{scan-cursor-enz1rp21.js → scan-cursor-x3j5wvfm.js} +7 -7
  81. package/dist/cli/{schema-9r8sggpb.js → schema-d98zzrpn.js} +1 -1
  82. package/dist/cli/{scope-persistence-c5n4g9f0.js → scope-persistence-vkb8z4hc.js} +16 -16
  83. package/dist/cli/{server-8z7pd66d.js → server-25svy6cb.js} +45 -45
  84. package/dist/cli/{skill-generator-nezzfa0t.js → skill-generator-ktz33dt6.js} +17 -17
  85. package/dist/cli/{snapshot-coordination-init-2j06c7ck.js → snapshot-coordination-init-74x3psxc.js} +43 -43
  86. package/dist/cli/{speckit-checkoff-805cqmrf.js → speckit-checkoff-9t6cdn4a.js} +4 -4
  87. package/dist/cli/{telemetry-gena5typ.js → telemetry-cr8q16wk.js} +1 -1
  88. package/dist/cli/{workspace-snapshot-hzhz0rxw.js → workspace-snapshot-afqvh9bq.js} +3 -3
  89. package/dist/cli/{worktree-collision-ownership-xpr0yv7h.js → worktree-collision-ownership-7a1n1f9j.js} +14 -14
  90. package/dist/cli/{worktree-isolation-z6ytes0j.js → worktree-isolation-8snw7w34.js} +43 -43
  91. package/dist/commands/attest.d.ts +10 -0
  92. package/dist/commands/index.d.ts +1 -0
  93. package/dist/commands/registry.d.ts +8 -0
  94. package/dist/config/plan-schema.d.ts +44 -0
  95. package/dist/gate-evidence.d.ts +138 -1
  96. package/dist/host/v2/guidance.d.ts +7 -0
  97. package/dist/index.js +561 -557
  98. package/dist/tools/attest-task.d.ts +67 -0
  99. package/dist/tools/phase-complete.d.ts +12 -0
  100. package/dist/tools/save-plan.d.ts +16 -0
  101. package/dist/tools/update-task-status.d.ts +1 -1
  102. package/dist/workflow/task-terminal.d.ts +1 -0
  103. package/dist/workflow/workflow-wal-schema.d.ts +2 -0
  104. package/package.json +1 -1
  105. package/dist/cli/curator-llm-factory-dwvftpvm.js +0 -82
  106. package/dist/cli/guardrail-explain-rqqhmb44.js +0 -83
@@ -1,10 +1,10 @@
1
1
  // @bun
2
2
  import {
3
3
  handleGuardrailExplain
4
- } from "./index-34jat4f2.js";
4
+ } from "./index-wfb6vrc2.js";
5
5
  import {
6
6
  handleGuardrailLog
7
- } from "./index-esakwcr3.js";
7
+ } from "./index-kwfhr3mz.js";
8
8
  import {
9
9
  COMMAND_REGISTRY,
10
10
  DEFAULT_CI_DEADLINE_MS,
@@ -23,6 +23,7 @@ import {
23
23
  handleAnalyzeCommand,
24
24
  handleApproveWriteCommand,
25
25
  handleArchiveCommand,
26
+ handleAttestCommand,
26
27
  handleAutoProceedCommand,
27
28
  handleBenchmarkCommand,
28
29
  handleBlueprintCurrentCommand,
@@ -97,80 +98,80 @@ import {
97
98
  handleWriteRetroCommand,
98
99
  normalizeSwarmCommandInput,
99
100
  resolveCommand
100
- } from "./index-26dmsdx3.js";
101
- import"./index-my753e0g.js";
102
- import"./index-3fz5w2wb.js";
103
- import"./index-6ssraqaa.js";
101
+ } from "./index-hg4qa0aq.js";
102
+ import"./index-nq3zcrhm.js";
103
+ import"./index-8rrs1nc0.js";
104
+ import"./index-md2180vx.js";
105
+ import"./index-yss701b3.js";
106
+ import"./index-0wg5q595.js";
104
107
  import"./index-axqyjreb.js";
105
- import"./index-0je0mees.js";
106
- import"./index-hx2f3j9w.js";
107
108
  import"./index-txdagbh7.js";
108
- import"./index-zdfzrwbk.js";
109
+ import"./index-qnabg1wp.js";
110
+ import"./index-vqtca3xv.js";
109
111
  import"./index-rdec0y3z.js";
110
- import"./index-9n40q82y.js";
111
- import"./index-6xyt6d5m.js";
112
- import"./index-85vd6sxy.js";
113
- import"./index-10wwrgj2.js";
114
- import"./index-eyq1q1xn.js";
115
- import"./index-4cyc18bc.js";
112
+ import"./index-qnst0jwc.js";
113
+ import"./index-71bqn1nn.js";
114
+ import"./index-e8m8bb1r.js";
115
+ import"./index-bp476gwc.js";
116
+ import"./index-8a3aasag.js";
116
117
  import"./index-x5jwegqw.js";
117
- import"./index-tsg61z0r.js";
118
- import"./index-4pbzepgw.js";
118
+ import"./index-r02aqt0a.js";
119
+ import"./index-rfvnq6wd.js";
119
120
  import"./index-8mrentmw.js";
120
121
  import"./index-pt7h91zc.js";
121
122
  import"./index-q7sjgr1y.js";
122
- import"./index-xtda4xsn.js";
123
- import"./index-gyz59cbh.js";
123
+ import"./index-22atsy06.js";
124
+ import"./index-35tf03js.js";
124
125
  import"./index-6b295cas.js";
125
126
  import"./index-9nyqt3kb.js";
126
- import"./index-76skvj8z.js";
127
+ import"./index-9nmrw7ek.js";
127
128
  import"./index-v3bmwmqw.js";
128
- import"./index-9c0vp5yj.js";
129
- import"./index-yg5xd4am.js";
130
- import"./index-0ra0vs2p.js";
129
+ import"./index-sk1rva12.js";
130
+ import"./index-58cr1xg0.js";
131
+ import"./index-m9j9varx.js";
131
132
  import"./index-spggmr30.js";
132
- import"./index-6xv2hz0e.js";
133
- import"./index-d7y3cafq.js";
133
+ import"./index-1rfgzsaw.js";
134
+ import"./index-x25rhkmk.js";
134
135
  import"./index-m9zzj4ee.js";
135
- import"./index-b3ws03kp.js";
136
- import"./index-xyg7des8.js";
137
- import"./index-0veqvgny.js";
136
+ import"./index-x1z5d5kj.js";
137
+ import"./index-p5m71yph.js";
138
+ import"./index-jy0mgzjq.js";
138
139
  import"./index-rtry5xyf.js";
139
- import"./index-zte3djpf.js";
140
+ import"./index-hxp5jgd8.js";
140
141
  import"./index-g22dps7x.js";
141
142
  import"./index-0725jpp7.js";
142
- import"./index-p5d32v0x.js";
143
- import"./index-j3rfbs45.js";
144
- import"./index-ybvnf7rt.js";
145
- import"./index-9y6yk1n0.js";
146
- import"./index-snx2vb1x.js";
143
+ import"./index-pyv8vzkx.js";
144
+ import"./index-99zt998b.js";
145
+ import"./index-7v74n9a1.js";
146
+ import"./index-vmevv6my.js";
147
+ import"./index-d083d1q7.js";
147
148
  import"./index-ry16d01s.js";
148
149
  import"./index-rdm3px0g.js";
149
- import"./index-3mzc5rqc.js";
150
+ import"./index-wr0n2w3z.js";
150
151
  import"./index-7pmbnjvj.js";
151
152
  import"./index-9rwhas09.js";
152
- import"./index-zbygz217.js";
153
- import"./index-bgydmx8k.js";
153
+ import"./index-1tpz99db.js";
154
+ import"./index-n5k81wym.js";
154
155
  import"./index-vzm6zre7.js";
155
156
  import"./index-ae75rja9.js";
156
- import"./index-n1ddn12j.js";
157
- import"./index-jmhn6ab5.js";
158
- import"./index-dz15f98h.js";
157
+ import"./index-dng8z8me.js";
158
+ import"./index-ac8vdmgv.js";
159
+ import"./index-q8vfw61p.js";
159
160
  import"./index-t7hmqgjy.js";
160
- import"./index-dtwj4hsk.js";
161
+ import"./index-c2k7q723.js";
161
162
  import"./index-te9hq2f4.js";
162
163
  import"./index-ejhxgyvm.js";
163
164
  import"./index-7g4c7s5r.js";
164
- import"./index-270zfq1f.js";
165
- import"./index-gx2vp8gx.js";
166
- import"./index-3ckvw3j2.js";
165
+ import"./index-q1x73nnd.js";
166
+ import"./index-3t46mez1.js";
167
+ import"./index-gwc7jahh.js";
167
168
  import"./index-sp2cxpaq.js";
168
169
  import"./index-qbxk2rn6.js";
169
170
  import"./index-zgwm4ryv.js";
170
171
  import {
171
172
  init_schema,
172
173
  stripKnownSwarmPrefix
173
- } from "./index-dengtwpp.js";
174
+ } from "./index-yvv0my1a.js";
174
175
  import {
175
176
  AGENT_TOOL_MAP,
176
177
  ORCHESTRATOR_NAME,
@@ -513,6 +514,7 @@ export {
513
514
  handleBlueprintCurrentCommand,
514
515
  handleBenchmarkCommand,
515
516
  handleAutoProceedCommand,
517
+ handleAttestCommand,
516
518
  handleArchiveCommand,
517
519
  handleApproveWriteCommand,
518
520
  handleAnalyzeCommand,
@@ -2,14 +2,14 @@
2
2
  import {
3
3
  autoCommitDirty,
4
4
  cleanUntrackedFiles
5
- } from "./index-0ra0vs2p.js";
5
+ } from "./index-m9j9varx.js";
6
6
  import {
7
7
  isSpawnCwdMissing,
8
8
  isSpawnCwdUnreadable
9
9
  } from "./index-spggmr30.js";
10
10
  import {
11
11
  validateSwarmPath
12
- } from "./index-b3ws03kp.js";
12
+ } from "./index-x1z5d5kj.js";
13
13
  import {
14
14
  init_path_identity,
15
15
  isPathWithinDeclaredScope,
@@ -19,13 +19,13 @@ import {
19
19
  atomicWriteFile,
20
20
  taskEvidencePath,
21
21
  withTaskEvidenceLock
22
- } from "./index-jmhn6ab5.js";
22
+ } from "./index-ac8vdmgv.js";
23
23
  import {
24
24
  assertProjectRoot
25
25
  } from "./index-t7hmqgjy.js";
26
26
  import {
27
27
  telemetry
28
- } from "./index-dtwj4hsk.js";
28
+ } from "./index-c2k7q723.js";
29
29
  import {
30
30
  advisoryWarn,
31
31
  init_git_executable,
@@ -46,6 +46,7 @@ import {
46
46
 
47
47
  // src/gate-evidence.ts
48
48
  init_zod();
49
+ import { createHash as createHash2 } from "crypto";
49
50
  import { mkdirSync as mkdirSync3, readFileSync as readFileSync3, realpathSync as realpathSync2, statSync as statSync2 } from "fs";
50
51
  import * as path4 from "path";
51
52
 
@@ -222,6 +223,53 @@ async function readTaskGateRequirementsReceipts(directory, taskId) {
222
223
  }
223
224
  return receipts;
224
225
  }
226
+ function readTaskGateRequirementsReceiptsSync(directory, taskId) {
227
+ const filePath = safeTaskGateRequirementsReceiptPath(directory, taskId, false);
228
+ const text = readBoundedTextFile(filePath);
229
+ if (text === null)
230
+ return [];
231
+ const receipts = [];
232
+ for (const line of text.split(`
233
+ `)) {
234
+ if (!line.trim())
235
+ continue;
236
+ const parsed = TaskGateRequirementsReceiptSchema.parse(JSON.parse(line));
237
+ if (parsed.taskId !== taskId || parsed.routeBinding !== undefined && parsed.routeBinding.taskId !== taskId) {
238
+ throw new Error(`TASK_GATE_REQUIREMENTS_IDENTITY_MISMATCH: expected ${taskId}, found ${parsed.taskId}`);
239
+ }
240
+ const { chainHash, ...withoutChainHash } = parsed;
241
+ if (computeChainHash(withoutChainHash) !== chainHash) {
242
+ throw new Error(`TASK_GATE_REQUIREMENTS_CHAIN_MISMATCH: receipt for ${taskId} failed hash validation`);
243
+ }
244
+ const previousChainHash = receipts.at(-1)?.chainHash ?? null;
245
+ if (parsed.previousChainHash !== previousChainHash) {
246
+ throw new Error(`TASK_GATE_REQUIREMENTS_CHAIN_MISMATCH: receipt for ${taskId} failed linkage validation`);
247
+ }
248
+ receipts.push(parsed);
249
+ }
250
+ return receipts;
251
+ }
252
+ function routeEvidenceFromTaskGateRequirements(receipts) {
253
+ const latestByDispatch = new Map;
254
+ for (const receipt of receipts) {
255
+ const binding = receipt.routeBinding;
256
+ if (!binding)
257
+ continue;
258
+ const dispatchKey = [
259
+ binding.role,
260
+ binding.sessionId,
261
+ binding.taskId,
262
+ binding.callId,
263
+ binding.childSessionId,
264
+ String(binding.generation)
265
+ ].join("\x00");
266
+ latestByDispatch.set(dispatchKey, binding);
267
+ }
268
+ return [...latestByDispatch.values()];
269
+ }
270
+ function isLegacyTaskGateRequirementsChain(receipts) {
271
+ return receipts.length > 0 && receipts.every((receipt) => !receipt.routeBinding);
272
+ }
225
273
  function deriveReceiptRole(event) {
226
274
  switch (event.type) {
227
275
  case "accepted_mutation":
@@ -344,6 +392,12 @@ function sanitizeTaskId(taskId) {
344
392
  }
345
393
  throw new Error(`Invalid task ID: must be alphanumeric (ASCII) with optional hyphens, underscores, or dots, got "${taskId}"`);
346
394
  }
395
+ function validateTaskIdFormat(taskId) {
396
+ if (!STRICT_TASK_ID_PATTERN.test(taskId)) {
397
+ return `Invalid taskId "${taskId}". Must match pattern N.M or N.M.P (e.g., "1.1", "1.2.3")`;
398
+ }
399
+ return;
400
+ }
347
401
 
348
402
  // src/workflow/workflow-wal-file.ts
349
403
  import * as fs4 from "fs";
@@ -1493,7 +1547,7 @@ function parseTaskRepairWal(raw, filePath, expectedTaskId) {
1493
1547
  }
1494
1548
  function parseTaskTerminalWal(raw, filePath, expectedTaskId) {
1495
1549
  const parsed = parseWalObject(raw, filePath, "TASK_TERMINAL_WAL_UNREADABLE", "Preserve this file and reconcile the task terminal transition before moving it aside.");
1496
- if (parsed.version !== 1 && parsed.version !== 2 || parsed.state !== "PREPARED" && parsed.state !== "COMMITTED" && parsed.state !== "ABORTED" || typeof parsed.taskId !== "string" || !TASK_ID_PATTERN.test(parsed.taskId) || typeof parsed.transitionId !== "string" || parsed.transitionId.length === 0 || parsed.transitionId.length > 512 || typeof parsed.actor !== "string" || parsed.actor.length === 0 || parsed.actor.length > 512 || typeof parsed.oldPlanStatus !== "string" || parsed.oldPlanStatus.length === 0 || parsed.oldPlanStatus.length > 128 || parsed.newPlanStatus !== "completed" && parsed.newPlanStatus !== "blocked" && parsed.newPlanStatus !== "closed" || typeof parsed.oldWorkflowState !== "string" || !WORKFLOW_STATES.has(parsed.oldWorkflowState) || parsed.newWorkflowState !== "complete" && parsed.newWorkflowState !== "blocked" && parsed.newWorkflowState !== "closed" || !Number.isInteger(parsed.generation) || (parsed.generation ?? -1) < 0 || typeof parsed.qaExempt !== "boolean" || parsed.readOnlyNoMutation !== undefined && typeof parsed.readOnlyNoMutation !== "boolean" || typeof parsed.recordedAt !== "string" || !Number.isFinite(Date.parse(parsed.recordedAt))) {
1550
+ if (parsed.version !== 1 && parsed.version !== 2 || parsed.state !== "PREPARED" && parsed.state !== "COMMITTED" && parsed.state !== "ABORTED" || typeof parsed.taskId !== "string" || !TASK_ID_PATTERN.test(parsed.taskId) || typeof parsed.transitionId !== "string" || parsed.transitionId.length === 0 || parsed.transitionId.length > 512 || typeof parsed.actor !== "string" || parsed.actor.length === 0 || parsed.actor.length > 512 || typeof parsed.oldPlanStatus !== "string" || parsed.oldPlanStatus.length === 0 || parsed.oldPlanStatus.length > 128 || parsed.newPlanStatus !== "completed" && parsed.newPlanStatus !== "blocked" && parsed.newPlanStatus !== "closed" || typeof parsed.oldWorkflowState !== "string" || !WORKFLOW_STATES.has(parsed.oldWorkflowState) || parsed.newWorkflowState !== "complete" && parsed.newWorkflowState !== "blocked" && parsed.newWorkflowState !== "closed" || !Number.isInteger(parsed.generation) || (parsed.generation ?? -1) < 0 || typeof parsed.qaExempt !== "boolean" || parsed.readOnlyNoMutation !== undefined && typeof parsed.readOnlyNoMutation !== "boolean" || parsed.externalEvidence !== undefined && typeof parsed.externalEvidence !== "boolean" || typeof parsed.recordedAt !== "string" || !Number.isFinite(Date.parse(parsed.recordedAt))) {
1497
1551
  formatUnreadableMessage("TASK_TERMINAL_WAL_UNREADABLE", filePath, "is not a valid terminal WAL", "Preserve this file and reconcile the task terminal transition before moving it aside.");
1498
1552
  }
1499
1553
  if (parsed.version === 2 && (typeof parsed.planIdentityHash !== "string" || !SHA256_PATTERN.test(parsed.planIdentityHash) || typeof parsed.planEpoch !== "string" || !UUID_PATTERN.test(parsed.planEpoch))) {
@@ -1733,7 +1787,9 @@ var TASK_WORKFLOW_OUTCOMES = [
1733
1787
  "task_completed",
1734
1788
  "task_blocked",
1735
1789
  "task_closed",
1736
- "repair_idle"
1790
+ "repair_idle",
1791
+ "external_evidence_attested",
1792
+ "external_evidence_revoked"
1737
1793
  ];
1738
1794
  var MAX_PLAN_SCOPE_INSPECTION_BYTES = 4 * 1024 * 1024;
1739
1795
  function readCurrentTaskDeclaredFiles(directory, taskId) {
@@ -1799,6 +1855,30 @@ var GateEvidenceSchema = exports_external.object({
1799
1855
  timestamp: exports_external.string(),
1800
1856
  agent: exports_external.string()
1801
1857
  }).passthrough();
1858
+ var ExternalEvidenceBundleSchema = exports_external.object({
1859
+ class: exports_external.literal("external_git"),
1860
+ transitionId: exports_external.string().min(1).max(512),
1861
+ declarationDigest: exports_external.string().regex(/^[a-f0-9]{64}$/),
1862
+ anchors: exports_external.array(exports_external.object({
1863
+ command: exports_external.string().min(1).max(400),
1864
+ expect: exports_external.string().max(4096).optional(),
1865
+ expect_prefix: exports_external.string().min(1).max(4096).optional(),
1866
+ matched: exports_external.boolean(),
1867
+ exit_code: exports_external.number().int(),
1868
+ stdout: exports_external.string().max(4096)
1869
+ })).min(1).max(16).superRefine((anchors, ctx) => {
1870
+ anchors.forEach((anchor, index) => {
1871
+ if (anchor.expect === undefined && anchor.expect_prefix === undefined) {
1872
+ ctx.addIssue({
1873
+ code: exports_external.ZodIssueCode.custom,
1874
+ message: `anchor ${index} must carry expect and/or a non-empty expect_prefix`,
1875
+ path: [index]
1876
+ });
1877
+ }
1878
+ });
1879
+ }),
1880
+ attestedAt: exports_external.string().min(1)
1881
+ });
1802
1882
  var TaskWorkflowMetadataSchema = exports_external.object({
1803
1883
  schema: exports_external.literal(TASK_WORKFLOW_SCHEMA_MARKER),
1804
1884
  generation: exports_external.number().int().min(0),
@@ -1816,7 +1896,8 @@ var TaskWorkflowMetadataSchema = exports_external.object({
1816
1896
  generation: exports_external.literal(0),
1817
1897
  transitionId: exports_external.string().min(1).max(512),
1818
1898
  declaredFiles: exports_external.array(exports_external.string()).length(0)
1819
- }).optional()
1899
+ }).optional(),
1900
+ externalEvidence: ExternalEvidenceBundleSchema.optional()
1820
1901
  });
1821
1902
  var TaskEvidenceSchema = exports_external.object({
1822
1903
  taskId: exports_external.string(),
@@ -1903,6 +1984,10 @@ function getEventOutcome(event) {
1903
1984
  return "task_closed";
1904
1985
  case "repair_idle":
1905
1986
  return "repair_idle";
1987
+ case "external_evidence_attested":
1988
+ return "external_evidence_attested";
1989
+ case "external_evidence_revoked":
1990
+ return "external_evidence_revoked";
1906
1991
  }
1907
1992
  }
1908
1993
  function isAuthoritativeWorkflowMetadata(workflow) {
@@ -1978,8 +2063,9 @@ function deriveApplicableGateSet(evidence, options) {
1978
2063
  }
1979
2064
  const workflow = getTaskWorkflowSnapshot(evidence);
1980
2065
  const readOnlyNoMutation = isNoMutationSettlementMetadata(workflow) && (options?.currentDeclaredFiles === undefined ? true : options.currentDeclaredFiles !== null && options.currentDeclaredFiles.length === 0);
2066
+ const externalEvidenceMatched = workflow.lastOutcome === "external_evidence_attested" && (workflow.externalEvidence?.anchors.length ?? 0) > 0 && workflow.externalEvidence.anchors.every((anchor) => anchor.matched);
1981
2067
  const requiredGates = [...new Set(evidence.required_gates ?? [])];
1982
- if (!readOnlyNoMutation && !requiredGates.includes("pre_check")) {
2068
+ if (!readOnlyNoMutation && !externalEvidenceMatched && !requiredGates.includes("pre_check")) {
1983
2069
  requiredGates.unshift("pre_check");
1984
2070
  }
1985
2071
  const satisfiedGates = requiredGates.filter((gate) => evidence.gates?.[gate] != null);
@@ -1993,6 +2079,47 @@ function deriveApplicableGateSet(evidence, options) {
1993
2079
  function isReadOnlyNoMutationEligible(evidence, options) {
1994
2080
  return deriveApplicableGateSet(evidence, options).readOnlyNoMutation;
1995
2081
  }
2082
+ function computeExternalDeclarationDigest(input) {
2083
+ const canonical = {
2084
+ taskId: input.taskId,
2085
+ evidence_class: input.evidence_class,
2086
+ evidence_anchors: input.evidence_anchors.map((anchor) => ({
2087
+ command: anchor.command,
2088
+ expect: anchor.expect,
2089
+ expect_prefix: anchor.expect_prefix
2090
+ })),
2091
+ plan_title: input.plan_title,
2092
+ plan_swarm: input.plan_swarm,
2093
+ generation: input.generation
2094
+ };
2095
+ return createHash2("sha256").update(JSON.stringify(canonical)).digest("hex");
2096
+ }
2097
+ function externalProofCurrent(plan, planTask, evidence) {
2098
+ if (planTask.evidence_class !== "external_git")
2099
+ return false;
2100
+ const workflow = evidence?.workflow;
2101
+ if (!workflow)
2102
+ return false;
2103
+ const bundle = workflow.externalEvidence;
2104
+ if (!bundle || bundle.anchors.length === 0)
2105
+ return false;
2106
+ if (!bundle.anchors.every((anchor) => anchor.matched))
2107
+ return false;
2108
+ return bundle.declarationDigest === computeExternalDeclarationDigest({
2109
+ taskId: planTask.id,
2110
+ evidence_class: "external_git",
2111
+ evidence_anchors: planTask.evidence_anchors ?? [],
2112
+ plan_title: plan.title,
2113
+ plan_swarm: plan.swarm,
2114
+ generation: workflow.generation
2115
+ });
2116
+ }
2117
+ function isExternalEvidenceInitialCompletionEligible(plan, planTask, evidence) {
2118
+ if (!externalProofCurrent(plan, planTask, evidence))
2119
+ return false;
2120
+ const snapshot = getTaskWorkflowSnapshot(evidence);
2121
+ return snapshot.authoritative && snapshot.state === "idle";
2122
+ }
1996
2123
  function reduceTaskWorkflowSnapshot(current, event, context) {
1997
2124
  if ((current.state === "complete" || current.state === "blocked" || current.state === "closed") && event.type !== "repair_idle" && !(current.state === "complete" && event.type === "task_completed" || current.state === "blocked" && event.type === "task_blocked" || current.state === "blocked" && event.type === "task_closed" || current.state === "blocked" && event.type === "stage_a_passed" && event.settlementRecovery === true)) {
1998
2125
  throw new Error(`TASK_WORKFLOW_TERMINAL: cannot apply ${event.type} from ${current.state}`);
@@ -2011,15 +2138,24 @@ function reduceTaskWorkflowSnapshot(current, event, context) {
2011
2138
  ...current.forcedCompletion === true ? { forcedCompletion: true } : {},
2012
2139
  ...current.supervisedRecovery === true ? { supervisedRecovery: true } : {},
2013
2140
  ...current.settlementRecovery === true ? { settlementRecovery: true } : {},
2014
- ...current.noMutationSettlement ? { noMutationSettlement: current.noMutationSettlement } : {}
2141
+ ...current.noMutationSettlement ? { noMutationSettlement: current.noMutationSettlement } : {},
2142
+ ...current.externalEvidence ? { externalEvidence: current.externalEvidence } : {}
2015
2143
  };
2016
2144
  switch (event.type) {
2017
2145
  case "dispatch_attempted": {
2018
- const { noMutationSettlement: _clearedSettlement, ...withoutSettlement } = base;
2146
+ const {
2147
+ noMutationSettlement: _clearedSettlement,
2148
+ externalEvidence: _clearedExternalEvidence,
2149
+ ...withoutSettlement
2150
+ } = base;
2019
2151
  return withoutSettlement;
2020
2152
  }
2021
2153
  case "dispatch_no_mutation": {
2022
- const { noMutationSettlement: _clearedSettlement, ...withoutSettlement } = base;
2154
+ const {
2155
+ noMutationSettlement: _clearedSettlement,
2156
+ externalEvidence: _clearedExternalEvidence,
2157
+ ...withoutSettlement
2158
+ } = base;
2023
2159
  return {
2024
2160
  ...withoutSettlement,
2025
2161
  retryCount: Math.min(current.retryCount + 1, 3),
@@ -2046,7 +2182,11 @@ function reduceTaskWorkflowSnapshot(current, event, context) {
2046
2182
  retryEpoch: current.retryEpoch || current.generation + 1
2047
2183
  };
2048
2184
  case "accepted_mutation": {
2049
- const { noMutationSettlement: _clearedSettlement, ...withoutSettlement } = base;
2185
+ const {
2186
+ noMutationSettlement: _clearedSettlement,
2187
+ externalEvidence: _clearedExternalEvidence,
2188
+ ...withoutSettlement
2189
+ } = base;
2050
2190
  if (event.context?.settlementFailed === true) {
2051
2191
  return {
2052
2192
  ...withoutSettlement,
@@ -2110,9 +2250,26 @@ function reduceTaskWorkflowSnapshot(current, event, context) {
2110
2250
  ...base,
2111
2251
  state: current.state
2112
2252
  };
2253
+ case "external_evidence_attested": {
2254
+ if (current.state !== "idle") {
2255
+ throw new Error(`TASK_WORKFLOW_EXTERNAL_ATTEST_STATE: external evidence can only be attested from idle (task never entered the coder QA lifecycle), not ${current.state}`);
2256
+ }
2257
+ if (current.externalEvidence?.transitionId === event.bundle.transitionId) {
2258
+ return { ...base };
2259
+ }
2260
+ return { ...base, externalEvidence: event.bundle };
2261
+ }
2262
+ case "external_evidence_revoked": {
2263
+ const {
2264
+ externalEvidence: _revokedExternalEvidence,
2265
+ ...withoutExternalEvidence
2266
+ } = base;
2267
+ return withoutExternalEvidence;
2268
+ }
2113
2269
  case "task_completed": {
2114
2270
  const readOnlyNoMutation = event.readOnlyNoMutation === true && current.state === "idle" && current.generation === 0 && isNoMutationSettlementMetadata(current) && context.requiredGates.every((gate) => context.gates[gate] != null);
2115
- if (event.qaExempt !== true && current.state !== "tests_run" && current.state !== "complete" && !(current.state === "pre_check_passed" && context.gates.council != null) && !readOnlyNoMutation) {
2271
+ const externalAdmitted = event.externalEvidence === true && current.externalEvidence !== undefined && current.externalEvidence.anchors.length > 0 && current.externalEvidence.anchors.every((anchor) => anchor.matched) && (current.state === "idle" || current.state === "complete");
2272
+ if (event.qaExempt !== true && current.state !== "tests_run" && current.state !== "complete" && !(current.state === "pre_check_passed" && context.gates.council != null) && !readOnlyNoMutation && !externalAdmitted) {
2116
2273
  throw new Error(`TASK_WORKFLOW_QA_REQUIRED: cannot complete from ${current.state}`);
2117
2274
  }
2118
2275
  return {
@@ -2137,6 +2294,7 @@ function reduceTaskWorkflowSnapshot(current, event, context) {
2137
2294
  supervisedRecovery: _clearedMarker,
2138
2295
  settlementRecovery: _clearedSettlementMarker,
2139
2296
  noMutationSettlement: _clearedSettlement,
2297
+ externalEvidence: _clearedExternalEvidence,
2140
2298
  ...withoutForced
2141
2299
  } = base;
2142
2300
  return {
@@ -2505,4 +2663,4 @@ function compareTaskWorkflowStateRank(left, right) {
2505
2663
  return WORKFLOW_STATE_RANK[left] - WORKFLOW_STATE_RANK[right];
2506
2664
  }
2507
2665
 
2508
- export { isStrictTaskId, sanitizeTaskId, listRecoveryRecords, recoveryReadErrored, _internals, SOURCE_WORKTREE_GONE_STAGE, SOURCE_WORKTREE_UNCERTAIN_STAGE, getMergeStrategy, recoverMergeBackFromImmutableCoordinates, reconcileLandedMerge, postMergeCleanup, pruneStaleWorktreeMetadata, attemptMergeBackFromDirty, cleanupOrphanedBranches, startupOrphanRecovery, readWorkflowWalFile, writeWorkflowWalFile, _internals3 as _internals1, TASK_WORKFLOW_SCHEMA_MARKER, readCurrentTaskDeclaredFiles, TASK_GATE_REQUIREMENTS_RECONSTRUCTION_SENTINEL, assertTaskEvidenceWriteAllowed, parseTaskEvidence, DEFAULT_REQUIRED_GATES, isValidTaskId, getTaskWorkflowSnapshot, deriveApplicableGateSet, isReadOnlyNoMutationEligible, reduceTaskWorkflowSnapshot, deriveRequiredGates, expandRequiredGates, transitionTaskWorkflowEvidence, transitionTaskWorkflowEvidenceWithStatus, withTaskEvidenceTransaction, ensureTaskGateRequirementsReceiptForSettledTransition, recordGateEvidence, recordTodoScanEvidence, recordAgentDispatch, readTaskEvidence, readTaskEvidenceState, readTaskEvidenceRaw, hasPassedAllGates, compareTaskWorkflowStateRank };
2666
+ export { readTaskGateRequirementsReceiptsSync, routeEvidenceFromTaskGateRequirements, isLegacyTaskGateRequirementsChain, isStrictTaskId, sanitizeTaskId, validateTaskIdFormat, listRecoveryRecords, recoveryReadErrored, _internals, SOURCE_WORKTREE_GONE_STAGE, SOURCE_WORKTREE_UNCERTAIN_STAGE, getMergeStrategy, recoverMergeBackFromImmutableCoordinates, reconcileLandedMerge, postMergeCleanup, pruneStaleWorktreeMetadata, attemptMergeBackFromDirty, cleanupOrphanedBranches, startupOrphanRecovery, readWorkflowWalFile, writeWorkflowWalFile, _internals3 as _internals1, TASK_WORKFLOW_SCHEMA_MARKER, readCurrentTaskDeclaredFiles, TASK_GATE_REQUIREMENTS_RECONSTRUCTION_SENTINEL, assertTaskEvidenceWriteAllowed, ExternalEvidenceBundleSchema, parseTaskEvidence, DEFAULT_REQUIRED_GATES, isValidTaskId, getTaskWorkflowSnapshot, deriveApplicableGateSet, isReadOnlyNoMutationEligible, computeExternalDeclarationDigest, externalProofCurrent, isExternalEvidenceInitialCompletionEligible, reduceTaskWorkflowSnapshot, deriveRequiredGates, expandRequiredGates, transitionTaskWorkflowEvidence, transitionTaskWorkflowEvidenceWithStatus, withTaskEvidenceTransaction, ensureTaskGateRequirementsReceiptForSettledTransition, recordGateEvidence, recordTodoScanEvidence, recordAgentDispatch, readTaskEvidence, readTaskEvidenceState, readTaskEvidenceRaw, hasPassedAllGates, compareTaskWorkflowStateRank };
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  captureWorkspaceSnapshotAsync,
4
4
  changedFilesSinceSnapshotAsync
5
- } from "./index-eyq1q1xn.js";
5
+ } from "./index-bp476gwc.js";
6
6
  import {
7
7
  removeWorktreeProvisioningOwner
8
- } from "./index-tsg61z0r.js";
8
+ } from "./index-r02aqt0a.js";
9
9
  import {
10
10
  SOURCE_WORKTREE_GONE_STAGE,
11
11
  ensureTaskGateRequirementsReceiptForSettledTransition,
@@ -14,13 +14,13 @@ import {
14
14
  reconcileLandedMerge,
15
15
  withTaskEvidenceTransaction,
16
16
  writeWorkflowWalFile
17
- } from "./index-yg5xd4am.js";
17
+ } from "./index-58cr1xg0.js";
18
18
  import {
19
19
  validateSwarmPath
20
- } from "./index-b3ws03kp.js";
20
+ } from "./index-x1z5d5kj.js";
21
21
  import {
22
22
  appendCoreEventSync
23
- } from "./index-3mzc5rqc.js";
23
+ } from "./index-wr0n2w3z.js";
24
24
  import {
25
25
  init_path_identity,
26
26
  isPathWithinDeclaredScope
@@ -512,7 +512,7 @@ async function cleanupRecoveredWorktree(directory, descriptor, options) {
512
512
  awaitingMergeByCallID,
513
513
  cleanupStandardWorktreeForCallId,
514
514
  standardWorktreeByCallID
515
- } = await import("./worktree-isolation-z6ytes0j.js");
515
+ } = await import("./worktree-isolation-8snw7w34.js");
516
516
  standardWorktreeByCallID.delete(descriptor.callID);
517
517
  if (hasResidue)
518
518
  awaitingMergeByCallID.set(descriptor.callID, {
@@ -648,7 +648,7 @@ async function recoverCoderSettlement(directory, taskId) {
648
648
  awaitingMergeByCallID,
649
649
  finishStandardWorktreeDispatch,
650
650
  standardWorktreeByCallID
651
- } = await import("./worktree-isolation-z6ytes0j.js");
651
+ } = await import("./worktree-isolation-8snw7w34.js");
652
652
  const descriptor = wal.worktree;
653
653
  const reconstructedDispatch = {
654
654
  callID: descriptor.callID,
@@ -4,30 +4,30 @@ import {
4
4
  projectDbExists,
5
5
  withImmediateTransaction,
6
6
  withProjectDbReadOnly
7
- } from "./index-snx2vb1x.js";
7
+ } from "./index-d083d1q7.js";
8
8
  import {
9
9
  derivePlanId,
10
10
  derivePlanIdentityHash
11
11
  } from "./index-7pmbnjvj.js";
12
12
  import {
13
13
  withEvidenceLock
14
- } from "./index-dz15f98h.js";
14
+ } from "./index-q8vfw61p.js";
15
15
  import {
16
16
  assertProjectRoot
17
17
  } from "./index-t7hmqgjy.js";
18
18
  import {
19
19
  emit
20
- } from "./index-dtwj4hsk.js";
20
+ } from "./index-c2k7q723.js";
21
21
  import {
22
22
  ExecutionProfileSchema,
23
23
  PlanSchema,
24
24
  TaskStatusSchema,
25
25
  normalizeCurrentPhaseInPlace
26
- } from "./index-gx2vp8gx.js";
26
+ } from "./index-3t46mez1.js";
27
27
  import {
28
28
  init_loader,
29
29
  loadPluginConfig
30
- } from "./index-3ckvw3j2.js";
30
+ } from "./index-gwc7jahh.js";
31
31
  import {
32
32
  criticalWarn,
33
33
  init_logger,
@@ -36,7 +36,7 @@ import {
36
36
  import {
37
37
  init_package,
38
38
  package_default
39
- } from "./index-dengtwpp.js";
39
+ } from "./index-yvv0my1a.js";
40
40
 
41
41
  // src/plan/planning-profile.ts
42
42
  init_loader();
@@ -1179,7 +1179,9 @@ function computePlanLedgerHash(plan) {
1179
1179
  acceptance: task.acceptance,
1180
1180
  files_touched: [...task.files_touched].sort(),
1181
1181
  evidence_path: task.evidence_path,
1182
- blocked_reason: task.blocked_reason
1182
+ blocked_reason: task.blocked_reason,
1183
+ evidence_class: task.evidence_class,
1184
+ evidence_anchors: task.evidence_anchors
1183
1185
  }))
1184
1186
  }))
1185
1187
  };
@@ -1207,7 +1209,9 @@ function computePlanStructureHash(plan) {
1207
1209
  acceptance: task.acceptance,
1208
1210
  files_touched: [...task.files_touched].sort(),
1209
1211
  evidence_path: task.evidence_path,
1210
- blocked_reason: task.blocked_reason
1212
+ blocked_reason: task.blocked_reason,
1213
+ evidence_class: task.evidence_class,
1214
+ evidence_anchors: task.evidence_anchors
1211
1215
  }))
1212
1216
  }))
1213
1217
  };
@@ -1,27 +1,27 @@
1
1
  // @bun
2
2
  import {
3
3
  validateSwarmPath
4
- } from "./index-b3ws03kp.js";
4
+ } from "./index-x1z5d5kj.js";
5
5
  import {
6
6
  deleteCoordinationState,
7
7
  importCoordinationOnce,
8
8
  listCoordinationStates,
9
9
  transitionCoordinationState,
10
10
  withCoordinationTransaction
11
- } from "./index-9y6yk1n0.js";
11
+ } from "./index-vmevv6my.js";
12
12
  import {
13
13
  getProjectDb,
14
14
  projectDbExists
15
- } from "./index-snx2vb1x.js";
15
+ } from "./index-d083d1q7.js";
16
16
  import {
17
17
  observeStoreHealth
18
- } from "./index-zbygz217.js";
18
+ } from "./index-1tpz99db.js";
19
19
  import {
20
20
  withEvidenceLock
21
- } from "./index-dz15f98h.js";
21
+ } from "./index-q8vfw61p.js";
22
22
  import {
23
23
  telemetry
24
- } from "./index-dtwj4hsk.js";
24
+ } from "./index-c2k7q723.js";
25
25
  import {
26
26
  canonicalRootKey,
27
27
  canonicalRootKeyFresh,
@@ -29,7 +29,7 @@ import {
29
29
  } from "./index-te9hq2f4.js";
30
30
  import {
31
31
  atomicWriteSwarmFileSync
32
- } from "./index-270zfq1f.js";
32
+ } from "./index-q1x73nnd.js";
33
33
  import {
34
34
  log
35
35
  } from "./index-zgwm4ryv.js";
@@ -11,10 +11,10 @@ import {
11
11
  } from "./index-9rwhas09.js";
12
12
  import {
13
13
  observeStoreHealth
14
- } from "./index-zbygz217.js";
14
+ } from "./index-1tpz99db.js";
15
15
  import {
16
16
  telemetry
17
- } from "./index-dtwj4hsk.js";
17
+ } from "./index-c2k7q723.js";
18
18
  import {
19
19
  init_git_executable,
20
20
  resolveGitExecutable
@@ -29,7 +29,7 @@ import {
29
29
  import {
30
30
  init_schema,
31
31
  stripKnownSwarmPrefix
32
- } from "./index-dengtwpp.js";
32
+ } from "./index-yvv0my1a.js";
33
33
  import {
34
34
  init_constants
35
35
  } from "./index-xfzkq1k4.js";
@@ -4,7 +4,7 @@ import {
4
4
  getProjectDb,
5
5
  projectDbExists,
6
6
  withImmediateTransaction
7
- } from "./index-snx2vb1x.js";
7
+ } from "./index-d083d1q7.js";
8
8
  import {
9
9
  derivePlanId,
10
10
  derivePlanIdentityHash
@@ -426,4 +426,4 @@ function getEffectiveGates(profile, sessionOverrides) {
426
426
  }
427
427
  return merged;
428
428
  }
429
- export { formatLegacyQaBindingOnlyCall, DEFAULT_QA_GATES, getProfileLookupForIdentity, setGatesForIdentity, computeProfileHash, getEffectiveGates };
429
+ export { formatLegacyQaBindingOnlyCall, formatLegacyQaBindingRecovery, DEFAULT_QA_GATES, getProfileLookupForIdentity, setGatesForIdentity, computeProfileHash, getEffectiveGates };