axstack 0.36.1 → 0.38.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.
Files changed (137) hide show
  1. package/README.md +5 -4
  2. package/bin/axstack.js +4 -18
  3. package/docs/getting-started.md +6 -6
  4. package/docs/host-operations.md +9 -5
  5. package/docs/installation.md +20 -41
  6. package/docs/workflows.md +12 -9
  7. package/package.json +1 -1
  8. package/profiles/presets/claude-only.json +3 -3
  9. package/profiles/presets/codex-only.json +3 -3
  10. package/profiles/presets/mixed.json +5 -4
  11. package/skills/axstack/references/automations.md +7 -2
  12. package/skills/axstack/references/lifecycle.md +2 -1
  13. package/skills/axstack/references/review-manager-prompt.md +44 -3
  14. package/skills/axstack/references/role-roster.md +13 -6
  15. package/skills/axstack/references/routing.md +2 -1
  16. package/skills/axstack/references/run-record.md +2 -0
  17. package/skills/axstack/references/ui-verification.md +6 -10
  18. package/skills/axstack-anatomy/ANATOMY.md +172 -0
  19. package/skills/axstack-anatomy/CHANGELOG.md +70 -0
  20. package/skills/axstack-anatomy/LICENSE +21 -0
  21. package/skills/axstack-anatomy/PROVENANCE.md +21 -0
  22. package/skills/axstack-anatomy/README.md +316 -0
  23. package/skills/axstack-anatomy/SKILL.md +74 -0
  24. package/skills/axstack-anatomy/SOURCE-PROOF.json +107 -0
  25. package/skills/axstack-anatomy/examples/arcade-cabinet/arcade-cabinet.css +44 -0
  26. package/skills/axstack-anatomy/examples/arcade-cabinet/build.mjs +714 -0
  27. package/skills/axstack-anatomy/examples/arcade-cabinet/live.js +597 -0
  28. package/skills/axstack-anatomy/examples/arcade-cabinet/parts.mjs +89 -0
  29. package/skills/axstack-anatomy/examples/arcade-cabinet/screen.mjs +114 -0
  30. package/skills/axstack-anatomy/examples/desk-computer/build.mjs +435 -0
  31. package/skills/axstack-anatomy/examples/dial-indicator/build.mjs +275 -0
  32. package/skills/axstack-anatomy/examples/raptor-engine/build.mjs +938 -0
  33. package/skills/axstack-anatomy/examples/raptor-engine/live.js +907 -0
  34. package/skills/axstack-anatomy/examples/raptor-engine/raptor.css +359 -0
  35. package/skills/axstack-anatomy/examples/ripple-tank/build.mjs +558 -0
  36. package/skills/axstack-anatomy/examples/ripple-tank/live.js +579 -0
  37. package/skills/axstack-anatomy/examples/ripple-tank/model.mjs +131 -0
  38. package/skills/axstack-anatomy/examples/ripple-tank/ripple.css +103 -0
  39. package/skills/axstack-anatomy/examples/spot-plate/art.tsx +110 -0
  40. package/skills/axstack-anatomy/examples/spot-plate/drops.ts +541 -0
  41. package/skills/axstack-anatomy/examples/spot-plate/fan.ts +84 -0
  42. package/skills/axstack-anatomy/examples/spot-plate/figure.tsx +25 -0
  43. package/skills/axstack-anatomy/examples/spot-plate/geometry.ts +280 -0
  44. package/skills/axstack-anatomy/examples/spot-plate/live.tsx +339 -0
  45. package/skills/axstack-anatomy/examples/spot-plate/rig.ts +230 -0
  46. package/skills/axstack-anatomy/examples/spot-plate/spot-plate.css +92 -0
  47. package/skills/axstack-anatomy/examples/test-rig/art.tsx +196 -0
  48. package/skills/axstack-anatomy/examples/test-rig/figure.tsx +23 -0
  49. package/skills/axstack-anatomy/examples/test-rig/geometry.ts +305 -0
  50. package/skills/axstack-anatomy/examples/test-rig/live.tsx +511 -0
  51. package/skills/axstack-anatomy/examples/test-rig/pose.ts +107 -0
  52. package/skills/axstack-anatomy/examples/test-rig/rig.ts +170 -0
  53. package/skills/axstack-anatomy/examples/test-rig/stretch.css +80 -0
  54. package/skills/axstack-anatomy/examples/test-rig/view.ts +99 -0
  55. package/skills/axstack-anatomy/examples/turning-dial/build.mjs +479 -0
  56. package/skills/axstack-anatomy/examples/turning-dial/dial.css +10 -0
  57. package/skills/axstack-anatomy/examples/turning-dial/live.js +342 -0
  58. package/skills/axstack-anatomy/examples/turning-dial/stress.mjs +269 -0
  59. package/skills/axstack-anatomy/kit/audit.mjs +1913 -0
  60. package/skills/axstack-anatomy/kit/canvas-painter.mjs +722 -0
  61. package/skills/axstack-anatomy/kit/gl-shared.mjs +184 -0
  62. package/skills/axstack-anatomy/kit/gl.mjs +184 -0
  63. package/skills/axstack-anatomy/kit/iso-kit.mjs +674 -0
  64. package/skills/axstack-anatomy/kit/iso-kit.ts +842 -0
  65. package/skills/axstack-anatomy/kit/iso.css +106 -0
  66. package/skills/axstack-anatomy/kit/lathe.mjs +1184 -0
  67. package/skills/axstack-anatomy/kit/react/draw.tsx +205 -0
  68. package/skills/axstack-anatomy/kit/react/live.tsx +140 -0
  69. package/skills/axstack-anatomy/kit/tube.mjs +306 -0
  70. package/skills/axstack-anatomy/kit/turn-audit.mjs +1096 -0
  71. package/skills/axstack-anatomy/kit/turn-build.mjs +1355 -0
  72. package/skills/axstack-anatomy/kit/turn-fixed.mjs +3800 -0
  73. package/skills/axstack-anatomy/kit/turn.mjs +3610 -0
  74. package/skills/axstack-anatomy/references/3d.md +352 -0
  75. package/skills/axstack-anatomy/references/craft.md +325 -0
  76. package/skills/axstack-anatomy/references/kit.md +419 -0
  77. package/skills/axstack-anatomy/references/motion.md +165 -0
  78. package/skills/axstack-anatomy/references/react.md +42 -0
  79. package/skills/axstack-anatomy/references/verify.md +351 -0
  80. package/skills/axstack-anatomy/references/walkthrough.md +75 -0
  81. package/skills/axstack-anatomy/references/webgl.md +473 -0
  82. package/skills/axstack-anatomy/scripts/audit-affine-bounds.test.mjs +54 -0
  83. package/skills/axstack-anatomy/scripts/audit-cache.test.mjs +37 -0
  84. package/skills/axstack-anatomy/scripts/audit-clearance-envelope.test.mjs +39 -0
  85. package/skills/axstack-anatomy/scripts/audit-empty-clipping.test.mjs +38 -0
  86. package/skills/axstack-anatomy/scripts/audit-order-convergence.test.mjs +55 -0
  87. package/skills/axstack-anatomy/scripts/audit-path-origin.test.mjs +26 -0
  88. package/skills/axstack-anatomy/scripts/audit-profile.test.mjs +41 -0
  89. package/skills/axstack-anatomy/scripts/audit-projection.test.mjs +36 -0
  90. package/skills/axstack-anatomy/scripts/audit-slide-clearance.test.mjs +58 -0
  91. package/skills/axstack-anatomy/scripts/audit-svg-attributes.test.mjs +46 -0
  92. package/skills/axstack-anatomy/scripts/audit-taper.test.mjs +29 -0
  93. package/skills/axstack-anatomy/scripts/capture-selector.test.mjs +131 -0
  94. package/skills/axstack-anatomy/scripts/capture.mjs +228 -0
  95. package/skills/axstack-anatomy/scripts/capture.test.mjs +42 -0
  96. package/skills/axstack-anatomy/scripts/chrome-port.mjs +36 -0
  97. package/skills/axstack-anatomy/scripts/chrome-startup.test.mjs +38 -0
  98. package/skills/axstack-anatomy/scripts/drive-actions.test.mjs +46 -0
  99. package/skills/axstack-anatomy/scripts/drive.mjs +302 -0
  100. package/skills/axstack-anatomy/scripts/drive.test.mjs +72 -0
  101. package/skills/axstack-anatomy/scripts/enter-key.test.mjs +38 -0
  102. package/skills/axstack-anatomy/scripts/fidelity-cut.test.mjs +54 -0
  103. package/skills/axstack-anatomy/scripts/fidelity-tube-coverage.test.mjs +40 -0
  104. package/skills/axstack-anatomy/scripts/inline-kit.mjs +26 -0
  105. package/skills/axstack-anatomy/scripts/line-ends.mjs +306 -0
  106. package/skills/axstack-anatomy/scripts/lines-arcs.test.mjs +50 -0
  107. package/skills/axstack-anatomy/scripts/lines-bezier.test.mjs +28 -0
  108. package/skills/axstack-anatomy/scripts/lines-round.test.mjs +56 -0
  109. package/skills/axstack-anatomy/scripts/lines-rounded-rect.test.mjs +32 -0
  110. package/skills/axstack-anatomy/scripts/lines.mjs +31 -0
  111. package/skills/axstack-anatomy/scripts/lines.test.mjs +38 -0
  112. package/skills/axstack-anatomy/scripts/navigation.test.mjs +55 -0
  113. package/skills/axstack-anatomy/scripts/orbit-sampling.test.mjs +50 -0
  114. package/skills/axstack-anatomy/scripts/react-dots-opacity.test.mjs +51 -0
  115. package/skills/axstack-anatomy/scripts/react-readout-first-write.test.mjs +37 -0
  116. package/skills/axstack-anatomy/scripts/react-solid-seamless.test.mjs +47 -0
  117. package/skills/axstack-anatomy/scripts/react-visibility-target.test.mjs +38 -0
  118. package/skills/axstack-anatomy/scripts/turn-bench.mjs +74 -0
  119. package/skills/axstack-anatomy/scripts/turn-check.mjs +641 -0
  120. package/skills/axstack-anatomy/scripts/turn-fidelity.mjs +413 -0
  121. package/skills/axstack-anatomy/scripts/turn-group-reference.test.mjs +40 -0
  122. package/skills/axstack-anatomy/scripts/turn-split-owner.test.mjs +62 -0
  123. package/skills/axstack-anatomy/theme.js +56 -0
  124. package/skills/axstack-explain/SKILL.md +28 -15
  125. package/skills/axstack-explain/references/delivery.md +22 -0
  126. package/skills/{axstack-diagram → axstack-explain}/references/fidelity.md +1 -7
  127. package/skills/axstack-explain/references/inline-pages.md +8 -8
  128. package/skills/axstack-explain/references/visual-qa.md +3 -5
  129. package/skills/axstack-explain/references/whiteboard-defense.md +59 -0
  130. package/skills/axstack-research/SKILL.md +18 -6
  131. package/src/archify-legacy.js +70 -0
  132. package/src/capabilities.js +1 -29
  133. package/src/installer.js +11 -31
  134. package/skills/axstack-diagram/SKILL.md +0 -28
  135. package/skills/axstack-diagram/references/archify.md +0 -76
  136. package/src/archify-pin.js +0 -5
  137. 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-diagram](skills/axstack-diagram/SKILL.md) | Draw SVG/CSS in inline pages, Mermaid for chat/GitHub/docs, or requested archify viewers. |
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 [archify](https://github.com/tt-a1i/archify) (MIT) only on an explicit viewer request.
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
 
@@ -114,8 +115,8 @@ subject to explicit stop-after-publication or observation requests.
114
115
  See [Host operations](docs/host-operations.md#chat-run-watch-activation) for wake activation and cadence.
115
116
  See [Chat-run PR watch](docs/workflows.md#chat-run-pr-watch) for the lifecycle and quiet cadence.
116
117
 
117
- An optional native T3 review manager runs finite peer-review passes every 15
118
- minutes; the review automation never merges for you. Activation needs live
118
+ An optional native T3 review manager runs finite peer-review passes hourly
119
+ (`everyMs:3600000`); the review automation never merges for you. Activation needs live
119
120
  host validation. See [PR-manager setup and safety](docs/host-operations.md#optional-native-peer-review-automation).
120
121
 
121
122
 
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, checkArchify, checkCapabilities, meetsFloor, runRealCheck } from '../src/capabilities.js';
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> [--tools-dir <dir>] [--instructions <file>] [--claude-settings <file>|--no-claude-settings] [--harness <name>] [--force] [--yes]
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', '--tools-dir', '--instructions', '--harness', '--preset', '--claude-settings',
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);
@@ -26,7 +26,7 @@ axstack check --harness codex
26
26
  ```
27
27
 
28
28
  Installation writes owned skills and instructions, preserving unrelated content,
29
- and fetches the pinned archify tool for explicit viewer requests. Reload the
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 validates the archify record/copy/SHA and
44
- reports the owned instruction binding. Missing Chrome is a warning. Any reported
45
- gap exits 1; follow [troubleshooting](installation.md#exit-codes-and-troubleshooting) before
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 archify only on an explicit viewer request. Spec approval readbacks also
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.
@@ -52,7 +52,8 @@ Every verified own-PR publication arms or joins the driver's chat-run watch.
52
52
  Its bound T3 schedule uses the cadence in [Chat-run watch activation](#chat-run-watch-activation).
53
53
  See [Chat-run PR watch](workflows.md#chat-run-pr-watch) for authority, schedule identity and stop conditions.
54
54
  Missing schedule capability holds activation.
55
- The optional review manager uses an unbound 15-minute T3 schedule and requires
55
+ The optional review manager uses an unbound hourly T3 schedule
56
+ (`everyMs:3600000`) and requires
56
57
  its separate native canary before activation. Installed guidance does not prove
57
58
  live behavior. See [Review manager](../skills/axstack/references/automations.md).
58
59
 
@@ -172,8 +173,10 @@ with the PR; remove the exact unit and route after settlement.
172
173
 
173
174
  The optional native review manager uses the VPS T3 project `axstack-review-lane`
174
175
  on the existing host clone. Configure and read back the lane's `axstack-owner`
175
- binding, then create an unbound T3 schedule every 15 minutes. Each pass starts
176
- in a fresh finite worktree from `origin/main`, fetches first, and checks its
176
+ binding, then create an unbound hourly T3 schedule (`everyMs:3600000`).
177
+ The packaged prompt checks for a quiet exit before skill loading; full passes
178
+ follow the lifecycle below. Each pass starts in a fresh finite worktree from
179
+ `origin/main`, fetches first, and checks its
177
180
  binding. Continuity lives outside worktrees at
178
181
  `~/.local/share/axstack/runs/review-manager/progress.md`. Per-PR detached
179
182
  review checkouts come from existing host clones; a missing clone holds that job.
@@ -211,8 +214,9 @@ and [Single T3 server](#single-t3-server).
211
214
 
212
215
  ## Review automation
213
216
 
214
- The review manager uses one short packaged prompt that loads the current
215
- relative contract and invokes `axstack-review`. Bounded jobs publish ordinary
217
+ The review manager uses one short packaged prompt that checks for a quiet exit,
218
+ then loads the current relative contract and invokes `axstack-review` for a full pass.
219
+ Bounded jobs publish ordinary
216
220
  exact-head review verdicts; peer PRs are merged by the user. Manual adopted-PR maintenance
217
221
  uses `axstack-watch` with local-SHA review before authorized publication.
218
222
  Exceptional security, permanent-on-chain, or architectural decisions remain actionable in GitHub or a durable user-owned conversation
@@ -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`. The pinned archify tool is the sole external-tool
15
- exception: installation uses Git and the network, and Bun runs its Node-oriented
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; use archify only on an explicit viewer request.
80
- Installation sparse-clones archify at the reviewed full SHA in `src/archify-pin.js`
81
- into `<tools-dir>/archify-<sha>`. It verifies HEAD before use and keeps the
82
- payload's licence and third-party notices. The manifest owns
83
- `<skills-dir>/axstack-diagram/archify.json`, which records `{path, sha}`.
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.
@@ -145,13 +139,6 @@ owned, missing, unowned, edited, or bound to a different path. Hand-written
145
139
  legacy routing outside the owned block is reported for manual migration and
146
140
  preserved byte for byte.
147
141
 
148
- With `--skills-dir` or `--harness`, check reports the archify record path, copy
149
- path, recorded SHA, and checked-out SHA. A missing record, missing copy, or SHA
150
- mismatch fails the check. Chrome absence prints a warning and does not fail it.
151
- `ARCHIFY_CHROME` selects the Chrome executable. Without it, check looks for
152
- common Chrome and Chromium executables on PATH. A check without a skills target
153
- probes host capabilities only.
154
-
155
142
  Check does not prove MCP readiness, provider/model availability, schedule
156
143
  activation, or mobile delivery. Effective permission, skill reload, task
157
144
  execution, and end-to-end compatibility also require their own runtime receipts.
@@ -167,14 +154,10 @@ bytes match the manifest. Uninstall with `--force` can remove edited owned files
167
154
  Custom, unknown, and unrelated files survive. Directories
168
155
  are pruned only when empty, and the target root is never removed.
169
156
 
170
- Uninstall drops that skills root from archify's owners file. It removes the copy
171
- only when no owners remain, HEAD matches the recorded SHA, and
172
- `git status --porcelain --ignored` is empty. Otherwise it keeps the copy and
173
- reports why, even with `--force`. A pin bump or a changed `--tools-dir` releases
174
- the old copy through the same guard. Installation clones into a temporary sibling
175
- and renames it into place. A later owner or manifest write failure restores
176
- ownership and removes only a copy created by that installation. Older manifests
177
- 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.
178
161
 
179
162
  ## Environment variables
180
163
 
@@ -184,8 +167,6 @@ without an archify record still load.
184
167
  and the legacy skills manifest; it does not change the shared skill default.
185
168
  - `CLAUDE_CONFIG_DIR` selects the directory containing `settings.json` for
186
169
  Claude settings management; `--claude-settings` overrides that file.
187
- - `ARCHIFY_CHROME` selects the Chrome executable used by the archify check.
188
- - `AXSTACK_ARCHIFY_REPO` is a test-only repository override for archify fixtures.
189
170
 
190
171
  ## Exit codes and troubleshooting
191
172
 
@@ -194,13 +175,12 @@ For every command (install, check, uninstall, help and version), Bun below
194
175
  1.3.14 exits 1 before argument parsing or any capability report.
195
176
 
196
177
  - Install exits 1 for argument or validation errors: an unknown command or flag,
197
- missing flag value, obsolete `--profile`, conflicting Claude settings flags,
178
+ missing flag value, obsolete `--profile` or `--tools-dir`, conflicting Claude settings flags,
198
179
  Bun below the floor, missing or invalid preset, unresolved skills target,
199
- unavailable default tools path, malformed bundle or manifest, unsafe path or
200
- symlink, overlapping skills/tools roots, or a refused home write without `--yes`.
180
+ malformed bundle or manifest, unsafe path or
181
+ symlink, overlapping roots, or a refused home write without `--yes`.
201
182
  - Install exits 1 for ownership or transaction failures: an unknown destination
202
- without `--force`, conflicting instruction-path binding, edited or unowned
203
- archify record, existing archify SHA mismatch, Claude settings/sidecar conflict,
183
+ without `--force`, conflicting instruction-path binding, Claude settings/sidecar conflict,
204
184
  concurrent edit, filesystem failure, or failed recovery.
205
185
  - Install exits 1 for an instruction conflict that was preserved. Resolve the
206
186
  reported block conflict manually before retrying.
@@ -209,19 +189,18 @@ For every command (install, check, uninstall, help and version), Bun below
209
189
  - Install exits 1 for a legacy retirement failure after a canonical Codex install;
210
190
  that canonical install can already be complete. Preserve the reported assets
211
191
  and resolve the retirement error before retrying.
212
- - Check exits 1 for any reported gap: a failed capability row, invalid archify
213
- record/copy/SHA, non-owned instruction binding, or legacy routing outside the
192
+ - Check exits 1 for any reported gap: a failed capability row,
193
+ non-owned instruction binding, or legacy routing outside the
214
194
  owned block. Check exits 1 for argument, bundle-validation, and filesystem errors.
215
195
  - Uninstall exits 1 for argument, validation, ownership-binding, home-confirmation,
216
196
  or transaction errors; preserved user edits are reported without failing.
217
197
 
218
198
  Install exits 0 for a clean or idempotent result, preserved edits to ordinary
219
- owned skills, or unavailable archify caused by an offline host, missing Git, or
220
- 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.
221
200
  Uninstall exits 0 on completion, including preserved user edits and retained
222
- archify copies. Help and version exit 0 when the Bun floor is met.
201
+ legacy tool copies. Help and version exit 0 when the Bun floor is met.
223
202
 
224
- Start with the reported path and reason. Choose an explicit skills or tools path
203
+ Start with the reported path and reason. Choose an explicit skills path
225
204
  when a default cannot resolve. Use `--yes` only for intended home writes, and
226
205
  `--force` only after deciding to replace the specific asset. Back up edited files
227
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
- Consequential or complex claims, archify output, or a user request require
39
- independent explanation review; interactive pages receive a verifier pass.
40
- - [axstack-diagram](../skills/axstack-diagram/SKILL.md) selects inline SVG or CSS
41
- inside pages and Mermaid for chat fallback, GitHub, and docs.
42
- Explain loads it for every diagram. Use
43
- [archify](https://github.com/tt-a1i/archify) (MIT) only on an explicit viewer request,
44
- authored by `axstack-explainer`, with a pinned tool, a passing finalize receipt,
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` stays Sonnet high.
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.36.1",
3
+ "version": "0.38.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": "Archify viewer author: authors archify only on an explicit viewer request, with source fidelity. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
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 claims, archify output, 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.",
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 T3 preview_* 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.",
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": "Archify viewer author: authors archify only on an explicit viewer request, with source fidelity. Resolve the class from saved T3 capabilities at run start; rejection and unavailable settings hold without substitution.",
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 claims, archify output, 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.",
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 T3 preview_* 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.",
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": "Archify viewer author: authors archify only on an explicit viewer request, with source fidelity. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
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 claims, archify output, 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
+ "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 T3 preview_* 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
+ "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
  {
@@ -40,11 +40,16 @@ A missing, non-durable or unreadable continuity path holds admission.
40
40
  Follow the [Run record](run-record.md) and use the
41
41
  [Review-manager continuity template](run-record.md#review-manager-continuity-template):
42
42
  overwrite its four current-state sections and archive superseded history once
43
- beside it. A no-change pass appends at most one history line.
43
+ beside it. A no-change full pass appends at most one history line.
44
+
45
+ Follow the quiet check in the packaged [review-manager prompt](review-manager-prompt.md).
46
+ The full pass records in Watermarks `Quiet gate:` as the sorted list and
47
+ `Last full pass:` as UTC only as owner-of-record, then reads back the save.
48
+ The sections below govern full passes; a quiet exit bypasses their teardown.
44
49
 
45
50
  Configure the lane thread via `t3_thread_configure` with the `axstack-owner`
46
51
  binding and verify its read-back. Then `schedule_task` uses the packaged prompt,
47
- `everyMs:900000`, `bindToCurrentThread:false`, and a stable `clientRequestId`.
52
+ hourly with `everyMs:3600000`, `bindToCurrentThread:false`, and a stable `clientRequestId`.
48
53
  Record the schedule ID, project, lane binding and pass thread/run identities.
49
54
  Each pass compares its own `t3_thread_configuration` with the recorded binding
50
55
  after any owner-only instance update under [Provider bindings](t3-runtime.md#preflight-and-binding), before admission.
@@ -131,7 +131,8 @@ differs from merged.
131
131
  ## Review automation health
132
132
 
133
133
  The native review manager uses fresh finite T3 pass threads from its dedicated
134
- lane project on a 15-minute T3 scheduled task. It admits actionable PR events
134
+ lane project on an hourly T3 scheduled task (`everyMs:3600000`). It admits
135
+ actionable PR events
135
136
  within measured host capacity; waiting PRs remain covered without reserving slots.
136
137
  Bounded PR jobs use driver-made detached checkouts and settle after descendants.
137
138
  Build no custom scheduler, state engine or legacy fallback. See
@@ -1,6 +1,44 @@
1
1
  # Review manager prompt
2
2
 
3
- At pass start, follow [Provider bindings](t3-runtime.md#preflight-and-binding) for own account selection.
3
+ The account picker must run first, before the quiet check: from the installed
4
+ `axstack` skill directory, run `bun scripts/pick-instance.js --provider <own provider> --json`.
5
+ Find this pass's current instance from `t3_thread_configuration` in the picker
6
+ JSON `instances` and inspect its `state`; defer reference loads until a full pass.
7
+ An eligible current instance remains quiet-eligible even when `chosenInstanceId`
8
+ names a different instance.
9
+ Run the quiet check before invoking `axstack-review` or reading any `skills/**` file.
10
+
11
+ Resolve self with `gh api user --jq .login`, then union two paginated `gh search prs`
12
+ queries (`review-requested:@me` and `involves:@me`), each with `--limit 1000`,
13
+ for open, non-draft PRs authored by someone else,
14
+ producing a sorted (repo#number, headRefOid, updatedAt) list.
15
+ Search omits head OIDs: obtain them with read-only `gh pr view --json headRefOid`.
16
+ A result count at or above 1000 in either query makes coverage incomplete.
17
+ Inventory every page of T3 lane threads and their run liveness, including recorded
18
+ PR-job descendants, using exact lane identities.
19
+ Read continuity at `~/.local/share/axstack/runs/review-manager/progress.md` and
20
+ compare its Watermarks with the inventory:
21
+
22
+ - Run the full pass when the picker JSON marks this pass's current instance `excluded`.
23
+ - Run the full pass when the picker exits with code 1.
24
+ - Run the full pass when the picker exits with code 2.
25
+ - Run the full pass when the sorted list differs from `Quiet gate:`.
26
+ - Run the full pass when any other lane thread is non-terminal.
27
+ - Run the full pass when continuity or either watermark is missing, malformed or unreadable.
28
+ - Run the full pass when `Last full pass:` is at least 4 hours old or in the future.
29
+ - Run the full pass when any call fails or pagination, PR head OIDs or thread/run liveness is incomplete or unknown.
30
+ - Run the full pass when continuity records any unserved, capacity-deferred, `INCOMPLETE` or re-eligible event, or any open hold with a resume condition beyond a user decision (such as capacity or remeasure).
31
+
32
+ Holds awaiting only the user remain quiet-eligible: a user decision on the PR
33
+ changes `updatedAt` and the 4 h full pass bounds reminders.
34
+
35
+ If every busy condition is false, end the turn with no text, no skill load, no sweep and no continuity write.
36
+ Otherwise continue with the full pass below; incomplete evidence retains the
37
+ existing admission and cleanup holds.
38
+
39
+ ## Full pass
40
+
41
+ Follow [Provider bindings](t3-runtime.md#preflight-and-binding) for own account selection.
4
42
 
5
43
  You are a fresh finite T3 review-manager pass in project `axstack-review-lane`
6
44
  on the VPS's existing `axatbhardwaj/axstack` clone. Fetch first; this unbound
@@ -17,5 +55,8 @@ Report retained worktree count and disable the schedule and hold past its
17
55
  authorized limit. Only the owner retires settled predecessors and saves and
18
56
  reads back continuity at
19
57
  `~/.local/share/axstack/runs/review-manager/progress.md` using
20
- `run-record.md#review-manager-continuity-template`; settle descendants and end
21
- the finite turn. Stay quiet when unchanged. Never check out a PR branch here.
58
+ `run-record.md#review-manager-continuity-template`.
59
+ The full pass records in Watermarks `Quiet gate:` as the sorted list and
60
+ `Last full pass:` as UTC only as owner-of-record, then reads back the save.
61
+ Settle descendants and end the finite turn. Stay quiet when unchanged.
62
+ Never check out a PR branch here.
@@ -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 archify only on an explicit viewer request.
26
- - `axstack-explainer-review` reviews consequential or complex claims, archify
27
- output, or on request; `codex/sol` medium in mixed.
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)
@@ -56,11 +58,16 @@
56
58
  `axstack-research-x`, `axstack-checker`, `axstack-research-code-sol`,
57
59
  `axstack-explore-execution-sol`, `axstack-auditor-sol`,
58
60
  `axstack-explore-codebase-flash`.
59
- Always dispatch optional seats when configured and available. Only a
61
+ Always dispatch optional seats when configured and available, except research
62
+ branches, which follow [Research step 2](../../axstack-research/SKILL.md#procedure) sizing.
63
+ A research branch unneeded by an open claim is recorded `not needed (<reason>)`,
64
+ never as absent or a malfunction. Only a
60
65
  launch failure, trust/login prompt, or prompt block makes one absent:
61
66
  fence the attempt, record `absent (<reason>)`, name it once in the next
62
67
  read-back, and skip it without a relay or substitution. An uncertain
63
- dispatch is reconciled, not called absent. A mixed fan-out still includes
64
- at least one Codex and one Claude seat; otherwise hold that fan-out.
68
+ dispatch is reconciled, not called absent. A sized mixed research fan-out
69
+ requires dispatched branches spanning at least two different providers;
70
+ otherwise hold that fan-out. Every other mixed fan-out, including arena and
71
+ peer review, retains at least one Codex and one Claude seat; otherwise hold that fan-out.
65
72
  Intentional absences in codex-only and claude-only remain unchanged.
66
73
  - `axstack-debug-investigator-1..4` probe L1 briefs.
@@ -44,7 +44,8 @@ An exhausted account with no eligible sibling still holds; dispatched roles neve
44
44
  Follow [Provider bindings](t3-runtime.md#preflight-and-binding) for driver account re-selection at turn boundaries.
45
45
  [Model discipline](contracts.md#model-discipline) governs optional seats,
46
46
  auditor preflight, and required holds; [Role roster](role-roster.md) governs
47
- single-provider absence and mixed Codex+Claude fan-out.
47
+ single-provider absence, mixed research with at least two different providers,
48
+ and other mixed Codex+Claude fan-out (including arena and peer review).
48
49
  Bundled presets are setup inputs, not runtime readiness proof.
49
50
 
50
51
  Load the [Role roster](role-roster.md) for configured roles and authored-review pairings.
@@ -159,6 +159,8 @@ in the adjacent history file, not below this template.
159
159
  - <PR or lane, reason, evidence, owner, resume condition; or none>
160
160
 
161
161
  ## Watermarks
162
+ - Quiet gate: <sorted (repo#number, headRefOid, updatedAt) list; [] when empty>
163
+ - Last full pass: <UTC timestamp of the last full pass>
162
164
  - <PR/event identity, exact head/base, last observed receipt; or none>
163
165
 
164
166
  ## Last pass
@@ -1,6 +1,6 @@
1
1
  # UI verification
2
2
 
3
- Every Playwright, browser, or rendered-UI check outside the three named browser
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 archify `finalize` as a headless build gate.
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 third named browser exception permits dispatched roles to use
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 three named exceptions remain delegated to `axstack-ui-verifier`.
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
- The verifier uses T3 `preview_*` tools for rendered checks.
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 with `preview_open` using `open:false`.
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.