@open-agent-toolkit/cli 0.2.57 → 0.2.58
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/assets/agents/oat-phase-implementer.md +44 -2
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/contributing/smoke-testing.md +44 -0
- package/assets/docs/workflows/projects/implementation-execution.md +1 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-design/SKILL.md +15 -1
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/phase-execution.md +7 -3
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-phase-implementer
|
|
3
|
-
version: 1.1.
|
|
3
|
+
version: 1.1.3
|
|
4
4
|
description: Implements one plan phase end-to-end, commits each task separately, self-checks between tasks, and handles bounded review fixes when resumed by oat-project-implement.
|
|
5
5
|
tools: Read, Write, Edit, Bash, Grep, Glob, Task
|
|
6
6
|
color: cyan
|
|
@@ -358,6 +358,46 @@ Do not launch a child, continue sequentially, review, or repair the invalid run.
|
|
|
358
358
|
|
|
359
359
|
### 2. Execute Tasks in Plan Order
|
|
360
360
|
|
|
361
|
+
#### Cross-Cutting Option Sweep
|
|
362
|
+
|
|
363
|
+
Before the first edit of a task that adds, renames, retypes, or changes the
|
|
364
|
+
default or meaning of an option, argument, flag, configuration field, schema
|
|
365
|
+
property, or policy value consumed outside the module that defines it,
|
|
366
|
+
inventory that symbol repository-wide. A value that is defined, read, and
|
|
367
|
+
written only inside its own module does not trigger this rule.
|
|
368
|
+
|
|
369
|
+
The inventory is repository-wide. It is never limited to the declared file
|
|
370
|
+
boundary and never limited to production source: sweep declarations and type
|
|
371
|
+
definitions, constructors and factories, adapters and wrappers, serializers and
|
|
372
|
+
deserializers, persisted schemas and templates, fixtures, mocks, snapshots, and
|
|
373
|
+
tests, and every call site that constructs, forwards, or defaults the value.
|
|
374
|
+
Use `rg` or an equivalent repository-wide search together with whatever
|
|
375
|
+
language-aware check this repository already provides; no single tool is proof
|
|
376
|
+
of completeness, so search the property name, its serialized spelling, and its
|
|
377
|
+
accessors.
|
|
378
|
+
|
|
379
|
+
A declared file list is review scope, not a correctness boundary. When the
|
|
380
|
+
sweep finds files outside that list:
|
|
381
|
+
|
|
382
|
+
- **Widen mechanically and proceed** when every discovered file is already
|
|
383
|
+
required by the declared task outcome, the edit to it is mechanical
|
|
384
|
+
propagation of the same value, and no sibling or active parallel task owns
|
|
385
|
+
it. The effective task boundary is the declared list plus those mechanically
|
|
386
|
+
discovered files. Record every addition in the Task Outcomes `Files` cell and
|
|
387
|
+
in Self-Review Observations, and never edit `plan.md` to match.
|
|
388
|
+
- **Stop and report** the exact discovered file set and the ownership conflict
|
|
389
|
+
when the expansion would change the declared task outcome, cross sibling or
|
|
390
|
+
parallel-lane ownership, invalidate a plan-declared parallel group, or
|
|
391
|
+
require a new design, architecture, or public-behavior decision.
|
|
392
|
+
|
|
393
|
+
Threading an already-agreed option through four call sites that would otherwise
|
|
394
|
+
keep the stale default is mechanical propagation. Adding new behavior at a
|
|
395
|
+
discovered call site, changing an unrelated default, or deciding how two lanes
|
|
396
|
+
divide a shared file is not, and stops for direction. This pre-edit rule
|
|
397
|
+
matches the mechanically derived, in-phase widening already allowed during
|
|
398
|
+
post-commit recovery, and it never relaxes the standing rule against scope
|
|
399
|
+
expansion beyond the phase.
|
|
400
|
+
|
|
361
401
|
For every task:
|
|
362
402
|
|
|
363
403
|
1. Record `PRE_TASK_HEAD`.
|
|
@@ -380,7 +420,9 @@ For every task:
|
|
|
380
420
|
mutate Git config or use `--no-verify`.
|
|
381
421
|
9. Verify:
|
|
382
422
|
- HEAD is exactly one commit after `PRE_TASK_HEAD`;
|
|
383
|
-
- the commit changes only
|
|
423
|
+
- the commit changes only files in the effective task boundary, which is
|
|
424
|
+
the declared task files plus any mechanical additions permitted by, and
|
|
425
|
+
reported under, the cross-cutting option sweep;
|
|
384
426
|
- every task verification passed; and
|
|
385
427
|
- the worktree is clean.
|
|
386
428
|
10. Perform a brief between-task transition check before starting the next
|
|
@@ -249,6 +249,50 @@ journaled worktree that is already gone from disk is still recoverable; a
|
|
|
249
249
|
contradictory or unjournaled resource fails closed with a refusal rather than
|
|
250
250
|
guessing.
|
|
251
251
|
|
|
252
|
+
### Reserved versus registered ownership
|
|
253
|
+
|
|
254
|
+
The deterministic provider's nested phase worktrees are journaled as a
|
|
255
|
+
transaction, so an interruption can no longer leave an _unjournaled_ child.
|
|
256
|
+
It can still leave state cleanup refuses by design — an interruption inside
|
|
257
|
+
`git worktree add` may leave a path with no Git registration, and that is
|
|
258
|
+
refused rather than deleted.
|
|
259
|
+
|
|
260
|
+
Other nested creators still register directly after creation. Their entries are
|
|
261
|
+
read as ownership the same way, but they are validated more loosely: a
|
|
262
|
+
directly-registered entry carries no reservation origin, so it is not subject
|
|
263
|
+
to the run-directory containment and run-baseline checks a finalized
|
|
264
|
+
reservation gets. Their creation transaction has not been migrated yet.
|
|
265
|
+
|
|
266
|
+
The two reservation states are:
|
|
267
|
+
|
|
268
|
+
- **`reserved`** — the exact branch, worktree path, marker path, expected
|
|
269
|
+
baseline, shared Git directory, and run identity are written to the manifest
|
|
270
|
+
_before_ `git worktree add` runs. The entry is durable intent, not ownership.
|
|
271
|
+
- **`registered`** — the child's marker, Git worktree registration, branch,
|
|
272
|
+
HEAD ancestry, and shared Git directory have all been corroborated.
|
|
273
|
+
Finalization only flips a matching reservation; it never rewrites what was
|
|
274
|
+
reserved, and a child contradicting its reservation is refused.
|
|
275
|
+
|
|
276
|
+
Cleanup reconciles a reservation only against exactly matching state. If
|
|
277
|
+
neither the branch nor the worktree was ever created, nothing is deleted and
|
|
278
|
+
the reservation goes away with the manifest. If both exist exactly as reserved,
|
|
279
|
+
they are removed after baseline, shared Git directory, and run-marker
|
|
280
|
+
corroboration. If only the branch survives, its tip must equal the reserved
|
|
281
|
+
baseline exactly. Anything else — an occupied path Git never registered, a
|
|
282
|
+
different branch at the reserved path, a missing marker — fails closed.
|
|
283
|
+
|
|
284
|
+
Manifests written before this transaction existed use ownership journal schema
|
|
285
|
+
version 1. They stay readable and all of their entries read as already
|
|
286
|
+
`registered`. Such a manifest is never rewritten to a newer schema version and
|
|
287
|
+
never gains a reservation, and a v1 entry claiming reserved state is refused
|
|
288
|
+
rather than treated as owned. Direct registration may still append a
|
|
289
|
+
`registered` entry to one, which leaves its schema version untouched.
|
|
290
|
+
|
|
291
|
+
Nothing is ever pruned by `smoke-*` name, path prefix, run age, or ancestry
|
|
292
|
+
alone. Without an ownership lease the runner cannot tell a stale run from an
|
|
293
|
+
active one, so it refuses instead of guessing and leaves the state for you to
|
|
294
|
+
resolve.
|
|
295
|
+
|
|
252
296
|
To finish a stalled run, re-run the matching `--stage collect` (collection-only
|
|
253
297
|
triggers cleanup) or start a fresh run; the runner reconciles journaled
|
|
254
298
|
resources on the next errored or collection-bearing invocation. If cleanup fails
|
|
@@ -88,7 +88,7 @@ The phase implementer receives one `Phase Scope`, reads the relevant artifacts
|
|
|
88
88
|
once, and directly executes each task in plan order. For every task it:
|
|
89
89
|
|
|
90
90
|
1. records the pre-task HEAD;
|
|
91
|
-
2. implements
|
|
91
|
+
2. implements the declared task files plus any mechanical additions permitted by, and reported under, the cross-cutting option sweep (a repository-wide sweep for every consumer of a changed option; cross-owner expansions stop and report instead);
|
|
92
92
|
3. runs task verification;
|
|
93
93
|
4. self-checks requirements and scope before commit;
|
|
94
94
|
5. creates exactly one task commit; and
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-design
|
|
3
|
-
version: 2.3.
|
|
3
|
+
version: 2.3.3
|
|
4
4
|
description: Use when discovery is complete and implementation-ready decisions are needed. Runs a collaborative, selective collaborative, or draft-and-review design flow, confirms requirements and produces both `spec.md` and `design.md`, and commits artifacts before the user-review gate.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: true
|
|
@@ -402,6 +402,20 @@ Draft `design.md` section-by-section (Collaborative mode) or in a single pass (D
|
|
|
402
402
|
11. **Implementation Phases** — Break work into manageable phases (1-3 days each). Per-phase structure: Goal, Tasks (high-level), Verification.
|
|
403
403
|
12. **Risks and Mitigation** — For each significant risk: Probability | Impact; Mitigation; Contingency.
|
|
404
404
|
|
|
405
|
+
**Standing invariants (Error Handling and Testing Strategy):** when a section
|
|
406
|
+
states a standing invariant — an "every", "always", "only", ordering, or
|
|
407
|
+
completeness claim expected to hold for the life of the feature — name its
|
|
408
|
+
executable owner and its verification method in the same design: the specific
|
|
409
|
+
test or check that fails when the claim breaks, and how that failure surfaces.
|
|
410
|
+
Route a claim decidable from tracked files to a contract test, and a claim that
|
|
411
|
+
depends on execution state or ordering to the code that owns the operation and
|
|
412
|
+
emits a structured result. A point-in-time observation about today's codebase
|
|
413
|
+
needs a citation, not an owner. Record the owner beside the error category it
|
|
414
|
+
guards, or in the Requirement-to-Test Mapping row it belongs to. The full
|
|
415
|
+
taxonomy, stable-identity, and same-PR rules live in the `create-oat-skill`
|
|
416
|
+
skill; do not restate them here. Changing this paragraph means updating its
|
|
417
|
+
contract case in `packages/cli/src/validation/skills.test.ts` in the same PR.
|
|
418
|
+
|
|
405
419
|
### Step 4a: Selective Review Pass
|
|
406
420
|
|
|
407
421
|
If `DESIGN_MODE == "selective"`, classify every section before drafting and present the Section Review Plan to the user. Use `.agents/skills/oat-project-design/references/selective-review-pass.md` for the full signal set, grounding rules, edge cases, and dogfood notes.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-implement
|
|
3
|
-
version: 2.3.
|
|
3
|
+
version: 2.3.3
|
|
4
4
|
description: Use when plan.md is ready for execution. Dispatches one phase implementer per phase, owns independent phase review and bounded fix routing, and supports plan-declared worktree-isolated parallel phases.
|
|
5
5
|
oat_gateable: true
|
|
6
6
|
argument-hint: '[--retry-limit <N>] [--dry-run]'
|
|
@@ -605,9 +605,13 @@ Both accepted success and accepted terminal-stop branches must:
|
|
|
605
605
|
- for a Phase Implementation Report, verify task count; for a Phase Recovery
|
|
606
606
|
Continuation Report, verify the original task and commit instead;
|
|
607
607
|
- only for a Phase Implementation Report, verify each planned task commit is
|
|
608
|
-
exactly one append-only commit in plan order, changes only declared
|
|
609
|
-
|
|
610
|
-
|
|
608
|
+
exactly one append-only commit in plan order, changes only declared or
|
|
609
|
+
mechanically derived in-phase files, meaning the task's declared files plus
|
|
610
|
+
the mechanical additions permitted by, and reported under, the phase
|
|
611
|
+
implementer's cross-cutting option sweep, and has passing task verification;
|
|
612
|
+
a plan-list-only file set is not the acceptance boundary; never require a
|
|
613
|
+
Phase Recovery Continuation Report to replay or restate all planned task
|
|
614
|
+
outcomes;
|
|
611
615
|
- for each reported attempted recovery (`recovered` or `failed-attempt`), verify
|
|
612
616
|
attempt accounting, the immutable original commit and original request,
|
|
613
617
|
exact-target provenance, one in-scope append-only recovery commit when
|
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.58",
|
|
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.58"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^22.10.0",
|