axstack 0.20.15 → 0.20.16

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 CHANGED
@@ -114,10 +114,10 @@ For recurring peer review, Axstack defines one optional native Orca review manag
114
114
  Own-PR observation and authorized repair remain user-driven through `axstack-watch`. Its chat-run mode can use one optional same-host native Orca observer per Run, about every ten minutes, to report new PR events internally to the original chat. The chat alone directs repairs and publication. Activation needs a live host canary; source and install checks do not prove it is running.
115
115
 
116
116
  The review manager uses a 15-minute schedule. Each pass uses a fresh finite
117
- session in an isolated workspace and admits eligible actionable PR events within
117
+ session in one dedicated existing workspace and admits eligible actionable PR events within
118
118
  measured host capacity. Waiting PRs remain tracked without consuming
119
119
  execution slots, so a large open-PR backlog does not require an idle agent per PR.
120
- Completed passes save continuity and retire their own verified resources.
120
+ Completed passes save compact continuity and close only their own exact terminal.
121
121
  Held jobs preserve evidence, use private worktree-local temporary paths, and
122
122
  release capacity only after native descendant settlement. Uncertain execution
123
123
  teardown pauses the lane; settled evidence cleanup does not occupy a slot.
package/docs/workflows.md CHANGED
@@ -209,36 +209,27 @@ The watch lasts until all member PRs merge or close, or you cancel it. Stop requ
209
209
  ## Optional native peer-review automation
210
210
 
211
211
  The optional native review manager runs at minutes `0,15,30,45`. Each
212
- scheduled pass uses a fresh finite session in a new isolated workspace, scans complete
212
+ scheduled pass uses a fresh finite session in one dedicated existing workspace, scans complete
213
213
  discovery pages, and admits eligible actionable PR events within measured host
214
214
  capacity. Waiting PRs stay covered and consume no slot after
215
215
  owned descendants settle. Each job uses one repository-parented worktree; the
216
216
  manager never checks out PR branches in its own workspace.
217
217
 
218
- Every pass reconciles saved, GitHub, and native Orca state across all same-lane
219
- workspaces before admission. A
220
- confirmed same-lane manager makes the new duplicate do no work or shared-record
221
- write and close only itself. Normal teardown settles descendants, saves durable
222
- continuity and decisions outside disposable workspaces, then retires its own
223
- verified isolated pass workspace as the final action. It never bulk-closes a
224
- shared manager workspace or a PR-job worktree, or cleans preserved
225
- evidence, user sessions, unknown liveness, `user_takeover`, or ambiguous
226
- publication state. Manual review and user-driven `axstack-watch` remain outside
227
- this scheduled lifecycle.
228
-
229
- One natively ordered successor may recover an exact positively completed
230
- predecessor whose terminal survived, but only after matching its automation,
231
- run, workspace, and terminal incarnation and proving zero unsettled descendants.
232
- It saves and reads back the cleanup claim before exact native close, then proves
233
- the full process tree exited before ownership release or guarded worktree removal.
234
- Age, status, or idle state alone never authorizes cleanup. Conflicting successors,
235
- identity mismatch, unknown or protected state, `user_takeover`, unexpected
236
- terminals, dirty or unpushed work, and unarchived evidence hold cleanup; an
237
- unchanged failure is deduplicated. Native ordering is not an atomic lock, so the
238
- overlap canary remains an activation requirement.
239
-
240
- Each bounded job uses a private `0700` temporary directory inside its own
241
- worktree. Cleanup targets only the validated owned path: no `TMPDIR` globs,
218
+ Every pass reconciles saved, GitHub, and native Orca state across the lane before
219
+ admission. A confirmed same-lane manager makes the new duplicate do no work or
220
+ shared-record write; it closes only its own exact terminal. The pass settles
221
+ descendants,
222
+ releases worker terminals, archives private evidence and reads it back, then
223
+ uses `axstack-cleanup` guards to remove reviewer and PR-job worktrees. A merged
224
+ or closed PR does not keep a clean job worktree waiting for a user decision.
225
+ Dirty source, unpushed commits, `user_takeover`, unknown liveness, and ambiguous
226
+ publication remain cleanup holds. The manager saves compact continuity, then
227
+ closes its own exact terminal as the final action. Manual review and user-driven
228
+ `axstack-watch` remain outside this scheduled lifecycle.
229
+
230
+ Manager and job commands set `TMPDIR` to a private directory inside their owning
231
+ workspace. Each bounded job uses a private `0700` directory. Cleanup targets
232
+ only the validated owned path: no `TMPDIR` globs,
242
233
  shared-root sweeps, or general cache wipes, and uncertain files remain for
243
234
  reconciliation. Permission prompts and provider safety refusals are incomplete
244
235
  holds, never bypass or cross-model retry signals. The coordinator preserves the
@@ -259,7 +250,7 @@ relative contract and invokes `axstack-review`. Bounded jobs publish ordinary
259
250
  exact-head review verdicts; the human merges. Manual adopted-PR maintenance
260
251
  uses `axstack-watch` with local-SHA review before authorized publication.
261
252
  Exceptional security, permanent-on-chain, or architectural decisions remain actionable in GitHub or a durable user-owned conversation
262
- after manager self-close, with an authorized deduplicated Telegram notification.
253
+ after the manager session ends, with an authorized deduplicated Telegram notification.
263
254
  The current operational contract is
264
255
  `skills/axstack/references/automations.md`.
265
256
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "axstack",
3
- "version": "0.20.15",
3
+ "version": "0.20.16",
4
4
  "description": "Axstack installer and setup CLI: installs owned chat skills and role data, configures supported harness settings, and checks Orca capabilities.",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -8,21 +8,18 @@ automation specs and plans describe retired designs and are not instructions.
8
8
  The review manager runs at minutes `0,15,30,45` and invokes
9
9
  [axstack-review](../../axstack-review/SKILL.md) for eligible peer reviews.
10
10
 
11
- Use a new isolated workspace for every scheduled pass, with one fresh finite
12
- manager session. Configure native repo-created worktree mode against the
13
- designated manager repository; never target an existing shared workspace.
14
- Do not use `--reuse-session`. The scheduler creates the pass workspace before
15
- launch; the manager must not move itself from a shared launch workspace.
16
- Keep lane continuity and evidence outside disposable manager workspaces at
17
- the configured durable absolute paths. A manager never checks out a PR branch
18
- in its pass workspace. Missed slots do not replay a backlog; the next ordinary pass
11
+ Use one dedicated existing Orca workspace owned by this automation. Configure
12
+ native existing-workspace mode with `--fresh-session`, never `--reuse-session`;
13
+ each pass gets a fresh finite manager session. Keep lane continuity and evidence
14
+ at configured durable absolute paths. A manager never checks out a PR branch
15
+ in its workspace. Missed slots do not replay a backlog; the next ordinary pass
19
16
  discovers current state. The short packaged review prompt sits beside this file
20
17
  and discovers these rules by relative link instead of copying them.
21
18
 
22
19
  Provision one explicit absolute continuity path per automation ID in the
23
- scheduled prompt. Follow [Run record](run-record.md) for its contents; the
24
- repository's absolute Git common directory is a valid durable root, but a pass
25
- worktree is not. Missing or non-durable continuity configuration holds admission.
20
+ scheduled prompt. The repository's absolute Git common directory is a valid
21
+ durable root; missing or non-durable configuration holds admission. Keep
22
+ continuity bounded and archive old pass history per [Run record](run-record.md).
26
23
 
27
24
  This is prompt policy, not proof that Orca starts a fresh session or prevents
28
25
  overlapping passes. Before activation a native canary must prove fresh-session
@@ -33,14 +30,14 @@ effects. A firing timestamp proves neither delivery nor useful completion.
33
30
  ## Session admission
34
31
 
35
32
  Reconcile saved state, current GitHub state, and native Orca Tasks, Dispatches,
36
- sessions, and liveness across all workspaces belonging to the same automation
37
- before discovery or admission; never infer lane ownership from an empty local
38
- workspace. Bind the lane to the automation ID and pass to its native run ID,
39
- workspace ID, and terminal identity, not a title or directory-name guess.
33
+ sessions, and liveness across all workspaces belonging to the lane before
34
+ discovery or admission; never infer lane ownership from an empty local workspace.
35
+ Bind the lane to the automation ID and pass to its native run ID, workspace ID,
36
+ and terminal identity, not a title or directory-name guess.
40
37
  A confirmed live manager for the same lane remains authoritative.
41
38
  The new duplicate does no PR work, makes no shared-record write, touches
42
- nothing owned by the live manager, and closes only itself as its final action
43
- by the same guarded isolated-workspace retirement below, not a tab-only close.
39
+ nothing owned by the live manager, and closes only its own exact terminal as
40
+ its final action under the guard below.
44
41
  Unknown liveness blocks admission and shared-record writes; it does not
45
42
  authorize takeover, cleanup, or a duplicate manager. Preserve `user_takeover`
46
43
  and other user-owned sessions.
@@ -54,66 +51,14 @@ Read every page of native runs, workers, and workspace inventory; truncated or
54
51
  failed inventory holds admission and cleanup rather than implying absence.
55
52
 
56
53
  A prior manager does not retain the lane merely because its automation run
57
- status says failed or dispatched. Require confirmed native process exit for its
58
- exact terminal incarnation, saved continuity, and settlement of all owned jobs
59
- and descendants before releasing its lane ownership. Absence or saved retirement
60
- intent alone is insufficient. Conversely a completed run row does not prove exit.
54
+ status says failed or dispatched. Reconcile a surviving prior terminal using
55
+ exact identity and proven completion from native state before treating it as
56
+ live or releasing ownership. Require confirmed process exit for its exact
57
+ terminal incarnation, saved continuity, and settlement of all owned jobs and
58
+ descendants before ownership release. A completed run row alone does not prove exit.
61
59
  If these facts remain unknown, report the hold at the durable decision location;
62
60
  do not silently stand down forever or replace a potentially live owner.
63
61
 
64
- ### Guarded completed-predecessor recovery
65
-
66
- A successor may retire a positively completed predecessor whose manager terminal
67
- survived only through this narrow recovery path. Eligibility requires an exact
68
- automation ID, run ID, workspace ID, and terminal incarnation match, a positive
69
- completion receipt bound to that incarnation, zero active or unsettled descendants,
70
- and every owned Task and Dispatch settled. A completed row or saved retirement
71
- intent alone is not positive completion. Age, status, and idle state are never
72
- cleanup authority. Active, unknown, protected, identity-mismatched,
73
- `user_takeover`, unexpected-terminal, permission-held, or otherwise unverifiable
74
- state preserves the predecessor and pauses admission; this path never takes over
75
- its PR work.
76
-
77
- Exactly one successor, selected by native run ordering, may write the cleanup
78
- claim. Immediately before writing, re-read the complete lane inventory and
79
- ordering; then save and read back claimant identity, predecessor identity,
80
- completion, and zero-descendant continuity before the exact native workspace
81
- close. A later successor reconciles that claim and performs no cleanup mutation.
82
- Missing ordering or a conflicting claim holds both cleanup and admission. This
83
- ordering is not an atomic lock; activation still depends on the overlap canary
84
- proving that two successors cannot both mutate one predecessor.
85
-
86
- Use the version-matched native workspace close against the receipt's complete
87
- workspace ID, never an individually guessed terminal or broad selector. After
88
- close, re-list native runs, workspaces, terminals, Tasks, and Dispatches and prove
89
- the full predecessor process tree exited before ownership release. Save and read
90
- back the exit and release receipts, then use native worktree cleanup only when the
91
- workspace has no children, dirty or unknown files, unpushed commits, unarchived
92
- evidence, or user-owned work. Preserve every failed or uncertain close, exit,
93
- release, or removal with its exact resume condition and pause the lane. An
94
- unchanged cleanup failure gets no destructive retry or duplicate notification.
95
-
96
- Before PR admission, reconcile old pass resources and reclaim every safely
97
- removable earlier pass workspace under the retirement guards below. This is
98
- routine cleanup on every admitted pass; do not wait for the three-workspace
99
- threshold to start cleanup. Save confirmed exit and ownership-release receipts
100
- before removing each workspace. Preserve dirty, unpushed, evidence-bearing,
101
- user-owned, active, or uncertain resources; the threshold never relaxes these guards.
102
- Explicitly classified evidence may cease to block cleanup only after the
103
- [private evidence archive](evidence-archive.md) is verified and its receipt is
104
- read back from durable continuity. This never makes other dirt disposable.
105
- After cleanup, re-list and count only the earlier pass workspaces still remaining.
106
- If three or more unreclaimed
107
- earlier pass workspaces remain, disable only this automation through the native
108
- CLI, verify the disabled setting, save/report the cleanup hold, and admit no new
109
- PR jobs. Also pause on a confirmed earlier-manager retirement failure or
110
- unresolved lane ownership. A settled PR-job worktree retained for evidence is a
111
- cleanup hold, not unsettled execution or lane ownership.
112
- Already-dispatched passes still reconcile and retire only their own safe resources;
113
- this threshold is a stop condition, not an atomic hard cap on in-flight creations.
114
- An uncertain disable is a reported failure, not proof scheduling stopped. Resume
115
- only after ownership/cleanup is verified and explicit activation authority exists.
116
-
117
62
  ## Discovery and coverage
118
63
 
119
64
  Resolve self on every tick with `gh api user --jq .login`; never hardcode the
@@ -176,12 +121,13 @@ coordinator. Reviewers retain the isolation required by `axstack-review`:
176
121
  each runs in a separate Orca child worktree, keeps its probes and evidence
177
122
  inside that worktree, and preserves required evidence before removal.
178
123
 
179
- Give each job a private job-local temporary directory under its per-PR
180
- worktree, following the ownership, containment, and cleanup checks in the
181
- [runtime boundary](orca-runtime.md#reviewer-workspaces-and-evidence). Never
182
- delete through a broad `TMPDIR` glob, sweep a shared temporary root, or wipe a
183
- general cache. Preserve evidence and any temporary path whose ownership or
184
- containment is uncertain.
124
+ Set `TMPDIR` for manager and job commands to a private directory inside each
125
+ command's owning workspace. Follow ownership, containment, and cleanup checks
126
+ in the [runtime boundary](orca-runtime.md#reviewer-workspaces-and-evidence).
127
+ Never write temporary files under `/` or another shared root. Never delete
128
+ through a broad `TMPDIR` glob, sweep a shared temporary root, or wipe a general
129
+ cache. Preserve evidence and any temporary path with uncertain ownership or
130
+ containment.
185
131
 
186
132
  An unchanged exact head and unchanged event identity creates no job; an
187
133
  unchanged exact head with a new event identity remains actionable. Event
@@ -222,12 +168,12 @@ hold, preserve the workspace, and let unrelated eligible PRs continue.
222
168
 
223
169
  An active, unknown, protected, or unverifiable coordinator or descendant is
224
170
  different: preserve its evidence and keep its slot occupied. Unresolved
225
- execution teardown, or failure to retire the manager pass itself, pauses the
226
- lane before another pass can admit work rather than accumulating active passes
227
- or claiming capacity from an uncertain process tree.
171
+ execution teardown pauses the lane before another pass can admit work rather
172
+ than claiming capacity from an uncertain process tree.
228
173
 
229
- When the current event is handled, settle and release owned native resources.
230
- Preserve dirty worktrees, unarchived review evidence, pending
174
+ When the current event is handled, settle the PR job and descendants, then use
175
+ native `worker-release` for their worker terminals. Preserve dirty source,
176
+ unpushed commits, unarchived review evidence, pending
231
177
  external results, and user-owned work until durability and ownership are
232
178
  proven. Unknown liveness, `user_takeover`, and ambiguous publication likewise
233
179
  forbid cleanup. Here a pending external result means an unconfirmed review submission
@@ -235,12 +181,13 @@ or send outcome, not pending CI. Waiting state belongs in GitHub and the compact
235
181
  record, never in an idle model, per-PR timer, or polling loop.
236
182
  Follow the [private evidence archive](evidence-archive.md) when evidence is the
237
183
  only local state to preserve; archive success does not relax any other guard.
238
- For a completed PR-job, including one whose PR remains open, archive classified
239
- reviewer scratch through the [private evidence archive](evidence-archive.md),
240
- read back the archive and compact receipt, then follow
241
- [axstack-cleanup](../../axstack-cleanup/SKILL.md)'s exact-path guards to retire
242
- the reviewer checkout before merge. This does not release active jobs or manager
243
- pass workspaces.
184
+ For a settled PR job, archive classified scratch through the
185
+ [private evidence archive](evidence-archive.md), read back its archive and
186
+ compact receipt, then use [axstack-cleanup](../../axstack-cleanup/SKILL.md)'s
187
+ exact-path guards to retire reviewer and PR-job worktrees in the same pass.
188
+ A merged or closed PR must never keep a job worktree waiting for a user decision;
189
+ resolve that hold by archive and cleanup. Preserve genuine protections: dirty
190
+ source, unpushed commits, `user_takeover`, unknown liveness, and ambiguous publication.
244
191
 
245
192
  ## Review authority
246
193
 
@@ -285,50 +232,23 @@ or separate model gate.
285
232
  ## Finite-session teardown
286
233
 
287
234
  After admission closes, settle every owned PR job and all descendants before the
288
- manager session ends; active or unknown descendants keep their PR slot occupied
289
- and must be reconciled rather than trusted from saved status. Then save durable
290
- continuity, evidence locations, pending receipts, and user decisions before
291
- self-close. Waiting PRs still occupy zero slots once their owned trees settle.
292
-
293
- Cleanup of PR-job setup shells stays scoped to positively identified owned unused
294
- setup shells: use the native exact-terminal close operation for each only.
295
- Preserve dirty worktrees, unarchived review evidence, user-owned
296
- terminals, unknown liveness, `user_takeover`, and ambiguous publication state.
297
- Never classify all dirt as evidence. If explicitly classified evidence is the
298
- last retention reason, apply and verify the [private evidence archive](evidence-archive.md),
299
- update durable continuity, and read it back before native retirement.
300
- Completed PR-job reviewer scratch uses axstack-cleanup after archive and readback;
301
- it never changes manager pass preservation or retirement guards.
302
-
303
- For the manager pass only, verify native run/workspace identity, exclusive
304
- automation ownership, no unsettled descendants, and a fresh terminal inventory
305
- containing only this manager and its proven unused setup shells. No other pass
306
- may target this workspace. If an unexpected terminal or user takeover is present,
307
- do not bulk-close; preserve the workspace and report the hold at its durable
308
- decision location. Never bulk-close a shared manager workspace or a PR-job worktree.
309
-
310
- After saving continuity, use the version-matched native workspace retirement:
311
- `terminal close --worktree id:<exact-native-workspace-id> --all --json`.
312
- Copy the complete ID from the run/workspace receipt; never use a name, branch,
313
- path-only selector, or `active` for this destructive operation.
314
- Self-close is the final action; perform no record write or cleanup afterward.
315
- A failed or uncertain close is not proof of retirement. The next admitted pass
316
- reconciles prior retirement from native state before trusting saved intent.
317
- Retire only positively identified completed pass resources; do not kill another
318
- live or unknown manager. Remove an old pass worktree only with native cleanup
319
- after terminal retirement is confirmed and it has no unpushed commits,
320
- unarchived evidence, children, user-owned work, unknown files, or unexplained
321
- dirty source. A verified evidence archive does not require otherwise clean Git
322
- state, but every remaining change must still be positively classified and safe;
323
- unknown dirt blocks removal. Never use recursive shell deletion. Failed cleanup
324
- remains recorded, not silently forgotten. Failed PR-job workspace cleanup stays
325
- a cleanup hold after execution settles; failed or unverifiable manager-pass
326
- retirement pauses the lane instead of allowing active passes to accumulate.
327
-
328
- The activation canary must additionally prove distinct workspace IDs per pass,
329
- cross-workspace lane admission, self-retirement and absence after client reconnect,
330
- and bounded retained worktrees over repeated passes. A shell-only close test does
331
- not prove agent resume-record retirement. Do not activate on source checks alone.
235
+ manager session closes; active or unknown descendants keep their PR slot occupied
236
+ and must be reconciled from native state. Release settled worker terminals and
237
+ complete guarded evidence archival and worktree cleanup in this pass. Save
238
+ continuity, open decisions, and the last pass summary and read back the save.
239
+ Use the exact native terminal close for this pass's own terminal from its run
240
+ receipt: `orca terminal close --terminal <exact-handle> --json`. Terminal close
241
+ is the final action. Never use `--all`, a broad or name selector, or another
242
+ terminal in the dedicated workspace; uncertain identity or close outcome holds
243
+ the lane for native reconciliation, never a guessed retry.
244
+ Waiting PRs still occupy zero slots once their owned trees settle. A failed
245
+ cleanup remains a recorded hold with its exact resume condition, but does not
246
+ keep settled execution active.
247
+
248
+ The activation canary must prove fresh sessions in the dedicated workspace,
249
+ same-lane overlap admission, recovery after session loss, nested dispatch depth,
250
+ process and memory effects, and terminals in the dedicated workspace bounded
251
+ over repeated passes. Do not activate on source checks alone.
332
252
 
333
253
  ## Recovery and limits
334
254
 
@@ -113,13 +113,12 @@ differs from merged; human merges.
113
113
 
114
114
  ## Review automation health
115
115
 
116
- The native review manager uses fresh finite sessions in isolated per-pass
117
- workspaces on a 15-minute schedule. It admits eligible actionable PR
118
- events within measured host capacity; waiting PRs remain covered without
119
- reserving slots. Bounded PR jobs own their
120
- events, use per-PR worktrees, and settle after descendants settle. Build no
121
- custom scheduler, state engine, or legacy fallback. Details live in
122
- [Watch runtime](../../axstack-watch/references/watch-runtime.md).
116
+ The native review manager uses fresh finite sessions in one dedicated existing
117
+ Orca workspace on a 15-minute schedule. It admits actionable PR events within
118
+ measured host capacity; waiting PRs remain covered without reserving slots.
119
+ Bounded PR jobs use per-PR worktrees and settle after descendants. Build no
120
+ custom scheduler, state engine, or legacy fallback. See
121
+ [Review manager](automations.md).
123
122
 
124
123
  ## Audit hook (close-out and meaningful checkpoints)
125
124
 
@@ -1,13 +1,12 @@
1
1
  # Review manager prompt
2
2
 
3
- You are a fresh finite review-manager session in its isolated per-pass Orca workspace. Enter
4
- through the installed `axstack-review` skill; that skill loads its packaged
3
+ You are a fresh finite review-manager session in the automation's dedicated
4
+ existing Orca workspace. Enter through the installed `axstack-review` skill; that skill loads its packaged
5
5
  `../axstack/references/automations.md` contract by relative reference. Discover
6
6
  every eligible peer-review event and invoke the skill through Orca for each
7
7
  admitted bounded PR job. Keep complete coverage and admit actionable events
8
8
  within measured host capacity, preserve exact ownership and receipts, settle
9
- completed trees,
10
- and stay quiet when nothing changed. Reconcile before admission, save durable
11
- continuity outside this workspace, then retire only this pass workspace as the
12
- final action under the contract's ownership guards. Reconcile the whole lane,
13
- not just this workspace. Never check out a PR branch here.
9
+ completed trees, and stay quiet when nothing changed. Reconcile before admission,
10
+ save durable continuity and the last pass summary, then exact close of your own terminal as
11
+ the final action under the contract. Reconcile the whole lane, not just this
12
+ workspace. Never check out a PR branch here.
@@ -49,6 +49,11 @@ forge/PR state, and the approved spec remain sources of truth. The driver
49
49
  verifies exact SHAs and receipts before recording a transition; a worker claim
50
50
  alone is not verification.
51
51
 
52
+ For the scheduled review manager, keep only current lane state, open holds,
53
+ watermarks, and the last pass summary in its durable continuity record (a few
54
+ dozen lines). Append older pass history to an archive file beside that record;
55
+ never re-read it by default. Read it only for a specific recovery question.
56
+
52
57
  Before changing `Driver` or a task `Owner`, verify that the prior driver is
53
58
  inactive against actual Orca session and Dispatch state, or that an explicit accepted transfer
54
59
  permits reassignment. Idle alone never reassigns ownership.