axstack 0.15.0 → 0.17.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/README.md +6 -6
- package/docs/installation.md +12 -7
- package/docs/workflows.md +8 -6
- package/package.json +1 -1
- package/profiles/presets/claude-only.json +9 -0
- package/profiles/presets/codex-only.json +9 -0
- package/profiles/presets/mixed.json +9 -0
- package/skills/axstack/references/contracts.md +5 -5
- package/skills/axstack/references/lifecycle.md +42 -34
- package/skills/axstack/references/orca-runtime.md +5 -3
- package/skills/axstack/references/routing.md +13 -14
- package/skills/axstack-align/SKILL.md +11 -4
- package/skills/axstack-implement/SKILL.md +79 -44
- package/skills/axstack-research/SKILL.md +1 -0
- package/skills/axstack-review/SKILL.md +10 -6
- package/skills/axstack-watch/SKILL.md +12 -4
- package/src/installer.js +9 -7
- package/src/instructions.js +3 -3
- package/src/roles.js +4 -3
- package/skills/axstack/SKILL.md +0 -81
package/README.md
CHANGED
|
@@ -12,9 +12,9 @@ role choices, evidence, review policy, and one private derived run record.
|
|
|
12
12
|
|
|
13
13
|
## How a run works
|
|
14
14
|
|
|
15
|
-
Invoke
|
|
16
|
-
`axstack-
|
|
17
|
-
|
|
15
|
+
Invoke the needed phase directly: `axstack-align`, `axstack-spec`,
|
|
16
|
+
`axstack-tickets`, `axstack-implement`, `axstack-review`, and `axstack-watch`.
|
|
17
|
+
Direct `axstack-research`, `axstack-explain`,
|
|
18
18
|
`axstack-improve`, and `axstack-debug` routes need no spec ceremony. `axstack-relay` remains an
|
|
19
19
|
optional inline route for explicit messages and authorized notifications; an
|
|
20
20
|
unavailable or legacy-runtime-only relay falls back to the current conversation
|
|
@@ -68,8 +68,8 @@ See [installation details](docs/installation.md).
|
|
|
68
68
|
|
|
69
69
|
`--instructions` manages one versioned Axstack block in `AGENTS.md`,
|
|
70
70
|
`CLAUDE.md`, or `GEMINI.md`. Harness defaults resolve those files automatically. The block
|
|
71
|
-
|
|
72
|
-
reviewer, and cross-harness dispatch to use visible Orca orchestration via the `orca` CLI
|
|
71
|
+
requires direct matching phase-skill invocation and requires every subagent, delegated
|
|
72
|
+
worker, reviewer, and cross-harness dispatch to use visible Orca orchestration via the `orca` CLI
|
|
73
73
|
rather than a harness-native subagent tool (e.g. Claude/Codex native subagents). OpenCode
|
|
74
74
|
and Antigravity subagents run as Orca-supervised workers. Text and file
|
|
75
75
|
mode outside the markers are preserved; edited, malformed, unowned, or unsafe
|
|
@@ -77,7 +77,7 @@ targets are reported without normal-path adoption. Install exits nonzero when
|
|
|
77
77
|
an instruction conflict is preserved, while clean and idempotent installs exit
|
|
78
78
|
successfully.
|
|
79
79
|
|
|
80
|
-
The public bundle preserves three canonical
|
|
80
|
+
The public bundle preserves three canonical 24-role inputs:
|
|
81
81
|
[mixed](profiles/presets/mixed.json),
|
|
82
82
|
[codex-only](profiles/presets/codex-only.json), and
|
|
83
83
|
[claude-only](profiles/presets/claude-only.json). Each is exactly
|
package/docs/installation.md
CHANGED
|
@@ -51,7 +51,7 @@ profiles/presets/codex-only.json
|
|
|
51
51
|
profiles/presets/claude-only.json
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
Each has exactly `{ "version": 1, "roles": [...] }` with the same
|
|
54
|
+
Each has exactly `{ "version": 1, "roles": [...] }` with the same 24 stable
|
|
55
55
|
role IDs. Installation writes `<skills-dir>/axstack/roles.json` as
|
|
56
56
|
`{ "version": 1, "preset": "<selected preset>", "roles": [...] }` and records
|
|
57
57
|
its ownership hash like every other installed skill asset. There is no second
|
|
@@ -118,9 +118,10 @@ The complete bundle is validated before writes:
|
|
|
118
118
|
- each preset is a real JSON file with version 1, a non-empty `roles` array,
|
|
119
119
|
the filename's selected identity supplied by the caller, and the same role-ID
|
|
120
120
|
set as its peers;
|
|
121
|
-
- every role has valid preserved fields, while the mixed checker and
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
- every role has valid preserved fields, while the mixed checker and the mixed
|
|
122
|
+
`axstack-research-x` launch-by-agent-id route explicitly permit `model: null`;
|
|
123
|
+
in each single-provider preset, the unavailable adviser and its matching arena
|
|
124
|
+
judge seat explicitly permit `model: null`, as does `axstack-research-x`;
|
|
124
125
|
- obsolete runtime configuration flags fail before mutation with migration
|
|
125
126
|
guidance.
|
|
126
127
|
|
|
@@ -147,13 +148,17 @@ to rewrite them.
|
|
|
147
148
|
|
|
148
149
|
## Role behavior after installation
|
|
149
150
|
|
|
150
|
-
The runtime reads `roles.json`
|
|
151
|
-
A new run records the selected preset plus all
|
|
151
|
+
The runtime reads `roles.json` from the installed shared root `skills/axstack/`.
|
|
152
|
+
A new run records the selected preset plus all 24 role rows. An active run keeps
|
|
152
153
|
that snapshot after a later preset install unless the user explicitly changes
|
|
153
154
|
it and accepts the resulting evidence invalidation.
|
|
154
155
|
|
|
155
156
|
The mixed checker has `model: null`; checker dispatch is held and never inherits
|
|
156
|
-
a provider default.
|
|
157
|
+
a provider default. Mixed `axstack-research-x` has `model: null` because Orca exposes
|
|
158
|
+
no `--model` override for `grok`; its explicit note authorizes launch by agent ID,
|
|
159
|
+
and the run record snapshots the model reported by the TUI. The single-provider
|
|
160
|
+
presets configure the checker and keep `axstack-research-x` as an intentional
|
|
161
|
+
absence. Their
|
|
157
162
|
unavailable adviser and its matching arena judge seat remain explicit
|
|
158
163
|
same-provider `model: null` roles, which do not make installation unready;
|
|
159
164
|
Align and Spec still hold until both Astra and Fable can return independent
|
package/docs/workflows.md
CHANGED
|
@@ -10,9 +10,9 @@ Axstack implements that skill's specialist capability.
|
|
|
10
10
|
|
|
11
11
|
## Routing and scope identity
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
The directly invoked phase loads the applicable shared references for routing,
|
|
14
|
+
lifecycle, Orca runtime boundaries, role/model/risk contracts, the run record,
|
|
15
|
+
and PR shape.
|
|
16
16
|
|
|
17
17
|
Direct routes need no spec ceremony:
|
|
18
18
|
|
|
@@ -40,7 +40,7 @@ only affected work.
|
|
|
40
40
|
|
|
41
41
|
Installation requires one explicit canonical preset. The three bundle files
|
|
42
42
|
under `profiles/presets/` each contain exactly
|
|
43
|
-
`{ "version": 1, "roles": [...] }` and the same
|
|
43
|
+
`{ "version": 1, "roles": [...] }` and the same 24 stable IDs.
|
|
44
44
|
|
|
45
45
|
The current chat drives on whatever model runs it; no preset carries a driver
|
|
46
46
|
role.
|
|
@@ -53,7 +53,7 @@ role.
|
|
|
53
53
|
|
|
54
54
|
The installed `<skills-dir>/axstack/roles.json` adds the selected preset name:
|
|
55
55
|
`{ "version": 1, "preset": "<name>", "roles": [...] }`. The runtime reads it
|
|
56
|
-
|
|
56
|
+
from the installed shared root `skills/axstack/` and records the whole table for
|
|
57
57
|
a new run. Active runs retain their snapshot after later installation changes.
|
|
58
58
|
|
|
59
59
|
Peer roles keep the stable IDs `axstack-reviewer-primary` and
|
|
@@ -64,7 +64,9 @@ The unavailable adviser in each single-provider preset stays explicitly
|
|
|
64
64
|
`model: null` within that provider's bounds. Installer readiness accepts that
|
|
65
65
|
intentional absence, but Align and Spec hold because both independent receipts
|
|
66
66
|
are required. The mixed checker also stays explicitly `model: null`; checker work holds instead of
|
|
67
|
-
launching a provider default.
|
|
67
|
+
launching a provider default. Launch-by-agent-id routes for which Orca exposes no
|
|
68
|
+
`--model` override (today: `grok`) record `model: null` with an explicit note and are
|
|
69
|
+
launchable; the run record snapshots the model the TUI reports. Missing or unavailable roles hold only affected
|
|
68
70
|
work. Model, effort, and permission values express requested intent until real
|
|
69
71
|
Orca receipts establish the effective session. Stored `modeId` is not permission
|
|
70
72
|
parity or a sandbox. No route is inferred from subscription, quota, harness,
|
package/package.json
CHANGED
|
@@ -91,6 +91,15 @@
|
|
|
91
91
|
"thinkingOptionId": "low",
|
|
92
92
|
"notes": "Research web reader: gathers primary-source facts efficiently. Validate configured availability at launch; hold affected work without fallback."
|
|
93
93
|
},
|
|
94
|
+
{
|
|
95
|
+
"id": "axstack-research-x",
|
|
96
|
+
"name": "Axstack research X (unavailable)",
|
|
97
|
+
"provider": "claude",
|
|
98
|
+
"model": null,
|
|
99
|
+
"modeId": "bypassPermissions",
|
|
100
|
+
"thinkingOptionId": "high",
|
|
101
|
+
"notes": "Intentional single-provider absence: X/Twitter research via Grok is unavailable in claude-only. The explicit null holds this route without provider substitution."
|
|
102
|
+
},
|
|
94
103
|
{
|
|
95
104
|
"id": "axstack-explainer",
|
|
96
105
|
"name": "Axstack explainer",
|
|
@@ -91,6 +91,15 @@
|
|
|
91
91
|
"thinkingOptionId": "low",
|
|
92
92
|
"notes": "Research web reader: gathers primary-source facts efficiently. Validate configured availability at launch; hold affected work without fallback."
|
|
93
93
|
},
|
|
94
|
+
{
|
|
95
|
+
"id": "axstack-research-x",
|
|
96
|
+
"name": "Axstack research X (unavailable)",
|
|
97
|
+
"provider": "codex",
|
|
98
|
+
"model": null,
|
|
99
|
+
"modeId": "full-access",
|
|
100
|
+
"thinkingOptionId": "high",
|
|
101
|
+
"notes": "Intentional single-provider absence: X/Twitter research via Grok is unavailable in codex-only. The explicit null holds this route without provider substitution."
|
|
102
|
+
},
|
|
94
103
|
{
|
|
95
104
|
"id": "axstack-explainer",
|
|
96
105
|
"name": "Axstack explainer",
|
|
@@ -91,6 +91,15 @@
|
|
|
91
91
|
"thinkingOptionId": "low",
|
|
92
92
|
"notes": "Research web reader: gathers primary-source facts efficiently. Validate configured availability at launch; hold affected work without fallback."
|
|
93
93
|
},
|
|
94
|
+
{
|
|
95
|
+
"id": "axstack-research-x",
|
|
96
|
+
"name": "Axstack research X",
|
|
97
|
+
"provider": "grok",
|
|
98
|
+
"model": null,
|
|
99
|
+
"modeId": "full-access",
|
|
100
|
+
"thinkingOptionId": "high",
|
|
101
|
+
"notes": "X/Twitter-only research branch: Grok can read X; use for questions where posts, threads, announcements, or sentiment on X are answer-changing evidence. Cites post URLs and dates; never the sole source for a verified claim; report-only, no writes. Launch by agent id grok; model selected by the Grok TUI default."
|
|
102
|
+
},
|
|
94
103
|
{
|
|
95
104
|
"id": "axstack-explainer",
|
|
96
105
|
"name": "Axstack explainer",
|
|
@@ -4,11 +4,11 @@ Apply these authority, scope, and model rules before consequential action.
|
|
|
4
4
|
|
|
5
5
|
## Required lifecycle load
|
|
6
6
|
|
|
7
|
-
Except for `axstack-audit`
|
|
8
|
-
and follow [Shared lifecycle](lifecycle.md) before acting. When a
|
|
9
|
-
run ends or reaches a meaningful checkpoint, apply the lifecycle
|
|
10
|
-
The audit phase loads these contracts, writes its assigned record,
|
|
11
|
-
it never audits itself.
|
|
7
|
+
Except for `axstack-audit` and `axstack-relay`, every independently called phase
|
|
8
|
+
must load and follow [Shared lifecycle](lifecycle.md) before acting. When a
|
|
9
|
+
substantive run ends or reaches a meaningful checkpoint, apply the lifecycle
|
|
10
|
+
audit hook. The audit phase loads these contracts, writes its assigned record,
|
|
11
|
+
and stops; it never audits itself.
|
|
12
12
|
|
|
13
13
|
## Scope identity (conditional — see routing and lifecycle)
|
|
14
14
|
|
|
@@ -1,25 +1,23 @@
|
|
|
1
1
|
# Shared lifecycle and receipts
|
|
2
2
|
|
|
3
|
-
Phases load through [Standing contracts](contracts.md)
|
|
4
|
-
|
|
3
|
+
Phases load through [Standing contracts](contracts.md).
|
|
4
|
+
Delegated or resumable work uses a driver-owned [Run record](run-record.md)
|
|
5
5
|
binding state and receipts to exact revisions.
|
|
6
6
|
|
|
7
7
|
## Roster (compact)
|
|
8
8
|
|
|
9
9
|
- Driver: current chat; owns scope, decisions, cross-PR dependencies, Linear
|
|
10
10
|
mutations, and integration.
|
|
11
|
-
- Owner
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
- Owner: driver owns loop PRs; `axstack-owner` only for standalone watch/review
|
|
12
|
+
without live driver. It may perform PR-scoped publication within user authority. Human
|
|
13
|
+
merge is default.
|
|
14
14
|
- Author: exactly one writer per candidate; accepted fixes return there.
|
|
15
15
|
Workers launch no recursive teams.
|
|
16
16
|
- Reviewers: peer = two independent `axstack-reviewer-primary` and
|
|
17
17
|
`axstack-reviewer-secondary` sessions with identical brief and isolated first
|
|
18
18
|
pass; authored = one eligible configured reviewer from actual author
|
|
19
19
|
provenance. Owner and author never review.
|
|
20
|
-
-
|
|
21
|
-
a mutating owner; the watchdog is model-free and read-only, has no gate, and
|
|
22
|
-
records `watchdog.log`; there is no watch deadline for automations.
|
|
20
|
+
- Automation driver/monitor/watchdog: see [Watch health](#watch-health).
|
|
23
21
|
- Auditor (`axstack-auditor`): report-only; never edits, merges, activates, or
|
|
24
22
|
audits itself.
|
|
25
23
|
|
|
@@ -78,10 +76,17 @@ Store concise receipt references, not raw worker output, in the [Run record](run
|
|
|
78
76
|
## Execution tracking
|
|
79
77
|
|
|
80
78
|
The driver consumes native Orca completion and escalation deliveries for the
|
|
81
|
-
active Run.
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
79
|
+
active Run. A driver turn does not end while a Dispatch is unsettled unless one
|
|
80
|
+
completion wait from the orchestration guide is armed (background where the
|
|
81
|
+
harness supports it, foreground otherwise) and re-armed on timeout; sleep or
|
|
82
|
+
poll loops are forbidden. An explicitly invoked phase dispatches its configured
|
|
83
|
+
roles through Orca and closes with the lifecycle close-out; in-chat execution
|
|
84
|
+
covers only ordinary reading, writing, and local checks. Heartbeat deliveries
|
|
85
|
+
are acknowledged with no user-facing text. Process each whole delivery before
|
|
86
|
+
acknowledgment and validate its Task, Dispatch, sender, authority, revisions,
|
|
87
|
+
and receipts before advancing the run record. Duplicate deliveries are
|
|
88
|
+
deduplicated by runtime identity. Healthy unchanged observations produce no
|
|
89
|
+
user-facing update.
|
|
85
90
|
|
|
86
91
|
Detect completed-but-unadvanced work, failed sessions, unresolved launch
|
|
87
92
|
receipts, and stalls through the version-matched orchestration guide. Never
|
|
@@ -98,7 +103,9 @@ Tracking grants no merge, release, model-substitution, or scope authority.
|
|
|
98
103
|
|
|
99
104
|
The default 24-hour deadline covers standalone task-owned timers. Stop them at
|
|
100
105
|
deadline and preserve remaining work; there is no watch deadline for
|
|
101
|
-
automations.
|
|
106
|
+
automations. A PR is merge-ready only with the applicable review receipt(s) at
|
|
107
|
+
its exact head; green CI or tests alone never make it merge-ready. Merge-ready
|
|
108
|
+
differs from merged; human merges.
|
|
102
109
|
|
|
103
110
|
## Watch health
|
|
104
111
|
|
|
@@ -110,24 +117,25 @@ no watch deadline for automations. Build no custom scheduler and use no legacy
|
|
|
110
117
|
fallback. Details live in
|
|
111
118
|
[Watch runtime](../../axstack-watch/references/watch-runtime.md).
|
|
112
119
|
|
|
113
|
-
## Audit hook (
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
120
|
+
## Audit hook (close-out and meaningful checkpoints)
|
|
121
|
+
|
|
122
|
+
Audit measurement is enabled by default for every substantive run; dispatch
|
|
123
|
+
follows [Close-out](#close-out) or a material-deviation/repeated-repair
|
|
124
|
+
checkpoint. An `axstack-audit` run is excluded; it launches no children.
|
|
125
|
+
Load [axstack-audit](../../axstack-audit/SKILL.md). Accepted proposals
|
|
126
|
+
require a regression scenario and unchanged holdout checks; they change
|
|
127
|
+
nothing without tested independent review.
|
|
128
|
+
|
|
129
|
+
## Close-out
|
|
130
|
+
|
|
131
|
+
PRs merge by forge state—not branch ancestry; close out: (1) settle every worker
|
|
132
|
+
terminal; (2) compact record with counts and denominators—user
|
|
133
|
+
interventions/deviations from plan/repairs; (3) `axstack-auditor`: settle
|
|
134
|
+
non-zero/requested, else `counts zero`; an unavailable auditor leaves close-out
|
|
135
|
+
pending, never skipped silently; (4) release merged run worktrees and branches;
|
|
136
|
+
close Linear tickets; (5) mark the [Run record](run-record.md) `Archived`.
|
|
137
|
+
`Archived`—one each:
|
|
138
|
+
settlement receipt; compact record path; auditor decision plus settlement
|
|
139
|
+
receipt or `counts zero`; release and ticket receipts; archive timestamp.
|
|
140
|
+
`active`/receipt-incomplete record: close-out pending, never done. One-step
|
|
141
|
+
lookups exempt.
|
|
@@ -22,15 +22,17 @@ daemon, scheduler, database, or escalation engine.
|
|
|
22
22
|
|
|
23
23
|
## Bind the configured role
|
|
24
24
|
|
|
25
|
-
Read `roles.json`
|
|
25
|
+
Read `roles.json` from the installed shared root `skills/axstack/`. The installed
|
|
26
26
|
shape is `{ "version": 1, "preset": "<name>", "roles": [...] }`. Bundled
|
|
27
27
|
profiles are setup inputs shaped as
|
|
28
28
|
`{ "version": 1, "roles": [...] }`. A new run records the selected preset and
|
|
29
|
-
all
|
|
29
|
+
all 24 role rows once. An active run keeps the exact snapshot until the user
|
|
30
30
|
explicitly changes it.
|
|
31
31
|
|
|
32
32
|
Select the requested role by stable ID. A missing or null model holds only that role;
|
|
33
|
-
never launch a provider default.
|
|
33
|
+
never launch a provider default. Launch-by-agent-id routes for which Orca exposes no
|
|
34
|
+
`--model` override (today: `grok`) record `model: null` with an explicit note and are
|
|
35
|
+
launchable; the run record snapshots the model the TUI reports. Validate provider, model, and effort
|
|
34
36
|
against the guide and actual launch capability. Stored `modeId` and other
|
|
35
37
|
permission fields are conservative intent, not proof of effective permission
|
|
36
38
|
parity or a security boundary. Requested settings, input acceptance, effective
|
|
@@ -11,7 +11,7 @@ only with exactly one unambiguous preset; missing or contradictory sources are
|
|
|
11
11
|
a setup gap: hold. Never infer from live profiles or `list_profiles`, harness,
|
|
12
12
|
tools, credentials, quota, subscription, or default to `mixed`.
|
|
13
13
|
|
|
14
|
-
At run start, capture one **routing snapshot**: the complete map of all
|
|
14
|
+
At run start, capture one **routing snapshot**: the complete map of all 24 role
|
|
15
15
|
IDs with provider/model/mode/effort, absent or unconfigured roles recorded
|
|
16
16
|
explicitly, and no invented provider default. An absent or unconfigured role
|
|
17
17
|
holds only that role's work, not the run. A role installed or changed later
|
|
@@ -47,11 +47,12 @@ Role IDs:
|
|
|
47
47
|
only gate-authorized health escalations.
|
|
48
48
|
- `axstack-debug-investigator-1..4` each probe one L1 brief.
|
|
49
49
|
|
|
50
|
-
Provenance is matched on provider/model ID;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
Provenance is matched on provider/model ID; effort never maps. Missing table-row
|
|
51
|
+
provenance is unsupported and `INCOMPLETE`; report it and ask the user. Never
|
|
52
|
+
infer from slot, driver, owner, or provider. Author and owner never review.
|
|
53
|
+
|
|
54
|
+
The `axstack-implement` loop requires `mixed`; single-provider presets hold at
|
|
55
|
+
step (3) for user routing, with no substitution or same-provider review.
|
|
55
56
|
|
|
56
57
|
## Direct routes (no spec ceremony)
|
|
57
58
|
|
|
@@ -76,12 +77,11 @@ Author and owner never review their own work.
|
|
|
76
77
|
handoff guide, and require explicit recipient acceptance before ownership
|
|
77
78
|
changes. Missing capability is a setup gap; never invent one.
|
|
78
79
|
- Colleague PR review -> `axstack-review`, peer mode.
|
|
79
|
-
-
|
|
80
|
-
`axstack-watch`
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
intent boundaries still apply.
|
|
80
|
+
- A status question about an own open PR or stack ("check now", "what's left",
|
|
81
|
+
"are we done", or "is it approved") -> `axstack-watch` in observation-only
|
|
82
|
+
mode. Explicit "address", "patch", or "fix" grants authorized maintenance.
|
|
83
|
+
- Other own PR work -> `axstack-review` authored mode or `axstack-watch`
|
|
84
|
+
adoption.
|
|
85
85
|
|
|
86
86
|
## Proportional scope identity
|
|
87
87
|
|
|
@@ -126,5 +126,4 @@ not alone a formal spec trigger. Hold affected unsafe work while reassessing.
|
|
|
126
126
|
author provenance — then use `axstack-review` and `axstack-watch` without
|
|
127
127
|
repeated approval or new spec ceremony. Never infer the author from the
|
|
128
128
|
orchestrator or assume an imported own PR's author.
|
|
129
|
-
- Direct later phase: start there and pass that phase's identity check
|
|
130
|
-
never admits work a deeper phase rejects.
|
|
129
|
+
- Direct later phase: start there and pass that phase's identity check.
|
|
@@ -18,8 +18,15 @@ This preserves the required contracts -> lifecycle -> audit load edge.
|
|
|
18
18
|
|
|
19
19
|
1. **Research and map dependencies.** Inspect the available code, docs, and
|
|
20
20
|
tools before asking the user. Separate facts from preferences, name evidence
|
|
21
|
-
gaps, and map which decisions unlock others.
|
|
22
|
-
|
|
21
|
+
gaps, and map which decisions unlock others. When a fact needed for the
|
|
22
|
+
frontier is not derivable from the local repo or docs by ordinary reading,
|
|
23
|
+
dispatch `axstack-research` branches through Orca by source type:
|
|
24
|
+
requirements, code, web, and, once configured, X. Give one owner per branch,
|
|
25
|
+
use cross-harness routes where the roles allow, and require a cited note per
|
|
26
|
+
the research skill's source standards. The driver folds verified claims into
|
|
27
|
+
the frontier and records the receipts. Ordinary reading stays in-chat; a
|
|
28
|
+
single factual lookup never dispatches. Unresolved research blocks only its
|
|
29
|
+
dependent branch while safe fact work and independent branches continue.
|
|
23
30
|
2. **Prioritize the ready frontier.** Rank questions whose prerequisites are
|
|
24
31
|
settled by consequence, uncertainty, and the branches they unlock. Probe
|
|
25
32
|
vague terms, assumptions, success criteria, exclusions, failures, and edge
|
|
@@ -161,5 +168,5 @@ approval; record chosen document names and paths once per run.
|
|
|
161
168
|
actual dispatch. Alignment completion never dispatches a recipient.
|
|
162
169
|
|
|
163
170
|
Alignment stops for both sizes only when the handoff is usable, its next scope
|
|
164
|
-
identity is explicit, and execution has not started. The user invokes
|
|
165
|
-
to execute.
|
|
171
|
+
identity is explicit, and execution has not started. The user invokes
|
|
172
|
+
`axstack-implement` to execute.
|
|
@@ -5,11 +5,10 @@ description: When an approved task is ready to build or repair, use axstack-impl
|
|
|
5
5
|
|
|
6
6
|
# Implement
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
later phases.
|
|
8
|
+
From an accepted scope identity, drive its task/PR map through author -> review
|
|
9
|
+
-> repair until every required PR is merge-ready or held. Keep exact revisions,
|
|
10
|
+
strict TDD evidence, ownership, and unverified boundaries explicit. The human
|
|
11
|
+
merges; the same run later reconciles those merges and closes out.
|
|
13
12
|
|
|
14
13
|
## 1. Admit the work
|
|
15
14
|
|
|
@@ -34,6 +33,9 @@ Independently confirm the applicable
|
|
|
34
33
|
failure) returns to the author and does not increment the bug's fix ledger.
|
|
35
34
|
- An adopted own-PR repair has its accepted maintenance snapshot.
|
|
36
35
|
|
|
36
|
+
If substantial work lacks an approved spec or matching ticket map, report that
|
|
37
|
+
exact gap, name `axstack-align` as the next route, and stop.
|
|
38
|
+
|
|
37
39
|
Pin the exact base and current candidate revision. A missing, mismatched, or
|
|
38
40
|
materially changed but unaccepted identity holds affected work; safe
|
|
39
41
|
investigation may continue under the standing contracts. Proceed only with a
|
|
@@ -42,11 +44,9 @@ valid recorded identity and revisions; otherwise report the hold and exact gap.
|
|
|
42
44
|
## 2. Establish one owner and one writer
|
|
43
45
|
|
|
44
46
|
For substantive delegated or resumable work, use the shared
|
|
45
|
-
[run record](../axstack/references/run-record.md).
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
author when valid. Ambiguous launch state is a hold on creating another writer,
|
|
49
|
-
not evidence that the old writer disappeared.
|
|
47
|
+
[run record](../axstack/references/run-record.md). Reconcile it on restart with
|
|
48
|
+
the approved scope, Orca and forge state, exact revisions, tickets, and watches.
|
|
49
|
+
Reuse valid owners and authors; ambiguity holds a replacement writer.
|
|
50
50
|
|
|
51
51
|
At execution start, bind work to the driver-owned Orca Run and one authoritative
|
|
52
52
|
Task/Dispatch attempt. Preserve the actual IDs and process completion deliveries
|
|
@@ -57,30 +57,22 @@ Immediately before an actual role dispatch, read and follow the
|
|
|
57
57
|
[Orca runtime boundary](../axstack/references/orca-runtime.md). Ordinary local
|
|
58
58
|
reading and writing does not require that launch reference.
|
|
59
59
|
|
|
60
|
-
One persistent owner remains accountable for
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
on stale child evidence and child merge readiness. Rebase the child onto the
|
|
77
|
-
new parent revision, re-run affected checks, and remeasure shape against the new
|
|
78
|
-
actual base. Re-record the shape and re-check its level-matching rationale; size
|
|
79
|
-
growth alone is not an automatic hold. A green parent does not prove the
|
|
80
|
-
combined stack, but the parent need not wait for an independently reviewed
|
|
81
|
-
child. Dispatch only when ownership, worktree, dependency revisions, writer
|
|
82
|
-
exclusivity, and configured capacity agree with live state. Escalation occurs
|
|
83
|
-
only if a split exposes an existing shared-contract hold.
|
|
60
|
+
One persistent owner remains accountable for each PR. Exactly one author writes
|
|
61
|
+
it; accepted repairs return there while its evidence is usable, and the owner
|
|
62
|
+
never edits concurrently. Only an explicit accepted transfer changes ownership;
|
|
63
|
+
ordinary resume reconciles the same sessions and record.
|
|
64
|
+
|
|
65
|
+
Fanout follows dependencies and capacity within configured limits. Queue
|
|
66
|
+
conflicts and dependent work; use `gh stack`, starting each child from its
|
|
67
|
+
reviewed parent. When the reviewed parent changes, hold reliance on
|
|
68
|
+
stale child evidence and child merge readiness; rebase onto the new parent revision,
|
|
69
|
+
re-run affected checks, and remeasure shape against it.
|
|
70
|
+
Size growth alone is not an automatic hold.
|
|
71
|
+
A parent need not wait for an
|
|
72
|
+
independently reviewed child. Dispatch only when ownership, worktree, dependency
|
|
73
|
+
revisions, writer exclusivity, and capacity agree with live state. Shape, split,
|
|
74
|
+
fanout, and exceptions are autonomous driver decisions within the approved scope.
|
|
75
|
+
Size alone never requires user approval.
|
|
84
76
|
|
|
85
77
|
## 3. Establish test-first evidence
|
|
86
78
|
|
|
@@ -95,11 +87,6 @@ restating source text or mirroring the intended implementation. Execute the
|
|
|
95
87
|
check before changing production behavior and capture the expected behavioral
|
|
96
88
|
failure. A missing-module error or unrelated setup failure is not red.
|
|
97
89
|
|
|
98
|
-
For example, retry the same payment ID and observe one charge through the
|
|
99
|
-
public interface. Counting internal helper calls alone would not prove that
|
|
100
|
-
behavior. This illustrates the boundary test; it does not require a payment
|
|
101
|
-
scenario in unrelated work.
|
|
102
|
-
|
|
103
90
|
If no meaningful test-first check can be established, report why and hold
|
|
104
91
|
dependent implementation for a scoped decision. Historical tests added after
|
|
105
92
|
code remain noncompliant; they never become retroactive TDD evidence.
|
|
@@ -142,7 +129,7 @@ evidence when relevant. Name every unavailable OS, harness, credential, or
|
|
|
142
129
|
other boundary instead of implying coverage.
|
|
143
130
|
|
|
144
131
|
After the last change, pin the exact candidate revision and return this compact
|
|
145
|
-
implementation receipt to the
|
|
132
|
+
implementation receipt to the driver:
|
|
146
133
|
|
|
147
134
|
```text
|
|
148
135
|
Record: <progress.md path or tiny-task brief>
|
|
@@ -158,7 +145,55 @@ Next: <owner reconciles receipt, uses gh stack to push exact revision, confirms
|
|
|
158
145
|
remote readback, then routes it to axstack-review>
|
|
159
146
|
```
|
|
160
147
|
|
|
161
|
-
The author stops at that receipt and does not push. The
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
148
|
+
The author stops at that receipt and does not push. The driver reconciles it,
|
|
149
|
+
uses `gh stack` to publish, confirms remote readback, and continues the loop
|
|
150
|
+
without editing the candidate. No step grants merge authority.
|
|
151
|
+
|
|
152
|
+
## 6. Loop until merge-ready
|
|
153
|
+
|
|
154
|
+
Inputs are one snapshotted small-change intent or an approved spec and ticket
|
|
155
|
+
map. The unit is that accepted task/PR map: run independent PRs in parallel
|
|
156
|
+
within the fanout rule; run a dependent `gh stack` bottom-up, each child from
|
|
157
|
+
its reviewed parent. The driver is owner, sole record writer, dispatcher,
|
|
158
|
+
publisher, and wait-holder for every loop PR it creates. Resume preserves an
|
|
159
|
+
existing live owner absent an accepted transfer.
|
|
160
|
+
|
|
161
|
+
For each PR:
|
|
162
|
+
|
|
163
|
+
1. Dispatch `axstack-author` under §§3-5 and consume its strict-TDD receipt.
|
|
164
|
+
2. Publish through candidate-publication and read back the exact SHA.
|
|
165
|
+
3. Dispatch and consume the authored-mode `axstack-review` selected from actual
|
|
166
|
+
author provenance.
|
|
167
|
+
4. Route the verdict. `APPROVE` at that head plus `axstack-watch` §5's full
|
|
168
|
+
predicate—required checks, all feedback, approvals, mergeability, and
|
|
169
|
+
exact-revision receipts—records `merge-ready`. With required checks pending,
|
|
170
|
+
use the forge-native blocking check wait, bounded and used once per revision, then
|
|
171
|
+
re-evaluate. Timeout, error, or missing wait capability records `held` at
|
|
172
|
+
that revision with reason and resume condition; it never triggers author
|
|
173
|
+
repair. Notify “checks pending, resume when green”, not “decision needed”.
|
|
174
|
+
`REQUEST_CHANGES`, a failed required check, or post-readiness feedback returns
|
|
175
|
+
findings to the same author for a new revision, increments `repairs`, and
|
|
176
|
+
returns to step 1. `INCOMPLETE`, a provenance gap, unavailable model, serious
|
|
177
|
+
risk, or the third `REQUEST_CHANGES` on one PR records `held`. A changed
|
|
178
|
+
parent sends its child back to step 1.
|
|
179
|
+
|
|
180
|
+
One run-level completion wait covers every unsettled Dispatch; the bounded
|
|
181
|
+
forge check wait is the only other wait. End a turn only when every required PR
|
|
182
|
+
is `merge-ready` or `held`, after notification (b) or (a). Raise serious risk
|
|
183
|
+
(c) immediately when found. Notifications use `axstack-relay` under the recorded
|
|
184
|
+
Notification policy: (a) a user-decision hold, (b) the merge-ready set and the
|
|
185
|
+
all-merged event—two per run—and (c) serious risk; never progress.
|
|
186
|
+
|
|
187
|
+
Merge-ready is the human boundary: the user merges, bottom-up for a stack. The
|
|
188
|
+
driver resumes on the user's next message or `/axstack-watch`; no Orca merge
|
|
189
|
+
wake exists today. Re-read forge state: record forge-merged PRs as `merged`;
|
|
190
|
+
changed heads or feedback return to step 1; release nothing before Close-out.
|
|
191
|
+
Run Close-out once only after every required PR is forge-merged and acceptance
|
|
192
|
+
passes. It settles workers, records counts, makes the auditor decision and
|
|
193
|
+
settlement, releases worktrees, closes eligible tickets, and archives the run.
|
|
194
|
+
|
|
195
|
+
The loop requires the `mixed` two-provider authored-review row. `codex-only` or
|
|
196
|
+
`claude-only` holds at step (3) for an explicit user routing choice, with no
|
|
197
|
+
substitution or same-provider review. Derived PR states are `authoring |
|
|
198
|
+
published | in-review | repairing(n) | merge-ready | merged | held`. The run is
|
|
199
|
+
done only when every required PR is forge-merged and Close-out has receipts.
|
|
@@ -36,6 +36,7 @@ is part of research.
|
|
|
36
36
|
- `axstack-research-requirements`: requirements and intent.
|
|
37
37
|
- `axstack-research-code`: code behavior.
|
|
38
38
|
- `axstack-research-web`: web and external sources.
|
|
39
|
+
- `axstack-research-x`: X (Twitter) posts and threads via Grok — only when X evidence is answer-changing; cite post URLs and dates.
|
|
39
40
|
- `axstack-explore-codebase`: broad codebase mapping.
|
|
40
41
|
- `axstack-explore-execution`: execution and runtime traces.
|
|
41
42
|
|
|
@@ -39,7 +39,7 @@ head and current base, and writing authority are recorded.
|
|
|
39
39
|
|
|
40
40
|
Independently check the
|
|
41
41
|
[proportional scope identity](../axstack/references/routing.md#proportional-scope-identity)
|
|
42
|
-
before an approval or merge-ready declaration:
|
|
42
|
+
before an approval or [merge-ready declaration](#authored-mode-own-pr):
|
|
43
43
|
|
|
44
44
|
- Substantial new work: confirm the approved spec identity and matching ticket
|
|
45
45
|
map.
|
|
@@ -49,9 +49,12 @@ before an approval or merge-ready declaration:
|
|
|
49
49
|
author provenance. Never assume an imported own PR's author. That
|
|
50
50
|
snapshot is accepted without repeated approval.
|
|
51
51
|
|
|
52
|
-
The mode is ready when the applicable identity matches the candidate
|
|
53
|
-
material scope change remains unaccepted
|
|
54
|
-
|
|
52
|
+
The mode is ready when the applicable identity matches the candidate, no
|
|
53
|
+
material scope change remains unaccepted, and an independent review receipt
|
|
54
|
+
records `APPROVE` from the required non-author, non-owner reviewer at the exact
|
|
55
|
+
current head. Green CI, passing tests, or an older-head receipt leave readiness
|
|
56
|
+
`UNKNOWN`, never merge-ready. Readonly investigation may continue while an
|
|
57
|
+
identity gap holds declarations.
|
|
55
58
|
|
|
56
59
|
Resolve actual author provenance from authoring session receipts and candidate
|
|
57
60
|
history. The orchestrator model, provider, profile, or owner name is not author
|
|
@@ -244,7 +247,8 @@ Escalate to user: <yes | no> — <criterion> — <reason>
|
|
|
244
247
|
At any point, promptly raise credible serious security issues, possible
|
|
245
248
|
downtime or data loss, and major design concerns without waiting for every
|
|
246
249
|
mode-required reviewer. Present evidence, likely impact, options, and the user
|
|
247
|
-
decision needed. An urgent hold blocks approval,
|
|
250
|
+
decision needed. An urgent hold blocks approval,
|
|
251
|
+
[merge-ready declarations](#authored-mode-own-pr), and
|
|
248
252
|
dependent dangerous actions, but does not block safe investigation, unrelated
|
|
249
253
|
work, or reporting validated risk as `REQUEST_CHANGES`. Disagreement and
|
|
250
254
|
silence leave the hold open.
|
|
@@ -267,7 +271,7 @@ without waiting; `proceed` never overrides a validated blocking finding.
|
|
|
267
271
|
## Publishing rule
|
|
268
272
|
|
|
269
273
|
Mode-required exact-revision completeness gates external approval,
|
|
270
|
-
merge-ready declarations, and authorized submission. It never gates returning
|
|
274
|
+
[merge-ready declarations](#authored-mode-own-pr), and authorized submission. It never gates returning
|
|
271
275
|
evidence, limitations, validated risk, or an internal `INCOMPLETE` report.
|
|
272
276
|
|
|
273
277
|
- Peer mode requires both current reviews and no unresolved material finding
|
|
@@ -6,7 +6,8 @@ description: When babysitting an existing PR, use axstack-watch to monitor or ma
|
|
|
6
6
|
# Watch
|
|
7
7
|
|
|
8
8
|
Leave each adopted PR with one accountable owner, current readiness evidence,
|
|
9
|
-
and
|
|
9
|
+
and user-facing updates that name its current milestone and next wake or
|
|
10
|
+
condition.
|
|
10
11
|
|
|
11
12
|
Before acting, load [Standing contracts](../axstack/references/contracts.md).
|
|
12
13
|
Its required edge loads [Shared lifecycle](../axstack/references/lifecycle.md),
|
|
@@ -69,7 +70,8 @@ model-free and read-only, has no gate, and records `watchdog.log`; there is no
|
|
|
69
70
|
watch deadline for automations. The driver is the automation session itself,
|
|
70
71
|
with no `axstack-monitor` or `axstack-owner` role row; `axstack-monitor` stays
|
|
71
72
|
an optional read-only observer that never sends. One read-only PR observation
|
|
72
|
-
needs neither.
|
|
73
|
+
needs neither. The publishing driver is the live owner for a status check;
|
|
74
|
+
materialize no `axstack-owner` and start no automation for a read-only check.
|
|
73
75
|
|
|
74
76
|
For standalone adoption, materialize `axstack-owner` only when no live owner
|
|
75
77
|
exists. Once it exists, the current chat is not a competing coordinator. Only
|
|
@@ -78,14 +80,17 @@ no children or recursive teams, and the adoption watcher is never the writer.
|
|
|
78
80
|
|
|
79
81
|
A live watch has verified role and timer receipts, handshakes, watched scope,
|
|
80
82
|
wake ownership, and a common expiry. A missing runtime capability is a setup gap,
|
|
81
|
-
not a reason to invent a call or create a duplicate registration.
|
|
82
|
-
|
|
83
|
+
not a reason to invent a call or create a duplicate registration. Native
|
|
84
|
+
wake-ups drive observation; never poll or keep a model active between events.
|
|
83
85
|
|
|
84
86
|
## 4. Route each wake
|
|
85
87
|
|
|
86
88
|
Re-read the remote head and base, then reconcile the event against acknowledged
|
|
87
89
|
IDs and the recorded mode. A changed head, CI result, or review comment is an
|
|
88
90
|
event, not repair authority. Stale or ambiguous observations authorize nothing.
|
|
91
|
+
Every user-facing update is actionable: name the current milestone, the next
|
|
92
|
+
wake or condition, and an ETA when the forge exposes one, such as CI median.
|
|
93
|
+
A healthy unchanged observation produces no user-facing message.
|
|
89
94
|
|
|
90
95
|
Observation-only and peer wakes produce a read-only report and stop. For an
|
|
91
96
|
authorized maintenance wake that may require a repair or public reply, read and
|
|
@@ -157,3 +162,6 @@ Resume: <known commands or verified refs needed to reconcile from this revision>
|
|
|
157
162
|
|
|
158
163
|
The watch ends only when registrations are stopped, receipts are recorded, and
|
|
159
164
|
the PR is either merged or represented by this resumable state.
|
|
165
|
+
When every required PR is merged, follow the lifecycle
|
|
166
|
+
[Close-out](../axstack/references/lifecycle.md#close-out) before reporting the
|
|
167
|
+
run as done.
|
package/src/installer.js
CHANGED
|
@@ -247,12 +247,14 @@ export async function validateBundle(bundleDir, selectedPreset = null) {
|
|
|
247
247
|
|
|
248
248
|
const files = [];
|
|
249
249
|
for (const dir of skillDirs) {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
250
|
+
if (dir.name !== 'axstack') {
|
|
251
|
+
const skillMark = join(skillsRoot, dir.name, 'SKILL.md');
|
|
252
|
+
try {
|
|
253
|
+
const s = await stat(skillMark);
|
|
254
|
+
if (!s.isFile()) throw new Error();
|
|
255
|
+
} catch {
|
|
256
|
+
throw new Error(`skill ${dir.name} is missing SKILL.md`);
|
|
257
|
+
}
|
|
256
258
|
}
|
|
257
259
|
await walkSkills(join(skillsRoot, dir.name), skillsRoot, files);
|
|
258
260
|
}
|
|
@@ -508,7 +510,7 @@ export async function installBundle({
|
|
|
508
510
|
}
|
|
509
511
|
instructionPlan = planInstruction({
|
|
510
512
|
text: existingInstructionsRaw,
|
|
511
|
-
block: renderInstructionBlock(
|
|
513
|
+
block: renderInstructionBlock(),
|
|
512
514
|
ownership: boundInstructions.path === instructionsFile ? boundInstructions : null,
|
|
513
515
|
force,
|
|
514
516
|
});
|
package/src/instructions.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// Pure planning and byte-preserving edits for the Axstack-owned routing block.
|
|
2
2
|
import { hashContent } from './manifest.js';
|
|
3
|
-
import { join } from './posixpath.js';
|
|
4
3
|
|
|
5
4
|
const BEGIN = '<!-- axstack:begin v1 -->';
|
|
6
5
|
const END = '<!-- axstack:end -->';
|
|
7
6
|
|
|
8
|
-
export function renderInstructionBlock(
|
|
7
|
+
export function renderInstructionBlock() {
|
|
9
8
|
return [
|
|
10
9
|
BEGIN,
|
|
11
|
-
|
|
10
|
+
'Use Axstack for engineering work: invoke the matching `axstack-*` skill directly.',
|
|
11
|
+
'`axstack-implement` loops author -> review -> repair until every PR is merge-ready.',
|
|
12
12
|
'Route every subagent, delegated worker, reviewer, and cross-harness dispatch through Orca orchestration via the `orca` CLI and its `orca-cli` / `orchestration` skills so the work stays visible.',
|
|
13
13
|
'Do not use a harness native subagent tool for delegated work.',
|
|
14
14
|
END,
|
package/src/roles.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const PROVIDER_BOUNDS = Object.freeze({
|
|
2
|
-
mixed: new Set(['codex', 'claude']),
|
|
2
|
+
mixed: new Set(['codex', 'claude', 'grok']),
|
|
3
3
|
'codex-only': new Set(['codex']),
|
|
4
4
|
'claude-only': new Set(['claude']),
|
|
5
5
|
});
|
|
@@ -64,8 +64,9 @@ export function assessRoleReadiness(roles, preset) {
|
|
|
64
64
|
const gaps = [];
|
|
65
65
|
const isIntentionalAbsence = (role) => role.model === null && (
|
|
66
66
|
(preset === 'mixed' && role.id === 'axstack-checker') ||
|
|
67
|
-
(preset === '
|
|
68
|
-
(preset === '
|
|
67
|
+
(preset === 'mixed' && role.id === 'axstack-research-x' && role.provider === 'grok') ||
|
|
68
|
+
(preset === 'codex-only' && ['axstack-advisor-fable', 'axstack-arena-judge-fable', 'axstack-research-x'].includes(role.id)) ||
|
|
69
|
+
(preset === 'claude-only' && ['axstack-advisor-astra', 'axstack-arena-judge-astra', 'axstack-research-x'].includes(role.id))
|
|
69
70
|
);
|
|
70
71
|
for (const role of roles) {
|
|
71
72
|
if (!bounds.has(role.provider)) {
|
package/skills/axstack/SKILL.md
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: axstack
|
|
3
|
-
description: When routing an engineering run through Axstack, use axstack to select the applicable phase and scope identity.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Axstack entry
|
|
7
|
-
|
|
8
|
-
Route the current request to one Axstack phase with the right scope identity.
|
|
9
|
-
The current chat remains the driver; Orca owns runtime orchestration.
|
|
10
|
-
|
|
11
|
-
For an explicit relay message or transport test, use
|
|
12
|
-
[axstack-relay](../axstack-relay/SKILL.md) directly. No engineering scope
|
|
13
|
-
identity or decision workflow is needed for that send. The same skill handles
|
|
14
|
-
urgent or blocking notifications under an explicit standing instruction.
|
|
15
|
-
|
|
16
|
-
## Route the request
|
|
17
|
-
|
|
18
|
-
1. Classify the request with [Shared routing](references/routing.md). Direct
|
|
19
|
-
research, explanation, improvement discovery, peer-review, adopted-watch,
|
|
20
|
-
and handoff routes need no spec
|
|
21
|
-
ceremony. Only an explicit user-requested ownership transfer can use the
|
|
22
|
-
capability-gated native route in
|
|
23
|
-
[Lifecycle and receipts](references/lifecycle.md#native-handoff-and-resume),
|
|
24
|
-
not an Axstack handoff phase. Preparation completion, watch expiry, and
|
|
25
|
-
ordinary resume update or reconcile the run record without launching it.
|
|
26
|
-
2. For new engineering work, validate scope identity before invoking any phase.
|
|
27
|
-
Record `small`, `substantial`, or `unclear` plus a brief reason, then apply the
|
|
28
|
-
[proportional scope identity](references/routing.md#proportional-scope-identity).
|
|
29
|
-
A small clear change proceeds from its snapshotted small-change intent.
|
|
30
|
-
Substantial work proceeds only from an approved spec and matching ticket
|
|
31
|
-
map. Clarify unclear size before dispatch.
|
|
32
|
-
3. Only after validation passes, invoke exactly the selected phase. A directly
|
|
33
|
-
invoked later phase starts there and must pass its own identity check. When
|
|
34
|
-
substantial work lacks an approved spec or matching ticket map, return that
|
|
35
|
-
exact gap, name `axstack-align` as the next route, and stop the current
|
|
36
|
-
invocation; do not invoke align, spec, or tickets. Apply the same stop to a
|
|
37
|
-
mismatched or invalidated identity. Never admit work that a deeper phase
|
|
38
|
-
would reject.
|
|
39
|
-
|
|
40
|
-
The route is settled when one applicable phase is named with its valid scope
|
|
41
|
-
identity, or the exact preparation/setup gap is reported with affected work
|
|
42
|
-
held.
|
|
43
|
-
|
|
44
|
-
## Load at the action boundary
|
|
45
|
-
|
|
46
|
-
- Every independently called phase loads [Standing contracts](references/contracts.md),
|
|
47
|
-
which requires lifecycle and audit loading before action.
|
|
48
|
-
- Before an actual Axstack role dispatch, delivery, settlement, or handoff, load
|
|
49
|
-
[Orca runtime](references/orca-runtime.md). Ordinary reading, writing, and
|
|
50
|
-
local checks do not require launch discovery.
|
|
51
|
-
- Substantive delegated or resumable work uses the
|
|
52
|
-
[Local run record](references/run-record.md).
|
|
53
|
-
- When the current session is an Orca PR automation (driver or watchdog), load
|
|
54
|
-
[Automation sessions](references/automations.md) before any discovery,
|
|
55
|
-
review, gate, or mutation.
|
|
56
|
-
- When review escalation or watch notification is eligible and the brief has a
|
|
57
|
-
`Notification policy`, use the optional
|
|
58
|
-
[axstack-relay](../axstack-relay/SKILL.md); otherwise keep notification in
|
|
59
|
-
the current Orca conversation.
|
|
60
|
-
|
|
61
|
-
## Lifecycle
|
|
62
|
-
|
|
63
|
-
This is a phase map, not an automatic dispatch sequence.
|
|
64
|
-
|
|
65
|
-
1. `axstack-align` settles substantial scope and decisions.
|
|
66
|
-
2. `axstack-spec` creates the single user-approved execution baseline.
|
|
67
|
-
3. `axstack-tickets` maps capabilities, tasks, and dependencies, then
|
|
68
|
-
preparation stops with a resumable handoff.
|
|
69
|
-
4. `axstack-implement` produces owned candidates with strict TDD.
|
|
70
|
-
5. `axstack-review` gives peer PRs the two configured independent same-brief
|
|
71
|
-
reviewer roles; authored PRs get one complete eligible non-author/non-owner
|
|
72
|
-
review based on actual author provenance and the routing snapshot.
|
|
73
|
-
6. `axstack-watch` monitors within the shared deadline and hands off remaining
|
|
74
|
-
work.
|
|
75
|
-
7. The human merges by default, bottom-up for a stack. Review approval never
|
|
76
|
-
grants merge authority.
|
|
77
|
-
|
|
78
|
-
Autonomous progress, model holds, serious-risk handling, mutation authority,
|
|
79
|
-
and the one-host ownership contract live in
|
|
80
|
-
[Standing contracts](references/contracts.md). Load only the selected phase
|
|
81
|
-
and the references its action requires.
|