opencode-swarm 7.192.4 → 7.194.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/.opencode/skills/swarm-pr-review/SKILL.md +2 -2
  2. package/.opencode/skills/swarm-pr-review/references/verdict-settlement-contract.md +17 -0
  3. package/README.md +1 -1
  4. package/binaries/win32-arm64/swarm-sandbox-runner.exe +0 -0
  5. package/binaries/win32-x64/swarm-sandbox-runner.exe +0 -0
  6. package/dist/background/pending-delegations.d.ts +8 -0
  7. package/dist/cli/{auto-checkpoint-1xy6dprq.js → auto-checkpoint-67dk8rjz.js} +8 -8
  8. package/dist/cli/{checkpoint-wvhmkgv5.js → checkpoint-jbqqyp5e.js} +15 -15
  9. package/dist/cli/{coder-settlement-wpkmkgcf.js → coder-settlement-a09t7mvx.js} +11 -11
  10. package/dist/cli/{config-doctor-xvhejh7g.js → config-doctor-dkp263xx.js} +14 -14
  11. package/dist/cli/{core-yzgm8pcw.js → core-stnmz1rg.js} +4 -4
  12. package/dist/cli/{curation-policy-yzdznz4z.js → curation-policy-8j6qn6nt.js} +4 -4
  13. package/dist/cli/{curator-drift-5c041yaf.js → curator-drift-d1wedyed.js} +9 -9
  14. package/dist/cli/curator-llm-factory-97dpqjz4.js +82 -0
  15. package/dist/cli/{curator-3xh6246r.js → curator-mc0wcpvw.js} +41 -41
  16. package/dist/cli/{doctor-knowledge-receipt-phase-id-cx6n5jtp.js → doctor-knowledge-receipt-phase-id-dfwx5jha.js} +8 -8
  17. package/dist/cli/{evidence-summary-service-cc139a85.js → evidence-summary-service-k1shqefr.js} +18 -18
  18. package/dist/cli/{gate-evidence-7azk0xbt.js → gate-evidence-vw9y4gs6.js} +6 -6
  19. package/dist/cli/guardrail-explain-24g3bsqw.js +83 -0
  20. package/dist/cli/{guardrail-log-env1h4wr.js → guardrail-log-vbeyx6nq.js} +7 -7
  21. package/dist/cli/{guardrail-reset-1404ymcw.js → guardrail-reset-jwtt15e3.js} +41 -41
  22. package/dist/cli/{hive-promoter-hap3dh02.js → hive-promoter-p9ad63mx.js} +41 -41
  23. package/dist/cli/{index-8zj647hc.js → index-0e318vgt.js} +1 -1
  24. package/dist/cli/{index-rqapvhh5.js → index-0xe19j9g.js} +1 -1
  25. package/dist/cli/{index-py8wpe81.js → index-1jt12p3y.js} +1 -1
  26. package/dist/cli/{index-bgzpw6ge.js → index-3atkcqpb.js} +1 -1
  27. package/dist/cli/{index-j4pxkvw3.js → index-3dpb3kps.js} +4 -4
  28. package/dist/cli/{index-gkr6ns9n.js → index-43v5axvm.js} +4 -4
  29. package/dist/cli/{index-xwxqtdwz.js → index-48h1yn6c.js} +4 -4
  30. package/dist/cli/{index-s68yyat0.js → index-4ftg3p9n.js} +2 -2
  31. package/dist/cli/{index-22ww8fjt.js → index-51dxek4p.js} +3 -3
  32. package/dist/cli/{index-1n7sf9gz.js → index-5rkh69f3.js} +1 -1
  33. package/dist/cli/{index-0e1nxkte.js → index-668npagp.js} +1 -1
  34. package/dist/cli/{index-g8jd3h4r.js → index-6s3ab22d.js} +2 -2
  35. package/dist/cli/{index-cp9h2sqb.js → index-6xppb1er.js} +1 -1
  36. package/dist/cli/{index-6vwnm3sm.js → index-7bfshvq1.js} +3 -3
  37. package/dist/cli/{index-5gy5dc2n.js → index-7njm9jk1.js} +1 -1
  38. package/dist/cli/{index-eaess7dm.js → index-84k9zzv1.js} +1 -1
  39. package/dist/cli/{index-vgktct21.js → index-9bzgea2y.js} +4 -4
  40. package/dist/cli/{index-jb669k7s.js → index-9kbnxb7v.js} +2 -2
  41. package/dist/cli/{index-c5gb6a86.js → index-9v43y7y6.js} +10 -10
  42. package/dist/cli/{index-zya4a544.js → index-ajkdt5b8.js} +4 -4
  43. package/dist/cli/{index-54p1vs33.js → index-at34nry4.js} +3 -3
  44. package/dist/cli/{index-rsfvxaw0.js → index-cwr69qw7.js} +7 -7
  45. package/dist/cli/{index-72eh47b2.js → index-d7pznffh.js} +4 -4
  46. package/dist/cli/{index-xpwp9hw1.js → index-dy7nztyp.js} +6 -6
  47. package/dist/cli/{index-g2phkwh2.js → index-ehab3z5y.js} +4 -4
  48. package/dist/cli/{index-6k70exke.js → index-f3ttgqak.js} +2 -2
  49. package/dist/cli/{index-fzqn2kk8.js → index-fd6b9f38.js} +2 -2
  50. package/dist/cli/{index-q47snsb2.js → index-h14wpwpa.js} +4 -4
  51. package/dist/cli/{index-dtet46e6.js → index-hfnyykvm.js} +5 -5
  52. package/dist/cli/{index-nwswxes7.js → index-hfssjyxs.js} +2 -2
  53. package/dist/cli/{index-2qpme44n.js → index-jrs2qh6j.js} +3 -3
  54. package/dist/cli/{index-s43zb23q.js → index-kp5qw5p4.js} +43 -43
  55. package/dist/cli/{index-myjqj3na.js → index-n5xwza76.js} +7 -7
  56. package/dist/cli/{index-4twjbsfw.js → index-ndec8akq.js} +1 -1
  57. package/dist/cli/{index-a9m7h5v0.js → index-qh93qjc2.js} +1 -1
  58. package/dist/cli/{index-kn16k0fv.js → index-r8mavcg6.js} +5 -5
  59. package/dist/cli/{index-tww9qw9z.js → index-rpnkp79f.js} +6 -6
  60. package/dist/cli/{index-dt4cjxbz.js → index-st80sjg7.js} +1 -1
  61. package/dist/cli/{index-c8fjbghs.js → index-t6aae9wq.js} +1 -1
  62. package/dist/cli/{index-c6wzbs0g.js → index-vfdkvvkf.js} +2 -2
  63. package/dist/cli/{index-mbn4vn3z.js → index-vg8sxg12.js} +1 -1
  64. package/dist/cli/{index-5gyq54c5.js → index-vjytfp05.js} +4591 -4125
  65. package/dist/cli/{index-5dws7eyb.js → index-w2vbaczx.js} +1 -1
  66. package/dist/cli/{index-ftatc9wj.js → index-x7qeaa9y.js} +41 -41
  67. package/dist/cli/{index-v6ghzghn.js → index-y3n9ry9q.js} +3 -3
  68. package/dist/cli/{index-qzkrcz1r.js → index-yfbk69b1.js} +6 -6
  69. package/dist/cli/index.js +42 -42
  70. package/dist/cli/{knowledge-escalator-eta167xh.js → knowledge-escalator-g6dctrae.js} +13 -13
  71. package/dist/cli/{knowledge-events-mz25jn9f.js → knowledge-events-acdz0x2g.js} +11 -11
  72. package/dist/cli/{knowledge-link-a5tvjqdt.js → knowledge-link-srnt95wh.js} +3 -3
  73. package/dist/cli/{knowledge-store-qd08dbws.js → knowledge-store-vxtj4m59.js} +4 -4
  74. package/dist/cli/{knowledge-validator-jyrsgamq.js → knowledge-validator-b545vc9t.js} +6 -6
  75. package/dist/cli/{mcp-4wgxc5ax.js → mcp-c3t18313.js} +1 -1
  76. package/dist/cli/{model-preflight-4p3x4vma.js → model-preflight-r99c08re.js} +41 -41
  77. package/dist/cli/{pending-delegations-7hm6xgzw.js → pending-delegations-57f3049j.js} +12 -10
  78. package/dist/cli/{pr-subscriptions-2y3w5pyt.js → pr-subscriptions-5jb793xe.js} +10 -10
  79. package/dist/cli/{pr-workflow-gate-y04z3z80.js → pr-workflow-gate-n3x25ddw.js} +47 -41
  80. package/dist/cli/{runner-8qybgy4n.js → runner-b2e89cp1.js} +4 -4
  81. package/dist/cli/{scan-cursor-2hpc6mxt.js → scan-cursor-s9mazw82.js} +5 -5
  82. package/dist/cli/{schema-33k1e2cv.js → schema-7czxpvwm.js} +2 -2
  83. package/dist/cli/{scope-persistence-y769jep8.js → scope-persistence-y0ebqyjm.js} +14 -14
  84. package/dist/cli/{server-199m00cz.js → server-m10e78ey.js} +41 -41
  85. package/dist/cli/{skill-generator-b9by3739.js → skill-generator-kzw1dcba.js} +15 -15
  86. package/dist/cli/{snapshot-coordination-init-wyyn8ftk.js → snapshot-coordination-init-z1aqsvn4.js} +41 -41
  87. package/dist/cli/{speckit-checkoff-y2ywmh9k.js → speckit-checkoff-1g3vzywn.js} +5 -5
  88. package/dist/cli/{workspace-snapshot-vfpnxjsp.js → workspace-snapshot-p69t9zn7.js} +3 -3
  89. package/dist/cli/{worktree-collision-ownership-hg0yrc5b.js → worktree-collision-ownership-d0etv08a.js} +11 -11
  90. package/dist/cli/{worktree-isolation-epbn1xgh.js → worktree-isolation-dj2qw13p.js} +41 -41
  91. package/dist/commands/registry.d.ts +2 -2
  92. package/dist/epic/start.d.ts +8 -5
  93. package/dist/hooks/injection-policy.d.ts +94 -0
  94. package/dist/hooks/pr-workflow-gate.d.ts +81 -5
  95. package/dist/host/v2/session-client.d.ts +77 -0
  96. package/dist/host/v2/types.d.ts +256 -11
  97. package/dist/index.js +495 -492
  98. package/dist/pr-review/finding-policy.d.ts +1 -1
  99. package/dist/pr-review/verdict-settlement.d.ts +182 -0
  100. package/dist/services/context-budget-service.d.ts +8 -1
  101. package/dist/tools/complete-pr-workflow.d.ts +13 -0
  102. package/dist/tools/pr-workflow-status.d.ts +24 -1
  103. package/dist/tools/write-pr-review-artifact.d.ts +1 -1
  104. package/package.json +1 -1
  105. package/dist/cli/curator-llm-factory-6y7wrbvk.js +0 -82
  106. package/dist/cli/guardrail-explain-b3y98j5b.js +0 -83
@@ -8,75 +8,75 @@ import {
8
8
  markSnapshotCoordinationClosing,
9
9
  retrySnapshotCoordinationInitialization,
10
10
  startSnapshotCoordinationInitialization
11
- } from "./index-5gyq54c5.js";
12
- import"./index-22ww8fjt.js";
13
- import"./index-g2phkwh2.js";
14
- import"./index-xwxqtdwz.js";
11
+ } from "./index-vjytfp05.js";
12
+ import"./index-51dxek4p.js";
13
+ import"./index-ehab3z5y.js";
14
+ import"./index-48h1yn6c.js";
15
15
  import"./index-j2vv0h13.js";
16
- import"./index-0e1nxkte.js";
17
- import"./index-5gy5dc2n.js";
16
+ import"./index-668npagp.js";
17
+ import"./index-7njm9jk1.js";
18
18
  import"./index-txdagbh7.js";
19
- import"./index-c6wzbs0g.js";
19
+ import"./index-vfdkvvkf.js";
20
20
  import"./index-rdec0y3z.js";
21
- import"./index-v6ghzghn.js";
22
- import"./index-myjqj3na.js";
23
- import"./index-vgktct21.js";
24
- import"./index-tww9qw9z.js";
25
- import"./index-fzqn2kk8.js";
26
- import"./index-dtet46e6.js";
21
+ import"./index-y3n9ry9q.js";
22
+ import"./index-n5xwza76.js";
23
+ import"./index-9bzgea2y.js";
24
+ import"./index-rpnkp79f.js";
25
+ import"./index-fd6b9f38.js";
26
+ import"./index-hfnyykvm.js";
27
27
  import"./index-cjapb4hy.js";
28
- import"./index-g8jd3h4r.js";
28
+ import"./index-6s3ab22d.js";
29
29
  import"./index-pt7h91zc.js";
30
30
  import"./index-q7sjgr1y.js";
31
- import"./index-qzkrcz1r.js";
32
- import"./index-c5gb6a86.js";
31
+ import"./index-yfbk69b1.js";
32
+ import"./index-9v43y7y6.js";
33
33
  import"./index-6b295cas.js";
34
34
  import"./index-9nyqt3kb.js";
35
- import"./index-cp9h2sqb.js";
35
+ import"./index-6xppb1er.js";
36
36
  import"./index-v3bmwmqw.js";
37
- import"./index-6k70exke.js";
38
- import"./index-2qpme44n.js";
39
- import"./index-72eh47b2.js";
37
+ import"./index-f3ttgqak.js";
38
+ import"./index-jrs2qh6j.js";
39
+ import"./index-d7pznffh.js";
40
40
  import"./index-g4fs6z4e.js";
41
- import"./index-xpwp9hw1.js";
42
- import"./index-zya4a544.js";
43
- import"./index-gkr6ns9n.js";
41
+ import"./index-dy7nztyp.js";
42
+ import"./index-ajkdt5b8.js";
43
+ import"./index-43v5axvm.js";
44
44
  import"./index-m9zzj4ee.js";
45
- import"./index-eaess7dm.js";
45
+ import"./index-84k9zzv1.js";
46
46
  import"./index-2s7dvzff.js";
47
- import"./index-j4pxkvw3.js";
48
- import"./index-5dws7eyb.js";
47
+ import"./index-3dpb3kps.js";
48
+ import"./index-w2vbaczx.js";
49
49
  import"./index-rtry5xyf.js";
50
- import"./index-6vwnm3sm.js";
50
+ import"./index-7bfshvq1.js";
51
51
  import"./index-g22dps7x.js";
52
52
  import"./index-0725jpp7.js";
53
- import"./index-kn16k0fv.js";
54
- import"./index-54p1vs33.js";
55
- import"./index-a9m7h5v0.js";
56
- import"./index-dt4cjxbz.js";
57
- import"./index-mbn4vn3z.js";
58
- import"./index-8zj647hc.js";
53
+ import"./index-r8mavcg6.js";
54
+ import"./index-at34nry4.js";
55
+ import"./index-qh93qjc2.js";
56
+ import"./index-st80sjg7.js";
57
+ import"./index-vg8sxg12.js";
58
+ import"./index-0e318vgt.js";
59
59
  import"./index-ry16d01s.js";
60
60
  import"./index-rdm3px0g.js";
61
61
  import"./index-7pmbnjvj.js";
62
- import"./index-4twjbsfw.js";
63
- import"./index-rsfvxaw0.js";
62
+ import"./index-ndec8akq.js";
63
+ import"./index-cwr69qw7.js";
64
64
  import"./index-vzm6zre7.js";
65
65
  import"./index-ae75rja9.js";
66
- import"./index-bgzpw6ge.js";
67
- import"./index-1n7sf9gz.js";
66
+ import"./index-3atkcqpb.js";
67
+ import"./index-5rkh69f3.js";
68
68
  import"./index-e8k0v19e.js";
69
69
  import"./index-t7hmqgjy.js";
70
70
  import"./index-mtqwyjrg.js";
71
71
  import"./index-fzpt2djt.js";
72
72
  import"./index-ejhxgyvm.js";
73
73
  import"./index-7g4c7s5r.js";
74
- import"./index-nwswxes7.js";
74
+ import"./index-hfssjyxs.js";
75
75
  import"./index-gx2vp8gx.js";
76
- import"./index-rqapvhh5.js";
76
+ import"./index-0xe19j9g.js";
77
77
  import"./index-zxdawwc7.js";
78
- import"./index-s68yyat0.js";
79
- import"./index-py8wpe81.js";
78
+ import"./index-4ftg3p9n.js";
79
+ import"./index-1jt12p3y.js";
80
80
  import"./index-bk5tah7q.js";
81
81
  import"./index-gknz3bv1.js";
82
82
  import"./index-zpsr8rpc.js";
@@ -7,14 +7,14 @@ import {
7
7
  parseSpeckitTasksContent,
8
8
  propagateSpeckitCheckoff,
9
9
  writeSpeckitCheckoffLedger
10
- } from "./index-6k70exke.js";
10
+ } from "./index-f3ttgqak.js";
11
11
  import"./index-ejhxgyvm.js";
12
12
  import"./index-7g4c7s5r.js";
13
- import"./index-nwswxes7.js";
14
- import"./index-rqapvhh5.js";
13
+ import"./index-hfssjyxs.js";
14
+ import"./index-0xe19j9g.js";
15
15
  import"./index-zxdawwc7.js";
16
- import"./index-s68yyat0.js";
17
- import"./index-py8wpe81.js";
16
+ import"./index-4ftg3p9n.js";
17
+ import"./index-1jt12p3y.js";
18
18
  import"./index-bk5tah7q.js";
19
19
  import"./index-gknz3bv1.js";
20
20
  import"./index-zpsr8rpc.js";
@@ -46,11 +46,11 @@ import {
46
46
  shouldSkipSnapshot,
47
47
  switchPrFeedbackTrackingCandidateAsync,
48
48
  workspaceSnapshotMatches
49
- } from "./index-fzqn2kk8.js";
50
- import"./index-eaess7dm.js";
49
+ } from "./index-fd6b9f38.js";
50
+ import"./index-84k9zzv1.js";
51
51
  import"./index-2s7dvzff.js";
52
52
  import"./index-fzpt2djt.js";
53
- import"./index-nwswxes7.js";
53
+ import"./index-hfssjyxs.js";
54
54
  import"./index-zxdawwc7.js";
55
55
  import"./index-zpsr8rpc.js";
56
56
  import"./index-zgwm4ryv.js";
@@ -6,28 +6,28 @@ import {
6
6
  WORKTREE_PROVISIONING_OWNER_LEASE_MS,
7
7
  removeWorktreeProvisioningOwner,
8
8
  scanWorktreeProvisioningOwnersForRecovery
9
- } from "./index-g8jd3h4r.js";
9
+ } from "./index-6s3ab22d.js";
10
10
  import {
11
11
  scanWorktreeMergeFailuresForRecovery
12
12
  } from "./index-v3bmwmqw.js";
13
13
  import {
14
14
  scanDelegationFallbacksForRecovery,
15
15
  scanDelegationsForRecovery
16
- } from "./index-xpwp9hw1.js";
17
- import"./index-eaess7dm.js";
16
+ } from "./index-dy7nztyp.js";
17
+ import"./index-84k9zzv1.js";
18
18
  import"./index-2s7dvzff.js";
19
- import"./index-dt4cjxbz.js";
20
- import"./index-mbn4vn3z.js";
21
- import"./index-8zj647hc.js";
19
+ import"./index-st80sjg7.js";
20
+ import"./index-vg8sxg12.js";
21
+ import"./index-0e318vgt.js";
22
22
  import"./index-ry16d01s.js";
23
23
  import"./index-rdm3px0g.js";
24
24
  import"./index-7pmbnjvj.js";
25
- import"./index-4twjbsfw.js";
26
- import"./index-rsfvxaw0.js";
25
+ import"./index-ndec8akq.js";
26
+ import"./index-cwr69qw7.js";
27
27
  import"./index-vzm6zre7.js";
28
28
  import"./index-ae75rja9.js";
29
- import"./index-bgzpw6ge.js";
30
- import"./index-1n7sf9gz.js";
29
+ import"./index-3atkcqpb.js";
30
+ import"./index-5rkh69f3.js";
31
31
  import"./index-e8k0v19e.js";
32
32
  import"./index-t7hmqgjy.js";
33
33
  import"./index-mtqwyjrg.js";
@@ -36,7 +36,7 @@ import {
36
36
  } from "./index-fzpt2djt.js";
37
37
  import"./index-ejhxgyvm.js";
38
38
  import"./index-7g4c7s5r.js";
39
- import"./index-nwswxes7.js";
39
+ import"./index-hfssjyxs.js";
40
40
  import"./index-zxdawwc7.js";
41
41
  import"./index-bk5tah7q.js";
42
42
  import"./index-gknz3bv1.js";
@@ -25,77 +25,77 @@ import {
25
25
  sanitizeWorktreeTaskId,
26
26
  standardWorktreeByCallID,
27
27
  standardWorktreeSerializationSessions
28
- } from "./index-5gyq54c5.js";
29
- import"./index-22ww8fjt.js";
30
- import"./index-g2phkwh2.js";
31
- import"./index-xwxqtdwz.js";
28
+ } from "./index-vjytfp05.js";
29
+ import"./index-51dxek4p.js";
30
+ import"./index-ehab3z5y.js";
31
+ import"./index-48h1yn6c.js";
32
32
  import"./index-j2vv0h13.js";
33
- import"./index-0e1nxkte.js";
34
- import"./index-5gy5dc2n.js";
33
+ import"./index-668npagp.js";
34
+ import"./index-7njm9jk1.js";
35
35
  import"./index-txdagbh7.js";
36
- import"./index-c6wzbs0g.js";
36
+ import"./index-vfdkvvkf.js";
37
37
  import"./index-rdec0y3z.js";
38
- import"./index-v6ghzghn.js";
39
- import"./index-myjqj3na.js";
40
- import"./index-vgktct21.js";
41
- import"./index-tww9qw9z.js";
42
- import"./index-fzqn2kk8.js";
43
- import"./index-dtet46e6.js";
38
+ import"./index-y3n9ry9q.js";
39
+ import"./index-n5xwza76.js";
40
+ import"./index-9bzgea2y.js";
41
+ import"./index-rpnkp79f.js";
42
+ import"./index-fd6b9f38.js";
43
+ import"./index-hfnyykvm.js";
44
44
  import"./index-cjapb4hy.js";
45
- import"./index-g8jd3h4r.js";
45
+ import"./index-6s3ab22d.js";
46
46
  import"./index-pt7h91zc.js";
47
47
  import"./index-q7sjgr1y.js";
48
- import"./index-qzkrcz1r.js";
49
- import"./index-c5gb6a86.js";
48
+ import"./index-yfbk69b1.js";
49
+ import"./index-9v43y7y6.js";
50
50
  import"./index-6b295cas.js";
51
51
  import"./index-9nyqt3kb.js";
52
- import"./index-cp9h2sqb.js";
52
+ import"./index-6xppb1er.js";
53
53
  import"./index-v3bmwmqw.js";
54
- import"./index-6k70exke.js";
55
- import"./index-2qpme44n.js";
56
- import"./index-72eh47b2.js";
54
+ import"./index-f3ttgqak.js";
55
+ import"./index-jrs2qh6j.js";
56
+ import"./index-d7pznffh.js";
57
57
  import"./index-g4fs6z4e.js";
58
- import"./index-xpwp9hw1.js";
59
- import"./index-zya4a544.js";
60
- import"./index-gkr6ns9n.js";
58
+ import"./index-dy7nztyp.js";
59
+ import"./index-ajkdt5b8.js";
60
+ import"./index-43v5axvm.js";
61
61
  import"./index-m9zzj4ee.js";
62
- import"./index-eaess7dm.js";
62
+ import"./index-84k9zzv1.js";
63
63
  import"./index-2s7dvzff.js";
64
- import"./index-j4pxkvw3.js";
65
- import"./index-5dws7eyb.js";
64
+ import"./index-3dpb3kps.js";
65
+ import"./index-w2vbaczx.js";
66
66
  import"./index-rtry5xyf.js";
67
67
  import {
68
68
  resolveWorktreeIsolationConfig
69
- } from "./index-6vwnm3sm.js";
69
+ } from "./index-7bfshvq1.js";
70
70
  import"./index-g22dps7x.js";
71
71
  import"./index-0725jpp7.js";
72
- import"./index-kn16k0fv.js";
73
- import"./index-54p1vs33.js";
74
- import"./index-a9m7h5v0.js";
75
- import"./index-dt4cjxbz.js";
76
- import"./index-mbn4vn3z.js";
77
- import"./index-8zj647hc.js";
72
+ import"./index-r8mavcg6.js";
73
+ import"./index-at34nry4.js";
74
+ import"./index-qh93qjc2.js";
75
+ import"./index-st80sjg7.js";
76
+ import"./index-vg8sxg12.js";
77
+ import"./index-0e318vgt.js";
78
78
  import"./index-ry16d01s.js";
79
79
  import"./index-rdm3px0g.js";
80
80
  import"./index-7pmbnjvj.js";
81
- import"./index-4twjbsfw.js";
82
- import"./index-rsfvxaw0.js";
81
+ import"./index-ndec8akq.js";
82
+ import"./index-cwr69qw7.js";
83
83
  import"./index-vzm6zre7.js";
84
84
  import"./index-ae75rja9.js";
85
- import"./index-bgzpw6ge.js";
86
- import"./index-1n7sf9gz.js";
85
+ import"./index-3atkcqpb.js";
86
+ import"./index-5rkh69f3.js";
87
87
  import"./index-e8k0v19e.js";
88
88
  import"./index-t7hmqgjy.js";
89
89
  import"./index-mtqwyjrg.js";
90
90
  import"./index-fzpt2djt.js";
91
91
  import"./index-ejhxgyvm.js";
92
92
  import"./index-7g4c7s5r.js";
93
- import"./index-nwswxes7.js";
93
+ import"./index-hfssjyxs.js";
94
94
  import"./index-gx2vp8gx.js";
95
- import"./index-rqapvhh5.js";
95
+ import"./index-0xe19j9g.js";
96
96
  import"./index-zxdawwc7.js";
97
- import"./index-s68yyat0.js";
98
- import"./index-py8wpe81.js";
97
+ import"./index-4ftg3p9n.js";
98
+ import"./index-1jt12p3y.js";
99
99
  import"./index-bk5tah7q.js";
100
100
  import"./index-gknz3bv1.js";
101
101
  import"./index-zpsr8rpc.js";
@@ -715,10 +715,10 @@ export declare const COMMAND_REGISTRY: {
715
715
  readonly epic: {
716
716
  readonly handler: (ctx: CommandContext) => Promise<string>;
717
717
  readonly description: "Open, inspect, and close a plan-scoped epic (coupling-aware parallel execution of the current plan)";
718
- readonly details: "An epic is bound to ONE plan: `start` opens it for the current plan, `close` ends it. Requires `epic.mode.enabled: true` in config (top-level `epic` block; no `turbo` block needed — the legacy `turbo.epic` path is still accepted and migrated). `start [--force]` refuses, in order: epic-disabled-by-config, host-unsupported (the host gives the plugin no OpenCode SDK client — OpenCode 2 does not yet — so worktree-isolated coders and the phase review cannot run), no-plan / plan-ledger-unreadable, epic-already-open (idempotent for the same plan) / epic-open-for-other-plan, turbo-active (config turbo_mode, a session with Turbo on, or a running Lean run — Epic enables neither Lean nor Turbo and never waives per-task QA), dirty-baseline (git: uncommitted changes outside .swarm/), detached-head / epic-branch-exists (epic-branch policy), in-flight-coders (any coder dispatch, background delegation, unsettled settlement, or preserved/recovery lane), not-epic-sized (too few pending tasks, insufficient scope coverage, or insufficient effective speedup — run it in Balanced, or reshape it with the plan-shaping suggestions shown; `--force` overrides and is recorded). Non-git projects run an epic serially (one task per wave). Git epics default to `epic.commit_policy: \"epic-branch\"`: start checks out `swarm/epic/<epicKey>` and every Epic commit goes there (epic_next_wave blocks with epic-branch-mismatch, and no landing or residue is committed, while HEAD is elsewhere); `current-branch` keeps commits on the starting branch. In a git epic every coder runs in an isolated worktree (refused EPIC_ISOLATION_DEGRADED when isolation is unavailable) and lands as a `swarm(task <id>): …` merge commit; main-tree files a non-coder writer (test_engineer, docs) wrote for a task are committed as residue of that task; update_task_status writes nothing to git; wave close records the commit of each task as `refs/swarm/epics/<epicKey>/tasks/<id>` (deleted at close unless `epic.retain_refs`; never pushed by default). While open, the architect calls epic_next_wave and does what its status says: it issues one wave at a time (tasks with non-conflicting declared scopes — exclusive tasks alone, at most one task per densely coupled component; phases strictly in order), the architect dispatches one Task per taskId in ONE message and runs per-task QA (pre_check_batch → reviewer + test_engineer → update_task_status(completed)), and the next epic_next_wave closes the wave (recording outcomes and declared-vs-actual divergence) and issues the next; when a phase is done it returns phase-ready-for-review → epic_phase_review → phase_complete. `close [--abandon] [--land squash|merge|none]` refuses while tasks are pending (or the epic is orphaned / unreadable) unless `--abandon`, refuses a dirty tree before landing, writes a close report (epic-report-v2, embedding the epic scorecard) to .swarm/epic/reports/ and .swarm/epic-prior/reports/ (newest 50 kept), and lands the epic branch onto the original branch: squash (default — staged, uncommitted changes for you to review and commit), merge (a --no-ff merge commit), or none (switch back only). The epic branch is kept (remove it with `git branch -D` once committed). A landing conflict is rolled back (the attempted squash or merge is undone) and the epic stays closing — rerun close to resume. `--abandon` never lands; it switches back to the original branch when the tree is clean. `status [--repair-refs]` (also bare /swarm epic) shows the epic, its waves, phases, the task components recorded with the latest wave and recorded divergence, orphan detection (plan renamed or replaced), sentinel/row repair, recorded worktree merge failures, and retires legacy Epic v1 session state once; `--repair-refs` re-adopts task commits a rebase or amend made unreachable from HEAD. `report [<key>|last] [--format json]` shows the epic scorecard: live for the open epic (bare `report`), else from the close report of a past epic in .swarm/epic-prior/reports/ (`last` = newest; `<key>` = a report or epic key) — tasks completed in the epic, waves (count, width), time over closed waves (wave span, task issue→resolve time, and their ratio, a concurrency factor that is NOT a speedup: it includes queueing behind serialized QA), conflicts (merge-back failures, undeclared writes), rework (extra generations, reopens), first-pass gate rates (upper bounds: the failure history is bounded), forced/sizing at start and learned hot files. Epics learn from their outcomes: undeclared writes teach learned co-writes (a task declaring D that also wrote f makes later tasks declaring D conflict with tasks on f — planner analysis only, never write authorization) and incidents (undeclared writes, merge conflicts, Stage B failures, rework, reopens) in excess of clean exposures make a file hot (a task declaring it runs alone) — undeclared writes its strongest learned co-writer explains are discounted (expansion already separates them), so one declarer writing a file is not heat; an empty history learns nothing (neutral start). Each wave close updates the posterior of the epic; close merges it into the project prior .swarm/epic-prior/learning.json (decayed per epic and by age; kept across /swarm close; `epic.learning.*`). `learning` shows what the planner learned and uses now; `prior [show]` shows the project prior; `prior reset` previews and prints a single-use confirm token (15 minutes); `prior reset --confirm=<token>` clears it. Also: clear-merge-failure <taskId> [--confirm]. The former `on` / `off` toggles, the `decide` / `last` subcommands and `calibration` (renamed `learning`) were removed.";
718
+ readonly details: "An epic is bound to ONE plan: `start` opens it for the current plan, `close` ends it. Requires `epic.mode.enabled: true` in config (top-level `epic` block; no `turbo` block needed — the legacy `turbo.epic` path is still accepted and migrated). `start [--force]` refuses, in order: epic-disabled-by-config, host-unsupported (the host gives the plugin no OpenCode SDK client; on OpenCode 2 the v2 adapter now ships one, so this refusal no longer fires there — v2 is held by the child-session placement work instead), no-plan / plan-ledger-unreadable, epic-already-open (idempotent for the same plan) / epic-open-for-other-plan, turbo-active (config turbo_mode, a session with Turbo on, or a running Lean run — Epic enables neither Lean nor Turbo and never waives per-task QA), dirty-baseline (git: uncommitted changes outside .swarm/), detached-head / epic-branch-exists (epic-branch policy), in-flight-coders (any coder dispatch, background delegation, unsettled settlement, or preserved/recovery lane), not-epic-sized (too few pending tasks, insufficient scope coverage, or insufficient effective speedup — run it in Balanced, or reshape it with the plan-shaping suggestions shown; `--force` overrides and is recorded). Non-git projects run an epic serially (one task per wave). Git epics default to `epic.commit_policy: \"epic-branch\"`: start checks out `swarm/epic/<epicKey>` and every Epic commit goes there (epic_next_wave blocks with epic-branch-mismatch, and no landing or residue is committed, while HEAD is elsewhere); `current-branch` keeps commits on the starting branch. In a git epic every coder runs in an isolated worktree (refused EPIC_ISOLATION_DEGRADED when isolation is unavailable) and lands as a `swarm(task <id>): …` merge commit; main-tree files a non-coder writer (test_engineer, docs) wrote for a task are committed as residue of that task; update_task_status writes nothing to git; wave close records the commit of each task as `refs/swarm/epics/<epicKey>/tasks/<id>` (deleted at close unless `epic.retain_refs`; never pushed by default). While open, the architect calls epic_next_wave and does what its status says: it issues one wave at a time (tasks with non-conflicting declared scopes — exclusive tasks alone, at most one task per densely coupled component; phases strictly in order), the architect dispatches one Task per taskId in ONE message and runs per-task QA (pre_check_batch → reviewer + test_engineer → update_task_status(completed)), and the next epic_next_wave closes the wave (recording outcomes and declared-vs-actual divergence) and issues the next; when a phase is done it returns phase-ready-for-review → epic_phase_review → phase_complete. `close [--abandon] [--land squash|merge|none]` refuses while tasks are pending (or the epic is orphaned / unreadable) unless `--abandon`, refuses a dirty tree before landing, writes a close report (epic-report-v2, embedding the epic scorecard) to .swarm/epic/reports/ and .swarm/epic-prior/reports/ (newest 50 kept), and lands the epic branch onto the original branch: squash (default — staged, uncommitted changes for you to review and commit), merge (a --no-ff merge commit), or none (switch back only). The epic branch is kept (remove it with `git branch -D` once committed). A landing conflict is rolled back (the attempted squash or merge is undone) and the epic stays closing — rerun close to resume. `--abandon` never lands; it switches back to the original branch when the tree is clean. `status [--repair-refs]` (also bare /swarm epic) shows the epic, its waves, phases, the task components recorded with the latest wave and recorded divergence, orphan detection (plan renamed or replaced), sentinel/row repair, recorded worktree merge failures, and retires legacy Epic v1 session state once; `--repair-refs` re-adopts task commits a rebase or amend made unreachable from HEAD. `report [<key>|last] [--format json]` shows the epic scorecard: live for the open epic (bare `report`), else from the close report of a past epic in .swarm/epic-prior/reports/ (`last` = newest; `<key>` = a report or epic key) — tasks completed in the epic, waves (count, width), time over closed waves (wave span, task issue→resolve time, and their ratio, a concurrency factor that is NOT a speedup: it includes queueing behind serialized QA), conflicts (merge-back failures, undeclared writes), rework (extra generations, reopens), first-pass gate rates (upper bounds: the failure history is bounded), forced/sizing at start and learned hot files. Epics learn from their outcomes: undeclared writes teach learned co-writes (a task declaring D that also wrote f makes later tasks declaring D conflict with tasks on f — planner analysis only, never write authorization) and incidents (undeclared writes, merge conflicts, Stage B failures, rework, reopens) in excess of clean exposures make a file hot (a task declaring it runs alone) — undeclared writes its strongest learned co-writer explains are discounted (expansion already separates them), so one declarer writing a file is not heat; an empty history learns nothing (neutral start). Each wave close updates the posterior of the epic; close merges it into the project prior .swarm/epic-prior/learning.json (decayed per epic and by age; kept across /swarm close; `epic.learning.*`). `learning` shows what the planner learned and uses now; `prior [show]` shows the project prior; `prior reset` previews and prints a single-use confirm token (15 minutes); `prior reset --confirm=<token>` clears it. Also: clear-merge-failure <taskId> [--confirm]. The former `on` / `off` toggles, the `decide` / `last` subcommands and `calibration` (renamed `learning`) were removed.";
719
719
  readonly args: "start [--force] | close [--abandon] [--land squash|merge|none] | status [--repair-refs] | report [<key>|last] [--format json] | learning | prior [show|reset [--confirm=<token>]] | clear-merge-failure <taskId> [--confirm]";
720
720
  readonly category: "diagnostics";
721
- readonly toolPolicy: "none";
721
+ readonly toolPolicy: "human-only";
722
722
  };
723
723
  readonly 'dark-matter': {
724
724
  readonly handler: (ctx: CommandContext) => Promise<string>;
@@ -97,7 +97,7 @@ export interface EpicStartOptions {
97
97
  * with `client: undefined` (`src/host/v2/setup.ts`), so an epic there could
98
98
  * neither dispatch a coder nor complete a phase.
99
99
  */
100
- export declare const EPIC_HOST_UNSUPPORTED_MESSAGE = "This OpenCode host gives the plugin no SDK client (OpenCode 2 does not yet, see docs/host/v2-hook-inventory.md). Epic needs it for worktree-isolated coders and for the epic_phase_review reviewer/critic, so an epic here could neither run its coders nor complete a phase. Run the plan in Balanced, or use an OpenCode 1.x host (1.18.29+).";
100
+ export declare const EPIC_HOST_UNSUPPORTED_MESSAGE = "This OpenCode host gives the plugin no SDK client. Epic needs it for worktree-isolated coders and for the epic_phase_review reviewer/critic, so an epic here could neither run its coders nor complete a phase. Run the plan in Balanced, or use an OpenCode 1.x host (1.18.29+). (On OpenCode 2 the v2 adapter now ships a session-capable client, so this refusal no longer fires there \u2014 Epic on v2 is held by the #3169 child-session placement work instead.)";
101
101
  /** Durable Lean run marked `running` — read without the migrating Lean reader. */
102
102
  declare function findRunningLeanRun(directory: string): string | null;
103
103
  /** Why Turbo blocks the start, or null (M-a). */
@@ -163,10 +163,13 @@ export declare const _internals: {
163
163
  hasActiveTurboMode: () => boolean;
164
164
  /**
165
165
  * False only when the plugin was initialized on a host that supplies no
166
- * SDK client: the v1 init stores the host client, the OpenCode 2 adapter
167
- * stores `undefined`, and an uninitialized process (tests, scripts) keeps
168
- * the initial `null` — which is not a host verdict, so it is allowed.
169
- * Capability-based: once a v2 client is wired, Epic starts there too.
166
+ * SDK client: the v1 init stores the host client, an uninitialized process
167
+ * (tests, scripts) keeps the initial `null`, and only a genuinely
168
+ * client-less host stores `undefined` — which is not a host verdict, so
169
+ * it is allowed. Capability-based: the v2 adapter now ships a
170
+ * session-capable client (the #3169 session shim), so this passes on v2;
171
+ * Epic's v2 execution is held by the entry-point double-gate and the
172
+ * child-session placement work, not by this check.
170
173
  */
171
174
  hostProvidesClient: () => boolean;
172
175
  findRunningLeanRun: typeof findRunningLeanRun;
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Shared gate-aware injection policy (issue #3100).
3
+ *
4
+ * One deterministic decision point for session-state directive channels,
5
+ * keyed by PR-workflow gate mode × content class — never by content
6
+ * heuristics. #3093's plan-cursor/parallel-pre-check suppression is the
7
+ * first registered consumer (migrated with zero behavior change); the
8
+ * agent-activity table channel is the second (new suppression under
9
+ * PR_REVIEW). The swarm-command banner and delegation [NEXT] steering are
10
+ * load-bearing and structurally never-suppressed.
11
+ *
12
+ * Proposed suppression matrix (issue #3100 AC5 — the maintainer confirms
13
+ * the matrix on the issue before merge; this module ships the proposed
14
+ * shape and a ratchet test pins it):
15
+ *
16
+ * | content class | channels | PR_REVIEW | PR_FEEDBACK | no gate* |
17
+ * |---------------------|--------------------------------|-----------|-------------|----------|
18
+ * | plan-execution | plan-cursor, parallel-precheck | suppress | inject | inject |
19
+ * | agent-activity | agent-activity tables | suppress | inject | inject |
20
+ * | command-contract | command-banner | inject | inject | inject |
21
+ * | delegation-steering | delegation-steering | inject | inject | inject |
22
+ *
23
+ * *no gate / a gate owned by a different session / a gate read that
24
+ * failed all arrive here as a null gate state and fail toward emission —
25
+ * matching the #3093 fail-open composition convention: a miss costs extra
26
+ * directives, never hidden ones. (The gate-state READER throws on invalid
27
+ * or unreadable state; the null is the composer's `.catch` result, not the
28
+ * reader's. This module is pure and has no failure path of its own.)
29
+ *
30
+ * Deliberate asymmetry (#3161 PRR-010): composition keys the gate read on
31
+ * the RAW composing sessionID (the composer owns the read; see
32
+ * system-enhancer), while PR-workflow ENFORCEMENT resolves the gate-owning
33
+ * ancestor session via pr-workflow-session-resolver. A pre-gate child
34
+ * session that outlives gate activation therefore still receives these
35
+ * directives. This is intentional: the #3093 session-scoping pin requires
36
+ * a different session's gate NOT to suppress, and changing composition to
37
+ * ancestor resolution would alter that shipped behavior.
38
+ *
39
+ * Divergence disclosure (plan-critic rounds 1/3): `command-banner` and
40
+ * `delegation-steering` are REGISTERED here but their composers do not
41
+ * consult this policy at runtime — the never-suppress guarantee is
42
+ * structural (empty suppression lists below, pinned by a ratchet test),
43
+ * not an emission-site check. If emission-path governance is ever wanted,
44
+ * the fallback is wiring each composer through shouldInjectChannel (the
45
+ * decision is gate-independent for never-suppress classes, so no new gate
46
+ * read would be required).
47
+ *
48
+ * Budget-report consumer (#3161 PRR-003): the context-budget report
49
+ * consumes the plan-cursor channel decision (as an explicit emission
50
+ * flag) so it stops counting a policy-suppressed cursor.
51
+ *
52
+ * Known residual budget-report divergences, NOT yet tracked by an issue
53
+ * (verify they still exist before filing):
54
+ * - DISCOVER-mode counting — the emission conditions require a non-DISCOVER
55
+ * mode while the report is mode-blind, so in DISCOVER it still counts a
56
+ * cursor the prompt never contained.
57
+ * - Path B ranked-drop counting — a cursor candidate skipped by the
58
+ * scoring injection loop is still counted.
59
+ * #3161 tracks the budget twin itself (PRR-003), not these two.
60
+ */
61
+ import type { PrWorkflowMode } from './pr-workflow-gate';
62
+ /** Content classes the policy reasons about. */
63
+ export type InjectionContentClass = 'plan-execution' | 'agent-activity' | 'command-contract' | 'delegation-steering';
64
+ /** The directive channels registered as policy consumers (issue #3100 scope). */
65
+ export type InjectionChannel = 'plan-cursor' | 'parallel-precheck' | 'agent-activity' | 'command-banner' | 'delegation-steering';
66
+ /**
67
+ * Minimal gate-state shape the policy needs (structural: a full
68
+ * PrWorkflowGateState satisfies it, keeping this module pure and
69
+ * runtime-independent of the gate store).
70
+ */
71
+ export interface InjectionGateState {
72
+ mode: PrWorkflowMode;
73
+ }
74
+ /** Channel registry: every registered channel maps to exactly one content class. */
75
+ export declare const INJECTION_CHANNEL_CONTENT_CLASS: Readonly<Record<InjectionChannel, InjectionContentClass>>;
76
+ /**
77
+ * The suppression matrix: gate modes under which a content class is
78
+ * suppressed. Empty list = must-not-suppress under every mode (the two
79
+ * load-bearing classes; a ratchet test pins their emptiness).
80
+ */
81
+ export declare const SUPPRESSED_UNDER: Readonly<Record<InjectionContentClass, readonly InjectionGateState['mode'][]>>;
82
+ /**
83
+ * Decide whether a channel may inject this turn. Deterministic: a pure
84
+ * function of the channel's content class and the gate mode. Unknown
85
+ * channels and absent gate state (no gate, read failure, foreign session)
86
+ * fail toward emission.
87
+ *
88
+ * The own-property check (not a truthiness check) is load-bearing: the
89
+ * registries are plain object literals, so a PROTOTYPE key such as
90
+ * 'constructor' or 'toString' resolves to a truthy inherited value that
91
+ * would otherwise pass a truthiness guard and then throw on
92
+ * `SUPPRESSED_UNDER[<Function>].includes` instead of failing open.
93
+ */
94
+ export declare function shouldInjectChannel(channel: InjectionChannel, gateState: InjectionGateState | null): boolean;
@@ -15,6 +15,7 @@ import { type PrReviewDimensionCancellationRecord, type PrReviewPartialBaseCover
15
15
  import { type CriticOutcome } from '../pr-review/finding-policy.js';
16
16
  import { type PrReviewComposablePhase, type PrReviewItemClaim, type PrReviewPhaseComposition, parseCriticVerdict } from '../pr-review/legacy-transcript-adapter.js';
17
17
  import { withPrWorkflowCheckoutMutationLock, workflowCheckoutMutationLockRelativePath, workflowGateStateLockRelativePath, workflowGateStateRelativePath } from '../pr-review/persistence.js';
18
+ import { type PrReviewVerdictSettlementPhase } from '../pr-review/verdict-settlement.js';
18
19
  import { type ForgeContext } from '../providers/forge-provider.js';
19
20
  import { resolveGhBinary } from '../tools/gh-evidence.js';
20
21
  import { classifyLaneLivenessCondition, type EffectivePrLaneHorizon, resolveEffectivePrLaneHorizonMs } from './lane-liveness-watchdog.js';
@@ -390,6 +391,14 @@ type PrReviewArtifactRecord = {
390
391
  */
391
392
  risk_impact?: PrReviewRiskImpact;
392
393
  risk_tags?: PrReviewRiskTag[];
394
+ /**
395
+ * Model-supplied critic status (issue #3101). Present on post_critic
396
+ * records when the caller attests a critic outcome; the records-match
397
+ * validator rejects any value on a disclosed-dead critic item (the model
398
+ * never authors a critic status there — the writer's settlement injection
399
+ * derives it).
400
+ */
401
+ critic_status?: string;
393
402
  };
394
403
  interface PrFeedbackScopeDeclarationRecord {
395
404
  taskId: string;
@@ -552,6 +561,14 @@ export interface PrWorkflowGateState {
552
561
  prReviewArtifactRunId?: string;
553
562
  prReviewFindingsPath?: string;
554
563
  prReviewArtifactBoundaries?: PrReviewArtifactBoundary[];
564
+ /**
565
+ * Issue #3101: sha256 of each phase's persisted N-of-M verdict-settlement
566
+ * receipt (the exact file bytes, recorded at persist time). Consumption
567
+ * re-verifies the digest so a receipt rewritten after the fact under the
568
+ * same head/digest identity fails closed — the same controller-held anchor
569
+ * discipline as `prReviewCoverageDisclosureDigest` (issue #2383).
570
+ */
571
+ prReviewVerdictSettlementDigests?: Partial<Record<PrReviewVerdictSettlementPhase, string>>;
555
572
  prReviewPartialBaseCoverage?: PrReviewPartialBaseCoverageRecord;
556
573
  prReviewCoverageDisclosurePath?: string;
557
574
  prReviewCoverageDisclosureDigest?: string;
@@ -2191,6 +2208,32 @@ interface PrReviewGateContext {
2191
2208
  */
2192
2209
  candidateSeverities?: Map<string, CandidateSeverity>;
2193
2210
  }
2211
+ /**
2212
+ * Issue #3095: read-surface reuse of the derivation above for
2213
+ * `pr_workflow_status`. The derivation itself stays single-sourced: every
2214
+ * production caller is a validation/enforcement path that must keep throwing,
2215
+ * so this wrapper exists only to thread the SAME result to a read-only status
2216
+ * tool and to degrade fail-soft instead of blocking an observation. A status
2217
+ * read must never fail the whole tool for an unbound head or an unreadable
2218
+ * revision digest — the caller renders the `unavailable` arm (with the
2219
+ * bounded reason) and still projects boundaries and lane coverage.
2220
+ *
2221
+ * Read-only by construction: it performs no writes and mutates no state.
2222
+ * COST DISCLOSURE (not free): resolving the derivation context runs the
2223
+ * revision-digest computation on every bound PR_REVIEW call — three bounded
2224
+ * git processes plus a re-read/hash of every changed file
2225
+ * (`createPrReviewGateContext` → `resolvePrWorkflowRevisionDigestForGate` →
2226
+ * the workspace-snapshot digest path). An observation surface pays the same
2227
+ * digest price an enforcement call would.
2228
+ */
2229
+ export type PrReviewCandidateInventoryForStatus = {
2230
+ state: 'available';
2231
+ inventory: string[];
2232
+ } | {
2233
+ state: 'unavailable';
2234
+ reason: string;
2235
+ };
2236
+ export declare function derivePrReviewCandidateInventoryForStatus(directory: string, state: PrWorkflowGateState): Promise<PrReviewCandidateInventoryForStatus>;
2194
2237
  /**
2195
2238
  * Extract candidate ids from a discovery artifact's [CANDIDATE] rows. When
2196
2239
  * `scopeToLanes` is given (base-dimension sources credited for only a subset
@@ -2227,6 +2270,25 @@ interface CandidateArtifactParseResult {
2227
2270
  declare function resolvePrReviewRowFamily(workflowLane: string | undefined, mode?: string): RowFormatFamily;
2228
2271
  declare function parseCanonicalCandidateRows(text: string, fallbackFamily: RowFormatFamily): CandidateArtifactParseResult;
2229
2272
  declare function extractCandidateIds(text: string, fallbackFamily: RowFormatFamily, scopeToLanes?: readonly string[]): string[];
2273
+ /**
2274
+ * Issue #3101: the per-item disclosure rows of admitted N-of-M verdict
2275
+ * settlements (both phases, effective sets), for additive tool-response echoes.
2276
+ */
2277
+ export declare function readPrReviewVerdictSettlementReceiptItems(directory: string, sessionID: string): Promise<Array<{
2278
+ itemId: string;
2279
+ sourceBatchId: string;
2280
+ sourceLaneId: string;
2281
+ disposition: string;
2282
+ evidenceClass: string;
2283
+ terminalStatus: string;
2284
+ }>>;
2285
+ /**
2286
+ * Issue #3101: the effective (receipt ∩ current-unclaimed) item ids of an
2287
+ * admitted N-of-M verdict settlement for a phase; empty when no covering
2288
+ * settlement exists. Consumers: the artifact writer's critic-settlement
2289
+ * injection, the exact-cover exemption, and the tool-response echoes.
2290
+ */
2291
+ export declare function readPrReviewVerdictSettlementEffectiveIds(directory: string, sessionID: string, phase: PrReviewVerdictSettlementPhase): Promise<ReadonlySet<string>>;
2230
2292
  /** Read the durable critic settlement projection used by terminal readiness. */
2231
2293
  export declare function readAuthoritativePrReviewCriticSettlements(directory: string, sessionID: string): Promise<Array<{
2232
2294
  findingId: string;
@@ -2246,13 +2308,16 @@ export declare function readAuthoritativePrReviewCriticSettlements(directory: st
2246
2308
  * unchallenged, with the only surface symptom a downstream
2247
2309
  * `no authoritative reviewer verdict` that names a consequence, not the cause.
2248
2310
  *
2249
- * Composition currently makes this unreachable by construction: settlement *is*
2311
+ * Under plain composition this is unreachable by construction: settlement *is*
2250
2312
  * `unclaimed.length === 0` over the very map derivation projects, and claims are
2251
2313
  * filtered to `requiredInventory`, so `unclaimed === []` implies the map covers
2252
- * every required item. This assertion deliberately does **not** rely on that
2253
- * adjacency. It states the property directly so a future refactor that re-splits
2254
- * settlement from derivation fails loudly at the gate instead of silently
2255
- * skipping the critic phase.
2314
+ * every required item. Under an admitted N-of-M verdict settlement (issue
2315
+ * #3101) a settled phase can still carry unclaimed items, and this guard
2316
+ * early-returns for them — on that path the settlement receipt, not this
2317
+ * assertion, is the coverage proof. The property check still stands for every
2318
+ * plain-composition settle so a future refactor that re-splits settlement from
2319
+ * derivation fails loudly at the gate instead of silently skipping the critic
2320
+ * phase.
2256
2321
  *
2257
2322
  * Fail-closed and always on; never downgraded to a warning, because the failure
2258
2323
  * it catches is invisible in the passing direction. Pure over values the caller
@@ -2367,6 +2432,17 @@ export interface PrWorkflowGateRecoveryRead {
2367
2432
  * availability one.
2368
2433
  */
2369
2434
  armedShapeUnreadable: boolean;
2435
+ /**
2436
+ * true when the salvage reconstructed ONLY the abort-relevant fields and
2437
+ * every `prReview*` projection field (base dispatches, artifact
2438
+ * boundaries, run id, findings path, settlement digests) was dropped
2439
+ * because the shadow bytes failed schema validation. The status tool uses
2440
+ * this to mark its derived PR_REVIEW sections `unavailable` instead of
2441
+ * reporting healthy-but-empty coverage — an absent field on a salvaged
2442
+ * state proves nothing about the workflow. Present only when true; a
2443
+ * schema-valid shadow (or an ordinary healthy read) keeps full fidelity.
2444
+ */
2445
+ prReviewProjectionDropped?: boolean;
2370
2446
  }
2371
2447
  /**
2372
2448
  * Recovery-only gate-state reader (issue #2242 R4, wedge W-5).