owlrunkit 0.18.3 → 0.18.4

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.
Files changed (29) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +125 -52
  3. package/docs/architecture/OWLCODA_RUNKIT_0184_EXTERNAL_DELIVERY_INTAKE_PRODUCT_DECISION_20260812.md +209 -0
  4. package/docs/architecture/OWLCODA_RUNKIT_USAGE_MODE_SELECTION_PRODUCT_DECISION_20260811.md +8 -7
  5. package/integrations/codex/skills/owlcoda-runkit/SKILL.md +109 -77
  6. package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
  7. package/package.json +1 -1
  8. package/packages/attest/distribution-manifest-v1.json +5 -0
  9. package/packages/attest/src/quick-receipt-contract.mjs +3 -3
  10. package/packages/attest/src/quick.mjs +5 -0
  11. package/packages/attest/src/workspace-snapshot.mjs +10 -1
  12. package/registry-release-policy-v1.json +5 -5
  13. package/sbom.spdx.json +5 -5
  14. package/scripts/runkit-contract/assurance-router.mjs +25 -6
  15. package/scripts/runkit-contract/core-contract.mjs +9 -1
  16. package/scripts/runkit-contract/onboarding-doctor.mjs +1 -1
  17. package/scripts/runkit-contract/profile-onboarding.mjs +263 -15
  18. package/scripts/runkit-contract/project-cli-resolver.mjs +6 -0
  19. package/scripts/runkit-contract/project-external-delivery.mjs +707 -0
  20. package/scripts/runkit-contract/quick-verify.mjs +1 -1
  21. package/scripts/runkit-contract/runkit-bootstrap.mjs +6 -1
  22. package/scripts/runkit-contract/runkit-cli.mjs +278 -140
  23. package/scripts/runkit-contract/schemas/assurance-route-v2.schema.json +26 -0
  24. package/scripts/runkit-contract/schemas/profile-detection-v3.schema.json +170 -0
  25. package/scripts/runkit-contract/schemas/team-project-event-v3.schema.json +146 -0
  26. package/scripts/runkit-contract/schemas/team-project-status-v2.schema.json +85 -0
  27. package/scripts/runkit-contract/schemas/usage-mode-recommendation-v2.schema.json +136 -0
  28. package/scripts/runkit-contract/team-project.mjs +477 -15
  29. package/scripts/runkit-contract/usage-mode.mjs +28 -7
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  name: owlcoda-runkit
3
- description: Run receipt-backed, project-owned work with OwlCoda RunKit. Use when Codex needs to coordinate a large multi-Agent project, show per-Agent progress, manage dependencies or decisions, atomically return failed work for evidence-linked rework, record intentionally deferred verification without repeating covered tests, hand work to another Agent, recover a blank-session next action, initialize or inspect `.owlcoda/runkit/`, plan bounded work with engine pins and leases, capture exact verification evidence, close an execution, produce a ready-for-commit receipt, or perform a read-only foreign-project shadow without widening Git or release authority.
3
+ description: Run receipt-backed, project-owned work with OwlCoda RunKit. Use when Codex needs to coordinate a large multi-Agent project, show per-Agent progress, manage dependencies or decisions, atomically return failed work for evidence-linked rework, import an external DeliveryPacket from a frozen target worktree, record intentionally deferred verification without repeating covered tests, hand work to another Agent, recover a blank-session next action, initialize or inspect `.owlcoda/runkit/`, plan bounded work with engine pins and leases, capture exact verification evidence, close an execution, produce a ready-for-commit receipt, or perform a read-only foreign-project shadow without widening Git or release authority.
4
4
  ---
5
5
 
6
6
  # OwlCoda RunKit
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
- Bundled release: standalone `owlrunkit@0.18.3`, bundling Contract `0.2` and
11
- Core `0.18.3` with manifest
12
- `sha256:cc7a923649592084150828f24f0d90f280af92514bafdbc4999f4015b3175d5c`.
13
- The published `owlrunkit@0.18.2` package is the trusted prior for rollback;
10
+ Bundled release: standalone `owlrunkit@0.18.4`, bundling Contract `0.2` and
11
+ Core `0.18.4` with manifest
12
+ `sha256:372d4c247e4b40b0fd2f3fe0f5bf928548095bfb7e2e92e9ac66790e2717f77d`.
13
+ The published `owlrunkit@0.18.3` package is the trusted prior for rollback;
14
14
  verify exact official npm registry provenance before adoption. The immutable
15
15
  rollback baseline for the prior release is `owlrunkit@0.16.1` with SHA-1
16
16
  `1bc119d24879bdd8959af16b364af55ca9d61ea9` and canonical npm tarball URL
@@ -26,7 +26,9 @@ the user to operate the CLI when the request and authority are already clear.
26
26
 
27
27
  The normal mainline is `init`, `assign`, `checkpoint`, `handoff`,
28
28
  `reject-and-return`, `decision`, `verification`, `integrate`, `status`, and
29
- `takeover`. After a project
29
+ `takeover`. External source lanes use `target-snapshot` and `import-delivery`
30
+ without installing RunKit or writing control artifacts into the frozen target.
31
+ After a project
30
32
  derives completed, `successor` is the bounded lifecycle step. `init` accepts one project definition
31
33
  JSON; subsequent actions use direct typed flags. Normal users do not author
32
34
  request, event, receipt, or hash JSON. The legacy `--request <event.json>` form
@@ -45,7 +47,13 @@ remains available for existing automation and compatibility.
45
47
  reject-and-return` event. Preserve the failed checkpoint, bind the review
46
48
  evidence, create the rework assignment, and never rewrite failure as active.
47
49
  - "Continue/take over": build `project takeover` for the current Agent and use
48
- its bounded next action and evidence refs.
50
+ its bounded next action and evidence refs. Report stale handoffs as obsolete,
51
+ and use the projected current external candidate plus its predecessor delta
52
+ instead of reconstructing source identity from chat.
53
+ - "Import Luna/Cursor delivery": capture the target entry before source work
54
+ when possible, then verify and import its exact DeliveryPacket. Without the
55
+ entry snapshot, report `candidate_only`; never claim an entry-to-candidate
56
+ overlay proof that was not captured.
49
57
  - "Start the next project": only after status derives `overall=completed`,
50
58
  invoke `project successor` with a different V1 definition and explicit
51
59
  transition ID. Preserve the content-addressed archive and journal; never
@@ -70,39 +78,53 @@ Completion requires evidence. If an assignment binds an execution, derive its
70
78
  state from the closeout and lease rather than trusting the Agent's claim.
71
79
 
72
80
  ```bash
73
- owlrunkit project init --workspace "$PROJECT_ROOT" --definition "$PROJECT_JSON"
74
- owlrunkit project assign --workspace "$PROJECT_ROOT" --assignment-id "$ASSIGNMENT_ID" \
81
+ npx --no-install owlrunkit project init --workspace "$PROJECT_ROOT" --definition "$PROJECT_JSON"
82
+ npx --no-install owlrunkit project assign --workspace "$PROJECT_ROOT" --assignment-id "$ASSIGNMENT_ID" \
75
83
  --at "$OCCURRED_AT" --work-item "$WORK_ITEM_ID" --agent "$AGENT_ID"
76
- owlrunkit project checkpoint --workspace "$PROJECT_ROOT" --checkpoint-id "$CHECKPOINT_ID" \
84
+ npx --no-install owlrunkit project checkpoint --workspace "$PROJECT_ROOT" --checkpoint-id "$CHECKPOINT_ID" \
77
85
  --at "$OCCURRED_AT" --assignment-id "$ASSIGNMENT_ID" --work-item "$WORK_ITEM_ID" \
78
86
  --state active --summary "$SUMMARY" --next "$NEXT_ACTION"
79
- owlrunkit project handoff --workspace "$PROJECT_ROOT" --handoff-id "$HANDOFF_ID" \
87
+ npx --no-install owlrunkit project handoff --workspace "$PROJECT_ROOT" --handoff-id "$HANDOFF_ID" \
80
88
  --at "$OCCURRED_AT" --assignment-id "$ASSIGNMENT_ID" --work-item "$WORK_ITEM_ID" \
81
89
  --from-agent "$AGENT_ID" --to-agent "$SUCCESSOR_AGENT_ID" \
82
90
  --summary "$SUMMARY" --next "$NEXT_ACTION" --evidence "$EVIDENCE_REF"
83
- owlrunkit project reject-and-return --workspace "$PROJECT_ROOT" \
91
+ npx --no-install owlrunkit project reject-and-return --workspace "$PROJECT_ROOT" \
84
92
  --rework-id "$REWORK_ID" --at "$OCCURRED_AT" --work-item "$WORK_ITEM_ID" \
85
93
  --reviewer-agent "$REVIEWER_AGENT_ID" --to-agent "$AGENT_ID" \
86
94
  --reason "$REJECTION_REASON" --next "$NEXT_ACTION" --evidence "$EVIDENCE_REF"
87
- owlrunkit project decision --workspace "$PROJECT_ROOT" --resolve \
95
+ npx --no-install owlrunkit project decision --workspace "$PROJECT_ROOT" --resolve \
88
96
  --decision-id "$DECISION_ID" --at "$OCCURRED_AT" --resolution "$RESOLUTION" \
89
97
  --rationale "$RATIONALE" --evidence "$EVIDENCE_REF"
90
- owlrunkit project verification --workspace "$PROJECT_ROOT" --defer \
98
+ npx --no-install owlrunkit project verification --workspace "$PROJECT_ROOT" --defer \
91
99
  --verification-id "$VERIFICATION_ID" --at "$OCCURRED_AT" \
92
100
  --work-item "$WORK_ITEM_ID" --owner-agent "$AGENT_ID" \
93
101
  --check "$CHECK_ID" --reason "$REASON" --due-gate "$GATE_ID"
94
- owlrunkit project verification --workspace "$PROJECT_ROOT" --close \
102
+ npx --no-install owlrunkit project verification --workspace "$PROJECT_ROOT" --close \
95
103
  --verification-id "$VERIFICATION_ID" --at "$OCCURRED_AT" \
96
104
  --disposition verified --summary "$SUMMARY" --evidence "$EVIDENCE_REF"
97
- owlrunkit project integrate --workspace "$PROJECT_ROOT" --gate "$GATE_ID" \
105
+ npx --no-install owlrunkit project integrate --workspace "$PROJECT_ROOT" --gate "$GATE_ID" \
98
106
  --at "$OCCURRED_AT" --summary "$SUMMARY" --evidence "$EVIDENCE_REF"
99
- owlrunkit project status --workspace "$PROJECT_ROOT" --json
100
- owlrunkit project takeover --workspace "$PROJECT_ROOT" --agent "$AGENT_ID" --json
101
- owlrunkit project successor --workspace "$PROJECT_ROOT" \
107
+ npx --no-install owlrunkit project status --workspace "$PROJECT_ROOT" --json
108
+ npx --no-install owlrunkit project takeover --workspace "$PROJECT_ROOT" --agent "$AGENT_ID" --json
109
+ npx --no-install owlrunkit project successor --workspace "$PROJECT_ROOT" \
102
110
  --transition-id "$TRANSITION_ID" --at "$OCCURRED_AT" \
103
111
  --definition "$NEXT_PROJECT_JSON" --reason "$SUCCESSOR_REASON" --json
112
+ npx --no-install owlrunkit project target-snapshot --workspace "$PROJECT_ROOT" \
113
+ --snapshot-id "$ENTRY_SNAPSHOT_ID" --at "$OCCURRED_AT" \
114
+ --work-item "$WORK_ITEM_ID" --target-workspace "$TARGET_WORKTREE" --apply
115
+ npx --no-install owlrunkit project import-delivery --workspace "$PROJECT_ROOT" \
116
+ --delivery-id "$DELIVERY_ID" --at "$OCCURRED_AT" \
117
+ --assignment-id "$ASSIGNMENT_ID" --work-item "$WORK_ITEM_ID" \
118
+ --producer "$AGENT_ID" --target-workspace "$TARGET_WORKTREE" \
119
+ --packet "$DELIVERY_PACKET" --entry-snapshot "$ENTRY_SNAPSHOT_ID" --apply
104
120
  ```
105
121
 
122
+ Controller and target must be disjoint real directories, and the target must
123
+ be its exact Git worktree root. Import rechecks packet bytes and stable target
124
+ identity, including both sides of renames. Do not use legacy raw project event
125
+ requests to represent an external delivery; Event V3 is admitted only through
126
+ `project import-delivery`.
127
+
106
128
  `project successor` accepts only a derived-completed active project and a
107
129
  different fresh V1 identity. It archives the exact prior bytes, never borrows
108
130
  old events, and resumes only an identical durable transition. Treat symlinks,
@@ -149,11 +171,16 @@ Git, release, deployment, or production action.
149
171
  4. Never include `.owlcoda/runkit/**` in delivery changed files, profile rules or lease owned paths.
150
172
  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.
151
173
 
152
- Use the `owlrunkit` command for normal work. Its bootstrap resolves the
174
+ Use `npx --no-install owlrunkit` for every command after the exact project
175
+ dependency is installed. A bare `owlrunkit` may resolve an older global binary
176
+ that cannot trust a newer project Core, so do not use it for project status,
177
+ verification, or Project Driver actions. The package bootstrap resolves the
153
178
  project's exact locally bound OwlRunKit CLI before interpreting project control
154
- state. The currently installed package handles bootstrap-only operations such
179
+ state. A current package may still be used for bootstrap-only operations such
155
180
  as initialization, exact adoption and Core-successor migration. Do not bypass
156
- that resolver with a global CLI or a copied Skill Core. Project-local
181
+ the project-local entry with a global CLI or a copied/shared Skill Core. If a
182
+ process-level Skill declares an older release, use this installed package Skill
183
+ and report the activation drift; do not silently apply the old rules. Project-local
157
184
  delegation requires the canonical official npm tarball URL and SHA-512 SRI,
158
185
  an installed Core identity trusted by the current bootstrap, and the same Core
159
186
  identity in project Config; any mismatch fails closed.
@@ -163,9 +190,9 @@ below has no CLI entry.
163
190
  ## Initialize and inspect
164
191
 
165
192
  ```bash
166
- owlrunkit init --workspace "$PROJECT_ROOT"
167
- owlrunkit inspect --json --workspace "$PROJECT_ROOT"
168
- owlrunkit status --workspace "$PROJECT_ROOT"
193
+ npx --no-install owlrunkit init --workspace "$PROJECT_ROOT"
194
+ npx --no-install owlrunkit inspect --json --workspace "$PROJECT_ROOT"
195
+ npx --no-install owlrunkit status --workspace "$PROJECT_ROOT"
169
196
  ```
170
197
 
171
198
  Initialization may write only `.owlcoda/runkit/`. It must not modify business source.
@@ -204,40 +231,41 @@ repair surfaces. OwlRunKit uses its own version lifecycle: the standalone
204
231
  For one low-risk exact command, use the Core v0.13 Quick path:
205
232
 
206
233
  ```bash
207
- owlrunkit quick-verify \
234
+ npx --no-install owlrunkit quick-verify \
208
235
  --workspace "$PROJECT_ROOT" -- "$ABSOLUTE_EXECUTABLE" "arg-one"
209
236
 
210
- owlrunkit quick-verify \
237
+ npx --no-install owlrunkit quick-verify \
211
238
  --workspace "$PROJECT_ROOT" --stdin-file "$SCRIPT_FILE" --attest \
212
239
  -- ssh test-host /bin/sh
213
240
 
214
- owlrunkit quick-attest \
241
+ npx --no-install owlrunkit quick-attest \
215
242
  --workspace "$PROJECT_ROOT" --receipt "$QUICK_RECEIPT"
216
243
 
217
- owlrunkit quick-metrics \
218
- --workspace "$PROJECT_ROOT" --local
244
+ npx --no-install owlrunkit quick-metrics \
245
+ --workspace "$PROJECT_ROOT"
219
246
 
220
- owlrunkit quick-metrics \
221
- --workspace "$PROJECT_ROOT" --local --verbose
247
+ npx --no-install owlrunkit quick-metrics \
248
+ --workspace "$PROJECT_ROOT" --verbose
222
249
  ```
223
250
 
224
251
  `--stdin-file` copies and SHA-256-binds at most 1 MiB of regular non-symlink
225
252
  input before supplying the stored bytes as exact stdin. `--attest` returns the
226
253
  separate attestation object in the same high-level invocation. Quick receipts
227
254
  remain `captured_verification`, not Formal acceptance. Metrics are aggregate by
228
- default; `--verbose` adds receipt paths. Both forms are local-only and perform
229
- no telemetry or network request.
255
+ default; `--verbose` adds receipt paths. Metrics are always local-only and
256
+ perform no telemetry or network request; the former `--local` flag remains an
257
+ accepted compatibility no-op.
230
258
 
231
259
  Core v0.13 also adds deterministic repair and exact-byte offline transport:
232
260
 
233
261
  ```bash
234
- owlrunkit repair \
262
+ npx --no-install owlrunkit repair \
235
263
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID"
236
264
 
237
- owlrunkit offline-export \
265
+ npx --no-install owlrunkit offline-export \
238
266
  --workspace "$PROJECT_ROOT" --receipt "$RECEIPT" --output "$BUNDLE"
239
267
 
240
- owlrunkit offline-import \
268
+ npx --no-install owlrunkit offline-import \
241
269
  --workspace "$PROJECT_ROOT" --bundle "$BUNDLE" --store "$OFFLINE_STORE"
242
270
  ```
243
271
 
@@ -272,7 +300,7 @@ loaded into the current session and grants no update authority.
272
300
  The install manifest binds every Skill, Core, contract and attest file.
273
301
  Unknown installed drift fails closed instead of being overwritten. A changed
274
302
  process-wide Skill requires a registered complete fleet. Register each coverage
275
- root once with `owlrunkit fleet register-root --fleet-root <absolute-root>`.
303
+ root once with `npx --no-install owlrunkit fleet register-root --fleet-root <absolute-root>`.
276
304
  Inspect and correct a broad or stale registry through the official
277
305
  `fleet inspect-registry` and evidence-bound `fleet replace-registry` workflow;
278
306
  never hand-edit the registry. Replacement is dry-runnable and append-only
@@ -330,11 +358,11 @@ made inactive 0.13/0.14 ConfigV2 upgrades and exact rollback safe. Historical
330
358
  projects, profiles, executions, packets, receipts and closeouts remain readable.
331
359
 
332
360
  ```bash
333
- owlrunkit doctor --workspace "$PROJECT_ROOT"
334
- owlrunkit profiles detect --workspace "$PROJECT_ROOT" --dry-run
335
- owlrunkit profiles validate --workspace "$PROJECT_ROOT"
336
- owlrunkit profiles impact --workspace "$PROJECT_ROOT" --changed path/to/file
337
- owlrunkit adopt --workspace "$PROJECT_ROOT" --exact owlrunkit@0.15.1
361
+ npx --no-install owlrunkit doctor --workspace "$PROJECT_ROOT"
362
+ npx --no-install owlrunkit profiles detect --workspace "$PROJECT_ROOT" --dry-run
363
+ npx --no-install owlrunkit profiles validate --workspace "$PROJECT_ROOT"
364
+ npx --no-install owlrunkit profiles impact --workspace "$PROJECT_ROOT" --changed path/to/file
365
+ npx --no-install owlrunkit adopt --workspace "$PROJECT_ROOT" --exact owlrunkit@0.15.1
338
366
  ```
339
367
 
340
368
  Exact adoption requires the official npm registry `shasum`, `integrity` and
@@ -353,15 +381,15 @@ authority.
353
381
  Core 0.16 makes the safe path the ordinary path without weakening its gates:
354
382
 
355
383
  ```bash
356
- owlrunkit fleet register-root --fleet-root /absolute/declared-projects
357
- owlrunkit fleet discover
358
- owlrunkit profiles detect --workspace "$PROJECT_ROOT" --dry-run
359
- owlrunkit profiles detect --workspace "$PROJECT_ROOT" --apply
360
- owlrunkit profiles reconcile --workspace "$PROJECT_ROOT" --dry-run
361
- owlrunkit mode recommend --workspace "$PROJECT_ROOT"
362
- owlrunkit assurance route --workspace "$PROJECT_ROOT" \
384
+ npx --no-install owlrunkit fleet register-root --fleet-root /absolute/declared-projects
385
+ npx --no-install owlrunkit fleet discover
386
+ npx --no-install owlrunkit profiles detect --workspace "$PROJECT_ROOT" --dry-run
387
+ npx --no-install owlrunkit profiles detect --workspace "$PROJECT_ROOT" --apply
388
+ npx --no-install owlrunkit profiles reconcile --workspace "$PROJECT_ROOT" --dry-run
389
+ npx --no-install owlrunkit mode recommend --workspace "$PROJECT_ROOT"
390
+ npx --no-install owlrunkit assurance route --workspace "$PROJECT_ROOT" \
363
391
  --request "$ASSURANCE_REQUEST_JSON"
364
- owlrunkit status --workspace "$PROJECT_ROOT"
392
+ npx --no-install owlrunkit status --workspace "$PROJECT_ROOT"
365
393
  ```
366
394
 
367
395
  Fleet discovery is complete only within all registered coverage roots, an
@@ -372,14 +400,18 @@ adopts only unambiguous high-confidence, project-local regular-file launchers;
372
400
  `profiles reconcile` previews or atomically updates an existing profile set
373
401
  with a rollback receipt. Low-confidence candidates remain untouched. Lock-bound npm and exact
374
402
  project-installed pnpm, Yarn, and Bun launchers are supported; PATH-only
375
- package managers remain review-required. `assurance route`
403
+ package managers remain review-required. A V2 dry-run reports
404
+ `profiles_insufficient` when real Git-visible source paths remain uncovered or
405
+ there is no actionable primary. Use its `minimalSuggestedProfile` and copyable
406
+ `repairCommands`; do not invent absent conventional directories as blockers.
407
+ `assurance route`
376
408
  deterministically selects No RunKit, Quick Verification or Formal Delivery
377
409
  from explicit risk facts and fails closed to Formal when required facts are
378
410
  missing.
379
411
 
380
412
  ## Choose continuity and assurance independently
381
413
 
382
- Start with `owlrunkit mode recommend --workspace "$PROJECT_ROOT"`. The five
414
+ Start with `npx --no-install owlrunkit mode recommend --workspace "$PROJECT_ROOT"`. The five
383
415
  user-facing modes are presets over two independent dimensions:
384
416
 
385
417
  - continuity: `none | project_driver`
@@ -419,17 +451,17 @@ incremental checks, then finish once:
419
451
  ```bash
420
452
  NODE_BIN="$(node -p 'process.execPath')"
421
453
 
422
- owlrunkit formal start \
454
+ npx --no-install owlrunkit formal start \
423
455
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID" --goal "$GOAL_JSON" \
424
456
  --work-item "$WORK_ITEM_ID" \
425
457
  --owned-path "src/exact-file.ts" --owned-path "tests/feature/**"
426
458
 
427
- owlrunkit formal check \
459
+ npx --no-install owlrunkit formal check \
428
460
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID" \
429
461
  --from-lease "$WORK_ITEM_ID" --check-id "$CHECK_ID" \
430
462
  --cwd "." -- "$NODE_BIN" --check "src/exact-file.ts"
431
463
 
432
- owlrunkit formal finish \
464
+ npx --no-install owlrunkit formal finish \
433
465
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID" --decision accepted
434
466
  ```
435
467
 
@@ -446,7 +478,7 @@ Formal accepted evidence admits the built-in Node syntax check and real project
446
478
  commands executed through a Verification Envelope:
447
479
 
448
480
  ```bash
449
- owlrunkit formal check \
481
+ npx --no-install owlrunkit formal check \
450
482
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID" \
451
483
  --work-item "$WORK_ITEM_ID" --check-id "$CHECK_ID" \
452
484
  --envelope "$VERIFICATION_ENVELOPE_JSON"
@@ -467,12 +499,12 @@ Freeze, verify and materialize an immutable candidate without requiring a Git
467
499
  commit:
468
500
 
469
501
  ```bash
470
- owlrunkit candidate freeze --workspace "$PROJECT_ROOT" \
502
+ npx --no-install owlrunkit candidate freeze --workspace "$PROJECT_ROOT" \
471
503
  --run-id "$RUN_ID" --from-lease "$WORK_ITEM_ID" \
472
504
  --candidate-id "$CANDIDATE_ID"
473
- owlrunkit candidate verify --workspace "$PROJECT_ROOT" \
505
+ npx --no-install owlrunkit candidate verify --workspace "$PROJECT_ROOT" \
474
506
  --candidate "$SOURCE_CANDIDATE"
475
- owlrunkit candidate materialize --workspace "$PROJECT_ROOT" \
507
+ npx --no-install owlrunkit candidate materialize --workspace "$PROJECT_ROOT" \
476
508
  --candidate "$SOURCE_CANDIDATE" \
477
509
  --target-workspace "$CLEAN_WORKSPACE"
478
510
  ```
@@ -490,10 +522,10 @@ authority.
490
522
  Use a frozen SourceCandidateV2 and the registered fleet boundary:
491
523
 
492
524
  ```bash
493
- owlrunkit core-successor plan --workspace "$PROJECT_ROOT" \
525
+ npx --no-install owlrunkit core-successor plan --workspace "$PROJECT_ROOT" \
494
526
  --plan-id "$PLAN_ID" --run-id "$RUN_ID" \
495
527
  --from-lease "$WORK_ITEM_ID" --candidate-id "$CANDIDATE_ID"
496
- owlrunkit core-successor apply --workspace "$PROJECT_ROOT" \
528
+ npx --no-install owlrunkit core-successor apply --workspace "$PROJECT_ROOT" \
497
529
  --plan "$SUCCESSOR_PLAN" --owner-authority "$OWNER_AUTHORITY" \
498
530
  --receipt-id "$RECEIPT_ID"
499
531
  ```
@@ -510,11 +542,11 @@ execute. No execution result is silently inherited.
510
542
  Separate build acceptance from permission to mutate a machine:
511
543
 
512
544
  ```bash
513
- owlrunkit deployment prepare --workspace "$PROJECT_ROOT" \
545
+ npx --no-install owlrunkit deployment prepare --workspace "$PROJECT_ROOT" \
514
546
  --run-id "$PREPARE_RUN_ID" --artifact "$ARTIFACT" \
515
547
  --owner-decision "$OWNER_DECISION" \
516
548
  --media-type application/gzip --output "$PREPARE_RECEIPT"
517
- owlrunkit deployment execute --workspace "$PROJECT_ROOT" \
549
+ npx --no-install owlrunkit deployment execute --workspace "$PROJECT_ROOT" \
518
550
  --prepare "$PREPARE_RECEIPT" \
519
551
  --owner-decision "$OWNER_DECISION" \
520
552
  --owner-authority "$OWNER_AUTHORITY" \
@@ -567,7 +599,7 @@ and protocol contract, not an out-of-the-box privileged VM deployment.
567
599
  Acquire one bounded writer lease with repeated explicit paths:
568
600
 
569
601
  ```bash
570
- owlrunkit lease acquire \
602
+ npx --no-install owlrunkit lease acquire \
571
603
  --workspace "$PROJECT_ROOT" \
572
604
  --run-id "$RUN_ID" \
573
605
  --work-item "$WORK_ITEM_ID" \
@@ -578,10 +610,10 @@ owlrunkit lease acquire \
578
610
  Inspect or release it through the Core instead of editing lease JSON:
579
611
 
580
612
  ```bash
581
- owlrunkit lease inspect \
613
+ npx --no-install owlrunkit lease inspect \
582
614
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID"
583
615
 
584
- owlrunkit lease release \
616
+ npx --no-install owlrunkit lease release \
585
617
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID" \
586
618
  --work-item "$WORK_ITEM_ID"
587
619
  ```
@@ -589,7 +621,7 @@ owlrunkit lease release \
589
621
  After implementation, derive the bounded DeliveryPacket from the active lease:
590
622
 
591
623
  ```bash
592
- owlrunkit delivery create \
624
+ npx --no-install owlrunkit delivery create \
593
625
  --workspace "$PROJECT_ROOT" \
594
626
  --run-id "$RUN_ID" \
595
627
  --from-lease "$WORK_ITEM_ID" \
@@ -625,7 +657,7 @@ If any path is uncovered, use the declared full profile. Do not interpret an emp
625
657
  Before reusing evidence, prepare `OwlCodaRunKitCoverageAdoptRequestV1` and run:
626
658
 
627
659
  ```bash
628
- owlrunkit coverage-adopt \
660
+ npx --no-install owlrunkit coverage-adopt \
629
661
  --workspace "$PROJECT_ROOT" \
630
662
  --run-id "$RUN_ID" \
631
663
  --request "$COVERAGE_ADOPT_REQUEST_JSON"
@@ -645,7 +677,7 @@ After inspecting the source execution, prepare `OwlCodaRunKitResumeRequestV1`
645
677
  and run:
646
678
 
647
679
  ```bash
648
- owlrunkit resume \
680
+ npx --no-install owlrunkit resume \
649
681
  --workspace "$PROJECT_ROOT" \
650
682
  --run-id "$SOURCE_RUN_ID" \
651
683
  --request "$RESUME_REQUEST_JSON"
@@ -675,7 +707,7 @@ After freezing a DeliveryPacket, prepare
675
707
  SHA-256, then run:
676
708
 
677
709
  ```bash
678
- owlrunkit verify-plan \
710
+ npx --no-install owlrunkit verify-plan \
679
711
  --workspace "$PROJECT_ROOT" \
680
712
  --run-id "$RUN_ID" \
681
713
  --request "$VERIFY_PLAN_REQUEST_JSON"
@@ -706,7 +738,7 @@ For a model workload, first bind the remaining work to a hashed
706
738
  `OwlCodaRunKitResourcePreflightRequestV1` and run:
707
739
 
708
740
  ```bash
709
- owlrunkit resource-preflight \
741
+ npx --no-install owlrunkit resource-preflight \
710
742
  --workspace "$PROJECT_ROOT" \
711
743
  --run-id "$RUN_ID" \
712
744
  --request "$RESOURCE_PREFLIGHT_REQUEST_JSON"
@@ -751,7 +783,7 @@ labels are not acceptance evidence.
751
783
  Prepare `OwlCodaRunKitSnapshotRequestV1`, then run:
752
784
 
753
785
  ```bash
754
- owlrunkit snapshot \
786
+ npx --no-install owlrunkit snapshot \
755
787
  --workspace "$PROJECT_ROOT" \
756
788
  --run-id "$RUN_ID" \
757
789
  --request "$SNAPSHOT_REQUEST_JSON"
@@ -773,7 +805,7 @@ and after the command.
773
805
  Prepare `OwlCodaRunKitVisualSmokeRequestV1`, then run:
774
806
 
775
807
  ```bash
776
- owlrunkit visual-smoke \
808
+ npx --no-install owlrunkit visual-smoke \
777
809
  --workspace "$PROJECT_ROOT" \
778
810
  --run-id "$RUN_ID" \
779
811
  --request "$VISUAL_SMOKE_REQUEST_JSON"
@@ -793,7 +825,7 @@ After every required snapshot passed and the DeliveryPacket is still fresh,
793
825
  prepare `OwlCodaRunKitFinalizeRequestV1` and run:
794
826
 
795
827
  ```bash
796
- owlrunkit finalize \
828
+ npx --no-install owlrunkit finalize \
797
829
  --workspace "$PROJECT_ROOT" \
798
830
  --run-id "$RUN_ID" \
799
831
  --request "$FINALIZE_REQUEST_JSON"
@@ -810,7 +842,7 @@ this command is available.
810
842
  Close only after consuming the current stage receipt and making an explicit controller decision:
811
843
 
812
844
  ```bash
813
- owlrunkit closeout \
845
+ npx --no-install owlrunkit closeout \
814
846
  --workspace "$PROJECT_ROOT" \
815
847
  --run-id "$RUN_ID" \
816
848
  --decision accepted \
@@ -831,7 +863,7 @@ After an accepted closeout, capture fresh project-root snapshots and start from
831
863
  `sourceCandidatePath` or legacy `deliveryPacketPath`, then run:
832
864
 
833
865
  ```bash
834
- owlrunkit ready-for-commit \
866
+ npx --no-install owlrunkit ready-for-commit \
835
867
  --workspace "$PROJECT_ROOT" \
836
868
  --run-id "$RUN_ID" \
837
869
  --request "$READY_REQUEST_JSON"
@@ -2,9 +2,9 @@
2
2
  "schemaVersion": "OwlCodaRunKitConfigV2",
3
3
  "core": {
4
4
  "contractVersion": "0.2",
5
- "coreVersion": "0.18.3",
6
- "coreManifestSha256": "sha256:cc7a923649592084150828f24f0d90f280af92514bafdbc4999f4015b3175d5c",
7
- "coreSourceRef": "artifact:sha256:cc7a923649592084150828f24f0d90f280af92514bafdbc4999f4015b3175d5c"
5
+ "coreVersion": "0.18.4",
6
+ "coreManifestSha256": "sha256:372d4c247e4b40b0fd2f3fe0f5bf928548095bfb7e2e92e9ac66790e2717f77d",
7
+ "coreSourceRef": "artifact:sha256:372d4c247e4b40b0fd2f3fe0f5bf928548095bfb7e2e92e9ac66790e2717f77d"
8
8
  },
9
9
  "authorizationPolicy": "external_explicit_authority_required"
10
10
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "owlrunkit",
3
- "version": "0.18.3",
3
+ "version": "0.18.4",
4
4
  "description": "Project Driver for cross-Agent project continuity and progression; execution, evidence, verification, and recovery are the underlying trust substrate.",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "author": "yeemio <owlclaw@163.com>",
@@ -37,6 +37,11 @@
37
37
  "sha256": "sha256:3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986"
38
38
  },
39
39
  "supportedProducerCoreIdentities": [
40
+ {
41
+ "contractVersion": "0.2",
42
+ "coreVersion": "0.18.4",
43
+ "coreManifestSha256": "sha256:372d4c247e4b40b0fd2f3fe0f5bf928548095bfb7e2e92e9ac66790e2717f77d"
44
+ },
40
45
  {
41
46
  "contractVersion": "0.2",
42
47
  "coreVersion": "0.18.3",
@@ -54,7 +54,7 @@ function validCoreIdentity(value) {
54
54
  && isSha256Ref(value.coreManifestSha256);
55
55
  }
56
56
 
57
- function validSnapshot(value) {
57
+ export function validWorkspaceSnapshotShape(value) {
58
58
  if (!hasExactKeys(value, SNAPSHOT_REQUIRED_KEYS)) return false;
59
59
  if (
60
60
  value.schemaVersion !== "OwlCodaWorkspaceSnapshotV1"
@@ -122,8 +122,8 @@ export function validQuickReceiptShape(receipt) {
122
122
  || receipt.assurance !== "captured_verification"
123
123
  || receipt.authorizationGranted !== false
124
124
  || !validCoreIdentity(receipt.coreIdentity)
125
- || !validSnapshot(receipt.workspaceBefore)
126
- || !validSnapshot(receipt.workspaceAfter)
125
+ || !validWorkspaceSnapshotShape(receipt.workspaceBefore)
126
+ || !validWorkspaceSnapshotShape(receipt.workspaceAfter)
127
127
  || !hasExactKeys(receipt.exactCommand, ["executable", "argv", "cwd"])
128
128
  || typeof receipt.exactCommand.executable !== "string"
129
129
  || receipt.exactCommand.executable.length === 0
@@ -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.18.4",
24
+ coreManifestSha256: "sha256:372d4c247e4b40b0fd2f3fe0f5bf928548095bfb7e2e92e9ac66790e2717f77d",
25
+ },
21
26
  {
22
27
  contractVersion: "0.2",
23
28
  coreVersion: "0.18.3",
@@ -76,7 +76,16 @@ function parseStatus(root) {
76
76
  if (!field) continue;
77
77
  const status = field.slice(0, 2);
78
78
  const currentPath = normalizePath(field.slice(3));
79
- if (status.includes("R") || status.includes("C")) index += 1;
79
+ let priorPath = null;
80
+ if (status.includes("R") || status.includes("C")) {
81
+ const prior = fields[index + 1];
82
+ if (!prior) throw new Error("Git status rename entry is incomplete.");
83
+ priorPath = normalizePath(prior);
84
+ index += 1;
85
+ }
86
+ if (status.includes("R") && priorPath && !isControlPath(priorPath)) {
87
+ entries.set(priorPath, { path: priorPath, state: "deleted", sha256: null });
88
+ }
80
89
  if (!currentPath || isControlPath(currentPath)) continue;
81
90
  let state = "modified";
82
91
  if (status === "??") state = "untracked";
@@ -2,7 +2,7 @@
2
2
  "schemaVersion": "OwlCodaRunKitRegistryReleasePolicyV1",
3
3
  "status": "release_candidate_unpublished",
4
4
  "packageName": "owlrunkit",
5
- "candidateVersion": "0.18.3",
5
+ "candidateVersion": "0.18.4",
6
6
  "registry": "https://registry.npmjs.org",
7
7
  "registryRequiredBeforeAdoption": true,
8
8
  "exactVersionRequired": true,
@@ -23,10 +23,10 @@
23
23
  ],
24
24
  "currentPublishedRelease": {
25
25
  "packageName": "owlrunkit",
26
- "version": "0.18.2",
27
- "shasum": "4a85e31dad306260e4a6b1fcbccb3807e8647a0a",
28
- "integrity": "sha512-Clpr8UQdNitzMMmQHUtjs9mesmukUqZrQ5nrda+Ryo8SuvECH8eBiis378NnzV1lI79kmljv49ToRRe867zlBg==",
29
- "tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.18.2.tgz"
26
+ "version": "0.18.3",
27
+ "shasum": "f8ba5ab3d426aea21bbdd8f459fd3dd5e89ff08a",
28
+ "integrity": "sha512-zcsWY8sSKW1uJpa28VDqBx9coEMYnADKix9sr0rPz+kyoV6K/NDHHRMPx+24oFDKH9zVFaNyVyq5OAgoaMm8/Q==",
29
+ "tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.18.3.tgz"
30
30
  },
31
31
  "registryRelease": null,
32
32
  "registryEvidenceMustBeExternal": true,
package/sbom.spdx.json CHANGED
@@ -2,8 +2,8 @@
2
2
  "spdxVersion": "SPDX-2.3",
3
3
  "dataLicense": "CC0-1.0",
4
4
  "SPDXID": "SPDXRef-DOCUMENT",
5
- "name": "owlrunkit-0.18.3",
6
- "documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.18.3",
5
+ "name": "owlrunkit-0.18.4",
6
+ "documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.18.4",
7
7
  "creationInfo": {
8
8
  "created": "2026-07-29T00:00:00Z",
9
9
  "creators": [
@@ -14,8 +14,8 @@
14
14
  {
15
15
  "name": "owlrunkit",
16
16
  "SPDXID": "SPDXRef-Package-OwlRunKit",
17
- "versionInfo": "0.18.3",
18
- "downloadLocation": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.18.3.tgz",
17
+ "versionInfo": "0.18.4",
18
+ "downloadLocation": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.18.4.tgz",
19
19
  "filesAnalyzed": false,
20
20
  "licenseConcluded": "GPL-3.0-or-later",
21
21
  "licenseDeclared": "GPL-3.0-or-later",
@@ -24,7 +24,7 @@
24
24
  {
25
25
  "referenceCategory": "PACKAGE-MANAGER",
26
26
  "referenceType": "purl",
27
- "referenceLocator": "pkg:npm/owlrunkit@0.18.3"
27
+ "referenceLocator": "pkg:npm/owlrunkit@0.18.4"
28
28
  }
29
29
  ]
30
30
  }