@frankzhang2026/opencode-android-orchestrator 0.10.0 → 1.0.1
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/CHANGELOG.md +28 -0
- package/README.md +48 -51
- package/dist/cli.js +14 -1
- package/dist/cli.js.map +1 -1
- package/dist/config/android-sdk.d.ts +10 -0
- package/dist/config/android-sdk.d.ts.map +1 -0
- package/dist/config/android-sdk.js +50 -0
- package/dist/config/android-sdk.js.map +1 -0
- package/dist/config/queue-policy.d.ts +12 -0
- package/dist/config/queue-policy.d.ts.map +1 -0
- package/dist/config/queue-policy.js +18 -0
- package/dist/config/queue-policy.js.map +1 -0
- package/dist/config/verification-policy.d.ts +8 -3
- package/dist/config/verification-policy.d.ts.map +1 -1
- package/dist/config/verification-policy.js +48 -14
- package/dist/config/verification-policy.js.map +1 -1
- package/dist/doctor/index.d.ts.map +1 -1
- package/dist/doctor/index.js +3 -49
- package/dist/doctor/index.js.map +1 -1
- package/dist/doctor/installation.d.ts.map +1 -1
- package/dist/doctor/installation.js +3 -0
- package/dist/doctor/installation.js.map +1 -1
- package/dist/installer/adaptive-templates.d.ts +3 -1
- package/dist/installer/adaptive-templates.d.ts.map +1 -1
- package/dist/installer/adaptive-templates.js +2 -0
- package/dist/installer/adaptive-templates.js.map +1 -1
- package/dist/installer/install-manifest.d.ts +1 -0
- package/dist/installer/install-manifest.d.ts.map +1 -1
- package/dist/installer/install-manifest.js +6 -1
- package/dist/installer/install-manifest.js.map +1 -1
- package/dist/installer/opencode-config.d.ts +3 -3
- package/dist/installer/opencode-config.d.ts.map +1 -1
- package/dist/installer/opencode-config.js +1 -1
- package/dist/installer/opencode-config.js.map +1 -1
- package/dist/installer/uninstall.d.ts.map +1 -1
- package/dist/installer/uninstall.js +5 -0
- package/dist/installer/uninstall.js.map +1 -1
- package/dist/installer/upgrade.d.ts.map +1 -1
- package/dist/installer/upgrade.js +13 -1
- package/dist/installer/upgrade.js.map +1 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +11 -5
- package/dist/plugin/index.js.map +1 -1
- package/dist/queue/approvals.d.ts +49 -0
- package/dist/queue/approvals.d.ts.map +1 -0
- package/dist/queue/approvals.js +68 -0
- package/dist/queue/approvals.js.map +1 -0
- package/dist/queue/cli.d.ts +3 -0
- package/dist/queue/cli.d.ts.map +1 -0
- package/dist/queue/cli.js +115 -0
- package/dist/queue/cli.js.map +1 -0
- package/dist/queue/executor.d.ts +24 -0
- package/dist/queue/executor.d.ts.map +1 -0
- package/dist/queue/executor.js +445 -0
- package/dist/queue/executor.js.map +1 -0
- package/dist/queue/lifecycle.d.ts +3 -0
- package/dist/queue/lifecycle.d.ts.map +1 -0
- package/dist/queue/lifecycle.js +24 -0
- package/dist/queue/lifecycle.js.map +1 -0
- package/dist/queue/queue.d.ts +171 -0
- package/dist/queue/queue.d.ts.map +1 -0
- package/dist/queue/queue.js +506 -0
- package/dist/queue/queue.js.map +1 -0
- package/dist/queue/service.d.ts +15 -0
- package/dist/queue/service.d.ts.map +1 -0
- package/dist/queue/service.js +152 -0
- package/dist/queue/service.js.map +1 -0
- package/dist/queue/storage.d.ts +32 -0
- package/dist/queue/storage.d.ts.map +1 -0
- package/dist/queue/storage.js +180 -0
- package/dist/queue/storage.js.map +1 -0
- package/dist/queue/tools.d.ts +12 -0
- package/dist/queue/tools.d.ts.map +1 -0
- package/dist/queue/tools.js +155 -0
- package/dist/queue/tools.js.map +1 -0
- package/docs/MIGRATION.md +32 -11
- package/docs/QUEUE.md +151 -0
- package/docs/SECURITY.md +38 -31
- package/docs/TROUBLESHOOTING.md +34 -11
- package/package.json +1 -1
- package/templates/.opencode/agents/scheduled-planner.md +64 -131
- package/templates/.opencode/commands/abort-task.md +6 -15
- package/templates/.opencode/commands/acceptance.md +6 -15
- package/templates/.opencode/commands/change.md +3 -1
- package/templates/.opencode/commands/resume-review.md +6 -14
- package/templates/.opencode/commands/resume-task.md +6 -23
- package/templates/.opencode/skills/scheduled-quality-orchestrator/SKILL.md +72 -248
- package/templates/AGENTS.md.fragment +8 -0
- package/templates/automation/config.json +8 -2
- package/templates/automation/config.schema.json +218 -46
- package/templates/scripts/automation/abort-task.sh +2 -1
- package/templates/scripts/automation/accept-and-integrate.sh +5 -0
- package/templates/scripts/automation/acceptance-report.sh +4 -2
- package/templates/scripts/automation/approve-and-run.sh +4 -0
- package/templates/scripts/automation/begin-review.sh +1 -0
- package/templates/scripts/automation/block-task.sh +1 -0
- package/templates/scripts/automation/claim-task.sh +1 -0
- package/templates/scripts/automation/lib.sh +94 -1
- package/templates/scripts/automation/orchestrate-task.sh +11 -0
- package/templates/scripts/automation/preflight.sh +14 -4
- package/templates/scripts/automation/prepare-contract-review.sh +4 -0
- package/templates/scripts/automation/quality-gate.sh +1 -0
- package/templates/scripts/automation/record-red.sh +1 -0
- package/templates/scripts/automation/resume-review-fix.sh +1 -0
- package/templates/scripts/automation/resume-review.sh +1 -0
- package/templates/scripts/automation/resume-task.sh +1 -0
- package/templates/scripts/automation/scope-gate.sh +10 -2
- package/templates/scripts/automation/submit-review.sh +8 -2
- package/templates/scripts/automation/verify-task.sh +13 -0
|
@@ -1,252 +1,76 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: scheduled-quality-orchestrator
|
|
3
|
-
description:
|
|
4
|
-
compatibility: opencode
|
|
5
|
-
metadata:
|
|
6
|
-
audience: interactive-planner
|
|
7
|
-
workflow: end-to-end-coding-orchestration
|
|
3
|
+
description: Plan stable committed code, approve independent inbox contracts, and control one durable background executor per repository
|
|
8
4
|
---
|
|
9
5
|
|
|
10
|
-
#
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
`
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
`
|
|
63
|
-
|
|
64
|
-
-
|
|
65
|
-
|
|
66
|
-
-
|
|
67
|
-
|
|
68
|
-
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
The command may take time. It keeps the sealed planning artifacts uncommitted,
|
|
83
|
-
acquires the persistent repository workspace lease, prepares the configured
|
|
84
|
-
transactional workspace from the unchanged pre-task HEAD, launches the
|
|
85
|
-
restricted Coder, launches a fresh
|
|
86
|
-
read-only Reviewer, performs at most the configured review-fix cycle, and stops
|
|
87
|
-
at `AWAITING_HUMAN` or a hard failure state. The default
|
|
88
|
-
`inPlaceExclusive` strategy switches the existing source directory to the task
|
|
89
|
-
branch and does not copy the repository. `isolatedWorktree` is an explicit
|
|
90
|
-
fallback. Do not reproduce any of those Git or agent operations manually.
|
|
91
|
-
|
|
92
|
-
## Human acceptance boundary
|
|
93
|
-
|
|
94
|
-
When `approve-and-run.sh` reaches `AWAITING_HUMAN`, do not wait for another user
|
|
95
|
-
message. Treat that state transition as an active human-review notification.
|
|
96
|
-
Immediately run:
|
|
97
|
-
|
|
98
|
-
`./scripts/automation/show-acceptance-review.sh <TASK-ID>`
|
|
99
|
-
|
|
100
|
-
Present its fresh, SHA-verified review card without collapsing the four focus
|
|
101
|
-
groups: observable behavior, regression/scope, automated evidence, and
|
|
102
|
-
binding/remaining risk. Do not ask the user to provide the task ID again, list
|
|
103
|
-
fields, inspect raw JSON, or compose a display prompt.
|
|
104
|
-
|
|
105
|
-
Immediately after the card, call `question` once with `multiple: false` and
|
|
106
|
-
`custom: false`:
|
|
107
|
-
|
|
108
|
-
- header: `成果验收`
|
|
109
|
-
- question: `请按上方重点完成复核。这个封存成果是否通过人工验收?`
|
|
110
|
-
- option 1 label: `验收通过,提交到原分支。`
|
|
111
|
-
- option 1 description: `确认当前 sealed diff,并开始经过复验的本地集成。`
|
|
112
|
-
- option 2 label: `验收不通过,需要说明失败项`
|
|
113
|
-
- option 2 description: `保持封存,不集成;随后说明失败的条件或观察结果。`
|
|
114
|
-
- option 3 label: `暂不决定,保持封存`
|
|
115
|
-
- option 3 description: `继续停在 AWAITING_HUMAN,稍后可用 /acceptance 再次查看。`
|
|
116
|
-
|
|
117
|
-
The acceptance is bound to the task ID, sealed diff SHA, and recorded original
|
|
118
|
-
branch. Only selecting option 1 in this fresh question grants acceptance. A
|
|
119
|
-
direct chat message is never final acceptance, even if it exactly repeats the
|
|
120
|
-
option label.
|
|
121
|
-
|
|
122
|
-
For option 2, ask only which acceptance criterion or observed behavior failed;
|
|
123
|
-
do not edit the sealed task root, start integration, or infer a new contract.
|
|
124
|
-
For option 3, stop with no state change. A dismissed question, prose answer,
|
|
125
|
-
silence, or any other response is not acceptance.
|
|
126
|
-
|
|
127
|
-
After option 1 is selected in the fresh `成果验收` question, run only:
|
|
128
|
-
|
|
129
|
-
`./scripts/automation/accept-and-integrate.sh <TASK-ID> "验收通过,提交到原分支。"`
|
|
130
|
-
|
|
131
|
-
The deterministic integrator must create exactly one commit containing the
|
|
132
|
-
sealed plan, task contract, and all authorized product changes; it must not
|
|
133
|
-
create an earlier planning-only commit. Only after the recorded original branch
|
|
134
|
-
safely reaches that verified commit, it must remove or detach any task worktree
|
|
135
|
-
that still owns the task branch and safely delete the integrated local task
|
|
136
|
-
branch. A failed or blocked integration must retain the task branch for
|
|
137
|
-
recovery. Report the resulting local branch, integrated commit, task-branch
|
|
138
|
-
deletion, verification result, and `pushed: false`. Never treat acceptance as
|
|
139
|
-
permission to push.
|
|
140
|
-
|
|
141
|
-
If the automatic card was missed, or the user invokes `/acceptance <TASK-ID>`,
|
|
142
|
-
run the same display script and repeat the same review card and `question`.
|
|
143
|
-
Never substitute remembered conversation content for the fresh script output.
|
|
144
|
-
|
|
145
|
-
## Baseline-only recovery
|
|
146
|
-
|
|
147
|
-
If a task is `BLOCKED` because the `claim-task.sh` Gradle baseline capture was
|
|
148
|
-
externally interrupted before `baseline.json` was sealed, offer:
|
|
149
|
-
|
|
150
|
-
`/resume-task <TASK-ID>`
|
|
151
|
-
|
|
152
|
-
The command must first display fresh status, then call one OpenCode `question`
|
|
153
|
-
with `multiple: false` and `custom: false`:
|
|
154
|
-
|
|
155
|
-
- header: `恢复任务`
|
|
156
|
-
- question: `是否重新捕获缺失的基线证据并继续自动执行?`
|
|
157
|
-
- option 1 label: `恢复任务,重新捕获基线并继续自动执行。`
|
|
158
|
-
- option 1 description: `验证分支、租约、封存规划工件和零产品改动后,仅允许一次基线重试。`
|
|
159
|
-
- option 2 label: `保持当前任务现场`
|
|
160
|
-
- option 2 description: `不修改分支、文件、状态、证据或租约。`
|
|
161
|
-
|
|
162
|
-
Only option 1 selected in that fresh question authorizes:
|
|
163
|
-
|
|
164
|
-
`./scripts/automation/resume-task.sh <TASK-ID> "恢复任务,重新捕获基线并继续自动执行。"`
|
|
165
|
-
|
|
166
|
-
The script must prove the last transition was the baseline-capture
|
|
167
|
-
`CODING -> BLOCKED` interruption, `baseline.json` and all downstream evidence
|
|
168
|
-
are absent, both refs still equal the recorded baseline, the repository lease
|
|
169
|
-
still matches, and the worktree contains exactly the two sealed untracked
|
|
170
|
-
planning artifacts. It records the approval and one bounded resumption,
|
|
171
|
-
changes `BLOCKED` to `PENDING`, and relaunches the normal orchestration path so
|
|
172
|
-
Coder performs a fresh deterministic claim. It must never erase a failed or
|
|
173
|
-
successful baseline record and must never accept a product diff.
|
|
174
|
-
|
|
175
|
-
Do not run `transition-state.sh`, `queue-task.sh`, reset the task root, or edit
|
|
176
|
-
runtime evidence. A direct chat message is not recovery approval. If this one
|
|
177
|
-
retry is exhausted, preserve the task for abort or a new reviewed contract.
|
|
178
|
-
|
|
179
|
-
## Reviewer-only recovery
|
|
180
|
-
|
|
181
|
-
If a task is `BLOCKED` because a Reviewer exited before submitting a decision,
|
|
182
|
-
preserve the completed implementation and all TDD/quality-gate evidence. Tell
|
|
183
|
-
the user that retrying through `PENDING` would incorrectly launch Coder again,
|
|
184
|
-
then offer this explicit recovery command:
|
|
185
|
-
|
|
186
|
-
`/resume-review <TASK-ID>`
|
|
187
|
-
|
|
188
|
-
On that command, run only:
|
|
189
|
-
|
|
190
|
-
`./scripts/automation/resume-review.sh <TASK-ID>`
|
|
191
|
-
|
|
192
|
-
The script must prove that the recorded Reviewer interruption is recoverable,
|
|
193
|
-
the task branch and baseline still match, no decision exists for the current
|
|
194
|
-
sealed diff, the scope gate still passes, and the live diff SHA still equals
|
|
195
|
-
`ready.json`. It then records a bounded resumption and transitions directly
|
|
196
|
-
from `BLOCKED` to `REVIEWING`; it never runs Coder or consumes a review-fix
|
|
197
|
-
cycle. A previous mistaken `BLOCKED → PENDING → BLOCKED` detour is recoverable
|
|
198
|
-
only when it never reached `CODING` and all sealed checks still match.
|
|
199
|
-
|
|
200
|
-
Do not use `transition-state.sh`, `queue-task.sh`, a task-root reset, or a new
|
|
201
|
-
contract for this specific interruption. If the recovery script rejects the
|
|
202
|
-
task, preserve the current state and report its exact check failure. If it
|
|
203
|
-
reaches `AWAITING_HUMAN`, immediately continue with the Human acceptance
|
|
204
|
-
boundary above.
|
|
205
|
-
|
|
206
|
-
## Exceptional abort boundary
|
|
207
|
-
|
|
208
|
-
For a task stopped in `PREPARING`, `PENDING`, `CODING`, `READY_FOR_REVIEW`,
|
|
209
|
-
`REVIEWING`, `CHANGES_REQUESTED`, `AWAITING_HUMAN`, `BLOCKED`, `TEST_FAILED`,
|
|
210
|
-
`NEEDS_HUMAN`, or `INTEGRATION_BLOCKED`, the user may invoke
|
|
211
|
-
`/abort-task <TASK-ID>`. First run `status.sh` and show the state, task branch,
|
|
212
|
-
original branch, and evidence directory. Then call `question` once with
|
|
213
|
-
`multiple: false` and `custom: false`:
|
|
214
|
-
|
|
215
|
-
- header: `中止任务`
|
|
216
|
-
- question: `是否封存当前任务修改并恢复到记录的原分支?`
|
|
217
|
-
- option 1 label: `中止任务,封存修改并恢复原分支。`
|
|
218
|
-
- option 1 description: `把合同内修改归档到任务分支和证据目录,然后释放仓库租约。`
|
|
219
|
-
- option 2 label: `保持当前任务现场`
|
|
220
|
-
- option 2 description: `不修改分支、文件、状态或租约。`
|
|
221
|
-
|
|
222
|
-
Only the exact option-1 answer, or the same exact direct reply after the fresh
|
|
223
|
-
status display, authorizes:
|
|
224
|
-
|
|
225
|
-
`./scripts/automation/abort-task.sh <TASK-ID> "中止任务,封存修改并恢复原分支。"`
|
|
226
|
-
|
|
227
|
-
The deterministic abort script must reject out-of-contract changes and preserve
|
|
228
|
-
the diff. When product changes exist, it preserves them together with the plan
|
|
229
|
-
and contract in one recovery commit; when only planning artifacts exist, it
|
|
230
|
-
must not create a planning-only commit. It must avoid changing the original
|
|
231
|
-
branch ref, switch the in-place directory back to the original branch, release
|
|
232
|
-
the repository lease, and end in `ABORTED`. Never improvise cleanup with reset,
|
|
233
|
-
clean, or file deletion.
|
|
234
|
-
|
|
235
|
-
## Hard stops
|
|
236
|
-
|
|
237
|
-
- Never manufacture, paraphrase, or infer one of the three normal-path
|
|
238
|
-
approvals, the baseline-recovery approval, or the exceptional abort
|
|
239
|
-
approval. Each normal approval exists
|
|
240
|
-
only when the user selects the full label in that boundary's fresh
|
|
241
|
-
`question`; direct chat text never counts.
|
|
242
|
-
- Never call a normal-path approval script before its matching `question`
|
|
243
|
-
selection. The exceptional abort retains its separately documented approval
|
|
244
|
-
boundary.
|
|
245
|
-
- Never directly run `git add`, `commit`, `worktree`, `cherry-pick`, `merge`,
|
|
246
|
-
`rebase`, or `push`.
|
|
247
|
-
- Never bypass a blocked state, alter runtime evidence, resolve an integration
|
|
248
|
-
conflict automatically, or broaden a contract after approval.
|
|
249
|
-
- For `BLOCKED`, first distinguish the recoverable baseline-capture and
|
|
250
|
-
Reviewer interruptions above from other blockers. For any other `BLOCKED`, or for `TEST_FAILED`,
|
|
251
|
-
`NEEDS_HUMAN`, or `INTEGRATION_BLOCKED`, show the state and evidence path and
|
|
252
|
-
wait for a revised contract or a specifically supported recovery action.
|
|
6
|
+
# Durable contract workflow
|
|
7
|
+
|
|
8
|
+
1. Call `android_orchestrator_snapshot` with `action: snapshot`. Keep its
|
|
9
|
+
`planningHead` and `targetBranch` for the complete contract. Discover paths
|
|
10
|
+
through bounded `action: list` pages and read committed contract examples,
|
|
11
|
+
configuration, implementation and tests through `action: readChunk`, always
|
|
12
|
+
using the same `planningHead` and following cursors until null when complete
|
|
13
|
+
results matter. Use legacy `action: read` only for known-small files. The live
|
|
14
|
+
product checkout may be occupied.
|
|
15
|
+
2. Describe one observable behavior change, exact allowed paths, acceptance,
|
|
16
|
+
test filters, file limit and non-goals. Ask a fresh single-choice `question`
|
|
17
|
+
titled `方案确认`, with `批准方案,生成计划和任务合同。` and `调整方案。`.
|
|
18
|
+
Initial request text and direct chat approval phrases are never approval.
|
|
19
|
+
3. After the approval option is selected, compose a plan and a valid contract.
|
|
20
|
+
Call `android_orchestrator_intake` action `draft`, with `draftJson` containing
|
|
21
|
+
`{contract, plan, planningHead, targetBranch, workspaceStrategy, commitPolicy,
|
|
22
|
+
notBefore?, dependsOn?, priority?}`. Plan paths remain
|
|
23
|
+
`docs/plans/<TASK-ID>.md`; contracts retain their TASK ID. Artifacts are
|
|
24
|
+
sealed in the Git common directory inbox and materialized only on execution.
|
|
25
|
+
4. Default to `inPlaceExclusive` + `humanApproval`. If the user explicitly wants
|
|
26
|
+
automatic local commits, show this choice in the proposal and seal
|
|
27
|
+
`autoCommit`. The unsupported `isolatedWorktree` + `autoCommit` combination
|
|
28
|
+
must fail. Older approvals never inherit automatic submission rights.
|
|
29
|
+
5. Display the returned full plan, contract and review card: task ID/version,
|
|
30
|
+
digest, target local branch/planningHead, allowed paths/file count, tests,
|
|
31
|
+
acceptance/non-goals, dependencies/notBefore, workspace and commit policies.
|
|
32
|
+
Human policy says “执行后等待人工确认提交”; automatic policy says
|
|
33
|
+
“通过构建、全量单测和独立 Review 后自动本地提交并集成,不推送远程”.
|
|
34
|
+
6. Immediately call `question` with the exact `question` arguments returned
|
|
35
|
+
by `draft` (header `合同确认`). Only the selected approval may call intake `enqueue` with
|
|
36
|
+
`{key, digest, approval}`. A new version requires a new approval.
|
|
37
|
+
7. Report durable enqueue success and return. Execution is asynchronous, one
|
|
38
|
+
repository slot; the foreground may plan/approve B and C while A runs.
|
|
39
|
+
|
|
40
|
+
# Acceptance and controls
|
|
41
|
+
|
|
42
|
+
Read `android_orchestrator_queue` status for durable notifications. Do not poll
|
|
43
|
+
with a model while idle. Human tasks reach `AWAITING_HUMAN`; automatic tasks
|
|
44
|
+
reach `READY_TO_COMMIT` and are finalized by the executor with their sealed
|
|
45
|
+
contract authorization. Never create a final human approval for autoCommit.
|
|
46
|
+
|
|
47
|
+
`/acceptance <TASK-ID>` reads the current item and acceptance report. Present
|
|
48
|
+
the candidate/diff hash, target branch, baseline, build, actual full-test results,
|
|
49
|
+
independent Review, scope and commit policy. If the local target has advanced
|
|
50
|
+
for an isolated candidate, request `revalidate`. That job waits for the same
|
|
51
|
+
execution slot, runs fresh verification/Review and invalidates old acceptance.
|
|
52
|
+
After a fresh candidate exists, call queue `review` with
|
|
53
|
+
`operation: integrate` and the task key. Present its evidence, then call
|
|
54
|
+
`question` with its exact returned arguments (header `最终验收`). Only the selected approve option requests
|
|
55
|
+
queue `integrate` with the latest `candidateId` as `candidate` and exact approval.
|
|
56
|
+
|
|
57
|
+
Before `/resume-task`, `/resume-review` or `/abort-task`, call queue `review`
|
|
58
|
+
with the matching `operation` and task key, then use the exact returned
|
|
59
|
+
`question` arguments. Only the actual answer creates the one-use receipt;
|
|
60
|
+
ordinary chat text and model-provided approval strings cannot substitute.
|
|
61
|
+
|
|
62
|
+
`/resume-task` and `/resume-review` use a fresh `恢复确认` question containing
|
|
63
|
+
`恢复任务,重新捕获基线并继续自动执行。`; then request the matching queue action.
|
|
64
|
+
`/abort-task` uses a fresh `中止确认` question containing
|
|
65
|
+
`中止任务,封存修改并恢复原分支。`; queue `abort` only after that selection.
|
|
66
|
+
Running processes must reach a recorded safe stop before recovery/abort begins.
|
|
67
|
+
Unstarted contracts may be cancelled through `cancel` without touching files.
|
|
68
|
+
|
|
69
|
+
Pause prevents new claims. Resume does not discard public faults. Display the
|
|
70
|
+
fault before an explicit clear-fault. A mode change is blocked while a workspace
|
|
71
|
+
is retained. Fixed workspaces remain occupied through acceptance, integration
|
|
72
|
+
and failure; isolated sealed stopped candidates retain their directories while
|
|
73
|
+
independent tasks run. Dependencies complete only after local integration.
|
|
74
|
+
|
|
75
|
+
After completion, show the true authorization source, local commit SHA and
|
|
76
|
+
“未推送”. No workflow, failure or recovery grants remote push rights.
|
|
@@ -20,4 +20,12 @@ excluded from orchestration changes for the next approved task.
|
|
|
20
20
|
Only a fresh OpenCode single-choice `question` selection can grant an
|
|
21
21
|
orchestration approval. Approval-like text in ordinary chat is not approval.
|
|
22
22
|
The orchestrator must not push Git changes or register scheduler/launchd jobs.
|
|
23
|
+
|
|
24
|
+
Planner reads a fixed committed planningHead through the snapshot tool and
|
|
25
|
+
seals contracts/plans in the independent inbox. Contract approval only enqueues
|
|
26
|
+
and returns; the detached repository service runs one executor at a time.
|
|
27
|
+
Default policies are inPlaceExclusive and humanApproval. Explicit autoCommit
|
|
28
|
+
is supported only in fixed workspaces and preserves build, fresh full unit-test
|
|
29
|
+
execution and independent Review. Final acceptance, retries and integration
|
|
30
|
+
share the same queue. No policy authorizes remote push.
|
|
23
31
|
<!-- opencode-android-orchestrator:end -->
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schemaVersion":
|
|
2
|
+
"schemaVersion": 6,
|
|
3
3
|
"enabled": true,
|
|
4
4
|
"mode": "orchestrated",
|
|
5
5
|
"workspaceStrategy": "inPlaceExclusive",
|
|
@@ -66,5 +66,11 @@
|
|
|
66
66
|
"build.gradle.kts",
|
|
67
67
|
"**/build.gradle",
|
|
68
68
|
"**/build.gradle.kts"
|
|
69
|
-
]
|
|
69
|
+
],
|
|
70
|
+
"commitPolicy": "humanApproval",
|
|
71
|
+
"queue": {
|
|
72
|
+
"scanIntervalMs": 5000,
|
|
73
|
+
"maxWorkspaces": 3,
|
|
74
|
+
"maxWorkspaceBytes": 21474836480
|
|
75
|
+
}
|
|
70
76
|
}
|