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.
Files changed (44) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +63 -10
  3. package/docs/architecture/OWLCODA_RUNKIT_0201_RELEASE_TRUTH_AND_PROFILE_NORMALIZATION_PATCH_DECISION_20260813.md +95 -0
  4. package/docs/architecture/OWLCODA_RUNKIT_021_TEAM_DELIVERY_PHASE2_PRODUCT_DECISION_20260813.md +249 -0
  5. package/integrations/codex/skills/owlcoda-runkit/SKILL.md +92 -12
  6. package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
  7. package/package.json +1 -1
  8. package/packages/attest/README.md +7 -1
  9. package/packages/attest/consumer-surface-v3.json +275 -0
  10. package/packages/attest/distribution-manifest-v1.json +14 -0
  11. package/packages/attest/schemas/canonical-candidate-identity-v1.schema.json +112 -0
  12. package/packages/attest/schemas/foreign-workspace-filesystem-identity-v1.schema.json +32 -0
  13. package/packages/attest/schemas/quick-verification-receipt-v4.schema.json +226 -0
  14. package/packages/attest/src/candidate-identity.mjs +454 -0
  15. package/packages/attest/src/index.mjs +11 -0
  16. package/packages/attest/src/quick-receipt-contract.mjs +126 -5
  17. package/packages/attest/src/quick.mjs +43 -8
  18. package/{registry-release-policy-v1.json → registry-release-policy-v2.json} +8 -9
  19. package/sbom.spdx.json +4 -4
  20. package/scripts/runkit-contract/core-contract.mjs +14 -1
  21. package/scripts/runkit-contract/fleet-skill-plan.mjs +223 -0
  22. package/scripts/runkit-contract/formal-workflow.mjs +3 -1
  23. package/scripts/runkit-contract/inspect-presentation.mjs +56 -0
  24. package/scripts/runkit-contract/install-codex-skill.mjs +1 -0
  25. package/scripts/runkit-contract/onboarding-bootstrap.mjs +15 -0
  26. package/scripts/runkit-contract/onboarding-doctor.mjs +201 -7
  27. package/scripts/runkit-contract/profile-onboarding.mjs +6 -0
  28. package/scripts/runkit-contract/project-cli-resolver.mjs +9 -1
  29. package/scripts/runkit-contract/quick-metrics.mjs +9 -5
  30. package/scripts/runkit-contract/quick-verify.mjs +108 -24
  31. package/scripts/runkit-contract/registry-adoption-gate.mjs +12 -3
  32. package/scripts/runkit-contract/registry-adoption.mjs +10 -5
  33. package/scripts/runkit-contract/runkit-cli.mjs +289 -19
  34. package/scripts/runkit-contract/schemas/delivery-lifecycle-v1.schema.json +91 -0
  35. package/scripts/runkit-contract/schemas/external-gate-v1.schema.json +68 -0
  36. package/scripts/runkit-contract/schemas/fleet-skill-upgrade-plan-v1.schema.json +140 -0
  37. package/scripts/runkit-contract/schemas/inspect-compact-v1.schema.json +93 -0
  38. package/scripts/runkit-contract/schemas/team-delivery-status-v2.schema.json +219 -0
  39. package/scripts/runkit-contract/schemas/team-project-event-v6.schema.json +82 -0
  40. package/scripts/runkit-contract/schemas/team-project-event-v7.schema.json +80 -0
  41. package/scripts/runkit-contract/schemas/team-project-status-v4.schema.json +208 -0
  42. package/scripts/runkit-contract/sync-release-identity.mjs +87 -0
  43. package/scripts/runkit-contract/team-delivery.mjs +128 -3
  44. 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.0 Phase 1 adds Team Delivery as a read-only coordination dimension
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 candidate
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.20.0` is an unpublished release candidate. Until registry
95
- publication is independently verified, the current installable release is
96
- `owlrunkit@0.19.2`; a locally packed 0.20.0 tarball is for candidate testing
97
- only and is not adoption provenance.
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.19.2
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.19.2 --dry-run
141
+ --exact owlrunkit@0.21.0 --dry-run
117
142
  npx --no-install owlrunkit bootstrap --workspace /absolute/path/to/project \
118
- --exact owlrunkit@0.19.2 --apply
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.
@@ -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 candidate: standalone `owlrunkit@0.20.0`, bundling Contract `0.2` and
11
- Core `0.20.0` with manifest
12
- `sha256:30098aa9344c17c1ed0b5ed45ef1c590b3214b824402f584029c1ecb38ca7a70`.
13
- This candidate is not published. The current published release remains
14
- `owlrunkit@0.19.2`, which is the trusted prior for rollback and the only
15
- registry-installable version named by this Skill before publication. Verify
16
- exact official npm registry provenance before adoption. The immutable
17
- rollback baseline for the prior release is `owlrunkit@0.16.1` with SHA-1
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.19.2 --dry-run
308
+ --exact owlrunkit@0.21.0 --dry-run
237
309
  npx --no-install owlrunkit bootstrap --workspace "$PROJECT_ROOT" \
238
- --exact owlrunkit@0.19.2 --apply
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