axstack 0.24.1 → 0.25.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 (30) hide show
  1. package/README.md +48 -9
  2. package/docs/installation.md +7 -6
  3. package/docs/workflows.md +121 -24
  4. package/package.json +1 -1
  5. package/profiles/presets/claude-only.json +10 -1
  6. package/profiles/presets/codex-only.json +10 -1
  7. package/profiles/presets/mixed.json +16 -7
  8. package/skills/axstack/references/automations.md +24 -1
  9. package/skills/axstack/references/autopilot.md +35 -21
  10. package/skills/axstack/references/candidate-publication.md +10 -0
  11. package/skills/axstack/references/contracts.md +20 -17
  12. package/skills/axstack/references/diligence.md +6 -1
  13. package/skills/axstack/references/lifecycle.md +4 -4
  14. package/skills/axstack/references/pr-shape.md +5 -0
  15. package/skills/axstack/references/pr-triage-nightly.md +20 -0
  16. package/skills/axstack/references/preview.md +53 -0
  17. package/skills/axstack/references/role-roster.md +5 -1
  18. package/skills/axstack/references/routing.md +7 -2
  19. package/skills/axstack/references/run-record.md +4 -1
  20. package/skills/axstack/references/t3-runtime.md +20 -3
  21. package/skills/axstack/references/test-audit-weekly.md +2 -1
  22. package/skills/axstack/references/ui-verification.md +2 -0
  23. package/skills/axstack/scripts/pick-instance.js +110 -0
  24. package/skills/axstack-audit/SKILL.md +5 -3
  25. package/skills/axstack-implement/SKILL.md +25 -10
  26. package/skills/axstack-relay/SKILL.md +2 -0
  27. package/skills/axstack-review/SKILL.md +42 -11
  28. package/skills/axstack-watch/SKILL.md +125 -42
  29. package/skills/axstack-watch/references/repair-publication.md +3 -0
  30. package/skills/axstack-watch/references/watch-runtime.md +31 -11
package/README.md CHANGED
@@ -42,9 +42,9 @@ implementation. Research, explanation, and peer review can start directly.
42
42
  | Failure mode | How Axstack responds |
43
43
  | --- | --- |
44
44
  | Wrong thing built | Align rounds clarify the request; every brainstorm runs a light arena across configured families. Use judges only for Rung 2 hard-to-reverse choices. |
45
- | Nobody really reviewed it | Strict TDD checks behavior first; with the mixed preset, cross-provider review checks the exact revision. |
45
+ | Nobody really reviewed it | Strict TDD checks behavior first; mixed authored review is cross-provider, and mixed peer review uses two isolated Sol-high sessions at the exact revision. |
46
46
  | Design rot | The design lens sketches boundaries before a build; Improve surfaces evidenced changes later. |
47
- | Agents left a mess | T3 makes delegation visible, one writer owns each PR, cleanup stays bounded, and a human merges. |
47
+ | Agents left a mess | T3 makes delegation visible, one writer owns each PR, cleanup stays bounded, and watched own PRs merge under guarded rules. |
48
48
 
49
49
  ## Quick start
50
50
 
@@ -106,7 +106,9 @@ upgrades, conflicts, and uninstalling.
106
106
  - Peer PRs receive two independent reviews. Authored changes receive a reviewer
107
107
  selected from the author's configured pairing. Reviews bind to exact revisions.
108
108
  - Agents keep accepted decisions and evidence for resume. Missing authority,
109
- unavailable models, and serious risks surface as holds. The human merges by default.
109
+ unavailable models, and serious risks surface as holds. For own PRs, automatic
110
+ merge is the default under the
111
+ [watch predicate](skills/axstack-watch/SKILL.md#5-state-readiness-precisely).
110
112
 
111
113
  Choose one explicit preset (each contains all role IDs): [mixed](profiles/presets/mixed.json)
112
114
  (recommended), [codex-only](profiles/presets/codex-only.json), or
@@ -122,21 +124,58 @@ pair seats in `mixed` and `codex-only`; `claude-only` records them as absent.
122
124
 
123
125
  ## Optional PR automation
124
126
 
125
- Manual review works without a schedule. Own open PRs in chat-run mode use a
126
- bound T3 schedule to resume the driver thread every 10 minutes. Each wake
127
- checks feedback, base, CI, and approval. Stop and verify deletion of the watch
128
- when all watched PRs merge or close and release is settled or not applicable, the user cancels,
129
- or it expires.
127
+ Manual review works without a schedule.
128
+ Every verified own-PR publication arms or joins the driver's chat-run watch,
129
+ subject to explicit stop-after-publication or observation requests.
130
+ Its bound T3 schedule wakes the driver every 10 minutes by default while open PRs stay watched.
131
+ See [Chat-run PR watch](docs/workflows.md#chat-run-pr-watch) for the lifecycle and quiet cadence.
130
132
 
131
133
  An optional native T3 review manager runs finite peer-review passes every 15
132
134
  minutes; the review automation never merges for you. Activation needs live
133
135
  host validation. See [PR-manager setup and safety](skills/axstack/references/automations.md).
134
136
 
137
+
138
+ ## Automatic merge boundaries
139
+
140
+ The recorded owning watch thread applies the full predicate in chat-run or
141
+ standalone authorized maintenance, including small and adopted work. Solo mode
142
+ uses current-head-and-base cross-provider review plus diligence; team mode also
143
+ needs a counted collaborator approval. Team bases are documented non-production
144
+ `dev`; solo bases are documented `integration` branches, including `main`.
145
+ Unknown classification means `deploying`. Whole stacks wait for every planned
146
+ member to be published and reviewed.
147
+
148
+ Cards name missing approval, ineligible bases, exclusions, or `Auto-merge: off`.
149
+ For own integration-base PRs, the card reply authorizes the guarded actor under
150
+ watch §5's exceptions.
151
+ In solo mode the user's merge-card reply authorizes the guarded merge of
152
+ user-written PRs or PRs with unknown or mixed provenance.
153
+ Team replies never replace collaborator approval. Promotion, release,
154
+ deploying-base, and peer PRs are user-merged, as are CI, manifest, merge-authority,
155
+ and non-`clean` revert changes. Test sources stay eligible. See watch §5 for all
156
+ excluded files and guarded merge mechanics. User merges are bottom-up for a stack.
157
+ This policy grants no release, npm publish,
158
+ or host install authority. Preview authority covers only the preview unit and
159
+ its `tailscale serve` route on the VPS.
160
+
161
+ Excluded: CLI proxy, account pooling, and IP routing; local CI contention handling
162
+ is deferred. Quota-driven scheduling or model routing is excluded. Automatic
163
+ merge of promotion, release, deploying-base, and peer PRs is excluded. Previews
164
+ outside the VPS, public previews, and production data are excluded. Nightly triage
165
+ never sends relay messages.
166
+
167
+ Accepted risks: two agents can miss the same defect while CI is green; spec
168
+ approval is the user's main checkpoint. A head guard does not atomically guard
169
+ base freshness; the concurrent-merge race is held by the post-merge push-failure
170
+ rule. A watch waking every 10 minutes (60 when quiet) until PRs land has an accepted
171
+ token cost. Preview code runs under the same VPS user as agents and is not isolated;
172
+ tests already do, so the added risk is small.
173
+
135
174
  ## Some notes
136
175
 
137
176
  - T3 Code is the only supported active runtime. Axstack adds no daemon or runtime
138
177
  database.
139
- - A human merges by default.
178
+ - The recorded owning watch thread merges eligible own PRs; excluded PRs use a merge card.
140
179
  - This is an early project; expect the workflows to evolve.
141
180
 
142
181
  ## Documentation
@@ -270,8 +270,9 @@ the affected work. Codex and Claude class resolution reads the saved T3 capabili
270
270
  `skills/axstack/scripts/resolve-models.js --provider`; missing or malformed
271
271
  catalogs hold. A preset model is used as given; class rows resolve to the newest
272
272
  matching catalog ID. Resume retains the recorded snapshot without re-resolution.
273
- Rejection, timeout, quota, and auth failures hold; no subscription inference,
274
- quota routing, or alternative-model retry applies.
273
+ Rejection, timeout, quota, and auth failures hold; outside bounded same-provider,
274
+ same-model account selection among one driver's instances via `pick-instance.js`,
275
+ no subscription inference, quota routing, or alternative-model retry applies.
275
276
 
276
277
  `modeId` and similar permission fields remain conservative declared intent.
277
278
  They do not prove effective T3 `runtimeMode`, sandboxing, or permission parity.
@@ -319,10 +320,10 @@ the affected operation. Provider/model routing, Linear documents through the
319
320
  executor MCP, and live schedule behavior need separate preflights.
320
321
 
321
322
  Installation creates no production schedule and adds no custom scheduler.
322
- Chat-run own-PR watch uses a bound T3 schedule every 10 minutes by default;
323
- record its ID, driver thread, and expiry. Missing schedule capability holds
324
- activation. Delete the schedule by its exact ID and verify absence with
325
- `list_scheduled_tasks` when the watch ends; uncertainty preserves the hold.
323
+ Every verified own-PR publication arms or joins the driver's chat-run watch.
324
+ Its bound T3 schedule resumes the driver every 10 minutes by default while open PRs stay watched.
325
+ See [Chat-run PR watch](workflows.md#chat-run-pr-watch) for authority, schedule identity and stop conditions.
326
+ Missing schedule capability holds activation.
326
327
  The optional review manager uses an unbound 15-minute T3 schedule and requires
327
328
  its separate native canary before activation. Installed guidance does not prove
328
329
  live behavior. See [Review manager](../skills/axstack/references/automations.md).
package/docs/workflows.md CHANGED
@@ -15,6 +15,21 @@ The directly invoked phase loads the applicable shared references for routing,
15
15
  lifecycle, T3 runtime boundaries, role/model/risk contracts, the run record,
16
16
  and PR shape.
17
17
 
18
+ Before each Claude or Codex dispatch/launch, run
19
+ `bun skills/axstack/scripts/pick-instance.js --provider claude|codex`.
20
+ It prints the enabled same-driver account with the most tier-weighted headroom,
21
+ excluding reached limits or any window at ≥95% usage. Provider, model, class,
22
+ and effort stay fixed. Save `--json` output in private dispatch evidence and
23
+ record its pointer and chosen instanceId. Only error exit 1 permits canonical
24
+ fallback after availability validation. Exit 2 (no eligible provider instances)
25
+ holds the work without fallback. This permits no mid-thread failover.
26
+ `--settings <path>` overrides `~/.t3/userdata/settings.json`.
27
+ Usage is cached for five minutes in `${XDG_CACHE_HOME:-~/.cache}/axstack/usage.json`;
28
+ failed requests use stale usage or a tier-only `unknown` score without cache.
29
+ Codex's plan is unknown until a successful usage response, so its uncached
30
+ failure weight is 1. `AXSTACK_CLAUDE_USAGE_URL` and `AXSTACK_CODEX_USAGE_URL`
31
+ override endpoints for local fixtures; tests use loopback only.
32
+
18
33
  Direct routes need no spec ceremony:
19
34
 
20
35
  - `axstack-research` answers one bounded source-backed question.
@@ -33,7 +48,7 @@ Direct routes need no spec ceremony:
33
48
  authorized, proven cleanup to Implement as structure-preserving work through
34
49
  independent review.
35
50
  - Manual `axstack-review` can inspect existing code at an exact revision within
36
- a named scope. Both configured peer reviewers inspect six lenses independently;
51
+ a named scope. Both configured codebase reviewers inspect six lenses independently;
37
52
  the driver reports validated defects and risks, improvement opportunities,
38
53
  unverified leads, and `COMPLETE` or `INCOMPLETE` coverage. This report does
39
54
  not approve a PR or publish findings.
@@ -78,7 +93,21 @@ starts later for each repository the user names.
78
93
  derives one boundary from test-audit PR history, skips open PRs, overlap with
79
94
  live T3 thread/run and worktree ownership, unsafe baselines or empty candidate sets,
80
95
  and opens at most one independently reviewed test-only PR per week through
81
- the driver. Workers never push; the human merges.
96
+ the driver. Workers never push; the owning watch thread applies the
97
+ [watch predicate](../skills/axstack-watch/SKILL.md#5-state-readiness-precisely).
98
+
99
+ ## Nightly PR-triage activation
100
+
101
+ Use the packaged [nightly prompt](../skills/axstack/references/pr-triage-nightly.md)
102
+ and [setup guidance](../skills/axstack/references/automations.md#nightly-pr-triage-setup).
103
+ Read existing schedules before creating the single unbound native T3 schedule
104
+ at 02:00 host time; reuse it instead of creating a duplicate.
105
+ Keep the host timezone, schedule ID, prompt, and repository set in a durable
106
+ activation record outside run records so Close-out preserves them.
107
+ Each pass reports all own open PRs in its own T3 thread, with forge state or
108
+ `UNKNOWN`, PRs inactive for 7 days, and the top three to act on.
109
+ The pass stays read-only and never declares merge-ready.
110
+ This delivery creates no live schedule; source tests do not prove activation.
82
111
 
83
112
  ## Role presets
84
113
 
@@ -91,7 +120,7 @@ role.
91
120
 
92
121
  | Preset | Author | Ordered peer reviewers | Astra / Opus advisers | Auditor |
93
122
  | --- | --- | --- | --- | --- |
94
- | `mixed` | Sol high | Sol high; Opus medium | Astra high / Opus xhigh | Sonnet high + Sol high |
123
+ | `mixed` | Sol high | Sol high; Sol high | Astra high / Opus xhigh | Sonnet high + Sol high |
95
124
  | `codex-only` | Sol high | Sol high; Luna xhigh | Astra high / unavailable | Luna xhigh + Sol high |
96
125
  | `claude-only` | Opus medium | Opus medium; Sonnet high | unavailable / Opus xhigh | Sonnet high (Sol absent) |
97
126
 
@@ -114,9 +143,12 @@ catalog using `skills/axstack/scripts/resolve-models.js --provider`; missing or
114
143
  malformed catalogs hold. Active runs and resume reuse their snapshot after
115
144
  later installation changes without re-resolution.
116
145
 
117
- Peer roles keep the stable IDs `axstack-reviewer-primary` and
118
- `axstack-reviewer-secondary`; their provider/class mappings come only from the
119
- selected preset.
146
+ Peer roles use the stable IDs `axstack-reviewer-primary` and
147
+ `axstack-reviewer-peer`; their provider/class mappings come only from the
148
+ selected preset. The mixed peer coordinator and review-lane binding
149
+ `axstack-owner` uses Sol high and never reviews. `axstack-reviewer-secondary`
150
+ is used in the authored mapping and, alongside `axstack-reviewer-primary`,
151
+ in codebase findings mode.
120
152
 
121
153
  The unavailable adviser in each single-provider preset stays explicitly
122
154
  `model: null` within that provider's bounds. Installer readiness accepts that
@@ -128,8 +160,9 @@ in saved T3 capabilities. Empty Antigravity catalogs hold. Missing or
128
160
  unavailable roles hold only affected work. Requested model, effort, and
129
161
  permission values need actual T3 configuration read-back; stored `modeId` is
130
162
  neither permission parity nor a sandbox. Rejection, timeout, quota, and auth
131
- failures hold; no subscription inference, quota routing, or alternative retry
132
- applies.
163
+ failures hold; outside bounded same-provider, same-model account selection among
164
+ one driver's instances via `pick-instance.js`, no subscription inference, quota
165
+ routing, or alternative retry applies.
133
166
 
134
167
  ## T3 runtime boundary
135
168
 
@@ -226,8 +259,10 @@ One T3 host/server owns a run, one persistent owner owns each PR, and one
226
259
  writer owns each candidate. Fanout has no fixed PR count; it follows real
227
260
  dependencies, writer isolation, host capacity, and spending limits. Each PR has
228
261
  one theme and a measured size under the shared
229
- [PR-shape policy](../skills/axstack/references/pr-shape.md). The human merges
230
- by default; review approval never grants merge authority.
262
+ [PR-shape policy](../skills/axstack/references/pr-shape.md).
263
+ For own PRs, automatic merge is the default under the
264
+ [watch predicate](../skills/axstack-watch/SKILL.md#5-state-readiness-precisely).
265
+ Review approval alone never grants merge authority.
231
266
  For the rationale band, the autonomous driver records a cohesion rationale. The exception band
232
267
  requires a reasonable split attempt and full exception record. These are
233
268
  autonomous driver choices; size alone never requires user approval.
@@ -267,32 +302,94 @@ read-only observer for standalone watches and never sends.
267
302
  For authorized engineering delivery, [Autopilot](../skills/axstack/references/autopilot.md)
268
303
  continues from Align through the eligible phase sequence in the same chat.
269
304
  The human approves substantial specs, release PRs, peer and deploying-base
270
- merges, and the npm stage. Only the chat-run driver holding the approved ticket
271
- map may merge its own eligible integration-base PRs under the full
272
- [watch merge predicate](../skills/axstack-watch/SKILL.md#5-state-readiness-precisely). Managers,
273
- workers, reviewers, automations, and standalone watches never merge. An open
274
- hold pauses the run. Implement arms maintain-mode watch
275
- at its first published PR; release and install run only under recorded per-run
276
- authority, and Close-out follows their verified receipts.
305
+ merges, and the npm stage. The recorded owning watch thread is the merge actor,
306
+ including `axstack-owner` for standalone authorized maintenance and small or
307
+ adopted work. Apply the full
308
+ [watch merge predicate](../skills/axstack-watch/SKILL.md#5-state-readiness-precisely).
309
+ Managers, workers, reviewers, monitors, and nightly triage never merge.
310
+ Observation-only and peer watches never merge. An open
311
+ hold pauses the run.
312
+ After verified publication readback of every own PR from any Axstack phase,
313
+ the driver arms or joins its chat-run watch in authorized maintain mode.
314
+ Explicit stop-after-publication and observation-only requests still apply.
315
+ Release and install run only under recorded per-run authority.
316
+ Close-out follows their verified receipts and the watch's end.
277
317
 
278
318
  Use `axstack-watch` chat-run mode to watch every PR raised by this run,
279
319
  including later verified publications and PRs explicitly adopted by the driver.
280
- A bound T3 schedule resumes the driver thread every 10 minutes; record the
281
- schedule ID and expiry. Each wake reconciles all unsettled dispatch attempts
320
+ A bound T3 schedule resumes the driver thread every 10 minutes by default.
321
+ The run record holds the schedule ID and driver thread.
322
+ Each wake reconciles all unsettled dispatch attempts
282
323
  and runs the own-PR maintenance loop: feedback, base movement, required CI,
283
324
  and approval. Delegated work follows the T3 runtime contract. There is no
284
325
  daemon or polling model between wakes. Independent PRs can repair in parallel
285
326
  with one writer per PR; a changed stack ancestor invalidates child evidence.
286
327
  An incomplete scan leaves readiness `UNKNOWN`.
287
328
 
288
- The watch lasts until all member PRs merge or close and release is settled or
289
- not applicable, the user cancels, or its wake expires. Delete the schedule by
329
+ The chat-run watch never expires or waits for re-authorization while PRs remain open.
330
+ The chat-run watch ends only when all watched PRs merge or close, launched work
331
+ is settled, and release is settled or not applicable, or the user cancels.
332
+ A required PR closed without merging keeps its decision hold and wake.
333
+ Follow [Chat-run watch runtime](../skills/axstack-watch/references/watch-runtime.md#chat-run-watch)
334
+ for native lifetime re-arming and quiet cadence changes on the recorded schedule ID.
335
+ Delete the schedule by
290
336
  its recorded ID and verify absence through `list_scheduled_tasks`; uncertain
291
337
  deletion preserves the hold. Settlement and run archive are separate driver
292
338
  steps. Implementation candidates are published and read back before independent
293
339
  authored review. Adopted own-PR maintenance receives independent exact-local-SHA
294
- review before driver publication and remote readback. The human merges by
295
- default. Installed instructions do not prove scheduled observation or driver wake.
340
+ review before driver publication and remote readback. Watch §5 governs merges. Installed instructions do not prove scheduled observation or driver wake.
341
+
342
+
343
+ ## Automatic merge boundaries
344
+
345
+ Solo approval is current-head-and-base cross-provider authored-review `APPROVE`
346
+ plus diligence `PASS`. The reviewer differs from every receipt-recorded provider
347
+ that authored or repaired `merge-base..head` commits. Team approval also needs a
348
+ counted non-author collaborator review at the current head. Axstack automation
349
+ votes never count. Unknown or mixed provenance and manually authored PRs need a
350
+ merge card. New heads need fresh authored review, diligence, and CI. A collaborator
351
+ approval carries over only across an unchanged stable patch-id rebase, recorded
352
+ for both heads, while the forge still counts it.
353
+
354
+ Team auto-merge targets only documented non-production `dev`; solo targets `main`
355
+ or another documented `integration` base. Unknown classification means
356
+ `deploying`. Re-read approval mode and classification before merging and on resume.
357
+ For a stack, only the bottom base must qualify; every upper base is its next-lower
358
+ branch at the reviewed head. Every planned member must be published and satisfy
359
+ the remaining terms and exclusions. Never retarget reviewed members for eligibility.
360
+
361
+ Merge cards report cases that fail approval, base, exclusion, or `Auto-merge: off`
362
+ rules. On own integration-base PRs, a user card reply permits the guarded actor to
363
+ merge, subject to watch §5's exceptions.
364
+ In solo mode the user's merge-card reply authorizes the guarded merge of
365
+ user-written PRs or PRs with unknown or mixed provenance.
366
+ In team mode it clears only an ineligible base, auto-merge turned off, and an open
367
+ human or bot comment; it never replaces collaborator approval. CI and manifest changes,
368
+ merge-authority text and non-`clean` revert PRs are user-merged on
369
+ the forge. Promotion, release, deploying-base, and peer PRs are also user-merged.
370
+ Test sources stay eligible; `.github/`, workflow-invoked paths, manifests and
371
+ lockfiles, runner config, branch protection and rulesets, `CODEOWNERS`, and
372
+ merge-authority text are excluded from auto-merge. Non-agent comments hold it
373
+ until human clearance under the packaged comment rules. The revert gate reads the declaration starting
374
+ with `Revert:` at line start; a quoted format inside a bullet is not a declaration.
375
+
376
+ User merges are bottom-up for a stack.
377
+ This policy grants no release, npm publish, or host install
378
+ authority. Preview authority covers only the preview unit and its `tailscale
379
+ serve` route on the VPS.
380
+
381
+ Excluded: CLI proxy, account pooling, and IP routing; local CI contention handling
382
+ is deferred. Quota-driven scheduling or model routing is excluded. Automatic
383
+ merge of promotion, release, deploying-base, and peer PRs is excluded. Previews
384
+ outside the VPS, public previews, and production data are excluded. Nightly triage
385
+ never sends relay messages.
386
+
387
+ Accepted risks: two agents can miss the same defect while CI is green; spec
388
+ approval is the user's main checkpoint. A head guard does not atomically guard
389
+ base freshness; the concurrent-merge race is held by the post-merge push-failure
390
+ rule. A watch waking every 10 minutes (60 when quiet) until PRs land has an accepted
391
+ token cost. Preview code runs under the same VPS user as agents and is not isolated;
392
+ tests already do, so the added risk is small.
296
393
 
297
394
  ## Optional native peer-review automation
298
395
 
@@ -331,7 +428,7 @@ cursor files, or historical runtime fallback.
331
428
 
332
429
  The review manager uses one short packaged prompt that loads the current
333
430
  relative contract and invokes `axstack-review`. Bounded jobs publish ordinary
334
- exact-head review verdicts; the human merges. Manual adopted-PR maintenance
431
+ exact-head review verdicts; peer PRs are merged by the user. Manual adopted-PR maintenance
335
432
  uses `axstack-watch` with local-SHA review before authorized publication.
336
433
  Exceptional security, permanent-on-chain, or architectural decisions remain actionable in GitHub or a durable user-owned conversation
337
434
  after the manager session ends, with an authorized deduplicated Telegram notification.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "axstack",
3
- "version": "0.24.1",
3
+ "version": "0.25.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",
@@ -52,7 +52,16 @@
52
52
  "provider": "claude",
53
53
  "modeId": "bypassPermissions",
54
54
  "thinkingOptionId": "high",
55
- "notes": "Secondary reviewer in the ordered claude-only peer pair: Opus medium followed by Sonnet high. Eligible authored reviewer for an Opus-authored candidate. Never author or owner; review exact SHA and base across all six angles and acceptance. Peer first pass stays isolated. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
55
+ "notes": "Eligible authored reviewer for an Opus-authored candidate. Never author or owner; review exact SHA and base across all six angles and acceptance. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
56
+ "modelClass": "sonnet"
57
+ },
58
+ {
59
+ "id": "axstack-reviewer-peer",
60
+ "name": "Axstack reviewer (peer)",
61
+ "provider": "claude",
62
+ "modeId": "bypassPermissions",
63
+ "thinkingOptionId": "high",
64
+ "notes": "Second reviewer in the ordered claude-only peer pair: Opus medium followed by Sonnet high. Never author or owner; review exact SHA and base across all six angles and acceptance. Peer first pass stays isolated. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
56
65
  "modelClass": "sonnet"
57
66
  },
58
67
  {
@@ -52,7 +52,16 @@
52
52
  "provider": "codex",
53
53
  "modeId": "full-access",
54
54
  "thinkingOptionId": "xhigh",
55
- "notes": "Secondary reviewer in the ordered codex-only peer pair: Sol high followed by Luna xhigh. Eligible authored reviewer for a Sol-authored candidate. Never author or owner; review exact SHA and base across all six angles and acceptance. Peer first pass stays isolated.",
55
+ "notes": "Eligible authored reviewer for a Sol-authored candidate. Never author or owner; review exact SHA and base across all six angles and acceptance.",
56
+ "modelClass": "luna"
57
+ },
58
+ {
59
+ "id": "axstack-reviewer-peer",
60
+ "name": "Axstack reviewer (peer)",
61
+ "provider": "codex",
62
+ "modeId": "full-access",
63
+ "thinkingOptionId": "xhigh",
64
+ "notes": "Second reviewer in the ordered codex-only peer pair: Sol high followed by Luna xhigh. Never author or owner; review exact SHA and base across all six angles and acceptance. Peer first pass stays isolated.",
56
65
  "modelClass": "luna"
57
66
  },
58
67
  {
@@ -22,11 +22,11 @@
22
22
  {
23
23
  "id": "axstack-owner",
24
24
  "name": "Axstack PR owner",
25
- "provider": "claude",
26
- "modeId": "bypassPermissions",
27
- "thinkingOptionId": "medium",
28
- "notes": "Persistent PR owner: one owner per PR, accountable for candidate, fixes, verification evidence, and monitoring. May delegate coding but never edits a worker-owned candidate concurrently. Launches eligible independent reviewers. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
29
- "modelClass": "opus"
25
+ "provider": "codex",
26
+ "modeId": "full-access",
27
+ "thinkingOptionId": "high",
28
+ "notes": "Persistent PR owner: one owner per PR, accountable for candidate, fixes, verification evidence, and monitoring. May delegate coding but never edits a worker-owned candidate concurrently. Launches eligible independent reviewers. Peer coordinator and review-lane binding; never reviews.",
29
+ "modelClass": "sol"
30
30
  },
31
31
  {
32
32
  "id": "axstack-author",
@@ -43,7 +43,7 @@
43
43
  "provider": "codex",
44
44
  "modeId": "full-access",
45
45
  "thinkingOptionId": "high",
46
- "notes": "Primary reviewer in the ordered mixed peer pair: Sol high followed by Opus medium. Eligible authored reviewer for an Opus-authored candidate. Never author or owner; review exact SHA and base across all six angles and acceptance. Peer first pass stays isolated.",
46
+ "notes": "Primary reviewer in the ordered mixed peer pair: Sol high followed by Sol high. Eligible authored reviewer for an Opus-authored candidate. Never author or owner; review exact SHA and base across all six angles and acceptance. Peer first pass stays isolated.",
47
47
  "modelClass": "sol"
48
48
  },
49
49
  {
@@ -52,9 +52,18 @@
52
52
  "provider": "claude",
53
53
  "modeId": "bypassPermissions",
54
54
  "thinkingOptionId": "medium",
55
- "notes": "Secondary reviewer in the ordered mixed peer pair: Sol high followed by Opus medium. Eligible authored reviewer for a Sol-authored candidate. Never author or owner; review exact SHA and base across all six angles and acceptance. Peer first pass stays isolated. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
55
+ "notes": "Eligible authored reviewer for a Sol-authored candidate. Never author or owner; review exact SHA and base across all six angles and acceptance. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
56
56
  "modelClass": "opus"
57
57
  },
58
+ {
59
+ "id": "axstack-reviewer-peer",
60
+ "name": "Axstack reviewer (peer)",
61
+ "provider": "codex",
62
+ "modeId": "full-access",
63
+ "thinkingOptionId": "high",
64
+ "notes": "Second reviewer in the ordered mixed peer pair: Sol high followed by Sol high. Never author or owner; review exact SHA and base across all six angles and acceptance. Peer first pass stays isolated.",
65
+ "modelClass": "sol"
66
+ },
58
67
  {
59
68
  "id": "axstack-diligence",
60
69
  "name": "Axstack diligence checker",
@@ -7,6 +7,25 @@ For optional weekly test audits, use the separate packaged
7
7
  [Weekly test-audit prompt](test-audit-weekly.md).
8
8
  The native canary below is also required before weekly activation.
9
9
 
10
+ For nightly read-only PR reports, use the separate packaged
11
+ [Nightly PR-triage prompt](pr-triage-nightly.md).
12
+
13
+ ## Nightly PR-triage setup
14
+
15
+ Follow the weekly test-audit pattern for an unbound native schedule.
16
+ Before creating a schedule, read existing schedules with `list_scheduled_tasks`.
17
+ Reuse the existing triage schedule for the recorded repository set.
18
+ Never create a duplicate triage schedule.
19
+ Use one native T3 `schedule_task`, unbound, nightly at 02:00 host time, with
20
+ `fixed_time`, `timeOfDay:"02:00"`, and `bindToCurrentThread:false`.
21
+ Supply the packaged triage prompt and the durable activation record's location.
22
+ Record the host timezone, schedule ID, prompt, and repository set in a durable
23
+ activation record outside any run records, such as
24
+ `~/.local/share/axstack/pr-triage/activation.md`.
25
+ Preserve the activation record and schedule through Close-out.
26
+ Each scheduled pass reports in its own T3 thread under the read-only prompt.
27
+ Source checks do not prove live schedule delivery or report coverage.
28
+
10
29
  ## Topology and schedules
11
30
 
12
31
  The T3 project `axstack-review-lane` uses the VPS's existing
@@ -268,7 +287,11 @@ private or local artifacts. Write the local HTML copy under the established
268
287
 
269
288
  No manager, coordinator, or worker may merge, close, force-push, rebase,
270
289
  restack, broaden scope, or mutate a PR branch. Human merge remains the
271
- boundary.
290
+ boundary for peer PRs.
291
+ User merges are bottom-up for a stack.
292
+ For own PRs, automatic merge is the default under the
293
+ [watch predicate](../../axstack-watch/SKILL.md#5-state-readiness-precisely);
294
+ this manager never becomes that watch's merge actor.
272
295
 
273
296
  ## Exceptional decisions and notifications
274
297
 
@@ -36,7 +36,7 @@ human approval)` as a decision hold eligible under the Notification policy.
36
36
  ## Phase sequence
37
37
 
38
38
  - Small: Align read-back, small-change intent, implement, watch in maintain
39
- mode, human merge. An opted-in Align refinement is part
39
+ mode, merge under the watch §5 predicate. An opted-in Align refinement is part
40
40
  of read-back.
41
41
  - Substantial: Align, spec draft with advisers and diligence, human spec
42
42
  approval at gate 1, tickets with diligence, implement, watch in maintain mode,
@@ -45,30 +45,44 @@ human approval)` as a decision hold eligible under the Notification policy.
45
45
 
46
46
  Do not seek another phase-start instruction after a completed identity.
47
47
  Spec approval is always the human's decision. Audit self-improvement PRs follow
48
- the same merge predicate. Only the original chat-run driver with the approved
49
- ticket map may auto-merge PRs satisfying `axstack-implement` §6's approved
50
- ticket-map membership and `integration` base conditions. The user merges peer
51
- PRs and PRs into `deploying` bases. Managers, workers, reviewers, automations,
52
- and standalone watches never merge. A stack follows its guarded bottom-up rule.
53
-
54
- ## Implement into maintain watch
55
-
56
- When implement publishes the run's first PR, arm exactly one `axstack-watch`
57
- chat-run in authorized maintain mode. Read the [T3 runtime boundary](t3-runtime.md) and use its bound
58
- `schedule_task` wake (`everyMs:600000`), recording the scheduledTaskId. Later run PRs join after verified
59
- publication readback; an explicitly adopted PR joins only with its maintenance
60
- snapshot. The original driver alone routes work; one author writes each
48
+ the same merge predicate.
49
+ For own PRs, automatic merge is the default under the
50
+ [watch predicate](../../axstack-watch/SKILL.md#5-state-readiness-precisely).
51
+ The recorded owning watch thread is the merge actor, including `axstack-owner`
52
+ for authorized standalone maintenance and small or adopted work.
53
+ Managers, workers, reviewers, monitors, and nightly triage never merge.
54
+ Observation-only and peer watches never merge.
55
+ Apply watch §5's approval, base, exclusions, and merge-card rules.
56
+ A stack follows its guarded whole-stack rule.
57
+ User merges are bottom-up for a stack.
58
+
59
+ ## Own PR publication into maintain watch
60
+
61
+ When any Axstack phase publishes an own PR, after verified publication readback
62
+ the driver arms one chat-run watch in authorized maintain mode or joins the existing watch.
63
+ This covers implement, small change, debug repair, improve, and adopted-PR maintenance.
64
+ Explicit user stop-after-publication and observation-only requests prevail.
65
+ Never require a manual `axstack-watch` invocation.
66
+ The driver remains the single owner and sole run-record writer.
67
+ Never create a per-PR session or an ownership hand-off.
68
+ Read the [T3 runtime boundary](t3-runtime.md) and use its bound
69
+ `schedule_task` wake (`everyMs:600000`), recording the scheduledTaskId.
70
+ An explicitly adopted PR joins only with its maintenance snapshot.
71
+ The original driver alone routes work; one author writes each
61
72
  candidate. Until a PR is merge-ready, wakes feed implement §6 step 4. After
62
73
  merge-ready, watch §5 maintenance repairs feedback, rebases when the base moves,
63
74
  keeps CI green, and checks approvals without re-requesting human review.
64
75
 
65
- Maintain is the default mode for run-created PRs. End the chat-run watch when
66
- every watched PR is merged or closed and the run's release step is settled or
67
- not applicable, or when the user cancels. Expiry is a recorded stop with
68
- resumable state, never a silent renewal. A required PR closed without merging
69
- is incomplete scope; it does not make the run release-eligible. On wake expiry
70
- record `Autopilot: paused (wake expired; resume: user reauthorizes a wake)` and
71
- notify under the recorded Notification policy when user action is needed.
76
+ Maintain is the default mode for run-created PRs.
77
+ End the chat-run watch only when every watched PR is merged or closed,
78
+ launched work is settled, and the run's release step is settled or not applicable,
79
+ or the user cancels.
80
+ A required PR closed without merging is incomplete scope; it does not make the run release-eligible.
81
+ Keep its decision hold and wake until the user resolves scope or cancels.
82
+ The chat-run watch never expires or waits for re-authorization while PRs remain open.
83
+ Follow [Chat-run watch runtime](../../axstack-watch/references/watch-runtime.md#chat-run-watch)
84
+ for quiet cadence and native schedule re-arming.
85
+ Run Close-out after the watch ends, subject to its existing acceptance conditions.
72
86
 
73
87
  ## Release and install, when applicable
74
88
 
@@ -45,6 +45,16 @@ remote confirmation. Reviewers inspect a detached immutable checkout of the
45
45
  confirmed candidate SHA and pinned base, never only the movable branch name.
46
46
  Any author repair creates a new revision and repeats this boundary.
47
47
 
48
+ ## Revert line
49
+
50
+ Every own PR description must contain exactly one `Revert` line:
51
+ `Revert: clean` | `Revert: steps: <manual steps>` | `Revert: irreversible: <why>`.
52
+ Use `clean` only when a single `git revert` of the merge commit restores the
53
+ previous behaviour with CI green.
54
+ A `clean` revert leaves no data, schema, config, external, or published effect behind.
55
+ Otherwise use `steps` or `irreversible`.
56
+ Classify every release PR as `irreversible`.
57
+
48
58
  ## Immutable checkout shape
49
59
 
50
60
  The driver creates the immutable review checkout with `git worktree add --detach <run>/checkouts/<key> <sha>` at the confirmed candidate SHA and pinned base.
@@ -40,9 +40,14 @@ the revised scope and plan.
40
40
 
41
41
  Validate the configured provider and model at actual launch. If it is
42
42
  unavailable or exhausted, pause affected work, record the gap, and ask the
43
- user. Never infer a route from quota state or subscription entitlement. Every
43
+ user. Only same-provider, same-model account selection among instances of one
44
+ driver may use headroom under [Provider bindings](t3-runtime.md#preflight-and-binding).
45
+ An exhausted account with no eligible sibling still holds; this permits no
46
+ mid-thread failover or provider/model substitution.
47
+ Never infer any other route from quota state or subscription entitlement. Every
44
48
  substitution requires the user's decision: configured alternatives are not
45
49
  defaults. Rejection, timeout, quota and auth failures hold affected work.
50
+ Substitution here means changing provider or model, excluding that account selection.
46
51
  Read the [T3 runtime boundary](t3-runtime.md) before dispatch, receipt consumption
47
52
  or recovery; resolve models from the saved capabilities snapshot and verify
48
53
  requested and effective settings separately.
@@ -103,19 +108,17 @@ gate.
103
108
 
104
109
  ## Authority
105
110
 
106
- - The driver owns run scope, cross-PR coordination, integration, and every
107
- selected external-tracker mutation. The checker reports discrepancies only.
108
- - One T3 host/server owns a run. There is no fixed active-PR count;
109
- fanout is dependency- and capacity-driven within configured host resource and
110
- spending limits. The driver reduces fanout when the run record shows rework,
111
- review backlog, or resource pressure, queues conflicting or dependent work,
112
- and uses `gh stack` for dependent PRs. Routine shape, split, fanout, and
113
- exception choices are autonomous driver decisions within the approved scope;
114
- size alone never requires user approval.
115
- - Exactly one writer per candidate acts at a time, with one persistent owner
116
- accountable for each PR. Each PR carries one theme and a measured size under
117
- [PR shape](pr-shape.md). Unknown capacity metrics are reported as unknown,
118
- never as a telemetry prerequisite or blocker. Parent changes invalidate
119
- affected child evidence, which must be refreshed against the new parent.
120
- - The human merges by default, bottom-up for a stack. Review approval and
121
- reviewer votes never grant mutation or merge authority.
111
+ - The driver owns scope, cross-PR coordination, integration, and every selected
112
+ external-tracker mutation. Checker reports discrepancies only.
113
+ - One T3 host/server owns a run. No fixed active-PR count; fanout is dependency-
114
+ and capacity-driven within host resource and spending limits. Reduce fanout for
115
+ recorded rework, review backlog, or resource pressure. Queue conflicts and
116
+ dependencies; use `gh stack` for dependent PRs. Routine shape, split, fanout, and
117
+ exception choices within approved scope are autonomous driver decisions; size alone never
118
+ requires user approval.
119
+ - Exactly one writer per candidate; one persistent accountable PR owner. Each PR has one theme and measured size under [PR shape](pr-shape.md). Report unknown capacity
120
+ metrics; never a telemetry prerequisite or blocker. Parent changes invalidate
121
+ affected child evidence; refresh it against the new parent.
122
+ - Own PRs default to automatic merge under [watch §5](../../axstack-watch/SKILL.md).
123
+ Review approval and reviewer votes alone never grant mutation or merge authority.
124
+ User merges are bottom-up for a stack.