@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.
- package/README.md +5 -0
- package/extension/authoring/gist/draft.ts +198 -0
- package/extension/authoring/gist/prose.ts +46 -0
- package/extension/authoring/gist/review.ts +133 -0
- package/extension/authoring/gist/save.ts +118 -0
- package/extension/authoring/objective/draft.ts +345 -0
- package/extension/{factories/objectiveDreamReport.ts → authoring/objective/dreamReportGate.ts} +74 -131
- package/extension/authoring/objective/planning.ts +124 -0
- package/extension/authoring/objective/prose.ts +103 -0
- package/extension/authoring/objective/review.ts +128 -0
- package/extension/authoring/objective/save.ts +224 -0
- package/extension/authoring/plan/draft.ts +84 -0
- package/extension/authoring/plan/prose.ts +41 -0
- package/extension/authoring/plan/review.ts +269 -0
- package/extension/authoring/plan/save.ts +256 -0
- package/extension/authoring/plan/source.ts +82 -0
- package/extension/authoring/refinement/context.ts +468 -0
- package/extension/authoring/refinement/draft.ts +261 -0
- package/extension/authoring/refinement/prose.ts +79 -0
- package/extension/authoring/refinement/review.ts +111 -0
- package/extension/authoring/refinement/save.ts +119 -0
- package/extension/authoring/review/approvalGate.ts +34 -0
- package/extension/authoring/review/draftContext.ts +68 -0
- package/extension/codeReview/automated.ts +352 -0
- package/extension/codeReview/submission.ts +229 -0
- package/extension/delivery/address.ts +295 -0
- package/extension/delivery/ci.ts +355 -0
- package/extension/delivery/commitCompact.ts +93 -0
- package/extension/delivery/conflictResolution.ts +247 -0
- package/extension/delivery/ready.ts +193 -0
- package/extension/delivery/stackConflict.ts +361 -0
- package/extension/delivery/stackObjective.ts +16 -0
- package/extension/delivery/stackReconcile.ts +165 -0
- package/extension/delivery/submit.ts +171 -0
- package/extension/index.ts +369 -359
- package/extension/learning/analystWave.ts +324 -0
- package/extension/learning/audit.ts +667 -0
- package/extension/learning/capture.ts +92 -0
- package/extension/learning/containment.ts +104 -0
- package/extension/{waves/dreamWave.ts → learning/dream.ts} +112 -94
- package/extension/learning/dreamAnalysis.ts +435 -0
- package/extension/{waves/dreamReducerWave.ts → learning/dreamReducer.ts} +46 -41
- package/extension/{waves → learning}/dreamReport.ts +35 -31
- package/extension/learning/harvest.ts +491 -0
- package/extension/learning/prose.ts +66 -0
- package/extension/learning/routing.ts +79 -0
- package/extension/pi/v1/bashScanTimeout.ts +64 -0
- package/extension/{doors/prReview.ts → pi/v1/codeReview/automated.ts} +215 -310
- package/extension/{doors/prReviewBrowser.ts → pi/v1/codeReview/browser.ts} +125 -57
- package/extension/{doors/hunkHandoff.ts → pi/v1/codeReview/checkout.ts} +12 -8
- package/extension/{doors/reviewWaveTools.ts → pi/v1/codeReview/reviewWave.ts} +169 -116
- package/extension/pi/v1/codeReview/stack.ts +606 -0
- package/extension/pi/v1/codeReview/submit.ts +354 -0
- package/extension/{doors/prReviewTerminal.ts → pi/v1/codeReview/terminal.ts} +32 -27
- package/extension/pi/v1/contextEvidence.ts +80 -0
- package/extension/pi/v1/contextInjection.ts +207 -0
- package/extension/{doors → pi/v1/delivery}/address.ts +163 -265
- package/extension/pi/v1/delivery/ci.ts +570 -0
- package/extension/pi/v1/delivery/commitCompact.ts +201 -0
- package/extension/pi/v1/delivery/conflictResolverEngine.ts +425 -0
- package/extension/{doors → pi/v1/delivery}/land.ts +128 -60
- package/extension/pi/v1/delivery/ready.ts +322 -0
- package/extension/pi/v1/delivery/stackConflictResolver.ts +172 -0
- package/extension/pi/v1/delivery/stackDrive.ts +120 -0
- package/extension/pi/v1/delivery/stackLand.ts +223 -0
- package/extension/pi/v1/delivery/stackRecover.ts +265 -0
- package/extension/pi/v1/delivery/stackStatus.ts +237 -0
- package/extension/pi/v1/delivery/stackSync.ts +658 -0
- package/extension/pi/v1/delivery/submit.ts +389 -0
- package/extension/pi/v1/delivery/submitConflict.ts +186 -0
- package/extension/pi/v1/draftReview.ts +431 -0
- package/extension/{doors → pi/v1}/draftReviewWaveTools.ts +141 -151
- package/extension/pi/v1/gist.ts +794 -0
- package/extension/pi/v1/learning/audit.ts +186 -0
- package/extension/pi/v1/learning/dream.ts +207 -0
- package/extension/{doors/learnFactory.ts → pi/v1/learning/factory.ts} +18 -65
- package/extension/{doors/harvestWaveTools.ts → pi/v1/learning/harvest.ts} +46 -100
- package/extension/pi/v1/learning/learn.ts +585 -0
- package/extension/{doors → pi/v1}/lifecycleGates.ts +14 -59
- package/extension/{factories → pi/v1}/objective.ts +53 -33
- package/extension/pi/v1/objectiveAuthoring.ts +672 -0
- package/extension/pi/v1/objectiveDreamGate.ts +160 -0
- package/extension/pi/v1/objectivePlanning.ts +776 -0
- package/extension/pi/v1/objectiveRefinement.ts +1320 -0
- package/extension/pi/v1/objectiveReview.ts +451 -0
- package/extension/{doors → pi/v1}/objectiveReviewBrowser.ts +259 -172
- package/extension/pi/v1/plan.ts +812 -0
- package/extension/pi/v1/planReview.ts +820 -0
- package/extension/{doors → pi/v1}/planReviewBrowser.ts +228 -152
- package/extension/{doors/annotationPush.ts → pi/v1/providers/annotations.ts} +158 -89
- package/extension/pi/v1/providers/plannotator.ts +487 -0
- package/extension/{doors → pi/v1/providers}/plannotatorHandoff.ts +152 -34
- package/extension/pi/v1/providers/selection.ts +43 -0
- package/extension/{adapters/planAdapterTombell.ts → pi/v1/providers/tombell.ts} +43 -72
- package/extension/pi/v1/review.ts +538 -0
- package/extension/pi/v1/reviewOutcome.ts +9 -0
- package/extension/pi/v1/scoutWave.ts +318 -0
- package/extension/{doors → pi/v1}/selfcheck.ts +4 -4
- package/extension/session/branchWorkflowSession.ts +60 -0
- package/extension/session/lifecycle.ts +644 -0
- package/extension/session/lifecycleGates.ts +64 -0
- package/extension/session/saveDestination.ts +87 -0
- package/extension/session/workflowSession.ts +971 -0
- package/extension/substrate/agentScratch.ts +27 -54
- package/extension/substrate/bashScanTimeout.ts +181 -0
- package/extension/substrate/bindingDelivery.ts +38 -30
- package/extension/substrate/bindings.ts +4 -5
- package/extension/substrate/cache.ts +64 -12
- package/extension/substrate/childRestrictions.ts +39 -0
- package/extension/substrate/coldDoor.ts +17 -1
- package/extension/substrate/config.ts +157 -19
- package/extension/substrate/git.ts +88 -6
- package/extension/substrate/modelVisible.ts +53 -0
- package/extension/substrate/paths.ts +2 -7
- package/extension/substrate/prompts.ts +22 -0
- package/extension/substrate/registry.ts +2 -0
- package/extension/substrate/resolverLease.ts +364 -0
- package/extension/substrate/sessionData.ts +85 -152
- package/extension/substrate/toolGating.ts +279 -84
- package/extension/substrate/unifiedDiff.ts +1 -1
- package/extension/substrate/workflowState.ts +191 -166
- package/extension/substrate/worktreeResolverLock.ts +261 -0
- package/extension/surfaces/surfaces.ts +79 -27
- package/extension/waves/adversarialReviewWave.ts +103 -48
- package/extension/waves/blockedReports.ts +59 -0
- package/extension/waves/draftReviewWave.ts +42 -42
- package/extension/waves/laneIdentity.ts +77 -0
- package/extension/waves/objectiveExplorerWave.ts +24 -24
- package/extension/waves/prReviewWave.ts +89 -77
- package/extension/waves/reportWave.ts +438 -578
- package/extension/waves/reviewClassifierWave.ts +22 -22
- package/extension/waves/rpcAdapter.ts +100 -15
- package/extension/waves/scoutWave.ts +192 -0
- package/extension/waves/transport.ts +480 -0
- package/extension/worker/sdkAdapter.ts +494 -0
- package/extension/worker/stageExecution.ts +679 -0
- package/extension/workerMain.ts +18 -19
- package/package.json +6 -4
- package/prompts/_fixtures/live.yaml +98 -10
- package/prompts/contexts/adapters/plannotator-gist.md +6 -0
- package/prompts/contexts/adapters/plannotator-objective.md +6 -0
- package/prompts/contexts/adapters/plannotator-plan.md +8 -1
- package/prompts/contexts/adapters/plannotator-refinement.md +22 -0
- package/prompts/contexts/adapters/tombell-plan.md +4 -0
- package/prompts/contexts/objective-refinement.md +17 -0
- package/prompts/contexts/plan-authoring.md +6 -5
- package/prompts/contexts/read-only.md +1 -1
- package/prompts/stages/conflict-resolution-continuation.md +9 -0
- package/prompts/stages/conflict-resolution.md +4 -4
- package/prompts/stages/objective-author/adopt.md +1 -1
- package/prompts/stages/objective-author/file.md +1 -1
- package/prompts/stages/objective-author/seed.md +1 -1
- package/prompts/stages/objective-plan/guidance.md +2 -2
- package/prompts/stages/objective-plan/seed.md +9 -1
- package/prompts/stages/objective-reconcile-ready.md +7 -0
- package/prompts/stages/objective-reconcile.md +1 -1
- package/prompts/stages/objective-refine/seed.md +18 -0
- package/prompts/stages/objective-review-browser.md +4 -4
- package/prompts/stages/objective-sync.md +1 -1
- package/prompts/stages/plan-review-browser.md +4 -4
- package/prompts/stages/pr-review-browser/active.md +3 -4
- package/prompts/stages/pr-review-browser/foreign.md +3 -4
- package/prompts/stages/pr-review-terminal/active.md +3 -3
- package/prompts/stages/pr-review-terminal/foreign.md +3 -3
- package/prompts/stages/pr-review.md +3 -3
- package/prompts/stages/stack-review/cold.md +1 -0
- package/prompts/stages/stack-review-browser/stack.md +22 -0
- package/shared/README.md +8 -3
- package/shared/bindings.yaml +6 -3
- package/shared/contracts.md +4499 -2147
- package/shared/fixtures/issues-table.json +130 -0
- package/shared/registry.yaml +29 -1
- package/shared/schemas/outputs/objective-node-engagement.schema.json +318 -0
- package/shared/schemas/outputs/objective-stack-status.schema.json +178 -2
- package/shared/schemas/outputs/pr-ready.schema.json +110 -2
- package/shared/schemas/outputs/pr-review-context.schema.json +54 -9
- package/shared/schemas/outputs/pr-review-stack-context.schema.json +196 -0
- package/extension/adapters/planAdapterPlannotator.ts +0 -362
- package/extension/doors/auditWaveTools.ts +0 -352
- package/extension/doors/ciExecutor.ts +0 -756
- package/extension/doors/commitCompact.ts +0 -251
- package/extension/doors/dreamWaveTools.ts +0 -475
- package/extension/doors/learn.ts +0 -655
- package/extension/doors/objectiveStack.ts +0 -1143
- package/extension/doors/prReviewDynamic.ts +0 -276
- package/extension/doors/ready.ts +0 -87
- package/extension/doors/submit.ts +0 -347
- package/extension/doors/submitPrReview.ts +0 -408
- package/extension/factories/gistAuthor.ts +0 -94
- package/extension/factories/gistDraft.ts +0 -265
- package/extension/factories/gistSave.ts +0 -251
- package/extension/factories/implementHere.ts +0 -116
- package/extension/factories/objectiveAuthor.ts +0 -98
- package/extension/factories/objectiveDraft.ts +0 -466
- package/extension/factories/objectivePlan.ts +0 -975
- package/extension/factories/objectiveSave.ts +0 -363
- package/extension/factories/planDraft.ts +0 -140
- package/extension/factories/planMode.ts +0 -205
- package/extension/factories/planReview.ts +0 -1237
- package/extension/factories/planSave.ts +0 -604
- package/extension/factories/planTitle.ts +0 -141
- package/extension/substrate/structuredOutput.ts +0 -202
- package/extension/waves/auditWave.ts +0 -312
- package/extension/waves/harvestWave.ts +0 -399
- package/extension/waves/learnWave.ts +0 -155
- package/extension/waves/memoryAdapter.ts +0 -139
- package/extension/waves/prReviewDynamicWave.ts +0 -777
- package/extension/worker/readOnlySession.ts +0 -294
- package/extension/worker/worker.ts +0 -899
- package/prompts/stages/pr-review-dynamic.md +0 -7
- package/shared/contracts-history.md +0 -605
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Perk TOML documents paired with the `[issues] backend`/`team` values the TS subset reader yields (`expected`: extension/substrate/config.ts::resolveIssueDestination via parseTomlSubset — stripped, blank/non-string/absent → null) and whether that read is provably tomllib's (`provable`: resolveIssueRouting reads `keys`; otherwise the save-destination fence widens to the whole `document`). When Python's tomllib reads something else, `tomllib` carries its reading — every such case MUST be unproven. contracts.md §8.23.",
|
|
3
|
+
"cases": [
|
|
4
|
+
{
|
|
5
|
+
"name": "basic strings",
|
|
6
|
+
"toml": "[issues]\nbackend = \"linear\"\nteam = \"ENG\"\n",
|
|
7
|
+
"expected": { "backend": "linear", "team": "ENG" },
|
|
8
|
+
"provable": true
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "literal strings",
|
|
12
|
+
"toml": "[issues]\nbackend = 'linear'\nteam = 'ENG'\n",
|
|
13
|
+
"expected": { "backend": "linear", "team": "ENG" },
|
|
14
|
+
"provable": true
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"name": "multi-line basic strings (unproven: the subset's escape handling is not tomllib's)",
|
|
18
|
+
"toml": "[issues]\nbackend = \"\"\"linear\"\"\"\nteam = \"\"\"\nENG\"\"\"\n",
|
|
19
|
+
"expected": { "backend": "linear", "team": "ENG" },
|
|
20
|
+
"provable": false
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "multi-line literal strings (unproven: only single-line strings are vouched for)",
|
|
24
|
+
"toml": "[issues]\nbackend = '''linear'''\nteam = '''\nENG'''\n",
|
|
25
|
+
"expected": { "backend": "linear", "team": "ENG" },
|
|
26
|
+
"provable": false
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"name": "literal strings keep backslashes verbatim",
|
|
30
|
+
"toml": "[issues]\nbackend = 'github'\nteam = 'C:\\ENG'\n",
|
|
31
|
+
"expected": { "backend": "github", "team": "C:\\ENG" },
|
|
32
|
+
"provable": true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "inline comments after the strings",
|
|
36
|
+
"toml": "[issues]\nbackend = \"linear\" # committed\nteam = 'ENG' # the team key\n",
|
|
37
|
+
"expected": { "backend": "linear", "team": "ENG" },
|
|
38
|
+
"provable": true
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "surrounding whitespace is stripped (StrippedStr)",
|
|
42
|
+
"toml": "[issues]\nbackend = \" linear \"\nteam = ' ENG'\n",
|
|
43
|
+
"expected": { "backend": "linear", "team": "ENG" },
|
|
44
|
+
"provable": true
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "blank strings read as absent (StrippedStr)",
|
|
48
|
+
"toml": "[issues]\nbackend = \"\"\nteam = ' '\n",
|
|
49
|
+
"expected": { "backend": null, "team": null },
|
|
50
|
+
"provable": true
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "other keys in the table and other tables around it",
|
|
54
|
+
"toml": "[workflow]\nbase = \"main\"\n\n[issues]\nlabel = \"perk\"\nbackend = \"github\"\n\n[models.stages.plan]\nmodel = \"x\"\n\n[[ci.checks]]\nname = \"t\"\ncommand = \"\"\"\njust test\n\"\"\"\n",
|
|
55
|
+
"expected": { "backend": "github", "team": null },
|
|
56
|
+
"provable": true
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "absent table",
|
|
60
|
+
"toml": "[workflow]\nbase = \"main\"\n",
|
|
61
|
+
"expected": { "backend": null, "team": null },
|
|
62
|
+
"provable": true
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "absent key",
|
|
66
|
+
"toml": "[issues]\nbackend = \"github\"\n",
|
|
67
|
+
"expected": { "backend": "github", "team": null },
|
|
68
|
+
"provable": true
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"name": "non-string values (unproven: Python's boundary rejects them outright)",
|
|
72
|
+
"toml": "[issues]\nbackend = true\nteam = 42\n",
|
|
73
|
+
"expected": { "backend": null, "team": null },
|
|
74
|
+
"provable": false
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "empty document",
|
|
78
|
+
"toml": "",
|
|
79
|
+
"expected": { "backend": null, "team": null },
|
|
80
|
+
"provable": true
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"name": "dotted keys (unproven: the subset reader never sees them)",
|
|
84
|
+
"toml": "issues.backend = \"linear\"\nissues.team = \"ENG\"\n",
|
|
85
|
+
"expected": { "backend": null, "team": null },
|
|
86
|
+
"tomllib": { "backend": "linear", "team": "ENG" },
|
|
87
|
+
"provable": false
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"name": "inline table (unproven: the subset reader never sees it)",
|
|
91
|
+
"toml": "issues = { backend = \"linear\", team = \"ENG\" }\n",
|
|
92
|
+
"expected": { "backend": null, "team": null },
|
|
93
|
+
"tomllib": { "backend": "linear", "team": "ENG" },
|
|
94
|
+
"provable": false
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"name": "quoted header (unproven: quoted segments can spell any key)",
|
|
98
|
+
"toml": "[\"issues\"]\nbackend = \"linear\"\nteam = \"ENG\"\n",
|
|
99
|
+
"expected": { "backend": null, "team": null },
|
|
100
|
+
"tomllib": { "backend": "linear", "team": "ENG" },
|
|
101
|
+
"provable": false
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"name": "header with a trailing comment (unproven: the subset reader skips that header)",
|
|
105
|
+
"toml": "[issues] # routing\nbackend = \"linear\"\n",
|
|
106
|
+
"expected": { "backend": null, "team": null },
|
|
107
|
+
"tomllib": { "backend": "linear", "team": null },
|
|
108
|
+
"provable": false
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"name": "unicode escape (unproven: the subset reader keeps the escape verbatim)",
|
|
112
|
+
"toml": "[issues]\nbackend = \"\\u0067ithub\"\n",
|
|
113
|
+
"expected": { "backend": "\\u0067ithub", "team": null },
|
|
114
|
+
"tomllib": { "backend": "github", "team": null },
|
|
115
|
+
"provable": false
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"name": "sub-table (unproven: a super-table the subset reader keeps flat)",
|
|
119
|
+
"toml": "[issues.extra]\nkey = \"x\"\n",
|
|
120
|
+
"expected": { "backend": null, "team": null },
|
|
121
|
+
"provable": false
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"name": "array of tables (unproven: tomllib reads a list, never the table)",
|
|
125
|
+
"toml": "[[issues]]\nbackend = \"linear\"\n",
|
|
126
|
+
"expected": { "backend": null, "team": null },
|
|
127
|
+
"provable": false
|
|
128
|
+
}
|
|
129
|
+
]
|
|
130
|
+
}
|
package/shared/registry.yaml
CHANGED
|
@@ -124,7 +124,7 @@ stages:
|
|
|
124
124
|
- id: objective-plan
|
|
125
125
|
summary: Select the next objective node and author a bounded plan (read-only).
|
|
126
126
|
mode: read-only
|
|
127
|
-
worktree: none # interactive planning, like plan — no branch yet
|
|
127
|
+
worktree: none # interactive planning, like plan — no branch yet; the cold door overrides to a transient reuse stage for a stacked child layer with a live predecessor branch (§8.46)
|
|
128
128
|
doors: { warm: true, cold_local: true, cold_remote: false } # interactive local exploration
|
|
129
129
|
run_id: { warm: keep, cold_local: mint, cold_remote: mint }
|
|
130
130
|
command: objective plan # P2.T10: dedicated cold door (perk objective plan) + /objective-plan
|
|
@@ -250,3 +250,31 @@ stages:
|
|
|
250
250
|
writes: [session.workflow-state, cache.scratch] # the claim append; run_audit_wave writes <bundle>/verdicts.json under scratch
|
|
251
251
|
predecessors: [] # a deliberately isolated node — the dev-only audit component
|
|
252
252
|
successors: []
|
|
253
|
+
|
|
254
|
+
- id: objective-refine
|
|
255
|
+
summary: Author an advisory refinement of a future objective node and save it as the node's marked comment (read-only).
|
|
256
|
+
mode: read-only
|
|
257
|
+
worktree: none # explores the invoking checkout as-is (dirty changes included); never provisions a predecessor checkout
|
|
258
|
+
doors: { warm: true, cold_local: true, cold_remote: false } # interactive local authoring (perk objective refine + /objective-refine)
|
|
259
|
+
run_id: { warm: keep, cold_local: mint, cold_remote: mint }
|
|
260
|
+
command: objective refine # dedicated seeded cold door + the warm /objective-refine command
|
|
261
|
+
requires: [github.objective] # an objective with a refinable future node must exist
|
|
262
|
+
reads: [github.objective, github.comments] # target selection + the node's existing marked refinement comment
|
|
263
|
+
writes: [github.comments, session.workflow-state, cache.session-data, cache.scratch] # the approved/human-authorized refinement comment upsert; the read-only `mode` append; objective_refinement_draft + the imported context artifact; run scratch
|
|
264
|
+
predecessors: [] # a deliberately isolated node — refinement never enters the executable plan graph (contracts.md §8.67)
|
|
265
|
+
successors: []
|
|
266
|
+
|
|
267
|
+
- id: stack-review
|
|
268
|
+
summary: Review a stacked PR train in the plannotator browser with judgment-routed per-PR posting.
|
|
269
|
+
mode: read-write # deliberate parity with the warm /stack-review-browser door — the
|
|
270
|
+
# human is present and nothing auto-posts (contracts.md §8.4)
|
|
271
|
+
worktree: none # runs in the invoking checkout; the review checkout is the
|
|
272
|
+
# detached review-<top> worktree the cold door materialized
|
|
273
|
+
doors: { warm: false, cold_local: true, cold_remote: false } # interactive browser flow — local-only by design
|
|
274
|
+
run_id: { warm: keep, cold_local: mint, cold_remote: mint }
|
|
275
|
+
command: objective stack review # label — the dedicated cold door under the objective stack group
|
|
276
|
+
requires: []
|
|
277
|
+
reads: []
|
|
278
|
+
writes: [github.pr, github.review-threads, session.workflow-state, cache.scratch] # per-PR review posting via submit_pr_review; the claim append; scratch
|
|
279
|
+
predecessors: [] # a deliberately isolated node — the stacked-review component
|
|
280
|
+
successors: []
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$defs": {
|
|
3
|
+
"DescriptionEditOut": {
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"description": "One node-issue description edit; ``diff`` is untrusted DATA (null when the backend\nexposes no inline diff).",
|
|
6
|
+
"properties": {
|
|
7
|
+
"created_at": {
|
|
8
|
+
"title": "Created At",
|
|
9
|
+
"type": "string"
|
|
10
|
+
},
|
|
11
|
+
"author": {
|
|
12
|
+
"$ref": "#/$defs/EngagementAuthorOut"
|
|
13
|
+
},
|
|
14
|
+
"diff": {
|
|
15
|
+
"anyOf": [
|
|
16
|
+
{
|
|
17
|
+
"type": "string"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "null"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"title": "Diff"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"required": [
|
|
27
|
+
"created_at",
|
|
28
|
+
"author",
|
|
29
|
+
"diff"
|
|
30
|
+
],
|
|
31
|
+
"title": "DescriptionEditOut",
|
|
32
|
+
"type": "object"
|
|
33
|
+
},
|
|
34
|
+
"EngagementAuthorOut": {
|
|
35
|
+
"additionalProperties": false,
|
|
36
|
+
"description": "The classified author of one engagement item (``kind`` + best-available label/id).",
|
|
37
|
+
"properties": {
|
|
38
|
+
"kind": {
|
|
39
|
+
"enum": [
|
|
40
|
+
"human",
|
|
41
|
+
"perk",
|
|
42
|
+
"other_agent",
|
|
43
|
+
"unknown"
|
|
44
|
+
],
|
|
45
|
+
"title": "Kind",
|
|
46
|
+
"type": "string"
|
|
47
|
+
},
|
|
48
|
+
"display_name": {
|
|
49
|
+
"anyOf": [
|
|
50
|
+
{
|
|
51
|
+
"type": "string"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"type": "null"
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"title": "Display Name"
|
|
58
|
+
},
|
|
59
|
+
"id": {
|
|
60
|
+
"anyOf": [
|
|
61
|
+
{
|
|
62
|
+
"type": "string"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"type": "null"
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"title": "Id"
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"required": [
|
|
72
|
+
"kind",
|
|
73
|
+
"display_name",
|
|
74
|
+
"id"
|
|
75
|
+
],
|
|
76
|
+
"title": "EngagementAuthorOut",
|
|
77
|
+
"type": "object"
|
|
78
|
+
},
|
|
79
|
+
"EngagementCommentOut": {
|
|
80
|
+
"additionalProperties": false,
|
|
81
|
+
"description": "One node-issue comment; ``body`` is untrusted DATA.",
|
|
82
|
+
"properties": {
|
|
83
|
+
"id": {
|
|
84
|
+
"title": "Id",
|
|
85
|
+
"type": "string"
|
|
86
|
+
},
|
|
87
|
+
"body": {
|
|
88
|
+
"title": "Body",
|
|
89
|
+
"type": "string"
|
|
90
|
+
},
|
|
91
|
+
"created_at": {
|
|
92
|
+
"title": "Created At",
|
|
93
|
+
"type": "string"
|
|
94
|
+
},
|
|
95
|
+
"edited_at": {
|
|
96
|
+
"anyOf": [
|
|
97
|
+
{
|
|
98
|
+
"type": "string"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"type": "null"
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
"title": "Edited At"
|
|
105
|
+
},
|
|
106
|
+
"author": {
|
|
107
|
+
"$ref": "#/$defs/EngagementAuthorOut"
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"required": [
|
|
111
|
+
"id",
|
|
112
|
+
"body",
|
|
113
|
+
"created_at",
|
|
114
|
+
"edited_at",
|
|
115
|
+
"author"
|
|
116
|
+
],
|
|
117
|
+
"title": "EngagementCommentOut",
|
|
118
|
+
"type": "object"
|
|
119
|
+
},
|
|
120
|
+
"NodeContextWarningOut": {
|
|
121
|
+
"additionalProperties": false,
|
|
122
|
+
"description": "One advisory failure: the ``surface`` that failed, a stable ``code``, a human\n``message``, and the carrier comment ids the outcome rests on.",
|
|
123
|
+
"properties": {
|
|
124
|
+
"surface": {
|
|
125
|
+
"enum": [
|
|
126
|
+
"engagement",
|
|
127
|
+
"refinement"
|
|
128
|
+
],
|
|
129
|
+
"title": "Surface",
|
|
130
|
+
"type": "string"
|
|
131
|
+
},
|
|
132
|
+
"code": {
|
|
133
|
+
"title": "Code",
|
|
134
|
+
"type": "string"
|
|
135
|
+
},
|
|
136
|
+
"message": {
|
|
137
|
+
"title": "Message",
|
|
138
|
+
"type": "string"
|
|
139
|
+
},
|
|
140
|
+
"comment_ids": {
|
|
141
|
+
"items": {
|
|
142
|
+
"type": "string"
|
|
143
|
+
},
|
|
144
|
+
"title": "Comment Ids",
|
|
145
|
+
"type": "array"
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
"required": [
|
|
149
|
+
"surface",
|
|
150
|
+
"code",
|
|
151
|
+
"message",
|
|
152
|
+
"comment_ids"
|
|
153
|
+
],
|
|
154
|
+
"title": "NodeContextWarningOut",
|
|
155
|
+
"type": "object"
|
|
156
|
+
},
|
|
157
|
+
"NodeRefinementPresentOut": {
|
|
158
|
+
"additionalProperties": false,
|
|
159
|
+
"description": "A saved refinement was read, rendered and written: ``file`` points at the full dated\n``<untrusted_node_refinement>`` block under the run scratch dir.",
|
|
160
|
+
"properties": {
|
|
161
|
+
"status": {
|
|
162
|
+
"const": "present",
|
|
163
|
+
"title": "Status",
|
|
164
|
+
"type": "string"
|
|
165
|
+
},
|
|
166
|
+
"file": {
|
|
167
|
+
"$ref": "#/$defs/TextFileRefOut"
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
"required": [
|
|
171
|
+
"status",
|
|
172
|
+
"file"
|
|
173
|
+
],
|
|
174
|
+
"title": "NodeRefinementPresentOut",
|
|
175
|
+
"type": "object"
|
|
176
|
+
},
|
|
177
|
+
"NodeRefinementStatusOut": {
|
|
178
|
+
"additionalProperties": false,
|
|
179
|
+
"description": "No refinement pointer: none is saved (``absent``), the backend has no refinement read\n(``unsupported``), or the read/snapshot failed (``unavailable`` \u2014 see ``warnings``).",
|
|
180
|
+
"properties": {
|
|
181
|
+
"status": {
|
|
182
|
+
"enum": [
|
|
183
|
+
"absent",
|
|
184
|
+
"unsupported",
|
|
185
|
+
"unavailable"
|
|
186
|
+
],
|
|
187
|
+
"title": "Status",
|
|
188
|
+
"type": "string"
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"required": [
|
|
192
|
+
"status"
|
|
193
|
+
],
|
|
194
|
+
"title": "NodeRefinementStatusOut",
|
|
195
|
+
"type": "object"
|
|
196
|
+
},
|
|
197
|
+
"TextFileRefOut": {
|
|
198
|
+
"additionalProperties": false,
|
|
199
|
+
"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).",
|
|
200
|
+
"properties": {
|
|
201
|
+
"path": {
|
|
202
|
+
"title": "Path",
|
|
203
|
+
"type": "string"
|
|
204
|
+
},
|
|
205
|
+
"bytes": {
|
|
206
|
+
"title": "Bytes",
|
|
207
|
+
"type": "integer"
|
|
208
|
+
},
|
|
209
|
+
"lines": {
|
|
210
|
+
"title": "Lines",
|
|
211
|
+
"type": "integer"
|
|
212
|
+
},
|
|
213
|
+
"max_line_bytes": {
|
|
214
|
+
"title": "Max Line Bytes",
|
|
215
|
+
"type": "integer"
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
"required": [
|
|
219
|
+
"path",
|
|
220
|
+
"bytes",
|
|
221
|
+
"lines",
|
|
222
|
+
"max_line_bytes"
|
|
223
|
+
],
|
|
224
|
+
"title": "TextFileRefOut",
|
|
225
|
+
"type": "object"
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
"additionalProperties": false,
|
|
229
|
+
"description": "The ``--json`` serialization boundary of a snapshotted :class:`NodeContext` (field order\nload-bearing; the pre-existing keys come first). ``refinement`` is discriminated on\n``status``: ``present`` always carries a ``file`` pointer \u2014 the file is on disk.",
|
|
230
|
+
"properties": {
|
|
231
|
+
"success": {
|
|
232
|
+
"title": "Success",
|
|
233
|
+
"type": "boolean"
|
|
234
|
+
},
|
|
235
|
+
"error_type": {
|
|
236
|
+
"anyOf": [
|
|
237
|
+
{
|
|
238
|
+
"type": "string"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"type": "null"
|
|
242
|
+
}
|
|
243
|
+
],
|
|
244
|
+
"title": "Error Type"
|
|
245
|
+
},
|
|
246
|
+
"objective": {
|
|
247
|
+
"title": "Objective",
|
|
248
|
+
"type": "string"
|
|
249
|
+
},
|
|
250
|
+
"node": {
|
|
251
|
+
"title": "Node",
|
|
252
|
+
"type": "string"
|
|
253
|
+
},
|
|
254
|
+
"comments": {
|
|
255
|
+
"items": {
|
|
256
|
+
"$ref": "#/$defs/EngagementCommentOut"
|
|
257
|
+
},
|
|
258
|
+
"title": "Comments",
|
|
259
|
+
"type": "array"
|
|
260
|
+
},
|
|
261
|
+
"description_edits": {
|
|
262
|
+
"items": {
|
|
263
|
+
"$ref": "#/$defs/DescriptionEditOut"
|
|
264
|
+
},
|
|
265
|
+
"title": "Description Edits",
|
|
266
|
+
"type": "array"
|
|
267
|
+
},
|
|
268
|
+
"engagement_status": {
|
|
269
|
+
"enum": [
|
|
270
|
+
"present",
|
|
271
|
+
"absent",
|
|
272
|
+
"unavailable"
|
|
273
|
+
],
|
|
274
|
+
"title": "Engagement Status",
|
|
275
|
+
"type": "string"
|
|
276
|
+
},
|
|
277
|
+
"refinement": {
|
|
278
|
+
"discriminator": {
|
|
279
|
+
"mapping": {
|
|
280
|
+
"absent": "#/$defs/NodeRefinementStatusOut",
|
|
281
|
+
"present": "#/$defs/NodeRefinementPresentOut",
|
|
282
|
+
"unavailable": "#/$defs/NodeRefinementStatusOut",
|
|
283
|
+
"unsupported": "#/$defs/NodeRefinementStatusOut"
|
|
284
|
+
},
|
|
285
|
+
"propertyName": "status"
|
|
286
|
+
},
|
|
287
|
+
"oneOf": [
|
|
288
|
+
{
|
|
289
|
+
"$ref": "#/$defs/NodeRefinementPresentOut"
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"$ref": "#/$defs/NodeRefinementStatusOut"
|
|
293
|
+
}
|
|
294
|
+
],
|
|
295
|
+
"title": "Refinement"
|
|
296
|
+
},
|
|
297
|
+
"warnings": {
|
|
298
|
+
"items": {
|
|
299
|
+
"$ref": "#/$defs/NodeContextWarningOut"
|
|
300
|
+
},
|
|
301
|
+
"title": "Warnings",
|
|
302
|
+
"type": "array"
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
"required": [
|
|
306
|
+
"success",
|
|
307
|
+
"error_type",
|
|
308
|
+
"objective",
|
|
309
|
+
"node",
|
|
310
|
+
"comments",
|
|
311
|
+
"description_edits",
|
|
312
|
+
"engagement_status",
|
|
313
|
+
"refinement",
|
|
314
|
+
"warnings"
|
|
315
|
+
],
|
|
316
|
+
"title": "ObjectiveNodeEngagementOut",
|
|
317
|
+
"type": "object"
|
|
318
|
+
}
|