@mgiles/perk 3.1.0 → 3.3.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 (211) hide show
  1. package/README.md +5 -0
  2. package/extension/authoring/gist/draft.ts +198 -0
  3. package/extension/authoring/gist/prose.ts +46 -0
  4. package/extension/authoring/gist/review.ts +133 -0
  5. package/extension/authoring/gist/save.ts +118 -0
  6. package/extension/authoring/objective/draft.ts +345 -0
  7. package/extension/{factories/objectiveDreamReport.ts → authoring/objective/dreamReportGate.ts} +74 -131
  8. package/extension/authoring/objective/planning.ts +124 -0
  9. package/extension/authoring/objective/prose.ts +103 -0
  10. package/extension/authoring/objective/review.ts +128 -0
  11. package/extension/authoring/objective/save.ts +224 -0
  12. package/extension/authoring/plan/draft.ts +84 -0
  13. package/extension/authoring/plan/prose.ts +41 -0
  14. package/extension/authoring/plan/review.ts +269 -0
  15. package/extension/authoring/plan/save.ts +256 -0
  16. package/extension/authoring/plan/source.ts +82 -0
  17. package/extension/authoring/refinement/context.ts +468 -0
  18. package/extension/authoring/refinement/draft.ts +261 -0
  19. package/extension/authoring/refinement/prose.ts +79 -0
  20. package/extension/authoring/refinement/review.ts +111 -0
  21. package/extension/authoring/refinement/save.ts +119 -0
  22. package/extension/authoring/review/approvalGate.ts +34 -0
  23. package/extension/authoring/review/draftContext.ts +68 -0
  24. package/extension/codeReview/automated.ts +352 -0
  25. package/extension/codeReview/submission.ts +229 -0
  26. package/extension/delivery/address.ts +295 -0
  27. package/extension/delivery/ci.ts +355 -0
  28. package/extension/delivery/commitCompact.ts +93 -0
  29. package/extension/delivery/conflictResolution.ts +247 -0
  30. package/extension/delivery/ready.ts +193 -0
  31. package/extension/delivery/stackConflict.ts +361 -0
  32. package/extension/delivery/stackObjective.ts +16 -0
  33. package/extension/delivery/stackReconcile.ts +165 -0
  34. package/extension/delivery/submit.ts +171 -0
  35. package/extension/index.ts +369 -359
  36. package/extension/learning/analystWave.ts +324 -0
  37. package/extension/learning/audit.ts +667 -0
  38. package/extension/learning/capture.ts +92 -0
  39. package/extension/learning/containment.ts +104 -0
  40. package/extension/{waves/dreamWave.ts → learning/dream.ts} +112 -94
  41. package/extension/learning/dreamAnalysis.ts +435 -0
  42. package/extension/{waves/dreamReducerWave.ts → learning/dreamReducer.ts} +46 -41
  43. package/extension/{waves → learning}/dreamReport.ts +35 -31
  44. package/extension/learning/harvest.ts +491 -0
  45. package/extension/learning/prose.ts +66 -0
  46. package/extension/learning/routing.ts +79 -0
  47. package/extension/pi/v1/bashScanTimeout.ts +64 -0
  48. package/extension/{doors/prReview.ts → pi/v1/codeReview/automated.ts} +215 -310
  49. package/extension/{doors/prReviewBrowser.ts → pi/v1/codeReview/browser.ts} +125 -57
  50. package/extension/{doors/hunkHandoff.ts → pi/v1/codeReview/checkout.ts} +12 -8
  51. package/extension/{doors/reviewWaveTools.ts → pi/v1/codeReview/reviewWave.ts} +169 -116
  52. package/extension/pi/v1/codeReview/stack.ts +606 -0
  53. package/extension/pi/v1/codeReview/submit.ts +354 -0
  54. package/extension/{doors/prReviewTerminal.ts → pi/v1/codeReview/terminal.ts} +32 -27
  55. package/extension/pi/v1/contextEvidence.ts +80 -0
  56. package/extension/pi/v1/contextInjection.ts +207 -0
  57. package/extension/{doors → pi/v1/delivery}/address.ts +163 -265
  58. package/extension/pi/v1/delivery/ci.ts +570 -0
  59. package/extension/pi/v1/delivery/commitCompact.ts +201 -0
  60. package/extension/pi/v1/delivery/conflictResolverEngine.ts +425 -0
  61. package/extension/{doors → pi/v1/delivery}/land.ts +128 -60
  62. package/extension/pi/v1/delivery/ready.ts +322 -0
  63. package/extension/pi/v1/delivery/stackConflictResolver.ts +172 -0
  64. package/extension/pi/v1/delivery/stackDrive.ts +120 -0
  65. package/extension/pi/v1/delivery/stackLand.ts +223 -0
  66. package/extension/pi/v1/delivery/stackRecover.ts +265 -0
  67. package/extension/pi/v1/delivery/stackStatus.ts +237 -0
  68. package/extension/pi/v1/delivery/stackSync.ts +658 -0
  69. package/extension/pi/v1/delivery/submit.ts +389 -0
  70. package/extension/pi/v1/delivery/submitConflict.ts +186 -0
  71. package/extension/pi/v1/draftReview.ts +431 -0
  72. package/extension/{doors → pi/v1}/draftReviewWaveTools.ts +141 -151
  73. package/extension/pi/v1/gist.ts +794 -0
  74. package/extension/pi/v1/learning/audit.ts +186 -0
  75. package/extension/pi/v1/learning/dream.ts +207 -0
  76. package/extension/{doors/learnFactory.ts → pi/v1/learning/factory.ts} +18 -65
  77. package/extension/{doors/harvestWaveTools.ts → pi/v1/learning/harvest.ts} +46 -100
  78. package/extension/pi/v1/learning/learn.ts +585 -0
  79. package/extension/{doors → pi/v1}/lifecycleGates.ts +14 -59
  80. package/extension/{factories → pi/v1}/objective.ts +53 -33
  81. package/extension/pi/v1/objectiveAuthoring.ts +672 -0
  82. package/extension/pi/v1/objectiveDreamGate.ts +160 -0
  83. package/extension/pi/v1/objectivePlanning.ts +776 -0
  84. package/extension/pi/v1/objectiveRefinement.ts +1320 -0
  85. package/extension/pi/v1/objectiveReview.ts +451 -0
  86. package/extension/{doors → pi/v1}/objectiveReviewBrowser.ts +259 -172
  87. package/extension/pi/v1/plan.ts +812 -0
  88. package/extension/pi/v1/planReview.ts +820 -0
  89. package/extension/{doors → pi/v1}/planReviewBrowser.ts +228 -152
  90. package/extension/{doors/annotationPush.ts → pi/v1/providers/annotations.ts} +158 -89
  91. package/extension/pi/v1/providers/plannotator.ts +487 -0
  92. package/extension/{doors → pi/v1/providers}/plannotatorHandoff.ts +152 -34
  93. package/extension/pi/v1/providers/selection.ts +43 -0
  94. package/extension/{adapters/planAdapterTombell.ts → pi/v1/providers/tombell.ts} +43 -72
  95. package/extension/pi/v1/review.ts +538 -0
  96. package/extension/pi/v1/reviewOutcome.ts +9 -0
  97. package/extension/pi/v1/scoutWave.ts +318 -0
  98. package/extension/{doors → pi/v1}/selfcheck.ts +4 -4
  99. package/extension/session/branchWorkflowSession.ts +60 -0
  100. package/extension/session/lifecycle.ts +644 -0
  101. package/extension/session/lifecycleGates.ts +64 -0
  102. package/extension/session/saveDestination.ts +87 -0
  103. package/extension/session/workflowSession.ts +971 -0
  104. package/extension/substrate/agentScratch.ts +27 -54
  105. package/extension/substrate/bashScanTimeout.ts +181 -0
  106. package/extension/substrate/bindingDelivery.ts +38 -30
  107. package/extension/substrate/bindings.ts +4 -5
  108. package/extension/substrate/cache.ts +64 -12
  109. package/extension/substrate/childRestrictions.ts +39 -0
  110. package/extension/substrate/coldDoor.ts +17 -1
  111. package/extension/substrate/config.ts +157 -19
  112. package/extension/substrate/git.ts +88 -6
  113. package/extension/substrate/modelVisible.ts +53 -0
  114. package/extension/substrate/paths.ts +2 -7
  115. package/extension/substrate/prompts.ts +22 -0
  116. package/extension/substrate/registry.ts +2 -0
  117. package/extension/substrate/resolverLease.ts +364 -0
  118. package/extension/substrate/sessionData.ts +85 -152
  119. package/extension/substrate/toolGating.ts +279 -84
  120. package/extension/substrate/unifiedDiff.ts +1 -1
  121. package/extension/substrate/workflowState.ts +191 -166
  122. package/extension/substrate/worktreeResolverLock.ts +261 -0
  123. package/extension/surfaces/surfaces.ts +79 -27
  124. package/extension/waves/adversarialReviewWave.ts +103 -48
  125. package/extension/waves/blockedReports.ts +59 -0
  126. package/extension/waves/draftReviewWave.ts +42 -42
  127. package/extension/waves/laneIdentity.ts +77 -0
  128. package/extension/waves/objectiveExplorerWave.ts +24 -24
  129. package/extension/waves/prReviewWave.ts +89 -77
  130. package/extension/waves/reportWave.ts +438 -578
  131. package/extension/waves/reviewClassifierWave.ts +22 -22
  132. package/extension/waves/rpcAdapter.ts +100 -15
  133. package/extension/waves/scoutWave.ts +192 -0
  134. package/extension/waves/transport.ts +480 -0
  135. package/extension/worker/sdkAdapter.ts +494 -0
  136. package/extension/worker/stageExecution.ts +679 -0
  137. package/extension/workerMain.ts +18 -19
  138. package/package.json +6 -4
  139. package/prompts/_fixtures/live.yaml +98 -10
  140. package/prompts/contexts/adapters/plannotator-gist.md +6 -0
  141. package/prompts/contexts/adapters/plannotator-objective.md +6 -0
  142. package/prompts/contexts/adapters/plannotator-plan.md +8 -1
  143. package/prompts/contexts/adapters/plannotator-refinement.md +22 -0
  144. package/prompts/contexts/adapters/tombell-plan.md +4 -0
  145. package/prompts/contexts/objective-refinement.md +17 -0
  146. package/prompts/contexts/plan-authoring.md +6 -5
  147. package/prompts/contexts/read-only.md +1 -1
  148. package/prompts/stages/conflict-resolution-continuation.md +9 -0
  149. package/prompts/stages/conflict-resolution.md +4 -4
  150. package/prompts/stages/objective-author/adopt.md +1 -1
  151. package/prompts/stages/objective-author/file.md +1 -1
  152. package/prompts/stages/objective-author/seed.md +1 -1
  153. package/prompts/stages/objective-plan/guidance.md +2 -2
  154. package/prompts/stages/objective-plan/seed.md +9 -1
  155. package/prompts/stages/objective-reconcile-ready.md +7 -0
  156. package/prompts/stages/objective-reconcile.md +1 -1
  157. package/prompts/stages/objective-refine/seed.md +18 -0
  158. package/prompts/stages/objective-review-browser.md +4 -4
  159. package/prompts/stages/objective-sync.md +1 -1
  160. package/prompts/stages/plan-review-browser.md +4 -4
  161. package/prompts/stages/pr-review-browser/active.md +3 -4
  162. package/prompts/stages/pr-review-browser/foreign.md +3 -4
  163. package/prompts/stages/pr-review-terminal/active.md +3 -3
  164. package/prompts/stages/pr-review-terminal/foreign.md +3 -3
  165. package/prompts/stages/pr-review.md +3 -3
  166. package/prompts/stages/stack-review/cold.md +1 -0
  167. package/prompts/stages/stack-review-browser/stack.md +22 -0
  168. package/shared/README.md +8 -3
  169. package/shared/bindings.yaml +6 -3
  170. package/shared/contracts.md +4499 -2147
  171. package/shared/fixtures/issues-table.json +130 -0
  172. package/shared/registry.yaml +29 -1
  173. package/shared/schemas/outputs/objective-node-engagement.schema.json +318 -0
  174. package/shared/schemas/outputs/objective-stack-status.schema.json +178 -2
  175. package/shared/schemas/outputs/pr-ready.schema.json +110 -2
  176. package/shared/schemas/outputs/pr-review-context.schema.json +54 -9
  177. package/shared/schemas/outputs/pr-review-stack-context.schema.json +196 -0
  178. package/extension/adapters/planAdapterPlannotator.ts +0 -362
  179. package/extension/doors/auditWaveTools.ts +0 -352
  180. package/extension/doors/ciExecutor.ts +0 -756
  181. package/extension/doors/commitCompact.ts +0 -251
  182. package/extension/doors/dreamWaveTools.ts +0 -475
  183. package/extension/doors/learn.ts +0 -655
  184. package/extension/doors/objectiveStack.ts +0 -1143
  185. package/extension/doors/prReviewDynamic.ts +0 -276
  186. package/extension/doors/ready.ts +0 -87
  187. package/extension/doors/submit.ts +0 -347
  188. package/extension/doors/submitPrReview.ts +0 -408
  189. package/extension/factories/gistAuthor.ts +0 -94
  190. package/extension/factories/gistDraft.ts +0 -265
  191. package/extension/factories/gistSave.ts +0 -251
  192. package/extension/factories/implementHere.ts +0 -116
  193. package/extension/factories/objectiveAuthor.ts +0 -98
  194. package/extension/factories/objectiveDraft.ts +0 -466
  195. package/extension/factories/objectivePlan.ts +0 -975
  196. package/extension/factories/objectiveSave.ts +0 -363
  197. package/extension/factories/planDraft.ts +0 -140
  198. package/extension/factories/planMode.ts +0 -205
  199. package/extension/factories/planReview.ts +0 -1237
  200. package/extension/factories/planSave.ts +0 -604
  201. package/extension/factories/planTitle.ts +0 -141
  202. package/extension/substrate/structuredOutput.ts +0 -202
  203. package/extension/waves/auditWave.ts +0 -312
  204. package/extension/waves/harvestWave.ts +0 -399
  205. package/extension/waves/learnWave.ts +0 -155
  206. package/extension/waves/memoryAdapter.ts +0 -139
  207. package/extension/waves/prReviewDynamicWave.ts +0 -777
  208. package/extension/worker/readOnlySession.ts +0 -294
  209. package/extension/worker/worker.ts +0 -899
  210. package/prompts/stages/pr-review-dynamic.md +0 -7
  211. package/shared/contracts-history.md +0 -605
@@ -2,7 +2,7 @@
2
2
  "$defs": {
3
3
  "ContinuationOut": {
4
4
  "additionalProperties": false,
5
- "description": "This lineage's pending sync-continuation manifest (contracts.md \u00a78.44/\u00a78.49) \u2014 a\nmachine-local CLI-side observation. ``parseable: false`` rows carry nulls for every\nfield the unreadable file cannot account for.",
5
+ "description": "This lineage's pending sync-continuation manifest (contracts.md \u00a78.44/\u00a78.49) \u2014 a\nmachine-local CLI-side observation. ``parseable: false`` rows carry nulls for every\nfield the unreadable file cannot account for. ``targets_contained`` is additive trailing\ngrowth (\u00a78.44/\u00a78.51): whether the manifest's named targets pass the canonical\n``continuation.validated_targets`` containment validation against the configured worktree\nroot \u2014 the warm conflict dispatch requires it ``true`` (version skew fails closed: an\nolder CLI omits the field and the warm side refuses to dispatch).",
6
6
  "properties": {
7
7
  "operation_id": {
8
8
  "anyOf": [
@@ -66,6 +66,11 @@
66
66
  "parseable": {
67
67
  "title": "Parseable",
68
68
  "type": "boolean"
69
+ },
70
+ "targets_contained": {
71
+ "default": false,
72
+ "title": "Targets Contained",
73
+ "type": "boolean"
69
74
  }
70
75
  },
71
76
  "required": [
@@ -123,6 +128,129 @@
123
128
  "title": "FindingOut",
124
129
  "type": "object"
125
130
  },
131
+ "GateBlockerOut": {
132
+ "additionalProperties": false,
133
+ "description": "One planning-gate blocker row (contracts.md \u00a78.46) \u2014 the shared machine\ndiscriminator every gate-carrying envelope serializes.\n\n``kind`` is ``\"technical\"`` (a train readiness veto \u2014 ``code``/``message`` verbatim, or\nthe gate-owned defensive ``dependency_not_ready``) or ``\"handoff\"`` (a handoff-blocked\ndirect dependency \u2014 fields-only, no prose: consumers read the pinned fields). Handoff\nrows derive from a verified-PUBLISHED layer, so ``plan``/``pr``/``remediation`` are\nalways populated there (the nullable wire types exist for the technical rows).",
134
+ "properties": {
135
+ "kind": {
136
+ "title": "Kind",
137
+ "type": "string"
138
+ },
139
+ "code": {
140
+ "anyOf": [
141
+ {
142
+ "type": "string"
143
+ },
144
+ {
145
+ "type": "null"
146
+ }
147
+ ],
148
+ "title": "Code"
149
+ },
150
+ "message": {
151
+ "anyOf": [
152
+ {
153
+ "type": "string"
154
+ },
155
+ {
156
+ "type": "null"
157
+ }
158
+ ],
159
+ "title": "Message"
160
+ },
161
+ "dependency_node_id": {
162
+ "anyOf": [
163
+ {
164
+ "type": "string"
165
+ },
166
+ {
167
+ "type": "null"
168
+ }
169
+ ],
170
+ "title": "Dependency Node Id"
171
+ },
172
+ "plan": {
173
+ "anyOf": [
174
+ {
175
+ "type": "string"
176
+ },
177
+ {
178
+ "type": "null"
179
+ }
180
+ ],
181
+ "title": "Plan"
182
+ },
183
+ "pr": {
184
+ "anyOf": [
185
+ {
186
+ "type": "integer"
187
+ },
188
+ {
189
+ "type": "null"
190
+ }
191
+ ],
192
+ "title": "Pr"
193
+ },
194
+ "handoff_state": {
195
+ "anyOf": [
196
+ {
197
+ "type": "string"
198
+ },
199
+ {
200
+ "type": "null"
201
+ }
202
+ ],
203
+ "title": "Handoff State"
204
+ },
205
+ "stamped_head": {
206
+ "anyOf": [
207
+ {
208
+ "type": "string"
209
+ },
210
+ {
211
+ "type": "null"
212
+ }
213
+ ],
214
+ "title": "Stamped Head"
215
+ },
216
+ "current_head": {
217
+ "anyOf": [
218
+ {
219
+ "type": "string"
220
+ },
221
+ {
222
+ "type": "null"
223
+ }
224
+ ],
225
+ "title": "Current Head"
226
+ },
227
+ "remediation": {
228
+ "anyOf": [
229
+ {
230
+ "type": "string"
231
+ },
232
+ {
233
+ "type": "null"
234
+ }
235
+ ],
236
+ "title": "Remediation"
237
+ }
238
+ },
239
+ "required": [
240
+ "kind",
241
+ "code",
242
+ "message",
243
+ "dependency_node_id",
244
+ "plan",
245
+ "pr",
246
+ "handoff_state",
247
+ "stamped_head",
248
+ "current_head",
249
+ "remediation"
250
+ ],
251
+ "title": "GateBlockerOut",
252
+ "type": "object"
253
+ },
126
254
  "LayerOut": {
127
255
  "additionalProperties": false,
128
256
  "properties": {
@@ -245,6 +373,10 @@
245
373
  }
246
374
  ],
247
375
  "title": "Expected Pr Base"
376
+ },
377
+ "handoff": {
378
+ "title": "Handoff",
379
+ "type": "string"
248
380
  }
249
381
  },
250
382
  "required": [
@@ -263,7 +395,8 @@
263
395
  "published_head_sha",
264
396
  "observed_remote_head_sha",
265
397
  "observed_pr_base",
266
- "expected_pr_base"
398
+ "expected_pr_base",
399
+ "handoff"
267
400
  ],
268
401
  "title": "LayerOut",
269
402
  "type": "object"
@@ -406,6 +539,41 @@
406
539
  "title": "OrphanedResidueOut",
407
540
  "type": "object"
408
541
  },
542
+ "PlanningGateOut": {
543
+ "additionalProperties": false,
544
+ "description": "The composed planning-gate block (contracts.md \u00a78.46): the evaluated candidate\n(``None`` when no candidate exists), the technical-AND-handoff verdict for\nplanning/fresh starts, and the blocker rows.",
545
+ "properties": {
546
+ "node_id": {
547
+ "anyOf": [
548
+ {
549
+ "type": "string"
550
+ },
551
+ {
552
+ "type": "null"
553
+ }
554
+ ],
555
+ "title": "Node Id"
556
+ },
557
+ "ready": {
558
+ "title": "Ready",
559
+ "type": "boolean"
560
+ },
561
+ "blockers": {
562
+ "items": {
563
+ "$ref": "#/$defs/GateBlockerOut"
564
+ },
565
+ "title": "Blockers",
566
+ "type": "array"
567
+ }
568
+ },
569
+ "required": [
570
+ "node_id",
571
+ "ready",
572
+ "blockers"
573
+ ],
574
+ "title": "PlanningGateOut",
575
+ "type": "object"
576
+ },
409
577
  "TrainOut": {
410
578
  "additionalProperties": false,
411
579
  "properties": {
@@ -477,6 +645,14 @@
477
645
  "default": 0,
478
646
  "title": "Landed Prefix Len",
479
647
  "type": "integer"
648
+ },
649
+ "planning_gate": {
650
+ "$ref": "#/$defs/PlanningGateOut",
651
+ "default": {
652
+ "node_id": null,
653
+ "ready": false,
654
+ "blockers": []
655
+ }
480
656
  }
481
657
  },
482
658
  "required": [
@@ -22,7 +22,7 @@
22
22
  }
23
23
  },
24
24
  "additionalProperties": false,
25
- "description": "The ``--json`` serialization boundary of :class:`PrReadyResult` (order load-bearing).",
25
+ "description": "The ``--json`` serialization boundary of :class:`PrReadyResult` (order load-bearing \u2014\nthe nine continuation fields are tail-additive).\n\nNull semantics: dry-run \u2192 all nine continuation fields null; incremental \u2192\n``stacked=false``, rest null; stacked success \u2192 all populated (``reconcile_notice`` /\n``reconcile_retry`` are CLI-composed presentation: the ready-time reconcile pass was not\nlaunched \u2014 the worker never launches \u2014 plus the copyable re-run gesture; ``plan`` /\n``parent_checkpoint`` are the continuation evidence consumers compose the pinned diff\nrange from, contracts.md \u00a78.66).",
26
26
  "properties": {
27
27
  "success": {
28
28
  "title": "Success",
@@ -60,6 +60,105 @@
60
60
  "dry_run": {
61
61
  "title": "Dry Run",
62
62
  "type": "boolean"
63
+ },
64
+ "stacked": {
65
+ "anyOf": [
66
+ {
67
+ "type": "boolean"
68
+ },
69
+ {
70
+ "type": "null"
71
+ }
72
+ ],
73
+ "title": "Stacked"
74
+ },
75
+ "objective": {
76
+ "anyOf": [
77
+ {
78
+ "type": "string"
79
+ },
80
+ {
81
+ "type": "null"
82
+ }
83
+ ],
84
+ "title": "Objective"
85
+ },
86
+ "node": {
87
+ "anyOf": [
88
+ {
89
+ "type": "string"
90
+ },
91
+ {
92
+ "type": "null"
93
+ }
94
+ ],
95
+ "title": "Node"
96
+ },
97
+ "stamped_head": {
98
+ "anyOf": [
99
+ {
100
+ "type": "string"
101
+ },
102
+ {
103
+ "type": "null"
104
+ }
105
+ ],
106
+ "title": "Stamped Head"
107
+ },
108
+ "stamp_advanced": {
109
+ "anyOf": [
110
+ {
111
+ "type": "boolean"
112
+ },
113
+ {
114
+ "type": "null"
115
+ }
116
+ ],
117
+ "title": "Stamp Advanced"
118
+ },
119
+ "reconcile_notice": {
120
+ "anyOf": [
121
+ {
122
+ "type": "string"
123
+ },
124
+ {
125
+ "type": "null"
126
+ }
127
+ ],
128
+ "title": "Reconcile Notice"
129
+ },
130
+ "reconcile_retry": {
131
+ "anyOf": [
132
+ {
133
+ "type": "string"
134
+ },
135
+ {
136
+ "type": "null"
137
+ }
138
+ ],
139
+ "title": "Reconcile Retry"
140
+ },
141
+ "plan": {
142
+ "anyOf": [
143
+ {
144
+ "type": "string"
145
+ },
146
+ {
147
+ "type": "null"
148
+ }
149
+ ],
150
+ "title": "Plan"
151
+ },
152
+ "parent_checkpoint": {
153
+ "anyOf": [
154
+ {
155
+ "type": "string"
156
+ },
157
+ {
158
+ "type": "null"
159
+ }
160
+ ],
161
+ "title": "Parent Checkpoint"
63
162
  }
64
163
  },
65
164
  "required": [
@@ -68,7 +167,16 @@
68
167
  "message",
69
168
  "pr",
70
169
  "was_draft",
71
- "dry_run"
170
+ "dry_run",
171
+ "stacked",
172
+ "objective",
173
+ "node",
174
+ "stamped_head",
175
+ "stamp_advanced",
176
+ "reconcile_notice",
177
+ "reconcile_retry",
178
+ "plan",
179
+ "parent_checkpoint"
72
180
  ],
73
181
  "title": "PrReadyOut",
74
182
  "type": "object"
@@ -1,6 +1,45 @@
1
1
  {
2
+ "$defs": {
3
+ "DiffSource": {
4
+ "enum": [
5
+ "github",
6
+ "local-git"
7
+ ],
8
+ "type": "string"
9
+ },
10
+ "TextFileRefOut": {
11
+ "additionalProperties": false,
12
+ "description": "One materialized text section: its absolute ``path`` plus the sizes a reviewer pages\nagainst \u2014 ``max_line_bytes`` is the longest line's UTF-8 length (compared against Pi's\nper-line ``read`` bound to pick the byte-slice fallback).",
13
+ "properties": {
14
+ "path": {
15
+ "title": "Path",
16
+ "type": "string"
17
+ },
18
+ "bytes": {
19
+ "title": "Bytes",
20
+ "type": "integer"
21
+ },
22
+ "lines": {
23
+ "title": "Lines",
24
+ "type": "integer"
25
+ },
26
+ "max_line_bytes": {
27
+ "title": "Max Line Bytes",
28
+ "type": "integer"
29
+ }
30
+ },
31
+ "required": [
32
+ "path",
33
+ "bytes",
34
+ "lines",
35
+ "max_line_bytes"
36
+ ],
37
+ "title": "TextFileRefOut",
38
+ "type": "object"
39
+ }
40
+ },
2
41
  "additionalProperties": false,
3
- "description": "The ``--json`` serialization boundary of :class:`PrReviewContextResult`\n(flat; field order load-bearing). ``pr`` maps from the domain ``pr_number``.",
42
+ "description": "The ``--json`` serialization boundary of :class:`PrReviewContextResult` \u2014 a pointer\nenvelope (field order load-bearing). ``pr`` maps from the domain ``pr_number``; ``body``,\n``diff`` and ``plan_body`` are file references into ``context_dir`` (in stack mode they\nalias the LAST ``stack[]`` member's files \u2014 the top PR's text is written once).",
4
43
  "properties": {
5
44
  "success": {
6
45
  "title": "Success",
@@ -48,24 +87,28 @@
48
87
  "title": "Title",
49
88
  "type": "string"
50
89
  },
51
- "body": {
52
- "title": "Body",
90
+ "context_dir": {
91
+ "title": "Context Dir",
53
92
  "type": "string"
54
93
  },
94
+ "body": {
95
+ "$ref": "#/$defs/TextFileRefOut"
96
+ },
55
97
  "diff": {
56
- "title": "Diff",
57
- "type": "string"
98
+ "$ref": "#/$defs/TextFileRefOut"
58
99
  },
59
100
  "plan_body": {
60
101
  "anyOf": [
61
102
  {
62
- "type": "string"
103
+ "$ref": "#/$defs/TextFileRefOut"
63
104
  },
64
105
  {
65
106
  "type": "null"
66
107
  }
67
- ],
68
- "title": "Plan Body"
108
+ ]
109
+ },
110
+ "diff_source": {
111
+ "$ref": "#/$defs/DiffSource"
69
112
  }
70
113
  },
71
114
  "required": [
@@ -77,9 +120,11 @@
77
120
  "base_ref",
78
121
  "head_ref",
79
122
  "title",
123
+ "context_dir",
80
124
  "body",
81
125
  "diff",
82
- "plan_body"
126
+ "plan_body",
127
+ "diff_source"
83
128
  ],
84
129
  "title": "PrReviewContextOut",
85
130
  "type": "object"
@@ -0,0 +1,196 @@
1
+ {
2
+ "$defs": {
3
+ "DiffSource": {
4
+ "enum": [
5
+ "github",
6
+ "local-git"
7
+ ],
8
+ "type": "string"
9
+ },
10
+ "StackContextMemberOut": {
11
+ "additionalProperties": false,
12
+ "description": "One ``stack[]`` per-member section (bottom\u2192top order); text fields are file references\nunder ``context_dir/stack/<pr>/``.",
13
+ "properties": {
14
+ "pr": {
15
+ "title": "Pr",
16
+ "type": "integer"
17
+ },
18
+ "base_ref": {
19
+ "title": "Base Ref",
20
+ "type": "string"
21
+ },
22
+ "head_ref": {
23
+ "title": "Head Ref",
24
+ "type": "string"
25
+ },
26
+ "title": {
27
+ "title": "Title",
28
+ "type": "string"
29
+ },
30
+ "body": {
31
+ "$ref": "#/$defs/TextFileRefOut"
32
+ },
33
+ "diff": {
34
+ "$ref": "#/$defs/TextFileRefOut"
35
+ },
36
+ "plan_body": {
37
+ "anyOf": [
38
+ {
39
+ "$ref": "#/$defs/TextFileRefOut"
40
+ },
41
+ {
42
+ "type": "null"
43
+ }
44
+ ]
45
+ },
46
+ "diff_source": {
47
+ "$ref": "#/$defs/DiffSource"
48
+ }
49
+ },
50
+ "required": [
51
+ "pr",
52
+ "base_ref",
53
+ "head_ref",
54
+ "title",
55
+ "body",
56
+ "diff",
57
+ "plan_body",
58
+ "diff_source"
59
+ ],
60
+ "title": "StackContextMemberOut",
61
+ "type": "object"
62
+ },
63
+ "TextFileRefOut": {
64
+ "additionalProperties": false,
65
+ "description": "One materialized text section: its absolute ``path`` plus the sizes a reviewer pages\nagainst \u2014 ``max_line_bytes`` is the longest line's UTF-8 length (compared against Pi's\nper-line ``read`` bound to pick the byte-slice fallback).",
66
+ "properties": {
67
+ "path": {
68
+ "title": "Path",
69
+ "type": "string"
70
+ },
71
+ "bytes": {
72
+ "title": "Bytes",
73
+ "type": "integer"
74
+ },
75
+ "lines": {
76
+ "title": "Lines",
77
+ "type": "integer"
78
+ },
79
+ "max_line_bytes": {
80
+ "title": "Max Line Bytes",
81
+ "type": "integer"
82
+ }
83
+ },
84
+ "required": [
85
+ "path",
86
+ "bytes",
87
+ "lines",
88
+ "max_line_bytes"
89
+ ],
90
+ "title": "TextFileRefOut",
91
+ "type": "object"
92
+ }
93
+ },
94
+ "additionalProperties": false,
95
+ "description": "The ``--stack`` envelope: the single-PR fields (describing the top PR) plus the\nadditive per-member sections and the combined-diff reference. A separate model so\nnon-stack calls stay byte-identical (no null stack keys).",
96
+ "properties": {
97
+ "success": {
98
+ "title": "Success",
99
+ "type": "boolean"
100
+ },
101
+ "error_type": {
102
+ "anyOf": [
103
+ {
104
+ "type": "string"
105
+ },
106
+ {
107
+ "type": "null"
108
+ }
109
+ ],
110
+ "title": "Error Type"
111
+ },
112
+ "message": {
113
+ "anyOf": [
114
+ {
115
+ "type": "string"
116
+ },
117
+ {
118
+ "type": "null"
119
+ }
120
+ ],
121
+ "title": "Message"
122
+ },
123
+ "branch": {
124
+ "title": "Branch",
125
+ "type": "string"
126
+ },
127
+ "pr": {
128
+ "title": "Pr",
129
+ "type": "integer"
130
+ },
131
+ "base_ref": {
132
+ "title": "Base Ref",
133
+ "type": "string"
134
+ },
135
+ "head_ref": {
136
+ "title": "Head Ref",
137
+ "type": "string"
138
+ },
139
+ "title": {
140
+ "title": "Title",
141
+ "type": "string"
142
+ },
143
+ "context_dir": {
144
+ "title": "Context Dir",
145
+ "type": "string"
146
+ },
147
+ "body": {
148
+ "$ref": "#/$defs/TextFileRefOut"
149
+ },
150
+ "diff": {
151
+ "$ref": "#/$defs/TextFileRefOut"
152
+ },
153
+ "plan_body": {
154
+ "anyOf": [
155
+ {
156
+ "$ref": "#/$defs/TextFileRefOut"
157
+ },
158
+ {
159
+ "type": "null"
160
+ }
161
+ ]
162
+ },
163
+ "diff_source": {
164
+ "$ref": "#/$defs/DiffSource"
165
+ },
166
+ "stack": {
167
+ "items": {
168
+ "$ref": "#/$defs/StackContextMemberOut"
169
+ },
170
+ "title": "Stack",
171
+ "type": "array"
172
+ },
173
+ "combined_diff": {
174
+ "$ref": "#/$defs/TextFileRefOut"
175
+ }
176
+ },
177
+ "required": [
178
+ "success",
179
+ "error_type",
180
+ "message",
181
+ "branch",
182
+ "pr",
183
+ "base_ref",
184
+ "head_ref",
185
+ "title",
186
+ "context_dir",
187
+ "body",
188
+ "diff",
189
+ "plan_body",
190
+ "diff_source",
191
+ "stack",
192
+ "combined_diff"
193
+ ],
194
+ "title": "PrReviewStackContextOut",
195
+ "type": "object"
196
+ }