axstack 0.34.4 → 0.36.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 (33) hide show
  1. package/README.md +3 -2
  2. package/bin/axstack.js +1 -1
  3. package/docs/getting-started.md +4 -4
  4. package/docs/guides.md +1 -1
  5. package/docs/installation.md +8 -3
  6. package/docs/workflows.md +40 -8
  7. package/package.json +1 -1
  8. package/profiles/presets/claude-only.json +18 -0
  9. package/profiles/presets/codex-only.json +18 -0
  10. package/profiles/presets/mixed.json +18 -0
  11. package/skills/axstack/references/automations.md +4 -2
  12. package/skills/axstack/references/autopilot.md +5 -15
  13. package/skills/axstack/references/candidate-publication.md +25 -26
  14. package/skills/axstack/references/contracts.md +2 -3
  15. package/skills/axstack/references/lifecycle.md +2 -2
  16. package/skills/axstack/references/pr-chain.md +51 -0
  17. package/skills/axstack/references/role-roster.md +6 -1
  18. package/skills/axstack/references/run-record.md +1 -0
  19. package/skills/axstack/references/t3-runtime.md +2 -2
  20. package/skills/axstack/references/test-audit-weekly.md +1 -1
  21. package/skills/axstack/references/ui-verification.md +1 -0
  22. package/skills/axstack-align/SKILL.md +5 -0
  23. package/skills/axstack-implement/SKILL.md +24 -55
  24. package/skills/axstack-improve/SKILL.md +3 -3
  25. package/skills/axstack-research/SKILL.md +2 -1
  26. package/skills/axstack-review/SKILL.md +13 -1
  27. package/skills/axstack-scout/SKILL.md +84 -0
  28. package/skills/axstack-verify/SKILL.md +2 -1
  29. package/skills/axstack-watch/SKILL.md +21 -9
  30. package/skills/axstack-watch/references/repair-publication.md +44 -59
  31. package/skills/axstack-watch/references/watch-runtime.md +15 -30
  32. package/src/capabilities.js +2 -4
  33. package/src/roles.js +2 -2
@@ -27,6 +27,7 @@ edge into the lifecycle (including its audit hook), then apply shared routing:
27
27
  - [Shared routing](../axstack/references/routing.md)
28
28
  - [PR-shape policy](../axstack/references/pr-shape.md)
29
29
  - [Candidate publication](../axstack/references/candidate-publication.md)
30
+ - [PR chains](../axstack/references/pr-chain.md)
30
31
 
31
32
  Independently confirm the applicable
32
33
  [proportional scope identity](../axstack/references/routing.md#proportional-scope-identity):
@@ -73,13 +74,9 @@ never edits concurrently. Only an explicit accepted transfer changes ownership;
73
74
  ordinary resume reconciles the same sessions and record.
74
75
 
75
76
  Fanout follows dependencies and capacity within configured limits. Queue
76
- conflicts and dependent work; use `gh stack`, starting each child from its
77
- reviewed parent. When the reviewed parent changes, hold reliance on
78
- stale child evidence and child merge readiness; rebase onto the new parent revision,
79
- re-run affected checks, and remeasure shape against it.
80
- Size growth alone is not an automatic hold.
81
- A parent need not wait for an
82
- independently reviewed child. Dispatch only when ownership, worktree, dependency
77
+ conflicts; PR chains owns reviewed-parent branching, immediate child evidence
78
+ invalidation, lazy merge updates and legacy rebasing. A parent need not wait
79
+ for an independently reviewed child. Dispatch only when ownership, worktree, dependency
83
80
  revisions, writer exclusivity, and capacity agree with live state. Shape, split,
84
81
  fanout, and exceptions are autonomous driver decisions within the approved scope.
85
82
  Size alone never requires user approval.
@@ -178,6 +175,7 @@ If a PR changes a mapped feature, its author updates the feature file in the sam
178
175
  For a missing skill, add "suggest `axstack-verify create`" to the receipt's `Unverified:` line.
179
176
  Never generate a verification skill automatically.
180
177
  For a broken or stale recipe, report the gap.
178
+ Report a broken or stale recipe as a `low` finding naming `axstack-verify maintain`.
181
179
  Never let a broken or stale recipe waive existing acceptance obligations.
182
180
  Keep browser recipes tool-neutral for the verifier.
183
181
 
@@ -195,12 +193,12 @@ Simplification: <applied | not-applicable> — evidence: <diff locations and che
195
193
  Acceptance: <checks + observed results>
196
194
  Dependencies: <parent revisions or none>
197
195
  Unverified: <boundaries + reasons>
198
- Next: <owner reconciles receipt, uses gh stack to push exact revision, confirms
196
+ Next: <owner reconciles receipt, uses candidate-publication to push exact revision, confirms
199
197
  remote readback, then routes it to axstack-review>
200
198
  ```
201
199
 
202
200
  The author stops at that receipt and does not push. The driver reconciles it,
203
- uses `gh stack` to publish, confirms remote readback, and continues the loop
201
+ uses candidate-publication to publish, confirms remote readback, and continues the loop
204
202
  without editing the candidate. No step grants merge authority.
205
203
 
206
204
  Every own PR description must contain exactly one `Revert` line.
@@ -211,8 +209,8 @@ for its format and classification.
211
209
 
212
210
  Inputs are one snapshotted small-change intent or an approved spec and ticket
213
211
  map. The unit is that accepted task/PR map: run independent PRs in parallel
214
- within the fanout rule; run a dependent `gh stack` bottom-up, each child from
215
- its reviewed parent. The driver is owner, sole record writer, dispatcher,
212
+ within the fanout rule; run an ordinary dependent PR chain root-first under PR chains, each child
213
+ from its reviewed parent; preexisting native stacks retain their legacy path. The driver is owner, sole record writer, dispatcher,
216
214
  publisher, and wait-holder for every loop PR it creates. Resume preserves an
217
215
  existing live owner absent an accepted transfer.
218
216
 
@@ -246,8 +244,8 @@ For each PR:
246
244
  findings to the same author for a new revision, increments `repairs`, and
247
245
  returns to step 1. `INCOMPLETE`, a provenance gap, unavailable model, serious
248
246
  risk, or the third review round with `REQUEST_CHANGES` and/or diligence
249
- `FINDINGS` on one PR records `held`. A changed parent sends its child back
250
- to step 1.
247
+ `FINDINGS` on one PR records `held`. A changed parent immediately invalidates affected child readiness; refresh
248
+ the next ready children as needed under PR chains before step 1.
251
249
  Merge-ready also requires a current diligence `PASS` at that head; diligence
252
250
  `FINDINGS` return to the same author within the review round.
253
251
  Diligence `UNKNOWN` records the PR as `held` with the reason in the run record
@@ -265,53 +263,24 @@ its maintain-mode chat-run watch under [Autopilot](../axstack/references/autopil
265
263
  That watch owns the bound T3 schedule wake; its runtime sets the cadence.
266
264
  A turn with unsettled launched threads must end only under the bound-watch rule in the T3 runtime contract.
267
265
  With settled threads, end a turn only when every required PR is `merge-ready` or `held`.
268
- Under the recorded Notification policy, `axstack-relay` follows the categories
269
- below; serious risks relay immediately and genuine blocked operations needing
270
- user intervention relay after bounded safe recovery.
271
- Routine questions stay in the T3 driver thread. Progress, CI pending, and completion always stay
272
- in the T3 driver thread.
273
- Relay eligibility is limited to user-decision holds, serious-risk holds, the
274
- 60-minute blocked ping, unresolved-rating notice and capped peer PR milestones
275
- under the Notification policy.
276
- Under the recorded Notification policy, `verification not proven` is a
277
- user-decision hold. The 60-minute blocked ping is a notification-only category
278
- under the Notification policy. The unresolved-rating notice is a notification-only
279
- category under the Notification policy, deduplicated per comment and head.
280
- The unresolved-rating notice grants no reply authority.
281
- The unresolved-rating notice never clears the hold.
282
- Never send routine merge-ready or merged relays
283
- for own PRs. Notifications for peer PRs are unchanged, including at most two
284
- merge-ready/merged milestones per run, deduplicated across implementation and release.
285
-
286
- Merge-ready opens the merge boundary.
287
- For own PRs, automatic merge is the default under the
288
- [watch predicate](../axstack-watch/SKILL.md#5-state-readiness-precisely).
266
+ Follow [Watch notifications](../axstack-watch/SKILL.md#4-route-each-wake)
267
+ under the recorded Notification policy, retaining its relay categories,
268
+ deduplication and driver-thread fallback. Serious risks relay immediately.
269
+
270
+ Merge-ready opens the merge boundary. Own PRs default to automatic merge under
271
+ [watch §5](../axstack-watch/SKILL.md#5-state-readiness-precisely).
289
272
  The merge actor is the recorded owning watch thread (`axstack-owner` for
290
273
  standalone authorized maintenance), including small and adopted work.
291
- Missing or idle ownership follows lifecycle reconciliation and explicit transfer first.
292
274
  Apply `axstack-watch` §5's merge card and full predicate; an approval alone
293
- never grants merge authority.
294
- Personal own PRs, including `deploying` bases, follow automatic merge under
295
- watch §5. Work promotion PRs and `deploying` or unknown bases are merged by the
296
- user on the forge. Peer PRs are merged by the user on the forge.
297
- User merges are bottom-up for a stack.
275
+ never grants merge authority. Re-read every predicate term under watch §5
276
+ before merging; follow its guarded ordinary-root/singleton or legacy-native
277
+ merge path and PR chains retarget/retirement proof.
278
+ Personal own PRs, including `deploying` bases, follow automatic merge under watch §5.
279
+ Work promotion PRs and `deploying` or unknown bases are merged by the user on the forge.
280
+ Peer PRs are merged by the user on the forge. User merges are bottom-up for a stack.
298
281
  A manager, worker, reviewer, monitor, or nightly triage must never merge.
299
- Observation-only and peer watches never merge.
300
- Watch §5 owns provider provenance, approval carryover, eligible bases, every
301
- planned stack member's publication, proven verification, escalation, and card-reply exceptions.
302
282
  This policy grants no release, npm publish, or host install authority.
303
- Re-read every predicate term under watch §5 before merging. Confirm merge
304
- commits are allowed, `delete_branch_on_merge` is false, and the base has no
305
- merge queue; otherwise hold for the user. For a singleton, use
306
- `gh pr merge <n> --merge --match-head-commit <sha>` and add `--delete-branch`
307
- only when no open PR uses its branch as base. For a native `gh stack`, merge
308
- only the whole stack through `merge-async`: pass the top reviewed head as `sha`,
309
- `merge_method: merge`, and `merge_action: direct_merge`, then poll its UUID.
310
- Reconcile HTTP 200 or 409 against the intended request, verify every merged
311
- member's actual head equals its reviewed head and is an ancestor of the merge
312
- result, and hold unknown or failed outcomes; watch §5 owns the detailed rule.
313
- Never retarget, delete a stack branch, or rebase a reviewed stack member for
314
- merging. A failing push run on the target base after an automated merge holds
283
+ A failing push run on the target base after an automated merge holds
315
284
  further automated merges run-wide. The driver resumes on the user's next
316
285
  message, `/axstack-watch`,
317
286
  or the armed chat-run watch wake; verify merge state through the forge on wake.
@@ -16,9 +16,9 @@ improvement is a valid result.
16
16
  Before acting, load [Standing contracts](../axstack/references/contracts.md),
17
17
  then follow its lifecycle and audit pointers. Immediately before any useful
18
18
  role dispatch, load the [T3 runtime
19
- sequence](../axstack/references/t3-runtime.md). Use existing
20
- `axstack-explore-codebase` or `axstack-research-code` roles only when their
21
- specialization materially helps; create no new profile.
19
+ sequence](../axstack/references/t3-runtime.md). For broad codebase mapping,
20
+ use `axstack-scout`. Use `axstack-research-code` only when its specialization
21
+ materially helps. Do not create a new profile.
22
22
  When dispatching `axstack-research-code`, dispatch `axstack-research-code-sol`
23
23
  independently on the same bounded brief without cross-reading. The driver
24
24
  reconciles findings per claim and never averages them. Record an intentionally
@@ -50,7 +50,8 @@ is part of research.
50
50
  - `axstack-research-web`: web and external sources.
51
51
  - `axstack-research-web-google`: Google-Search-grounded web sources via Gemini/Antigravity.
52
52
  - `axstack-research-x`: X (Twitter) posts and threads via Grok; cite post URLs and dates.
53
- - `axstack-explore-codebase`: broad codebase mapping.
53
+ - For broad codebase mapping, use `axstack-scout`.
54
+ Never dispatch `axstack-explore-codebase` directly for broad mapping.
54
55
  - `axstack-explore-execution`: execution and runtime traces.
55
56
  - `axstack-explore-execution-sol`: independent Sol execution investigation.
56
57
 
@@ -28,7 +28,9 @@ Before reviewing, load [Standing contracts](../axstack/references/contracts.md),
28
28
  then [Lifecycle and receipts](../axstack/references/lifecycle.md) so its required
29
29
  audit edge remains active. Load [Shared routing](../axstack/references/routing.md)
30
30
  to select the mode and scope identity. For PR modes, apply the shared
31
- [PR-shape policy](../axstack/references/pr-shape.md). For an owned implementation candidate,
31
+ [PR-shape policy](../axstack/references/pr-shape.md) and
32
+ [PR chains](../axstack/references/pr-chain.md) for PR/head/base-branch/base-SHA
33
+ evidence identity. For an owned implementation candidate,
32
34
  load and verify the
33
35
  [candidate-publication boundary](../axstack/references/candidate-publication.md).
34
36
  When the caller is a bounded review-manager PR job, load
@@ -328,6 +330,14 @@ This section applies to peer and authored PR modes.
328
330
  mode-required receipt records concrete evidence and consequences, coverage,
329
331
  limitations, and findings without a finding quota.
330
332
 
333
+ If a `verify-<app>` skill covers affected behavior, the authored reviewer runs its base-revision Launch and Doctor against the pinned final head in its detached checkout.
334
+ For an `axstack-verify create` PR, the reviewer drives the candidate's recipe because the base has none.
335
+ The author never performs this review drive.
336
+ The reviewer drives each affected feature and records that drive as the `Final-head check`.
337
+ Delegate browser drives to `axstack-ui-verifier` with the feature file path.
338
+ Running the applicable surface counts as spin-up; a CLI run qualifies.
339
+ Use loopback and isolated instances under [axstack-verify](../axstack-verify/SKILL.md#isolate-every-attempt).
340
+
331
341
  For each finding, name its defect class and list every instance of that
332
342
  class in the pinned diff and dependent surfaces: callers, sibling docs,
333
343
  README, and tests. A later instance of an already-named class is a coverage
@@ -391,6 +401,7 @@ Authored receipt requirements:
391
401
  Report Coverage: COMPLETE | INCOMPLETE with covered angles, acceptance and executable evidence.
392
402
  Tag each limitation leaving changed behavior unexercised or unverified, in whatever words, changed-behavior: unproven.
393
403
  Record Final-head check: <command> -> <log path> for a check the reviewer ran at the final head; keep the log in the run's evidence folder.
404
+ Applicable verify-<app>: Final-head check records the reviewer's local drive of each affected feature at the pinned final head. Use n/a — <reason> when no skill covers the affected behavior.
394
405
  Record a Safety fact: about the change itself rather than the review process.
395
406
  Rate each non-agent comment at the current head above low | low | addressed | uncertain.
396
407
  Re-rate each non-agent comment at every new head.
@@ -418,6 +429,7 @@ Verdict: <APPROVE | REQUEST_CHANGES | INCOMPLETE>
418
429
  Coverage: COMPLETE | INCOMPLETE — <angles + acceptance + executable evidence checked>
419
430
  Limitations: <unverified boundaries + why; tag each limitation leaving changed behavior unexercised or unverified, in whatever words, changed-behavior: unproven>
420
431
  Final-head check: <command> -> <log path> — <check the reviewer ran at the final head; log kept in the run's evidence folder>
432
+ Applicable verify-<app>: <Final-head check records the reviewer's local drive of each affected feature at the pinned final head>. Use n/a — <reason> when no skill covers the affected behavior.
421
433
  Findings: <severity + evidence + consequence each>
422
434
  Revert: <declared line + diff-based assessment in authored mode>
423
435
  Agent-authored comment and thread IDs: <receipt-recorded IDs or none>
@@ -0,0 +1,84 @@
1
+ ---
2
+ name: axstack-scout
3
+ description: When an agent needs codebase evidence across several areas or unfamiliar code, use axstack-scout to gather cited findings.
4
+ ---
5
+
6
+ # Scout
7
+
8
+ On driver entry, sweep under [Workspace hygiene](../axstack/references/workspace-hygiene.md); dispatched workers do not sweep.
9
+ For every dispatch brief, name its private `<run dir>/evidence/<dispatch>/` folder.
10
+
11
+ Before acting, load [Standing contracts](../axstack/references/contracts.md)
12
+ and follow its lifecycle and audit pointers. Immediately before dispatch,
13
+ read the [T3 runtime boundary](../axstack/references/t3-runtime.md) and
14
+ [Role roster](../axstack/references/role-roster.md). A Scout call from an
15
+ ordinary chat creates a run with `run-init`.
16
+
17
+ ## 1. Bound the exploration
18
+
19
+ Use Scout for questions spanning several codebase areas, unfamiliar code, or
20
+ claims that something does not exist. A single factual lookup stays in the
21
+ current chat. Ordinary file reading also stays in the current chat.
22
+ Only a driver or PR owner dispatches Scout. Workers, authors and reviewers
23
+ request exploration from their driver; they do not launch a fan-out.
24
+
25
+ Split the question into 1–3 facets, with each facet searching the whole
26
+ repository for its concern, such as definitions, callers, tests or config.
27
+ Facet briefs must never restrict the search to one directory. Scale by facet
28
+ count; keep every required seat within each facet.
29
+
30
+ ## 2. Dispatch independent seats
31
+
32
+ Use the run's selected preset and role snapshot. Give seats for one facet the
33
+ same brief without cross-reading; the optional Flash seat searches the whole
34
+ question for missed boundaries and counterexamples.
35
+
36
+ - In mixed, each facet requires an independent Haiku and Luna pair: one
37
+ `axstack-explore-codebase` (Haiku 5.5 high) and one
38
+ `axstack-explore-codebase-luna` (Luna xhigh).
39
+ - In codex-only, each facet requires an independent Sol and Luna pair:
40
+ `axstack-explore-codebase` (Sol high) and
41
+ `axstack-explore-codebase-luna` (Luna xhigh).
42
+ - In claude-only, each facet requires one Haiku seat:
43
+ `axstack-explore-codebase` (Haiku 5.5 high).
44
+
45
+ In mixed, dispatch one optional `axstack-explore-codebase-flash` for the Scout
46
+ call, for at most seven seats across three facets.
47
+
48
+ Sol and Luna agreement is not cross-family corroboration. An unavailable or
49
+ rejected required seat holds Scout without substitution. The first dispatch
50
+ for each provider/model/effort must reach a running or completed run before
51
+ siblings launch, and its rejection stops siblings of that configuration.
52
+
53
+ A Flash launch failure, trust/login prompt, or prompt block records
54
+ `absent (<reason>)` and Scout continues with the required seats. Fence the
55
+ failed attempt and name its absence once in the next read-back. A Flash model
56
+ missing from saved capabilities holds that seat under the existing unavailable
57
+ model rule, without substitution. A Flash hold covers only the Flash seat,
58
+ and Scout returns the other seats' summary while naming that hold. An
59
+ uncertain dispatch is reconciled, not recorded absent.
60
+
61
+ ## 3. Pin evidence and report
62
+
63
+ Pin each brief to the working tree's content identity. Content identity pins
64
+ HEAD SHA, SHA-256 of `git diff --binary HEAD` when dirty, and a path and
65
+ SHA-256 for each untracked, non-ignored file from
66
+ `git ls-files -o --exclude-standard`. Ignored files are outside the search
67
+ scope. Seats search the pinned working tree. Each seat is read-only and
68
+ writes only to its private evidence folder.
69
+
70
+ Each seat report has at most about 15 claims, each labeled `verified`,
71
+ `inference`, or `unverified` using Research labels. Every present claim
72
+ cites `file:line` evidence. A not-found claim says `not found in <scope>`
73
+ and includes the exact search command, scope, and content identity; it never
74
+ claims absence beyond that scope.
75
+
76
+ The driver reconciles per claim without averaging and names disagreements.
77
+ Cross-family agreement corroborates but does not prove a claim. Before
78
+ relying on an answer-changing not-found claim, the driver rechecks its search.
79
+ Reuse findings only while content identity, including untracked file contents,
80
+ is unchanged; any identity change requires re-scouting all facets still needed.
81
+
82
+ Return a compact summary to the driver and store seat reports in the run's
83
+ evidence folder. Scout adds no mandatory gate to other phases; they may use
84
+ its evidence when useful.
@@ -69,7 +69,8 @@ Keep that folder outside scratch selected for deletion.
69
69
  Clean up owned resources by literal absolute paths.
70
70
  Follow [Safe deletion](../axstack/references/workspace-hygiene.md#safe-deletion).
71
71
 
72
- For a peer PR, read the Launch recipe and helpers from the base revision and execute against the pinned candidate.
72
+ For a peer PR or a review run, read the Launch recipe and helpers from the base revision and execute against the pinned candidate.
73
+ For an `axstack-verify create` PR, the reviewer drives the candidate's recipe because the base has none.
73
74
  Keep trusted base helpers separate from the candidate's recipe files.
74
75
  Bind evidence to the served SHA.
75
76
  Report an unavailable candidate run as unverified.
@@ -182,6 +182,9 @@ deploy to production.
182
182
  Re-read approval mode and base classification immediately before each automated
183
183
  merge and at every watch resume.
184
184
 
185
+ Follow [PR chains](../axstack/references/pr-chain.md) for membership, dependencies,
186
+ retargeting and retirement. Bind readiness to PR, head, base branch identity
187
+ and base SHA, including an unchanged head after retargeting.
185
188
  For each current head and base SHA, every merge-ready term must hold:
186
189
 
187
190
  - Approval: in `solo` mode, authored-review `APPROVE` plus diligence `PASS`, both
@@ -200,7 +203,7 @@ For each current head and base SHA, every merge-ready term must hold:
200
203
  Reviews carrying an Axstack automation marker never count.
201
204
  A later `CHANGES_REQUESTED` blocks until resolved; a stale or dismissed
202
205
  approval does not count.
203
- A collaborator approval carries over only across a rebase with unchanged
206
+ A collaborator approval carries over only across a rebase, base-update merge or base-only retarget with unchanged
204
207
  patch-id recorded for both heads while the forge still counts it.
205
208
  Require fresh authored review, diligence, and CI on every new head.
206
209
  Refresh authored review, diligence and CI evidence at the current head and base after every head or base change; base updates return to the same author under the existing repair route.
@@ -220,7 +223,7 @@ For each current head and base SHA, every merge-ready term must hold:
220
223
  unsettled author Dispatch, or task, PR, dependency, run-wide, or serious-risk
221
224
  hold affects this merge. Apply the comment holds below.
222
225
  The current target base head must be an ancestor of the singleton head or
223
- bottom stack member head; unknown ancestry holds. A CI re-run does not restore
226
+ ordinary chain root head or legacy bottom stack member head; unknown ancestry holds. A CI re-run does not restore
224
227
  this freshness after the base moves. Update the branch and refresh head-bound
225
228
  evidence instead.
226
229
  - Proven verification: apply every receipt and acceptance term below, or its
@@ -249,8 +252,9 @@ Agents never resolve or dismiss non-agent items.
249
252
  Agent-authored threads with only `low` findings can stay open.
250
253
  Apply any repository rule that requires conversation resolution.
251
254
 
252
- Under authorized own-PR maintenance, keep repairing and rebasing onto the base
253
- when it moves, then re-run checks, until the head is rebased on the current base,
255
+ Under authorized own-PR maintenance, keep repairing and merging the base
256
+ when it moves for ordinary PRs (legacy native stacks retain rebasing), then
257
+ re-run checks, until the head contains the current base,
254
258
  the comment holds above are cleared, the approval term holds, and required CI is
255
259
  green; only then record merge-ready.
256
260
  Never re-request a collaborator's review while its approval still counts under
@@ -274,6 +278,9 @@ Proven verification is required for every own PR. Use the authored receipt:
274
278
  Earlier-head red-to-green evidence in the PR's patch lineage counts only when
275
279
  the reviewer records that it still applies to the final change.
276
280
  An applicable `verify-<app>` passing result is required for the changed behavior.
281
+ The passing result must come from the reviewer's or `axstack-ui-verifier`'s local drive at that head.
282
+ The author's log alone never satisfies this requirement.
283
+ A preview URL never satisfies this requirement.
277
284
  - Verification requires no limitation tagged `changed-behavior: unproven`.
278
285
  The reviewer tags every limitation leaving changed behavior unexercised or
279
286
  unverified, in whatever words, `changed-behavior: unproven`.
@@ -318,12 +325,12 @@ Personal and work PRs remain eligible whatever files they change, including
318
325
  branch-protection or ruleset config, `CODEOWNERS`, `AGENTS.md`, and non-clean
319
326
  revert lines such as `Revert: steps`.
320
327
 
321
- For a `gh stack`, only the bottom member's base must be eligible.
328
+ For a legacy native `gh stack`, only the bottom member's base must be eligible.
322
329
  Each other member's base must be the next-lower member's branch at its reviewed head.
323
330
  Every member must meet every other term.
324
- A stack holds until every member of its approved plan (the ticket map or the
331
+ A legacy native stack holds until every member of its approved plan (the ticket map or the
325
332
  adopted stack's recorded members) is published.
326
- Reviewed members are never retargeted to become eligible.
333
+ Reviewed legacy native-stack members are never retargeted to become eligible.
327
334
 
328
335
  Never auto-merge PRs authored by anyone other than the user or the user's agents.
329
336
  Test sources stay eligible.
@@ -386,9 +393,14 @@ Apply the existing [escalation threshold](../axstack/references/contracts.md#dri
386
393
  Confirm merge commits are allowed, `delete_branch_on_merge` is false, and the
387
394
  base has no merge queue; otherwise hold for the user. For a singleton PR, use
388
395
  `gh pr merge <n> --merge --match-head-commit <sha>`; add `--delete-branch` only
389
- when no open PR uses its branch as base. A failed head guard or uncertain merge
396
+ when no open PR uses its branch as base and PR chains retirement proves no
397
+ unpublished dependency, active author or unknown consumer. For an ordinary
398
+ chain root use `gh pr merge <n> --merge --match-head-commit <sha>` without
399
+ branch deletion until retirement is proven. After merge, verify actual head
400
+ equals reviewed head and is an ancestor of the integration result before
401
+ retargeting direct children under PR chains. A failed head guard or uncertain merge
390
402
  result holds for fresh reconciliation. If the target base moves after final
391
- readback, the singleton head guard or stack top `sha` decides whether the merge
403
+ readback, the singleton/ordinary-root head guard or legacy stack top `sha` decides whether the merge
392
404
  proceeds; the push run on the merge result decides any further-merge hold.
393
405
 
394
406
  For a native `gh stack`, automate only a whole-stack merge: the top is the
@@ -1,67 +1,52 @@
1
1
  # Repair and publication
2
2
 
3
- Read this only for authorized maintenance of an adopted own PR. Observation-only
4
- and peer modes stop with a report before this branch.
5
-
6
- ## 1. Confirm the repair boundary
7
-
8
- Re-read the accepted maintenance snapshot, writable ownership, publication
9
- authority, remote head and base, and current feedback. Route an accepted fix to
10
- the original author session only when the run itself launched that session and
11
- evidence permits. Record the repair author's actual provenance before
12
- selecting the reviewer, because the authored-review pairing follows the actual
13
- provenance of the repair, never the PR's historical author. A missing,
14
- stale, or materially changed boundary holds the repair while read-only
15
- monitoring continues.
16
-
17
- Record the exact defect, allowed files and actions, current revision, feedback
18
- IDs, and actual author without expanding scope.
19
- Follow [Feedback routing](../SKILL.md#feedback-routing) to launch an adopted
20
- repair author and pair its reviewer.
21
-
22
- ## 2. Produce a reviewable candidate
23
-
24
- The author prepares the smallest in-scope repair and the exact public reply
25
- bodies, each keyed to its feedback ID and bound to the candidate revision.
26
- The candidate is committed locally in the owned worktree. Obtain an
27
- independent review of the exact local candidate SHA in an isolated detached
28
- checkout against the pinned base, including the exact reply bodies, before
29
- publication; nothing is pushed for review. Both code and
30
- reply bodies receive the one complete eligible non-author/non-owner review
31
- required by the authored review rule in `axstack-review`.
32
-
33
- Publication stays held until the current authored review receipt covers the
34
- exact new revision and base, all six angles, applicable acceptance, the reply
35
- body identities, and every affected boundary, with no unresolved material
36
- finding or urgent hold. A serious-risk escalation preserves the local candidate
37
- and exact context, records the hold in the run record and a durable GitHub or
38
- user-owned conversation, and sends only an authorized deduplicated notification.
39
- Publication remains held until the user decides at that durable location and
40
- all exact inputs are revalidated.
3
+ For authorized maintenance of an adopted own PR only. Observation-only and peer
4
+ modes stop at a report.
5
+
6
+ ## 1. Repair boundary
7
+
8
+ Re-read accepted maintenance snapshot, writable ownership, publication authority,
9
+ remote head/base and feedback. Missing, stale or materially changed boundaries
10
+ hold repair; continue read-only monitoring. Return fixes to the original author
11
+ only if this run launched it and evidence permits; otherwise follow
12
+ [Feedback routing](../SKILL.md#feedback-routing) for a new adopted author.
13
+ Record defect, allowed files/actions, revision, feedback IDs and actual repair
14
+ provenance; pair review from that provenance, never historical authorship.
15
+
16
+ ## 2. Reviewable candidate
17
+
18
+ The author commits the smallest in-scope repair and exact public reply bodies in
19
+ the owned worktree, keyed to feedback IDs and candidate revision. Obtain
20
+ independent review of the exact local candidate SHA and replies in an isolated
21
+ detached checkout against the pinned base before publication.
22
+ Nothing is pushed for review. Publication is held until the current authored review receipt covers
23
+ the exact new revision and base, code/replies, all six angles, applicable acceptance,
24
+ affected boundaries and exact reply identities with no unresolved material finding or urgent hold.
25
+ The authored review rule in `axstack-review` requires exactly one complete
26
+ eligible non-author/non-owner reviewer.
27
+ Record a serious-risk hold in both the run record and a durable GitHub or user-owned
28
+ conversation, preserving candidate/exact context;
29
+ only an authorized deduplicated notification sends. Publication waits for the
30
+ user's decision at that durable location and exact-input revalidation.
41
31
 
42
32
  ## 3. Revalidate immediately before publication
43
33
 
44
- Confirm fresh remote head and base, feedback freshness, reply body identity,
45
- and the exact revision covered by the mode-required review receipt. Before a history
46
- rewrite, confirm the expected-old SHA; a mismatch holds publication.
47
-
48
- All publication inputs must still match their reviewed values at the final
49
- readback.
34
+ At final readback, confirm every input matches its reviewed value: fresh remote
35
+ head/base, feedback, reply body identity and exact revision/base. Before a history
36
+ rewrite, confirm expected-old SHA; a mismatch holds publication.
50
37
 
51
38
  ## 4. Publish idempotently
52
39
 
53
- After the local review and final remote revalidation, publish through `gh stack`
54
- for the adopted PR only, preserving unrelated stack entries.
55
- Bind the operation to the exact reviewed revision, then verify the submission
56
- receipt and remote state.
57
-
58
- If the send outcome is unknown, inspect remote IDs, bodies, and actor before any
59
- retry. Remain blocked while the outcome is ambiguous; retry only after
60
- confirming the intended operation is absent.
61
-
62
- Publication ends with a remote receipt proving that the reviewed revision and
63
- exact replies landed once, or a recorded hold naming the unmatched input and
64
- next owner.
65
-
66
- After verified publication of an own PR, the owner must follow
67
- [PR previews](../../axstack/references/preview.md) to decide on or restart its preview.
40
+ After local review and remote revalidation, publish through
41
+ [Candidate publication](../../axstack/references/candidate-publication.md)
42
+ for the adopted PR only, preserving unrelated entries. Follow
43
+ [PR chains](../../axstack/references/pr-chain.md) for scoped push and base-bound
44
+ evidence; legacy native stacks use `gh stack`.
45
+ Bind every publication operation to the exact reviewed revision, then verify the
46
+ submission receipt and remote state.
47
+ Unknown or ambiguous publication stays blocked; retry only after lookup of
48
+ remote IDs, bodies and actor proves absence.
49
+ Publication ends with either a receipt proving reviewed revision and exact replies
50
+ landed once or a recorded hold naming unmatched input and next owner.
51
+ After verified publication, follow
52
+ [PR previews](../../axstack/references/preview.md) to decide on or restart a preview.
@@ -108,36 +108,21 @@ an uncertain wake. Wake only the exact live original driver.
108
108
  A busy, missing, protected (user-taken-over) or permission-held driver is never interrupted or replaced.
109
109
 
110
110
  The driver records one Notification policy for `axstack-relay` Telegram home.
111
- Relay eligibility is limited to user-decision holds, serious-risk holds, the
112
- 60-minute blocked ping, unresolved-rating notice and capped peer PR milestones
113
- under the Notification policy.
114
- Under the recorded Notification policy, `verification not proven` is a
115
- user-decision hold. The 60-minute blocked ping is a notification-only category
116
- under the Notification policy. The unresolved-rating notice is a notification-only
117
- category under the Notification policy, deduplicated per comment and head.
118
- The unresolved-rating notice grants no reply authority.
119
- The unresolved-rating notice never clears the hold.
120
- Never send routine merge-ready or merged relays
121
- for own PRs. Notifications for peer PRs are unchanged, including at most two
122
- merge-ready/merged milestones per run, deduplicated across implementation and release.
123
- Quiet ticks never notify.
111
+ Follow [Watch notifications](../SKILL.md#4-route-each-wake) for categories,
112
+ deduplication and driver-thread fallback. Quiet ticks never notify.
124
113
 
125
114
  The driver alone routes repair.
126
- The driver routes rebases and review feedback to the PR's author for repair.
127
- For an adopted PR whose author this run did not launch, use a new author attempt under the
128
- [adoption rules](../SKILL.md#feedback-routing).
129
- The watch never writes candidate source.
130
- Re-read remote head/base and T3 ownership.
131
- Independent PRs may repair in parallel in separate T3 writer worktrees within
132
- measured host capacity. Two issues on the same PR use one author and one
133
- candidate; never create competing writers. A stack parent change invalidates
134
- child evidence and merge readiness; repair the lowest affected ancestor first,
135
- then rebase and revalidate children. Run-launched implementation PRs follow
136
- `axstack-implement`: driver publishes and reads back before independent authored
137
- review. Explicitly adopted own PRs follow [Repair and
138
- publication](repair-publication.md): independent exact-local-SHA review precedes
139
- driver-owned `gh stack` publication and remote readback. The driver never
140
- self-reviews.
115
+ The driver routes base updates and review feedback to the PR's author for repair.
116
+ For an adopted PR whose author this run did not launch, use a new author attempt
117
+ under the
118
+ [adoption rules](../SKILL.md#feedback-routing). The watch never writes candidate
119
+ source. Re-read remote head/base and T3 ownership. Independent PRs may repair in
120
+ parallel within capacity; two issues on the same PR use one author and candidate.
121
+ Follow [PR chains](../../axstack/references/pr-chain.md) for invalidation and
122
+ updates. Run-launched PRs follow `axstack-implement`: publication/readback before
123
+ independent review. Adopted PRs follow [Repair and publication](repair-publication.md):
124
+ independent exact-local-SHA review precedes scoped publication/readback.
125
+ The driver never self-reviews.
141
126
  For own PRs, automatic merge is the default under the
142
127
  [watch predicate](../SKILL.md#5-state-readiness-precisely).
143
128
  Observation alone grants no repair or
@@ -146,8 +131,8 @@ public-reply authority.
146
131
  On new comments, failed checks, or base movement, repeat repair, the
147
132
  mode-specific publication and independent review steps above, current-head
148
133
  checks, and the full readiness decision for each member until every merge-ready
149
- predicate is satisfied or a concrete hold is recorded. Rebase the root PR against an advanced
150
- base, re-run checks, address actionable comments, and revalidate stacked descendants after
134
+ predicate is satisfied or a concrete hold is recorded. Merge the advanced base
135
+ into an ordinary root PR, re-run checks, address actionable comments, and revalidate affected descendants as needed after
151
136
  ancestor changes. Never assume historical approvals or threads have cleared;
152
137
  re-read all feedback and approvals at the current head before readiness.
153
138
  Re-reading approvals checks current state, not re-requesting review from a
@@ -17,15 +17,13 @@ const CHECK_LABELS = {
17
17
  bun: 'bun >= 1.3.14 runtime',
18
18
  git: 'git CLI',
19
19
  gh: 'gh CLI',
20
- 'gh-stack': 'gh stack extension',
21
20
  't3-binary': `T3 Code CLI >= ${T3_FLOOR}`,
22
21
  };
23
22
 
24
- // Run the extension command itself, not a substring in an extension listing.
23
+ // Ordinary PRs need Git and gh; legacy native-stack operations probe separately.
25
24
  export const PROBE_COMMANDS = {
26
25
  git: ['git', ['--version']],
27
26
  gh: ['gh', ['--version']],
28
- 'gh-stack': ['gh', ['stack', '--help']],
29
27
  't3-binary': ['t3', ['--version']],
30
28
  };
31
29
 
@@ -86,7 +84,7 @@ export async function runRealCheck(name) {
86
84
  }
87
85
 
88
86
  export async function checkCapabilities(exec) {
89
- const names = ['bun', 'git', 'gh', 'gh-stack', 't3-binary'];
87
+ const names = ['bun', 'git', 'gh', 't3-binary'];
90
88
  const checks = [];
91
89
  for (const name of names) {
92
90
  let result;
package/src/roles.js CHANGED
@@ -92,8 +92,8 @@ export function assessRoleReadiness(roles, preset) {
92
92
  (preset === 'mixed' && role.id === 'axstack-research-x' && role.provider === 'grok') ||
93
93
  (preset === 'mixed' && role.id === 'axstack-arena-candidate-grok' && role.provider === 'grok') ||
94
94
  (preset === 'mixed' && role.id === 'axstack-arena-candidate-antigravity' && role.provider === 'antigravity') ||
95
- (preset === 'codex-only' && ['axstack-advisor-opus', 'axstack-escalation-fable', 'axstack-arena-judge-opus', 'axstack-research-web-google', 'axstack-research-x', 'axstack-arena-candidate-grok', 'axstack-arena-candidate-antigravity'].includes(role.id)) ||
96
- (preset === 'claude-only' && ['axstack-advisor-astra', 'axstack-arena-judge-astra', 'axstack-research-web-google', 'axstack-research-x', 'axstack-arena-candidate-grok', 'axstack-arena-candidate-antigravity', 'axstack-auditor-sol', 'axstack-research-code-sol', 'axstack-explore-execution-sol'].includes(role.id))
95
+ (preset === 'codex-only' && ['axstack-advisor-opus', 'axstack-escalation-fable', 'axstack-arena-judge-opus', 'axstack-research-web-google', 'axstack-research-x', 'axstack-arena-candidate-grok', 'axstack-arena-candidate-antigravity', 'axstack-explore-codebase-flash'].includes(role.id)) ||
96
+ (preset === 'claude-only' && ['axstack-advisor-astra', 'axstack-arena-judge-astra', 'axstack-research-web-google', 'axstack-research-x', 'axstack-arena-candidate-grok', 'axstack-arena-candidate-antigravity', 'axstack-auditor-sol', 'axstack-research-code-sol', 'axstack-explore-execution-sol', 'axstack-explore-codebase-luna', 'axstack-explore-codebase-flash'].includes(role.id))
97
97
  );
98
98
  for (const role of roles) {
99
99
  if (!bounds.has(role.provider)) {