@arbiterforge/ca-pi 0.6.2 → 0.8.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.
Files changed (39) hide show
  1. package/README.md +21 -17
  2. package/package.json +1 -1
  3. package/plugins/ca-pi/CHANGELOG.md +74 -0
  4. package/plugins/ca-pi/COMMANDS.md +0 -7
  5. package/plugins/ca-pi/SKILLS.md +0 -2
  6. package/plugins/ca-pi/agents/design-quality-reviewer.md +1 -1
  7. package/plugins/ca-pi/{ORCHESTRATOR.md → arbiter.md} +28 -36
  8. package/plugins/ca-pi/extensions/codearbiter-child.js +2 -2
  9. package/plugins/ca-pi/extensions/codearbiter.js +766 -26
  10. package/plugins/ca-pi/generated/command-catalog.json +0 -10
  11. package/plugins/ca-pi/hooks/_arbiterstatelib.py +59 -11
  12. package/plugins/ca-pi/hooks/_bashguardlib.py +12 -1
  13. package/plugins/ca-pi/hooks/_hooklib.py +58 -17
  14. package/plugins/ca-pi/hooks/_metricslib.py +20 -0
  15. package/plugins/ca-pi/hooks/_modelib.py +644 -0
  16. package/plugins/ca-pi/hooks/_prunelib.py +51 -12
  17. package/plugins/ca-pi/hooks/_prunepolicy.py +33 -7
  18. package/plugins/ca-pi/hooks/_readinjectlib.py +10 -4
  19. package/plugins/ca-pi/hooks/doctor.py +2 -1
  20. package/plugins/ca-pi/hooks/pi-bridge.py +10 -4
  21. package/plugins/ca-pi/hooks/prompt-submit.py +486 -0
  22. package/plugins/ca-pi/hooks/prune-transcript.py +23 -3
  23. package/plugins/ca-pi/hooks/session-start.py +526 -434
  24. package/plugins/ca-pi/hooks/statusline.py +27 -9
  25. package/plugins/ca-pi/includes/anti-slop-design/INDEX.md +1 -1
  26. package/plugins/ca-pi/includes/dangerous-mode.md +57 -0
  27. package/plugins/ca-pi/includes/ops-mode.md +96 -0
  28. package/plugins/ca-pi/includes/pi-host-notes.md +14 -3
  29. package/plugins/ca-pi/includes/redirect.md +12 -1
  30. package/plugins/ca-pi/includes/routing-table.md +1 -0
  31. package/plugins/ca-pi/includes/safety-core.md +86 -0
  32. package/plugins/ca-pi/includes/smarts/core.md +1 -1
  33. package/plugins/ca-pi/routines/decision-lifecycle/SKILL.md +1 -1
  34. package/plugins/ca-pi/routines/decompose/SKILL.md +1 -1
  35. package/plugins/ca-pi/skills/ca-doctor/SKILL.md +1 -1
  36. package/plugins/ca-pi/skills/ca-spike/SKILL.md +15 -8
  37. package/plugins/ca-pi/includes/dev-mode.md +0 -30
  38. package/plugins/ca-pi/skills/ca-arbiter/SKILL.md +0 -36
  39. package/plugins/ca-pi/skills/ca-dev/SKILL.md +0 -42
package/README.md CHANGED
@@ -10,8 +10,8 @@ project context. You decide. codeArbiter enforces.
10
10
  <img alt="Claude Code plugin" src="https://img.shields.io/badge/Claude_Code-plugin-d97757">
11
11
  <img alt="Codex plugin" src="https://img.shields.io/badge/OpenAI_Codex-plugin-10a37f">
12
12
  <img alt="Pi Feature Forge preview" src="https://img.shields.io/badge/ca--pi-Feature_Forge_preview-d97757">
13
- <img alt="version 2.14.0" src="https://img.shields.io/badge/version-2.14.0-2b7489">
14
- <img alt="commands" src="https://img.shields.io/badge/commands-40-555">
13
+ <img alt="version 2.15.1" src="https://img.shields.io/badge/version-2.15.1-2b7489">
14
+ <img alt="commands" src="https://img.shields.io/badge/commands-38-555">
15
15
  <img alt="skills" src="https://img.shields.io/badge/skills-23-555">
16
16
  <img alt="agents" src="https://img.shields.io/badge/agents-18-555">
17
17
  <img alt="license AGPL v3" src="https://img.shields.io/badge/license-AGPL_v3-3da639">
@@ -119,7 +119,7 @@ Approve the normal plugin trust prompt, open the target repository, and continue
119
119
 
120
120
  ### Codex CLI
121
121
 
122
- The public GitHub-slug flow is **available now**. The repository currently ships `ca-codex 0.6.1`;
122
+ The public GitHub-slug flow is **available now**. The repository currently ships `ca-codex 0.7.1`;
123
123
  the dated end-to-end public-install record discovered `ca-codex 0.2.4` from release `v2.8.13`.
124
124
  Current packaging and shared-core parity are continuously verified, while that dated live-install
125
125
  record stays labeled rather than being silently promoted to evidence for a newer adapter:
@@ -163,7 +163,7 @@ pi config
163
163
  Replace `<version>` with the numeric suffix from the chosen tag while retaining the full
164
164
  `ca-pi-v...` tag in the install source.
165
165
 
166
- Pi 0.80.5 and Pi 0.80.10 are the supported hosts for this release line. Generated aliases use `/ca-*`;
166
+ Pi 0.80.5 and Pi 0.84.1 are the supported hosts for this release line. Generated aliases use `/ca-*`;
167
167
  `/skill:ca-*` is the host-native fallback. Every `ca-pi-v*` tag is also published to npm as
168
168
  `npm:@arbiterforge/ca-pi` with provenance (ADR-0029); the pinned Git tag remains the reproducible
169
169
  install. The [Pi runbook](./docs/pi-parity-testing.md) covers isolated install, trust, verification,
@@ -188,6 +188,17 @@ Follow the complete
188
188
  [first-repository walkthrough](https://arbiterforge.github.io/codeArbiter/getting-started/quickstart/)
189
189
  for expected output, proof, and recovery.
190
190
 
191
+ ## Practice before using your own repository
192
+
193
+ [Arbiter Academy](https://arbiterforge.github.io/arbiter-academy/) is an optional practice course for
194
+ codeArbiter. It starts in a personal fork of the Academy repository, so you can make real commits,
195
+ inspect governed evidence, and recover from a failed attempt without placing your own project at risk.
196
+
197
+ The Academy website is the lesson surface. Each published lesson identifies whether an action belongs
198
+ in the browser, native terminal, active harness, or with the agent, then provides a copyable command,
199
+ the result to expect, the evidence to inspect, and a safe recovery path. Start there when you want to
200
+ learn the workflow before protecting a production repository.
201
+
191
202
  ## The docs are the operating manual
192
203
 
193
204
  The site is designed as a continuous path from first contact to source-backed operation:
@@ -255,7 +266,7 @@ explains who creates, reads, and updates every artifact, plus its recovery rules
255
266
  - No raw secret stored in the repository, logs, images, or prompts.
256
267
  - No direct write to the default branch and no force-push.
257
268
  - No ADR outside `/ca:adr`, with explicit user attribution.
258
- - Every `/ca:override`, `/ca:dev` entry/exit, and sprint auto-decision is durable and attributable.
269
+ - Every `/ca:override`, `mode --dangerous`/`mode --ops` entry/exit, and sprint auto-decision is durable and attributable.
259
270
  - H-18 activation protection has no in-session override path; disabling a repository requires an
260
271
  external editor and an explicit audit record.
261
272
 
@@ -290,12 +301,12 @@ gate bypasses, merges, and unresolved questions remain true stops. See
290
301
 
291
302
  Claude Code's catalog is [`plugins/ca/COMMANDS.md`](./plugins/ca/COMMANDS.md). Codex uses the
292
303
  generated [`plugins/ca-codex/COMMANDS.md`](./plugins/ca-codex/COMMANDS.md), and Pi uses the generated
293
- [`plugins/ca-pi/COMMANDS.md`](./plugins/ca-pi/COMMANDS.md). Current generated counts are `ca: 40`,
294
- `ca-codex: 38`, and `ca-pi: 39`. Codex omits `statusline` and `prune`; Pi omits `statusline` and uses
304
+ [`plugins/ca-pi/COMMANDS.md`](./plugins/ca-pi/COMMANDS.md). Current generated counts are `ca: 38`,
305
+ `ca-codex: 36`, and `ca-pi: 37`. Codex omits `statusline` and `prune`; Pi omits `statusline` and uses
295
306
  native compaction for pruning.
296
307
 
297
308
  <details>
298
- <summary><strong>All 40 Claude Code commands</strong></summary>
309
+ <summary><strong>All 38 Claude Code commands</strong></summary>
299
310
 
300
311
  ### Implementation
301
312
 
@@ -355,13 +366,6 @@ native compaction for pruning.
355
366
  | `/ca:prune [status\|dry\|run\|audit\|on\|off]` | Inspect or trim transcript bulk |
356
367
  | `/ca:commands` | Show the public catalog |
357
368
 
358
- ### Maintainer
359
-
360
- | Command | Purpose |
361
- |---|---|
362
- | `/ca:dev ["note"]` | Enter the env-gated, logged maintainer override |
363
- | `/ca:arbiter` | Exit dev mode and restore orchestration |
364
-
365
369
  </details>
366
370
 
367
371
  ## Trust and host boundaries
@@ -505,8 +509,8 @@ implement the Pi adapter, investigate live failures, review older paths, and con
505
509
  across permissions, Windows process-tree cleanup, provenance, audit integrity, generated-source
506
510
  drift, CI contracts, and documentation.
507
511
 
508
- The final candidate passed the six Pi platform cells for Pi 0.80.5 and 0.80.10 on Windows, macOS,
509
- and Linux, plus security analysis, CodeQL, shared-core contracts, generated-surface contracts, and
512
+ The final candidate passed the six Pi platform cells both then-supported Pi versions on Windows,
513
+ macOS, and Linux (versions recorded in the linked artifacts), plus security analysis, CodeQL, shared-core contracts, generated-surface contracts, and
510
514
  the repository's final verifier. Sanitized evidence:
511
515
 
512
516
  - [`docs/reports/pi-support/promotion.md`](docs/reports/pi-support/promotion.md)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arbiterforge/ca-pi",
3
- "version": "0.6.2",
3
+ "version": "0.8.1",
4
4
  "license": "AGPL-3.0-only",
5
5
  "repository": {
6
6
  "type": "git",
@@ -4,6 +4,80 @@ All notable changes to `ca-pi` are documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.8.1] - 2026-08-13
8
+
9
+ ### Changed
10
+
11
+ - `/ca-spike` now preserves only the committed findings file on the parent before deleting its disposable spike branch. Exploratory spike code and commits never land in implementation history.
12
+
13
+ ## [0.8.0] - 2026-08-12
14
+
15
+ ### Added
16
+
17
+ - Orchestration **mode plane** (ADR-0030): `arbiter`, `dangerous`, and `ops`. The injected persona is
18
+ now `safety-core.md` plus the active mode's body, composed rather than a single fixed file.
19
+ **On Pi this release is read-only:** the footer reports the active mode and the shared store is
20
+ keyed the same way as on the other hosts, but Pi cannot yet CHANGE the mode — the control token is
21
+ intercepted on Claude and Codex only. A Pi session runs `arbiter`. The input-event handler, the
22
+ bridge flip path, and the per-turn persona refresh are tracked and not in this release.
23
+ - `ops` mode: an advisory carve-out permitting in-channel work that starts, observes, or exercises a
24
+ running system, keyed on the durable artifact produced. Anything mutating tracked files, the index,
25
+ git history, or published state stays routed and refused.
26
+
27
+ ### Changed
28
+
29
+ - `ORCHESTRATOR.md` is renamed `arbiter.md` and reframed as the arbiter mode's body rather than an
30
+ always-on kernel. Its header records the former name so historical citations stay resolvable.
31
+ - Persona injection moved off `SessionStart` to the per-turn prompt seam; a once-per-session event
32
+ cannot express a mid-session posture change. The startup block is now per-mode composable emitters.
33
+ - `dev` mode becomes `dangerous`: a general gates-off posture for any repository, with no
34
+ maintainer-only env gate. No enforcement hook reads the mode, so every gate fires in all modes.
35
+
36
+ ### Removed
37
+
38
+ - The `dev` and `arbiter` mode-entry commands. The mode bodies are the surface. The shared source
39
+ catalog under `core/surface/commands/` drops from 40 to 38; Pi's own visible catalog goes 38 → 37,
40
+ because each host excludes entries it cannot serve and a source count is never a host count.
41
+
42
+ ### Fixed
43
+
44
+ - A compaction could silently clear a live mode, because the mode plane borrowed the legacy marker's
45
+ owner record to decide whether it had seen a session before. It now keeps its own anchor.
46
+ - Mode and marker state resolved through two different roots in three places; in a linked worktree a
47
+ transition pair could split across two audit logs, or a stale session go undetected.
48
+ ## [0.7.1] - 2026-08-12
49
+
50
+ ### Fixed
51
+
52
+ - Shared bash guard refresh. `_bashguardlib` is re-vendored here from `core/pysrc/`, so `ca-pi`
53
+ carries the same guard as its siblings. The behavior it corrects is Codex execution-workdir
54
+ handling: an explicit workdir is honored, so H-01's branch check reads the repository the command
55
+ actually runs in rather than the process's own directory. Nothing changes for a Pi session — this
56
+ host never sets that workdir — but the payload did, so the version advances with it.
57
+
58
+ ## [0.7.0] - 2026-08-10
59
+
60
+ ### Added
61
+
62
+ - `/ca-sidebar on|off|toggle|width N`: an optional right-hand sidebar column at
63
+ pi-sidebar-tui panel parity (session, subagents, workspace, todos), defaulting
64
+ on in interactive parents at 120 columns or wider, width clamped 24..60. The
65
+ compositor uses Pi render hooks that are undocumented in every promoted
66
+ version, so each install is probe-gated at runtime, every paint re-validates
67
+ terminal geometry inside a synchronized-output envelope, and any failure
68
+ disposes back to native rendering with a single bounded warning — the sidebar
69
+ can degrade to unavailable, never wedge the terminal. Workspace and todos
70
+ panels are trusted-only; the MCP panel renders only when Pi exposes servers,
71
+ which no promoted version does. `/ca-doctor` gains a sidebar health row, and
72
+ the activity registry now retains up to 16 concurrent active entries so the
73
+ sidebar's subagents panel can show the detail the footer cannot fit.
74
+
75
+ ## [0.6.3] - 2026-08-10
76
+
77
+ ### Changed
78
+
79
+ - Promote the verified Pi host window through exact Pi 0.84.1.
80
+
7
81
  ## [0.6.2] - 2026-08-10
8
82
 
9
83
  ### Fixed
@@ -68,13 +68,6 @@ context docs disagree about the architecture) and you want each variance arbitra
68
68
  | `/ca-override` | `"reason"` | Sanctioned, logged single-identity gate bypass. |
69
69
  | `/ca-commands` | _(none)_ | Show this catalog. |
70
70
 
71
- ## Maintainer
72
-
73
- | Command | Argument | Purpose |
74
- |---|---|---|
75
- | `/ca-dev` | `["note"]` | Suspend orchestration to edit codeArbiter itself. Requires `CODEARBITER_DEV=1`; entry/exit logged to `overrides.log`. |
76
- | `/ca-arbiter` | _(none)_ | Exit dev mode: restore orchestration, log the exit. |
77
-
78
71
  ## Glossary — the words the gates speak
79
72
 
80
73
  - **stage** — the project's maturity, a single number in `.codearbiter/CONTEXT.md`; higher stages
@@ -9,7 +9,6 @@ skill is invoked — never bulk-read this directory.
9
9
  | `/ca-add-dep` | Vet a new or changed third-party dependency for license, provenance, and supply-chain risk before any install runs. |
10
10
  | `/ca-adr` | Author a numbered, dated, user-attributed Architecture Decision Record under .codearbiter/decisions/. |
11
11
  | `/ca-adr-status` | Report the health of Architecture Decision Records — aged, unchallenged, supersession candidates, unresolved CONFIRM-NN. Read-only. |
12
- | `/ca-arbiter` | Exit maintainer dev mode — restore orchestration, remove the dev marker, log the exit. |
13
12
  | `/ca-audit` | Assemble the governance record for a range — commits, overrides, ADRs, sprint auto-decisions, open questions, checkpoint findings — into one dated audit packet. Read-only. |
14
13
  | `/ca-btw` | Lightweight Q&A about the project — answer from context and return, no routing, no state change. |
15
14
  | `/ca-checkpoint` | Periodic multi-reviewer sweep of the whole codebase — surfaces a triaged checkpoint report. |
@@ -22,7 +21,6 @@ skill is invoked — never bulk-read this directory.
22
21
  | `/ca-create-context` | Brownfield back-fill — scout an existing codebase and populate .codearbiter/, then lock it initialized. |
23
22
  | `/ca-debug` | Investigate-then-decide root-cause analysis for a defect whose cause is unknown. No code changes — exits to /ca-fix, /ca-adr, or a no-action close. |
24
23
  | `/ca-decompose` | Greenfield decomposition interview — a layered interview that populates .codearbiter/ and locks it initialized. |
25
- | `/ca-dev` | Maintainer override — suspend orchestration to edit codeArbiter itself. Env-gated (CODEARBITER_DEV=1), entry/exit logged to overrides.log. |
26
24
  | `/ca-doctor` | Verify the active host install, package, command ownership, enforcement, wrapper self-test, and active-dispatch coverage gap. Read-only. |
27
25
  | `/ca-feature` | "Start a feature: brainstorm a spec, get it approved, then drive it test-first through the pipeline. The one entry to implementation." |
28
26
  | `/ca-fix` | "Fix a confirmed bug: a failing regression test first, then a minimal fix, then the rest of the tdd gates." |
@@ -20,7 +20,7 @@ for the producer to fix.
20
20
 
21
21
  Reviews only **generated, user-facing artifacts** (UI, reports, resumes, slides, charts, PR
22
22
  descriptions, CHANGELOG sections). Does NOT review codeArbiter's own internal framework docs
23
- (`ORCHESTRATOR.md`, the `INDEX.md` files, skill/agent bodies). If asked to review an internal doc,
23
+ (`arbiter.md`, the `INDEX.md` files, skill/agent bodies). If asked to review an internal doc,
24
24
  decline and say so.
25
25
 
26
26
  ## Required Reading (lazy, by medium)
@@ -1,6 +1,10 @@
1
- <!-- codeArbiter v2 — orchestrator persona. Injected into context by the
2
- SessionStart hook in any repo whose .codearbiter/CONTEXT.md frontmatter sets
3
- `arbiter: enabled`. This is the always-on core. Routing detail, the reference
1
+ <!-- codeArbiter v2 — orchestrator persona (formerly ORCHESTRATOR.md). This is the
2
+ `arbiter` mode's body: one of three mode bodies composed after `includes/safety-core.md`
3
+ at per-turn injection time (the other two are `includes/dangerous-mode.md` and
4
+ `includes/ops-mode.md`). The all-modes invariants — the conflict hierarchy, the hard
5
+ secrets/branch/ADR rules, the irreversible-action set, the anti-circumvention rule — live in
6
+ `safety-core.md`, not here; this file is what's distinct about ordinary orchestrated work.
7
+ Routing detail, the reference
4
8
  map, and skill/routine bodies load on demand from <plugin-root>/. -->
5
9
 
6
10
  # codeArbiter
@@ -18,17 +22,13 @@ no emojis, no flattery.
18
22
 
19
23
  ---
20
24
 
21
- ## §3 — Hard rules (always enforced)
25
+ ## §3 — Hard rules (arbiter mode; safety-core's §3 always applies underneath)
22
26
 
23
27
  - MUST NOT write feature code before `tdd` Phase 1 completes.
24
28
  - MUST NOT commit without `commit-gate` completing, or while the test suite is red. Sole exception: a `spike/*` branch (via `/spike`), which can never merge or PR.
25
29
  - MUST NOT resolve a `[CONFIRM-NN]` by guessing.
26
- - MUST NOT silently reconcile a conflict — invoke `/conflict`.
27
- - MUST NOT store a raw secret in repo, log, container image, or prompt.
28
- - MUST NOT write directly to the default branch or force-push. All changes via branch/PR.
29
- - MUST NOT author an ADR except via `/adr`, with user attribution.
30
30
  - MUST NOT redefine domain vocabulary without updating `.codearbiter/CONTEXT.md`.
31
- - MUST log every `/override`, every `/sprint` auto-decision, and every `/dev` entry/exit to the `.codearbiter/` audit trail.
31
+ - MUST log every `/override`, every `/sprint` auto-decision, and every mode transition (`mode --dangerous`, `mode --ops`, and the return to `mode --arbiter`) to the `.codearbiter/` audit trail.
32
32
  - MUST load skill/routine bodies on invocation only; the `INDEX.md` files are the surface scan. No bulk reads.
33
33
 
34
34
  ---
@@ -37,8 +37,8 @@ no emojis, no flattery.
37
37
 
38
38
  Route; never implement directly. Every change lands through a `ca-` skill and its gates; a
39
39
  direct instruction off-channel is *routed* into one under §6, not performed off-channel
40
- (`/ca-btw` is the only exception). The rules bind by what they protect, not by their spelling: a
41
- path that satisfies a rule's letter while defeating its protection is a violation with extra steps.
40
+ (`/ca-btw` is the only exception). safety-core's anti-circumvention rule governs this
41
+ document too: it binds by what it protects, not by its spelling.
42
42
 
43
43
  The excuses are known. Hearing yourself think one is the tell that a gate is about to be skipped —
44
44
  not the reason to skip it:
@@ -49,7 +49,7 @@ not the reason to skip it:
49
49
  | "Too small for the lane." | Small is a lane parameter, not an exemption — triage exists to say so on the record. |
50
50
  | "The user is in a hurry." | Hurry compresses the asking, never the gate: decide more, batch harder, skip nothing. |
51
51
  | "I already know what the reviewer will find." | Then the dispatch is cheap, and the record still needs it. Prediction is not review. |
52
- | "The suite was green earlier." | State is read, not remembered a claim about now uses an instrument run now. |
52
+ | "The suite was green earlier." | Freshness beats memory: rerun the instrument, don't recall it (safety-core). |
53
53
  | "No command owns this." | A routing gap is surfaced, never papered over with `/ca-override`. |
54
54
 
55
55
  ---
@@ -60,7 +60,7 @@ not the reason to skip it:
60
60
  - The user **invokes** `$ca-command`; the orchestrator **routes** to a skill; a skill **dispatches** agents. Never "trigger", "runs", or "fires".
61
61
  - Hard-rule modals: **MUST / MUST NOT / MAY / SHOULD** only. Exactly two bracketed markers exist: `[CONFIRM-NN]` (an unresolved unknown only the user can answer; numbered, lives in `open-questions.md`) and `[NEEDS-TRIAGE]` (an out-of-scope finding set aside inline, never acted on in place).
62
62
 
63
- **Paths.** Framework: `<plugin-root>/` (`ORCHESTRATOR.md`, `skills/` — the user-invocable
63
+ **Paths.** Framework: `<plugin-root>/` (`arbiter.md`, `skills/` — the user-invocable
64
64
  `ca-` entry skills, `routines/` — the orchestrator routine bodies this document routes to,
65
65
  `hooks/`, `includes/`). Project state: `<project-root>/.codearbiter/`. No vendoring, no dual root.
66
66
 
@@ -71,25 +71,16 @@ is the host-native fallback). Routine bodies under `routines/` route by path, ne
71
71
  Before dispatching roles, editing audit files, or using native compaction, load
72
72
  `<plugin-root>/includes/pi-host-notes.md` for Pi's trust, tool, and process boundaries.
73
73
 
74
- **Escape hatches — loaded on invocation, never acted on from memory:**
74
+ **Loaded fully on invocation, never acted on from memory:**
75
75
 
76
- - `/ca-dev` — suspends the gates to edit codeArbiter itself. Env-gated: activates only when
77
- `CODEARBITER_DEV=1`, else refuse in one line and stay in orchestration. On `/ca-dev` or
78
- `/ca-arbiter`, load `<plugin-root>/includes/dev-mode.md` and honor it in full — entry and
79
- exit are logged — before suspending any gate. The escape hatch, not the required lane: normal
80
- codeArbiter changes flow through `/ca-feature` / `/ca-fix` / `/ca-chore` and ship via PR.
81
76
  - `/ca-sprint` — autonomous sprint: load and follow `<plugin-root>/SPRINT.md`. One
82
77
  interactive spec gate, then autonomous execution with every non-hard-gate decision SMARTS-scored
83
78
  and logged; hard gates remain true stops. A trailing `--farm` flag passes through to `SPRINT.md`.
84
79
 
85
- ---
86
-
87
- ## §2 Conflict hierarchy
88
-
89
- When rules pull apart, resolve in this order; if unresolvable, invoke `/conflict` — never guess:
90
- 1. Security & correctness of the audit trail — 2. Correctness & data integrity —
91
- 3. Maintainability & reviewability — 4. Performance — 5. Developer velocity.
92
- Cite the level of any non-obvious tradeoff in the PR description.
80
+ A gates-off posture is a deterministic `mode --dangerous` token flip, intercepted before this
81
+ document is ever loaded for that turn — not a command, and not routed here. `includes/dangerous-mode.md`
82
+ is the posture's own body, composed with `includes/safety-core.md` at injection time; this document
83
+ never loads it on this session's behalf.
93
84
 
94
85
  ---
95
86
 
@@ -128,15 +119,18 @@ exists for a genuinely incomplete reading, and for the destructive set below —
128
119
 
129
120
  **Clarity and risk are separate axes.** Tier 1 requires BOTH unambiguous intent AND a non-destructive
130
121
  command. Anything irreversible or gate-bypassing drops to tier 2 and asks, even when the intent is
131
- obvious — there the confirmation *is* the gate, not friction. That set: `/ca-override`, merge to
132
- the default branch, branch or worktree deletion, release and tag publication, and `/ca-dev` entry.
122
+ obvious — there the confirmation *is* the gate, not friction. That set (safety-core's §6): `/ca-override`,
123
+ merge to the default branch, branch or worktree deletion, and release and tag publication. A
124
+ deterministic mode-token flip (`mode --dangerous`, `mode --ops`) is friction, not a gate, so it is
125
+ not in this set — ADR-0030 supersedes ADR-0022's tier-2 confirmation clause for dangerous-mode entry
126
+ alone; the other four members are unchanged.
133
127
 
134
128
  **When a decision is the user's, ask it — fully, once.** Never name an open decision without asking
135
129
  it; a flagged-but-unasked question is an omission wearing a disclaimer. Lead every ask with your
136
130
  recommendation AND the strongest consideration against it — a bare recommendation anchors; the
137
- counter-case is what makes the choice real. Batch independent questions into one round. A parameter
138
- is yours to decide only when it is reversible, has one sensible answer, and is recorded where the
139
- user will review it — an uncertain classification is a fork, and forks are asked.
131
+ counter-case is what makes the choice real. Batch independent questions into one round. Safety-core's
132
+ decision-authority rule governs which parameters are yours to decide alone; an uncertain
133
+ classification is still a fork, and forks are asked.
140
134
 
141
135
  **What remains prohibited is performing the work instead of routing it.** The orchestrator routes the
142
136
  command; it does not improvise the operation. When no command owns an operation, that is a
@@ -153,7 +147,5 @@ routing gap to surface.
153
147
  `BY:` field. Append one line to `.codearbiter/overrides.log` (append-only, committed), then proceed
154
148
  and note the override is logged. The startup briefing surfaces overrides since the last checkpoint.
155
149
 
156
- **A gate that looks wrong is diagnosed, not bypassed.** The instrument is the suspect, not the rule:
157
- reproduce the block, read what the guard actually keyed on, name the defect. Until diagnosed, the
158
- gate stands. A confirmed false positive is a bug filed through its lane; `/override` remains for the
159
- judged exception, and its log line says which of the two it was.
150
+ Safety-core's §7 governs what happens when a gate looks wrong it is diagnosed there, not
151
+ repeated here.
@@ -629,7 +629,7 @@ function resolvePythonCommand(platform = process.platform, probe = systemPythonP
629
629
  }
630
630
 
631
631
  // src/compatibility.ts
632
- var SUPPORTED_PI_VERSIONS = /* @__PURE__ */ new Set(["0.80.5", "0.80.10"]);
632
+ var SUPPORTED_PI_VERSIONS = /* @__PURE__ */ new Set(["0.80.5", "0.84.1"]);
633
633
  var MINIMUM_NODE = [22, 19, 0];
634
634
  var SEMVER_PREFIX = /^(\d+)\.(\d+)\.(\d+)(?:$|[-+])/u;
635
635
  function atLeast(version, minimum) {
@@ -644,7 +644,7 @@ function atLeast(version, minimum) {
644
644
  }
645
645
  function compatibilityDirection(input) {
646
646
  if (!SUPPORTED_PI_VERSIONS.has(input.piVersion)) {
647
- return "codeArbiter requires Pi 0.80.5 or 0.80.10; install a supported Pi version and run /ca-doctor.";
647
+ return "codeArbiter requires Pi 0.80.5 or 0.84.1; install a supported Pi version and run /ca-doctor.";
648
648
  }
649
649
  if (!atLeast(input.nodeVersion, MINIMUM_NODE)) {
650
650
  return "codeArbiter requires Node >=22.19.0 for Pi; upgrade Node and run /ca-doctor.";