axstack 0.10.1 → 0.11.3
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 -6
- package/docs/workflows.md +28 -29
- package/package.json +1 -1
- package/skills/axstack/references/automations.md +346 -450
- package/skills/axstack/references/lifecycle.md +12 -16
- package/skills/axstack-relay/SKILL.md +25 -6
- package/skills/axstack-review/SKILL.md +32 -53
- package/skills/axstack-watch/SKILL.md +13 -14
- package/skills/axstack-watch/references/repair-publication.md +5 -3
- package/skills/axstack-watch/references/watch-runtime.md +16 -22
|
@@ -17,12 +17,9 @@ binding state and receipts to exact revisions.
|
|
|
17
17
|
`axstack-reviewer-secondary` sessions with identical brief and isolated first
|
|
18
18
|
pass; authored = one eligible configured reviewer from actual author
|
|
19
19
|
provenance. Owner and author never review.
|
|
20
|
-
- Driver/monitor/watchdog: the
|
|
21
|
-
|
|
22
|
-
`
|
|
23
|
-
that never sends. `axstack-watchdog` is the hourly health checker that never
|
|
24
|
-
mutates GitHub and performs exactly one kind of send, a gate-authorized
|
|
25
|
-
automation-health escalation recorded in `watchdog.json`.
|
|
20
|
+
- Driver/monitor/watchdog: the driver every 15 minutes dispatches and exits as
|
|
21
|
+
a mutating owner; the watchdog is model-free and read-only, has no gate, and
|
|
22
|
+
records `watchdog.log`; there is no watch deadline for automations.
|
|
26
23
|
- Auditor (`axstack-auditor`): report-only; never edits, merges, activates, or
|
|
27
24
|
audits itself.
|
|
28
25
|
|
|
@@ -99,19 +96,18 @@ Tracking grants no merge, release, model-substitution, or scope authority.
|
|
|
99
96
|
|
|
100
97
|
## Deadline (one rule for every owned timer)
|
|
101
98
|
|
|
102
|
-
The default 24-hour deadline covers
|
|
103
|
-
|
|
104
|
-
|
|
99
|
+
The default 24-hour deadline covers standalone task-owned timers. Stop them at
|
|
100
|
+
deadline and preserve remaining work; there is no watch deadline for
|
|
101
|
+
automations. Merge-ready differs from merged; human merges.
|
|
105
102
|
|
|
106
103
|
## Watch health
|
|
107
104
|
|
|
108
|
-
The user lifted the native-watch hold by user decision on 2026-09-16. The
|
|
109
|
-
automation is a mutating owner for its PRs; `axstack-watchdog` stays
|
|
110
|
-
independent and read-only
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
hold. Build no custom scheduler and use no legacy fallback. Details live in
|
|
105
|
+
The user lifted the native-watch hold by user decision on 2026-09-16. The
|
|
106
|
+
driver automation is a mutating owner for its PRs; `axstack-watchdog` stays
|
|
107
|
+
independent and read-only. The driver every 15 minutes dispatches and exits;
|
|
108
|
+
the watchdog is model-free, has no gate, and records `watchdog.log`; there is
|
|
109
|
+
no watch deadline for automations. Build no custom scheduler and use no legacy
|
|
110
|
+
fallback. Details live in
|
|
115
111
|
[Watch runtime](../../axstack-watch/references/watch-runtime.md).
|
|
116
112
|
|
|
117
113
|
## Audit hook (end of run and meaningful checkpoints)
|
|
@@ -63,12 +63,12 @@ listing all pass.
|
|
|
63
63
|
|
|
64
64
|
## Preserve identity and authority
|
|
65
65
|
|
|
66
|
-
Delivery is one-way. Hermes does not route a
|
|
67
|
-
sending session; its own agent answers replies.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
66
|
+
Delivery is one-way; no session polls Telegram. Hermes does not route a reply
|
|
67
|
+
back to the sending session; its own agent answers replies. Outside the fixed
|
|
68
|
+
decision-token flow below, a reply is never a receipt, decision, or authority
|
|
69
|
+
for this session, and no persistent owner is needed to send. Every ordinary
|
|
70
|
+
message must say where the user acts: the current Orca conversation, the Orca
|
|
71
|
+
worktree, or the GitHub PR. Do not invent reply commands.
|
|
72
72
|
|
|
73
73
|
Send authority comes from the explicit request or applicable standing policy.
|
|
74
74
|
It grants no merge, publication, ownership-transfer, or model-substitution
|
|
@@ -76,6 +76,25 @@ authority. Delivery is transport evidence only. Revalidate any user decision
|
|
|
76
76
|
that arrives through an authorized channel against the current task and
|
|
77
77
|
existing action boundaries before acting; silence never grants permission.
|
|
78
78
|
|
|
79
|
+
## Decision tokens
|
|
80
|
+
|
|
81
|
+
An automation escalation is the narrow exception defined by
|
|
82
|
+
[Automation sessions](../axstack/references/automations.md). The PR agent opens
|
|
83
|
+
an immutable-bound decision token, sends one message with the exact
|
|
84
|
+
`/axstack-decide approve <token>` and `/axstack-decide reject <token>` replies,
|
|
85
|
+
records the send receipt, and
|
|
86
|
+
exits without waiting. The Hermes script decides by validating the private
|
|
87
|
+
channel and updating only an open token file; Hermes never performs the bound
|
|
88
|
+
GitHub or Git action. The driver consumes the file on a later tick, revalidates
|
|
89
|
+
all bound state, marks an approval spent before acting, performs only that
|
|
90
|
+
action, and records its receipt.
|
|
91
|
+
|
|
92
|
+
This does not create a reply channel for the sending agent: Hermes pushes the
|
|
93
|
+
decision to the file through the fixed `axstack-decide` script, and the driver
|
|
94
|
+
reads that file. Delivery is one-way; no session polls Telegram. Token creation,
|
|
95
|
+
decision, and consumption keep their separate writers and authority; a message
|
|
96
|
+
receipt alone authorizes nothing.
|
|
97
|
+
|
|
79
98
|
## Reconcile, deliver, and record
|
|
80
99
|
|
|
81
100
|
Before any new send, check the caller's run record for an existing receipt
|
|
@@ -18,10 +18,8 @@ load and verify the
|
|
|
18
18
|
[candidate-publication boundary](../axstack/references/candidate-publication.md).
|
|
19
19
|
When the caller is an Orca driver automation, load
|
|
20
20
|
[Automation sessions](../axstack/references/automations.md): its reviewer briefs
|
|
21
|
-
carry the required escalation field
|
|
22
|
-
|
|
23
|
-
actual verdict instead, under "Binding review verdicts (pair C)" in that
|
|
24
|
-
reference and the authorized-submission branch below.
|
|
21
|
+
carry the required escalation field and every eligible peer PR takes a binding
|
|
22
|
+
`APPROVE` or `REQUEST_CHANGES` verdict under the automation exception below.
|
|
25
23
|
|
|
26
24
|
## Peer mode (colleague PR)
|
|
27
25
|
|
|
@@ -221,11 +219,10 @@ Escalate to user: yes | no — <criterion> — <reason>
|
|
|
221
219
|
|
|
222
220
|
Every brief ends with the `Escalate to user` field and the reviewer answers it
|
|
223
221
|
in the receipt. A reviewer may cite only a security concern, a permanent
|
|
224
|
-
on-chain state change, or an architectural change in approach
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
for the gate.
|
|
222
|
+
on-chain state change, or an architectural change in approach. Health is not a
|
|
223
|
+
reviewer criterion. The answer is input to the PR escalation gate, not a veto
|
|
224
|
+
and not a verdict; see
|
|
225
|
+
[Automation sessions](../axstack/references/automations.md) for the gate.
|
|
229
226
|
|
|
230
227
|
## Template: review receipt (one block per revision)
|
|
231
228
|
|
|
@@ -260,9 +257,9 @@ private transport values or configuration.
|
|
|
260
257
|
Under an automation session, credible serious risk found by a reviewer still
|
|
261
258
|
raises the standing internal prompt and dependent-action hold immediately, and
|
|
262
259
|
the gate governs only external notification: the internal prompt lands in the
|
|
263
|
-
run record and the automation session's own Orca conversation
|
|
264
|
-
|
|
265
|
-
overrides a validated blocking finding.
|
|
260
|
+
run record and the automation session's own Orca conversation. `escalate`
|
|
261
|
+
opens the bound decision token, sends through `axstack-relay`, and exits
|
|
262
|
+
without waiting; `proceed` never overrides a validated blocking finding.
|
|
266
263
|
|
|
267
264
|
## Publishing rule
|
|
268
265
|
|
|
@@ -308,44 +305,26 @@ for a complete `APPROVE` or `REQUEST_CHANGES` verdict:
|
|
|
308
305
|
Submission is complete only when the remote receipt confirms the review bound
|
|
309
306
|
to the intended commit.
|
|
310
307
|
|
|
311
|
-
Automation exception
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
`INCOMPLETE`, unresolved material disagreement, or an unavailable required
|
|
335
|
-
reviewer publishes nothing and records a hold that pauses mutation for the
|
|
336
|
-
PR.
|
|
337
|
-
2. The gate returns exactly one token, `escalate` or `proceed`. `escalate`
|
|
338
|
-
records the hold and the relay receipt and publishes nothing. Only
|
|
339
|
-
`proceed` plus no unresolved validated blocking finding permits
|
|
340
|
-
publication.
|
|
341
|
-
3. Read back the remote head and base immediately before submit; stop if
|
|
342
|
-
either differs from the reviewed candidate.
|
|
343
|
-
4. Submit one owner-synthesized `COMMENT` review bound to the reviewed commit
|
|
344
|
-
through the actual GitHub commit parameter, carrying every receipt's
|
|
345
|
-
findings and limitations, then verify the submission receipt.
|
|
346
|
-
5. A receipt for an unchanged head SHA is never published twice; on ambiguity,
|
|
347
|
-
look up remote state and submit only when absent.
|
|
348
|
-
|
|
349
|
-
Publication is complete when the remote receipt confirms one `COMMENT` review
|
|
350
|
-
bound to the intended commit, or when the recorded hold names the missing
|
|
351
|
-
input and the next owner.
|
|
308
|
+
## Automation exception
|
|
309
|
+
|
|
310
|
+
For a peer PR selected under
|
|
311
|
+
[Automation sessions](../axstack/references/automations.md), apply the same
|
|
312
|
+
complete-review and exact-commit requirements, then run the Luna gate.
|
|
313
|
+
`escalate` opens a bound decision token, sends its message, and exits without
|
|
314
|
+
submitting. `proceed` permits `APPROVE` only with no validated blocker and
|
|
315
|
+
permits `REQUEST_CHANGES` only with at least one evidenced validated blocker.
|
|
316
|
+
`INCOMPLETE`, unavailable inputs, unresolved disagreement, or unknown GitHub
|
|
317
|
+
state submits nothing.
|
|
318
|
+
|
|
319
|
+
Immediately before `gh pr review`, re-read self's reviews at the head. If one
|
|
320
|
+
already exists, skip submission and record its id. Otherwise re-check head,
|
|
321
|
+
base, draft status, authorship, and allowlist, bind the verdict to the exact
|
|
322
|
+
commit parameter, and end the body with this marker line:
|
|
323
|
+
|
|
324
|
+
```text
|
|
325
|
+
<!-- axstack-automation verdict head=<sha> -->
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
After submission, read back and record the review id at the bound head. An
|
|
329
|
+
ambiguous result is looked up before any retry. The automation never submits a
|
|
330
|
+
`COMMENT` review.
|
|
@@ -22,7 +22,7 @@ The authenticated human login selects PRs. Runtime session IDs coordinate work
|
|
|
22
22
|
only and establish neither human identity nor write, reply, or merge authority.
|
|
23
23
|
When the session is the Orca driver automation, also load
|
|
24
24
|
[Automation sessions](../axstack/references/automations.md): it is the owner
|
|
25
|
-
for every PR it handles, and its
|
|
25
|
+
for every PR it handles, and its allowlist bounds every mutation.
|
|
26
26
|
|
|
27
27
|
## 1. Adopt and reconcile
|
|
28
28
|
|
|
@@ -63,9 +63,10 @@ Read-only checks and updates to the already-owned local record need no runtime
|
|
|
63
63
|
load. When the watch needs a new owner or automated observation, first read
|
|
64
64
|
[Watch runtime](references/watch-runtime.md) and then
|
|
65
65
|
[Orca runtime](../axstack/references/orca-runtime.md). Reconcile before creating
|
|
66
|
-
anything. The user lifted the native-watch hold by user decision: the
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
anything. The user lifted the native-watch hold by user decision: the driver
|
|
67
|
+
every 15 minutes dispatches and exits as a mutating owner; the watchdog is
|
|
68
|
+
model-free and read-only, has no gate, and records `watchdog.log`; there is no
|
|
69
|
+
watch deadline for automations. The driver is the automation session itself,
|
|
69
70
|
with no `axstack-monitor` or `axstack-owner` role row; `axstack-monitor` stays
|
|
70
71
|
an optional read-only observer that never sends. One read-only PR observation
|
|
71
72
|
needs neither.
|
|
@@ -114,10 +115,10 @@ the current revision, and a recorded hold or next owner where work remains.
|
|
|
114
115
|
|
|
115
116
|
When a new actionable event is eligible under a recorded `Notification policy`,
|
|
116
117
|
the owner may use the optional [axstack-relay](../axstack-relay/SKILL.md).
|
|
117
|
-
The monitor never sends
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
118
|
+
The monitor never sends. The automation watchdog never mutates GitHub, has no
|
|
119
|
+
gate, and records occurrences and send receipts in `watchdog.log`; absent
|
|
120
|
+
policy or failed relay uses the current Orca conversation and leaves every
|
|
121
|
+
existing hold open.
|
|
121
122
|
|
|
122
123
|
## 5. State readiness precisely
|
|
123
124
|
|
|
@@ -128,15 +129,13 @@ observed state distinct from merged, and the human merges by default.
|
|
|
128
129
|
|
|
129
130
|
## 6. End and preserve continuity
|
|
130
131
|
|
|
131
|
-
End early when all required PRs merge,
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
End a standalone watch early when all required PRs merge, at cancellation, or
|
|
133
|
+
at its shared default 24 h deadline. There is no watch deadline for
|
|
134
|
+
automations. In every case, stop and verify all owned registrations.
|
|
134
135
|
|
|
135
136
|
At every end condition, leave the compact state below in the private run record
|
|
136
137
|
and report it in the current chat, even when work remains. Expiry grants neither
|
|
137
|
-
silent renewal nor ownership-transfer authority.
|
|
138
|
-
marks the PR `expired` in the record and sidecar; an `expired` PR is never
|
|
139
|
-
silently re-adopted and is skipped until the user re-arms it.
|
|
138
|
+
silent renewal nor ownership-transfer authority.
|
|
140
139
|
|
|
141
140
|
Transfer ownership through the runtime-owned Orca handoff route only when the
|
|
142
141
|
user explicitly requests it. Before transfer, follow the lifecycle-owned
|
|
@@ -36,9 +36,11 @@ exact new revision and base, all six angles, applicable acceptance, the reply
|
|
|
36
36
|
body identities, and every affected boundary, with no unresolved material
|
|
37
37
|
finding or urgent hold. Under an automation the escalation gate of
|
|
38
38
|
[Automation sessions](../../axstack/references/automations.md) also runs on
|
|
39
|
-
the local SHA
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
the local SHA. `escalate` creates a token, pins the candidate at
|
|
40
|
+
`refs/axstack/decisions/<token>`, opens the decision token, sends its message,
|
|
41
|
+
and exits instead of pushing. `proceed` permits publication only with no
|
|
42
|
+
unresolved validated blocking finding, and a push before the gate settles is
|
|
43
|
+
forbidden.
|
|
42
44
|
|
|
43
45
|
## 3. Revalidate immediately before publication
|
|
44
46
|
|
|
@@ -4,18 +4,16 @@ Read this before starting, resuming, or stopping automated PR observation.
|
|
|
4
4
|
|
|
5
5
|
## Accepted policy
|
|
6
6
|
|
|
7
|
-
The PR owner remains accountable throughout
|
|
8
|
-
`axstack-monitor` and `axstack-watchdog` are independent,
|
|
9
|
-
authors, reviewers, repliers, or owners.
|
|
7
|
+
The PR owner remains accountable throughout a standalone watch's default
|
|
8
|
+
24-hour window. `axstack-monitor` and `axstack-watchdog` are independent,
|
|
9
|
+
read-only roles, not authors, reviewers, repliers, or owners.
|
|
10
10
|
|
|
11
11
|
- **Monitor:** `axstack-monitor` is an optional read-only observer that reads
|
|
12
|
-
GitHub, all PR feedback, and latest checks
|
|
12
|
+
GitHub, all PR feedback, and latest checks on its registered cadence, persists event
|
|
13
13
|
IDs, wakes the owner only for a new actionable event, and never sends.
|
|
14
|
-
- **Watchdog:**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
recorded in `watchdog.json`, and otherwise reports a verified health failure
|
|
18
|
-
to the owner.
|
|
14
|
+
- **Watchdog:** for the PR automations, it is a model-free hourly shell precheck
|
|
15
|
+
that never mutates GitHub, has no gate, and records each tick in
|
|
16
|
+
`watchdog.log`.
|
|
19
17
|
|
|
20
18
|
Healthy observations are snapshot-only and update quietly; they wake neither owner nor
|
|
21
19
|
driver. Both roles deduplicate event IDs. Uncertain delivery is reconciled
|
|
@@ -32,25 +30,21 @@ permission pinning are unsupported, and its schedule parser cannot preserve
|
|
|
32
30
|
the accepted bounded expiry by itself. Requested role values or a post-launch
|
|
33
31
|
self-report are not effective launch evidence.
|
|
34
32
|
|
|
35
|
-
The user lifted the native-watch hold by user decision on 2026-09-16. The
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
session itself, with no `axstack-monitor` or `axstack-owner` role row
|
|
40
|
-
materialized for it. The driver records its own model
|
|
41
|
-
identity on every tick and the watchdog compares it with the expected model; a
|
|
42
|
-
mismatch is a safety hold, never a silent substitution. The bounded expiry is
|
|
43
|
-
enforced by the run record's watch deadline, not by the schedule parser. Still
|
|
33
|
+
The user lifted the native-watch hold by user decision on 2026-09-16. The
|
|
34
|
+
driver every 15 minutes dispatches and exits as the mutating owner, and the
|
|
35
|
+
watchdog is model-free and read-only, has no gate, and records `watchdog.log`;
|
|
36
|
+
there is no watch deadline for automations. The driver is the automation
|
|
37
|
+
session itself, with no `axstack-monitor` or `axstack-owner` role row. Still
|
|
44
38
|
introduce no custom scheduler or polling loop and use no legacy runtime
|
|
45
39
|
fallback. The session-level contract lives in
|
|
46
40
|
[Automation sessions](../../axstack/references/automations.md).
|
|
47
41
|
|
|
48
42
|
## Preserve the contract under automation
|
|
49
43
|
|
|
50
|
-
An automation session preserves
|
|
51
|
-
healthy behavior, deduplication, handshake, watched
|
|
52
|
-
|
|
53
|
-
|
|
44
|
+
An automation session preserves its 15-minute driver and hourly model-free
|
|
45
|
+
watchdog cadences, quiet healthy behavior, deduplication, handshake, watched
|
|
46
|
+
scope, and wake owner. Test restart, duplicate ticks, cancellation,
|
|
47
|
+
session-reuse fallback, and final cleanup before enabling.
|
|
54
48
|
A firing timestamp proves neither delivery nor work advancement. An unrequested
|
|
55
49
|
fallback session reconciles ownership and never becomes owner silently.
|
|
56
50
|
|