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.
- package/README.md +3 -2
- package/bin/axstack.js +1 -1
- package/docs/getting-started.md +4 -4
- package/docs/guides.md +1 -1
- package/docs/installation.md +8 -3
- package/docs/workflows.md +40 -8
- package/package.json +1 -1
- package/profiles/presets/claude-only.json +18 -0
- package/profiles/presets/codex-only.json +18 -0
- package/profiles/presets/mixed.json +18 -0
- package/skills/axstack/references/automations.md +4 -2
- package/skills/axstack/references/autopilot.md +5 -15
- package/skills/axstack/references/candidate-publication.md +25 -26
- package/skills/axstack/references/contracts.md +2 -3
- package/skills/axstack/references/lifecycle.md +2 -2
- package/skills/axstack/references/pr-chain.md +51 -0
- package/skills/axstack/references/role-roster.md +6 -1
- package/skills/axstack/references/run-record.md +1 -0
- package/skills/axstack/references/t3-runtime.md +2 -2
- package/skills/axstack/references/test-audit-weekly.md +1 -1
- package/skills/axstack/references/ui-verification.md +1 -0
- package/skills/axstack-align/SKILL.md +5 -0
- package/skills/axstack-implement/SKILL.md +24 -55
- package/skills/axstack-improve/SKILL.md +3 -3
- package/skills/axstack-research/SKILL.md +2 -1
- package/skills/axstack-review/SKILL.md +13 -1
- package/skills/axstack-scout/SKILL.md +84 -0
- package/skills/axstack-verify/SKILL.md +2 -1
- package/skills/axstack-watch/SKILL.md +21 -9
- package/skills/axstack-watch/references/repair-publication.md +44 -59
- package/skills/axstack-watch/references/watch-runtime.md +15 -30
- package/src/capabilities.js +2 -4
- 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
|
|
77
|
-
|
|
78
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
250
|
-
|
|
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
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
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
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
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
|
-
|
|
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).
|
|
20
|
-
`axstack-
|
|
21
|
-
|
|
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
|
-
-
|
|
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)
|
|
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
|
|
253
|
-
when it moves
|
|
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
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
## 1.
|
|
7
|
-
|
|
8
|
-
Re-read
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
rewrite, confirm
|
|
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
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
Publication ends with a
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
112
|
-
|
|
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
|
|
127
|
-
For an adopted PR whose author this run did not launch, use a new author attempt
|
|
128
|
-
|
|
129
|
-
The watch never writes candidate
|
|
130
|
-
Re-read remote head/base and T3 ownership.
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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.
|
|
150
|
-
|
|
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
|
package/src/capabilities.js
CHANGED
|
@@ -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
|
-
//
|
|
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', '
|
|
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)) {
|