@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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-phase-implementer
3
- version: 1.1.2
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 declared task files;
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
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "oatVersion": "0.2.57"
3
+ "oatVersion": "0.2.58"
4
4
  }
@@ -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 only the declared task files;
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
- "cli": "0.2.57",
3
- "docs-config": "0.2.57",
4
- "docs-theme": "0.2.57",
5
- "docs-transforms": "0.2.57"
2
+ "cli": "0.2.58",
3
+ "docs-config": "0.2.58",
4
+ "docs-theme": "0.2.58",
5
+ "docs-transforms": "0.2.58"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-design
3
- version: 2.3.2
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.2
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 files, and
609
- has passing task verification; never require a Phase Recovery Continuation
610
- Report to replay or restate all planned task outcomes;
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.57",
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.57"
37
+ "@open-agent-toolkit/control-plane": "0.2.58"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^22.10.0",