axstack 0.52.1 → 0.53.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/workflows.md +23 -3
- package/package.json +1 -1
- package/profiles/presets/claude-only.json +9 -0
- package/profiles/presets/codex-only.json +11 -2
- package/profiles/presets/mixed.json +15 -6
- package/skills/axstack/references/role-roster.md +7 -2
- package/skills/axstack/references/routing.md +3 -1
- package/skills/axstack/references/ui-improvement-loop.md +75 -0
- package/skills/axstack/scripts/resolve-models.js +3 -0
- package/skills/axstack-audit/SKILL.md +1 -1
- package/skills/axstack-implement/SKILL.md +2 -0
- package/skills/axstack-improve/SKILL.md +20 -3
- package/skills/axstack-research/SKILL.md +5 -2
- package/skills/axstack-review/references/review-candidate.md +1 -1
- package/src/roles.js +6 -3
package/docs/workflows.md
CHANGED
|
@@ -137,12 +137,20 @@ Haiku 5.5 high, with class `haiku` and exact pin
|
|
|
137
137
|
holds that role without substitution. `codex-only` keeps its Codex
|
|
138
138
|
assignments for those roles. Scout adds a Luna xhigh codebase seat in `mixed`
|
|
139
139
|
and `codex-only`. In `claude-only`, Luna is intentionally absent.
|
|
140
|
+
For a needed web claim in mixed, pair `axstack-research-web` (Sonnet high)
|
|
141
|
+
with optional `axstack-research-web-sol` (Terra high), independently on the same
|
|
142
|
+
bounded brief without cross-reading. Both single-provider presets explicitly
|
|
143
|
+
mark the web pair absent and keep their base web researcher. Optional launch
|
|
144
|
+
failures retain fencing and the mixed research provider floor.
|
|
140
145
|
The mixed X route uses Grok.
|
|
141
146
|
The mixed `axstack-auditor` uses Haiku 5.5 xhigh, pinned to `claude-haiku-5-5`;
|
|
142
147
|
missing that ID or xhigh effort holds without substitution. The mixed
|
|
143
|
-
`axstack-explainer-review` uses Terra
|
|
148
|
+
`axstack-explainer-review` uses Terra high; `axstack-explainer` pins
|
|
144
149
|
`claude-sonnet-5-5` high with class `sonnet`. Both roles cover every Explain
|
|
145
|
-
visual, including chat Mermaid and anatomy figures.
|
|
150
|
+
visual, including chat Mermaid and anatomy figures. The existing mixed
|
|
151
|
+
`axstack-ui-verifier` resolves the Codex Terra class at high effort with
|
|
152
|
+
full-access mode; its read-only browser verification duties stay unchanged.
|
|
153
|
+
An unavailable model or effort holds without substitution.
|
|
146
154
|
In `claude-only`, `axstack-auditor` uses the Claude Sonnet class at high effort.
|
|
147
155
|
The `-sol` research-code and explore-execution seats use Terra high in `mixed`
|
|
148
156
|
and Sol high in `codex-only`; the auditor pair stays Sol high in both.
|
|
@@ -163,7 +171,7 @@ Peer roles use the stable IDs `axstack-reviewer-primary` and
|
|
|
163
171
|
`axstack-reviewer-peer`; their provider/class mappings come only from the
|
|
164
172
|
selected preset and the ordered reviewer table above. The mixed peer coordinator and review-lane binding
|
|
165
173
|
`axstack-owner` uses Sol high and never reviews. `axstack-reviewer-secondary`
|
|
166
|
-
uses Terra
|
|
174
|
+
uses Terra high for Sol-authored candidates in `codex-only`. It is used
|
|
167
175
|
in the authored mapping and, alongside `axstack-reviewer-primary`,
|
|
168
176
|
in codebase findings mode.
|
|
169
177
|
|
|
@@ -619,3 +627,15 @@ runtime receipts; evidence from one route does not establish support for all rol
|
|
|
619
627
|
Bun >=1.3.14, with no runtime dependencies. Workflow checks use
|
|
620
628
|
`bun test tests/workflows/`; the only approved Node built-ins are Bun-backed
|
|
621
629
|
`node:fs` and `node:fs/promises`.
|
|
630
|
+
|
|
631
|
+
## UI improvement
|
|
632
|
+
|
|
633
|
+
For “improve this screen”, Improve reports ranked defects for a named screen or
|
|
634
|
+
flow using Playwright evidence from the existing read-only UI verifier. Each
|
|
635
|
+
fix has observable acceptance criteria; missing renders remain unverified.
|
|
636
|
+
Authorized bounded changes enter Implement's [UI improvement loop](../skills/axstack/references/ui-improvement-loop.md):
|
|
637
|
+
one writer and hypothesis, a frozen capture protocol, fresh renders each attempt,
|
|
638
|
+
independent blind A/B, hard functional/accessibility/interaction gates and
|
|
639
|
+
keep/revert to the best-known candidate. Record a finite budget and plateau
|
|
640
|
+
threshold before editing; stop at goal, plateau or budget. Aesthetic scores
|
|
641
|
+
alone cannot establish success. Existing exact-revision delivery gates remain.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "axstack",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.53.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",
|
|
@@ -118,6 +118,15 @@
|
|
|
118
118
|
"notes": "Sonnet high research web reader: gathers primary-source facts efficiently. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
|
|
119
119
|
"modelClass": "sonnet"
|
|
120
120
|
},
|
|
121
|
+
{
|
|
122
|
+
"id": "axstack-research-web-sol",
|
|
123
|
+
"name": "Axstack research web Terra",
|
|
124
|
+
"provider": "claude",
|
|
125
|
+
"model": null,
|
|
126
|
+
"modeId": "bypassPermissions",
|
|
127
|
+
"thinkingOptionId": "high",
|
|
128
|
+
"notes": "Intentional single-provider absence: the mixed Terra web pair is unavailable in this preset. Record the absence and use the base web researcher without substitution."
|
|
129
|
+
},
|
|
121
130
|
{
|
|
122
131
|
"id": "axstack-research-x",
|
|
123
132
|
"name": "Axstack research X (unavailable)",
|
|
@@ -51,8 +51,8 @@
|
|
|
51
51
|
"name": "Axstack reviewer (secondary)",
|
|
52
52
|
"provider": "codex",
|
|
53
53
|
"modeId": "full-access",
|
|
54
|
-
"thinkingOptionId": "
|
|
55
|
-
"notes": "Terra
|
|
54
|
+
"thinkingOptionId": "high",
|
|
55
|
+
"notes": "Terra high authored reviewer for a Sol-authored candidate. Never author or owner; review exact SHA and base across all six angles and acceptance.",
|
|
56
56
|
"modelClass": "terra"
|
|
57
57
|
},
|
|
58
58
|
{
|
|
@@ -118,6 +118,15 @@
|
|
|
118
118
|
"notes": "Research web reader: gathers primary-source facts efficiently. Resolve the class from saved T3 capabilities at run start; rejection and unavailable settings hold without substitution.",
|
|
119
119
|
"modelClass": "sol"
|
|
120
120
|
},
|
|
121
|
+
{
|
|
122
|
+
"id": "axstack-research-web-sol",
|
|
123
|
+
"name": "Axstack research web Terra",
|
|
124
|
+
"provider": "codex",
|
|
125
|
+
"model": null,
|
|
126
|
+
"modeId": "full-access",
|
|
127
|
+
"thinkingOptionId": "high",
|
|
128
|
+
"notes": "Intentional single-provider absence: the mixed Terra web pair is unavailable in this preset. Record the absence and use the base web researcher without substitution."
|
|
129
|
+
},
|
|
121
130
|
{
|
|
122
131
|
"id": "axstack-research-x",
|
|
123
132
|
"name": "Axstack research X (unavailable)",
|
|
@@ -118,6 +118,15 @@
|
|
|
118
118
|
"notes": "Sonnet high research web reader: gathers primary-source facts efficiently. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
|
|
119
119
|
"modelClass": "sonnet"
|
|
120
120
|
},
|
|
121
|
+
{
|
|
122
|
+
"id": "axstack-research-web-sol",
|
|
123
|
+
"name": "Axstack research web Terra",
|
|
124
|
+
"provider": "codex",
|
|
125
|
+
"modeId": "full-access",
|
|
126
|
+
"thinkingOptionId": "high",
|
|
127
|
+
"notes": "Independent Terra high web researcher on the same bounded brief as the Sonnet base seat without cross-reading. Cites primary sources for driver reconciliation per claim; optional seat failures follow the role roster.",
|
|
128
|
+
"modelClass": "terra"
|
|
129
|
+
},
|
|
121
130
|
{
|
|
122
131
|
"id": "axstack-research-x",
|
|
123
132
|
"name": "Axstack research X",
|
|
@@ -142,18 +151,18 @@
|
|
|
142
151
|
"name": "Axstack explainer reviewer",
|
|
143
152
|
"provider": "codex",
|
|
144
153
|
"modeId": "full-access",
|
|
145
|
-
"thinkingOptionId": "
|
|
146
|
-
"notes": "Independent Terra
|
|
154
|
+
"thinkingOptionId": "high",
|
|
155
|
+
"notes": "Independent Terra high explanation reviewer: always reviews every visual. Reviews consequential or complex driver-written prose or on request. Checks the exact artifact for text and source fidelity. The browser interaction pass belongs to axstack-ui-verifier. Any artifact change invalidates its review. Resolve the class from saved T3 capabilities at run start; rejection and unavailable settings hold without substitution. Design review follows design.md hard rules and FRONTEND-DESIGN.md (calibration defaults, restraint and quality floor) for every inline HTML page and every Publish article adaptation. For inline pages the reviewer itself renders exact bytes with html_preview at 728px dark and 360px light as a non-publishing self-check. For Publish the reviewer opens axstack-ui-verifier PNGs at 728px dark and 360px light plus 390px mobile and 1440px desktop, covering all four widths in both themes with paths bound to the artifact SHA-256 and recorded before review. Inspect the 1440px desktop screenshot for balanced composition, intentional horizontal margins, bounded prose measure, typography, section spacing and chart legibility. Inspect the 360px and 390px mobile screenshots for gutters, readable text and chart labels. A page failing to look decent is a blocking design finding, repaired by the same author within the two-round visual limit. If only design findings remain after the second round, deliver the visual with each finding named. Never describe a remaining finding as fixed or a clean pass. Apply Delivery's normal holds for other failures and unknown renders. Chat Mermaid and anatomy keep their existing review.",
|
|
147
156
|
"modelClass": "terra"
|
|
148
157
|
},
|
|
149
158
|
{
|
|
150
159
|
"id": "axstack-ui-verifier",
|
|
151
160
|
"name": "Axstack UI verifier",
|
|
152
|
-
"provider": "
|
|
153
|
-
"modeId": "
|
|
161
|
+
"provider": "codex",
|
|
162
|
+
"modeId": "full-access",
|
|
154
163
|
"thinkingOptionId": "high",
|
|
155
|
-
"notes": "Read-only UI verifier: uses the configured verifier browser tools against the given build, URL, or artifact; captures screenshots, interactions, accessibility, desktop/mobile, and reduced-motion evidence in the dispatch evidence folder; returns a verdict with evidence paths. Performs the inline page interaction pass for every interactive page, bound to the exact bytes and SHA-256. Never edits source.
|
|
156
|
-
"modelClass": "
|
|
164
|
+
"notes": "Read-only UI verifier: uses the configured verifier browser tools against the given build, URL, or artifact; captures screenshots, interactions, accessibility, desktop/mobile, and reduced-motion evidence in the dispatch evidence folder; returns a verdict with evidence paths. Performs the inline page interaction pass for every interactive page, bound to the exact bytes and SHA-256. Never edits source. Resolve the Terra class from saved T3 capabilities at run start; rejection and unavailable settings hold without substitution.",
|
|
165
|
+
"modelClass": "terra"
|
|
157
166
|
},
|
|
158
167
|
{
|
|
159
168
|
"id": "axstack-explore-codebase",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
| --- | --- | --- |
|
|
16
16
|
| `mixed` | `codex/sol` | `axstack-reviewer-secondary` (`claude/opus` high) |
|
|
17
17
|
| `mixed` | `claude/opus` | `axstack-reviewer-primary` (`codex/sol` high) |
|
|
18
|
-
| `codex-only` | `codex/sol` | `axstack-reviewer-secondary` (`codex/terra`
|
|
18
|
+
| `codex-only` | `codex/sol` | `axstack-reviewer-secondary` (`codex/terra` high) |
|
|
19
19
|
| `claude-only` | `claude/opus` | `axstack-reviewer-secondary` (`claude/sonnet` high) |
|
|
20
20
|
- `axstack-advisor-astra`/`axstack-advisor-opus` advise and author candidates;
|
|
21
21
|
`axstack-arena-candidate-grok` adds a family.
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
`axstack-auditor` audits; `axstack-checker` reports discrepancies.
|
|
25
25
|
- `axstack-explainer` authors every visual Explain delivers, including pages,
|
|
26
26
|
chat Mermaid and anatomy figures; mixed pins Sonnet 5.5 high exactly.
|
|
27
|
-
- `axstack-explainer-review` always reviews every visual; `codex/terra`
|
|
27
|
+
- `axstack-explainer-review` always reviews every visual; `codex/terra` high in mixed.
|
|
28
28
|
Consequential or complex driver-written prose keeps its review rule; every
|
|
29
29
|
whiteboard defense is consequential, in chat too.
|
|
30
30
|
- `axstack-diligence`: read-only [diligence checks](diligence.md) for every authored PR
|
|
@@ -52,8 +52,13 @@
|
|
|
52
52
|
independently from its base seat on the same bounded brief without
|
|
53
53
|
cross-reading. The driver reconciles findings per claim, never averages.
|
|
54
54
|
Record intentional absence and continue with Sonnet alone.
|
|
55
|
+
- Web pair `axstack-research-web`/`axstack-research-web-sol`: Sonnet high +
|
|
56
|
+
Terra high in mixed, independently on the same bounded brief without
|
|
57
|
+
cross-reading, with driver reconciliation per claim. The `-sol` web seat is
|
|
58
|
+
intentionally absent in both single-provider presets; use the base seat alone.
|
|
55
59
|
- Optional seats: `axstack-arena-candidate-grok`,
|
|
56
60
|
`axstack-research-x`, `axstack-checker`, `axstack-research-code-sol`,
|
|
61
|
+
`axstack-research-web-sol`,
|
|
57
62
|
`axstack-explore-execution-sol`, `axstack-auditor-sol`.
|
|
58
63
|
Always dispatch optional seats when configured and available, except research
|
|
59
64
|
branches, which follow [Research step 2](../../axstack-research/SKILL.md#procedure) sizing.
|
|
@@ -32,6 +32,8 @@ provider's first listed model from saved capabilities and records its exact ID.
|
|
|
32
32
|
A Codex or Claude role with neither model nor class is an intentional absence
|
|
33
33
|
and holds.
|
|
34
34
|
Resume must reuse the saved capabilities and role snapshot with no re-resolution; changes require the user’s explicit decision.
|
|
35
|
+
Every Terra class or explicit Terra model pin requires exactly high effort.
|
|
36
|
+
Missing high effort holds without substitution or silently coercing the request.
|
|
35
37
|
An unavailable provider, model, role, mode or effort holds that role with no substitution.
|
|
36
38
|
Preset changes apply to new runs only; an active run keeps its snapshot.
|
|
37
39
|
Replacing a session needs an explicit user decision and revalidation.
|
|
@@ -68,7 +70,7 @@ step (3) for user routing: no substitution or same-provider review.
|
|
|
68
70
|
- A bug, failing test, regression, or wrong behavior, red loop wanted ->
|
|
69
71
|
`axstack-debug`: diagnose, escalate via adviser-directed investigators, hand
|
|
70
72
|
off a classified repair (explain: how; debug: what's wrong).
|
|
71
|
-
- Code quality/refactor discovery -> `axstack-improve`: rank bounded
|
|
73
|
+
- Code quality/refactor or named UI screen/flow discovery -> `axstack-improve`: rank bounded
|
|
72
74
|
candidates with evidence; report only, no source edits.
|
|
73
75
|
- Repeated mistakes need evidence and stronger checks -> `axstack-correct`:
|
|
74
76
|
user-invoked, report only.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Bounded UI improvement
|
|
2
|
+
|
|
3
|
+
Use this loop only for authorized UI changes to the named screen or flow.
|
|
4
|
+
Improve owns report-only discovery; Implement owns changes. Reuse the existing
|
|
5
|
+
PR author, `axstack-ui-verifier` and independent authored reviewer from the
|
|
6
|
+
run's role snapshot; create no new roles. Follow [UI verification](ui-verification.md)
|
|
7
|
+
for read-only Playwright capture in the verifier's isolated checkout and private
|
|
8
|
+
evidence folder. The author never reviews its own change.
|
|
9
|
+
|
|
10
|
+
## Establish the comparison
|
|
11
|
+
|
|
12
|
+
Before the first edit, anchor task and visual goals to acceptance criteria.
|
|
13
|
+
Use the discovery's ranked defects: for example, the primary action is visible
|
|
14
|
+
at the agreed mobile width, labels remain legible in both themes, and the named
|
|
15
|
+
keyboard task completes. Describe intended users and the visual direction in
|
|
16
|
+
concrete terms so preference has an inspectable basis.
|
|
17
|
+
Before the first edit, record a finite attempt and time budget plus a plateau
|
|
18
|
+
threshold (consecutive attempts without a supported improvement).
|
|
19
|
+
Freeze the capture protocol with routes, fixtures, viewports, themes and states.
|
|
20
|
+
Include browser/build settings, data and authentication fixtures, font loading,
|
|
21
|
+
animation settling, scroll position, and the interactions used to reach each
|
|
22
|
+
state. Freeze the procedure, not a candidate image. Keep comparable evidence
|
|
23
|
+
for loading, empty, error and populated states where relevant.
|
|
24
|
+
Capture the baseline through the verifier before editing.
|
|
25
|
+
Preserve the baseline as the best-known revision with its evidence.
|
|
26
|
+
When the protocol changes, recapture both sides before comparison and record why.
|
|
27
|
+
|
|
28
|
+
## Attempt, compare, decide
|
|
29
|
+
|
|
30
|
+
Use one writer and one hypothesis for each attempt.
|
|
31
|
+
Tie the small change to one ranked defect and its acceptance checks; keep
|
|
32
|
+
unrelated cleanup outside the attempt. Apply Implement's normal TDD path.
|
|
33
|
+
For a visual-only attempt, red requires axstack-ui-verifier to execute the
|
|
34
|
+
anchored acceptance check against best-known before the edit and record its
|
|
35
|
+
failure with capture evidence. Never count a screenshot alone as behavioral red.
|
|
36
|
+
Never count a subjective score as behavioral red.
|
|
37
|
+
Green requires the verifier's fresh candidate to pass that same acceptance
|
|
38
|
+
check plus all hard gates. Observable repository behavior tests remain required
|
|
39
|
+
where applicable. Browser checks, including red and green, remain delegated to
|
|
40
|
+
axstack-ui-verifier. If a meaningful test-first check is unavailable, hold
|
|
41
|
+
dependent implementation for a scoped decision. Never count retrospective
|
|
42
|
+
checks as red.
|
|
43
|
+
Each attempt requires fresh renders of best-known and candidate exact revisions
|
|
44
|
+
under the same protocol. Bind screenshots and interaction logs to revision,
|
|
45
|
+
route, fixture, viewport, theme and state in the private evidence manifest.
|
|
46
|
+
A missing or failed capture or uncertain comparison cannot justify a win.
|
|
47
|
+
|
|
48
|
+
Give an independent reviewer a blind A/B with random labels and the anchored
|
|
49
|
+
criteria. The driver retains the label-to-revision mapping separately from the
|
|
50
|
+
review packet. Hide author identity, change narrative, hypothesis and expected
|
|
51
|
+
winner; supply matching task context and state coverage for both sides. Review
|
|
52
|
+
all captures and relevant interaction evidence, with findings tied to specific
|
|
53
|
+
regions or actions. Record preference, reasons, regressions and uncertainty
|
|
54
|
+
before revealing the mapping; never treat the author's preference as review.
|
|
55
|
+
|
|
56
|
+
Functional, accessibility and interaction hard gates must pass before any keep
|
|
57
|
+
decision. Verify the named task, keyboard/focus behavior, accessible names,
|
|
58
|
+
contrast, responsive layout, reduced motion and affected tests as applicable;
|
|
59
|
+
an unrun applicable gate remains unknown and prevents keeping the attempt.
|
|
60
|
+
Keep only an evidence-backed improvement against the criteria, otherwise revert
|
|
61
|
+
to best-known. Record the decision, rejected hypothesis and exact resulting
|
|
62
|
+
revision; preserve each accepted best-known candidate and its evidence.
|
|
63
|
+
Resolve disagreement with specific evidence and recapture within budget, then
|
|
64
|
+
retain best-known if unresolved. Recheck the disputed state with a fresh blind
|
|
65
|
+
independent comparison; ties and unresolved tradeoffs are inconclusive, never
|
|
66
|
+
a forced win or averaged vote. Failed attempts consume the budget too.
|
|
67
|
+
Never use a numeric aesthetic score as the sole success criterion.
|
|
68
|
+
|
|
69
|
+
Stop at the goal, budget exhaustion or plateau and report unverified boundaries.
|
|
70
|
+
Return the best-known revision, attempt/keep/revert ledger, evidence paths,
|
|
71
|
+
criteria met, remaining defects and stop reason. Budget exhaustion may leave
|
|
72
|
+
the UI goal unmet; say so. The driver can finish an authorized bounded run
|
|
73
|
+
without a new human taste approval. Explain's two-round visual limit does not
|
|
74
|
+
apply to this loop. Existing exact-revision review, verification and merge gates
|
|
75
|
+
remain required; this comparison grants no publication or merge authority.
|
|
@@ -87,6 +87,9 @@ try {
|
|
|
87
87
|
const catalog = JSON.parse(readFileSync(path, 'utf8'));
|
|
88
88
|
const instance = providerFrom(catalog, provider);
|
|
89
89
|
const model = modelFrom(instance.models, options);
|
|
90
|
+
if ((options.class === 'terra' || /^gpt-\d+(?:\.\d+)*-terra$/.test(model.id)) && effort !== 'high') {
|
|
91
|
+
throw new Error('Terra requires exactly high effort');
|
|
92
|
+
}
|
|
90
93
|
const effortOptions = model.options.filter((option) => option.id === effortIds[provider]);
|
|
91
94
|
if (effortOptions.length !== 1 || !effortOptions[0].options?.some((value) => value.id === effort)
|
|
92
95
|
|| (provider === 'grok' && effort === 'max')) {
|
|
@@ -109,7 +109,7 @@ counts with denominators plus the evidence behind the count:
|
|
|
109
109
|
| --- | --- | --- |
|
|
110
110
|
| `mixed` | `codex/sol` | `axstack-reviewer-secondary` (`claude/opus` high) |
|
|
111
111
|
| `mixed` | `claude/opus` | `axstack-reviewer-primary` (`codex/sol` high) |
|
|
112
|
-
| `codex-only` | `codex/sol` | `axstack-reviewer-secondary` (`codex/terra`
|
|
112
|
+
| `codex-only` | `codex/sol` | `axstack-reviewer-secondary` (`codex/terra` high) |
|
|
113
113
|
| `claude-only` | `claude/opus` | `axstack-reviewer-secondary` (`claude/sonnet` high) |
|
|
114
114
|
- Simplification applicability determinations evidenced / total candidate diffs,
|
|
115
115
|
and complete simplification receipts / total candidates, broken down as
|
|
@@ -84,6 +84,8 @@ Size alone never requires user approval.
|
|
|
84
84
|
|
|
85
85
|
## 3. Establish test-first evidence
|
|
86
86
|
|
|
87
|
+
For authorized UI improvement work, load [UI improvement loop](../axstack/references/ui-improvement-loop.md).
|
|
88
|
+
|
|
87
89
|
For performance work only, load [Performance loop](../axstack/references/perf-loop.md).
|
|
88
90
|
For performance work, run the change loop defined in [Performance loop](../axstack/references/perf-loop.md).
|
|
89
91
|
For an accepted optimization scope without new behavior explicitly marked structure-preserving, use the structure-preserving path with the same checks green before and after plus the measured delta.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: axstack-improve
|
|
3
|
-
description: When assessing codebase quality or planning a refactor, use axstack-improve to
|
|
3
|
+
description: When assessing codebase quality, improving a named screen or flow, or planning a refactor, use axstack-improve to report evidenced improvements and prepare bounded changes.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Improve
|
|
@@ -9,8 +9,8 @@ On driver entry, sweep under [Workspace hygiene](../axstack/references/workspace
|
|
|
9
9
|
For every dispatch brief, name its private `<run dir>/evidence/<dispatch>/` folder.
|
|
10
10
|
|
|
11
11
|
Find a small set of worthwhile maintainability, architecture, or testability
|
|
12
|
-
improvements from inspected code. This is a direct discovery
|
|
13
|
-
spec or tickets and writes only the requested report. No worthwhile
|
|
12
|
+
improvements from inspected code or rendered UI. This is a direct discovery
|
|
13
|
+
route: it needs no spec or tickets and writes only the requested report. No worthwhile
|
|
14
14
|
improvement is a valid result.
|
|
15
15
|
|
|
16
16
|
Before acting, load [Standing contracts](../axstack/references/contracts.md),
|
|
@@ -50,6 +50,23 @@ For performance work, rank candidates in mantra order.
|
|
|
50
50
|
4. Apply KISS, YAGNI, and SOLID as judgment, not a mandatory scorecard. Use no
|
|
51
51
|
invented metrics and no arbitrary complexity targets.
|
|
52
52
|
|
|
53
|
+
### UI discovery
|
|
54
|
+
|
|
55
|
+
UI discovery for a named screen or flow remains report-only.
|
|
56
|
+
Record the user's task, exact build/revision, inspected route and relevant
|
|
57
|
+
fixtures, themes, viewports and interaction states before assessing it.
|
|
58
|
+
UI discovery requires Playwright render evidence from `axstack-ui-verifier`
|
|
59
|
+
at the exact revision under [UI verification](../axstack/references/ui-verification.md).
|
|
60
|
+
Rank UI defects in hierarchy, typography, spacing, contrast, responsive layout
|
|
61
|
+
and interaction with evidence and acceptance criteria. Link each defect to a
|
|
62
|
+
capture or observed action, explain user impact, and rank by task blockage,
|
|
63
|
+
severity and likely benefit relative to effort; separate observation from preference.
|
|
64
|
+
UI discovery labels a missing or failed capture unverified.
|
|
65
|
+
Return the ranked report and capture boundaries, including a no-change result
|
|
66
|
+
when warranted. Clear authorized UI work routes to Implement with its accepted
|
|
67
|
+
small-change intent; selection alone retains section 3's action boundary.
|
|
68
|
+
For the execution handoff, read [UI improvement loop](../axstack/references/ui-improvement-loop.md).
|
|
69
|
+
|
|
53
70
|
### Test-audit lens
|
|
54
71
|
|
|
55
72
|
For a test audit, load [Test value](../axstack/references/test-value.md) and
|
|
@@ -37,7 +37,9 @@ is part of research.
|
|
|
37
37
|
For each needed source class, retain two isolated branches where configured.
|
|
38
38
|
In mixed, each needed source class retains branches from different providers.
|
|
39
39
|
The code pair is `axstack-research-code` +
|
|
40
|
-
`axstack-research-code-sol
|
|
40
|
+
`axstack-research-code-sol`.
|
|
41
|
+
In mixed the web pair is `axstack-research-web` +
|
|
42
|
+
`axstack-research-web-sol` (Terra high);
|
|
41
43
|
the execution pair is `axstack-explore-execution` +
|
|
42
44
|
`axstack-explore-execution-sol`. Requirements, code, and web use Sonnet high
|
|
43
45
|
in mixed/claude-only and Codex in codex-only; X uses Grok.
|
|
@@ -57,13 +59,14 @@ is part of research.
|
|
|
57
59
|
- `axstack-research-code`: code behavior.
|
|
58
60
|
- `axstack-research-code-sol`: independent code investigation (Terra high in mixed, Sol high in codex-only).
|
|
59
61
|
- `axstack-research-web`: web and external sources.
|
|
62
|
+
- `axstack-research-web-sol`: independent Terra high web reader in mixed; intentionally absent in both single-provider presets.
|
|
60
63
|
- `axstack-research-x`: X (Twitter) posts and threads via Grok; cite post URLs and dates.
|
|
61
64
|
- For broad codebase mapping, use `axstack-scout`.
|
|
62
65
|
Never dispatch `axstack-explore-codebase` directly for broad mapping.
|
|
63
66
|
- `axstack-explore-execution`: execution and runtime traces.
|
|
64
67
|
- `axstack-explore-execution-sol`: independent execution investigation (Terra high in mixed, Sol high in codex-only).
|
|
65
68
|
|
|
66
|
-
When dispatching `axstack-research-code` or `axstack-explore-execution`,
|
|
69
|
+
When dispatching `axstack-research-web`, `axstack-research-code` or `axstack-explore-execution`,
|
|
67
70
|
dispatch its `-sol` pair independently on the same bounded brief without
|
|
68
71
|
cross-reading. The driver reconciles agreement and disagreement per claim,
|
|
69
72
|
never averaging findings. Record an intentionally absent pair and proceed
|
|
@@ -36,7 +36,7 @@ This section applies to peer and authored PR modes.
|
|
|
36
36
|
| --- | --- | --- |
|
|
37
37
|
| `mixed` | `codex/sol` | `axstack-reviewer-secondary` (`claude/opus` high) |
|
|
38
38
|
| `mixed` | `claude/opus` | `axstack-reviewer-primary` (`codex/sol` high) |
|
|
39
|
-
| `codex-only` | `codex/sol` | `axstack-reviewer-secondary` (`codex/terra`
|
|
39
|
+
| `codex-only` | `codex/sol` | `axstack-reviewer-secondary` (`codex/terra` high) |
|
|
40
40
|
| `claude-only` | `claude/opus` | `axstack-reviewer-secondary` (`claude/sonnet` high) |
|
|
41
41
|
|
|
42
42
|
The diligence receipt is separate and does not count as a reviewer receipt.
|
package/src/roles.js
CHANGED
|
@@ -22,7 +22,7 @@ const AUTHORED_ROUTES = Object.freeze({
|
|
|
22
22
|
'claude/opus': ['axstack-reviewer-primary', 'codex/sol', 'high'],
|
|
23
23
|
},
|
|
24
24
|
'codex-only': {
|
|
25
|
-
'codex/sol': ['axstack-reviewer-secondary', 'codex/terra', '
|
|
25
|
+
'codex/sol': ['axstack-reviewer-secondary', 'codex/terra', 'high'],
|
|
26
26
|
},
|
|
27
27
|
'claude-only': {
|
|
28
28
|
'claude/opus': ['axstack-reviewer-secondary', 'claude/sonnet', 'high'],
|
|
@@ -66,6 +66,9 @@ export function assertBundleRoles(roles) {
|
|
|
66
66
|
if (hasClass && typeof role.model === 'string' && deriveModelClass(role.model) !== role.modelClass) {
|
|
67
67
|
throw new Error(`invalid bundle roles: ${role.id} model pin does not match model class`);
|
|
68
68
|
}
|
|
69
|
+
if (roleClass(role) === 'terra' && role.thinkingOptionId !== 'high') {
|
|
70
|
+
throw new Error(`invalid bundle roles: ${role.id} Terra requires exactly high effort`);
|
|
71
|
+
}
|
|
69
72
|
for (const field of ['icon', 'color', 'modeId', 'thinkingOptionId', 'notes']) {
|
|
70
73
|
if (role[field] !== undefined && typeof role[field] !== 'string') {
|
|
71
74
|
throw new Error(`invalid bundle roles: ${field} must be a string when present`);
|
|
@@ -89,8 +92,8 @@ export function assessRoleReadiness(roles, preset) {
|
|
|
89
92
|
const isIntentionalAbsence = (role) => role.model === null && (
|
|
90
93
|
(preset === 'mixed' && role.id === 'axstack-research-x' && role.provider === 'grok') ||
|
|
91
94
|
(preset === 'mixed' && role.id === 'axstack-arena-candidate-grok' && role.provider === 'grok') ||
|
|
92
|
-
(preset === 'codex-only' && ['axstack-advisor-opus', 'axstack-escalation-fable', 'axstack-arena-judge-opus', 'axstack-research-x', 'axstack-arena-candidate-grok'].includes(role.id)) ||
|
|
93
|
-
(preset === 'claude-only' && ['axstack-advisor-astra', 'axstack-arena-judge-astra', 'axstack-research-x', 'axstack-arena-candidate-grok', 'axstack-auditor-sol', 'axstack-research-code-sol', 'axstack-explore-execution-sol', 'axstack-explore-codebase-luna'].includes(role.id))
|
|
95
|
+
(preset === 'codex-only' && ['axstack-advisor-opus', 'axstack-escalation-fable', 'axstack-arena-judge-opus', 'axstack-research-x', 'axstack-arena-candidate-grok', 'axstack-research-web-sol'].includes(role.id)) ||
|
|
96
|
+
(preset === 'claude-only' && ['axstack-advisor-astra', 'axstack-arena-judge-astra', 'axstack-research-x', 'axstack-arena-candidate-grok', 'axstack-auditor-sol', 'axstack-research-code-sol', 'axstack-explore-execution-sol', 'axstack-explore-codebase-luna', 'axstack-research-web-sol'].includes(role.id))
|
|
94
97
|
);
|
|
95
98
|
for (const role of roles) {
|
|
96
99
|
if (!bounds.has(role.provider)) {
|