@arbiterforge/ca-pi 0.20.1 → 0.21.0
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 +1 -1
- package/package.json +1 -1
- package/plugins/ca-pi/CHANGELOG.md +6 -0
- package/plugins/ca-pi/helpers/artifacts/ca-artifact-darwin-amd64 +0 -0
- package/plugins/ca-pi/helpers/artifacts/ca-artifact-darwin-arm64 +0 -0
- package/plugins/ca-pi/helpers/artifacts/ca-artifact-linux-amd64 +0 -0
- package/plugins/ca-pi/helpers/artifacts/ca-artifact-linux-arm64 +0 -0
- package/plugins/ca-pi/helpers/artifacts/ca-artifact-windows-amd64.exe +0 -0
- package/plugins/ca-pi/helpers/artifacts/ca-artifact-windows-arm64.exe +0 -0
- package/plugins/ca-pi/helpers/artifacts/release.json +36 -36
- package/plugins/ca-pi/hooks/_artifactlib.py +21 -1
- package/plugins/ca-pi/hooks/_host.py +1 -1
- package/plugins/ca-pi/hooks/hostapi.py +1 -1
- package/plugins/ca-pi/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ and durable 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 3.
|
|
13
|
+
<img alt="version 3.2.0" src="https://img.shields.io/badge/version-3.2.0-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-22-555">
|
|
16
16
|
<img alt="agents" src="https://img.shields.io/badge/agents-20-555">
|
package/package.json
CHANGED
|
@@ -4,6 +4,12 @@ All notable changes to `ca-pi` are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.21.0] - 2026-10-18
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- A new `init-store` engine operation creates a checkout's local artifact store metadata on purpose, and only that. On Windows, a fresh clone or worktree reports `NO_LOCAL_STORE` on every read until the store exists; the host bridge now runs `init-store` once and retries the read once, so `/feature` and `/sprint` resume work in a new checkout. Reads themselves still never write, and a read-only checkout still gets `NO_LOCAL_STORE`.
|
|
12
|
+
|
|
7
13
|
## [0.20.1] - 2026-10-18
|
|
8
14
|
|
|
9
15
|
### Fixed
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -6,43 +6,43 @@
|
|
|
6
6
|
"binaries": {
|
|
7
7
|
"darwin/amd64": {
|
|
8
8
|
"file": "ca-artifact-darwin-amd64",
|
|
9
|
-
"sha256": "
|
|
9
|
+
"sha256": "882fefc23bd4b07dcf8f954a2e3cdaecffe210d8bd95e190d2864d9eb77aa339",
|
|
10
10
|
"native_tested": true
|
|
11
11
|
},
|
|
12
12
|
"darwin/arm64": {
|
|
13
13
|
"file": "ca-artifact-darwin-arm64",
|
|
14
|
-
"sha256": "
|
|
14
|
+
"sha256": "8f51bd9848e4b0441eea50c8f4e2da9892164be0488ca3959a8dc900dc295020",
|
|
15
15
|
"native_tested": true
|
|
16
16
|
},
|
|
17
17
|
"linux/amd64": {
|
|
18
18
|
"file": "ca-artifact-linux-amd64",
|
|
19
|
-
"sha256": "
|
|
19
|
+
"sha256": "0f24a4f79a2554c37deabf9ec81d6dfbceb45030f4bea3cfabc33dc51ed1d582",
|
|
20
20
|
"native_tested": true
|
|
21
21
|
},
|
|
22
22
|
"linux/arm64": {
|
|
23
23
|
"file": "ca-artifact-linux-arm64",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "c7cb1e636b3abd3284a7fbc3354bdc556414aec2aacc92665431118f723a86b0",
|
|
25
25
|
"native_tested": true
|
|
26
26
|
},
|
|
27
27
|
"windows/amd64": {
|
|
28
28
|
"file": "ca-artifact-windows-amd64.exe",
|
|
29
|
-
"sha256": "
|
|
29
|
+
"sha256": "7bfdc9a86320e38932d84ee3fef6d088d548809b16dfc17dd648f64e4105471b",
|
|
30
30
|
"native_tested": true
|
|
31
31
|
},
|
|
32
32
|
"windows/arm64": {
|
|
33
33
|
"file": "ca-artifact-windows-arm64.exe",
|
|
34
|
-
"sha256": "
|
|
34
|
+
"sha256": "095bf92bca707c0027c54e929b1d08c62cb97b0b2888cfbe07a3ea49ea0fb8b3",
|
|
35
35
|
"native_tested": true
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
"context_qualification": {
|
|
39
39
|
"darwin/amd64": {
|
|
40
|
-
"source_commit": "
|
|
40
|
+
"source_commit": "020f67947c4c0fb299a9e9d77a9b9354e3ff2ed4",
|
|
41
41
|
"workflow": ".github/workflows/ci.yml",
|
|
42
|
-
"run_id": "
|
|
43
|
-
"binary_sha256": "
|
|
44
|
-
"observation_sha256": "
|
|
45
|
-
"module_sha256": "
|
|
42
|
+
"run_id": "39186858332",
|
|
43
|
+
"binary_sha256": "882fefc23bd4b07dcf8f954a2e3cdaecffe210d8bd95e190d2864d9eb77aa339",
|
|
44
|
+
"observation_sha256": "fdeac588d567329a64b6315456d8c47e060c70dbe9355d76be3c07ec40bd8705",
|
|
45
|
+
"module_sha256": "b39a694ff5283a97c62d532a8abc25a8a47101baa7dfc025bffc90c1da9d9144",
|
|
46
46
|
"native_cases": [
|
|
47
47
|
"TestContextBoundedRender",
|
|
48
48
|
"TestContextDocumentContract",
|
|
@@ -53,12 +53,12 @@
|
|
|
53
53
|
]
|
|
54
54
|
},
|
|
55
55
|
"darwin/arm64": {
|
|
56
|
-
"source_commit": "
|
|
56
|
+
"source_commit": "020f67947c4c0fb299a9e9d77a9b9354e3ff2ed4",
|
|
57
57
|
"workflow": ".github/workflows/ci.yml",
|
|
58
|
-
"run_id": "
|
|
59
|
-
"binary_sha256": "
|
|
60
|
-
"observation_sha256": "
|
|
61
|
-
"module_sha256": "
|
|
58
|
+
"run_id": "39186858332",
|
|
59
|
+
"binary_sha256": "8f51bd9848e4b0441eea50c8f4e2da9892164be0488ca3959a8dc900dc295020",
|
|
60
|
+
"observation_sha256": "f4b6ff84048f95a0c36ba839caad39a15ac493305b7212b5597333ed6e59c9f0",
|
|
61
|
+
"module_sha256": "b39a694ff5283a97c62d532a8abc25a8a47101baa7dfc025bffc90c1da9d9144",
|
|
62
62
|
"native_cases": [
|
|
63
63
|
"TestContextBoundedRender",
|
|
64
64
|
"TestContextDocumentContract",
|
|
@@ -69,12 +69,12 @@
|
|
|
69
69
|
]
|
|
70
70
|
},
|
|
71
71
|
"linux/amd64": {
|
|
72
|
-
"source_commit": "
|
|
72
|
+
"source_commit": "020f67947c4c0fb299a9e9d77a9b9354e3ff2ed4",
|
|
73
73
|
"workflow": ".github/workflows/ci.yml",
|
|
74
|
-
"run_id": "
|
|
75
|
-
"binary_sha256": "
|
|
76
|
-
"observation_sha256": "
|
|
77
|
-
"module_sha256": "
|
|
74
|
+
"run_id": "39186858332",
|
|
75
|
+
"binary_sha256": "0f24a4f79a2554c37deabf9ec81d6dfbceb45030f4bea3cfabc33dc51ed1d582",
|
|
76
|
+
"observation_sha256": "15afed41ddcddfccecc0a49875e5f7b1b8a69e80311f06b5f351e4e0dc02db7d",
|
|
77
|
+
"module_sha256": "b39a694ff5283a97c62d532a8abc25a8a47101baa7dfc025bffc90c1da9d9144",
|
|
78
78
|
"native_cases": [
|
|
79
79
|
"TestContextBoundedRender",
|
|
80
80
|
"TestContextDocumentContract",
|
|
@@ -85,12 +85,12 @@
|
|
|
85
85
|
]
|
|
86
86
|
},
|
|
87
87
|
"linux/arm64": {
|
|
88
|
-
"source_commit": "
|
|
88
|
+
"source_commit": "020f67947c4c0fb299a9e9d77a9b9354e3ff2ed4",
|
|
89
89
|
"workflow": ".github/workflows/ci.yml",
|
|
90
|
-
"run_id": "
|
|
91
|
-
"binary_sha256": "
|
|
92
|
-
"observation_sha256": "
|
|
93
|
-
"module_sha256": "
|
|
90
|
+
"run_id": "39186858332",
|
|
91
|
+
"binary_sha256": "c7cb1e636b3abd3284a7fbc3354bdc556414aec2aacc92665431118f723a86b0",
|
|
92
|
+
"observation_sha256": "5a6a057bcd8a1a194d890a24c570a21d37029e418bcc856b66acf5b69357ba9f",
|
|
93
|
+
"module_sha256": "b39a694ff5283a97c62d532a8abc25a8a47101baa7dfc025bffc90c1da9d9144",
|
|
94
94
|
"native_cases": [
|
|
95
95
|
"TestContextBoundedRender",
|
|
96
96
|
"TestContextDocumentContract",
|
|
@@ -101,12 +101,12 @@
|
|
|
101
101
|
]
|
|
102
102
|
},
|
|
103
103
|
"windows/amd64": {
|
|
104
|
-
"source_commit": "
|
|
104
|
+
"source_commit": "020f67947c4c0fb299a9e9d77a9b9354e3ff2ed4",
|
|
105
105
|
"workflow": ".github/workflows/ci.yml",
|
|
106
|
-
"run_id": "
|
|
107
|
-
"binary_sha256": "
|
|
108
|
-
"observation_sha256": "
|
|
109
|
-
"module_sha256": "
|
|
106
|
+
"run_id": "39186858332",
|
|
107
|
+
"binary_sha256": "7bfdc9a86320e38932d84ee3fef6d088d548809b16dfc17dd648f64e4105471b",
|
|
108
|
+
"observation_sha256": "fc8ec82f4212b5f35e3ed2ef59691f3542facfca9482c44daaeb2a79ffe06e57",
|
|
109
|
+
"module_sha256": "b39a694ff5283a97c62d532a8abc25a8a47101baa7dfc025bffc90c1da9d9144",
|
|
110
110
|
"native_cases": [
|
|
111
111
|
"TestContextBoundedRender",
|
|
112
112
|
"TestContextDocumentContract",
|
|
@@ -117,12 +117,12 @@
|
|
|
117
117
|
]
|
|
118
118
|
},
|
|
119
119
|
"windows/arm64": {
|
|
120
|
-
"source_commit": "
|
|
120
|
+
"source_commit": "020f67947c4c0fb299a9e9d77a9b9354e3ff2ed4",
|
|
121
121
|
"workflow": ".github/workflows/ci.yml",
|
|
122
|
-
"run_id": "
|
|
123
|
-
"binary_sha256": "
|
|
124
|
-
"observation_sha256": "
|
|
125
|
-
"module_sha256": "
|
|
122
|
+
"run_id": "39186858332",
|
|
123
|
+
"binary_sha256": "095bf92bca707c0027c54e929b1d08c62cb97b0b2888cfbe07a3ea49ea0fb8b3",
|
|
124
|
+
"observation_sha256": "60a3b695097d8be6dee2c61e452e31b624a393526675bfd16f092222dee87bf6",
|
|
125
|
+
"module_sha256": "b39a694ff5283a97c62d532a8abc25a8a47101baa7dfc025bffc90c1da9d9144",
|
|
126
126
|
"native_cases": [
|
|
127
127
|
"TestContextBoundedRender",
|
|
128
128
|
"TestContextDocumentContract",
|
|
@@ -977,10 +977,14 @@ def _engine_timeout() -> float:
|
|
|
977
977
|
|
|
978
978
|
|
|
979
979
|
class ArtifactClient:
|
|
980
|
-
def __init__(self, root: str | Path, installation: str | Path, *, timeout: float | None = None
|
|
980
|
+
def __init__(self, root: str | Path, installation: str | Path, *, timeout: float | None = None,
|
|
981
|
+
initialize_store: bool = True):
|
|
981
982
|
self.root = _trusted_directory(root, "UNSAFE_ROOT")
|
|
982
983
|
self.installation = _trusted_directory(installation, "CAPABILITY_MISSING")
|
|
983
984
|
self.timeout = _engine_timeout() if timeout is None else timeout
|
|
985
|
+
# A fresh clone or worktree has no local store, and reads never create
|
|
986
|
+
# one. With this set, the client creates it once through init-store.
|
|
987
|
+
self.initialize_store = initialize_store
|
|
984
988
|
|
|
985
989
|
def workflow_preflight(self) -> dict[str, object]:
|
|
986
990
|
"""Read fresh installed prerequisites; never attest live host authority."""
|
|
@@ -1074,6 +1078,22 @@ class ArtifactClient:
|
|
|
1074
1078
|
raise
|
|
1075
1079
|
|
|
1076
1080
|
def call(self, operation: str, request: dict[str, Any] | None = None, *, permit_invalid: bool = False) -> dict:
|
|
1081
|
+
try:
|
|
1082
|
+
return self._exchange(operation, request, permit_invalid)
|
|
1083
|
+
except ArtifactError as exc:
|
|
1084
|
+
if exc.code != "NO_LOCAL_STORE" or operation == "init-store" or not self.initialize_store:
|
|
1085
|
+
raise
|
|
1086
|
+
# One explicit initialization, then one retry of the original request.
|
|
1087
|
+
try:
|
|
1088
|
+
self._exchange("init-store", {}, False)
|
|
1089
|
+
except ArtifactError as refused:
|
|
1090
|
+
raise ArtifactError(
|
|
1091
|
+
"NO_LOCAL_STORE",
|
|
1092
|
+
f"local artifact store is absent and initialization was refused ({refused.code})",
|
|
1093
|
+
) from refused
|
|
1094
|
+
return self._exchange(operation, request, permit_invalid)
|
|
1095
|
+
|
|
1096
|
+
def _exchange(self, operation: str, request: dict[str, Any] | None, permit_invalid: bool) -> dict:
|
|
1077
1097
|
if not re.fullmatch(r"[a-z][a-z-]{0,39}", operation):
|
|
1078
1098
|
raise ArtifactError("UNKNOWN_OPERATION", "invalid internal operation name")
|
|
1079
1099
|
if operation in {"context-preview", "context-finalize-preview", "context-apply"}:
|
|
@@ -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.
|
|
14
|
+
adapter_version = "0.21.0"
|
|
15
15
|
update_target = "ca-pi"
|
|
16
16
|
update_tag_prefix = "ca-pi-v"
|
|
17
17
|
update_command = "pi update npm:@arbiterforge/ca-pi"
|
|
@@ -313,7 +313,7 @@ class Host:
|
|
|
313
313
|
|
|
314
314
|
name = "claude"
|
|
315
315
|
adapter_name = "ca"
|
|
316
|
-
adapter_version = "3.
|
|
316
|
+
adapter_version = "3.2.0"
|
|
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,
|