axstack 0.20.14 → 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
@@ -20,7 +20,7 @@ scheduler, or runtime database to operate. Orca is the only supported runtime.
20
20
  | Turn agreed scope into a specification | `axstack-spec` |
21
21
  | Break a specification into executable tickets | `axstack-tickets` |
22
22
  | Build an approved task with tests and independent review | `axstack-implement` |
23
- | Review a pull request | `axstack-review` |
23
+ | Review a pull request or bounded existing code | `axstack-review` |
24
24
  | Monitor or maintain an existing PR | `axstack-watch` |
25
25
  | Diagnose a bug and establish a failing check | `axstack-debug` |
26
26
  | Answer a bounded question with sources | `axstack-research` |
@@ -46,7 +46,8 @@ need to manually coordinate every agent or repeat an approval that is still vali
46
46
  ## Quick start
47
47
 
48
48
  You need Bun >=1.3.14, Git, the GitHub CLI (`gh`), the `gh stack` extension,
49
- and a running Orca with its `orca-cli` and `orchestration` guides available.
49
+ and a running Orca with its `orca-cli`, `orchestration`, and `orca-linear`
50
+ guides available.
50
51
  The agents selected by your preset must also be available in Orca.
51
52
 
52
53
  Install the CLI and skills for your harness. For example, for Codex:
@@ -68,7 +69,9 @@ Then open an Orca chat and ask for the relevant skill:
68
69
  $axstack-align Help me scope account recovery.
69
70
  $axstack-implement Build the task we agreed on.
70
71
  $axstack-review Review this pull request: <PR URL>
72
+ $axstack-review Find issues in <paths> at <commit SHA>.
71
73
  $axstack-watch Monitor this PR without making changes: <PR URL>
74
+ $axstack-watch Watch every PR raised by this chat until all merge or close
72
75
  ```
73
76
 
74
77
  Use `--harness claude`, `opencode`, or `antigravity` for another supported
@@ -108,13 +111,13 @@ model is unavailable. See [workflow and routing details](docs/workflows.md).
108
111
 
109
112
  Manual review and watch work independently of scheduled automation.
110
113
  For recurring peer review, Axstack defines one optional native Orca review manager.
111
- Own-PR observation and authorized repair remain user-driven through `axstack-watch`.
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.
112
115
 
113
116
  The review manager uses a 15-minute schedule. Each pass uses a fresh finite
114
- 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
115
118
  measured host capacity. Waiting PRs remain tracked without consuming
116
119
  execution slots, so a large open-PR backlog does not require an idle agent per PR.
117
- Completed passes save continuity and retire their own verified resources.
120
+ Completed passes save compact continuity and close only their own exact terminal.
118
121
  Held jobs preserve evidence, use private worktree-local temporary paths, and
119
122
  release capacity only after native descendant settlement. Uncertain execution
120
123
  teardown pauses the lane; settled evidence cleanup does not occupy a slot.
@@ -6,7 +6,8 @@ does not dispatch agents, edit Orca settings, run a scheduler, or maintain a
6
6
  workflow database.
7
7
 
8
8
  Requirements: Bun >=1.3.14, Git, `gh`, the `gh stack` extension, and a running
9
- Orca whose version-matched `orchestration` and `orca-cli` guides are available.
9
+ Orca whose version-matched `orchestration`, `orca-cli`, and `orca-linear`
10
+ guides are available.
10
11
  There are no runtime dependencies. Filesystem access uses Bun-backed `node:fs`
11
12
  and `node:fs/promises`; no other Node runtime contract is introduced.
12
13
 
@@ -83,7 +84,8 @@ axstack check [--bundle <dir>] [--instructions <file>] [--skills-dir <dir>|--har
83
84
  ```
84
85
 
85
86
  The check separates Bun/Git/`gh stack` availability, resolved Orca executable,
86
- runtime readiness, required runtime-owned guide discovery, and bundle validity.
87
+ runtime readiness, required `orchestration`, `orca-cli`, and `orca-linear`
88
+ guide discovery, and bundle validity.
87
89
  With an instruction target, it separately reports whether the marker block is
88
90
  owned, missing, unowned, edited, or bound to a different path.
89
91
  It must honor Orca's executable-resolution rules, including the Linux screen
@@ -227,11 +229,14 @@ not prove that a running harness reloaded them.
227
229
  ## Runtime guide discovery
228
230
 
229
231
  The installed Axstack bundle does not own or copy Orca's guides. At an action
230
- boundary, the skill resolves one Orca executable and loads that binary's
231
- version-matched `orchestration` and `orca-cli` guides. Review automation guidance is loaded only for the scheduled review branch. Missing discovery is a setup gap, not a reason
232
- to fall back or invent commands.
233
-
234
- Installation creates no production schedule and adds no custom scheduler.
232
+ boundary, the skill resolves one Orca executable and loads the operation's
233
+ version-matched `orchestration`, `orca-cli`, or `orca-linear` guide. Review
234
+ automation guidance is loaded only for the scheduled review branch. Missing
235
+ discovery is a setup gap, not a reason to fall back or invent commands. Guide
236
+ discovery does not prove an operation works; Linear documents, provider/model
237
+ routing, and live automation behavior need separate preflights.
238
+
239
+ Installation creates no production schedule and adds no custom scheduler. Chat-run PR watch requires a separately validated same-host native Orca automation, installed preset and effective observer model/effort, same-Run report delivery, safe original-driver wake, and own-automation stop/readback. Installed bytes alone do not activate it.
235
240
  The optional review manager requires a separate native canary before activation;
236
241
  installed guidance does not prove live behavior.
237
242
 
package/docs/workflows.md CHANGED
@@ -21,6 +21,11 @@ Direct routes need no spec ceremony:
21
21
  behavior; complex visuals receive exact-artifact QA where applicable.
22
22
  - `axstack-improve` returns a small ranked set of evidenced improvement
23
23
  candidates without editing code.
24
+ - Manual `axstack-review` can inspect existing code at an exact revision within
25
+ a named scope. Both configured peer reviewers inspect six lenses independently;
26
+ the driver reports validated defects and risks, improvement opportunities,
27
+ unverified leads, and `COMPLETE` or `INCOMPLETE` coverage. This report does
28
+ not approve a PR or publish findings.
24
29
  - `axstack-debug` builds a red loop, diagnoses to root cause, escalates hard
25
30
  bugs through adviser-directed investigator fan-out, and hands off a
26
31
  classified repair without landing a change.
@@ -79,9 +84,12 @@ provider defaults, or installed tools, and no model is substituted silently.
79
84
 
80
85
  Immediately before dispatch, delivery processing, settlement, recovery, or
81
86
  handoff, load the shared `skills/axstack/references/orca-runtime.md`. It resolves
82
- one Orca executable, loads that binary's version-matched `orchestration` and
83
- `orca-cli` guides, and follows their advertised schemas. Axstack does not vendor
84
- the guides or restate a competing command protocol.
87
+ one Orca executable, then loads only the version-matched guide needed by the
88
+ operation: `orchestration` for Run/Task/Dispatch supervision, `orca-cli` for
89
+ worktrees, automations, handoff, and publication, and `orca-linear` for Linear
90
+ issues. Axstack follows current command help and named conditional references;
91
+ guide availability is not exercised runtime support. It does not vendor the
92
+ guides or restate a competing command protocol.
85
93
 
86
94
  All subagent, delegated-worker, reviewer, and cross-harness work goes through Orca
87
95
  orchestration via the `orca` CLI (`orca-cli` / `orchestration` guides). Do not use a
@@ -123,7 +131,10 @@ session and evidence remain valid.
123
131
  - `axstack-spec` writes observable acceptance, exclusions, decisions, and one
124
132
  user-approved revision baseline. Linear is the default authoritative store;
125
133
  GitHub Issues and repository Markdown are explicit alternatives. A GitHub
126
- baseline pins the issue URL and approved body digest.
134
+ baseline pins the issue URL and approved body digest. Linear document
135
+ operations preflight the current `orca-linear` guide and command help; a
136
+ missing native operation holds only that operation without MCP fallback or a
137
+ store switch.
127
138
  - `axstack-tickets` maps user-visible capabilities to dependency-aware internal
128
139
  tasks. Linear is the default selected store with access preflight; GitHub
129
140
  Issues is an explicit external-tracker alternative and repository Markdown
@@ -135,7 +146,9 @@ session and evidence remain valid.
135
146
  confirms the remote SHA before review. Local green and CI green remain
136
147
  separate evidence.
137
148
  - `axstack-review` gives peer PRs two isolated same-brief reviewers and authored
138
- PRs one eligible cross-family/preset-mapped reviewer. All cover security,
149
+ PRs one eligible cross-family/preset-mapped reviewer. Every reviewer runs in
150
+ a separate candidate-child worktree, with private evidence preserved before
151
+ removal. All cover security,
139
152
  correctness, integration, requirements, design, and simplicity. Report-only
140
153
  never publishes; authorized submission binds the exact commit.
141
154
  - `axstack-watch` adopts an existing PR under observation-only, peer, or
@@ -174,8 +187,10 @@ keeps the current owner and a resumable record.
174
187
 
175
188
  Serious security, downtime, data-loss, and major-design risks are raised in a
176
189
  prompt immediately and hold dependent dangerous work. This is not a runtime
177
- gate. An applicable `Notification policy` may use `axstack-relay`; otherwise the
178
- current Orca conversation is the fallback. The relay normally delivers one-way
190
+ gate. An applicable `Notification policy` may use `axstack-relay` for serious
191
+ risk immediately or a genuine blocker needing user intervention after bounded
192
+ safe recovery. Questions, spec approvals, progress, CI pending, merge-ready,
193
+ merged, and completion stay in Orca. The relay normally delivers one-way
179
194
  through native `hermes send`: it checks CLI lookup and the configured target,
180
195
  binds the recipient, deduplicates on the run record, and records the returned
181
196
  `message_id`. PR-manager notifications point the user to GitHub or a durable
@@ -185,39 +200,36 @@ authority. Delivery failure never clears the underlying hold.
185
200
  Healthy watch observations remain quiet. The optional `axstack-monitor` is a
186
201
  read-only observer for standalone watches and never sends.
187
202
 
203
+ ## Chat-run PR watch
204
+
205
+ Use `axstack-watch` chat-run mode to watch every PR raised by this chat's Run, including later verified publications and PRs the driver explicitly adopts. One same-host native Orca automation observes about every ten minutes in fresh finite read-only sessions and reports new current-state events to the original Run. The initiating chat alone routes repairs, review, publication, and notifications. Independent PRs can repair in parallel with one writer per PR; stack ancestor changes invalidate child evidence. Unchanged complete passes stay quiet. An incomplete scan leaves readiness `UNKNOWN`.
206
+
207
+ The watch lasts until all member PRs merge or close, or you cancel it. Stop requires readback that its own automation is disabled; worker settlement and run archive are separate driver steps. Run-created implementation candidates are published and read back before independent authored review. Adopted own-PR maintenance candidates receive independent exact-local-SHA review before driver publication and remote readback. The human merges. Source and installed instructions do not prove scheduled observation, driver wake, or live activation; those require same-host native canary receipts.
208
+
188
209
  ## Optional native peer-review automation
189
210
 
190
211
  The optional native review manager runs at minutes `0,15,30,45`. Each
191
- 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
192
213
  discovery pages, and admits eligible actionable PR events within measured host
193
214
  capacity. Waiting PRs stay covered and consume no slot after
194
215
  owned descendants settle. Each job uses one repository-parented worktree; the
195
216
  manager never checks out PR branches in its own workspace.
196
217
 
197
- Every pass reconciles saved, GitHub, and native Orca state across all same-lane
198
- workspaces before admission. A
199
- confirmed same-lane manager makes the new duplicate do no work or shared-record
200
- write and close only itself. Normal teardown settles descendants, saves durable
201
- continuity and decisions outside disposable workspaces, then retires its own
202
- verified isolated pass workspace as the final action. It never bulk-closes a
203
- shared manager workspace or a PR-job worktree, or cleans preserved
204
- evidence, user sessions, unknown liveness, `user_takeover`, or ambiguous
205
- publication state. Manual review and user-driven `axstack-watch` remain outside
206
- this scheduled lifecycle.
207
-
208
- One natively ordered successor may recover an exact positively completed
209
- predecessor whose terminal survived, but only after matching its automation,
210
- run, workspace, and terminal incarnation and proving zero unsettled descendants.
211
- It saves and reads back the cleanup claim before exact native close, then proves
212
- the full process tree exited before ownership release or guarded worktree removal.
213
- Age, status, or idle state alone never authorizes cleanup. Conflicting successors,
214
- identity mismatch, unknown or protected state, `user_takeover`, unexpected
215
- terminals, dirty or unpushed work, and unarchived evidence hold cleanup; an
216
- unchanged failure is deduplicated. Native ordering is not an atomic lock, so the
217
- overlap canary remains an activation requirement.
218
-
219
- Each bounded job uses a private `0700` temporary directory inside its own
220
- 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,
221
233
  shared-root sweeps, or general cache wipes, and uncertain files remain for
222
234
  reconciliation. Permission prompts and provider safety refusals are incomplete
223
235
  holds, never bypass or cross-model retry signals. The coordinator preserves the
@@ -238,7 +250,7 @@ relative contract and invokes `axstack-review`. Bounded jobs publish ordinary
238
250
  exact-head review verdicts; the human merges. Manual adopted-PR maintenance
239
251
  uses `axstack-watch` with local-SHA review before authorized publication.
240
252
  Exceptional security, permanent-on-chain, or architectural decisions remain actionable in GitHub or a durable user-owned conversation
241
- after manager self-close, with an authorized deduplicated Telegram notification.
253
+ after the manager session ends, with an authorized deduplicated Telegram notification.
242
254
  The current operational contract is
243
255
  `skills/axstack/references/automations.md`.
244
256
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "axstack",
3
- "version": "0.20.14",
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",
@@ -152,7 +152,7 @@
152
152
  "model": "claude-sonnet-5",
153
153
  "modeId": "bypassPermissions",
154
154
  "thinkingOptionId": "low",
155
- "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."
155
+ "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."
156
156
  },
157
157
  {
158
158
  "id": "axstack-auditor",
@@ -152,7 +152,7 @@
152
152
  "model": "gpt-6-sol",
153
153
  "modeId": "full-access",
154
154
  "thinkingOptionId": "low",
155
- "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."
155
+ "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."
156
156
  },
157
157
  {
158
158
  "id": "axstack-auditor",
@@ -152,7 +152,7 @@
152
152
  "model": "claude-opus-5-5",
153
153
  "modeId": "bypassPermissions",
154
154
  "thinkingOptionId": "medium",
155
- "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."
155
+ "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."
156
156
  },
157
157
  {
158
158
  "id": "axstack-auditor",
@@ -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
@@ -172,14 +117,17 @@ pin the observed head and base. The bounded PR coordinator loads the
172
117
  review skill, launches only the reviewers that skill owns,
173
118
  handles the current actionable event, returns exact receipts, then settles.
174
119
  Settlement returns continuity to the manager rather than retaining an idle PR
175
- coordinator. Reviewers retain the isolation required by `axstack-review`.
176
-
177
- Give each job a private job-local temporary directory under its per-PR
178
- worktree, following the ownership, containment, and cleanup checks in the
179
- [runtime boundary](orca-runtime.md#reviewer-workspaces-and-evidence). Never
180
- delete through a broad `TMPDIR` glob, sweep a shared temporary root, or wipe a
181
- general cache. Preserve evidence and any temporary path whose ownership or
182
- containment is uncertain.
120
+ coordinator. Reviewers retain the isolation required by `axstack-review`:
121
+ each runs in a separate Orca child worktree, keeps its probes and evidence
122
+ inside that worktree, and preserves required evidence before removal.
123
+
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.
183
131
 
184
132
  An unchanged exact head and unchanged event identity creates no job; an
185
133
  unchanged exact head with a new event identity remains actionable. Event
@@ -220,12 +168,12 @@ hold, preserve the workspace, and let unrelated eligible PRs continue.
220
168
 
221
169
  An active, unknown, protected, or unverifiable coordinator or descendant is
222
170
  different: preserve its evidence and keep its slot occupied. Unresolved
223
- execution teardown, or failure to retire the manager pass itself, pauses the
224
- lane before another pass can admit work rather than accumulating active passes
225
- 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.
226
173
 
227
- When the current event is handled, settle and release owned native resources.
228
- 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
229
177
  external results, and user-owned work until durability and ownership are
230
178
  proven. Unknown liveness, `user_takeover`, and ambiguous publication likewise
231
179
  forbid cleanup. Here a pending external result means an unconfirmed review submission
@@ -233,12 +181,13 @@ or send outcome, not pending CI. Waiting state belongs in GitHub and the compact
233
181
  record, never in an idle model, per-PR timer, or polling loop.
234
182
  Follow the [private evidence archive](evidence-archive.md) when evidence is the
235
183
  only local state to preserve; archive success does not relax any other guard.
236
- For a completed PR-job, including one whose PR remains open, archive classified
237
- reviewer scratch through the [private evidence archive](evidence-archive.md),
238
- read back the archive and compact receipt, then follow
239
- [axstack-cleanup](../../axstack-cleanup/SKILL.md)'s exact-path guards to retire
240
- the reviewer checkout before merge. This does not release active jobs or manager
241
- 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.
242
191
 
243
192
  ## Review authority
244
193
 
@@ -283,50 +232,23 @@ or separate model gate.
283
232
  ## Finite-session teardown
284
233
 
285
234
  After admission closes, settle every owned PR job and all descendants before the
286
- manager session ends; active or unknown descendants keep their PR slot occupied
287
- and must be reconciled rather than trusted from saved status. Then save durable
288
- continuity, evidence locations, pending receipts, and user decisions before
289
- self-close. Waiting PRs still occupy zero slots once their owned trees settle.
290
-
291
- Cleanup of PR-job setup shells stays scoped to positively identified owned unused
292
- setup shells: use the native exact-terminal close operation for each only.
293
- Preserve dirty worktrees, unarchived review evidence, user-owned
294
- terminals, unknown liveness, `user_takeover`, and ambiguous publication state.
295
- Never classify all dirt as evidence. If explicitly classified evidence is the
296
- last retention reason, apply and verify the [private evidence archive](evidence-archive.md),
297
- update durable continuity, and read it back before native retirement.
298
- Completed PR-job reviewer scratch uses axstack-cleanup after archive and readback;
299
- it never changes manager pass preservation or retirement guards.
300
-
301
- For the manager pass only, verify native run/workspace identity, exclusive
302
- automation ownership, no unsettled descendants, and a fresh terminal inventory
303
- containing only this manager and its proven unused setup shells. No other pass
304
- may target this workspace. If an unexpected terminal or user takeover is present,
305
- do not bulk-close; preserve the workspace and report the hold at its durable
306
- decision location. Never bulk-close a shared manager workspace or a PR-job worktree.
307
-
308
- After saving continuity, use the version-matched native workspace retirement:
309
- `terminal close --worktree id:<exact-native-workspace-id> --all --json`.
310
- Copy the complete ID from the run/workspace receipt; never use a name, branch,
311
- path-only selector, or `active` for this destructive operation.
312
- Self-close is the final action; perform no record write or cleanup afterward.
313
- A failed or uncertain close is not proof of retirement. The next admitted pass
314
- reconciles prior retirement from native state before trusting saved intent.
315
- Retire only positively identified completed pass resources; do not kill another
316
- live or unknown manager. Remove an old pass worktree only with native cleanup
317
- after terminal retirement is confirmed and it has no unpushed commits,
318
- unarchived evidence, children, user-owned work, unknown files, or unexplained
319
- dirty source. A verified evidence archive does not require otherwise clean Git
320
- state, but every remaining change must still be positively classified and safe;
321
- unknown dirt blocks removal. Never use recursive shell deletion. Failed cleanup
322
- remains recorded, not silently forgotten. Failed PR-job workspace cleanup stays
323
- a cleanup hold after execution settles; failed or unverifiable manager-pass
324
- retirement pauses the lane instead of allowing active passes to accumulate.
325
-
326
- The activation canary must additionally prove distinct workspace IDs per pass,
327
- cross-workspace lane admission, self-retirement and absence after client reconnect,
328
- and bounded retained worktrees over repeated passes. A shell-only close test does
329
- 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.
330
252
 
331
253
  ## Recovery and limits
332
254
 
@@ -29,3 +29,14 @@ its required checks complete. Review may run in parallel with CI only after the
29
29
  remote confirmation. Reviewers inspect a detached immutable checkout of the
30
30
  confirmed candidate SHA and pinned base, never only the movable branch name.
31
31
  Any author repair creates a new revision and repeats this boundary.
32
+
33
+ ## Immutable checkout shape
34
+
35
+ The immutable checkout is an Orca worktree of the already-registered repo:
36
+ `ORCA worktree create --repo id:<repoId> --name review-<pr>-<sha7> --json`,
37
+ then `git checkout --detach <candidate SHA>` inside it. Never materialize it
38
+ as a `git clone` into a temp directory followed by `orca repo add`; each
39
+ `repo add` registers a duplicate top-level repo and leaves a stale record once
40
+ the directory is gone. Release preparation uses a `release/<version>` worktree
41
+ of the same registered repo the same way. Release the checkout with
42
+ `ORCA worktree rm` after its receipt is recorded.