owlrunkit 0.18.2 → 0.18.4
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 +63 -0
- package/README.md +159 -52
- package/docs/architecture/OWLCODA_RUNKIT_0184_EXTERNAL_DELIVERY_INTAKE_PRODUCT_DECISION_20260812.md +209 -0
- package/docs/architecture/OWLCODA_RUNKIT_018_PROJECT_DRIVER_PRODUCT_DEFINITION.md +16 -5
- package/docs/architecture/OWLCODA_RUNKIT_USAGE_MODE_SELECTION_PRODUCT_DECISION_20260811.md +54 -3
- package/docs/architecture/OWLCODA_RUN_KIT_CONTRACT_V0_2.md +7 -0
- package/integrations/codex/skills/owlcoda-runkit/SKILL.md +125 -74
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
- package/integrations/codex/skills/owlcoda-runkit/references/contract-v0.1.md +160 -0
- package/integrations/codex/skills/owlcoda-runkit/references/contract-v0.2.md +545 -0
- package/package.json +1 -1
- package/packages/attest/README.md +4 -3
- package/packages/attest/consumer-surface-v1.json +1 -0
- package/packages/attest/distribution-manifest-v1.json +12 -1
- package/packages/attest/schemas/quick-verification-receipt-v2.schema.json +232 -0
- package/packages/attest/src/index.mjs +4 -1
- package/packages/attest/src/quick-receipt-contract.mjs +16 -6
- package/packages/attest/src/quick.mjs +21 -2
- package/packages/attest/src/workspace-snapshot.mjs +10 -1
- package/registry-release-policy-v1.json +5 -5
- package/sbom.spdx.json +5 -5
- package/scripts/runkit-contract/assurance-router.mjs +25 -6
- package/scripts/runkit-contract/core-contract.mjs +10 -1
- package/scripts/runkit-contract/onboarding-doctor.mjs +1 -1
- package/scripts/runkit-contract/profile-onboarding.mjs +263 -15
- package/scripts/runkit-contract/project-cli-resolver.mjs +6 -0
- package/scripts/runkit-contract/project-external-delivery.mjs +707 -0
- package/scripts/runkit-contract/quick-metrics.mjs +3 -3
- package/scripts/runkit-contract/quick-receipt.mjs +79 -12
- package/scripts/runkit-contract/quick-verify.mjs +89 -12
- package/scripts/runkit-contract/runkit-bootstrap.mjs +6 -1
- package/scripts/runkit-contract/runkit-cli.mjs +363 -143
- package/scripts/runkit-contract/schemas/assurance-route-v2.schema.json +26 -0
- package/scripts/runkit-contract/schemas/profile-detection-v3.schema.json +170 -0
- package/scripts/runkit-contract/schemas/team-project-event-v2.schema.json +128 -0
- package/scripts/runkit-contract/schemas/team-project-event-v3.schema.json +146 -0
- package/scripts/runkit-contract/schemas/team-project-status-v2.schema.json +85 -0
- package/scripts/runkit-contract/schemas/usage-mode-recommendation-v2.schema.json +136 -0
- package/scripts/runkit-contract/team-project.mjs +782 -55
- package/scripts/runkit-contract/usage-mode.mjs +28 -7
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
# OwlCoda RunKit Contract v0.2
|
|
2
|
+
|
|
3
|
+
Status: implementation candidate for repository-owned Core conformance
|
|
4
|
+
|
|
5
|
+
Date: 2026-07-13
|
|
6
|
+
|
|
7
|
+
Supersedes for new executions: [Contract v0.1](./OWLCODA_RUN_KIT_CONTRACT_V0_1.md)
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Contract v0.2 hardens acceptance evidence. It keeps the project—not a chat
|
|
12
|
+
window, agent memory, or external dashboard—as the system of record, while
|
|
13
|
+
closing three gaps proven by Run008:
|
|
14
|
+
|
|
15
|
+
- an `accepted` closeout could be written without consuming a passing gate;
|
|
16
|
+
- source freshness did not prove verification-environment freshness;
|
|
17
|
+
- a descriptive shell or GUI label could be accepted without a replayable
|
|
18
|
+
invocation description.
|
|
19
|
+
|
|
20
|
+
Contract v0.1 remains the historical interpretation contract for existing
|
|
21
|
+
artifacts. New accepted closeouts must use v0.2.
|
|
22
|
+
|
|
23
|
+
## Inherited principles
|
|
24
|
+
|
|
25
|
+
Contract v0.2 retains the v0.1 source fingerprint, safe path, profile impact,
|
|
26
|
+
append-only lineage, foreign-project zero-write, and explicit authorization
|
|
27
|
+
rules. In particular:
|
|
28
|
+
|
|
29
|
+
- `.owlcoda/runkit/**` is runtime truth and never product source;
|
|
30
|
+
- one execution pins one Core identity;
|
|
31
|
+
- uncovered change fails closed;
|
|
32
|
+
- stale source stops verification before command execution;
|
|
33
|
+
- only one active receipt leaf is valid;
|
|
34
|
+
- configuration and closeout state do not grant Git or release authority.
|
|
35
|
+
|
|
36
|
+
## D8: gate-bound accepted closeout
|
|
37
|
+
|
|
38
|
+
`closeout --decision accepted` must consume a Contract v0.2 gate input and
|
|
39
|
+
recompute the gate. A caller-supplied `accepted` string or a saved gate-output
|
|
40
|
+
summary is insufficient.
|
|
41
|
+
|
|
42
|
+
The recomputed gate must prove:
|
|
43
|
+
|
|
44
|
+
- `decision=accepted_passed`;
|
|
45
|
+
- one valid receipt lineage with one active leaf;
|
|
46
|
+
- the active receipt `runId` equals the execution being closed;
|
|
47
|
+
- the active receipt binds the current source fingerprint;
|
|
48
|
+
- the active receipt binds the current verification-context fingerprint;
|
|
49
|
+
- selected profile IDs match exactly;
|
|
50
|
+
- every command receipt uses replayable evidence and exited successfully;
|
|
51
|
+
- at least one writer lease exists and every lease is released.
|
|
52
|
+
|
|
53
|
+
The accepted closeout payload binds:
|
|
54
|
+
|
|
55
|
+
- Contract version;
|
|
56
|
+
- gate decision;
|
|
57
|
+
- gate-input file SHA-256;
|
|
58
|
+
- active receipt SHA-256;
|
|
59
|
+
- source fingerprint;
|
|
60
|
+
- verification-context fingerprint;
|
|
61
|
+
- selected profile IDs;
|
|
62
|
+
- released lease IDs;
|
|
63
|
+
- `authorizationGranted=false`.
|
|
64
|
+
|
|
65
|
+
`blocked` and `rejected` closeouts may be recorded without a passing gate so
|
|
66
|
+
failed work can still leave durable truth. They remain non-authoritative for
|
|
67
|
+
Git, release, publish, deploy, credential use, deletion, or foreign writes.
|
|
68
|
+
|
|
69
|
+
## D9: VerificationContextV1
|
|
70
|
+
|
|
71
|
+
Source equality alone is not enough to reuse verification. Contract v0.2 adds
|
|
72
|
+
`OwlCodaRunKitVerificationContextV1` and a canonical SHA-256 fingerprint kept
|
|
73
|
+
separate from the product source fingerprint.
|
|
74
|
+
|
|
75
|
+
The context contains:
|
|
76
|
+
|
|
77
|
+
- `reusePolicy`;
|
|
78
|
+
- material platform identity when bound;
|
|
79
|
+
- toolchain names and versions;
|
|
80
|
+
- lockfile paths and hashes;
|
|
81
|
+
- fixture identities and hashes;
|
|
82
|
+
- service identities;
|
|
83
|
+
- secret-safe environment value hashes.
|
|
84
|
+
|
|
85
|
+
Arrays are canonicalized by their canonical JSON value, object keys are sorted,
|
|
86
|
+
and duplicate primary identities are invalid. Raw secret values are forbidden;
|
|
87
|
+
only declared value hashes may enter the context.
|
|
88
|
+
|
|
89
|
+
### Reuse policies
|
|
90
|
+
|
|
91
|
+
- `portable`: platform is `null`; the receipt may be reused only when the full
|
|
92
|
+
remaining context fingerprint matches.
|
|
93
|
+
- `platform_bound`: `platform.os` and `platform.arch` are required.
|
|
94
|
+
- `environment_bound`: platform is required and at least one fixture, service,
|
|
95
|
+
or environment identity must be present.
|
|
96
|
+
|
|
97
|
+
A receipt whose declared context fingerprint differs from the recomputed
|
|
98
|
+
current context is rejected even when source files are unchanged.
|
|
99
|
+
|
|
100
|
+
## D10: replayable evidence
|
|
101
|
+
|
|
102
|
+
Every v0.2 command receipt contains
|
|
103
|
+
`OwlCodaRunKitReplayableEvidenceV1`. A natural-language command label is not
|
|
104
|
+
acceptance evidence.
|
|
105
|
+
|
|
106
|
+
Common required fields are:
|
|
107
|
+
|
|
108
|
+
- evidence kind: `shell` or `automation`;
|
|
109
|
+
- exact working directory;
|
|
110
|
+
- launcher executable and version;
|
|
111
|
+
- material tool versions;
|
|
112
|
+
- material input IDs and SHA-256 values;
|
|
113
|
+
- output artifact paths and SHA-256 values;
|
|
114
|
+
- command exit code plus stdout/stderr SHA-256 on the enclosing receipt.
|
|
115
|
+
|
|
116
|
+
Shell evidence additionally requires the exact argv array. It must not rely on
|
|
117
|
+
an ambiguous reconstructed command string.
|
|
118
|
+
|
|
119
|
+
Automation evidence additionally requires an automation-manifest SHA-256 and at
|
|
120
|
+
least one output artifact. The manifest may describe Computer Use, CDP,
|
|
121
|
+
Playwright, Electron, browser, or another deterministic runner, but acceptance
|
|
122
|
+
consumes its hash and outputs rather than a prose summary.
|
|
123
|
+
|
|
124
|
+
## Artifact chain
|
|
125
|
+
|
|
126
|
+
```text
|
|
127
|
+
GoalContract
|
|
128
|
+
-> ExecutionPlan + engine pin
|
|
129
|
+
-> WorkerLease
|
|
130
|
+
-> ExecutionDeliveryPacket
|
|
131
|
+
-> source gate + profile impact
|
|
132
|
+
-> VerificationContextV1
|
|
133
|
+
-> VerificationReceiptV2 + replayable evidence
|
|
134
|
+
-> accepted_passed gate
|
|
135
|
+
-> gate-bound CloseoutReceiptV2
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Compatibility
|
|
139
|
+
|
|
140
|
+
- v0.1 delivery fingerprints, profile resolution, and receipt lineage remain
|
|
141
|
+
readable and retain their historical meaning.
|
|
142
|
+
- A closed execution is inspected against the immutable Core identity in its
|
|
143
|
+
closeout receipt. Only an active execution is compared with the currently
|
|
144
|
+
installed Core, so active engine drift still fails closed without making
|
|
145
|
+
closed history unreadable.
|
|
146
|
+
- A v0.1 gate may still be inspected, but it cannot authorize a v0.2 accepted
|
|
147
|
+
closeout.
|
|
148
|
+
- New project initialization writes `OwlCodaRunKitConfigV2` and pins Core
|
|
149
|
+
`0.3.0`.
|
|
150
|
+
- Initialization upgrades a known V1 project config or an older v0.2 Core
|
|
151
|
+
patch identity by atomically replacing `config.json` and writing an
|
|
152
|
+
authorization-free local migration receipt. Unknown config versions fail
|
|
153
|
+
closed and are not rewritten.
|
|
154
|
+
- Core artifacts emitted by the current Core use `RunKitCoreArtifactV2`;
|
|
155
|
+
validators may still inspect historical V1 artifacts.
|
|
156
|
+
|
|
157
|
+
## Exit behavior
|
|
158
|
+
|
|
159
|
+
- accepted closeout with a complete current v0.2 gate: exit `0`;
|
|
160
|
+
- missing, rejected, mismatched, legacy, or lease-incomplete accepted gate:
|
|
161
|
+
`closeout_gate_rejected`, exit `2`;
|
|
162
|
+
- malformed CLI input or unreadable JSON: `invalid_input`, exit `3`;
|
|
163
|
+
- active execution engine drift or an invalid historical closeout: inspect
|
|
164
|
+
exit `2`;
|
|
165
|
+
- rejected or blocked record closeout: exit `0`, without acceptance binding.
|
|
166
|
+
|
|
167
|
+
## Authorization boundary
|
|
168
|
+
|
|
169
|
+
Accepted is not authorized. A valid v0.2 closeout records the control decision
|
|
170
|
+
for one source/context/profile combination. It does not authorize stage,
|
|
171
|
+
commit, push, tag, publish, deploy, delete, credential use, telemetry, or
|
|
172
|
+
foreign-project writes. Those actions require separate explicit authority.
|
|
173
|
+
|
|
174
|
+
## Core v0.3 provenance commands
|
|
175
|
+
|
|
176
|
+
Core `0.3.0` implements the first project-owned provenance workflow on top of
|
|
177
|
+
Contract v0.2:
|
|
178
|
+
|
|
179
|
+
- `runkit snapshot` records an exact executable/argv/cwd invocation, immutable
|
|
180
|
+
stdout/stderr bytes and hashes, VerificationContext fingerprint, selected
|
|
181
|
+
source manifest, and Git HEAD/status before and after. RunKit runtime paths
|
|
182
|
+
are excluded from observed product status so evidence writes do not
|
|
183
|
+
self-invalidate. Foreign mode is read-only and target drift fails closed.
|
|
184
|
+
- `runkit finalize` validates the current DeliveryPacket before consuming
|
|
185
|
+
snapshots, recomputes profile impact, verifies replayable evidence and output
|
|
186
|
+
hashes, appends receipt lineage, and emits the gate input/output.
|
|
187
|
+
- `runkit ready-for-commit` requires a fresh DeliveryPacket, accepted gate-bound
|
|
188
|
+
closeout, released leases, and fresh selected root manifests. Its receipt
|
|
189
|
+
keeps every Git/release action and authorization flag false.
|
|
190
|
+
|
|
191
|
+
These commands make the normal path tool-owned instead of hand-authored:
|
|
192
|
+
|
|
193
|
+
```text
|
|
194
|
+
snapshot
|
|
195
|
+
-> finalize
|
|
196
|
+
-> explicit accepted closeout
|
|
197
|
+
-> fresh root snapshot
|
|
198
|
+
-> ready-for-commit
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Core v0.4 recovery inspection
|
|
202
|
+
|
|
203
|
+
Core `0.4.0` makes `runkit inspect` the session-independent recovery entrypoint.
|
|
204
|
+
The top-level recovery summary distinguishes zero, one, and multiple active
|
|
205
|
+
executions. It selects a run only when exactly one active execution exists and
|
|
206
|
+
otherwise returns an explicit `plan_new_execution` or
|
|
207
|
+
`select_active_execution` action.
|
|
208
|
+
|
|
209
|
+
Every execution also reports a recovery view over the existing artifact
|
|
210
|
+
contract:
|
|
211
|
+
|
|
212
|
+
- validated engine-pin and closeout state;
|
|
213
|
+
- active and released worker leases;
|
|
214
|
+
- current DeliveryPacket freshness against the working tree;
|
|
215
|
+
- active receipt lineage and the one matching accepted gate;
|
|
216
|
+
- evidence trust level, issues, and one next allowed action.
|
|
217
|
+
|
|
218
|
+
Inspection does not infer acceptance from file presence. Multiple active runs,
|
|
219
|
+
malformed active artifacts, stale delivery, ambiguous packets or gates, and a
|
|
220
|
+
passed receipt without a recorded writer lease fail closed with exit `2`.
|
|
221
|
+
Closed historical executions remain readable through the Core identity bound
|
|
222
|
+
into their closeout receipt. Inspection remains read-only and grants no Git or
|
|
223
|
+
release authority.
|
|
224
|
+
|
|
225
|
+
## Core v0.5 visual-smoke evidence
|
|
226
|
+
|
|
227
|
+
Core `0.5.0` adds `runkit visual-smoke` as an executor-neutral evidence
|
|
228
|
+
orchestrator. A project supplies one explicit automation runner and exact argv;
|
|
229
|
+
RunKit does not embed a browser, Electron, CDP, Playwright, or Computer Use
|
|
230
|
+
driver.
|
|
231
|
+
|
|
232
|
+
The request freezes the visual surface, viewport, assertion ids, console
|
|
233
|
+
policy, denied external navigation, verification context, and selected source
|
|
234
|
+
manifest. The runner must write a structured result and at least one output
|
|
235
|
+
artifact inside the execution evidence root. RunKit recomputes all artifact
|
|
236
|
+
hashes, binds the canonical automation manifest, stdout, stderr and result to
|
|
237
|
+
`OwlCodaRunKitReplayableEvidenceV1`, and rejects failed assertions, policy
|
|
238
|
+
violations, malformed or missing artifacts, target writes, and post-run artifact
|
|
239
|
+
mutation.
|
|
240
|
+
|
|
241
|
+
The output remains an `OwlCodaRunKitSnapshotV1`, so the existing `finalize`,
|
|
242
|
+
receipt lineage, accepted closeout, and ready-for-commit gates consume visual
|
|
243
|
+
evidence without a parallel acceptance path. A passing visual smoke grants no
|
|
244
|
+
Git, release, credential, navigation, or foreign-write authority.
|
|
245
|
+
|
|
246
|
+
## Core v0.6 dependency-aware verification planning
|
|
247
|
+
|
|
248
|
+
Core `0.6.0` adds `runkit verify-plan` as the deterministic planning boundary
|
|
249
|
+
between a fresh DeliveryPacket and command execution. It does not weaken the
|
|
250
|
+
v0.2 source or acceptance gate. It records four separate facts:
|
|
251
|
+
|
|
252
|
+
- leased source drift invalidates receipts bound to the changed source;
|
|
253
|
+
- declared dependency drift invalidates receipts bound to the changed
|
|
254
|
+
dependency identity;
|
|
255
|
+
- unrelated dirty-tree drift remains visible without invalidating unrelated
|
|
256
|
+
local receipt evidence;
|
|
257
|
+
- global gate failure blocks the relevant acceptance decision without
|
|
258
|
+
rewriting otherwise reusable receipts as stale or failed.
|
|
259
|
+
|
|
260
|
+
`OwlCodaRunKitEvidenceCoverageIndexV1` binds each candidate reusable receipt to
|
|
261
|
+
source-file hashes, declared dependency hashes, the verification-context
|
|
262
|
+
fingerprint, profile ids and command ids. The resulting
|
|
263
|
+
`OwlCodaRunKitVerificationPlanV1` records reusable and invalid receipts,
|
|
264
|
+
direct/transitive/supporting profile impact, one deterministic primary profile
|
|
265
|
+
or an ambiguity warning, uncovered paths, and the minimum pending command ids.
|
|
266
|
+
The plan also emits exact pending command definitions. A selected profile with
|
|
267
|
+
no command mapping blocks as `verification_mapping_required` instead of being
|
|
268
|
+
misreported as ready, and more than ten direct profile matches emit a
|
|
269
|
+
machine-readable breadth warning.
|
|
270
|
+
|
|
271
|
+
The Core recomputes workspace Git paths, current source hashes and declared
|
|
272
|
+
file-dependency hashes before writing the project-owned plan. Supporting-only
|
|
273
|
+
profile matches fail closed, and an uncovered path still requires the full
|
|
274
|
+
profile. A plan always records `authorizationGranted=false`; command execution,
|
|
275
|
+
Git, release, credentials, deletion and foreign writes require separate
|
|
276
|
+
authority.
|
|
277
|
+
|
|
278
|
+
## Core v0.7 receipt-backed coverage adoption
|
|
279
|
+
|
|
280
|
+
Core `0.7.0` adds `runkit coverage-adopt` as the provenance boundary between
|
|
281
|
+
accepted Contract v0.2 verification evidence and a reusable
|
|
282
|
+
`OwlCodaRunKitEvidenceCoverageIndexV1`. A request may select a project-owned
|
|
283
|
+
gate input by path and SHA-256 and map receipt command ids to project profile
|
|
284
|
+
commands or dependency ids to material inputs and VerificationContext entries.
|
|
285
|
+
It cannot supply receipt status, source hashes, dependency hashes, context
|
|
286
|
+
fingerprints, selected profiles, or command results.
|
|
287
|
+
|
|
288
|
+
The Core recomputes the gate artifact hash, validates its append-only lineage
|
|
289
|
+
and acceptance decision, selects only the active passed receipt, matches exact
|
|
290
|
+
cwd/launcher/argv and zero exit against the declared profile command, and
|
|
291
|
+
derives source and dependency coverage from bound evidence. The resulting
|
|
292
|
+
coverage artifact records its source gate path/hash, active receipt hash,
|
|
293
|
+
source run, current adopting run, the command/dependency selectors used for
|
|
294
|
+
derivation, and `authorizationGranted=false`.
|
|
295
|
+
|
|
296
|
+
`runkit verify-plan` in Core `0.7.0` consumes the coverage artifact through a
|
|
297
|
+
path and SHA-256, then re-derives it from the current gate bytes, active receipt,
|
|
298
|
+
project profiles, exact command evidence, and declared dependency evidence.
|
|
299
|
+
Changed source evidence or any mismatch between the derived result and the
|
|
300
|
+
stored index fails closed. Unbound inline coverage claims are rejected.
|
|
301
|
+
Coverage adoption and verification planning remain evidence operations:
|
|
302
|
+
neither grants command execution, Git, release, credentials, deletion,
|
|
303
|
+
telemetry, or foreign-write authority.
|
|
304
|
+
|
|
305
|
+
## Core v0.8 append-only native resume
|
|
306
|
+
|
|
307
|
+
Core `0.8.0` adds `runkit resume` after receipt-backed coverage adoption. The
|
|
308
|
+
CLI `--run-id` identifies the source execution and supports two explicit modes:
|
|
309
|
+
|
|
310
|
+
- an unclosed execution receives a new `OwlCodaRunKitResumeAttemptV1` in the
|
|
311
|
+
same run only when its engine pin is current, it is the sole active execution,
|
|
312
|
+
no writer lease remains active, and no finalized receipt lineage exists. An
|
|
313
|
+
execution with finalized receipts must close before it can resume as a
|
|
314
|
+
distinct continuation, so old verification cannot govern the resumed state;
|
|
315
|
+
- a closed execution creates a distinct continuation run atomically. The new
|
|
316
|
+
execution preserves the exact parent goal bytes and binds the parent goal,
|
|
317
|
+
closeout, decision, engine pin, source run id, and artifact hashes without
|
|
318
|
+
modifying the parent execution.
|
|
319
|
+
|
|
320
|
+
Both modes derive a fresh `OwlCodaRunKitEvidenceCoverageIndexV1` through the
|
|
321
|
+
same accepted-gate and exact-command boundary as `coverage-adopt`. The request
|
|
322
|
+
may select coverage sources but cannot supply receipt status, hashes, profiles,
|
|
323
|
+
command results, or reusable receipt ids. Empty coverage is valid when the
|
|
324
|
+
source execution has no accepted evidence to inherit.
|
|
325
|
+
|
|
326
|
+
Inherited receipt ids remain provisional evidence, not a new acceptance
|
|
327
|
+
decision. The resume attempt requires the next workflow to acquire a writer
|
|
328
|
+
lease, prepare or replace the DeliveryPacket, and run `verify-plan`; that plan
|
|
329
|
+
re-derives the coverage index and determines which stages are still reusable.
|
|
330
|
+
Resume never rewrites a prior goal, lease, packet, snapshot, receipt, gate,
|
|
331
|
+
coverage index, event, or closeout, and every result keeps
|
|
332
|
+
`authorizationGranted=false`.
|
|
333
|
+
|
|
334
|
+
## Core v0.9 CLI-managed lease and delivery
|
|
335
|
+
|
|
336
|
+
Core `0.9.0` removes hand-authored lease and DeliveryPacket JSON from the
|
|
337
|
+
normal Codex adapter path while retaining the same project-owned artifacts.
|
|
338
|
+
`runkit lease acquire` accepts repeated explicit `--owned-path` values, rejects
|
|
339
|
+
the reserved runtime, and checks every active execution under a project-level
|
|
340
|
+
transaction lock before writing one `OwlCodaRunKitWorkerLeaseV1`. Active path
|
|
341
|
+
overlap, duplicate work items, malformed files, directories, and symlinked
|
|
342
|
+
lease truth fail closed. `lease inspect` reads those artifacts and `lease
|
|
343
|
+
release` is the only normal `active -> released` transition.
|
|
344
|
+
|
|
345
|
+
`runkit delivery create --from-lease` reads current Git porcelain status but
|
|
346
|
+
includes only changed regular files owned by the selected active lease. It
|
|
347
|
+
derives whole-file SHA-256 values, canonical source fingerprint, branch, HEAD,
|
|
348
|
+
Core identity, and a list of unrelated dirty paths. Unrelated dirty paths stay
|
|
349
|
+
visible but are not silently claimed by the lease. Reserved runtime paths,
|
|
350
|
+
deletions, renames, symlinks, an empty candidate set, released or ambiguous
|
|
351
|
+
leases, unsafe output directories, and duplicate packet ids fail closed.
|
|
352
|
+
|
|
353
|
+
These commands write only `.owlcoda/runkit/**`. Every result and generated
|
|
354
|
+
packet keeps `authorizationGranted=false` and all repository actions false;
|
|
355
|
+
lease or delivery state never grants Git, release, credential, deletion,
|
|
356
|
+
telemetry, or foreign-write authority.
|
|
357
|
+
|
|
358
|
+
## Core v0.10 high-level lifecycle composition
|
|
359
|
+
|
|
360
|
+
Core `0.10.0` adds `runkit start`, `runkit verify`, and `runkit finish` as the
|
|
361
|
+
normal Codex adapter path without replacing any atomic command or artifact.
|
|
362
|
+
`start` composes plan and lease acquisition under the project control lock; an
|
|
363
|
+
invalid or overlapping lease rolls back only the newly created execution.
|
|
364
|
+
|
|
365
|
+
`verify` accepts an exact executable and argv after `--`, including a
|
|
366
|
+
zero-argument executable or empty-string argument. It derives a bounded
|
|
367
|
+
DeliveryPacket from the selected lease, writes generated snapshot/finalize
|
|
368
|
+
requests under the execution, derives platform, Node, Git and recognized
|
|
369
|
+
lockfile identity, runs the snapshot, and finalizes only when that snapshot
|
|
370
|
+
passes without source drift. The complete high-level verify holds the project
|
|
371
|
+
control transaction, so `finish` cannot close while a command is running.
|
|
372
|
+
Finalize and accepted finish both require the snapshot selected-file map,
|
|
373
|
+
manifest fingerprint and material inputs to match the same DeliveryPacket;
|
|
374
|
+
an old snapshot cannot be relabeled with a new source fingerprint. A command failure preserves stdout, stderr,
|
|
375
|
+
exit code, request and snapshot artifacts and emits no passed receipt.
|
|
376
|
+
|
|
377
|
+
`finish accepted` first derives and validates the unique active receipt gate,
|
|
378
|
+
then releases active leases and writes the accepted closeout. Without that gate
|
|
379
|
+
it leaves leases active and fails closed. It accepts only a Contract v0.2 gate
|
|
380
|
+
whose execution, receipt, snapshot, evidence and DeliveryPacket directories are
|
|
381
|
+
real project directories without symlink ancestors. If closeout persistence
|
|
382
|
+
fails after lease release, the same control transaction restores those leases
|
|
383
|
+
before returning failure. `blocked` and `rejected` release the
|
|
384
|
+
execution's leases and close honestly without inventing verification.
|
|
385
|
+
|
|
386
|
+
These commands only compose existing project-owned truth. They do not parse a
|
|
387
|
+
shell string, adopt terminal history, schedule multiple commands, or grant Git,
|
|
388
|
+
release, credential, deletion, telemetry, deployment, or foreign-write
|
|
389
|
+
authority.
|
|
390
|
+
|
|
391
|
+
## Core v0.11 human-first inspect projection
|
|
392
|
+
|
|
393
|
+
Core `0.11.0` changes only direct `runkit inspect` presentation. Its default
|
|
394
|
+
stdout is a compact human summary of current execution, latest indexed
|
|
395
|
+
closeout, source and evidence status, active lease holders, dominant gap, next
|
|
396
|
+
allowed action and false release authority. The wording is deliberately
|
|
397
|
+
`latest indexed closeout`, not `most recent`, because Contract v0.2 closeout
|
|
398
|
+
artifacts do not carry an acceptance timestamp. A closed delivery remains
|
|
399
|
+
`historical`; inspect does not claim it is still fresh.
|
|
400
|
+
|
|
401
|
+
Machine consumers must call `runkit inspect --json`. That response preserves
|
|
402
|
+
the complete execution and recovery document and adds the deterministic
|
|
403
|
+
`OwlCodaRunKitInspectSummaryV1` projection. `--history` lists only indexed
|
|
404
|
+
closed executions, while `--run-id ID --verbose` focuses one execution's pin,
|
|
405
|
+
lease, source, evidence, trust, issues and next action. These views are derived
|
|
406
|
+
in memory and never write project state or create acceptance, Git or release
|
|
407
|
+
authority.
|
|
408
|
+
|
|
409
|
+
The projection is fail-closed. Every unclosed execution entry remains visible
|
|
410
|
+
even when its engine pin is malformed, multiple active executions never inherit
|
|
411
|
+
source or evidence state from closed history, and damaged closed truth points to
|
|
412
|
+
`repair_execution_artifacts`. Project config, execution, lease, delivery,
|
|
413
|
+
receipt, gate, engine pin and closeout truth must be regular project-owned files
|
|
414
|
+
and real directories without symlink ancestors. Config fields and authority
|
|
415
|
+
policy are validated before they enter the machine document. Symlinked,
|
|
416
|
+
redirected, dangling or non-regular truth is reported as invalid rather than
|
|
417
|
+
followed or silently treated as absent. Human output escapes control characters,
|
|
418
|
+
and indexed identifiers use locale-independent code-unit order.
|
|
419
|
+
|
|
420
|
+
## Core v0.12 typed model resource preflight
|
|
421
|
+
|
|
422
|
+
Core `0.12.0` adds `runkit resource-preflight` as the boundary before
|
|
423
|
+
model-intensive work. A project supplies a strict request containing one
|
|
424
|
+
hash-bound `OwlCodaRunKitVerificationPlanV1`, typed provider/model observations,
|
|
425
|
+
the remaining workload estimate, explicit unknown handling, and hard resource
|
|
426
|
+
limits. RunKit validates and totals this evidence; it does not query provider
|
|
427
|
+
billing, discover credentials, route a model, or execute the workload.
|
|
428
|
+
|
|
429
|
+
Receipt reuse is limited to workload entries whose `coveredByReceiptId` is
|
|
430
|
+
still present in the bound plan's `reusableReceiptIds`. The Core subtracts only
|
|
431
|
+
those entries, then deterministically totals pending calls, input/output/total
|
|
432
|
+
tokens, elapsed time, and cost. Cost remains typed unknown unless the project
|
|
433
|
+
supplies explicit USD input/output rates. Availability, remaining-call quota,
|
|
434
|
+
remaining-token quota, reset time, and pricing remain independent known or
|
|
435
|
+
unknown facts and preserve their adapter evidence kind, hash, reference, and
|
|
436
|
+
observation time. `maxObservationAgeMs` makes that evidence expire explicitly;
|
|
437
|
+
an expired latest artifact projects `run_resource_preflight` instead of model
|
|
438
|
+
readiness. Inspect revalidates the bound plan path, bytes, SHA-256, identity,
|
|
439
|
+
authority boundary, and reusable receipt set, and recomputes resource demand,
|
|
440
|
+
cost, freshness, blockers, warnings, and decision from the artifact rather than
|
|
441
|
+
trusting its projection fields.
|
|
442
|
+
|
|
443
|
+
The project policy separately chooses fail-open or fail-closed behavior for
|
|
444
|
+
availability, quota, reset time, and pricing. A required unavailable model,
|
|
445
|
+
insufficient known quota, exceeded limit, or fail-closed unknown returns
|
|
446
|
+
`blocked_by_resource` with `pause_at_deterministic_stage`. A model-optional gate
|
|
447
|
+
may return `ready_without_model_execution`; it never invents or selects a
|
|
448
|
+
fallback model. The append-only `OwlCodaRunKitResourcePreflightV1` artifact and
|
|
449
|
+
every CLI result keep authorization, Git, and release authority false.
|
|
450
|
+
|
|
451
|
+
Core `0.12.0` is the typed evidence and deterministic-estimate layer, not a
|
|
452
|
+
claim that every provider exposes reliable remaining quota, reset time, or
|
|
453
|
+
pricing. Live provider adapters require a separately verifiable source and may
|
|
454
|
+
legitimately report typed unknown fields.
|
|
455
|
+
|
|
456
|
+
## Core v0.13 standalone distribution, Quick verification and repair
|
|
457
|
+
|
|
458
|
+
Core `0.13.0` is distributed through the standalone `owlrunkit` package. The
|
|
459
|
+
RunKit package has an independent semantic version lifecycle from the
|
|
460
|
+
`owlcoda` CLI; a RunKit packaging or documentation patch does not change the
|
|
461
|
+
Contract `0.2` / Core `0.13.0` identity unless Core behavior or its bound
|
|
462
|
+
dependency closure changes.
|
|
463
|
+
|
|
464
|
+
Core `0.13.0` adds a bounded Quick Verification lane for one exact command
|
|
465
|
+
without a writer lease or Formal acceptance. `quick-verify` records the
|
|
466
|
+
pre/post workspace fingerprints, exact executable and argv, stdout/stderr
|
|
467
|
+
materials, exit result and an authorization-free
|
|
468
|
+
`OwlCodaQuickVerificationReceiptV1`. `quick-attest` recomputes the selected
|
|
469
|
+
workspace and receipt bindings. `quick-metrics --local` reads only the
|
|
470
|
+
project-owned receipt store and performs no telemetry or network access. A
|
|
471
|
+
Quick `GO` remains `captured_verification`; it cannot satisfy the Formal
|
|
472
|
+
Contract v0.2 acceptance gate.
|
|
473
|
+
|
|
474
|
+
Core `0.18.3` adds `OwlCodaQuickVerificationReceiptV2` only when the caller
|
|
475
|
+
uses `quick-verify --stdin-file`. RunKit copies at most 1 MiB from a regular
|
|
476
|
+
non-symlink file into the receipt store before execution, supplies those stored
|
|
477
|
+
bytes as exact stdin, and binds their workspace-relative path, byte size, and
|
|
478
|
+
SHA-256. V1 remains the no-stdin receipt and stays readable. Neither schema
|
|
479
|
+
binds undeclared ignored outputs or grants any authority.
|
|
480
|
+
|
|
481
|
+
Deterministic `repair` persists a reviewable plan before replay, reuses only
|
|
482
|
+
fresh receipt-bound coverage, replays pending exact argv, and appends
|
|
483
|
+
replacement lineage. Failed and orphaned attempts remain inspectable. Repair
|
|
484
|
+
cannot rewrite the parent receipt, lower risk, replace the executable after
|
|
485
|
+
planning, or activate a green leaf after source/profile drift.
|
|
486
|
+
|
|
487
|
+
`offline-export` and `offline-import` move exact receipt bytes through
|
|
488
|
+
`OwlCodaOfflineAttestationBundleV1`. Export refuses an existing destination.
|
|
489
|
+
Import is idempotent only when the stored receipt bytes match exactly and fails
|
|
490
|
+
closed on conflicts, symlinked paths or malformed bundles. The embedded
|
|
491
|
+
read-only attestation component is part of the standalone package; it does not
|
|
492
|
+
need a separate public package for the first adoption wave.
|
|
493
|
+
|
|
494
|
+
Formal cross-project adoption is registry-first. The installed package and
|
|
495
|
+
controller-owned `OwlCodaRunKitRegistryReleaseEvidenceV1` must bind the same
|
|
496
|
+
exact official npm registry version, 40-hex `shasum`, canonical SHA-512
|
|
497
|
+
`integrity`, and exact tarball URL. A local directory, `file:` dependency,
|
|
498
|
+
local tarball, symlink, workspace link, Git reference or mutable dist-tag can
|
|
499
|
+
exercise a release candidate but is not formal adoption evidence.
|
|
500
|
+
|
|
501
|
+
The canonical Codex Skill is assembled atomically with a content manifest that
|
|
502
|
+
binds its Skill text, Core, contracts and attestation files. Known valid
|
|
503
|
+
installations may be archived and replaced; unknown drift fails closed. Core
|
|
504
|
+
`0.13.0` does not grant Git, npm, release, or foreign-project authority.
|
|
505
|
+
Signing, keys, external anchors and GitHub Actions remain deferred.
|
|
506
|
+
|
|
507
|
+
## Core v0.14 self-service onboarding
|
|
508
|
+
|
|
509
|
+
Core `0.14.0` keeps Contract `0.2`, Quick/Formal lane separation, exact
|
|
510
|
+
registry binding, append-only execution lineage, independent review and all
|
|
511
|
+
authority boundaries unchanged. Its product change is the first-adoption
|
|
512
|
+
surface of the standalone `owlrunkit` package:
|
|
513
|
+
|
|
514
|
+
- top-level `--help` and `--version` follow ordinary CLI expectations and exit
|
|
515
|
+
successfully without creating project state;
|
|
516
|
+
- `doctor` performs read-only Node, Core, config, package, registry, profile
|
|
517
|
+
and project-script diagnostics with a short network timeout and a typed
|
|
518
|
+
offline/DNS-timeout, authorization, missing-version and binding-mismatch
|
|
519
|
+
taxonomy;
|
|
520
|
+
- `profiles detect --dry-run`, `profiles validate`, and
|
|
521
|
+
`profiles impact --changed` provide deterministic official entrypoints
|
|
522
|
+
without treating guessed profiles as authoritative configuration;
|
|
523
|
+
- `adopt --exact owlrunkit@0.14.0` accepts only the official npm registry exact
|
|
524
|
+
version whose registry metadata and local install/lock binding pass the
|
|
525
|
+
existing strict adoption evaluator; and
|
|
526
|
+
- `init` and `inspect` add a separate onboarding projection for
|
|
527
|
+
`doctor -> profiles detect --dry-run -> adopt or Formal start`.
|
|
528
|
+
|
|
529
|
+
Read-only onboarding commands must not write project state or expose registry
|
|
530
|
+
credentials. Adoption evidence is written atomically only after eligibility.
|
|
531
|
+
Local directories, worktrees, `file:` or Git dependencies, local tarballs,
|
|
532
|
+
workspace links and mutable tags remain fail-closed. Profile detection never
|
|
533
|
+
overwrites existing config, and an implementation may omit `profiles apply`
|
|
534
|
+
rather than infer authority from a deterministic suggestion.
|
|
535
|
+
|
|
536
|
+
The onboarding projection is not the recovery state machine: a project with a
|
|
537
|
+
stale Packet, invalid evidence or engine drift must still follow the Core's
|
|
538
|
+
`nextAllowedAction`. Core `0.14.0` does not grant Git, npm, release, deploy or
|
|
539
|
+
foreign-project authority. Signing, keys, external anchors and GitHub Actions
|
|
540
|
+
remain deferred.
|
|
541
|
+
|
|
542
|
+
## Deferred work
|
|
543
|
+
|
|
544
|
+
Contract v0.2 still does not add a built-in browser or Electron driver, Plugin,
|
|
545
|
+
cloud, team, signing, or transparency-log services.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "owlrunkit",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.4",
|
|
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>",
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# `@owlcoda/attest`
|
|
2
2
|
|
|
3
3
|
`@owlcoda/attest` is OwlCoda RunKit's unsigned, read-only verification plane.
|
|
4
|
-
It verifies Quick Receipt V1 artifacts, Formal public verification
|
|
5
|
-
local `OwlCodaAttestationRefV1` references without importing the
|
|
6
|
-
mutation Core.
|
|
4
|
+
It verifies Quick Receipt V1 and V2 artifacts, Formal public verification
|
|
5
|
+
bundles, and local `OwlCodaAttestationRefV1` references without importing the
|
|
6
|
+
private mutation Core. V2 adds one hash-bound stdin material while preserving
|
|
7
|
+
the same unsigned, authorization-free assurance boundary.
|
|
7
8
|
|
|
8
9
|
The package is an unsigned V1 distribution candidate. It is intentionally
|
|
9
10
|
marked private until naming clearance and release authorization exist.
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"OwlCodaAttestationResultV1",
|
|
14
14
|
"OwlCodaOfflineAttestationBundleV1",
|
|
15
15
|
"OwlCodaQuickVerificationReceiptV1",
|
|
16
|
+
"OwlCodaQuickVerificationReceiptV2",
|
|
16
17
|
"OwlCodaRunKitPublicVerificationBundleV1",
|
|
17
18
|
"OwlCodaWorkspaceSnapshotV1"
|
|
18
19
|
]
|
|
@@ -24,7 +25,7 @@
|
|
|
24
25
|
},
|
|
25
26
|
"consumerSurfaceManifest": {
|
|
26
27
|
"path": "consumer-surface-v1.json",
|
|
27
|
-
"sha256": "sha256:
|
|
28
|
+
"sha256": "sha256:7ca555235f37e2b7fb6e5792c65ca280deae0bce74e8c1a84751ae52121ae725"
|
|
28
29
|
},
|
|
29
30
|
"sbom": {
|
|
30
31
|
"path": "sbom.spdx.json",
|
|
@@ -36,6 +37,16 @@
|
|
|
36
37
|
"sha256": "sha256:3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986"
|
|
37
38
|
},
|
|
38
39
|
"supportedProducerCoreIdentities": [
|
|
40
|
+
{
|
|
41
|
+
"contractVersion": "0.2",
|
|
42
|
+
"coreVersion": "0.18.4",
|
|
43
|
+
"coreManifestSha256": "sha256:372d4c247e4b40b0fd2f3fe0f5bf928548095bfb7e2e92e9ac66790e2717f77d"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"contractVersion": "0.2",
|
|
47
|
+
"coreVersion": "0.18.3",
|
|
48
|
+
"coreManifestSha256": "sha256:cc7a923649592084150828f24f0d90f280af92514bafdbc4999f4015b3175d5c"
|
|
49
|
+
},
|
|
39
50
|
{
|
|
40
51
|
"contractVersion": "0.2",
|
|
41
52
|
"coreVersion": "0.18.2",
|