axstack 0.49.1 → 0.50.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 +5 -7
- package/docs/concepts.md +11 -51
- package/docs/host-operations.md +24 -99
- package/docs/installation.md +27 -52
- package/docs/workflows.md +48 -35
- package/package.json +1 -1
- package/profiles/presets/claude-only.json +0 -37
- package/profiles/presets/codex-only.json +0 -36
- package/profiles/presets/mixed.json +4 -41
- package/skills/axstack/references/automations.md +28 -2
- package/skills/axstack/references/autopilot.md +7 -5
- package/skills/axstack/references/candidate-publication.md +1 -0
- package/skills/axstack/references/contracts.md +55 -7
- package/skills/axstack/references/lifecycle.md +20 -5
- package/skills/axstack/references/pr-shape.md +15 -0
- package/skills/axstack/references/pr-triage-nightly.md +14 -2
- package/skills/axstack/references/review-manager-prompt.md +18 -11
- package/skills/axstack/references/role-roster.md +4 -9
- package/skills/axstack/references/routing.md +3 -7
- package/skills/axstack/references/t3-runtime.md +122 -103
- package/skills/axstack/references/test-audit-weekly.md +14 -2
- package/skills/axstack/references/workspace-hygiene.md +14 -2
- package/skills/axstack/scripts/dispatch-plan.js +10 -27
- package/skills/axstack/scripts/resolve-models.js +9 -18
- package/skills/axstack-brainstorm/references/arena.md +2 -2
- package/skills/axstack-cleanup/SKILL.md +6 -3
- package/skills/axstack-implement/SKILL.md +5 -4
- package/skills/axstack-research/SKILL.md +3 -5
- package/skills/axstack-review/SKILL.md +7 -3
- package/skills/axstack-scout/SKILL.md +2 -12
- package/skills/axstack-watch/SKILL.md +43 -8
- package/skills/axstack-watch/references/escalation.md +1 -1
- package/skills/axstack-watch/references/proven-verification.md +1 -1
- package/skills/axstack-watch/references/repair-publication.md +1 -1
- package/skills/axstack-watch/references/watch-runtime.md +46 -33
- package/src/instructions.js +4 -3
- package/src/roles.js +3 -6
- package/skills/axstack/scripts/account-usage.js +0 -79
- package/skills/axstack/scripts/pick-instance.js +0 -57
- package/skills/axstack/scripts/sync-default.js +0 -191
- package/skills/axstack/systemd/axstack-default-sync.service +0 -8
- package/skills/axstack/systemd/axstack-default-sync.timer +0 -11
|
@@ -118,15 +118,6 @@
|
|
|
118
118
|
"notes": "Sonnet high research web reader: gathers primary-source facts efficiently. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
|
|
119
119
|
"modelClass": "sonnet"
|
|
120
120
|
},
|
|
121
|
-
{
|
|
122
|
-
"id": "axstack-research-web-google",
|
|
123
|
-
"name": "Axstack research web (Google unavailable)",
|
|
124
|
-
"provider": "claude",
|
|
125
|
-
"model": null,
|
|
126
|
-
"modeId": "bypassPermissions",
|
|
127
|
-
"thinkingOptionId": "high",
|
|
128
|
-
"notes": "Intentional single-provider absence: Google-Search-grounded web research via Gemini/Antigravity is unavailable in claude-only. The explicit null holds this route without provider substitution."
|
|
129
|
-
},
|
|
130
121
|
{
|
|
131
122
|
"id": "axstack-research-x",
|
|
132
123
|
"name": "Axstack research X (unavailable)",
|
|
@@ -182,15 +173,6 @@
|
|
|
182
173
|
"thinkingOptionId": "xhigh",
|
|
183
174
|
"notes": "Intentional single-provider absence: Luna Scout seat is unavailable in claude-only."
|
|
184
175
|
},
|
|
185
|
-
{
|
|
186
|
-
"id": "axstack-explore-codebase-flash",
|
|
187
|
-
"name": "Axstack codebase explorer Flash (unavailable)",
|
|
188
|
-
"provider": "claude",
|
|
189
|
-
"model": null,
|
|
190
|
-
"modeId": "bypassPermissions",
|
|
191
|
-
"thinkingOptionId": "medium",
|
|
192
|
-
"notes": "Intentional single-provider absence: Flash Scout seat is unavailable in claude-only."
|
|
193
|
-
},
|
|
194
176
|
{
|
|
195
177
|
"id": "axstack-explore-execution",
|
|
196
178
|
"name": "Axstack execution explorer",
|
|
@@ -209,16 +191,6 @@
|
|
|
209
191
|
"thinkingOptionId": "high",
|
|
210
192
|
"notes": "Intentional single-provider absence: Sol pair seat axstack-explore-execution-sol is unavailable in claude-only. The explicit null records the absent pair without substitution; the Sonnet seat proceeds alone."
|
|
211
193
|
},
|
|
212
|
-
{
|
|
213
|
-
"id": "axstack-monitor",
|
|
214
|
-
"name": "Axstack monitor",
|
|
215
|
-
"provider": "claude",
|
|
216
|
-
"modeId": "bypassPermissions",
|
|
217
|
-
"thinkingOptionId": "high",
|
|
218
|
-
"notes": "Optional independent read-only Haiku 5.5 high observer for a standalone PR watch. Reads GitHub, feedback, and checks, persists event IDs, and wakes the owner only for a new actionable event. Never sends, authors, reviews, replies, or acts as either reusable PR manager. Healthy snapshots stay quiet. Chat-run mode: one same-host native read-only observer per Run; fresh finite passes report precise deltas internally to the original Run/driver and may disable/read back only their own automation at verified stop. No repair, dispatch, public notification, or replacement coordinator. Effective scheduled model/effort and wake require live proof. T3 uses the exact claude-haiku-5-5 pin from saved capabilities; a Claude rejection holds. Missing model or high effort holds without substitution.",
|
|
219
|
-
"modelClass": "haiku",
|
|
220
|
-
"model": "claude-haiku-5-5"
|
|
221
|
-
},
|
|
222
194
|
{
|
|
223
195
|
"id": "axstack-auditor",
|
|
224
196
|
"name": "Axstack auditor",
|
|
@@ -308,15 +280,6 @@
|
|
|
308
280
|
"modeId": "bypassPermissions",
|
|
309
281
|
"thinkingOptionId": "high",
|
|
310
282
|
"notes": "Intentional single-provider absence in the claude-only preset; Grok candidate unavailable. Arena holds without substitution."
|
|
311
|
-
},
|
|
312
|
-
{
|
|
313
|
-
"id": "axstack-arena-candidate-antigravity",
|
|
314
|
-
"name": "Axstack arena candidate Antigravity (unavailable)",
|
|
315
|
-
"provider": "claude",
|
|
316
|
-
"model": null,
|
|
317
|
-
"modeId": "bypassPermissions",
|
|
318
|
-
"thinkingOptionId": "high",
|
|
319
|
-
"notes": "Intentional single-provider absence in the claude-only preset; Antigravity candidate unavailable. Arena holds without substitution."
|
|
320
283
|
}
|
|
321
284
|
]
|
|
322
285
|
}
|
|
@@ -118,15 +118,6 @@
|
|
|
118
118
|
"notes": "Research web reader: gathers primary-source facts efficiently. Resolve the class from saved T3 capabilities at run start; rejection and unavailable settings hold without substitution.",
|
|
119
119
|
"modelClass": "sol"
|
|
120
120
|
},
|
|
121
|
-
{
|
|
122
|
-
"id": "axstack-research-web-google",
|
|
123
|
-
"name": "Axstack research web (Google unavailable)",
|
|
124
|
-
"provider": "codex",
|
|
125
|
-
"model": null,
|
|
126
|
-
"modeId": "full-access",
|
|
127
|
-
"thinkingOptionId": "high",
|
|
128
|
-
"notes": "Intentional single-provider absence: Google-Search-grounded web research via Gemini/Antigravity is unavailable in codex-only. The explicit null holds this route without provider substitution."
|
|
129
|
-
},
|
|
130
121
|
{
|
|
131
122
|
"id": "axstack-research-x",
|
|
132
123
|
"name": "Axstack research X (unavailable)",
|
|
@@ -181,15 +172,6 @@
|
|
|
181
172
|
"notes": "Independent read-only Luna Scout facet explorer. Searches the whole repository on the same brief without cross-reading; reports evidence for driver reconciliation. Unavailable model or effort holds without substitution.",
|
|
182
173
|
"modelClass": "luna"
|
|
183
174
|
},
|
|
184
|
-
{
|
|
185
|
-
"id": "axstack-explore-codebase-flash",
|
|
186
|
-
"name": "Axstack codebase explorer Flash (unavailable)",
|
|
187
|
-
"provider": "codex",
|
|
188
|
-
"model": null,
|
|
189
|
-
"modeId": "full-access",
|
|
190
|
-
"thinkingOptionId": "medium",
|
|
191
|
-
"notes": "Intentional single-provider absence: Flash Scout seat is unavailable in codex-only."
|
|
192
|
-
},
|
|
193
175
|
{
|
|
194
176
|
"id": "axstack-explore-execution",
|
|
195
177
|
"name": "Axstack execution explorer",
|
|
@@ -208,15 +190,6 @@
|
|
|
208
190
|
"notes": "Independent Sol high execution explorer: runs authorized bounded runtime checks on the same brief without cross-reading. Reports findings for driver reconciliation.",
|
|
209
191
|
"modelClass": "sol"
|
|
210
192
|
},
|
|
211
|
-
{
|
|
212
|
-
"id": "axstack-monitor",
|
|
213
|
-
"name": "Axstack monitor",
|
|
214
|
-
"provider": "codex",
|
|
215
|
-
"modeId": "full-access",
|
|
216
|
-
"thinkingOptionId": "low",
|
|
217
|
-
"notes": "Optional independent read-only observer for a standalone PR watch. Reads GitHub, feedback, and checks, persists event IDs, and wakes the owner only for a new actionable event. Never sends, authors, reviews, replies, or acts as either reusable PR manager. Healthy snapshots stay quiet. Chat-run mode: one same-host native read-only observer per Run; fresh finite passes report precise deltas internally to the original Run/driver and may disable/read back only their own automation at verified stop. No repair, dispatch, public notification, or replacement coordinator. Effective scheduled model/effort and wake require live proof.",
|
|
218
|
-
"modelClass": "sol"
|
|
219
|
-
},
|
|
220
193
|
{
|
|
221
194
|
"id": "axstack-auditor",
|
|
222
195
|
"name": "Axstack auditor",
|
|
@@ -306,15 +279,6 @@
|
|
|
306
279
|
"modeId": "full-access",
|
|
307
280
|
"thinkingOptionId": "high",
|
|
308
281
|
"notes": "Intentional single-provider absence in the codex-only preset; Grok candidate unavailable. Arena holds without substitution."
|
|
309
|
-
},
|
|
310
|
-
{
|
|
311
|
-
"id": "axstack-arena-candidate-antigravity",
|
|
312
|
-
"name": "Axstack arena candidate Antigravity (unavailable)",
|
|
313
|
-
"provider": "codex",
|
|
314
|
-
"model": null,
|
|
315
|
-
"modeId": "full-access",
|
|
316
|
-
"thinkingOptionId": "high",
|
|
317
|
-
"notes": "Intentional single-provider absence in the codex-only preset; Antigravity candidate unavailable. Arena holds without substitution."
|
|
318
282
|
}
|
|
319
283
|
]
|
|
320
284
|
}
|
|
@@ -76,11 +76,11 @@
|
|
|
76
76
|
{
|
|
77
77
|
"id": "axstack-checker",
|
|
78
78
|
"name": "Axstack tracker checker",
|
|
79
|
-
"provider": "
|
|
80
|
-
"
|
|
81
|
-
"modeId": "full-access",
|
|
79
|
+
"provider": "claude",
|
|
80
|
+
"modeId": "bypassPermissions",
|
|
82
81
|
"thinkingOptionId": "low",
|
|
83
|
-
"notes": "Report-only discrepancy checker for the selected external tracker (Linear or GitHub Issues). Never mutates the tracker; the driver independently verifies evidence before applying updates.
|
|
82
|
+
"notes": "Report-only discrepancy checker for the selected external tracker (Linear or GitHub Issues). Never mutates the tracker; the driver independently verifies evidence before applying updates. Sonnet low tracker checker. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
|
|
83
|
+
"modelClass": "sonnet"
|
|
84
84
|
},
|
|
85
85
|
{
|
|
86
86
|
"id": "axstack-research-requirements",
|
|
@@ -118,15 +118,6 @@
|
|
|
118
118
|
"notes": "Sonnet high research web reader: gathers primary-source facts efficiently. T3 resolves Claude classes from saved capabilities; a Claude rejection holds.",
|
|
119
119
|
"modelClass": "sonnet"
|
|
120
120
|
},
|
|
121
|
-
{
|
|
122
|
-
"id": "axstack-research-web-google",
|
|
123
|
-
"name": "Axstack research web (Google)",
|
|
124
|
-
"provider": "antigravity",
|
|
125
|
-
"model": null,
|
|
126
|
-
"modeId": "full-access",
|
|
127
|
-
"thinkingOptionId": "high",
|
|
128
|
-
"notes": "Google-Search-grounded web research branch on Gemini via the T3 Antigravity ACP provider; resolve the model from saved T3 capabilities; cites URL + access date per claim and re-opens sources because the provider's search citation format is undocumented; report-only."
|
|
129
|
-
},
|
|
130
121
|
{
|
|
131
122
|
"id": "axstack-research-x",
|
|
132
123
|
"name": "Axstack research X",
|
|
@@ -183,15 +174,6 @@
|
|
|
183
174
|
"notes": "Independent read-only Luna Scout facet explorer. Searches the whole repository on the same brief without cross-reading; reports evidence for driver reconciliation. Unavailable model or effort holds without substitution.",
|
|
184
175
|
"modelClass": "luna"
|
|
185
176
|
},
|
|
186
|
-
{
|
|
187
|
-
"id": "axstack-explore-codebase-flash",
|
|
188
|
-
"name": "Axstack codebase explorer Flash",
|
|
189
|
-
"provider": "antigravity",
|
|
190
|
-
"model": "gemini-3.8-flash-medium",
|
|
191
|
-
"modeId": "full-access",
|
|
192
|
-
"thinkingOptionId": "medium",
|
|
193
|
-
"notes": "Optional read-only Scout breadth seat: searches the whole repository for missed boundaries and counterexamples. Reports evidence for driver reconciliation without cross-reading."
|
|
194
|
-
},
|
|
195
177
|
{
|
|
196
178
|
"id": "axstack-explore-execution",
|
|
197
179
|
"name": "Axstack execution explorer",
|
|
@@ -210,16 +192,6 @@
|
|
|
210
192
|
"notes": "Independent Sol high execution explorer: runs authorized bounded runtime checks on the same brief without cross-reading. Reports findings for driver reconciliation.",
|
|
211
193
|
"modelClass": "sol"
|
|
212
194
|
},
|
|
213
|
-
{
|
|
214
|
-
"id": "axstack-monitor",
|
|
215
|
-
"name": "Axstack monitor",
|
|
216
|
-
"provider": "claude",
|
|
217
|
-
"modeId": "bypassPermissions",
|
|
218
|
-
"thinkingOptionId": "high",
|
|
219
|
-
"notes": "Optional independent read-only Haiku 5.5 high observer for a standalone PR watch. Reads GitHub, feedback, and checks, persists event IDs, and wakes the owner only for a new actionable event. Never sends, authors, reviews, replies, or acts as either reusable PR manager. Healthy snapshots stay quiet. Chat-run mode: one same-host native read-only observer per Run; fresh finite passes report precise deltas internally to the original Run/driver and may disable/read back only their own automation at verified stop. No repair, dispatch, public notification, or replacement coordinator. Effective scheduled model/effort and wake require live proof. T3 uses the exact claude-haiku-5-5 pin from saved capabilities; a Claude rejection holds. Missing model or high effort holds without substitution.",
|
|
220
|
-
"modelClass": "haiku",
|
|
221
|
-
"model": "claude-haiku-5-5"
|
|
222
|
-
},
|
|
223
195
|
{
|
|
224
196
|
"id": "axstack-auditor",
|
|
225
197
|
"name": "Axstack auditor",
|
|
@@ -310,15 +282,6 @@
|
|
|
310
282
|
"modeId": "full-access",
|
|
311
283
|
"thinkingOptionId": "high",
|
|
312
284
|
"notes": "Independent Grok Rung 2 design candidate. Use the T3 Grok provider and resolve the model from saved capabilities. Receives the same brief without cross-reading; returns design, rationale, and rejected alternatives."
|
|
313
|
-
},
|
|
314
|
-
{
|
|
315
|
-
"id": "axstack-arena-candidate-antigravity",
|
|
316
|
-
"name": "Axstack arena candidate Antigravity",
|
|
317
|
-
"provider": "antigravity",
|
|
318
|
-
"model": null,
|
|
319
|
-
"modeId": "full-access",
|
|
320
|
-
"thinkingOptionId": "high",
|
|
321
|
-
"notes": "Independent Antigravity Rung 2 design candidate. Use the T3 Antigravity ACP provider and resolve the model from saved capabilities. Receives the same brief without cross-reading; returns design, rationale, and rejected alternatives."
|
|
322
285
|
}
|
|
323
286
|
]
|
|
324
287
|
}
|
|
@@ -8,7 +8,7 @@ For optional weekly test audits, use the separate packaged
|
|
|
8
8
|
The native canary below is also required before weekly activation.
|
|
9
9
|
|
|
10
10
|
At every scheduled pass start, follow [Provider bindings](t3-runtime.md#preflight-and-binding)
|
|
11
|
-
for
|
|
11
|
+
for provider binding.
|
|
12
12
|
|
|
13
13
|
For nightly read-only PR reports, use the separate packaged
|
|
14
14
|
[Nightly PR-triage prompt](pr-triage-nightly.md).
|
|
@@ -45,7 +45,8 @@ beside it. A no-change full pass appends at most one history line.
|
|
|
45
45
|
Follow the quiet check in the packaged [review-manager prompt](review-manager-prompt.md).
|
|
46
46
|
The full pass records in Watermarks `Quiet gate:` as the sorted list and
|
|
47
47
|
`Last full pass:` as UTC only as owner-of-record, then reads back the save.
|
|
48
|
-
The sections below govern full passes; a quiet exit bypasses their teardown
|
|
48
|
+
The sections below govern full passes; a quiet exit bypasses their teardown
|
|
49
|
+
except the guarded pass-end self-settle.
|
|
49
50
|
|
|
50
51
|
Configure the lane thread via `t3_thread_configure` with the `axstack-owner`
|
|
51
52
|
binding and verify its read-back. Then `schedule_task` uses the packaged prompt,
|
|
@@ -374,6 +375,31 @@ an action. There is no programmatic decision interpreter.
|
|
|
374
375
|
|
|
375
376
|
## Finite-session teardown
|
|
376
377
|
|
|
378
|
+
At pass end, an unbound pass calls `t3_thread_organize` with `action: settle` on its
|
|
379
|
+
own thread only, only when it owns no PR watch, has zero unsettled descendants,
|
|
380
|
+
has no pending receipt and is not held, wedged or a stalled owner.
|
|
381
|
+
Self-settle is the one exception to terminal-before-settle: T3 returns
|
|
382
|
+
`settlesWhenTurnEnds:true` and the next pass verifies `settled: true`.
|
|
383
|
+
This deferred metadata request takes effect after the current turn ends.
|
|
384
|
+
The next pass uses `t3_thread_read` on the recorded prior pass threadId before replacing
|
|
385
|
+
its identity record, and verifies `settled: true`.
|
|
386
|
+
Only prior passes that no guard keeps unsettled enter unresolved recovery.
|
|
387
|
+
A guard includes a hold or flag, an owned watch, unsettled descendants, a pending
|
|
388
|
+
receipt, a wedged pass or stalled owner, and every existing pass-start protection.
|
|
389
|
+
If a guard keeps a prior pass unsettled, drop it from the unresolved list and retain
|
|
390
|
+
its existing hold or flagged-threadId record (or watch/descendant ownership record).
|
|
391
|
+
Held or flagged prior passes never force a full pass or failure report by their unsettled state alone.
|
|
392
|
+
If the prior thread is unsettled and eligible, settle it under the existing pass-start guards
|
|
393
|
+
below and read back `settled: true`.
|
|
394
|
+
For a failed request or next-pass verification, the next pass owns unresolved
|
|
395
|
+
recovery and records a hold or report with the exact threadId and resume action.
|
|
396
|
+
If identity, guards or readback are unavailable, preserve the thread and report
|
|
397
|
+
that gap instead of settling it; the next eligible pass retries guarded verification.
|
|
398
|
+
Keep unresolved prior threadIds in the same record until verified settled.
|
|
399
|
+
Never guess thread identity from a title.
|
|
400
|
+
The sole continuity-write exception records own pass threadId before duplicate
|
|
401
|
+
classification and on quiet exits; all other shared writes retain their existing guards.
|
|
402
|
+
|
|
377
403
|
Decisions outliving a finite manager pass retain their receipt and hold in durable
|
|
378
404
|
continuity, with the flagged thread or GitHub as the action route.
|
|
379
405
|
|
|
@@ -10,6 +10,7 @@ not a mode change.
|
|
|
10
10
|
## Advance and hold
|
|
11
11
|
|
|
12
12
|
Follow [Advised holds](contracts.md#advised-holds) for eligible user-decision holds.
|
|
13
|
+
For parked holds, follow [Parked user-reply holds](contracts.md#parked-user-reply-holds).
|
|
13
14
|
|
|
14
15
|
Advance only after the finishing phase returns its completed identity (a
|
|
15
16
|
small-change intent, approved spec, matching ticket map, merge-ready or merged
|
|
@@ -43,7 +44,7 @@ The driver records each verified `Autopilot:` transition in the private run
|
|
|
43
44
|
record, which remains authoritative.
|
|
44
45
|
Awaiting human spec approval records `Autopilot: paused (spec approval; resume:
|
|
45
46
|
human approval)` as a decision hold raised in the T3 driver thread; end the turn
|
|
46
|
-
|
|
47
|
+
waiting on the decision.
|
|
47
48
|
|
|
48
49
|
## Reversible local repair
|
|
49
50
|
|
|
@@ -92,7 +93,7 @@ Never require a manual `axstack-watch` invocation.
|
|
|
92
93
|
The driver remains the single owner and sole run-record writer.
|
|
93
94
|
Never create a per-PR session or an ownership hand-off.
|
|
94
95
|
Read the [T3 runtime boundary](t3-runtime.md) and use its bound
|
|
95
|
-
`schedule_task` wake (`everyMs:
|
|
96
|
+
`schedule_task` wake (`everyMs:3600000`), recording the scheduledTaskId.
|
|
96
97
|
Follow [Native PR links and watches](t3-runtime.md#native-pr-links-and-watches)
|
|
97
98
|
alongside that bound schedule.
|
|
98
99
|
Apply [Chat-run watch runtime](../../axstack-watch/references/watch-runtime.md#chat-run-watch)
|
|
@@ -109,7 +110,8 @@ End the chat-run watch only when every watched PR is merged or closed,
|
|
|
109
110
|
launched work is settled, and the run's release step is settled or not applicable,
|
|
110
111
|
or the user cancels.
|
|
111
112
|
A required PR closed without merging is incomplete scope; it does not make the run release-eligible.
|
|
112
|
-
Keep its decision hold
|
|
113
|
+
Keep its decision hold until the user resolves scope or cancels.
|
|
114
|
+
For a required PR closed without merging, apply parking eligibility.
|
|
113
115
|
The chat-run watch never expires or waits for re-authorization while PRs remain open.
|
|
114
116
|
Follow [Chat-run watch runtime](../../axstack-watch/references/watch-runtime.md#chat-run-watch)
|
|
115
117
|
for quiet cadence and native schedule re-arming.
|
|
@@ -170,10 +172,10 @@ Never narrow standing merge delegation without a user instruction.
|
|
|
170
172
|
Explicit user restrictions, including `Auto-merge: off`, chat holds, and user
|
|
171
173
|
instructions, always win.
|
|
172
174
|
|
|
173
|
-
Follow [Provider bindings](t3-runtime.md#preflight-and-binding)
|
|
175
|
+
Follow [Provider bindings](t3-runtime.md#preflight-and-binding) on start, resume and run-watch wakes.
|
|
174
176
|
|
|
175
177
|
Follow [Route each wake](../../axstack-watch/SKILL.md#4-route-each-wake).
|
|
176
178
|
Raise decision holds, including spec and npm stage approval, and serious-risk
|
|
177
|
-
holds in the T3 driver thread; end the turn
|
|
179
|
+
holds in the T3 driver thread; end the turn waiting on the decision.
|
|
178
180
|
Revalidate the current head and base on a user reply; it clears only its bound cause.
|
|
179
181
|
Healthy ticks stay quiet.
|
|
@@ -13,6 +13,7 @@ folder: red/green logs exist, and counts, SHAs, and paths match. Resolve
|
|
|
13
13
|
Follow [PR chains](pr-chain.md) for recorded membership and base-bound evidence.
|
|
14
14
|
For ordinary PRs, use `git push origin HEAD:refs/heads/<owned branch>` and
|
|
15
15
|
`gh pr create` or `gh pr edit` with the actual parent or integration base.
|
|
16
|
+
Follow [PR body](pr-shape.md#pr-body) for the title, description and creation fallback.
|
|
16
17
|
Never use routine force push for ordinary PRs. For legacy native `gh stack`,
|
|
17
18
|
prefer a fast-forward push of existing commits, preserving unrelated entries.
|
|
18
19
|
Before a history rewrite, confirm expected-old remote SHA and use a narrowly
|
|
@@ -41,16 +41,10 @@ the revised scope and plan.
|
|
|
41
41
|
|
|
42
42
|
Validate the configured provider and model at actual launch. If it is
|
|
43
43
|
unavailable or exhausted, pause affected work, record the gap, and ask the
|
|
44
|
-
user.
|
|
45
|
-
driver may use headroom under [Provider bindings](t3-runtime.md#preflight-and-binding).
|
|
46
|
-
An exhausted account with no eligible sibling still holds; dispatched roles never fail over mid-thread.
|
|
47
|
-
Follow [Provider bindings](t3-runtime.md#preflight-and-binding) for driver account re-selection at turn boundaries.
|
|
44
|
+
user. Follow [Provider bindings](t3-runtime.md#preflight-and-binding).
|
|
48
45
|
Never infer any other route from quota state or subscription entitlement. Every
|
|
49
46
|
substitution requires the user's decision: configured alternatives are not
|
|
50
47
|
defaults. Rejection, timeout, quota and auth failures hold affected work.
|
|
51
|
-
Substitution here means changing provider or model, excluding that account selection.
|
|
52
|
-
Exception: opt-in default sync can change only the New-chat default within the user-configured pool.
|
|
53
|
-
Running threads, dispatched roles, schedules and roles.json keep existing rules.
|
|
54
48
|
Read the [T3 runtime boundary](t3-runtime.md) before dispatch, receipt consumption
|
|
55
49
|
or recovery; resolve models from the saved capabilities snapshot and verify
|
|
56
50
|
requested and effective settings separately.
|
|
@@ -210,6 +204,60 @@ Serious-risk holds include security, downtime, data loss and major design.
|
|
|
210
204
|
Serious-risk advice follows as an addendum with no second alert.
|
|
211
205
|
Peer serious-risk holds stay never advised under the peer-review exclusion above.
|
|
212
206
|
|
|
207
|
+
### Parked user-reply holds
|
|
208
|
+
|
|
209
|
+
When late advice completes and the hold becomes user-only, re-evaluate parking
|
|
210
|
+
eligibility and update the existing text card under the same hold key.
|
|
211
|
+
|
|
212
|
+
A parked hold waits only on a user reply in chat.
|
|
213
|
+
A parked hold has no unsettled worker, pending adviser seat or pending receipt.
|
|
214
|
+
A parked run has no forge-resolved hold and no other member PR needing watch events (CI, review, approval or repair).
|
|
215
|
+
Never park holds resolved on the forge, including user merge, npm stage approval
|
|
216
|
+
and human review.
|
|
217
|
+
Scoped and forge-resolved holds use a text card only, and watches and the
|
|
218
|
+
60-minute backstop stay.
|
|
219
|
+
|
|
220
|
+
For parking:
|
|
221
|
+
|
|
222
|
+
1. Call `unwatch_pull_request` for each watched member.
|
|
223
|
+
2. Post or update the text card saying "answer the prompt".
|
|
224
|
+
3. Call `update_scheduled_task` `enabled:false` and read it back.
|
|
225
|
+
4. Cancel queued copies of the run-watch prompt.
|
|
226
|
+
5. Use the harness question tool.
|
|
227
|
+
|
|
228
|
+
Include the PR URL, cause, head and base in the question, with the recommended
|
|
229
|
+
option first and numbered replies.
|
|
230
|
+
If disable or its read-back fails, reconcile the exact schedule ID.
|
|
231
|
+
For either failed-disable branch, update the existing text card by posting a
|
|
232
|
+
corrected version under the same hold key without a new alert.
|
|
233
|
+
When verified enabled, roll back to the unparked user-decision state, re-arm
|
|
234
|
+
watches using the [native-watch recovery procedure](t3-runtime.md#native-pr-links-and-watches)
|
|
235
|
+
and update the existing text card to remove "answer the prompt" and omit the question.
|
|
236
|
+
After successful native re-arm, set cadence to 60 min.
|
|
237
|
+
If native re-arm fails or is rate-limited, use the 5-minute recovery cadence
|
|
238
|
+
under the [native-watch recovery procedure](t3-runtime.md#native-pr-links-and-watches).
|
|
239
|
+
When the state remains unknown, update the existing text card to remove
|
|
240
|
+
"answer the prompt", mark it `automatic recovery unproven`, hold UNKNOWN and
|
|
241
|
+
omit the question.
|
|
242
|
+
Never infer an enabled backstop from a failed read.
|
|
243
|
+
|
|
244
|
+
On an answer from the question tool or chat:
|
|
245
|
+
|
|
246
|
+
1. Reconcile current PR and run state.
|
|
247
|
+
2. Bind the answer to the hold key, head and base.
|
|
248
|
+
3. Re-enable the schedule.
|
|
249
|
+
4. Re-arm watches using the [native-watch recovery procedure](t3-runtime.md#native-pr-links-and-watches).
|
|
250
|
+
5. Continue.
|
|
251
|
+
|
|
252
|
+
Stale answers clear nothing.
|
|
253
|
+
While parked there is no wake source and the text card is the lasting signal.
|
|
254
|
+
On the user's next message, if the hold is still open and
|
|
255
|
+
`t3_pending_request_list` shows no pending request, re-ask once under the same
|
|
256
|
+
hold key.
|
|
257
|
+
Re-ask without a new alert.
|
|
258
|
+
If the question tool is unavailable, follow the same parking order, omit the
|
|
259
|
+
question step and record `question tool unavailable`.
|
|
260
|
+
|
|
213
261
|
## Serious risk
|
|
214
262
|
|
|
215
263
|
Raise credible serious security, downtime, data-loss, or major-design risk
|
|
@@ -18,7 +18,7 @@ binding state and receipts to exact revisions.
|
|
|
18
18
|
pass. Peer follow-up uses one reviewer under [Peer mode](../../axstack-review/SKILL.md#peer-mode-colleague-pr);
|
|
19
19
|
authored = one eligible role from author provenance. Each uses a
|
|
20
20
|
separate driver-made detached checkout and private per-attempt evidence folder. Owner and author never review.
|
|
21
|
-
- Automation review manager
|
|
21
|
+
- Automation review manager: see
|
|
22
22
|
[Review automation health](#review-automation-health).
|
|
23
23
|
- Auditor (`axstack-auditor`): report-only; never edits, merges, activates, or
|
|
24
24
|
audits itself.
|
|
@@ -29,8 +29,8 @@ theme/size; queue dependencies under [PR chains](pr-chain.md).
|
|
|
29
29
|
|
|
30
30
|
## Ownership
|
|
31
31
|
|
|
32
|
-
The PR owner is accountable for candidate, fixes, evidence, monitoring
|
|
33
|
-
|
|
32
|
+
The PR owner is accountable for candidate, fixes, evidence, monitoring.
|
|
33
|
+
Peer code stays read-only.
|
|
34
34
|
Missing or idle sessions never transfer ownership.
|
|
35
35
|
Owned work enters review via the revision-bound
|
|
36
36
|
[candidate-publication boundary](candidate-publication.md).
|
|
@@ -86,12 +86,27 @@ Follow [T3 runtime](t3-runtime.md) for native completion, questions, launch
|
|
|
86
86
|
recovery and run-watch waits. Delegated notifications wake the driver; a launched
|
|
87
87
|
writer sends its marker with `t3_thread_send` using `mode: queue` to the recorded driver thread.
|
|
88
88
|
Delegated completion requires persisted `task_status` before `t3_thread_read`, terminal `completed`, `result_available`, `hasPendingChildRuns:false`, and final `AXSTACK-DONE`.
|
|
89
|
-
|
|
89
|
+
Delegated author completion requires delegated terminal checks plus candidate checks: non-empty diff, clean tree and named red/green logs.
|
|
90
|
+
A delegated repair uses a stable clientRequestId with `t3_thread_send(childThreadId, mode:queue, clientRequestId)` to the same author in the same worktree and branch, records the returned taskId and verifies the existing candidate head.
|
|
91
|
+
Repairs never repeat fresh checkout step 1.
|
|
92
|
+
Launched fallback writer completion requires `AXSTACK-DONE` plus terminal `t3_thread_wait` on the recorded run and candidate checks: non-empty diff, clean tree, and named red/green logs.
|
|
90
93
|
Completion must match the current attempt key and candidate SHA; an older attempt never completes a newer one.
|
|
91
94
|
Process the whole delivery before advancement, validating sender, scope,
|
|
92
95
|
authority, revisions and artifacts. Deduplicate by native task/thread/run identity.
|
|
93
96
|
A question marker stays incomplete; failure, interruption, permission prompts
|
|
94
97
|
and refusals hold with preserved evidence. Receipt messages alone are progress.
|
|
98
|
+
|
|
99
|
+
For a delegated child, detect questions with `t3_pending_request_list(childThreadId)`.
|
|
100
|
+
Never rely on `hasPendingQuestion` alone.
|
|
101
|
+
Codex `request_user_input_async` does not set it.
|
|
102
|
+
Use `t3_pending_request_read`, then confirm the request is still pending with
|
|
103
|
+
`t3_pending_request_list(childThreadId)`, then answer once within existing authority
|
|
104
|
+
using `t3_pending_request_respond`; a second ask holds.
|
|
105
|
+
Independent review rounds require fresh `delegate_task` calls.
|
|
106
|
+
Only author continuation and an answer to a child's own question use the same child.
|
|
107
|
+
Providers without a question tool (grok) and launched writers keep
|
|
108
|
+
the `AXSTACK-QUESTION` marker route.
|
|
109
|
+
|
|
95
110
|
Healthy unchanged passes are silent.
|
|
96
111
|
An explicitly invoked phase dispatches its configured roles through T3 and
|
|
97
112
|
closes with the lifecycle close-out; in-chat execution covers only ordinary
|
|
@@ -152,7 +167,7 @@ nothing without tested independent review.
|
|
|
152
167
|
|
|
153
168
|
Close-out requires the [close-out acceptance table](run-record.md#close-out-acceptance).
|
|
154
169
|
|
|
155
|
-
PRs merge by forge state; close out: (1) settle every T3 worker run and archive eligible threads. Settle each worker thread with `t3_thread_organize` and read back `settled: true`, because a finished task does not count; (2) compact record with counts and denominators—user
|
|
170
|
+
PRs merge by forge state; close out: (1) settle every T3 worker run and archive eligible threads. Settle each worker thread with `t3_thread_organize` only if needed and read back `settled: true`, because a finished task does not count. For merged or closed PR authors, follow the [native/manual read-first path](t3-runtime.md#native-pr-links-and-watches); (2) compact record with counts and denominators—user
|
|
156
171
|
interventions/deviations from plan/repairs; (3) `axstack-auditor`: settle
|
|
157
172
|
non-zero/requested, else `counts zero`. A base auditor preflight rejection
|
|
158
173
|
(no delegated task started) records `auditor: UNKNOWN (unlaunchable)` with the
|
|
@@ -43,6 +43,21 @@ Smaller cohesive PRs are encouraged; no padding.
|
|
|
43
43
|
|
|
44
44
|
## PR body
|
|
45
45
|
|
|
46
|
+
Open every own PR description with the problem in plain words from the user's
|
|
47
|
+
request, then the fix.
|
|
48
|
+
Do not lead with an implementation inventory.
|
|
49
|
+
Use a title that explains why the change matters.
|
|
50
|
+
For repository title conventions, check recently merged PRs.
|
|
51
|
+
|
|
52
|
+
End the description with `Created with <model> in <harness>`.
|
|
53
|
+
Include the author and subagent models that wrote code.
|
|
54
|
+
Use the model name the harness reports.
|
|
55
|
+
If the model is unknown, name the harness without guessing a model.
|
|
56
|
+
|
|
57
|
+
Open real PRs, never drafts, so review bots run.
|
|
58
|
+
If `gh pr create` fails because the GraphQL rate limit is exhausted, use REST:
|
|
59
|
+
`gh api repos/<owner>/<repo>/pulls -f title=... -f head=... -f base=... -F body=@<file>`.
|
|
60
|
+
|
|
46
61
|
Every own PR description must contain exactly one `Revert` line.
|
|
47
62
|
Follow [Revert line](candidate-publication.md#revert-line) for its format and classification.
|
|
48
63
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Nightly PR-triage prompt
|
|
2
2
|
|
|
3
3
|
You are a fresh read-only nightly PR-triage pass in your own T3 thread.
|
|
4
|
-
Read-only applies to the forge
|
|
5
|
-
At pass start, follow [Provider bindings](t3-runtime.md#preflight-and-binding) for
|
|
4
|
+
Read-only applies to the forge.
|
|
5
|
+
At pass start, follow [Provider bindings](t3-runtime.md#preflight-and-binding) for provider binding.
|
|
6
6
|
Use [Nightly PR-triage setup](automations.md#nightly-pr-triage-setup) for activation.
|
|
7
7
|
Read the durable activation record for the repository set.
|
|
8
8
|
Resolve the user with `gh api user --jq .login`.
|
|
@@ -20,3 +20,15 @@ Never declare a PR merge-ready.
|
|
|
20
20
|
|
|
21
21
|
Never merge, post comments, change labels, push, send user messages, dispatch
|
|
22
22
|
work, or launch threads.
|
|
23
|
+
|
|
24
|
+
At pass start, read the recorded prior pass thread with `t3_thread_read` and
|
|
25
|
+
apply [Finite-session teardown](automations.md#finite-session-teardown)'s guarded
|
|
26
|
+
verification or hold/report before replacing its identity.
|
|
27
|
+
Record own pass threadId in the existing activation record and read back the save.
|
|
28
|
+
|
|
29
|
+
At pass end, an unbound pass calls `t3_thread_organize` with `action: settle` on its
|
|
30
|
+
own thread only, only when it owns no PR watch, has zero unsettled descendants,
|
|
31
|
+
has no pending receipt and is not held, wedged or a stalled owner.
|
|
32
|
+
Follow [Finite-session teardown](automations.md#finite-session-teardown) for
|
|
33
|
+
deferred self-settle and next-pass verification; this applies to quiet, skipped
|
|
34
|
+
and empty passes too.
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
# Review manager prompt
|
|
2
2
|
|
|
3
|
-
The account picker must run first, before the quiet check: from the installed
|
|
4
|
-
`axstack` skill directory, run `bun scripts/pick-instance.js --provider <own provider> --json`.
|
|
5
|
-
Find this pass's current instance from `t3_thread_configuration` in the picker
|
|
6
|
-
JSON `instances` and inspect its `state`; defer reference loads until a full pass.
|
|
7
|
-
An eligible current instance remains quiet-eligible even when `chosenInstanceId`
|
|
8
|
-
names a different instance.
|
|
9
3
|
Run the quiet check before invoking `axstack-review` or reading any `skills/**` file.
|
|
10
4
|
|
|
11
5
|
Resolve self with `gh api user --jq .login`, then union two paginated `gh search prs`
|
|
@@ -19,26 +13,32 @@ PR-job descendants, using exact lane identities.
|
|
|
19
13
|
Read continuity at `~/.local/share/axstack/runs/review-manager/progress.md` and
|
|
20
14
|
compare its Watermarks with the inventory:
|
|
21
15
|
|
|
22
|
-
- Run the full pass when the picker JSON marks this pass's current instance `excluded`.
|
|
23
|
-
- Run the full pass when the picker exits with code 1.
|
|
24
|
-
- Run the full pass when the picker exits with code 2.
|
|
25
16
|
- Run the full pass when the sorted list differs from `Quiet gate:`.
|
|
26
17
|
- Run the full pass when any other lane thread is non-terminal.
|
|
18
|
+
- Run the full pass only when the recorded prior pass thread is unsettled and no guard keeps it unsettled.
|
|
27
19
|
- Run the full pass when continuity or either watermark is missing, malformed or unreadable.
|
|
28
20
|
- Run the full pass when `Last full pass:` is at least 4 hours old or in the future.
|
|
29
21
|
- Run the full pass when any call fails or pagination, PR head OIDs or thread/run liveness is incomplete or unknown.
|
|
30
22
|
- Run the full pass when continuity records any unserved, capacity-deferred, `INCOMPLETE` or re-eligible event, or any open hold with a resume condition beyond a user decision (such as capacity or remeasure).
|
|
31
23
|
|
|
24
|
+
Held or flagged prior passes never force a full pass or failure report by their unsettled state alone.
|
|
25
|
+
|
|
32
26
|
Holds awaiting only the user remain quiet-eligible: a user decision on the PR
|
|
33
27
|
changes `updatedAt`, and the 4 h full pass reconciles replies in flagged threads.
|
|
34
28
|
|
|
35
|
-
|
|
29
|
+
Before evaluating the quiet gate, read the recorded prior pass thread with
|
|
30
|
+
`t3_thread_read`; unknown identity or readback forces a full pass.
|
|
31
|
+
Record own pass threadId in review-manager continuity after reading the prior identity,
|
|
32
|
+
before duplicate classification, then read back the identity save.
|
|
33
|
+
|
|
34
|
+
If every busy condition is false, apply the guarded pass-end self-settle below,
|
|
35
|
+
then end the turn with no text, no skill load, no sweep and no other continuity write.
|
|
36
36
|
Otherwise continue with the full pass below; incomplete evidence retains the
|
|
37
37
|
existing admission and cleanup holds.
|
|
38
38
|
|
|
39
39
|
## Full pass
|
|
40
40
|
|
|
41
|
-
Follow [Provider bindings](t3-runtime.md#preflight-and-binding) for
|
|
41
|
+
Follow [Provider bindings](t3-runtime.md#preflight-and-binding) for provider binding.
|
|
42
42
|
|
|
43
43
|
You are a fresh finite T3 review-manager pass in project `axstack-review-lane`
|
|
44
44
|
on the VPS's existing `axatbhardwaj/axstack` clone. Fetch first; this unbound
|
|
@@ -60,3 +60,10 @@ The full pass records in Watermarks `Quiet gate:` as the sorted list and
|
|
|
60
60
|
`Last full pass:` as UTC only as owner-of-record, then reads back the save.
|
|
61
61
|
Settle descendants and end the finite turn. Stay quiet when unchanged.
|
|
62
62
|
Never check out a PR branch here.
|
|
63
|
+
|
|
64
|
+
At pass end, an unbound pass calls `t3_thread_organize` with `action: settle` on its
|
|
65
|
+
own thread only, only when it owns no PR watch, has zero unsettled descendants,
|
|
66
|
+
has no pending receipt and is not held, wedged or a stalled owner.
|
|
67
|
+
Follow [Finite-session teardown](automations.md#finite-session-teardown) for
|
|
68
|
+
deferred self-settle and next-pass verification; this applies to quiet, skipped
|
|
69
|
+
and empty passes too.
|
|
@@ -18,8 +18,7 @@
|
|
|
18
18
|
| `codex-only` | `codex/sol` | `axstack-reviewer-secondary` (`codex/luna` xhigh) |
|
|
19
19
|
| `claude-only` | `claude/opus` | `axstack-reviewer-secondary` (`claude/sonnet` high) |
|
|
20
20
|
- `axstack-advisor-astra`/`axstack-advisor-opus` advise and author candidates;
|
|
21
|
-
`axstack-arena-candidate-grok
|
|
22
|
-
`axstack-arena-candidate-antigravity` add families.
|
|
21
|
+
`axstack-arena-candidate-grok` adds a family.
|
|
23
22
|
`axstack-arena-judge-opus` judges round 1; `axstack-escalation-fable`/`axstack-arena-judge-astra` judge round 2.
|
|
24
23
|
High-stakes/trigger: fresh [contract](contracts.md) session.
|
|
25
24
|
`axstack-auditor` audits; `axstack-checker` reports discrepancies.
|
|
@@ -39,11 +38,9 @@
|
|
|
39
38
|
- `axstack-auditor`: `claude/haiku` xhigh in mixed, pinned to
|
|
40
39
|
`claude-haiku-5-5`. Missing that exact model or xhigh effort holds without
|
|
41
40
|
substitution. `claude/sonnet` high in claude-only; `codex/luna` xhigh in codex-only.
|
|
42
|
-
- `axstack-explore-codebase
|
|
41
|
+
- `axstack-explore-codebase`: `claude/haiku` high in
|
|
43
42
|
mixed/claude-only, pinned to `claude-haiku-5-5`. Missing that exact model
|
|
44
|
-
or high effort holds
|
|
45
|
-
`axstack-monitor`: standalone watch never sends; chat-run watch: bounded
|
|
46
|
-
internal reports to its Run and original driver.
|
|
43
|
+
or high effort holds this role without substitution.
|
|
47
44
|
- Scout requires `axstack-explore-codebase` and
|
|
48
45
|
`axstack-explore-codebase-luna` per facet in mixed (Haiku high + Luna
|
|
49
46
|
xhigh) and codex-only (Sol high + Luna xhigh). Claude-only requires
|
|
@@ -55,10 +52,8 @@
|
|
|
55
52
|
cross-reading. The driver reconciles findings per claim, never averages.
|
|
56
53
|
Record intentional absence and continue with Sonnet alone.
|
|
57
54
|
- Optional seats: `axstack-arena-candidate-grok`,
|
|
58
|
-
`axstack-arena-candidate-antigravity`, `axstack-research-web-google`,
|
|
59
55
|
`axstack-research-x`, `axstack-checker`, `axstack-research-code-sol`,
|
|
60
|
-
`axstack-explore-execution-sol`, `axstack-auditor-sol
|
|
61
|
-
`axstack-explore-codebase-flash`.
|
|
56
|
+
`axstack-explore-execution-sol`, `axstack-auditor-sol`.
|
|
62
57
|
Always dispatch optional seats when configured and available, except research
|
|
63
58
|
branches, which follow [Research step 2](../../axstack-research/SKILL.md#procedure) sizing.
|
|
64
59
|
A research branch unneeded by an open claim is recorded `not needed (<reason>)`,
|
|
@@ -12,8 +12,7 @@ or use an explicit user selection in the run record. The legacy manifest
|
|
|
12
12
|
manifest value does not create a contradiction. Missing or contradictory installed
|
|
13
13
|
preset / explicit user selection: setup gap, hold. Never infer from live profiles, harness,
|
|
14
14
|
tools, credentials, quota, subscription, or default to `mixed`.
|
|
15
|
-
|
|
16
|
-
may use headroom under [Provider bindings](t3-runtime.md#preflight-and-binding);
|
|
15
|
+
Follow [Provider bindings](t3-runtime.md#preflight-and-binding);
|
|
17
16
|
provider/model substitution still requires the user's decision.
|
|
18
17
|
|
|
19
18
|
At start, snapshot all role IDs from installed `skills/axstack/roles.json`,
|
|
@@ -30,9 +29,6 @@ using saved T3 capabilities JSON; missing or malformed capabilities holds.
|
|
|
30
29
|
Claude exact IDs come from capabilities, replacing transcript read-back.
|
|
31
30
|
Use an explicit model as given; for `model:null` without a class, grok uses the
|
|
32
31
|
provider's first listed model from saved capabilities and records its exact ID.
|
|
33
|
-
For `model:null` without a class, Antigravity must select the first listed model
|
|
34
|
-
whose ID ends with `-<effort>` from saved capabilities and record its exact ID.
|
|
35
|
-
Missing effort-suffix matches hold resolution for Antigravity.
|
|
36
32
|
A Codex or Claude role with neither model nor class is an intentional absence
|
|
37
33
|
and holds.
|
|
38
34
|
Resume must reuse the saved capabilities and role snapshot with no re-resolution; changes require the user’s explicit decision.
|
|
@@ -40,8 +36,7 @@ An unavailable provider, model, role, mode or effort holds that role with no sub
|
|
|
40
36
|
Preset changes apply to new runs only; an active run keeps its snapshot.
|
|
41
37
|
Replacing a session needs an explicit user decision and revalidation.
|
|
42
38
|
Timeout, quota, auth and rejection hold affected work.
|
|
43
|
-
|
|
44
|
-
Follow [Provider bindings](t3-runtime.md#preflight-and-binding) for driver account re-selection at turn boundaries.
|
|
39
|
+
Follow [Provider bindings](t3-runtime.md#preflight-and-binding).
|
|
45
40
|
[Model discipline](contracts.md#model-discipline) governs optional seats,
|
|
46
41
|
auditor preflight, and required holds; [Role roster](role-roster.md) governs
|
|
47
42
|
single-provider absence, mixed research with at least two different providers,
|
|
@@ -148,4 +143,5 @@ not alone a formal spec trigger. Hold affected unsafe work while reassessing.
|
|
|
148
143
|
author provenance — then use `axstack-review` and `axstack-watch` without
|
|
149
144
|
repeated approval or new spec ceremony. Never infer the author from the
|
|
150
145
|
orchestrator or assume an imported own PR's author.
|
|
146
|
+
Before pushing a stale or external PR, follow [adoption dispositions](../../axstack-watch/SKILL.md#stale-or-external-prs).
|
|
151
147
|
- Direct later phase: start there and pass that phase's identity check.
|