axstack 0.24.0 → 0.24.1

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.24.0",
3
+ "version": "0.24.1",
4
4
  "description": "Axstack installer and setup CLI: installs owned chat skills and role data, configures supported harness settings, and checks T3 Code capabilities.",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -34,7 +34,7 @@ T3 sessions are exempt from Claude trust preflight.
34
34
 
35
35
  ## Session admission
36
36
 
37
- Perform guarded predecessor retirement in [Finite-session teardown](#finite-session-teardown).
37
+ The owner-of-record performs guarded retirement in [Finite-session teardown](#finite-session-teardown).
38
38
  Lane identity requires exact thread/run identity, never a title or directory-name
39
39
  guess; never infer lane ownership from an empty local workspace.
40
40
  Reconcile saved state, current GitHub state, and native T3 threads, runs,
@@ -54,8 +54,36 @@ events and the unserved count. If a duplicate finds a stalled owner idle at its
54
54
  prompt with a final turn lacking a completion receipt for more than five
55
55
  minutes (nudged or not), record it in that private note and send one deduplicated
56
56
  notification under the recorded `Notification policy`.
57
- Unknown liveness blocks admission and shared-record writes; it does not
58
- permit takeover or cleanup. Preserve user-taken-over threads.
57
+ A **wedged lane pass**, whether owner, successor or duplicate, has a non-terminal
58
+ run with more than 60 minutes of verified inactivity across its thread, all its
59
+ runs, delegated tasks and descendant threads, and is free of `user_takeover`.
60
+ A user-taken-over descendant holds recovery and excludes its pass from the
61
+ wedged category, and is never interrupted.
62
+ A live pass has a non-terminal run and is not wedged.
63
+ Exactly one successor recovers a wedged owner or resumes an interrupted takeover:
64
+ the earliest-started live pass, selected by native run start
65
+ ordering; missing or tied ordering evidence holds admission and recovery.
66
+ The successor interrupts the owner and its descendant threads with
67
+ `t3_thread_interrupt`, naming each exact `runId` and a stable `clientRequestId`
68
+ per run, and reads back terminal state for the whole tree
69
+ before recording the takeover in continuity and becoming owner.
70
+ If a successor wedges between interrupt and takeover, the next elected live pass
71
+ interrupts the wedged successor and its tree with `t3_thread_interrupt` at each
72
+ exact `runId` using the same per-run procedure, and reads back terminal state for
73
+ that whole tree before recording any takeover, then resumes recovery from terminal readback
74
+ of the interrupted owner, which is
75
+ excluded from the potentially-live-owner hold.
76
+ The owner-of-record, including a successor immediately after takeover, interrupts
77
+ wedged non-owner passes (duplicates or failed successors) using the same exact-run
78
+ procedure and terminal readback, then retires them under Finite-session teardown.
79
+ Before any admission, the successor reconciles the previous owner's in-flight
80
+ jobs from GitHub and evidence. Only a verdict already published and read back
81
+ counts as served. Otherwise the event is unserved/`INCOMPLETE` and re-eligible.
82
+ A failed interrupt or unverified terminal state keeps the existing hold plus
83
+ one deduplicated notification under the recorded `Notification policy`.
84
+ Outside the wedged-pass recovery above, unknown liveness blocks admission,
85
+ shared-record writes, takeover and cleanup, including when activity is recent.
86
+ Preserve user-taken-over threads.
59
87
  This is prompt policy, not an atomic lock: the overlap canary must demonstrate
60
88
  one admission owner before activation. Count all unsettled PR jobs and descendants.
61
89
 
@@ -132,7 +160,9 @@ under [T3 runtime](t3-runtime.md). For a worker's own brief question, confirm th
132
160
  brief once.
133
161
  A second brief ask follows the five-minute stop rule, never an open-ended hold.
134
162
  An idle final turn without a valid completion
135
- receipt is incomplete, not successful. A started coordinator waiting on its
163
+ receipt is incomplete, not successful. A wait with more than 60 minutes of
164
+ verified inactivity across its whole tree is a wedge, not a running wait.
165
+ A started coordinator waiting on its
136
166
  reviewers (a live reviewer task or running wait) is not idle and is never
137
167
  stopped for waiting. Reconcile terminal failure and all descendants before
138
168
  recording an event unserved and re-admissible.
@@ -260,16 +290,21 @@ or separate model gate.
260
290
 
261
291
  ## Finite-session teardown
262
292
 
263
- Each pass retires settled predecessor passes and reports the retained worktree
264
- count. Retirement requires terminal run evidence and settled descendants,
293
+ Only the owner-of-record pass retires settled predecessor passes and qualifying
294
+ terminal duplicates, including duplicates newer than the owner and immediately
295
+ after successor takeover.
296
+ Qualifying duplicates have a terminal run, no descendants and only their own pass note.
297
+ Each pass reports the retained worktree count.
298
+ Retirement requires terminal run evidence and settled descendants,
265
299
  durable continuity, evidence read-back and verified salvage where needed;
266
300
  follow [Workspace hygiene](workspace-hygiene.md) and [T3 runtime](t3-runtime.md).
267
301
  Then run the driver-start orphan sweep under Workspace hygiene; the sweep is
268
302
  silent when nothing was removed. Record sweep results and holds in continuity's
269
303
  Open holds table.
270
304
  The orphan sweep covers the run record's repositories plus registered repositories on this host.
271
- `t3_thread_organize` settle/archive changes metadata only; exact guarded Git
272
- worktree removal remains separate. Unknown, active or user-taken-over threads,
305
+ Retirement settles duplicate threads with `t3_thread_organize` (settle/archive
306
+ changes metadata only) before separate guarded Git worktree removal.
307
+ Unknown, active or user-taken-over threads,
273
308
  ambiguous publication and failed salvage stay preserved.
274
309
 
275
310
  A review-manager pass may retire a predecessor pass's local `t3code/*` branch
@@ -295,7 +330,8 @@ removal, not settled execution capacity. The next pass retires this settled pass
295
330
 
296
331
  The canary runs two overlapping `run_scheduled_task_now` passes and proves one
297
332
  admission owner per PR. The canary reviews or correctly no-ops one real PR event.
298
- The canary reconciles a killed predecessor.
333
+ The canary reconciles a killed predecessor and demonstrates wedged-pass recovery:
334
+ exactly one successor interrupts and retires a wedged predecessor.
299
335
  With a temporary limit equal to the current count, the canary disables the
300
336
  schedule and verifies that the following interval creates zero new pass worktrees.
301
337
  The previous review-manager automation is disabled, never deleted, only after all four T3 canary checks pass.