ace-assign 0.70.0 → 0.73.0

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.
Files changed (181) hide show
  1. checksums.yaml +4 -4
  2. data/.ace-defaults/assign/catalog/steps/auto-merge.step.yml +8 -8
  3. data/.ace-defaults/assign/catalog/steps/create-pr.step.yml +1 -1
  4. data/.ace-defaults/assign/catalog/steps/mark-pr-ready.step.yml +1 -1
  5. data/.ace-defaults/assign/config.yml +0 -13
  6. data/.ace-defaults/assign/presets/fix-bug.yml +1 -1
  7. data/.ace-defaults/assign/presets/work-on-task-ace-development.yml +1 -1
  8. data/.ace-defaults/assign/presets/work-on-task-auto-merge.yml +1 -1
  9. data/.ace-defaults/assign/presets/work-on-task.yml +1 -1
  10. data/CHANGELOG.md +3 -2099
  11. data/README.md +58 -31
  12. data/docs/exit-codes.md +36 -44
  13. data/docs/getting-started.md +9 -4
  14. data/docs/usage.md +129 -522
  15. data/handbook/skills/as-assign-drive/SKILL.md +1 -1
  16. data/handbook/workflow-instructions/assign/drive.wf.md +47 -118
  17. data/handbook/workflow-instructions/assign/prepare.wf.md +1 -1
  18. data/handbook/workflow-instructions/assign/verify-test-suite.wf.md +8 -2
  19. data/lib/ace/assign/cli/commands/assignment_target.rb +2 -15
  20. data/lib/ace/assign/cli/commands/create.rb +1 -8
  21. data/lib/ace/assign/cli/commands/fail.rb +0 -6
  22. data/lib/ace/assign/cli/commands/finish.rb +2 -23
  23. data/lib/ace/assign/cli/commands/fork_session.rb +0 -1
  24. data/lib/ace/assign/cli/commands/select.rb +0 -1
  25. data/lib/ace/assign/cli/commands/start.rb +0 -2
  26. data/lib/ace/assign/cli/commands/status.rb +1 -31
  27. data/lib/ace/assign/cli/commands/step.rb +1 -3
  28. data/lib/ace/assign/cli.rb +1 -85
  29. data/lib/ace/assign/errors.rb +8 -80
  30. data/lib/ace/assign/models/assignment.rb +5 -28
  31. data/lib/ace/assign/molecules/assignment_manager.rb +0 -26
  32. data/lib/ace/assign/molecules/fork_session_launcher.rb +4 -12
  33. data/lib/ace/assign/molecules/lifecycle_exclusion.rb +15 -112
  34. data/lib/ace/assign/molecules/runtime_control_surface_runner.rb +2 -1
  35. data/lib/ace/assign/organisms/assignment_executor.rb +0 -6
  36. data/lib/ace/assign/organisms/task_assignment_creator.rb +3 -8
  37. data/lib/ace/assign/version.rb +1 -1
  38. data/lib/ace/assign.rb +0 -6
  39. metadata +4 -161
  40. data/.ace-defaults/assign/presets/close-delivery.yml +0 -57
  41. data/.ace-defaults/assign/presets/deliver-release.yml +0 -60
  42. data/.ace-defaults/assign/presets/integrate-batch.yml +0 -72
  43. data/.ace-defaults/assign/presets/supervise-delivery.yml +0 -69
  44. data/docs/protected-authority.md +0 -282
  45. data/exe/ace-scope-ready +0 -55
  46. data/lib/ace/assign/atoms/assignment_scope.rb +0 -58
  47. data/lib/ace/assign/atoms/attempt_state_machine.rb +0 -84
  48. data/lib/ace/assign/atoms/delivery_parameters.rb +0 -19
  49. data/lib/ace/assign/atoms/evidence_digest.rb +0 -78
  50. data/lib/ace/assign/atoms/fixed_merge_schemas.rb +0 -398
  51. data/lib/ace/assign/authority/assignment_definition.rb +0 -35
  52. data/lib/ace/assign/authority/assignment_inventory.rb +0 -290
  53. data/lib/ace/assign/authority/campaign_consumer_policy.rb +0 -100
  54. data/lib/ace/assign/authority/campaign_execution.rb +0 -119
  55. data/lib/ace/assign/authority/campaign_round_transfer.rb +0 -82
  56. data/lib/ace/assign/authority/candidate_transfer.rb +0 -327
  57. data/lib/ace/assign/authority/cleanup_result_protection.rb +0 -53
  58. data/lib/ace/assign/authority/client.rb +0 -257
  59. data/lib/ace/assign/authority/deployment.rb +0 -627
  60. data/lib/ace/assign/authority/deployment_history.rb +0 -146
  61. data/lib/ace/assign/authority/endcap.rb +0 -455
  62. data/lib/ace/assign/authority/endcap_attempts.rb +0 -274
  63. data/lib/ace/assign/authority/endcap_campaign_results.rb +0 -232
  64. data/lib/ace/assign/authority/endcap_campaign_rounds.rb +0 -266
  65. data/lib/ace/assign/authority/endcap_contexts.rb +0 -23
  66. data/lib/ace/assign/authority/endcap_inboxes.rb +0 -37
  67. data/lib/ace/assign/authority/endcap_prepared_work.rb +0 -80
  68. data/lib/ace/assign/authority/endcap_publication.rb +0 -207
  69. data/lib/ace/assign/authority/endcap_results.rb +0 -398
  70. data/lib/ace/assign/authority/endcap_review_requests.rb +0 -183
  71. data/lib/ace/assign/authority/endcap_reviews.rb +0 -130
  72. data/lib/ace/assign/authority/endcap_service_settlement.rb +0 -152
  73. data/lib/ace/assign/authority/endcap_services.rb +0 -598
  74. data/lib/ace/assign/authority/evidence_transfer.rb +0 -67
  75. data/lib/ace/assign/authority/execution_scope_observation.rb +0 -903
  76. data/lib/ace/assign/authority/inbox_context_original.rb +0 -113
  77. data/lib/ace/assign/authority/launch_attempt_consumers.rb +0 -51
  78. data/lib/ace/assign/authority/launch_campaign_registration.rb +0 -214
  79. data/lib/ace/assign/authority/launch_control_channel.rb +0 -313
  80. data/lib/ace/assign/authority/launch_control_exclusions.rb +0 -127
  81. data/lib/ace/assign/authority/launch_driver.rb +0 -393
  82. data/lib/ace/assign/authority/launch_input_inhibition.rb +0 -132
  83. data/lib/ace/assign/authority/launch_lifecycle.rb +0 -997
  84. data/lib/ace/assign/authority/launch_prepared_work.rb +0 -122
  85. data/lib/ace/assign/authority/launch_review.rb +0 -91
  86. data/lib/ace/assign/authority/launch_scope_abort.rb +0 -81
  87. data/lib/ace/assign/authority/launch_scope_admission.rb +0 -215
  88. data/lib/ace/assign/authority/launch_scope_close.rb +0 -146
  89. data/lib/ace/assign/authority/launch_scope_parent.rb +0 -44
  90. data/lib/ace/assign/authority/launch_scope_release.rb +0 -859
  91. data/lib/ace/assign/authority/launch_steering.rb +0 -353
  92. data/lib/ace/assign/authority/launch_stop.rb +0 -254
  93. data/lib/ace/assign/authority/maintenance_workspace_retirement.rb +0 -229
  94. data/lib/ace/assign/authority/ordinary_attempt_start.rb +0 -137
  95. data/lib/ace/assign/authority/ordinary_client.rb +0 -70
  96. data/lib/ace/assign/authority/ordinary_completion.rb +0 -94
  97. data/lib/ace/assign/authority/ordinary_effect_settlement.rb +0 -118
  98. data/lib/ace/assign/authority/ordinary_lifecycle.rb +0 -191
  99. data/lib/ace/assign/authority/ordinary_peer.rb +0 -54
  100. data/lib/ace/assign/authority/ordinary_progress.rb +0 -162
  101. data/lib/ace/assign/authority/ordinary_queue.rb +0 -115
  102. data/lib/ace/assign/authority/ordinary_results.rb +0 -196
  103. data/lib/ace/assign/authority/ordinary_server.rb +0 -75
  104. data/lib/ace/assign/authority/original_inbox_selection.rb +0 -41
  105. data/lib/ace/assign/authority/posix_acl.rb +0 -59
  106. data/lib/ace/assign/authority/prepared_input.rb +0 -130
  107. data/lib/ace/assign/authority/prepared_queue.rb +0 -185
  108. data/lib/ace/assign/authority/prepared_task_context.rb +0 -116
  109. data/lib/ace/assign/authority/prepared_work.rb +0 -304
  110. data/lib/ace/assign/authority/prepared_worker.rb +0 -69
  111. data/lib/ace/assign/authority/private_directory.rb +0 -33
  112. data/lib/ace/assign/authority/protected_assignment_context.rb +0 -226
  113. data/lib/ace/assign/authority/readiness_hook.rb +0 -120
  114. data/lib/ace/assign/authority/receipt_transfer.rb +0 -48
  115. data/lib/ace/assign/authority/router.rb +0 -81
  116. data/lib/ace/assign/authority/server.rb +0 -131
  117. data/lib/ace/assign/authority/service_cleanup_dispatch.rb +0 -88
  118. data/lib/ace/assign/authority/service_cleanup_evidence.rb +0 -180
  119. data/lib/ace/assign/authority/service_delivery_evidence.rb +0 -101
  120. data/lib/ace/assign/authority/service_evidence.rb +0 -286
  121. data/lib/ace/assign/authority/service_publication_evidence.rb +0 -110
  122. data/lib/ace/assign/authority/socket_server.rb +0 -255
  123. data/lib/ace/assign/authority/task_context_entry.rb +0 -32
  124. data/lib/ace/assign/authority/transfer_codec.rb +0 -187
  125. data/lib/ace/assign/cli/commands/attempt/base.rb +0 -84
  126. data/lib/ace/assign/cli/commands/attempt/evidence.rb +0 -28
  127. data/lib/ace/assign/cli/commands/attempt/finish.rb +0 -51
  128. data/lib/ace/assign/cli/commands/attempt/reconcile.rb +0 -49
  129. data/lib/ace/assign/cli/commands/attempt/start.rb +0 -45
  130. data/lib/ace/assign/cli/commands/attempt/status.rb +0 -54
  131. data/lib/ace/assign/cli/commands/authority/inbox_context_principal.rb +0 -25
  132. data/lib/ace/assign/cli/commands/authority/inbox_context_selection.rb +0 -28
  133. data/lib/ace/assign/cli/commands/authority/launch.rb +0 -97
  134. data/lib/ace/assign/cli/commands/authority/serve.rb +0 -31
  135. data/lib/ace/assign/cli/commands/authority/status.rb +0 -26
  136. data/lib/ace/assign/cli/commands/authority/task_context.rb +0 -31
  137. data/lib/ace/assign/cli/commands/authority/task_context_principal.rb +0 -25
  138. data/lib/ace/assign/cli/commands/authority/task_context_selection.rb +0 -30
  139. data/lib/ace/assign/cli/commands/authority/terminate.rb +0 -29
  140. data/lib/ace/assign/cli/commands/authority/worker.rb +0 -23
  141. data/lib/ace/assign/cli/commands/campaign_export_result.rb +0 -55
  142. data/lib/ace/assign/cli/commands/campaign_record_round.rb +0 -57
  143. data/lib/ace/assign/cli/commands/delivery.rb +0 -107
  144. data/lib/ace/assign/cli/commands/inbox_bind.rb +0 -34
  145. data/lib/ace/assign/cli/commands/protected_submission.rb +0 -61
  146. data/lib/ace/assign/cli/commands/resume.rb +0 -38
  147. data/lib/ace/assign/cli/commands/submit_candidate.rb +0 -34
  148. data/lib/ace/assign/cli/commands/submit_result.rb +0 -61
  149. data/lib/ace/assign/models/attempt.rb +0 -178
  150. data/lib/ace/assign/models/attempt_binding.rb +0 -116
  151. data/lib/ace/assign/models/evidence_event.rb +0 -86
  152. data/lib/ace/assign/models/execution_receipt.rb +0 -139
  153. data/lib/ace/assign/molecules/attempt_reconciler.rb +0 -127
  154. data/lib/ace/assign/molecules/attempt_store.rb +0 -201
  155. data/lib/ace/assign/molecules/canonical_attempt_state.rb +0 -151
  156. data/lib/ace/assign/molecules/canonical_evidence.rb +0 -153
  157. data/lib/ace/assign/molecules/canonical_read_commands.rb +0 -84
  158. data/lib/ace/assign/molecules/canonical_read_snapshot.rb +0 -313
  159. data/lib/ace/assign/molecules/evidence_calculator.rb +0 -237
  160. data/lib/ace/assign/molecules/evidence_journal.rb +0 -1912
  161. data/lib/ace/assign/molecules/execution_identity_resolver.rb +0 -137
  162. data/lib/ace/assign/molecules/execution_scope_lineage.rb +0 -345
  163. data/lib/ace/assign/molecules/fixed_effect_reference.rb +0 -31
  164. data/lib/ace/assign/molecules/installed_journal_read.rb +0 -143
  165. data/lib/ace/assign/molecules/journal_input_inhibition.rb +0 -78
  166. data/lib/ace/assign/molecules/journal_mutation.rb +0 -273
  167. data/lib/ace/assign/molecules/journal_prompt_mutation.rb +0 -241
  168. data/lib/ace/assign/molecules/ordinary_merge_cli.rb +0 -68
  169. data/lib/ace/assign/molecules/ordinary_merge_contract.rb +0 -410
  170. data/lib/ace/assign/molecules/original_launch_binding.rb +0 -37
  171. data/lib/ace/assign/molecules/proposal_journal.rb +0 -179
  172. data/lib/ace/assign/molecules/protected_control_exclusion.rb +0 -303
  173. data/lib/ace/assign/molecules/protected_workspace_exclusion.rb +0 -330
  174. data/lib/ace/assign/molecules/protected_workspace_provisioner.rb +0 -164
  175. data/lib/ace/assign/molecules/receipt_verifier.rb +0 -314
  176. data/lib/ace/assign/molecules/terminal_scope_receipt.rb +0 -88
  177. data/lib/ace/assign/organisms/attempt_coordinator.rb +0 -1337
  178. data/lib/ace/assign/organisms/delivery_coordinator.rb +0 -342
  179. data/lib/ace/assign/organisms/ordinary_merge_consumer.rb +0 -365
  180. data/lib/ace/assign/organisms/prepared_work_builder.rb +0 -194
  181. data/lib/ace/assign/organisms/protected_delivery_coordinator.rb +0 -100
data/CHANGELOG.md CHANGED
@@ -7,2106 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ## [0.70.0] - 2026-10-16
11
10
 
12
- ### Added
13
-
14
- - Admit ordinary assignments, native starts, progress, submitted results and terminal settlement through the installed canonical owner. Retain original mutations and immutable snapshots across restart, isolate sibling scopes, and join current HITL, service and Inbox evidence.
15
- - Preserve historical review checks at their recorded head and align delivery presets with accepted-head assessment and serial integration.
16
-
17
- ## [0.69.0] - 2026-10-16
18
-
19
- ### Changed
20
-
21
- - Require ace-review 0.60.2 to keep the coordinated Forgejo 0.7 dependency graph compatible.
22
-
23
- ### Added
24
-
25
- - Expose read-only `AttemptCoordinator#fixed_merge_records` so the ordinary merge receiver can reconcile its pending canonical records after restart without another journal or repeated effect.
26
-
27
- ## [0.68.0] - 2026-10-14
28
-
29
- ### Added
30
-
31
- - Admit ordinary fixed merge requests through the maintained `ace-lab service request/status --mode ordinary-merge` producer via the closed-argv `OrdinaryMergeCli`, with opaque-reference recovery, exact terminal receipt acceptance, and the canonical request digest defined as lowercase SHA-256 over the full eight-field immutable binding per spec ruling r4 — re-derived from the recorded binding on every poll and validated against every acknowledgment, refusal, status, and receipt echo.
32
- - Add fixed merge request schemas, opaque fixed-effect references, evidence-journal records, and coordinator primitives (admit/begin/settle/read-only status) so the canonical Assign attempt/evidence state remains the sole durable record: an identical resubmission replays the original acknowledgment, a reused, consumed, expired, or out-of-scope authorization raises the distinct `AuthorizationConflict`, and a restarted receiver can never begin the effect twice.
33
-
34
- ## [0.67.0] - 2026-10-12
35
-
36
- ### Added
37
-
38
- - Add project-adaptable delivery supervision presets for dependency-aware queue decisions, renewed-evidence integration batches, immutable release cuts, and evidence-preserving closure.
39
-
40
- ## [0.66.1] - 2026-10-10
41
-
42
- ### Fixed
43
-
44
- - Require the published producer and consumer patch versions containing the protected context and managed-attempt APIs; exclude incompatible prior dependency graphs.
45
-
46
- ## [0.66.0] - 2026-10-08
47
-
48
- ### Added
49
-
50
- - Connect protected PR delivery and parent/child campaign results to the canonical assignment owner, with current candidate checks, independent review and original operation authorization.
51
- - Launch authenticated prepared workers through the existing ace-llm provider CLI in the original terminal.
52
-
53
- ### Changed
54
-
55
- - Remove message-read proofs, observation/signing APIs and Inbox settlement requirements from finish, recovery and stop. Retain actual service/result/review evidence and whole-scope writer checks.
56
- - Reuse verified immutable journal inventories only within a single operation while retaining fresh admission and compare-and-swap checks.
57
- - Preserve original workspace leases when provider ownership or shutdown is uncertain.
58
-
59
- ## [0.65.0] - 2026-10-06
60
-
61
- ### Added
62
-
63
- - Source-only protected original/candidate deployment inventory and shared execution-slot exclusions with immutable journal snapshots; full maintenance eligibility and retirement remain unavailable until historical authentication and current inventory verification are connected.
64
-
65
- ## [0.64.0] - 2026-10-05
66
-
67
- ### Added
68
-
69
- - Connect fixed execution-slot parent activation to canonical sealing, exact never-native-admitted closure, guarded abort, durable reservation release and restart-safe reuse. Native service admission refuses unavailable readiness evidence; admitted and post-native positive closure and complete installer maintenance remain unfinished.
70
-
71
- - Register canonical execution-scope binding, seal and empty-observation events with an immutable exact-lineage reader. Missing, changed or corrupt generation/proof identities refuse; live scope verification and terminal handlers remain separate owners.
72
-
73
- - Submit immutable private canonical worker results and fetch one purpose-authorized artifact through the existing authority Client, with retained services status discovery and exact download descriptor validation. Full-service startup remains guarded.
74
-
75
- - Validate fixed service receiver principals and private placement before authority startup, refusing ambiguous roles, overlapping ownership and inaccessible endpoints.
76
-
77
- - Add the public protected assignment authority and gated launch driver with canonical reservation, exact binding, one durable release, replay refusal and conservative crash recovery.
78
-
79
- - Resolve immutable second-commander proposals through confirmed-delivery sixteen-hour policy and canonical Assign authorization.
80
- - Atomic execution-ref mutation/import primitives with exact reply replay and canonical artifact binding/provenance verification. Intent-only attempts remain reserved until a real process-start fact.
81
- - Resume from accepted attempt history without relaunch/replay; consume signed inbox observations in the existing journal and preserve unknown owner/effect state.
82
-
83
- - Attempt-bound, provider-neutral delivery records draft creation, update and readiness in the existing evidence journal; lost responses reconcile exact remote identity without repeating writes. Readiness consumes accepted current test and independent review evidence, and merge consumes the existing authorized service receipt.
84
- - Explicit forge selection and canonical/fork provenance for remote assignment creation; local assignments reject unused delivery inputs.
85
-
86
- ### Changed
87
-
88
- - Declare the required direct dependencies and minimum producer versions for this coordinated release: `ace-git ~> 0.29`, `ace-herdr ~> 0.4`, `ace-llm-providers-cli ~> 0.36.1`, `ace-review ~> 0.59`, `ace-runtime ~> 0.2`, `ace-support-fs ~> 0.3`.
89
-
90
- - Align prepare/drive discovery and draft creation instructions with the canonical neutral PR skills and attempt-bound delivery command.
91
-
92
- - Expose read-only runtime_binding for an active accepted attempt using the existing native/process authority, refusing missing, dead, changed or unrelated owner evidence.
93
-
94
- ### Fixed
95
-
96
- - Reject duplicate keys and comments in guarded scope-abort evidence using the required strict JSON parser, and preserve canonical slot ownership after child-only failure until whole-scope cleanup is proven.
97
-
98
- - Attribute local attempts to the kernel process account instead of terminal login/environment; refuse unresolved accounts, privilege transitions and changing credentials.
99
- - Commit proposal supersession and the new revision atomically with canonical operation replay and unresolved-effect claim exclusion.
100
-
101
- - Enforce global proposal identity ownership and immutable prepared lifecycle projection in the sole canonical proposal journal.
102
- - Refuse finish receipts for unbound reservations before terminal acceptance, and preserve exact canonical import bytes across Git filters and CRLF conversion.
103
-
104
- - Clean failed evidence transactions at every shared journal writer boundary; preserve unbound launch reservations and report explicit recovery evidence requirements.
105
-
106
- - Retain delivery context across scoped attempts and distinguish a recovered prior effect from a new request with different content or evidence before reporting completion.
107
-
108
- ## [0.63.1] - 2026-10-04
109
-
110
- ### Changed
111
-
112
- - Install both Herdr and tmux runtime adapters for standalone runtime switching, through an acyclic dependency graph.
113
-
114
- ### Fixed
115
-
116
- - Run terminal fork invocations as children of the prepared shell, retaining the same writable pane after a command exits.
117
-
118
- - Managed assignment status JSON tests run against test-owned repositories and evidence journals instead of the invoking checkout's journal, evidence ref, or worktree registrations (task 8ws.t.ibk). A sentinel-based invariance test asserts the ambient repository's refs, registrations, and files stay untouched, and fixture journals cover absent, seed-only, and stale-checkout states.
119
-
120
- ## [0.63.0] - 2026-10-04
121
-
122
- ### Added
123
- - Runtime-neutral fork launches: `launch_mode` gains `herdr` and `auto` detects the live terminal runtime (tmux first, then herdr; headless only outside any runtime). `TmuxControlSurfaceRunner` is replaced by the contract-backed `RuntimeControlSurfaceRunner`; fork windows/panes, sends, captures, and session metadata are runtime-neutral (`runtime`/`session`/`window`/`window_id`/`pane` replace the `tmux_*` metadata keys), and `--callback` works under herdr. Fork children now receive `ACE_RUNTIME` instead of `ACE_TMUX_SESSION` propagation, and the drive workflow callback rule prescribes `ace-runtime send`.
124
- - New dependency: `ace-runtime` (~> 0.1); `ace-tmux` is kept to install the tmux adapter.
125
-
126
- ## [0.62.0] - 2026-10-04
127
-
128
- ### Added
129
- - **Lock-scoped external attempt authority (spec 8wq.t.34i)**: `AttemptCoordinator#with_verified_attempt` verifies that a managed attempt is live (reserved/running — uncertainty never grants external authority), bound to the exact assignment/project, and owned by the requesting actor, holding the assignment `LifecycleExclusion` shared side across the caller's whole locked transition. `finish` and `reconcile` hold the exclusive side across their terminal commits, so a liveness check can never observe an attempt as active after the terminal event landed (and vice versa). This is the authority behind ace-hitl's managed HITL request binding.
130
-
131
- ## [0.61.1] - 2026-10-02
132
-
133
- ### Fixed
134
- - Historical evidence reads (`--historical-head`) validate acceptance from the append-only journal without re-hashing receipt artifacts, so campaigns that resolve findings mid-campaign (archiving and annotating the referenced files) can still finish; current-head reads keep full artifact re-verification.
135
-
136
-
137
- ## [0.61.0] - 2026-10-02
138
-
139
- ### Added
140
-
141
- - Journal-backed service request claims, terminal receipts, and uncertainty
142
- tracking. Assignment evidence now exposes unresolved service effects and
143
- the latest evidence ref commit without changing the candidate head.
144
-
145
- ### Fixed
146
-
147
- - Validate terminal service receipts against the exact claimed request and
148
- executor evidence before accepting them in the assignment journal.
149
-
150
- ### Technical
151
-
152
- - Updated the ace-tmux dependency to the 0.18 adapter release line.
153
-
154
- ## [0.60.0] - 2026-10-01
155
-
156
- ### Fixed
157
- - Preserve task/project attachment when the public assignment creation path archives its source configuration, so managed attempts retain immutable journal authority.
158
- - Cache-free evidence lookup handles a seed-only journal ref without creating a checkout or treating an absent attempt as a corrupt journal.
159
-
160
- ### Added
161
- - `attempt evidence --kind review-approval` validates accepted independent approval separately from collection; retained collection/approval receipts support explicit historical-head validation without granting current check authority.
162
- - Bind campaign check names to accepted executed operations and review collection to accepted `review-collect` artifacts, through `attempt evidence` purpose checks.
163
-
164
- - `ace-assign attempt evidence` exposes read-only coordinator-accepted current-head check proof. Journal reads use immutable Git objects without writing cache/audit checkout state.
165
- - Review receipts may consume a durable ace-review campaign result. The existing coordinator still validates authority, live head, independent reviewer, executed checks and artifact digests; stale or conflicting campaign snapshots are rejected.
166
-
167
- ## [0.59.0] - 2026-09-29
168
-
169
- ### Added
170
- - Durable lifecycle exclusion (`Ace::Assign::Molecules::LifecycleExclusion`): prune holds the exclusive side from final evidence reads through removal while every supported start path -- attempt registration, fork/driver session launch, and worktree provisioning -- holds the shared side. Locks live outside every deletion target (sandbox-aware cache base or the shared Git common dir) so they survive removal of the target, and a `removed` marker makes post-prune starts fail closed instead of recreating a deleted identity.
171
-
172
- ### Changed
173
- - `AttemptCoordinator#start` and `ForkSessionLauncher#launch` now participate in the prune exclusion: a concurrent prune blocks new writers for the identity, and a start targeting a pruned assignment raises a conflict instead of writing into a recreated path.
174
-
175
- ## [0.58.0] - 2026-09-28
176
-
177
- ### Added
178
- - Durable assignment attempts: `ace-assign attempt start|status|finish|reconcile` bind an immutable attempt ID to an assignment step/subtree, project, boundary-derived actor identity, and `base_head`, with a `reserved -> running -> succeeded/failed/stopped/uncertain` lifecycle and conservative reconciliation of interruptions (no automatic replay of merge/publish/deploy).
179
- - Managed attempts journal accepted execution evidence to the configured evidence Git ref (default `refs/ace/execution`) through an isolated audit checkout with flock serialization and expected-old-value `git update-ref` compare-and-swap; `refs/ace/execution` never advances the deliverable candidate branch.
180
- - Structured execution receipts: verifiable artifact digests, executed checks, executed independent reviewer verdicts for the exact current head, and rejection of credentials/terminal output in accepted evidence.
181
- - `ace-assign status` (JSON) now includes the active attempt, `base_head`, `candidate_head`, `evidence_git_ref`, `journal_commit`, and unresolved effects.
182
-
183
- ### Changed
184
- - BREAKING: delivery evidence is derived exclusively from accepted, current-head journal receipts. The previous interpretation that a current `.ace-local/review`/`.ace-local/release` report plus hardcoded `terminal` feedback authorizes merge is removed; `merge_decision` is now `authorized` or `approval-required` (never `report-only`). Existing `EvidenceCalculator` consumers must read evidence from attempts.
185
- - BREAKING: taskless assignments persist attempts locally (`recovery_mode: local_only`), never claim Git-backed recovery, and cannot record external effects until attached to a source task.
186
- - New `attempt` error family exits with code 5 (conflict, rejected receipt, unauthorized identity, unavailable evidence, illegal attempt state).
187
-
188
- ## [0.57.1] - 2026-09-27
189
-
190
- ### Technical
191
- - Stop depending on the removed review-fit preset step in tests.
192
-
193
- ## [0.57.0] - 2026-09-24
194
-
195
- ### Changed
196
-
197
- - Delegate PR review rounds to the shared review workflow instead of duplicating fixed cycles in assignments.
198
- - Create PRs as drafts and update their descriptions before marking them ready after review; no separate coverage receipt or SHA gate.
199
-
200
- ## [0.56.1] - 2026-09-02
201
-
202
- ### Technical
203
- - Included in the coordinated all-package patch release preparation for ACE monorepo review.
204
- ## [0.56.0] - 2026-08-13
205
- ### Added
206
- - Calculate exact-head evidence for status
207
- - Add outcome-based task presets
208
- ### Fixed
209
- - Resolve PR 316 findings and finalize cleanup proofs
210
-
211
- ## [0.55.2] - 2026-08-12
212
-
213
- ### Technical
214
- - Raised the `ace-support-core` dependency floor to `~> 0.31` after the principles-first bootstrap guidance release.
215
- ## [0.55.1] - 2026-08-12
216
-
217
- ### Technical
218
- - Aligned gemspec dependency floors with current ACE package minor release lines and safe external minor dependency bumps (no major version jumps).
219
-
220
- ## [0.55.0] - 2026-04-23
221
-
222
- ### Changed
223
- - Migrated tmux-backed `fork-run` orchestration to consume the shared `ace-tmux` runtime/control surface instead of maintaining a private `ace-assign` tmux runner.
224
- - Added step-level `fork.mode` plus config-level `execution.launch_mode` so `ace-assign fork-run` can default subtree launch behavior to `auto`, `headless`, or `tmux` while still letting `--launch-mode` override both.
225
- - Added `ace-assign fork-run --callback` for tmux-backed parent/child agent flows so a fork can capture the origin pane, launch the child subtree, and let the child send one final status sentence back with `ace-tmux send` instead of keeping the parent on a polling loop.
226
- - Updated the `/as-assign-drive` fork workflow contract to document callback-mode idle waiting, direct `ace-tmux send` callback delivery, and assignment-state recovery when a callback is missing on re-entry.
227
-
228
- ### Fixed
229
- - Updated the `ace-tmux` runtime dependency constraint to `~> 0.17` so assignment tmux delegation stays aligned with the new runtime inspection release line.
230
-
231
- ### Technical
232
- - Kept assignment queue state as the authoritative fork completion signal while limiting tmux pane capture to launch and failure diagnostics.
233
- - Persisted fork callback pane metadata in tmux session files, exported it into tmux fork launch environments as `ACE_ASSIGN_CALLBACK_PANE`, and added command/launcher/runner contract coverage for the new non-blocking callback path.
234
- - Added parser/model/launcher/command regression coverage for launch-mode precedence across CLI, step frontmatter, and assign config defaults.
235
-
236
- ## [0.53.4] - 2026-04-20
237
-
238
- ### Technical
239
- - Tightened `TS-ASSIGN-002` hierarchy E2E contracts so auto-completion uses derived assignment IDs, valid cross-assignment `finish --assignment` syntax, and explicit scoped status artifacts for subtree verification.
240
- - Clarified `ace-assign finish` usage docs so positional step targeting is reserved for the active assignment while cross-assignment/scoped completion uses `--assignment <id[@step]>`.
241
-
242
- ## [0.53.3] - 2026-04-18
243
-
244
- ### Technical
245
- - Corrected `TS-ASSIGN-001` lifecycle fixture-path guidance so Goal 1 resolves the real sandbox fixture files and no longer records a false create failure before the lifecycle flow completes.
246
-
247
- ## [0.53.2] - 2026-04-16
248
-
249
- ### Technical
250
- - Reworked retained fork-context E2E capture around explicit regular, fork, return, and final checkpoints so lifecycle transitions are proven from stable artifacts instead of generic completion text.
251
-
252
- ## [0.53.1] - 2026-04-16
253
-
254
- ### Fixed
255
- - Hid failed retry history from compact `ace-assign status` pending previews after assignment completion so terminal state no longer mixes `Status: completed` with a misleading `Pending steps:` block.
256
-
257
- ### Technical
258
- - Added a status-command regression covering completed assignments with failed retry ancestry and validated the retained lifecycle E2E path against the corrected compact status output.
259
-
260
- ## [0.53.0] - 2026-04-15
261
-
262
- ### Changed
263
- - Rewrote retained assignment E2E runner/verifier contracts to emphasize public command journeys and impact-first state oracles over rigid capture choreography.
264
- - Added `TS-ASSIGN-003` operations coverage for multi-assignment operator flow and scoped `fork-run` delegation behavior.
265
-
266
- ### Technical
267
- - Refreshed hierarchy/lifecycle/fork scenario guidance so debug artifacts remain fallback evidence and CLI-visible status transitions are primary evidence.
268
-
269
- ## [0.52.0] - 2026-04-15
270
-
271
- ### Changed
272
- - Tightened the committed tmux fork demo contract so the recording is aimed at the visible `work -> work-fs -> agent starts working` transition instead of a synthetic transcript.
273
-
274
- ### Technical
275
- - Made tmux fork wrappers print the translated skill handoff before launching the interactive agent, keeping the fork pane bootstrap visible and testable.
276
-
277
- ## [0.51.0] - 2026-04-15
278
-
279
- ### Changed
280
- - Reworked tmux fork execution to start a real interactive agent session via `ace-llm --interactive` in the `<current-window>-fs` pane and auto-send the scoped `/as-assign-drive <assignment>@<root>` handoff instead of running the old headless fork-session wrapper in tmux.
281
-
282
- ### Technical
283
- - Switched tmux fork completion tracking from pane-process exit to subtree-state polling so interactive agents can stay open while forked assignment progress is still tracked to completion.
284
-
285
- ## [0.50.3] - 2026-04-15
286
-
287
- ### Fixed
288
- - Fixed tmux fork-window lookup by correcting `TmuxForkRunner` result normalization, so explicit-session launches resolve the current window instead of failing under detached-session demo/recording runs.
289
-
290
- ### Changed
291
- - Refined the committed `fork-provider` asciinema tape/setup and refreshed the demo artifacts (`.gif`, `.cast`, and recording manifest) after rerunning the verified tmux fork demo against PR-ready behavior.
292
-
293
- ## [0.50.2] - 2026-04-15
294
-
295
- ### Fixed
296
- - Resolved tmux-backed fork window detection when `ACE_TMUX_SESSION` is set without a live `TMUX` variable, so visible fork demos and detached-session launches still resolve the current window correctly.
297
-
298
- ### Changed
299
- - Replaced the stale `fork-provider` demo tape with an asciinema/YAML recording that verifies the real `work -> work-fs` tmux fork transition.
300
-
301
- ## [0.50.1] - 2026-04-15
302
-
303
- ### Changed
304
- - Refreshed the tmux-backed fork demo asset so the recorded flow starts in the operator work window and visibly opens the fork staging window during `fork-run`.
305
-
306
- ## [0.50.0] - 2026-04-15
307
-
308
- ### Changed
309
- - Added `ace-assign fork-run --launch-mode auto|headless|tmux`, keeping the existing headless subprocess path while allowing tmux-backed fork execution in the current tmux session.
310
- - Tmux-backed fork runs now create or reuse a `<current-window>-fs` window, launch forked provider sessions in panes there, and persist tmux session/window/pane metadata alongside existing fork session files.
311
-
312
- ### Technical
313
- - Added an internal `ace-assign fork-session` entrypoint plus launcher/test coverage to reuse the existing provider-backed fork session path from tmux panes.
314
- - Added a recorded tmux fork demo GIF under `docs/demo/` and updated usage docs for the new launch-mode contract.
315
-
316
- ## [0.49.2] - 2026-04-13
317
-
318
- ### Fixed
319
- - Rewrote `TS-ASSIGN-002` around sandbox end-state and runner observations so hierarchy renumbering, auto-completion, and audit coverage no longer depend on synthetic helper artifacts under `results/`.
320
-
321
- ## [0.49.1] - 2026-04-13
322
-
323
- ### Fixed
324
- - Tightened `TS-ASSIGN-002` hierarchy scenario evidence so cascade renumbering is proven from concrete step-file artifacts and display-audit checks read the copied sandbox fixture path instead of a repo-relative path.
325
-
326
- ## [0.49.0] - 2026-04-13
327
-
328
- ### Changed
329
- - Split assignment status from instruction loading: `ace-assign status` now defaults to compact status-only output with `compact`, `progress`, and `full` text modes, while the new `ace-assign step` command prints current/next/exact step instructions.
330
- - Made `ace-assign start` and `ace-assign finish` concise by pointing operators to `ace-assign step` instead of printing raw instruction blocks inline.
331
-
332
- ### Technical
333
- - Updated drive/fork guidance, deterministic command coverage, and fork-context E2E specs to treat `status` as state-only and `step` as the instruction-loading surface.
334
-
335
- ## [0.48.0] - 2026-04-13
336
-
337
- ### Changed
338
- - Removed the shipped `verify-e2e` assignment step from the public catalog, presets, and composition defaults so standard `ace-assign` workflows no longer schedule package E2E verification.
339
- - Narrowed assignment-level `verify-test-suite` to deterministic verification only: modified packages run `ace-test <package> all --profile 6`, then the monorepo gate runs `ace-test-suite --target all`.
340
-
341
- ### Technical
342
- - Added an `ace-assign`-local `wfi://assign/verify-test-suite` workflow and preserved local step runtime bindings during canonical catalog metadata merges so assignment-specific verification contracts are not overwritten by shared skill defaults.
343
-
344
- ## [0.47.3] - 2026-04-13
345
-
346
- ### Changed
347
- - Completed the batch i05 migration follow-through for this package and aligned it with the restarted `fast` / `feat` / `e2e` verification model.
348
-
349
- ### Technical
350
- - Included in the coordinated assignment-driven patch release for batch i05 package updates.
351
-
352
-
353
- ## [0.47.2] - 2026-04-12
354
-
355
- ### Fixed
356
- - Hardened `wfi://assign/drive` so forked subtree completion is driven by scoped `ace-assign status`, with explicit 6-minute polling, detached resume guidance, and immediate parent-queue re-entry after terminal child status.
357
-
358
- ### Technical
359
- - Updated the canonical and projected `as-assign-drive` skill contracts plus workflow contract coverage to lock in status-driven fork completion pickup after terminal or session interruption.
360
-
361
- ## [0.47.1] - 2026-04-12
362
-
363
- ### Fixed
364
- - Simplified `TS-ASSIGN-001` to keep only lifecycle and fork-context E2E coverage, moving help, prepare, and no-skip policy assertions down to deterministic fast and feat contracts.
365
- - Tightened `TS-ASSIGN-002` into a 4-goal hierarchy scenario by moving hierarchy error-path checks to command tests and requiring explicit multi-level auto-completion and audit-trail evidence.
366
-
367
- ### Technical
368
- - Added regression coverage for invalid `add --after` references, pending-parent `finish` rejection after child injection, the canonical `work-on-task` preset contract, and the `assign/drive` no-skip workflow contract.
369
-
370
- ## [0.47.0] - 2026-04-11
371
-
372
- ### Changed
373
- - Taught `wfi://assign/drive` to prefer an E2E-specific `fix-e2e` recovery step after `ace-test-e2e` failures so assignment retries route into `/as-e2e-fix` instead of generic test-fix instructions.
374
- - Updated the shipped work-on-task verification fixture to require `/as-e2e-fix` to bootstrap `wfi://e2e/analyze-failures` automatically when scenario-failure analysis is missing or incomplete.
375
-
376
- ## [0.46.0] - 2026-04-11
377
-
378
- ### Changed
379
- - Migrated package test layout to the `fast` / `feat` / `e2e` model by moving deterministic ATOM and command tests under `test/fast/`, adding deterministic feature-level coverage under `test/feat/`, and keeping scenario assets under `test/e2e/`.
380
- - Updated package documentation and E2E scenario metadata to reference the new testing contract (`ace-test ace-assign`, `ace-test ace-assign feat`, `ace-test ace-assign all`, `ace-test-e2e ace-assign`) and `test/fast/*` deterministic coverage paths.
381
- - Tightened E2E goal runner/verifier contracts to reduce brittle artifact-name coupling and keep policy/lifecycle evidence checks aligned with current command outputs.
382
-
383
- ## [0.45.0] - 2026-04-11
384
-
385
- ### Changed
386
- - Updated assignment verification presets, step templates, and runtime child-step instructions so modified packages run `ace-test <package> all --profile 6`, batch suite checks stay on plain `ace-test-suite`, and E2E verification stays package-targeted via `ace-test-e2e <package>`.
387
-
388
- ### Technical
389
- - Synced the shipped work-on-task prepare fixture and executor rendering coverage to the new verification contract.
390
-
391
- ## [0.44.5] - 2026-04-10
392
-
393
- ### Fixed
394
- - Updated verify-E2E guidance to support both `test-e2e/scenarios/` and legacy `test/e2e/` paths during migration in assignment presets and runtime executor output.
395
- - Synced the work-on-task E2E fixture contract with the dual-path migration guidance.
396
-
397
- ## [0.44.3] - 2026-04-07
398
-
399
- ### Fixed
400
- - Added missing `Bash(ace-bundle:*)` permissions to internal helper skills that execute `ace-bundle` workflows (`as-create-retro-internal`, `as-mark-task-done-internal`, `as-reflect-and-refactor-internal`).
401
- - Restored required canonical skill metadata headers (`# bundle`, `# agent`) for internal helper skills `as-create-retro-internal` and `as-reflect-and-refactor-internal`.
402
- - Added source-based canonical step-definition fallback in assignment step materialization so custom-named steps with explicit `source` preserve canonical metadata.
403
-
404
- ### Technical
405
- - Added regression coverage for custom-named explicit-source step materialization preserving canonical fork metadata.
406
-
407
- ## [0.44.2] - 2026-04-07
408
-
409
- ### Fixed
410
- - Preserved project-level `.ace/assign/catalog/steps/*.step.yml` overrides when canonical skill metadata is present by applying project definitions after canonical merge in assignment step catalog resolution.
411
- - Restored canonical step metadata in `CatalogLoader.load_all` results for migrated public steps so direct catalog consumers retain description/prerequisite/artifact semantics, while keeping raw-YAML opt-out support via `canonical_steps: false`.
412
-
413
- ## [0.44.1] - 2026-04-07
414
-
415
- ### Fixed
416
- - Preserved canonical step-level `assign.steps` presentation fields (`name` and `description`) when resolving skill-backed step rendering.
417
-
418
- ### Technical
419
- - Added required canonical metadata headers (`# bundle`, `# agent`) to internal helper skills `as-task-load-internal` and `as-mark-task-done-internal`.
420
- - Added regression coverage for step-level description preservation in `SkillAssignSourceResolver`.
421
-
422
- ## [0.44.0] - 2026-04-07
423
-
424
- ### Changed
425
- - Migrated helper-step ownership for `task-load`, `mark-task-done`, `reflect-and-refactor`, and `create-retro` from permanent `skill: null` templates to internal canonical helper skills.
426
- - Migrated public step metadata ownership for `onboard`, `plan-task`, `work-on-task`, `review-pr`, `create-pr`, and `verify-test-suite` into canonical skill `assign.steps`, with public workflow binding resolved from `skill.execution.workflow` (legacy `assign.source` fallback retained).
427
- - Normalized runtime execution and materialization paths around canonical step `source` (`skill://...` and explicit `wfi://...`) while preserving legacy `skill`/`workflow` compatibility as migration fallback.
428
- - Updated shipped assign compose/create/prepare workflow docs to use source-first step contract examples.
429
-
430
- ### Fixed
431
- - Restricted public assign-step discovery to canonical skills with `user-invocable: true`, preventing internal helper skills from appearing in public assignment composition inventory.
432
-
433
- ### Technical
434
- - Added internal helper workflows and skills under `ace-assign/handbook` to preserve helper execution contracts while keeping them non-discoverable.
435
- - Marked `pre-commit-review` and `verify-test` helper templates as explicit transitional exceptions with migration metadata.
436
-
437
- ## [0.42.4] - 2026-04-05
438
-
439
- ### Fixed
440
- - Scoped canonical `skill://` and `wfi://` source discovery to in-project defaults and explicitly registered external sources so ambient installed gems no longer leak into assign resolution.
441
- - Preserved child `skill` metadata only for hand-authored explicit split sub-steps while keeping inferred and preset-expanded canonical sub-steps fully materialized.
442
-
443
- ## [0.42.3] - 2026-04-02
444
-
445
- ### Changed
446
- - Updated HITL guidance wording in `ace-assign status` and assignment workflow/docs to use canonical "event" terminology (`Review event`, `HITL event`).
447
-
448
- ### Technical
449
- - Refreshed status command test expectations for the updated HITL wording contract.
450
-
451
- ## [0.42.2] - 2026-04-02
452
-
453
- ### Technical
454
- - Updated HITL stall-path fixture expectations in status command coverage from `.ace-hitl/...` to `.ace-local/hitl/...` to match the new default HITL root.
455
-
456
- ## [0.42.1] - 2026-04-02
457
-
458
- ### Changed
459
- - Updated `wfi://assign/drive` HITL guidance to use per-item polling (`ace-hitl wait <id>`) as the default requester path and `ace-hitl update --resume` as fallback dispatch.
460
-
461
- ### Fixed
462
- - Updated `ace-assign status` HITL operator guidance output to display polling-first and fallback resume commands aligned with the current HITL contract.
463
-
464
- ### Technical
465
- - Refreshed command-level status tests for the new HITL guidance text contract.
466
-
467
- ## [0.42.0] - 2026-04-01
468
-
469
- ### Changed
470
- - Added a dedicated HITL stall protocol to `wfi://assign/drive`, documenting `ace-hitl` create/list/show/update usage, canonical `ace-assign fail --message "HITL: <id> <path>"` formatting, and resume/archive flow without reintroducing gate-state mechanics.
471
-
472
- ### Fixed
473
- - `ace-assign status` now detects HITL-formatted stall reasons and prints direct operator guidance for `ace-hitl show <id>` plus stored-path hints.
474
-
475
- ### Technical
476
- - Added command-level status coverage for HITL and non-HITL stall reason rendering to prevent regressions in current-step guidance output.
477
-
478
- ## [0.41.12] - 2026-04-01
479
-
480
- ### Fixed
481
- - Restored parent-only fork boundaries for generated split subtrees by preventing child steps from inheriting fork context defaults when the parent step is the fork root.
482
- - Removed default fork context declarations from canonical `plan-task`, `work-on-task`, and `review-pr` catalog steps so only explicitly fork-root parent steps run in forked context.
483
-
484
- ### Technical
485
- - Added regression coverage for symbolized/string fork-context normalization in child-step materialization paths.
486
-
487
- ## [0.41.11] - 2026-04-01
488
-
489
- ### Fixed
490
- - Restored parent-only fork semantics for split-subtree execution by preventing canonical child-step `context: fork` defaults from being materialized onto generated subtree children (notably `plan-task` and `work-on-task`).
491
- - Updated workflow-backed child-step rendering to strip inherited fork context/provider metadata when the child did not explicitly declare fork settings.
492
-
493
- ### Technical
494
- - Added regression coverage for split-subtree child materialization and scoped status output to ensure child `plan-task` does not emit fork-execution guidance.
495
-
496
- ## [0.41.10] - 2026-03-31
497
-
498
- ### Changed
499
- - Role-based assignment execution defaults.
500
-
501
- ## [0.41.9] - 2026-03-31
502
-
503
- ### Changed
504
- - Updated task archival commands to persist task-state transitions during workflow execution using `--gc`/`--git-commit` modes in terminal task completion steps.
505
-
506
- ## [0.41.8] - 2026-03-30
507
-
508
- ### Fixed
509
- - Clarified the shipped `wfi://release/publish` workflow release contract so root changelog updates consistently include package versions and RubyGems propagation proof guidance.
510
-
511
- ## [0.41.7] - 2026-03-30
512
-
513
- ### Fixed
514
- - Made the shipped `wfi://release/publish` workflow verify modified packages with package-scoped `ace-test` execution derived from the resolved release set.
515
-
516
- ## [0.41.6] - 2026-03-29
517
-
518
- ### Added
519
- - Added a shipped generic `wfi://release/publish` workflow under `ace-assign` so `work-on-task` release steps have a default resolvable path in plain projects.
520
-
521
- ### Fixed
522
- - Aligned `assign.source` `wfi://` resolution with registered/default nav workflow sources by removing implicit workspace workflow-directory fallback behavior.
523
- - Added resolver coverage for project-level `wfi://` workflow overrides and for unregistered-workflow failure behavior.
524
-
525
- ## [0.41.5] - 2026-03-29
526
-
527
- ### Technical
528
- - Normalized published gem metadata so RubyGems and Ruby Toolbox use current release information instead of the 1980 fallback date.
529
-
530
- ## [0.41.4] - 2026-03-29
531
-
532
- ### Technical
533
- - Added `when_to_skip` entry for unreleased-mode branches to the `squash-changelog` catalog step.
534
-
535
- ## [0.41.3] - 2026-03-29
536
-
537
- ### Changed
538
- - Reused one resolved provider value in `ace-assign fork-run` for both runtime display and launcher execution flow.
539
-
540
- ### Technical
541
- - Clarified inline documentation of intentional fork-context merge semantics in `AssignmentExecutor` (`=` overwrite for generated children, `||=` default-preserve for materialized explicit steps).
542
-
543
- ## [0.41.2] - 2026-03-29
544
-
545
- ### Fixed
546
- - Updated scoped `ace-assign status` output (text and JSON `current_step`) to show the effective fork provider inherited from the scoped fork root when the active child has no local provider.
547
- - Removed unreachable symbol-key provider fallback in `Step#fork_provider` now that fork options are normalized to string keys.
548
-
549
- ### Technical
550
- - Added scoped status regression tests covering fork-provider display/serialization for fork-root scope (`@010`) with active child steps.
551
- - Documented intentional fork-context propagation semantics in `AssignmentExecutor` (generated child-step overwrite vs explicit-step default-preserve behavior).
552
-
553
- ## [0.41.1] - 2026-03-29
554
-
555
- ### Fixed
556
- - Preserved catalog `context.fork` provider overrides for explicit `skill`-backed step materialization so step-level fork provider precedence is applied correctly.
557
- - Kept fork child-step behavior stable by avoiding implicit fork-context propagation from canonical metadata when children do not explicitly declare fork context.
558
-
559
- ### Technical
560
- - Added regression coverage for explicit `skill` and explicit `workflow` materialization paths to ensure catalog fork overrides are retained.
561
-
562
- ## [0.41.0] - 2026-03-28
563
-
564
- ### Added
565
- - Added per-step fork provider overrides via step frontmatter `fork.provider`.
566
- - Added `fork_provider` exposure in `ace-assign status` current-step output and `--format json` payloads.
567
-
568
- ### Changed
569
- - Updated `ace-assign fork-run` provider precedence to: CLI `--provider` > step `fork.provider` > config `execution.provider` > default.
570
- - Extended skill/catalog step materialization to carry `context.fork` options into generated step metadata.
571
-
572
- ### Technical
573
- - Added coverage for step model/parser/scanner fork-option round-trip, fork-run provider precedence, status serialization/display, and executor composition behavior.
574
- - Updated usage and fork-context docs with `fork.provider` examples and precedence rules.
575
-
576
- ## [0.40.4] - 2026-03-29
577
-
578
- ### Fixed
579
- - Bumped dependency constraints to currently available `~>` ranges on RubyGems and updated release metadata after dependency synchronization.
580
-
581
- ## [0.40.3] - 2026-03-27
582
-
583
- ### Fixed
584
- - Corrected `ace-assign add` documentation examples to match the mutually exclusive add-mode contract (`--yaml`, `--step`, or `--task`).
585
- - Replaced invalid preset-step examples in docs with preset-backed step names that resolve under the current `--step` behavior.
586
-
587
- ## [0.40.2] - 2026-03-27
588
-
589
- ### Fixed
590
- - Validated preset names before file resolution to block invalid path-like preset inputs.
591
- - Added `ace-assign add --task` task-reference existence validation before mutating assignment queues.
592
- - Corrected `ace-assign add --task` insertion semantics to honor `--child`; explicit `--after` without `--child` now inserts as a sibling.
593
- - Added explicit preset-step resolver errors when presets define no usable `steps` array.
594
-
595
- ### Technical
596
- - Added regression coverage for preset-name validation and empty-preset-step diagnostics.
597
- - Added `add --task` coverage for task-ref validation and sibling insertion with `--after` when `--child` is not set.
598
- - Added end-to-end CLI coverage for `ace-assign create --task` assignment and step-file materialization.
599
-
600
- ## [0.40.1] - 2026-03-27
601
-
602
- ### Fixed
603
- - Updated task-driven preset guard checks to evaluate active resolved refs after terminal filtering, preventing false single-task preset rejections on mixed terminal/non-terminal inputs.
604
- - Preserved parent refs during taskref expansion when all subtasks are terminal, preventing empty expansion results from valid parent-task inputs.
605
- - Normalized `detect_batch_parent` fallback return behavior to preserve nil semantics when no batch parent is found.
606
-
607
- ### Technical
608
- - Made hidden task-driven job specs use unique filenames to preserve assignment source-config provenance across repeated create flows.
609
- - Updated command coverage for randomized hidden job filename generation.
610
-
611
- ## [0.40.0] - 2026-03-27
612
-
613
- ### Added
614
- - Added flags-only `ace-assign create --task ...` support for preset-based assignment creation from task refs, including multi-task input.
615
- - Added a shared `TaskAssignmentCreator` path so direct `create --task` and `ace-overseer` launch use the same preset expansion and hidden job generation behavior.
616
-
617
- ### Changed
618
- - Replaced positional `ace-assign create CONFIG` with explicit `--yaml` and `--task` modes.
619
- - Updated `work-on-task` task-child expansion so generated `work-on-{{item}}` roots include the full `task/work` sub-step sequence, including `pre-commit-review`, `release-minor`, and `create-retro`.
620
- - Refreshed docs and workflow wording to use the explicit `ace-assign create --yaml ...` contract.
621
-
622
- ### Technical
623
- - Added command coverage for create-mode validation and task-driven creation edge cases.
624
- - Added `ace-task` as a runtime dependency for task-ref-based creation.
625
-
626
- ## [0.39.1] - 2026-03-27
627
-
628
- ### Fixed
629
- - Updated the `as-assign-add-task` workflow and related docs to use the current `ace-assign add --yaml` contract instead of removed `--from` usage.
630
- - Refreshed preset step insertion name resolution to re-read queue names between insertions, preventing stale iteration-name collisions when canonical expansion adds additional steps.
631
- - Added debug-time warnings for unexpanded `{{token}}` placeholders in `--task` preset templates.
632
-
633
- ### Technical
634
- - Added regression coverage for preset insertion name-refresh behavior across canonical subtree expansion.
635
- - Added regression coverage for unexpanded template-token warnings in debug `--task` mode.
636
- - Normalized `detect_batch_parent` return semantics to always return a string value.
637
-
638
- ## [0.39.0] - 2026-03-27
639
-
640
- ### Added
641
- - Added preset-aware `ace-assign add --step <name[,name...]>` mode with exact-first and base-name fallback resolution.
642
- - Added preset-aware `ace-assign add --task <ref>` mode using preset `expansion.child-template` with automatic batch-parent detection.
643
- - Added new preset insertion support modules: `PresetLoader`, `PresetStepResolver`, and `PresetInferrer`.
644
-
645
- ### Changed
646
- - Replaced legacy `ace-assign add` insertion contract with exactly one required mode: `--yaml`, `--step`, or `--task`.
647
- - Renamed YAML file insertion flag from `--from` to canonical `--yaml`.
648
- - Removed positional `name` insertion mode in favor of explicit `--step`.
649
-
650
- ### Technical
651
- - Expanded command and atom/molecule test coverage for mode validation, preset loading, step resolution, auto-iteration naming, and preset inference fallback behavior.
652
-
653
- ## [0.38.3] - 2026-03-27
654
-
655
- ### Added
656
- - Added `ace-assign add --from <file>` to insert multiple steps from YAML, including nested `sub_steps` expansion.
657
- - Added the `as-assign-add-task` skill and `wfi://assign/add-task` workflow for guided subtree insertion.
658
-
659
- ### Fixed
660
- - Prevalidated full `add_batch` trees before mutating assignment queues, preventing partial insertion when later batch entries are invalid.
661
- - Normalized nested batch child-depth overflow handling by converting `StepNumbering` depth `ArgumentError` into `Ace::Assign::Error`.
662
- - Routed workflow/skill/sub-step batch insertions through canonical subtree expansion and materialization.
663
- - Reworded executor-level child insertion validation to domain language so non-CLI callers are not coupled to CLI flag syntax.
664
- - Removed stale add-task child-step hardcoding drift by relying on workflow `assign.sub-steps` resolution at insertion time.
665
-
666
- ### Changed
667
- - Extended assignment insertion execution with batch insertion support and frontmatter passthrough for inserted steps.
668
- - Unified dynamic step default instructions under a single `AssignmentExecutor::DEFAULT_DYNAMIC_STEP_INSTRUCTIONS` source.
669
- - Limited canonical batch expansion to explicit `workflow`, `skill`, or declared `sub_steps` inputs, preserving prior numbering behavior for plain flat batch inserts.
670
- - Updated usage, getting-started, and handbook docs to cover the new `add --from` workflow.
671
- - Updated `record-demo` step instructions to require diagnosis before skipping on failure -- agents must check config, available fonts, and spike findings before reporting a non-blocking skip.
672
- - Added `decision_notes.non_blocking_policy` to `record-demo` step catalog entry clarifying that "non-blocking" means "diagnose and retry before skipping," not "skip on first failure."
673
-
674
- ### Technical
675
- - Expanded command and executor coverage for `--from` validation, child rebalance behavior, and metadata preservation.
676
- - Added regression tests for batch insertion validation, depth overflow, and workflow-backed inserts.
677
- - Renamed add-command local boolean flags to predicate-style names (`name_given`, `from_given`) for readability.
678
-
679
- ## [0.38.2] - 2026-03-26
680
-
681
- ### Changed
682
- - Updated `work-on-task` prepare/create filtering guidance to treat terminal task statuses (`done`, `skipped`, `cancelled`) as filtered refs and abort all-terminal requests before assignment creation.
683
- - Updated no-op messaging and edge-case language across prepare/create workflow instructions and usage docs to match the terminal-status contract.
684
-
685
- ### Technical
686
- - Replaced fragile done-filter workflow contract assertions with stronger section-scoped terminal-contract checks.
687
- - Moved the contract test into the standard `test/organisms/` bucket and removed the nonstandard `test/workflows/` location.
688
-
689
- ## [0.38.1] - 2026-03-26
690
-
691
- ### Technical
692
- - Added regression coverage for `work-on-task` done-task filtering contracts, including mixed done/non-done handling, all-done no-op behavior, and create-flow no hidden-spec/`ace-assign create` guard assertions.
693
-
694
- ## [0.38.0] - 2026-03-26
695
-
696
- ### Added
697
- - Added explicit done-task filtering rules to `assign/prepare` so `work-on-task` requests resolve refs first, skip `status: done` refs, continue mixed sets, and abort all-done sets before queue generation.
698
- - Added `record-demo` step to the assignment step catalog for recording and attaching terminal demos to PRs.
699
- - Added composition rules positioning `record-demo` between `push-to-remote` and `update-pr-desc`.
700
- - Added `record-demo` to the `implement-with-pr` recipe as an optional step.
701
-
702
- ### Changed
703
- - Updated `assign/create` workflow guidance so Path B respects filtered taskrefs from prepare and skips hidden-spec render/`ace-assign create` when all requested refs are already done.
704
- - Updated usage docs with `work-on-task` prepare/create filtering behavior and no-assignment outcomes for all-done inputs.
705
- - Updated `work-on-task` preset with step 145 (`record-demo`) that reads demo scenarios from task specs, validates with dry-run, and records with proper fixture/sandbox patterns.
706
-
707
- ## [0.37.0] - 2026-03-23
708
-
709
- ### Changed
710
- - Rewrote README with step/substep terminology, real `ace-assign status` output example, ace-overseer onboarding path, and links to step catalog, presets, and composition rules.
711
- - Replaced residual "phases" terminology with "steps" in docs/handbook.md, docs/getting-started.md, and e2e fixture directories.
712
- - Fixed broken "See Also" links in docs/exit-codes.md pointing to non-existent README anchors.
713
-
714
- ### Technical
715
- - Normalized code formatting across 40+ lib and test files via StandardRB autofix (style-only, no behavior changes).
716
-
717
- ## [0.36.13] - 2026-03-23
718
-
719
- ### Changed
720
- - Refreshed `README.md` to the current package layout pattern with logo/badges header, compatibility line, quick links, and use-case-oriented overview content.
721
- - Updated README skill inventory to include `as-assign-recover-fork` and aligned the footer to the canonical ACE package format.
722
-
723
- ## [0.36.12] - 2026-03-22
724
-
725
- ### Fixed
726
- - Unified assignment preset naming to `work-on-task` by removing `work-on-tasks` from defaults and fixtures.
727
- - Restored single-task shorthand support by normalizing `--taskref` inputs to `taskrefs` during preset validation/expansion.
728
-
729
- ### Changed
730
- - Updated assign prepare workflow/skill docs and E2E fixture expectations to treat `work-on-task` as the single canonical preset for single-task and batch flows.
731
-
732
- ## [0.36.11] - 2026-03-22
733
-
734
- ### Fixed
735
- - Restored the `ace-assign` default fork timeout to `1800` in `ace-assign/.ace-defaults/assign/config.yml`.
736
-
737
- ### Changed
738
- - Realigned assignment default provider/timeout guidance in `.ace/assign/config.yml` with package defaults for this release cycle.
739
-
740
- ## [0.36.10] - 2026-03-22
741
-
742
- ### Changed
743
- - Documented assignment config provider/timeout default tuning in release notes for `.ace/assign/config.yml` and `ace-assign/.ace-defaults/assign/config.yml`.
744
- - Restored missing trailing newline in `handbook/workflow-instructions/assign/run-in-batches.wf.md`.
745
-
746
- ## [0.36.9] - 2026-03-22
747
-
748
- ### Changed
749
- - Remove `mise exec --` wrapper from test fixture strings to match updated command invocation style.
750
- - Clarified release notes for this version to include shipped assignment default config tuning in `.ace/assign/config.yml` and `ace-assign/.ace-defaults/assign/config.yml` (provider/timeout defaults).
751
-
752
- ## [0.36.8] - 2026-03-22
753
-
754
- ### Fixed
755
- - Mark task completion flows to archive tasks as well in both single-task and batch presets.
756
- - Load task-done updates through the canonical `wfi://task/update` workflow and ensure parent-task closure updates are archived.
757
-
758
- ## [0.36.7] - 2026-03-22
759
-
760
- ### Fixed
761
- - `mark-task-done` step now checks and closes parent tasks when all children are done, preventing status drift in task hierarchies.
762
-
763
- ## [0.36.6] - 2026-03-22
764
-
765
- ### Changed
766
- - Add `create-retro` as the final child step in review-cycle fork subtrees, ensuring each review cycle captures its own retrospective.
767
- - Add ordering rules (`retro-after-release`, `retro-after-apply-feedback`) to composition rules.
768
- - Declare `review-sessions` as consumed input for the `create-retro` step.
769
-
770
- ## [0.36.5] - 2026-03-22
771
-
772
- ### Technical
773
- - Clarified release notes to document the intentional `codex:gpt@yolo` assignment default required for current Codex CLI compatibility.
774
-
775
- ## [0.36.4] - 2026-03-22
776
-
777
- ### Fixed
778
- - Clarified that assignment execution remains on `codex:gpt@yolo` because the current Codex CLI cannot combine `--full-auto` with `--dangerously-bypass-approvals-and-sandbox`.
779
-
780
- ## [0.36.3] - 2026-03-22
781
-
782
- ### Fixed
783
- - Clarified the documented assignment execution default after docs drift described it as `codex:codex@yolo` instead of the intentional `codex:gpt@yolo`.
784
-
785
- ## [0.36.2] - 2026-03-22
786
-
787
- ### Fixed
788
- - Remove trailing empty lines in code blocks across documentation files.
789
-
790
- ## [0.36.1] - 2026-03-22
791
-
792
- ### Fixed
793
- - Include `docs/**/*` in gemspec so documentation ships with the gem.
794
- - Remove piped command example from usage guide to align with command-integrity contract.
795
-
796
- ## [0.36.0] - 2026-03-22
797
-
798
- ### Added
799
- - Added tutorial-style `docs/getting-started.md` and `docs/handbook.md` for clearer onboarding and package workflow discovery
800
- - Added `docs/demo/ace-assign-getting-started.tape` and `docs/demo/ace-assign-getting-started.gif` demo artifacts
801
-
802
- ### Changed
803
- - Rewrote `README.md` as a concise landing page with value-first messaging and documentation links
804
- - Refreshed `docs/usage.md` to align with current CLI commands, scoped assignment examples, and command-integrity guidance
805
- - Updated gemspec summary/description text to match the new README tagline and positioning
806
-
807
- ## [0.35.1] - 2026-03-21
808
-
809
- ### Added
810
- - `mark-tasks-done` step (number 155) in `work-on-tasks` preset to mark parent/umbrella tasks as done after all subtask forks complete
811
-
812
- ## [0.35.0] - 2026-03-21
813
-
814
- ### Added
815
- - `create-retro` step in `work-on-task` and `work-on-tasks` presets to capture process learnings after each assignment
816
-
817
- ### Changed
818
- - `verify-e2e` step now runs E2E tests with fix loops (up to 3 cycles) instead of only reviewing coverage; runs in forked context
819
- - `update-pr-desc` step now runs in forked context to prevent context-pressure truncation of grouped-stats output
820
-
821
- ## [0.34.1] - 2026-03-18
822
-
823
- ### Changed
824
- - Added `unit-coverage-reviewed` decision evidence to `TS-ASSIGN-001` and `TS-ASSIGN-002` E2E scenarios to map coverage against related unit tests.
825
-
826
- ## [0.34.0] - 2026-03-18
827
-
828
- ### Changed
829
- - Renamed "phases" to "steps" throughout the assignment system: models, atoms, molecules, organisms, CLI commands, config, catalog, and all user-facing strings
830
- - Renamed file extension from `.ph.md` to `.st.md` for step files
831
- - Renamed catalog directory from `catalog/phases/` to `catalog/steps/` and files from `*.phase.yml` to `*.step.yml`
832
- - Renamed YAML keys: `sub-phases` → `sub-steps`, `sub_phases` → `sub_steps`
833
-
834
- ### Fixed
835
- - `AssignmentExecutor.start` now reads `config["steps"]` matching what `AssignmentLauncher.write_job_file` writes (was reading `config["phases"]`, causing "No phases defined in config" error)
836
-
837
- ## [0.33.1] - 2026-03-18
838
-
839
- ### Changed
840
- - Migrated CLI namespace from `Ace::Core::CLI::*` to `Ace::Support::Cli::*` (ace-support-cli is now the canonical home for CLI infrastructure).
841
-
842
-
843
- ## [0.33.0] - 2026-03-18
844
-
845
- ### Changed
846
- - Removed legacy backward-compatibility behavior as part of the 0.10 cleanup release.
847
-
848
-
849
- ## [0.32.4] - 2026-03-15
850
-
851
- ### Technical
852
- - Optimized test suite I/O: reuse one tmpdir per test class instead of creating/destroying per test method (~176 → ~16 tmpdir cycles)
853
- - Removed 2 unnecessary `sleep(0.1)` calls in assignment manager tests (200ms saved)
854
- - Converted bare `Dir.mktmpdir` calls to shared class-level tmpdir in fork session launcher tests
855
-
856
- ## [0.32.3] - 2026-03-15
857
-
858
- ### Fixed
859
- - Release step catalog entry now references `wfi://release/publish` workflow
860
- - Review cycle release instructions in work-on-task and work-on-tasks presets now point to `ace-bundle wfi://release/publish`
861
-
862
- ### Changed
863
- - Drive workflow batch continuation rule prevents driver from pausing between child fork-runs
864
- - Drive workflow adds transient network failure retry guidance (wait 30s, re-fork once)
865
-
866
- ## [0.32.2] - 2026-03-15
867
-
868
- ### Changed
869
- - Migrated CLI framework from dry-cli to ace-support-cli
870
-
871
- ## [0.32.1] - 2026-03-13
872
-
873
- ### Fixed
874
- - Rendered `verify-test-suite` and `verify-e2e` assignment steps now use assignment-safe step templates instead of persisting the full broad audit workflow bodies.
875
- - Cleaned assignment overlay serialization so generated child steps no longer leak nested `Assignment-specific context` / `Task context` headers or malformed double bullets.
876
-
877
- ### Technical
878
- - Preserved local assignment render metadata when canonical step catalog entries merge with workflow-backed skill metadata.
879
- - Added regression coverage for step-template rendering and structural assignment-overlay cleanup.
880
-
881
- ## [0.32.0] - 2026-03-13
882
-
883
- ### Changed
884
- - Switched generated assignment artifacts for public steps to use workflow-backed execution references instead of generated `skill:` step contracts.
885
- - Restored assignment-specific orchestration overlays for `work-on-task` and `work-on-tasks` while keeping canonical workflow bodies as the reusable execution source.
886
-
887
- ### Technical
888
- - Promoted `workflow` to a first-class parsed/runtime step field across assignment status, queue scanning, and step persistence.
889
- - Updated assign resolver, executor, presets, and regression fixtures to materialize public steps from canonical workflow bodies with provenance metadata.
890
-
891
- ## [0.31.5] - 2026-03-13
892
-
893
- ### Technical
894
- - Completed canonical assign skill catalog composition and workflow-backed step metadata wiring for public assignments.
895
-
896
- ## [0.31.4] - 2026-03-13
897
-
898
- ### Changed
899
- - Updated canonical assign skills to explicitly run bundled workflows in the current project and execute them end-to-end.
900
-
901
- ## [0.31.3] - 2026-03-13
902
-
903
- ### Added
904
- - Added pre-flight prerequisite validation to `TC-005-no-skip-policy` fixture setup so scenario runs verify required workflow and skill files exist before policy checks execute.
905
-
906
- ### Technical
907
- - Hardened `TS-ASSIGN-001` fixture setup and verification flow by capturing pre-flight exit status and output artifacts.
908
-
909
- ## [0.31.2] - 2026-03-12
910
-
911
- ### Changed
912
- - Updated the prepare-workflow E2E fixtures to use the current top-level `steps:` schema for single-task and batch workflows.
913
- - Refreshed hierarchy E2E guidance to capture copied auto-completion reports and to use the current fixture layout under `fixtures/*/jobs/`.
914
-
915
- ## [0.31.1] - 2026-03-10
916
-
917
- ### Fixed
918
- - Restored canonical skill resolution to honor nav source priority while preserving package-default fallback discovery for local monorepo workflows and tests.
919
-
920
- ### Changed
921
- - Added a runtime dependency on `ace-support-nav` so assignment skill discovery shares the same source registry semantics as `skill://` navigation.
922
-
923
- ### Technical
924
- - Replaced invalid shell-tool allowances in canonical assignment skills with repo-approved tooling metadata and expanded resolver regression coverage for override precedence.
925
-
926
- ## [0.31.0] - 2026-03-09
927
-
928
- ### Changed
929
- - Switched `SkillAssignSourceResolver` defaults to canonical `skill-sources` discovery and removed hardcoded provider-tree fallback paths as the primary model.
930
- - Updated assign defaults and compose workflow guidance to describe compatibility catalog entries as non-authoritative inputs.
931
-
932
- ### Technical
933
- - Updated resolver and assignment executor regression fixtures to register canonical skill sources (`handbook/skills`) instead of relying on `.claude/skills` defaults.
934
- - Clarified vision documentation that canonical skills live in package `handbook/skills` and provider trees are generated projections.
935
-
936
- ## [0.30.0] - 2026-03-09
937
-
938
- ### Added
939
- - Added canonical workflow skills for assignment operations: `as-assign-compose`, `as-assign-create`, `as-assign-drive`, `as-assign-prepare`, and `as-assign-run-in-batches` under `handbook/skills/`.
940
-
941
- ### Changed
942
- - Expanded `skill://` canonical discovery coverage for `ace-assign` beyond the initial single-skill seed.
943
-
944
-
945
- ## [0.29.0] - 2026-03-09
946
-
947
- ### Added
948
- - Canonical skill resolution in `SkillAssignSourceResolver` with assign-capable filtering by `skill.kind` and `assign.source`
949
- - Step catalog reordering in `AssignmentExecutor` to prioritize canonical assign-capable skills over compatibility bridge entries
950
-
951
- ## [0.28.0] - 2026-03-09
952
-
953
- ### Added
954
- - Added `skill-sources` gem defaults registration at `.ace-defaults/nav/protocols/skill-sources/ace-assign.yml` so `skill://` can discover canonical `handbook/skills` entries from `ace-assign`.
955
-
956
- ## [0.27.0] - 2026-03-09
957
-
958
- ### Added
959
- - Added canonical orchestration skill example at `handbook/skills/as-assign-start/SKILL.md` for typed skill taxonomy tracing.
960
- - Restored `assign/start` as a legacy compatibility workflow binding for canonical orchestration skill discovery.
961
-
962
- ### Changed
963
- - Added projected provider-facing `.agent/skills/as-assign-start/SKILL.md` entry for representative orchestration skill parity.
964
-
965
- ## [0.26.2] - 2026-03-08
966
-
967
- ### Changed
968
- - Clarified batch-parallel scheduling in `assign/drive` and `assign/run-in-batches`: `max_parallel` is a rolling in-flight concurrency cap (slot refill), not a fixed wave size.
969
- - Added explicit rolling scheduler-loop guidance for parallel batch execution in `assign/drive`.
970
- - Added user-document tracking frontmatter to `ace-assign` user docs (`README.md`, `docs/usage.md`).
971
-
972
- ### Technical
973
- - Added missing guide frontmatter to `handbook/guides/fork-context.g.md` so package docs are consistently tracked by `ace-docs`.
974
-
975
-
976
- ## [0.26.1] - 2026-03-08
977
-
978
- ### Fixed
979
- - `fork-run` now marks scoped leaf fork roots as `in_progress` before launching, preventing pending-state drift that could trigger repeated self-delegation loops in batch child execution.
980
- - Scoped `status` output no longer shows fork execution guidance for already-completed fork steps.
981
-
982
- ### Changed
983
- - Updated `assign/drive` workflow delegation rules to explicitly prevent calling `fork-run` again when already operating inside the same scoped fork boundary.
984
-
985
- ### Technical
986
- - Added regressions for leaf-root fork activation and scoped done-step status guidance behavior.
987
-
988
- ## [0.26.0] - 2026-03-08
989
-
990
- ### Added
991
- - Added batch scheduling metadata (`batch_parent`, `parallel`, `max_parallel`, `fork_retry_limit`) to step parsing/model/status JSON so assignment drivers can orchestrate controlled fork fan-out.
992
- - Added `--max-parallel` guidance to run-in-batches workflow/skill contracts with default parallel cap semantics.
993
-
994
- ### Fixed
995
- - Corrected status `FORK` column semantics to reflect `context: fork` instead of child presence, preventing non-fork batch parents from being misinterpreted as fork targets.
996
-
997
- ### Changed
998
- - Updated run-in-batches guidance so `--sequential` now preserves per-item fork execution while switching scheduler mode to sequential metadata.
999
- - Updated drive workflow delegation guidance to use fork-context signals and document retry-then-stop behavior for parallel child failures.
1000
-
1001
- ## [0.25.1] - 2026-03-08
1002
-
1003
- ### Changed
1004
- - Removed the legacy `as-assign-start` compatibility skill entrypoint.
1005
-
1006
- ### Technical
1007
- - Removed the `assign/start` legacy compatibility workflow file and retained `assign/create` as the public creation flow.
1008
-
1009
- ## [0.25.0] - 2026-03-08
1010
-
1011
- ### Added
1012
- - Added phrase-intent metadata (`intent.phrases`) for core compose targets: `work-on-task`, `verify-test-suite`, `reorganize-commits`, `push-to-remote`, `create-pr`, and `update-pr-desc`.
1013
- - Added new compose-target steps `squash-changelog` and `rebase-with-main` with skill mappings to `as-docs-squash-changelog` and `as-git-rebase`.
1014
-
1015
- ### Changed
1016
- - Reworked `assign/create` workflow to support preset input, explicit step-list intent, freeform high-level intent, and job-file passthrough while preserving deterministic `ace-assign create FILE` runtime boundary.
1017
- - Reworked `assign/compose` workflow with deterministic phrase matching, explicit-intent precedence, and named hard-rule reorder explanations.
1018
- - Extended composition hard-ordering guidance with `squash-before-rebase`, `rebase-before-push`, and `rebase-before-update-pr`.
1019
-
1020
- ### Technical
1021
- - Added workflow-level guidance clarifying that skill-backed step expansion stays runtime-owned via `assign.source` during `ace-assign create`.
1022
-
1023
- ## [0.24.0] - 2026-03-08
1024
-
1025
- ### Added
1026
- - Added `codex` to the default `subtree.native_review_clients` allow-list so subtree pre-commit review can use native `/review` in Codex runtimes.
1027
-
1028
- ### Technical
1029
- - Updated assignment-executor skill-source regression fixtures to the current `wfi://task/work` resolution path and `ace-task` workflow layout.
1030
-
1031
- ## [0.23.1] - 2026-03-08
1032
-
1033
- ### Fixed
1034
- - Updated assignment release guidance so `release*` child steps consistently route through `/as-release`, including suffixed review-cycle release steps.
1035
-
1036
- ### Changed
1037
- - Updated release step, preset, and fixture instructions to describe coordinated multi-package releases and both package and root changelog updates.
1038
-
1039
- ## [0.23.0] - 2026-03-08
1040
-
1041
- ### Changed
1042
- - Remove hardcoded `providers.cli_args` config; use ace-llm `@preset` suffixes for provider permission flags
1043
- - Reframed the public assignment UX around `as-assign-create` + `as-assign-drive`, including explicit `--run` create-to-drive handoff guidance in the create workflow.
1044
- - Reclassified `as-assign-start` and `as-assign-prepare` as legacy/internal compatibility skills (`user-invocable: false`) so they are no longer presented as primary public entrypoints.
1045
-
1046
- ### Technical
1047
- - Updated `assign/start` workflow positioning and fixture usage comments to stop teaching prepare/start as the recommended public flow.
1048
- - Expanded task usage documentation for this slice with explicit create-only, create-then-drive, and advanced `ace-assign create FILE` scenarios plus `--run` edge handling notes.
1049
-
1050
- ## [0.22.7] - 2026-03-08
1051
-
1052
- ### Technical
1053
- - Stabilized create-command path-relativity test setup by pinning `PROJECT_ROOT_PATH` to the temp workspace and clearing `ProjectRootFinder` cache around the test.
1054
-
1055
- ## [0.22.6] - 2026-03-08
1056
-
1057
- ### Fixed
1058
- - Rebalanced active step selection after `add --child` when injecting under the currently active step so execution moves into the newly created child subtree.
1059
-
1060
- ### Technical
1061
- - Added `StepWriter#mark_pending` to clear runtime-only step state when demoting blocked active parents.
1062
- - Added regression coverage for active-step rebalance behavior in parent/child/grandchild injection flows and for the new pending-state writer helper.
1063
- - Hardened TS-ASSIGN-002 Goal 5 artifacts to require JSON status oracles for scoped and unscoped assertions, reducing false positives from report synthesis drift.
1064
-
1065
- ## [0.22.5] - 2026-03-07
1066
-
1067
- ### Technical
1068
- - Updated create-command path-relativity test setup to run from the temporary cache directory so `Created:` output remains relative when expected.
1069
-
1070
- ## [0.22.4] - 2026-03-07
1071
-
1072
- ### Technical
1073
- - **ace-assign v0.22.4**: Removed no-op release entries from package changelog history (`0.22.3`, `0.22.1`) and refactored a create-command path-relativity test to use the shared temporary cache helper.
1074
-
1075
- ## [0.22.2] - 2026-03-07
1076
-
1077
- ### Fixed
1078
- - Normalized `ace-assign create` output path formatting so `Created:` and `Created from hidden spec:` use the same display-path strategy.
1079
-
1080
- ### Technical
1081
- - Added regression coverage for relative create output formatting and legacy `steps/` source-config path preservation.
1082
-
1083
- ## [0.22.0] - 2026-03-07
1084
-
1085
- ### Added
1086
- - `ace-assign create` now reports hidden-spec provenance with `Created from hidden spec: ...` when source config is under `.ace-local/assign/jobs/`.
1087
- - Added create-command and assignment-executor coverage for hidden-spec path retention and provenance output.
1088
-
1089
- ### Changed
1090
- - Assignment source-config archiving now preserves existing `jobs/` paths (including hidden specs in `.ace-local/assign/jobs/`) and archives non-job source configs into `<task>/jobs/<assignment-id>-job.yml` instead of `steps/`.
1091
- - `assign/create` workflow and `as-assign-create` skill contract now document the tracer path `work-on-task --taskref <id>` with hidden-spec rendering and deterministic `ace-assign create FILE` handoff.
1092
-
1093
- ## [0.21.3] - 2026-03-07
1094
-
1095
- ### Technical
1096
- - Completed shine-cycle assignment release step for PR #241: review execution remained blocked by upstream provider broken-pipe errors, and apply-feedback confirmed no pending items to apply.
1097
-
1098
- ## [0.21.2] - 2026-03-07
1099
-
1100
- ### Technical
1101
- - Completed fit-cycle assignment release step for PR #241: review execution failed upstream with provider broken-pipe errors, and apply-feedback confirmed no pending items in session context.
1102
-
1103
- ## [0.21.1] - 2026-03-07
1104
-
1105
- ### Technical
1106
- - Completed valid-cycle feedback application pass for PR #241 and confirmed there were no pending medium+ review feedback items to apply before release.
1107
-
1108
- ## [0.21.0] - 2026-03-07
1109
-
1110
- ### Added
1111
- - New `pre-commit-review` step catalog entry for subtree task workflows, enabling native client review gate behavior before verification/release.
1112
- - New subtree review defaults in assign config: `pre_commit_review`, `pre_commit_review_provider`, `pre_commit_review_block`, and `native_review_clients`.
1113
-
1114
- ### Changed
1115
- - `task/work` workflow sub-step sequence now includes `pre-commit-review` between `work-on-task` and `verify-test`.
1116
- - Child step instruction generation now renders config-aware native review run/skip/block guidance for `pre-commit-review`.
1117
-
1118
- ## [0.20.1] - 2026-03-05
1119
-
1120
- ### Fixed
1121
- - `fork-run` stall detection now targets the in-progress step within the subtree (`in_progress_in_subtree`) instead of the global current step, preventing `stall_reason` from being written to the wrong step during parallel fork execution.
1122
- - Stall-reason clearing on successful rerun now skips steps that never had a `stall_reason`, avoiding unnecessary file I/O on every subtree step.
1123
-
1124
- ## [0.20.0] - 2026-03-05
1125
-
1126
- ### Added
1127
- - Provider-specific session detection fallback in `ForkSessionLauncher` -- when a provider doesn't return a native `session_id`, scans local session storage via `SessionFinder` to detect the forked session by prompt matching.
1128
- - Session metadata file (`<root>-session.yml`) written for every fork run, capturing `session_id`, `provider`, `model`, and `completed_at` for traceability.
1129
- - Stall error messages now include `Session: <id>` when session metadata is available, enabling direct trace to agent session.
1130
-
1131
- ## [0.19.3] - 2026-03-05
1132
-
1133
- ### Technical
1134
- - Extracted `STALL_REASON_MAX = 2000` constant in `ForkRun` to replace magic number and serve as shared source of truth for production code and tests.
1135
- - Tightened truncation test assertion to pin exact expected output length rather than a loose upper bound.
1136
-
1137
- ## [0.19.2] - 2026-03-05
1138
-
1139
- ### Fixed
1140
- - Simplified Layer 1 last-message write in `ForkSessionLauncher` from check-then-write to a single read-based guard, reducing double file access and improving robustness.
1141
- - Multiline `stall_reason` values in `ace-assign status` output now display with indented continuation lines for readable terminal formatting.
1142
-
1143
- ### Technical
1144
- - Added `test_stall_reason_cleared_after_successful_rerun` regression test verifying `stall_reason` is cleared across all subtree steps after a successful rerun.
1145
-
1146
- ## [0.19.1] - 2026-03-05
1147
-
1148
- ### Fixed
1149
- - `read_last_message` now rescues `SystemCallError` to prevent I/O errors from masking the stall error message.
1150
- - Clear stale `stall_reason` from all subtree step files on successful fork-run completion, preventing misleading status after recovery.
1151
-
1152
- ### Technical
1153
- - Added comment in `ForkSessionLauncher` documenting the blocking assumption that makes the Layer 1 check-then-write pattern safe from concurrent writes.
1154
-
1155
- ## [0.19.0] - 2026-03-05
1156
-
1157
- ### Added
1158
- - Surface forked agent last message on stall: `fork-run` now reads the agent's last message from `<cache_dir>/sessions/<fork_root>-last-message.md` and includes it in the stall error output.
1159
- - `stall_reason` field added to Step model and frontmatter: persisted when a fork stall is detected, visible via `ace-assign status`.
1160
- - Two-layer last-message capture: `ForkSessionLauncher` writes `result[:text]` after session ends (Layer 1 for all providers); Codex gets timeout-resilient capture via `--output-last-message` (Layer 2).
1161
-
1162
- ## [0.18.2] - 2026-03-04
1163
-
1164
- ### Fixed
1165
- - Enforced single-active subtree invariants in fork execution paths: `fork-run` and scoped `advance` now reject multiple in-progress steps in the same subtree and reuse existing active subtree work instead of activating sibling steps.
1166
-
1167
- ### Changed
1168
- - QueueState now exposes `in_progress_steps` and `in_progress_in_subtree` helpers used by fork/scoped execution guards.
1169
-
1170
- ## [0.18.1] - 2026-03-04
1171
-
1172
- ### Changed
1173
- - Default assignment cache directory now uses `.ace-local/assign`.
1174
-
1175
-
1176
- ## [0.18.0] - 2026-03-04
1177
-
1178
- ### Changed
1179
- - Normalize `providers.cli_args` values to arrays and support mixed string/array CLI argument merging in fork launcher.
1180
-
1181
- ## [0.17.3] - 2026-03-04
1182
-
1183
- ### Changed
1184
- - Convert review cycles in assignment presets and prepare fixtures to forked cycle-parent steps with `sub_steps: [review-pr, apply-feedback, release]` for valid/fit/shine cycles
1185
- - Align compose recipes to the forked review-cycle model and set default `review_cycles` to 3
1186
- - Update assign compose/prepare workflow instructions and examples to document forked review-cycle expansion semantics
1187
-
1188
- ## [0.17.2] - 2026-03-04
1189
-
1190
- ### Fixed
1191
- - Workflow instructions (create, drive, start) corrected to use `.ace-local/assign/` path (not `.ace-local/ace-assign/`)
1192
-
1193
- ## [0.17.1] - 2026-03-04
1194
-
1195
- ### Fixed
1196
- - README assignment storage path corrected to short-name convention (`.ace-local/assign/` not `.ace-local/ace-assign/`)
1197
-
1198
- ## [0.17.0] - 2026-03-04
1199
-
1200
- ### Changed
1201
- - Default cache directory migrated from `.cache/ace-assign` to `.ace-local/assign`
1202
-
1203
- ## [0.16.2] - 2026-03-04
1204
-
1205
- ### Changed
1206
- - Rename PR skill references in assignment defaults from `ace-git-create-pr` / `ace-git-update-pr-desc` to `ace-github-pr-create` / `ace-github-pr-update`
1207
- - Update PR skill references in assign workflows and E2E fixture presets to the new `ace-github-pr-*` naming convention
1208
-
1209
- ## [0.16.1] - 2026-03-04
1210
-
1211
- ### Fixed
1212
- - Correct `.agents/skills` typo to `.agent/skills` in default config and `SkillAssignSourceResolver` -- skill discovery now uses the canonical provider-neutral path
1213
-
1214
- ## [0.16.0] - 2026-03-04
1215
-
1216
- ### Added
1217
- - New `onboard-base` catalog step -- loads base project context via `ace-bundle project-base`
1218
- - New `task-load` catalog step -- loads task behavioral spec via `ace-bundle task://<taskref>`
1219
- - Taskref placeholder substitution in catalog step descriptions -- `<taskref>` in step descriptions is replaced with actual task reference during child instruction building
1220
-
1221
- ### Changed
1222
- - Default assignment presets updated to use ace-task
1223
-
1224
- ### Fixed
1225
- - Apply session 8q2 learnings to workflow and presets
1226
-
1227
- ### Technical
1228
- - Increase timeout for hierarchy E2E scenario
1229
-
1230
- ## [0.15.1] - 2026-03-01
1231
-
1232
- ### Added
1233
- - Fork-run crash recovery protocol in drive workflow -- detection, commit partial work, progress report, inject recovery steps, re-fork pattern for partial completion scenarios
1234
-
1235
- ## [0.15.0] - 2026-02-28
1236
-
1237
- ### Added
1238
- - Add `verify-test-suite` step to `work-on-task` preset between `mark-task-done` and `verify-e2e` with profiling and performance budget enforcement
1239
- - Add `verify-test-suite` step (number 012) to `work-on-tasks` preset between batch-parent and `verify-e2e`
1240
- - Enrich `verify-test-suite` step catalog with structured steps: `run-package-tests`, `check-performance-budgets`, `fix-violations`, `run-suite`
1241
- - Add performance budget thresholds to step definition: atoms <50ms, molecules <100ms, integration <1s, full package <30s
1242
- - Move `verify-test-suite` from Optional to Core in compose workflow for "Implement + PR" and "Batch tasks" intents
1243
- - Add `verify-test-suite` inclusion guidance note to compose workflow Step Selection Guidelines
1244
-
1245
- ### Changed
1246
- - Strengthen `verify-test-suite` composition rule from `recommended` to `required` when assignment includes `work-on-task` or `fix-bug`
1247
-
1248
- ## [0.14.0] - 2026-02-28
1249
-
1250
- ### Added
1251
- - Add `verify-e2e` step to catalog: E2E coverage review and targeted scenario execution for modified packages
1252
- - Add `update-docs` step to catalog: public-facing documentation updates when CLI contracts or public APIs change
1253
- - Add `verify-e2e` and `update-docs` steps to `work-on-task` preset (between `mark-task-done` and `release-minor`, and between `release-minor` and `create-pr`)
1254
- - Add batch-level `verify-e2e` (step 015) and `update-docs` (step 025) to `work-on-tasks` preset
1255
- - Add ordering rules to `composition-rules.yml`: `e2e-before-release`, `update-docs-after-release`, `update-docs-before-pr`, `e2e-after-verify`
1256
- - Add conditional rule to suggest `verify-e2e` and `update-docs` when assignment touches CLI commands or public API
1257
- - Add `e2e-review-run-pair` and `docs-update-validate-pair` to composition pairs
1258
- - Update `compose.wf.md` Step Selection Guidelines table to include `verify-e2e` and `update-docs` in all relevant workflow intents with skip guidance
1259
-
1260
- ## [0.13.4] - 2026-02-26
1261
-
1262
- ### Fixed
1263
- - Restore scoped status filter compatibility by honoring legacy `filter` formats (`010.01` and `(assignment@)010.01`) while preserving explicit `--assignment` targeting precedence
1264
- - Restore scoped fork PID telemetry lines in `status` output (`Scoped Fork PID`, PID tree, and PID file path) when fork metadata exists
1265
-
1266
- ### Added
1267
- - Re-add explicit `--filter` option to `status` command for CLI-level backward compatibility
1268
- - Add regression coverage ensuring `assignment` target overrides `filter` when both are provided
1269
-
1270
- ## [0.13.3] - 2026-02-26
1271
-
1272
- ### Added
1273
- - Document `advance()` legacy bridge behavior with explanatory comment
1274
- - Add `start` and piped stdin examples to CLI `--help` output
1275
- - Add "Starting Work" section to `docs/usage.md` documenting sequential auto-advance, explicit `start`, and piped stdin
1276
-
1277
- ### Changed
1278
- - Use standard Keep a Changelog section headers (replace non-standard `Technical` with `Changed`)
1279
-
1280
- ## [0.13.2] - 2026-02-26
1281
-
1282
- ### Fixed
1283
- - Short-circuit stdin read in `finish` when `--report` file content is already present, preventing unnecessary I/O or blocking
1284
- - Narrow `rescue` in `read_stdin_if_piped` to `IOError, Errno::EBADF` instead of broad `StandardError`
1285
- - Validate `fork_root` existence in `find_target_step_for_start` consistently regardless of `step_number` presence
1286
-
1287
- ### Added
1288
- - Integration test for `finish` auto-advance and `start` conflict detection across sequential steps
1289
- - Test for `--report` file precedence over piped stdin when both are present
1290
-
1291
- ## [0.13.1] - 2026-02-26
1292
-
1293
- ### Fixed
1294
- - Raise `StepNotFoundError` in `start_step` and `finish_step` when `--assignment <id@root>` specifies a non-existent subtree root, preventing silent fallback to the global queue
1295
- - Use `ConfigNotFoundError` (exit 3) in `advance()` for missing report files, consistent with `finish` command behavior
1296
-
1297
- ### Added
1298
- - Add positive test cases for `start` and `finish` commands with explicit `step` argument targeting
1299
-
1300
- ## [0.13.0] - 2026-02-26
1301
-
1302
- ### Added
1303
- - Add `start` command for explicit step lifecycle control: `ace-assign start [STEP]`
1304
- - Add `finish` command replacing `report`: `ace-assign finish [STEP] --report <file>` or via piped stdin
1305
- - Support piped stdin as report source in `finish`, eliminating mandatory temp-file creation
1306
- - Enforce strict `start` conflict detection: fails when another step is already `in_progress`
1307
- - Add `start_step` and `finish_step` APIs to assignment executor for programmatic lifecycle control
1308
-
1309
- ### Changed
1310
- - Replace `ace-assign report` with `ace-assign finish --report <file>` across all docs and workflows
1311
- - Update `assign/create.wf.md` and `assign/drive.wf.md` to use `finish` command pattern
1312
- - Update `README.md`, `docs/usage.md`, and `docs/exit-codes.md` to reflect new command surface
1313
- - Deterministic report input precedence: `--report` file wins over stdin when both are present
1314
-
1315
- ### Removed
1316
- - Remove `report` command from CLI surface (replaced by `finish`)
1317
-
1318
- ### Changed
1319
- - Replace `report_command_test.rb` with `finish_command_test.rb` and `start_command_test.rb`
1320
- - Update e2e test runner docs in `ace-assign` and `ace-overseer` to use `finish` pattern
1321
-
1322
- ## [0.12.23] - 2026-02-26
1323
-
1324
- ### Fixed
1325
- - Anchor FORK column detection regex to CHILDREN pattern in `assign/drive` workflow, preventing false matches on step names containing 'yes'
1326
-
1327
- ## [0.12.22] - 2026-02-26
1328
-
1329
- ### Added
1330
- - Add explicit FORK column to status output showing "yes" for steps with children, making delegation signal unmissable
1331
- - Introduce adaptive recovery for failed subtrees with retry/fail-children strategies
1332
- - Introduce fork PID telemetry and scoped status filtering for subprocess tracking
1333
-
1334
- ### Changed
1335
- - Decouple assignment targeting from environment variables; rely on explicit `--assignment <id>` flags
1336
- - Enhance plan-task instructions for behavioral spec adherence
1337
- - Update `assign/drive` workflow to reference FORK column instead of subtle "Fork subtree detected" message
1338
-
1339
- ### Technical
1340
- - Add validation order to E2E test expectations
1341
- - Update E2E test runner and verifier configurations
1342
- - Add test for FORK column in status output
1343
-
1344
- ## [0.12.21] - 2026-02-25
1345
-
1346
- ### Changed
1347
- - Remove runtime assignment context coupling to `ACE_ASSIGN_ID` and `ACE_ASSIGN_FORK_ROOT`; assignment targeting now relies on explicit `--assignment <id>` and scoped `--assignment <id>@<step>` usage.
1348
- - Update `assign/drive` workflow and fork-context guide to use explicit assignment flags for subprocess delegation.
1349
-
1350
- ### Fixed
1351
- - Eliminate scoped report/status behavior that depended on mutable process environment, reducing cross-process/test leakage risk.
1352
-
1353
- ## [0.12.20] - 2026-02-25
1354
-
1355
- ### Changed
1356
- - Update generated `plan-task` step action instructions to require planning against behavioral spec sections, cover relevant operating modes, and report missing spec details in a `Behavioral Gaps` section
1357
-
1358
- ## [0.12.19] - 2026-02-24
1359
-
1360
- ### Fixed
1361
- - Apply assignment scope (`<id>@<step>`) during report execution by setting `ACE_ASSIGN_FORK_ROOT` for the report command, so child-step completions resolve in the correct subtree.
1362
-
1363
- ### Technical
1364
- - Harden TS-ASSIGN-002 hierarchy E2E runner/verifier instructions for scoped completion commands and scoped subtree status assertions.
1365
-
1366
- ## [0.12.18] - 2026-02-23
1367
-
1368
- ### Technical
1369
- - Updated internal dependency version constraints to current releases
1370
-
1371
- ## [0.12.17] - 2026-02-22
1372
-
1373
- ### Changed
1374
- - Migrate CLI to standard help pattern: register HelpCommand for `--help`/`-h`, simplify `start()` by removing DWIM default routing
1375
-
1376
- ## [0.12.16] - 2026-02-22
1377
-
1378
- ### Fixed
1379
- - Prevent fork subtree recursion by auto-scoping `status` command to `ACE_ASSIGN_FORK_ROOT` when set
1380
- - Mark first workable child step as `in_progress` before launching forked session in `fork-run`
1381
-
1382
- ## [0.12.15] - 2026-02-22
1383
-
1384
- ### Technical
1385
- - Update `ace-bundle project` → `ace-bundle load project` in README, fork-context guide, and test fixture
1386
-
1387
- ## [0.12.14] - 2026-02-22
1388
-
1389
- ### Added
1390
- - Subtree guard step in drive workflow -- driver reviews all fork report files before continuing to next step
1391
- - Report review instruction in split-subtree-root step template for fork context
1392
-
1393
- ## [0.12.13] - 2026-02-22
1394
-
1395
- ### Added
1396
- - Background execution guidance for fork-run in drive workflow (10-30 min timeout handling)
1397
- - Timeout note in split-subtree-root step template for environments with bash limits
1398
-
1399
- ## [0.12.11] - 2026-02-22
1400
-
1401
- ### Changed
1402
- - Migrate skill naming and invocation references to hyphenated `ace-*` format (no underscores).
1403
-
1404
- ## [0.12.10] - 2026-02-21
1405
-
1406
- ### Technical
1407
- - Stabilize `TS-ASSIGN-004` by replacing live `fork-run` invocation with deterministic scoped `status --assignment <id>@<step>` assertions
1408
- - Rewrite `TS-ASSIGN-006` to deterministic preset-expansion verification using `Ace::Assign::Atoms::PresetExpander` (no chat-skill invocation dependency)
1409
- - Add prepare-workflow fixture presets (`work-on-task.yml`, `work-on-tasks.yml`) for reproducible E2E generation checks
1410
-
1411
- ## [0.12.9] - 2026-02-21
1412
-
1413
- ### Changed
1414
- - Migrate skill name references to colon-free convention (`ace_domain_action` format) for non-Claude Code agent compatibility
1415
- - Update catalog steps and presets with new skill name format
1416
- - Update workflow instructions with new skill invocation patterns
1417
-
1418
- ## [0.12.8] - 2026-02-21
1419
-
1420
- ### Added
1421
- - Verification instructions in `mark-task-done` step requiring status confirmation after `ace-taskflow task done`
1422
- - Subtree completion section in drive workflow requiring task status verification before reporting complete
1423
-
1424
- ## [0.12.7] - 2026-02-21
1425
-
1426
- ### Fixed
1427
- - Add `CACHE_BASE` env var support to `cache_dir` so E2E sandboxes resolve the correct cache path
1428
- - Graceful return in `advance()` when fork subtree is exhausted (prevents "No step currently in progress" error)
1429
- - Nil guard in `report` command when `advance()` returns `completed: nil` after subtree exhaustion
1430
-
1431
- ## [0.12.6] - 2026-02-21
1432
-
1433
- ### Technical
1434
- - Add E2E tests for prepare workflow (from preset and from informal instructions)
1435
- - Fix `ASSIGNMENT_DIR` lookup in injection/renumbering E2E tests to use dynamic directory discovery
1436
- - Reorganize TS-ASSIGN-003b fixtures: replace flat `job.yaml` with structured `steps/` directory
1437
-
1438
- ## [0.12.5] - 2026-02-20
1439
-
1440
- ### Technical
1441
- - Update slash command refs to use git namespace (ace:git-create-pr, ace:git-update-pr-desc)
1442
-
1443
- ## [0.12.4] - 2026-02-19
1444
-
1445
- ### Technical
1446
- - Namespace workflow instructions into domain-specific subdirectories with updated wfi:// protocol URIs
1447
- - Update skill name references to use namespaced ace:namespace-action format
1448
-
1449
- ## [0.12.3] - 2026-02-19
1450
-
1451
- ### Changed
1452
- - Added clarifying comments for `skill: null` and `context.default: null` in reflect-and-refactor step
1453
-
1454
- ## [0.12.2] - 2026-02-19
1455
-
1456
- ### Changed
1457
- - Clarified `reflect-after-verify` ordering note to distinguish baseline verify from post-refactor re-verify
1458
- - Consolidated duplicate conditional suggestions for `work-on-task` into single entry with per-step strength overrides
1459
-
1460
- ## [0.12.1] - 2026-02-19
1461
-
1462
- ### Fixed
1463
- - `reflect-verify-cycle` pair changed from `sequential` to `conditional` -- prevents overriding optional strength of reflect-and-refactor
1464
- - Renamed `max_recursion` to `max_reruns` in replan config for clarity
1465
-
1466
- ## [0.12.0] - 2026-02-19
1467
-
1468
- ### Added
1469
- - New `reflect-and-refactor` step in catalog -- analyzes implementation against ATOM principles and executes targeted refactoring before PR creation
1470
- - Composition rules for reflect-and-refactor: ordering (after verify, before mark-done/release/retro), pairs (verify cycle, fix cycle, replan cycle), and conditional suggestion
1471
- - `create-retro` step now consumes `findings-report` from reflect-and-refactor as recommended prerequisite
1472
- - `implement-with-pr` recipe updated to include optional reflect-and-refactor step after work-on-task
1473
-
1474
- ## [0.11.18] - 2026-02-19
1475
-
1476
- ### Changed
1477
- - Remove dead `print_fork_scope_guidance` method and duplicate `fork_scope_root` definition from status command
1478
-
1479
- ## [0.11.17] - 2026-02-17
1480
-
1481
- ### Fixed
1482
-
1483
- - `assignment_state` now checks `completed` before `failed` -- assignments where all steps are done/failed correctly report `:completed` instead of `:failed`
1484
-
1485
- ### Added
1486
-
1487
- - `recently_active?` method on `QueueState` to detect stale in-progress steps (threshold: 1 hour)
1488
- - New `:stalled` assignment state for in-progress steps with no recent activity
1489
-
1490
- ## [0.11.16] - 2026-02-17
1491
-
1492
- ### Added
1493
-
1494
- - `current_in_subtree` method on `QueueState` to find in-progress step within a subtree
1495
-
1496
- ### Fixed
1497
-
1498
- - Fork root executor now checks for existing in-progress step in subtree before advancing to next workable step
1499
-
1500
- ## [0.11.15] - 2026-02-17
1501
-
1502
- ### Added
1503
- - New catalog step definition `split-subtree-root` for split parent/fork-root orchestration instructions (default template in `.ace-defaults/assign/catalog/steps/`)
1504
-
1505
- ### Changed
1506
- - Split parent steps with `sub_steps` now materialize as orchestration-only subtree roots:
1507
- - parent `skill` is removed to avoid duplicate execution semantics
1508
- - parent keeps `source_skill` metadata for traceability
1509
- - parent instructions are rendered from catalog template (project-overridable)
1510
- - Step catalog resolution now merges project overrides with default catalog by step name, so projects can override a single step definition without replacing the entire catalog
1511
-
1512
- ### Fixed
1513
- - Fork root parent steps no longer instruct direct `work-on-task` execution and now clearly drive subtree delegation/execution (`fork-run` + `assign-drive`) through child steps
1514
-
1515
- ## [0.11.14] - 2026-02-17
1516
-
1517
- ### Fixed
1518
- - Scoped status rendering for nested roots (for example `--assignment <id>@010.01`) now prints the subtree hierarchy correctly instead of collapsing to an empty queue section
1519
- - Runtime-expanded child steps now use explicit `taskref` metadata (when present) for deterministic task context, and preserve it in child step frontmatter
1520
- - Fork session launcher now loads `ace/llm` so `fork-run` handles provider errors without crashing on uninitialized LLM error constants
1521
-
1522
- ### Changed
1523
- - Preset expansion now substitutes placeholders across all step fields (including nested metadata), not only `name` and `instructions`
1524
-
1525
- ## [0.11.13] - 2026-02-17
1526
-
1527
- ### Fixed
1528
- - Scoped status (`--assignment <id>@<step>`) now selects the actionable step within the subtree instead of always reporting the scope root as current
1529
- - Runtime sub-step expansion now generates step-specific action instructions per child step and keeps parent goals as a verification checklist (instead of copy-pasting orchestration text into every child)
1530
-
1531
- ## [0.11.12] - 2026-02-17
1532
-
1533
- ### Added
1534
- - E2E regression scenario `TS-ASSIGN-005-no-skip-policy` to enforce hard no-skip drive policy and keep `ace:assign-drive` skill thin
1535
-
1536
- ### Changed
1537
- - `drive-assignment` workflow now enforces hard no-skip execution for planned steps and removes skip-assessment behavior
1538
- - Added required attempt-first failure evidence (command + exact error) and post-report/fail status transition verification in drive workflow
1539
-
1540
- ## [0.11.11] - 2026-02-17
1541
-
1542
- ### Changed
1543
- - `drive-assignment` workflow now auto-delegates detected fork-enabled subtrees via `ace-assign fork-run --assignment <id>@<root>` before inline step execution
1544
- - Fork context guide now documents the runtime delegation path where parent drive sessions detect subtree roots and delegate scoped execution with `fork-run`
1545
-
1546
- ## [0.11.10] - 2026-02-17
1547
-
1548
- ### Changed
1549
- - Use `Atoms::NumberGenerator.subtask` for sub-step numbering in runtime expansion to keep numbering logic centralized
1550
- - Tree formatter state labels now explicitly include `pending` and `in_progress`
1551
-
1552
- ### Fixed
1553
- - Added coverage for fork-scoped advancement when global current step is outside scoped subtree
1554
- - Added stable tests for CLI provider env propagation and query-interface sandbox propagation
1555
-
1556
- ## [0.11.9] - 2026-02-17
1557
-
1558
- ### Added
1559
- - Regression coverage for fork-scoped advancement when global current step is outside the scoped subtree
1560
-
1561
- ### Changed
1562
- - `ace-assign status` now prints explicit `Current Status: <status>` for easier machine parsing and E2E assertions
1563
-
1564
- ### Fixed
1565
- - Fork-scoped report advancement now selects and completes the next in-subtree step instead of completing an out-of-scope global current step
1566
- - E2E assertions for `parent` frontmatter now accept both single-quoted and double-quoted YAML scalars to avoid formatting-only false negatives
1567
-
1568
- ## [0.11.8] - 2026-02-17
1569
-
1570
- ### Added
1571
- - Shared assignment target parser for CLI commands with scoped syntax support: `--assignment <id>@<step>`
1572
- - New command tests covering assignment target parsing and scoped subtree execution behavior
1573
- - New E2E scenario scaffold for fork subtree scope isolation verification (`TS-ASSIGN-004`)
1574
-
1575
- ### Changed
1576
- - Assignment-targeting commands (`status`, `report`, `fail`, `add`, `retry`, `fork-run`) now use a shared target resolver
1577
- - `ace-assign fork-run` accepts subtree root from scoped assignment target (`<id>@<step>`) and validates conflicts with `--root`
1578
- - Scoped status output (`--assignment <id>@<step>`) now renders only the selected node subtree and uses the scope root as displayed current step
1579
-
1580
- ### Fixed
1581
- - Removed global current-step coupling in `fork-run` so subtree execution can start from any explicitly scoped root node
1582
-
1583
- ## [0.11.7] - 2026-02-17
1584
-
1585
- ### Added
1586
- - `ForkSessionLauncher` molecule to execute forked subtree sessions synchronously via `ace-llm` (`/ace:assign-drive`)
1587
- - Fork execution config defaults under assign namespace:
1588
- - `execution.provider`, `execution.timeout`
1589
- - `providers.cli`, `providers.cli_args`
1590
-
1591
- ### Changed
1592
- - `ace-assign fork-run` now launches provider sessions directly (blocking) instead of printing shell instructions
1593
- - `fork-run` supports `--provider`, `--cli-args`, and `--timeout` overrides
1594
- - Post-launch validation enforces subtree outcome: complete (success), failed/incomplete (error)
1595
-
1596
- ### Technical
1597
- - Add `ace-llm` runtime dependency for provider-driven fork execution
1598
- - Add command and molecule tests for launcher integration and fork-run completion/error paths
1599
-
1600
- ## [0.11.6] - 2026-02-17
1601
-
1602
- ### Added
1603
- - `ace-assign fork-run` command to initialize subtree-scoped fork execution using `ACE_ASSIGN_ID` and `ACE_ASSIGN_FORK_ROOT`
1604
- - Subtree scope helpers in queue state (`in_subtree?`, `subtree_steps`, `subtree_complete?`, `next_workable_in_subtree`, `nearest_fork_ancestor`)
1605
-
1606
- ### Changed
1607
- - Status output now detects forked ancestor scope and guides operators to run `fork-run` for whole-subtree delegation
1608
- - Report output now distinguishes subtree completion from full assignment completion when fork scope is active
1609
- - Fork context guide and workflow docs updated for explicit parent-only fork semantics and subtree execution model
1610
-
1611
- ### Fixed
1612
- - Split-substep expansion no longer writes `context: fork` on child steps (`onboard`, `plan-task`, `work-on-task`) when parent is forked
1613
- - Queue advancement in fork scope now stays inside `ACE_ASSIGN_FORK_ROOT` subtree and does not leak into sibling steps
1614
-
1615
- ## [0.11.5] - 2026-02-17
1616
-
1617
- ### Fixed
1618
- - Ensure runtime-expanded sub-steps are concrete and executable by materializing catalog metadata (skill, step focus) instead of generic placeholder instructions
1619
- - Preserve task context during sub-step expansion so child steps receive parent task instructions for deterministic parameter extraction
1620
- - Start assignments on the first workable leaf step (not parent container steps), preventing blocked progression in parent-child trees
1621
- - Use a single fork entrypoint for forked sub-step subtrees (first child), avoiding nested fork-per-child behavior
1622
-
1623
- ## [0.11.4] - 2026-02-17
1624
-
1625
- ### Changed
1626
- - Clarify assignment responsibility boundaries in workflow docs:
1627
- - `compose-assignment` is catalog-only and no longer models source/frontmatter ingestion
1628
- - `start-assignment` explicitly distinguishes catalog composition vs deterministic prepare/runtime expansion
1629
- - `prepare-assignment` explicitly documents runtime metadata expansion as the canonical path
1630
- - Update assignment skills metadata to reflect compose/prepare boundary semantics
1631
-
1632
- ## [0.11.3] - 2026-02-17
1633
-
1634
- ### Added
1635
- - `SkillAssignSourceResolver` molecule to resolve skill frontmatter `assign.source` URIs (currently `wfi://...`) into workflow assignment metadata
1636
- - Default config paths for skill/workflow discovery:
1637
- - `skill_source_paths`: `.agents/skills`, `.claude/skills`
1638
- - `workflow_source_paths`: `ace-taskflow/handbook/workflow-instructions`, `ace-assign/handbook/workflow-instructions`
1639
-
1640
- ### Changed
1641
- - `AssignmentExecutor.start` now enriches steps with skill-declared workflow `assign.sub-steps` before expansion, enabling deterministic runtime sub-step materialization without compose-specific wiring
1642
- - `compose-assignment` workflow is now catalog-only and no longer documents source/frontmatter-driven step composition
1643
-
1644
- ## [0.11.2] - 2026-02-16
1645
-
1646
- ### Technical
1647
- - Add test cases for new composition ordering rules (`onboard-before-plan`, `plan-before-implementation`) and conditional `plan-task` suggestion
1648
-
1649
- ## [0.11.1] - 2026-02-16
1650
-
1651
- ### Fixed
1652
- - Consolidate duplicate conditional trigger for work-on-task in composition-rules
1653
-
1654
- ## [0.11.0] - 2026-02-16
1655
-
1656
- ### Added
1657
- - JIT plan-task step in implement-with-pr and implement-simple recipes (optional, between onboard and work-on-task)
1658
- - Composition rules: `onboard-before-plan` and `plan-before-implementation` ordering
1659
- - Conditional suggestion: recommend plan-task when work-on-task is included
1660
-
1661
- ### Changed
1662
- - plan-task step catalog entry: produces `[implementation-plan]` only (removed `task-spec`), consumes `[project-context, task-spec]`
1663
-
1664
- ## [0.10.2] - 2026-02-16
1665
-
1666
- ### Changed
1667
- - Rename review cycle steps by type: `review-cycle-1` → `review-valid-1`, `review-cycle-2` → `review-fit-1` (with matching apply/release steps)
1668
- - Add shine review cycle (`review-shine-1`, `apply-shine-1`, `release-shine-1`) to `work-on-task` and `work-on-tasks` presets
1669
- - Update `default_count` from 2 to 3 in composition rules to reflect three review types (valid, fit, shine)
1670
- - Renumber post-review steps: reorganize-commits → 130, push-to-remote → 140, update-pr-desc → 150
1671
-
1672
- ## [0.10.1] - 2026-02-16
1673
-
1674
- ### Added
1675
- - **Preset progression**: `preset_progression` mapping in composition rules (cycle 1→`code-valid`, 2→`code-fit`, 3→`code-shine`)
1676
-
1677
- ### Changed
1678
- - Review cycle presets in `work-on-task.yml` and `work-on-tasks.yml` now use step-specific presets instead of `code-deep`
1679
- - Updated `implement-with-pr.recipe.yml` to reference `preset_progression` from composition rules
1680
- - Updated `compose-assignment.wf.md` with preset progression documentation and examples
1681
-
1682
- ## [0.9.3] - 2026-02-15
1683
-
1684
- ### Fixed
1685
- - **AssignFrontmatterParser**: Validate that hint `include`/`skip` values are strings (rejects non-string types with descriptive error)
1686
-
1687
- ## [0.9.2] - 2026-02-14
1688
-
1689
- ### Fixed
1690
-
1691
- - Frontmatter parser now rejects hints with both `include` and `skip` (mutual exclusivity validation)
1692
-
1693
- ## [0.9.1] - 2026-02-14
1694
-
1695
- ### Fixed
1696
-
1697
- - Tree formatter now correctly handles child-before-parent input ordering (two-pass index build)
1698
- - Added regression test for unordered tree formatter input
1699
-
1700
- ## [0.9.0] - 2026-02-15
1701
-
1702
- ### Added
1703
-
1704
- - Declarative assignment frontmatter: `assign:` block in `.s.md` and `.wf.md` files declares assignment intent (goal, variables, hints, sub-steps, context, parent)
1705
- - `AssignFrontmatterParser` atom for extracting and validating `assign:` frontmatter blocks
1706
- - `TreeFormatter` atom for rendering assignment hierarchy as indented tree with Unicode connectors
1707
- - Parent-child assignment linking via `parent` field in Assignment model
1708
- - `ace-assign list --tree` option for hierarchical assignment view
1709
- - Sub-step fork enforcement in executor: steps with sub-steps create batch parent in fork context
1710
- - Compose workflow integration: step 0 reads `assign:` frontmatter as structured input
1711
- - `documentation.recipe.yml` for documentation workflows with research step
1712
- - `release-only.recipe.yml` for version bump workflows without code changes
1713
- - `work-on-docs.yml` preset exposing documentation workflow
1714
- - `release-only.yml` preset exposing release-only workflow
1715
- - `quick-implement.yml` preset for simple task implementation
1716
- - `fix-bug.yml` preset for bug fix with review workflow
1717
-
1718
- ### Changed
1719
-
1720
- - Update timestamp dependency from `ace-support-timestamp` to `ace-b36ts`
1721
-
1722
- ## [0.8.3] - 2026-02-14
1723
-
1724
- ### Added
1725
-
1726
- - New `mark-task-done` step for marking tasks as done in ace-taskflow after implementation
1727
- - Composition rule to order `mark-task-done` after `work-on-task`
1728
- - Conditional rule suggesting `mark-task-done` when assignment includes `work-on-task`
1729
- - `mark-task-done` step in `work-on-task` preset (runs `ace-taskflow task done`)
1730
- - Mark-done instruction in `work-on-tasks` child template for per-task completion
1731
- - `mark-task-done` step in `implement-with-pr`, `implement-simple`, and `fix-and-review` recipes
1732
-
1733
- ## [0.8.2] - 2026-02-13
1734
-
1735
- ### Fixed
1736
-
1737
- - `list` command now shows filtered count context (e.g., `1/2 assignment(s) shown`) when completed assignments are hidden
1738
-
1739
- ## [0.8.1] - 2026-02-13
1740
-
1741
- ### Added
1742
-
1743
- - Tests for `--assignment` flag targeting on `add`, `fail`, `report`, and `retry` commands
1744
- - Performance documentation note on `AssignmentDiscoverer#find_all`
1745
-
1746
- ### Fixed
1747
-
1748
- - Null safety for `info.name` in `list` command table output
1749
-
1750
- ## [0.8.0] - 2026-02-13
1751
-
1752
- ### Added
1753
-
1754
- - Multi-assignment support with `.current` symlink for explicit assignment selection
1755
- - `ace-assign list` command with table/JSON output, `--task` filter, and `--all` flag
1756
- - `ace-assign select <id>` command for switching active assignment
1757
- - `AssignmentInfo` model wrapping assignment with computed state and progress
1758
- - `AssignmentDiscoverer` molecule for finding and filtering assignments
1759
- - `--assignment` flag on `status`, `report`, `fail`, `add`, and `retry` commands
1760
- - `ACE_ASSIGN_ID` environment variable for workflow context propagation
1761
- - Assignment state computation: running, paused, completed, failed
1762
- - Other assignments section in `status` output
1763
- - Context propagation and multi-assignment management documentation in drive-assignment workflow
1764
-
1765
- ## [0.7.5] - 2026-02-13
1766
-
1767
- ### Fixed
1768
-
1769
- - Misplaced doc block: `check_pair_completeness` documentation was above `check_conditional_rule`
1770
- - Duplicate examples in `prepare-assignment.wf.md` now accurately reflect renamed `work-on-task` preset
1771
- - `CatalogLoader.parse_step_file` now warns on stderr when a step YAML file fails to parse (was silently returning nil)
1772
- - `compose-assignment.wf.md` uses Read/Glob tool references instead of `cat`/`ls` per project conventions
1773
-
1774
- ### Changed
1775
-
1776
- - Added inline documentation for prefix matching constraints in `find_step_index`
1777
- - Added comment clarifying that mixed "and"/"or" conjunctions are not supported in conditional rules
1778
-
1779
- ## [0.7.4] - 2026-02-13
1780
-
1781
- ### Added
1782
-
1783
- - New step catalog entries: `push-to-remote`, `release`, `reorganize-commits`
1784
-
1785
- ### Fixed
1786
-
1787
- - Missing `skill: ace:apply-feedback` in work-on-tasks preset apply-feedback steps
1788
- - Ordering rules now match suffixed step names via prefix matching (e.g., `release` matches `release-minor`, `release-patch-1`)
1789
- - Conditional composition rules with "and" conjunction now correctly require all conditions (was using `any?` instead of `all?`)
1790
-
1791
- ### Changed
1792
-
1793
- - Renamed `work-on-task-with-pr` preset to `work-on-task` (now the default/primary workflow)
1794
- - Updated workflow documentation to reflect preset rename
1795
-
1796
- ## [0.7.3] - 2026-02-13
1797
-
1798
- ### Added
1799
-
1800
- - **Step catalog system**: Registry of available step types with prerequisites, produces/consumes, context defaults, and skip conditions (14 step definitions)
1801
- - **Composition rules**: Declarative ordering constraints, step pairs, and conditional suggestions for intelligent assignment composition
1802
- - **Recipe system**: Flexible example patterns replacing rigid presets (4 recipes: implement-with-pr, implement-simple, batch-tasks, fix-and-review)
1803
- - **Compose-assignment workflow**: LLM-driven assignment composition from step catalog and user intent
1804
- - `CatalogLoader` atom for loading and querying step catalog YAML files
1805
- - `CompositionRules` atom for loading, validating ordering, and suggesting step additions
1806
- - Conditional composition rule logic in `suggest_additions` for context-dependent step suggestions
1807
-
1808
- ### Changed
1809
-
1810
- - Drive-assignment workflow now includes step decision points for skip assessment and adaptation
1811
- - Start-assignment workflow updated to offer compose as alternative path
1812
-
1813
- ### Fixed
1814
-
1815
- - `apply-feedback.step.yml` now correctly references `ace:apply-feedback` skill (was null)
1816
-
1817
- ## [0.7.2] - 2026-02-12
1818
-
1819
- ### Changed
1820
-
1821
- - E2E tests renamed from COWORKER to ASSIGN terminology
1822
- - All test references updated: coworker → assign, session → assignment, step → step, jobs → steps
1823
-
1824
- ## [0.7.1] - 2026-02-11
1825
-
1826
- ### Fixed
1827
-
1828
- - E2E test scenario.yml files now use correct `test-id` field (was `test-suite-id`)
1829
- - E2E test case .tc.md files now use correct `tc-id` field (was `test-id`)
1830
-
1831
- ## [0.7.0] - 2026-02-11
1832
-
1833
- ### Fixed
1834
-
1835
- - Array instruction substitution in foreach expansion now properly handles {{item}} placeholders
1836
- - Removed deprecated work-on-task preset (use `/ace:work-on-task` skill directly)
1837
-
1838
- ### Changed
1839
-
1840
- - work-on-tasks preset simplified with onboard step and direct skill delegation
1841
-
1842
- ## [0.6.0] - 2026-02-11
1843
-
1844
- ### Changed
1845
-
1846
- - Package renamed from ace-coworker to ace-assign
1847
- - Internal "session" concept renamed to "assignment"
1848
- - Internal "step" concept renamed to "step"
1849
- - Step file extension changed from .j.md to .st.md
1850
- - Cache directory changed from .cache/ace-coworker/ to .cache/ace-assign/
1851
- - Skills renamed from /ace:coworker-* to /ace:assign-*
1852
- - New combined /ace:assign-start skill added (prepare + create in one step)
1853
-
1854
- ## [0.5.3] - 2026-02-01
1855
-
1856
- ### Changed
1857
-
1858
- - Removed `prepare` CLI command - use `/ace:assign-prepare` workflow instead (handles informal instructions and customizations)
1859
-
1860
- ## [0.5.2] - 2026-01-31
1861
-
1862
- ### Fixed
1863
-
1864
- - `prepare` CLI now uses Base36 timestamps (e.g., `8ouxjt`) instead of datetime format
1865
- - `prepare` CLI now outputs step files to task's `steps/` folder (e.g., `.ace-taskflow/v.0.9.0/tasks/253-xxx/steps/`) when task refs provided
1866
- - Correctly extracts parent task ID from subtask refs (e.g., `253.01` -> task folder `253-xxx`)
1867
-
1868
- ## [0.5.1] - 2026-01-31
1869
-
1870
- ### Fixed
1871
-
1872
- - `prepare` CLI command now actually works - implements preset loading, parameter parsing, and job.yaml generation (was just a stub in 0.5.0)
1873
-
1874
- ## [0.5.0] - 2026-01-31
1875
-
1876
- ### Added
1877
-
1878
- - **Multi-task step preparation**: New `work-on-tasks` preset enables batch processing of multiple tasks in a single job
1879
- - `PresetExpander` atom for expanding preset templates with `expansion:` directives
1880
- - Support for `batch-parent` and `foreach` expansion directives in presets
1881
- - Array parameter parsing supporting comma-separated (`148,149,150`), range (`148-152`), and pattern (`240.*`) syntax
1882
- - Pre-assigned step numbers in job.yaml are now preserved by AssignmentExecutor
1883
- - Updated prepare-assignment workflow documentation with multi-task examples
1884
-
1885
- ### Fixed
1886
-
1887
- - CLI help commands now return exit code 0 correctly
1888
-
1889
- ## [0.4.3] - 2026-01-30
1890
-
1891
- ### Changed
1892
-
1893
- - Rewrote MT-ASSIGN-003 E2E test to match implemented behavior (dynamic hierarchy via `add --after --child` instead of static config)
1894
-
1895
- ### Technical
1896
-
1897
- - MT-ASSIGN-003 test verified and stamped
1898
-
1899
- ## [0.4.2] - 2026-01-30
1900
-
1901
- ### Fixed
1902
-
1903
- - MAX_DEPTH constant corrected to 2 (allowing 3 levels max: 010.01.01) to match documented behavior
1904
- - CLI `add --child` command now validates depth upfront with clear error message before calling executor
1905
-
1906
- ### Changed
1907
-
1908
- - `auto_complete_parents` now emits warning when safety iteration limit is reached
1909
- - `rollback_renames` now captures and reports rollback failures instead of silently swallowing them
1910
-
1911
- ## [0.4.1] - 2026-01-30
1912
-
1913
- ### Changed
1914
-
1915
- - `Ace::Assign.cache_dir` now returns an absolute path resolved from project root
1916
- - Cache directory respects `PROJECT_ROOT_PATH` environment variable for sandboxed/isolated testing
1917
-
1918
- ## [0.4.0] - 2026-01-30
1919
-
1920
- ### Added
1921
-
1922
- - **Hierarchical step structure**: Steps can now have nested sub-steps (010.01, 010.02) with parent-child relationships
1923
- - New `StepNumbering` atom for parsing and generating hierarchical step numbers
1924
- - `--after` option for `add` command: inject steps after specific step numbers (`ace-assign add verify --after 010`)
1925
- - `--child` option for `add` command: create nested child steps (`ace-assign add verify --after 010 --child`)
1926
- - `--flat` option for `status` command: show flat list without hierarchy indentation
1927
- - Automatic step renumbering when inserting steps at occupied positions
1928
- - `children_of`, `descendants_of`, `has_incomplete_children?` methods on QueueState for hierarchy traversal
1929
- - `hierarchical` method on QueueState for tree-structured display
1930
- - Parent number extraction from filenames in `StepFileParser.parse_filename`
1931
- - Audit trail metadata: `added_by`, `parent`, `renumbered_from`, `renumbered_at` fields for tracking step history
1932
- - O(1) child lookups via parent index in QueueState for improved performance
1933
-
1934
- ### Changed
1935
-
1936
- - Auto-complete parents now handles multi-level hierarchies in a single pass (grandparents complete when parents complete)
1937
- - Auto-complete now includes in_progress parents (not just pending) when all children finish
1938
- - Status command now shows hierarchical structure when nested steps exist
1939
- - Advance operation respects hierarchy: parent steps wait for all children to complete
1940
-
1941
- ### Fixed
1942
-
1943
- - Cascade renumbering to descendants: when a step is shifted, all its children are also renamed to prevent orphaning
1944
- - Enforce hierarchy in `advance`: prevent marking parent as done while children are incomplete
1945
- - Validate `--after` step existence before injection (raises StepNotFoundError if not found)
1946
- - Replace fragile `instance_variable_set` mutation with local tracking Set in auto_complete_parents
1947
- - Add safety guard to prevent infinite loops in auto-completion (max iterations = step count)
1948
- - Re-scan state after auto_complete_parents to ensure find_next_step uses fresh data
1949
- - Use `next_workable` instead of `next_pending` in find_next_step to respect hierarchy
1950
- - QueueState now supports `top_level`, `all_numbers`, and `next_workable` methods
1951
-
1952
- ## [0.3.1] - 2026-01-30
1953
-
1954
- ### Fixed
1955
-
1956
- - Step files already in a `steps/` directory are kept in place instead of being moved to a nested path when creating assignments
1957
-
1958
- ## [0.3.0] - 2026-01-30
1959
-
1960
- ### Added
1961
-
1962
- - **Fork context support for steps**: Enable step files to declare `context: fork` in frontmatter to run steps in isolated agent contexts via Claude Code's Task tool
1963
- - New `context` field in Step model with `fork?` predicate method
1964
- - Context validation rejecting invalid values with helpful error messages (valid values: `fork`)
1965
- - `handbook/guides/fork-context.g.md` documentation for the fork context feature
1966
- - Status command outputs Task tool instructions for fork-context steps
1967
- - Shell escaping for step names in Task tool description field
1968
- - E2E test (TC-005) for fork context feature validation
1969
-
1970
- ### Changed
1971
-
1972
- - Centralized `VALID_CONTEXTS` constant in Step model, referenced by parser
1973
- - QueueScanner surfaces ArgumentError for invalid step files instead of silent nil return
1974
- - Status output uses plain text separators instead of markdown backticks for better terminal compatibility
1975
- - Use deterministic project root from cache_dir instead of Dir.pwd
1976
- - Updated `work-on-task` preset to demonstrate fork pattern
1977
-
1978
- ## [0.2.1] - 2026-01-29
1979
-
1980
- ### Fixed
1981
-
1982
- - Cache directory initialization bug where `.cache/ace-assign/` was never created before `generate_assignment_id` called `Dir.mkdir()`, causing `Errno::ENOENT` crash on first use
1983
-
1984
- ### Added
1985
-
1986
- - CLI exit codes documentation (`docs/exit-codes.md`) documenting exit codes 0-3 with meanings and examples
1987
-
1988
- ### Changed
1989
-
1990
- - Updated E2E test TC-004 to reflect actual `start` command behavior (migration alias to `create` with deprecation warning, exit 0)
1991
- - Added TC-004b test case to verify cache directory auto-creation on first use
1992
- - Added cache directory setup to E2E test environment setup to prevent ENOENT errors on first-time runs
1993
-
1994
- ## [0.1.7] - 2026-01-28
1995
-
1996
- ### Fixed
1997
-
1998
- - CLI exit code wrapper propagation via `@captured_exit_code` and `wrap_command` method
1999
- - Race condition in `append_report` file locking: rewrite content in-place on locked file descriptor instead of temp file + rename (preserves POSIX locks)
2000
- - Assignment ID generation max retry limit (100 attempts) to prevent infinite loop
2001
- - E2E test comment: "creates separate .r.md report file" (was "appends report inline")
2002
-
2003
- ### Added
2004
-
2005
- - Prepare command stub with helpful message directing users to create job.yaml manually or use the prepare-assignment workflow
2006
-
2007
- ### Changed
2008
-
2009
- - Improve error messages with actionable suggestions (e.g., "Try 'ace-assign add' or 'ace-assign retry'")
2010
- - Migration UX for deprecated commands (start → create) with warning message
2011
-
2012
- ## [0.1.6] - 2026-01-28
2013
-
2014
- ### Changed
2015
-
2016
- - Split `assignment.wf.md` into focused workflows: `create-assignment.wf.md` (assignment creation) and `drive-assignment.wf.md` (execution loop)
2017
- - Renamed `prepare-assignment-job.wf.md` → `prepare-assignment.wf.md` for verb-first naming convention
2018
- - Renamed skill `ace_assign-start` → `ace_assign-drive` for clarity
2019
- - All assign skills now use thin wrapper pattern pointing to workflows via `ace-bundle`
2020
-
2021
- ### Technical
2022
-
2023
- - Fixed file extension documentation: `*.md` → `*.st.md` for step files in create-assignment workflow
2024
- - Clarified "source of truth" is `ace-assign status` command in workflow documentation
2025
- - Added note about archived job.yaml being for provenance only, not status queries
2026
- - Changed "Job files" → "Step files" terminology in README for clarity
2027
-
2028
- ## [0.1.5] - 2026-01-28
2029
-
2030
- ### Added
2031
-
2032
- - Separate step and report files with `.st.md` and `.r.md` extensions
2033
- - New `reports/` directory structure for storing completion reports separately from step files
2034
- - Report files include YAML frontmatter with `step`, `name`, and `completed_at` fields for traceability
2035
-
2036
- ### Changed
2037
-
2038
- - Step files now use `.st.md` extension (was `.md`)
2039
- - Reports are written to separate `.r.md` files instead of being embedded in step bodies
2040
- - `StepFileParser.extract_fields()` now returns `nil` for report (loaded separately)
2041
- - `StepFileParser.parse_filename()` handles both `.st.md` and `.r.md` extensions
2042
- - `StepFileParser.generate_filename()` produces `.st.md` filenames
2043
- - `StepFileParser.generate_report_filename()` produces `.r.md` filenames
2044
- - `StepSorter.sort_key()` strips `.st.md` extension
2045
- - `QueueScanner.scan()` and `step_numbers()` glob for `*.st.md` files
2046
- - `QueueScanner.load_report()` loads report content from corresponding `.r.md` file
2047
- - `AssignmentManager.create()` creates both `steps/` and `reports/` directories
2048
- - `Assignment.reports_dir` returns path to reports directory
2049
- - `StepWriter.mark_done()` accepts `reports_dir:` parameter and writes report separately
2050
- - `StepWriter.append_report()` accepts `reports_dir:` parameter and updates report files
2051
- - `StepWriter.write_report()` private helper for atomic report file writes
2052
- - `AssignmentExecutor.advance()` passes `reports_dir` to `mark_done()`
2053
- - CLI status command fallback filename uses `.st.md` extension
2054
- - `Step.to_display_row()` fallback filename uses `.st.md` extension
2055
-
2056
- ## [0.1.4] - 2026-01-28
2057
-
2058
- ### Added
2059
-
2060
- - Archive job.yaml to task's `steps/` directory after assignment creation (`{assignment_id}-job.yml`)
2061
-
2062
- ## [0.1.3] - 2026-01-28
2063
-
2064
- ### Technical
2065
-
2066
- - Standardize instructions format to arrays in prepare-assignment workflow doc
2067
- - Update e2e tests for workflow lifecycle with error paths and state verification
2068
- - Update CHANGELOGs with complete fix descriptions
2069
-
2070
- ## [0.1.2] - 2026-01-28
2071
-
2072
- ### Fixed
2073
-
2074
- - CLI `start` command crashes with positional argument (`ace-assign start job.yaml`) because `option :config` requires `--config` flag -- renamed command to `create` with `argument :config`
2075
- - `ace-bundle wfi://prepare-assignment` fails due to missing project-level wfi:// protocol registration
2076
-
2077
- ### Added
2078
-
2079
- - Support array format for step instructions in presets (joined with newlines via `normalize_instructions`)
11
+ ## [0.73.0] - 2026-10-20
2080
12
 
2081
13
  ### Changed
14
+ - Drive workflow now requires re-reading active assignment state immediately before every `finish`/`fail` report, so reports cannot land on auto-advanced child steps in long-running forked subtrees.
15
+ - Verify-test-suite workflow documents the hermetic environment rule for forked drive sessions: verification must go through `ace-test`/`ace-test-suite`, whose environment policy drops ambient `ACE_*`/`LAB_*` fork-runtime configuration; manual env scrubbing and raw rake/bundle invocation inside forked subtrees are prohibited.
2082
16
 
2083
- - Rename CLI `start` command to `create` (CLI creates assignment; "start" is the skill that begins agent work)
2084
- - Preset files (`work-on-task.yml`, `work-on-task-with-pr.yml`) now use array instructions format
2085
- - Updated workflow instructions and README to reflect `create` command and array instructions format
2086
-
2087
- ## [0.1.1] - 2026-01-28
2088
-
2089
- ### Fixed
2090
-
2091
- - Persist skill field from job.yaml steps through full pipeline (StepWriter, StepFileParser, QueueScanner, Step model)
2092
- - Display skill in status command output for current step
2093
- - Pass through extra step fields (beyond name/instructions) from job.yaml via AssignmentExecutor
2094
- - Update default job.yaml output path in prepare-assignment workflow to task folder
2095
-
2096
- ## [0.1.0] - 2026-01-28
2097
-
2098
- ### Added
2099
-
2100
- - Initial release with work queue-based assignment management
2101
- - CLI commands: start, status, report, fail, add, retry
2102
- - File-based queue storage with markdown step files
2103
- - Assignment persistence via assignment.yaml
2104
- - History preservation (failed steps remain visible)
2105
- - Dynamic step addition with automatic numbering
2106
- - Retry mechanism that creates new steps linked to original
2107
-
2108
-
2109
- ## [0.12.12] - 2026-02-22
2110
-
2111
- ### Fixed
2112
- - Standardized quiet, verbose, debug option descriptions to canonical strings