@arbiterforge/ca-pi 0.17.10 → 0.18.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.
- package/README.md +1 -1
- package/package.json +1 -1
- package/plugins/ca-pi/CHANGELOG.md +28 -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/_contextmergelib.py +17 -12
- package/plugins/ca-pi/hooks/_host.py +1 -1
- package/plugins/ca-pi/hooks/hostapi.py +1 -1
- package/plugins/ca-pi/includes/artifacts.md +19 -1
- package/plugins/ca-pi/package.json +1 -1
- package/plugins/ca-pi/routines/commit-gate/SKILL.md +24 -7
- package/plugins/ca-pi/routines/finishing-a-development-branch/SKILL.md +14 -3
- package/plugins/ca-pi/skills/ca-commit/SKILL.md +24 -7
- package/plugins/ca-pi/skills/ca-init/SKILL.md +3 -2
- package/plugins/ca-pi/skills/ca-pr/SKILL.md +14 -3
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 2.
|
|
13
|
+
<img alt="version 2.26.1" src="https://img.shields.io/badge/version-2.26.1-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,34 @@ All notable changes to `ca-pi` are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.18.1] - 2026-10-12
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Reproduce normal ORT histogram conflicts in guarded legacy block resolution while preserving exact rendering and index/CAS controls (#968).
|
|
12
|
+
- Clarify unknown host qualification and complete the repository-scoped maintenance commands.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## [0.18.0] - 2026-10-10
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Identify verification inputs by ship-set membership (ADR-0042): git index
|
|
20
|
+
entries present on disk plus untracked non-ignored files within the plan roots,
|
|
21
|
+
minus excludes. Outside git, membership comes from the filesystem; a failed git
|
|
22
|
+
probe fails closed with `INPUT_MEMBERSHIP_UNAVAILABLE`, and an unmerged index
|
|
23
|
+
fails closed until resolved.
|
|
24
|
+
- Exempt exactly `.codearbiter/gate-events.log` from snapshots. It is never
|
|
25
|
+
counted and stays tracked as the audit trail; every other `.codearbiter` path,
|
|
26
|
+
including `overrides.log`, still counts.
|
|
27
|
+
- Advance the verification-input manifest to `codearbiter.verification-inputs/0.2.0`.
|
|
28
|
+
Receipts bound to a 0.1.0 manifest read as stale and must be re-verified.
|
|
29
|
+
- Open snapshot files through bounded handle opens and validate each evidence
|
|
30
|
+
object at most once per operation. Raw reads are reused only up to a 64 MiB
|
|
31
|
+
per-operation retained-byte budget, so past it an object can be read again;
|
|
32
|
+
validation still happens once.
|
|
33
|
+
- Raise the `prompt-submit` hook timeout to 600 seconds so a long snapshot no
|
|
34
|
+
longer times out the prompt seam (#931).
|
|
7
35
|
## [0.17.10] - 2026-10-12
|
|
8
36
|
|
|
9
37
|
### 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": "e35e21caa147a5e6c9d04fd400b5b4fcdb2d1d9cec9119d70249fcb80aeb3512",
|
|
10
10
|
"native_tested": true
|
|
11
11
|
},
|
|
12
12
|
"darwin/arm64": {
|
|
13
13
|
"file": "ca-artifact-darwin-arm64",
|
|
14
|
-
"sha256": "
|
|
14
|
+
"sha256": "dc9157c6ecf48fe05c20351b276ef8c2037847eaedee9dfb88b4f8d0b685b51e",
|
|
15
15
|
"native_tested": true
|
|
16
16
|
},
|
|
17
17
|
"linux/amd64": {
|
|
18
18
|
"file": "ca-artifact-linux-amd64",
|
|
19
|
-
"sha256": "
|
|
19
|
+
"sha256": "6fbd763c319d423291832f796515a4c8202d04e8785ea9ce178a495d917049d6",
|
|
20
20
|
"native_tested": true
|
|
21
21
|
},
|
|
22
22
|
"linux/arm64": {
|
|
23
23
|
"file": "ca-artifact-linux-arm64",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "2b623d4329665513fb11a99e866e30c579a47172ffd16f6faaae21bf21fda83d",
|
|
25
25
|
"native_tested": true
|
|
26
26
|
},
|
|
27
27
|
"windows/amd64": {
|
|
28
28
|
"file": "ca-artifact-windows-amd64.exe",
|
|
29
|
-
"sha256": "
|
|
29
|
+
"sha256": "44003f24b77a5cd51b63fe991a8775462619e2b2130c1162d36450a0570970d8",
|
|
30
30
|
"native_tested": true
|
|
31
31
|
},
|
|
32
32
|
"windows/arm64": {
|
|
33
33
|
"file": "ca-artifact-windows-arm64.exe",
|
|
34
|
-
"sha256": "
|
|
34
|
+
"sha256": "37efc98301beec7c0bf465dee6f4bb48152abef515ae55aa37bff628e969e5bd",
|
|
35
35
|
"native_tested": true
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
"context_qualification": {
|
|
39
39
|
"darwin/amd64": {
|
|
40
|
-
"source_commit": "
|
|
40
|
+
"source_commit": "886d5fa0ae4db7cb230a75dd5ccff6184daaf02b",
|
|
41
41
|
"workflow": ".github/workflows/ci.yml",
|
|
42
|
-
"run_id": "
|
|
43
|
-
"binary_sha256": "
|
|
44
|
-
"observation_sha256": "
|
|
45
|
-
"module_sha256": "
|
|
42
|
+
"run_id": "38262163105",
|
|
43
|
+
"binary_sha256": "e35e21caa147a5e6c9d04fd400b5b4fcdb2d1d9cec9119d70249fcb80aeb3512",
|
|
44
|
+
"observation_sha256": "fb5a8389cbede26dc53324f351c37b1cd955775b85c022fd61e686ef68130a73",
|
|
45
|
+
"module_sha256": "05b0359c108baf52bd3884c36969febc3f98e53786cf80da757115bee5ac9dc2",
|
|
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": "886d5fa0ae4db7cb230a75dd5ccff6184daaf02b",
|
|
57
57
|
"workflow": ".github/workflows/ci.yml",
|
|
58
|
-
"run_id": "
|
|
59
|
-
"binary_sha256": "
|
|
60
|
-
"observation_sha256": "
|
|
61
|
-
"module_sha256": "
|
|
58
|
+
"run_id": "38262163105",
|
|
59
|
+
"binary_sha256": "dc9157c6ecf48fe05c20351b276ef8c2037847eaedee9dfb88b4f8d0b685b51e",
|
|
60
|
+
"observation_sha256": "095030f4dd4bdb3e8d6d9bcc8082724c7a981067cec413da16d81f504e828c29",
|
|
61
|
+
"module_sha256": "05b0359c108baf52bd3884c36969febc3f98e53786cf80da757115bee5ac9dc2",
|
|
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": "886d5fa0ae4db7cb230a75dd5ccff6184daaf02b",
|
|
73
73
|
"workflow": ".github/workflows/ci.yml",
|
|
74
|
-
"run_id": "
|
|
75
|
-
"binary_sha256": "
|
|
76
|
-
"observation_sha256": "
|
|
77
|
-
"module_sha256": "
|
|
74
|
+
"run_id": "38262163105",
|
|
75
|
+
"binary_sha256": "6fbd763c319d423291832f796515a4c8202d04e8785ea9ce178a495d917049d6",
|
|
76
|
+
"observation_sha256": "355d76a3c904c928406c109802e78d30a7c8d093aadc32c9817cf6fb6d0ef9dc",
|
|
77
|
+
"module_sha256": "05b0359c108baf52bd3884c36969febc3f98e53786cf80da757115bee5ac9dc2",
|
|
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": "886d5fa0ae4db7cb230a75dd5ccff6184daaf02b",
|
|
89
89
|
"workflow": ".github/workflows/ci.yml",
|
|
90
|
-
"run_id": "
|
|
91
|
-
"binary_sha256": "
|
|
92
|
-
"observation_sha256": "
|
|
93
|
-
"module_sha256": "
|
|
90
|
+
"run_id": "38262163105",
|
|
91
|
+
"binary_sha256": "2b623d4329665513fb11a99e866e30c579a47172ffd16f6faaae21bf21fda83d",
|
|
92
|
+
"observation_sha256": "44605c44231e8d93893aab35874f48cb4ad52b5fc8e0c9c23afe4ad3f4909cfb",
|
|
93
|
+
"module_sha256": "05b0359c108baf52bd3884c36969febc3f98e53786cf80da757115bee5ac9dc2",
|
|
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": "886d5fa0ae4db7cb230a75dd5ccff6184daaf02b",
|
|
105
105
|
"workflow": ".github/workflows/ci.yml",
|
|
106
|
-
"run_id": "
|
|
107
|
-
"binary_sha256": "
|
|
108
|
-
"observation_sha256": "
|
|
109
|
-
"module_sha256": "
|
|
106
|
+
"run_id": "38262163105",
|
|
107
|
+
"binary_sha256": "44003f24b77a5cd51b63fe991a8775462619e2b2130c1162d36450a0570970d8",
|
|
108
|
+
"observation_sha256": "b53adeb7ba5c4835928a7d4d837be73888a41bb6398209ba99a49ef735517b9d",
|
|
109
|
+
"module_sha256": "05b0359c108baf52bd3884c36969febc3f98e53786cf80da757115bee5ac9dc2",
|
|
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": "886d5fa0ae4db7cb230a75dd5ccff6184daaf02b",
|
|
121
121
|
"workflow": ".github/workflows/ci.yml",
|
|
122
|
-
"run_id": "
|
|
123
|
-
"binary_sha256": "
|
|
124
|
-
"observation_sha256": "
|
|
125
|
-
"module_sha256": "
|
|
122
|
+
"run_id": "38262163105",
|
|
123
|
+
"binary_sha256": "37efc98301beec7c0bf465dee6f4bb48152abef515ae55aa37bff628e969e5bd",
|
|
124
|
+
"observation_sha256": "b00189a7063230bc5e4c174be8f2e2d8edc7892c052d4371c7e1cb183837320b",
|
|
125
|
+
"module_sha256": "05b0359c108baf52bd3884c36969febc3f98e53786cf80da757115bee5ac9dc2",
|
|
126
126
|
"native_cases": [
|
|
127
127
|
"TestContextBoundedRender",
|
|
128
128
|
"TestContextDocumentContract",
|
|
@@ -366,18 +366,23 @@ def _git_conflict_blocks(root, current, base, ours, theirs):
|
|
|
366
366
|
for path, raw in zip(paths, (ours, base, theirs)):
|
|
367
367
|
path.write_bytes(raw)
|
|
368
368
|
for name, flag in modes:
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
369
|
+
# Retain merge-file's historical default and reproduce ORT's
|
|
370
|
+
# histogram alignment, still requiring the complete exact rendering.
|
|
371
|
+
for algorithm in (None, "histogram"):
|
|
372
|
+
args = [git_executable(), "--no-pager", "--no-lazy-fetch", "-c", "core.fsmonitor=false",
|
|
373
|
+
"-c", "core.untrackedCache=false", "-c", "merge.conflictStyle=merge",
|
|
374
|
+
"merge-file", "--stdout", "--marker-size=" + str(size)]
|
|
375
|
+
if flag:
|
|
376
|
+
args.append(flag)
|
|
377
|
+
if algorithm:
|
|
378
|
+
args.append("--diff-algorithm=" + algorithm)
|
|
379
|
+
for label in labels:
|
|
380
|
+
args.extend(("-L", label.decode("utf-8", "strict")))
|
|
381
|
+
result = subprocess.run([*args, *(str(path) for path in paths)], cwd=root, env=env,
|
|
382
|
+
capture_output=True, shell=False, timeout=30)
|
|
383
|
+
_require(len(result.stdout) <= MAX_BYTES, "Git conflict rendering is oversized")
|
|
384
|
+
if 1 <= result.returncode <= 127 and result.stdout.replace(b"\r\n", b"\n") == current.replace(b"\r\n", b"\n"):
|
|
385
|
+
return payload, name
|
|
381
386
|
raise ResolutionError("worktree is not Git's current three-stage rendering")
|
|
382
387
|
|
|
383
388
|
|
|
@@ -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.18.1"
|
|
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 = "2.
|
|
316
|
+
adapter_version = "2.26.1"
|
|
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,
|
|
@@ -88,7 +88,10 @@ executable/workspace binding and fresh named-result evidence remain required.
|
|
|
88
88
|
repository-relative paths. Exclusions are directory paths, not globs or basename
|
|
89
89
|
matches and not relative to an individual root. For root `site`, a generated
|
|
90
90
|
dependency exclusion is `site/node_modules`, not `node_modules`. Review each
|
|
91
|
-
excluded output directory explicitly
|
|
91
|
+
excluded output directory explicitly: the plan's roots and exclusions narrow
|
|
92
|
+
the ship set. In a git work tree `.gitignore` already keeps untracked ignored
|
|
93
|
+
files out of it; outside git nothing is filtered, so exclude generated
|
|
94
|
+
directories explicitly.
|
|
92
95
|
An exclusion outside all selected roots is rejected as ineffective. Overlapping
|
|
93
96
|
roots cannot reinclude an excluded directory. Roots must exist before execution;
|
|
94
97
|
use an existing containing directory for a planned new file so its creation
|
|
@@ -96,6 +99,21 @@ changes the snapshot. An oversized included file is reported with its path and
|
|
|
96
99
|
the 32 MiB per-file limit; revise the explicit policy rather than increasing the
|
|
97
100
|
limit or excluding source/test/governance inputs needed for the task.
|
|
98
101
|
|
|
102
|
+
Snapshot input identity is ship-set membership. In a git work tree the members
|
|
103
|
+
are the git index entries present on disk, plus untracked non-ignored files
|
|
104
|
+
within the plan's roots, minus its excludes. The one fixed exemption is
|
|
105
|
+
`.codearbiter/gate-events.log`: it is never counted, whatever the plan says, and
|
|
106
|
+
stays tracked as the audit trail; every other `.codearbiter` path still counts.
|
|
107
|
+
Outside git, membership is read from the filesystem (`membership: filesystem`);
|
|
108
|
+
the root must be the top level of its work tree, so a subdirectory root counts as
|
|
109
|
+
outside git. A failed git probe fails closed with `INPUT_MEMBERSHIP_UNAVAILABLE`. An unmerged
|
|
110
|
+
git index (conflicted paths) makes a snapshot fail closed until it is resolved.
|
|
111
|
+
The manifest format is `codearbiter.verification-inputs/0.2.0`; receipts bound to
|
|
112
|
+
a 0.1.0 manifest read as stale. Each evidence object is validated at most once
|
|
113
|
+
per operation and scans are bounded; raw reads are reused only up to a 64 MiB
|
|
114
|
+
per-operation retained-byte budget, past which an object can be read again, but
|
|
115
|
+
validation is never skipped.
|
|
116
|
+
|
|
99
117
|
The existing user, SMARTS, reviewer, or verification boundary must first persist
|
|
100
118
|
its actual policy-owned workflow event as canonical JSON in the reserved
|
|
101
119
|
content-addressed authority-source store. Interactive prompt approval currently
|
|
@@ -114,16 +114,33 @@ Run an **incremental re-scout for each affected document**, scoped to its select
|
|
|
114
114
|
- **Claim still holds → silently re-baseline only that document's provenance record.** Call `_provenancelib.rebaseline(doc_provenance, selected_current_hashes)` where `selected_current_hashes` contains current hashes only for the selected staged paths whose claims in that document were inspected and still hold. Do not re-baseline a path whose claim changed or was not inspected. Stage only `.codearbiter/.provenance/<doc>.json` by explicit path so the re-baselined record rides THIS commit (ADR-0008 ride-along pattern — nothing is surfaced to the user). After staging, re-run the secrets scan from `tech-stack.md` over the newly-staged path(s) — any file staged after Phase 4 must still pass the automated secrets scan before the commit proceeds. A missing current hash (deletion or rename) cannot be silently re-baselined; surface it in Phase 6 for review.
|
|
115
115
|
- **Claim changed → route to the existing Phase 6 diff-review.** Propose only the affected doc or code-map edit required to reflect its changed claim. The user reviews that edit in the normal diff, and Phase 7 stages approved paths explicitly; do not silently rewrite or add unrelated documentation.
|
|
116
116
|
|
|
117
|
-
For reviewed legacy code-map metadata
|
|
118
|
-
`<plugin-root>/hooks/resolve-context-conflict.py`.
|
|
119
|
-
|
|
120
|
-
|
|
117
|
+
For reviewed legacy code-map metadata in codeArbiter's source layout, use the
|
|
118
|
+
shipped fixed-target helper at `<plugin-root>/hooks/resolve-context-conflict.py`.
|
|
119
|
+
This claim-refresh lane reads all three fixed source manifests:
|
|
120
|
+
`<project-root>/plugins/ca/.claude-plugin/plugin.json`,
|
|
121
|
+
`<project-root>/plugins/ca-codex/.codex-plugin/plugin.json`, and `<project-root>/plugins/ca-pi/package.json`,
|
|
122
|
+
even for a date-only refresh. Other repository layouts and arbitrary manifest
|
|
123
|
+
claims are unsupported.
|
|
124
|
+
|
|
125
|
+
Resolve the interpreter once by presence, then inspect:
|
|
126
|
+
|
|
127
|
+
```sh
|
|
128
|
+
PY=python3; { command -v python3 >/dev/null 2>&1 && python3 --version >/dev/null 2>&1; } || PY=python
|
|
129
|
+
"$PY" "<plugin-root>/hooks/resolve-context-conflict.py" --root "<project-root>" inspect-claims
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Pass the returned `binding` to the same helper and interpreter:
|
|
133
|
+
|
|
134
|
+
```sh
|
|
135
|
+
"$PY" "<plugin-root>/hooks/resolve-context-conflict.py" --root "<project-root>" refresh-claims --expected '<binding>' --claims '<json-array>'
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Supply one to four reviewed records containing exactly
|
|
121
139
|
`field`, `before`, and `after`. The supported existing fields are `ca_version`,
|
|
122
140
|
`codex_version`, `pi_version`, and `metadata_date`. Use the inspection's exact
|
|
123
141
|
current claim as `before`; a version's `after` must match its fixed source
|
|
124
|
-
manifest, and the date must match `inspection_date`.
|
|
125
|
-
|
|
126
|
-
another interpreter.
|
|
142
|
+
manifest, and the date must match `inspection_date`. Use the selected interpreter
|
|
143
|
+
for both calls; never retry a failed operation under another interpreter.
|
|
127
144
|
|
|
128
145
|
This operation requires resolved, tracked legacy schema-1 document/provenance
|
|
129
146
|
and no native or uncertain journal ownership. It binds document, provenance,
|
|
@@ -169,9 +169,20 @@ qualification remains unchanged. Re-run the current-head review and CI
|
|
|
169
169
|
requirements after integration; previous green evidence does not bind new code.
|
|
170
170
|
|
|
171
171
|
For an explicitly selected per-block resolution, use the same shipped helper
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
172
|
+
and the interpreter already selected by presence:
|
|
173
|
+
|
|
174
|
+
```sh
|
|
175
|
+
"$PY" "<plugin-root>/hooks/resolve-context-conflict.py" --root "<project-root>" inspect-blocks
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Pass the returned `binding` to the same helper and interpreter:
|
|
179
|
+
|
|
180
|
+
```sh
|
|
181
|
+
"$PY" "<plugin-root>/hooks/resolve-context-conflict.py" --root "<project-root>" resolve-blocks --expected '<binding>' --choices '<json-array>'
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Review each block and supply exactly one `"ours"` or `"theirs"` choice in its
|
|
185
|
+
displayed order. The
|
|
175
186
|
inspection returns the block count and side hashes; read the conflict document
|
|
176
187
|
to review the actual text. This is a separate operation: `restore-head` keeps
|
|
177
188
|
its original single-block exact-HEAD contract.
|
|
@@ -114,16 +114,33 @@ Run an **incremental re-scout for each affected document**, scoped to its select
|
|
|
114
114
|
- **Claim still holds → silently re-baseline only that document's provenance record.** Call `_provenancelib.rebaseline(doc_provenance, selected_current_hashes)` where `selected_current_hashes` contains current hashes only for the selected staged paths whose claims in that document were inspected and still hold. Do not re-baseline a path whose claim changed or was not inspected. Stage only `.codearbiter/.provenance/<doc>.json` by explicit path so the re-baselined record rides THIS commit (ADR-0008 ride-along pattern — nothing is surfaced to the user). After staging, re-run the secrets scan from `tech-stack.md` over the newly-staged path(s) — any file staged after Phase 4 must still pass the automated secrets scan before the commit proceeds. A missing current hash (deletion or rename) cannot be silently re-baselined; surface it in Phase 6 for review.
|
|
115
115
|
- **Claim changed → route to the existing Phase 6 diff-review.** Propose only the affected doc or code-map edit required to reflect its changed claim. The user reviews that edit in the normal diff, and Phase 7 stages approved paths explicitly; do not silently rewrite or add unrelated documentation.
|
|
116
116
|
|
|
117
|
-
For reviewed legacy code-map metadata
|
|
118
|
-
`<plugin-root>/hooks/resolve-context-conflict.py`.
|
|
119
|
-
|
|
120
|
-
|
|
117
|
+
For reviewed legacy code-map metadata in codeArbiter's source layout, use the
|
|
118
|
+
shipped fixed-target helper at `<plugin-root>/hooks/resolve-context-conflict.py`.
|
|
119
|
+
This claim-refresh lane reads all three fixed source manifests:
|
|
120
|
+
`<project-root>/plugins/ca/.claude-plugin/plugin.json`,
|
|
121
|
+
`<project-root>/plugins/ca-codex/.codex-plugin/plugin.json`, and `<project-root>/plugins/ca-pi/package.json`,
|
|
122
|
+
even for a date-only refresh. Other repository layouts and arbitrary manifest
|
|
123
|
+
claims are unsupported.
|
|
124
|
+
|
|
125
|
+
Resolve the interpreter once by presence, then inspect:
|
|
126
|
+
|
|
127
|
+
```sh
|
|
128
|
+
PY=python3; { command -v python3 >/dev/null 2>&1 && python3 --version >/dev/null 2>&1; } || PY=python
|
|
129
|
+
"$PY" "<plugin-root>/hooks/resolve-context-conflict.py" --root "<project-root>" inspect-claims
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Pass the returned `binding` to the same helper and interpreter:
|
|
133
|
+
|
|
134
|
+
```sh
|
|
135
|
+
"$PY" "<plugin-root>/hooks/resolve-context-conflict.py" --root "<project-root>" refresh-claims --expected '<binding>' --claims '<json-array>'
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Supply one to four reviewed records containing exactly
|
|
121
139
|
`field`, `before`, and `after`. The supported existing fields are `ca_version`,
|
|
122
140
|
`codex_version`, `pi_version`, and `metadata_date`. Use the inspection's exact
|
|
123
141
|
current claim as `before`; a version's `after` must match its fixed source
|
|
124
|
-
manifest, and the date must match `inspection_date`.
|
|
125
|
-
|
|
126
|
-
another interpreter.
|
|
142
|
+
manifest, and the date must match `inspection_date`. Use the selected interpreter
|
|
143
|
+
for both calls; never retry a failed operation under another interpreter.
|
|
127
144
|
|
|
128
145
|
This operation requires resolved, tracked legacy schema-1 document/provenance
|
|
129
146
|
and no native or uncertain journal ownership. It binds document, provenance,
|
|
@@ -52,8 +52,9 @@ a qualified host.
|
|
|
52
52
|
When these prerequisites are unavailable or unknown, report the missing
|
|
53
53
|
capability before invoking the scaffolder. Keep a fresh repository unactivated
|
|
54
54
|
and retain every byte of any existing partial state. Name the loaded package,
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
observed host limitation or explicitly unknown qualification, selected
|
|
56
|
+
population route and next missing prerequisite in the handoff; leave
|
|
57
|
+
unobserved qualification and prior operation identities
|
|
57
58
|
unknown. Resume on a host only after fresh containment and writer qualification,
|
|
58
59
|
using the existing interrupted-population recovery procedure. No supported
|
|
59
60
|
destination is implied by this guidance.
|
|
@@ -169,9 +169,20 @@ qualification remains unchanged. Re-run the current-head review and CI
|
|
|
169
169
|
requirements after integration; previous green evidence does not bind new code.
|
|
170
170
|
|
|
171
171
|
For an explicitly selected per-block resolution, use the same shipped helper
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
172
|
+
and the interpreter already selected by presence:
|
|
173
|
+
|
|
174
|
+
```sh
|
|
175
|
+
"$PY" "<plugin-root>/hooks/resolve-context-conflict.py" --root "<project-root>" inspect-blocks
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Pass the returned `binding` to the same helper and interpreter:
|
|
179
|
+
|
|
180
|
+
```sh
|
|
181
|
+
"$PY" "<plugin-root>/hooks/resolve-context-conflict.py" --root "<project-root>" resolve-blocks --expected '<binding>' --choices '<json-array>'
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Review each block and supply exactly one `"ours"` or `"theirs"` choice in its
|
|
185
|
+
displayed order. The
|
|
175
186
|
inspection returns the block count and side hashes; read the conflict document
|
|
176
187
|
to review the actual text. This is a separate operation: `restore-head` keeps
|
|
177
188
|
its original single-block exact-HEAD contract.
|