owlrunkit 0.22.0 → 0.23.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 +51 -0
- package/README.md +53 -9
- package/integrations/codex/skills/owlcoda-runkit/SKILL.md +55 -16
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
- package/package.json +1 -1
- package/packages/attest/distribution-manifest-v1.json +10 -0
- package/packages/attest/src/quick.mjs +10 -0
- package/registry-release-policy-v2.json +5 -5
- package/sbom.spdx.json +4 -4
- package/scripts/runkit-contract/core-contract.mjs +5 -1
- package/scripts/runkit-contract/fleet-skill-plan.mjs +14 -66
- package/scripts/runkit-contract/formal-workflow.mjs +1 -1
- package/scripts/runkit-contract/install-codex-skill.mjs +2097 -196
- package/scripts/runkit-contract/project-cli-resolver.mjs +8 -0
- package/scripts/runkit-contract/project-completion-continuity.mjs +545 -0
- package/scripts/runkit-contract/registry-adoption.mjs +4 -4
- package/scripts/runkit-contract/runkit-cli.mjs +41 -5
- package/scripts/runkit-contract/schemas/fleet-skill-upgrade-plan-v1.schema.json +16 -3
- package/scripts/runkit-contract/schemas/project-completion-continuity-v1.schema.json +144 -0
- package/scripts/runkit-contract/schemas/successor-scaffold-v1.schema.json +184 -0
- package/scripts/runkit-contract/schemas/team-project-status-v5.schema.json +169 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,56 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.23.0
|
|
4
|
+
|
|
5
|
+
- Adds Project Status V5 with a separate completion-continuity projection.
|
|
6
|
+
Completed ledgers now distinguish an exact source-baseline match, missing
|
|
7
|
+
baseline evidence, an unverifiable modeled target, and later unmodeled
|
|
8
|
+
workspace drift instead of inventing more project work from absent release
|
|
9
|
+
authority.
|
|
10
|
+
- Reuses the latest matching verified external-delivery target snapshot as the
|
|
11
|
+
source baseline and reports a bounded committed, dirty-overlay, dependency,
|
|
12
|
+
and submodule delta when the current source workspace changes.
|
|
13
|
+
- Adds read-only `project successor scaffold --from-workspace <git-root>
|
|
14
|
+
--dry-run`. It groups changed paths against historical WorkItem ownership,
|
|
15
|
+
reports unmatched and overlapping scopes, and leaves project identity,
|
|
16
|
+
objective, owners, titles, and acceptance unset for human confirmation.
|
|
17
|
+
- Keeps Project Status V1-V4 callable, preserves Compact V2 and Hook Recovery
|
|
18
|
+
V1 shapes, and advances only the current CLI status surface to V5. Explicit
|
|
19
|
+
external Gates and delivery-lifecycle facts retain their meanings.
|
|
20
|
+
- Keeps status and scaffold deterministic and zero-write. No surface creates a
|
|
21
|
+
successor project, dispatches an Agent, changes assurance, or grants Git,
|
|
22
|
+
release, deployment, production, business, automation, or money authority.
|
|
23
|
+
|
|
24
|
+
## 0.22.1
|
|
25
|
+
|
|
26
|
+
- Makes process-wide Codex Skill activation require every discovered project
|
|
27
|
+
to already have an exact package, lockfile, installed CLI/Core, Config, and
|
|
28
|
+
official-registry adoption binding for the target RunKit version.
|
|
29
|
+
- Removes project migration from the shared Skill installer. Skill activation
|
|
30
|
+
now replaces only the shared Skill bytes and emits V2 upgrade/rollback
|
|
31
|
+
receipts proving that the package manifest, lockfile, installed package
|
|
32
|
+
manifest, Config, and adoption evidence were unchanged.
|
|
33
|
+
- Adds canonical project control locks, a fleet-registry transaction lock,
|
|
34
|
+
frozen-fleet revalidation, and recoverable install and rollback journals so
|
|
35
|
+
interruption cannot leave a silent half-upgrade or partial legacy Config
|
|
36
|
+
rollback.
|
|
37
|
+
- Gives upgrade receipts and transaction journals independent, writer-enforced
|
|
38
|
+
byte bounds before Skill mutation. Legacy V1 Config preimages are stored as
|
|
39
|
+
transaction-scoped, hash-bound files instead of duplicated base64 journal
|
|
40
|
+
payloads, and terminal rollback recovery cannot rewrite a newly active
|
|
41
|
+
project after its control lock is released.
|
|
42
|
+
- Binds V2 upgrade receipts to the exact fleet discovery source and frozen
|
|
43
|
+
membership. Rollback rediscovers the current fleet and refuses newly added,
|
|
44
|
+
active, or identity-drifted projects; legacy receipts require an explicit
|
|
45
|
+
current fleet source.
|
|
46
|
+
- Makes both first activation and the read-only plan fail closed on an existing
|
|
47
|
+
incompatible default fleet or any path-level discovery issue.
|
|
48
|
+
- Makes the read-only fleet Skill plan report package/adoption mismatches as
|
|
49
|
+
blocking, with a project-local install/bootstrap or adoption repair boundary,
|
|
50
|
+
instead of presenting Config-only projects as safe to activate.
|
|
51
|
+
- Preserves legacy V1 rollback receipts while keeping all Git, release,
|
|
52
|
+
deployment, production, business, automation, and money authority false.
|
|
53
|
+
|
|
3
54
|
## 0.22.0
|
|
4
55
|
|
|
5
56
|
- Adds the independent `OwlCodaRunKitHookRecoveryV1` public contract and
|
package/README.md
CHANGED
|
@@ -111,6 +111,14 @@ the project matches its current chat goal. It does not infer chat intent, emit
|
|
|
111
111
|
full execution or event history, change project state, dispatch an Agent, or
|
|
112
112
|
raise assurance.
|
|
113
113
|
|
|
114
|
+
RunKit 0.23 closes the continuity gap after a Project Driver ledger completes.
|
|
115
|
+
Project Status V5 distinguishes an exactly terminal source workspace from a
|
|
116
|
+
missing source baseline, an unavailable modeled target, and later unmodeled
|
|
117
|
+
workspace drift. A read-only `project successor scaffold` can project the
|
|
118
|
+
bounded delta and mechanically possible lanes for human review; it never
|
|
119
|
+
creates a project, infers the next objective, dispatches an Agent, or grants
|
|
120
|
+
authority.
|
|
121
|
+
|
|
114
122
|
The 0.18 Project Driver is a bounded surface for new projects and controlled
|
|
115
123
|
dogfood. Its product name does not claim to be a general long-running,
|
|
116
124
|
multi-phase, or enterprise control plane. Version 0.18 adds one bounded
|
|
@@ -124,7 +132,7 @@ separate authority boundaries.
|
|
|
124
132
|
|
|
125
133
|
## Install
|
|
126
134
|
|
|
127
|
-
This package is the lifecycle-stable, registry-gated `owlrunkit@0.
|
|
135
|
+
This package is the lifecycle-stable, registry-gated `owlrunkit@0.23.0`
|
|
128
136
|
artifact. Registry adoption remains fail-closed until its exact official npm
|
|
129
137
|
version, shasum, integrity, and tarball URL are independently verified. Local
|
|
130
138
|
tarballs remain candidate-test inputs and are never adoption provenance. Until
|
|
@@ -132,7 +140,7 @@ that registry evidence exists, use the package only for isolated candidate
|
|
|
132
140
|
verification; do not treat the command below as available release truth.
|
|
133
141
|
|
|
134
142
|
```bash
|
|
135
|
-
npm install --save-exact owlrunkit@0.
|
|
143
|
+
npm install --save-exact owlrunkit@0.23.0
|
|
136
144
|
```
|
|
137
145
|
|
|
138
146
|
Use `npx --no-install owlrunkit` for project commands. The package bootstrap
|
|
@@ -148,9 +156,9 @@ the project Config must independently bind the same Core.
|
|
|
148
156
|
```bash
|
|
149
157
|
npx --no-install owlrunkit --version
|
|
150
158
|
npx --no-install owlrunkit bootstrap --workspace /absolute/path/to/project \
|
|
151
|
-
--exact owlrunkit@0.
|
|
159
|
+
--exact owlrunkit@0.23.0 --dry-run
|
|
152
160
|
npx --no-install owlrunkit bootstrap --workspace /absolute/path/to/project \
|
|
153
|
-
--exact owlrunkit@0.
|
|
161
|
+
--exact owlrunkit@0.23.0 --apply
|
|
154
162
|
npx --no-install owlrunkit init --workspace /absolute/path/to/project
|
|
155
163
|
npx --no-install owlrunkit doctor --workspace /absolute/path/to/project
|
|
156
164
|
npx --no-install owlrunkit inspect --workspace /absolute/path/to/project --json --compact
|
|
@@ -299,6 +307,8 @@ npx --no-install owlrunkit project integrate --workspace . --gate integration-re
|
|
|
299
307
|
--evidence evidence/integration.txt
|
|
300
308
|
npx --no-install owlrunkit project status --workspace .
|
|
301
309
|
npx --no-install owlrunkit project takeover --workspace . --agent agent-successor
|
|
310
|
+
npx --no-install owlrunkit project successor scaffold --workspace . \
|
|
311
|
+
--from-workspace /absolute/source/worktree --dry-run
|
|
302
312
|
npx --no-install owlrunkit project successor --workspace . --transition-id project-next-001 \
|
|
303
313
|
--at 2026-08-09T00:16:00.000Z --definition ./next-project-definition.json \
|
|
304
314
|
--reason 'Archive the completed project and begin the next bounded project'
|
|
@@ -404,6 +414,23 @@ successor; `project status` and `project takeover` remain active-truth
|
|
|
404
414
|
projections and do not perform a broad historical archive scan. The receipt
|
|
405
415
|
always keeps Git, release, publish, deploy, and adoption authority false.
|
|
406
416
|
|
|
417
|
+
Project Status V5 separately inspects source continuity after the WorkItem
|
|
418
|
+
ledger completes. It reuses the latest matching verified external-delivery
|
|
419
|
+
snapshot as the source baseline. A matching workspace is terminal against that
|
|
420
|
+
baseline; no baseline is reported as missing rather than guessed; an
|
|
421
|
+
unavailable or non-canonical target is unverifiable; and a changed target is
|
|
422
|
+
reported as unmodeled workspace drift. Explicit external Gates and delivery
|
|
423
|
+
lifecycle records keep their own meanings. Git, release, deployment,
|
|
424
|
+
production, product, and business authority remain external even when source
|
|
425
|
+
continuity is terminal.
|
|
426
|
+
|
|
427
|
+
`project successor scaffold --from-workspace <git-root> --dry-run` is a
|
|
428
|
+
zero-write review surface for a completed project. It reports the bounded
|
|
429
|
+
baseline-to-current delta, paths that match historical WorkItem ownership,
|
|
430
|
+
unmatched paths, and overlapping historical scopes. Its project ID, objective,
|
|
431
|
+
titles, owners, and acceptance remain deliberately unset for human review. It
|
|
432
|
+
has no apply form and never invokes `project successor`.
|
|
433
|
+
|
|
407
434
|
`project status` reports every Agent's active, waiting, completed, and failed
|
|
408
435
|
work; unresolved dependencies and decisions; the ready queue; critical work;
|
|
409
436
|
and integration gates. It does not accept a guessed completion percentage.
|
|
@@ -412,11 +439,12 @@ WorkItem. An assignment may bind an exact RunKit execution and lease; in that
|
|
|
412
439
|
case, the WorkItem cannot complete until the execution has a trusted accepted
|
|
413
440
|
closeout and its lease is released.
|
|
414
441
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
442
|
+
Status/Takeover V3 retain their published completion projection. Status V4
|
|
443
|
+
adds explicit delivery stages, and current Status V5 adds source-continuity
|
|
444
|
+
truth. `overall=completed` still means only that the WorkItem ledger is
|
|
445
|
+
complete. Missing release authority stays visible through the all-false
|
|
446
|
+
authority boundary; it is not fabricated as project work or used to hide a
|
|
447
|
+
missing baseline or later source drift.
|
|
420
448
|
|
|
421
449
|
`project takeover` adds the current candidate, its exact added/changed/removed
|
|
422
450
|
path delta from the previous imported delivery, and handoffs that are stale
|
|
@@ -736,6 +764,22 @@ auditable but are never interpreted as active writers.
|
|
|
736
764
|
|
|
737
765
|
RunKit rejects an unreachable root and freezes the exact active workspace list
|
|
738
766
|
before a shared Skill or Core change.
|
|
767
|
+
Shared Skill activation is the final fleet step: every discovered project must
|
|
768
|
+
already bind the target release through its exact package declaration,
|
|
769
|
+
lockfile, installed CLI/Core, Config, and official-registry adoption evidence.
|
|
770
|
+
The installer replaces only the process-wide Skill. It locks every project
|
|
771
|
+
control root in canonical order and proves the workspace package manifest,
|
|
772
|
+
lockfile, installed package manifest, Config, and adoption evidence unchanged;
|
|
773
|
+
it never upgrades project dependencies or Core. An interruption journal
|
|
774
|
+
restores the exact prior Skill before a later installer action continues. The
|
|
775
|
+
fleet registry remains transaction-locked through final receipt commit.
|
|
776
|
+
Receipt and journal byte bounds are enforced by both writers and readers before
|
|
777
|
+
Skill mutation; legacy Config preimages use transaction-scoped, hash-bound
|
|
778
|
+
files so a large fleet does not make its recovery journal unreadable. V2
|
|
779
|
+
receipts always bind their discovery source and frozen membership, so rollback
|
|
780
|
+
must rediscover the same current fleet and also recovers atomically after an
|
|
781
|
+
interruption. Legacy V1 rollback remains supported only when the operator
|
|
782
|
+
supplies an explicit current fleet source.
|
|
739
783
|
Explicit `--fleet-root` and `--fleet-manifest` remain available for bounded
|
|
740
784
|
one-off operations. Completeness is intentionally limited to registered roots;
|
|
741
785
|
RunKit does not claim machine-wide protection for an unregistered location.
|
|
@@ -7,14 +7,14 @@ description: Run receipt-backed, project-owned work with OwlCoda RunKit. Use whe
|
|
|
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 registry-gated artifact: standalone `owlrunkit@0.
|
|
11
|
-
`0.2` and Core `0.
|
|
12
|
-
`sha256:
|
|
10
|
+
Bundled registry-gated artifact: standalone `owlrunkit@0.23.0`, bundling Contract
|
|
11
|
+
`0.2` and Core `0.23.0` with manifest
|
|
12
|
+
`sha256:cf9c1c5985cd0e960640f13fba66f92f0135449b6bc5036bc68ee9021053b9e4`.
|
|
13
13
|
Registry adoption remains fail-closed until exact official npm registry
|
|
14
|
-
provenance for `owlrunkit@0.
|
|
15
|
-
rollback baseline for this artifact is `owlrunkit@0.
|
|
16
|
-
`
|
|
17
|
-
`https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.
|
|
14
|
+
provenance for `owlrunkit@0.23.0` is independently verified. The published
|
|
15
|
+
rollback baseline for this artifact is `owlrunkit@0.22.1`, with SHA-1
|
|
16
|
+
`675b417134825e876e6e2b7c2e8d2aea4045e59f` and canonical npm tarball URL
|
|
17
|
+
`https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.22.1.tgz`.
|
|
18
18
|
The root `owlcoda` package has a separate version lifecycle.
|
|
19
19
|
|
|
20
20
|
The session is an execution interface. Project artifacts are the system of record.
|
|
@@ -86,6 +86,17 @@ npx --no-install owlrunkit fleet skill-plan \
|
|
|
86
86
|
--skill-root "$RUNKIT_SKILL_TARGET" --archive-root "$RUNKIT_SKILL_ARCHIVE_ROOT"
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
+
Activate the process-wide Skill only after every discovered project already
|
|
90
|
+
binds the target release through its exact package, lockfile, installed
|
|
91
|
+
CLI/Core, Config, and official-registry adoption evidence. The Skill installer
|
|
92
|
+
must not install project dependencies, initialize Core, or rewrite project
|
|
93
|
+
state; its V2 receipt proves the package manifest, lockfile, installed package
|
|
94
|
+
manifest, Config, and adoption evidence stayed unchanged. V2 restore always
|
|
95
|
+
uses the receipt's frozen fleet binding; only a legacy V1 receipt may accept an
|
|
96
|
+
explicit current fleet source. Receipt and recovery-journal bounds are checked
|
|
97
|
+
before Skill mutation, and interruption recovery remains terminal before
|
|
98
|
+
project control locks are released.
|
|
99
|
+
|
|
89
100
|
Doctor reports both the package-bound and discovered shared Skill absolute
|
|
90
101
|
paths and versions. Shared drift is visible but non-blocking for a valid
|
|
91
102
|
project-local CLI. `loadedSkillVersion=unknown` is deliberate: RunKit cannot
|
|
@@ -155,9 +166,14 @@ remains available for existing automation and compatibility.
|
|
|
155
166
|
entry snapshot, report `candidate_only`; never claim an entry-to-candidate
|
|
156
167
|
overlay proof that was not captured.
|
|
157
168
|
- "Start the next project": only after status derives `overall=completed`,
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
169
|
+
first inspect Status V5 completion continuity. If the source workspace has
|
|
170
|
+
unmodeled drift, use read-only `project successor scaffold --from-workspace
|
|
171
|
+
<git-root> --dry-run` to review the bounded delta and mechanical historical
|
|
172
|
+
lanes. A human must still choose the new objective, WorkItems, owners, and
|
|
173
|
+
acceptance before invoking `project successor` with a different V1
|
|
174
|
+
definition and explicit transition ID. Preserve the content-addressed
|
|
175
|
+
archive and journal; never use handoff, takeover, install, or publication as
|
|
176
|
+
successor authority.
|
|
161
177
|
- "Capture this as data": append a data candidate only. Never call it a dataset
|
|
162
178
|
member without a separate admission decision.
|
|
163
179
|
- "Do not run that check yet": append one deferred verification with stable
|
|
@@ -219,6 +235,8 @@ npx --no-install owlrunkit project integrate --workspace "$PROJECT_ROOT" --gate
|
|
|
219
235
|
--at "$OCCURRED_AT" --summary "$SUMMARY" --evidence "$EVIDENCE_REF"
|
|
220
236
|
npx --no-install owlrunkit project status --workspace "$PROJECT_ROOT" --json
|
|
221
237
|
npx --no-install owlrunkit project takeover --workspace "$PROJECT_ROOT" --agent "$AGENT_ID" --json
|
|
238
|
+
npx --no-install owlrunkit project successor scaffold --workspace "$PROJECT_ROOT" \
|
|
239
|
+
--from-workspace "$TARGET_WORKTREE" --dry-run --json
|
|
222
240
|
npx --no-install owlrunkit project successor --workspace "$PROJECT_ROOT" \
|
|
223
241
|
--transition-id "$TRANSITION_ID" --at "$OCCURRED_AT" \
|
|
224
242
|
--definition "$NEXT_PROJECT_JSON" --reason "$SUCCESSOR_REASON" --json
|
|
@@ -249,6 +267,21 @@ journal. Do not infer a historical archive scan from `status` or `takeover`;
|
|
|
249
267
|
those remain active-truth projections. The receipt never grants Git, release,
|
|
250
268
|
publication, deployment, package-adoption, or writer authority.
|
|
251
269
|
|
|
270
|
+
Current `project status` emits Project Status V5. For a completed WorkItem
|
|
271
|
+
ledger, `completionContinuity` distinguishes an exactly matching imported
|
|
272
|
+
source-delivery baseline, a missing baseline, an unverifiable modeled target,
|
|
273
|
+
and later unmodeled workspace drift. A matching source baseline means only that
|
|
274
|
+
no unmodeled source continuation was observed; it does not imply integration,
|
|
275
|
+
release, deployment, product acceptance, or business completion.
|
|
276
|
+
|
|
277
|
+
`project successor scaffold` is strictly read-only and requires `--dry-run`.
|
|
278
|
+
It may use historical `ownedPaths` to group changed paths mechanically, but it
|
|
279
|
+
must leave project identity, objective, titles, owners, and acceptance unset
|
|
280
|
+
for human confirmation. Never treat its lane suggestions as a successor
|
|
281
|
+
decision or invoke the mutating successor automatically. It writes no project
|
|
282
|
+
truth, execution, lease, receipt, archive, or Git state and keeps every
|
|
283
|
+
authority field false.
|
|
284
|
+
|
|
252
285
|
## Batch verification around a small explainable closure
|
|
253
286
|
|
|
254
287
|
Use a verification micro-batch when two or three related changes share one
|
|
@@ -304,9 +337,9 @@ below has no CLI entry.
|
|
|
304
337
|
|
|
305
338
|
```bash
|
|
306
339
|
npx --no-install owlrunkit bootstrap --workspace "$PROJECT_ROOT" \
|
|
307
|
-
--exact owlrunkit@0.
|
|
340
|
+
--exact owlrunkit@0.23.0 --dry-run
|
|
308
341
|
npx --no-install owlrunkit bootstrap --workspace "$PROJECT_ROOT" \
|
|
309
|
-
--exact owlrunkit@0.
|
|
342
|
+
--exact owlrunkit@0.23.0 --apply
|
|
310
343
|
npx --no-install owlrunkit init --workspace "$PROJECT_ROOT"
|
|
311
344
|
npx --no-install owlrunkit inspect --json --workspace "$PROJECT_ROOT"
|
|
312
345
|
npx --no-install owlrunkit inspect --json --compact --workspace "$PROJECT_ROOT"
|
|
@@ -489,10 +522,16 @@ project has an active execution, an active writer lease, ambiguous control
|
|
|
489
522
|
state, or invalid configuration. A missing registry is an error; do not use
|
|
490
523
|
partial explicit coverage to bypass this guard.
|
|
491
524
|
|
|
492
|
-
A successful update archives the exact prior Skill
|
|
493
|
-
project
|
|
494
|
-
|
|
495
|
-
an
|
|
525
|
+
A successful update archives the exact prior Skill without migrating any
|
|
526
|
+
project. It holds each project control lock while proving the package manifest,
|
|
527
|
+
lockfile, installed package manifest, Config, and adoption evidence unchanged,
|
|
528
|
+
then writes an append-only upgrade receipt. An interrupted swap is recovered
|
|
529
|
+
from its bounded transaction journal before a later installer action proceeds.
|
|
530
|
+
The registry transaction lock remains held through receipt commit. A V2
|
|
531
|
+
receipt binds the exact fleet source and frozen membership; rollback
|
|
532
|
+
rediscovers that fleet and uses its own interruption journal. Legacy V1
|
|
533
|
+
receipts require an explicit current fleet source. Use the upgrade receipt for
|
|
534
|
+
an exact Skill rollback:
|
|
496
535
|
|
|
497
536
|
```bash
|
|
498
537
|
node "$RUNKIT_PACKAGE_ROOT/scripts/runkit-contract/install-codex-skill.mjs" \
|
|
@@ -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.23.0",
|
|
6
|
+
"coreManifestSha256": "sha256:cf9c1c5985cd0e960640f13fba66f92f0135449b6bc5036bc68ee9021053b9e4",
|
|
7
|
+
"coreSourceRef": "artifact:sha256:cf9c1c5985cd0e960640f13fba66f92f0135449b6bc5036bc68ee9021053b9e4"
|
|
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.
|
|
3
|
+
"version": "0.23.0",
|
|
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>",
|
|
@@ -42,6 +42,16 @@
|
|
|
42
42
|
"sha256": "sha256:3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986"
|
|
43
43
|
},
|
|
44
44
|
"supportedProducerCoreIdentities": [
|
|
45
|
+
{
|
|
46
|
+
"contractVersion": "0.2",
|
|
47
|
+
"coreVersion": "0.23.0",
|
|
48
|
+
"coreManifestSha256": "sha256:cf9c1c5985cd0e960640f13fba66f92f0135449b6bc5036bc68ee9021053b9e4"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"contractVersion": "0.2",
|
|
52
|
+
"coreVersion": "0.22.1",
|
|
53
|
+
"coreManifestSha256": "sha256:41447517f78b74a070802bd67c8b066a833eedde72e2606e3127fa1258c289a4"
|
|
54
|
+
},
|
|
45
55
|
{
|
|
46
56
|
"contractVersion": "0.2",
|
|
47
57
|
"coreVersion": "0.22.0",
|
|
@@ -23,6 +23,16 @@ import {
|
|
|
23
23
|
export { validQuickReceiptShape } from "./quick-receipt-contract.mjs";
|
|
24
24
|
|
|
25
25
|
export const SUPPORTED_QUICK_CORE_IDENTITIES = Object.freeze([
|
|
26
|
+
{
|
|
27
|
+
contractVersion: "0.2",
|
|
28
|
+
coreVersion: "0.23.0",
|
|
29
|
+
coreManifestSha256: "sha256:cf9c1c5985cd0e960640f13fba66f92f0135449b6bc5036bc68ee9021053b9e4",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
contractVersion: "0.2",
|
|
33
|
+
coreVersion: "0.22.1",
|
|
34
|
+
coreManifestSha256: "sha256:41447517f78b74a070802bd67c8b066a833eedde72e2606e3127fa1258c289a4",
|
|
35
|
+
},
|
|
26
36
|
{
|
|
27
37
|
contractVersion: "0.2",
|
|
28
38
|
coreVersion: "0.22.0",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"schemaVersion": "OwlCodaRunKitRegistryReleasePolicyV2",
|
|
3
3
|
"status": "release_artifact_registry_gated",
|
|
4
4
|
"packageName": "owlrunkit",
|
|
5
|
-
"artifactVersion": "0.
|
|
5
|
+
"artifactVersion": "0.23.0",
|
|
6
6
|
"registry": "https://registry.npmjs.org",
|
|
7
7
|
"registryRequiredBeforeAdoption": true,
|
|
8
8
|
"exactVersionRequired": true,
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
],
|
|
24
24
|
"rollbackRelease": {
|
|
25
25
|
"packageName": "owlrunkit",
|
|
26
|
-
"version": "0.
|
|
27
|
-
"shasum": "
|
|
28
|
-
"integrity": "sha512-
|
|
29
|
-
"tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.
|
|
26
|
+
"version": "0.22.1",
|
|
27
|
+
"shasum": "675b417134825e876e6e2b7c2e8d2aea4045e59f",
|
|
28
|
+
"integrity": "sha512-Vp+o6u00Di18fuPFcbEzdBpRd79e8P4yZq77RF2wuJG5ITjUGf/pAzOb5sOOVzj8P/MXcnhKcnRQKT70kUyZuA==",
|
|
29
|
+
"tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.22.1.tgz"
|
|
30
30
|
},
|
|
31
31
|
"registryEvidenceMustBeExternal": true,
|
|
32
32
|
"registryEvidenceSchemaVersion": "OwlCodaRunKitRegistryReleaseEvidenceV1",
|
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.
|
|
6
|
-
"documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.
|
|
5
|
+
"name": "owlrunkit-0.23.0",
|
|
6
|
+
"documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.23.0",
|
|
7
7
|
"creationInfo": {
|
|
8
8
|
"created": "2026-07-29T00:00:00Z",
|
|
9
9
|
"creators": [
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
{
|
|
15
15
|
"name": "owlrunkit",
|
|
16
16
|
"SPDXID": "SPDXRef-Package-OwlRunKit",
|
|
17
|
-
"versionInfo": "0.
|
|
17
|
+
"versionInfo": "0.23.0",
|
|
18
18
|
"downloadLocation": "NOASSERTION",
|
|
19
19
|
"filesAnalyzed": false,
|
|
20
20
|
"licenseConcluded": "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.
|
|
27
|
+
"referenceLocator": "pkg:npm/owlrunkit@0.23.0"
|
|
28
28
|
}
|
|
29
29
|
]
|
|
30
30
|
}
|
|
@@ -14,7 +14,7 @@ import { fileURLToPath } from "node:url";
|
|
|
14
14
|
import { parseProjectControlState } from "./project-control-parser.mjs";
|
|
15
15
|
|
|
16
16
|
export const CONTRACT_VERSION = "0.2";
|
|
17
|
-
export const CORE_VERSION = "0.
|
|
17
|
+
export const CORE_VERSION = "0.23.0";
|
|
18
18
|
export const RUNTIME_ROOT = ".owlcoda/runkit";
|
|
19
19
|
|
|
20
20
|
const CORE_FILES = [
|
|
@@ -50,6 +50,7 @@ const CORE_FILES = [
|
|
|
50
50
|
"project-cli-resolver.mjs",
|
|
51
51
|
"project-control-parser.mjs",
|
|
52
52
|
"project-control-state.mjs",
|
|
53
|
+
"project-completion-continuity.mjs",
|
|
53
54
|
"project-external-delivery.mjs",
|
|
54
55
|
"provenance-common.mjs",
|
|
55
56
|
"quick-attest.mjs",
|
|
@@ -134,6 +135,7 @@ const CORE_FILES = [
|
|
|
134
135
|
"schemas/profile-reconcile-receipt-v1.schema.json",
|
|
135
136
|
"schemas/project-config.schema.json",
|
|
136
137
|
"schemas/project-config-v2.schema.json",
|
|
138
|
+
"schemas/project-completion-continuity-v1.schema.json",
|
|
137
139
|
"schemas/profiles.schema.json",
|
|
138
140
|
"schemas/remote-deployment-manifest-v1.schema.json",
|
|
139
141
|
"schemas/remote-deployment-result-v1.schema.json",
|
|
@@ -178,6 +180,8 @@ const CORE_FILES = [
|
|
|
178
180
|
"schemas/team-project-status-v2.schema.json",
|
|
179
181
|
"schemas/team-project-status-v3.schema.json",
|
|
180
182
|
"schemas/team-project-status-v4.schema.json",
|
|
183
|
+
"schemas/team-project-status-v5.schema.json",
|
|
184
|
+
"schemas/successor-scaffold-v1.schema.json",
|
|
181
185
|
"schemas/external-gate-v1.schema.json",
|
|
182
186
|
"schemas/delivery-lifecycle-v1.schema.json",
|
|
183
187
|
"schemas/usage-mode-recommendation-v1.schema.json",
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import { readFile } from "node:fs/promises";
|
|
2
1
|
import path from "node:path";
|
|
3
2
|
|
|
4
|
-
import {
|
|
5
|
-
currentCoreIdentity,
|
|
6
|
-
validateProjectConfigV2,
|
|
7
|
-
} from "./core-contract.mjs";
|
|
3
|
+
import { currentCoreIdentity } from "./core-contract.mjs";
|
|
8
4
|
import { discoverFleet } from "./fleet-discovery.mjs";
|
|
9
|
-
import {
|
|
10
|
-
|
|
5
|
+
import {
|
|
6
|
+
inspectInstalledSkillCompatibility,
|
|
7
|
+
inspectProjectForSkillChange,
|
|
8
|
+
} from "./install-codex-skill.mjs";
|
|
11
9
|
|
|
12
10
|
function shellQuote(value) {
|
|
13
11
|
return `'${String(value).replaceAll("'", `'"'"'`)}'`;
|
|
@@ -34,63 +32,6 @@ function fleetSourceArguments({
|
|
|
34
32
|
: "";
|
|
35
33
|
}
|
|
36
34
|
|
|
37
|
-
function validLegacyConfigV1(config) {
|
|
38
|
-
return config?.schemaVersion === "OwlCodaRunKitConfigV1"
|
|
39
|
-
&& config?.core?.contractVersion === "0.1"
|
|
40
|
-
&& config?.authorizationPolicy === "external_explicit_authority_required";
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
async function inspectAffectedProject(workspaceRoot) {
|
|
44
|
-
const blockers = [];
|
|
45
|
-
const control = inspectProjectControlState({ workspaceRoot }).upgradeSafety;
|
|
46
|
-
for (const artifactId of control.activeRunIds) {
|
|
47
|
-
blockers.push({ code: "active_execution", workspaceRoot, artifactId });
|
|
48
|
-
}
|
|
49
|
-
for (const artifactId of control.activeLeaseIds) {
|
|
50
|
-
blockers.push({ code: "active_lease", workspaceRoot, artifactId });
|
|
51
|
-
}
|
|
52
|
-
for (const issue of control.issues) {
|
|
53
|
-
blockers.push({ code: "control_state_invalid", workspaceRoot, detail: issue });
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const configPath = path.join(workspaceRoot, ".owlcoda/runkit/config.json");
|
|
57
|
-
let config = null;
|
|
58
|
-
try {
|
|
59
|
-
config = JSON.parse((await readFile(configPath)).toString("utf8"));
|
|
60
|
-
} catch (error) {
|
|
61
|
-
blockers.push({
|
|
62
|
-
code: "project_config_invalid",
|
|
63
|
-
workspaceRoot,
|
|
64
|
-
detail: error instanceof Error ? error.message : String(error),
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
if (config !== null) {
|
|
68
|
-
const validation = config.schemaVersion === "OwlCodaRunKitConfigV2"
|
|
69
|
-
? validateProjectConfigV2(config)
|
|
70
|
-
: null;
|
|
71
|
-
if ((validation !== null && !validation.valid)
|
|
72
|
-
|| (validation === null && !validLegacyConfigV1(config))) {
|
|
73
|
-
blockers.push({
|
|
74
|
-
code: "project_config_invalid",
|
|
75
|
-
workspaceRoot,
|
|
76
|
-
detail: validation?.issues?.join(",") ?? "unsupported_config",
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return {
|
|
82
|
-
project: {
|
|
83
|
-
workspaceRoot,
|
|
84
|
-
configPath,
|
|
85
|
-
configCoreVersion: config?.core?.coreVersion ?? null,
|
|
86
|
-
activeRunIds: [...control.activeRunIds],
|
|
87
|
-
activeLeaseIds: [...control.activeLeaseIds],
|
|
88
|
-
upgradeSafe: blockers.length === 0,
|
|
89
|
-
},
|
|
90
|
-
blockers,
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
|
|
94
35
|
export async function planFleetSkillUpgradeV1({
|
|
95
36
|
repositoryRoot,
|
|
96
37
|
targetRoot,
|
|
@@ -125,11 +66,17 @@ export async function planFleetSkillUpgradeV1({
|
|
|
125
66
|
for (const workspaceRoot of discovery.unreachableRoots) {
|
|
126
67
|
blockers.push({ code: "fleet_root_unreachable", workspaceRoot });
|
|
127
68
|
}
|
|
69
|
+
for (const issue of discovery.issues) {
|
|
70
|
+
blockers.push({
|
|
71
|
+
code: "fleet_discovery_issue",
|
|
72
|
+
detail: `${issue.code}:${issue.path}`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
128
75
|
}
|
|
129
76
|
|
|
130
77
|
const affectedProjects = [];
|
|
131
78
|
for (const workspaceRoot of discovery?.workspaceRoots ?? []) {
|
|
132
|
-
const inspected = await
|
|
79
|
+
const inspected = await inspectProjectForSkillChange(workspaceRoot);
|
|
133
80
|
affectedProjects.push(inspected.project);
|
|
134
81
|
blockers.push(...inspected.blockers);
|
|
135
82
|
}
|
|
@@ -187,6 +134,7 @@ export async function planFleetSkillUpgradeV1({
|
|
|
187
134
|
complete: discovery.complete,
|
|
188
135
|
workspaceCount: discovery.workspaceRoots.length,
|
|
189
136
|
unreachableRoots: discovery.unreachableRoots,
|
|
137
|
+
issues: discovery.issues,
|
|
190
138
|
},
|
|
191
139
|
affectedProjects,
|
|
192
140
|
blockers,
|
|
@@ -209,7 +157,7 @@ export function formatFleetSkillUpgradePlanHumanV1(plan) {
|
|
|
209
157
|
if (plan.blockers.length > 0) {
|
|
210
158
|
lines.push("Blockers:");
|
|
211
159
|
for (const blocker of plan.blockers) {
|
|
212
|
-
lines.push(`- ${blocker.code}${blocker.workspaceRoot ? `: ${blocker.workspaceRoot}` : ""}${blocker.artifactId ? ` (${blocker.artifactId})` : ""}`);
|
|
160
|
+
lines.push(`- ${blocker.code}${blocker.workspaceRoot ? `: ${blocker.workspaceRoot}` : ""}${blocker.artifactId ? ` (${blocker.artifactId})` : ""}${blocker.detail ? `: ${blocker.detail}` : ""}`);
|
|
213
161
|
}
|
|
214
162
|
}
|
|
215
163
|
lines.push(
|
|
@@ -1394,7 +1394,7 @@ export function resumeCompletedFormalFinishV1({
|
|
|
1394
1394
|
};
|
|
1395
1395
|
}
|
|
1396
1396
|
if (
|
|
1397
|
-
new Set(["0.19.2", "0.20.0", "0.20.1", "0.21.0", "0.21.1", "0.22.0"]).has(
|
|
1397
|
+
new Set(["0.19.2", "0.20.0", "0.20.1", "0.21.0", "0.21.1", "0.22.0", "0.22.1", "0.23.0"]).has(
|
|
1398
1398
|
closeout.artifact.core?.coreVersion,
|
|
1399
1399
|
)
|
|
1400
1400
|
&& (
|