owlrunkit 0.19.1 → 0.20.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 +52 -0
- package/README.md +107 -3
- package/docs/architecture/OWLCODA_RUNKIT_0191_PROFILE_RECONCILE_PATCH_PRODUCT_DECISION_20260813.md +11 -5
- package/docs/architecture/OWLCODA_RUNKIT_0192_FORMAL_USABILITY_PRODUCT_DECISION_20260813.md +141 -0
- package/docs/architecture/OWLCODA_RUNKIT_020_TEAM_DELIVERY_PHASE1_PRODUCT_DECISION_20260813.md +296 -0
- package/integrations/codex/skills/owlcoda-runkit/SKILL.md +74 -9
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
- package/package.json +1 -1
- package/packages/attest/distribution-manifest-v1.json +10 -0
- package/packages/attest/src/quick.mjs +42 -4
- package/registry-release-policy-v1.json +5 -5
- package/sbom.spdx.json +5 -5
- package/scripts/runkit-contract/core-contract.mjs +42 -2
- package/scripts/runkit-contract/efficiency-metrics.mjs +9 -7
- package/scripts/runkit-contract/formal-preflight.mjs +352 -0
- package/scripts/runkit-contract/formal-supplemental-evidence.mjs +713 -0
- package/scripts/runkit-contract/formal-workflow.mjs +529 -59
- package/scripts/runkit-contract/onboarding-doctor.mjs +32 -13
- package/scripts/runkit-contract/project-cli-resolver.mjs +33 -3
- package/scripts/runkit-contract/project-external-delivery.mjs +16 -9
- package/scripts/runkit-contract/quick-attest.mjs +24 -0
- package/scripts/runkit-contract/runkit-cli.mjs +445 -52
- package/scripts/runkit-contract/schemas/candidate-transfer-packet-v1.schema.json +98 -0
- package/scripts/runkit-contract/schemas/formal-check-v2.schema.json +231 -0
- package/scripts/runkit-contract/schemas/formal-envelope-preflight-v1.schema.json +212 -0
- package/scripts/runkit-contract/schemas/formal-evidence-summary-v1.schema.json +114 -0
- package/scripts/runkit-contract/schemas/formal-supplemental-evidence-v1.schema.json +103 -0
- package/scripts/runkit-contract/schemas/team-acceptance-packet-v2.schema.json +109 -0
- package/scripts/runkit-contract/schemas/team-delivery-status-v1.schema.json +72 -0
- package/scripts/runkit-contract/schemas/team-packet-validation-v1.schema.json +33 -0
- package/scripts/runkit-contract/schemas/team-project-event-v5.schema.json +89 -0
- package/scripts/runkit-contract/schemas/team-project-status-v3.schema.json +173 -0
- package/scripts/runkit-contract/schemas/team-recommendation-v1.schema.json +121 -0
- package/scripts/runkit-contract/schemas/team-task-packet-v2.schema.json +228 -0
- package/scripts/runkit-contract/snapshot.mjs +125 -5
- package/scripts/runkit-contract/source-candidate.mjs +271 -69
- package/scripts/runkit-contract/sync-release-identity.mjs +39 -4
- package/scripts/runkit-contract/team-delivery.mjs +906 -0
- package/scripts/runkit-contract/team-project-successor.mjs +7 -4
- package/scripts/runkit-contract/team-project.mjs +440 -28
- package/scripts/runkit-contract/usage-mode.mjs +9 -3
- package/scripts/runkit-contract/verification-envelope.mjs +425 -37
package/docs/architecture/OWLCODA_RUNKIT_020_TEAM_DELIVERY_PHASE1_PRODUCT_DECISION_20260813.md
ADDED
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
# OwlRunKit 0.20 Team Delivery Phase 1 Product Decision
|
|
2
|
+
|
|
3
|
+
Date: 2026-08-13
|
|
4
|
+
Status: `source_candidate_implemented_and_verified / initial_read_only_dogfood_passed / owner_release_authorized / registry_publication_pending`
|
|
5
|
+
|
|
6
|
+
## Decision
|
|
7
|
+
|
|
8
|
+
OwlRunKit 0.20 Phase 1 adds a read-only Team Delivery projection and portable
|
|
9
|
+
team packet contracts on top of the existing Project Driver. It does not add a
|
|
10
|
+
second task graph, start Agents, route vendors, dispatch work, or change Quick
|
|
11
|
+
or Formal assurance.
|
|
12
|
+
|
|
13
|
+
The product sequence is fixed:
|
|
14
|
+
|
|
15
|
+
1. publish and stabilize 0.19.2;
|
|
16
|
+
2. implement 0.20 Phase 1 as read-only recommendation plus native contracts;
|
|
17
|
+
3. dogfood it in at least two real projects;
|
|
18
|
+
4. only if measured net value is positive, ask the Owner whether opt-in assisted
|
|
19
|
+
dispatch should be designed.
|
|
20
|
+
|
|
21
|
+
Steps 1 and 2 are complete through a repository source candidate. Step 3 has
|
|
22
|
+
started with read-only recommendation and status projection; transfer and
|
|
23
|
+
acceptance value have not yet been proven through a complete live lifecycle.
|
|
24
|
+
The Owner separately authorized the 0.20 publication transition after the
|
|
25
|
+
initial read-only dogfood. That authorization does not pre-authorize assisted
|
|
26
|
+
dispatch, project adoption, deployment, production, business, funds, or any
|
|
27
|
+
other permission transition.
|
|
28
|
+
|
|
29
|
+
## Current source-candidate evidence
|
|
30
|
+
|
|
31
|
+
- Focused Team Delivery and public-contract checks: 25 passed, 0 failed.
|
|
32
|
+
- Compatibility, CLI, project-local binding, and neighboring Formal checks:
|
|
33
|
+
129 passed, 0 failed.
|
|
34
|
+
- Standalone pack, isolated install, initialization, Team packet validation,
|
|
35
|
+
and Quick attestation: 6 passed, 0 failed.
|
|
36
|
+
- Complete RunKit gate: 853 tests, 841 passed, 0 failed, 12 skipped.
|
|
37
|
+
- Root build and production dependency audit passed; the production audit
|
|
38
|
+
reported 0 vulnerabilities.
|
|
39
|
+
- Core, Skill candidate, package config, public attester, and distribution
|
|
40
|
+
manifest resolve to
|
|
41
|
+
`sha256:30098aa9344c17c1ed0b5ed45ef1c590b3214b824402f584029c1ecb38ca7a70`.
|
|
42
|
+
|
|
43
|
+
These facts establish a source candidate only. They do not establish dogfood
|
|
44
|
+
value, registry publication, project adoption, runtime activation, or release
|
|
45
|
+
authority.
|
|
46
|
+
|
|
47
|
+
## Initial read-only dogfood
|
|
48
|
+
|
|
49
|
+
The candidate was run directly against current Project Driver truth without
|
|
50
|
+
installing or modifying either target project.
|
|
51
|
+
|
|
52
|
+
- OwlFootball had one actionable owned lane and one dependency-blocked future
|
|
53
|
+
lane. Recommendation: `off + project_driver`, assurance unchanged.
|
|
54
|
+
- The active Sierac MES control project had one actionable writer and several
|
|
55
|
+
dependency-blocked future lanes. Recommendation: `off + project_driver`,
|
|
56
|
+
assurance unchanged.
|
|
57
|
+
- A real Sierac MES parallel worktree had two simultaneously actionable,
|
|
58
|
+
disjoint, unassigned lanes. Recommendation: `team + project_driver_team`,
|
|
59
|
+
both lanes parallel-eligible, no path conflict, assurance unchanged.
|
|
60
|
+
- The first Team result exposed a self-referential `team status` next action.
|
|
61
|
+
The candidate was corrected so unassigned actionable lanes now point to
|
|
62
|
+
`project assign --help`; focused and complete gates were rerun afterward.
|
|
63
|
+
- For each directly tested project/worktree, the Project Driver tree
|
|
64
|
+
fingerprint and Git status fingerprint were byte-identical before and after.
|
|
65
|
+
Dispatch remained disabled and every authority field remained false.
|
|
66
|
+
|
|
67
|
+
This establishes correct initial admission and exit behavior. It does not yet
|
|
68
|
+
establish lower handoff time, candidate transfer value, independent acceptance
|
|
69
|
+
value, or eligibility for assisted dispatch.
|
|
70
|
+
|
|
71
|
+
## Verified starting facts
|
|
72
|
+
|
|
73
|
+
- `owlrunkit@0.19.2` is published and exact-registry verified.
|
|
74
|
+
- Project Driver already owns durable WorkItems, dependencies, owned paths,
|
|
75
|
+
assignments, decisions, checkpoints, handoffs, rework, integration gates,
|
|
76
|
+
source delivery, takeover, and project truth hashing.
|
|
77
|
+
- Usage Mode already keeps continuity and assurance separate.
|
|
78
|
+
- Quick and Formal already own evidence strength; multi-Agent work does not by
|
|
79
|
+
itself imply Formal.
|
|
80
|
+
- The local `manage-agent-team` Skill contains useful operating policy, but it
|
|
81
|
+
is not available on every machine and is not an acceptable product runtime
|
|
82
|
+
dependency.
|
|
83
|
+
- Real dogfood shows Team coordination is useful for multiple writers,
|
|
84
|
+
independent acceptance, candidate transfer, and cross-session ownership; it
|
|
85
|
+
is negative value for ordinary single-owner closure.
|
|
86
|
+
|
|
87
|
+
## Stable product model
|
|
88
|
+
|
|
89
|
+
Team Delivery adds one orthogonal dimension:
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
continuity none | project_driver
|
|
93
|
+
coordination none | team_delivery
|
|
94
|
+
assurance none | quick | formal
|
|
95
|
+
acceptance L0 | L1 | L2 | L3
|
|
96
|
+
authority always externally granted; never inferred by RunKit
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
`team_delivery` is a read-only coordination recommendation in Phase 1. It is
|
|
100
|
+
not a continuity mode, assurance level, acceptance verdict, or authority.
|
|
101
|
+
|
|
102
|
+
Project Driver remains the sole active project and task truth. Team Delivery
|
|
103
|
+
may project WorkItems into lanes, but it cannot create a parallel team/task
|
|
104
|
+
database or reinterpret project events.
|
|
105
|
+
|
|
106
|
+
## User-visible Phase 1 surface
|
|
107
|
+
|
|
108
|
+
```text
|
|
109
|
+
npx --no-install owlrunkit team recommend --workspace "$PWD"
|
|
110
|
+
npx --no-install owlrunkit team status --workspace "$PWD"
|
|
111
|
+
npx --no-install owlrunkit team packet validate --workspace "$PWD" --packet <file>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
All commands are read-only and support `--json`. Human output is the default.
|
|
115
|
+
Every result includes the authority boundary and
|
|
116
|
+
`authorizationGranted=false`.
|
|
117
|
+
|
|
118
|
+
### `team recommend`
|
|
119
|
+
|
|
120
|
+
The recommendation is derived only from current Project Driver truth:
|
|
121
|
+
|
|
122
|
+
- no initialized project, no ready work, or one ordinary ready WorkItem:
|
|
123
|
+
`off`;
|
|
124
|
+
- two or more simultaneously actionable WorkItems with disjoint owned paths:
|
|
125
|
+
`team`;
|
|
126
|
+
- overlapping owned paths: `team`, but parallel writing is blocked and the
|
|
127
|
+
unique next action is to revise ownership or serialize the lanes;
|
|
128
|
+
- a WorkItem in independent verification: `team`;
|
|
129
|
+
- a pending handoff, rework return, or live candidate ownership transfer:
|
|
130
|
+
`team`;
|
|
131
|
+
- multiple active owners: `team`.
|
|
132
|
+
|
|
133
|
+
The result explains trigger reasons, rejected lighter handling, projected
|
|
134
|
+
overhead, path conflicts, acceptance gaps, and one next command. It never
|
|
135
|
+
chooses a model vendor or starts an Agent.
|
|
136
|
+
|
|
137
|
+
### `team status`
|
|
138
|
+
|
|
139
|
+
Status projects the current Project Driver into:
|
|
140
|
+
|
|
141
|
+
- current project identity and truth hash;
|
|
142
|
+
- incomplete lanes with current owner, dependencies, owned paths, and explicit
|
|
143
|
+
actionable state;
|
|
144
|
+
- which lanes may run concurrently;
|
|
145
|
+
- path conflicts;
|
|
146
|
+
- independent-acceptance gaps;
|
|
147
|
+
- handoff, rework, and source-delivery continuity facts;
|
|
148
|
+
- the current Team recommendation and unique coordination next action.
|
|
149
|
+
|
|
150
|
+
The next command must not loop back to `team status`. An unassigned actionable
|
|
151
|
+
lane points to assignment help, a path conflict points to immutable scope
|
|
152
|
+
revision help, an owner transition points to takeover help, and an already
|
|
153
|
+
owned Team candidate points to portable packet validation help.
|
|
154
|
+
|
|
155
|
+
It does not copy or persist a second task graph.
|
|
156
|
+
|
|
157
|
+
### `team packet validate`
|
|
158
|
+
|
|
159
|
+
The validator accepts one bounded regular non-symlink JSON file, rejects
|
|
160
|
+
duplicate keys and extra fields, validates the native packet contract, and
|
|
161
|
+
binds project-aware packets to the current `projectId`, `projectTruthHash`,
|
|
162
|
+
WorkItem, and owned paths. Validation performs no packet creation or project
|
|
163
|
+
mutation.
|
|
164
|
+
|
|
165
|
+
## Native portable contracts
|
|
166
|
+
|
|
167
|
+
Phase 1 publishes three strict Draft 2020-12 contracts and matching runtime
|
|
168
|
+
validators.
|
|
169
|
+
|
|
170
|
+
### TeamTaskPacket V2
|
|
171
|
+
|
|
172
|
+
The task packet binds one Project Driver WorkItem and Gate. It carries:
|
|
173
|
+
|
|
174
|
+
- actual launcher-declared Agent, model family, and model version;
|
|
175
|
+
- risk axes and required acceptance level;
|
|
176
|
+
- exact worktree and candidate-entry identity;
|
|
177
|
+
- allowed and prohibited paths/actions;
|
|
178
|
+
- evidence plan, verification cadence, handoff requirement, escalation budget,
|
|
179
|
+
and exact stop point;
|
|
180
|
+
- project identity and project truth hash;
|
|
181
|
+
- an explicit all-false authority boundary.
|
|
182
|
+
|
|
183
|
+
Model family is opaque declared identity. Core does not contain Sol, Luna,
|
|
184
|
+
Grok, Kimi, capacity ratios, retries, or routing preferences.
|
|
185
|
+
|
|
186
|
+
### TeamAcceptancePacket V2
|
|
187
|
+
|
|
188
|
+
The acceptance packet binds one Gate and candidate, records implementation and
|
|
189
|
+
verification identities, acceptance level, fresh adversarial families,
|
|
190
|
+
candidate identity before and after, evidence reuse, findings, verdict, and
|
|
191
|
+
remaining levels. Medium or high second-order risk cannot claim independent
|
|
192
|
+
acceptance when implementation and verification model families are equal.
|
|
193
|
+
|
|
194
|
+
`ACCEPT`, `REWORK`, and `BLOCKED` remain distinct. One packet accepts one Gate;
|
|
195
|
+
it does not grant the next external transition.
|
|
196
|
+
|
|
197
|
+
### CandidateTransferPacket V1
|
|
198
|
+
|
|
199
|
+
The transfer packet preserves a live candidate across writer ownership change:
|
|
200
|
+
|
|
201
|
+
```text
|
|
202
|
+
candidate_active
|
|
203
|
+
-> transfer_requested
|
|
204
|
+
-> packet_generated
|
|
205
|
+
-> new_owner_validation
|
|
206
|
+
-> handoff_ack
|
|
207
|
+
-> old_writer_release
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
It binds candidate identity, dirty manifest, reconstruction sources, protected
|
|
211
|
+
artifacts, previous and next owner, verification state, and handoff ACK. A
|
|
212
|
+
packet at `old_writer_release` is invalid unless the new owner has accepted the
|
|
213
|
+
handoff with evidence. The packet does not itself assign Project Driver
|
|
214
|
+
authority or release the prior writer.
|
|
215
|
+
|
|
216
|
+
## Admission and exit rules
|
|
217
|
+
|
|
218
|
+
Team Mode is recommended only when coordination changes the outcome or critical
|
|
219
|
+
path. Parallelism being possible is insufficient.
|
|
220
|
+
|
|
221
|
+
The recommendation must explicitly exit Team Mode for a single authorized
|
|
222
|
+
owner with a bounded, reversible, directly verifiable task. Production or
|
|
223
|
+
release labels alone do not force Team Mode. Long duration alone selects
|
|
224
|
+
continuity, not coordination. Multiple Agents alone do not force Formal.
|
|
225
|
+
|
|
226
|
+
Path conflict does not authorize parallel writers. It creates a visible
|
|
227
|
+
coordination blocker.
|
|
228
|
+
|
|
229
|
+
## Acceptance scenarios
|
|
230
|
+
|
|
231
|
+
1. No Project Driver definition returns `off`, zero lanes, no dispatch, and no
|
|
232
|
+
authority.
|
|
233
|
+
2. One ordinary ready WorkItem returns `off` even though Project Driver exists.
|
|
234
|
+
3. Two independent ready WorkItems with disjoint owned paths return `team` and
|
|
235
|
+
both lanes are parallel-eligible.
|
|
236
|
+
4. Two actionable WorkItems with overlapping owned paths return `team`, expose
|
|
237
|
+
the exact conflict, and mark both lanes non-parallel.
|
|
238
|
+
5. Independent verification, pending handoff/rework, candidate transfer, or
|
|
239
|
+
multiple active owners recommends `team` without changing assurance.
|
|
240
|
+
6. `team recommend`, `team status`, and packet validation write zero project,
|
|
241
|
+
source, Git, or RunKit bytes.
|
|
242
|
+
7. A valid TeamTaskPacket is bound to the current Project Driver WorkItem and
|
|
243
|
+
owned paths; stale project truth or widened scope is rejected.
|
|
244
|
+
8. Same-family verification at medium/high second-order risk cannot claim
|
|
245
|
+
independent acceptance.
|
|
246
|
+
9. Candidate transfer cannot reach `old_writer_release` before accepted
|
|
247
|
+
handoff ACK with evidence.
|
|
248
|
+
10. Packet schemas and runtime validators reject missing, extra, duplicate-key,
|
|
249
|
+
authority-looking, and malformed identity fields consistently.
|
|
250
|
+
11. Installed-package help, CLI JSON, public schemas, Core manifest, and the
|
|
251
|
+
Skill describe the same Phase 1 surface without requiring the local
|
|
252
|
+
`manage-agent-team` Skill.
|
|
253
|
+
12. No output authorizes Git, release, deployment, production, business,
|
|
254
|
+
automation, money, credentials, or Agent dispatch.
|
|
255
|
+
|
|
256
|
+
## Phase 1 non-goals
|
|
257
|
+
|
|
258
|
+
- no automatic or assisted Agent launch;
|
|
259
|
+
- no vendor CLI federation or general swarm;
|
|
260
|
+
- no model ranking, scorecard, capacity allocation, retry policy, or
|
|
261
|
+
model-specific prompt logic in Core;
|
|
262
|
+
- no second project/task graph;
|
|
263
|
+
- no packet generator that silently assigns ownership;
|
|
264
|
+
- no new Quick or Formal Gate;
|
|
265
|
+
- no replacement for COM-019 or any domain product decision;
|
|
266
|
+
- no 0.20 publication claim before a separately verified release transition.
|
|
267
|
+
|
|
268
|
+
## Dogfood Gate before assisted dispatch
|
|
269
|
+
|
|
270
|
+
At least two real projects must demonstrate all of the following:
|
|
271
|
+
|
|
272
|
+
- ordinary single-owner work reliably exits Team Mode;
|
|
273
|
+
- multiple writers and independent acceptance produce correct lanes, path
|
|
274
|
+
conflicts, and independence gaps;
|
|
275
|
+
- a machine without the local Skill can validate and continue from the npm
|
|
276
|
+
package and self-contained packets;
|
|
277
|
+
- writer transfer preserves the candidate through ACK;
|
|
278
|
+
- measured handoff time, controller intervention, or duplicate verification
|
|
279
|
+
decreases;
|
|
280
|
+
- the benefit is not merely more packets or receipts.
|
|
281
|
+
|
|
282
|
+
Only after these facts exist may the Owner decide whether to design opt-in
|
|
283
|
+
assisted dispatch. General automatic federation remains a separate product and
|
|
284
|
+
authority decision.
|
|
285
|
+
|
|
286
|
+
## What cannot be claimed now
|
|
287
|
+
|
|
288
|
+
- 0.20 has not completed transfer or independent-acceptance dogfood and has not
|
|
289
|
+
yet been committed, tagged, registry-published, adopted, or made active;
|
|
290
|
+
source-candidate verification is not registry publication proof.
|
|
291
|
+
- Team Delivery does not dispatch or supervise Agents.
|
|
292
|
+
- The local Skill is not part of the product runtime contract.
|
|
293
|
+
- Team recommendation is not acceptance or authority.
|
|
294
|
+
- Phase 1 is not the selected COM-019 Primary AI Value Loop.
|
|
295
|
+
- No business, production, deployment, or release outcome follows from this
|
|
296
|
+
product decision.
|
|
@@ -7,11 +7,13 @@ 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
|
-
|
|
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
|
|
15
17
|
rollback baseline for the prior release is `owlrunkit@0.16.1` with SHA-1
|
|
16
18
|
`1bc119d24879bdd8959af16b364af55ca9d61ea9` and canonical npm tarball URL
|
|
17
19
|
`https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.16.1.tgz`.
|
|
@@ -19,6 +21,28 @@ The root `owlcoda` package has a separate version lifecycle.
|
|
|
19
21
|
|
|
20
22
|
The session is an execution interface. Project artifacts are the system of record.
|
|
21
23
|
|
|
24
|
+
## Team Delivery Phase 1
|
|
25
|
+
|
|
26
|
+
Use Team Delivery only when current Project Driver facts make coordination
|
|
27
|
+
material. It is a read-only projection, not a second graph or an Agent launcher.
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx --no-install owlrunkit team recommend --workspace "$PROJECT_ROOT"
|
|
31
|
+
npx --no-install owlrunkit team status --workspace "$PROJECT_ROOT"
|
|
32
|
+
npx --no-install owlrunkit team packet validate --workspace "$PROJECT_ROOT" \
|
|
33
|
+
--packet /absolute/path/to/team-packet.json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
An uninitialized project, no actionable work, or one ordinary ready WorkItem
|
|
37
|
+
must remain off. Disjoint actionable lanes may be parallel-eligible; overlapping
|
|
38
|
+
owned paths must block parallel writing. Independent verification, handoff,
|
|
39
|
+
rework, candidate transfer, or multiple active owners may recommend Team without
|
|
40
|
+
changing assurance. TeamTaskPacket V2, TeamAcceptancePacket V2, and
|
|
41
|
+
CandidateTransferPacket V1 are package-owned portable contracts. Do not depend
|
|
42
|
+
on a user-level `manage-agent-team` Skill at runtime. Core does not choose model
|
|
43
|
+
vendors, score Agents, start tasks, or grant Git, release, deployment,
|
|
44
|
+
production, business, automation, or money authority.
|
|
45
|
+
|
|
22
46
|
## Project Driver actions
|
|
23
47
|
|
|
24
48
|
Translate ordinary user requests into durable typed project actions. Do not ask
|
|
@@ -26,7 +50,8 @@ the user to operate the CLI when the request and authority are already clear.
|
|
|
26
50
|
|
|
27
51
|
The normal mainline is `init`, `assign`, `checkpoint`, `handoff`,
|
|
28
52
|
`reject-and-return`, `decision`, `verification`, `integrate`, `status`, and
|
|
29
|
-
`takeover`.
|
|
53
|
+
`takeover`. A diagnosed WorkItem scope change uses append-only `work-item
|
|
54
|
+
revise-scope`. External source lanes use `target-snapshot` and `import-delivery`
|
|
30
55
|
without installing RunKit or writing control artifacts into the frozen target.
|
|
31
56
|
After a project
|
|
32
57
|
derives completed, `successor` is the bounded lifecycle step. `init` accepts one project definition
|
|
@@ -43,6 +68,10 @@ remains available for existing automation and compatibility.
|
|
|
43
68
|
- "I decided ...": append a decision resolution with rationale and evidence.
|
|
44
69
|
- "Hand this to another Agent": append the handoff, then a successor assignment;
|
|
45
70
|
never overwrite the old assignment.
|
|
71
|
+
- "The diagnosis changed this WorkItem's paths or measurable contract": append
|
|
72
|
+
one `project work-item revise-scope` event bound to the current assignment and
|
|
73
|
+
owner. Never edit the project definition or treat an older checkpoint as
|
|
74
|
+
completion evidence for the revised scope.
|
|
46
75
|
- "Reject this failed candidate and return it": use one `project
|
|
47
76
|
reject-and-return` event. Preserve the failed checkpoint, bind the review
|
|
48
77
|
evidence, create the rework assignment, and never rewrite failure as active.
|
|
@@ -71,11 +100,19 @@ remains available for existing automation and compatibility.
|
|
|
71
100
|
underlying risk; bind a Formal WorkItem to its actual execution and lease when
|
|
72
101
|
applicable. Multi-Agent coordination, long duration, or interruption recovery
|
|
73
102
|
alone does not select Formal.
|
|
103
|
+
- "Everything in the ledger is complete": report
|
|
104
|
+
`code_complete_without_release_authority` unless a separate external actor has
|
|
105
|
+
granted the relevant Git/release/deploy authority. Never translate
|
|
106
|
+
`overall=completed` into product activation or `next: none`.
|
|
74
107
|
|
|
75
108
|
For a multi-Agent project, checkpoint meaningful state changes promptly. A
|
|
76
109
|
checkpoint is not a heartbeat and must not contain a guessed percentage.
|
|
77
110
|
Completion requires evidence. If an assignment binds an execution, derive its
|
|
78
111
|
state from the closeout and lease rather than trusting the Agent's claim.
|
|
112
|
+
Before entering `verifying`, hand off and supersede the implementation assignment
|
|
113
|
+
with a different Agent. If a verifying/completed checkpoint has no recognizable
|
|
114
|
+
Quick/Formal receipt reference, preserve the checkpoint but report
|
|
115
|
+
`no_bound_verification_receipt`; do not claim that a mere reference was attested.
|
|
79
116
|
|
|
80
117
|
```bash
|
|
81
118
|
npx --no-install owlrunkit project init --workspace "$PROJECT_ROOT" --definition "$PROJECT_JSON"
|
|
@@ -92,6 +129,11 @@ npx --no-install owlrunkit project reject-and-return --workspace "$PROJECT_ROOT"
|
|
|
92
129
|
--rework-id "$REWORK_ID" --at "$OCCURRED_AT" --work-item "$WORK_ITEM_ID" \
|
|
93
130
|
--reviewer-agent "$REVIEWER_AGENT_ID" --to-agent "$AGENT_ID" \
|
|
94
131
|
--reason "$REJECTION_REASON" --next "$NEXT_ACTION" --evidence "$EVIDENCE_REF"
|
|
132
|
+
npx --no-install owlrunkit project work-item revise-scope --workspace "$PROJECT_ROOT" \
|
|
133
|
+
--revision-id "$REVISION_ID" --at "$OCCURRED_AT" \
|
|
134
|
+
--assignment-id "$ASSIGNMENT_ID" --work-item "$WORK_ITEM_ID" \
|
|
135
|
+
--owner-agent "$AGENT_ID" --owned-path "$OWNED_PATH" \
|
|
136
|
+
--reason "$SCOPE_REASON" --evidence "$EVIDENCE_REF"
|
|
95
137
|
npx --no-install owlrunkit project decision --workspace "$PROJECT_ROOT" --resolve \
|
|
96
138
|
--decision-id "$DECISION_ID" --at "$OCCURRED_AT" --resolution "$RESOLUTION" \
|
|
97
139
|
--rationale "$RATIONALE" --evidence "$EVIDENCE_REF"
|
|
@@ -191,9 +233,9 @@ below has no CLI entry.
|
|
|
191
233
|
|
|
192
234
|
```bash
|
|
193
235
|
npx --no-install owlrunkit bootstrap --workspace "$PROJECT_ROOT" \
|
|
194
|
-
--exact owlrunkit@0.19.
|
|
236
|
+
--exact owlrunkit@0.19.2 --dry-run
|
|
195
237
|
npx --no-install owlrunkit bootstrap --workspace "$PROJECT_ROOT" \
|
|
196
|
-
--exact owlrunkit@0.19.
|
|
238
|
+
--exact owlrunkit@0.19.2 --apply
|
|
197
239
|
npx --no-install owlrunkit init --workspace "$PROJECT_ROOT"
|
|
198
240
|
npx --no-install owlrunkit inspect --json --workspace "$PROJECT_ROOT"
|
|
199
241
|
npx --no-install owlrunkit status --workspace "$PROJECT_ROOT"
|
|
@@ -502,6 +544,9 @@ Formal accepted evidence admits the built-in Node syntax check and real project
|
|
|
502
544
|
commands executed through a Verification Envelope:
|
|
503
545
|
|
|
504
546
|
```bash
|
|
547
|
+
npx --no-install owlrunkit formal preflight \
|
|
548
|
+
--workspace "$PROJECT_ROOT" --envelope "$VERIFICATION_ENVELOPE_JSON"
|
|
549
|
+
|
|
505
550
|
npx --no-install owlrunkit formal check \
|
|
506
551
|
--workspace "$PROJECT_ROOT" --run-id "$RUN_ID" \
|
|
507
552
|
--work-item "$WORK_ITEM_ID" --check-id "$CHECK_ID" \
|
|
@@ -517,10 +562,30 @@ command optimistically. The public 0.17 package provides the enforced macOS
|
|
|
517
562
|
backend; Linux remains fail-closed. Legacy `verify` may capture evidence but
|
|
518
563
|
must not be silently promoted into this Formal path.
|
|
519
564
|
|
|
565
|
+
When a required project check cannot run inside the envelope, run it through
|
|
566
|
+
Quick against the same frozen source and attach the fully attested receipt:
|
|
567
|
+
|
|
568
|
+
```bash
|
|
569
|
+
npx --no-install owlrunkit formal attach-evidence \
|
|
570
|
+
--workspace "$PROJECT_ROOT" --run-id "$RUN_ID" \
|
|
571
|
+
--evidence-id "$EVIDENCE_ID" --kind supplemental-local \
|
|
572
|
+
--receipt "$QUICK_RECEIPT_JSON"
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
Use `networked` instead of `supplemental-local` only when the attached command
|
|
576
|
+
used network access. This classification is operator-declared and not attested
|
|
577
|
+
by Quick Receipt V3, so artifacts expose
|
|
578
|
+
`classificationBasis=operator_declared_not_attested`. Supplemental evidence
|
|
579
|
+
remains non-gating: its receipt and materials are re-attested and summarized by
|
|
580
|
+
an accepted `formal finish`, but it never substitutes for a passed Formal-eligible check or
|
|
581
|
+
grants Git, release, deployment, or business authority.
|
|
582
|
+
|
|
520
583
|
## Freeze a dirty SourceCandidateV2
|
|
521
584
|
|
|
522
585
|
Freeze, verify and materialize an immutable candidate without requiring a Git
|
|
523
|
-
commit
|
|
586
|
+
commit. SourceCandidateV2 documents are limited to 64 MiB and 2,000,000 JSON
|
|
587
|
+
values; producer and reader enforce the same bound before candidate payload or
|
|
588
|
+
document writes.
|
|
524
589
|
|
|
525
590
|
```bash
|
|
526
591
|
npx --no-install owlrunkit candidate freeze --workspace "$PROJECT_ROOT" \
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"schemaVersion": "OwlCodaRunKitConfigV2",
|
|
3
3
|
"core": {
|
|
4
4
|
"contractVersion": "0.2",
|
|
5
|
-
"coreVersion": "0.
|
|
6
|
-
"coreManifestSha256": "sha256:
|
|
7
|
-
"coreSourceRef": "artifact:sha256:
|
|
5
|
+
"coreVersion": "0.20.0",
|
|
6
|
+
"coreManifestSha256": "sha256:30098aa9344c17c1ed0b5ed45ef1c590b3214b824402f584029c1ecb38ca7a70",
|
|
7
|
+
"coreSourceRef": "artifact:sha256:30098aa9344c17c1ed0b5ed45ef1c590b3214b824402f584029c1ecb38ca7a70"
|
|
8
8
|
},
|
|
9
9
|
"authorizationPolicy": "external_explicit_authority_required"
|
|
10
10
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "owlrunkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"description": "Project Driver for cross-Agent project continuity and progression; execution, evidence, verification, and recovery are the underlying trust substrate.",
|
|
5
5
|
"license": "GPL-3.0-or-later",
|
|
6
6
|
"author": "yeemio <owlclaw@163.com>",
|
|
@@ -39,6 +39,16 @@
|
|
|
39
39
|
"sha256": "sha256:3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986"
|
|
40
40
|
},
|
|
41
41
|
"supportedProducerCoreIdentities": [
|
|
42
|
+
{
|
|
43
|
+
"contractVersion": "0.2",
|
|
44
|
+
"coreVersion": "0.20.0",
|
|
45
|
+
"coreManifestSha256": "sha256:30098aa9344c17c1ed0b5ed45ef1c590b3214b824402f584029c1ecb38ca7a70"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"contractVersion": "0.2",
|
|
49
|
+
"coreVersion": "0.19.2",
|
|
50
|
+
"coreManifestSha256": "sha256:c46ae9d8ed0572e5636ab5725f922f8db3ee5bf0f966b200bce7b2287c9267c8"
|
|
51
|
+
},
|
|
42
52
|
{
|
|
43
53
|
"contractVersion": "0.2",
|
|
44
54
|
"coreVersion": "0.19.1",
|
|
@@ -19,6 +19,16 @@ import { captureWorkspaceSnapshot } from "./workspace-snapshot.mjs";
|
|
|
19
19
|
export { validQuickReceiptShape } from "./quick-receipt-contract.mjs";
|
|
20
20
|
|
|
21
21
|
export const SUPPORTED_QUICK_CORE_IDENTITIES = Object.freeze([
|
|
22
|
+
{
|
|
23
|
+
contractVersion: "0.2",
|
|
24
|
+
coreVersion: "0.20.0",
|
|
25
|
+
coreManifestSha256: "sha256:30098aa9344c17c1ed0b5ed45ef1c590b3214b824402f584029c1ecb38ca7a70",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
contractVersion: "0.2",
|
|
29
|
+
coreVersion: "0.19.2",
|
|
30
|
+
coreManifestSha256: "sha256:c46ae9d8ed0572e5636ab5725f922f8db3ee5bf0f966b200bce7b2287c9267c8",
|
|
31
|
+
},
|
|
22
32
|
{
|
|
23
33
|
contractVersion: "0.2",
|
|
24
34
|
coreVersion: "0.19.1",
|
|
@@ -134,7 +144,7 @@ export const SUPPORTED_QUICK_CORE_IDENTITIES = Object.freeze([
|
|
|
134
144
|
coreVersion: "0.13.0",
|
|
135
145
|
coreManifestSha256: "sha256:0455c847bf2df77703583c6f19c20cf103206bafc4f122795bf34d3f85f0263d",
|
|
136
146
|
},
|
|
137
|
-
]);
|
|
147
|
+
].map(identity => Object.freeze(identity)));
|
|
138
148
|
|
|
139
149
|
function dependencyEnvironmentCurrent(binding, materials) {
|
|
140
150
|
if (binding === null || binding === undefined) return true;
|
|
@@ -211,11 +221,11 @@ function resultTemplate({ receipt, receiptPath, receiptSha256, decision, issues,
|
|
|
211
221
|
};
|
|
212
222
|
}
|
|
213
223
|
|
|
214
|
-
|
|
224
|
+
function attestQuickReceiptDetailsFromBytesWithCatalog({
|
|
215
225
|
receiptPath,
|
|
216
226
|
receiptBytes,
|
|
217
227
|
workspaceRoot,
|
|
218
|
-
}) {
|
|
228
|
+
}, supportedCoreIdentities) {
|
|
219
229
|
const absoluteReceiptPath = resolveRegularFilePath(receiptPath);
|
|
220
230
|
let receipt;
|
|
221
231
|
try {
|
|
@@ -241,7 +251,7 @@ export function attestQuickReceiptDetailsFromBytes({
|
|
|
241
251
|
let materialMissing = false;
|
|
242
252
|
let materialMismatch = false;
|
|
243
253
|
|
|
244
|
-
const coreValid =
|
|
254
|
+
const coreValid = supportedCoreIdentities.some((core) =>
|
|
245
255
|
receipt.coreIdentity.contractVersion === core.contractVersion
|
|
246
256
|
&& receipt.coreIdentity.coreVersion === core.coreVersion
|
|
247
257
|
&& receipt.coreIdentity.coreManifestSha256 === core.coreManifestSha256);
|
|
@@ -375,6 +385,34 @@ export function attestQuickReceiptDetailsFromBytes({
|
|
|
375
385
|
};
|
|
376
386
|
}
|
|
377
387
|
|
|
388
|
+
export function attestQuickReceiptDetailsFromBytes(options) {
|
|
389
|
+
return attestQuickReceiptDetailsFromBytesWithCatalog(
|
|
390
|
+
options,
|
|
391
|
+
SUPPORTED_QUICK_CORE_IDENTITIES,
|
|
392
|
+
);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
export function attestQuickReceiptDetailsFromBytesWithCoreCatalog(
|
|
396
|
+
options,
|
|
397
|
+
supportedCoreIdentities,
|
|
398
|
+
) {
|
|
399
|
+
if (
|
|
400
|
+
!Array.isArray(supportedCoreIdentities)
|
|
401
|
+
|| supportedCoreIdentities.length === 0
|
|
402
|
+
|| supportedCoreIdentities.some((identity) => (
|
|
403
|
+
identity?.contractVersion !== "0.2"
|
|
404
|
+
|| typeof identity?.coreVersion !== "string"
|
|
405
|
+
|| !/^sha256:[a-f0-9]{64}$/u.test(identity?.coreManifestSha256 ?? "")
|
|
406
|
+
))
|
|
407
|
+
) {
|
|
408
|
+
throw new Error("trusted Quick Core catalog is invalid");
|
|
409
|
+
}
|
|
410
|
+
return attestQuickReceiptDetailsFromBytesWithCatalog(
|
|
411
|
+
options,
|
|
412
|
+
supportedCoreIdentities,
|
|
413
|
+
);
|
|
414
|
+
}
|
|
415
|
+
|
|
378
416
|
export function attestQuickReceiptDetails({ receiptPath, workspaceRoot }) {
|
|
379
417
|
const { absolutePath, bytes } = readFileBytesBounded(receiptPath);
|
|
380
418
|
return attestQuickReceiptDetailsFromBytes({
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"schemaVersion": "OwlCodaRunKitRegistryReleasePolicyV1",
|
|
3
3
|
"status": "release_candidate_unpublished",
|
|
4
4
|
"packageName": "owlrunkit",
|
|
5
|
-
"candidateVersion": "0.
|
|
5
|
+
"candidateVersion": "0.20.0",
|
|
6
6
|
"registry": "https://registry.npmjs.org",
|
|
7
7
|
"registryRequiredBeforeAdoption": true,
|
|
8
8
|
"exactVersionRequired": true,
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
],
|
|
24
24
|
"currentPublishedRelease": {
|
|
25
25
|
"packageName": "owlrunkit",
|
|
26
|
-
"version": "0.19.
|
|
27
|
-
"shasum": "
|
|
28
|
-
"integrity": "sha512-
|
|
29
|
-
"tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.19.
|
|
26
|
+
"version": "0.19.2",
|
|
27
|
+
"shasum": "f9b0f797fe9f79878374380db0756223accd61dc",
|
|
28
|
+
"integrity": "sha512-rFEnbOtPuybztz8EZbcQSY3tGycCAuTkg+qGDwcKaTPjdJRhsXS4OB2HLwDBiILIV6BFyRPSQ7zanObT4jd58g==",
|
|
29
|
+
"tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.19.2.tgz"
|
|
30
30
|
},
|
|
31
31
|
"registryRelease": null,
|
|
32
32
|
"registryEvidenceMustBeExternal": true,
|
package/sbom.spdx.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"spdxVersion": "SPDX-2.3",
|
|
3
3
|
"dataLicense": "CC0-1.0",
|
|
4
4
|
"SPDXID": "SPDXRef-DOCUMENT",
|
|
5
|
-
"name": "owlrunkit-0.
|
|
6
|
-
"documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.
|
|
5
|
+
"name": "owlrunkit-0.20.0",
|
|
6
|
+
"documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.20.0",
|
|
7
7
|
"creationInfo": {
|
|
8
8
|
"created": "2026-07-29T00:00:00Z",
|
|
9
9
|
"creators": [
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
{
|
|
15
15
|
"name": "owlrunkit",
|
|
16
16
|
"SPDXID": "SPDXRef-Package-OwlRunKit",
|
|
17
|
-
"versionInfo": "0.
|
|
18
|
-
"downloadLocation": "
|
|
17
|
+
"versionInfo": "0.20.0",
|
|
18
|
+
"downloadLocation": "NOASSERTION",
|
|
19
19
|
"filesAnalyzed": false,
|
|
20
20
|
"licenseConcluded": "GPL-3.0-or-later",
|
|
21
21
|
"licenseDeclared": "GPL-3.0-or-later",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
{
|
|
25
25
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
26
26
|
"referenceType": "purl",
|
|
27
|
-
"referenceLocator": "pkg:npm/owlrunkit@0.
|
|
27
|
+
"referenceLocator": "pkg:npm/owlrunkit@0.20.0"
|
|
28
28
|
}
|
|
29
29
|
]
|
|
30
30
|
}
|