axstack 0.20.19 → 0.20.21

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "axstack",
3
- "version": "0.20.19",
3
+ "version": "0.20.21",
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",
@@ -45,9 +45,10 @@ discovery or admission; never infer lane ownership from an empty local workspace
45
45
  Bind the lane to the automation ID and pass to its native run ID, workspace ID,
46
46
  and terminal identity, not a title or directory-name guess.
47
47
  A confirmed live manager for the same lane remains authoritative.
48
- The new duplicate does no PR work, makes no shared-record write, touches
49
- nothing owned by the live manager, and closes only its own exact terminal as
50
- its final action under the guard below.
48
+ Once identified as a duplicate, the new pass does no PR work, makes no further
49
+ shared-record write, touches no live or unsettled resource owned by the live
50
+ manager, and closes only its own exact terminal as its final action under the
51
+ guard below.
51
52
  Unknown liveness blocks admission and shared-record writes; it does not
52
53
  authorize takeover, cleanup, or a duplicate manager. Preserve `user_takeover`
53
54
  and other user-owned sessions.
@@ -119,6 +120,7 @@ PRs cannot starve older unserved work.
119
120
  ## Per-PR jobs
120
121
 
121
122
  At PR-job and reviewer dispatch, apply [Readable sidebar](workspace-hygiene.md#readable-sidebar).
123
+ Include [Safe deletion](workspace-hygiene.md#safe-deletion) in PR-job briefs.
122
124
 
123
125
  The logical manager lane owns ongoing discovery and continuity across finite
124
126
  sessions; the bounded PR coordinator owns only its admitted event. Do not create a second live owner or
@@ -250,7 +252,8 @@ At pass start, clear finished predecessor terminals of the same automation in
250
252
  the dedicated workspace only after proving completion, by the exact-handle
251
253
  fallback in [Workspace hygiene](workspace-hygiene.md).
252
254
  Then run the driver-start orphan sweep for repositories listed in this lane's
253
- run record, under the same guards. The sweep is silent when nothing was removed;
255
+ run record plus registered repositories on this host containing eligible settled resources
256
+ of any Axstack run on this host, under the same guards. The sweep is silent when nothing was removed;
254
257
  record sweep results and holds in the continuity record's Open holds table.
255
258
 
256
259
  After admission closes, settle every owned PR job and all descendants before the
@@ -56,7 +56,7 @@ Only an explicit user request to transfer ownership enters this branch.
56
56
  prior owner seeing a different valid accepted owner stops.
57
57
 
58
58
  Complete record: goal, authority, intent, IDs, revisions, evidence, pending
59
- receipts/timers, unresolved decisions, next action, and transfer ownership/gap.
59
+ receipts/timers, unresolved decisions, next action, and transfer status.
60
60
 
61
61
  ## Receipts (bind each decision to evidence)
62
62
 
@@ -87,8 +87,8 @@ covers only ordinary reading, writing, and local checks. Heartbeat deliveries
87
87
  are acknowledged with no user-facing text. Process each whole delivery before
88
88
  acknowledgment and validate its Task, Dispatch, sender, authority, revisions,
89
89
  and receipts before advancing the run record. Duplicate deliveries are
90
- deduplicated by runtime identity. Healthy unchanged observations produce no
91
- user-facing update. After accepting worker, Task, or Run completion, the driver
90
+ deduplicated by runtime identity. Healthy unchanged passes are silent.
91
+ After accepting worker, Task, or Run completion, the driver
92
92
  invokes [axstack-cleanup](../../axstack-cleanup/SKILL.md) inline; it never
93
93
  dispatches cleanup work.
94
94
 
@@ -99,8 +99,8 @@ session liveness, delivery, and verified advancement are distinct evidence.
99
99
  On `consumer_fenced`, reconcile the active coordinator rather than borrowing an
100
100
  identity. Respect settlement protection including `user_takeover`.
101
101
 
102
- No execution heartbeat or substitute scheduler is created by Axstack. Native
103
- review automation follows [Review automation health](#review-automation-health).
102
+ Axstack creates no execution heartbeat or substitute scheduler. See
103
+ [Review automation health](#review-automation-health).
104
104
  Tracking grants no merge, release, model-substitution, or scope authority.
105
105
 
106
106
  ## Deadline (one rule for every owned timer)
@@ -131,15 +131,16 @@ nothing without tested independent review.
131
131
 
132
132
  ## Close-out
133
133
 
134
- PRs merge by forge state—not branch ancestry; close out: (1) settle every worker
134
+ PRs merge by forge state; close out: (1) settle every worker
135
135
  terminal; (2) compact record with counts and denominators—user
136
136
  interventions/deviations from plan/repairs; (3) `axstack-auditor`: settle
137
137
  non-zero/requested, else `counts zero`; an unavailable auditor leaves close-out
138
138
  pending, never skipped silently; (4) release merged run worktrees and branches;
139
- use `axstack-cleanup` and close selected external-tracker tickets when applicable;
139
+ use `axstack-cleanup`, remove the run's own automations under
140
+ [Workspace hygiene](workspace-hygiene.md), and close selected external-tracker tickets;
140
141
  (5) mark the
141
142
  [Run record](run-record.md) `Archived`. `Archived`—one each:
142
143
  settlement receipt; compact record path; auditor decision plus settlement
143
- receipt or `counts zero`; release and ticket receipts; archive timestamp.
144
+ receipt or `counts zero`; automation, release, and ticket receipts; archive timestamp.
144
145
  `active`/receipt-incomplete record: close-out pending, never done. One-step
145
146
  lookups exempt.
@@ -72,6 +72,8 @@ small-change intent, brief, authority, role snapshot, worktree, base, and
72
72
  candidate to the Task; preserve the returned
73
73
  Task, Dispatch, terminal, agent, and worktree identities. Exactly one Dispatch
74
74
  may write a candidate at a time.
75
+ Put the [Safe deletion](workspace-hygiene.md#safe-deletion) rule in every
76
+ worker brief.
75
77
 
76
78
  Create a worker worktree with `--parent-worktree` naming the candidate's
77
79
  worktree when both are in the same repository; see
@@ -8,6 +8,15 @@ only report leftovers. Record each decision and native readback in the private
8
8
  run record; uncertain ownership, liveness, or evidence
9
9
  holds only the affected resource.
10
10
 
11
+ ## Safe deletion
12
+
13
+ Every shell deletion targets a literal absolute path or a `${VAR:?}`-guarded
14
+ expansion (for example, `rm -rf -- "${EV:?}/mut"`), only inside the worker's
15
+ own evidence folder, `TMPDIR`, or worktree. Never use a bare `$VAR`, a glob on a
16
+ variable, `/`, `HOME`, or a shared root as a deletion target. Prefer
17
+ `git clean -- <exact prefix>` or tool-native cleanup. A safety prompt that
18
+ still appears is a hold; agents do not answer it.
19
+
11
20
  ## Settlement
12
21
 
13
22
  At intermediate completion, once a worker or reviewer Dispatch is accepted,
@@ -21,10 +30,11 @@ At final settlement, no eligible non-driver session or worktree remains,
21
30
  including the run's worktrees in other repositories. Report each remaining
22
31
  resource as a hold with its reason. Recorded native ownership by Run, Task,
23
32
  and Dispatch decides; parent/child display lineage does not. The creator closes
24
- what it created. A finite scheduled pass closes only its own exact terminal as
33
+ what it created at ordinary settlement; the cross-run sweep below may retire
34
+ its settled leftovers. A finite scheduled pass closes only its own exact terminal as
25
35
  its final action. Manual chats, automation dedicated workspaces, and genuine
26
- `user_takeover` sessions are never removed. Deleting a session means closing
27
- its terminal; agent chat history is not deleted.
36
+ `user_takeover` sessions are never removed by ordinary settlement or sweep.
37
+ Deleting a session means closing its terminal; agent chat history is not deleted.
28
38
 
29
39
  If native exact terminal close returns `runtime_error` for a provably finished
30
40
  agent, send `/quit` + Enter to that exact terminal, wait about 5 seconds, then
@@ -35,6 +45,30 @@ leaves its terminal for the next pass, without treating that expected failure
35
45
  as a hold. At pass start, clear only provably finished predecessor terminals
36
46
  of the same automation in its dedicated workspace by this exact-handle path.
37
47
 
48
+ ## Owned automation retirement
49
+
50
+ At Close-out, reconcile the run record with native inventory: the recorded
51
+ owning Run must have created the exact automation IDs selected for retirement.
52
+ The sweeping pass uses that recorded owning Run, not its own Run, for cross-run
53
+ watches. A cross-run sweep may retire a disabled per-run watch only when its
54
+ owning run is closed or every watched PR is merged or closed. Uncertain recorded
55
+ ownership, watch state, or disable result holds the affected automation.
56
+
57
+ For each eligible automation, disable it and verify native readback before
58
+ `orca automations remove <id>` on its exact ID, and verify absence by native
59
+ readback. The observer only disables and reports; the driver removes its own
60
+ run's automation. Only a retired owned per-run watch's workspace may be removed
61
+ under these guards. Never remove the durable review manager and its dedicated
62
+ workspace or a user-created automation and its dedicated workspace.
63
+
64
+ Remove that dedicated workspace only after confirming its exact ownership, no
65
+ live terminal, a clean worktree, and a head on the remote. Recheck ownership and
66
+ liveness immediately before workspace removal. If dirty or unpublished, use the
67
+ salvage and bundle verification below before removal; failed verification or
68
+ uncertain liveness is a hold. The current scheduled pass cannot remove its own
69
+ workspace while its terminal is live; the driver or a later sweep finishes that
70
+ step. Record separate automation and workspace receipts.
71
+
38
72
  ## Preserve before removal
39
73
 
40
74
  Workers write reports, probes, logs, evidence, and scratch to the private
@@ -59,14 +93,28 @@ removal, and use exact native worktree removal without force.
59
93
 
60
94
  Drivers sweep on phase-skill entry. A scheduled pass that owns its lane with
61
95
  recorded cleanup authority runs the driver-start orphan sweep after predecessor
62
- terminal cleanup, scoped to repositories listed in its run record. On
63
- phase-skill entry, scope the sweep to the current repository and the
64
- per-run worktrees in other
65
- repositories recorded in the driver's run records. If Orca is unreachable,
96
+ terminal cleanup, scoped to repositories listed in its run record plus
97
+ registered repositories on this host containing eligible settled resources of
98
+ another Axstack run. On phase-skill entry, scope the sweep to the current repository
99
+ and the per-run worktrees in other repositories recorded in the driver's
100
+ run records, and registered repositories on this host containing eligible settled
101
+ resources of another Axstack run. Inspect other Axstack run records on this host
102
+ too; a live owning run does not protect its settled
103
+ reviewer worktree or merged author after preservation checks. If Orca is unreachable,
66
104
  report one line and continue the phase; an unreachable host holds only its
67
- items. This is standing authority to remove an orphan after salvage when every
68
- owning Dispatch and descendant is settled, ownership and liveness are rechecked
105
+ items. A sweep may remove resources of ANY Axstack run on this host after salvage
106
+ when every owning Dispatch and descendant is settled (completed or failed), its
107
+ release is confirmed or `release_unknown`, no agent is working, the exact terminal
108
+ has had no output for at least 60 minutes, ownership and liveness are rechecked
69
109
  from a fresh native list, and evidence is durable. Remove descendants first.
110
+ For a settled worker dispatched into a shared or driver worktree, close its
111
+ exact terminal individually under the same 60-minute quiet rule: native close,
112
+ else the guarded `/quit` + `exit` fallback above. Never close the live coordinator
113
+ session's terminal for any run (the driver's own terminal) or a user chat.
114
+ Align/Spec adviser sessions reused between rounds remain until
115
+ their owning phase approves or stops; the quiet rule still applies then.
116
+ For a merged or closed PR author with an unreleased settled Dispatch, request
117
+ native worker release first, record its result, then apply the sweep guards.
70
118
  An author worktree of a merged or closed PR is sweep-eligible when its head
71
119
  commit is retrievable from the forge (for example, the PR's recorded head or a
72
120
  remote branch contains it); unverifiable state is a hold. For an eligible
@@ -78,6 +126,9 @@ them in its own continuity Open holds table. Both are silent when nothing was re
78
126
  Branches with a remote counterpart are never deleted. List live or unsettled
79
127
  work, genuine `user_takeover`, and items without provable Axstack provenance in
80
128
  one table with their reason; do not remove them.
129
+ Dirty or unpublished work follows the salvage and publication guards above;
130
+ open-PR authors remain protected until merge or close. Record each removed and
131
+ held resource in the pass continuity (scheduled) or run record (driver start).
81
132
 
82
133
  ## Native bookkeeping exceptions
83
134
 
@@ -87,7 +138,9 @@ the run record contains the exact repair Dispatch ID for that terminal;
87
138
  otherwise hold. Report the mislabel to Orca upstream through the driver.
88
139
  For `release_unknown`, reconcile with native worker inspection. If a fresh
89
140
  native terminal list confirms the terminal is gone, record the readback and
90
- proceed; otherwise hold.
141
+ proceed; otherwise hold unless inspection proves a settled, quiet worker. Then
142
+ close only that worker's exact terminal under the sweep rule and confirm its
143
+ absence. Unknown liveness holds.
91
144
 
92
145
  ## Known Orca issues
93
146
 
@@ -25,7 +25,7 @@ and worktree removal. Do not embed or improvise a competing command protocol.
25
25
  ## Authority and scope
26
26
 
27
27
  Inline cleanup may consider only resources owned by the accepted completion it
28
- is processing. Driver-start orphan sweeps use the standing authority in
28
+ is processing. Driver-start orphan sweeps follow the guarded cross-run sweep in
29
29
  [Workspace hygiene](../axstack/references/workspace-hygiene.md). Backlog
30
30
  cleanup requires an explicit bounded selector such as a
31
31
  Run, Task set, workspace set, repository, or named age window; age narrows an
@@ -7,6 +7,7 @@ description: When an approved task is ready to build or repair, use axstack-impl
7
7
 
8
8
  On driver entry, sweep under [Workspace hygiene](../axstack/references/workspace-hygiene.md); dispatched workers do not sweep.
9
9
  For every dispatch brief, name its private `<run dir>/evidence/<dispatch>/` folder.
10
+ Include [Safe deletion](../axstack/references/workspace-hygiene.md#safe-deletion) in author briefs.
10
11
  At author dispatch, apply [Readable sidebar](../axstack/references/workspace-hygiene.md#readable-sidebar).
11
12
 
12
13
  From an accepted scope identity, drive its task/PR map through author -> review
@@ -7,6 +7,7 @@ description: When a candidate PR or bounded codebase needs review, use axstack-r
7
7
 
8
8
  On driver entry, sweep under [Workspace hygiene](../axstack/references/workspace-hygiene.md); dispatched workers do not sweep.
9
9
  For every dispatch brief, name its private `<run dir>/evidence/<dispatch>/` folder.
10
+ Include [Safe deletion](../axstack/references/workspace-hygiene.md#safe-deletion) in reviewer briefs.
10
11
  At reviewer dispatch, apply [Readable sidebar](../axstack/references/workspace-hygiene.md#readable-sidebar).
11
12
 
12
13
  Manual review keeps the user’s chat and workspace open.
@@ -137,8 +137,9 @@ observed state distinct from merged, and the human merges by default.
137
137
  ## 6. End and preserve continuity
138
138
 
139
139
  End a chat-run watch only after all members merged or closed or user
140
- cancellation, with own-automation disable/readback and driver-owned cleanup
141
- receipts in [Watch runtime](references/watch-runtime.md#chat-run-watch).
140
+ cancellation, with own-automation disable/readback and driver-owned automation
141
+ removal and workspace cleanup receipts in
142
+ [Watch runtime](references/watch-runtime.md#chat-run-watch).
142
143
 
143
144
  End a standalone watch early when all required PRs merge, at cancellation, or
144
145
  at its shared default 24 h deadline. In every case, stop all owned
@@ -10,7 +10,10 @@ A standalone PR owner remains accountable through the default 24-hour window.
10
10
  current GitHub state, persists event IDs, wakes the owner only for a new
11
11
  actionable event, and never sends or mutates. Healthy observations update
12
12
  quietly. Reuse prior watch identity rather than registering a duplicate, and
13
- stop task-owned registrations at completion, cancellation, or expiry.
13
+ stop task-owned registrations at completion, cancellation, or expiry. The owner
14
+ must disable and read back its own automation, then remove it by exact ID under
15
+ [Workspace hygiene](../../axstack/references/workspace-hygiene.md#owned-automation-retirement).
16
+ Remove its dedicated workspace only after the terminal and preservation guards pass.
14
17
 
15
18
  ## Chat-run watch
16
19
 
@@ -52,8 +55,10 @@ recorded cleanup authority acts as its lane's driver: clear only proven
52
55
  finished predecessor terminals of the same automation in its dedicated
53
56
  workspace, using the exact-handle fallback in
54
57
  [Workspace hygiene](../../axstack/references/workspace-hygiene.md), then run
55
- the driver-start orphan sweep for repositories listed in its run record under
56
- the same guards. Recorded cleanup authority is separate from and does not imply
58
+ the driver-start orphan sweep for repositories listed in its run record plus
59
+ registered repositories on this host containing eligible settled resources of
60
+ any Axstack run on this host, under the same guards.
61
+ Recorded cleanup authority is separate from and does not imply
57
62
  repair or maintenance authority. That cleanup-authorized watch pass is silent
58
63
  when nothing was removed and records sweep results and holds in its continuity
59
64
  Open holds table.
@@ -107,8 +112,11 @@ Stop only when all members merged or closed, or on user cancellation recorded
107
112
  by the driver in the run record. Re-read membership and confirm no ambiguous
108
113
  publication or unsettled pass; cancellation
109
114
  prevents new work but does not prove running workers exited. The observer may
110
- disable only its own automation and must verify native disable/readback. A
111
- failed or uncertain disable is a hold. Report the stop receipt to the driver.
115
+ disable only its own automation and must verify native disable/readback. A failed
116
+ or uncertain disable is a hold. Report the stop receipt to the driver; the
117
+ driver removes the automation by exact ID, verifies absence, and removes the
118
+ dedicated workspace after the observer terminal closes under
119
+ [Workspace hygiene](../../axstack/references/workspace-hygiene.md#owned-automation-retirement).
112
120
  The driver separately settles workers, preserves evidence, and archives the run;
113
121
  an unavailable driver leaves those steps pending. The standalone 24-hour expiry
114
122
  and peer observation contracts are unchanged.