ace-assign 0.37.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 (104) hide show
  1. checksums.yaml +7 -0
  2. data/.ace-defaults/assign/catalog/composition-rules.yml +211 -0
  3. data/.ace-defaults/assign/catalog/recipes/batch-tasks.recipe.yml +44 -0
  4. data/.ace-defaults/assign/catalog/recipes/documentation.recipe.yml +35 -0
  5. data/.ace-defaults/assign/catalog/recipes/fix-and-review.recipe.yml +32 -0
  6. data/.ace-defaults/assign/catalog/recipes/implement-simple.recipe.yml +29 -0
  7. data/.ace-defaults/assign/catalog/recipes/implement-with-pr.recipe.yml +48 -0
  8. data/.ace-defaults/assign/catalog/recipes/release-only.recipe.yml +34 -0
  9. data/.ace-defaults/assign/catalog/steps/apply-feedback.step.yml +22 -0
  10. data/.ace-defaults/assign/catalog/steps/commit.step.yml +22 -0
  11. data/.ace-defaults/assign/catalog/steps/create-pr.step.yml +28 -0
  12. data/.ace-defaults/assign/catalog/steps/create-retro.step.yml +22 -0
  13. data/.ace-defaults/assign/catalog/steps/fix-tests.step.yml +22 -0
  14. data/.ace-defaults/assign/catalog/steps/lint.step.yml +22 -0
  15. data/.ace-defaults/assign/catalog/steps/mark-task-done.step.yml +57 -0
  16. data/.ace-defaults/assign/catalog/steps/onboard-base.step.yml +19 -0
  17. data/.ace-defaults/assign/catalog/steps/onboard.step.yml +19 -0
  18. data/.ace-defaults/assign/catalog/steps/plan-task.step.yml +17 -0
  19. data/.ace-defaults/assign/catalog/steps/pre-commit-review.step.yml +34 -0
  20. data/.ace-defaults/assign/catalog/steps/push-to-remote.step.yml +28 -0
  21. data/.ace-defaults/assign/catalog/steps/rebase-with-main.step.yml +28 -0
  22. data/.ace-defaults/assign/catalog/steps/reflect-and-refactor.step.yml +57 -0
  23. data/.ace-defaults/assign/catalog/steps/release-minor.step.yml +23 -0
  24. data/.ace-defaults/assign/catalog/steps/release.step.yml +23 -0
  25. data/.ace-defaults/assign/catalog/steps/reorganize-commits.step.yml +28 -0
  26. data/.ace-defaults/assign/catalog/steps/research.step.yml +19 -0
  27. data/.ace-defaults/assign/catalog/steps/review-pr.step.yml +22 -0
  28. data/.ace-defaults/assign/catalog/steps/security-audit.step.yml +22 -0
  29. data/.ace-defaults/assign/catalog/steps/split-subtree-root.step.yml +25 -0
  30. data/.ace-defaults/assign/catalog/steps/squash-changelog.step.yml +28 -0
  31. data/.ace-defaults/assign/catalog/steps/task-load.step.yml +29 -0
  32. data/.ace-defaults/assign/catalog/steps/update-docs.step.yml +38 -0
  33. data/.ace-defaults/assign/catalog/steps/update-pr-desc.step.yml +28 -0
  34. data/.ace-defaults/assign/catalog/steps/verify-e2e.step.yml +42 -0
  35. data/.ace-defaults/assign/catalog/steps/verify-test-suite.step.yml +48 -0
  36. data/.ace-defaults/assign/catalog/steps/verify-test.step.yml +36 -0
  37. data/.ace-defaults/assign/catalog/steps/work-on-task.step.yml +23 -0
  38. data/.ace-defaults/assign/config.yml +48 -0
  39. data/.ace-defaults/assign/presets/fix-bug.yml +65 -0
  40. data/.ace-defaults/assign/presets/quick-implement.yml +41 -0
  41. data/.ace-defaults/assign/presets/release-only.yml +35 -0
  42. data/.ace-defaults/assign/presets/work-on-docs.yml +41 -0
  43. data/.ace-defaults/assign/presets/work-on-task.yml +179 -0
  44. data/.ace-defaults/nav/protocols/skill-sources/ace-assign.yml +19 -0
  45. data/.ace-defaults/nav/protocols/wfi-sources/ace-assign.yml +19 -0
  46. data/CHANGELOG.md +1415 -0
  47. data/README.md +87 -0
  48. data/Rakefile +16 -0
  49. data/docs/exit-codes.md +61 -0
  50. data/docs/getting-started.md +121 -0
  51. data/docs/handbook.md +40 -0
  52. data/docs/usage.md +224 -0
  53. data/exe/ace-assign +16 -0
  54. data/handbook/guides/fork-context.g.md +231 -0
  55. data/handbook/skills/as-assign-compose/SKILL.md +24 -0
  56. data/handbook/skills/as-assign-create/SKILL.md +23 -0
  57. data/handbook/skills/as-assign-drive/SKILL.md +24 -0
  58. data/handbook/skills/as-assign-prepare/SKILL.md +23 -0
  59. data/handbook/skills/as-assign-recover-fork/SKILL.md +22 -0
  60. data/handbook/skills/as-assign-run-in-batches/SKILL.md +23 -0
  61. data/handbook/skills/as-assign-start/SKILL.md +25 -0
  62. data/handbook/workflow-instructions/assign/compose.wf.md +256 -0
  63. data/handbook/workflow-instructions/assign/create.wf.md +215 -0
  64. data/handbook/workflow-instructions/assign/drive.wf.md +666 -0
  65. data/handbook/workflow-instructions/assign/prepare.wf.md +469 -0
  66. data/handbook/workflow-instructions/assign/recover-fork.wf.md +233 -0
  67. data/handbook/workflow-instructions/assign/run-in-batches.wf.md +212 -0
  68. data/handbook/workflow-instructions/assign/start.wf.md +46 -0
  69. data/lib/ace/assign/atoms/assign_frontmatter_parser.rb +173 -0
  70. data/lib/ace/assign/atoms/catalog_loader.rb +101 -0
  71. data/lib/ace/assign/atoms/composition_rules.rb +219 -0
  72. data/lib/ace/assign/atoms/number_generator.rb +110 -0
  73. data/lib/ace/assign/atoms/preset_expander.rb +277 -0
  74. data/lib/ace/assign/atoms/step_file_parser.rb +207 -0
  75. data/lib/ace/assign/atoms/step_numbering.rb +227 -0
  76. data/lib/ace/assign/atoms/step_sorter.rb +66 -0
  77. data/lib/ace/assign/atoms/tree_formatter.rb +106 -0
  78. data/lib/ace/assign/cli/commands/add.rb +102 -0
  79. data/lib/ace/assign/cli/commands/assignment_target.rb +55 -0
  80. data/lib/ace/assign/cli/commands/create.rb +63 -0
  81. data/lib/ace/assign/cli/commands/fail.rb +43 -0
  82. data/lib/ace/assign/cli/commands/finish.rb +88 -0
  83. data/lib/ace/assign/cli/commands/fork_run.rb +229 -0
  84. data/lib/ace/assign/cli/commands/list.rb +166 -0
  85. data/lib/ace/assign/cli/commands/retry_cmd.rb +42 -0
  86. data/lib/ace/assign/cli/commands/select.rb +45 -0
  87. data/lib/ace/assign/cli/commands/start.rb +40 -0
  88. data/lib/ace/assign/cli/commands/status.rb +407 -0
  89. data/lib/ace/assign/cli.rb +144 -0
  90. data/lib/ace/assign/models/assignment.rb +107 -0
  91. data/lib/ace/assign/models/assignment_info.rb +66 -0
  92. data/lib/ace/assign/models/queue_state.rb +326 -0
  93. data/lib/ace/assign/models/step.rb +197 -0
  94. data/lib/ace/assign/molecules/assignment_discoverer.rb +57 -0
  95. data/lib/ace/assign/molecules/assignment_manager.rb +276 -0
  96. data/lib/ace/assign/molecules/fork_session_launcher.rb +102 -0
  97. data/lib/ace/assign/molecules/queue_scanner.rb +130 -0
  98. data/lib/ace/assign/molecules/skill_assign_source_resolver.rb +376 -0
  99. data/lib/ace/assign/molecules/step_renumberer.rb +227 -0
  100. data/lib/ace/assign/molecules/step_writer.rb +246 -0
  101. data/lib/ace/assign/organisms/assignment_executor.rb +1299 -0
  102. data/lib/ace/assign/version.rb +7 -0
  103. data/lib/ace/assign.rb +141 -0
  104. metadata +289 -0
data/CHANGELOG.md ADDED
@@ -0,0 +1,1415 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.37.0] - 2026-03-23
11
+
12
+ ### Changed
13
+ - 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.
14
+ - Replaced residual "phases" terminology with "steps" in docs/handbook.md, docs/getting-started.md, and e2e fixture directories.
15
+ - Fixed broken "See Also" links in docs/exit-codes.md pointing to non-existent README anchors.
16
+
17
+ ### Technical
18
+ - Normalized code formatting across 40+ lib and test files via StandardRB autofix (style-only, no behavior changes).
19
+
20
+ ## [0.36.13] - 2026-03-23
21
+
22
+ ### Changed
23
+ - Refreshed `README.md` to the current package layout pattern with logo/badges header, compatibility line, quick links, and use-case-oriented overview content.
24
+ - Updated README skill inventory to include `as-assign-recover-fork` and aligned the footer to the canonical ACE package format.
25
+
26
+ ## [0.36.12] - 2026-03-22
27
+
28
+ ### Fixed
29
+ - Unified assignment preset naming to `work-on-task` by removing `work-on-tasks` from defaults and fixtures.
30
+ - Restored single-task shorthand support by normalizing `--taskref` inputs to `taskrefs` during preset validation/expansion.
31
+
32
+ ### Changed
33
+ - 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.
34
+
35
+ ## [0.36.11] - 2026-03-22
36
+
37
+ ### Fixed
38
+ - Restored the `ace-assign` default fork timeout to `1800` in `ace-assign/.ace-defaults/assign/config.yml`.
39
+
40
+ ### Changed
41
+ - Realigned assignment default provider/timeout guidance in `.ace/assign/config.yml` with package defaults for this release cycle.
42
+
43
+ ## [0.36.10] - 2026-03-22
44
+
45
+ ### Changed
46
+ - Documented assignment config provider/timeout default tuning in release notes for `.ace/assign/config.yml` and `ace-assign/.ace-defaults/assign/config.yml`.
47
+ - Restored missing trailing newline in `handbook/workflow-instructions/assign/run-in-batches.wf.md`.
48
+
49
+ ## [0.36.9] - 2026-03-22
50
+
51
+ ### Changed
52
+ - Remove `mise exec --` wrapper from test fixture strings to match updated command invocation style.
53
+ - 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).
54
+
55
+ ## [0.36.8] - 2026-03-22
56
+
57
+ ### Fixed
58
+ - Mark task completion flows to archive tasks as well in both single-task and batch presets.
59
+ - Load task-done updates through the canonical `wfi://task/update` workflow and ensure parent-task closure updates are archived.
60
+
61
+ ## [0.36.7] - 2026-03-22
62
+
63
+ ### Fixed
64
+ - `mark-task-done` step now checks and closes parent tasks when all children are done, preventing status drift in task hierarchies.
65
+
66
+ ## [0.36.6] - 2026-03-22
67
+
68
+ ### Changed
69
+ - Add `create-retro` as the final child step in review-cycle fork subtrees, ensuring each review cycle captures its own retrospective.
70
+ - Add ordering rules (`retro-after-release`, `retro-after-apply-feedback`) to composition rules.
71
+ - Declare `review-sessions` as consumed input for the `create-retro` step.
72
+
73
+ ## [0.36.5] - 2026-03-22
74
+
75
+ ### Technical
76
+ - Clarified release notes to document the intentional `codex:gpt@yolo` assignment default required for current Codex CLI compatibility.
77
+
78
+ ## [0.36.4] - 2026-03-22
79
+
80
+ ### Fixed
81
+ - Clarified that assignment execution remains on `codex:gpt@yolo` because the current Codex CLI cannot combine `--full-auto` with `--dangerously-bypass-approvals-and-sandbox`.
82
+
83
+ ## [0.36.3] - 2026-03-22
84
+
85
+ ### Fixed
86
+ - Clarified the documented assignment execution default after docs drift described it as `codex:codex@yolo` instead of the intentional `codex:gpt@yolo`.
87
+
88
+ ## [0.36.2] - 2026-03-22
89
+
90
+ ### Fixed
91
+ - Remove trailing empty lines in code blocks across documentation files.
92
+
93
+ ## [0.36.1] - 2026-03-22
94
+
95
+ ### Fixed
96
+ - Include `docs/**/*` in gemspec so documentation ships with the gem.
97
+ - Remove piped command example from usage guide to align with command-integrity contract.
98
+
99
+ ## [0.36.0] - 2026-03-22
100
+
101
+ ### Added
102
+ - Added tutorial-style `docs/getting-started.md` and `docs/handbook.md` for clearer onboarding and package workflow discovery
103
+ - Added `docs/demo/ace-assign-getting-started.tape` and `docs/demo/ace-assign-getting-started.gif` demo artifacts
104
+
105
+ ### Changed
106
+ - Rewrote `README.md` as a concise landing page with value-first messaging and documentation links
107
+ - Refreshed `docs/usage.md` to align with current CLI commands, scoped assignment examples, and command-integrity guidance
108
+ - Updated gemspec summary/description text to match the new README tagline and positioning
109
+
110
+ ## [0.35.1] - 2026-03-21
111
+
112
+ ### Added
113
+ - `mark-tasks-done` step (number 155) in `work-on-tasks` preset to mark parent/umbrella tasks as done after all subtask forks complete
114
+
115
+ ## [0.35.0] - 2026-03-21
116
+
117
+ ### Added
118
+ - `create-retro` step in `work-on-task` and `work-on-tasks` presets to capture process learnings after each assignment
119
+
120
+ ### Changed
121
+ - `verify-e2e` step now runs E2E tests with fix loops (up to 3 cycles) instead of only reviewing coverage; runs in forked context
122
+ - `update-pr-desc` step now runs in forked context to prevent context-pressure truncation of grouped-stats output
123
+
124
+ ## [0.34.1] - 2026-03-18
125
+
126
+ ### Changed
127
+ - Added `unit-coverage-reviewed` decision evidence to `TS-ASSIGN-001` and `TS-ASSIGN-002` E2E scenarios to map coverage against related unit tests.
128
+
129
+ ## [0.34.0] - 2026-03-18
130
+
131
+ ### Changed
132
+ - Renamed "phases" to "steps" throughout the assignment system: models, atoms, molecules, organisms, CLI commands, config, catalog, and all user-facing strings
133
+ - Renamed file extension from `.ph.md` to `.st.md` for step files
134
+ - Renamed catalog directory from `catalog/phases/` to `catalog/steps/` and files from `*.phase.yml` to `*.step.yml`
135
+ - Renamed YAML keys: `sub-phases` → `sub-steps`, `sub_phases` → `sub_steps`
136
+
137
+ ### Fixed
138
+ - `AssignmentExecutor.start` now reads `config["steps"]` matching what `AssignmentLauncher.write_job_file` writes (was reading `config["phases"]`, causing "No phases defined in config" error)
139
+
140
+ ## [0.33.1] - 2026-03-18
141
+
142
+ ### Changed
143
+ - Migrated CLI namespace from `Ace::Core::CLI::*` to `Ace::Support::Cli::*` (ace-support-cli is now the canonical home for CLI infrastructure).
144
+
145
+
146
+ ## [0.33.0] - 2026-03-18
147
+
148
+ ### Changed
149
+ - Removed legacy backward-compatibility behavior as part of the 0.10 cleanup release.
150
+
151
+
152
+ ## [0.32.4] - 2026-03-15
153
+
154
+ ### Technical
155
+ - Optimized test suite I/O: reuse one tmpdir per test class instead of creating/destroying per test method (~176 → ~16 tmpdir cycles)
156
+ - Removed 2 unnecessary `sleep(0.1)` calls in assignment manager tests (200ms saved)
157
+ - Converted bare `Dir.mktmpdir` calls to shared class-level tmpdir in fork session launcher tests
158
+
159
+ ## [0.32.3] - 2026-03-15
160
+
161
+ ### Fixed
162
+ - Release step catalog entry now references `wfi://release/publish` workflow
163
+ - Review cycle release instructions in work-on-task and work-on-tasks presets now point to `ace-bundle wfi://release/publish`
164
+
165
+ ### Changed
166
+ - Drive workflow batch continuation rule prevents driver from pausing between child fork-runs
167
+ - Drive workflow adds transient network failure retry guidance (wait 30s, re-fork once)
168
+
169
+ ## [0.32.2] - 2026-03-15
170
+
171
+ ### Changed
172
+ - Migrated CLI framework from dry-cli to ace-support-cli
173
+
174
+ ## [0.32.1] - 2026-03-13
175
+
176
+ ### Fixed
177
+ - Rendered `verify-test-suite` and `verify-e2e` assignment steps now use assignment-safe step templates instead of persisting the full broad audit workflow bodies.
178
+ - Cleaned assignment overlay serialization so generated child steps no longer leak nested `Assignment-specific context` / `Task context` headers or malformed double bullets.
179
+
180
+ ### Technical
181
+ - Preserved local assignment render metadata when canonical step catalog entries merge with workflow-backed skill metadata.
182
+ - Added regression coverage for step-template rendering and structural assignment-overlay cleanup.
183
+
184
+ ## [0.32.0] - 2026-03-13
185
+
186
+ ### Changed
187
+ - Switched generated assignment artifacts for public steps to use workflow-backed execution references instead of generated `skill:` step contracts.
188
+ - Restored assignment-specific orchestration overlays for `work-on-task` and `work-on-tasks` while keeping canonical workflow bodies as the reusable execution source.
189
+
190
+ ### Technical
191
+ - Promoted `workflow` to a first-class parsed/runtime step field across assignment status, queue scanning, and step persistence.
192
+ - Updated assign resolver, executor, presets, and regression fixtures to materialize public steps from canonical workflow bodies with provenance metadata.
193
+
194
+ ## [0.31.5] - 2026-03-13
195
+
196
+ ### Technical
197
+ - Completed canonical assign skill catalog composition and workflow-backed step metadata wiring for public assignments.
198
+
199
+ ## [0.31.4] - 2026-03-13
200
+
201
+ ### Changed
202
+ - Updated canonical assign skills to explicitly run bundled workflows in the current project and execute them end-to-end.
203
+
204
+ ## [0.31.3] - 2026-03-13
205
+
206
+ ### Added
207
+ - 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.
208
+
209
+ ### Technical
210
+ - Hardened `TS-ASSIGN-001` fixture setup and verification flow by capturing pre-flight exit status and output artifacts.
211
+
212
+ ## [0.31.2] - 2026-03-12
213
+
214
+ ### Changed
215
+ - Updated the prepare-workflow E2E fixtures to use the current top-level `steps:` schema for single-task and batch workflows.
216
+ - Refreshed hierarchy E2E guidance to capture copied auto-completion reports and to use the current fixture layout under `fixtures/*/jobs/`.
217
+
218
+ ## [0.31.1] - 2026-03-10
219
+
220
+ ### Fixed
221
+ - Restored canonical skill resolution to honor nav source priority while preserving package-default fallback discovery for local monorepo workflows and tests.
222
+
223
+ ### Changed
224
+ - Added a runtime dependency on `ace-support-nav` so assignment skill discovery shares the same source registry semantics as `skill://` navigation.
225
+
226
+ ### Technical
227
+ - Replaced invalid shell-tool allowances in canonical assignment skills with repo-approved tooling metadata and expanded resolver regression coverage for override precedence.
228
+
229
+ ## [0.31.0] - 2026-03-09
230
+
231
+ ### Changed
232
+ - Switched `SkillAssignSourceResolver` defaults to canonical `skill-sources` discovery and removed hardcoded provider-tree fallback paths as the primary model.
233
+ - Updated assign defaults and compose workflow guidance to describe compatibility catalog entries as non-authoritative inputs.
234
+
235
+ ### Technical
236
+ - Updated resolver and assignment executor regression fixtures to register canonical skill sources (`handbook/skills`) instead of relying on `.claude/skills` defaults.
237
+ - Clarified vision documentation that canonical skills live in package `handbook/skills` and provider trees are generated projections.
238
+
239
+ ## [0.30.0] - 2026-03-09
240
+
241
+ ### Added
242
+ - 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/`.
243
+
244
+ ### Changed
245
+ - Expanded `skill://` canonical discovery coverage for `ace-assign` beyond the initial single-skill seed.
246
+
247
+
248
+ ## [0.29.0] - 2026-03-09
249
+
250
+ ### Added
251
+ - Canonical skill resolution in `SkillAssignSourceResolver` with assign-capable filtering by `skill.kind` and `assign.source`
252
+ - Step catalog reordering in `AssignmentExecutor` to prioritize canonical assign-capable skills over compatibility bridge entries
253
+
254
+ ## [0.28.0] - 2026-03-09
255
+
256
+ ### Added
257
+ - 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`.
258
+
259
+ ## [0.27.0] - 2026-03-09
260
+
261
+ ### Added
262
+ - Added canonical orchestration skill example at `handbook/skills/as-assign-start/SKILL.md` for typed skill taxonomy tracing.
263
+ - Restored `assign/start` as a legacy compatibility workflow binding for canonical orchestration skill discovery.
264
+
265
+ ### Changed
266
+ - Added projected provider-facing `.agent/skills/as-assign-start/SKILL.md` entry for representative orchestration skill parity.
267
+
268
+ ## [0.26.2] - 2026-03-08
269
+
270
+ ### Changed
271
+ - 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.
272
+ - Added explicit rolling scheduler-loop guidance for parallel batch execution in `assign/drive`.
273
+ - Added user-document tracking frontmatter to `ace-assign` user docs (`README.md`, `docs/usage.md`).
274
+
275
+ ### Technical
276
+ - Added missing guide frontmatter to `handbook/guides/fork-context.g.md` so package docs are consistently tracked by `ace-docs`.
277
+
278
+
279
+ ## [0.26.1] - 2026-03-08
280
+
281
+ ### Fixed
282
+ - `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.
283
+ - Scoped `status` output no longer shows fork execution guidance for already-completed fork steps.
284
+
285
+ ### Changed
286
+ - Updated `assign/drive` workflow delegation rules to explicitly prevent calling `fork-run` again when already operating inside the same scoped fork boundary.
287
+
288
+ ### Technical
289
+ - Added regressions for leaf-root fork activation and scoped done-step status guidance behavior.
290
+
291
+ ## [0.26.0] - 2026-03-08
292
+
293
+ ### Added
294
+ - 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.
295
+ - Added `--max-parallel` guidance to run-in-batches workflow/skill contracts with default parallel cap semantics.
296
+
297
+ ### Fixed
298
+ - Corrected status `FORK` column semantics to reflect `context: fork` instead of child presence, preventing non-fork batch parents from being misinterpreted as fork targets.
299
+
300
+ ### Changed
301
+ - Updated run-in-batches guidance so `--sequential` now preserves per-item fork execution while switching scheduler mode to sequential metadata.
302
+ - Updated drive workflow delegation guidance to use fork-context signals and document retry-then-stop behavior for parallel child failures.
303
+
304
+ ## [0.25.1] - 2026-03-08
305
+
306
+ ### Changed
307
+ - Removed the legacy `as-assign-start` compatibility skill entrypoint.
308
+
309
+ ### Technical
310
+ - Removed the `assign/start` legacy compatibility workflow file and retained `assign/create` as the public creation flow.
311
+
312
+ ## [0.25.0] - 2026-03-08
313
+
314
+ ### Added
315
+ - 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`.
316
+ - Added new compose-target steps `squash-changelog` and `rebase-with-main` with skill mappings to `as-docs-squash-changelog` and `as-git-rebase`.
317
+
318
+ ### Changed
319
+ - 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.
320
+ - Reworked `assign/compose` workflow with deterministic phrase matching, explicit-intent precedence, and named hard-rule reorder explanations.
321
+ - Extended composition hard-ordering guidance with `squash-before-rebase`, `rebase-before-push`, and `rebase-before-update-pr`.
322
+
323
+ ### Technical
324
+ - Added workflow-level guidance clarifying that skill-backed step expansion stays runtime-owned via `assign.source` during `ace-assign create`.
325
+
326
+ ## [0.24.0] - 2026-03-08
327
+
328
+ ### Added
329
+ - Added `codex` to the default `subtree.native_review_clients` allow-list so subtree pre-commit review can use native `/review` in Codex runtimes.
330
+
331
+ ### Technical
332
+ - Updated assignment-executor skill-source regression fixtures to the current `wfi://task/work` resolution path and `ace-task` workflow layout.
333
+
334
+ ## [0.23.1] - 2026-03-08
335
+
336
+ ### Fixed
337
+ - Updated assignment release guidance so `release*` child steps consistently route through `/as-release`, including suffixed review-cycle release steps.
338
+
339
+ ### Changed
340
+ - Updated release step, preset, and fixture instructions to describe coordinated multi-package releases and both package and root changelog updates.
341
+
342
+ ## [0.23.0] - 2026-03-08
343
+
344
+ ### Changed
345
+ - Remove hardcoded `providers.cli_args` config; use ace-llm `@preset` suffixes for provider permission flags
346
+ - Reframed the public assignment UX around `as-assign-create` + `as-assign-drive`, including explicit `--run` create-to-drive handoff guidance in the create workflow.
347
+ - 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.
348
+
349
+ ### Technical
350
+ - Updated `assign/start` workflow positioning and fixture usage comments to stop teaching prepare/start as the recommended public flow.
351
+ - 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.
352
+
353
+ ## [0.22.7] - 2026-03-08
354
+
355
+ ### Technical
356
+ - Stabilized create-command path-relativity test setup by pinning `PROJECT_ROOT_PATH` to the temp workspace and clearing `ProjectRootFinder` cache around the test.
357
+
358
+ ## [0.22.6] - 2026-03-08
359
+
360
+ ### Fixed
361
+ - Rebalanced active step selection after `add --child` when injecting under the currently active step so execution moves into the newly created child subtree.
362
+
363
+ ### Technical
364
+ - Added `StepWriter#mark_pending` to clear runtime-only step state when demoting blocked active parents.
365
+ - Added regression coverage for active-step rebalance behavior in parent/child/grandchild injection flows and for the new pending-state writer helper.
366
+ - Hardened TS-ASSIGN-002 Goal 5 artifacts to require JSON status oracles for scoped and unscoped assertions, reducing false positives from report synthesis drift.
367
+
368
+ ## [0.22.5] - 2026-03-07
369
+
370
+ ### Technical
371
+ - Updated create-command path-relativity test setup to run from the temporary cache directory so `Created:` output remains relative when expected.
372
+
373
+ ## [0.22.4] - 2026-03-07
374
+
375
+ ### Technical
376
+ - **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.
377
+
378
+ ## [0.22.2] - 2026-03-07
379
+
380
+ ### Fixed
381
+ - Normalized `ace-assign create` output path formatting so `Created:` and `Created from hidden spec:` use the same display-path strategy.
382
+
383
+ ### Technical
384
+ - Added regression coverage for relative create output formatting and legacy `steps/` source-config path preservation.
385
+
386
+ ## [0.22.0] - 2026-03-07
387
+
388
+ ### Added
389
+ - `ace-assign create` now reports hidden-spec provenance with `Created from hidden spec: ...` when source config is under `.ace-local/assign/jobs/`.
390
+ - Added create-command and assignment-executor coverage for hidden-spec path retention and provenance output.
391
+
392
+ ### Changed
393
+ - 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/`.
394
+ - `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.
395
+
396
+ ## [0.21.3] - 2026-03-07
397
+
398
+ ### Technical
399
+ - 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.
400
+
401
+ ## [0.21.2] - 2026-03-07
402
+
403
+ ### Technical
404
+ - 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.
405
+
406
+ ## [0.21.1] - 2026-03-07
407
+
408
+ ### Technical
409
+ - Completed valid-cycle feedback application pass for PR #241 and confirmed there were no pending medium+ review feedback items to apply before release.
410
+
411
+ ## [0.21.0] - 2026-03-07
412
+
413
+ ### Added
414
+ - New `pre-commit-review` step catalog entry for subtree task workflows, enabling native client review gate behavior before verification/release.
415
+ - New subtree review defaults in assign config: `pre_commit_review`, `pre_commit_review_provider`, `pre_commit_review_block`, and `native_review_clients`.
416
+
417
+ ### Changed
418
+ - `task/work` workflow sub-step sequence now includes `pre-commit-review` between `work-on-task` and `verify-test`.
419
+ - Child step instruction generation now renders config-aware native review run/skip/block guidance for `pre-commit-review`.
420
+
421
+ ## [0.20.1] - 2026-03-05
422
+
423
+ ### Fixed
424
+ - `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.
425
+ - Stall-reason clearing on successful rerun now skips steps that never had a `stall_reason`, avoiding unnecessary file I/O on every subtree step.
426
+
427
+ ## [0.20.0] - 2026-03-05
428
+
429
+ ### Added
430
+ - 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.
431
+ - Session metadata file (`<root>-session.yml`) written for every fork run, capturing `session_id`, `provider`, `model`, and `completed_at` for traceability.
432
+ - Stall error messages now include `Session: <id>` when session metadata is available, enabling direct trace to agent session.
433
+
434
+ ## [0.19.3] - 2026-03-05
435
+
436
+ ### Technical
437
+ - Extracted `STALL_REASON_MAX = 2000` constant in `ForkRun` to replace magic number and serve as shared source of truth for production code and tests.
438
+ - Tightened truncation test assertion to pin exact expected output length rather than a loose upper bound.
439
+
440
+ ## [0.19.2] - 2026-03-05
441
+
442
+ ### Fixed
443
+ - 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.
444
+ - Multiline `stall_reason` values in `ace-assign status` output now display with indented continuation lines for readable terminal formatting.
445
+
446
+ ### Technical
447
+ - Added `test_stall_reason_cleared_after_successful_rerun` regression test verifying `stall_reason` is cleared across all subtree steps after a successful rerun.
448
+
449
+ ## [0.19.1] - 2026-03-05
450
+
451
+ ### Fixed
452
+ - `read_last_message` now rescues `SystemCallError` to prevent I/O errors from masking the stall error message.
453
+ - Clear stale `stall_reason` from all subtree step files on successful fork-run completion, preventing misleading status after recovery.
454
+
455
+ ### Technical
456
+ - Added comment in `ForkSessionLauncher` documenting the blocking assumption that makes the Layer 1 check-then-write pattern safe from concurrent writes.
457
+
458
+ ## [0.19.0] - 2026-03-05
459
+
460
+ ### Added
461
+ - 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.
462
+ - `stall_reason` field added to Step model and frontmatter: persisted when a fork stall is detected, visible via `ace-assign status`.
463
+ - 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).
464
+
465
+ ## [0.18.2] - 2026-03-04
466
+
467
+ ### Fixed
468
+ - 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.
469
+
470
+ ### Changed
471
+ - QueueState now exposes `in_progress_steps` and `in_progress_in_subtree` helpers used by fork/scoped execution guards.
472
+
473
+ ## [0.18.1] - 2026-03-04
474
+
475
+ ### Changed
476
+ - Default assignment cache directory now uses `.ace-local/assign`.
477
+
478
+
479
+ ## [0.18.0] - 2026-03-04
480
+
481
+ ### Changed
482
+ - Normalize `providers.cli_args` values to arrays and support mixed string/array CLI argument merging in fork launcher.
483
+
484
+ ## [0.17.3] - 2026-03-04
485
+
486
+ ### Changed
487
+ - 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
488
+ - Align compose recipes to the forked review-cycle model and set default `review_cycles` to 3
489
+ - Update assign compose/prepare workflow instructions and examples to document forked review-cycle expansion semantics
490
+
491
+ ## [0.17.2] - 2026-03-04
492
+
493
+ ### Fixed
494
+ - Workflow instructions (create, drive, start) corrected to use `.ace-local/assign/` path (not `.ace-local/ace-assign/`)
495
+
496
+ ## [0.17.1] - 2026-03-04
497
+
498
+ ### Fixed
499
+ - README assignment storage path corrected to short-name convention (`.ace-local/assign/` not `.ace-local/ace-assign/`)
500
+
501
+ ## [0.17.0] - 2026-03-04
502
+
503
+ ### Changed
504
+ - Default cache directory migrated from `.cache/ace-assign` to `.ace-local/assign`
505
+
506
+ ## [0.16.2] - 2026-03-04
507
+
508
+ ### Changed
509
+ - 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`
510
+ - Update PR skill references in assign workflows and E2E fixture presets to the new `ace-github-pr-*` naming convention
511
+
512
+ ## [0.16.1] - 2026-03-04
513
+
514
+ ### Fixed
515
+ - Correct `.agents/skills` typo to `.agent/skills` in default config and `SkillAssignSourceResolver` — skill discovery now uses the canonical provider-neutral path
516
+
517
+ ## [0.16.0] - 2026-03-04
518
+
519
+ ### Added
520
+ - New `onboard-base` catalog step — loads base project context via `ace-bundle project-base`
521
+ - New `task-load` catalog step — loads task behavioral spec via `ace-bundle task://<taskref>`
522
+ - Taskref placeholder substitution in catalog step descriptions — `<taskref>` in step descriptions is replaced with actual task reference during child instruction building
523
+
524
+ ### Changed
525
+ - Default assignment presets updated to use ace-task
526
+
527
+ ### Fixed
528
+ - Apply session 8q2 learnings to workflow and presets
529
+
530
+ ### Technical
531
+ - Increase timeout for hierarchy E2E scenario
532
+
533
+ ## [0.15.1] - 2026-03-01
534
+
535
+ ### Added
536
+ - Fork-run crash recovery protocol in drive workflow — detection, commit partial work, progress report, inject recovery steps, re-fork pattern for partial completion scenarios
537
+
538
+ ## [0.15.0] - 2026-02-28
539
+
540
+ ### Added
541
+ - Add `verify-test-suite` step to `work-on-task` preset between `mark-task-done` and `verify-e2e` with profiling and performance budget enforcement
542
+ - Add `verify-test-suite` step (number 012) to `work-on-tasks` preset between batch-parent and `verify-e2e`
543
+ - Enrich `verify-test-suite` step catalog with structured steps: `run-package-tests`, `check-performance-budgets`, `fix-violations`, `run-suite`
544
+ - Add performance budget thresholds to step definition: atoms <50ms, molecules <100ms, integration <1s, full package <30s
545
+ - Move `verify-test-suite` from Optional to Core in compose workflow for "Implement + PR" and "Batch tasks" intents
546
+ - Add `verify-test-suite` inclusion guidance note to compose workflow Step Selection Guidelines
547
+
548
+ ### Changed
549
+ - Strengthen `verify-test-suite` composition rule from `recommended` to `required` when assignment includes `work-on-task` or `fix-bug`
550
+
551
+ ## [0.14.0] - 2026-02-28
552
+
553
+ ### Added
554
+ - Add `verify-e2e` step to catalog: E2E coverage review and targeted scenario execution for modified packages
555
+ - Add `update-docs` step to catalog: public-facing documentation updates when CLI contracts or public APIs change
556
+ - 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`)
557
+ - Add batch-level `verify-e2e` (step 015) and `update-docs` (step 025) to `work-on-tasks` preset
558
+ - Add ordering rules to `composition-rules.yml`: `e2e-before-release`, `update-docs-after-release`, `update-docs-before-pr`, `e2e-after-verify`
559
+ - Add conditional rule to suggest `verify-e2e` and `update-docs` when assignment touches CLI commands or public API
560
+ - Add `e2e-review-run-pair` and `docs-update-validate-pair` to composition pairs
561
+ - Update `compose.wf.md` Step Selection Guidelines table to include `verify-e2e` and `update-docs` in all relevant workflow intents with skip guidance
562
+
563
+ ## [0.13.4] - 2026-02-26
564
+
565
+ ### Fixed
566
+ - Restore scoped status filter compatibility by honoring legacy `filter` formats (`010.01` and `(assignment@)010.01`) while preserving explicit `--assignment` targeting precedence
567
+ - Restore scoped fork PID telemetry lines in `status` output (`Scoped Fork PID`, PID tree, and PID file path) when fork metadata exists
568
+
569
+ ### Added
570
+ - Re-add explicit `--filter` option to `status` command for CLI-level backward compatibility
571
+ - Add regression coverage ensuring `assignment` target overrides `filter` when both are provided
572
+
573
+ ## [0.13.3] - 2026-02-26
574
+
575
+ ### Added
576
+ - Document `advance()` legacy bridge behavior with explanatory comment
577
+ - Add `start` and piped stdin examples to CLI `--help` output
578
+ - Add "Starting Work" section to `docs/usage.md` documenting sequential auto-advance, explicit `start`, and piped stdin
579
+
580
+ ### Changed
581
+ - Use standard Keep a Changelog section headers (replace non-standard `Technical` with `Changed`)
582
+
583
+ ## [0.13.2] - 2026-02-26
584
+
585
+ ### Fixed
586
+ - Short-circuit stdin read in `finish` when `--report` file content is already present, preventing unnecessary I/O or blocking
587
+ - Narrow `rescue` in `read_stdin_if_piped` to `IOError, Errno::EBADF` instead of broad `StandardError`
588
+ - Validate `fork_root` existence in `find_target_step_for_start` consistently regardless of `step_number` presence
589
+
590
+ ### Added
591
+ - Integration test for `finish` auto-advance and `start` conflict detection across sequential steps
592
+ - Test for `--report` file precedence over piped stdin when both are present
593
+
594
+ ## [0.13.1] - 2026-02-26
595
+
596
+ ### Fixed
597
+ - 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
598
+ - Use `ConfigNotFoundError` (exit 3) in `advance()` for missing report files, consistent with `finish` command behavior
599
+
600
+ ### Added
601
+ - Add positive test cases for `start` and `finish` commands with explicit `step` argument targeting
602
+
603
+ ## [0.13.0] - 2026-02-26
604
+
605
+ ### Added
606
+ - Add `start` command for explicit step lifecycle control: `ace-assign start [STEP]`
607
+ - Add `finish` command replacing `report`: `ace-assign finish [STEP] --report <file>` or via piped stdin
608
+ - Support piped stdin as report source in `finish`, eliminating mandatory temp-file creation
609
+ - Enforce strict `start` conflict detection: fails when another step is already `in_progress`
610
+ - Add `start_step` and `finish_step` APIs to assignment executor for programmatic lifecycle control
611
+
612
+ ### Changed
613
+ - Replace `ace-assign report` with `ace-assign finish --report <file>` across all docs and workflows
614
+ - Update `assign/create.wf.md` and `assign/drive.wf.md` to use `finish` command pattern
615
+ - Update `README.md`, `docs/usage.md`, and `docs/exit-codes.md` to reflect new command surface
616
+ - Deterministic report input precedence: `--report` file wins over stdin when both are present
617
+
618
+ ### Removed
619
+ - Remove `report` command from CLI surface (replaced by `finish`)
620
+
621
+ ### Changed
622
+ - Replace `report_command_test.rb` with `finish_command_test.rb` and `start_command_test.rb`
623
+ - Update e2e test runner docs in `ace-assign` and `ace-overseer` to use `finish` pattern
624
+
625
+ ## [0.12.23] - 2026-02-26
626
+
627
+ ### Fixed
628
+ - Anchor FORK column detection regex to CHILDREN pattern in `assign/drive` workflow, preventing false matches on step names containing 'yes'
629
+
630
+ ## [0.12.22] - 2026-02-26
631
+
632
+ ### Added
633
+ - Add explicit FORK column to status output showing "yes" for steps with children, making delegation signal unmissable
634
+ - Introduce adaptive recovery for failed subtrees with retry/fail-children strategies
635
+ - Introduce fork PID telemetry and scoped status filtering for subprocess tracking
636
+
637
+ ### Changed
638
+ - Decouple assignment targeting from environment variables; rely on explicit `--assignment <id>` flags
639
+ - Enhance plan-task instructions for behavioral spec adherence
640
+ - Update `assign/drive` workflow to reference FORK column instead of subtle "Fork subtree detected" message
641
+
642
+ ### Technical
643
+ - Add validation order to E2E test expectations
644
+ - Update E2E test runner and verifier configurations
645
+ - Add test for FORK column in status output
646
+
647
+ ## [0.12.21] - 2026-02-25
648
+
649
+ ### Changed
650
+ - 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.
651
+ - Update `assign/drive` workflow and fork-context guide to use explicit assignment flags for subprocess delegation.
652
+
653
+ ### Fixed
654
+ - Eliminate scoped report/status behavior that depended on mutable process environment, reducing cross-process/test leakage risk.
655
+
656
+ ## [0.12.20] - 2026-02-25
657
+
658
+ ### Changed
659
+ - 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
660
+
661
+ ## [0.12.19] - 2026-02-24
662
+
663
+ ### Fixed
664
+ - 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.
665
+
666
+ ### Technical
667
+ - Harden TS-ASSIGN-002 hierarchy E2E runner/verifier instructions for scoped completion commands and scoped subtree status assertions.
668
+
669
+ ## [0.12.18] - 2026-02-23
670
+
671
+ ### Technical
672
+ - Updated internal dependency version constraints to current releases
673
+
674
+ ## [0.12.17] - 2026-02-22
675
+
676
+ ### Changed
677
+ - Migrate CLI to standard help pattern: register HelpCommand for `--help`/`-h`, simplify `start()` by removing DWIM default routing
678
+
679
+ ## [0.12.16] - 2026-02-22
680
+
681
+ ### Fixed
682
+ - Prevent fork subtree recursion by auto-scoping `status` command to `ACE_ASSIGN_FORK_ROOT` when set
683
+ - Mark first workable child step as `in_progress` before launching forked session in `fork-run`
684
+
685
+ ## [0.12.15] - 2026-02-22
686
+
687
+ ### Technical
688
+ - Update `ace-bundle project` → `ace-bundle load project` in README, fork-context guide, and test fixture
689
+
690
+ ## [0.12.14] - 2026-02-22
691
+
692
+ ### Added
693
+ - Subtree guard step in drive workflow — driver reviews all fork report files before continuing to next step
694
+ - Report review instruction in split-subtree-root step template for fork context
695
+
696
+ ## [0.12.13] - 2026-02-22
697
+
698
+ ### Added
699
+ - Background execution guidance for fork-run in drive workflow (10-30 min timeout handling)
700
+ - Timeout note in split-subtree-root step template for environments with bash limits
701
+
702
+ ## [0.12.11] - 2026-02-22
703
+
704
+ ### Changed
705
+ - Migrate skill naming and invocation references to hyphenated `ace-*` format (no underscores).
706
+
707
+ ## [0.12.10] - 2026-02-21
708
+
709
+ ### Technical
710
+ - Stabilize `TS-ASSIGN-004` by replacing live `fork-run` invocation with deterministic scoped `status --assignment <id>@<step>` assertions
711
+ - Rewrite `TS-ASSIGN-006` to deterministic preset-expansion verification using `Ace::Assign::Atoms::PresetExpander` (no chat-skill invocation dependency)
712
+ - Add prepare-workflow fixture presets (`work-on-task.yml`, `work-on-tasks.yml`) for reproducible E2E generation checks
713
+
714
+ ## [0.12.9] - 2026-02-21
715
+
716
+ ### Changed
717
+ - Migrate skill name references to colon-free convention (`ace_domain_action` format) for non-Claude Code agent compatibility
718
+ - Update catalog steps and presets with new skill name format
719
+ - Update workflow instructions with new skill invocation patterns
720
+
721
+ ## [0.12.8] - 2026-02-21
722
+
723
+ ### Added
724
+ - Verification instructions in `mark-task-done` step requiring status confirmation after `ace-taskflow task done`
725
+ - Subtree completion section in drive workflow requiring task status verification before reporting complete
726
+
727
+ ## [0.12.7] - 2026-02-21
728
+
729
+ ### Fixed
730
+ - Add `CACHE_BASE` env var support to `cache_dir` so E2E sandboxes resolve the correct cache path
731
+ - Graceful return in `advance()` when fork subtree is exhausted (prevents "No step currently in progress" error)
732
+ - Nil guard in `report` command when `advance()` returns `completed: nil` after subtree exhaustion
733
+
734
+ ## [0.12.6] - 2026-02-21
735
+
736
+ ### Technical
737
+ - Add E2E tests for prepare workflow (from preset and from informal instructions)
738
+ - Fix `ASSIGNMENT_DIR` lookup in injection/renumbering E2E tests to use dynamic directory discovery
739
+ - Reorganize TS-ASSIGN-003b fixtures: replace flat `job.yaml` with structured `steps/` directory
740
+
741
+ ## [0.12.5] - 2026-02-20
742
+
743
+ ### Technical
744
+ - Update slash command refs to use git namespace (ace:git-create-pr, ace:git-update-pr-desc)
745
+
746
+ ## [0.12.4] - 2026-02-19
747
+
748
+ ### Technical
749
+ - Namespace workflow instructions into domain-specific subdirectories with updated wfi:// protocol URIs
750
+ - Update skill name references to use namespaced ace:namespace-action format
751
+
752
+ ## [0.12.3] - 2026-02-19
753
+
754
+ ### Changed
755
+ - Added clarifying comments for `skill: null` and `context.default: null` in reflect-and-refactor step
756
+
757
+ ## [0.12.2] - 2026-02-19
758
+
759
+ ### Changed
760
+ - Clarified `reflect-after-verify` ordering note to distinguish baseline verify from post-refactor re-verify
761
+ - Consolidated duplicate conditional suggestions for `work-on-task` into single entry with per-step strength overrides
762
+
763
+ ## [0.12.1] - 2026-02-19
764
+
765
+ ### Fixed
766
+ - `reflect-verify-cycle` pair changed from `sequential` to `conditional` — prevents overriding optional strength of reflect-and-refactor
767
+ - Renamed `max_recursion` to `max_reruns` in replan config for clarity
768
+
769
+ ## [0.12.0] - 2026-02-19
770
+
771
+ ### Added
772
+ - New `reflect-and-refactor` step in catalog — analyzes implementation against ATOM principles and executes targeted refactoring before PR creation
773
+ - Composition rules for reflect-and-refactor: ordering (after verify, before mark-done/release/retro), pairs (verify cycle, fix cycle, replan cycle), and conditional suggestion
774
+ - `create-retro` step now consumes `findings-report` from reflect-and-refactor as recommended prerequisite
775
+ - `implement-with-pr` recipe updated to include optional reflect-and-refactor step after work-on-task
776
+
777
+ ## [0.11.18] - 2026-02-19
778
+
779
+ ### Changed
780
+ - Remove dead `print_fork_scope_guidance` method and duplicate `fork_scope_root` definition from status command
781
+
782
+ ## [0.11.17] - 2026-02-17
783
+
784
+ ### Fixed
785
+
786
+ - `assignment_state` now checks `completed` before `failed` — assignments where all steps are done/failed correctly report `:completed` instead of `:failed`
787
+
788
+ ### Added
789
+
790
+ - `recently_active?` method on `QueueState` to detect stale in-progress steps (threshold: 1 hour)
791
+ - New `:stalled` assignment state for in-progress steps with no recent activity
792
+
793
+ ## [0.11.16] - 2026-02-17
794
+
795
+ ### Added
796
+
797
+ - `current_in_subtree` method on `QueueState` to find in-progress step within a subtree
798
+
799
+ ### Fixed
800
+
801
+ - Fork root executor now checks for existing in-progress step in subtree before advancing to next workable step
802
+
803
+ ## [0.11.15] - 2026-02-17
804
+
805
+ ### Added
806
+ - New catalog step definition `split-subtree-root` for split parent/fork-root orchestration instructions (default template in `.ace-defaults/assign/catalog/steps/`)
807
+
808
+ ### Changed
809
+ - Split parent steps with `sub_steps` now materialize as orchestration-only subtree roots:
810
+ - parent `skill` is removed to avoid duplicate execution semantics
811
+ - parent keeps `source_skill` metadata for traceability
812
+ - parent instructions are rendered from catalog template (project-overridable)
813
+ - 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
814
+
815
+ ### Fixed
816
+ - 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
817
+
818
+ ## [0.11.14] - 2026-02-17
819
+
820
+ ### Fixed
821
+ - 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
822
+ - Runtime-expanded child steps now use explicit `taskref` metadata (when present) for deterministic task context, and preserve it in child step frontmatter
823
+ - Fork session launcher now loads `ace/llm` so `fork-run` handles provider errors without crashing on uninitialized LLM error constants
824
+
825
+ ### Changed
826
+ - Preset expansion now substitutes placeholders across all step fields (including nested metadata), not only `name` and `instructions`
827
+
828
+ ## [0.11.13] - 2026-02-17
829
+
830
+ ### Fixed
831
+ - Scoped status (`--assignment <id>@<step>`) now selects the actionable step within the subtree instead of always reporting the scope root as current
832
+ - 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)
833
+
834
+ ## [0.11.12] - 2026-02-17
835
+
836
+ ### Added
837
+ - E2E regression scenario `TS-ASSIGN-005-no-skip-policy` to enforce hard no-skip drive policy and keep `ace:assign-drive` skill thin
838
+
839
+ ### Changed
840
+ - `drive-assignment` workflow now enforces hard no-skip execution for planned steps and removes skip-assessment behavior
841
+ - Added required attempt-first failure evidence (command + exact error) and post-report/fail status transition verification in drive workflow
842
+
843
+ ## [0.11.11] - 2026-02-17
844
+
845
+ ### Changed
846
+ - `drive-assignment` workflow now auto-delegates detected fork-enabled subtrees via `ace-assign fork-run --assignment <id>@<root>` before inline step execution
847
+ - Fork context guide now documents the runtime delegation path where parent drive sessions detect subtree roots and delegate scoped execution with `fork-run`
848
+
849
+ ## [0.11.10] - 2026-02-17
850
+
851
+ ### Changed
852
+ - Use `Atoms::NumberGenerator.subtask` for sub-step numbering in runtime expansion to keep numbering logic centralized
853
+ - Tree formatter state labels now explicitly include `pending` and `in_progress`
854
+
855
+ ### Fixed
856
+ - Added coverage for fork-scoped advancement when global current step is outside scoped subtree
857
+ - Added stable tests for CLI provider env propagation and query-interface sandbox propagation
858
+
859
+ ## [0.11.9] - 2026-02-17
860
+
861
+ ### Added
862
+ - Regression coverage for fork-scoped advancement when global current step is outside the scoped subtree
863
+
864
+ ### Changed
865
+ - `ace-assign status` now prints explicit `Current Status: <status>` for easier machine parsing and E2E assertions
866
+
867
+ ### Fixed
868
+ - Fork-scoped report advancement now selects and completes the next in-subtree step instead of completing an out-of-scope global current step
869
+ - E2E assertions for `parent` frontmatter now accept both single-quoted and double-quoted YAML scalars to avoid formatting-only false negatives
870
+
871
+ ## [0.11.8] - 2026-02-17
872
+
873
+ ### Added
874
+ - Shared assignment target parser for CLI commands with scoped syntax support: `--assignment <id>@<step>`
875
+ - New command tests covering assignment target parsing and scoped subtree execution behavior
876
+ - New E2E scenario scaffold for fork subtree scope isolation verification (`TS-ASSIGN-004`)
877
+
878
+ ### Changed
879
+ - Assignment-targeting commands (`status`, `report`, `fail`, `add`, `retry`, `fork-run`) now use a shared target resolver
880
+ - `ace-assign fork-run` accepts subtree root from scoped assignment target (`<id>@<step>`) and validates conflicts with `--root`
881
+ - Scoped status output (`--assignment <id>@<step>`) now renders only the selected node subtree and uses the scope root as displayed current step
882
+
883
+ ### Fixed
884
+ - Removed global current-step coupling in `fork-run` so subtree execution can start from any explicitly scoped root node
885
+
886
+ ## [0.11.7] - 2026-02-17
887
+
888
+ ### Added
889
+ - `ForkSessionLauncher` molecule to execute forked subtree sessions synchronously via `ace-llm` (`/ace:assign-drive`)
890
+ - Fork execution config defaults under assign namespace:
891
+ - `execution.provider`, `execution.timeout`
892
+ - `providers.cli`, `providers.cli_args`
893
+
894
+ ### Changed
895
+ - `ace-assign fork-run` now launches provider sessions directly (blocking) instead of printing shell instructions
896
+ - `fork-run` supports `--provider`, `--cli-args`, and `--timeout` overrides
897
+ - Post-launch validation enforces subtree outcome: complete (success), failed/incomplete (error)
898
+
899
+ ### Technical
900
+ - Add `ace-llm` runtime dependency for provider-driven fork execution
901
+ - Add command and molecule tests for launcher integration and fork-run completion/error paths
902
+
903
+ ## [0.11.6] - 2026-02-17
904
+
905
+ ### Added
906
+ - `ace-assign fork-run` command to initialize subtree-scoped fork execution using `ACE_ASSIGN_ID` and `ACE_ASSIGN_FORK_ROOT`
907
+ - Subtree scope helpers in queue state (`in_subtree?`, `subtree_steps`, `subtree_complete?`, `next_workable_in_subtree`, `nearest_fork_ancestor`)
908
+
909
+ ### Changed
910
+ - Status output now detects forked ancestor scope and guides operators to run `fork-run` for whole-subtree delegation
911
+ - Report output now distinguishes subtree completion from full assignment completion when fork scope is active
912
+ - Fork context guide and workflow docs updated for explicit parent-only fork semantics and subtree execution model
913
+
914
+ ### Fixed
915
+ - Split-substep expansion no longer writes `context: fork` on child steps (`onboard`, `plan-task`, `work-on-task`) when parent is forked
916
+ - Queue advancement in fork scope now stays inside `ACE_ASSIGN_FORK_ROOT` subtree and does not leak into sibling steps
917
+
918
+ ## [0.11.5] - 2026-02-17
919
+
920
+ ### Fixed
921
+ - Ensure runtime-expanded sub-steps are concrete and executable by materializing catalog metadata (skill, step focus) instead of generic placeholder instructions
922
+ - Preserve task context during sub-step expansion so child steps receive parent task instructions for deterministic parameter extraction
923
+ - Start assignments on the first workable leaf step (not parent container steps), preventing blocked progression in parent-child trees
924
+ - Use a single fork entrypoint for forked sub-step subtrees (first child), avoiding nested fork-per-child behavior
925
+
926
+ ## [0.11.4] - 2026-02-17
927
+
928
+ ### Changed
929
+ - Clarify assignment responsibility boundaries in workflow docs:
930
+ - `compose-assignment` is catalog-only and no longer models source/frontmatter ingestion
931
+ - `start-assignment` explicitly distinguishes catalog composition vs deterministic prepare/runtime expansion
932
+ - `prepare-assignment` explicitly documents runtime metadata expansion as the canonical path
933
+ - Update assignment skills metadata to reflect compose/prepare boundary semantics
934
+
935
+ ## [0.11.3] - 2026-02-17
936
+
937
+ ### Added
938
+ - `SkillAssignSourceResolver` molecule to resolve skill frontmatter `assign.source` URIs (currently `wfi://...`) into workflow assignment metadata
939
+ - Default config paths for skill/workflow discovery:
940
+ - `skill_source_paths`: `.agents/skills`, `.claude/skills`
941
+ - `workflow_source_paths`: `ace-taskflow/handbook/workflow-instructions`, `ace-assign/handbook/workflow-instructions`
942
+
943
+ ### Changed
944
+ - `AssignmentExecutor.start` now enriches steps with skill-declared workflow `assign.sub-steps` before expansion, enabling deterministic runtime sub-step materialization without compose-specific wiring
945
+ - `compose-assignment` workflow is now catalog-only and no longer documents source/frontmatter-driven step composition
946
+
947
+ ## [0.11.2] - 2026-02-16
948
+
949
+ ### Technical
950
+ - Add test cases for new composition ordering rules (`onboard-before-plan`, `plan-before-implementation`) and conditional `plan-task` suggestion
951
+
952
+ ## [0.11.1] - 2026-02-16
953
+
954
+ ### Fixed
955
+ - Consolidate duplicate conditional trigger for work-on-task in composition-rules
956
+
957
+ ## [0.11.0] - 2026-02-16
958
+
959
+ ### Added
960
+ - JIT plan-task step in implement-with-pr and implement-simple recipes (optional, between onboard and work-on-task)
961
+ - Composition rules: `onboard-before-plan` and `plan-before-implementation` ordering
962
+ - Conditional suggestion: recommend plan-task when work-on-task is included
963
+
964
+ ### Changed
965
+ - plan-task step catalog entry: produces `[implementation-plan]` only (removed `task-spec`), consumes `[project-context, task-spec]`
966
+
967
+ ## [0.10.2] - 2026-02-16
968
+
969
+ ### Changed
970
+ - Rename review cycle steps by type: `review-cycle-1` → `review-valid-1`, `review-cycle-2` → `review-fit-1` (with matching apply/release steps)
971
+ - Add shine review cycle (`review-shine-1`, `apply-shine-1`, `release-shine-1`) to `work-on-task` and `work-on-tasks` presets
972
+ - Update `default_count` from 2 to 3 in composition rules to reflect three review types (valid, fit, shine)
973
+ - Renumber post-review steps: reorganize-commits → 130, push-to-remote → 140, update-pr-desc → 150
974
+
975
+ ## [0.10.1] - 2026-02-16
976
+
977
+ ### Added
978
+ - **Preset progression**: `preset_progression` mapping in composition rules (cycle 1→`code-valid`, 2→`code-fit`, 3→`code-shine`)
979
+
980
+ ### Changed
981
+ - Review cycle presets in `work-on-task.yml` and `work-on-tasks.yml` now use step-specific presets instead of `code-deep`
982
+ - Updated `implement-with-pr.recipe.yml` to reference `preset_progression` from composition rules
983
+ - Updated `compose-assignment.wf.md` with preset progression documentation and examples
984
+
985
+ ## [0.9.3] - 2026-02-15
986
+
987
+ ### Fixed
988
+ - **AssignFrontmatterParser**: Validate that hint `include`/`skip` values are strings (rejects non-string types with descriptive error)
989
+
990
+ ## [0.9.2] - 2026-02-14
991
+
992
+ ### Fixed
993
+
994
+ - Frontmatter parser now rejects hints with both `include` and `skip` (mutual exclusivity validation)
995
+
996
+ ## [0.9.1] - 2026-02-14
997
+
998
+ ### Fixed
999
+
1000
+ - Tree formatter now correctly handles child-before-parent input ordering (two-pass index build)
1001
+ - Added regression test for unordered tree formatter input
1002
+
1003
+ ## [0.9.0] - 2026-02-15
1004
+
1005
+ ### Added
1006
+
1007
+ - Declarative assignment frontmatter: `assign:` block in `.s.md` and `.wf.md` files declares assignment intent (goal, variables, hints, sub-steps, context, parent)
1008
+ - `AssignFrontmatterParser` atom for extracting and validating `assign:` frontmatter blocks
1009
+ - `TreeFormatter` atom for rendering assignment hierarchy as indented tree with Unicode connectors
1010
+ - Parent-child assignment linking via `parent` field in Assignment model
1011
+ - `ace-assign list --tree` option for hierarchical assignment view
1012
+ - Sub-step fork enforcement in executor: steps with sub-steps create batch parent in fork context
1013
+ - Compose workflow integration: step 0 reads `assign:` frontmatter as structured input
1014
+ - `documentation.recipe.yml` for documentation workflows with research step
1015
+ - `release-only.recipe.yml` for version bump workflows without code changes
1016
+ - `work-on-docs.yml` preset exposing documentation workflow
1017
+ - `release-only.yml` preset exposing release-only workflow
1018
+ - `quick-implement.yml` preset for simple task implementation
1019
+ - `fix-bug.yml` preset for bug fix with review workflow
1020
+
1021
+ ### Changed
1022
+
1023
+ - Update timestamp dependency from `ace-support-timestamp` to `ace-b36ts`
1024
+
1025
+ ## [0.8.3] - 2026-02-14
1026
+
1027
+ ### Added
1028
+
1029
+ - New `mark-task-done` step for marking tasks as done in ace-taskflow after implementation
1030
+ - Composition rule to order `mark-task-done` after `work-on-task`
1031
+ - Conditional rule suggesting `mark-task-done` when assignment includes `work-on-task`
1032
+ - `mark-task-done` step in `work-on-task` preset (runs `ace-taskflow task done`)
1033
+ - Mark-done instruction in `work-on-tasks` child template for per-task completion
1034
+ - `mark-task-done` step in `implement-with-pr`, `implement-simple`, and `fix-and-review` recipes
1035
+
1036
+ ## [0.8.2] - 2026-02-13
1037
+
1038
+ ### Fixed
1039
+
1040
+ - `list` command now shows filtered count context (e.g., `1/2 assignment(s) shown`) when completed assignments are hidden
1041
+
1042
+ ## [0.8.1] - 2026-02-13
1043
+
1044
+ ### Added
1045
+
1046
+ - Tests for `--assignment` flag targeting on `add`, `fail`, `report`, and `retry` commands
1047
+ - Performance documentation note on `AssignmentDiscoverer#find_all`
1048
+
1049
+ ### Fixed
1050
+
1051
+ - Null safety for `info.name` in `list` command table output
1052
+
1053
+ ## [0.8.0] - 2026-02-13
1054
+
1055
+ ### Added
1056
+
1057
+ - Multi-assignment support with `.current` symlink for explicit assignment selection
1058
+ - `ace-assign list` command with table/JSON output, `--task` filter, and `--all` flag
1059
+ - `ace-assign select <id>` command for switching active assignment
1060
+ - `AssignmentInfo` model wrapping assignment with computed state and progress
1061
+ - `AssignmentDiscoverer` molecule for finding and filtering assignments
1062
+ - `--assignment` flag on `status`, `report`, `fail`, `add`, and `retry` commands
1063
+ - `ACE_ASSIGN_ID` environment variable for workflow context propagation
1064
+ - Assignment state computation: running, paused, completed, failed
1065
+ - Other assignments section in `status` output
1066
+ - Context propagation and multi-assignment management documentation in drive-assignment workflow
1067
+
1068
+ ## [0.7.5] - 2026-02-13
1069
+
1070
+ ### Fixed
1071
+
1072
+ - Misplaced doc block: `check_pair_completeness` documentation was above `check_conditional_rule`
1073
+ - Duplicate examples in `prepare-assignment.wf.md` now accurately reflect renamed `work-on-task` preset
1074
+ - `CatalogLoader.parse_step_file` now warns on stderr when a step YAML file fails to parse (was silently returning nil)
1075
+ - `compose-assignment.wf.md` uses Read/Glob tool references instead of `cat`/`ls` per project conventions
1076
+
1077
+ ### Changed
1078
+
1079
+ - Added inline documentation for prefix matching constraints in `find_step_index`
1080
+ - Added comment clarifying that mixed "and"/"or" conjunctions are not supported in conditional rules
1081
+
1082
+ ## [0.7.4] - 2026-02-13
1083
+
1084
+ ### Added
1085
+
1086
+ - New step catalog entries: `push-to-remote`, `release`, `reorganize-commits`
1087
+
1088
+ ### Fixed
1089
+
1090
+ - Missing `skill: ace:apply-feedback` in work-on-tasks preset apply-feedback steps
1091
+ - Ordering rules now match suffixed step names via prefix matching (e.g., `release` matches `release-minor`, `release-patch-1`)
1092
+ - Conditional composition rules with "and" conjunction now correctly require all conditions (was using `any?` instead of `all?`)
1093
+
1094
+ ### Changed
1095
+
1096
+ - Renamed `work-on-task-with-pr` preset to `work-on-task` (now the default/primary workflow)
1097
+ - Updated workflow documentation to reflect preset rename
1098
+
1099
+ ## [0.7.3] - 2026-02-13
1100
+
1101
+ ### Added
1102
+
1103
+ - **Step catalog system**: Registry of available step types with prerequisites, produces/consumes, context defaults, and skip conditions (14 step definitions)
1104
+ - **Composition rules**: Declarative ordering constraints, step pairs, and conditional suggestions for intelligent assignment composition
1105
+ - **Recipe system**: Flexible example patterns replacing rigid presets (4 recipes: implement-with-pr, implement-simple, batch-tasks, fix-and-review)
1106
+ - **Compose-assignment workflow**: LLM-driven assignment composition from step catalog and user intent
1107
+ - `CatalogLoader` atom for loading and querying step catalog YAML files
1108
+ - `CompositionRules` atom for loading, validating ordering, and suggesting step additions
1109
+ - Conditional composition rule logic in `suggest_additions` for context-dependent step suggestions
1110
+
1111
+ ### Changed
1112
+
1113
+ - Drive-assignment workflow now includes step decision points for skip assessment and adaptation
1114
+ - Start-assignment workflow updated to offer compose as alternative path
1115
+
1116
+ ### Fixed
1117
+
1118
+ - `apply-feedback.step.yml` now correctly references `ace:apply-feedback` skill (was null)
1119
+
1120
+ ## [0.7.2] - 2026-02-12
1121
+
1122
+ ### Changed
1123
+
1124
+ - E2E tests renamed from COWORKER to ASSIGN terminology
1125
+ - All test references updated: coworker → assign, session → assignment, step → step, jobs → steps
1126
+
1127
+ ## [0.7.1] - 2026-02-11
1128
+
1129
+ ### Fixed
1130
+
1131
+ - E2E test scenario.yml files now use correct `test-id` field (was `test-suite-id`)
1132
+ - E2E test case .tc.md files now use correct `tc-id` field (was `test-id`)
1133
+
1134
+ ## [0.7.0] - 2026-02-11
1135
+
1136
+ ### Fixed
1137
+
1138
+ - Array instruction substitution in foreach expansion now properly handles {{item}} placeholders
1139
+ - Removed deprecated work-on-task preset (use `/ace:work-on-task` skill directly)
1140
+
1141
+ ### Changed
1142
+
1143
+ - work-on-tasks preset simplified with onboard step and direct skill delegation
1144
+
1145
+ ## [0.6.0] - 2026-02-11
1146
+
1147
+ ### Changed
1148
+
1149
+ - Package renamed from ace-coworker to ace-assign
1150
+ - Internal "session" concept renamed to "assignment"
1151
+ - Internal "step" concept renamed to "step"
1152
+ - Step file extension changed from .j.md to .st.md
1153
+ - Cache directory changed from .cache/ace-coworker/ to .cache/ace-assign/
1154
+ - Skills renamed from /ace:coworker-* to /ace:assign-*
1155
+ - New combined /ace:assign-start skill added (prepare + create in one step)
1156
+
1157
+ ## [0.5.3] - 2026-02-01
1158
+
1159
+ ### Changed
1160
+
1161
+ - Removed `prepare` CLI command - use `/ace:assign-prepare` workflow instead (handles informal instructions and customizations)
1162
+
1163
+ ## [0.5.2] - 2026-01-31
1164
+
1165
+ ### Fixed
1166
+
1167
+ - `prepare` CLI now uses Base36 timestamps (e.g., `8ouxjt`) instead of datetime format
1168
+ - `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
1169
+ - Correctly extracts parent task ID from subtask refs (e.g., `253.01` -> task folder `253-xxx`)
1170
+
1171
+ ## [0.5.1] - 2026-01-31
1172
+
1173
+ ### Fixed
1174
+
1175
+ - `prepare` CLI command now actually works - implements preset loading, parameter parsing, and job.yaml generation (was just a stub in 0.5.0)
1176
+
1177
+ ## [0.5.0] - 2026-01-31
1178
+
1179
+ ### Added
1180
+
1181
+ - **Multi-task step preparation**: New `work-on-tasks` preset enables batch processing of multiple tasks in a single job
1182
+ - `PresetExpander` atom for expanding preset templates with `expansion:` directives
1183
+ - Support for `batch-parent` and `foreach` expansion directives in presets
1184
+ - Array parameter parsing supporting comma-separated (`148,149,150`), range (`148-152`), and pattern (`240.*`) syntax
1185
+ - Pre-assigned step numbers in job.yaml are now preserved by AssignmentExecutor
1186
+ - Updated prepare-assignment workflow documentation with multi-task examples
1187
+
1188
+ ### Fixed
1189
+
1190
+ - CLI help commands now return exit code 0 correctly
1191
+
1192
+ ## [0.4.3] - 2026-01-30
1193
+
1194
+ ### Changed
1195
+
1196
+ - Rewrote MT-ASSIGN-003 E2E test to match implemented behavior (dynamic hierarchy via `add --after --child` instead of static config)
1197
+
1198
+ ### Technical
1199
+
1200
+ - MT-ASSIGN-003 test verified and stamped
1201
+
1202
+ ## [0.4.2] - 2026-01-30
1203
+
1204
+ ### Fixed
1205
+
1206
+ - MAX_DEPTH constant corrected to 2 (allowing 3 levels max: 010.01.01) to match documented behavior
1207
+ - CLI `add --child` command now validates depth upfront with clear error message before calling executor
1208
+
1209
+ ### Changed
1210
+
1211
+ - `auto_complete_parents` now emits warning when safety iteration limit is reached
1212
+ - `rollback_renames` now captures and reports rollback failures instead of silently swallowing them
1213
+
1214
+ ## [0.4.1] - 2026-01-30
1215
+
1216
+ ### Changed
1217
+
1218
+ - `Ace::Assign.cache_dir` now returns an absolute path resolved from project root
1219
+ - Cache directory respects `PROJECT_ROOT_PATH` environment variable for sandboxed/isolated testing
1220
+
1221
+ ## [0.4.0] - 2026-01-30
1222
+
1223
+ ### Added
1224
+
1225
+ - **Hierarchical step structure**: Steps can now have nested sub-steps (010.01, 010.02) with parent-child relationships
1226
+ - New `StepNumbering` atom for parsing and generating hierarchical step numbers
1227
+ - `--after` option for `add` command: inject steps after specific step numbers (`ace-assign add verify --after 010`)
1228
+ - `--child` option for `add` command: create nested child steps (`ace-assign add verify --after 010 --child`)
1229
+ - `--flat` option for `status` command: show flat list without hierarchy indentation
1230
+ - Automatic step renumbering when inserting steps at occupied positions
1231
+ - `children_of`, `descendants_of`, `has_incomplete_children?` methods on QueueState for hierarchy traversal
1232
+ - `hierarchical` method on QueueState for tree-structured display
1233
+ - Parent number extraction from filenames in `StepFileParser.parse_filename`
1234
+ - Audit trail metadata: `added_by`, `parent`, `renumbered_from`, `renumbered_at` fields for tracking step history
1235
+ - O(1) child lookups via parent index in QueueState for improved performance
1236
+
1237
+ ### Changed
1238
+
1239
+ - Auto-complete parents now handles multi-level hierarchies in a single pass (grandparents complete when parents complete)
1240
+ - Auto-complete now includes in_progress parents (not just pending) when all children finish
1241
+ - Status command now shows hierarchical structure when nested steps exist
1242
+ - Advance operation respects hierarchy: parent steps wait for all children to complete
1243
+
1244
+ ### Fixed
1245
+
1246
+ - Cascade renumbering to descendants: when a step is shifted, all its children are also renamed to prevent orphaning
1247
+ - Enforce hierarchy in `advance`: prevent marking parent as done while children are incomplete
1248
+ - Validate `--after` step existence before injection (raises StepNotFoundError if not found)
1249
+ - Replace fragile `instance_variable_set` mutation with local tracking Set in auto_complete_parents
1250
+ - Add safety guard to prevent infinite loops in auto-completion (max iterations = step count)
1251
+ - Re-scan state after auto_complete_parents to ensure find_next_step uses fresh data
1252
+ - Use `next_workable` instead of `next_pending` in find_next_step to respect hierarchy
1253
+ - QueueState now supports `top_level`, `all_numbers`, and `next_workable` methods
1254
+
1255
+ ## [0.3.1] - 2026-01-30
1256
+
1257
+ ### Fixed
1258
+
1259
+ - Step files already in a `steps/` directory are kept in place instead of being moved to a nested path when creating assignments
1260
+
1261
+ ## [0.3.0] - 2026-01-30
1262
+
1263
+ ### Added
1264
+
1265
+ - **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
1266
+ - New `context` field in Step model with `fork?` predicate method
1267
+ - Context validation rejecting invalid values with helpful error messages (valid values: `fork`)
1268
+ - `handbook/guides/fork-context.g.md` documentation for the fork context feature
1269
+ - Status command outputs Task tool instructions for fork-context steps
1270
+ - Shell escaping for step names in Task tool description field
1271
+ - E2E test (TC-005) for fork context feature validation
1272
+
1273
+ ### Changed
1274
+
1275
+ - Centralized `VALID_CONTEXTS` constant in Step model, referenced by parser
1276
+ - QueueScanner surfaces ArgumentError for invalid step files instead of silent nil return
1277
+ - Status output uses plain text separators instead of markdown backticks for better terminal compatibility
1278
+ - Use deterministic project root from cache_dir instead of Dir.pwd
1279
+ - Updated `work-on-task` preset to demonstrate fork pattern
1280
+
1281
+ ## [0.2.1] - 2026-01-29
1282
+
1283
+ ### Fixed
1284
+
1285
+ - 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
1286
+
1287
+ ### Added
1288
+
1289
+ - CLI exit codes documentation (`docs/exit-codes.md`) documenting exit codes 0-3 with meanings and examples
1290
+
1291
+ ### Changed
1292
+
1293
+ - Updated E2E test TC-004 to reflect actual `start` command behavior (migration alias to `create` with deprecation warning, exit 0)
1294
+ - Added TC-004b test case to verify cache directory auto-creation on first use
1295
+ - Added cache directory setup to E2E test environment setup to prevent ENOENT errors on first-time runs
1296
+
1297
+ ## [0.1.7] - 2026-01-28
1298
+
1299
+ ### Fixed
1300
+
1301
+ - CLI exit code wrapper propagation via `@captured_exit_code` and `wrap_command` method
1302
+ - Race condition in `append_report` file locking: rewrite content in-place on locked file descriptor instead of temp file + rename (preserves POSIX locks)
1303
+ - Assignment ID generation max retry limit (100 attempts) to prevent infinite loop
1304
+ - E2E test comment: "creates separate .r.md report file" (was "appends report inline")
1305
+
1306
+ ### Added
1307
+
1308
+ - Prepare command stub with helpful message directing users to create job.yaml manually or use the prepare-assignment workflow
1309
+
1310
+ ### Changed
1311
+
1312
+ - Improve error messages with actionable suggestions (e.g., "Try 'ace-assign add' or 'ace-assign retry'")
1313
+ - Migration UX for deprecated commands (start → create) with warning message
1314
+
1315
+ ## [0.1.6] - 2026-01-28
1316
+
1317
+ ### Changed
1318
+
1319
+ - Split `assignment.wf.md` into focused workflows: `create-assignment.wf.md` (assignment creation) and `drive-assignment.wf.md` (execution loop)
1320
+ - Renamed `prepare-assignment-job.wf.md` → `prepare-assignment.wf.md` for verb-first naming convention
1321
+ - Renamed skill `ace_assign-start` → `ace_assign-drive` for clarity
1322
+ - All assign skills now use thin wrapper pattern pointing to workflows via `ace-bundle`
1323
+
1324
+ ### Technical
1325
+
1326
+ - Fixed file extension documentation: `*.md` → `*.st.md` for step files in create-assignment workflow
1327
+ - Clarified "source of truth" is `ace-assign status` command in workflow documentation
1328
+ - Added note about archived job.yaml being for provenance only, not status queries
1329
+ - Changed "Job files" → "Step files" terminology in README for clarity
1330
+
1331
+ ## [0.1.5] - 2026-01-28
1332
+
1333
+ ### Added
1334
+
1335
+ - Separate step and report files with `.st.md` and `.r.md` extensions
1336
+ - New `reports/` directory structure for storing completion reports separately from step files
1337
+ - Report files include YAML frontmatter with `step`, `name`, and `completed_at` fields for traceability
1338
+
1339
+ ### Changed
1340
+
1341
+ - Step files now use `.st.md` extension (was `.md`)
1342
+ - Reports are written to separate `.r.md` files instead of being embedded in step bodies
1343
+ - `StepFileParser.extract_fields()` now returns `nil` for report (loaded separately)
1344
+ - `StepFileParser.parse_filename()` handles both `.st.md` and `.r.md` extensions
1345
+ - `StepFileParser.generate_filename()` produces `.st.md` filenames
1346
+ - `StepFileParser.generate_report_filename()` produces `.r.md` filenames
1347
+ - `StepSorter.sort_key()` strips `.st.md` extension
1348
+ - `QueueScanner.scan()` and `step_numbers()` glob for `*.st.md` files
1349
+ - `QueueScanner.load_report()` loads report content from corresponding `.r.md` file
1350
+ - `AssignmentManager.create()` creates both `steps/` and `reports/` directories
1351
+ - `Assignment.reports_dir` returns path to reports directory
1352
+ - `StepWriter.mark_done()` accepts `reports_dir:` parameter and writes report separately
1353
+ - `StepWriter.append_report()` accepts `reports_dir:` parameter and updates report files
1354
+ - `StepWriter.write_report()` private helper for atomic report file writes
1355
+ - `AssignmentExecutor.advance()` passes `reports_dir` to `mark_done()`
1356
+ - CLI status command fallback filename uses `.st.md` extension
1357
+ - `Step.to_display_row()` fallback filename uses `.st.md` extension
1358
+
1359
+ ## [0.1.4] - 2026-01-28
1360
+
1361
+ ### Added
1362
+
1363
+ - Archive job.yaml to task's `steps/` directory after assignment creation (`{assignment_id}-job.yml`)
1364
+
1365
+ ## [0.1.3] - 2026-01-28
1366
+
1367
+ ### Technical
1368
+
1369
+ - Standardize instructions format to arrays in prepare-assignment workflow doc
1370
+ - Update e2e tests for workflow lifecycle with error paths and state verification
1371
+ - Update CHANGELOGs with complete fix descriptions
1372
+
1373
+ ## [0.1.2] - 2026-01-28
1374
+
1375
+ ### Fixed
1376
+
1377
+ - 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`
1378
+ - `ace-bundle wfi://prepare-assignment` fails due to missing project-level wfi:// protocol registration
1379
+
1380
+ ### Added
1381
+
1382
+ - Support array format for step instructions in presets (joined with newlines via `normalize_instructions`)
1383
+
1384
+ ### Changed
1385
+
1386
+ - Rename CLI `start` command to `create` (CLI creates assignment; "start" is the skill that begins agent work)
1387
+ - Preset files (`work-on-task.yml`, `work-on-task-with-pr.yml`) now use array instructions format
1388
+ - Updated workflow instructions and README to reflect `create` command and array instructions format
1389
+
1390
+ ## [0.1.1] - 2026-01-28
1391
+
1392
+ ### Fixed
1393
+
1394
+ - Persist skill field from job.yaml steps through full pipeline (StepWriter, StepFileParser, QueueScanner, Step model)
1395
+ - Display skill in status command output for current step
1396
+ - Pass through extra step fields (beyond name/instructions) from job.yaml via AssignmentExecutor
1397
+ - Update default job.yaml output path in prepare-assignment workflow to task folder
1398
+
1399
+ ## [0.1.0] - 2026-01-28
1400
+
1401
+ ### Added
1402
+
1403
+ - Initial release with work queue-based assignment management
1404
+ - CLI commands: start, status, report, fail, add, retry
1405
+ - File-based queue storage with markdown step files
1406
+ - Assignment persistence via assignment.yaml
1407
+ - History preservation (failed steps remain visible)
1408
+ - Dynamic step addition with automatic numbering
1409
+ - Retry mechanism that creates new steps linked to original
1410
+
1411
+
1412
+ ## [0.12.12] - 2026-02-22
1413
+
1414
+ ### Fixed
1415
+ - Standardized quiet, verbose, debug option descriptions to canonical strings