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