owlrunkit 0.15.1 → 0.16.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/CHANGELOG.md +105 -0
- package/README.md +284 -66
- package/integrations/codex/skills/owlcoda-runkit/SKILL.md +235 -116
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/ready-for-commit-request.json +2 -2
- package/package.json +2 -2
- package/packages/attest/distribution-manifest-v1.json +10 -0
- package/packages/attest/src/quick.mjs +10 -0
- package/registry-release-policy-v1.json +8 -2
- package/sbom.spdx.json +5 -5
- package/scripts/runkit-contract/assurance-router.mjs +119 -0
- package/scripts/runkit-contract/core-contract.mjs +203 -206
- package/scripts/runkit-contract/core-successor.mjs +2043 -0
- package/scripts/runkit-contract/deployment-workflow.mjs +2040 -0
- package/scripts/runkit-contract/finalize.mjs +242 -21
- package/scripts/runkit-contract/fleet-discovery.mjs +1198 -0
- package/scripts/runkit-contract/formal-workflow.mjs +850 -0
- package/scripts/runkit-contract/human-status.mjs +553 -0
- package/scripts/runkit-contract/inspect-presentation.mjs +25 -8
- package/scripts/runkit-contract/install-codex-skill.mjs +73 -30
- package/scripts/runkit-contract/lease-lifecycle.mjs +8 -2
- package/scripts/runkit-contract/lifecycle-orchestration.mjs +135 -12
- package/scripts/runkit-contract/onboarding-doctor.mjs +43 -90
- package/scripts/runkit-contract/owner-authority-trust.mjs +230 -0
- package/scripts/runkit-contract/owner-deployment-decision.mjs +385 -0
- package/scripts/runkit-contract/profile-onboarding.mjs +841 -13
- package/scripts/runkit-contract/project-cli-resolver.mjs +704 -0
- package/scripts/runkit-contract/project-control-parser.mjs +889 -0
- package/scripts/runkit-contract/project-control-state.mjs +28 -0
- package/scripts/runkit-contract/provenance-common.mjs +19 -2
- package/scripts/runkit-contract/ready-for-commit.mjs +330 -18
- package/scripts/runkit-contract/remote-deployment.mjs +1596 -0
- package/scripts/runkit-contract/remote-process-adapter.mjs +177 -0
- package/scripts/runkit-contract/runkit-bootstrap.mjs +131 -0
- package/scripts/runkit-contract/runkit-cli.mjs +1155 -21
- package/scripts/runkit-contract/schemas/assurance-route-v1.schema.json +26 -0
- package/scripts/runkit-contract/schemas/core-successor-batch-receipt-v1.schema.json +126 -0
- package/scripts/runkit-contract/schemas/core-successor-plan-v1.schema.json +167 -0
- package/scripts/runkit-contract/schemas/core-successor-project-success-receipt-v1.schema.json +72 -0
- package/scripts/runkit-contract/schemas/deployment-execute-request-v1.schema.json +63 -0
- package/scripts/runkit-contract/schemas/deployment-lineage-v1.schema.json +292 -0
- package/scripts/runkit-contract/schemas/deployment-prepare-receipt-v1.schema.json +140 -0
- package/scripts/runkit-contract/schemas/fleet-discovery-v1.schema.json +62 -0
- package/scripts/runkit-contract/schemas/fleet-manifest-v1.schema.json +20 -0
- package/scripts/runkit-contract/schemas/fleet-root-registry-v1.schema.json +34 -0
- package/scripts/runkit-contract/schemas/human-status-v1.schema.json +102 -0
- package/scripts/runkit-contract/schemas/owner-authority-trust-v1.schema.json +66 -0
- package/scripts/runkit-contract/schemas/owner-deployment-authority-v1.schema.json +46 -0
- package/scripts/runkit-contract/schemas/owner-deployment-authority-v2.schema.json +94 -0
- package/scripts/runkit-contract/schemas/owner-deployment-decision-v1.schema.json +102 -0
- package/scripts/runkit-contract/schemas/owner-migration-authority-v1.schema.json +33 -0
- package/scripts/runkit-contract/schemas/owner-migration-authority-v2.schema.json +67 -0
- package/scripts/runkit-contract/schemas/profile-apply-receipt-v1.schema.json +32 -0
- package/scripts/runkit-contract/schemas/profile-detection-v2.schema.json +145 -0
- package/scripts/runkit-contract/schemas/ready-for-commit-v2.schema.json +37 -0
- package/scripts/runkit-contract/schemas/remote-deployment-manifest-v1.schema.json +379 -0
- package/scripts/runkit-contract/schemas/remote-deployment-result-v1.schema.json +153 -0
- package/scripts/runkit-contract/schemas/remote-deployment-stage-journal-v1.schema.json +183 -0
- package/scripts/runkit-contract/schemas/remote-target-v1.schema.json +32 -0
- package/scripts/runkit-contract/schemas/source-candidate-v2.schema.json +152 -0
- package/scripts/runkit-contract/schemas/verification-receipt-v2.schema.json +13 -0
- package/scripts/runkit-contract/snapshot.mjs +1 -1
- package/scripts/runkit-contract/source-candidate.mjs +1382 -0
- package/scripts/runkit-contract/ssh-remote-adapter.mjs +1184 -0
- package/scripts/runkit-contract/sync-core016-release-identity.mjs +166 -0
- package/scripts/runkit-contract/templates/assurance-request.json +13 -0
- package/scripts/runkit-contract/templates/core-successor-owner-authority.json +15 -0
- package/scripts/runkit-contract/templates/deployment-execute-request.json +39 -0
- package/scripts/runkit-contract/templates/deployment-owner-authority.json +23 -0
- package/scripts/runkit-contract/templates/deployment-owner-decision.json +26 -0
- package/scripts/runkit-contract/templates/fleet-manifest.json +8 -0
- package/scripts/runkit-contract/templates/fleet-root-registry.json +8 -0
- package/scripts/runkit-contract/templates/owner-authority-trust.json +16 -0
- package/scripts/runkit-contract/templates/ready-for-commit-request.json +2 -2
- package/scripts/runkit-contract/templates/remote-deployment-manifest.json +108 -0
- package/scripts/runkit-contract/verification-receipt-gate.mjs +28 -0
|
@@ -7,8 +7,15 @@ description: Run receipt-backed, project-owned software execution with OwlCoda R
|
|
|
7
7
|
|
|
8
8
|
Use the bundled deterministic Core to coordinate work through project artifacts rather than chat memory. Require Node.js 20 or later.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
Core `0.
|
|
10
|
+
Bundled release: standalone `owlrunkit@0.16.1`, bundling Contract `0.2` and
|
|
11
|
+
Core `0.16.1` with manifest
|
|
12
|
+
`sha256:38ac9110e328c38a81db05f1359734ca810b991c9f4de77647f9719f5e6af78b`.
|
|
13
|
+
Publication and dist-tag state are mutable registry facts: verify the exact
|
|
14
|
+
official npm registry provenance before adoption. The immutable rollback
|
|
15
|
+
baseline for this release is `owlrunkit@0.16.0` with SHA-1
|
|
16
|
+
`bab651b0e10111a7a179a3a58917a8e90e43c35f` and canonical npm tarball URL
|
|
17
|
+
`https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.16.0.tgz`.
|
|
18
|
+
The root `owlcoda` package has a separate version lifecycle.
|
|
12
19
|
|
|
13
20
|
The session is an execution interface. Project artifacts are the system of record.
|
|
14
21
|
|
|
@@ -20,13 +27,23 @@ The session is an execution interface. Project artifacts are the system of recor
|
|
|
20
27
|
4. Never include `.owlcoda/runkit/**` in delivery changed files, profile rules or lease owned paths.
|
|
21
28
|
5. Read [references/contract-v0.2.md](references/contract-v0.2.md) for new executions and accepted closeouts. Read [references/contract-v0.1.md](references/contract-v0.1.md) only when interpreting historical v0.1 artifacts.
|
|
22
29
|
|
|
23
|
-
|
|
30
|
+
Use the `owlrunkit` command for normal work. Its bootstrap resolves the
|
|
31
|
+
project's exact locally bound OwlRunKit CLI before interpreting project control
|
|
32
|
+
state. The currently installed package handles bootstrap-only operations such
|
|
33
|
+
as initialization, exact adoption and Core-successor migration. Do not bypass
|
|
34
|
+
that resolver with a global CLI or a copied Skill Core. Project-local
|
|
35
|
+
delegation requires the canonical official npm tarball URL and SHA-512 SRI,
|
|
36
|
+
an installed Core identity trusted by the current bootstrap, and the same Core
|
|
37
|
+
identity in project Config; any mismatch fails closed.
|
|
38
|
+
Set `SKILL_ROOT` to this Skill directory only when an advanced read-only helper
|
|
39
|
+
below has no CLI entry.
|
|
24
40
|
|
|
25
41
|
## Initialize and inspect
|
|
26
42
|
|
|
27
43
|
```bash
|
|
28
44
|
owlrunkit init --workspace "$PROJECT_ROOT"
|
|
29
45
|
owlrunkit inspect --json --workspace "$PROJECT_ROOT"
|
|
46
|
+
owlrunkit status --workspace "$PROJECT_ROOT"
|
|
30
47
|
```
|
|
31
48
|
|
|
32
49
|
Initialization may write only `.owlcoda/runkit/`. It must not modify business source.
|
|
@@ -65,13 +82,13 @@ repair surfaces. OwlRunKit uses its own version lifecycle: the standalone
|
|
|
65
82
|
For one low-risk exact command, use the Core v0.13 Quick path:
|
|
66
83
|
|
|
67
84
|
```bash
|
|
68
|
-
|
|
85
|
+
owlrunkit quick-verify \
|
|
69
86
|
--workspace "$PROJECT_ROOT" -- "$ABSOLUTE_EXECUTABLE" "arg-one"
|
|
70
87
|
|
|
71
|
-
|
|
88
|
+
owlrunkit quick-attest \
|
|
72
89
|
--workspace "$PROJECT_ROOT" --receipt "$QUICK_RECEIPT"
|
|
73
90
|
|
|
74
|
-
|
|
91
|
+
owlrunkit quick-metrics \
|
|
75
92
|
--workspace "$PROJECT_ROOT" --local
|
|
76
93
|
```
|
|
77
94
|
|
|
@@ -81,13 +98,13 @@ local-only and perform no telemetry or network request.
|
|
|
81
98
|
Core v0.13 also adds deterministic repair and exact-byte offline transport:
|
|
82
99
|
|
|
83
100
|
```bash
|
|
84
|
-
|
|
101
|
+
owlrunkit repair \
|
|
85
102
|
--workspace "$PROJECT_ROOT" --run-id "$RUN_ID"
|
|
86
103
|
|
|
87
|
-
|
|
104
|
+
owlrunkit offline-export \
|
|
88
105
|
--workspace "$PROJECT_ROOT" --receipt "$RECEIPT" --output "$BUNDLE"
|
|
89
106
|
|
|
90
|
-
|
|
107
|
+
owlrunkit offline-import \
|
|
91
108
|
--workspace "$PROJECT_ROOT" --bundle "$BUNDLE" --store "$OFFLINE_STORE"
|
|
92
109
|
```
|
|
93
110
|
|
|
@@ -111,18 +128,29 @@ node "$RUNKIT_PACKAGE_ROOT/scripts/runkit-contract/install-codex-skill.mjs" \
|
|
|
111
128
|
|
|
112
129
|
node "$RUNKIT_PACKAGE_ROOT/scripts/runkit-contract/install-codex-skill.mjs" \
|
|
113
130
|
install --repository "$RUNKIT_PACKAGE_ROOT" \
|
|
114
|
-
--target "$RUNKIT_SKILL_TARGET" --archive "$RUNKIT_SKILL_ARCHIVE_ROOT"
|
|
115
|
-
--workspace /absolute/project-a --workspace /absolute/project-b
|
|
131
|
+
--target "$RUNKIT_SKILL_TARGET" --archive "$RUNKIT_SKILL_ARCHIVE_ROOT"
|
|
116
132
|
```
|
|
117
133
|
|
|
118
134
|
The install manifest binds every Skill, Core, contract and attest file.
|
|
119
135
|
Unknown installed drift fails closed instead of being overwritten. A changed
|
|
120
|
-
process-wide Skill requires
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
136
|
+
process-wide Skill requires a registered complete fleet. Register each coverage
|
|
137
|
+
root once with `owlrunkit fleet register-root --fleet-root <absolute-root>`.
|
|
138
|
+
Inspect and correct a broad or stale registry through the official
|
|
139
|
+
`fleet inspect-registry` and evidence-bound `fleet replace-registry` workflow;
|
|
140
|
+
never hand-edit the registry. Replacement is dry-runnable and append-only
|
|
141
|
+
receipts preserve the exact rollback preimage. Retired archives are evidence,
|
|
142
|
+
not active fleet writers. Ordinary installs use the registered active
|
|
143
|
+
membership automatically. Repeated
|
|
144
|
+
`--fleet-root` or a frozen `--fleet-manifest` remain explicit one-off sources.
|
|
145
|
+
RunKit stops at each project boundary, reports damaged or incomplete markers by
|
|
146
|
+
exact path, freezes the discovered workspace list, and fails closed if a
|
|
147
|
+
registered root is unreachable. It cannot
|
|
148
|
+
discover projects outside registered coverage and must not claim machine-wide
|
|
149
|
+
safety. The installer validates every discovered project config and refuses the
|
|
150
|
+
whole update before replacing the Skill or changing any project when one
|
|
151
|
+
project has an active execution, an active writer lease, ambiguous control
|
|
152
|
+
state, or invalid configuration. A missing registry is an error; do not use
|
|
153
|
+
partial explicit coverage to bypass this guard.
|
|
126
154
|
|
|
127
155
|
A successful update archives the exact prior Skill, migrates each inactive
|
|
128
156
|
project, and writes an append-only upgrade receipt containing the prior Skill
|
|
@@ -156,16 +184,14 @@ fleet with no matching active execution. An accepted receipt, ready-for-commit
|
|
|
156
184
|
receipt, package publication, valid install, rollback, or recovery still does
|
|
157
185
|
not grant Git, npm, release, deploy, or foreign-project authority.
|
|
158
186
|
|
|
159
|
-
## Core v0.
|
|
187
|
+
## Core v0.14 and v0.15 historical compatibility
|
|
160
188
|
|
|
161
|
-
Core v0.14 introduced
|
|
162
|
-
`0.15.1
|
|
163
|
-
|
|
164
|
-
|
|
189
|
+
Core v0.14 introduced `owlrunkit doctor`, registry-first exact adoption and
|
|
190
|
+
deterministic `profiles detect`; Core v0.15/0.15.1 consolidated onboarding and
|
|
191
|
+
made inactive 0.13/0.14 ConfigV2 upgrades and exact rollback safe. Historical
|
|
192
|
+
projects, profiles, executions, packets, receipts and closeouts remain readable.
|
|
165
193
|
|
|
166
194
|
```bash
|
|
167
|
-
owlrunkit --help
|
|
168
|
-
owlrunkit --version
|
|
169
195
|
owlrunkit doctor --workspace "$PROJECT_ROOT"
|
|
170
196
|
owlrunkit profiles detect --workspace "$PROJECT_ROOT" --dry-run
|
|
171
197
|
owlrunkit profiles validate --workspace "$PROJECT_ROOT"
|
|
@@ -173,46 +199,42 @@ owlrunkit profiles impact --workspace "$PROJECT_ROOT" --changed path/to/file
|
|
|
173
199
|
owlrunkit adopt --workspace "$PROJECT_ROOT" --exact owlrunkit@0.15.1
|
|
174
200
|
```
|
|
175
201
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
Skill manifest and ConfigV2 bytes. Existing profiles, adoption evidence,
|
|
213
|
-
executions, delivery packets, snapshots, verification receipts, and closeouts
|
|
214
|
-
remain byte-identical and readable. Neither compatibility nor a completed
|
|
215
|
-
onboarding projection grants authority.
|
|
202
|
+
Exact adoption requires the official npm registry `shasum`, `integrity` and
|
|
203
|
+
tarball binding. A worktree, local tarball, `file:` dependency, Git source,
|
|
204
|
+
workspace link or mutable tag is not formal adoption. Active or ambiguous work
|
|
205
|
+
blocks migration before Config or Skill bytes change. Historical closed leases
|
|
206
|
+
use their trusted immutable closeout/Core semantics only when an accepted
|
|
207
|
+
closed execution exactly binds its released lease. Active, malformed,
|
|
208
|
+
hash-wrong, untrusted, or inconsistently released state still fails closed.
|
|
209
|
+
Compatibility, onboarding,
|
|
210
|
+
rollback and recovery grant no Git, npm, release, deploy or foreign-write
|
|
211
|
+
authority.
|
|
212
|
+
|
|
213
|
+
## Core v0.16 daily workflow candidate
|
|
214
|
+
|
|
215
|
+
Core 0.16 makes the safe path the ordinary path without weakening its gates:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
owlrunkit fleet register-root --fleet-root /absolute/declared-projects
|
|
219
|
+
owlrunkit fleet discover
|
|
220
|
+
owlrunkit profiles detect --workspace "$PROJECT_ROOT" --dry-run
|
|
221
|
+
owlrunkit profiles detect --workspace "$PROJECT_ROOT" --apply
|
|
222
|
+
owlrunkit assurance route --workspace "$PROJECT_ROOT" \
|
|
223
|
+
--request "$ASSURANCE_REQUEST_JSON"
|
|
224
|
+
owlrunkit status --workspace "$PROJECT_ROOT"
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Fleet discovery is complete only within all registered coverage roots, an
|
|
228
|
+
explicit one-off root list, or a caller-supplied frozen `--fleet-manifest`. It
|
|
229
|
+
refuses unreachable roots and cannot protect projects outside registered
|
|
230
|
+
coverage. `profiles detect --apply` is create-only and adopts only unambiguous
|
|
231
|
+
high-confidence, project-local regular-file launchers; existing profiles and
|
|
232
|
+
low-confidence candidates remain untouched. Lock-bound npm and exact
|
|
233
|
+
project-installed pnpm, Yarn, and Bun launchers are supported; PATH-only
|
|
234
|
+
package managers remain review-required. `assurance route`
|
|
235
|
+
deterministically selects No RunKit, Quick Verification or Formal Delivery
|
|
236
|
+
from explicit risk facts and fails closed to Formal when required facts are
|
|
237
|
+
missing.
|
|
216
238
|
|
|
217
239
|
## Choose the smallest assurance lane
|
|
218
240
|
|
|
@@ -232,59 +254,152 @@ If work crosses lanes, re-evaluate risk and authority. Moving from Quick to
|
|
|
232
254
|
Formal requires a fresh GoalContract, exact write scope, profiles and authority;
|
|
233
255
|
never treat a Quick receipt as Formal acceptance.
|
|
234
256
|
|
|
235
|
-
##
|
|
257
|
+
## Use Formal Delivery in three commands
|
|
236
258
|
|
|
237
|
-
|
|
259
|
+
For a normal formally accepted change, start one bounded execution, add
|
|
260
|
+
incremental checks, then finish once:
|
|
238
261
|
|
|
239
262
|
```bash
|
|
240
|
-
node
|
|
241
|
-
--workspace "$PROJECT_ROOT" \
|
|
242
|
-
--run-id "$RUN_ID" \
|
|
243
|
-
--goal "$GOAL_JSON"
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
Use one run id on one branch only. Assign one active lease per non-overlapping write scope. Feature work may stop at `ready_for_stage_verification` with a DeliveryPacket.
|
|
247
|
-
|
|
248
|
-
## Use the high-level daily lifecycle
|
|
249
|
-
|
|
250
|
-
For a normal single-command verification path, compose the same atomic Core
|
|
251
|
-
artifacts with three commands:
|
|
263
|
+
NODE_BIN="$(node -p 'process.execPath')"
|
|
252
264
|
|
|
253
|
-
|
|
254
|
-
node "$SKILL_ROOT/scripts/runkit-contract/runkit-cli.mjs" start \
|
|
265
|
+
owlrunkit formal start \
|
|
255
266
|
--workspace "$PROJECT_ROOT" --run-id "$RUN_ID" --goal "$GOAL_JSON" \
|
|
256
267
|
--work-item "$WORK_ITEM_ID" \
|
|
257
268
|
--owned-path "src/exact-file.ts" --owned-path "tests/feature/**"
|
|
258
269
|
|
|
259
|
-
|
|
270
|
+
owlrunkit formal check \
|
|
260
271
|
--workspace "$PROJECT_ROOT" --run-id "$RUN_ID" \
|
|
261
|
-
--from-lease "$WORK_ITEM_ID" --
|
|
262
|
-
--cwd "." -- "$
|
|
272
|
+
--from-lease "$WORK_ITEM_ID" --check-id "$CHECK_ID" \
|
|
273
|
+
--cwd "." -- "$NODE_BIN" --check "src/exact-file.ts"
|
|
263
274
|
|
|
264
|
-
|
|
275
|
+
owlrunkit formal finish \
|
|
265
276
|
--workspace "$PROJECT_ROOT" --run-id "$RUN_ID" --decision accepted
|
|
266
277
|
```
|
|
267
278
|
|
|
268
|
-
`start`
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
`
|
|
279
|
-
|
|
280
|
-
|
|
279
|
+
`formal start` creates the execution and exact writer lease. `formal check`
|
|
280
|
+
preserves exact argv and appends source-bound evidence without rebuilding the
|
|
281
|
+
execution. `formal finish` performs final source-drift, evidence, permission,
|
|
282
|
+
acceptance, closeout and lease-release gates. `blocked` and `rejected` remain
|
|
283
|
+
honest non-accepted closeouts. Keep one execution while scope is unchanged;
|
|
284
|
+
create a linked successor only when authority or write scope truly changes.
|
|
285
|
+
Repeating the same `check` or `finish` command resumes exact create-only
|
|
286
|
+
artifacts; a mismatch fails closed.
|
|
287
|
+
|
|
288
|
+
Formal accepted evidence currently admits only the built-in Node syntax check:
|
|
289
|
+
the exact `process.execPath`, `--check`, and an ordinary workspace file.
|
|
290
|
+
Profile, package-manager, wrapper and custom commands are rejected before
|
|
291
|
+
spawn because RunKit does not yet enforce a filesystem-write and network
|
|
292
|
+
sandbox for them. Full controlled execution and legacy `verify` remain
|
|
293
|
+
available, but their deny rules are not sandbox-equivalent and their receipts
|
|
294
|
+
must not be silently promoted into this Formal accepted-evidence path.
|
|
295
|
+
|
|
296
|
+
## Freeze a dirty SourceCandidateV2
|
|
297
|
+
|
|
298
|
+
Freeze, verify and materialize an immutable candidate without requiring a Git
|
|
299
|
+
commit:
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
owlrunkit candidate freeze --workspace "$PROJECT_ROOT" \
|
|
303
|
+
--run-id "$RUN_ID" --from-lease "$WORK_ITEM_ID" \
|
|
304
|
+
--candidate-id "$CANDIDATE_ID"
|
|
305
|
+
owlrunkit candidate verify --workspace "$PROJECT_ROOT" \
|
|
306
|
+
--candidate "$SOURCE_CANDIDATE"
|
|
307
|
+
owlrunkit candidate materialize --workspace "$PROJECT_ROOT" \
|
|
308
|
+
--candidate "$SOURCE_CANDIDATE" \
|
|
309
|
+
--target-workspace "$CLEAN_WORKSPACE"
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
`SourceCandidateV2` binds the baseline, exact owned-path closure, changed file
|
|
313
|
+
states, payload bytes and source manifest. Materialization is create-only and
|
|
314
|
+
byte-verified. Payload writes and mode changes happen in a sibling staging
|
|
315
|
+
checkout; the clean target is atomically switched only after verification.
|
|
316
|
+
Failures restore the original target, and an interrupted switch resumes from
|
|
317
|
+
the transaction journal. It is release-candidate evidence, not Git or publish
|
|
318
|
+
authority.
|
|
319
|
+
|
|
320
|
+
## Upgrade a self-hosted Core with a successor
|
|
321
|
+
|
|
322
|
+
Use a frozen SourceCandidateV2 and the registered fleet boundary:
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
owlrunkit core-successor plan --workspace "$PROJECT_ROOT" \
|
|
326
|
+
--plan-id "$PLAN_ID" --run-id "$RUN_ID" \
|
|
327
|
+
--from-lease "$WORK_ITEM_ID" --candidate-id "$CANDIDATE_ID"
|
|
328
|
+
owlrunkit core-successor apply --workspace "$PROJECT_ROOT" \
|
|
329
|
+
--plan "$SUCCESSOR_PLAN" --owner-authority "$OWNER_AUTHORITY" \
|
|
330
|
+
--receipt-id "$RECEIPT_ID"
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Planning proves complete path closure, materializes the candidate in a clean
|
|
334
|
+
workspace, recomputes the proposed Core identity, and freezes the registered
|
|
335
|
+
fleet. Apply rediscovers the fleet, supports mixed prior Core identities,
|
|
336
|
+
requires a signed V2 Owner authority from the fixed user trust store, and writes
|
|
337
|
+
append-only per-project migration receipts. Unsigned V1 authorities cannot
|
|
338
|
+
execute. No execution result is silently inherited.
|
|
339
|
+
|
|
340
|
+
## Use two-stage deployment and the remote adapter
|
|
341
|
+
|
|
342
|
+
Separate build acceptance from permission to mutate a machine:
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
owlrunkit deployment prepare --workspace "$PROJECT_ROOT" \
|
|
346
|
+
--run-id "$PREPARE_RUN_ID" --artifact "$ARTIFACT" \
|
|
347
|
+
--owner-decision "$OWNER_DECISION" \
|
|
348
|
+
--media-type application/gzip --output "$PREPARE_RECEIPT"
|
|
349
|
+
owlrunkit deployment execute --workspace "$PROJECT_ROOT" \
|
|
350
|
+
--prepare "$PREPARE_RECEIPT" \
|
|
351
|
+
--owner-decision "$OWNER_DECISION" \
|
|
352
|
+
--owner-authority "$OWNER_AUTHORITY" \
|
|
353
|
+
--manifest "$REMOTE_MANIFEST"
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
`deployment prepare` binds the accepted source artifact, exact build artifact,
|
|
357
|
+
and independent canonical `OwnerDeploymentDecisionV1`, but grants no deploy
|
|
358
|
+
permission. The decision must explicitly state deployment mode, existing
|
|
359
|
+
assets, rollback and data authority, service activation, baseline cut, and
|
|
360
|
+
destructive scope; unset high-risk fields fail closed. A Formal `SourceCandidateV2`,
|
|
361
|
+
including ordinary modifications and deletion-only candidates, remains the
|
|
362
|
+
first-class source artifact through the verification receipt, accepted
|
|
363
|
+
closeout, prepare receipt, and deployment lineage. Legacy DeliveryPacket-based
|
|
364
|
+
accepted runs remain compatible. `deployment execute` requires a separate active execution
|
|
365
|
+
and signed V2 Owner authority binding the full remote intent and exact decision
|
|
366
|
+
hash. Before child creation or lease acquisition, RunKit compiles the decision
|
|
367
|
+
against Goal, prepare receipt, manifest, and authority. A conflict creates no
|
|
368
|
+
executable child and sends no remote command. The standard
|
|
369
|
+
remote deployment adapter binds VM identity, create-only upload, ordered
|
|
370
|
+
before/after stages, exact hashes, first-install versus update mode, deletion
|
|
371
|
+
allowlists and remote smoke. It revalidates execution, lease, preflight, engine,
|
|
372
|
+
and lineage before every stage and records the exact failure stage. Deletion is
|
|
373
|
+
rejected unless both the manifest and the authorized execute execution permit
|
|
374
|
+
it.
|
|
375
|
+
|
|
376
|
+
The default execute command creates and closes the deployment child, goal,
|
|
377
|
+
lease, profile, resource preflight, lineage, and result. Use `--request` with
|
|
378
|
+
manual lineage/output paths only as an advanced compatibility path when another
|
|
379
|
+
controller already owns those exact artifacts.
|
|
380
|
+
|
|
381
|
+
`deployment execute --resume` may resume only the same child under the same
|
|
382
|
+
decision. An explicitly superseding decision closes the old child as blocked
|
|
383
|
+
`closed_superseded`, releases its lease, preserves the prior decision snapshot,
|
|
384
|
+
and reports `businessGoalIncomplete=true` plus
|
|
385
|
+
`nextAllowedAction=plan_replacement_execution`. Do not treat that closeout as
|
|
386
|
+
business completion or reuse the old rollback plan, remote intent, or Owner
|
|
387
|
+
authority for the replacement.
|
|
388
|
+
|
|
389
|
+
For `kind: "builtin_ssh"`, the privileged
|
|
390
|
+
`owlrunkit-remote-helper` is a caller-provided target-VM prerequisite; the npm
|
|
391
|
+
package does not install it. Bind its exact path, protocol, version and fixed
|
|
392
|
+
`execute`/`reconcile` capabilities in the remote manifest.
|
|
393
|
+
`identity_preflight` must return that exact descriptor before upload or any
|
|
394
|
+
later side effect. Treat a mismatch as blocking. This is a built-in SSH client
|
|
395
|
+
and protocol contract, not an out-of-the-box privileged VM deployment.
|
|
281
396
|
|
|
282
397
|
## Manage leases and create delivery without hand-authored JSON
|
|
283
398
|
|
|
284
399
|
Acquire one bounded writer lease with repeated explicit paths:
|
|
285
400
|
|
|
286
401
|
```bash
|
|
287
|
-
|
|
402
|
+
owlrunkit lease acquire \
|
|
288
403
|
--workspace "$PROJECT_ROOT" \
|
|
289
404
|
--run-id "$RUN_ID" \
|
|
290
405
|
--work-item "$WORK_ITEM_ID" \
|
|
@@ -295,10 +410,10 @@ node "$SKILL_ROOT/scripts/runkit-contract/runkit-cli.mjs" lease acquire \
|
|
|
295
410
|
Inspect or release it through the Core instead of editing lease JSON:
|
|
296
411
|
|
|
297
412
|
```bash
|
|
298
|
-
|
|
413
|
+
owlrunkit lease inspect \
|
|
299
414
|
--workspace "$PROJECT_ROOT" --run-id "$RUN_ID"
|
|
300
415
|
|
|
301
|
-
|
|
416
|
+
owlrunkit lease release \
|
|
302
417
|
--workspace "$PROJECT_ROOT" --run-id "$RUN_ID" \
|
|
303
418
|
--work-item "$WORK_ITEM_ID"
|
|
304
419
|
```
|
|
@@ -306,7 +421,7 @@ node "$SKILL_ROOT/scripts/runkit-contract/runkit-cli.mjs" lease release \
|
|
|
306
421
|
After implementation, derive the bounded DeliveryPacket from the active lease:
|
|
307
422
|
|
|
308
423
|
```bash
|
|
309
|
-
|
|
424
|
+
owlrunkit delivery create \
|
|
310
425
|
--workspace "$PROJECT_ROOT" \
|
|
311
426
|
--run-id "$RUN_ID" \
|
|
312
427
|
--from-lease "$WORK_ITEM_ID" \
|
|
@@ -342,7 +457,7 @@ If any path is uncovered, use the declared full profile. Do not interpret an emp
|
|
|
342
457
|
Before reusing evidence, prepare `OwlCodaRunKitCoverageAdoptRequestV1` and run:
|
|
343
458
|
|
|
344
459
|
```bash
|
|
345
|
-
|
|
460
|
+
owlrunkit coverage-adopt \
|
|
346
461
|
--workspace "$PROJECT_ROOT" \
|
|
347
462
|
--run-id "$RUN_ID" \
|
|
348
463
|
--request "$COVERAGE_ADOPT_REQUEST_JSON"
|
|
@@ -362,7 +477,7 @@ After inspecting the source execution, prepare `OwlCodaRunKitResumeRequestV1`
|
|
|
362
477
|
and run:
|
|
363
478
|
|
|
364
479
|
```bash
|
|
365
|
-
|
|
480
|
+
owlrunkit resume \
|
|
366
481
|
--workspace "$PROJECT_ROOT" \
|
|
367
482
|
--run-id "$SOURCE_RUN_ID" \
|
|
368
483
|
--request "$RESUME_REQUEST_JSON"
|
|
@@ -392,7 +507,7 @@ After freezing a DeliveryPacket, prepare
|
|
|
392
507
|
SHA-256, then run:
|
|
393
508
|
|
|
394
509
|
```bash
|
|
395
|
-
|
|
510
|
+
owlrunkit verify-plan \
|
|
396
511
|
--workspace "$PROJECT_ROOT" \
|
|
397
512
|
--run-id "$RUN_ID" \
|
|
398
513
|
--request "$VERIFY_PLAN_REQUEST_JSON"
|
|
@@ -423,7 +538,7 @@ For a model workload, first bind the remaining work to a hashed
|
|
|
423
538
|
`OwlCodaRunKitResourcePreflightRequestV1` and run:
|
|
424
539
|
|
|
425
540
|
```bash
|
|
426
|
-
|
|
541
|
+
owlrunkit resource-preflight \
|
|
427
542
|
--workspace "$PROJECT_ROOT" \
|
|
428
543
|
--run-id "$RUN_ID" \
|
|
429
544
|
--request "$RESOURCE_PREFLIGHT_REQUEST_JSON"
|
|
@@ -468,7 +583,7 @@ labels are not acceptance evidence.
|
|
|
468
583
|
Prepare `OwlCodaRunKitSnapshotRequestV1`, then run:
|
|
469
584
|
|
|
470
585
|
```bash
|
|
471
|
-
|
|
586
|
+
owlrunkit snapshot \
|
|
472
587
|
--workspace "$PROJECT_ROOT" \
|
|
473
588
|
--run-id "$RUN_ID" \
|
|
474
589
|
--request "$SNAPSHOT_REQUEST_JSON"
|
|
@@ -490,7 +605,7 @@ and after the command.
|
|
|
490
605
|
Prepare `OwlCodaRunKitVisualSmokeRequestV1`, then run:
|
|
491
606
|
|
|
492
607
|
```bash
|
|
493
|
-
|
|
608
|
+
owlrunkit visual-smoke \
|
|
494
609
|
--workspace "$PROJECT_ROOT" \
|
|
495
610
|
--run-id "$RUN_ID" \
|
|
496
611
|
--request "$VISUAL_SMOKE_REQUEST_JSON"
|
|
@@ -510,7 +625,7 @@ After every required snapshot passed and the DeliveryPacket is still fresh,
|
|
|
510
625
|
prepare `OwlCodaRunKitFinalizeRequestV1` and run:
|
|
511
626
|
|
|
512
627
|
```bash
|
|
513
|
-
|
|
628
|
+
owlrunkit finalize \
|
|
514
629
|
--workspace "$PROJECT_ROOT" \
|
|
515
630
|
--run-id "$RUN_ID" \
|
|
516
631
|
--request "$FINALIZE_REQUEST_JSON"
|
|
@@ -527,7 +642,7 @@ this command is available.
|
|
|
527
642
|
Close only after consuming the current stage receipt and making an explicit controller decision:
|
|
528
643
|
|
|
529
644
|
```bash
|
|
530
|
-
|
|
645
|
+
owlrunkit closeout \
|
|
531
646
|
--workspace "$PROJECT_ROOT" \
|
|
532
647
|
--run-id "$RUN_ID" \
|
|
533
648
|
--decision accepted \
|
|
@@ -542,20 +657,24 @@ passing gate so failed work still leaves durable truth.
|
|
|
542
657
|
|
|
543
658
|
## Produce ready-for-commit evidence
|
|
544
659
|
|
|
545
|
-
After an accepted closeout, capture fresh project-root snapshots
|
|
546
|
-
`
|
|
660
|
+
After an accepted closeout, capture fresh project-root snapshots and start from
|
|
661
|
+
`assets/templates/ready-for-commit-request.json`. The default
|
|
662
|
+
`OwlCodaRunKitReadyForCommitRequestV2` binds exactly one
|
|
663
|
+
`sourceCandidatePath` or legacy `deliveryPacketPath`, then run:
|
|
547
664
|
|
|
548
665
|
```bash
|
|
549
|
-
|
|
666
|
+
owlrunkit ready-for-commit \
|
|
550
667
|
--workspace "$PROJECT_ROOT" \
|
|
551
668
|
--run-id "$RUN_ID" \
|
|
552
669
|
--request "$READY_REQUEST_JSON"
|
|
553
670
|
```
|
|
554
671
|
|
|
555
|
-
The command revalidates the
|
|
556
|
-
accepted closeout, released leases, and selected root manifests.
|
|
557
|
-
|
|
558
|
-
|
|
672
|
+
The command revalidates the selected source artifact, profile impact, gate
|
|
673
|
+
input, accepted closeout, released leases, and selected root manifests.
|
|
674
|
+
SourceCandidateV2 remains exact across additions, modifications, deletions, and
|
|
675
|
+
renames. V1 DeliveryPacket requests remain supported for historical executions.
|
|
676
|
+
The command writes `READY_FOR_COMMIT_RECEIPT.json` with every repository action
|
|
677
|
+
and `authorizationGranted` set to false. A ready receipt records state; it does
|
|
559
678
|
not authorize Git.
|
|
560
679
|
|
|
561
680
|
## Foreign-project shadow
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"schemaVersion": "OwlCodaRunKitConfigV2",
|
|
3
3
|
"core": {
|
|
4
4
|
"contractVersion": "0.2",
|
|
5
|
-
"coreVersion": "0.
|
|
6
|
-
"coreManifestSha256": "sha256:
|
|
7
|
-
"coreSourceRef": "artifact:sha256:
|
|
5
|
+
"coreVersion": "0.16.1",
|
|
6
|
+
"coreManifestSha256": "sha256:38ac9110e328c38a81db05f1359734ca810b991c9f4de77647f9719f5e6af78b",
|
|
7
|
+
"coreSourceRef": "artifact:sha256:38ac9110e328c38a81db05f1359734ca810b991c9f4de77647f9719f5e6af78b"
|
|
8
8
|
},
|
|
9
9
|
"authorizationPolicy": "external_explicit_authority_required"
|
|
10
10
|
}
|
package/integrations/codex/skills/owlcoda-runkit/assets/templates/ready-for-commit-request.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schemaVersion": "
|
|
3
|
-
"
|
|
2
|
+
"schemaVersion": "OwlCodaRunKitReadyForCommitRequestV2",
|
|
3
|
+
"sourceCandidatePath": ".owlcoda/runkit/executions/replace-with-run-id/source-candidates/replace-with-candidate.json",
|
|
4
4
|
"verificationGateInputPath": ".owlcoda/runkit/executions/replace-with-run-id/verification-receipts/replace-with-receipt/verification-gate-input.json",
|
|
5
5
|
"roots": [
|
|
6
6
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "owlrunkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.1",
|
|
4
4
|
"description": "Project-owned execution, evidence, verification, and recovery for coding agents.",
|
|
5
5
|
"license": "GPL-3.0-or-later",
|
|
6
6
|
"author": "yeemio <owlclaw@163.com>",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"registry": "https://registry.npmjs.org"
|
|
12
12
|
},
|
|
13
13
|
"bin": {
|
|
14
|
-
"owlrunkit": "scripts/runkit-contract/runkit-
|
|
14
|
+
"owlrunkit": "scripts/runkit-contract/runkit-bootstrap.mjs",
|
|
15
15
|
"owlrunkit-attest": "packages/attest/cli/owlcoda-attest.mjs"
|
|
16
16
|
},
|
|
17
17
|
"exports": {
|
|
@@ -36,6 +36,16 @@
|
|
|
36
36
|
"sha256": "sha256:3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986"
|
|
37
37
|
},
|
|
38
38
|
"supportedProducerCoreIdentities": [
|
|
39
|
+
{
|
|
40
|
+
"contractVersion": "0.2",
|
|
41
|
+
"coreVersion": "0.16.1",
|
|
42
|
+
"coreManifestSha256": "sha256:38ac9110e328c38a81db05f1359734ca810b991c9f4de77647f9719f5e6af78b"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"contractVersion": "0.2",
|
|
46
|
+
"coreVersion": "0.16.0",
|
|
47
|
+
"coreManifestSha256": "sha256:320fb1d97b4459d1a14b0b67807dcf2bc6b03970492cb9fb2c6245b17912c81e"
|
|
48
|
+
},
|
|
39
49
|
{
|
|
40
50
|
"contractVersion": "0.2",
|
|
41
51
|
"coreVersion": "0.15.1",
|
|
@@ -18,6 +18,16 @@ import { captureWorkspaceSnapshot } from "./workspace-snapshot.mjs";
|
|
|
18
18
|
export { validQuickReceiptShape } from "./quick-receipt-contract.mjs";
|
|
19
19
|
|
|
20
20
|
export const SUPPORTED_QUICK_CORE_IDENTITIES = Object.freeze([
|
|
21
|
+
{
|
|
22
|
+
contractVersion: "0.2",
|
|
23
|
+
coreVersion: "0.16.1",
|
|
24
|
+
coreManifestSha256: "sha256:38ac9110e328c38a81db05f1359734ca810b991c9f4de77647f9719f5e6af78b",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
contractVersion: "0.2",
|
|
28
|
+
coreVersion: "0.16.0",
|
|
29
|
+
coreManifestSha256: "sha256:320fb1d97b4459d1a14b0b67807dcf2bc6b03970492cb9fb2c6245b17912c81e",
|
|
30
|
+
},
|
|
21
31
|
{
|
|
22
32
|
contractVersion: "0.2",
|
|
23
33
|
coreVersion: "0.15.1",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"schemaVersion": "OwlCodaRunKitRegistryReleasePolicyV1",
|
|
3
3
|
"status": "release_candidate_unpublished",
|
|
4
4
|
"packageName": "owlrunkit",
|
|
5
|
-
"candidateVersion": "0.
|
|
5
|
+
"candidateVersion": "0.16.1",
|
|
6
6
|
"registry": "https://registry.npmjs.org",
|
|
7
7
|
"registryRequiredBeforeAdoption": true,
|
|
8
8
|
"exactVersionRequired": true,
|
|
@@ -21,7 +21,13 @@
|
|
|
21
21
|
"symlink",
|
|
22
22
|
"workspace"
|
|
23
23
|
],
|
|
24
|
-
"currentPublishedRelease":
|
|
24
|
+
"currentPublishedRelease": {
|
|
25
|
+
"packageName": "owlrunkit",
|
|
26
|
+
"version": "0.16.0",
|
|
27
|
+
"shasum": "bab651b0e10111a7a179a3a58917a8e90e43c35f",
|
|
28
|
+
"integrity": "sha512-qrlJueVypcetnFXAEHhDcYlZvpJAnTsbtLu9Rtp9SXNekAAD/rtBM8p2GqM5dOc1ERojixc3ipQkDGw6T7IR1A==",
|
|
29
|
+
"tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.16.0.tgz"
|
|
30
|
+
},
|
|
25
31
|
"registryRelease": null,
|
|
26
32
|
"registryEvidenceMustBeExternal": true,
|
|
27
33
|
"registryEvidenceSchemaVersion": "OwlCodaRunKitRegistryReleaseEvidenceV1",
|