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