owlrunkit 0.20.0 → 0.21.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 +48 -0
- package/README.md +63 -10
- package/docs/architecture/OWLCODA_RUNKIT_0201_RELEASE_TRUTH_AND_PROFILE_NORMALIZATION_PATCH_DECISION_20260813.md +95 -0
- package/docs/architecture/OWLCODA_RUNKIT_021_TEAM_DELIVERY_PHASE2_PRODUCT_DECISION_20260813.md +249 -0
- package/integrations/codex/skills/owlcoda-runkit/SKILL.md +92 -12
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
- package/package.json +1 -1
- package/packages/attest/README.md +7 -1
- package/packages/attest/consumer-surface-v3.json +275 -0
- package/packages/attest/distribution-manifest-v1.json +14 -0
- package/packages/attest/schemas/canonical-candidate-identity-v1.schema.json +112 -0
- package/packages/attest/schemas/foreign-workspace-filesystem-identity-v1.schema.json +32 -0
- package/packages/attest/schemas/quick-verification-receipt-v4.schema.json +226 -0
- package/packages/attest/src/candidate-identity.mjs +454 -0
- package/packages/attest/src/index.mjs +11 -0
- package/packages/attest/src/quick-receipt-contract.mjs +126 -5
- package/packages/attest/src/quick.mjs +43 -8
- package/{registry-release-policy-v1.json → registry-release-policy-v2.json} +8 -9
- package/sbom.spdx.json +4 -4
- package/scripts/runkit-contract/core-contract.mjs +14 -1
- package/scripts/runkit-contract/fleet-skill-plan.mjs +223 -0
- package/scripts/runkit-contract/formal-workflow.mjs +3 -1
- package/scripts/runkit-contract/inspect-presentation.mjs +56 -0
- package/scripts/runkit-contract/install-codex-skill.mjs +1 -0
- package/scripts/runkit-contract/onboarding-bootstrap.mjs +15 -0
- package/scripts/runkit-contract/onboarding-doctor.mjs +201 -7
- package/scripts/runkit-contract/profile-onboarding.mjs +6 -0
- package/scripts/runkit-contract/project-cli-resolver.mjs +9 -1
- package/scripts/runkit-contract/quick-metrics.mjs +9 -5
- package/scripts/runkit-contract/quick-verify.mjs +108 -24
- package/scripts/runkit-contract/registry-adoption-gate.mjs +12 -3
- package/scripts/runkit-contract/registry-adoption.mjs +10 -5
- package/scripts/runkit-contract/runkit-cli.mjs +289 -19
- package/scripts/runkit-contract/schemas/delivery-lifecycle-v1.schema.json +91 -0
- package/scripts/runkit-contract/schemas/external-gate-v1.schema.json +68 -0
- package/scripts/runkit-contract/schemas/fleet-skill-upgrade-plan-v1.schema.json +140 -0
- package/scripts/runkit-contract/schemas/inspect-compact-v1.schema.json +93 -0
- package/scripts/runkit-contract/schemas/team-delivery-status-v2.schema.json +219 -0
- package/scripts/runkit-contract/schemas/team-project-event-v6.schema.json +82 -0
- package/scripts/runkit-contract/schemas/team-project-event-v7.schema.json +80 -0
- package/scripts/runkit-contract/schemas/team-project-status-v4.schema.json +208 -0
- package/scripts/runkit-contract/sync-release-identity.mjs +87 -0
- package/scripts/runkit-contract/team-delivery.mjs +128 -3
- package/scripts/runkit-contract/team-project.mjs +970 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.21.0
|
|
4
|
+
|
|
5
|
+
- Adds ExternalGateV1 as typed, source-hash-bound Project Driver truth. A due
|
|
6
|
+
pending, blocked, or deferred Gate becomes the dominant gap for its delivery
|
|
7
|
+
stage; superseding observations are append-only and raw capture cannot bypass
|
|
8
|
+
typed intake.
|
|
9
|
+
- Adds DeliveryLifecycleV1 and Project Status V4 so source acceptance,
|
|
10
|
+
integration, materialization, deployment, live readback, and product acceptance are distinct
|
|
11
|
+
evidence facts. Work-ledger completion never auto-promotes a later stage.
|
|
12
|
+
- Adds Team Delivery Status V2 with explicit known-but-unmodeled candidate
|
|
13
|
+
lanes while retaining one Project Driver graph and read-only, no-dispatch
|
|
14
|
+
Team coordination.
|
|
15
|
+
- Adds optional WorkItem Quick-evidence policy and
|
|
16
|
+
`project checkpoint --from-quick-receipt`; ordinary WorkItems remain
|
|
17
|
+
lightweight and no assurance mode changes automatically.
|
|
18
|
+
- Adds read-only `fleet skill-plan` for affected-project inventory, active
|
|
19
|
+
execution/lease blockers, and copyable dry-run, install, and rollback
|
|
20
|
+
commands. It grants no shared-Skill, project, Git, or release authority.
|
|
21
|
+
- Adds a canonical candidate ledger with fixed Git object width, C-locale path
|
|
22
|
+
ordering, complete path/mode/size/content bindings, and a transport-only raw
|
|
23
|
+
binary diff. Object-store growth no longer changes the candidate identity.
|
|
24
|
+
- Adds controller-owned `quick-verify --foreign-workspace` and Quick Receipt
|
|
25
|
+
V4. The target is copied into a disposable consumer; receipts remain under
|
|
26
|
+
the controller and bind target candidate, filesystem, dependency, command,
|
|
27
|
+
and before/after observed zero-write evidence without initializing RunKit in
|
|
28
|
+
the frozen target.
|
|
29
|
+
- Doctor now reports the package-bound and discovered process-wide Skill versions and
|
|
30
|
+
absolute paths, labels drift as a visible non-blocking warning, and keeps the
|
|
31
|
+
actually loaded Skill version honest as `unknown`.
|
|
32
|
+
- Replaces the temporal, candidate-only registry policy with a lifecycle-stable
|
|
33
|
+
registry-gated release artifact policy. The packed README, Skill, policy, and
|
|
34
|
+
SBOM no longer claim that the package is unpublished or that an older version
|
|
35
|
+
is still current; adoption still requires independent exact-registry evidence.
|
|
36
|
+
- Treats formatting-only profile reconciliation as an apply-time no-op. The
|
|
37
|
+
result remains explicit through `normalizationOnly: true`, but owner JSON
|
|
38
|
+
bytes stay unchanged and no migration receipt or tracked diff is created.
|
|
39
|
+
- Makes a version-mismatched bootstrap return the exact successor install and
|
|
40
|
+
dry-run commands instead of only reporting the older CLI's own exact spec.
|
|
41
|
+
- Adds `inspect --json --compact`, a bounded projection of project truth,
|
|
42
|
+
progress, dominant gap, owner, next action, warning groups, execution counts,
|
|
43
|
+
and the unchanged authority boundary without full execution history.
|
|
44
|
+
- Adds Team Delivery Status V2. Missing receipt warnings now carry severity,
|
|
45
|
+
blocking and gate semantics, an actionable recommendation, and deterministic
|
|
46
|
+
aggregation without retroactively requiring Formal evidence.
|
|
47
|
+
- Shows project CLI/Core and process-level shared Skill versions in doctor.
|
|
48
|
+
Skill drift is explicitly non-blocking and includes a fleet activation
|
|
49
|
+
blocker when an active execution or lease prevents safe refresh.
|
|
50
|
+
|
|
3
51
|
## 0.20.0
|
|
4
52
|
|
|
5
53
|
- Adds read-only `team recommend` and `team status` projections over the
|
package/README.md
CHANGED
|
@@ -67,17 +67,42 @@ Independent verification requires a different assigned Agent. Append-only
|
|
|
67
67
|
scope revision can widen or narrow a WorkItem after diagnosis without rewriting
|
|
68
68
|
history, and missing Quick/Formal receipt references remain visible warnings.
|
|
69
69
|
|
|
70
|
-
RunKit 0.20
|
|
70
|
+
RunKit 0.20 Phase 1 adds Team Delivery as a read-only coordination dimension
|
|
71
71
|
over the existing Project Driver. `team recommend` exits for ordinary
|
|
72
72
|
single-owner work, recommends Team only for real coordination facts, exposes
|
|
73
73
|
owned-path conflicts and independent-acceptance gaps, and never dispatches an
|
|
74
74
|
Agent. `team status` projects the existing project graph without storing a
|
|
75
75
|
second graph. Three strict portable contracts—TeamTaskPacket V2,
|
|
76
76
|
TeamAcceptancePacket V2, and CandidateTransferPacket V1—can be validated on a
|
|
77
|
-
machine that does not have the local `manage-agent-team` Skill. This
|
|
77
|
+
machine that does not have the local `manage-agent-team` Skill. This phase
|
|
78
78
|
does not add automatic or assisted dispatch and does not change Quick or Formal
|
|
79
79
|
assurance.
|
|
80
80
|
|
|
81
|
+
RunKit 0.21.0 Phase 2 keeps Team Delivery read-only while making delivery truth
|
|
82
|
+
explicit. Typed external Gates may block the relevant stage without parsing a
|
|
83
|
+
domain product's documents. Source acceptance, integration, materialization, deployment, live
|
|
84
|
+
readback, and product acceptance are separate evidence-bound lifecycle facts.
|
|
85
|
+
Project Status V4 and Team Delivery Status V2 expose that progression and an
|
|
86
|
+
explicit inventory of known-but-unmodeled candidates. An optional WorkItem
|
|
87
|
+
policy can require a currently attested Quick receipt, and `fleet skill-plan`
|
|
88
|
+
shows affected projects, active blockers, and copyable install/rollback commands
|
|
89
|
+
without mutating the shared Skill. No command dispatches an Agent or raises
|
|
90
|
+
assurance automatically.
|
|
91
|
+
|
|
92
|
+
The same phase adds a fixed-width canonical candidate ledger and
|
|
93
|
+
controller-owned Foreign Quick. A controller running 0.21 may verify a
|
|
94
|
+
disjoint frozen Git worktree without installing RunKit, changing package/lock
|
|
95
|
+
files, or creating `.owlcoda/runkit` in that target. Doctor also exposes the
|
|
96
|
+
package-bound and discovered process-wide Skill identities; it cannot prove which
|
|
97
|
+
instructions an already-running Agent process loaded, so that field remains
|
|
98
|
+
`unknown`.
|
|
99
|
+
|
|
100
|
+
This release also folds in the upgrade-usability patch: cross-version bootstrap
|
|
101
|
+
failures return copyable install and retry commands; `inspect --json --compact`
|
|
102
|
+
omits historical payloads; Team receipt warnings are non-blocking, actionable,
|
|
103
|
+
and grouped; doctor reports project CLI/Core separately from a process-level
|
|
104
|
+
shared Skill; and formatting-only profile reconciliation is a zero-write apply.
|
|
105
|
+
|
|
81
106
|
The 0.18 Project Driver is a bounded surface for new projects and controlled
|
|
82
107
|
dogfood. Its product name does not claim to be a general long-running,
|
|
83
108
|
multi-phase, or enterprise control plane. Version 0.18 adds one bounded
|
|
@@ -91,13 +116,13 @@ separate authority boundaries.
|
|
|
91
116
|
|
|
92
117
|
## Install
|
|
93
118
|
|
|
94
|
-
`owlrunkit@0.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
119
|
+
This package is the lifecycle-stable `owlrunkit@0.21.0` release artifact.
|
|
120
|
+
Registry adoption remains fail-closed until its exact official npm version,
|
|
121
|
+
shasum, integrity, and tarball URL are independently verified. Local tarballs
|
|
122
|
+
remain candidate-test inputs and are never adoption provenance.
|
|
98
123
|
|
|
99
124
|
```bash
|
|
100
|
-
npm install --save-exact owlrunkit@0.
|
|
125
|
+
npm install --save-exact owlrunkit@0.21.0
|
|
101
126
|
```
|
|
102
127
|
|
|
103
128
|
Use `npx --no-install owlrunkit` for project commands. The package bootstrap
|
|
@@ -113,11 +138,12 @@ the project Config must independently bind the same Core.
|
|
|
113
138
|
```bash
|
|
114
139
|
npx --no-install owlrunkit --version
|
|
115
140
|
npx --no-install owlrunkit bootstrap --workspace /absolute/path/to/project \
|
|
116
|
-
--exact owlrunkit@0.
|
|
141
|
+
--exact owlrunkit@0.21.0 --dry-run
|
|
117
142
|
npx --no-install owlrunkit bootstrap --workspace /absolute/path/to/project \
|
|
118
|
-
--exact owlrunkit@0.
|
|
143
|
+
--exact owlrunkit@0.21.0 --apply
|
|
119
144
|
npx --no-install owlrunkit init --workspace /absolute/path/to/project
|
|
120
145
|
npx --no-install owlrunkit doctor --workspace /absolute/path/to/project
|
|
146
|
+
npx --no-install owlrunkit inspect --workspace /absolute/path/to/project --json --compact
|
|
121
147
|
npx --no-install owlrunkit mode recommend --workspace /absolute/path/to/project
|
|
122
148
|
npx --no-install owlrunkit mode status --workspace /absolute/path/to/project
|
|
123
149
|
```
|
|
@@ -129,6 +155,12 @@ back doctor. Dry-run is zero-write; failed apply restores the governed preimage
|
|
|
129
155
|
and keeps a failure receipt. It reports shared Skill drift but never silently
|
|
130
156
|
updates a user or fleet Skill.
|
|
131
157
|
|
|
158
|
+
When an older CLI receives a different exact successor spec, bootstrap returns
|
|
159
|
+
two bounded repair commands: install that exact project dependency, then rerun
|
|
160
|
+
the successor's project-local bootstrap dry-run. Doctor keeps shared Skill
|
|
161
|
+
drift non-blocking and reports why fleet-safe activation must wait when an
|
|
162
|
+
active execution or lease is present.
|
|
163
|
+
|
|
132
164
|
`mode recommend` is read-only and defaults to human output; add `--json` for a
|
|
133
165
|
machine contract. The five user modes are presets over `continuity`
|
|
134
166
|
(`none | project_driver`) and `assurance` (`none | quick | formal`). They never
|
|
@@ -156,6 +188,12 @@ raising assurance. Every result keeps Agent dispatch and all external authority
|
|
|
156
188
|
false. Phase 1 contains no launcher, scheduler, model ranking, or vendor CLI
|
|
157
189
|
federation.
|
|
158
190
|
|
|
191
|
+
`team status` emits Team Delivery Status V2. Each
|
|
192
|
+
`no_bound_verification_receipt` entry includes `severity`, `blocking`,
|
|
193
|
+
`requiredAtGate`, and `recommendedAction`, plus an aggregated warning summary.
|
|
194
|
+
Completed historical WorkItems whose evidence policy did not require a reusable
|
|
195
|
+
receipt are not retroactively told to add Formal evidence.
|
|
196
|
+
|
|
159
197
|
## Project Driver: Coordinate a multi-Agent project
|
|
160
198
|
|
|
161
199
|
RunKit 0.18 keeps the project alive independently of any one Agent or chat.
|
|
@@ -371,7 +409,9 @@ and launchers that do not resolve to exact local files. Detection directly
|
|
|
371
409
|
supports lock-bound npm plus exact project-installed pnpm, Yarn, and Bun
|
|
372
410
|
launchers. A PATH-only package manager remains review-required. A dry-run that
|
|
373
411
|
only canonicalizes JSON formatting reports `normalizationOnly: true` instead of
|
|
374
|
-
showing unexplained hash drift with an empty update list.
|
|
412
|
+
showing unexplained hash drift with an empty update list. Applying that plan is
|
|
413
|
+
a zero-write `profiles_already_current` result: owner bytes remain unchanged and
|
|
414
|
+
no migration receipt or tracked formatting diff is created.
|
|
375
415
|
|
|
376
416
|
The dry-run is the V2 detection contract. It reports `profiles_insufficient`
|
|
377
417
|
instead of `profiles_detected` when Git-visible source paths are uncovered or
|
|
@@ -427,6 +467,9 @@ npx --no-install owlrunkit quick-verify --workspace . --stdin-file ./remote-chec
|
|
|
427
467
|
-- ssh test-host /bin/sh
|
|
428
468
|
npx --no-install owlrunkit quick-verify --workspace . --isolate \
|
|
429
469
|
--dependency-root /absolute/dependency-consumer -- npm test
|
|
470
|
+
npx --no-install owlrunkit quick-verify --workspace /absolute/controller \
|
|
471
|
+
--foreign-workspace /absolute/frozen-target \
|
|
472
|
+
--dependency-root /absolute/dependency-consumer -- npm test
|
|
430
473
|
npx --no-install owlrunkit quick-verify --workspace . \
|
|
431
474
|
--bind-ignored .generated/audit.json -- node ./verify-generated.mjs
|
|
432
475
|
npx --no-install owlrunkit quick-reuse --workspace . \
|
|
@@ -461,6 +504,16 @@ into the consumer, prepends its binary directory, and hash-binds package, lock,
|
|
|
461
504
|
installed-package, and executable metadata before and after execution. RunKit
|
|
462
505
|
does not install dependencies or contact a registry for this command.
|
|
463
506
|
|
|
507
|
+
`--foreign-workspace` emits Quick Receipt V4 and always uses a disposable
|
|
508
|
+
consumer. The exact project-local CLI, receipt store, stdout/stderr, and any
|
|
509
|
+
stdin material remain under the controller `--workspace`; the target receives
|
|
510
|
+
no RunKit initialization. The receipt records the target realpath, HEAD,
|
|
511
|
+
fixed-width status ledger, path/mode/size/content hashes, before/after governed
|
|
512
|
+
filesystem identity, command argv/cwd, and dependency environment. A permanent
|
|
513
|
+
observed target change invalidates the receipt. This is before/after evidence,
|
|
514
|
+
not an OS write sandbox or proof that no transient write was restored between
|
|
515
|
+
observations.
|
|
516
|
+
|
|
464
517
|
Repeatable literal `--bind-ignored` paths opt specific ignored workspace bytes
|
|
465
518
|
into Workspace Snapshot V2. Missing is a bound state; file or directory changes
|
|
466
519
|
invalidate Quick. Unrequested ignored paths remain explicitly outside the
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# OwlRunKit 0.20.1 Release Truth and Profile Normalization Patch Decision
|
|
2
|
+
|
|
3
|
+
Date: 2026-08-13
|
|
4
|
+
Status: `release_artifact_registry_gated`
|
|
5
|
+
|
|
6
|
+
## Decision
|
|
7
|
+
|
|
8
|
+
OwlRunKit 0.20.1 is a bounded patch over 0.20.0. It fixes six defects found by
|
|
9
|
+
installing the official 0.20.0 registry package into an isolated consumer and
|
|
10
|
+
then running bootstrap, doctor, profile validation, Team recommendation, and
|
|
11
|
+
Quick attestation.
|
|
12
|
+
|
|
13
|
+
The patch does not add Team dispatch, new assurance gates, deployment
|
|
14
|
+
authority, or any other product branch.
|
|
15
|
+
|
|
16
|
+
## Verified 0.20.0 dogfood facts
|
|
17
|
+
|
|
18
|
+
- Exact registry installation and project-local bootstrap completed.
|
|
19
|
+
- Doctor was ready, 28 profiles validated, Team recommendation remained
|
|
20
|
+
read-only, and Quick attestation returned GO.
|
|
21
|
+
- The installed 0.20.0 README, Skill, and release policy still carried stale
|
|
22
|
+
candidate-lifecycle wording and a stale 0.19.2 registry pointer.
|
|
23
|
+
- Applying profile reconciliation rewrote tracked `profiles.json` bytes for a
|
|
24
|
+
formatting-only normalization even though the update list was empty.
|
|
25
|
+
- An older bootstrap receiving the 0.20.0 exact spec reported only its own
|
|
26
|
+
0.19.1 exact spec and a generic issue code instead of the install-and-retry
|
|
27
|
+
correction.
|
|
28
|
+
- `inspect --json` retained complete execution and Project Driver history for
|
|
29
|
+
a routine blank-session status read.
|
|
30
|
+
- Five historical `no_bound_verification_receipt` warnings were non-blocking
|
|
31
|
+
but lacked severity, gate semantics, a recommended action, and aggregation.
|
|
32
|
+
- Doctor was ready while the project CLI/Core and process-level shared Skill
|
|
33
|
+
were on different versions, with no visible reason why fleet activation was
|
|
34
|
+
deferred.
|
|
35
|
+
|
|
36
|
+
## Product contract
|
|
37
|
+
|
|
38
|
+
### Lifecycle-stable release artifacts
|
|
39
|
+
|
|
40
|
+
`OwlCodaRunKitRegistryReleasePolicyV2` describes immutable artifact behavior,
|
|
41
|
+
not mutable registry time:
|
|
42
|
+
|
|
43
|
+
- `status=release_artifact_registry_gated`;
|
|
44
|
+
- `artifactVersion` is the package version;
|
|
45
|
+
- `rollbackRelease` is the exact already-published rollback baseline;
|
|
46
|
+
- adoption requires external exact-registry version, shasum, integrity, and
|
|
47
|
+
tarball evidence;
|
|
48
|
+
- the artifact does not encode mutable publication state or name a moving
|
|
49
|
+
latest release.
|
|
50
|
+
|
|
51
|
+
The V1 policy remains historical and is not reinterpreted in place.
|
|
52
|
+
|
|
53
|
+
### Formatting-only profile reconciliation
|
|
54
|
+
|
|
55
|
+
A dry-run may still report `normalizationOnly: true` and show the canonical
|
|
56
|
+
proposal. Applying that same plan is a semantic no-op:
|
|
57
|
+
|
|
58
|
+
- status is `profiles_already_current`;
|
|
59
|
+
- `writesPerformed=0`;
|
|
60
|
+
- the owner profile bytes remain unchanged;
|
|
61
|
+
- no reconcile receipt is created.
|
|
62
|
+
|
|
63
|
+
Real profile additions or command/path updates retain the existing atomic
|
|
64
|
+
write, receipt, and rollback behavior.
|
|
65
|
+
|
|
66
|
+
### Compact, actionable upgrade and recovery output
|
|
67
|
+
|
|
68
|
+
- A version-mismatched bootstrap returns the exact `npm install --save-exact`
|
|
69
|
+
command for the requested successor and the matching project-local bootstrap
|
|
70
|
+
dry-run command.
|
|
71
|
+
- `inspect --json --compact` emits `OwlCodaRunKitInspectCompactV1`: project
|
|
72
|
+
truth hash, progress, dominant gap, owner, next action, warning groups,
|
|
73
|
+
execution counts, and the false authority boundary only.
|
|
74
|
+
- Existing full inspect remains unchanged; compact cannot be combined with
|
|
75
|
+
history, a selected run, or verbose output.
|
|
76
|
+
|
|
77
|
+
### Team warning and shared Skill diagnosis
|
|
78
|
+
|
|
79
|
+
Team Delivery Status V2 enriches and groups Project Driver warnings while
|
|
80
|
+
leaving Status V1 unchanged. A missing Quick/Formal reference remains
|
|
81
|
+
non-blocking, does not prove that any receipt was attested, and does not impose
|
|
82
|
+
retroactive Formal work on a completed historical WorkItem.
|
|
83
|
+
|
|
84
|
+
Doctor reports project-local CLI, project Core, and process-level shared Skill
|
|
85
|
+
versions separately. Shared Skill drift does not change `ready`; if fleet-safe
|
|
86
|
+
activation is blocked by an active execution or lease, the blocker and the
|
|
87
|
+
wait-then-refresh action are visible.
|
|
88
|
+
|
|
89
|
+
## Authority boundary
|
|
90
|
+
|
|
91
|
+
This document and the packaged artifact grant no npm publication, project
|
|
92
|
+
adoption, Git integration, deployment, production, or business authority.
|
|
93
|
+
All authorization fields remain false. Registry adoption becomes eligible only
|
|
94
|
+
after separate external evidence binds the exact official-registry version,
|
|
95
|
+
shasum, integrity, and tarball URL.
|
package/docs/architecture/OWLCODA_RUNKIT_021_TEAM_DELIVERY_PHASE2_PRODUCT_DECISION_20260813.md
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# OwlRunKit 0.21 Team Delivery Phase 2 Product Decision
|
|
2
|
+
|
|
3
|
+
Date: 2026-08-13
|
|
4
|
+
Status: `product_contract_definition / implementation_and_release_truth_tracked_separately`
|
|
5
|
+
|
|
6
|
+
## Decision
|
|
7
|
+
|
|
8
|
+
OwlRunKit 0.21 extends the existing Project Driver and read-only Team Delivery
|
|
9
|
+
projection with two missing kinds of durable truth:
|
|
10
|
+
|
|
11
|
+
1. typed external Gates produced by domain-owned adapters; and
|
|
12
|
+
2. an evidence-bound delivery lifecycle that keeps source acceptance,
|
|
13
|
+
integration, materialization, deployment, live readback, and product acceptance separate.
|
|
14
|
+
|
|
15
|
+
Project Driver remains the only active task graph. Phase 2 does not add a
|
|
16
|
+
scheduler, start an Agent, select a model, increase assurance, parse arbitrary
|
|
17
|
+
domain documents, or grant Git, release, deployment, production, or business
|
|
18
|
+
authority.
|
|
19
|
+
|
|
20
|
+
The implementation order is fixed:
|
|
21
|
+
|
|
22
|
+
1. ExternalGateV1 plus DeliveryLifecycleV1 contracts and read-only projection;
|
|
23
|
+
2. explicit Quick-receipt binding for WorkItems that declare an evidence
|
|
24
|
+
requirement;
|
|
25
|
+
3. inventory of explicit candidate artifacts not yet represented as active
|
|
26
|
+
WorkItem lanes; and
|
|
27
|
+
4. copyable fleet Skill dry-run, install, and rollback plans.
|
|
28
|
+
|
|
29
|
+
The OwlFootball 0.20 dogfood adds three bounded Phase 2 corrections to the
|
|
30
|
+
same release: a canonical candidate identity, controller-owned verification of
|
|
31
|
+
a frozen foreign worktree, and explicit Doctor visibility for package/shared
|
|
32
|
+
Skill drift. Commit-rebinding remains a separate future receipt contract and
|
|
33
|
+
is not implied by these additions.
|
|
34
|
+
|
|
35
|
+
Assisted or automatic Agent dispatch is not part of 0.21. It requires a later
|
|
36
|
+
Owner decision after real dogfood demonstrates lower handoff time or lower
|
|
37
|
+
controller intervention.
|
|
38
|
+
|
|
39
|
+
## Stable product model
|
|
40
|
+
|
|
41
|
+
The independent dimensions remain:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
continuity none | project_driver
|
|
45
|
+
coordination none | team_delivery
|
|
46
|
+
assurance none | quick | formal
|
|
47
|
+
acceptance L0 | L1 | L2 | L3
|
|
48
|
+
authority externally granted; never inferred by RunKit
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Phase 2 adds delivery state without folding it into those dimensions:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
work ledger
|
|
55
|
+
-> source accepted
|
|
56
|
+
-> integrated
|
|
57
|
+
-> materialized
|
|
58
|
+
-> deployed
|
|
59
|
+
-> live readback
|
|
60
|
+
-> product accepted
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Every arrow requires a new append-only fact and evidence. A passed source Gate
|
|
64
|
+
does not imply integration. Integration does not imply a sealed or built
|
|
65
|
+
artifact. Materialization does not imply deployment. Deployment does not imply
|
|
66
|
+
a healthy readback. A healthy readback does not imply product or business
|
|
67
|
+
acceptance.
|
|
68
|
+
|
|
69
|
+
## ExternalGateV1
|
|
70
|
+
|
|
71
|
+
RunKit does not know what an OwlFootball packaging Gate, a MES runtime Gate, or
|
|
72
|
+
another domain decision means. The domain product owns that judgment. A
|
|
73
|
+
domain-owned adapter may emit one strict generic Gate observation containing:
|
|
74
|
+
|
|
75
|
+
- a stable Gate identity and title;
|
|
76
|
+
- the delivery stage that requires it;
|
|
77
|
+
- `pending`, `passed`, `blocked`, or `deferred` status;
|
|
78
|
+
- the responsible Agent;
|
|
79
|
+
- adapter identity, source reference, and exact SHA-256 source digest;
|
|
80
|
+
- a concise summary and evidence references; and
|
|
81
|
+
- an all-false authority boundary.
|
|
82
|
+
|
|
83
|
+
The typed Project Driver command records the observation as an immutable event.
|
|
84
|
+
A later observation must explicitly supersede the current observation for that
|
|
85
|
+
Gate. RunKit validates the structure and source binding; it does not parse or
|
|
86
|
+
reinterpret the domain source.
|
|
87
|
+
|
|
88
|
+
An unresolved external Gate is visible throughout status projection. Once the
|
|
89
|
+
work ledger is otherwise ready for the Gate's delivery stage, that Gate becomes
|
|
90
|
+
the dominant gap and replaces any misleading execution next action.
|
|
91
|
+
|
|
92
|
+
## DeliveryLifecycleV1
|
|
93
|
+
|
|
94
|
+
The lifecycle contains six fixed stages:
|
|
95
|
+
|
|
96
|
+
| Stage | Positive fact | Other honest outcomes |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| source | `accepted` | `rejected` |
|
|
99
|
+
| integration | `integrated` | `rejected` |
|
|
100
|
+
| materialization | `materialized` | `failed` |
|
|
101
|
+
| deployment | `deployed` | `failed`, `rolled_back` |
|
|
102
|
+
| live readback | `passed` | `failed` |
|
|
103
|
+
| product acceptance | `accepted` | `rejected`, `deferred` |
|
|
104
|
+
|
|
105
|
+
A lifecycle record binds one stage, outcome, responsible Agent, evidence, and
|
|
106
|
+
the external Gates used for that transition. The current projection includes
|
|
107
|
+
all six stages, the highest positively established stage, the next required
|
|
108
|
+
stage, any blocking stage, and unresolved external Gates.
|
|
109
|
+
|
|
110
|
+
The runtime enforces ordering. It rejects integration before source acceptance,
|
|
111
|
+
materialization before integration, deployment before materialization, live
|
|
112
|
+
readback before deployment, and product acceptance before a passed live
|
|
113
|
+
readback. A later correction for the same stage
|
|
114
|
+
must supersede the current stage record. A correction cannot silently rewrite
|
|
115
|
+
downstream facts.
|
|
116
|
+
|
|
117
|
+
Recording a deployed or accepted fact is evidence bookkeeping only. Every
|
|
118
|
+
result continues to carry `authorizationGranted=false` and cannot authorize the
|
|
119
|
+
underlying action.
|
|
120
|
+
|
|
121
|
+
## Versioning and compatibility
|
|
122
|
+
|
|
123
|
+
Published predecessor contracts are immutable:
|
|
124
|
+
|
|
125
|
+
- TeamProject Event V1-V5 retain their existing bytes and meanings;
|
|
126
|
+
- TeamProject Status V1-V3 retain their existing fields and projections; and
|
|
127
|
+
- Team Delivery Status V1 retains its Phase 1 surface.
|
|
128
|
+
|
|
129
|
+
Phase 2 uses successor contracts:
|
|
130
|
+
|
|
131
|
+
- TeamProject Event V6 for external Gate and delivery lifecycle facts;
|
|
132
|
+
- TeamProject Event V7 for WorkItem evidence policy and receipt-bound
|
|
133
|
+
checkpoint facts;
|
|
134
|
+
- TeamProject Status V4 for ExternalGateV1 and DeliveryLifecycleV1 projection;
|
|
135
|
+
- Team Delivery Status V2 for the corresponding read-only Team view.
|
|
136
|
+
|
|
137
|
+
Raw generic capture may not create V6 or V7 facts. Operators use typed commands so
|
|
138
|
+
the current Gate, lifecycle ordering, source binding, and exact retry rules are
|
|
139
|
+
checked before the event is written.
|
|
140
|
+
|
|
141
|
+
## Receipt binding
|
|
142
|
+
|
|
143
|
+
Phase 2 adds `project work-item require-evidence` and
|
|
144
|
+
`project checkpoint --from-quick-receipt`. The WorkItem policy is append-only
|
|
145
|
+
and may select `none` or `quick`; it does not represent Formal acceptance.
|
|
146
|
+
Receipt binding attests the current Quick receipt and persists an immutable
|
|
147
|
+
reference. It becomes blocking only when the WorkItem contract explicitly
|
|
148
|
+
requires Quick evidence. Existing WorkItems, measurable work, and
|
|
149
|
+
assurance=`none` are not retroactively upgraded to Quick or Formal.
|
|
150
|
+
|
|
151
|
+
## Explicit candidate inventory
|
|
152
|
+
|
|
153
|
+
Team Delivery may report `unmodeled_candidate_lanes` only from artifacts RunKit
|
|
154
|
+
can identify explicitly, such as a verified DeliveryPacket, target snapshot,
|
|
155
|
+
data-candidate event, or external Gate. It may not infer a candidate from an
|
|
156
|
+
arbitrary dirty worktree or create a second task graph.
|
|
157
|
+
|
|
158
|
+
The inventory is read-only. Turning an artifact into active Project Driver work
|
|
159
|
+
requires a separate typed project action and authority.
|
|
160
|
+
|
|
161
|
+
## Fleet Skill operations
|
|
162
|
+
|
|
163
|
+
Shared Skill drift remains non-blocking for a project-local CLI unless an exact
|
|
164
|
+
project contract says otherwise. A fleet plan may show affected projects and
|
|
165
|
+
copyable dry-run, install, and rollback commands. It may not silently update a
|
|
166
|
+
shared Skill while any project has an active execution or lease.
|
|
167
|
+
|
|
168
|
+
## Canonical candidate identity
|
|
169
|
+
|
|
170
|
+
The primary dirty-candidate identity is a canonical ordered ledger, not a raw
|
|
171
|
+
`git diff` digest. It records the target HEAD and tracked tree plus every
|
|
172
|
+
changed path, prior rename path, operation, Git status, file kind, mode, byte
|
|
173
|
+
length, and content SHA-256. Discovery uses `LC_ALL=C`, disables optional Git
|
|
174
|
+
locks, and fixes `core.abbrev=40`; the command, environment, Git version,
|
|
175
|
+
ledger byte length, ledger hash, and candidate fingerprint are persisted.
|
|
176
|
+
|
|
177
|
+
The full-index binary diff remains available as a transport artifact with a
|
|
178
|
+
fixed command, but its digest is explicitly not the candidate identity.
|
|
179
|
+
|
|
180
|
+
## Controller-owned Foreign Quick
|
|
181
|
+
|
|
182
|
+
`quick-verify --workspace <controller> --foreign-workspace <target>` keeps the
|
|
183
|
+
project-local CLI and every RunKit artifact in the controller. The target must
|
|
184
|
+
be a separate real Git worktree root. RunKit copies its visible source into a
|
|
185
|
+
disposable consumer, optionally projects an already-installed disjoint
|
|
186
|
+
dependency root, and binds Quick Receipt V4 to the target's canonical candidate
|
|
187
|
+
and bounded filesystem identities before and after execution.
|
|
188
|
+
|
|
189
|
+
The current resolver remains fail-closed: a controller CLI may not masquerade
|
|
190
|
+
as the target's older or absent project-local CLI. `zeroWriteObserved` means
|
|
191
|
+
the governed target state matched before and after; RunKit does not claim an OS
|
|
192
|
+
write sandbox or prove that a transient write restored before the second
|
|
193
|
+
observation never occurred.
|
|
194
|
+
|
|
195
|
+
## Doctor Skill drift
|
|
196
|
+
|
|
197
|
+
Doctor reports package-bound and discovered process-wide Skill versions and absolute
|
|
198
|
+
paths. A mismatch is a visible non-blocking warning when the project-local CLI
|
|
199
|
+
and Core are valid. RunKit cannot observe which instruction bytes an existing
|
|
200
|
+
Agent process loaded, so `loadedSkillVersion` remains `unknown` and the repair
|
|
201
|
+
guidance starts a new session using the package-bound Skill. Fleet mutation
|
|
202
|
+
still requires the separate safe plan/install boundary.
|
|
203
|
+
|
|
204
|
+
## Acceptance scenarios
|
|
205
|
+
|
|
206
|
+
1. A typed pending external Gate is projected with its source hash, blocks the
|
|
207
|
+
relevant delivery stage, and becomes the unique dominant gap when due.
|
|
208
|
+
2. A later exact superseding observation may pass the Gate; stale, duplicate,
|
|
209
|
+
or source-unbound observations fail closed.
|
|
210
|
+
3. Source, integration, materialization, deployment, live readback, and product acceptance each
|
|
211
|
+
require a separate evidence-bound event and never auto-promote.
|
|
212
|
+
4. Out-of-order lifecycle facts, unresolved required external Gates, and
|
|
213
|
+
attempts to revise an earlier stage beneath downstream truth fail before
|
|
214
|
+
writing.
|
|
215
|
+
5. Status V1-V3 and Team Delivery Status V1 remain unchanged; V4/V2 expose the
|
|
216
|
+
new fields under new schema identities.
|
|
217
|
+
6. Raw project capture cannot bypass typed V6 intake.
|
|
218
|
+
7. Team and Project status remain read-only and dispatch remains disabled.
|
|
219
|
+
8. No result grants Git, release, deployment, production, business, automation,
|
|
220
|
+
money, credential, or Agent-dispatch authority.
|
|
221
|
+
9. Quick-receipt binding never forces assurance on an existing WorkItem that
|
|
222
|
+
did not explicitly require it.
|
|
223
|
+
10. Candidate inventory is derived only from explicit artifacts and does not
|
|
224
|
+
infer arbitrary dirty-worktree truth.
|
|
225
|
+
11. Canonical candidate identity remains byte-stable when only Git object
|
|
226
|
+
abbreviation settings or unrelated object-store population changes.
|
|
227
|
+
12. Foreign Quick writes receipts only under the controller, creates no target
|
|
228
|
+
`.owlcoda/runkit`, binds target/dependency/command evidence, and invalidates
|
|
229
|
+
any permanent governed target delta observed after execution.
|
|
230
|
+
13. Doctor exposes package/process Skill drift and absolute package Skill path
|
|
231
|
+
without claiming knowledge of the Skill already loaded by an Agent.
|
|
232
|
+
|
|
233
|
+
## Non-goals
|
|
234
|
+
|
|
235
|
+
- no automatic or assisted Agent launch;
|
|
236
|
+
- no model or vendor selection;
|
|
237
|
+
- no general scheduler or second graph;
|
|
238
|
+
- no automatic assurance escalation;
|
|
239
|
+
- no parsing of domain product contracts inside Core;
|
|
240
|
+
- no implicit deployment, product acceptance, or business verdict;
|
|
241
|
+
- no shared Skill mutation without fleet-safe explicit invocation;
|
|
242
|
+
- no publication claim from repository source or test success.
|
|
243
|
+
|
|
244
|
+
## Claims boundary
|
|
245
|
+
|
|
246
|
+
This document defines the Phase 2 product contract. Its presence does not prove
|
|
247
|
+
implementation completion, package publication, project adoption, shared Skill
|
|
248
|
+
activation, runtime deployment, or business acceptance. Those facts require
|
|
249
|
+
their own current receipts and external readback.
|
|
@@ -7,16 +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
|
|
11
|
-
Core `0.
|
|
12
|
-
`sha256:
|
|
13
|
-
|
|
14
|
-
`owlrunkit@0.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
`1bc119d24879bdd8959af16b364af55ca9d61ea9` and canonical npm tarball URL
|
|
19
|
-
`https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.16.1.tgz`.
|
|
10
|
+
Bundled release artifact: standalone `owlrunkit@0.21.0`, bundling Contract `0.2` and
|
|
11
|
+
Core `0.21.0` with manifest
|
|
12
|
+
`sha256:f85b9bf8c32705d5f5dfebdb653e83ac8d1ac0468214c17f230cbd2de04246fd`.
|
|
13
|
+
Registry adoption remains fail-closed until exact official npm registry
|
|
14
|
+
provenance for `owlrunkit@0.21.0` is independently verified. The published
|
|
15
|
+
rollback baseline for this artifact is `owlrunkit@0.20.0`, with SHA-1
|
|
16
|
+
`b123f5ea33a4f500961a0df3226ed0ca409d111d` and canonical npm tarball URL
|
|
17
|
+
`https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.20.0.tgz`.
|
|
20
18
|
The root `owlcoda` package has a separate version lifecycle.
|
|
21
19
|
|
|
22
20
|
The session is an execution interface. Project artifacts are the system of record.
|
|
@@ -43,6 +41,80 @@ on a user-level `manage-agent-team` Skill at runtime. Core does not choose model
|
|
|
43
41
|
vendors, score Agents, start tasks, or grant Git, release, deployment,
|
|
44
42
|
production, business, automation, or money authority.
|
|
45
43
|
|
|
44
|
+
## Team Delivery Phase 2
|
|
45
|
+
|
|
46
|
+
Use successor status when external acceptance or delivery state must remain
|
|
47
|
+
distinct from the Project Driver work ledger:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npx --no-install owlrunkit project reconcile --workspace "$PROJECT_ROOT" \
|
|
51
|
+
--reconciliation-id <id> --at <ISO-UTC> --gate-id <gate> --title <title> \
|
|
52
|
+
--required-for <source|integration|materialization|deployment|live_readback|product_acceptance> \
|
|
53
|
+
--gate-status <pending|passed|blocked|deferred> --owner-agent <agent> \
|
|
54
|
+
--source-adapter <adapter> --source-ref <ref> --source-sha256 <sha256:...> \
|
|
55
|
+
--summary <text> --evidence <ref>
|
|
56
|
+
npx --no-install owlrunkit project delivery record --workspace "$PROJECT_ROOT" \
|
|
57
|
+
--record-id <id> --at <ISO-UTC> --stage <stage> --stage-status <outcome> \
|
|
58
|
+
--owner-agent <agent> --summary <text> --evidence <ref>
|
|
59
|
+
npx --no-install owlrunkit team status --workspace "$PROJECT_ROOT"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
ExternalGateV1 is a typed adapter observation; Core does not parse domain
|
|
63
|
+
product documents. DeliveryLifecycleV1 records source acceptance, integration,
|
|
64
|
+
materialization, deployment, live readback, and product acceptance separately and never
|
|
65
|
+
auto-promotes. `unmodeledCandidateLanes` contains only explicit RunKit facts,
|
|
66
|
+
not guesses from a dirty worktree. Dispatch and authority remain false.
|
|
67
|
+
|
|
68
|
+
An existing WorkItem stays lightweight unless a typed policy explicitly
|
|
69
|
+
requires Quick evidence. When required, bind one currently attested receipt:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npx --no-install owlrunkit project work-item require-evidence \
|
|
73
|
+
--workspace "$PROJECT_ROOT" --policy-id <id> --at <ISO-UTC> \
|
|
74
|
+
--work-item <id> --owner-agent <agent> --requirement quick \
|
|
75
|
+
--reason <text> --evidence <ref>
|
|
76
|
+
npx --no-install owlrunkit project checkpoint --workspace "$PROJECT_ROOT" \
|
|
77
|
+
--checkpoint-id <id> --at <ISO-UTC> --assignment-id <id> --work-item <id> \
|
|
78
|
+
--state completed --summary <text> --from-quick-receipt <receipt.json>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
For shared Skill drift, run the read-only fleet plan before any explicit
|
|
82
|
+
installer action:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npx --no-install owlrunkit fleet skill-plan \
|
|
86
|
+
--skill-root "$RUNKIT_SKILL_TARGET" --archive-root "$RUNKIT_SKILL_ARCHIVE_ROOT"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Doctor reports both the package-bound and discovered shared Skill absolute
|
|
90
|
+
paths and versions. Shared drift is visible but non-blocking for a valid
|
|
91
|
+
project-local CLI. `loadedSkillVersion=unknown` is deliberate: RunKit cannot
|
|
92
|
+
inspect which instructions an already-running Agent process loaded. Start a
|
|
93
|
+
new Agent session with the package-bound Skill when current instructions are
|
|
94
|
+
required.
|
|
95
|
+
|
|
96
|
+
For one exact verification against a frozen worktree that must not receive
|
|
97
|
+
RunKit state, use the controller-owned lane:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
npx --no-install owlrunkit quick-verify \
|
|
101
|
+
--workspace "$CONTROLLER_ROOT" --foreign-workspace "$FROZEN_TARGET" \
|
|
102
|
+
--dependency-root "$DEPENDENCY_ROOT" -- <executable> [args...]
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Receipt V4 stays under the controller and binds the target's canonical
|
|
106
|
+
candidate ledger, before/after governed filesystem identity, disposable
|
|
107
|
+
consumer, dependency environment, and exact command. Treat
|
|
108
|
+
`zeroWriteObserved=true` as before/after observed evidence, not proof that an
|
|
109
|
+
OS-level transient write could not have been restored. Never replace the
|
|
110
|
+
existing project-local CLI fail-closed resolver with an ancestor/global CLI.
|
|
111
|
+
|
|
112
|
+
Treat Team status warnings as typed advice. A
|
|
113
|
+
`no_bound_verification_receipt` warning is non-blocking unless a separate gate
|
|
114
|
+
contract says otherwise; do not make historical assurance=`none` work run
|
|
115
|
+
Formal retroactively. Prefer the aggregated warning summary for blank-session
|
|
116
|
+
recovery and expand individual WorkItems only when action is required.
|
|
117
|
+
|
|
46
118
|
## Project Driver actions
|
|
47
119
|
|
|
48
120
|
Translate ordinary user requests into durable typed project actions. Do not ask
|
|
@@ -233,14 +305,22 @@ below has no CLI entry.
|
|
|
233
305
|
|
|
234
306
|
```bash
|
|
235
307
|
npx --no-install owlrunkit bootstrap --workspace "$PROJECT_ROOT" \
|
|
236
|
-
--exact owlrunkit@0.
|
|
308
|
+
--exact owlrunkit@0.21.0 --dry-run
|
|
237
309
|
npx --no-install owlrunkit bootstrap --workspace "$PROJECT_ROOT" \
|
|
238
|
-
--exact owlrunkit@0.
|
|
310
|
+
--exact owlrunkit@0.21.0 --apply
|
|
239
311
|
npx --no-install owlrunkit init --workspace "$PROJECT_ROOT"
|
|
240
312
|
npx --no-install owlrunkit inspect --json --workspace "$PROJECT_ROOT"
|
|
313
|
+
npx --no-install owlrunkit inspect --json --compact --workspace "$PROJECT_ROOT"
|
|
241
314
|
npx --no-install owlrunkit status --workspace "$PROJECT_ROOT"
|
|
242
315
|
```
|
|
243
316
|
|
|
317
|
+
Use compact inspect for routine Agent recovery. It intentionally omits full
|
|
318
|
+
execution and Project Driver history while retaining project truth, progress,
|
|
319
|
+
dominant gap, owner, next action, warnings, execution counts, and false
|
|
320
|
+
authority fields. Doctor reports project CLI/Core and shared Skill versions
|
|
321
|
+
independently; process-level Skill drift is non-blocking and must not override
|
|
322
|
+
the installed project Core.
|
|
323
|
+
|
|
244
324
|
Prefer `bootstrap` for a new standalone-package consumer or an eligible idle
|
|
245
325
|
project upgrade. Its dry-run is zero-write; apply rechecks the exact local
|
|
246
326
|
package and official registry binding under a project-owned lock, then performs
|