ace-assign 0.42.4 → 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.
- checksums.yaml +4 -4
- data/.ace-defaults/assign/catalog/composition-rules.yml +2 -17
- data/.ace-defaults/assign/catalog/steps/create-pr.step.yml +0 -26
- data/.ace-defaults/assign/catalog/steps/create-retro.step.yml +1 -1
- data/.ace-defaults/assign/catalog/steps/mark-task-done.step.yml +1 -2
- data/.ace-defaults/assign/catalog/steps/onboard.step.yml +0 -17
- data/.ace-defaults/assign/catalog/steps/plan-task.step.yml +0 -11
- data/.ace-defaults/assign/catalog/steps/pre-commit-review.step.yml +3 -0
- data/.ace-defaults/assign/catalog/steps/reflect-and-refactor.step.yml +3 -2
- data/.ace-defaults/assign/catalog/steps/review-pr.step.yml +0 -16
- data/.ace-defaults/assign/catalog/steps/task-load.step.yml +1 -1
- data/.ace-defaults/assign/catalog/steps/verify-test-suite.step.yml +7 -34
- data/.ace-defaults/assign/catalog/steps/verify-test.step.yml +7 -4
- data/.ace-defaults/assign/catalog/steps/work-on-task.step.yml +0 -17
- data/.ace-defaults/assign/presets/fix-bug.yml +4 -3
- data/.ace-defaults/assign/presets/quick-implement.yml +1 -1
- data/.ace-defaults/assign/presets/work-on-task.yml +3 -16
- data/CHANGELOG.md +201 -0
- data/README.md +20 -43
- data/docs/demo/canonical-skill-source.gif +0 -0
- data/docs/demo/canonical-skill-source.tape.yml +51 -0
- data/docs/demo/fork-provider.cast +957 -0
- data/docs/demo/fork-provider.gif +0 -0
- data/docs/demo/fork-provider.recording.json +32 -0
- data/docs/demo/fork-provider.tape.yml +65 -20
- data/docs/getting-started.md +5 -2
- data/docs/usage.md +47 -0
- data/handbook/guides/fork-context.g.md +2 -2
- data/handbook/skills/as-assign-drive/SKILL.md +13 -1
- data/handbook/skills/as-create-retro-internal/SKILL.md +29 -0
- data/handbook/skills/as-mark-task-done-internal/SKILL.md +29 -0
- data/handbook/skills/as-reflect-and-refactor-internal/SKILL.md +30 -0
- data/handbook/skills/as-task-load-internal/SKILL.md +28 -0
- data/handbook/workflow-instructions/assign/compose.wf.md +3 -3
- data/handbook/workflow-instructions/assign/create-retro-internal.wf.md +11 -0
- data/handbook/workflow-instructions/assign/create.wf.md +6 -3
- data/handbook/workflow-instructions/assign/drive.wf.md +231 -14
- data/handbook/workflow-instructions/assign/mark-task-done-internal.wf.md +12 -0
- data/handbook/workflow-instructions/assign/prepare.wf.md +5 -5
- data/handbook/workflow-instructions/assign/reflect-and-refactor-internal.wf.md +14 -0
- data/handbook/workflow-instructions/assign/run-in-batches.wf.md +4 -1
- data/handbook/workflow-instructions/assign/start.wf.md +5 -2
- data/handbook/workflow-instructions/assign/task-load-internal.wf.md +12 -0
- data/handbook/workflow-instructions/assign/verify-test-suite.wf.md +36 -0
- data/lib/ace/assign/atoms/catalog_loader.rb +105 -2
- data/lib/ace/assign/atoms/step_file_parser.rb +15 -0
- data/lib/ace/assign/cli/commands/assignment_target.rb +53 -0
- data/lib/ace/assign/cli/commands/finish.rb +7 -4
- data/lib/ace/assign/cli/commands/fork_run.rb +4 -1
- data/lib/ace/assign/cli/commands/fork_session.rb +52 -0
- data/lib/ace/assign/cli/commands/start.rb +9 -3
- data/lib/ace/assign/cli/commands/status.rb +208 -227
- data/lib/ace/assign/cli/commands/step.rb +62 -0
- data/lib/ace/assign/cli.rb +8 -1
- data/lib/ace/assign/models/step.rb +4 -2
- data/lib/ace/assign/molecules/fork_session_launcher.rb +189 -8
- data/lib/ace/assign/molecules/queue_scanner.rb +1 -0
- data/lib/ace/assign/molecules/skill_assign_source_resolver.rb +223 -47
- data/lib/ace/assign/molecules/tmux_fork_runner.rb +191 -0
- data/lib/ace/assign/organisms/assignment_executor.rb +223 -24
- data/lib/ace/assign/version.rb +1 -1
- metadata +21 -5
- 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
|
|
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
|
-
-
|
|
6
|
+
- tmux
|
|
7
|
+
- demo
|
|
7
8
|
settings:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
-
|
|
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:
|
|
40
|
+
- name: Attach to the operator work window
|
|
18
41
|
commands:
|
|
19
|
-
- type:
|
|
20
|
-
sleep:
|
|
21
|
-
-
|
|
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:
|
|
24
|
-
sleep:
|
|
25
|
-
- type: "ace-assign
|
|
26
|
-
sleep:
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
-
|
|
32
|
-
|
|
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
|
data/docs/getting-started.md
CHANGED
|
@@ -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 --
|
|
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
|
@@ -23,12 +23,31 @@ Recommended:
|
|
|
23
23
|
ace-assign finish --message report.md
|
|
24
24
|
```
|
|
25
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
|
+
|
|
26
44
|
## Core Lifecycle
|
|
27
45
|
|
|
28
46
|
|
|
29
47
|
```bash
|
|
30
48
|
ace-assign create --yaml job.yaml
|
|
31
49
|
ace-assign status
|
|
50
|
+
ace-assign step
|
|
32
51
|
ace-assign finish --message step-010.md
|
|
33
52
|
ace-assign status
|
|
34
53
|
```
|
|
@@ -87,12 +106,19 @@ Show queue status for active or explicitly targeted assignment.
|
|
|
87
106
|
Options:
|
|
88
107
|
|
|
89
108
|
- `--flat, -f`
|
|
109
|
+
- `--mode compact|progress|full`
|
|
90
110
|
- `--format table|json`
|
|
91
111
|
- `--assignment <id>`
|
|
92
112
|
- `--all, -a`
|
|
93
113
|
- `--quiet, -q`
|
|
94
114
|
- `--debug, -d`
|
|
95
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
|
+
|
|
96
122
|
HITL stall behavior:
|
|
97
123
|
|
|
98
124
|
- Canonical contract lives in `wfi://hitl` (`ace-hitl` package workflow).
|
|
@@ -105,6 +131,16 @@ HITL stall behavior:
|
|
|
105
131
|
- Completion-attention flow:
|
|
106
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>`.
|
|
107
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
|
+
|
|
108
144
|
### `ace-assign start [STEP]`
|
|
109
145
|
|
|
110
146
|
Start next workable pending step, or an explicit pending step in the active assignment.
|
|
@@ -118,6 +154,10 @@ Options:
|
|
|
118
154
|
### `ace-assign finish [STEP] --message VALUE`
|
|
119
155
|
|
|
120
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.
|
|
121
161
|
|
|
122
162
|
`--message` accepts:
|
|
123
163
|
|
|
@@ -181,9 +221,16 @@ Options:
|
|
|
181
221
|
- `--provider <provider:model>`
|
|
182
222
|
- `--cli-args <args>`
|
|
183
223
|
- `--timeout <seconds>`
|
|
224
|
+
- `--launch-mode auto|headless|tmux`
|
|
184
225
|
- `--quiet, -q`
|
|
185
226
|
- `--debug, -d`
|
|
186
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
|
+
|
|
187
234
|
Provider resolution precedence for fork execution:
|
|
188
235
|
|
|
189
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.
|
|
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
|
-
+--
|
|
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-
|
|
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
|
-
|
|
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
|
-
- `
|
|
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-
|
|
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
|
-
|
|
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
|
|
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
|
|