@open-agent-toolkit/cli 0.2.11 → 0.2.12
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-wave-execute
|
|
3
|
-
version: 1.
|
|
3
|
+
version: 1.7.1
|
|
4
4
|
description: Use when executing a wave of external implementation plans as a wrapper OAT project — scaffolding, drift refresh, parallel worktree groups, briefs, gates, merge choreography, and closeout.
|
|
5
5
|
argument-hint: '<wave-id> [plan-names...] (e.g. wave-2 http-listener-before-indexing ...)'
|
|
6
6
|
disable-model-invocation: false
|
|
@@ -60,8 +60,12 @@ cross-lane synthesis, the end-of-run synthesis, and all user checkpoints.
|
|
|
60
60
|
Bare `merge(...)` fails commitlint. Keep headers ≤ 100 chars.
|
|
61
61
|
3. **Clean orchestrator tree before group merges** — a dirty unrelated file leaves
|
|
62
62
|
`git merge --no-ff` uncommitted and drags the full hook chain into recovery.
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
When a gate reviewer runs in the primary checkout, it MUST COMMIT its own
|
|
64
|
+
artifact.
|
|
65
|
+
From a linked worktree, `.git` points to metadata outside the review sandbox and
|
|
66
|
+
that commit can fail silently; the ORCHESTRATOR commits the gate artifact on
|
|
67
|
+
the reviewer's behalf. Keep the tree clean around either path (both consumers:
|
|
68
|
+
stoa waves 2–3; Orc W1–W4).
|
|
65
69
|
4. **Pre-declare CUMULATIVE churn in every brief:** declarations cover everything
|
|
66
70
|
landed since each source plan's AUTHORED COMMIT (drift checks compare against
|
|
67
71
|
that commit, not the group base), naming files + rough regions. Zero false
|
|
@@ -75,6 +79,12 @@ cross-lane synthesis, the end-of-run synthesis, and all user checkpoints.
|
|
|
75
79
|
waves (~6+ lanes), prefer per-phase gates over one monolithic final gate; if a
|
|
76
80
|
final gate must cover the whole wave, scope its prompt to the integration
|
|
77
81
|
diff plus the review-chain artifacts, not a re-review of every lane.
|
|
82
|
+
**Gate dispatch posture (standing rule alongside rules 6 and 8):** dispatch
|
|
83
|
+
gates in the BACKGROUND by default with a completion watcher because
|
|
84
|
+
orchestrator-host foreground ceilings (for example, 600 seconds) are shorter than
|
|
85
|
+
legitimate wave-scoped reviews. Use foreground only for demonstrably short scopes.
|
|
86
|
+
Rule 8 remains the recovery path; it worked on the one timeout in Orc W2 and was
|
|
87
|
+
not needed again in W2–W4.
|
|
78
88
|
7. **Guard every formatter-ignored-file × staged-glob interaction:** a
|
|
79
89
|
single-glob staged-file task can fail when every matched file is ignored by
|
|
80
90
|
the repo's formatter. Audit every glob task and pair canonical-file
|
|
@@ -93,10 +103,26 @@ cross-lane synthesis, the end-of-run synthesis, and all user checkpoints.
|
|
|
93
103
|
oxfmt re-padding makes it silently no-op. Use anchored regex + a substitution
|
|
94
104
|
count assertion + a post-state grep, every time. This discipline caught its
|
|
95
105
|
own subsequent no-ops twice in wave 2; treat an assert failure as normal
|
|
96
|
-
operation, not an incident.
|
|
106
|
+
operation, not an incident. Orc reproduced the failure at wave-close: regex
|
|
107
|
+
replacement missed oxfmt padding, and an asserted line-based transform was
|
|
108
|
+
required.
|
|
97
109
|
10. **Integration gates after every fan-in:** they are the only detector for
|
|
98
110
|
cumulative-timing defect classes. Never skip them because every lane passed
|
|
99
111
|
independently; the wave-5 embed-teardown defect was caught only after fan-in.
|
|
112
|
+
11. **Fix rounds are APPEND-ONLY:** never amend a reviewed SHA; amendment
|
|
113
|
+
invalidates stored review verdicts that cite that commit. Every fix-round brief
|
|
114
|
+
MUST state that fixes land in an append-only commit. A worker that refuses an
|
|
115
|
+
instruction to amend a reviewed SHA is honoring its role contract (Orc p10
|
|
116
|
+
precedent).
|
|
117
|
+
12. **Piped DoD/gate verification must preserve the raw failure:** run every piped
|
|
118
|
+
verification chain under `set -o pipefail`, or capture the raw command's exit
|
|
119
|
+
code before filtering. In Orc W4, `pnpm test | grep` returned the filter's zero
|
|
120
|
+
while the test run contained one failure.
|
|
121
|
+
13. **Review artifacts are single-writer until committed:** an uncommitted review
|
|
122
|
+
artifact is exclusively owned by whichever agent is live on it. Orchestrator
|
|
123
|
+
dispositions land as immediate commits or wait until every agent touching the
|
|
124
|
+
artifact terminates. Do not use lock or timestamp-suffix conventions; they
|
|
125
|
+
fragment the review chain that final gates audit (Orc W4 final-gate evidence).
|
|
100
126
|
|
|
101
127
|
Plus inherited invariants: commit-verification via `git log` before retrying after
|
|
102
128
|
any ambiguous hook outcome; every agent runs the repo's formatter on markdown it
|
|
@@ -155,7 +181,12 @@ reconciliation that waives a source-plan requirement is a plan-gate Important
|
|
|
155
181
|
|
|
156
182
|
### Step 3: Scaffold the wrapper project
|
|
157
183
|
|
|
158
|
-
1. `oat project new
|
|
184
|
+
1. Probe the installed scaffold interface first with `oat project new --help`.
|
|
185
|
+
If `--no-commit` is present, run
|
|
186
|
+
`oat project new wave-N-execution --mode quick --no-commit`. If the flag is
|
|
187
|
+
absent because of version skew, run the command without it, expect the scaffold
|
|
188
|
+
to auto-commit, record that generated commit, and land the wrapper artifacts in
|
|
189
|
+
a follow-up commit (Orc W1 scaffold evidence).
|
|
159
190
|
2. **Verify scaffold substitution AND advance the lifecycle** in `state.md`.
|
|
160
191
|
On oat ≥0.1.65, verify that the basic scaffold placeholders
|
|
161
192
|
(`{ OAT_HILL_CHECKPOINTS }`, `{ OAT_PHASE }`, `{ OAT_WORKFLOW_MODE }`) were
|
|
@@ -196,8 +227,12 @@ Run the cross-runtime artifact gate with a **bounded** prompt (rule 6): review t
|
|
|
196
227
|
wrapper artifacts for plan invariants, contract consistency, frontmatter validity,
|
|
197
228
|
and whether any task restates/narrows its source plan — the external plans are
|
|
198
229
|
immutable inputs, NOT review targets. Disposition findings in-artifact
|
|
199
|
-
(gate-invoked artifact review)
|
|
200
|
-
wave-0/1 precedent
|
|
230
|
+
(gate-invoked artifact review) and commit. A plan gate MAY PROCEED at
|
|
231
|
+
`fixes_completed` per the wave-0/1 precedent, but that is a proceed point, not a
|
|
232
|
+
terminal state. Every gate row MUST flip to `passed` once all fix dispositions
|
|
233
|
+
carry the stored verification records required by the fix-disposition contract below;
|
|
234
|
+
`passed` is the only
|
|
235
|
+
terminal state for gate rows (Orc operator-audit S8).
|
|
201
236
|
|
|
202
237
|
### Step 5: Execute via `oat-project-implement`
|
|
203
238
|
|
|
@@ -264,10 +299,13 @@ The lifecycle skill owns execution. This skill contributes the templates it uses
|
|
|
264
299
|
example: `pnpm format:fix`).
|
|
265
300
|
- **Merge choreography:** after all group verdicts — serialized `git merge
|
|
266
301
|
--no-ff` in plan order, rebasing each phase branch on the updated tip first
|
|
267
|
-
(rules 2–3).
|
|
268
|
-
|
|
269
|
-
root
|
|
270
|
-
|
|
302
|
+
(rules 2–3). Compound the hard pre-merge guard and merge into ONE shell
|
|
303
|
+
invocation immediately before EVERY merge:
|
|
304
|
+
`cd /abs/repo/root && [ "$(git branch --show-current)" = "wave-N-execution" ] || exit 1 && git merge --no-ff …`.
|
|
305
|
+
The explicit `cd` repairs the healable cwd dimension; branch drift is
|
|
306
|
+
non-healable and hard-aborts. Advisory `pwd`/branch prints in separate
|
|
307
|
+
invocations proved worthless in the Orc W2 incident; this guard prevented two
|
|
308
|
+
repeats there, including p10. Integration DoD gates
|
|
271
309
|
after fan-in run TO COMPLETION BEFORE any group bookkeeping edits start
|
|
272
310
|
(DR-260714-integration-gates-run-before);
|
|
273
311
|
then the group bookkeeping commit. Before dispatch, inspect every worktree's
|
|
@@ -299,6 +337,10 @@ archival and before the project-archive seal (`oat-project-complete`) — never
|
|
|
299
337
|
archive anything first.
|
|
300
338
|
|
|
301
339
|
1. **Final verification** — integration DoD gates green on the integration branch.
|
|
340
|
+
If the repo has no CI, record a one-line explicit waiver in the wave plan:
|
|
341
|
+
`merge gate = local DoD only`. The CI-introducing wave's first green run
|
|
342
|
+
certifies the cumulative merged tree and MUST be recorded as closure of that
|
|
343
|
+
waiver; do not re-run earlier gates retroactively (Orc W1–W2 evidence).
|
|
302
344
|
2. **End-of-run synthesis in `orchestration-log.md`, then roll it up into
|
|
303
345
|
`summary.md`** (this is the "before any archive step" gate): convention
|
|
304
346
|
verdicts with evidence, adjustments-as-rules for later waves, graduated-entries
|
|
@@ -306,28 +348,88 @@ archive anything first.
|
|
|
306
348
|
3. **Serialized backlog archival** — `oat backlog archive` with real summaries,
|
|
307
349
|
one commit.
|
|
308
350
|
4. **Root final review.**
|
|
309
|
-
5. **Cross-runtime final gate** — judgment-sweep dispositions;
|
|
310
|
-
|
|
351
|
+
5. **Cross-runtime final gate** — judgment-sweep dispositions; after every fix
|
|
352
|
+
disposition has its required stored verification record, flip the row to
|
|
353
|
+
`passed`. A final
|
|
354
|
+
gate MUST NOT remain at `fixes_completed`: `passed` is the only terminal
|
|
355
|
+
state for gate rows (Orc operator-audit S8; confirmed convergently by stoa
|
|
356
|
+
W6's final-row handling). The historical row-stomp restore-watch is RETIRED:
|
|
357
|
+
the upstream stomp class was fixed in oat 0.1.65 and stoa's W6 supplied the
|
|
358
|
+
final clean observation (three gate rounds, zero stomps, watch never fired,
|
|
359
|
+
2026-07-20).
|
|
311
360
|
6. **Pre-approval sequence** per `workflow.postImplementSequence`, then a single
|
|
312
361
|
HiLL. File follow-up-ledger backlog items at closeout (on main post-merge, or
|
|
313
362
|
pre-gate if the operator prefers them in the PR).
|
|
314
|
-
7.
|
|
315
|
-
|
|
316
|
-
|
|
363
|
+
7. **The full `oat-project-complete` PROCESS, with an explicit autonomous
|
|
364
|
+
deferral branch.** Interactive runs retain the standing per-wave order
|
|
365
|
+
review → complete → merge (an open PR is expected, not a blocker — the
|
|
366
|
+
archive-aware PR body sync handles it). The requirement remains the whole
|
|
367
|
+
completion process, named explicitly: `oat project complete-state` →
|
|
368
|
+
`oat project archive` (the CLI owns the local archive move, the summary
|
|
369
|
+
export, and the S3 sync when `s3SyncOnComplete` is configured) →
|
|
370
|
+
active-project pointer clear → the completion bookkeeping commit. Running
|
|
371
|
+
`oat project complete-state` ALONE does NOT satisfy this step: in the Orc
|
|
372
|
+
first run all four wrapper projects were left lifecycle-complete but
|
|
373
|
+
unarchived until an operator audit asked (S10).
|
|
374
|
+
|
|
375
|
+
Under autonomous execution, each wave MUST still run
|
|
376
|
+
`oat project complete-state` and its then-current project bookkeeping. The
|
|
377
|
+
archive tail — `oat project archive` (including configured S3 sync) →
|
|
378
|
+
active-project pointer clear → completion bookkeeping commit — MAY be
|
|
379
|
+
deferred to the program boundary so the wave can merge and execution can
|
|
380
|
+
continue. Record every such choice in the wave ledger exactly as
|
|
381
|
+
`completion tail: deferred to program close`; deferral is an outstanding
|
|
382
|
+
disposition, never satisfaction of the full-tail requirement. Interactive
|
|
383
|
+
per-wave full-tail completion remains valid.
|
|
384
|
+
|
|
385
|
+
The interactive completion skill is model-invisible
|
|
386
|
+
(`disable-model-invocation: true`), so an autonomous orchestrator executes
|
|
387
|
+
its `SKILL.md` as a document, resolving its gates from config
|
|
388
|
+
(`workflow.archiveOnComplete`, `workflow.createPrOnComplete`), until an
|
|
389
|
+
`oat-project-complete-auto` companion ships
|
|
390
|
+
(BL-260720-add-oat-project-complete-auto). If the archive tail is deferred,
|
|
391
|
+
that execution occurs after the one human-gated program-end checkpoint in
|
|
392
|
+
`oat-wave-program`, across every deferred wave wrapper.
|
|
393
|
+
|
|
317
394
|
8. **After the operator merges:** reconcile (squash-merge means content-diff the
|
|
318
395
|
branch vs main; cherry-pick stragglers), reset the working branch, clean stale
|
|
319
396
|
phase branches, and run `oat-wave-program` `wave-close <wave-id>` so the
|
|
320
397
|
program ledger records the merge (PR, SHA, completion-record link) and flips
|
|
321
|
-
the wave's plan rows to `done`.
|
|
322
|
-
|
|
398
|
+
the wave's plan rows to `done`. Per-wave recaps are default-OFF: run one only
|
|
399
|
+
on explicit operator request; otherwise record
|
|
400
|
+
`recap: deferred to program close` in the wave ledger. When this wave
|
|
401
|
+
completes the final pending wave, offer or run the program recap using the
|
|
402
|
+
mechanical explainer caller below. The program recap is generated from the
|
|
403
|
+
reconciled program artifact and ALL wave records.
|
|
323
404
|
|
|
324
|
-
####
|
|
405
|
+
#### Program-close recap explainer caller
|
|
325
406
|
|
|
326
|
-
The orchestrator owns fact-base synthesis.
|
|
407
|
+
The orchestrator owns fact-base synthesis. At program close it synthesizes an
|
|
327
408
|
`explainer-kit.fact-base/v1` document from the reconciled execution-program
|
|
328
|
-
artifact, wave summaries, and completion records. Its required keys are
|
|
409
|
+
artifact, ALL wave summaries, and ALL completion records. Its required keys are
|
|
410
|
+
exactly:
|
|
329
411
|
`schemaVersion, generatedAt, mode, freshnessPolicy, sources, claims, unresolvedClaims, overrides`.
|
|
330
412
|
|
|
413
|
+
The caller also owns CONTENT AUTHORING, exactly as it owns critic execution and
|
|
414
|
+
fact-base synthesis: the kit's pipeline validates structure and fact
|
|
415
|
+
consistency, but nothing in it owns prose quality. An unattended recap run
|
|
416
|
+
without a caller-supplied authoring path emits raw federated artifact text as
|
|
417
|
+
deck prose (stoa W6 live evidence, run-19af6e55: implementation.md pasted
|
|
418
|
+
verbatim, frontmatter included, tables flattened to run-on prose — every
|
|
419
|
+
automated gate passed it). The explainer-kit now enforces this seam: every
|
|
420
|
+
unattended run requires exactly one provider-neutral author seam — in-process
|
|
421
|
+
callers supply an `author(request)` callback; JSON/CLI callers supply
|
|
422
|
+
`authorModulePath` naming a module with an `author` function export. The core
|
|
423
|
+
invokes it once per recipe artifact with an `explainer-kit.author-request/v1`
|
|
424
|
+
document and expects an `explainer-kit.author-result/v1` reply; runs fail if
|
|
425
|
+
the author is absent, returns an invalid result, or copies excessive verbatim
|
|
426
|
+
source text. Recap callers MUST satisfy that seam by authoring content from
|
|
427
|
+
the synthesized fact base plus the recipe outline (LLM-authored from
|
|
428
|
+
summary/synthesis material, as the operator-approved W6 rebuild demonstrates)
|
|
429
|
+
or NOT run the unattended build, recording the skip disposition per the
|
|
430
|
+
optional-step rule. Callbacks and module paths never enter the persisted run
|
|
431
|
+
request.
|
|
432
|
+
|
|
331
433
|
The mechanical caller constructs an `explainer-kit.run-request/v1` document whose
|
|
332
434
|
required keys are exactly:
|
|
333
435
|
`schemaVersion, recipe, slug, outputRoot, factBase, mode`. Set `recipe` to
|
|
@@ -340,8 +442,9 @@ synthesized fact-base file through `factBase` with the required keys
|
|
|
340
442
|
After the run, read the `explainer-kit.manifest/v1` document. Its required keys
|
|
341
443
|
are exactly:
|
|
342
444
|
`schemaVersion, runId, slug, recipe, createdAt, source, theme, artifacts, immutableHashes, outcome, buildRecord, warnings`.
|
|
343
|
-
Record the
|
|
344
|
-
|
|
445
|
+
Record the default program recap's manifest `runId` and `outcome` in the
|
|
446
|
+
program ledger; use a wave ledger row only for an explicitly requested per-wave
|
|
447
|
+
recap. Publishing is human-gated; this caller never invokes publish.
|
|
345
448
|
|
|
346
449
|
## Success Criteria
|
|
347
450
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-wave-program
|
|
3
|
-
version: 1.
|
|
3
|
+
version: 1.3.1
|
|
4
4
|
description: Use when decomposing a corpus of external implementation plans into an ordered wave program — coverage inventory, dependency mapping, wave composition, and the durable execution-program artifact that oat-wave-execute consumes and updates.
|
|
5
5
|
argument-hint: '[new|refresh|wave-close <wave-id>] (default: refresh against the current artifact)'
|
|
6
6
|
disable-model-invocation: false
|
|
@@ -104,17 +104,51 @@ target (same disclaimer as the plan indexes).
|
|
|
104
104
|
2. Update the status ledger row: PR, merge SHA, completion-record link.
|
|
105
105
|
3. Note next-wave unblocks ("W3 merged → W4 token-cost unblocked").
|
|
106
106
|
4. Commit with the wave's closeout bookkeeping.
|
|
107
|
-
5.
|
|
108
|
-
|
|
107
|
+
5. Default recap scope is the PROGRAM, not the individual wave. Until the wave
|
|
108
|
+
that completes the final pending wave, run a per-wave recap only on explicit
|
|
109
|
+
operator request; otherwise record `recap: deferred to program close` in that
|
|
110
|
+
wave's ledger row. At program close, offer or run the program-recap caller
|
|
111
|
+
below from the reconciled execution-program artifact and ALL wave records,
|
|
112
|
+
then record its manifest `runId` and `outcome` in the program ledger. If the
|
|
113
|
+
program recap is not run, record `recap: not run — {reason}` there. Every
|
|
114
|
+
optional step gets an explicit disposition; silence is indistinguishable
|
|
115
|
+
from oversight (Orc program-recap evidence).
|
|
116
|
+
6. When the final wave's ledger row flips to `done` and all wave merges are
|
|
117
|
+
recorded, stop at exactly one HUMAN-GATED program completion checkpoint,
|
|
118
|
+
including in autonomous runs:
|
|
119
|
+
"All waves are merged and the program is complete. Run the completion tail
|
|
120
|
+
(oat-project-complete: archive + S3 + pointer clear) across all N wave wrapper
|
|
121
|
+
projects now?" On yes, run the full deferred tail for each wrapper via
|
|
122
|
+
`oat-project-complete-auto` when it ships, or execute the interactive skill's
|
|
123
|
+
`SKILL.md` as a document until then, and flip every
|
|
124
|
+
`completion tail: deferred to program close` ledger disposition to `done`. On
|
|
125
|
+
no or defer, record the standing deferral and its owner in the program ledger.
|
|
126
|
+
This is the program completion gate and mirrors the recap publish gate; never
|
|
127
|
+
answer it autonomously or repeat it once per wave.
|
|
109
128
|
|
|
110
129
|
### Program-close explainer caller
|
|
111
130
|
|
|
112
|
-
At
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
131
|
+
At program close by default, or for a per-wave recap explicitly requested by the
|
|
132
|
+
operator, the orchestrator owns fact-base synthesis. For the default program
|
|
133
|
+
recap it synthesizes an `explainer-kit.fact-base/v1` document from the reconciled
|
|
134
|
+
execution-program artifact, ALL wave summaries, and ALL completion records. Its
|
|
135
|
+
required keys are exactly:
|
|
116
136
|
`schemaVersion, generatedAt, mode, freshnessPolicy, sources, claims, unresolvedClaims, overrides`.
|
|
117
137
|
|
|
138
|
+
The caller also owns CONTENT AUTHORING, exactly as it owns critic execution and
|
|
139
|
+
fact-base synthesis: the kit's pipeline validates structure and fact
|
|
140
|
+
consistency, but nothing in it owns prose quality. An unattended recap run
|
|
141
|
+
without a caller-supplied authoring path emits raw federated artifact text as
|
|
142
|
+
deck prose (stoa W6 live evidence, run-19af6e55: implementation.md pasted
|
|
143
|
+
verbatim, frontmatter included, tables flattened to run-on prose — every
|
|
144
|
+
automated gate passed it). Until the explainer-kit ships its authoring seam (a
|
|
145
|
+
caller-supplied author callback / `authorModulePath`, pending upstream),
|
|
146
|
+
wave-close/program-close recap callers MUST either author the content document
|
|
147
|
+
from the synthesized fact base plus the recipe outline (LLM-authored from
|
|
148
|
+
summary/synthesis material, as the operator-approved W6 rebuild demonstrates)
|
|
149
|
+
or NOT run the unattended build, recording the skip disposition per the
|
|
150
|
+
optional-step rule.
|
|
151
|
+
|
|
118
152
|
The mechanical caller constructs an `explainer-kit.run-request/v1` document whose
|
|
119
153
|
required keys are exactly:
|
|
120
154
|
`schemaVersion, recipe, slug, outputRoot, factBase, mode`. Set `recipe` to
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-agent-toolkit/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.12",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Open Agent Toolkit CLI",
|
|
6
6
|
"homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"ora": "^9.0.0",
|
|
35
35
|
"yaml": "2.8.2",
|
|
36
36
|
"zod": "^3.25.76",
|
|
37
|
-
"@open-agent-toolkit/control-plane": "0.2.
|
|
37
|
+
"@open-agent-toolkit/control-plane": "0.2.12"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^22.10.0",
|