owlrunkit 0.20.0 → 0.22.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 +88 -0
- package/README.md +102 -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 +117 -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 +24 -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 +53 -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 +19 -1
- package/scripts/runkit-contract/fleet-skill-plan.mjs +223 -0
- package/scripts/runkit-contract/formal-workflow.mjs +3 -1
- package/scripts/runkit-contract/hook-recovery.mjs +496 -0
- package/scripts/runkit-contract/inspect-presentation.mjs +187 -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 +378 -9
- package/scripts/runkit-contract/profile-onboarding.mjs +6 -0
- package/scripts/runkit-contract/project-cli-resolver.mjs +17 -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-bootstrap.mjs +1 -0
- package/scripts/runkit-contract/runkit-cli.mjs +332 -30
- 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/hook-recovery-v1.schema.json +592 -0
- package/scripts/runkit-contract/schemas/inspect-compact-v1.schema.json +93 -0
- package/scripts/runkit-contract/schemas/inspect-compact-v2.schema.json +122 -0
- package/scripts/runkit-contract/schemas/team-delivery-status-v2.schema.json +219 -0
- package/scripts/runkit-contract/schemas/team-delivery-status-v3.schema.json +113 -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/schemas/team-recommendation-v2.schema.json +120 -0
- package/scripts/runkit-contract/sync-release-identity.mjs +87 -0
- package/scripts/runkit-contract/team-delivery.mjs +203 -3
- package/scripts/runkit-contract/team-project.mjs +1032 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,93 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.22.0
|
|
4
|
+
|
|
5
|
+
- Adds the independent `OwlCodaRunKitHookRecoveryV1` public contract and
|
|
6
|
+
`hook recovery` CLI for Codex `SessionStart(source=compact)` consumers.
|
|
7
|
+
- Projects active Project Driver truth even when there is no active execution,
|
|
8
|
+
while keeping execution and lease state as a separate bounded summary.
|
|
9
|
+
- Binds project identity with a deterministic objective digest, bounded preview,
|
|
10
|
+
current dominant gap, owner, next action, delivery disposition, warning
|
|
11
|
+
summary, and latest provable project fact time.
|
|
12
|
+
- Caps the complete JSON response at 2,000 UTF-8 bytes, escapes control and
|
|
13
|
+
separator characters as untrusted data, and fails closed on redirected,
|
|
14
|
+
version-mismatched, invalid, or ambiguous control truth.
|
|
15
|
+
- Keeps Compact V1/V2, full inspect, status, and takeover contracts unchanged;
|
|
16
|
+
Hook recovery remains byte-stable, read-only, zero-write, no-dispatch, and
|
|
17
|
+
all authority fields remain false.
|
|
18
|
+
|
|
19
|
+
## 0.21.1
|
|
20
|
+
|
|
21
|
+
- Adds Inspect Compact V2 with separate lifecycle, Project Driver, and
|
|
22
|
+
maintenance next actions plus distinct project, maintenance, shared-Skill,
|
|
23
|
+
and advisory summaries. Historical non-required receipt advisories no longer
|
|
24
|
+
inflate its actionable warning count.
|
|
25
|
+
- Adds Doctor Report V3. ESLint flat config projects receive a global `ignores`
|
|
26
|
+
recommendation instead of the obsolete `.eslintignore` advice; only an
|
|
27
|
+
ignore-only object or ESLint's `globalIgnores()` helper counts as global
|
|
28
|
+
coverage. Shared-Skill activation is explicitly `eligible`, `blocked`, or
|
|
29
|
+
`not_evaluated`; unmanaged or drifted bytes remain blocked consistently with
|
|
30
|
+
fleet planning. Relative launcher warnings remain grouped and non-blocking.
|
|
31
|
+
- Adds Team Recommendation V2 and Team Delivery Status V3. The public field is
|
|
32
|
+
now `teamCoordinationMode`, making clear that Team projection does not replace
|
|
33
|
+
ordinary usage-mode assurance. Missing historical verification receipts are
|
|
34
|
+
advisory and remain non-retroactive.
|
|
35
|
+
- Adds Takeover V4 so completed WorkItems remain visible in history without
|
|
36
|
+
being presented as a current responsibility or contributing a stale owner
|
|
37
|
+
next action. Earlier takeover contracts remain unchanged.
|
|
38
|
+
- Keeps project-local bootstrap compatible with the exact published 0.20.1 and
|
|
39
|
+
0.21.0 predecessor Core identities, and makes Team Delivery Status V3's
|
|
40
|
+
public schema mechanically keep receipt advisories out of actionable warning
|
|
41
|
+
summaries.
|
|
42
|
+
|
|
43
|
+
## 0.21.0
|
|
44
|
+
|
|
45
|
+
- Adds ExternalGateV1 as typed, source-hash-bound Project Driver truth. A due
|
|
46
|
+
pending, blocked, or deferred Gate becomes the dominant gap for its delivery
|
|
47
|
+
stage; superseding observations are append-only and raw capture cannot bypass
|
|
48
|
+
typed intake.
|
|
49
|
+
- Adds DeliveryLifecycleV1 and Project Status V4 so source acceptance,
|
|
50
|
+
integration, materialization, deployment, live readback, and product acceptance are distinct
|
|
51
|
+
evidence facts. Work-ledger completion never auto-promotes a later stage.
|
|
52
|
+
- Adds Team Delivery Status V2 with explicit known-but-unmodeled candidate
|
|
53
|
+
lanes while retaining one Project Driver graph and read-only, no-dispatch
|
|
54
|
+
Team coordination.
|
|
55
|
+
- Adds optional WorkItem Quick-evidence policy and
|
|
56
|
+
`project checkpoint --from-quick-receipt`; ordinary WorkItems remain
|
|
57
|
+
lightweight and no assurance mode changes automatically.
|
|
58
|
+
- Adds read-only `fleet skill-plan` for affected-project inventory, active
|
|
59
|
+
execution/lease blockers, and copyable dry-run, install, and rollback
|
|
60
|
+
commands. It grants no shared-Skill, project, Git, or release authority.
|
|
61
|
+
- Adds a canonical candidate ledger with fixed Git object width, C-locale path
|
|
62
|
+
ordering, complete path/mode/size/content bindings, and a transport-only raw
|
|
63
|
+
binary diff. Object-store growth no longer changes the candidate identity.
|
|
64
|
+
- Adds controller-owned `quick-verify --foreign-workspace` and Quick Receipt
|
|
65
|
+
V4. The target is copied into a disposable consumer; receipts remain under
|
|
66
|
+
the controller and bind target candidate, filesystem, dependency, command,
|
|
67
|
+
and before/after observed zero-write evidence without initializing RunKit in
|
|
68
|
+
the frozen target.
|
|
69
|
+
- Doctor now reports the package-bound and discovered process-wide Skill versions and
|
|
70
|
+
absolute paths, labels drift as a visible non-blocking warning, and keeps the
|
|
71
|
+
actually loaded Skill version honest as `unknown`.
|
|
72
|
+
- Replaces the temporal, candidate-only registry policy with a lifecycle-stable
|
|
73
|
+
registry-gated release artifact policy. The packed README, Skill, policy, and
|
|
74
|
+
SBOM no longer claim that the package is unpublished or that an older version
|
|
75
|
+
is still current; adoption still requires independent exact-registry evidence.
|
|
76
|
+
- Treats formatting-only profile reconciliation as an apply-time no-op. The
|
|
77
|
+
result remains explicit through `normalizationOnly: true`, but owner JSON
|
|
78
|
+
bytes stay unchanged and no migration receipt or tracked diff is created.
|
|
79
|
+
- Makes a version-mismatched bootstrap return the exact successor install and
|
|
80
|
+
dry-run commands instead of only reporting the older CLI's own exact spec.
|
|
81
|
+
- Adds `inspect --json --compact`, a bounded projection of project truth,
|
|
82
|
+
progress, dominant gap, owner, next action, warning groups, execution counts,
|
|
83
|
+
and the unchanged authority boundary without full execution history.
|
|
84
|
+
- Adds Team Delivery Status V2. Missing receipt warnings now carry severity,
|
|
85
|
+
blocking and gate semantics, an actionable recommendation, and deterministic
|
|
86
|
+
aggregation without retroactively requiring Formal evidence.
|
|
87
|
+
- Shows project CLI/Core and process-level shared Skill versions in doctor.
|
|
88
|
+
Skill drift is explicitly non-blocking and includes a fleet activation
|
|
89
|
+
blocker when an active execution or lease prevents safe refresh.
|
|
90
|
+
|
|
3
91
|
## 0.20.0
|
|
4
92
|
|
|
5
93
|
- Adds read-only `team recommend` and `team status` projections over the
|
package/README.md
CHANGED
|
@@ -67,17 +67,50 @@ 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 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 V3 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
|
+
|
|
106
|
+
RunKit 0.22 adds a dedicated Hook Recovery projection for Codex
|
|
107
|
+
`SessionStart(source=compact)`. It exposes only the bounded project identity,
|
|
108
|
+
objective digest/preview, current Project Driver gap, execution/lease summary,
|
|
109
|
+
warnings, and false authority boundary needed for a consumer to decide whether
|
|
110
|
+
the project matches its current chat goal. It does not infer chat intent, emit
|
|
111
|
+
full execution or event history, change project state, dispatch an Agent, or
|
|
112
|
+
raise assurance.
|
|
113
|
+
|
|
81
114
|
The 0.18 Project Driver is a bounded surface for new projects and controlled
|
|
82
115
|
dogfood. Its product name does not claim to be a general long-running,
|
|
83
116
|
multi-phase, or enterprise control plane. Version 0.18 adds one bounded
|
|
@@ -91,13 +124,15 @@ separate authority boundaries.
|
|
|
91
124
|
|
|
92
125
|
## Install
|
|
93
126
|
|
|
94
|
-
`owlrunkit@0.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
127
|
+
This package is the lifecycle-stable, registry-gated `owlrunkit@0.22.0`
|
|
128
|
+
artifact. Registry adoption remains fail-closed until its exact official npm
|
|
129
|
+
version, shasum, integrity, and tarball URL are independently verified. Local
|
|
130
|
+
tarballs remain candidate-test inputs and are never adoption provenance. Until
|
|
131
|
+
that registry evidence exists, use the package only for isolated candidate
|
|
132
|
+
verification; do not treat the command below as available release truth.
|
|
98
133
|
|
|
99
134
|
```bash
|
|
100
|
-
npm install --save-exact owlrunkit@0.
|
|
135
|
+
npm install --save-exact owlrunkit@0.22.0
|
|
101
136
|
```
|
|
102
137
|
|
|
103
138
|
Use `npx --no-install owlrunkit` for project commands. The package bootstrap
|
|
@@ -113,11 +148,12 @@ the project Config must independently bind the same Core.
|
|
|
113
148
|
```bash
|
|
114
149
|
npx --no-install owlrunkit --version
|
|
115
150
|
npx --no-install owlrunkit bootstrap --workspace /absolute/path/to/project \
|
|
116
|
-
--exact owlrunkit@0.
|
|
151
|
+
--exact owlrunkit@0.22.0 --dry-run
|
|
117
152
|
npx --no-install owlrunkit bootstrap --workspace /absolute/path/to/project \
|
|
118
|
-
--exact owlrunkit@0.
|
|
153
|
+
--exact owlrunkit@0.22.0 --apply
|
|
119
154
|
npx --no-install owlrunkit init --workspace /absolute/path/to/project
|
|
120
155
|
npx --no-install owlrunkit doctor --workspace /absolute/path/to/project
|
|
156
|
+
npx --no-install owlrunkit inspect --workspace /absolute/path/to/project --json --compact
|
|
121
157
|
npx --no-install owlrunkit mode recommend --workspace /absolute/path/to/project
|
|
122
158
|
npx --no-install owlrunkit mode status --workspace /absolute/path/to/project
|
|
123
159
|
```
|
|
@@ -129,11 +165,44 @@ back doctor. Dry-run is zero-write; failed apply restores the governed preimage
|
|
|
129
165
|
and keeps a failure receipt. It reports shared Skill drift but never silently
|
|
130
166
|
updates a user or fleet Skill.
|
|
131
167
|
|
|
168
|
+
When an older CLI receives a different exact successor spec, bootstrap returns
|
|
169
|
+
two bounded repair commands: install that exact project dependency, then rerun
|
|
170
|
+
the successor's project-local bootstrap dry-run. Doctor keeps shared Skill
|
|
171
|
+
drift non-blocking and reports why fleet-safe activation must wait when an
|
|
172
|
+
active execution or lease is present.
|
|
173
|
+
|
|
132
174
|
`mode recommend` is read-only and defaults to human output; add `--json` for a
|
|
133
175
|
machine contract. The five user modes are presets over `continuity`
|
|
134
176
|
(`none | project_driver`) and `assurance` (`none | quick | formal`). They never
|
|
135
177
|
grant Git, release, deployment, production, or business authority.
|
|
136
178
|
|
|
179
|
+
## Hook recovery for compacted sessions
|
|
180
|
+
|
|
181
|
+
Use the dedicated machine surface instead of full inspect when a Codex Hook
|
|
182
|
+
needs only enough RunKit truth to compare identities after compaction:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
npx --no-install owlrunkit hook recovery --workspace /absolute/path/to/project --json
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
The strict `OwlCodaRunKitHookRecoveryV1` response is deterministic and no more
|
|
189
|
+
than 2,000 UTF-8 bytes. It includes `projectId`, `projectTruthHash`, an
|
|
190
|
+
`objectiveDigest`, a bounded `objectivePreview`, progress, headline, dominant
|
|
191
|
+
gap, owner, next action, delivery disposition, execution/open/lease counts,
|
|
192
|
+
aggregated warnings, the latest provable project fact time, and a complete
|
|
193
|
+
all-false authority boundary. Project text is escaped and labeled
|
|
194
|
+
`untrusted_data`; it is data, never an instruction.
|
|
195
|
+
|
|
196
|
+
The Hook consumer must first compare its current Goal/Done-when with
|
|
197
|
+
`projectId` and the objective digest/preview. Only after that identity check may
|
|
198
|
+
it consider `nextAction`; RunKit does not decide what the current chat means.
|
|
199
|
+
An active Project Driver remains visible when there is no active execution.
|
|
200
|
+
No Project Driver is explicit. Invalid, redirected, version-mismatched, or
|
|
201
|
+
ambiguous control truth fails closed. The command never assigns, checkpoints,
|
|
202
|
+
hands off, takes over, creates an execution, acquires a lease, dispatches an
|
|
203
|
+
Agent, changes assurance, or grants Git, release, deployment, production,
|
|
204
|
+
business, automation, or money authority.
|
|
205
|
+
|
|
137
206
|
## Team Delivery: Recommend coordination without dispatch
|
|
138
207
|
|
|
139
208
|
Team Delivery is separate from continuity and assurance. It reads the current
|
|
@@ -156,6 +225,12 @@ raising assurance. Every result keeps Agent dispatch and all external authority
|
|
|
156
225
|
false. Phase 1 contains no launcher, scheduler, model ranking, or vendor CLI
|
|
157
226
|
federation.
|
|
158
227
|
|
|
228
|
+
`team status` emits Team Delivery Status V3. Each
|
|
229
|
+
`no_bound_verification_receipt` entry includes `severity`, `blocking`,
|
|
230
|
+
`requiredAtGate`, and `recommendedAction`, plus a separate advisory summary.
|
|
231
|
+
Completed historical WorkItems whose evidence policy did not require a reusable
|
|
232
|
+
receipt are not retroactively told to add Formal evidence.
|
|
233
|
+
|
|
159
234
|
## Project Driver: Coordinate a multi-Agent project
|
|
160
235
|
|
|
161
236
|
RunKit 0.18 keeps the project alive independently of any one Agent or chat.
|
|
@@ -244,6 +319,8 @@ a mechanical project invariant without forcing Formal. A verifying or completed
|
|
|
244
319
|
checkpoint that does not reference a recognizable Quick/Formal receipt remains
|
|
245
320
|
valid project truth but receives `no_bound_verification_receipt`; the warning is
|
|
246
321
|
about the missing bound reference and does not attest any referenced receipt.
|
|
322
|
+
Team Status V3 and Compact V2 surface this non-retroactive fact as an advisory,
|
|
323
|
+
not an actionable warning.
|
|
247
324
|
|
|
248
325
|
`project work-item revise-scope` appends Event V5 and never rewrites the original
|
|
249
326
|
definition. It must bind the current assignment and owner, records the previous
|
|
@@ -371,7 +448,9 @@ and launchers that do not resolve to exact local files. Detection directly
|
|
|
371
448
|
supports lock-bound npm plus exact project-installed pnpm, Yarn, and Bun
|
|
372
449
|
launchers. A PATH-only package manager remains review-required. A dry-run that
|
|
373
450
|
only canonicalizes JSON formatting reports `normalizationOnly: true` instead of
|
|
374
|
-
showing unexplained hash drift with an empty update list.
|
|
451
|
+
showing unexplained hash drift with an empty update list. Applying that plan is
|
|
452
|
+
a zero-write `profiles_already_current` result: owner bytes remain unchanged and
|
|
453
|
+
no migration receipt or tracked formatting diff is created.
|
|
375
454
|
|
|
376
455
|
The dry-run is the V2 detection contract. It reports `profiles_insufficient`
|
|
377
456
|
instead of `profiles_detected` when Git-visible source paths are uncovered or
|
|
@@ -427,6 +506,9 @@ npx --no-install owlrunkit quick-verify --workspace . --stdin-file ./remote-chec
|
|
|
427
506
|
-- ssh test-host /bin/sh
|
|
428
507
|
npx --no-install owlrunkit quick-verify --workspace . --isolate \
|
|
429
508
|
--dependency-root /absolute/dependency-consumer -- npm test
|
|
509
|
+
npx --no-install owlrunkit quick-verify --workspace /absolute/controller \
|
|
510
|
+
--foreign-workspace /absolute/frozen-target \
|
|
511
|
+
--dependency-root /absolute/dependency-consumer -- npm test
|
|
430
512
|
npx --no-install owlrunkit quick-verify --workspace . \
|
|
431
513
|
--bind-ignored .generated/audit.json -- node ./verify-generated.mjs
|
|
432
514
|
npx --no-install owlrunkit quick-reuse --workspace . \
|
|
@@ -461,6 +543,16 @@ into the consumer, prepends its binary directory, and hash-binds package, lock,
|
|
|
461
543
|
installed-package, and executable metadata before and after execution. RunKit
|
|
462
544
|
does not install dependencies or contact a registry for this command.
|
|
463
545
|
|
|
546
|
+
`--foreign-workspace` emits Quick Receipt V4 and always uses a disposable
|
|
547
|
+
consumer. The exact project-local CLI, receipt store, stdout/stderr, and any
|
|
548
|
+
stdin material remain under the controller `--workspace`; the target receives
|
|
549
|
+
no RunKit initialization. The receipt records the target realpath, HEAD,
|
|
550
|
+
fixed-width status ledger, path/mode/size/content hashes, before/after governed
|
|
551
|
+
filesystem identity, command argv/cwd, and dependency environment. A permanent
|
|
552
|
+
observed target change invalidates the receipt. This is before/after evidence,
|
|
553
|
+
not an OS write sandbox or proof that no transient write was restored between
|
|
554
|
+
observations.
|
|
555
|
+
|
|
464
556
|
Repeatable literal `--bind-ignored` paths opt specific ignored workspace bytes
|
|
465
557
|
into Workspace Snapshot V2. Missing is a bound state; file or directory changes
|
|
466
558
|
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.
|