ace-assign 0.41.10 → 0.53.4

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/.ace-defaults/assign/catalog/composition-rules.yml +2 -17
  3. data/.ace-defaults/assign/catalog/steps/create-pr.step.yml +0 -26
  4. data/.ace-defaults/assign/catalog/steps/create-retro.step.yml +1 -1
  5. data/.ace-defaults/assign/catalog/steps/mark-task-done.step.yml +1 -2
  6. data/.ace-defaults/assign/catalog/steps/onboard.step.yml +0 -17
  7. data/.ace-defaults/assign/catalog/steps/plan-task.step.yml +0 -15
  8. data/.ace-defaults/assign/catalog/steps/pre-commit-review.step.yml +3 -0
  9. data/.ace-defaults/assign/catalog/steps/reflect-and-refactor.step.yml +3 -2
  10. data/.ace-defaults/assign/catalog/steps/review-pr.step.yml +0 -20
  11. data/.ace-defaults/assign/catalog/steps/task-load.step.yml +1 -1
  12. data/.ace-defaults/assign/catalog/steps/verify-test-suite.step.yml +7 -34
  13. data/.ace-defaults/assign/catalog/steps/verify-test.step.yml +7 -4
  14. data/.ace-defaults/assign/catalog/steps/work-on-task.step.yml +0 -21
  15. data/.ace-defaults/assign/presets/fix-bug.yml +4 -3
  16. data/.ace-defaults/assign/presets/quick-implement.yml +1 -1
  17. data/.ace-defaults/assign/presets/work-on-task.yml +3 -16
  18. data/CHANGELOG.md +260 -0
  19. data/README.md +20 -43
  20. data/docs/demo/canonical-skill-source.gif +0 -0
  21. data/docs/demo/canonical-skill-source.tape.yml +51 -0
  22. data/docs/demo/fork-provider.cast +957 -0
  23. data/docs/demo/fork-provider.gif +0 -0
  24. data/docs/demo/fork-provider.recording.json +32 -0
  25. data/docs/demo/fork-provider.tape.yml +65 -20
  26. data/docs/getting-started.md +5 -2
  27. data/docs/usage.md +63 -3
  28. data/handbook/guides/fork-context.g.md +2 -2
  29. data/handbook/skills/as-assign-drive/SKILL.md +13 -1
  30. data/handbook/skills/as-create-retro-internal/SKILL.md +29 -0
  31. data/handbook/skills/as-mark-task-done-internal/SKILL.md +29 -0
  32. data/handbook/skills/as-reflect-and-refactor-internal/SKILL.md +30 -0
  33. data/handbook/skills/as-task-load-internal/SKILL.md +28 -0
  34. data/handbook/workflow-instructions/assign/compose.wf.md +3 -3
  35. data/handbook/workflow-instructions/assign/create-retro-internal.wf.md +11 -0
  36. data/handbook/workflow-instructions/assign/create.wf.md +6 -3
  37. data/handbook/workflow-instructions/assign/drive.wf.md +273 -15
  38. data/handbook/workflow-instructions/assign/mark-task-done-internal.wf.md +12 -0
  39. data/handbook/workflow-instructions/assign/prepare.wf.md +5 -5
  40. data/handbook/workflow-instructions/assign/reflect-and-refactor-internal.wf.md +14 -0
  41. data/handbook/workflow-instructions/assign/run-in-batches.wf.md +4 -1
  42. data/handbook/workflow-instructions/assign/start.wf.md +5 -2
  43. data/handbook/workflow-instructions/assign/task-load-internal.wf.md +12 -0
  44. data/handbook/workflow-instructions/assign/verify-test-suite.wf.md +36 -0
  45. data/lib/ace/assign/atoms/catalog_loader.rb +105 -2
  46. data/lib/ace/assign/atoms/preset_expander.rb +12 -1
  47. data/lib/ace/assign/atoms/step_file_parser.rb +15 -0
  48. data/lib/ace/assign/cli/commands/assignment_target.rb +53 -0
  49. data/lib/ace/assign/cli/commands/finish.rb +7 -4
  50. data/lib/ace/assign/cli/commands/fork_run.rb +4 -1
  51. data/lib/ace/assign/cli/commands/fork_session.rb +52 -0
  52. data/lib/ace/assign/cli/commands/start.rb +9 -3
  53. data/lib/ace/assign/cli/commands/status.rb +231 -226
  54. data/lib/ace/assign/cli/commands/step.rb +62 -0
  55. data/lib/ace/assign/cli.rb +8 -1
  56. data/lib/ace/assign/models/step.rb +4 -2
  57. data/lib/ace/assign/molecules/fork_session_launcher.rb +189 -8
  58. data/lib/ace/assign/molecules/queue_scanner.rb +1 -0
  59. data/lib/ace/assign/molecules/skill_assign_source_resolver.rb +252 -50
  60. data/lib/ace/assign/molecules/tmux_fork_runner.rb +191 -0
  61. data/lib/ace/assign/organisms/assignment_executor.rb +294 -40
  62. data/lib/ace/assign/version.rb +1 -1
  63. metadata +21 -5
  64. data/.ace-defaults/assign/catalog/steps/verify-e2e.step.yml +0 -42
Binary file
@@ -0,0 +1,32 @@
1
+ {
2
+ "backend": "asciinema",
3
+ "tape_path": "/home/mc/ace-t.u53.0/ace-assign/docs/demo/fork-provider.tape.yml",
4
+ "cast_path": "/home/mc/ace-t.u53.0/ace-assign/docs/demo/fork-provider.cast",
5
+ "visual_path": "/home/mc/ace-t.u53.0/ace-assign/docs/demo/fork-provider.gif",
6
+ "sandbox_path": "/home/mc/ace-t.u53.0/.ace-local/demo/sandbox/8rekyn",
7
+ "verification": {
8
+ "status": "scenario-defect",
9
+ "classification": "scenario_defect",
10
+ "summary": "Recording scenario failed verification",
11
+ "retryable": true,
12
+ "report_path": "/home/mc/ace-t.u53.0/.ace-local/demo/fork-provider-error-report.md",
13
+ "details": {
14
+ "cast_path": "/home/mc/ace-t.u53.0/ace-assign/docs/demo/fork-provider.cast",
15
+ "inputs_recorded": 0,
16
+ "echoed_commands_recorded": 70,
17
+ "script_commands_recorded": 0,
18
+ "commands_expected": 7,
19
+ "captured_vars": {
20
+ "ACE_TMUX_SESSION": "fork-demo PROJECT_ROOT_PATH=\"$PWD\" ace-assign fork-run --assignment \"$(cat ASSIGN_ID)@010\" --launch-mode tmux --provider codex:gpt@yolo --cli-args \"--no-alt-screen\" --timeout 120"
21
+ },
22
+ "missing_vars": [],
23
+ "missing_output": [
24
+ "{\"Task context\" => nil}"
25
+ ],
26
+ "missing_output_sequence": null,
27
+ "forbidden_hits": [],
28
+ "assertion_failures": [],
29
+ "assertions_skipped": false
30
+ }
31
+ }
32
+ }
@@ -1,34 +1,79 @@
1
1
  ---
2
- description: Show per-step fork provider different steps run with different LLM models
2
+ description: Show tmux-backed fork execution opening a fork staging window from the current work window
3
3
  tags:
4
4
  - ace-assign
5
5
  - fork
6
- - provider
6
+ - tmux
7
+ - demo
7
8
  settings:
8
- font_size: 16
9
- width: 1000
10
- height: 500
9
+ backend: asciinema
10
+ font_size: 14
11
+ width: 1200
12
+ height: 720
11
13
  format: gif
14
+ output: ace-assign/docs/demo/fork-provider.gif
12
15
  setup:
13
16
  - sandbox
14
17
  - git-init
15
- - copy-fixtures
18
+ - run: |
19
+ ruby -e 'require "fileutils"; root = File.dirname(ENV.fetch("BUNDLE_GEMFILE")); FileUtils.mkdir_p(".ace"); FileUtils.cp_r(File.join(root, ".ace", "llm"), File.join(".ace", "llm")); {".codex" => "skills", ".claude" => "skills", ".pi" => "skills"}.each { |dir, sub| src = File.join(root, dir, sub); next unless Dir.exist?(src); FileUtils.mkdir_p(dir); FileUtils.cp_r(src, File.join(dir, sub)) }'
20
+ - run: |
21
+ cat > fork-demo-job.yaml <<'YAML'
22
+ assignment:
23
+ name: tmux-fork-demo
24
+ description: Minimal assignment to demo tmux-backed fork execution
25
+ steps:
26
+ - name: demo-root
27
+ context: fork
28
+ instructions: |
29
+ Demonstrate tmux-backed fork execution for the assignment subtree.
30
+ sub_steps:
31
+ - onboard
32
+ YAML
33
+ - run: |
34
+ PROJECT_ROOT_PATH="$PWD" ace-assign create --yaml fork-demo-job.yaml
35
+ ruby -e 'link = ".ace-local/assign/.latest"; abort "no latest assignment" unless File.symlink?(link); File.write("ASSIGN_ID", File.basename(File.readlink(link)))'
36
+ - run: tmux new-session -d -s fork-demo -n work -c "$PWD" "bash --noprofile --norc -i"
37
+ - run: |
38
+ bash -lc 'sleep 45; tmux detach-client -s fork-demo || true' >/tmp/ace-demo-fork-provider-detach.log 2>&1 &
16
39
  scenes:
17
- - name: Show step frontmatter with fork.provider
40
+ - name: Attach to the operator work window
18
41
  commands:
19
- - type: "cat .ace-local/assign/demoXx/steps/020-implement.st.md"
20
- sleep: 4s
21
- - name: Status shows per-step Fork Provider
42
+ - type: tmux attach -t fork-demo
43
+ sleep: 2s
44
+ - type: tmux display-message -p '#W'
45
+ sleep: 2s
46
+ - name: Launch the fork into a visible tmux window
22
47
  commands:
23
- - type: clear
24
- sleep: 1s
25
- - type: "ace-assign status"
26
- sleep: 4s
27
- - name: fork-run resolves step provider
28
- commands:
29
- - type: clear
30
- sleep: 1s
31
- - type: "ace-assign fork-run --root 020 --dry-run"
32
- sleep: 4s
48
+ - type: ACE_TMUX_SESSION=fork-demo PROJECT_ROOT_PATH="$PWD" ace-assign status --assignment "$(cat ASSIGN_ID)@010"
49
+ sleep: 2s
50
+ - type: bash -lc 'ACE_TMUX_SESSION=fork-demo PROJECT_ROOT_PATH="$PWD" ace-assign fork-run --assignment "$(cat ASSIGN_ID)@010" --launch-mode tmux --provider codex:gpt@yolo --cli-args "--no-alt-screen" --timeout 120 &'
51
+ sleep: 35s
52
+ verify:
53
+ require_output:
54
+ - work
55
+ - work-fs
56
+ - $as-assign-drive
57
+ - Explored
58
+ require_output_sequence:
59
+ - work
60
+ - ace-assign fork-run
61
+ - work-fs
62
+ - $as-assign-drive
63
+ - Explored
64
+ forbid_output:
65
+ - requires an active tmux session
66
+ - Could not resolve current tmux window
67
+ - No such file or directory
68
+ - Unknown provider
69
+ - Unknown providers in llm.providers.active
70
+ - Fork session execution failed
71
+ - does not support interactive mode
72
+ - Do you trust the contents of this directory?
73
+ assert_commands:
74
+ - 'ASSIGN_ID=$(cat ASSIGN_ID); test -f ".ace-local/assign/${ASSIGN_ID}/sessions/010-session.yml"'
75
+ - |
76
+ ASSIGN_ID=$(cat ASSIGN_ID); ruby -e 'require "yaml"; id = File.read("ASSIGN_ID").strip; data = YAML.safe_load_file(".ace-local/assign/#{id}/sessions/010-session.yml"); abort "bad metadata" unless data["launch_mode"] == "tmux" && data["tmux_window"] == "work-fs" && data["provider"] == "codex" && data["model"] == "gpt-5.4"'
33
77
  teardown:
78
+ - run: tmux kill-session -t fork-demo || true
34
79
  - cleanup
@@ -67,6 +67,7 @@ ace-assign create --task t.100,t.101 --preset work-on-task
67
67
 
68
68
  ```bash
69
69
  ace-assign status
70
+ ace-assign step
70
71
  ace-assign finish --message onboard.md
71
72
  ace-assign status
72
73
  ```
@@ -97,7 +98,8 @@ Use status views:
97
98
 
98
99
  ```bash
99
100
  ace-assign status
100
- ace-assign status --flat
101
+ ace-assign status --mode full
102
+ ace-assign status --mode progress
101
103
  ```
102
104
 
103
105
  ## 5) Use scoped assignment targeting
@@ -116,7 +118,8 @@ ace-assign finish --message report.md --assignment abc123@010.01
116
118
  |---------|---------|
117
119
  | `ace-assign create --yaml job.yaml` | Create assignment from YAML |
118
120
  | `ace-assign create --task t.xyz` | Create assignment from task refs |
119
- | `ace-assign status` | Show current queue |
121
+ | `ace-assign status` | Show current queue summary |
122
+ | `ace-assign step` | Show current or next step instructions |
120
123
  | `ace-assign start` | Start next workable step |
121
124
  | `ace-assign finish --message done.md` | Complete in-progress step |
122
125
  | `ace-assign fail --message "error"` | Mark current step failed |
data/docs/usage.md CHANGED
@@ -1,10 +1,11 @@
1
1
  ---
2
2
  doc-type: user
3
3
  title: ace-assign Usage Guide
4
- purpose: Complete command reference for ace-assign queue orchestration, hierarchy, and fork execution.
4
+ purpose: Complete command reference for ace-assign queue orchestration, hierarchy,
5
+ and fork execution.
5
6
  ace-docs:
6
- last-updated: 2026-03-26
7
- last-checked: 2026-03-26
7
+ last-updated: '2026-04-01'
8
+ last-checked: '2026-04-01'
8
9
  ---
9
10
 
10
11
  # ace-assign Usage Guide
@@ -22,12 +23,31 @@ Recommended:
22
23
  ace-assign finish --message report.md
23
24
  ```
24
25
 
26
+ ## Testing Contract
27
+
28
+ Use package-scoped test commands with explicit layers:
29
+
30
+ ```bash
31
+ ace-test ace-assign
32
+ ace-test ace-assign feat
33
+ ace-test ace-assign all
34
+ ace-test-e2e ace-assign
35
+ ```
36
+
37
+ For assignment verification, `verify-test-suite` is the standard gate:
38
+
39
+ ```bash
40
+ ace-test <package> all --profile 6
41
+ ace-test-suite --target all
42
+ ```
43
+
25
44
  ## Core Lifecycle
26
45
 
27
46
 
28
47
  ```bash
29
48
  ace-assign create --yaml job.yaml
30
49
  ace-assign status
50
+ ace-assign step
31
51
  ace-assign finish --message step-010.md
32
52
  ace-assign status
33
53
  ```
@@ -86,12 +106,41 @@ Show queue status for active or explicitly targeted assignment.
86
106
  Options:
87
107
 
88
108
  - `--flat, -f`
109
+ - `--mode compact|progress|full`
89
110
  - `--format table|json`
90
111
  - `--assignment <id>`
91
112
  - `--all, -a`
92
113
  - `--quiet, -q`
93
114
  - `--debug, -d`
94
115
 
116
+ Text modes:
117
+
118
+ - `compact` (default) prints a short summary, hidden-step stats, and up to 5 upcoming step lines
119
+ - `progress` prints a single summary line
120
+ - `full` prints the full tree/table without step instructions
121
+
122
+ HITL stall behavior:
123
+
124
+ - Canonical contract lives in `wfi://hitl` (`ace-hitl` package workflow).
125
+ - If a step is failed with canonical message format `HITL: <id> <path>`, `ace-assign status` prints operator guidance with the matching `ace-hitl show <id>` command and available path hint.
126
+ - Recommended resume flow:
127
+ - `ace-hitl show <id>`
128
+ - requester path (default): `ace-hitl wait <id>`
129
+ - fallback path (when waiter inactive): `ace-hitl update <id> --answer "<decision>" --resume`
130
+ - `ace-assign retry <failed-step> --assignment <assignment-id>`
131
+ - Completion-attention flow:
132
+ - When assignment work is complete but explicit user action is needed, create an approval HITL event (`kind=approval`) and include the resume instruction for `/as-assign-drive <assignment-id>`.
133
+
134
+ ### `ace-assign step [STEP]`
135
+
136
+ Show instructions for the current in-progress step, the next workable step, or an explicit step number.
137
+
138
+ Options:
139
+
140
+ - `--assignment <id>`
141
+ - `--quiet, -q`
142
+ - `--debug, -d`
143
+
95
144
  ### `ace-assign start [STEP]`
96
145
 
97
146
  Start next workable pending step, or an explicit pending step in the active assignment.
@@ -105,6 +154,10 @@ Options:
105
154
  ### `ace-assign finish [STEP] --message VALUE`
106
155
 
107
156
  Complete current in-progress step (or explicit step in active assignment) with report content.
157
+ Use positional `STEP` only for the active assignment. When targeting another
158
+ assignment or a scoped subtree, pass `--assignment <id>` or
159
+ `--assignment <id@step>` without a positional `STEP`; the command finishes the
160
+ current in-progress step in that target.
108
161
 
109
162
  `--message` accepts:
110
163
 
@@ -168,9 +221,16 @@ Options:
168
221
  - `--provider <provider:model>`
169
222
  - `--cli-args <args>`
170
223
  - `--timeout <seconds>`
224
+ - `--launch-mode auto|headless|tmux`
171
225
  - `--quiet, -q`
172
226
  - `--debug, -d`
173
227
 
228
+ Launch modes:
229
+
230
+ - `auto` (default): use tmux when the current process is already inside tmux or `ACE_TMUX_SESSION` is set; otherwise use the headless subprocess path
231
+ - `headless`: force the existing provider subprocess path and never create tmux panes
232
+ - `tmux`: require tmux context, create or reuse `<current-window>-fs`, start a real interactive agent in a pane there via `ace-llm --interactive`, and send the scoped `/as-assign-drive <assignment>@<root>` handoff automatically
233
+
174
234
  Provider resolution precedence for fork execution:
175
235
 
176
236
  1. CLI `--provider`
@@ -95,7 +95,7 @@ Return structured summary:
95
95
  When `ace:assign-drive` (or manual orchestration) encounters a fork-enabled subtree:
96
96
 
97
97
  1. Runs `ace-assign status`
98
- 2. Detects `Fork subtree detected (root: ...)` in output (outside fork scope)
98
+ 2. Uses compact/full status only to identify the active fork-capable step or subtree root
99
99
  3. Delegates with `ace-assign fork-run --assignment <id>@<root>`
100
100
  4. Fork launcher executes `/as-assign-drive <id>@<root>` in a scoped process
101
101
  5. Scoped process advances only inside subtree
@@ -105,7 +105,7 @@ When `ace:assign-drive` (or manual orchestration) encounters a fork-enabled subt
105
105
  ace:assign-drive loop
106
106
  |
107
107
  +-- ace-assign status
108
- +-- Detects "Fork subtree detected (root: ...)"
108
+ +-- Resolve fork subtree root from assignment state
109
109
  +-- ace-assign fork-run --assignment <id>@<root>
110
110
  +-- Forked /as-assign-drive <id>@<root>
111
111
  +-- Subtree completes
@@ -12,7 +12,7 @@ allowed-tools:
12
12
  - AskUserQuestion
13
13
  - Skill
14
14
  argument-hint: "[assignment[@scope]]"
15
- last_modified: 2026-02-11
15
+ last_modified: 2026-04-07
16
16
  source: ace-assign
17
17
  skill:
18
18
  kind: workflow
@@ -22,3 +22,15 @@ skill:
22
22
  ---
23
23
 
24
24
  Load and run `ace-bundle wfi://assign/drive` 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.
25
+
26
+ Hard stop rule:
27
+
28
+ - Do not stop after intermediate progress.
29
+ - Do not stop while waiting on a forked subtree; keep polling and resume the parent drive loop as soon as the subtree reaches a terminal state.
30
+ - Treat `ace-assign status --assignment <id>@<root>` as the source of truth for fork completion; quiet terminal output is not enough reason to stop or declare a stall.
31
+ - If a prior terminal or drive session ended, re-enter from assignment state and continue from the next runnable work instead of depending on the old terminal handle.
32
+ - Before any final response, re-check pinned assignment status. If any runnable `pending` or `in_progress` work remains, continue driving.
33
+ - If unrelated dirty files are generated side effects outside task scope, clean/reset them instead of auto-committing them.
34
+ - Use progress updates for partial status only.
35
+ - Return a final user-facing completion response only when the assignment is complete or the workflow reaches an explicit blocker/failure stop condition.
36
+ - If pending work remains runnable, continue driving.
@@ -0,0 +1,29 @@
1
+ # bundle: wfi://assign/create-retro-internal
2
+ # agent: general-purpose
3
+ ---
4
+ name: as-create-retro-internal
5
+ description: Internal helper for retrospective creation in assignment closeout
6
+ user-invocable: false
7
+ allowed-tools:
8
+ - Bash(ace-bundle:*)
9
+ - Bash(ace-retro:*)
10
+ - Read
11
+ - Write
12
+ argument-hint: "[retro-title]"
13
+ last_modified: 2026-04-05
14
+ source: ace-assign
15
+ skill:
16
+ kind: workflow
17
+ execution:
18
+ workflow: wfi://assign/create-retro-internal
19
+ assign:
20
+ source: wfi://assign/create-retro-internal
21
+ steps:
22
+ - name: create-retro
23
+ description: Create retrospective summarizing outcomes and lessons
24
+ prerequisites:
25
+ - name: reflect-and-refactor
26
+ strength: recommended
27
+ ---
28
+
29
+ Load and run `ace-bundle wfi://assign/create-retro-internal` in the current project, then follow the loaded workflow as the source of truth.
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: as-mark-task-done-internal
3
+ description: Internal helper for marking tasks done with verification
4
+ # bundle: wfi://assign/mark-task-done-internal
5
+ # agent: general-purpose
6
+ user-invocable: false
7
+ allowed-tools:
8
+ - Bash(ace-bundle:*)
9
+ - Bash(ace-task:*)
10
+ - Read
11
+ - Write
12
+ argument-hint: "[taskref]"
13
+ last_modified: 2026-04-05
14
+ source: ace-assign
15
+ skill:
16
+ kind: workflow
17
+ execution:
18
+ workflow: wfi://assign/mark-task-done-internal
19
+ assign:
20
+ source: wfi://assign/mark-task-done-internal
21
+ steps:
22
+ - name: mark-task-done
23
+ description: Mark task complete and verify persisted status
24
+ prerequisites:
25
+ - name: work-on-task
26
+ strength: required
27
+ ---
28
+
29
+ Load and run `ace-bundle wfi://assign/mark-task-done-internal` in the current project, then follow the loaded workflow as the source of truth.
@@ -0,0 +1,30 @@
1
+ # bundle: wfi://assign/reflect-and-refactor-internal
2
+ # agent: general-purpose
3
+ ---
4
+ name: as-reflect-and-refactor-internal
5
+ description: Internal helper for architecture reflection and bounded refactoring
6
+ user-invocable: false
7
+ allowed-tools:
8
+ - Bash(ace-bundle:*)
9
+ - Bash(ace-review:*)
10
+ - Bash(ace-git-commit:*)
11
+ - Read
12
+ - Write
13
+ argument-hint: "[assignment-context]"
14
+ last_modified: 2026-04-05
15
+ source: ace-assign
16
+ skill:
17
+ kind: workflow
18
+ execution:
19
+ workflow: wfi://assign/reflect-and-refactor-internal
20
+ assign:
21
+ source: wfi://assign/reflect-and-refactor-internal
22
+ steps:
23
+ - name: reflect-and-refactor
24
+ description: Run architecture reflection and execute bounded refactoring
25
+ prerequisites:
26
+ - name: work-on-task
27
+ strength: required
28
+ ---
29
+
30
+ Load and run `ace-bundle wfi://assign/reflect-and-refactor-internal` in the current project, then follow the loaded workflow as the source of truth.
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: as-task-load-internal
3
+ description: Internal helper for loading task context into assignment execution
4
+ # bundle: wfi://assign/task-load-internal
5
+ # agent: general-purpose
6
+ user-invocable: false
7
+ allowed-tools:
8
+ - Bash(ace-bundle:*)
9
+ - Read
10
+ - Write
11
+ argument-hint: "[taskref]"
12
+ last_modified: 2026-04-05
13
+ source: ace-assign
14
+ skill:
15
+ kind: workflow
16
+ execution:
17
+ workflow: wfi://assign/task-load-internal
18
+ assign:
19
+ source: wfi://assign/task-load-internal
20
+ steps:
21
+ - name: task-load
22
+ description: Load task behavioral spec and dependency context into assignment execution
23
+ prerequisites:
24
+ - name: onboard-base
25
+ strength: recommended
26
+ ---
27
+
28
+ Load and run `ace-bundle wfi://assign/task-load-internal` in the current project, then follow the loaded workflow as the source of truth.
@@ -172,14 +172,14 @@ session:
172
172
 
173
173
  steps:
174
174
  - name: verify-test-suite
175
- workflow: wfi://test/verify-suite
175
+ source: wfi://assign/verify-test-suite
176
176
  instructions:
177
177
  - Run package test verification.
178
178
  ```
179
179
 
180
180
  Step mapping source of truth:
181
181
  - `name` from canonicalized step catalog entry
182
- - `workflow` from canonicalized step catalog entry
182
+ - `source` from canonicalized step catalog entry (step runtime contract)
183
183
  - `context` from canonicalized step catalog entry (if set)
184
184
  - `instructions` as assignment overlay from catalog description + request-specific context
185
185
 
@@ -253,4 +253,4 @@ After job.yaml is created:
253
253
  /as-assign-create <job.yaml>
254
254
  # or
255
255
  /as-assign-create "...intent..." --run
256
- ```
256
+ ```
@@ -0,0 +1,11 @@
1
+ # create-retro-internal
2
+
3
+ ## Purpose
4
+
5
+ Capture retrospective learnings after assignment implementation/release steps complete.
6
+
7
+ ## Steps
8
+
9
+ 1. Summarize outcomes, key decisions, and verification results.
10
+ 2. Capture issues, risks, and follow-up actions.
11
+ 3. Record the retrospective artifact in the task/retro system used by the assignment.
@@ -3,7 +3,7 @@ doc-type: workflow
3
3
  title: Create Assignment Workflow
4
4
  purpose: workflow instruction for smart public create UX that renders hidden specs and calls deterministic ace-assign create
5
5
  ace-docs:
6
- last-updated: 2026-03-18
6
+ last-updated: 2026-04-07
7
7
  last-checked: 2026-03-21
8
8
  ---
9
9
 
@@ -128,12 +128,12 @@ session:
128
128
 
129
129
  steps:
130
130
  - name: <step-name>
131
- workflow: <workflow-ref-if-public-step>
131
+ source: <source-ref-skill-or-wfi>
132
132
  instructions:
133
133
  - <instruction line>
134
134
  ```
135
135
 
136
- `instructions` are assignment overlay only. The reusable execution body comes from the referenced workflow during `ace-assign create`.
136
+ `instructions` are assignment overlay only. The reusable execution body comes from the canonical source resolution during `ace-assign create`.
137
137
 
138
138
  Rules:
139
139
  - Each invocation writes a new file (no in-place mutation of prior hidden specs).
@@ -156,6 +156,8 @@ If `--run` is present, hand off to drive as the last step:
156
156
  /as-assign-drive <assignment-id>
157
157
  ```
158
158
 
159
+ `/as-assign-drive` is a run-until-complete-or-blocked handoff, not a one-step progress check. Once handed off, it should keep driving until the assignment is actually complete or reaches an explicit blocker/failure stop condition.
160
+
159
161
  If no workable step exists, keep creation successful and report why drive cannot continue.
160
162
 
161
163
  ### 7. Report Result
@@ -203,6 +205,7 @@ Step 010: ...
203
205
  - Capability skills remain excluded from assign composition
204
206
  - Skill-backed steps still expand through runtime `assign.source` metadata
205
207
  - `--run` (when requested) triggers drive handoff as the final workflow step
208
+ - Drive handoff semantics are run-until-complete-or-blocked, not stop-after-first-progress
206
209
 
207
210
  ## Verification
208
211