ace-assign 0.71.0 → 0.73.1
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/steps/auto-merge.step.yml +8 -8
- data/.ace-defaults/assign/catalog/steps/create-pr.step.yml +1 -1
- data/.ace-defaults/assign/catalog/steps/mark-pr-ready.step.yml +1 -1
- data/.ace-defaults/assign/config.yml +0 -13
- data/.ace-defaults/assign/presets/fix-bug.yml +1 -1
- data/.ace-defaults/assign/presets/work-on-task-ace-development.yml +1 -1
- data/.ace-defaults/assign/presets/work-on-task-auto-merge.yml +1 -1
- data/.ace-defaults/assign/presets/work-on-task.yml +1 -1
- data/CHANGELOG.md +5 -2116
- data/README.md +58 -31
- data/docs/exit-codes.md +36 -44
- data/docs/getting-started.md +9 -4
- data/docs/usage.md +129 -522
- data/handbook/skills/as-assign-drive/SKILL.md +1 -4
- data/handbook/workflow-instructions/assign/drive.wf.md +47 -195
- data/handbook/workflow-instructions/assign/prepare.wf.md +1 -1
- data/handbook/workflow-instructions/assign/verify-test-suite.wf.md +8 -2
- data/lib/ace/assign/cli/commands/assignment_target.rb +2 -15
- data/lib/ace/assign/cli/commands/create.rb +1 -8
- data/lib/ace/assign/cli/commands/fail.rb +0 -6
- data/lib/ace/assign/cli/commands/finish.rb +2 -23
- data/lib/ace/assign/cli/commands/fork_session.rb +0 -1
- data/lib/ace/assign/cli/commands/select.rb +0 -1
- data/lib/ace/assign/cli/commands/start.rb +0 -2
- data/lib/ace/assign/cli/commands/status.rb +1 -31
- data/lib/ace/assign/cli/commands/step.rb +1 -3
- data/lib/ace/assign/cli.rb +1 -85
- data/lib/ace/assign/errors.rb +8 -80
- data/lib/ace/assign/models/assignment.rb +5 -28
- data/lib/ace/assign/molecules/assignment_manager.rb +0 -26
- data/lib/ace/assign/molecules/fork_session_launcher.rb +4 -12
- data/lib/ace/assign/molecules/lifecycle_exclusion.rb +15 -112
- data/lib/ace/assign/molecules/runtime_control_surface_runner.rb +6 -2
- data/lib/ace/assign/molecules/skill_assign_source_resolver.rb +9 -0
- data/lib/ace/assign/organisms/assignment_executor.rb +0 -6
- data/lib/ace/assign/organisms/task_assignment_creator.rb +3 -8
- data/lib/ace/assign/version.rb +1 -1
- data/lib/ace/assign.rb +0 -6
- metadata +22 -176
- data/.ace-defaults/assign/presets/close-delivery.yml +0 -57
- data/.ace-defaults/assign/presets/deliver-release.yml +0 -60
- data/.ace-defaults/assign/presets/integrate-batch.yml +0 -72
- data/.ace-defaults/assign/presets/supervise-delivery.yml +0 -69
- data/docs/protected-authority.md +0 -282
- data/exe/ace-scope-ready +0 -55
- data/lib/ace/assign/atoms/assignment_scope.rb +0 -58
- data/lib/ace/assign/atoms/attempt_state_machine.rb +0 -84
- data/lib/ace/assign/atoms/candidate_limits.rb +0 -20
- data/lib/ace/assign/atoms/delivery_parameters.rb +0 -19
- data/lib/ace/assign/atoms/evidence_digest.rb +0 -78
- data/lib/ace/assign/atoms/fixed_merge_schemas.rb +0 -398
- data/lib/ace/assign/atoms/git_blob_batch.rb +0 -59
- data/lib/ace/assign/authority/assignment_definition.rb +0 -35
- data/lib/ace/assign/authority/assignment_inventory.rb +0 -290
- data/lib/ace/assign/authority/campaign_consumer_policy.rb +0 -100
- data/lib/ace/assign/authority/campaign_execution.rb +0 -119
- data/lib/ace/assign/authority/campaign_round_transfer.rb +0 -82
- data/lib/ace/assign/authority/candidate_blob_batch.rb +0 -55
- data/lib/ace/assign/authority/candidate_head_comparison.rb +0 -139
- data/lib/ace/assign/authority/candidate_transfer.rb +0 -357
- data/lib/ace/assign/authority/cleanup_result_protection.rb +0 -53
- data/lib/ace/assign/authority/client.rb +0 -257
- data/lib/ace/assign/authority/command_execution.rb +0 -180
- data/lib/ace/assign/authority/deployment.rb +0 -627
- data/lib/ace/assign/authority/deployment_history.rb +0 -146
- data/lib/ace/assign/authority/endcap.rb +0 -457
- data/lib/ace/assign/authority/endcap_attempts.rb +0 -274
- data/lib/ace/assign/authority/endcap_campaign_results.rb +0 -232
- data/lib/ace/assign/authority/endcap_campaign_rounds.rb +0 -266
- data/lib/ace/assign/authority/endcap_contexts.rb +0 -23
- data/lib/ace/assign/authority/endcap_inboxes.rb +0 -37
- data/lib/ace/assign/authority/endcap_prepared_work.rb +0 -80
- data/lib/ace/assign/authority/endcap_publication.rb +0 -41
- data/lib/ace/assign/authority/endcap_results.rb +0 -398
- data/lib/ace/assign/authority/endcap_review_requests.rb +0 -183
- data/lib/ace/assign/authority/endcap_reviews.rb +0 -130
- data/lib/ace/assign/authority/endcap_service_context.rb +0 -38
- data/lib/ace/assign/authority/endcap_service_settlement.rb +0 -152
- data/lib/ace/assign/authority/evidence_transfer.rb +0 -67
- data/lib/ace/assign/authority/execution_scope_observation.rb +0 -903
- data/lib/ace/assign/authority/fixed_publication_lifecycle.rb +0 -176
- data/lib/ace/assign/authority/fixed_service_lifecycle.rb +0 -594
- data/lib/ace/assign/authority/inbox_context_original.rb +0 -113
- data/lib/ace/assign/authority/launch_attempt_consumers.rb +0 -51
- data/lib/ace/assign/authority/launch_campaign_registration.rb +0 -214
- data/lib/ace/assign/authority/launch_control_channel.rb +0 -313
- data/lib/ace/assign/authority/launch_control_exclusions.rb +0 -127
- data/lib/ace/assign/authority/launch_driver.rb +0 -393
- data/lib/ace/assign/authority/launch_input_inhibition.rb +0 -132
- data/lib/ace/assign/authority/launch_lifecycle.rb +0 -997
- data/lib/ace/assign/authority/launch_prepared_work.rb +0 -122
- data/lib/ace/assign/authority/launch_review.rb +0 -91
- data/lib/ace/assign/authority/launch_scope_abort.rb +0 -81
- data/lib/ace/assign/authority/launch_scope_admission.rb +0 -215
- data/lib/ace/assign/authority/launch_scope_close.rb +0 -146
- data/lib/ace/assign/authority/launch_scope_parent.rb +0 -44
- data/lib/ace/assign/authority/launch_scope_release.rb +0 -859
- data/lib/ace/assign/authority/launch_steering.rb +0 -353
- data/lib/ace/assign/authority/launch_stop.rb +0 -254
- data/lib/ace/assign/authority/maintenance_workspace_retirement.rb +0 -229
- data/lib/ace/assign/authority/ordinary_attempt_start.rb +0 -137
- data/lib/ace/assign/authority/ordinary_client.rb +0 -70
- data/lib/ace/assign/authority/ordinary_completion.rb +0 -104
- data/lib/ace/assign/authority/ordinary_effect_settlement.rb +0 -118
- data/lib/ace/assign/authority/ordinary_lifecycle.rb +0 -227
- data/lib/ace/assign/authority/ordinary_merge_evidence.rb +0 -81
- data/lib/ace/assign/authority/ordinary_peer.rb +0 -54
- data/lib/ace/assign/authority/ordinary_progress.rb +0 -162
- data/lib/ace/assign/authority/ordinary_queue.rb +0 -115
- data/lib/ace/assign/authority/ordinary_release_artifacts.rb +0 -143
- data/lib/ace/assign/authority/ordinary_results.rb +0 -206
- data/lib/ace/assign/authority/ordinary_review_evidence.rb +0 -180
- data/lib/ace/assign/authority/ordinary_reviews.rb +0 -214
- data/lib/ace/assign/authority/ordinary_server.rb +0 -75
- data/lib/ace/assign/authority/ordinary_supervisor.rb +0 -99
- data/lib/ace/assign/authority/original_inbox_selection.rb +0 -41
- data/lib/ace/assign/authority/posix_acl.rb +0 -59
- data/lib/ace/assign/authority/prepared_input.rb +0 -130
- data/lib/ace/assign/authority/prepared_queue.rb +0 -185
- data/lib/ace/assign/authority/prepared_task_context.rb +0 -116
- data/lib/ace/assign/authority/prepared_work.rb +0 -309
- data/lib/ace/assign/authority/prepared_worker.rb +0 -69
- data/lib/ace/assign/authority/private_directory.rb +0 -33
- data/lib/ace/assign/authority/protected_assignment_context.rb +0 -226
- data/lib/ace/assign/authority/readiness_hook.rb +0 -120
- data/lib/ace/assign/authority/receipt_transfer.rb +0 -48
- data/lib/ace/assign/authority/release_artifact_manifest.rb +0 -91
- data/lib/ace/assign/authority/retained_input.rb +0 -53
- data/lib/ace/assign/authority/router.rb +0 -81
- data/lib/ace/assign/authority/server.rb +0 -131
- data/lib/ace/assign/authority/service_cleanup_dispatch.rb +0 -88
- data/lib/ace/assign/authority/service_cleanup_evidence.rb +0 -180
- data/lib/ace/assign/authority/service_delivery_evidence.rb +0 -101
- data/lib/ace/assign/authority/service_evidence.rb +0 -286
- data/lib/ace/assign/authority/service_publication_evidence.rb +0 -110
- data/lib/ace/assign/authority/socket_server.rb +0 -255
- data/lib/ace/assign/authority/task_context_entry.rb +0 -32
- data/lib/ace/assign/authority/transfer_codec.rb +0 -189
- data/lib/ace/assign/cli/commands/attempt/base.rb +0 -84
- data/lib/ace/assign/cli/commands/attempt/evidence.rb +0 -28
- data/lib/ace/assign/cli/commands/attempt/finish.rb +0 -51
- data/lib/ace/assign/cli/commands/attempt/reconcile.rb +0 -49
- data/lib/ace/assign/cli/commands/attempt/start.rb +0 -45
- data/lib/ace/assign/cli/commands/attempt/status.rb +0 -54
- data/lib/ace/assign/cli/commands/authority/inbox_context_principal.rb +0 -25
- data/lib/ace/assign/cli/commands/authority/inbox_context_selection.rb +0 -28
- data/lib/ace/assign/cli/commands/authority/launch.rb +0 -97
- data/lib/ace/assign/cli/commands/authority/serve.rb +0 -31
- data/lib/ace/assign/cli/commands/authority/status.rb +0 -26
- data/lib/ace/assign/cli/commands/authority/task_context.rb +0 -31
- data/lib/ace/assign/cli/commands/authority/task_context_principal.rb +0 -25
- data/lib/ace/assign/cli/commands/authority/task_context_selection.rb +0 -30
- data/lib/ace/assign/cli/commands/authority/terminate.rb +0 -29
- data/lib/ace/assign/cli/commands/authority/worker.rb +0 -23
- data/lib/ace/assign/cli/commands/campaign_export_result.rb +0 -55
- data/lib/ace/assign/cli/commands/campaign_record_round.rb +0 -57
- data/lib/ace/assign/cli/commands/delivery.rb +0 -107
- data/lib/ace/assign/cli/commands/inbox_bind.rb +0 -34
- data/lib/ace/assign/cli/commands/protected_submission.rb +0 -61
- data/lib/ace/assign/cli/commands/resume.rb +0 -38
- data/lib/ace/assign/cli/commands/submit_candidate.rb +0 -34
- data/lib/ace/assign/cli/commands/submit_result.rb +0 -61
- data/lib/ace/assign/models/attempt.rb +0 -178
- data/lib/ace/assign/models/attempt_binding.rb +0 -116
- data/lib/ace/assign/models/evidence_event.rb +0 -86
- data/lib/ace/assign/models/execution_receipt.rb +0 -139
- data/lib/ace/assign/molecules/attempt_reconciler.rb +0 -127
- data/lib/ace/assign/molecules/attempt_store.rb +0 -201
- data/lib/ace/assign/molecules/canonical_attempt_state.rb +0 -151
- data/lib/ace/assign/molecules/canonical_evidence.rb +0 -170
- data/lib/ace/assign/molecules/canonical_read_commands.rb +0 -84
- data/lib/ace/assign/molecules/canonical_read_snapshot.rb +0 -313
- data/lib/ace/assign/molecules/evidence_calculator.rb +0 -237
- data/lib/ace/assign/molecules/evidence_journal.rb +0 -1899
- data/lib/ace/assign/molecules/execution_identity_resolver.rb +0 -137
- data/lib/ace/assign/molecules/execution_scope_lineage.rb +0 -345
- data/lib/ace/assign/molecules/fixed_effect_reference.rb +0 -31
- data/lib/ace/assign/molecules/installed_journal_read.rb +0 -143
- data/lib/ace/assign/molecules/journal_input_inhibition.rb +0 -78
- data/lib/ace/assign/molecules/journal_mutation.rb +0 -274
- data/lib/ace/assign/molecules/journal_prompt_mutation.rb +0 -241
- data/lib/ace/assign/molecules/ordinary_merge_cli.rb +0 -68
- data/lib/ace/assign/molecules/ordinary_merge_contract.rb +0 -410
- data/lib/ace/assign/molecules/original_launch_binding.rb +0 -37
- data/lib/ace/assign/molecules/proposal_journal.rb +0 -179
- data/lib/ace/assign/molecules/protected_control_exclusion.rb +0 -303
- data/lib/ace/assign/molecules/protected_workspace_exclusion.rb +0 -330
- data/lib/ace/assign/molecules/protected_workspace_provisioner.rb +0 -164
- data/lib/ace/assign/molecules/receipt_verifier.rb +0 -320
- data/lib/ace/assign/molecules/terminal_scope_receipt.rb +0 -88
- data/lib/ace/assign/organisms/attempt_coordinator.rb +0 -1374
- data/lib/ace/assign/organisms/delivery_coordinator.rb +0 -342
- data/lib/ace/assign/organisms/ordinary_driver.rb +0 -310
- data/lib/ace/assign/organisms/ordinary_merge_consumer.rb +0 -365
- data/lib/ace/assign/organisms/prepared_work_builder.rb +0 -194
- data/lib/ace/assign/organisms/protected_delivery_coordinator.rb +0 -100
data/docs/usage.md
CHANGED
|
@@ -1,613 +1,220 @@
|
|
|
1
1
|
---
|
|
2
2
|
doc-type: user
|
|
3
3
|
title: ace-assign Usage Guide
|
|
4
|
-
purpose:
|
|
5
|
-
and fork execution.
|
|
4
|
+
purpose: Command reference for local assignment plans, hierarchy, and fork execution.
|
|
6
5
|
ace-docs:
|
|
7
|
-
last-updated:
|
|
8
|
-
last-checked:
|
|
6
|
+
last-updated: 2026-10-17
|
|
7
|
+
last-checked: 2026-10-17
|
|
9
8
|
---
|
|
10
9
|
|
|
11
10
|
# ace-assign Usage Guide
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
> **State owner:** `.ace-local/assign/` -- assignment plans and step state owned
|
|
13
|
+
> by `ace-assign`. There is no second queue; steps are never copied into the
|
|
14
|
+
> private overseer list or coworker configuration. See
|
|
15
|
+
> [docs/lab-flow.md](../../docs/lab-flow.md).
|
|
14
16
|
|
|
15
|
-
##
|
|
17
|
+
## Testing contract
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
- `bin/ace-test ace-assign` - default deterministic package loop (`test/fast`)
|
|
20
|
+
- `bin/ace-test ace-assign feat` - deterministic feature/contract coverage
|
|
21
|
+
- `bin/ace-test ace-assign all` - full package deterministic coverage
|
|
22
|
+
- `bin/ace-test-e2e ace-assign` - scenario workflows under `test/e2e`
|
|
18
23
|
|
|
19
|
-
|
|
24
|
+
## Core lifecycle
|
|
20
25
|
|
|
26
|
+
An assignment is a numbered plan stored under `.ace-local/assign/`. Step state
|
|
27
|
+
moves `pending` → `in_progress` → `done` or `failed`. Commands without
|
|
28
|
+
`--assignment` act on the selected (active) assignment.
|
|
21
29
|
|
|
22
30
|
```bash
|
|
23
|
-
ace-assign
|
|
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
|
-
|
|
44
|
-
## Core Lifecycle
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
ace-assign create --yaml job.yaml
|
|
31
|
+
ace-assign create --task abc123 --preset work-on-task
|
|
32
|
+
ace-assign list
|
|
49
33
|
ace-assign status
|
|
50
|
-
ace-assign start
|
|
51
34
|
ace-assign step
|
|
52
|
-
ace-assign
|
|
53
|
-
ace-assign
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
Use scoped targeting when needed:
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
ace-assign status --assignment abc123@010.01
|
|
61
|
-
ace-assign start --assignment abc123@010.01
|
|
62
|
-
ace-assign finish --message done.md --assignment abc123@010.01
|
|
35
|
+
ace-assign start
|
|
36
|
+
ace-assign finish --message report.md
|
|
63
37
|
```
|
|
64
38
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
### Numbering
|
|
68
|
-
|
|
69
|
-
- Top-level: `010`, `020`, `030`
|
|
70
|
-
- Child: `010.01`, `010.02`
|
|
71
|
-
- Grandchild: `010.01.01`
|
|
72
|
-
|
|
73
|
-
### Rules
|
|
74
|
-
|
|
75
|
-
- Parents auto-complete when all descendants are done.
|
|
76
|
-
- Queue traversal works deepest actionable step first.
|
|
77
|
-
- Inserted siblings can renumber later siblings (and descendants).
|
|
78
|
-
|
|
79
|
-
Create child/sibling steps:
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
ace-assign add --step update-docs --after 020
|
|
84
|
-
ace-assign add --step review-pr --after 100 --child
|
|
85
|
-
ace-assign add --yaml .ace-local/assign/jobs/add-task.yml --after 010 --child
|
|
86
|
-
```
|
|
39
|
+
`finish` accepts report content as a string, a file path, or stdin. Without
|
|
40
|
+
report content it fails instead of completing the step silently.
|
|
87
41
|
|
|
88
|
-
##
|
|
42
|
+
## Hierarchical steps
|
|
89
43
|
|
|
90
|
-
|
|
44
|
+
Steps are numbered `010`, `020`, `100`, and children use dots:
|
|
45
|
+
`010.01`, `010.01.01`.
|
|
91
46
|
|
|
92
|
-
|
|
47
|
+
- A parent completes only when all of its children are done.
|
|
48
|
+
- Traversal prioritizes pending children before siblings.
|
|
49
|
+
- Inserting siblings in an occupied range renumbers the following steps.
|
|
50
|
+
- `--child` inserts a step as a child of `--after`.
|
|
93
51
|
|
|
94
|
-
|
|
52
|
+
## Commands
|
|
95
53
|
|
|
96
|
-
|
|
97
|
-
ace-assign attempt start --assignment ASSIGNMENT --step STEP --project PROJECT
|
|
98
|
-
ace-assign attempt status --assignment ASSIGNMENT --format json
|
|
99
|
-
ace-assign attempt finish --attempt ATTEMPT --receipt receipt.json
|
|
100
|
-
ace-assign attempt reconcile --attempt ATTEMPT --receipt receipt.json
|
|
101
|
-
```
|
|
54
|
+
### `ace-assign create`
|
|
102
55
|
|
|
103
|
-
|
|
104
|
-
- `attempt status` exposes only state, binding, references, and digests -- never credentials or receipt bytes.
|
|
105
|
-
- `attempt finish` accepts a structured receipt: operation, attributed producer, exact tested/reviewed head, verdict, artifact paths with SHA-256 digests, executed checks, and -- for review operations -- an executed independent reviewer verdict for that head.
|
|
106
|
-
- `attempt reconcile` classifies interrupted attempts (`uncertain` when launch or effect completion cannot be proven either way, still `running` only for verifiably live processes) and resolves uncertainty only against a verified receipt attributed to the recorded execution boundary. Merge, publish, and deploy effects are never replayed automatically.
|
|
56
|
+
Create an assignment from a preset or a YAML definition.
|
|
107
57
|
|
|
108
|
-
|
|
58
|
+
| Option | Purpose |
|
|
59
|
+
|--------|---------|
|
|
60
|
+
| `--yaml` | Path to a job YAML file |
|
|
61
|
+
| `--task`, `-t` | Task reference(s); repeatable and comma-separated |
|
|
62
|
+
| `--preset`, `-p` | Assignment preset name (task mode only) |
|
|
63
|
+
| `--quiet`, `--debug` | Output control |
|
|
109
64
|
|
|
110
65
|
```bash
|
|
111
|
-
ace-assign
|
|
112
|
-
ace-assign
|
|
113
|
-
ace-assign
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
The installed authority authenticates the current caller. Finish and recovery require the original launcher or an authorized mapped supervisor; Inbox binding requires the original worker or its authenticated descendant and an open execution scope. Installed current or retained authority, service and Inbox accounts also stay on the protected path: unsupported roles refuse rather than opening local authority.
|
|
117
|
-
|
|
118
|
-
Protected finish selects an already submitted canonical result. A succeeded result requires accepted independent review for that exact candidate, prior no-writers proof and complete service settlement. It does not close the scope or accept `--receipt`. Protected recovery observes one original attempt; unresolved service effects remain unresolved. Terminal/released recovery returns authenticated retained selectors without creating another mutation or restarting execution. Inbox binding retains the original event/attempt attribution; fresh binding after scope seal refuses.
|
|
119
|
-
|
|
120
|
-
Keep the original `--mutation` and `--expected-generation` for exact retries. Authority generation is distinct from `--candidate-generation`; rereading a newer generation changes the request. Assignment, attempt and mapping hints must agree with explicit selection. Commands print canonical JSON metadata and never resend effects during recovery.
|
|
121
|
-
|
|
122
|
-
### State machine
|
|
123
|
-
|
|
124
|
-
`reserved -> running -> succeeded | failed | stopped | uncertain`; reconciliation may resolve `uncertain -> succeeded | failed`. Terminal attempts accept no new effects, and accepted history is append-only.
|
|
125
|
-
|
|
126
|
-
### Read accepted execution authority
|
|
127
|
-
|
|
128
|
-
`attempt evidence` reads a managed coordinator-accepted receipt from immutable journal history without transitions, cache writes, or audit checkout creation. Supply the accepted attempt ID and exact canonical receipt digest. The trusted local operator or OS-enforced service verifies the actual executed outcome before accepting its receipt; worker-authored success claims cannot accept themselves. This reader consumes that attestation and does not execute a test or model.
|
|
129
|
-
|
|
130
|
-
```sh
|
|
131
|
-
ace-assign attempt evidence --attempt ATTEMPT --receipt-digest SHA256 --format json \
|
|
132
|
-
--kind check --check-name tests
|
|
133
|
-
ace-assign attempt evidence --attempt ATTEMPT --receipt-digest SHA256 --format json \
|
|
134
|
-
--kind review-collection
|
|
135
|
-
ace-assign attempt evidence --attempt ATTEMPT --receipt-digest SHA256 --format json \
|
|
136
|
-
--kind review-collection --historical-head EXACT_RECORDED_HEAD
|
|
137
|
-
ace-assign attempt evidence --attempt ATTEMPT --receipt-digest SHA256 --format json \
|
|
138
|
-
--kind review-approval
|
|
66
|
+
ace-assign create --yaml job.yaml
|
|
67
|
+
ace-assign create --task t.xyz
|
|
68
|
+
ace-assign create --task t.100,t.101 --preset work-on-task
|
|
139
69
|
```
|
|
140
70
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
### Service effect claims
|
|
71
|
+
When `--task` refs expand through the `work-on-task` preset, terminal tasks are
|
|
72
|
+
filtered before the assignment's own step expansion:
|
|
144
73
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
-
|
|
148
|
-
- `#service_request_status(request_id)` reads the authoritative claim state, including after local cache loss.
|
|
149
|
-
- `#transition_service_request(request_id, state:, receipt:)` moves a claim to `succeeded` or `failed` only with a bound, non-secret receipt (exact request/attempt/project/operation/input digest/target fields, non-negative executor UID, and SHA-256 evidence references); rejected receipts never become approvals.
|
|
150
|
-
- `#reject_service_request(binding, reason:)` durably records an auditable rejection without inventing a valid attempt.
|
|
151
|
-
- Journal commits advance `journal_commit` only; they never change or authorize `candidate_head`, and `base_head` stays fixed at attempt start.
|
|
152
|
-
|
|
153
|
-
### Evidence storage and recovery modes
|
|
154
|
-
|
|
155
|
-
- Task-attached (managed) attempts journal accepted evidence to the configured evidence Git ref (default `refs/ace/execution`) through an isolated, disposable audit checkout, outside the deliverable candidate branch. Journal commits never advance or exempt the reviewed candidate.
|
|
156
|
-
- Taskless assignments persist attempts under `.ace-local/assign` with `recovery_mode: local_only`. This path never claims Git-backed recovery and cannot record external effects (`merge`, `publish`, `deploy`, `release`); attach the assignment to a source task before managed delivery.
|
|
157
|
-
- Actor identity always comes from the execution boundary (the kernel process account for local use, or the trusted service executor's identity). Local execution requires equal real and effective UIDs and resolves the effective UID's OS account; terminal login, `USER`, and `LOGNAME` do not select the actor. Unknown accounts, changing credentials, and unsupported privilege transitions fail closed; flags never grant identity or authority. Historical attempt ownership is never rewritten.
|
|
158
|
-
|
|
159
|
-
For developer callers, `Ace::Assign::Molecules::ExecutionIdentityResolver.new(adapter: "local").resolve.actor`
|
|
160
|
-
returns `Etc.getpwuid(Process.euid).name` for an ordinary process, including one without a terminal login.
|
|
161
|
-
If the OS account cannot be established or real/effective UIDs differ, it raises
|
|
162
|
-
`Ace::Assign::AttemptErrors::UnauthorizedIdentity` (CLI exit code 5). Correct the process launch/account;
|
|
163
|
-
setting `USER` or `LOGNAME` cannot authorize it. A previously recorded foreign owner still requires the
|
|
164
|
-
existing recovery process; this change does not transfer ownership.
|
|
165
|
-
|
|
166
|
-
### status integration
|
|
167
|
-
|
|
168
|
-
`ace-assign status --format json` includes the active attempt, `base_head`, `candidate_head`, `evidence_git_ref`, `journal_commit`, and unresolved effects. Feedback state is derived from accepted current-head evidence: `terminal` (accepted evidence at the current head), `open` (attempts without a terminal outcome), `uncertain` (unresolved interruptions), or `unknown` (no attempts). Merge authorization requires an executed independent review verdict for the current head plus an independent release receipt when relevant; report files, exit codes, and prose never authorize a merge.
|
|
169
|
-
|
|
170
|
-
## Commands
|
|
171
|
-
|
|
172
|
-
### `ace-assign create`
|
|
173
|
-
|
|
174
|
-
Create a new assignment from YAML or from task refs expanded through an assignment preset.
|
|
175
|
-
|
|
176
|
-
Options:
|
|
74
|
+
- Terminal refs (`done`, `skipped`, `cancelled`) are skipped before queue expansion.
|
|
75
|
+
- Mixed sets continue with remaining non-terminal refs and report skipped terminal refs.
|
|
76
|
+
- All requested tasks are already terminal (done/skipped/cancelled): <refs>
|
|
177
77
|
|
|
178
|
-
|
|
179
|
-
- `--task, -t <taskref[,taskref...]>` (repeatable)
|
|
180
|
-
- `--preset, -p NAME`
|
|
181
|
-
- `--quiet, -q`
|
|
182
|
-
- `--debug, -d`
|
|
78
|
+
The last case creates no assignment and returns that message instead.
|
|
183
79
|
|
|
184
|
-
|
|
80
|
+
`ace-assign` is role- and folder-name-agnostic: it delegates any non-terminal
|
|
81
|
+
task the caller names. The caller decides which tasks are appropriate; the
|
|
82
|
+
assignment tool does not classify management tasks or inspect `.gitignore`.
|
|
185
83
|
|
|
186
84
|
### `ace-assign status`
|
|
187
85
|
|
|
188
|
-
Show
|
|
189
|
-
|
|
190
|
-
Options:
|
|
191
|
-
|
|
192
|
-
- `--flat, -f`
|
|
193
|
-
- `--mode compact|progress|full`
|
|
194
|
-
- `--format table|json`
|
|
195
|
-
- `--assignment <id>`
|
|
196
|
-
- `--all, -a`
|
|
197
|
-
- `--quiet, -q`
|
|
198
|
-
- `--debug, -d`
|
|
199
|
-
|
|
200
|
-
Text modes:
|
|
86
|
+
Show plan progress.
|
|
201
87
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
- Canonical contract lives in `wfi://hitl` (`ace-hitl` package workflow).
|
|
210
|
-
- 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.
|
|
211
|
-
- Recommended resume flow:
|
|
212
|
-
|
|
213
|
-
- `ace-hitl show <id>`
|
|
214
|
-
- requester path (default): `ace-hitl wait <id>`
|
|
215
|
-
- fallback path (when waiter inactive): `ace-hitl update <id> --answer "<decision>" --resume`
|
|
216
|
-
- `ace-assign retry <failed-step> --assignment <assignment-id>`
|
|
217
|
-
|
|
218
|
-
- Completion-attention flow:
|
|
219
|
-
|
|
220
|
-
- 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>`.
|
|
88
|
+
| Option | Purpose |
|
|
89
|
+
|--------|---------|
|
|
90
|
+
| `--mode` | Text mode: `compact` (default), `progress`, `full` |
|
|
91
|
+
| `--format` | `table` (default) or `json` |
|
|
92
|
+
| `--flat` | Flat list (full mode only) |
|
|
93
|
+
| `--assignment` | Show one assignment ID |
|
|
94
|
+
| `--all`, `-a` | Include completed assignments |
|
|
221
95
|
|
|
222
96
|
### `ace-assign step [STEP]`
|
|
223
97
|
|
|
224
|
-
Show instructions for the
|
|
225
|
-
|
|
226
|
-
Options:
|
|
227
|
-
|
|
228
|
-
- `--assignment <id>`
|
|
229
|
-
- `--quiet, -q`
|
|
230
|
-
- `--debug, -d`
|
|
98
|
+
Show instructions for the active, next, or explicit step.
|
|
231
99
|
|
|
232
100
|
### `ace-assign start [STEP]`
|
|
233
101
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
Options:
|
|
237
|
-
|
|
238
|
-
- `--assignment <id>`
|
|
239
|
-
- `--quiet, -q`
|
|
240
|
-
- `--debug, -d`
|
|
102
|
+
Start the next workable pending step, or an explicit step number.
|
|
241
103
|
|
|
242
104
|
### `ace-assign finish [STEP] --message VALUE`
|
|
243
105
|
|
|
244
|
-
Complete the
|
|
245
|
-
Use positional `STEP` only for the active assignment. When targeting another
|
|
246
|
-
assignment or a scoped subtree, pass `--assignment <id>` or
|
|
247
|
-
`--assignment <id@step>` without a positional `STEP`; the command finishes the
|
|
248
|
-
deepest active step in that target.
|
|
106
|
+
Complete the active step with report content.
|
|
249
107
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
-
|
|
253
|
-
-
|
|
254
|
-
|
|
255
|
-
Options:
|
|
256
|
-
|
|
257
|
-
- `--message, -m` (required)
|
|
258
|
-
- `--assignment <id>`
|
|
259
|
-
- `--quiet, -q`
|
|
260
|
-
- `--debug, -d`
|
|
108
|
+
```bash
|
|
109
|
+
ace-assign finish --message "done"
|
|
110
|
+
ace-assign finish --message report.md
|
|
111
|
+
cat report.md | ace-assign finish
|
|
112
|
+
```
|
|
261
113
|
|
|
262
114
|
### `ace-assign fail --message TEXT`
|
|
263
115
|
|
|
264
|
-
Mark current step
|
|
265
|
-
|
|
266
|
-
Options:
|
|
267
|
-
|
|
268
|
-
- `--message, -m` (required)
|
|
269
|
-
- `--assignment <id>`
|
|
270
|
-
- `--quiet, -q`
|
|
271
|
-
- `--debug, -d`
|
|
116
|
+
Mark the current step failed. The error message is required.
|
|
272
117
|
|
|
273
118
|
### `ace-assign add`
|
|
274
119
|
|
|
275
|
-
|
|
120
|
+
Add step(s) to the plan dynamically.
|
|
276
121
|
|
|
277
|
-
|
|
122
|
+
| Option | Purpose |
|
|
123
|
+
|--------|---------|
|
|
124
|
+
| `--yaml` | YAML file with a top-level `steps:` array |
|
|
125
|
+
| `--step` | Preset step name(s), comma-separated |
|
|
126
|
+
| `--task` | Task reference expanded from a preset child template |
|
|
127
|
+
| `--preset` | Preset name (required only for `--step`/`--task`) |
|
|
128
|
+
| `--after`, `-a` | Insert after this step number (e.g. `010`) |
|
|
129
|
+
| `--child`, `-c` | Insert as a child of `--after` |
|
|
130
|
+
| `--assignment` | Target a specific assignment |
|
|
278
131
|
|
|
279
|
-
|
|
280
|
-
-
|
|
281
|
-
-
|
|
282
|
-
-
|
|
283
|
-
-
|
|
284
|
-
|
|
285
|
-
- `--assignment <id>`
|
|
286
|
-
- `--quiet, -q`
|
|
287
|
-
- `--debug, -d`
|
|
288
|
-
|
|
289
|
-
Exactly one mode is required: `--yaml`, `--step`, or `--task`.
|
|
132
|
+
```bash
|
|
133
|
+
ace-assign add --task t.xyz
|
|
134
|
+
ace-assign add --step update-docs --after 020
|
|
135
|
+
ace-assign add --step review-pr --after 100 --child
|
|
136
|
+
ace-assign add --yaml add-task.yml --after 010 --child
|
|
137
|
+
```
|
|
290
138
|
|
|
291
139
|
### `ace-assign retry STEP_REF`
|
|
292
140
|
|
|
293
|
-
|
|
141
|
+
Retry a failed step by creating a new linked step.
|
|
294
142
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
- `--quiet, -q`
|
|
299
|
-
- `--debug, -d`
|
|
143
|
+
```bash
|
|
144
|
+
ace-assign retry 040
|
|
145
|
+
```
|
|
300
146
|
|
|
301
147
|
### `ace-assign fork-run`
|
|
302
148
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
Options:
|
|
306
|
-
|
|
307
|
-
- `--root <step-number>`
|
|
308
|
-
- `--assignment <id>`
|
|
309
|
-
- `--provider <provider:model>`
|
|
310
|
-
- `--cli-args <args>`
|
|
311
|
-
- `--timeout <seconds>`
|
|
312
|
-
- `--launch-mode auto|headless|tmux|herdr`
|
|
313
|
-
- `--callback`
|
|
314
|
-
- `--quiet, -q`
|
|
315
|
-
- `--debug, -d`
|
|
316
|
-
|
|
317
|
-
Launch modes:
|
|
318
|
-
|
|
319
|
-
- `auto` (default): use the detected terminal runtime — tmux when the current process is inside tmux or `ACE_TMUX_SESSION` is set (tmux wins when both are live), herdr when `HERDR_SESSION` + `HERDR_PANE` are live; with no runtime detected, use the headless subprocess path (assign is the only consumer with a headless fallback)
|
|
320
|
-
- `headless`: force the existing provider subprocess path and never create terminal panes
|
|
321
|
-
- `tmux`: require a live tmux context, create or reuse `<origin-window>-fs` through the `ace-runtime` contract, start a real interactive agent in a prepared pane via `ace-llm --interactive`, and send the scoped `/as-assign-drive <assignment>@<root>` handoff automatically
|
|
322
|
-
- `herdr`: the same flow through the Herdr adapter — the fork opens as a tab in the caller's live Herdr workspace and the child inherits `HERDR_*` plus `ACE_RUNTIME=herdr`
|
|
323
|
-
|
|
324
|
-
- All terminal targeting, pane dispatch, and capture go through the runtime-neutral `ace-runtime` contract; the fork window name uses the shared `ace-runtime` safe-name policy, so punctuation in the base window is replaced with `-`.
|
|
325
|
-
- Fork windows/panes and herdr tabs are created detached, so the current focus stays where the user left it.
|
|
326
|
-
- Assignment step state remains the source of truth for subtree completion or failure; pane capture is diagnostic support only.
|
|
327
|
-
|
|
328
|
-
Callback mode:
|
|
329
|
-
|
|
330
|
-
- `--callback`: terminal-only fork mode (requires `tmux` or `herdr` launch mode) that captures the pane where `fork-run` was started and passes it into the child fork session as `ACE_ASSIGN_CALLBACK_PANE`
|
|
331
|
-
- In callback mode the child agent is instructed to send one final status sentence back to the origin pane with `ace-runtime send` before stopping
|
|
332
|
-
- Callback mode is intended for interactive parent/child agent flows where the parent stays idle until the child sends the final message back
|
|
333
|
-
|
|
334
|
-
Launch-mode precedence for fork execution:
|
|
335
|
-
|
|
336
|
-
1. CLI `--launch-mode`
|
|
337
|
-
2. Step frontmatter `fork.mode`
|
|
338
|
-
3. Config `execution.launch_mode`
|
|
339
|
-
4. Built-in default `auto`
|
|
149
|
+
Prepare fork execution for an entire subtree.
|
|
340
150
|
|
|
341
|
-
|
|
151
|
+
| Option | Purpose |
|
|
152
|
+
|--------|---------|
|
|
153
|
+
| `--root` | Fork subtree root step number (e.g. `010.01`) |
|
|
154
|
+
| `--provider` | LLM provider:model override |
|
|
155
|
+
| `--cli-args` | Extra CLI args for the provider process |
|
|
156
|
+
| `--timeout` | Execution timeout in seconds |
|
|
157
|
+
| `--launch-mode` | `auto`, `headless`, `tmux`, or `herdr` |
|
|
158
|
+
| `--callback` | Capture the origin pane and receive a final callback there |
|
|
342
159
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
4. Built-in default provider
|
|
347
|
-
|
|
348
|
-
Step-level example:
|
|
349
|
-
|
|
350
|
-
```yaml
|
|
351
|
-
---
|
|
352
|
-
name: research
|
|
353
|
-
status: pending
|
|
354
|
-
context: fork
|
|
355
|
-
fork:
|
|
356
|
-
provider: "claude:sonnet@yolo"
|
|
357
|
-
mode: "tmux"
|
|
358
|
-
---
|
|
160
|
+
```bash
|
|
161
|
+
ace-assign fork-run --root 010.01
|
|
162
|
+
ace-assign fork-run --root 010.01 --provider codex:gpt-5 --timeout 900
|
|
359
163
|
```
|
|
360
164
|
|
|
361
165
|
### `ace-assign list`
|
|
362
166
|
|
|
363
|
-
List assignments.
|
|
364
|
-
|
|
365
|
-
Options:
|
|
366
|
-
|
|
367
|
-
- `--all, -a`
|
|
368
|
-
- `--task, -t <taskref>`
|
|
369
|
-
- `--tree`
|
|
370
|
-
- `--format table|json`
|
|
371
|
-
- `--quiet, -q`
|
|
372
|
-
- `--debug, -d`
|
|
167
|
+
List assignments. `--all` includes completed ones, `--task` filters by task
|
|
168
|
+
ref, `--tree` shows the hierarchy, `--format json` exports.
|
|
373
169
|
|
|
374
170
|
### `ace-assign select [ID]`
|
|
375
171
|
|
|
376
|
-
Select active assignment
|
|
377
|
-
|
|
378
|
-
Options:
|
|
379
|
-
|
|
380
|
-
- `--clear`
|
|
381
|
-
- `--quiet, -q`
|
|
382
|
-
- `--debug, -d`
|
|
172
|
+
Select the active assignment. `--clear` reverts to `.latest`.
|
|
383
173
|
|
|
384
|
-
## Workflow
|
|
174
|
+
## Workflow patterns
|
|
385
175
|
|
|
386
|
-
###
|
|
387
|
-
|
|
388
|
-
When using preset-backed assignment creation (`ace-assign create --task ...`, `/as-assign-prepare`, or `/as-assign-create`):
|
|
389
|
-
|
|
390
|
-
- Requested refs are resolved first (single, comma list, range, pattern).
|
|
391
|
-
- Terminal refs (`done`, `skipped`, `cancelled`) are skipped before queue expansion.
|
|
392
|
-
- Mixed sets continue with remaining non-terminal refs and report skipped terminal refs.
|
|
393
|
-
- If all requested refs are terminal, assignment creation stops with:
|
|
394
|
-
|
|
395
|
-
- `All requested tasks are already terminal (done/skipped/cancelled): <refs>`
|
|
396
|
-
- `No assignment created.`
|
|
397
|
-
|
|
398
|
-
### Scoped Subtree Execution
|
|
176
|
+
### Scoped subtree execution
|
|
399
177
|
|
|
178
|
+
If several assignments are open, scope every command to the exact assignment
|
|
179
|
+
(and optionally a subtree):
|
|
400
180
|
|
|
401
181
|
```bash
|
|
402
|
-
ace-assign status --assignment abc123
|
|
403
|
-
ace-assign
|
|
182
|
+
ace-assign status --assignment abc123
|
|
183
|
+
ace-assign finish --message report.md --assignment abc123
|
|
404
184
|
```
|
|
405
185
|
|
|
406
|
-
### Recovery from
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
```bash
|
|
410
|
-
ace-assign fail --message "Lint failed in docs"
|
|
411
|
-
ace-assign retry 040 --assignment abc123
|
|
412
|
-
```
|
|
186
|
+
### Recovery from failure
|
|
413
187
|
|
|
414
|
-
|
|
188
|
+
Keep the failed step intact; add a retry or a fix step, then continue. Do not
|
|
189
|
+
delete steps to hide a failure.
|
|
415
190
|
|
|
191
|
+
### Multi-assignment management
|
|
416
192
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
ace-assign select abc123
|
|
420
|
-
ace-assign select --clear
|
|
421
|
-
```
|
|
193
|
+
Use `ace-assign list --all` and `ace-assign select` to switch between open
|
|
194
|
+
plans. Each plan keeps its own history.
|
|
422
195
|
|
|
423
|
-
## Exit
|
|
196
|
+
## Exit codes
|
|
424
197
|
|
|
425
198
|
| Code | Meaning |
|
|
426
199
|
|------|---------|
|
|
427
200
|
| 0 | Success |
|
|
428
|
-
| 1 | General error |
|
|
429
|
-
| 2 | Assignment error |
|
|
201
|
+
| 1 | General error (invalid step reference, rejected report, unhandled error) |
|
|
202
|
+
| 2 | Assignment error (no active/known assignment) |
|
|
430
203
|
| 3 | Configuration not found |
|
|
431
204
|
| 4 | Step not found |
|
|
205
|
+
| 5 | Lifecycle conflict or busy maintenance exclusion (conflicting identity or busy/expired maintenance; the operation is refused, not retried in a loop) |
|
|
432
206
|
| 130 | Interrupted (SIGINT) |
|
|
433
207
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
## Resume accepted assignment state
|
|
437
|
-
|
|
438
|
-
```bash
|
|
439
|
-
ace-assign resume --assignment ID --dry-run
|
|
440
|
-
ace-assign resume --assignment ID
|
|
441
|
-
```
|
|
442
|
-
|
|
443
|
-
Resume returns JSON with task goal, checkpoint, attempts, pending HITL references and unresolved effect/inbox references. Each attempt reports `adopt`, `restart-required` or `reconcile-required`, liveness, recovery reason and its last verified observation. Dry-run writes nothing. Actual resume journals a bounded observation; unproven running attempts become uncertain and keep their writer slot. Intent-only reservations remain `reserved` with `reconcile-required`: absent process-start history never proves that a child did not launch. `attempt start` refuses to reuse an unbound reservation, and `attempt reconcile` reports that protected launch reconciliation requires positive no-execution/no-surviving-writer proof before abort. The protected launch authority owns that proof and abort path; these source primitives do not implement it. Finish also rejects an unbound reservation before accepting any receipt, even if a stale local cache says running. Imported canonical evidence stores the exact submitted bytes without Git clean filters or line-ending conversions; immutable reuse compares the accepted Git blob. It never launches a new process or resends a payload. Restart goes through a new `attempt start` only after the previous attempt ends with accepted evidence.
|
|
208
|
+
## Planned waves
|
|
444
209
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
agent progress at its original Herdr/tmux panel; uncertain sends are not repeated
|
|
453
|
-
automatically.
|
|
454
|
-
|
|
455
|
-
Installed Herdr/Pi compaction and writing-child stop/close acceptance must be recorded separately from deterministic fixture coverage before Lab cutover.
|
|
456
|
-
|
|
457
|
-
### Attempt-bound forge delivery
|
|
458
|
-
|
|
459
|
-
`ace-assign create --task TASK --preset work-on-task --delivery-parameters delivery.json`
|
|
460
|
-
accepts an explicit delivery mapping. A local-only preset rejects that mapping.
|
|
461
|
-
The same mapping is retained as `delivery` in the assignment job:
|
|
462
|
-
|
|
463
|
-
```json
|
|
464
|
-
{"forge_server":"lab-forge","pr_provenance":{"mode":"fork","head_repository_url":"https://forge.example/worker/project","head_ref":"task-branch","base_repository_url":"https://forge.example/team/project","base_ref":"main"}}
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
Use either `forge_server` or boolean `forge_default: true`. With neither,
|
|
468
|
-
the first remote delivery resolves the repository remote and journals the selected
|
|
469
|
-
forge. Subsequent mutations retain that identity. Canonical mode requires equal
|
|
470
|
-
head and base repository URLs; fork mode names both repositories explicitly.
|
|
471
|
-
The source ref must already contain the exact local candidate commit.
|
|
472
|
-
|
|
473
|
-
`ace-assign delivery --assignment ID --attempt ATTEMPT --operation create --title TITLE`
|
|
474
|
-
creates a draft. Operations `update`, `review` and `status` reuse that attempt;
|
|
475
|
-
status and review do not append evidence. `ready --tests TEST-REF.json --review
|
|
476
|
-
REVIEW-REF.json` requires references containing `attempt_id` and `receipt_digest`
|
|
477
|
-
to coordinator-accepted, executed tests and independent approval at the current
|
|
478
|
-
candidate. Remote CI remains visible and advisory. An unresolved mutation is
|
|
479
|
-
reconciled by exact provider identity; absence or conflicting matches remain
|
|
480
|
-
unresolved and never trigger an automatic second write. Retrying readiness uses
|
|
481
|
-
the original intent's evidence references, revalidated against the current head.
|
|
482
|
-
|
|
483
|
-
Merge runs in the authorized qjx executor, which calls the neutral provider merge
|
|
484
|
-
primitive under its existing scoped policy. The worker only consumes completion:
|
|
485
|
-
`delivery --operation merge --service-request REQUEST --tests TEST-REF.json
|
|
486
|
-
--review REVIEW-REF.json`. A completed, verified receipt must bind this assignment,
|
|
487
|
-
attempt, candidate and exact PR resource; credentials do not grant authority.
|
|
488
|
-
Version and changelog preparation do not authorize publication.
|
|
489
|
-
|
|
490
|
-
The neutral `git/pr/create` and `git/pr/update` workflow and skill assets require
|
|
491
|
-
qkb.1 companion adoption across installed consumers. Their source tests do not
|
|
492
|
-
claim fresh installed workflow acceptance or authorized live merge acceptance.
|
|
493
|
-
|
|
494
|
-
Delivery context belongs to the assignment's existing evidence journal, while each
|
|
495
|
-
operation belongs to its own scoped attempt. Closing create step `030` and starting
|
|
496
|
-
update `147` or readiness `148` retains the exact PR and forge. An unresolved intent
|
|
497
|
-
from any earlier scoped attempt prevents a second mutation: reconciliation records
|
|
498
|
-
a result under the current attempt and links the original intent digest and attempt.
|
|
499
|
-
Status history includes each event's owning `attempt_id` and `event_digest`. No
|
|
500
|
-
single delivery attempt needs to remain active throughout the recipe.
|
|
501
|
-
If reconciliation recovers a different operation than the requested step (for
|
|
502
|
-
example, create while invoking readiness), the command reports that the requested
|
|
503
|
-
step still needs execution. It does not return success for an unperformed step.
|
|
504
|
-
Retry that requested operation with its current evidence after recovery settles.
|
|
505
|
-
|
|
506
|
-
Recovery compares the exact requested effect, not only its operation name. An
|
|
507
|
-
uncertain update of one title/body cannot complete a later update with different
|
|
508
|
-
content. Creation also checks the requested title/body against the observed draft,
|
|
509
|
-
including adoption of an already known draft. A mismatched request receives
|
|
510
|
-
`AttemptErrors::CurrentEffectRequired` after the old intent is settled; the new
|
|
511
|
-
effect remains unperformed until explicitly retried. Explicit readiness references
|
|
512
|
-
must match the recovered intent; omitting them during retry retains and revalidates
|
|
513
|
-
its original references. Merge always consumes the exact named qjx service request,
|
|
514
|
-
its candidate/target binding and verified receipt, never an older PR result.
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
## Protected cross-user native launch
|
|
518
|
-
|
|
519
|
-
The fixed installed authority exposes `ace-assign authority serve`, `launch`,
|
|
520
|
-
`status` and `terminate`. See [protected authority](protected-authority.md) for
|
|
521
|
-
OS policy, native artifact installation, canonical launch stages and safe replay.
|
|
522
|
-
|
|
523
|
-
## Source-owned installation maintenance inventory
|
|
524
|
-
|
|
525
|
-
The trusted installation owner loads exact protected content references for the
|
|
526
|
-
original and staged candidate descriptor using `Authority::Deployment.load_artifact`.
|
|
527
|
-
This Ruby-only source interface validates immutable authenticated descriptor bytes;
|
|
528
|
-
it does not establish installed network or native readiness and is not exposed
|
|
529
|
-
through worker transport or a CLI selector.
|
|
530
|
-
|
|
531
|
-
`LaunchLifecycle#with_execution_slots(mapping_ids:, candidate_deployment:)` holds
|
|
532
|
-
the same slot exclusions as normal admission while yielding frozen fixed
|
|
533
|
-
mapping/journal/commit contexts. Changed, added and removed mappings cannot be
|
|
534
|
-
omitted. Removed mappings retain their original journal selection; new mappings
|
|
535
|
-
use the staged selection. Existing mappings and physical slots cannot be recycled
|
|
536
|
-
to hide history. Ref changes, unreadable roots and conflicting aliases refuse.
|
|
537
|
-
|
|
538
|
-
Full `slot_reusable!` maintenance eligibility and parent retirement remain
|
|
539
|
-
unavailable until complete historical authentication and actual current inventory
|
|
540
|
-
verification are connected. The inventory block grants neither policy publication
|
|
541
|
-
nor positive maintenance readiness. Finish/stop wiring and installed acceptance
|
|
542
|
-
remain separate unfinished 9c2 requirements. Existing normal admission and guarded
|
|
543
|
-
abort/release behavior retain their current checks.
|
|
544
|
-
|
|
545
|
-
## Authenticated readiness and terminal scope closure
|
|
546
|
-
|
|
547
|
-
The source-owned fixed ExecStartPost readiness hook uploads one bounded report
|
|
548
|
-
through the authenticated authority connection, closes its write side and waits
|
|
549
|
-
for acknowledgement. The authority joins the exact manager-selected hook/server
|
|
550
|
-
actors, immutable runtime/configuration dependencies, original boot/network
|
|
551
|
-
proofs and complete live mount/IPC/resource observations before binding native
|
|
552
|
-
admission. The hook’s observed server network namespace must match both the original
|
|
553
|
-
parent selection and the canonical network installation admission. A missing,
|
|
554
|
-
malformed or different identity refuses native binding before child release.
|
|
555
|
-
Unknown writable projections, writable API descendants, changed
|
|
556
|
-
socket endpoints and incomplete evidence refuse. A read-only socket mount does
|
|
557
|
-
not authorize messages.
|
|
558
|
-
|
|
559
|
-
Original service issuance remains tracked while the manager command runs outside
|
|
560
|
-
the callback's exclusions. Sealing cannot publish an empty-scope proof while an
|
|
561
|
-
original issuer can still start the service. Admitted-but-unbound starts use the
|
|
562
|
-
same positive cleanup and worker baseline as bound starts; an inactive snapshot
|
|
563
|
-
does not assert that execution never happened.
|
|
564
|
-
|
|
565
|
-
After the genuine terminal owner accepts authenticated result evidence, the
|
|
566
|
-
existing release producer joins that receipt to the exact sealed empty scope.
|
|
567
|
-
Current activation, jobs, recursive population, original resource identities,
|
|
568
|
-
native directory absence and outside worker UID writers are checked again before
|
|
569
|
-
publishing or consuming the proof. Empty scope alone supplies no terminal result.
|
|
570
|
-
|
|
571
|
-
The required per-boot host proof is selected before parent activation and retained
|
|
572
|
-
in canonical `scope_bound.boot_baseline_selection`; later reads authenticate that
|
|
573
|
-
original immutable artifact rather than a current pointer. Domain gad.8/gad.b
|
|
574
|
-
still must deliver trusted cold-start/boot refresh and activation inhibition.
|
|
575
|
-
These source interfaces and controlled tests do not establish installed native,
|
|
576
|
-
network or boot acceptance, and task 9c2 remains in progress through integration
|
|
577
|
-
and independent review.
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
### Protected sealed-service no-effect settlement
|
|
581
|
-
|
|
582
|
-
For the fixed original executor, `service_status` includes a closed immutable `settlement_context` containing the authenticated original request, execution binding and accepted current challenge (or null). Full original mapping/project/receiver credentials are checked before this private context is exposed. Ordinary status roles retain their existing projection. Terminal status still authenticates the imported original receipt through the canonical reader.
|
|
583
|
-
|
|
584
|
-
The fixed original executor uses `claim_service_settlement` against the sealed original request. The authority records an acyclic challenge selecting the latest canonical uncertain/failed outcome. `complete_no_effect` uploads the exact original receipt and bounded inspection artifact through the existing private transfer. It authenticates the accepted challenge, original dispatch binding and imported artifact before atomically reaching `failed-settled`. Exact retries retain their first reply and do not invoke a new effect. A later genuine failure needs a fresh challenge; missing/orphan/stale challenges and changed input refuse.
|
|
585
|
-
|
|
586
|
-
This generic authority path attributes the closed inspection report to the recorded executor. Actual operation-specific target absence, handler termination and surviving-writer inspection are an open gad.b producer obligation; a closed scope or timeout does not prove no effect. The current protected ingress atomically accepts a request and executor claim, so an absent canonical request cannot be converted into a requested-but-unclaimed settlement record.
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
### Protected original worker submission
|
|
590
|
-
|
|
591
|
-
Run under the actual original prepared worker while its lineage is live. Read
|
|
592
|
-
`ace-assign authority status --mapping M --assignment A --attempt T` and save
|
|
593
|
-
`authority_generation` for the next new mutation. Candidate submission uses
|
|
594
|
-
current `result_candidate_generation` (zero if null), then returns the next
|
|
595
|
-
positive candidate generation. Review/result use that returned generation.
|
|
596
|
-
|
|
597
|
-
```sh
|
|
598
|
-
ace-assign submit-candidate --mapping M --assignment A --attempt T --head H \
|
|
599
|
-
--candidate-generation CURRENT --expected-generation G --mutation CANDIDATE --bundle candidate.bundle
|
|
600
|
-
ace-assign submit-result --mapping M --assignment A --attempt T --head H \
|
|
601
|
-
--candidate-generation ACCEPTED --expected-generation G --mutation RESULT --receipt result.json \
|
|
602
|
-
--artifact first-evidence --artifact second-evidence
|
|
603
|
-
```
|
|
210
|
+
> **L3 status:** `ace-coworker` starts from `.ace-local/coworker/`, drives
|
|
211
|
+
> the assignment through this gem's CLI, records results in the task folder,
|
|
212
|
+
> and reports through `ace-hitl`. Resume after interruption is the remaining
|
|
213
|
+
> L3 leaf.
|
|
214
|
+
>
|
|
215
|
+
> **Planned (L5.5):** role rules, independent review rounds, and forge
|
|
216
|
+
> delivery workflow -- not available yet.
|
|
604
217
|
|
|
605
|
-
The
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
receipts require evidence. Captured queue completion does not create a receipt or
|
|
609
|
-
canonical acceptance. Independent installed reviewers use the existing
|
|
610
|
-
`ace-overseer review` consumer for that exact candidate. Result submission obtains
|
|
611
|
-
a new generation after review; exact retries retain the original generation,
|
|
612
|
-
mutation and identical ordered bytes. Supervisor finish still revalidates result,
|
|
613
|
-
review, writer exclusion and settlement. A lost reply never causes automatic resend.
|
|
218
|
+
The old protected/attempt-evidence and installation paths are removed from the
|
|
219
|
+
local flow. No journal, admission service, or second queue is required to
|
|
220
|
+
create, read, or drive an assignment.
|