ace-assign 0.37.0 → 0.40.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 546f8d510f0767f994deba4c11c10019d4dc320781c5b242e0362431e5e91166
4
- data.tar.gz: 52cf891a41c8f2f80ba9bfd7fd19db57b5691dda2e67774e16004d3b1358b543
3
+ metadata.gz: f23355862efe90eb831ccb84423985e43a6961c1b3dff79648984cf6d3012f56
4
+ data.tar.gz: 0be151272116e8104dcb1686f9759df2e12b321d86ae6e913b5d4189b8c6bf71
5
5
  SHA512:
6
- metadata.gz: e02c6d947497dd2e8fe5c00825a303759994de830394eefe54506b93924b6c5e78ea21a7cc4a839e816aeeb2fd04c14b9c56958b0e6d7145622cb42049c82869
7
- data.tar.gz: c014fc052851855bfe3f2144c9056a2ef18f1c25884e567f71f8d03cad1eed009981aacc755799b04a344ac323c929fb0f9841ba5e7e6273b7cda6885c1173aa
6
+ metadata.gz: 7737ef4fe083b8e758bb7cfa16fea1205bec8b7668504ca524a3bb48d1f802559a6837e60d1cf0c55594b99c8c04aae8f873732f945a3ee640dff665bf92fb40
7
+ data.tar.gz: ab02e5b7298297e0dfff4c2dc75a8c45b2c029ab7e8ae084df77970e90be1518e392f0575fc94d457e72059401ce3c7208071cebf6606981493fc9d88baac7c7
@@ -58,6 +58,16 @@ ordering:
58
58
  after: update-pr-desc
59
59
  note: "PR description should reflect post-rebase branch state"
60
60
 
61
+ - rule: push-before-record-demo
62
+ before: push-to-remote
63
+ after: record-demo
64
+ note: "Demo recording requires pushed code and existing PR"
65
+
66
+ - rule: record-demo-before-update-pr
67
+ before: record-demo
68
+ after: update-pr-desc
69
+ note: "PR description should reference attached demo if available"
70
+
61
71
  - rule: push-before-update-pr
62
72
  before: push-to-remote
63
73
  after: update-pr-desc
@@ -181,9 +191,9 @@ conditional:
181
191
  note: "Test suite verification with profiling catches slow tests and regressions before release. In explicit-step mode this remains advisory unless policy elevates it."
182
192
 
183
193
  - when: "assignment includes work-on-task and touches CLI commands or public API"
184
- suggest: [verify-e2e, update-docs]
194
+ suggest: [verify-e2e, update-docs, record-demo]
185
195
  strength: recommended
186
- note: "Public contract changes require E2E verification and doc updates"
196
+ note: "Public contract changes require E2E verification, doc updates, and demo recording"
187
197
 
188
198
  - when: "task involves auth, security, or data handling"
189
199
  suggest: [security-audit]
@@ -38,6 +38,9 @@ steps:
38
38
  required: false
39
39
  - name: push-to-remote
40
40
  required: true
41
+ - name: record-demo
42
+ required: false
43
+ note: "Record demos for modified packages with tapes; skip if no tapes or VHS unavailable"
41
44
  - name: update-pr-desc
42
45
  required: false
43
46
 
@@ -46,3 +49,4 @@ customization_hints:
46
49
  - "Add security-audit for security-sensitive changes"
47
50
  - "Reduce review cycles to 1 for simple changes"
48
51
  - "Skip reorganize-commits if commit history is already clean"
52
+ - "Skip record-demo if VHS is not available or no tape files exist"
@@ -0,0 +1,39 @@
1
+ name: record-demo
2
+ skill: as-demo-record
3
+ description: Record terminal demos for modified packages and attach to PR
4
+ intent:
5
+ phrases:
6
+ - "record demo"
7
+ - "record demos for pr"
8
+ - "attach demo to pr"
9
+ - "create demo recording"
10
+
11
+ prerequisites:
12
+ - name: push-to-remote
13
+ strength: required
14
+ reason: "Code must be pushed so demo reflects what reviewers see"
15
+ - name: create-pr
16
+ strength: required
17
+ reason: "PR number needed for demo attachment"
18
+
19
+ produces: [demo-recording, pr-comment]
20
+ consumes: [pull-request, remote-sync]
21
+
22
+ context:
23
+ default: null
24
+ reason: "Demo recording needs VHS and FFmpeg in the local environment"
25
+
26
+ when_to_skip:
27
+ - "No modified packages have tape files at <package>/docs/demo/"
28
+ - "VHS is not available in the environment"
29
+ - "Changes are documentation-only (no runnable code changed)"
30
+ - "No user-facing CLI changes"
31
+
32
+ effort: medium
33
+ tags: [demo, pr, documentation, recording]
34
+ decision_notes:
35
+ non_blocking_policy: >
36
+ "non-blocking" means do not block subsequent steps if truly unfixable.
37
+ It does NOT mean skip on first failure. Diagnose the error, check config
38
+ against known-good values (spike findings, test fixtures), fix environment
39
+ issues, and retry before reporting failure.
@@ -113,6 +113,34 @@ steps:
113
113
  - "Run: git push --force-with-lease origin HEAD"
114
114
  - Force-with-lease needed because reorganize-commits rewrites history.
115
115
 
116
+ - name: record-demo
117
+ number: "145"
118
+ instructions:
119
+ - "Record a demo that shows the feature implemented in this PR and attach it."
120
+ - "Find the demo scenario:"
121
+ - " 1. Read the task spec's Demo Scenario section for scene definitions and fixture requirements"
122
+ - " 2. Check `.ace-tasks/<taskref>/demo/*.tape.yml` for an existing tape"
123
+ - " 3. Check `<package>/docs/demo/` for package-level tapes relevant to the changes"
124
+ - " 4. If no tape or scenario exists, design one following the pattern: show input → run feature → verify result"
125
+ - "Create the tape:"
126
+ - " - Create `fixtures/` directory next to the tape with all input data referenced in scenes"
127
+ - " - Use `copy-fixtures` in setup so fixtures are available in sandbox"
128
+ - " - Use relative paths only (fixtures get copied to sandbox root)"
129
+ - " - Set sleep times so viewer can read output: 3-5s for command output, 1s for clear"
130
+ - " - For commands that take time (recording, builds), set sleep to the expected duration + 5s buffer"
131
+ - " - Do NOT use playback_speed — record at normal speed for readability"
132
+ - "Validate before recording:"
133
+ - " - Run `ace-demo record <tape> --dry-run` to verify no path errors"
134
+ - " - Ensure all fixtures exist and are referenced correctly"
135
+ - "Record and attach: `cd <package> && ace-demo record <tape-path> --pr <PR_NUMBER>`."
136
+ - "If VHS or FFmpeg is not installed (`which vhs` / `which asciinema` / `which agg` all fail), skip this step."
137
+ - "Non-blocking policy — if recording fails, diagnose before skipping:"
138
+ - " 1. Read the error message and identify the cause (missing font, missing tool, config mismatch, path error)"
139
+ - " 2. Check config: `cat <package>/.ace-defaults/demo/config.yml` and compare `agg_font_family` against available fonts (`fc-list | grep -i nerd | head -5`)"
140
+ - " 3. Check spike findings: search `.ace-tasks/` or `.ace-retros/` for spike docs that document working configurations"
141
+ - " 4. Fix and retry: if the cause is a fixable config/env issue (wrong font, missing fixture, bad path), fix it and retry"
142
+ - " 5. Only skip if the failure is truly unfixable (tool not installed, no tapes exist, hardware dependency)"
143
+
116
144
  - name: update-pr-desc
117
145
  number: "150"
118
146
  context: fork
@@ -166,6 +194,15 @@ expansion:
166
194
  context: fork
167
195
  workflow: wfi://task/work
168
196
  taskref: "{{item}}"
197
+ sub_steps:
198
+ - onboard-base
199
+ - task-load
200
+ - plan-task
201
+ - work-on-task
202
+ - pre-commit-review
203
+ - verify-test
204
+ - release-minor
205
+ - create-retro
169
206
  instructions: |
170
207
  Use existing base and task context loaded by the batch workflow.
171
208
  Implement task {{item}}.
data/CHANGELOG.md CHANGED
@@ -7,6 +7,132 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.40.3] - 2026-03-27
11
+
12
+ ### Fixed
13
+ - Corrected `ace-assign add` documentation examples to match the mutually exclusive add-mode contract (`--yaml`, `--step`, or `--task`).
14
+ - Replaced invalid preset-step examples in docs with preset-backed step names that resolve under the current `--step` behavior.
15
+
16
+ ## [0.40.2] - 2026-03-27
17
+
18
+ ### Fixed
19
+ - Validated preset names before file resolution to block invalid path-like preset inputs.
20
+ - Added `ace-assign add --task` task-reference existence validation before mutating assignment queues.
21
+ - Corrected `ace-assign add --task` insertion semantics to honor `--child`; explicit `--after` without `--child` now inserts as a sibling.
22
+ - Added explicit preset-step resolver errors when presets define no usable `steps` array.
23
+
24
+ ### Technical
25
+ - Added regression coverage for preset-name validation and empty-preset-step diagnostics.
26
+ - Added `add --task` coverage for task-ref validation and sibling insertion with `--after` when `--child` is not set.
27
+ - Added end-to-end CLI coverage for `ace-assign create --task` assignment and step-file materialization.
28
+
29
+ ## [0.40.1] - 2026-03-27
30
+
31
+ ### Fixed
32
+ - 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.
33
+ - Preserved parent refs during taskref expansion when all subtasks are terminal, preventing empty expansion results from valid parent-task inputs.
34
+ - Normalized `detect_batch_parent` fallback return behavior to preserve nil semantics when no batch parent is found.
35
+
36
+ ### Technical
37
+ - Made hidden task-driven job specs use unique filenames to preserve assignment source-config provenance across repeated create flows.
38
+ - Updated command coverage for randomized hidden job filename generation.
39
+
40
+ ## [0.40.0] - 2026-03-27
41
+
42
+ ### Added
43
+ - Added flags-only `ace-assign create --task ...` support for preset-based assignment creation from task refs, including multi-task input.
44
+ - Added a shared `TaskAssignmentCreator` path so direct `create --task` and `ace-overseer` launch use the same preset expansion and hidden job generation behavior.
45
+
46
+ ### Changed
47
+ - Replaced positional `ace-assign create CONFIG` with explicit `--yaml` and `--task` modes.
48
+ - 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`.
49
+ - Refreshed docs and workflow wording to use the explicit `ace-assign create --yaml ...` contract.
50
+
51
+ ### Technical
52
+ - Added command coverage for create-mode validation and task-driven creation edge cases.
53
+ - Added `ace-task` as a runtime dependency for task-ref-based creation.
54
+
55
+ ## [0.39.1] - 2026-03-27
56
+
57
+ ### Fixed
58
+ - Updated the `as-assign-add-task` workflow and related docs to use the current `ace-assign add --yaml` contract instead of removed `--from` usage.
59
+ - Refreshed preset step insertion name resolution to re-read queue names between insertions, preventing stale iteration-name collisions when canonical expansion adds additional steps.
60
+ - Added debug-time warnings for unexpanded `{{token}}` placeholders in `--task` preset templates.
61
+
62
+ ### Technical
63
+ - Added regression coverage for preset insertion name-refresh behavior across canonical subtree expansion.
64
+ - Added regression coverage for unexpanded template-token warnings in debug `--task` mode.
65
+ - Normalized `detect_batch_parent` return semantics to always return a string value.
66
+
67
+ ## [0.39.0] - 2026-03-27
68
+
69
+ ### Added
70
+ - Added preset-aware `ace-assign add --step <name[,name...]>` mode with exact-first and base-name fallback resolution.
71
+ - Added preset-aware `ace-assign add --task <ref>` mode using preset `expansion.child-template` with automatic batch-parent detection.
72
+ - Added new preset insertion support modules: `PresetLoader`, `PresetStepResolver`, and `PresetInferrer`.
73
+
74
+ ### Changed
75
+ - Replaced legacy `ace-assign add` insertion contract with exactly one required mode: `--yaml`, `--step`, or `--task`.
76
+ - Renamed YAML file insertion flag from `--from` to canonical `--yaml`.
77
+ - Removed positional `name` insertion mode in favor of explicit `--step`.
78
+
79
+ ### Technical
80
+ - Expanded command and atom/molecule test coverage for mode validation, preset loading, step resolution, auto-iteration naming, and preset inference fallback behavior.
81
+
82
+ ## [0.38.3] - 2026-03-27
83
+
84
+ ### Added
85
+ - Added `ace-assign add --from <file>` to insert multiple steps from YAML, including nested `sub_steps` expansion.
86
+ - Added the `as-assign-add-task` skill and `wfi://assign/add-task` workflow for guided subtree insertion.
87
+
88
+ ### Fixed
89
+ - Prevalidated full `add_batch` trees before mutating assignment queues, preventing partial insertion when later batch entries are invalid.
90
+ - Normalized nested batch child-depth overflow handling by converting `StepNumbering` depth `ArgumentError` into `Ace::Assign::Error`.
91
+ - Routed workflow/skill/sub-step batch insertions through canonical subtree expansion and materialization.
92
+ - Reworded executor-level child insertion validation to domain language so non-CLI callers are not coupled to CLI flag syntax.
93
+ - Removed stale add-task child-step hardcoding drift by relying on workflow `assign.sub-steps` resolution at insertion time.
94
+
95
+ ### Changed
96
+ - Extended assignment insertion execution with batch insertion support and frontmatter passthrough for inserted steps.
97
+ - Unified dynamic step default instructions under a single `AssignmentExecutor::DEFAULT_DYNAMIC_STEP_INSTRUCTIONS` source.
98
+ - Limited canonical batch expansion to explicit `workflow`, `skill`, or declared `sub_steps` inputs, preserving prior numbering behavior for plain flat batch inserts.
99
+ - Updated usage, getting-started, and handbook docs to cover the new `add --from` workflow.
100
+ - 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.
101
+ - 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."
102
+
103
+ ### Technical
104
+ - Expanded command and executor coverage for `--from` validation, child rebalance behavior, and metadata preservation.
105
+ - Added regression tests for batch insertion validation, depth overflow, and workflow-backed inserts.
106
+ - Renamed add-command local boolean flags to predicate-style names (`name_given`, `from_given`) for readability.
107
+
108
+ ## [0.38.2] - 2026-03-26
109
+
110
+ ### Changed
111
+ - 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.
112
+ - Updated no-op messaging and edge-case language across prepare/create workflow instructions and usage docs to match the terminal-status contract.
113
+
114
+ ### Technical
115
+ - Replaced fragile done-filter workflow contract assertions with stronger section-scoped terminal-contract checks.
116
+ - Moved the contract test into the standard `test/organisms/` bucket and removed the nonstandard `test/workflows/` location.
117
+
118
+ ## [0.38.1] - 2026-03-26
119
+
120
+ ### Technical
121
+ - 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.
122
+
123
+ ## [0.38.0] - 2026-03-26
124
+
125
+ ### Added
126
+ - 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.
127
+ - Added `record-demo` step to the assignment step catalog for recording and attaching terminal demos to PRs.
128
+ - Added composition rules positioning `record-demo` between `push-to-remote` and `update-pr-desc`.
129
+ - Added `record-demo` to the `implement-with-pr` recipe as an optional step.
130
+
131
+ ### Changed
132
+ - 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.
133
+ - Updated usage docs with `work-on-task` prepare/create filtering behavior and no-assignment outcomes for all-done inputs.
134
+ - 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.
135
+
10
136
  ## [0.37.0] - 2026-03-23
11
137
 
12
138
  ### Changed
data/README.md CHANGED
@@ -3,7 +3,8 @@
3
3
 
4
4
  Multi-step assignment execution with nesting, fork delegation, and inspectable traces.
5
5
 
6
- <img src="../docs/brand/AgenticCodingEnvironment.Logo.S.png" alt="ACE Logo" width="480">
6
+ <img src="../docs/brand/AgenticCodingEnvironment.Logo.XS.jpg" alt="ACE Logo" width="480">
7
+ <br><br>
7
8
 
8
9
  <a href="https://rubygems.org/gems/ace-assign"><img alt="Gem Version" src="https://img.shields.io/gem/v/ace-assign.svg" /></a>
9
10
  <a href="https://www.ruby-lang.org"><img alt="Ruby" src="https://img.shields.io/badge/Ruby-3.2+-CC342D?logo=ruby" /></a>
@@ -75,7 +76,7 @@ The easiest way to start is through [ace-overseer](../ace-overseer) -- define a
75
76
 
76
77
  ## Use Cases
77
78
 
78
- **Define assignments from presets** - pick a [preset](.ace-defaults/assign/presets/) like [`work-on-task`](.ace-defaults/assign/presets/work-on-task.yml) or `release-only`, pass parameters (task refs, packages), and [`ace-assign create`](docs/usage.md) expands it into a concrete step queue. Steps are defined in the [catalog](.ace-defaults/assign/catalog/steps/) (e.g., [`work-on-task.step.yml`](.ace-defaults/assign/catalog/steps/work-on-task.step.yml)) and ordered by [composition rules](.ace-defaults/assign/catalog/composition-rules.yml). Compose custom assignments with `/as-assign-compose`.
79
+ **Define assignments from presets** - pick a [preset](.ace-defaults/assign/presets/) like [`work-on-task`](.ace-defaults/assign/presets/work-on-task.yml) or `release-only`, pass parameters (task refs, packages), and run `ace-assign create --task ...` or [`ace-assign create --yaml ...`](docs/usage.md) to expand them into a concrete step queue. Steps are defined in the [catalog](.ace-defaults/assign/catalog/steps/) (e.g., [`work-on-task.step.yml`](.ace-defaults/assign/catalog/steps/work-on-task.step.yml)) and ordered by [composition rules](.ace-defaults/assign/catalog/composition-rules.yml). Compose custom assignments with `/as-assign-compose`.
79
80
 
80
81
  **Run with orchestrator and fork agents** - use `/as-assign-drive` to walk through steps, forking long-running work (implementation, review, release) to isolated agent subprocesses with configurable [execution defaults](.ace-defaults/assign/config.yml). Forks can run sequentially or as parallel batches, each producing inspectable traces and session reports under `.ace-local/assign/`.
81
82
 
@@ -52,7 +52,14 @@ Create the assignment:
52
52
 
53
53
 
54
54
  ```bash
55
- ace-assign create job.yaml
55
+ ace-assign create --yaml job.yaml
56
+ ```
57
+
58
+ Or create directly from task refs with the default `work-on-task` preset:
59
+
60
+ ```bash
61
+ ace-assign create --task t.xyz
62
+ ace-assign create --task t.100,t.101 --preset work-on-task
56
63
  ```
57
64
 
58
65
  ## 2) Check status and execute work
@@ -70,11 +77,14 @@ Use `--message <file>` to keep reports explicit and reusable.
70
77
 
71
78
 
72
79
  ```bash
73
- ace-assign add fix-links --instructions "Fix broken docs links"
74
- ace-assign add verify-links --after 020 --child -i "Check all markdown links"
80
+ ace-assign add --task t.xyz
81
+ ace-assign add --step update-docs --after 020
82
+ ace-assign add --step review-pr --after 100 --child
83
+ ace-assign add --yaml .ace-local/assign/jobs/add-task-t.xyz.yml --after 010 --child
75
84
  ```
76
85
 
77
86
  Use `--child` to insert nested steps under a parent step.
87
+ Use `--yaml` to insert multiple steps (including subtree expansions via `sub_steps`) from YAML.
78
88
 
79
89
  ## 4) Work with hierarchical steps
80
90
 
@@ -104,12 +114,13 @@ ace-assign finish --message report.md --assignment abc123@010.01
104
114
 
105
115
  | Command | Purpose |
106
116
  |---------|---------|
107
- | `ace-assign create job.yaml` | Create assignment from YAML |
117
+ | `ace-assign create --yaml job.yaml` | Create assignment from YAML |
118
+ | `ace-assign create --task t.xyz` | Create assignment from task refs |
108
119
  | `ace-assign status` | Show current queue |
109
120
  | `ace-assign start` | Start next workable step |
110
121
  | `ace-assign finish --message done.md` | Complete in-progress step |
111
122
  | `ace-assign fail --message "error"` | Mark current step failed |
112
- | `ace-assign add NAME -i "..."` | Insert new step dynamically |
123
+ | `ace-assign add --step NAME` | Insert preset step dynamically |
113
124
  | `ace-assign retry 040` | Retry failed step as linked work |
114
125
  | `ace-assign fork-run --root 010.01` | Execute a subtree in forked context |
115
126
 
data/docs/handbook.md CHANGED
@@ -15,6 +15,7 @@ Canonical skills and workflow instructions bundled with `ace-assign`.
15
15
 
16
16
  | Skill | What it does |
17
17
  |-------|---------------|
18
+ | `as-assign-add-task` | Add a work-on-task subtree into a running assignment batch parent |
18
19
  | `as-assign-compose` | Compose a tailored assignment from catalog steps and composition rules |
19
20
  | `as-assign-create` | Create assignments from public workflow, with optional handoff to drive |
20
21
  | `as-assign-drive` | Drive active assignment execution step-by-step |
@@ -26,6 +27,7 @@ Canonical skills and workflow instructions bundled with `ace-assign`.
26
27
 
27
28
  | Protocol Path | Purpose | Invoked by |
28
29
  |---------------|---------|------------|
30
+ | `wfi://assign/add-task` | Insert a task subtree into a running assignment using `ace-assign add --yaml` | `as-assign-add-task` |
29
31
  | `wfi://assign/compose` | Compose assignment definitions from cataloged steps | `as-assign-compose` |
30
32
  | `wfi://assign/create` | Create assignment and initialize queue from config | `as-assign-create` |
31
33
  | `wfi://assign/drive` | Execute active assignment loop with status/finish/fail transitions | `as-assign-drive` |
data/docs/usage.md CHANGED
@@ -3,8 +3,8 @@ doc-type: user
3
3
  title: ace-assign Usage Guide
4
4
  purpose: Complete command reference for ace-assign queue orchestration, hierarchy, and fork execution.
5
5
  ace-docs:
6
- last-updated: 2026-03-22
7
- last-checked: 2026-03-22
6
+ last-updated: 2026-03-26
7
+ last-checked: 2026-03-26
8
8
  ---
9
9
 
10
10
  # ace-assign Usage Guide
@@ -26,7 +26,7 @@ ace-assign finish --message report.md
26
26
 
27
27
 
28
28
  ```bash
29
- ace-assign create job.yaml
29
+ ace-assign create --yaml job.yaml
30
30
  ace-assign status
31
31
  ace-assign finish --message step-010.md
32
32
  ace-assign status
@@ -58,21 +58,27 @@ Create child/sibling steps:
58
58
 
59
59
 
60
60
  ```bash
61
- ace-assign add setup-db --after 010 --child -i "Set up DB"
62
- ace-assign add hotfix --after 010 -i "Urgent fix"
61
+ ace-assign add --step update-docs --after 020
62
+ ace-assign add --step review-pr --after 100 --child
63
+ ace-assign add --yaml .ace-local/assign/jobs/add-task.yml --after 010 --child
63
64
  ```
64
65
 
65
66
  ## Commands
66
67
 
67
- ### `ace-assign create CONFIG`
68
+ ### `ace-assign create`
68
69
 
69
- Create a new assignment from a YAML file.
70
+ Create a new assignment from YAML or from task refs expanded through an assignment preset.
70
71
 
71
72
  Options:
72
73
 
74
+ - `--yaml FILE`
75
+ - `--task, -t <taskref[,taskref...]>` (repeatable)
76
+ - `--preset, -p NAME`
73
77
  - `--quiet, -q`
74
78
  - `--debug, -d`
75
79
 
80
+ Exactly one mode is required: `--yaml` or `--task`.
81
+
76
82
  ### `ace-assign status`
77
83
 
78
84
  Show queue status for active or explicitly targeted assignment.
@@ -123,19 +129,24 @@ Options:
123
129
  - `--quiet, -q`
124
130
  - `--debug, -d`
125
131
 
126
- ### `ace-assign add NAME`
132
+ ### `ace-assign add`
127
133
 
128
- Insert a new step dynamically.
134
+ Insert new step(s) dynamically.
129
135
 
130
136
  Options:
131
137
 
132
- - `--instructions, -i TEXT`
138
+ - `--yaml FILE`
139
+ - `--step NAME[,NAME...]`
140
+ - `--task TASKREF`
141
+ - `--preset NAME`
133
142
  - `--after, -a NUMBER`
134
143
  - `--child, -c`
135
144
  - `--assignment <id>`
136
145
  - `--quiet, -q`
137
146
  - `--debug, -d`
138
147
 
148
+ Exactly one mode is required: `--yaml`, `--step`, or `--task`.
149
+
139
150
  ### `ace-assign retry STEP_REF`
140
151
 
141
152
  Create a linked retry step for a failed step.
@@ -185,6 +196,17 @@ Options:
185
196
 
186
197
  ## Workflow Patterns
187
198
 
199
+ ### `work-on-task` Input Filtering (Prepare/Create Workflows)
200
+
201
+ When using preset-backed assignment creation (`ace-assign create --task ...`, `/as-assign-prepare`, or `/as-assign-create`):
202
+
203
+ - Requested refs are resolved first (single, comma list, range, pattern).
204
+ - Terminal refs (`done`, `skipped`, `cancelled`) are skipped before queue expansion.
205
+ - Mixed sets continue with remaining non-terminal refs and report skipped terminal refs.
206
+ - If all requested refs are terminal, assignment creation stops with:
207
+ - `All requested tasks are already terminal (done/skipped/cancelled): <refs>`
208
+ - `No assignment created.`
209
+
188
210
  ### Scoped Subtree Execution
189
211
 
190
212
 
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: as-assign-add-task
3
+ description: Add a work-on-task subtree into a running assignment batch parent
4
+ # bundle: wfi://assign/add-task
5
+ # agent: general-purpose
6
+ user-invocable: true
7
+ allowed-tools:
8
+ - Bash(ace-assign:*)
9
+ - Bash(ace-bundle:*)
10
+ - Bash(ace-task:*)
11
+ - Read
12
+ - Write
13
+ - AskUserQuestion
14
+ argument-hint: "taskref [--parent STEP] [--assignment ID]"
15
+ last_modified: 2026-03-26
16
+ source: ace-assign
17
+ skill:
18
+ kind: workflow
19
+ execution:
20
+ workflow: wfi://assign/add-task
21
+
22
+ ---
23
+
24
+ Load and run `ace-bundle wfi://assign/add-task` in the current project, then follow the loaded workflow as the source of truth and execute it end-to-end instead of only summarizing it.
@@ -0,0 +1,146 @@
1
+ ---
2
+ doc-type: workflow
3
+ title: Add Task To Assignment Workflow
4
+ purpose: Insert a work-on-task subtree into a running assignment batch parent using ace-assign add --yaml
5
+ ace-docs:
6
+ last-updated: 2026-03-26
7
+ last-checked: 2026-03-26
8
+ ---
9
+
10
+ # Add Task To Assignment Workflow
11
+
12
+ ## Purpose
13
+
14
+ Add one new task subtree to an existing assignment without editing step files manually.
15
+
16
+ This workflow:
17
+ 1. Resolves the target assignment and parent step
18
+ 2. Validates task reference exists
19
+ 3. Renders a hidden YAML file under `.ace-local/assign/jobs/`
20
+ 4. Calls `ace-assign add --yaml <file> --after <parent> --child`
21
+
22
+ ## Supported Inputs
23
+
24
+ ```bash
25
+ /as-assign-add-task t.xyz
26
+ /as-assign-add-task t.xyz --parent 010
27
+ /as-assign-add-task t.xyz --assignment abc123
28
+ /as-assign-add-task t.xyz --assignment abc123 --parent 010
29
+ ```
30
+
31
+ ## Process
32
+
33
+ ### 1. Parse Input
34
+
35
+ Required:
36
+ - task reference (first positional argument)
37
+
38
+ Optional:
39
+ - `--assignment <id>`: explicit assignment target
40
+ - `--parent <step-number>`: explicit parent step for insertion
41
+
42
+ If task reference is missing, fail with usage guidance.
43
+
44
+ ### 2. Resolve Assignment
45
+
46
+ - If `--assignment` is provided, use it for all assignment commands.
47
+ - Otherwise use active assignment context.
48
+
49
+ Run status to capture current queue state:
50
+
51
+ ```bash
52
+ ace-assign status [--assignment <id>] --format json
53
+ ```
54
+
55
+ ### 3. Resolve Parent Step
56
+
57
+ If `--parent` is provided:
58
+ - Use it directly
59
+ - Ensure it exists in assignment status output
60
+
61
+ If `--parent` is not provided:
62
+ 1. Prefer a top-level step named `batch-tasks`
63
+ 2. Otherwise, choose a top-level step that has direct children where at least one child name starts with `work-on-`
64
+ 3. If no match exists, fail and instruct user to pass `--parent`
65
+
66
+ ### 4. Validate Task Reference
67
+
68
+ Confirm task exists and is readable:
69
+
70
+ ```bash
71
+ ace-task show <taskref>
72
+ ```
73
+
74
+ If task lookup fails, stop and surface the CLI error.
75
+
76
+ ### 5. Render Hidden Batch Spec
77
+
78
+ Create the hidden jobs directory if missing:
79
+
80
+ ```bash
81
+ mkdir -p .ace-local/assign/jobs
82
+ ```
83
+
84
+ Write a temporary YAML file:
85
+
86
+ ```bash
87
+ .ace-local/assign/jobs/<timestamp>-add-task-<taskref>.yml
88
+ ```
89
+
90
+ Template:
91
+
92
+ ```yaml
93
+ steps:
94
+ - name: work-on-<taskref>
95
+ context: fork
96
+ workflow: wfi://task/work
97
+ instructions: |
98
+ Implement task <taskref> following project conventions.
99
+ When complete, mark the task as done.
100
+ ```
101
+
102
+ Notes:
103
+ - Do not hardcode `sub_steps` here.
104
+ - `ace-assign add --yaml` resolves canonical child steps from `wfi://task/work` assign metadata at insertion time.
105
+ - This keeps the inserted subtree aligned with workflow contract updates.
106
+
107
+ ### 6. Insert Subtree
108
+
109
+ Run batch insertion:
110
+
111
+ ```bash
112
+ ace-assign add --yaml .ace-local/assign/jobs/<timestamp>-add-task-<taskref>.yml --after <parent> --child [--assignment <id>]
113
+ ```
114
+
115
+ ### 7. Report Result
116
+
117
+ Report:
118
+ - Assignment ID
119
+ - Parent step used
120
+ - Hidden YAML path
121
+ - Inserted step numbers from CLI output
122
+
123
+ ## Error Handling
124
+
125
+ | Scenario | Action |
126
+ |----------|--------|
127
+ | Missing taskref | Fail with usage and example invocation |
128
+ | No target assignment | Surface `ace-assign status` error |
129
+ | Parent not found | Fail with "step not found" and suggest `--parent` |
130
+ | Parent auto-detection failed | Fail with actionable message to pass `--parent` |
131
+ | Task not found | Surface `ace-task show` error unchanged |
132
+ | YAML render/write failure | Fail with concrete filesystem error |
133
+ | `ace-assign add --yaml` fails | Surface CLI error unchanged |
134
+
135
+ ## Success Criteria
136
+
137
+ - Workflow inserts a new work-on-task subtree under the selected parent in one command
138
+ - Hidden YAML artifact is written under `.ace-local/assign/jobs/`
139
+ - Parent selection is deterministic with clear fallback to explicit `--parent`
140
+ - Output includes assignment, parent, and inserted step confirmation
141
+
142
+ ## Verification
143
+
144
+ ```bash
145
+ ace-bundle wfi://assign/add-task
146
+ ```