@open-agent-toolkit/cli 0.2.4 → 0.2.5

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.
@@ -117,14 +117,39 @@ event, and bookkeeping commit before marking receive complete. Missing,
117
117
  contradictory, or ambiguous correlation fails closed. A valid accepted run or
118
118
  completed receive is never duplicated.
119
119
 
120
- Freshness is bound to the reviewed HEAD and an implementation fingerprint.
120
+ Freshness is bound to the reviewed HEAD and a versioned implementation
121
+ fingerprint. New generations use an `effective-delta-v1` fingerprint over
122
+ Git's canonical NUL-delimited raw tree delta. The generation persists the
123
+ logical PR/default-branch base ref, requires one merge base, and hashes full
124
+ base and final modes and object IDs with rename detection disabled. This makes
125
+ same-file base changes visible while excluding commit history and human diff
126
+ context. Every effective-delta path is included except the exact project
127
+ `state.md` file that carries the digest and would otherwise be self-referential;
128
+ that structured state is validated independently.
129
+
121
130
  Recognized closeout-only descendants preserve a valid result: gate artifacts
122
131
  and receipts, project tracking and project-log appends,
123
132
  summary/documentation/PR sequence outputs, final HiLL bookkeeping, and
124
- completion bookkeeping. An implementation, test, skill, template, workflow
125
- configuration, or unknown path change is substantive. It makes the gate result
126
- stale, requires a current final lifecycle review for the new basis, and starts
127
- a new gate generation.
133
+ completion bookkeeping. Recognition also requires the corresponding persisted
134
+ gate or sequence transition; a matching path category alone is insufficient.
135
+ After each authorized closeout boundary, the workflow advances a rolling
136
+ checkpoint to the complete effective delta at that HEAD. The checkpoint records
137
+ the last non-checkpoint commit; a following persistence commit is ignored only
138
+ when its diff changes that exact state carrier and nothing else.
139
+
140
+ A merge, rebase, or base update preserves the result only when its full
141
+ effective delta matches that rolling checkpoint. Conflict resolution or
142
+ branch-owned implementation, test, skill, template, or workflow changes that
143
+ alter the delta make the result stale, require a current final lifecycle review,
144
+ and start a new gate generation. No implementation or closeout output path is
145
+ excluded from the comparison. Legacy unqualified fingerprints retain the older
146
+ fail-closed descendant-path behavior and are not migrated in place.
147
+
148
+ This narrow merge-only exemption relies on fresh repository CI, automated
149
+ review such as Bugbot, and lifecycle self-review to cover integration risk.
150
+ Those checks do not substitute for the semantic gate on the full
151
+ implementation; they avoid repeating that expensive review when the
152
+ implementation outcome itself did not change.
128
153
 
129
154
  Only an allowed and fresh gate disposition can enter the pre-approval sequence,
130
155
  cross final HiLL, run the post-approval sequence, mark implementation complete,
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.2.4",
3
- "docs-config": "0.2.4",
4
- "docs-theme": "0.2.4",
5
- "docs-transforms": "0.2.4"
2
+ "cli": "0.2.5",
3
+ "docs-config": "0.2.5",
4
+ "docs-theme": "0.2.5",
5
+ "docs-transforms": "0.2.5"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-implement
3
- version: 2.1.5
3
+ version: 2.1.6
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]'
@@ -310,7 +310,10 @@ oat_implement_exit_gate:
310
310
  max_attempts: 2
311
311
  attempts_completed: 0
312
312
  reviewed_head: null
313
+ implementation_base_ref: null
313
314
  implementation_fingerprint: null
315
+ freshness_head: null
316
+ freshness_fingerprint: null
314
317
  launch_state: not_started # not_started | intent_persisted | accepted | result_persisted | not_accepted
315
318
  launch_attempt_id: null
316
319
  launch_started_at: null
@@ -343,6 +346,29 @@ pending` before any gate launch. Missing state means unresolved, never no gate.
343
346
  A `null` resolution persists `allowed/no_gate` with `disposition: no_gate`,
344
347
  null run/artifact/receive provenance, and the current implementation basis.
345
348
 
349
+ New generations persist `implementation_fingerprint` as
350
+ `sha256:effective-delta-v1:<digest>`. Resolve the logical integration base from
351
+ the tracked PR's exact base ref, then the repository's configured remote default
352
+ branch; missing or ambiguous resolution fails closed. Persist the logical base
353
+ ref as `implementation_base_ref`; require exactly one merge base between that
354
+ ref and each compared HEAD.
355
+
356
+ Prefix the fingerprint input with the bytes `effective-delta-v1\0`. Hash the
357
+ exact NUL-delimited byte stream from Git
358
+ `--raw -z --no-renames --no-abbrev` output, which includes both base and final
359
+ modes and full object IDs for blobs, symlinks, deletions, and gitlinks. Run with
360
+ `LC_ALL=C` from the unique merge base to the compared HEAD. Git's raw `-z`
361
+ format owns path framing and byte ordering; do not parse and reserialize it,
362
+ abbreviate object IDs, enable rename detection, or hash human patch output.
363
+
364
+ Exclude only the exact `$PROJECT_PATH/state.md` checkpoint carrier to avoid a
365
+ self-referential digest. Use Git's literal exclusion pathspec, not a glob.
366
+ Validate that file independently as the structured transition above. Every
367
+ other path remains fingerprinted. Set `freshness_head` to `reviewed_head` and
368
+ `freshness_fingerprint` to `implementation_fingerprint` when the generation
369
+ starts. These rolling fields preserve the accepted tree outcome after later
370
+ authorized closeout transitions without changing the immutable reviewed basis.
371
+
346
372
  An in-flight `pending` or `blocked` generation reuses its persisted resolved
347
373
  configuration and never re-resolves it. Recompute the fingerprint from those
348
374
  persisted inputs before resume. If the persisted resolved configuration does
@@ -476,19 +502,43 @@ disposition.
476
502
  policy, or persistence boundary.
477
503
  - A fresh `allowed` result resumes after the gate without executing the gate or
478
504
  receive a second time. Reuse requires a valid disposition, complete
479
- configured-gate provenance when configured, an unchanged implementation
480
- fingerprint, and any eligible receive marked complete.
505
+ configured-gate provenance when configured, an unchanged immutable
506
+ implementation fingerprint, a valid rolling freshness checkpoint, and any
507
+ eligible receive marked complete.
481
508
  - Closeout-only descendants include configured gate artifacts and receipts,
482
509
  project tracking, `project-log.md` appends, summary/documentation/PR sequence
483
510
  outputs, final HiLL bookkeeping, and completion bookkeeping. Classify
484
511
  gate-owned `oat project log append` mutations introduced with PR #156 as
485
- closeout-only; they do not invalidate the reviewed implementation basis.
486
- - Determine freshness from every path changed after `reviewed_head`, and require
487
- each descendant commit to contain only recognized closeout work. An unknown
488
- changed path fails closed as substantive implementation change.
489
- Implementation, test, skill, template, or workflow configuration changes
490
- make the prior result `stale`. Preserve its provenance for audit, require a
491
- current final lifecycle review for the new basis, and start a new generation.
512
+ closeout-only. A path category alone is insufficient: the corresponding
513
+ persisted gate or sequence transition must own that descendant boundary;
514
+ unknown or mixed work is substantive.
515
+ - For a qualified `sha256:effective-delta-v1:<digest>` value, require the
516
+ persisted `implementation_base_ref`, `freshness_head`, one current merge base,
517
+ and 64-character lowercase hexadecimal implementation and freshness digests.
518
+ Missing or malformed inputs fail closed. Walk descendants after
519
+ `freshness_head` in commit order. Ignore a checkpoint-persistence commit only
520
+ after verifying its diff changes the exact state carrier and nothing else.
521
+ After a corroborated closeout-only transition, hash the complete current
522
+ effective delta and persist the rolling freshness checkpoint. Record the
523
+ transition's last non-checkpoint commit as `freshness_head`; the following
524
+ state-only persistence commit is the verified carrier exception above. For a
525
+ merge, rebase, or base-update boundary, recompute the complete effective delta
526
+ against the current merge base. A merge, rebase, or base update is not
527
+ substantive by itself. When it matches the rolling fingerprint, preserve the
528
+ allowed generation and persist an advanced rolling checkpoint without
529
+ rerunning gate or receive. A mismatch, unknown commit, or mixed
530
+ closeout/substantive boundary marks the generation `stale`.
531
+ Conflict resolution or branch-owned implementation, test, skill, template, or
532
+ workflow changes that alter the effective delta are substantive.
533
+ - Legacy unqualified `sha256:<digest>` values keep the descendant-path policy
534
+ and are never reinterpreted or migrated in place. Determine freshness from
535
+ every path changed after `reviewed_head`, and require each descendant commit
536
+ to contain only recognized closeout work. An unknown changed path fails closed
537
+ as substantive implementation change. Implementation, test, skill, template,
538
+ or workflow configuration changes make the prior result `stale`.
539
+ - Every stale transition preserves prior provenance for audit, requires a
540
+ current final lifecycle review for the changed basis, and starts a new
541
+ generation using the qualified fingerprint format.
492
542
 
493
543
  Before approval-aware sequencing, final HiLL approval, implementation
494
544
  completion, or success output, run the configured gate:
@@ -683,6 +733,14 @@ A pre-approval failure leaves `approval: pending`; a post-approval failure
683
733
  retains `approval: approved`. Fail fast with the boundary, failed step, and
684
734
  exact resume command: `oat-project-implement`.
685
735
 
736
+ For qualified gate state, treat each committed sequence step as a corroborated
737
+ closeout boundary. Recompute the complete effective delta, record that step
738
+ commit as `freshness_head`, and persist `freshness_fingerprint` in a separate
739
+ state-only checkpoint commit before dispatching the next step. Apply the same
740
+ checkpoint protocol to gate bookkeeping, final HiLL bookkeeping, and completion
741
+ bookkeeping. A mixed commit, missing child transition, or non-state path in the
742
+ checkpoint-persistence commit fails closed as stale.
743
+
686
744
  1. Dispatch incomplete `pre_approval` steps in stored order.
687
745
  2. When they succeed and a final checkpoint exists, commit `status:
688
746
  awaiting_approval` with `approval: pending` before asking for final HiLL
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-next
3
- version: 1.0.10
3
+ version: 1.0.11
4
4
  description: Use when continuing work on the active OAT project. Reads project state, determines the next lifecycle action, and invokes the appropriate skill automatically.
5
5
  disable-model-invocation: true
6
6
  user-invocable: true
@@ -270,9 +270,13 @@ Before every other post-implementation route, inspect
270
270
  or not fresh, route to `oat-project-implement`.
271
271
 
272
272
  This override applies even when `oat_phase_status` is `complete` or `pr_open`,
273
- and before the summary, document, PR, or `oat-project-complete` routes. Announce
274
- exactly: "Implementation exit gate unresolved or stale resume with
275
- `oat-project-implement` before post-implementation routing."
273
+ and before the summary, document, PR, or `oat-project-complete` routes. When a
274
+ qualified allowed result matches but its rolling checkpoint trails HEAD,
275
+ announce exactly: "Implementation exit gate freshness checkpoint pending —
276
+ resume with `oat-project-implement` before post-implementation routing." For all
277
+ other unresolved or stale cases, announce exactly: "Implementation exit gate
278
+ unresolved or stale — resume with `oat-project-implement` before
279
+ post-implementation routing."
276
280
 
277
281
  Only an `allowed` and fresh exit-gate disposition falls through to the normal
278
282
  post-implementation checks.
@@ -282,11 +286,13 @@ alone:
282
286
 
283
287
  - `allowed/no_gate` is valid only with `disposition: no_gate`, null gate-run and
284
288
  artifact provenance, and current `reviewed_head` and implementation
285
- fingerprint fields.
289
+ fingerprint fields. Qualified state also requires `implementation_base_ref`,
290
+ `freshness_head`, and `freshness_fingerprint`.
286
291
  - `allowed/configured` is valid only with `disposition: passed`, `warned`, or
287
292
  `prompt_approved`; matching `config_fingerprint`, `reviewed_head`,
288
- `implementation_fingerprint`, and configured gate-run provenance; and any
289
- eligible receive durably completed.
293
+ `implementation_fingerprint`, configured gate-run provenance, and any eligible
294
+ receive durably completed. Qualified state also requires the complete rolling
295
+ freshness fields.
290
296
  - `pending`, `blocked`, malformed, contradictory, or legacy-absent state never
291
297
  falls through. Pending and blocked generations resume their persisted
292
298
  configuration; configuration-fingerprint mismatch fails closed.
@@ -294,10 +300,24 @@ alone:
294
300
  paths and substantive changes route as stale. The recognized set is limited
295
301
  to configured gate artifacts and receipts, project tracking and
296
302
  `project-log.md` appends, summary/documentation/PR sequence outputs, final
297
- HiLL bookkeeping, and completion bookkeeping.
298
- - Any implementation, test, skill, template, workflow configuration, or other
299
- unrecognized change after `reviewed_head` invalidates the implementation
300
- fingerprint and routes to `oat-project-implement`.
303
+ HiLL bookkeeping, and completion bookkeeping. A category match without its
304
+ persisted transition boundary is unknown, not closeout-only.
305
+ - For qualified state, require `implementation_base_ref`, `freshness_head`, and
306
+ a valid `freshness_fingerprint`. Exactly one merge base and 64-character
307
+ lowercase hexadecimal implementation/freshness digests are mandatory.
308
+ Missing or malformed inputs route as stale. When HEAD differs from
309
+ `freshness_head`, use the full raw Git byte algorithm from
310
+ `oat-project-implement` with only its literal state-carrier exclusion. Verify
311
+ and ignore state-only checkpoint commits before classification. An unchanged
312
+ qualified fingerprint preserves freshness across a merge, rebase, or base
313
+ update but routes to `oat-project-implement` to persist the advanced rolling
314
+ checkpoint; a mismatch routes as stale. This read-only router never advances
315
+ state or invents another fingerprint algorithm.
316
+ - Legacy unqualified fingerprints retain the closeout-only descendant-path
317
+ check. Any implementation, test, skill, template, workflow configuration, or
318
+ other unrecognized change after `reviewed_head` invalidates the implementation
319
+ fingerprint and routes to `oat-project-implement`. Do not reinterpret or
320
+ migrate legacy state while routing.
301
321
 
302
322
  Routing is read-only: announce stale or malformed state, but leave transition
303
323
  repair, gate execution, receive, and persistence to `oat-project-implement`.
@@ -40,7 +40,10 @@ oat_workflow_origin: native # native | imported
40
40
  # max_attempts: 2
41
41
  # attempts_completed: 0
42
42
  # reviewed_head: null
43
- # implementation_fingerprint: null
43
+ # implementation_base_ref: null # exact logical base ref for effective-delta-v1
44
+ # implementation_fingerprint: null # new generations use sha256:effective-delta-v1:<digest>
45
+ # freshness_head: null # rolling accepted tree checkpoint
46
+ # freshness_fingerprint: null # full effective delta at freshness_head
44
47
  # launch_state: not_started # not_started | intent_persisted | accepted | result_persisted | not_accepted
45
48
  # launch_attempt_id: null
46
49
  # launch_started_at: null
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-agent-toolkit/cli",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
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.4"
37
+ "@open-agent-toolkit/control-plane": "0.2.5"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^22.10.0",