@arbiterforge/ca-pi 0.10.6 → 0.10.7

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
@@ -10,7 +10,7 @@ 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.17.5" src="https://img.shields.io/badge/version-2.17.5-2b7489">
13
+ <img alt="version 2.17.6" src="https://img.shields.io/badge/version-2.17.6-2b7489">
14
14
  <img alt="core lanes" src="https://img.shields.io/badge/core_lanes-18-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-19-555">
@@ -117,7 +117,7 @@ Approve the normal plugin trust prompt, open the target repository, and continue
117
117
 
118
118
  ### Codex CLI
119
119
 
120
- The public GitHub-slug flow is **available now**. The repository currently ships `ca-codex 0.9.5`;
120
+ The public GitHub-slug flow is **available now**. The repository currently ships `ca-codex 0.9.6`;
121
121
  the dated end-to-end public-install record discovered `ca-codex 0.2.4` from release `v2.8.13`.
122
122
  Current packaging and shared-core parity are continuously verified, while that dated live-install
123
123
  record stays labeled rather than being silently promoted to evidence for a newer adapter:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arbiterforge/ca-pi",
3
- "version": "0.10.6",
3
+ "version": "0.10.7",
4
4
  "license": "AGPL-3.0-only",
5
5
  "repository": {
6
6
  "type": "git",
@@ -4,6 +4,12 @@ All notable changes to `ca-pi` are documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.10.7] - 2026-09-06
8
+
9
+ ### Fixed
10
+
11
+ - Recover an unsettled mode-enter audit row on a repeated request instead of reporting an ineffective posture as a no-op.
12
+
7
13
  ## [0.10.6] - 2026-09-06
8
14
 
9
15
  ### Changed
@@ -11,7 +11,7 @@ import hostapi # noqa: E402
11
11
  class PiHost(hostapi.Host):
12
12
  name = "pi"
13
13
  adapter_name = "@arbiterforge/ca-pi"
14
- adapter_version = "0.10.6"
14
+ adapter_version = "0.10.7"
15
15
  update_target = "ca-pi"
16
16
  update_tag_prefix = "ca-pi-v"
17
17
  update_command = "pi update npm:@arbiterforge/ca-pi"
@@ -353,13 +353,14 @@ def flip(session_id, mode, root=None, payload=None, host_name=None, now=None):
353
353
  """Attempt to set `session_id`'s mode to `mode`. Returns one of
354
354
  FLIP_FLIPPED / FLIP_NOOP / FLIP_FAILED. Never raises.
355
355
 
356
- AC-6: a flip TO THE ALREADY-ACTIVE mode is a no-op — no write is even
357
- attempted and no audit row is appended, so `overrides.log` is left
358
- byte-identical. This is also the mechanism behind T-14's fail-direction
359
- asymmetry: once a failed flip has left the session's resolved mode
360
- unchanged, any LATER flip back to that same resolved mode is a no-op
361
- under ANY filesystem state — including a markers directory that cannot
362
- be written to at all — because a no-op never touches disk.
356
+ AC-6: a flip TO AN ALREADY-ACTIVE, LEDGER-BACKED mode is a no-op — no
357
+ write is attempted and no audit row is appended, so `overrides.log` is
358
+ left byte-identical. The default arbiter posture needs no authorizing row.
359
+ If a prior non-arbiter write landed but its staged enter row did not, a
360
+ repeat request retries settlement: success reports the effective flip,
361
+ while another failure stays explicit instead of claiming the posture is
362
+ already active. This preserves T-14's fail direction because an unbacked
363
+ non-arbiter marker still cannot authorize persona composition.
363
364
 
364
365
  On a genuine transition the order is deliberate: write first, audit row
365
366
  ONLY on a confirmed write. AC-11's `ledger_backs` exists to catch exactly
@@ -369,7 +370,12 @@ def flip(session_id, mode, root=None, payload=None, host_name=None, now=None):
369
370
  root = root if root is not None else marker_root(payload)
370
371
  current, _diag = current_mode(session_id, root=root, payload=payload)
371
372
  if current == mode:
372
- return FLIP_NOOP
373
+ if mode == MODES[0] or ledger_backs(root, mode, session_id=session_id):
374
+ return FLIP_NOOP
375
+ _settle_dev_close(root, host_name=host_name)
376
+ return (FLIP_FLIPPED
377
+ if ledger_backs(root, mode, session_id=session_id)
378
+ else FLIP_FAILED)
373
379
  if not write_mode(session_id, mode, root=root, payload=payload):
374
380
  return FLIP_FAILED
375
381
  # ADR-0030 position 4: EVERY transition row is staged through the #396
@@ -313,7 +313,7 @@ class Host:
313
313
 
314
314
  name = "claude"
315
315
  adapter_name = "ca"
316
- adapter_version = "2.17.5"
316
+ adapter_version = "2.17.6"
317
317
 
318
318
  # Update-notifier descriptor. Each independently versioned host overrides
319
319
  # these three values in its per-plugin _host.py. Keeping the target,