axstack 0.14.0 → 0.14.2

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.14.0",
3
+ "version": "0.14.2",
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",
@@ -2,7 +2,7 @@
2
2
 
3
3
  Read this when the current session is the native Orca PR **driver** or its
4
4
  **watchdog**. The approved contract is
5
- `docs/specs/pr-automations.md` revision 4; this reference restates the parts an
5
+ `docs/specs/pr-automations.md` revision 5; this reference restates the parts an
6
6
  automation session must execute and does not widen them.
7
7
 
8
8
  Pair A/B is retired for this contract; its artefacts remain untouched.
@@ -127,32 +127,33 @@ The driver performs this order and exits:
127
127
  Claude Code trusts a folder per git toplevel and stops at its "Quick safety
128
128
  check" dialog otherwise, and the driver never answers that dialog for a
129
129
  worker. So workers run in a fixed pool: every allowlisted project has
130
- exactly two slot worktrees, `slot-1` and `slot-2`, its Orca child worktrees
131
- created once, parented to the project's primary worktree, and trusted once
130
+ exactly five slot worktrees, `slot-1` through `slot-5`, its Orca child
131
+ worktrees created once, parented to the project's primary worktree, and trusted once
132
132
  by the user through that dialog. The driver never creates or removes a
133
133
  worktree and never writes `~/.claude.json`. A slot is free when no live
134
134
  dispatch marker names it, it is not in `retained_slots[]`, no terminal is
135
135
  listed in it, and its tree is clean; no free slot in the project defers the
136
136
  PR to `deferred[]` like a budget, not a hold. Taking a slot fetches the head into the project clone,
137
137
  checks the slot out detached at the pinned head, and verifies HEAD equals
138
- it; the marker's worktree is the slot path. Trusting a folder activates the
139
- full project surface: its `.claude/settings.json` and the hooks it defines,
140
- its `.mcp.json` servers, marketplace plugin auto-install, and `CLAUDE.md`;
141
- a hostile branch's hooks or MCP servers would run the moment the folder
142
- opens. So the worker is launched in Claude Code's own isolation mode,
143
- `--safe-mode`, through `terminal create` and `worker-start --terminal`,
144
- since `worker-start` cannot pass argv. Safe mode is the binary's sanctioned
145
- "all customizations disabled" path: no `CLAUDE.md`, skills, plugins, hooks,
146
- MCP servers, custom commands or agents load from anywhere, project or user;
147
- built-in tools and authentication are untouched, and the brief loads the
148
- skill files it needs by path. The driver confirms readiness from the
149
- rendered frame — `wait.satisfied`, the prompt marker present, the dialog
150
- absent — before dispatching; a dialog on a slot means the slot is not
151
- trusted: the slot is named in a health line, the PR is deferred, nothing is
152
- dispatched. What remains live is the repository's files as data the worker
153
- reads and the commands the worker itself chooses to run, which it already
154
- runs today; nothing from the branch loads, executes, or is offered for
155
- invocation on its own.
138
+ it; the marker's worktree is the slot path. The worker is launched by Orca
139
+ itself — `worker-start --agent claude --model claude-opus-5 --effort medium`
140
+ on that slot — so the runtime owns the process: `worker-release` ends it and
141
+ `worker-show` proves it exited, which is what returns the slot to the pool.
142
+ Never pre-create the worker's terminal or hand a terminal handle to
143
+ `worker-start`: a reused handle is a resource Orca labels `external`, one it
144
+ can neither stop nor prove exited, so every such slot ends retained. After
145
+ `worker-start` run `worker-show` on the receipt's dispatch id and require
146
+ `projection.resource.state == owned`; anything else is a launch Orca does not
147
+ own: apply the runtime-refusal recovery rules under "Safety holds" (the
148
+ `worker-list` row's `nextAction` argv verbatim; `none` means inspect and
149
+ retain), append a `worker not owned` health line and a `retained_slots[]`
150
+ entry for the slot, defer the PR, and record no marker. Orca's per-agent default arguments supply
151
+ `--dangerously-skip-permissions`; the brief loads the skill files it needs by
152
+ path. If `worker-start` reports a failed stage or a visible hold (the "Quick
153
+ safety check" trust dialog) the slot is not trusted: name the slot in a health
154
+ line, defer the PR, dispatch nothing, never answer the dialog. Project
155
+ customizations load as they would for the user; the allowlist is defi-com
156
+ only and the user accepted that surface on 2026-09-18.
156
157
 
157
158
  Every selected PR receives one dispatch marker with task id, dispatch id,
158
159
  worktree, head, `started_at`, reservation (`verdict` or `repair`), and trigger: