axstack 0.17.0 → 0.19.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 +7 -4
- package/docs/installation.md +12 -11
- package/docs/workflows.md +10 -7
- package/package.json +1 -1
- package/profiles/presets/claude-only.json +11 -2
- package/profiles/presets/codex-only.json +11 -2
- package/profiles/presets/mixed.json +12 -3
- package/skills/axstack/references/contracts.md +1 -1
- package/skills/axstack/references/lifecycle.md +9 -9
- package/skills/axstack/references/orca-runtime.md +2 -2
- package/skills/axstack/references/routing.md +3 -3
- package/skills/axstack-research/SKILL.md +13 -9
- package/skills/axstack-spec/SKILL.md +14 -8
- package/skills/axstack-tickets/SKILL.md +28 -22
- package/src/roles.js +5 -4
package/README.md
CHANGED
|
@@ -24,6 +24,8 @@ without changing authority.
|
|
|
24
24
|
reason. Small, bounded one-PR work uses the current request or selected issue
|
|
25
25
|
as a snapshotted small-change intent;
|
|
26
26
|
substantial or stacked work needs an approved spec and matching ticket map.
|
|
27
|
+
Substantial work uses Linear by default, or explicitly selected GitHub Issues
|
|
28
|
+
or repository Markdown, as its authoritative spec and capability tracker.
|
|
27
29
|
2. The current chat drives on whatever model runs it; there is no driver
|
|
28
30
|
profile. Bind each ready task to the selected role snapshot and an authoritative Orca
|
|
29
31
|
Run, Task, and Dispatch. Exactly one writer owns a candidate at a time. All
|
|
@@ -77,7 +79,7 @@ targets are reported without normal-path adoption. Install exits nonzero when
|
|
|
77
79
|
an instruction conflict is preserved, while clean and idempotent installs exit
|
|
78
80
|
successfully.
|
|
79
81
|
|
|
80
|
-
The public bundle preserves three canonical
|
|
82
|
+
The public bundle preserves three canonical 25-role inputs:
|
|
81
83
|
[mixed](profiles/presets/mixed.json),
|
|
82
84
|
[codex-only](profiles/presets/codex-only.json), and
|
|
83
85
|
[claude-only](profiles/presets/claude-only.json). Each is exactly
|
|
@@ -90,9 +92,10 @@ Mixed configures independent Astra and Fable advisers at high. Single-provider
|
|
|
90
92
|
presets preserve both adviser IDs and mark the unavailable one with `model:
|
|
91
93
|
null` inside that preset's provider bounds; installation remains ready, while
|
|
92
94
|
Align and Spec hold because both receipts are required. The mixed
|
|
93
|
-
`axstack-checker`
|
|
94
|
-
|
|
95
|
-
|
|
95
|
+
`axstack-checker` and `axstack-research-web-google` roles launch Antigravity by
|
|
96
|
+
agent ID with explicit `model: null`; the run records the model reported by the
|
|
97
|
+
TUI. The single-provider presets configure the checker and record the Google
|
|
98
|
+
research branch as intentionally absent. Preset changes affect new runs only. Stored model, effort, and permission
|
|
96
99
|
fields are declared intent until actual Orca launch receipts establish effective
|
|
97
100
|
behavior; installation never proves provider availability or permission parity.
|
|
98
101
|
Subscription availability and quota never select a fallback model.
|
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 25 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,10 +118,11 @@ 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
|
|
122
|
-
`axstack-research-x` launch-by-agent-id
|
|
121
|
+
- every role has valid preserved fields, while the mixed checker,
|
|
122
|
+
`axstack-research-web-google`, and `axstack-research-x` launch-by-agent-id
|
|
123
|
+
routes explicitly permit `model: null`;
|
|
123
124
|
in each single-provider preset, the unavailable adviser and its matching arena
|
|
124
|
-
judge seat explicitly permit `model: null`, as
|
|
125
|
+
judge seat explicitly permit `model: null`, as do both cross-provider research routes;
|
|
125
126
|
- obsolete runtime configuration flags fail before mutation with migration
|
|
126
127
|
guidance.
|
|
127
128
|
|
|
@@ -149,16 +150,16 @@ to rewrite them.
|
|
|
149
150
|
## Role behavior after installation
|
|
150
151
|
|
|
151
152
|
The runtime reads `roles.json` from the installed shared root `skills/axstack/`.
|
|
152
|
-
A new run records the selected preset plus all
|
|
153
|
+
A new run records the selected preset plus all 25 role rows. An active run keeps
|
|
153
154
|
that snapshot after a later preset install unless the user explicitly changes
|
|
154
155
|
it and accepts the resulting evidence invalidation.
|
|
155
156
|
|
|
156
|
-
The mixed checker
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
and the run record snapshots the model
|
|
160
|
-
presets configure the checker and keep
|
|
161
|
-
|
|
157
|
+
The mixed checker and `axstack-research-web-google` have provider
|
|
158
|
+
`antigravity`; mixed `axstack-research-x` has provider `grok`. All three use
|
|
159
|
+
`model: null` because Orca exposes no model override for those agent-ID routes;
|
|
160
|
+
their notes authorize launch by agent ID, and the run record snapshots the model
|
|
161
|
+
reported by the TUI. The single-provider presets configure the checker and keep
|
|
162
|
+
both cross-provider research routes as intentional absences. Their
|
|
162
163
|
unavailable adviser and its matching arena judge seat remain explicit
|
|
163
164
|
same-provider `model: null` roles, which do not make installation unready;
|
|
164
165
|
Align and Spec still hold until both Astra and Fable can return independent
|
package/docs/workflows.md
CHANGED
|
@@ -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 25 stable IDs.
|
|
44
44
|
|
|
45
45
|
The current chat drives on whatever model runs it; no preset carries a driver
|
|
46
46
|
role.
|
|
@@ -63,9 +63,9 @@ selected preset.
|
|
|
63
63
|
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
|
-
are required. The mixed checker
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
are required. The mixed checker and Google web-research route use provider
|
|
67
|
+
`antigravity`; the X route uses `grok`. Launch-by-agent-id routes for which Orca
|
|
68
|
+
exposes no model override (today: `grok`, `antigravity`) record `model: null` with an explicit note and are
|
|
69
69
|
launchable; the run record snapshots the model the TUI reports. Missing or unavailable roles hold only affected
|
|
70
70
|
work. Model, effort, and permission values express requested intent until real
|
|
71
71
|
Orca receipts establish the effective session. Stored `modeId` is not permission
|
|
@@ -118,10 +118,13 @@ session and evidence remain valid.
|
|
|
118
118
|
synthesis as the recommendation; the note lands as `Decisions` rows in the
|
|
119
119
|
run record.
|
|
120
120
|
- `axstack-spec` writes observable acceptance, exclusions, decisions, and one
|
|
121
|
-
user-approved revision baseline.
|
|
121
|
+
user-approved revision baseline. Linear is the default authoritative store;
|
|
122
|
+
GitHub Issues and repository Markdown are explicit alternatives. A GitHub
|
|
123
|
+
baseline pins the issue URL and approved body digest.
|
|
122
124
|
- `axstack-tickets` maps user-visible capabilities to dependency-aware internal
|
|
123
|
-
tasks. Linear is the default selected store with access preflight;
|
|
124
|
-
|
|
125
|
+
tasks. Linear is the default selected store with access preflight; GitHub
|
|
126
|
+
Issues is an explicit external-tracker alternative and repository Markdown
|
|
127
|
+
is an explicit local alternative. Only the driver mutates lifecycle state.
|
|
125
128
|
- `axstack-implement` uses strict behavioral RED, GREEN, then refactor. The
|
|
126
129
|
narrow accepted structure-preserving route uses old-green and the same check
|
|
127
130
|
new-green. One author writes and returns a local receipt without pushing. The
|
package/package.json
CHANGED
|
@@ -57,12 +57,12 @@
|
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
"id": "axstack-checker",
|
|
60
|
-
"name": "Axstack
|
|
60
|
+
"name": "Axstack tracker checker",
|
|
61
61
|
"provider": "claude",
|
|
62
62
|
"model": "claude-sonnet-5",
|
|
63
63
|
"modeId": "bypassPermissions",
|
|
64
64
|
"thinkingOptionId": "low",
|
|
65
|
-
"notes": "Report-only Linear
|
|
65
|
+
"notes": "Report-only discrepancy checker for the selected external tracker (Linear or GitHub Issues). Never mutates the tracker; the driver independently verifies evidence before applying updates. A null model means explicit user selection is required before dispatch and must never launch a provider default."
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
68
|
"id": "axstack-research-requirements",
|
|
@@ -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-web-google",
|
|
96
|
+
"name": "Axstack research web (Google unavailable)",
|
|
97
|
+
"provider": "claude",
|
|
98
|
+
"model": null,
|
|
99
|
+
"modeId": "bypassPermissions",
|
|
100
|
+
"thinkingOptionId": "high",
|
|
101
|
+
"notes": "Intentional single-provider absence: Google-Search-grounded web research via Gemini/Antigravity is unavailable in claude-only. The explicit null holds this route without provider substitution."
|
|
102
|
+
},
|
|
94
103
|
{
|
|
95
104
|
"id": "axstack-research-x",
|
|
96
105
|
"name": "Axstack research X (unavailable)",
|
|
@@ -57,12 +57,12 @@
|
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
"id": "axstack-checker",
|
|
60
|
-
"name": "Axstack
|
|
60
|
+
"name": "Axstack tracker checker",
|
|
61
61
|
"provider": "codex",
|
|
62
62
|
"model": "gpt-5.6-luna",
|
|
63
63
|
"modeId": "full-access",
|
|
64
64
|
"thinkingOptionId": "low",
|
|
65
|
-
"notes": "Report-only Linear
|
|
65
|
+
"notes": "Report-only discrepancy checker for the selected external tracker (Linear or GitHub Issues). Never mutates the tracker; the driver independently verifies evidence before applying updates. A null model means explicit user selection is required before dispatch and must never launch a provider default."
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
68
|
"id": "axstack-research-requirements",
|
|
@@ -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-web-google",
|
|
96
|
+
"name": "Axstack research web (Google unavailable)",
|
|
97
|
+
"provider": "codex",
|
|
98
|
+
"model": null,
|
|
99
|
+
"modeId": "full-access",
|
|
100
|
+
"thinkingOptionId": "high",
|
|
101
|
+
"notes": "Intentional single-provider absence: Google-Search-grounded web research via Gemini/Antigravity is unavailable in codex-only. The explicit null holds this route without provider substitution."
|
|
102
|
+
},
|
|
94
103
|
{
|
|
95
104
|
"id": "axstack-research-x",
|
|
96
105
|
"name": "Axstack research X (unavailable)",
|
|
@@ -57,12 +57,12 @@
|
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
"id": "axstack-checker",
|
|
60
|
-
"name": "Axstack
|
|
61
|
-
"provider": "
|
|
60
|
+
"name": "Axstack tracker checker",
|
|
61
|
+
"provider": "antigravity",
|
|
62
62
|
"model": null,
|
|
63
63
|
"modeId": "full-access",
|
|
64
64
|
"thinkingOptionId": "low",
|
|
65
|
-
"notes": "Report-only Linear
|
|
65
|
+
"notes": "Report-only discrepancy checker for the selected external tracker (Linear or GitHub Issues). Never mutates the tracker; the driver independently verifies evidence before applying updates. Cheap report-only seat on Gemini Flash; launch by agent id antigravity."
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
68
|
"id": "axstack-research-requirements",
|
|
@@ -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-web-google",
|
|
96
|
+
"name": "Axstack research web (Google)",
|
|
97
|
+
"provider": "antigravity",
|
|
98
|
+
"model": null,
|
|
99
|
+
"modeId": "full-access",
|
|
100
|
+
"thinkingOptionId": "high",
|
|
101
|
+
"notes": "Google-Search-grounded web research branch on Gemini via the Antigravity CLI; launch by agent id antigravity; model selected by the TUI default (Gemini 3.8 Flash High observed 2026-09-19; ids from agy models: gemini-3.8-flash-{low,medium,high}, gemini-3.1-pro-{low,high}); cites URL + access date per claim and re-opens sources because the CLI's search citation format is undocumented; report-only."
|
|
102
|
+
},
|
|
94
103
|
{
|
|
95
104
|
"id": "axstack-research-x",
|
|
96
105
|
"name": "Axstack research X",
|
|
@@ -88,7 +88,7 @@ gate.
|
|
|
88
88
|
## Authority
|
|
89
89
|
|
|
90
90
|
- The driver owns run scope, cross-PR coordination, integration, and every
|
|
91
|
-
|
|
91
|
+
selected external-tracker mutation. The checker reports discrepancies only.
|
|
92
92
|
- One Orca execution host owns a run. There is no fixed active-PR count;
|
|
93
93
|
fanout is dependency- and capacity-driven within configured host resource and
|
|
94
94
|
spending limits. The driver reduces fanout when the run record shows rework,
|
|
@@ -6,8 +6,8 @@ binding state and receipts to exact revisions.
|
|
|
6
6
|
|
|
7
7
|
## Roster (compact)
|
|
8
8
|
|
|
9
|
-
- Driver: current chat; owns scope, decisions, cross-PR dependencies,
|
|
10
|
-
mutations,
|
|
9
|
+
- Driver: current chat; owns scope, decisions, cross-PR dependencies,
|
|
10
|
+
external-tracker mutations, integration.
|
|
11
11
|
- Owner: driver owns loop PRs; `axstack-owner` only for standalone watch/review
|
|
12
12
|
without live driver. It may perform PR-scoped publication within user authority. Human
|
|
13
13
|
merge is default.
|
|
@@ -23,19 +23,19 @@ binding state and receipts to exact revisions.
|
|
|
23
23
|
|
|
24
24
|
Prefer parallel independent bounded work; no redundant workers.
|
|
25
25
|
Per [standing contracts](contracts.md), fanout is dependency/capacity-driven
|
|
26
|
-
with no fixed count
|
|
26
|
+
with no fixed count within host/spending limits. [PR shape](pr-shape.md)
|
|
27
27
|
covers theme/size; queue via `gh stack`.
|
|
28
28
|
|
|
29
29
|
## Ownership
|
|
30
30
|
|
|
31
|
-
The PR owner remains accountable for candidate, fixes, evidence,
|
|
31
|
+
The PR owner remains accountable for candidate, fixes, evidence, monitoring;
|
|
32
32
|
peer code stays read-only. Missing or idle sessions never transfer ownership.
|
|
33
33
|
Owned implementation enters review through the revision-bound
|
|
34
34
|
[candidate-publication boundary](candidate-publication.md).
|
|
35
35
|
|
|
36
36
|
## Native handoff and resume
|
|
37
37
|
|
|
38
|
-
Preparation completion/watch expiry writes a
|
|
38
|
+
Preparation completion/watch expiry writes a record. Ordinary resume
|
|
39
39
|
reconciles it, keeps the current owner, and launches no native handoff.
|
|
40
40
|
Only an explicit user request to transfer ownership enters this branch.
|
|
41
41
|
|
|
@@ -45,7 +45,7 @@ Only an explicit user request to transfer ownership enters this branch.
|
|
|
45
45
|
2. Load the [Orca runtime boundary](orca-runtime.md), then follow its
|
|
46
46
|
version-matched runtime-owned handoff guidance. Never guess calls, paths,
|
|
47
47
|
roles, or fallback models. Guide discovery does not prove capability.
|
|
48
|
-
3. If the
|
|
48
|
+
3. If the native capability is missing, report the exact setup gap and
|
|
49
49
|
keep the current owner; no replacement or ownership transfer launches.
|
|
50
50
|
Read-only reconciliation may continue.
|
|
51
51
|
4. Record recipient/pending receipt before launch. If uncertain, reconcile the
|
|
@@ -59,7 +59,7 @@ receipts/timers, unresolved decisions, next action, and transfer ownership/gap.
|
|
|
59
59
|
|
|
60
60
|
## Receipts (bind each decision to evidence)
|
|
61
61
|
|
|
62
|
-
Store
|
|
62
|
+
Store receipt references, not raw output, in the [Run record](run-record.md).
|
|
63
63
|
|
|
64
64
|
- Session receipt: actual agent/workspace IDs, requested provider/model and
|
|
65
65
|
role; reuse on resume rather than spawn a replacement.
|
|
@@ -133,8 +133,8 @@ terminal; (2) compact record with counts and denominators—user
|
|
|
133
133
|
interventions/deviations from plan/repairs; (3) `axstack-auditor`: settle
|
|
134
134
|
non-zero/requested, else `counts zero`; an unavailable auditor leaves close-out
|
|
135
135
|
pending, never skipped silently; (4) release merged run worktrees and branches;
|
|
136
|
-
close
|
|
137
|
-
`Archived`—one each:
|
|
136
|
+
close selected external-tracker tickets when applicable; (5) mark the
|
|
137
|
+
[Run record](run-record.md) `Archived`. `Archived`—one each:
|
|
138
138
|
settlement receipt; compact record path; auditor decision plus settlement
|
|
139
139
|
receipt or `counts zero`; release and ticket receipts; archive timestamp.
|
|
140
140
|
`active`/receipt-incomplete record: close-out pending, never done. One-step
|
|
@@ -26,12 +26,12 @@ Read `roles.json` from the installed shared root `skills/axstack/`. The installe
|
|
|
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 25 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
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
|
|
34
|
+
`--model` override (today: `grok`, `antigravity`) record `model: null` with an explicit note and are
|
|
35
35
|
launchable; the run record snapshots the model the TUI reports. Validate provider, model, and effort
|
|
36
36
|
against the guide and actual launch capability. Stored `modeId` and other
|
|
37
37
|
permission fields are conservative intent, not proof of effective permission
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Shared routing (every owned phase loads this)
|
|
2
2
|
|
|
3
|
-
Choose
|
|
3
|
+
Choose a route; load only the phase and references needed next.
|
|
4
4
|
|
|
5
5
|
## Role routing
|
|
6
6
|
|
|
@@ -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 25 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
|
|
@@ -92,7 +92,7 @@ reason in the run record, or in the brief for tiny direct work.
|
|
|
92
92
|
bounded small feature is not substantial because it is labelled one.
|
|
93
93
|
Require an approved spec plus a ticket map tied to that exact spec
|
|
94
94
|
revision, with acceptance checks and dependencies in the explicitly selected
|
|
95
|
-
Markdown or Linear store. Prepare via `axstack-align` -> `axstack-spec`
|
|
95
|
+
Markdown, GitHub Issues, or Linear store. Prepare via `axstack-align` -> `axstack-spec`
|
|
96
96
|
(one approval) -> `axstack-tickets` -> handoff, then stop.
|
|
97
97
|
- **Small:** clear, bounded one-PR work. The driver captures the named
|
|
98
98
|
**small-change intent** from the current request or user-chosen existing
|
|
@@ -24,19 +24,23 @@ is part of research.
|
|
|
24
24
|
question in one run; separate only genuinely independent questions. Start
|
|
25
25
|
gathering evidence only after the target and stopping boundary are explicit.
|
|
26
26
|
|
|
27
|
-
2. **
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
2. **Fan out research:** A single factual lookup stays in the current chat.
|
|
28
|
+
Every other research run dispatches every configured research branch through
|
|
29
|
+
Orca: requirements (Claude), code (Codex), web (Claude), web-google
|
|
30
|
+
(Gemini/Antigravity, with Google Search built in), and X (Grok).
|
|
31
|
+
Give each branch one owner, allow no cross-reading, and require a cited note
|
|
32
|
+
with a URL and access date per claim; re-open sources and never trust a search
|
|
33
|
+
summary. The driver reconciles agreements/disagreements per claim.
|
|
34
|
+
An unconfigured or unavailable branch is recorded as absent, never substituted.
|
|
35
|
+
These routes are data presets, not proof of live readiness; before dispatch,
|
|
36
|
+
follow the [Orca runtime boundary](../axstack/references/orca-runtime.md),
|
|
37
|
+
confirm availability, and keep implementation out of every branch:
|
|
35
38
|
|
|
36
39
|
- `axstack-research-requirements`: requirements and intent.
|
|
37
40
|
- `axstack-research-code`: code behavior.
|
|
38
41
|
- `axstack-research-web`: web and external sources.
|
|
39
|
-
- `axstack-research-
|
|
42
|
+
- `axstack-research-web-google`: Google-Search-grounded web sources via Gemini/Antigravity.
|
|
43
|
+
- `axstack-research-x`: X (Twitter) posts and threads via Grok; cite post URLs and dates.
|
|
40
44
|
- `axstack-explore-codebase`: broad codebase mapping.
|
|
41
45
|
- `axstack-explore-execution`: execution and runtime traces.
|
|
42
46
|
|
|
@@ -15,15 +15,19 @@ and the lifecycle's [audit skill](../axstack-audit/SKILL.md) hook.
|
|
|
15
15
|
## Procedure
|
|
16
16
|
|
|
17
17
|
1. **Select the authoritative store.** Use a native Linear document by
|
|
18
|
-
default, or repository Markdown when the user explicitly
|
|
19
|
-
Name the store before writing; one recorded
|
|
20
|
-
fallback.
|
|
21
|
-
2. **Preflight
|
|
18
|
+
default, or GitHub Issues or repository Markdown when the user explicitly
|
|
19
|
+
selects either alternative. Name the store before writing; one recorded
|
|
20
|
+
choice leaves no implicit fallback.
|
|
21
|
+
2. **Preflight external-tracker access.** In Linear mode, verify that the current
|
|
22
22
|
session can read, create, and update documents before any document write.
|
|
23
23
|
Missing access is an actionable setup gap: report it and stop this phase
|
|
24
24
|
without writing or changing stores. Linear drafting starts only when all
|
|
25
25
|
three operations are available; a later tickets-phase check cannot replace
|
|
26
|
-
this one.
|
|
26
|
+
this one. In GitHub mode, use authenticated `gh` to verify the target
|
|
27
|
+
repository, issues enabled, and the current identity's issue read and write
|
|
28
|
+
access before any issue write. Record the repository and identity checked.
|
|
29
|
+
Missing access preserves the GitHub selection and stops the phase without
|
|
30
|
+
mutation or fallback. Markdown mode skips external access preflight.
|
|
27
31
|
3. **Draft with decision evidence.** Write observable acceptance criteria
|
|
28
32
|
and explicit exclusions in the selected store. First record the driver's
|
|
29
33
|
independent assessment, then load
|
|
@@ -42,12 +46,14 @@ and the lifecycle's [audit skill](../axstack-audit/SKILL.md) hook.
|
|
|
42
46
|
creates the execution baseline.
|
|
43
47
|
5. **Snapshot the baseline.** Record the approved revision identity and a
|
|
44
48
|
concise repository Markdown counterpart. In Linear mode, the native
|
|
45
|
-
document remains authoritative
|
|
46
|
-
|
|
49
|
+
document remains authoritative. In GitHub mode, the approved issue body is
|
|
50
|
+
authoritative and its GitHub issue URL plus SHA-256 body digest identifies
|
|
51
|
+
the exact approved revision. In Markdown mode, the agreed repository path does.
|
|
52
|
+
Use this shape:
|
|
47
53
|
|
|
48
54
|
```text
|
|
49
55
|
Approved spec: <title> rev <id> (<date>)
|
|
50
|
-
Authoritative store: <Linear document URL | repo Markdown path>
|
|
56
|
+
Authoritative store: <Linear document URL + revision | GitHub issue URL + SHA-256 body digest | repo Markdown path + ref>
|
|
51
57
|
Markdown counterpart: <repo path + ref>
|
|
52
58
|
Baseline preserved at: <ref>
|
|
53
59
|
Material change: <none | description + affected PRs/tasks + hold state>
|
|
@@ -20,20 +20,24 @@ an actual checker dispatch, not for ordinary mapping or state reconciliation.
|
|
|
20
20
|
|
|
21
21
|
1. **Pin scope and storage.** Confirm the approved spec identity before mapping.
|
|
22
22
|
Hold on unapproved or materially changed scope; a still-valid approval is
|
|
23
|
-
never repeated. Use the explicitly selected Markdown
|
|
24
|
-
the exact approved spec revision and selected store.
|
|
23
|
+
never repeated. Use the explicitly selected Markdown, GitHub Issues, or
|
|
24
|
+
Linear store. Record the exact approved spec revision and selected store.
|
|
25
25
|
|
|
26
26
|
2. **Preflight the selected store.** Markdown mode works independently. In
|
|
27
27
|
Linear mode, check the actual session's required MCP tools and document
|
|
28
28
|
access. Missing access is an actionable setup gap: preserve the selected
|
|
29
29
|
store, record the gap, and stop affected work. Proceed only with verified
|
|
30
|
-
access; a recorded gap never switches stores.
|
|
30
|
+
access; a recorded gap never switches stores. In GitHub mode, use
|
|
31
|
+
authenticated `gh` to verify the target repository and issue access for the
|
|
32
|
+
current identity before reading or writing the capability map. Preserve the
|
|
33
|
+
selected store and stop affected work on an access gap.
|
|
31
34
|
|
|
32
|
-
3. **Map capabilities to execution.** In Linear
|
|
33
|
-
capabilities; one capability may span several
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
3. **Map capabilities to execution.** In Linear and GitHub Issues,
|
|
36
|
+
issues represent user-visible capabilities; one capability may span several
|
|
37
|
+
tasks and PRs. GitHub capability issues link the approved spec issue and its
|
|
38
|
+
SHA-256 body digest. Keep detailed execution breakdowns in the repository.
|
|
39
|
+
For every capability, derive acceptance checks from the pinned spec and
|
|
40
|
+
identify internal tasks, dependencies, PR ownership, and worktrees. For each task the driver records
|
|
37
41
|
one theme and a coarse size estimate from the ownership, interface, and
|
|
38
42
|
dependency map. A task estimated in the exception band is assessed for a
|
|
39
43
|
split at mapping time and split where a green, atomic, reviewable split
|
|
@@ -44,14 +48,14 @@ an actual checker dispatch, not for ordinary mapping or state reconciliation.
|
|
|
44
48
|
These routine mapping and split choices are autonomous driver decisions
|
|
45
49
|
within the approved spec; size alone never requires user approval.
|
|
46
50
|
|
|
47
|
-
The driver performs every
|
|
48
|
-
changes and evidence to the driver.
|
|
51
|
+
The driver performs every mutation in the selected external tracker. Other
|
|
52
|
+
roles return proposed changes and evidence to the driver.
|
|
49
53
|
|
|
50
54
|
## Template: capability to task map
|
|
51
55
|
|
|
52
56
|
```text
|
|
53
57
|
Spec: <approved revision>
|
|
54
|
-
Capability: <Markdown ref or Linear issue URL> <title>
|
|
58
|
+
Capability: <Markdown ref, GitHub issue URL, or Linear issue URL> <title>
|
|
55
59
|
Internal task: <task> -> <PR owner> -> <worktree>
|
|
56
60
|
Theme: <one behavior or component>
|
|
57
61
|
Size est: <coarse band estimate>
|
|
@@ -60,24 +64,26 @@ Depends: <task IDs or none>
|
|
|
60
64
|
```
|
|
61
65
|
|
|
62
66
|
4. **Reconcile lifecycle state.** Compare each run capability with its required
|
|
63
|
-
PR merge evidence and acceptance outputs.
|
|
64
|
-
stays **In Review**; mark Done only after all required
|
|
65
|
-
|
|
66
|
-
|
|
67
|
+
PR merge evidence and acceptance outputs. In Linear or Markdown, a reviewed
|
|
68
|
+
but unmerged capability stays **In Review**; mark Done only after all required
|
|
69
|
+
PRs merge and its acceptance checks pass. A GitHub capability issue remains
|
|
70
|
+
open through review; close it only after all required PRs merge and its
|
|
71
|
+
acceptance checks pass. Resolve each observed mismatch with either a verified
|
|
72
|
+
driver-owned update or a drift report.
|
|
67
73
|
|
|
68
74
|
The checker reports run-scoped discrepancies with evidence and never mutates
|
|
69
|
-
|
|
70
|
-
update. Spec or acceptance changes and
|
|
71
|
-
routine sync repairs. With no
|
|
72
|
-
checker dispatch; the driver
|
|
73
|
-
a provider default.
|
|
75
|
+
the selected external tracker. The driver independently verifies that
|
|
76
|
+
evidence before applying an update. Spec or acceptance changes and
|
|
77
|
+
conflicting state are decisions, not routine sync repairs. With no
|
|
78
|
+
configured `axstack-checker` profile, hold checker dispatch; the driver
|
|
79
|
+
checks directly or records the gap. Never launch a provider default.
|
|
74
80
|
|
|
75
81
|
### Template: drift report
|
|
76
82
|
|
|
77
83
|
```text
|
|
78
84
|
Capability: <issue>
|
|
79
|
-
Observed: <
|
|
80
|
-
Recommendation: <move to In Review | other> (driver verifies first)
|
|
85
|
+
Observed: <selected tracker state> vs <PR merge SHAs/URLs + acceptance outputs>
|
|
86
|
+
Recommendation: <move to In Review | keep open | close | other> (driver verifies first)
|
|
81
87
|
```
|
|
82
88
|
|
|
83
89
|
5. **Return the mapping.** Report the pinned spec revision, selected store, map
|
package/src/roles.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const PROVIDER_BOUNDS = Object.freeze({
|
|
2
|
-
mixed: new Set(['codex', 'claude', 'grok']),
|
|
2
|
+
mixed: new Set(['codex', 'claude', 'grok', 'antigravity']),
|
|
3
3
|
'codex-only': new Set(['codex']),
|
|
4
4
|
'claude-only': new Set(['claude']),
|
|
5
5
|
});
|
|
@@ -63,10 +63,11 @@ export function assessRoleReadiness(roles, preset) {
|
|
|
63
63
|
const byId = new Map(roles.map((role) => [role.id, role]));
|
|
64
64
|
const gaps = [];
|
|
65
65
|
const isIntentionalAbsence = (role) => role.model === null && (
|
|
66
|
-
(preset === 'mixed' && role.id === 'axstack-checker') ||
|
|
66
|
+
(preset === 'mixed' && role.id === 'axstack-checker' && role.provider === 'antigravity') ||
|
|
67
|
+
(preset === 'mixed' && role.id === 'axstack-research-web-google' && role.provider === 'antigravity') ||
|
|
67
68
|
(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
|
+
(preset === 'codex-only' && ['axstack-advisor-fable', 'axstack-arena-judge-fable', 'axstack-research-web-google', 'axstack-research-x'].includes(role.id)) ||
|
|
70
|
+
(preset === 'claude-only' && ['axstack-advisor-astra', 'axstack-arena-judge-astra', 'axstack-research-web-google', 'axstack-research-x'].includes(role.id))
|
|
70
71
|
);
|
|
71
72
|
for (const role of roles) {
|
|
72
73
|
if (!bounds.has(role.provider)) {
|