axstack 0.55.0 → 0.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/concepts.md +3 -1
- package/docs/installation.md +5 -2
- package/docs/workflows.md +3 -1
- package/package.json +1 -1
- package/skills/axstack/references/fleet-dispatch.md +166 -0
- package/skills/axstack/references/fleet-route-schema.md +11 -0
- package/skills/axstack/references/fleet-verification.md +102 -0
- package/skills/axstack/references/lifecycle.md +19 -2
- package/skills/axstack/references/role-roster.md +6 -0
- package/skills/axstack/references/routing.md +12 -0
- package/skills/axstack/references/run-record.md +83 -0
- package/skills/axstack/references/t3-runtime.md +173 -6
- package/skills/axstack/references/workspace-hygiene.md +8 -0
- package/skills/axstack/scripts/dispatch-plan.js +19 -2
- package/skills/axstack/scripts/fleet-destination.js +39 -0
- package/skills/axstack/scripts/fleet-dispatch.js +6 -0
- package/skills/axstack/scripts/fleet-facts.js +12 -1
- package/skills/axstack/scripts/fleet-inventory.js +76 -0
- package/skills/axstack/scripts/fleet-receipt.js +130 -0
- package/skills/axstack/scripts/fleet-route.js +4 -3
- package/skills/axstack-cleanup/SKILL.md +21 -0
- package/skills/axstack-implement/SKILL.md +12 -5
- package/skills/axstack-watch/SKILL.md +3 -0
- package/skills/axstack-watch/references/watch-runtime.md +18 -5
- package/skills/voa/SKILL.md +96 -0
- package/skills/voa/references/observations.md +79 -0
- package/skills/voa/references/recovery.md +94 -0
- package/skills/voa/references/verification.md +35 -0
- package/skills/voa/scripts/cleanup.js +39 -0
- package/skills/voa/scripts/evaluate.js +122 -0
- package/skills/voa/scripts/observations.js +68 -0
- package/skills/voa/scripts/records.js +48 -0
- package/skills/voa/scripts/voa.js +43 -0
- package/src/installer.js +3 -2
- package/src/instructions.js +11 -3
package/docs/concepts.md
CHANGED
|
@@ -59,7 +59,9 @@ do not belong in it.
|
|
|
59
59
|
|
|
60
60
|
Delegation uses the `t3-code` MCP. Use async `delegate_task` for every role, including authors with
|
|
61
61
|
`isolation:"worktree"` in their own SHA-pinned worktrees.
|
|
62
|
-
|
|
62
|
+
Every top-level launch, including an author fallback, requires an explicit user request.
|
|
63
|
+
Top-level drivers use `t3_thread_launch` only after an explicit user request.
|
|
64
|
+
Preserve existing accepted authorization within its exact scope.
|
|
63
65
|
Use `t3_thread_launch` as a rare author fallback only when
|
|
64
66
|
worktree isolation is unavailable and record each use in the run record. Configuration read-back,
|
|
65
67
|
run receipts and revision-bound completion are separate from capability
|
package/docs/installation.md
CHANGED
|
@@ -215,10 +215,13 @@ also routes every subagent, delegated worker, reviewer, and cross-harness dispat
|
|
|
215
215
|
through the `t3-code` MCP. It forbids harness-native subagent tools. The current
|
|
216
216
|
T3 thread is the driver. Use async `delegate_task` for every role, including authors with
|
|
217
217
|
`isolation:"worktree"` in their own SHA-pinned worktrees.
|
|
218
|
-
|
|
218
|
+
Every top-level launch, including an author fallback, requires an explicit user request.
|
|
219
|
+
Top-level drivers use `t3_thread_launch` only after an explicit user request.
|
|
220
|
+
Preserve existing accepted authorization within its exact scope.
|
|
219
221
|
Use `t3_thread_launch` as a rare author fallback only when
|
|
220
222
|
worktree isolation is unavailable and record each use in the run record. The standing block
|
|
221
|
-
authorizes
|
|
223
|
+
authorizes delegated writers and worktrees within approved scope;
|
|
224
|
+
it grants no blanket top-level launch permission;
|
|
222
225
|
it grants no push, merge, release, or host mutation.
|
|
223
226
|
The [runtime reference](../skills/axstack/references/t3-runtime.md) owns the dispatch
|
|
224
227
|
and receipt protocol.
|
package/docs/workflows.md
CHANGED
|
@@ -201,7 +201,9 @@ All subagent, delegated-worker, reviewer, and cross-harness work uses T3
|
|
|
201
201
|
orchestration through the `t3-code` MCP. Do not use harness-native subagent
|
|
202
202
|
tools. Use async `delegate_task` for every role, including authors with
|
|
203
203
|
`isolation:"worktree"` in their own SHA-pinned worktrees.
|
|
204
|
-
|
|
204
|
+
Every top-level launch, including an author fallback, requires an explicit user request.
|
|
205
|
+
Top-level drivers use `t3_thread_launch` only after an explicit user request.
|
|
206
|
+
Preserve existing accepted authorization within its exact scope.
|
|
205
207
|
Use `t3_thread_launch` as a rare author fallback only when
|
|
206
208
|
worktree isolation is unavailable and record each use in the run record.
|
|
207
209
|
Reviewers and investigators receive driver-made disposable detached checkouts pinned to candidate
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "axstack",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.56.0",
|
|
4
4
|
"description": "Axstack installer and setup CLI: installs owned chat skills and role data, configures supported harness settings, and checks T3 Code capabilities.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Fleet nonwriter dispatch and receipts (C3a)
|
|
2
|
+
|
|
3
|
+
This contract joins C1 recommendation and C2 sampling to native T3 execution.
|
|
4
|
+
It does not deploy a routing switch. Read [T3 runtime](t3-runtime.md) and the
|
|
5
|
+
[selector schema](fleet-route-schema.md). The driver owns all native calls,
|
|
6
|
+
records and forge actions. Helpers validate explicit saved inputs only: no
|
|
7
|
+
network, clock, dispatch, retry, merge, retained state or aggregate permission grant.
|
|
8
|
+
Synthetic evidence can pass binding checks; helpers cannot authenticate it.
|
|
9
|
+
|
|
10
|
+
## Observe before selecting
|
|
11
|
+
|
|
12
|
+
1. Record installed Axstack and both T3 versions, directed origin/target link,
|
|
13
|
+
explicit time, exact reviewed config bytes/digest and installed role snapshot.
|
|
14
|
+
Map each environmentId to its configured hostId. Hosts, environments, projects,
|
|
15
|
+
threads and paths are distinct namespaces. Never reuse origin project/thread IDs
|
|
16
|
+
or filesystem paths on a destination by assumption.
|
|
17
|
+
2. On origin call `t3_environment_links`; preserve raw output and expiry/access.
|
|
18
|
+
On each eligible destination use forwarded `t3_environment_read`,
|
|
19
|
+
`t3_project_list` (all pages), `t3_project_read` for the actual project and
|
|
20
|
+
`orchestrator_capabilities({environmentId})`. Preserve exact catalog bytes and
|
|
21
|
+
SHA-256. Observe repository identity/workspaceRoot and actual required session
|
|
22
|
+
access there. Authentication occurs on that session host; copy no credentials.
|
|
23
|
+
Discovery is not proof that the provider executes. Unknown catalog, project,
|
|
24
|
+
mode, options, access, link or required session excludes that destination.
|
|
25
|
+
3. Keep the model/effort/provider pins from the run; do not re-resolve to another
|
|
26
|
+
model when quota/auth/timeout fails. Missing native `t3_thread_configuration`
|
|
27
|
+
means unavailable effective fields stay unknown. Catalog runtimeModes advertise
|
|
28
|
+
support; they do not prove effective access. Native task/thread facts supply
|
|
29
|
+
only the fields actually returned. A worker assertion is not native readback.
|
|
30
|
+
4. Normalize current driver assignments and the pending batch as below. Sample
|
|
31
|
+
telemetry with C2's bounded command, then recompute C1 immediately before each
|
|
32
|
+
dispatch using the collector time and current exclusions. Preserve the full
|
|
33
|
+
recommendation JSON bytes and complete replayable input. Unknown inventory
|
|
34
|
+
is unknown, not a claimed zero; pending lower bounds are labelled separately.
|
|
35
|
+
|
|
36
|
+
### Saved native inventory
|
|
37
|
+
|
|
38
|
+
Set optional selector input `nativeInventory` to
|
|
39
|
+
`{complete, observedAt, evidence, tasks, pending}`. With this field, it is the
|
|
40
|
+
inventory source; legacy normalized arrays remain for non-fleet callers.
|
|
41
|
+
`complete:true` requires the driver's complete current assignment collection,
|
|
42
|
+
including unsettled attempts, descendants and pending submissions. API failures,
|
|
43
|
+
pagination gaps, missing ownership or unreconciled launches set complete false.
|
|
44
|
+
The helper cannot independently prove that a caller collected every task.
|
|
45
|
+
|
|
46
|
+
Each tasks entry is `{origin:{environmentId,threadId}, clientRequestId, task,
|
|
47
|
+
assignmentRoot?}`. `task` is saved native task_status, with its actual taskId.
|
|
48
|
+
For remote tasks use remoteChild.environmentId/threadId even if childThreadId
|
|
49
|
+
is null. For local tasks require a nonempty childThreadId before using origin's
|
|
50
|
+
environment. Native childRunId is an initial observation, not a final-run pin.
|
|
51
|
+
Origin-qualified JSON tuple task identities avoid cross-host ID collisions.
|
|
52
|
+
Do not count an unrelated thread just because its ID matches on another host.
|
|
53
|
+
|
|
54
|
+
A nested entry can name `assignmentRoot:{environmentId,taskId}` for its observed
|
|
55
|
+
coordinator task. Both must exist on the same destination; unresolved/conflicting
|
|
56
|
+
roots remain unknown. One assignment counts once while any member is active.
|
|
57
|
+
This normalization supports evidence reconciliation; it does not enable authors.
|
|
58
|
+
Pending entries are `{origin:{environmentId,threadId},clientRequestId,environmentId,
|
|
59
|
+
taskId?}`. Update a pending entry with its returned taskId; accepted/nested/terminal
|
|
60
|
+
reflections count once. Ambiguous submissions remain pending until reconciled;
|
|
61
|
+
remove only confirmed not-submitted failures. Client identity includes the driver
|
|
62
|
+
thread, not just its host. Unknown native inventory emits null totals and explicit
|
|
63
|
+
pendingLowerBound/reasons/evidence. Balance ranking uses that pending lower bound
|
|
64
|
+
while reported totals remain null. Legacy C1 fixtures and 20/35/40 spread remain.
|
|
65
|
+
|
|
66
|
+
## Bind and submit once
|
|
67
|
+
|
|
68
|
+
For live use supply `input.nativeDestination` before dispatch-plan binding. Each
|
|
69
|
+
read envelope is `{tool,environmentId,args,observedAt,evidence,value}` where args
|
|
70
|
+
excludes the forwarding environmentId, and evidence points to the preserved raw
|
|
71
|
+
native call/result. environment/project/capabilities are read on the selected
|
|
72
|
+
host; links are read on origin. The capabilities envelope uses `valueText` for
|
|
73
|
+
exact raw catalog bytes instead of value. Project repositoryIdentity.canonicalKey
|
|
74
|
+
must match the requested repositoryId. Unknown mappings hold rather than guessing.
|
|
75
|
+
The pure `inspectDestination` API returns per-term pass/fail/unknown with evidence;
|
|
76
|
+
`dispatch-plan` holds on a failed/unknown term. This is supplied binding proof only.
|
|
77
|
+
|
|
78
|
+
Run existing dispatch-plan with the selected destination catalog, complete input,
|
|
79
|
+
recommendation, explicit evaluation time and config pin. Compare its target to the
|
|
80
|
+
independently selected host/environment/project/model/options/runtimeMode. Copy only
|
|
81
|
+
native supported fields, never inputs or fleetBinding. Call `delegate_task` with
|
|
82
|
+
that exact target, full-access, a role-labelled title, stable clientRequestId and
|
|
83
|
+
scope. Reviewers require native isolation:"worktree" and pinned candidate/base;
|
|
84
|
+
no shell-created child checkout. Other nonwriters write only their named private
|
|
85
|
+
evidence directory on that host. Preserve requested arguments and native response.
|
|
86
|
+
|
|
87
|
+
Record taskId on the origin plus remoteChild.environmentId/threadId. The native
|
|
88
|
+
remoteChild schema need not return runId: normalize it from observed task/thread
|
|
89
|
+
run facts, preserving the native raw response separately. Do not invent it.
|
|
90
|
+
Never top-level launch unless the user explicitly requested a new thread.
|
|
91
|
+
No agent execution through SSH; T3 forwarding is the only remote execution route.
|
|
92
|
+
Unknown submission/liveness blocks replacement. Reconcile the exact attempt and
|
|
93
|
+
clientRequestId against the native remote task before retrying; do not launch a
|
|
94
|
+
second task to test absence. Follow native next instructions, without polling.
|
|
95
|
+
Confirmed pre-submission rejection may exclude a route and trigger a new current
|
|
96
|
+
recommendation at the same model/permission pins; record the exclusion evidence.
|
|
97
|
+
|
|
98
|
+
## Terminal receipt
|
|
99
|
+
|
|
100
|
+
Preserve schemaVersion:1, recommendationJSON (exact bytes), configDigest,
|
|
101
|
+
attempt (key, exact title, clientRequestId, origin environmentId/threadId/taskId,
|
|
102
|
+
candidate/base SHAs), requested target/runtimeMode/isolation and native submission.
|
|
103
|
+
The driver's independent fleetAttempt is the expected run-record identity;
|
|
104
|
+
never copy it from an arriving receipt to make a comparison pass.
|
|
105
|
+
|
|
106
|
+
After native completion wakes origin, read task_status there first. Read actual
|
|
107
|
+
destination thread and terminal run with forwarded t3_thread_read/t3_thread_wait,
|
|
108
|
+
then `t3_pending_request` action list for that same thread. Save envelopes status,
|
|
109
|
+
thread, terminal and questions using the read format above. Preserve raw native
|
|
110
|
+
question output; questions.value.requests is a normalized list extracted from that
|
|
111
|
+
observed response, not an invented API schema. If extraction is uncertain, omit
|
|
112
|
+
it and keep unknown. The native tool currently advertises an opaque result shape.
|
|
113
|
+
|
|
114
|
+
Normalize remoteChild:{environmentId,threadId,runId} to the current destination run.
|
|
115
|
+
Task latestTerminalRunId, thread latestRunId/recentRuns ordinal, terminal runId
|
|
116
|
+
(and resultRun when present) and final destination message must identify that
|
|
117
|
+
same current completed run. Provider continuation may have a different run from
|
|
118
|
+
submission.childRunId; never use lexical ordering of IDs or the original summary.
|
|
119
|
+
Require completed/result_available/no pending children/no unanswered questions or
|
|
120
|
+
approval. Require exactly one AXSTACK-DONE key/candidate/report marker on both origin's
|
|
121
|
+
latestTerminalSummary and the destination's final current-run agent message.
|
|
122
|
+
A completion marker may be followed by the T3
|
|
123
|
+
`PR <url>, head <sha>, checks and reviews <state>` trailer. Other trailing text
|
|
124
|
+
or additional AXSTACK markers keep the receipt held.
|
|
125
|
+
Old summary, null local child, idle, silence and completed turns with live children
|
|
126
|
+
remain incomplete. Failed/cancelled/interrupted/waiting never succeed.
|
|
127
|
+
|
|
128
|
+
Evidence is `{hostId,environmentId,path}` with an absolute destination path.
|
|
129
|
+
For isolated review include checkout with those fields, candidate/base and readback:
|
|
130
|
+
`{hostId,environmentId,path,candidate,base,evidence}` from exact-SHA checks there.
|
|
131
|
+
Never infer local file existence from a remote absolute path.
|
|
132
|
+
Requested settings remain separate from effective native status.providerInstanceId,
|
|
133
|
+
model/options and thread.providerInstanceId/model/runtimeMode. Missing effective
|
|
134
|
+
options or mode is unknown and holds required verification.
|
|
135
|
+
|
|
136
|
+
`inspectFleetReceipt(receipt,{attempt,recommendation,recommendationJSON,now})`
|
|
137
|
+
returns terms, never authority. Existing dispatch-plan --verify can additionally
|
|
138
|
+
consume fleetAttempt/fleetReceipt in its saved envelope; save --out to retain
|
|
139
|
+
full receiptTerms. Legacy configuration-only MATCH checks supplied configuration,
|
|
140
|
+
not native completion. Stable receipt-* / destination-* terms identify the exact
|
|
141
|
+
hold and evidence; unknown means incomplete. A passing receipt is no merge grant.
|
|
142
|
+
|
|
143
|
+
## Retrieval and retirement
|
|
144
|
+
|
|
145
|
+
The driver retrieves the exact host-qualified report/artifacts and verifies digest
|
|
146
|
+
and byte readback on origin before accepting them. For a reviewer, verify candidate
|
|
147
|
+
HEAD and pinned base commit on the destination, then verify transported commit IDs
|
|
148
|
+
on origin if commits are needed. SSH may transport artifacts/commits or telemetry;
|
|
149
|
+
it never invokes agents or bypasses T3 access. Keep origin and destination paths
|
|
150
|
+
separately qualified in the run record; verify exact SHA/base, not branch names.
|
|
151
|
+
|
|
152
|
+
Remote reviewer retirement is driver-only through axstack-cleanup: re-read the
|
|
153
|
+
exact destination thread/run/ownership, preserve archive plus digest on origin,
|
|
154
|
+
read it back, settle the owned child there and verify settled:true. Retire only
|
|
155
|
+
its recorded T3-created disposable checkout after candidate/base, terminal state
|
|
156
|
+
and ownership checks. Unknown liveness, changed SHA, user takeover or uncertain
|
|
157
|
+
ownership preserves the resource and holds its cleanup. Validate exact literal
|
|
158
|
+
path/realpath/owner/no symlink before deletion; validation must succeed in a
|
|
159
|
+
separate sequential call before deletion. Preserve unknown ignored artifacts.
|
|
160
|
+
Never delete a shared root, use globs/age sweeps or treat an origin path as remote.
|
|
161
|
+
Authors stay until merge/close; driver alone owns forge links/watch/publication.
|
|
162
|
+
|
|
163
|
+
Remote author coordinator is DISABLED after the checkpoint-ref pilot failure;
|
|
164
|
+
no C3b pilot or waiver here. Local isolated authors remain eligible even overloaded.
|
|
165
|
+
See [Fleet verification](fleet-verification.md) for later authorized C3/C6 live
|
|
166
|
+
coverage. C4/C6 personal policy, deployment and live routing are unverified here.
|
|
@@ -161,6 +161,17 @@ reconciled. An unknown inventory contributes no stale counts; known pending
|
|
|
161
161
|
records still count. Counts report inventory status/time and pending provenance.
|
|
162
162
|
These are observations, never reservations or predicted resource costs.
|
|
163
163
|
|
|
164
|
+
### Native inventory and live evidence (C3a)
|
|
165
|
+
|
|
166
|
+
Optional `nativeInventory` is normalized before counts under
|
|
167
|
+
[Fleet dispatch and receipts](fleet-dispatch.md#saved-native-inventory).
|
|
168
|
+
Unknown native totals are null; balance ranking uses the separately labelled
|
|
169
|
+
pendingLowerBound. Counts also retain inventoryReasons/evidence; flags.countsUnknown follows normalized status.
|
|
170
|
+
Optional `nativeDestination` carries observed native forwarded preflight reads.
|
|
171
|
+
The same reference defines terminal receipt validation and its supplied-evidence
|
|
172
|
+
limitation. Live drivers require these observed facts, not synthetic caller claims.
|
|
173
|
+
Legacy normalized input remains unchanged. Remote coordinator remains disabled.
|
|
174
|
+
|
|
164
175
|
## Bounded collection (C2)
|
|
165
176
|
|
|
166
177
|
Collect with the installed helper (no bin/axstack.js subcommand):
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Bounded live fleet verification (later C3/C6)
|
|
2
|
+
|
|
3
|
+
Run only under the driver's recorded live/host authority. C3a ships this procedure;
|
|
4
|
+
it does not execute it or enable routing. Offline fixtures and source inspection
|
|
5
|
+
cannot establish live eligibility. Use [Fleet dispatch](fleet-dispatch.md) for
|
|
6
|
+
receipt fields, [T3 runtime](t3-runtime.md) for native lifecycle, and the repository
|
|
7
|
+
verify-axstack recipe for separate offline coverage. Never mix live credentials or
|
|
8
|
+
network into that isolated recipe.
|
|
9
|
+
|
|
10
|
+
## Prepare one owned attempt
|
|
11
|
+
|
|
12
|
+
Record run key, origin T3 thread link, operator, allowed origin/targets, role/model/
|
|
13
|
+
options/full-access, repository/project identities, exact candidate/base, explicit
|
|
14
|
+
start/end times and a maximum of one harmless nonwriter per distinct route config.
|
|
15
|
+
No overload stress, installation, global policy edits, raw provider CLI or production
|
|
16
|
+
writes belong to this procedure. Exclude any unverified route from enabled coverage.
|
|
17
|
+
No top-level thread without an explicit new-thread request.
|
|
18
|
+
|
|
19
|
+
Create a fresh 0700 scratch outside HOME on each participating host; record each
|
|
20
|
+
literal path with hostId/environmentId. Before use validate owner, realpath and
|
|
21
|
+
no symlink. Use a separately owned persistent evidence folder on origin and target,
|
|
22
|
+
outside scratch selected for deletion. Put only a tiny fixture README/candidate in
|
|
23
|
+
an explicitly provisioned test project. Record its root HEAD/status/all refs before
|
|
24
|
+
and after; no shared project or unknown ignored artifacts may be cleaned.
|
|
25
|
+
Use native T3 worktree isolation for candidate reviewers; no shell child checkouts.
|
|
26
|
+
|
|
27
|
+
Save a coverage row for every directed origin→target and materially distinct
|
|
28
|
+
provider/model/options/runtimeMode/project/isolation/browser/session configuration.
|
|
29
|
+
Record both endpoint T3/Axstack versions, exact installed skill hashes, config
|
|
30
|
+
schema/digest, native-balancer client setting and link expiry. Reuse evidence only
|
|
31
|
+
with a recorded equivalence argument; direction/version/project/session differences
|
|
32
|
+
require their own check. Do not expose credentials in this matrix.
|
|
33
|
+
|
|
34
|
+
## Actions, expected results and evidence
|
|
35
|
+
|
|
36
|
+
| Owned fixture / bounded action | Expected observation and retained evidence | Cleanup / failure disposition |
|
|
37
|
+
| --- | --- | --- |
|
|
38
|
+
| Native discovery, once per directed link/config | Save t3_environment_links on origin; forwarded environment/project/catalog reads on target, raw bytes/digests/time/expiry/access. Native project repository identity and selected env/project/model/options match independent expected values. Required session is authenticated on target. Missing effective fields stay UNKNOWN. | No link/settings mutation to make a check pass. Expired/unreachable/access/model gaps exclude the route. |
|
|
39
|
+
| One bounded telemetry batch per origin | C2 sample with explicit configured host↔environment manifest, interval 5000ms, timeout 10000ms. Save raw JSON, collector start/end and source/whole-host/duration/age. Directed telemetry origin×target matrix covers all configured hosts. A failed host is UNKNOWN, never fabricated zero. | Collector exits/reaps only owned processes. No daemon/timer or real overload. |
|
|
40
|
+
| Inventory + pending fixture batch | Save origin task identities, actual remoteChild and current descendants, complete collection provenance and pending clientRequestIds. Replay C1 with exact config/time. Observe 20/35/40 fixture oracle and harmless sequential dispatch spread without claiming reservations. | Reconcile ambiguous submissions in place; unknown inventory remains unknown. Never duplicate a task because a response was lost. |
|
|
41
|
+
| One read-only remote nonwriter | Build destination-bound plan from the actual target catalog, independently compare expected env/project/model/options/mode, then delegate_task with exact target and stable key/clientRequestId. Task writes only its named target evidence report with pinned candidate marker. Save requested arguments, submission and origin task_status. | Follow native next; no polling, SSH agent, permission/model substitution or top-level fallback. Driver owns native task cancellation if this exact owned attempt must stop. |
|
|
42
|
+
| Current terminal receipt | On completion wake, read origin task_status and target thread/current terminal run plus native pending-question list. Require completed/result_available/no children/questions/approval and exact final marker/run. Save latestTerminalRunId, thread latestRunId/ordinals, native terminal result and host-qualified evidence. If a provider continuation occurs, record the newer current run; old original summary is insufficient. | Unknown liveness or incomplete native read holds. No replacement until exact old attempt is reconciled. Failed/cancelled/waiting outcomes never become successes. |
|
|
43
|
+
| Target reviewer worktree (only when authorized/enabled) | Native isolation worktreePath differs from target project root. Verify exact candidate and base objects there, preserve host/path ownership and report digest; origin transport/readback matches exact SHA/base and bytes. Driver root HEAD/status remains unchanged. | Archive/read back evidence on origin, settle/read back owned child on actual target, then retire only its exact T3-created disposable checkout through cleanup ownership guards. |
|
|
44
|
+
| Required browser mode | For configurations requiring a browser, drive the harmless fixture in the requested headed/headless mode using the configured browser MCP; save actual mode/interaction evidence. | Close only the session/page created by this attempt. No mode equivalence inferred from catalog flags. |
|
|
45
|
+
| Helper failure + fallback fixture | An owned missing/malformed telemetry input produces UNKNOWN; no executable remote route falls back to a locally isolated author at the same pins, even when overloaded. Save recommendation→explicit destination→receipt trace. | No new helper state, automatic retry, model change or authority grant. |
|
|
46
|
+
| C6 installation/config parity and one rollback rehearsal | Under separately recorded deployment authority, all five hosts have identical reviewed config digest/schema and intended CLI/skill/global-source revisions. Roll back only one explicitly owned target, read back exact prior bytes/revision, then restore intended revision and verify. | Keep prior bytes private, never copy credentials. A partial host matrix remains incomplete C6. C3a changes none of these hosts. |
|
|
47
|
+
| iosatellite unattended claim | Before claiming closed-lid/unattended eligibility, verify a real closed-lid job, SSH and T3 operation under its actual configured AC/lid policy and retain logs. | Without that proof, label unattended UNKNOWN; attended reachable operation remains a separate eligible configuration. |
|
|
48
|
+
|
|
49
|
+
Suggested harmless nonwriter brief: name its key, target-only private evidence
|
|
50
|
+
path, pinned candidate/base, read-only fixture question and exact final
|
|
51
|
+
AXSTACK-DONE marker; forbid tracked/untracked project writes, children, forge,
|
|
52
|
+
install/config edits and html_render. No worktree author or coordinator is part
|
|
53
|
+
of the nonwriter check. Save the observed dispatch response rather than a worker's
|
|
54
|
+
claim about how it was launched.
|
|
55
|
+
|
|
56
|
+
For terminal negative controls use offline saved copies with one changed fact
|
|
57
|
+
(stale run, question, pending child, wrong env/project/settings/path). Do not create
|
|
58
|
+
real denied prompts, disconnected workers or orphaned production tasks just to
|
|
59
|
+
exercise a guard. Live submission ambiguity, cancellation, provider continuation
|
|
60
|
+
and question handling remain separate UNKNOWN rows unless actually observed in
|
|
61
|
+
an authorized owned context. Never infer their success from an offline negative.
|
|
62
|
+
|
|
63
|
+
## Remote authors stay disabled
|
|
64
|
+
|
|
65
|
+
C3b's all-refs-unchanged pilot failed on T3 checkpoint refs. Do not rerun, waive
|
|
66
|
+
or enable that coordinator in C3a/C6 nonwriter verification. Direct remote worktree
|
|
67
|
+
authors are ineligible on T3 v0.1.5. Local isolated authors remain the fallback.
|
|
68
|
+
Any future separately authorized C3b investigation must prove every F4 gate in the
|
|
69
|
+
approved baseline: target local isolation and exact base, nested completion,
|
|
70
|
+
same-author repair/new-run origin wake, question/answer/resume, approval boundary,
|
|
71
|
+
cancellation/failure/orphan propagation including owned disconnected cases,
|
|
72
|
+
unchanged root HEAD/status/all refs, exact retrieval and owned retirement. Record
|
|
73
|
+
all nested IDs and both versions. Unknown stop forbids replacement. No production
|
|
74
|
+
enablement without all gates and accepted scope; no silent all-refs exception.
|
|
75
|
+
|
|
76
|
+
## Cleanup and receipt
|
|
77
|
+
|
|
78
|
+
For each owned remote reviewer, read exact target thread/run/ownership again.
|
|
79
|
+
Archive evidence on origin, verify its digest and read it back, then settle on
|
|
80
|
+
target and verify settled:true before removing that recorded disposable checkout.
|
|
81
|
+
Retain user-taken-over, changed, active, unknown or ambiguously owned resources.
|
|
82
|
+
Driver alone owns forge publication, PR links/watch and merges. No worker watches.
|
|
83
|
+
|
|
84
|
+
For each scratch path, validation must succeed first: exact created literal path,
|
|
85
|
+
no symlink, realpath equality, current ownership and 0700 mode. Finish validation
|
|
86
|
+
successfully, then perform deletion in a separate sequential call on that same
|
|
87
|
+
host/path. Never parallel validation/deletion, ignore failures, glob shared paths,
|
|
88
|
+
clean by age or delete unknown ignored artifacts. Confirm scratch absence and
|
|
89
|
+
persistent evidence survival; record retained resources with a named hold.
|
|
90
|
+
|
|
91
|
+
Return rows as PASS/FAIL/UNKNOWN/N/A with command/native-call evidence and exact
|
|
92
|
+
versions/config/candidate hashes. Summaries are counts only, never aggregate
|
|
93
|
+
permission. List every omitted config/host/gate and its owning phase. C4 owns
|
|
94
|
+
personal routing policy/Haoshoku live changes; C6 owns deployment and the complete
|
|
95
|
+
live matrix. Nothing here declares a deployed routing switch.
|
|
96
|
+
|
|
97
|
+
Rerun affected rows after routing/helper/receipt releases, either endpoint's T3
|
|
98
|
+
version change, link replacement/expiry/access change, project/provider/model/
|
|
99
|
+
options/runtimeMode/session/browser change, config digest or policy change, and
|
|
100
|
+
before C6 acceptance. A failed bounded attempt retains evidence; reconcile and
|
|
101
|
+
repair within authority before one new explicit attempt. Never create a scheduler,
|
|
102
|
+
state machine or recurring task to make verification run itself.
|
|
@@ -4,6 +4,8 @@ Phases load through [Standing contracts](contracts.md).
|
|
|
4
4
|
Driver settlement follows [Workspace hygiene](workspace-hygiene.md).
|
|
5
5
|
Delegated or resumable work uses a driver-owned [Run record](run-record.md)
|
|
6
6
|
binding state and receipts to exact revisions.
|
|
7
|
+
For a logical Coordinator coordinating project drivers, follow
|
|
8
|
+
[Coordinating multiple drivers](t3-runtime.md#coordinating-multiple-drivers).
|
|
7
9
|
|
|
8
10
|
## Roster (compact)
|
|
9
11
|
|
|
@@ -80,10 +82,14 @@ Store receipt references, not raw output, in the [Run record](run-record.md).
|
|
|
80
82
|
- Audit receipt: scope, evidenced PASS/FAIL/UNKNOWN counts/denominators and
|
|
81
83
|
proposals. Only an authorized sanitized summary publishes.
|
|
82
84
|
|
|
85
|
+
Before ending a waiting turn or closing its condition, follow
|
|
86
|
+
[Waiting-turn and closing records](run-record.md#waiting-turn-and-closing-records).
|
|
87
|
+
|
|
83
88
|
## Execution tracking
|
|
84
89
|
|
|
85
90
|
Follow [T3 runtime](t3-runtime.md) for native completion, questions, launch
|
|
86
|
-
recovery and run-watch waits.
|
|
91
|
+
recovery and run-watch waits. Never status-check running delegate_task children on scheduled wakes.
|
|
92
|
+
Delegated notifications wake the driver; a launched
|
|
87
93
|
writer sends its marker with `t3_thread_send` using `mode: queue` to the recorded driver thread.
|
|
88
94
|
Delegated completion requires persisted `task_status` before `t3_thread_read`, terminal `completed`, `result_available`, `hasPendingChildRuns:false`, and final `AXSTACK-DONE`.
|
|
89
95
|
Delegated author completion requires delegated terminal checks plus candidate checks: non-empty diff, clean tree and named red/green logs.
|
|
@@ -120,7 +126,7 @@ ready. An unreachable predecessor holds. Update one `Next:` line on each
|
|
|
120
126
|
transition with owner, last receipt time, next action and hold; reconcile it for
|
|
121
127
|
status questions. Stale receipts remain evidence only.
|
|
122
128
|
|
|
123
|
-
End a driver turn with an unsettled launched thread only while the bound run watch is armed; each wake reconciles
|
|
129
|
+
End a driver turn with an unsettled launched thread only while the bound run watch is armed; each wake reconciles unsettled launched-fallback Writer runs.
|
|
124
130
|
Use terminal `t3_thread_wait` and the recorded watch as the runtime contract
|
|
125
131
|
requires, re-arming waits on timeout; sleep or poll loops are forbidden. Delete the watch by exact ID and
|
|
126
132
|
verify absence once nothing remains unsettled. After each delegated completion,
|
|
@@ -136,6 +142,17 @@ After accepting task or run completion, the driver invokes
|
|
|
136
142
|
Axstack creates no heartbeat or substitute scheduler.
|
|
137
143
|
Tracking grants no merge, release, model-substitution, or scope authority.
|
|
138
144
|
|
|
145
|
+
## Host-qualified fleet receipts
|
|
146
|
+
|
|
147
|
+
Fleet nonwriters use [Fleet dispatch and receipts](fleet-dispatch.md) in addition
|
|
148
|
+
to the local lifecycle. Origin taskId and destination environment/thread/current
|
|
149
|
+
run are separate identities; remote local-child IDs may be null. Keep exact
|
|
150
|
+
recommendation/config/catalog evidence, requested/effective settings and qualified
|
|
151
|
+
artifact/checkout paths. Read task_status on origin and terminal/question facts
|
|
152
|
+
on destination before advancement. Current completed/result_available with no
|
|
153
|
+
children/questions and an exact final marker is required; an old summary cannot
|
|
154
|
+
complete a provider continuation. Driver-only forge/cleanup ownership is unchanged.
|
|
155
|
+
|
|
139
156
|
## Deadline (one rule for every owned timer)
|
|
140
157
|
|
|
141
158
|
The default 24-hour deadline covers standalone task-owned timers. Stop them at
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Role roster
|
|
2
2
|
|
|
3
|
+
Fleet nonwriter placement follows [Fleet dispatch and receipts](fleet-dispatch.md).
|
|
4
|
+
Roles retain exact configured provider/model/options/full-access on the selected
|
|
5
|
+
native destination. Remote reviewers require T3 worktree isolation; no shell child
|
|
6
|
+
checkout. Host names confer no role or permission. Remote authors/coordinator stay
|
|
7
|
+
disabled; local isolated authors remain supported even overloaded.
|
|
8
|
+
|
|
3
9
|
- Chat drives (no role ID); `axstack-owner` owns one PR and
|
|
4
10
|
`axstack-author` its sole writer.
|
|
5
11
|
For own PRs, automatic merge is the default under the
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Choose a route; load only the phase and references needed next.
|
|
4
4
|
Driver entry sweep follows [Workspace hygiene](workspace-hygiene.md).
|
|
5
|
+
For work spanning project drivers, follow
|
|
6
|
+
[Coordinating multiple drivers](t3-runtime.md#coordinating-multiple-drivers).
|
|
5
7
|
|
|
6
8
|
## Role routing
|
|
7
9
|
|
|
@@ -57,6 +59,16 @@ infer from slot, driver, owner, or provider. Author and owner never review.
|
|
|
57
59
|
`axstack-implement` requires `mixed`; single-provider presets hold at
|
|
58
60
|
step (3) for user routing: no substitution or same-provider review.
|
|
59
61
|
|
|
62
|
+
## Fleet destinations (C3a)
|
|
63
|
+
|
|
64
|
+
For fleet nonwriters, follow [Fleet dispatch and receipts](fleet-dispatch.md):
|
|
65
|
+
C2 sampling and current native assignment inventory feed C1; the driver explicitly
|
|
66
|
+
binds the selected environment/project/settings to native T3 delegation and reads
|
|
67
|
+
terminal facts on the actual destination. Origin catalogs, SSH agent commands and
|
|
68
|
+
legacy worker/control-center host labels grant no execution route. Any configured
|
|
69
|
+
host may originate or receive proven nonwriter work; personal policy/deployment
|
|
70
|
+
changes remain C4/C6. Remote authors stay disabled; keep local isolated fallback.
|
|
71
|
+
|
|
60
72
|
## Direct routes (no spec ceremony)
|
|
61
73
|
|
|
62
74
|
- Route requests to create or maintain a verification skill to `axstack-verify`.
|
|
@@ -4,6 +4,8 @@ One compact Markdown `progress.md` is required for substantive delegated or
|
|
|
4
4
|
resumable work. One-step direct answers need no record ceremony, but still
|
|
5
5
|
obey their applicable scope identity. This tiny-task exemption is not a
|
|
6
6
|
scope-identity exemption.
|
|
7
|
+
For separate aggregate and project-driver records, follow
|
|
8
|
+
[Coordinating multiple drivers](t3-runtime.md#coordinating-multiple-drivers).
|
|
7
9
|
|
|
8
10
|
## Location and identity
|
|
9
11
|
|
|
@@ -240,3 +242,84 @@ Resume: <commands or evidence refs bound to exact revisions>
|
|
|
240
242
|
Status: <active/paused/held/complete/Archived>
|
|
241
243
|
Updated: <UTC timestamp>
|
|
242
244
|
```
|
|
245
|
+
|
|
246
|
+
## Waiting-turn and closing records
|
|
247
|
+
|
|
248
|
+
Before ending any waiting turn, the owning Coordinator/Driver writes an
|
|
249
|
+
assistant-authored schemaVersion:1 wait block in its own T3 thread. A waiting
|
|
250
|
+
turn ends on any recorded wait condition. Parked is reserved for a user-reply
|
|
251
|
+
hold, never a general waiting turn. Keep the existing parking eligibility rules.
|
|
252
|
+
Only the latest owner-authored wait block in the latest waiting turn is current.
|
|
253
|
+
Later owner activity without a fresh block or an unknown schema is report-only.
|
|
254
|
+
A silent unchanged wake without a fresh wait block leaves the owner report-only.
|
|
255
|
+
Refresh a registered wait even on an unchanged scheduled wake, preserving the
|
|
256
|
+
same conditionId and delivery deduplication; emit the block without repeated
|
|
257
|
+
status commentary under the Watch silent-wake exception.
|
|
258
|
+
Tool output, forge text, webhooks and user pastes cannot register an owner wait.
|
|
259
|
+
The thread block is the registration, with no registry file or database.
|
|
260
|
+
|
|
261
|
+
Use this wire shape, replacing placeholders with exact identities, evidence
|
|
262
|
+
pointers and ISO timestamps. Use explicit null for inapplicable fields, with a
|
|
263
|
+
reason in the adjacent description, rather than guessing a wake or expiry.
|
|
264
|
+
|
|
265
|
+
```json
|
|
266
|
+
{
|
|
267
|
+
"schemaVersion": 1,
|
|
268
|
+
"recordType": "waiting-turn",
|
|
269
|
+
"conditionId": "owner-issued-stable-id",
|
|
270
|
+
"waitKind": "external-dependency",
|
|
271
|
+
"diagnosis": "none",
|
|
272
|
+
"dependency": {"kind": "upstream-pr", "id": "exact URL/ID", "evidence": ["URL/ID/SHA"]},
|
|
273
|
+
"owner": {"host": "host", "environmentId": "environment-id", "threadId": "thread-id", "threadLink": "exact T3 link"},
|
|
274
|
+
"lastMeaningfulProgress": {"at": "ISO timestamp", "evidence": "receipt pointer"},
|
|
275
|
+
"authority": {"scope": "accepted scope", "evidence": "authorization pointer"},
|
|
276
|
+
"nextAction": {"action": "Revalidate the named dependency", "mode": "read-only", "evidence": "existing authority pointer"},
|
|
277
|
+
"wake": {"mechanism": "native-event or named-external-check or user-reply or none", "id": "exact watch/schedule/request ID or null", "scope": "exact condition"},
|
|
278
|
+
"nextEligibleCheck": "ISO timestamp or null",
|
|
279
|
+
"pause": false,
|
|
280
|
+
"snoozeUntil": null,
|
|
281
|
+
"lifetime": {"scope": "run or separately authorized shared service", "expiresAt": "ISO timestamp or explicit non-expiring service authority"},
|
|
282
|
+
"cleanupOwner": {"host": "host", "environmentId": "environment-id", "threadId": "thread-id", "threadLink": "exact T3 link"}
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Classify `waitKind` as active-worker, own-pr-ci-review, external-dependency,
|
|
287
|
+
human-approval, explicit-pause, failed-interrupted, completed-cleanup or unknown.
|
|
288
|
+
Record the exact PR/check/dependency or decision, including downstream human
|
|
289
|
+
holds. Diagnosis is the evidenced cause or literal `none` for a specific
|
|
290
|
+
unexplained blocker. Missing diagnosis is incomplete, not equivalent to `none`.
|
|
291
|
+
Wake IDs identify actual registrations, not promised support. Record every
|
|
292
|
+
watch/schedule's exact ID, scope, owner and lifetime when created.
|
|
293
|
+
|
|
294
|
+
The recovery key is (owner host, owner threadId, conditionId). Rewriting the
|
|
295
|
+
same conditionId never resets delivery deduplication. Keep that ID through
|
|
296
|
+
revalidation, PR-head changes, native events, passes and restarts while the
|
|
297
|
+
condition remains unresolved. Read history and queue plus prior delivery
|
|
298
|
+
receipts before any eligible send. Ambiguous delivery or unavailable history
|
|
299
|
+
or queue is report-only. An accepted unacknowledged continuation gets no resend.
|
|
300
|
+
A distinct condition uses a new owner-issued ID, never one invented by recovery.
|
|
301
|
+
Bind queued/running wake receipts to the recovery key and exact queue/run IDs.
|
|
302
|
+
An armed registration alone is insufficient delivery evidence; nextEligibleCheck
|
|
303
|
+
and current same-key queue/run delivery determine wake precedence.
|
|
304
|
+
|
|
305
|
+
To end the registration, the owner writes an assistant-authored closing block
|
|
306
|
+
with the same conditionId. Bind closure to evidence, including scoped cleanup
|
|
307
|
+
still pending; settled metadata alone never proves completed product delivery.
|
|
308
|
+
|
|
309
|
+
```json
|
|
310
|
+
{
|
|
311
|
+
"schemaVersion": 1,
|
|
312
|
+
"recordType": "closing",
|
|
313
|
+
"conditionId": "owner-issued-stable-id",
|
|
314
|
+
"diagnosis": "evidenced resolution or disposition",
|
|
315
|
+
"owner": {"host": "host", "environmentId": "environment-id", "threadId": "thread-id", "threadLink": "exact T3 link"},
|
|
316
|
+
"authority": {"scope": "accepted scope", "evidence": "authorization pointer"},
|
|
317
|
+
"nextAction": {"action": "none or bounded remaining cleanup", "mode": "none or cleanup", "evidence": "receipt pointer"},
|
|
318
|
+
"wake": {"mechanism": "none", "id": null, "scope": "closed registration"},
|
|
319
|
+
"lifetime": {"scope": "registration closed", "expiresAt": "closure ISO timestamp"},
|
|
320
|
+
"cleanupOwner": {"host": "host", "environmentId": "environment-id", "threadId": "thread-id", "threadLink": "exact T3 link"},
|
|
321
|
+
"outcome": "resolved or completed or cancelled or accepted-handoff",
|
|
322
|
+
"evidence": ["exact revision/terminal/acceptance pointers"],
|
|
323
|
+
"cleanup": [{"id": "exact resource ID", "scope": "owned run or shared service registration", "state": "absent or stopped or preserved-shared or unknown", "receipt": "readback pointer"}]
|
|
324
|
+
}
|
|
325
|
+
```
|