@lmctl-ai/lmctl 0.1.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/LICENSE +36 -0
- package/README.md +36 -0
- package/bin/lmctl +4 -0
- package/dist/cli/index.js +2180 -0
- package/dist/cli/schema.sql +660 -0
- package/dist/cli/side_effect_classifier.json +19 -0
- package/dist/config/ai_test_templates/example-test.md.template +50 -0
- package/dist/config/ai_test_templates/index.md.template +27 -0
- package/dist/config/durable_memory_templates/index.md.template +29 -0
- package/dist/config/durable_memory_templates/skills_general.md.template +42 -0
- package/dist/config/durable_memory_templates/skills_lmdebug.md.template +31 -0
- package/dist/config/durable_memory_templates/skills_lmprobe.md.template +31 -0
- package/package.json +42 -0
- package/workflows/bugfix-extended-v2.compound.json +1018 -0
- package/workflows/bugfix-v2.compound.json +856 -0
- package/workflows/claim-check-spike-v2.compound.json +136 -0
- package/workflows/document-creation.compound.json +200 -0
- package/workflows/durable-memory-consolidation-v2.compound.json +185 -0
- package/workflows/example-v2.compound.json +200 -0
- package/workflows/image-qa.compound.json +128 -0
- package/workflows/index.jsonl +15 -0
- package/workflows/info-qa.compound.json +120 -0
- package/workflows/newspaper.compound.json +129 -0
- package/workflows/pr-fix.compound.json +183 -0
- package/workflows/pr-followup-v2.compound.json +969 -0
- package/workflows/provider-probe.compound.json +107 -0
- package/workflows/qa-suite.compound.json +186 -0
- package/workflows/spec-driven-task.compound.json +460 -0
- package/workflows/triage-v2.compound.json +721 -0
|
@@ -0,0 +1,969 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "lmctl/v3",
|
|
3
|
+
"definition_schema_version": 3,
|
|
4
|
+
"name": "pr-followup-v2",
|
|
5
|
+
"version": 1,
|
|
6
|
+
"description": "Follows up on pull-request feedback, applies needed changes, verifies them, and reports whether the PR is ready.",
|
|
7
|
+
"estimated_duration_ms": 120000,
|
|
8
|
+
"default_task_timeout_ms": 1800000,
|
|
9
|
+
"requires": {
|
|
10
|
+
"tools": ["gh", "git"],
|
|
11
|
+
"auth": ["gh"]
|
|
12
|
+
},
|
|
13
|
+
"steps": [
|
|
14
|
+
{
|
|
15
|
+
"id": "s-fetch-pr-state-f4e3",
|
|
16
|
+
"name": "fetch_pr_state",
|
|
17
|
+
"type": "lmctl/review",
|
|
18
|
+
"typeVersion": 1,
|
|
19
|
+
"parameters": {
|
|
20
|
+
"max_loops": 5
|
|
21
|
+
},
|
|
22
|
+
"members": {
|
|
23
|
+
"coder": {
|
|
24
|
+
"team": "default",
|
|
25
|
+
"alias": "PRWatcher",
|
|
26
|
+
"prompt_template": "Fetch the current state of PR {{job_payload.pr_url}}:\n gh pr view {{job_payload.pr_url}} --json number,title,url,state,isDraft,author,headRefName,headRefOid,baseRefName,mergeStateStatus,reviewDecision,latestReviews,comments,updatedAt,closed,mergedAt\n\nSave the JSON to /tmp/lmctl-next-run-{{run_id}}-pr-state.json.\n\nIf the call returns 404 but the PR was previously known (job_payload may include a hint), return `visibility_blocked`.\n\nSTANCE: open | merged | closed_unmerged | not_found | visibility_blocked | failed"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "s-fetch-checks-6264",
|
|
32
|
+
"name": "fetch_checks",
|
|
33
|
+
"type": "lmctl/review",
|
|
34
|
+
"typeVersion": 1,
|
|
35
|
+
"parameters": {
|
|
36
|
+
"max_loops": 5
|
|
37
|
+
},
|
|
38
|
+
"members": {
|
|
39
|
+
"coder": {
|
|
40
|
+
"team": "default",
|
|
41
|
+
"alias": "PRWatcher",
|
|
42
|
+
"prompt_template": "Fetch the checks for {{job_payload.pr_url}}:\n gh pr checks {{job_payload.pr_url}}\n\nSave raw output to /tmp/lmctl-next-run-{{run_id}}-pr-checks.json (parse the table into a JSON array if helpful).\n\nClassify:\n- All checks passed → `checks_green`\n- Any check failed → `checks_red`\n- Some pending, none failed → `checks_pending`\n- gh errored or no checks configured → `checks_unavailable`\n\nDo NOT abort on `checks_unavailable` — continue the workflow.\n\nSTANCE: checks_green | checks_red | checks_pending | checks_unavailable"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "s-delta-since-cutoff-f38d",
|
|
48
|
+
"name": "delta_since_cutoff",
|
|
49
|
+
"type": "lmctl/review",
|
|
50
|
+
"typeVersion": 1,
|
|
51
|
+
"parameters": {
|
|
52
|
+
"max_loops": 5
|
|
53
|
+
},
|
|
54
|
+
"members": {
|
|
55
|
+
"coder": {
|
|
56
|
+
"team": "default",
|
|
57
|
+
"alias": "PRWatcher",
|
|
58
|
+
"prompt_template": "Determine what's new on {{job_payload.pr_url}} since the cutoff.\n\nCutoff source order:\n1. job_payload.since_cutoff (if set)\n2. submitted_pr.last_followup_at for this PR (operator-provided context in the payload)\n3. submitted_pr.submitted_at as fallback\n\nUse the state JSON from /tmp/lmctl-next-run-{{run_id}}-pr-state.json plus any additional gh calls needed (e.g. `gh pr view --json comments` again with timestamp filtering).\n\nProduce /tmp/lmctl-next-run-{{run_id}}-pr-delta.json with arrays: `new_comments`, `new_reviews`, `new_check_state_changes` (each entry with timestamp, actor, body or summary, source_url).\n\nSTANCE:\n- `no_delta`: nothing new since cutoff → workflow ends at monitored_no_action\n- `has_delta`: continue to classification\n- `merged` / `closed`: state transition observed; route to terminal\n- `visibility_blocked`: PR became inaccessible; escalate"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "s-classify-each-comment-8454",
|
|
64
|
+
"name": "classify_each_comment",
|
|
65
|
+
"type": "lmctl/review",
|
|
66
|
+
"typeVersion": 1,
|
|
67
|
+
"parameters": {
|
|
68
|
+
"max_loops": 5
|
|
69
|
+
},
|
|
70
|
+
"members": {
|
|
71
|
+
"coder": {
|
|
72
|
+
"team": "default",
|
|
73
|
+
"alias": "PRWatcher",
|
|
74
|
+
"prompt_template": "Classify each entry in /tmp/lmctl-next-run-{{run_id}}-pr-delta.json.\n\nDeterministic pre-rules (apply first, don't waste budget on agent classification):\n- actor matches `github-actions[bot]`, `dependabot[bot]`, `codecov[bot]`, similar → `bot_noise` (skip)\n- body matches /^CLA|DCO|sign-off/i or actor is `cla-bot` → `cla_dco`\n- review state `CHANGES_REQUESTED` → `request_changes`\n- review state `APPROVED` + check_state `green` → `merge` (route may be approval → no_action with note)\n- comment from PR author mentioning own commit → `bot_noise` (skip)\n\nAgent classification for everything else, using this taxonomy:\n- `maintainer_action`: maintainer asking for a code change, asking a question, requesting more info\n- `maintainer_correction`: maintainer indicates the patch is wrong or the issue was misunderstood\n- `ci_red`: CI failure trail explicitly tied to our changes\n- `duplicate`: maintainer says \"duplicate of #N\" or \"already fixed in #M\"\n- `security_sensitive`: anything involving credentials, supply chain, RCE — escalate\n- `other`: ambiguous\n\nWrite /tmp/lmctl-next-run-{{run_id}}-classifications.json.\n\nDetermine overall STANCE based on the highest-priority class observed:\n- ci_red present → `ci_red`\n- request_changes present → `request_changes`\n- maintainer_correction present → `maintainer_correction`\n- cla_dco present (and nothing more severe) → `cla_dco`\n- duplicate/closed signal → `duplicate_or_closed`\n- only bot_noise / no_action → `no_action`\n- security_sensitive or `other`-ambiguous → `needs_human`"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "s-investigate-ci-red-3723",
|
|
80
|
+
"name": "investigate_ci_red",
|
|
81
|
+
"type": "lmctl/review",
|
|
82
|
+
"typeVersion": 1,
|
|
83
|
+
"parameters": {
|
|
84
|
+
"max_loops": 5
|
|
85
|
+
},
|
|
86
|
+
"members": {
|
|
87
|
+
"coder": {
|
|
88
|
+
"team": "default",
|
|
89
|
+
"alias": "Coder",
|
|
90
|
+
"prompt_template": "`cd {{project.local_path}}` first. classify_each_comment determined this PR is `ci_red` — investigate the failing checks on {{job_payload.pr_url}}.\n\n1. Fetch the failing job log via `gh run view <run_id> --log` or `gh pr checks {{job_payload.pr_url}}` for the link.\n2. Identify the failing job and failing command.\n3. Determine relatedness to our patch:\n - Reproduce locally if practical (small command, no full-suite re-run)\n - If not practical, collect evidence (e.g. failure existed on main without our patch, intermittent failure history)\n4. If we caused it AND fix is small: produce a candidate patch at /tmp/lmctl-next-run-{{run_id}}-followup-patch.diff (use this canonical name; downstream recommend_action expects it).\n5. ALWAYS write findings to /tmp/lmctl-next-run-{{run_id}}-draft-response.md — at minimum a short note explaining why no action is needed (so the operator has SOMETHING to read at the Interactive gate).\n6. Write detailed reasoning to /tmp/lmctl-next-run-{{run_id}}-ci-investigation.md.\n\nSTANCE:\n- `unrelated_or_flaky`: not our patch's fault → write a polite \"CI failure looks unrelated to this PR; here's what I see\" draft_response and no patch\n- `related_patch_drafted`: small follow-up patch ready (patch.diff exists) + draft_response explaining the patch\n- `related_needs_full_fix`: scope is too broad for inline patch; draft_response says we'll spawn a fix workflow; no patch\n- `cannot_determine`: insufficient access or info; draft_response asks the maintainer for log access\n- `needs_human`: anything risky"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "s-handle-reviewer-request-changes-6f13",
|
|
96
|
+
"name": "handle_reviewer_request_changes",
|
|
97
|
+
"type": "lmctl/review",
|
|
98
|
+
"typeVersion": 1,
|
|
99
|
+
"parameters": {
|
|
100
|
+
"max_loops": 5
|
|
101
|
+
},
|
|
102
|
+
"members": {
|
|
103
|
+
"coder": {
|
|
104
|
+
"team": "default",
|
|
105
|
+
"alias": "Coder",
|
|
106
|
+
"prompt_template": "`cd {{project.local_path}}` first. classify_each_comment determined this PR has unresolved `request_changes` from a reviewer. Analyze the change requests from /tmp/lmctl-next-run-{{run_id}}-classifications.json (entries with class `request_changes`) and the full PR delta at /tmp/lmctl-next-run-{{run_id}}-pr-delta.json.\n\nFor each request:\n- If it's a clear code change → draft a follow-up patch.\n- If it's a question → draft a textual response.\n- If we believe the reviewer is mistaken → draft a response explaining (politely, with evidence).\n\n**MANDATORY outputs (do NOT skip — recommend_action assumes these exist):**\n- /tmp/lmctl-next-run-{{run_id}}-draft-response.md — the public reply text (this is the artifact the operator reads at the Interactive gate)\n- /tmp/lmctl-next-run-{{run_id}}-review-analysis.md — your reasoning\n- /tmp/lmctl-next-run-{{run_id}}-followup-patch.diff — patch if applicable (omit only if `comment_ready` STANCE)\n\nKeep draft-response.md professional, concise, no emoji, no AI tells (claude/codex/gemini/anthropic/openai), no \"as an AI\" phrases.\n\nSTANCE:\n- `patch_ready`: patch + response drafted (both files exist)\n- `comment_ready`: response only, no code change (draft-response.md exists, patch.diff may be absent)\n- `needs_clarification`: we need maintainer to clarify; draft-response.md ASKS for the clarification\n- `should_withdraw`: reviewer is right; draft-response.md acknowledges + says we'll close\n- `needs_human`: scope too unclear or risky"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"id": "s-handle-maintainer-correction-bbd9",
|
|
112
|
+
"name": "handle_maintainer_correction",
|
|
113
|
+
"type": "lmctl/review",
|
|
114
|
+
"typeVersion": 1,
|
|
115
|
+
"parameters": {
|
|
116
|
+
"max_loops": 5
|
|
117
|
+
},
|
|
118
|
+
"members": {
|
|
119
|
+
"coder": {
|
|
120
|
+
"team": "default",
|
|
121
|
+
"alias": "PRWatcher",
|
|
122
|
+
"prompt_template": "classify_each_comment determined a `maintainer_correction` on {{job_payload.pr_url}}. Analyze the correction entries in /tmp/lmctl-next-run-{{run_id}}-classifications.json.\n\nRules:\n- If the maintainer is right and our patch is wrong: draft an honest response acknowledging the error; recommend close/withdraw via STANCE: close_recommended.\n- If the issue description was wrong but our patch fixes a valid variant: draft a clarification response.\n- If the maintainer asks for evidence: produce concise reproduction/test evidence.\n- If the correction implies a code change: STANCE needs_human (let operator decide if a re-classification to request_changes makes sense).\n\n**MANDATORY outputs:**\n- /tmp/lmctl-next-run-{{run_id}}-draft-response.md — public reply text (always)\n- /tmp/lmctl-next-run-{{run_id}}-maintainer-correction-analysis.md — your reasoning\n- /tmp/lmctl-next-run-{{run_id}}-followup-patch.diff — only if STANCE: patch_ready\n\nKeep draft-response.md professional, concise, no emoji, no AI tells.\n\nSTANCE: comment_ready | patch_ready | close_recommended | wait | needs_human"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"id": "s-handle-cla-dco-8b13",
|
|
128
|
+
"name": "handle_cla_dco",
|
|
129
|
+
"type": "lmctl/review",
|
|
130
|
+
"typeVersion": 1,
|
|
131
|
+
"parameters": {
|
|
132
|
+
"max_loops": 5
|
|
133
|
+
},
|
|
134
|
+
"members": {
|
|
135
|
+
"coder": {
|
|
136
|
+
"team": "default",
|
|
137
|
+
"alias": "PRWatcher",
|
|
138
|
+
"prompt_template": "classify_each_comment determined CLA/DCO signals on {{job_payload.pr_url}}. Analyze the bot comments from /tmp/lmctl-next-run-{{run_id}}-classifications.json.\n\nDO NOT forge legal action. CLA signing stays human action.\n\n**MANDATORY outputs:**\n- /tmp/lmctl-next-run-{{run_id}}-paperwork-status.md — exact instructions + bot link + what the user must do\n- /tmp/lmctl-next-run-{{run_id}}-draft-response.md — short polite note explaining the paperwork state (operator may post this if helpful)\n\nOutcomes:\n- `user_action_required`: user must sign CLA or amend DCO; instructions in paperwork-status.md\n- `empty_commit_retrigger_recommended`: bot expects a retrigger commit; draft the suggested `git commit --allow-empty -m '...'` command (DO NOT execute)\n- `dco_patch_ready`: a DCO-style amend can be done locally (rebase + signoff); draft the steps as a patch under /tmp/lmctl-next-run-{{run_id}}-followup-patch.diff\n- `wait`: bot still processing\n- `needs_human`: ambiguous\n\nSTANCE: user_action_required | empty_commit_retrigger_recommended | dco_patch_ready | wait | needs_human"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "s-recommend-action-5325",
|
|
144
|
+
"name": "recommend_action",
|
|
145
|
+
"type": "lmctl/review",
|
|
146
|
+
"typeVersion": 1,
|
|
147
|
+
"parameters": {
|
|
148
|
+
"max_loops": 5
|
|
149
|
+
},
|
|
150
|
+
"members": {
|
|
151
|
+
"coder": {
|
|
152
|
+
"team": "default",
|
|
153
|
+
"alias": "PRWatcher",
|
|
154
|
+
"prompt_template": "Reduce the prior branch's outcome into a single recommendation for {{job_payload.pr_url}}.\n\nClassify outcome: `{{outcomes.classify_each_comment}}`. Only ONE of the branches below ran (deterministic routing from classify):\n- ci: `{{outcomes.investigate_ci_red}}` (empty if classify was not ci_red)\n- review: `{{outcomes.handle_reviewer_request_changes}}` (empty if classify was not request_changes)\n- correction: `{{outcomes.handle_maintainer_correction}}` (empty if classify was not maintainer_correction)\n- paperwork: `{{outcomes.handle_cla_dco}}` (empty if classify was not cla_dco)\n\n**Verify the draft artifact exists before recommending comment_only / push_patch.** The active branch was REQUIRED to write /tmp/lmctl-next-run-{{run_id}}-draft-response.md. Run `ls /tmp/lmctl-next-run-{{run_id}}-draft-response.md` to confirm. If it's missing, STANCE: escalated (don't recommend comment_only without the artifact).\n\nWrite /tmp/lmctl-next-run-{{run_id}}-followup-recommendation.json.\n\nSTANCE map:\n- recommended_action `wait` → STANCE: wait\n- recommended_action `comment_only` → STANCE: comment_drafted (routes to operator_review_comment Interactive next)\n- recommended_action `push_patch` → STANCE: patch_drafted (routes to operator_review_patch Interactive)\n- recommended_action `close_pr` → STANCE: close_recommended → terminal closed_recommendation\n- recommended_action `paperwork_user_action` → STANCE: paperwork_required → terminal paperwork_required\n- recommended_action `escalate_human` → STANCE: escalated → terminal escalated_human\n\nPhase 1: even when patch/comment is recommended, the workflow PARKS at the operator_review_* Interactive gate. NEVER execute the external action automatically."
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "s-operator-review-comment-gate-a8ee",
|
|
160
|
+
"name": "operator_review_comment_gate",
|
|
161
|
+
"type": "lmctl/interactive",
|
|
162
|
+
"typeVersion": 1,
|
|
163
|
+
"parameters": {
|
|
164
|
+
"termination": {
|
|
165
|
+
"operator_signal": true,
|
|
166
|
+
"max_turns": 1
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
"members": {
|
|
170
|
+
"agent": {
|
|
171
|
+
"team": "default",
|
|
172
|
+
"alias": "PRWatcher",
|
|
173
|
+
"initial_prompt_template": "PR follow-up: comment drafted for {{job_payload.pr_url}}. Review /tmp/lmctl-next-run-{{run_id}}-draft-response.md and /tmp/lmctl-next-run-{{run_id}}-followup-recommendation.json. Choose: approve_comment (operator will run `gh pr comment` themselves), revise_comment, reject_comment, or wait. Signal done when decided."
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"id": "s-operator-review-comment-decide-d91c",
|
|
179
|
+
"name": "operator_review_comment_decide",
|
|
180
|
+
"type": "lmctl/review",
|
|
181
|
+
"typeVersion": 1,
|
|
182
|
+
"parameters": {
|
|
183
|
+
"max_loops": 5
|
|
184
|
+
},
|
|
185
|
+
"members": {
|
|
186
|
+
"coder": {
|
|
187
|
+
"team": "default",
|
|
188
|
+
"alias": "PRWatcher",
|
|
189
|
+
"prompt_template": "The operator has reviewed the drafted comment for {{job_payload.pr_url}}. Based on the conversation context, determine their decision.\n\nSTANCE: approve_comment | revise_comment | reject_comment | wait"
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"id": "s-operator-review-patch-gate-4e09",
|
|
195
|
+
"name": "operator_review_patch_gate",
|
|
196
|
+
"type": "lmctl/interactive",
|
|
197
|
+
"typeVersion": 1,
|
|
198
|
+
"parameters": {
|
|
199
|
+
"termination": {
|
|
200
|
+
"operator_signal": true,
|
|
201
|
+
"max_turns": 1
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
"members": {
|
|
205
|
+
"agent": {
|
|
206
|
+
"team": "default",
|
|
207
|
+
"alias": "PRWatcher",
|
|
208
|
+
"initial_prompt_template": "PR follow-up: patch drafted for {{job_payload.pr_url}}. Review /tmp/lmctl-next-run-{{run_id}}-followup-patch.diff and /tmp/lmctl-next-run-{{run_id}}-followup-recommendation.json. The patch is in {{project.local_path}}; HEAD is on the PR branch. Choose: approve_patch (operator will `git push` + optionally `gh pr comment` themselves), revise_patch, reject_patch, or wait. Signal done when decided."
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"id": "s-operator-review-patch-decide-7a80",
|
|
214
|
+
"name": "operator_review_patch_decide",
|
|
215
|
+
"type": "lmctl/review",
|
|
216
|
+
"typeVersion": 1,
|
|
217
|
+
"parameters": {
|
|
218
|
+
"max_loops": 5
|
|
219
|
+
},
|
|
220
|
+
"members": {
|
|
221
|
+
"coder": {
|
|
222
|
+
"team": "default",
|
|
223
|
+
"alias": "PRWatcher",
|
|
224
|
+
"prompt_template": "The operator has reviewed the drafted patch for {{job_payload.pr_url}}. Based on the conversation context, determine their decision.\n\nSTANCE: approve_patch | revise_patch | reject_patch | wait"
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"id": "s-terminal-aborted-4b55",
|
|
230
|
+
"name": "terminal:aborted",
|
|
231
|
+
"type": "lmctl/terminal",
|
|
232
|
+
"typeVersion": 1,
|
|
233
|
+
"parameters": {
|
|
234
|
+
"name": "aborted",
|
|
235
|
+
"kind": "failure"
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"id": "s-terminal-merged-67bd",
|
|
240
|
+
"name": "terminal:merged",
|
|
241
|
+
"type": "lmctl/terminal",
|
|
242
|
+
"typeVersion": 1,
|
|
243
|
+
"parameters": {
|
|
244
|
+
"name": "merged",
|
|
245
|
+
"kind": "success"
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"id": "s-terminal-closed-unmerged-ddf4",
|
|
250
|
+
"name": "terminal:closed_unmerged",
|
|
251
|
+
"type": "lmctl/terminal",
|
|
252
|
+
"typeVersion": 1,
|
|
253
|
+
"parameters": {
|
|
254
|
+
"name": "closed_unmerged",
|
|
255
|
+
"kind": "neutral"
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"id": "s-terminal-escalated-human-c3bd",
|
|
260
|
+
"name": "terminal:escalated_human",
|
|
261
|
+
"type": "lmctl/terminal",
|
|
262
|
+
"typeVersion": 1,
|
|
263
|
+
"parameters": {
|
|
264
|
+
"name": "escalated_human",
|
|
265
|
+
"kind": "neutral"
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"id": "s-terminal-monitored-no-action-b485",
|
|
270
|
+
"name": "terminal:monitored_no_action",
|
|
271
|
+
"type": "lmctl/terminal",
|
|
272
|
+
"typeVersion": 1,
|
|
273
|
+
"parameters": {
|
|
274
|
+
"name": "monitored_no_action",
|
|
275
|
+
"kind": "neutral"
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"id": "s-terminal-closed-recommendation-c61b",
|
|
280
|
+
"name": "terminal:closed_recommendation",
|
|
281
|
+
"type": "lmctl/terminal",
|
|
282
|
+
"typeVersion": 1,
|
|
283
|
+
"parameters": {
|
|
284
|
+
"name": "closed_recommendation",
|
|
285
|
+
"kind": "neutral"
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"id": "s-terminal-paperwork-required-4dd2",
|
|
290
|
+
"name": "terminal:paperwork_required",
|
|
291
|
+
"type": "lmctl/terminal",
|
|
292
|
+
"typeVersion": 1,
|
|
293
|
+
"parameters": {
|
|
294
|
+
"name": "paperwork_required",
|
|
295
|
+
"kind": "neutral"
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"id": "s-terminal-comment-drafted-pending-approval-165b",
|
|
300
|
+
"name": "terminal:comment_drafted_pending_approval",
|
|
301
|
+
"type": "lmctl/terminal",
|
|
302
|
+
"typeVersion": 1,
|
|
303
|
+
"parameters": {
|
|
304
|
+
"name": "comment_drafted_pending_approval",
|
|
305
|
+
"kind": "success"
|
|
306
|
+
}
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"id": "s-terminal-patch-drafted-pending-approval-879a",
|
|
310
|
+
"name": "terminal:patch_drafted_pending_approval",
|
|
311
|
+
"type": "lmctl/terminal",
|
|
312
|
+
"typeVersion": 1,
|
|
313
|
+
"parameters": {
|
|
314
|
+
"name": "patch_drafted_pending_approval",
|
|
315
|
+
"kind": "success"
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
],
|
|
319
|
+
"connections": {
|
|
320
|
+
"s-fetch-pr-state-f4e3": {
|
|
321
|
+
"approve": [
|
|
322
|
+
[
|
|
323
|
+
{
|
|
324
|
+
"step_id": "s-terminal-aborted-4b55",
|
|
325
|
+
"type": "main",
|
|
326
|
+
"index": 0
|
|
327
|
+
}
|
|
328
|
+
]
|
|
329
|
+
],
|
|
330
|
+
"open": [
|
|
331
|
+
[
|
|
332
|
+
{
|
|
333
|
+
"step_id": "s-fetch-checks-6264",
|
|
334
|
+
"type": "main",
|
|
335
|
+
"index": 0
|
|
336
|
+
}
|
|
337
|
+
]
|
|
338
|
+
],
|
|
339
|
+
"merged": [
|
|
340
|
+
[
|
|
341
|
+
{
|
|
342
|
+
"step_id": "s-terminal-merged-67bd",
|
|
343
|
+
"type": "main",
|
|
344
|
+
"index": 0
|
|
345
|
+
}
|
|
346
|
+
]
|
|
347
|
+
],
|
|
348
|
+
"closed_unmerged": [
|
|
349
|
+
[
|
|
350
|
+
{
|
|
351
|
+
"step_id": "s-terminal-closed-unmerged-ddf4",
|
|
352
|
+
"type": "main",
|
|
353
|
+
"index": 0
|
|
354
|
+
}
|
|
355
|
+
]
|
|
356
|
+
],
|
|
357
|
+
"not_found": [
|
|
358
|
+
[
|
|
359
|
+
{
|
|
360
|
+
"step_id": "s-terminal-aborted-4b55",
|
|
361
|
+
"type": "main",
|
|
362
|
+
"index": 0
|
|
363
|
+
}
|
|
364
|
+
]
|
|
365
|
+
],
|
|
366
|
+
"visibility_blocked": [
|
|
367
|
+
[
|
|
368
|
+
{
|
|
369
|
+
"step_id": "s-terminal-escalated-human-c3bd",
|
|
370
|
+
"type": "main",
|
|
371
|
+
"index": 0
|
|
372
|
+
}
|
|
373
|
+
]
|
|
374
|
+
],
|
|
375
|
+
"failed": [
|
|
376
|
+
[
|
|
377
|
+
{
|
|
378
|
+
"step_id": "s-terminal-aborted-4b55",
|
|
379
|
+
"type": "main",
|
|
380
|
+
"index": 0
|
|
381
|
+
}
|
|
382
|
+
]
|
|
383
|
+
]
|
|
384
|
+
},
|
|
385
|
+
"s-fetch-checks-6264": {
|
|
386
|
+
"approve": [
|
|
387
|
+
[
|
|
388
|
+
{
|
|
389
|
+
"step_id": "s-terminal-aborted-4b55",
|
|
390
|
+
"type": "main",
|
|
391
|
+
"index": 0
|
|
392
|
+
}
|
|
393
|
+
]
|
|
394
|
+
],
|
|
395
|
+
"checks_green": [
|
|
396
|
+
[
|
|
397
|
+
{
|
|
398
|
+
"step_id": "s-delta-since-cutoff-f38d",
|
|
399
|
+
"type": "main",
|
|
400
|
+
"index": 0
|
|
401
|
+
}
|
|
402
|
+
]
|
|
403
|
+
],
|
|
404
|
+
"checks_red": [
|
|
405
|
+
[
|
|
406
|
+
{
|
|
407
|
+
"step_id": "s-delta-since-cutoff-f38d",
|
|
408
|
+
"type": "main",
|
|
409
|
+
"index": 0
|
|
410
|
+
}
|
|
411
|
+
]
|
|
412
|
+
],
|
|
413
|
+
"checks_pending": [
|
|
414
|
+
[
|
|
415
|
+
{
|
|
416
|
+
"step_id": "s-delta-since-cutoff-f38d",
|
|
417
|
+
"type": "main",
|
|
418
|
+
"index": 0
|
|
419
|
+
}
|
|
420
|
+
]
|
|
421
|
+
],
|
|
422
|
+
"checks_unavailable": [
|
|
423
|
+
[
|
|
424
|
+
{
|
|
425
|
+
"step_id": "s-delta-since-cutoff-f38d",
|
|
426
|
+
"type": "main",
|
|
427
|
+
"index": 0
|
|
428
|
+
}
|
|
429
|
+
]
|
|
430
|
+
]
|
|
431
|
+
},
|
|
432
|
+
"s-delta-since-cutoff-f38d": {
|
|
433
|
+
"approve": [
|
|
434
|
+
[
|
|
435
|
+
{
|
|
436
|
+
"step_id": "s-terminal-aborted-4b55",
|
|
437
|
+
"type": "main",
|
|
438
|
+
"index": 0
|
|
439
|
+
}
|
|
440
|
+
]
|
|
441
|
+
],
|
|
442
|
+
"no_delta": [
|
|
443
|
+
[
|
|
444
|
+
{
|
|
445
|
+
"step_id": "s-terminal-monitored-no-action-b485",
|
|
446
|
+
"type": "main",
|
|
447
|
+
"index": 0
|
|
448
|
+
}
|
|
449
|
+
]
|
|
450
|
+
],
|
|
451
|
+
"has_delta": [
|
|
452
|
+
[
|
|
453
|
+
{
|
|
454
|
+
"step_id": "s-classify-each-comment-8454",
|
|
455
|
+
"type": "main",
|
|
456
|
+
"index": 0
|
|
457
|
+
}
|
|
458
|
+
]
|
|
459
|
+
],
|
|
460
|
+
"merged": [
|
|
461
|
+
[
|
|
462
|
+
{
|
|
463
|
+
"step_id": "s-terminal-merged-67bd",
|
|
464
|
+
"type": "main",
|
|
465
|
+
"index": 0
|
|
466
|
+
}
|
|
467
|
+
]
|
|
468
|
+
],
|
|
469
|
+
"closed": [
|
|
470
|
+
[
|
|
471
|
+
{
|
|
472
|
+
"step_id": "s-terminal-closed-unmerged-ddf4",
|
|
473
|
+
"type": "main",
|
|
474
|
+
"index": 0
|
|
475
|
+
}
|
|
476
|
+
]
|
|
477
|
+
],
|
|
478
|
+
"visibility_blocked": [
|
|
479
|
+
[
|
|
480
|
+
{
|
|
481
|
+
"step_id": "s-terminal-escalated-human-c3bd",
|
|
482
|
+
"type": "main",
|
|
483
|
+
"index": 0
|
|
484
|
+
}
|
|
485
|
+
]
|
|
486
|
+
]
|
|
487
|
+
},
|
|
488
|
+
"s-classify-each-comment-8454": {
|
|
489
|
+
"approve": [
|
|
490
|
+
[
|
|
491
|
+
{
|
|
492
|
+
"step_id": "s-terminal-aborted-4b55",
|
|
493
|
+
"type": "main",
|
|
494
|
+
"index": 0
|
|
495
|
+
}
|
|
496
|
+
]
|
|
497
|
+
],
|
|
498
|
+
"no_action": [
|
|
499
|
+
[
|
|
500
|
+
{
|
|
501
|
+
"step_id": "s-terminal-monitored-no-action-b485",
|
|
502
|
+
"type": "main",
|
|
503
|
+
"index": 0
|
|
504
|
+
}
|
|
505
|
+
]
|
|
506
|
+
],
|
|
507
|
+
"ci_red": [
|
|
508
|
+
[
|
|
509
|
+
{
|
|
510
|
+
"step_id": "s-investigate-ci-red-3723",
|
|
511
|
+
"type": "main",
|
|
512
|
+
"index": 0
|
|
513
|
+
}
|
|
514
|
+
]
|
|
515
|
+
],
|
|
516
|
+
"request_changes": [
|
|
517
|
+
[
|
|
518
|
+
{
|
|
519
|
+
"step_id": "s-handle-reviewer-request-changes-6f13",
|
|
520
|
+
"type": "main",
|
|
521
|
+
"index": 0
|
|
522
|
+
}
|
|
523
|
+
]
|
|
524
|
+
],
|
|
525
|
+
"maintainer_correction": [
|
|
526
|
+
[
|
|
527
|
+
{
|
|
528
|
+
"step_id": "s-handle-maintainer-correction-bbd9",
|
|
529
|
+
"type": "main",
|
|
530
|
+
"index": 0
|
|
531
|
+
}
|
|
532
|
+
]
|
|
533
|
+
],
|
|
534
|
+
"cla_dco": [
|
|
535
|
+
[
|
|
536
|
+
{
|
|
537
|
+
"step_id": "s-handle-cla-dco-8b13",
|
|
538
|
+
"type": "main",
|
|
539
|
+
"index": 0
|
|
540
|
+
}
|
|
541
|
+
]
|
|
542
|
+
],
|
|
543
|
+
"duplicate_or_closed": [
|
|
544
|
+
[
|
|
545
|
+
{
|
|
546
|
+
"step_id": "s-terminal-closed-recommendation-c61b",
|
|
547
|
+
"type": "main",
|
|
548
|
+
"index": 0
|
|
549
|
+
}
|
|
550
|
+
]
|
|
551
|
+
],
|
|
552
|
+
"needs_human": [
|
|
553
|
+
[
|
|
554
|
+
{
|
|
555
|
+
"step_id": "s-terminal-escalated-human-c3bd",
|
|
556
|
+
"type": "main",
|
|
557
|
+
"index": 0
|
|
558
|
+
}
|
|
559
|
+
]
|
|
560
|
+
]
|
|
561
|
+
},
|
|
562
|
+
"s-investigate-ci-red-3723": {
|
|
563
|
+
"approve": [
|
|
564
|
+
[
|
|
565
|
+
{
|
|
566
|
+
"step_id": "s-terminal-aborted-4b55",
|
|
567
|
+
"type": "main",
|
|
568
|
+
"index": 0
|
|
569
|
+
}
|
|
570
|
+
]
|
|
571
|
+
],
|
|
572
|
+
"unrelated_or_flaky": [
|
|
573
|
+
[
|
|
574
|
+
{
|
|
575
|
+
"step_id": "s-recommend-action-5325",
|
|
576
|
+
"type": "main",
|
|
577
|
+
"index": 0
|
|
578
|
+
}
|
|
579
|
+
]
|
|
580
|
+
],
|
|
581
|
+
"related_patch_drafted": [
|
|
582
|
+
[
|
|
583
|
+
{
|
|
584
|
+
"step_id": "s-recommend-action-5325",
|
|
585
|
+
"type": "main",
|
|
586
|
+
"index": 0
|
|
587
|
+
}
|
|
588
|
+
]
|
|
589
|
+
],
|
|
590
|
+
"related_needs_full_fix": [
|
|
591
|
+
[
|
|
592
|
+
{
|
|
593
|
+
"step_id": "s-recommend-action-5325",
|
|
594
|
+
"type": "main",
|
|
595
|
+
"index": 0
|
|
596
|
+
}
|
|
597
|
+
]
|
|
598
|
+
],
|
|
599
|
+
"cannot_determine": [
|
|
600
|
+
[
|
|
601
|
+
{
|
|
602
|
+
"step_id": "s-recommend-action-5325",
|
|
603
|
+
"type": "main",
|
|
604
|
+
"index": 0
|
|
605
|
+
}
|
|
606
|
+
]
|
|
607
|
+
],
|
|
608
|
+
"needs_human": [
|
|
609
|
+
[
|
|
610
|
+
{
|
|
611
|
+
"step_id": "s-terminal-escalated-human-c3bd",
|
|
612
|
+
"type": "main",
|
|
613
|
+
"index": 0
|
|
614
|
+
}
|
|
615
|
+
]
|
|
616
|
+
]
|
|
617
|
+
},
|
|
618
|
+
"s-handle-reviewer-request-changes-6f13": {
|
|
619
|
+
"approve": [
|
|
620
|
+
[
|
|
621
|
+
{
|
|
622
|
+
"step_id": "s-terminal-aborted-4b55",
|
|
623
|
+
"type": "main",
|
|
624
|
+
"index": 0
|
|
625
|
+
}
|
|
626
|
+
]
|
|
627
|
+
],
|
|
628
|
+
"patch_ready": [
|
|
629
|
+
[
|
|
630
|
+
{
|
|
631
|
+
"step_id": "s-recommend-action-5325",
|
|
632
|
+
"type": "main",
|
|
633
|
+
"index": 0
|
|
634
|
+
}
|
|
635
|
+
]
|
|
636
|
+
],
|
|
637
|
+
"comment_ready": [
|
|
638
|
+
[
|
|
639
|
+
{
|
|
640
|
+
"step_id": "s-recommend-action-5325",
|
|
641
|
+
"type": "main",
|
|
642
|
+
"index": 0
|
|
643
|
+
}
|
|
644
|
+
]
|
|
645
|
+
],
|
|
646
|
+
"needs_clarification": [
|
|
647
|
+
[
|
|
648
|
+
{
|
|
649
|
+
"step_id": "s-recommend-action-5325",
|
|
650
|
+
"type": "main",
|
|
651
|
+
"index": 0
|
|
652
|
+
}
|
|
653
|
+
]
|
|
654
|
+
],
|
|
655
|
+
"should_withdraw": [
|
|
656
|
+
[
|
|
657
|
+
{
|
|
658
|
+
"step_id": "s-recommend-action-5325",
|
|
659
|
+
"type": "main",
|
|
660
|
+
"index": 0
|
|
661
|
+
}
|
|
662
|
+
]
|
|
663
|
+
],
|
|
664
|
+
"needs_human": [
|
|
665
|
+
[
|
|
666
|
+
{
|
|
667
|
+
"step_id": "s-terminal-escalated-human-c3bd",
|
|
668
|
+
"type": "main",
|
|
669
|
+
"index": 0
|
|
670
|
+
}
|
|
671
|
+
]
|
|
672
|
+
]
|
|
673
|
+
},
|
|
674
|
+
"s-handle-maintainer-correction-bbd9": {
|
|
675
|
+
"approve": [
|
|
676
|
+
[
|
|
677
|
+
{
|
|
678
|
+
"step_id": "s-terminal-aborted-4b55",
|
|
679
|
+
"type": "main",
|
|
680
|
+
"index": 0
|
|
681
|
+
}
|
|
682
|
+
]
|
|
683
|
+
],
|
|
684
|
+
"comment_ready": [
|
|
685
|
+
[
|
|
686
|
+
{
|
|
687
|
+
"step_id": "s-recommend-action-5325",
|
|
688
|
+
"type": "main",
|
|
689
|
+
"index": 0
|
|
690
|
+
}
|
|
691
|
+
]
|
|
692
|
+
],
|
|
693
|
+
"patch_ready": [
|
|
694
|
+
[
|
|
695
|
+
{
|
|
696
|
+
"step_id": "s-recommend-action-5325",
|
|
697
|
+
"type": "main",
|
|
698
|
+
"index": 0
|
|
699
|
+
}
|
|
700
|
+
]
|
|
701
|
+
],
|
|
702
|
+
"wait": [
|
|
703
|
+
[
|
|
704
|
+
{
|
|
705
|
+
"step_id": "s-terminal-monitored-no-action-b485",
|
|
706
|
+
"type": "main",
|
|
707
|
+
"index": 0
|
|
708
|
+
}
|
|
709
|
+
]
|
|
710
|
+
],
|
|
711
|
+
"close_recommended": [
|
|
712
|
+
[
|
|
713
|
+
{
|
|
714
|
+
"step_id": "s-terminal-closed-recommendation-c61b",
|
|
715
|
+
"type": "main",
|
|
716
|
+
"index": 0
|
|
717
|
+
}
|
|
718
|
+
]
|
|
719
|
+
],
|
|
720
|
+
"needs_human": [
|
|
721
|
+
[
|
|
722
|
+
{
|
|
723
|
+
"step_id": "s-terminal-escalated-human-c3bd",
|
|
724
|
+
"type": "main",
|
|
725
|
+
"index": 0
|
|
726
|
+
}
|
|
727
|
+
]
|
|
728
|
+
]
|
|
729
|
+
},
|
|
730
|
+
"s-handle-cla-dco-8b13": {
|
|
731
|
+
"approve": [
|
|
732
|
+
[
|
|
733
|
+
{
|
|
734
|
+
"step_id": "s-terminal-aborted-4b55",
|
|
735
|
+
"type": "main",
|
|
736
|
+
"index": 0
|
|
737
|
+
}
|
|
738
|
+
]
|
|
739
|
+
],
|
|
740
|
+
"user_action_required": [
|
|
741
|
+
[
|
|
742
|
+
{
|
|
743
|
+
"step_id": "s-terminal-paperwork-required-4dd2",
|
|
744
|
+
"type": "main",
|
|
745
|
+
"index": 0
|
|
746
|
+
}
|
|
747
|
+
]
|
|
748
|
+
],
|
|
749
|
+
"empty_commit_retrigger_recommended": [
|
|
750
|
+
[
|
|
751
|
+
{
|
|
752
|
+
"step_id": "s-terminal-paperwork-required-4dd2",
|
|
753
|
+
"type": "main",
|
|
754
|
+
"index": 0
|
|
755
|
+
}
|
|
756
|
+
]
|
|
757
|
+
],
|
|
758
|
+
"dco_patch_ready": [
|
|
759
|
+
[
|
|
760
|
+
{
|
|
761
|
+
"step_id": "s-recommend-action-5325",
|
|
762
|
+
"type": "main",
|
|
763
|
+
"index": 0
|
|
764
|
+
}
|
|
765
|
+
]
|
|
766
|
+
],
|
|
767
|
+
"wait": [
|
|
768
|
+
[
|
|
769
|
+
{
|
|
770
|
+
"step_id": "s-terminal-monitored-no-action-b485",
|
|
771
|
+
"type": "main",
|
|
772
|
+
"index": 0
|
|
773
|
+
}
|
|
774
|
+
]
|
|
775
|
+
],
|
|
776
|
+
"needs_human": [
|
|
777
|
+
[
|
|
778
|
+
{
|
|
779
|
+
"step_id": "s-terminal-escalated-human-c3bd",
|
|
780
|
+
"type": "main",
|
|
781
|
+
"index": 0
|
|
782
|
+
}
|
|
783
|
+
]
|
|
784
|
+
]
|
|
785
|
+
},
|
|
786
|
+
"s-recommend-action-5325": {
|
|
787
|
+
"approve": [
|
|
788
|
+
[
|
|
789
|
+
{
|
|
790
|
+
"step_id": "s-terminal-aborted-4b55",
|
|
791
|
+
"type": "main",
|
|
792
|
+
"index": 0
|
|
793
|
+
}
|
|
794
|
+
]
|
|
795
|
+
],
|
|
796
|
+
"wait": [
|
|
797
|
+
[
|
|
798
|
+
{
|
|
799
|
+
"step_id": "s-terminal-monitored-no-action-b485",
|
|
800
|
+
"type": "main",
|
|
801
|
+
"index": 0
|
|
802
|
+
}
|
|
803
|
+
]
|
|
804
|
+
],
|
|
805
|
+
"comment_drafted": [
|
|
806
|
+
[
|
|
807
|
+
{
|
|
808
|
+
"step_id": "s-operator-review-comment-gate-a8ee",
|
|
809
|
+
"type": "main",
|
|
810
|
+
"index": 0
|
|
811
|
+
}
|
|
812
|
+
]
|
|
813
|
+
],
|
|
814
|
+
"patch_drafted": [
|
|
815
|
+
[
|
|
816
|
+
{
|
|
817
|
+
"step_id": "s-operator-review-patch-gate-4e09",
|
|
818
|
+
"type": "main",
|
|
819
|
+
"index": 0
|
|
820
|
+
}
|
|
821
|
+
]
|
|
822
|
+
],
|
|
823
|
+
"close_recommended": [
|
|
824
|
+
[
|
|
825
|
+
{
|
|
826
|
+
"step_id": "s-terminal-closed-recommendation-c61b",
|
|
827
|
+
"type": "main",
|
|
828
|
+
"index": 0
|
|
829
|
+
}
|
|
830
|
+
]
|
|
831
|
+
],
|
|
832
|
+
"paperwork_required": [
|
|
833
|
+
[
|
|
834
|
+
{
|
|
835
|
+
"step_id": "s-terminal-paperwork-required-4dd2",
|
|
836
|
+
"type": "main",
|
|
837
|
+
"index": 0
|
|
838
|
+
}
|
|
839
|
+
]
|
|
840
|
+
],
|
|
841
|
+
"escalated": [
|
|
842
|
+
[
|
|
843
|
+
{
|
|
844
|
+
"step_id": "s-terminal-escalated-human-c3bd",
|
|
845
|
+
"type": "main",
|
|
846
|
+
"index": 0
|
|
847
|
+
}
|
|
848
|
+
]
|
|
849
|
+
]
|
|
850
|
+
},
|
|
851
|
+
"s-operator-review-comment-gate-a8ee": {
|
|
852
|
+
"done": [
|
|
853
|
+
[
|
|
854
|
+
{
|
|
855
|
+
"step_id": "s-operator-review-comment-decide-d91c",
|
|
856
|
+
"type": "main",
|
|
857
|
+
"index": 0
|
|
858
|
+
}
|
|
859
|
+
]
|
|
860
|
+
]
|
|
861
|
+
},
|
|
862
|
+
"s-operator-review-comment-decide-d91c": {
|
|
863
|
+
"approve": [
|
|
864
|
+
[
|
|
865
|
+
{
|
|
866
|
+
"step_id": "s-terminal-aborted-4b55",
|
|
867
|
+
"type": "main",
|
|
868
|
+
"index": 0
|
|
869
|
+
}
|
|
870
|
+
]
|
|
871
|
+
],
|
|
872
|
+
"approve_comment": [
|
|
873
|
+
[
|
|
874
|
+
{
|
|
875
|
+
"step_id": "s-terminal-comment-drafted-pending-approval-165b",
|
|
876
|
+
"type": "main",
|
|
877
|
+
"index": 0
|
|
878
|
+
}
|
|
879
|
+
]
|
|
880
|
+
],
|
|
881
|
+
"revise_comment": [
|
|
882
|
+
[
|
|
883
|
+
{
|
|
884
|
+
"step_id": "s-terminal-escalated-human-c3bd",
|
|
885
|
+
"type": "main",
|
|
886
|
+
"index": 0
|
|
887
|
+
}
|
|
888
|
+
]
|
|
889
|
+
],
|
|
890
|
+
"reject_comment": [
|
|
891
|
+
[
|
|
892
|
+
{
|
|
893
|
+
"step_id": "s-terminal-monitored-no-action-b485",
|
|
894
|
+
"type": "main",
|
|
895
|
+
"index": 0
|
|
896
|
+
}
|
|
897
|
+
]
|
|
898
|
+
],
|
|
899
|
+
"wait": [
|
|
900
|
+
[
|
|
901
|
+
{
|
|
902
|
+
"step_id": "s-terminal-monitored-no-action-b485",
|
|
903
|
+
"type": "main",
|
|
904
|
+
"index": 0
|
|
905
|
+
}
|
|
906
|
+
]
|
|
907
|
+
]
|
|
908
|
+
},
|
|
909
|
+
"s-operator-review-patch-gate-4e09": {
|
|
910
|
+
"done": [
|
|
911
|
+
[
|
|
912
|
+
{
|
|
913
|
+
"step_id": "s-operator-review-patch-decide-7a80",
|
|
914
|
+
"type": "main",
|
|
915
|
+
"index": 0
|
|
916
|
+
}
|
|
917
|
+
]
|
|
918
|
+
]
|
|
919
|
+
},
|
|
920
|
+
"s-operator-review-patch-decide-7a80": {
|
|
921
|
+
"approve": [
|
|
922
|
+
[
|
|
923
|
+
{
|
|
924
|
+
"step_id": "s-terminal-aborted-4b55",
|
|
925
|
+
"type": "main",
|
|
926
|
+
"index": 0
|
|
927
|
+
}
|
|
928
|
+
]
|
|
929
|
+
],
|
|
930
|
+
"approve_patch": [
|
|
931
|
+
[
|
|
932
|
+
{
|
|
933
|
+
"step_id": "s-terminal-patch-drafted-pending-approval-879a",
|
|
934
|
+
"type": "main",
|
|
935
|
+
"index": 0
|
|
936
|
+
}
|
|
937
|
+
]
|
|
938
|
+
],
|
|
939
|
+
"revise_patch": [
|
|
940
|
+
[
|
|
941
|
+
{
|
|
942
|
+
"step_id": "s-terminal-escalated-human-c3bd",
|
|
943
|
+
"type": "main",
|
|
944
|
+
"index": 0
|
|
945
|
+
}
|
|
946
|
+
]
|
|
947
|
+
],
|
|
948
|
+
"reject_patch": [
|
|
949
|
+
[
|
|
950
|
+
{
|
|
951
|
+
"step_id": "s-terminal-monitored-no-action-b485",
|
|
952
|
+
"type": "main",
|
|
953
|
+
"index": 0
|
|
954
|
+
}
|
|
955
|
+
]
|
|
956
|
+
],
|
|
957
|
+
"wait": [
|
|
958
|
+
[
|
|
959
|
+
{
|
|
960
|
+
"step_id": "s-terminal-monitored-no-action-b485",
|
|
961
|
+
"type": "main",
|
|
962
|
+
"index": 0
|
|
963
|
+
}
|
|
964
|
+
]
|
|
965
|
+
]
|
|
966
|
+
}
|
|
967
|
+
},
|
|
968
|
+
"entry_step_id": "s-fetch-pr-state-f4e3"
|
|
969
|
+
}
|