axstack 0.36.0 → 0.37.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 +10 -6
- package/bin/axstack.js +4 -18
- package/docs/getting-started.md +6 -6
- package/docs/host-operations.md +77 -5
- package/docs/installation.md +25 -43
- package/docs/workflows.md +12 -9
- package/package.json +1 -1
- package/profiles/presets/claude-only.json +3 -3
- package/profiles/presets/codex-only.json +3 -3
- package/profiles/presets/mixed.json +5 -4
- package/skills/axstack/references/role-roster.md +5 -3
- package/skills/axstack/references/ui-verification.md +6 -10
- package/skills/axstack/scripts/single-server.js +164 -0
- package/skills/axstack/systemd/axstack-single-server.service +8 -0
- package/skills/axstack/systemd/axstack-single-server.timer +10 -0
- package/skills/axstack-anatomy/ANATOMY.md +172 -0
- package/skills/axstack-anatomy/CHANGELOG.md +70 -0
- package/skills/axstack-anatomy/LICENSE +21 -0
- package/skills/axstack-anatomy/PROVENANCE.md +21 -0
- package/skills/axstack-anatomy/README.md +316 -0
- package/skills/axstack-anatomy/SKILL.md +74 -0
- package/skills/axstack-anatomy/SOURCE-PROOF.json +107 -0
- package/skills/axstack-anatomy/examples/arcade-cabinet/arcade-cabinet.css +44 -0
- package/skills/axstack-anatomy/examples/arcade-cabinet/build.mjs +714 -0
- package/skills/axstack-anatomy/examples/arcade-cabinet/live.js +597 -0
- package/skills/axstack-anatomy/examples/arcade-cabinet/parts.mjs +89 -0
- package/skills/axstack-anatomy/examples/arcade-cabinet/screen.mjs +114 -0
- package/skills/axstack-anatomy/examples/desk-computer/build.mjs +435 -0
- package/skills/axstack-anatomy/examples/dial-indicator/build.mjs +275 -0
- package/skills/axstack-anatomy/examples/raptor-engine/build.mjs +938 -0
- package/skills/axstack-anatomy/examples/raptor-engine/live.js +907 -0
- package/skills/axstack-anatomy/examples/raptor-engine/raptor.css +359 -0
- package/skills/axstack-anatomy/examples/ripple-tank/build.mjs +558 -0
- package/skills/axstack-anatomy/examples/ripple-tank/live.js +579 -0
- package/skills/axstack-anatomy/examples/ripple-tank/model.mjs +131 -0
- package/skills/axstack-anatomy/examples/ripple-tank/ripple.css +103 -0
- package/skills/axstack-anatomy/examples/spot-plate/art.tsx +110 -0
- package/skills/axstack-anatomy/examples/spot-plate/drops.ts +541 -0
- package/skills/axstack-anatomy/examples/spot-plate/fan.ts +84 -0
- package/skills/axstack-anatomy/examples/spot-plate/figure.tsx +25 -0
- package/skills/axstack-anatomy/examples/spot-plate/geometry.ts +280 -0
- package/skills/axstack-anatomy/examples/spot-plate/live.tsx +339 -0
- package/skills/axstack-anatomy/examples/spot-plate/rig.ts +230 -0
- package/skills/axstack-anatomy/examples/spot-plate/spot-plate.css +92 -0
- package/skills/axstack-anatomy/examples/test-rig/art.tsx +196 -0
- package/skills/axstack-anatomy/examples/test-rig/figure.tsx +23 -0
- package/skills/axstack-anatomy/examples/test-rig/geometry.ts +305 -0
- package/skills/axstack-anatomy/examples/test-rig/live.tsx +511 -0
- package/skills/axstack-anatomy/examples/test-rig/pose.ts +107 -0
- package/skills/axstack-anatomy/examples/test-rig/rig.ts +170 -0
- package/skills/axstack-anatomy/examples/test-rig/stretch.css +80 -0
- package/skills/axstack-anatomy/examples/test-rig/view.ts +99 -0
- package/skills/axstack-anatomy/examples/turning-dial/build.mjs +479 -0
- package/skills/axstack-anatomy/examples/turning-dial/dial.css +10 -0
- package/skills/axstack-anatomy/examples/turning-dial/live.js +342 -0
- package/skills/axstack-anatomy/examples/turning-dial/stress.mjs +269 -0
- package/skills/axstack-anatomy/kit/audit.mjs +1913 -0
- package/skills/axstack-anatomy/kit/canvas-painter.mjs +722 -0
- package/skills/axstack-anatomy/kit/gl-shared.mjs +184 -0
- package/skills/axstack-anatomy/kit/gl.mjs +184 -0
- package/skills/axstack-anatomy/kit/iso-kit.mjs +674 -0
- package/skills/axstack-anatomy/kit/iso-kit.ts +842 -0
- package/skills/axstack-anatomy/kit/iso.css +106 -0
- package/skills/axstack-anatomy/kit/lathe.mjs +1184 -0
- package/skills/axstack-anatomy/kit/react/draw.tsx +205 -0
- package/skills/axstack-anatomy/kit/react/live.tsx +140 -0
- package/skills/axstack-anatomy/kit/tube.mjs +306 -0
- package/skills/axstack-anatomy/kit/turn-audit.mjs +1096 -0
- package/skills/axstack-anatomy/kit/turn-build.mjs +1355 -0
- package/skills/axstack-anatomy/kit/turn-fixed.mjs +3800 -0
- package/skills/axstack-anatomy/kit/turn.mjs +3610 -0
- package/skills/axstack-anatomy/references/3d.md +352 -0
- package/skills/axstack-anatomy/references/craft.md +325 -0
- package/skills/axstack-anatomy/references/kit.md +419 -0
- package/skills/axstack-anatomy/references/motion.md +165 -0
- package/skills/axstack-anatomy/references/react.md +42 -0
- package/skills/axstack-anatomy/references/verify.md +351 -0
- package/skills/axstack-anatomy/references/walkthrough.md +75 -0
- package/skills/axstack-anatomy/references/webgl.md +473 -0
- package/skills/axstack-anatomy/scripts/audit-affine-bounds.test.mjs +54 -0
- package/skills/axstack-anatomy/scripts/audit-cache.test.mjs +37 -0
- package/skills/axstack-anatomy/scripts/audit-clearance-envelope.test.mjs +39 -0
- package/skills/axstack-anatomy/scripts/audit-empty-clipping.test.mjs +38 -0
- package/skills/axstack-anatomy/scripts/audit-order-convergence.test.mjs +55 -0
- package/skills/axstack-anatomy/scripts/audit-path-origin.test.mjs +26 -0
- package/skills/axstack-anatomy/scripts/audit-profile.test.mjs +41 -0
- package/skills/axstack-anatomy/scripts/audit-projection.test.mjs +36 -0
- package/skills/axstack-anatomy/scripts/audit-slide-clearance.test.mjs +58 -0
- package/skills/axstack-anatomy/scripts/audit-svg-attributes.test.mjs +46 -0
- package/skills/axstack-anatomy/scripts/audit-taper.test.mjs +29 -0
- package/skills/axstack-anatomy/scripts/capture-selector.test.mjs +131 -0
- package/skills/axstack-anatomy/scripts/capture.mjs +228 -0
- package/skills/axstack-anatomy/scripts/capture.test.mjs +42 -0
- package/skills/axstack-anatomy/scripts/chrome-port.mjs +36 -0
- package/skills/axstack-anatomy/scripts/chrome-startup.test.mjs +38 -0
- package/skills/axstack-anatomy/scripts/drive-actions.test.mjs +46 -0
- package/skills/axstack-anatomy/scripts/drive.mjs +302 -0
- package/skills/axstack-anatomy/scripts/drive.test.mjs +72 -0
- package/skills/axstack-anatomy/scripts/enter-key.test.mjs +38 -0
- package/skills/axstack-anatomy/scripts/fidelity-cut.test.mjs +54 -0
- package/skills/axstack-anatomy/scripts/fidelity-tube-coverage.test.mjs +40 -0
- package/skills/axstack-anatomy/scripts/inline-kit.mjs +26 -0
- package/skills/axstack-anatomy/scripts/line-ends.mjs +306 -0
- package/skills/axstack-anatomy/scripts/lines-arcs.test.mjs +50 -0
- package/skills/axstack-anatomy/scripts/lines-bezier.test.mjs +28 -0
- package/skills/axstack-anatomy/scripts/lines-round.test.mjs +56 -0
- package/skills/axstack-anatomy/scripts/lines-rounded-rect.test.mjs +32 -0
- package/skills/axstack-anatomy/scripts/lines.mjs +31 -0
- package/skills/axstack-anatomy/scripts/lines.test.mjs +38 -0
- package/skills/axstack-anatomy/scripts/navigation.test.mjs +55 -0
- package/skills/axstack-anatomy/scripts/orbit-sampling.test.mjs +50 -0
- package/skills/axstack-anatomy/scripts/react-dots-opacity.test.mjs +51 -0
- package/skills/axstack-anatomy/scripts/react-readout-first-write.test.mjs +37 -0
- package/skills/axstack-anatomy/scripts/react-solid-seamless.test.mjs +47 -0
- package/skills/axstack-anatomy/scripts/react-visibility-target.test.mjs +38 -0
- package/skills/axstack-anatomy/scripts/turn-bench.mjs +74 -0
- package/skills/axstack-anatomy/scripts/turn-check.mjs +641 -0
- package/skills/axstack-anatomy/scripts/turn-fidelity.mjs +413 -0
- package/skills/axstack-anatomy/scripts/turn-group-reference.test.mjs +40 -0
- package/skills/axstack-anatomy/scripts/turn-split-owner.test.mjs +62 -0
- package/skills/axstack-anatomy/theme.js +56 -0
- package/skills/axstack-explain/SKILL.md +28 -15
- package/skills/axstack-explain/references/delivery.md +22 -0
- package/skills/{axstack-diagram → axstack-explain}/references/fidelity.md +1 -7
- package/skills/axstack-explain/references/inline-pages.md +8 -8
- package/skills/axstack-explain/references/visual-qa.md +3 -5
- package/skills/axstack-explain/references/whiteboard-defense.md +59 -0
- package/src/archify-legacy.js +70 -0
- package/src/capabilities.js +1 -29
- package/src/installer.js +11 -31
- package/skills/axstack-diagram/SKILL.md +0 -28
- package/skills/axstack-diagram/references/archify.md +0 -76
- package/src/archify-pin.js +0 -5
- package/src/archify.js +0 -151
package/README.md
CHANGED
|
@@ -88,10 +88,11 @@ and [guides](docs/guides.md) for features, reviews, watches, debugging and relea
|
|
|
88
88
|
| Understand | [axstack-research](skills/axstack-research/SKILL.md) | Answer one bounded question with sources. |
|
|
89
89
|
| Understand | [axstack-scout](skills/axstack-scout/SKILL.md) | Gather codebase evidence for an agent across several areas. |
|
|
90
90
|
| Understand | [axstack-explain](skills/axstack-explain/SKILL.md) | Explain a system and separate known behavior from gaps. |
|
|
91
|
-
| Understand | [axstack-
|
|
91
|
+
| Understand | [axstack-anatomy](skills/axstack-anatomy/SKILL.md) | Build an isometric physical-object figure with the vendored anatomy kit. |
|
|
92
92
|
|
|
93
93
|
Explanations default to checked inline T3 pages above a short reply.
|
|
94
|
-
Use
|
|
94
|
+
Use Anatomy only on an explicit isometric or physical-object figure request.
|
|
95
|
+
Every Explain visual is authored and independently reviewed; plain prose stays proportional.
|
|
95
96
|
|
|
96
97
|
## How work stays controlled
|
|
97
98
|
|
|
@@ -126,10 +127,13 @@ Eligible own PRs use guarded automatic merge; see [merge boundaries, exclusions,
|
|
|
126
127
|
## Some notes
|
|
127
128
|
|
|
128
129
|
- T3 Code is the only supported active runtime. Axstack adds no daemon or runtime
|
|
129
|
-
database. The
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
130
|
+
database. The exceptions are exactly two opt-in systemd user timers:
|
|
131
|
+
`axstack-default-sync` rewrites only T3 `defaultModelSelection`, and
|
|
132
|
+
`axstack-single-server` removes duplicate `t3 serve` process trees for one
|
|
133
|
+
base dir while keeping the recorded server. Both run stateless scripts, keep
|
|
134
|
+
no workflow state and launch no agent; see
|
|
135
|
+
[New-chat default sync](docs/host-operations.md#new-chat-default-sync) and
|
|
136
|
+
[Single T3 server](docs/host-operations.md#single-t3-server).
|
|
133
137
|
- The recorded owning watch thread merges eligible own PRs; excluded PRs use a merge card.
|
|
134
138
|
- This is an early project; expect the workflows to evolve.
|
|
135
139
|
|
package/bin/axstack.js
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
uninstallBundle,
|
|
14
14
|
validateBundle,
|
|
15
15
|
} from '../src/installer.js';
|
|
16
|
-
import { BUN_FLOOR,
|
|
16
|
+
import { BUN_FLOOR, checkCapabilities, meetsFloor, runRealCheck } from '../src/capabilities.js';
|
|
17
17
|
import { findLegacyRoutingLines } from '../src/instructions.js';
|
|
18
18
|
import { harnessLocations } from '../src/locations.js';
|
|
19
19
|
|
|
@@ -43,7 +43,7 @@ function packageVersion() {
|
|
|
43
43
|
const HELP = `axstack — Axstack setup CLI (installation bookkeeping only)
|
|
44
44
|
|
|
45
45
|
Usage:
|
|
46
|
-
axstack install --preset <mixed|codex-only|claude-only> --bundle <dir> --skills-dir <dir> [--
|
|
46
|
+
axstack install --preset <mixed|codex-only|claude-only> --bundle <dir> --skills-dir <dir> [--instructions <file>] [--claude-settings <file>|--no-claude-settings] [--harness <name>] [--force] [--yes]
|
|
47
47
|
axstack check [--bundle <dir>] [--instructions <file>] [--skills-dir <dir>|--harness <name>]
|
|
48
48
|
axstack uninstall --skills-dir <dir> [--instructions <file>] [--claude-settings <file>|--no-claude-settings] [--harness <name>] [--force] [--yes]
|
|
49
49
|
axstack --help | --version
|
|
@@ -62,8 +62,6 @@ Flags:
|
|
|
62
62
|
Aliases: codex = codex-only; claude = claude-only.
|
|
63
63
|
--skills-dir <dir> Explicit install target. Overrides harness skill defaults
|
|
64
64
|
and automatic legacy Codex skill retirement.
|
|
65
|
-
--tools-dir <dir> Pinned archify copies. Defaults to ~/.axstack/tools.
|
|
66
|
-
Must be outside skills roots and contain no symlink path.
|
|
67
65
|
--instructions <file>
|
|
68
66
|
Instruction file to receive the owned routing block.
|
|
69
67
|
Harness defaults: ~/.claude/CLAUDE.md for Claude,
|
|
@@ -107,10 +105,11 @@ function parseArgs(argv) {
|
|
|
107
105
|
}
|
|
108
106
|
out.command = rest.shift();
|
|
109
107
|
const wantsValue = new Set([
|
|
110
|
-
'--bundle', '--skills-dir', '--
|
|
108
|
+
'--bundle', '--skills-dir', '--instructions', '--harness', '--preset', '--claude-settings',
|
|
111
109
|
]);
|
|
112
110
|
while (rest.length > 0) {
|
|
113
111
|
const tok = rest.shift();
|
|
112
|
+
if (tok === '--tools-dir') throw new Error('--tools-dir is obsolete; archify provisioning has been retired');
|
|
114
113
|
if (tok === '--profile') {
|
|
115
114
|
throw new Error(
|
|
116
115
|
'--profile is obsolete in the T3 Code installer; role data is installed as axstack/roles.json and legacy Paseo cleanup is separate',
|
|
@@ -309,7 +308,6 @@ async function main() {
|
|
|
309
308
|
bundleDir: flags.bundle ? resolve(flags.bundle) : PACKAGE_ROOT,
|
|
310
309
|
skillsDir,
|
|
311
310
|
preset: flags.preset,
|
|
312
|
-
toolsDir: flags['tools-dir'] ? expandHome(flags['tools-dir']) : undefined,
|
|
313
311
|
instructionsPath,
|
|
314
312
|
inheritedInstructions: legacyCodexManifest?.instructions,
|
|
315
313
|
force: !!flags.force,
|
|
@@ -409,18 +407,6 @@ async function main() {
|
|
|
409
407
|
}
|
|
410
408
|
if (command === 'check') {
|
|
411
409
|
const report = await checkCapabilities(runRealCheck);
|
|
412
|
-
const toolSkillsDir = flags['skills-dir'] ? expandHome(flags['skills-dir']) :
|
|
413
|
-
flags.harness ? resolveHarnessTarget(flags.harness) : null;
|
|
414
|
-
if (toolSkillsDir) {
|
|
415
|
-
const tool = await checkArchify(toolSkillsDir);
|
|
416
|
-
console.log(`archify record: ${tool.recordFile}`);
|
|
417
|
-
if (tool.record) console.log(`archify copy: ${tool.record.path}; recorded SHA: ${tool.record.sha}; checked-out SHA: ${tool.actual ?? 'unavailable'}`);
|
|
418
|
-
if (tool.reason) {
|
|
419
|
-
console.log(`archify: ${tool.reason}`);
|
|
420
|
-
report.gaps.push(`archify: ${tool.reason}`);
|
|
421
|
-
}
|
|
422
|
-
console.log(tool.chrome ? `Chrome: ${tool.chrome}` : 'WARN Chrome: unavailable (viewer verification needs Chrome)');
|
|
423
|
-
}
|
|
424
410
|
if (flags.bundle) {
|
|
425
411
|
const bundle = await validateBundle(resolve(flags.bundle));
|
|
426
412
|
const presetNames = Object.keys(bundle.presets);
|
package/docs/getting-started.md
CHANGED
|
@@ -26,7 +26,7 @@ axstack check --harness codex
|
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
Installation writes owned skills and instructions, preserving unrelated content,
|
|
29
|
-
|
|
29
|
+
with the vendored anatomy kit included. Reload the
|
|
30
30
|
harness's skills in T3 after installation. Use the [installation reference](installation.md) for other
|
|
31
31
|
harnesses, source installs or conflicts.
|
|
32
32
|
|
|
@@ -40,13 +40,13 @@ A successful check exits 0. Its four capability rows mean:
|
|
|
40
40
|
| `t3` | T3's version command succeeds and meets the floor. |
|
|
41
41
|
|
|
42
42
|
The `gh stack` extension is needed only for preexisting native stacks; ordinary
|
|
43
|
-
PRs/chains use Git and `gh pr`. With this harness target, check also
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
starting a task.
|
|
43
|
+
PRs/chains use Git and `gh pr`. With this harness target, check also reports the
|
|
44
|
+
owned instruction binding. Any reported gap exits 1; follow
|
|
45
|
+
[troubleshooting](installation.md#exit-codes-and-troubleshooting) before starting a task.
|
|
47
46
|
|
|
48
47
|
Explanations default to checked inline T3 pages above a short reply.
|
|
49
|
-
Use
|
|
48
|
+
Use Anatomy only on an explicit isometric or physical-object figure request.
|
|
49
|
+
Every Explain visual receives author and reviewer dispatches. Spec approval readbacks also
|
|
50
50
|
use inline pages, identifying the revision you approve.
|
|
51
51
|
|
|
52
52
|
Check does not prove live provider readiness, schedule activation or mobile delivery.
|
package/docs/host-operations.md
CHANGED
|
@@ -44,9 +44,10 @@ the affected operation. Provider/model routing, Linear documents through the
|
|
|
44
44
|
executor MCP, and live schedule behavior need separate preflights.
|
|
45
45
|
|
|
46
46
|
Installation creates no production schedule and never enables a timer.
|
|
47
|
-
Axstack allows
|
|
48
|
-
|
|
49
|
-
`
|
|
47
|
+
Axstack allows exactly two opt-in systemd user timers as scheduler exceptions:
|
|
48
|
+
`axstack-default-sync` rewrites only T3 `defaultModelSelection`, and
|
|
49
|
+
`axstack-single-server` removes duplicate server processes for one base dir.
|
|
50
|
+
Both run stateless scripts, keep no workflow state and launch no agent.
|
|
50
51
|
Every verified own-PR publication arms or joins the driver's chat-run watch.
|
|
51
52
|
Its bound T3 schedule uses the cadence in [Chat-run watch activation](#chat-run-watch-activation).
|
|
52
53
|
See [Chat-run PR watch](workflows.md#chat-run-pr-watch) for authority, schedule identity and stop conditions.
|
|
@@ -204,8 +205,9 @@ retirement. No broad scratch deletion or forced worktree removal applies.
|
|
|
204
205
|
Manual review and user-driven `axstack-watch` remain outside this schedule.
|
|
205
206
|
Requested peer reviews cover any accessible repository. T3 owns schedules,
|
|
206
207
|
threads, runs, and delegated tasks; Axstack adds no queue engine, cursor files,
|
|
207
|
-
or historical runtime fallback. The only scheduler
|
|
208
|
-
systemd user
|
|
208
|
+
or historical runtime fallback. The only scheduler exceptions are the two opt-in
|
|
209
|
+
systemd user timers described in [New-chat default sync](#new-chat-default-sync)
|
|
210
|
+
and [Single T3 server](#single-t3-server).
|
|
209
211
|
|
|
210
212
|
## Review automation
|
|
211
213
|
|
|
@@ -282,3 +284,73 @@ Rollback: remove the pool drop-in, reload, and restore the full selection in T3
|
|
|
282
284
|
The sibling `<settings>.axstack-default-sync.lock` directory prevents overlap
|
|
283
285
|
(unchanged/locked). Empty locks older than sixty seconds are removed and retried
|
|
284
286
|
once; fresh contention reports locked.
|
|
287
|
+
|
|
288
|
+
## Single T3 server
|
|
289
|
+
|
|
290
|
+
This opt-in timer checks once per minute for this user's `t3 serve` processes
|
|
291
|
+
with the selected base dir (target default `$HOME/.t3`). Each server's base dir
|
|
292
|
+
comes from its `--base-dir <dir>` or `--base-dir=<dir>` flag, then its own
|
|
293
|
+
`T3CODE_HOME`, then its own `$HOME/.t3`, reading the latter values from that
|
|
294
|
+
process's environment. An unreadable or missing environment without an explicit
|
|
295
|
+
flag, or missing base-dir values, makes the whole run hold and kill nothing.
|
|
296
|
+
It keeps the pid recorded in `<base>/userdata/server-runtime.json`.
|
|
297
|
+
With zero or one known matching server it does nothing; with duplicates but no
|
|
298
|
+
valid readable keeper it holds. Duplicate servers must have started strictly
|
|
299
|
+
before the keeper, comparing field 22 (`starttime`) of `/proc/<pid>/stat`.
|
|
300
|
+
An unknown start time or any duplicate started at or after the keeper holds
|
|
301
|
+
the whole run, preserving a possible starting replacement. The script also
|
|
302
|
+
holds if its own pid or an ancestor appears in the planned victim set.
|
|
303
|
+
Otherwise it snapshots descendants before killing each duplicate server first,
|
|
304
|
+
then its children with SIGKILL. The keeper and its descendants are protected.
|
|
305
|
+
It starts no server, reads no database and interrupts no runs automatically.
|
|
306
|
+
|
|
307
|
+
Preview the one-line JSON decision without killing or notifying:
|
|
308
|
+
|
|
309
|
+
```sh
|
|
310
|
+
bun ~/.agents/skills/axstack/scripts/single-server.js --dry-run
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
`--base-dir <dir>` selects a different base dir; `--proc-root <dir>` supplies
|
|
314
|
+
a process-tree fixture (default `/proc`). `--help` lists the flags. Decisions
|
|
315
|
+
are `unchanged`, `hold`, `would-kill` or `killed`, with reason, keeper, matching
|
|
316
|
+
server pids and killed pids (proposed victims in dry-run). Non-ESRCH kill failures
|
|
317
|
+
add their pids to `failed`; remaining kills continue, successful kills still
|
|
318
|
+
notify if configured, and the command exits 1. Exit 0 includes holds;
|
|
319
|
+
exit 1 reports invalid input, discovery, kill or notification failure.
|
|
320
|
+
|
|
321
|
+
Under host-mutation authority, copy both assets and enable the timer:
|
|
322
|
+
|
|
323
|
+
```sh
|
|
324
|
+
mkdir -p ~/.config/systemd/user
|
|
325
|
+
cp ~/.agents/skills/axstack/systemd/axstack-single-server.service ~/.config/systemd/user/axstack-single-server.service
|
|
326
|
+
cp ~/.agents/skills/axstack/systemd/axstack-single-server.timer ~/.config/systemd/user/axstack-single-server.timer
|
|
327
|
+
systemctl --user daemon-reload
|
|
328
|
+
systemctl --user enable --now axstack-single-server.timer
|
|
329
|
+
systemctl --user list-timers axstack-single-server.timer
|
|
330
|
+
journalctl --user -u axstack-single-server.service
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Installation only copies assets; it never enables either timer. The single-server
|
|
334
|
+
timer starts one minute after user-manager startup and repeats every minute.
|
|
335
|
+
Override Bun/skills paths or add `--base-dir` through the service's `ExecStart`
|
|
336
|
+
drop-in, clearing the existing `ExecStart` first.
|
|
337
|
+
|
|
338
|
+
To notify only after a kill, use `systemctl --user edit axstack-single-server.service`
|
|
339
|
+
and add a per-host command, then reload:
|
|
340
|
+
|
|
341
|
+
```ini
|
|
342
|
+
[Service]
|
|
343
|
+
Environment="AXSTACK_SINGLE_SERVER_NOTIFY=hermes send --to telegram --quiet"
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
The VPS has Hermes locally; other hosts can use
|
|
347
|
+
`Environment="AXSTACK_SINGLE_SERVER_NOTIFY=ssh '<relay-host>' hermes send --to telegram --quiet"`.
|
|
348
|
+
Replace `<relay-host>` with the authorized gateway's hostname.
|
|
349
|
+
The script runs the command via `sh -c`, sending a short message on stdin with
|
|
350
|
+
hostname, kept pid and killed pids. It notes that runs started by the killed
|
|
351
|
+
server may remain `running` and need `t3_thread_interrupt`. Notification failure
|
|
352
|
+
exits 1 after the kills; command output is suppressed. Dry-run, unchanged and
|
|
353
|
+
hold decisions never notify. Verify delivery under the host's notification authority.
|
|
354
|
+
|
|
355
|
+
Disable with `systemctl --user disable --now axstack-single-server.timer` and
|
|
356
|
+
stop any active one-shot with `systemctl --user stop axstack-single-server.service`.
|
package/docs/installation.md
CHANGED
|
@@ -11,9 +11,8 @@ Requirements: Bun >=1.3.14, Git, `gh`, and a running
|
|
|
11
11
|
T3 Code `0.0.46-nightly.20261003.2610` or newer. The driver is a T3 thread
|
|
12
12
|
with the `t3-code` MCP. See the [T3 runtime boundary](../skills/axstack/references/t3-runtime.md).
|
|
13
13
|
Axstack has no runtime package dependencies. Filesystem access uses Bun-backed
|
|
14
|
-
`node:fs` and `node:fs/promises`.
|
|
15
|
-
|
|
16
|
-
code. This exception introduces no Node.js runtime requirement.
|
|
14
|
+
`node:fs` and `node:fs/promises`. Vendored anatomy code runs with Bun;
|
|
15
|
+
installation has no tool network or Git step and adds no Node.js runtime requirement.
|
|
17
16
|
|
|
18
17
|
For project setup, remote access, provider runtimes, and relay validation, see
|
|
19
18
|
[Host operations](host-operations.md).
|
|
@@ -76,16 +75,11 @@ the settings sidecar preserves the value while any other install still owns it.
|
|
|
76
75
|
- `--yes` confirms writes under the user's home directory. Tests use temporary
|
|
77
76
|
homes and fixtures only.
|
|
78
77
|
|
|
79
|
-
Explanations default to inline T3 pages
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
The adjacent `<tools-dir>/archify-<sha>.owners.json` lists its skills-root owners.
|
|
85
|
-
Multiple roots share one copy. Repeat installs leave unchanged files untouched.
|
|
86
|
-
An offline, Git-less, or failed clone still installs the skills, reports
|
|
87
|
-
`archify: unavailable (<reason>)`, and exits 0. An existing SHA mismatch fails.
|
|
88
|
-
`AXSTACK_ARCHIFY_REPO` is a test-only repository override; fixtures use a local repository without network access.
|
|
78
|
+
Explanations default to inline T3 pages. Use Anatomy only on an explicit
|
|
79
|
+
isometric or physical-object figure request. Every visual is authored and
|
|
80
|
+
independently reviewed through the selected preset's explanation roles.
|
|
81
|
+
Repeat installs leave unchanged files untouched. Legacy tool copies are
|
|
82
|
+
released by ownership on upgrade and uninstall; retained copies report why.
|
|
89
83
|
|
|
90
84
|
See [Account selection environment](concepts.md#account-selection-environment)
|
|
91
85
|
for the picker cache directory and test-only usage endpoint variables.
|
|
@@ -96,10 +90,13 @@ Run these with Bun from the installed `<skills-dir>/axstack/scripts/` directory:
|
|
|
96
90
|
`resolve-models.js` (model IDs), `pick-instance.js` (dispatch account),
|
|
97
91
|
`pr-digest.js` (PR discovery), `archive-evidence.js` (evidence archive), and
|
|
98
92
|
`sync-default.js [--settings <path>] [--dry-run]` (New-chat default; `AXSTACK_SYNC_POOL` opts into cross-driver rotation).
|
|
93
|
+
`single-server.js [--base-dir <dir>] [--proc-root <dir>] [--dry-run]` removes
|
|
94
|
+
duplicate `t3 serve` process trees while keeping the recorded runtime pid.
|
|
99
95
|
`account-usage.js` shares usage retrieval and the five-minute cache between
|
|
100
96
|
picker and sync. The opt-in systemd user unit files ship in `axstack/systemd/`;
|
|
101
|
-
installation copies them as assets and never enables
|
|
102
|
-
See [
|
|
97
|
+
installation copies them as assets and never enables either timer.
|
|
98
|
+
See [New-chat default sync](host-operations.md#new-chat-default-sync) and
|
|
99
|
+
[Single T3 server](host-operations.md#single-t3-server) for activation.
|
|
103
100
|
|
|
104
101
|
## Role presets
|
|
105
102
|
|
|
@@ -142,13 +139,6 @@ owned, missing, unowned, edited, or bound to a different path. Hand-written
|
|
|
142
139
|
legacy routing outside the owned block is reported for manual migration and
|
|
143
140
|
preserved byte for byte.
|
|
144
141
|
|
|
145
|
-
With `--skills-dir` or `--harness`, check reports the archify record path, copy
|
|
146
|
-
path, recorded SHA, and checked-out SHA. A missing record, missing copy, or SHA
|
|
147
|
-
mismatch fails the check. Chrome absence prints a warning and does not fail it.
|
|
148
|
-
`ARCHIFY_CHROME` selects the Chrome executable. Without it, check looks for
|
|
149
|
-
common Chrome and Chromium executables on PATH. A check without a skills target
|
|
150
|
-
probes host capabilities only.
|
|
151
|
-
|
|
152
142
|
Check does not prove MCP readiness, provider/model availability, schedule
|
|
153
143
|
activation, or mobile delivery. Effective permission, skill reload, task
|
|
154
144
|
execution, and end-to-end compatibility also require their own runtime receipts.
|
|
@@ -164,14 +154,10 @@ bytes match the manifest. Uninstall with `--force` can remove edited owned files
|
|
|
164
154
|
Custom, unknown, and unrelated files survive. Directories
|
|
165
155
|
are pruned only when empty, and the target root is never removed.
|
|
166
156
|
|
|
167
|
-
|
|
168
|
-
only
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
the old copy through the same guard. Installation clones into a temporary sibling
|
|
172
|
-
and renames it into place. A later owner or manifest write failure restores
|
|
173
|
-
ownership and removes only a copy created by that installation. Older manifests
|
|
174
|
-
without an archify record still load.
|
|
157
|
+
Legacy tool release drops only this skills root's ownership. It removes an
|
|
158
|
+
unchanged real copy only at its recorded SHA with no other owners and no
|
|
159
|
+
tracked, untracked or ignored edits. Otherwise it reports why the copy stays.
|
|
160
|
+
Edited or unowned legacy records stay intact; failed manifest writes restore owners.
|
|
175
161
|
|
|
176
162
|
## Environment variables
|
|
177
163
|
|
|
@@ -181,8 +167,6 @@ without an archify record still load.
|
|
|
181
167
|
and the legacy skills manifest; it does not change the shared skill default.
|
|
182
168
|
- `CLAUDE_CONFIG_DIR` selects the directory containing `settings.json` for
|
|
183
169
|
Claude settings management; `--claude-settings` overrides that file.
|
|
184
|
-
- `ARCHIFY_CHROME` selects the Chrome executable used by the archify check.
|
|
185
|
-
- `AXSTACK_ARCHIFY_REPO` is a test-only repository override for archify fixtures.
|
|
186
170
|
|
|
187
171
|
## Exit codes and troubleshooting
|
|
188
172
|
|
|
@@ -191,13 +175,12 @@ For every command (install, check, uninstall, help and version), Bun below
|
|
|
191
175
|
1.3.14 exits 1 before argument parsing or any capability report.
|
|
192
176
|
|
|
193
177
|
- Install exits 1 for argument or validation errors: an unknown command or flag,
|
|
194
|
-
missing flag value, obsolete `--profile`, conflicting Claude settings flags,
|
|
178
|
+
missing flag value, obsolete `--profile` or `--tools-dir`, conflicting Claude settings flags,
|
|
195
179
|
Bun below the floor, missing or invalid preset, unresolved skills target,
|
|
196
|
-
|
|
197
|
-
symlink, overlapping
|
|
180
|
+
malformed bundle or manifest, unsafe path or
|
|
181
|
+
symlink, overlapping roots, or a refused home write without `--yes`.
|
|
198
182
|
- Install exits 1 for ownership or transaction failures: an unknown destination
|
|
199
|
-
without `--force`, conflicting instruction-path binding,
|
|
200
|
-
archify record, existing archify SHA mismatch, Claude settings/sidecar conflict,
|
|
183
|
+
without `--force`, conflicting instruction-path binding, Claude settings/sidecar conflict,
|
|
201
184
|
concurrent edit, filesystem failure, or failed recovery.
|
|
202
185
|
- Install exits 1 for an instruction conflict that was preserved. Resolve the
|
|
203
186
|
reported block conflict manually before retrying.
|
|
@@ -206,19 +189,18 @@ For every command (install, check, uninstall, help and version), Bun below
|
|
|
206
189
|
- Install exits 1 for a legacy retirement failure after a canonical Codex install;
|
|
207
190
|
that canonical install can already be complete. Preserve the reported assets
|
|
208
191
|
and resolve the retirement error before retrying.
|
|
209
|
-
- Check exits 1 for any reported gap: a failed capability row,
|
|
210
|
-
|
|
192
|
+
- Check exits 1 for any reported gap: a failed capability row,
|
|
193
|
+
non-owned instruction binding, or legacy routing outside the
|
|
211
194
|
owned block. Check exits 1 for argument, bundle-validation, and filesystem errors.
|
|
212
195
|
- Uninstall exits 1 for argument, validation, ownership-binding, home-confirmation,
|
|
213
196
|
or transaction errors; preserved user edits are reported without failing.
|
|
214
197
|
|
|
215
198
|
Install exits 0 for a clean or idempotent result, preserved edits to ordinary
|
|
216
|
-
owned skills
|
|
217
|
-
clone failure. Check exits 0 when there are no gaps, and Chrome absence is a warning.
|
|
199
|
+
owned skills. Check exits 0 when there are no gaps.
|
|
218
200
|
Uninstall exits 0 on completion, including preserved user edits and retained
|
|
219
|
-
|
|
201
|
+
legacy tool copies. Help and version exit 0 when the Bun floor is met.
|
|
220
202
|
|
|
221
|
-
Start with the reported path and reason. Choose an explicit skills
|
|
203
|
+
Start with the reported path and reason. Choose an explicit skills path
|
|
222
204
|
when a default cannot resolve. Use `--yes` only for intended home writes, and
|
|
223
205
|
`--force` only after deciding to replace the specific asset. Back up edited files
|
|
224
206
|
before changing ownership. An incomplete rollback reports manual recovery needs;
|
package/docs/workflows.md
CHANGED
|
@@ -33,16 +33,17 @@ Direct routes need no spec ceremony:
|
|
|
33
33
|
questions using independent, read-only seats.
|
|
34
34
|
- `axstack-correct` reports repeated mistakes and proposes stronger checks.
|
|
35
35
|
Only the user invokes it.
|
|
36
|
+
- [axstack-anatomy](../skills/axstack-anatomy/SKILL.md) builds an isometric,
|
|
37
|
+
physical-object, or anatomy-style figure with the vendored kit and Bun.
|
|
36
38
|
- `axstack-explain` separates implemented, intended, tested, live, and unknown
|
|
37
39
|
behavior. Explanations default to checked inline T3 pages above a short reply.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
rendered QA, and node-and-edge source review.
|
|
40
|
+
Every visual is authored by `axstack-explainer` and independently reviewed by
|
|
41
|
+
`axstack-explainer-review`; interactive pages receive a verifier pass.
|
|
42
|
+
Whole-work understanding and defense covers high-level flow, decisions,
|
|
43
|
+
data/state, misbehaviour at trust boundaries and visible failure, with open
|
|
44
|
+
evidence gaps. Narrow questions stay proportional.
|
|
45
|
+
Explain owns SVG/CSS in inline pages and Mermaid in chat, GitHub and docs.
|
|
46
|
+
Use Anatomy only on an explicit isometric or physical-object figure request.
|
|
46
47
|
- `axstack-improve` returns a small ranked set of evidenced improvement
|
|
47
48
|
candidates without editing code. Its test-audit lens marks every declaration
|
|
48
49
|
in one owner boundary R/F/C/D, reports reviewed and eligible counts, and routes
|
|
@@ -138,7 +139,9 @@ intentionally absent in `codex-only`. Mixed web-google and X retain their
|
|
|
138
139
|
source-specific Antigravity and Grok routes.
|
|
139
140
|
The mixed `axstack-auditor` uses Haiku 5.5 xhigh, pinned to `claude-haiku-5-5`;
|
|
140
141
|
missing that ID or xhigh effort holds without substitution. The mixed
|
|
141
|
-
`axstack-explainer-review` uses Sol medium; `axstack-explainer`
|
|
142
|
+
`axstack-explainer-review` uses Sol medium; `axstack-explainer` pins
|
|
143
|
+
`claude-sonnet-5-5` high with class `sonnet`. Both roles cover every Explain
|
|
144
|
+
visual, including chat Mermaid and anatomy figures.
|
|
142
145
|
In `claude-only`, `axstack-auditor` uses the Claude Sonnet class at high effort.
|
|
143
146
|
The new `-sol` auditor, research-code, and explore-execution seats use Sol high
|
|
144
147
|
in `mixed` and `codex-only`; `claude-only` records each as intentionally absent.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "axstack",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.37.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",
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
"provider": "claude",
|
|
143
143
|
"modeId": "bypassPermissions",
|
|
144
144
|
"thinkingOptionId": "high",
|
|
145
|
-
"notes": "
|
|
145
|
+
"notes": "Visual author: authors every visual Explain delivers, including pages, chat Mermaid and anatomy figures, with source fidelity. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
|
|
146
146
|
"modelClass": "sonnet"
|
|
147
147
|
},
|
|
148
148
|
{
|
|
@@ -151,7 +151,7 @@
|
|
|
151
151
|
"provider": "claude",
|
|
152
152
|
"modeId": "bypassPermissions",
|
|
153
153
|
"thinkingOptionId": "high",
|
|
154
|
-
"notes": "Independent explanation reviewer: reviews consequential or complex
|
|
154
|
+
"notes": "Independent 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 rendered pass belongs to axstack-ui-verifier. Any artifact change invalidates its review. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
|
|
155
155
|
"modelClass": "sonnet"
|
|
156
156
|
},
|
|
157
157
|
{
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"provider": "claude",
|
|
161
161
|
"modeId": "bypassPermissions",
|
|
162
162
|
"thinkingOptionId": "high",
|
|
163
|
-
"notes": "Read-only UI verifier: uses
|
|
163
|
+
"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. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
|
|
164
164
|
"modelClass": "sonnet"
|
|
165
165
|
},
|
|
166
166
|
{
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
"provider": "codex",
|
|
143
143
|
"modeId": "full-access",
|
|
144
144
|
"thinkingOptionId": "high",
|
|
145
|
-
"notes": "
|
|
145
|
+
"notes": "Visual author: authors every visual Explain delivers, including pages, chat Mermaid and anatomy figures, with source fidelity. Resolve the class from saved T3 capabilities at run start; rejection and unavailable settings hold without substitution.",
|
|
146
146
|
"modelClass": "sol"
|
|
147
147
|
},
|
|
148
148
|
{
|
|
@@ -151,7 +151,7 @@
|
|
|
151
151
|
"provider": "codex",
|
|
152
152
|
"modeId": "full-access",
|
|
153
153
|
"thinkingOptionId": "xhigh",
|
|
154
|
-
"notes": "Independent explanation reviewer: reviews consequential or complex
|
|
154
|
+
"notes": "Independent 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 rendered 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.",
|
|
155
155
|
"modelClass": "luna"
|
|
156
156
|
},
|
|
157
157
|
{
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"provider": "codex",
|
|
161
161
|
"modeId": "full-access",
|
|
162
162
|
"thinkingOptionId": "medium",
|
|
163
|
-
"notes": "Read-only UI verifier: uses
|
|
163
|
+
"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 class from saved T3 capabilities at run start; rejection and unavailable settings hold without substitution.",
|
|
164
164
|
"modelClass": "sol"
|
|
165
165
|
},
|
|
166
166
|
{
|
|
@@ -142,8 +142,9 @@
|
|
|
142
142
|
"provider": "claude",
|
|
143
143
|
"modeId": "bypassPermissions",
|
|
144
144
|
"thinkingOptionId": "high",
|
|
145
|
-
"notes": "
|
|
146
|
-
"modelClass": "sonnet"
|
|
145
|
+
"notes": "Visual author: authors every visual Explain delivers, including pages, chat Mermaid and anatomy figures, with source fidelity. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
|
|
146
|
+
"modelClass": "sonnet",
|
|
147
|
+
"model": "claude-sonnet-5-5"
|
|
147
148
|
},
|
|
148
149
|
{
|
|
149
150
|
"id": "axstack-explainer-review",
|
|
@@ -151,7 +152,7 @@
|
|
|
151
152
|
"provider": "codex",
|
|
152
153
|
"modeId": "full-access",
|
|
153
154
|
"thinkingOptionId": "medium",
|
|
154
|
-
"notes": "Independent Sol medium explanation reviewer: reviews consequential or complex
|
|
155
|
+
"notes": "Independent Sol medium 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 rendered 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.",
|
|
155
156
|
"modelClass": "sol"
|
|
156
157
|
},
|
|
157
158
|
{
|
|
@@ -160,7 +161,7 @@
|
|
|
160
161
|
"provider": "claude",
|
|
161
162
|
"modeId": "bypassPermissions",
|
|
162
163
|
"thinkingOptionId": "high",
|
|
163
|
-
"notes": "Read-only UI verifier: uses
|
|
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. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
|
|
164
165
|
"modelClass": "sonnet"
|
|
165
166
|
},
|
|
166
167
|
{
|
|
@@ -22,9 +22,11 @@
|
|
|
22
22
|
`axstack-arena-judge-opus` judges round 1; `axstack-escalation-fable`/`axstack-arena-judge-astra` judge round 2.
|
|
23
23
|
High-stakes/trigger: fresh [contract](contracts.md) session.
|
|
24
24
|
`axstack-auditor` audits; `axstack-checker` reports discrepancies.
|
|
25
|
-
- `axstack-explainer` authors
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
- `axstack-explainer` authors every visual Explain delivers, including pages,
|
|
26
|
+
chat Mermaid and anatomy figures; mixed pins Sonnet 5.5 high exactly.
|
|
27
|
+
- `axstack-explainer-review` always reviews every visual; `codex/sol` medium in mixed.
|
|
28
|
+
Consequential or complex driver-written prose keeps its review rule; every
|
|
29
|
+
whiteboard defense is consequential, in chat too.
|
|
28
30
|
- `axstack-diligence`: read-only [diligence checks](diligence.md) for every PR
|
|
29
31
|
review round and bounded research, spec, ticket, receipt, and release claims.
|
|
30
32
|
- `axstack-ui-verifier`: owns the inline page interaction pass under [UI checks](ui-verification.md)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# UI verification
|
|
2
2
|
|
|
3
|
-
Every Playwright, browser, or rendered-UI check outside the
|
|
3
|
+
Every Playwright, browser, or rendered-UI check outside the two named browser
|
|
4
4
|
exceptions, including a "confirm it in the browser" step, goes through async
|
|
5
5
|
`delegate_task` to `axstack-ui-verifier` from the run's role snapshot. Give it the exact build, URL, or artifact and the private
|
|
6
6
|
dispatch's evidence folder. The verifier is read-only: it never edits source.
|
|
@@ -8,30 +8,26 @@ The PR writer remains the sole writer.
|
|
|
8
8
|
|
|
9
9
|
Before using a PR preview URL, the UI verifier must read [PR previews](preview.md).
|
|
10
10
|
|
|
11
|
-
The first named browser exception is
|
|
12
|
-
Keep finalize outputs only in the private evidence folder.
|
|
13
|
-
Never replace the verifier's rendered pass with finalize.
|
|
14
|
-
|
|
15
|
-
The second named browser exception is the driver's two `html_preview`
|
|
11
|
+
The first named browser exception is the driver's two `html_preview`
|
|
16
12
|
runs at 728px dark and 360px light.
|
|
17
13
|
Never replace the verifier's interaction pass with `html_preview`.
|
|
18
14
|
Follow [Inline pages](../../axstack-explain/references/inline-pages.md) for the page checks.
|
|
19
15
|
|
|
20
|
-
The
|
|
16
|
+
The second named browser exception permits dispatched roles to use
|
|
21
17
|
`html_preview` as a non-publishing self-check.
|
|
22
18
|
Dispatched-role self-checks never replace the driver's two previews or the `axstack-ui-verifier` pass.
|
|
23
19
|
Dispatched roles never call `html_render`.
|
|
24
|
-
All other browser checks outside the
|
|
20
|
+
All other browser checks outside the two named exceptions remain delegated to `axstack-ui-verifier`.
|
|
25
21
|
|
|
26
22
|
Read the [T3 runtime boundary](t3-runtime.md) before dispatch; for candidate
|
|
27
23
|
checks use its driver-made disposable detached checkout at the pinned candidate SHA.
|
|
28
|
-
|
|
24
|
+
Use the configured verifier browser and honor the user browser-tool policy.
|
|
29
25
|
Candidate browser and visual checks must run in the delegated `axstack-ui-verifier` in its own detached checkout; outputs go to its private evidence folder, never the driver worktree.
|
|
30
26
|
|
|
31
27
|
For every interactive page, require a real-browser `axstack-ui-verifier` interaction pass.
|
|
32
28
|
Give the evidence path and SHA-256 of the exact bytes in the verifier brief.
|
|
33
29
|
The verifier serves the exact bytes on loopback.
|
|
34
|
-
The verifier opens the page
|
|
30
|
+
The verifier opens the loopback page in its configured browser.
|
|
35
31
|
The verifier checks clicks, keyboard, focus order, screen-reader names, expanded states, and reduced motion.
|
|
36
32
|
Require that `performance.getEntriesByType('resource')` is empty.
|
|
37
33
|
The detached-checkout rule does not apply to a page without a candidate.
|