owlrunkit 0.16.0 → 0.17.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 (31) hide show
  1. package/CHANGELOG.md +40 -3
  2. package/README.md +61 -12
  3. package/docs/architecture/OWLCODA_RUNKIT_017_AGENT_NATIVE_PRODUCT_DEFINITION.md +154 -0
  4. package/integrations/codex/skills/owlcoda-runkit/SKILL.md +74 -16
  5. package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
  6. package/package.json +1 -1
  7. package/packages/attest/distribution-manifest-v1.json +10 -0
  8. package/packages/attest/src/quick.mjs +10 -0
  9. package/registry-release-policy-v1.json +5 -5
  10. package/sbom.spdx.json +5 -5
  11. package/scripts/runkit-contract/core-contract.mjs +12 -2
  12. package/scripts/runkit-contract/fleet-discovery.mjs +768 -26
  13. package/scripts/runkit-contract/formal-workflow.mjs +201 -0
  14. package/scripts/runkit-contract/lifecycle-orchestration.mjs +7 -2
  15. package/scripts/runkit-contract/project-cli-resolver.mjs +3 -0
  16. package/scripts/runkit-contract/project-control-parser.mjs +62 -3
  17. package/scripts/runkit-contract/runkit-cli.mjs +162 -13
  18. package/scripts/runkit-contract/schemas/core-successor-plan-v1.schema.json +14 -2
  19. package/scripts/runkit-contract/schemas/fleet-discovery-v1.schema.json +33 -2
  20. package/scripts/runkit-contract/schemas/team-project-definition-v1.schema.json +108 -0
  21. package/scripts/runkit-contract/schemas/team-project-event-v1.schema.json +99 -0
  22. package/scripts/runkit-contract/schemas/team-project-status-v1.schema.json +50 -0
  23. package/scripts/runkit-contract/schemas/verification-envelope-v1.schema.json +102 -0
  24. package/scripts/runkit-contract/sync-core016-release-identity.mjs +9 -4
  25. package/scripts/runkit-contract/sync-release-identity.mjs +224 -0
  26. package/scripts/runkit-contract/team-project.mjs +1006 -0
  27. package/scripts/runkit-contract/templates/team-project-definition.json +30 -0
  28. package/scripts/runkit-contract/templates/team-project-event.json +9 -0
  29. package/scripts/runkit-contract/templates/verification-envelope.json +28 -0
  30. package/scripts/runkit-contract/verification-envelope-check.mjs +45 -0
  31. package/scripts/runkit-contract/verification-envelope.mjs +846 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.17.0
4
+
5
+ - Adds an Agent-native persistent project model for milestones, workstreams,
6
+ WorkItems, dependencies, per-Agent assignments, checkpoints, decisions,
7
+ handoffs, integration gates, and evidence-backed data candidates.
8
+ - Projects honest per-Agent progress from append-only artifacts instead of
9
+ accepting self-reported percentages. WorkItems may use predeclared measured
10
+ units, and execution-bound completion requires a trusted accepted closeout
11
+ with a released lease.
12
+ - Adds blank-session takeover packets so a successor Agent can recover the
13
+ objective, assigned work, blockers, evidence, history, and next action without
14
+ relying on an old chat.
15
+ - Adds `owlrunkit project` commands for initialization, assignment,
16
+ checkpointing, decisions, handoff, evidence capture, status, and takeover.
17
+ - Adds an enforced Verification Envelope for real Formal checks with explicit
18
+ source/output/scratch/forbidden paths, environment, network, process,
19
+ timeout, setup/check/teardown, cleanup, and content-addressed evidence.
20
+ - Provides a macOS sandbox backend and fails closed on platforms where the
21
+ declared filesystem, network, credential, process, and cleanup policy cannot
22
+ be proved.
23
+ - Preserves the 0.16 execution, lease, SourceCandidate, closeout, fleet,
24
+ deployment, recovery, and authority boundaries.
25
+
26
+ ## 0.16.1
27
+
28
+ - Replaces mutable publication-state assertions in the bundled Codex Skill
29
+ with time-stable registry verification guidance.
30
+ - Binds the 0.16.1 candidate and rollback path to the exact officially
31
+ published `owlrunkit@0.16.0` registry shasum, integrity, and tarball URL.
32
+ - Extends the trusted prior-Core catalog and public verifier so 0.16.0 projects
33
+ can enter the existing fail-closed Core-successor path without hand edits.
34
+ - Strengthens the release identity gate so both source and unpacked Skill
35
+ copies fail when stale publication claims or mismatched release identities
36
+ appear.
37
+ - Grants no Git, publish, release, deploy, installation, global Skill update,
38
+ or foreign-project migration authority.
39
+
3
40
  ## 0.16.0
4
41
 
5
42
  - Adds a persistent coverage-root registry. After each fleet root is registered
@@ -87,9 +124,9 @@
87
124
  package. Delegation additionally requires the canonical official npm tarball
88
125
  URL, canonical SHA-512 SRI, a bootstrap-trusted Core identity, and a matching
89
126
  project Config, so a jointly forged local CLI and Config remain blocked.
90
- - Keeps the candidate unpublished, binds the rollback baseline to the exact
91
- published `owlrunkit@0.15.1`, and grants no Git, publish, release, deploy, or
92
- business authority.
127
+ - Was published to the official npm registry with `owlrunkit@0.15.1` as its
128
+ release-time rollback baseline; publication did not grant Git, deployment,
129
+ installation, or business authority.
93
130
 
94
131
  ## 0.15.1
95
132
 
package/README.md CHANGED
@@ -8,7 +8,7 @@ evidence, then close out once.
8
8
  ## Install
9
9
 
10
10
  ```bash
11
- npm install --save-exact owlrunkit@0.16.0
11
+ npm install --save-exact owlrunkit@0.17.0
12
12
  ```
13
13
 
14
14
  The `owlrunkit` bootstrap uses the project's exact locally bound CLI for
@@ -26,6 +26,35 @@ owlrunkit init --workspace /absolute/path/to/project
26
26
  owlrunkit doctor --workspace /absolute/path/to/project
27
27
  ```
28
28
 
29
+ ## Coordinate a multi-Agent project
30
+
31
+ RunKit 0.17 keeps the project alive independently of any one Agent or chat.
32
+ Define durable milestones, workstreams, WorkItems, dependencies, integration
33
+ gates, and optional measured units, then record append-only assignment and
34
+ checkpoint events:
35
+
36
+ ```bash
37
+ owlrunkit project init --workspace . \
38
+ --definition scripts/runkit-contract/templates/team-project-definition.json
39
+ owlrunkit project assign --workspace . \
40
+ --request scripts/runkit-contract/templates/team-project-event.json
41
+ owlrunkit project status --workspace .
42
+ owlrunkit project takeover --workspace . --agent agent-runtime
43
+ ```
44
+
45
+ `project status` reports every Agent's active, waiting, completed, and failed
46
+ work; unresolved dependencies and decisions; the ready queue; critical work;
47
+ and integration gates. It does not accept a guessed completion percentage.
48
+ Measured progress is allowed only when the unit and total were declared in the
49
+ WorkItem. An assignment may bind an exact RunKit execution and lease; in that
50
+ case, the WorkItem cannot complete until the execution has a trusted accepted
51
+ closeout and its lease is released.
52
+
53
+ The Agent-facing natural actions are stable: split and assign work, report
54
+ status, open or resolve a decision, hand off, take over, capture evidence, and
55
+ verify. The CLI is the durable implementation surface; users can keep speaking
56
+ in project terms.
57
+
29
58
  ## Detect and apply project profiles
30
59
 
31
60
  Preview deterministic, project-local commands, or atomically adopt only
@@ -94,14 +123,24 @@ the authorized permission scope really changes. Repeating the same `check` or
94
123
  `finish` command resumes exact create-only artifacts after an interruption;
95
124
  different bytes fail closed.
96
125
 
97
- Formal accepted evidence currently admits only the built-in Node syntax check
98
- shown above: the exact `process.execPath`, `--check`, and an ordinary workspace
99
- file. Profile, package-manager, wrapper, and custom commands are rejected
100
- before spawn because RunKit does not yet enforce a filesystem-write and network
101
- sandbox for them. Existing full verification and legacy `verify` commands
102
- remain available for controlled execution, but their deny rules are not
103
- sandbox-equivalent and their output is not silently promoted into this Formal
104
- accepted-evidence path.
126
+ Formal also accepts a real project command through an enforced Verification
127
+ Envelope:
128
+
129
+ ```bash
130
+ owlrunkit formal check --workspace . --run-id release-001 \
131
+ --work-item delivery --check-id project-tests \
132
+ --envelope scripts/runkit-contract/templates/verification-envelope.json
133
+ ```
134
+
135
+ The envelope declares exact commands, cwd, lockfiles, environment, timeout,
136
+ immutable source, writable outputs, disposable scratch, forbidden paths,
137
+ network mode, subprocess policy, and bounded setup/check/teardown. RunKit
138
+ captures stdout, stderr, output hashes, source before/after fingerprints,
139
+ runner identity, cleanup, and a self-verifying receipt. The public 0.17 package
140
+ provides a real macOS enforcement backend. If the current platform cannot prove
141
+ the policy, the command is not run and no Formal acceptance is possible.
142
+ Existing legacy verification may still capture evidence, but it is not silently
143
+ promoted into this Formal path.
105
144
 
106
145
  Use `owlrunkit status --workspace .` for a concise human view of what is ready,
107
146
  what has not happened, how many gates remain, and the next allowed action.
@@ -138,12 +177,22 @@ commands use the persistent registry automatically:
138
177
  ```bash
139
178
  owlrunkit fleet register-root --fleet-root /absolute/projects
140
179
  owlrunkit fleet register-root --fleet-root /absolute/other-projects
180
+ owlrunkit fleet inspect-registry
141
181
  owlrunkit fleet discover
142
182
  ```
143
183
 
144
- The registry lives under the user-owned OwlCoda home. RunKit recursively
145
- discovers projects inside every registered root, rejects an unreachable root,
146
- and freezes the exact workspace list before a shared Skill or Core change.
184
+ The registry lives under the user-owned OwlCoda home. Initial discovery stops
185
+ at each project root; nested projects require a separate coverage root or
186
+ explicit registration. Marker, depth and filesystem failures are reported as
187
+ typed path-level issues rather than being collapsed into an unreachable root.
188
+ After a fleet is classified, `fleet replace-registry --dry-run` previews an
189
+ evidence-bound active, retired, excluded and invalid membership. Applying the
190
+ same request atomically records the exact preimage and a rollback receipt;
191
+ coverage reduction requires explicit exclusion evidence. Retired archives stay
192
+ auditable but are never interpreted as active writers.
193
+
194
+ RunKit rejects an unreachable root and freezes the exact active workspace list
195
+ before a shared Skill or Core change.
147
196
  Explicit `--fleet-root` and `--fleet-manifest` remain available for bounded
148
197
  one-off operations. Completeness is intentionally limited to registered roots;
149
198
  RunKit does not claim machine-wide protection for an unregistered location.
@@ -0,0 +1,154 @@
1
+ # OwlRunKit 0.17 Agent-Native Product Definition
2
+
3
+ Status: implemented candidate pending Formal acceptance and public release.
4
+
5
+ ## Product purpose
6
+
7
+ OwlRunKit exists so a software objective can outlive one chat, one Agent, and
8
+ one execution attempt. Its public value is not the number of receipts it can
9
+ produce. Its value is that a user can give a large objective to an Agent team,
10
+ see who owns each part, recover the work after interruption, make decisions at
11
+ the right point, and inspect the evidence behind the result.
12
+
13
+ The 0.17 product sentence is:
14
+
15
+ > A persistent project truth coordinates multiple Agents while RunKit proves
16
+ > the work, handoffs, decisions, and delivery state behind that truth.
17
+
18
+ 0.17 is an upgrade of the 0.16 trustworthy-execution kernel, not a replacement.
19
+ Executions, exact leases, SourceCandidate, verification receipts, closeouts,
20
+ recovery, and authority boundaries remain the enforcement foundation.
21
+
22
+ ## Primary user experience
23
+
24
+ The product is Agent-native. Users do not need to learn the internal command
25
+ graph. Natural requests map to durable actions:
26
+
27
+ | User intent | Agent action | Durable truth |
28
+ | --- | --- | --- |
29
+ | "Break this large task up and run it in parallel" | Define workstreams and work items, then assign Agents | Project definition and assignment events |
30
+ | "What is everyone doing?" | Read the project projection | Per-Agent active, waiting, completed, and failed work |
31
+ | "What is blocking us?" | Read dependencies, decisions, and critical work | Blockers, open decisions, ready queue, integration gates |
32
+ | "I have decided" | Resolve the named decision with rationale and evidence | Append-only decision history |
33
+ | "Hand this to another Agent" | Record a handoff, then create a successor assignment | Preserved assignment and handoff history |
34
+ | "Continue this work" | Build a blank-session takeover packet | Goal, owned work, evidence, blocker, and next action |
35
+ | "Verify and finish it" | Run the appropriate assurance lane and bind its result | Execution, lease, verification, closeout, and gate truth |
36
+ | "Keep this as training data" | Record a provenance-bound candidate | Candidate only; never automatic dataset admission |
37
+
38
+ The Agent may use CLI commands internally, but the user-facing interaction
39
+ remains goal, progress, decision, and outcome oriented.
40
+
41
+ ## Persistent project model
42
+
43
+ The minimum project truth consists of:
44
+
45
+ - Project objective;
46
+ - Milestones and workstreams;
47
+ - WorkItems with dependency edges and non-overlapping owned paths;
48
+ - AgentAssignment history, including optional exact RunKit execution and lease
49
+ binding;
50
+ - Checkpoints with state, evidence, blockers, decision references, and the next
51
+ action;
52
+ - DecisionNodes with an explicit Owner and append-only resolution;
53
+ - IntegrationGates that cannot pass before their work and decision
54
+ prerequisites;
55
+ - EvidenceLineage and data candidates with source, rights, input, output,
56
+ decision, verification, outcome, and version references.
57
+
58
+ The WorkItem is persistent. An Agent is its current assignee. Reassigning an
59
+ item does not replace its history or create a new project identity.
60
+
61
+ ## Honest progress contract
62
+
63
+ RunKit does not accept self-reported completion percentages. Progress is one of:
64
+
65
+ - a typed state: planned, active, waiting for a dependency, waiting for a
66
+ decision, verifying, ready to integrate, completed, or failed;
67
+ - measured units against a total declared before work starts.
68
+
69
+ A completed checkpoint requires evidence. If an assignment is bound to a
70
+ RunKit execution, completion additionally requires a trusted accepted closeout
71
+ and a released or preserved-inactive lease. A blocked or rejected execution is
72
+ projected as failed even if an Agent claims success.
73
+
74
+ Project status is derived from immutable definition and append-only events. It
75
+ shows:
76
+
77
+ - each Agent's active, waiting, completed, and failed work;
78
+ - milestone and workstream completion counts;
79
+ - unresolved dependencies and decisions;
80
+ - critical work and the ready queue;
81
+ - integration-gate readiness;
82
+ - the exact project-truth hash and evidence references.
83
+
84
+ ## Cross-Agent continuity
85
+
86
+ A blank-session Agent must be able to recover its part without reading an old
87
+ chat. A takeover packet contains the project objective, its assigned work,
88
+ current state, dependency and decision blockers, evidence, assignment history,
89
+ and next action. Reading status or building a takeover packet is read-only.
90
+
91
+ A handoff is two explicit events:
92
+
93
+ 1. the old Agent records what was done, the evidence, and the next action;
94
+ 2. a successor assignment names the new Agent and supersedes the old
95
+ assignment.
96
+
97
+ This preserves responsibility history and prevents a chat summary from becoming
98
+ the project system of record.
99
+
100
+ ## Verification Envelope
101
+
102
+ Formal Delivery may execute a real project command only inside a
103
+ Verification Envelope that declares and enforces:
104
+
105
+ - exact executable, argv, working directory, lockfiles, environment allowlist,
106
+ and timeout;
107
+ - immutable source, declared output, disposable scratch, and forbidden paths;
108
+ - denied or loopback-only network;
109
+ - subprocess policy and cleanup;
110
+ - bounded setup, check, and teardown phases.
111
+
112
+ The enforcement backend must prove these constraints. If it cannot, RunKit may
113
+ capture an observation but cannot produce Formal-eligible evidence. The 0.17
114
+ public package provides the enforced macOS backend; Linux remains fail-closed
115
+ until equivalent process, filesystem, credential, network, and cleanup
116
+ enforcement is available.
117
+
118
+ ## Data boundary
119
+
120
+ Execution evidence can become a high-quality data candidate, but not a dataset
121
+ member by implication. A candidate remains incomplete until its rights,
122
+ decision, verification, and outcome references are present. Dataset selection,
123
+ deduplication, adjudication, quality measurement, retention, and domain meaning
124
+ remain separate responsibilities.
125
+
126
+ ## Authority boundary
127
+
128
+ Project actions and Verification Envelopes never grant Git, release, publish,
129
+ deploy, credential, destructive, production, or business authority. Existing
130
+ RunKit authority checks remain mandatory. A status projection describes truth;
131
+ it does not authorize the next side effect.
132
+
133
+ ## 0.17 acceptance standard
134
+
135
+ The release is acceptable only when all of these are mechanically demonstrated:
136
+
137
+ 1. one project can project several Agents working in parallel;
138
+ 2. dependencies, decisions, handoffs, integration gates, and ready work are
139
+ derived from append-only artifacts;
140
+ 3. a fresh Agent can recover a bounded next action without old chat context;
141
+ 4. an execution-bound WorkItem cannot claim completion before accepted closeout
142
+ and lease release;
143
+ 5. concurrent assignments with overlapping owned paths are rejected;
144
+ 6. data candidates are not silently promoted into a dataset;
145
+ 7. real verification commands can enter Formal only under an enforced
146
+ Verification Envelope;
147
+ 8. source writes, undeclared outputs, forbidden credential reads, unauthorized
148
+ network, leaked processes, receipt drift, and unavailable enforcement all
149
+ fail closed;
150
+ 9. existing 0.16 execution, migration, fleet, deployment, and release contracts
151
+ remain compatible;
152
+ 10. the standalone npm artifact is reproducible, scrubbed, identity-bound, and
153
+ independently verified after publication.
154
+
@@ -1,20 +1,58 @@
1
1
  ---
2
2
  name: owlcoda-runkit
3
- description: Run receipt-backed, project-owned software execution with OwlCoda RunKit. Use when Codex needs to initialize or inspect `.owlcoda/runkit/`, plan bounded work with engine pins and leases, capture exact shell or visual verification evidence, finalize delivery evidence, avoid duplicate covered tests, close an execution, produce a ready-for-commit receipt, or perform a read-only foreign-project shadow without widening Git or release authority.
3
+ description: Run receipt-backed, project-owned work with OwlCoda RunKit. Use when Codex needs to coordinate a large multi-Agent project, show per-Agent progress, manage dependencies or decisions, hand work to another Agent, recover a blank-session next action, initialize or inspect `.owlcoda/runkit/`, plan bounded work with engine pins and leases, capture exact verification evidence, close an execution, produce a ready-for-commit receipt, or perform a read-only foreign-project shadow without widening Git or release authority.
4
4
  ---
5
5
 
6
6
  # OwlCoda RunKit
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
- Current release candidate: standalone `owlrunkit@0.16.0`, bundling Contract
11
- `0.2` and Core `0.16.0` with manifest
12
- `sha256:320fb1d97b4459d1a14b0b67807dcf2bc6b03970492cb9fb2c6245b17912c81e`.
13
- It is not published. The current published release remains `owlrunkit@0.15.1`.
10
+ Bundled release: standalone `owlrunkit@0.17.0`, bundling Contract `0.2` and
11
+ Core `0.17.0` with manifest
12
+ `sha256:0c0c52e7f6299bdd3d3ea49005c8ceef0b28831d60af25d77da65a4e4de714c9`.
13
+ Publication and dist-tag state are mutable registry facts: verify the exact
14
+ official npm registry provenance before adoption. The immutable rollback
15
+ baseline for this release is `owlrunkit@0.16.1` with SHA-1
16
+ `1bc119d24879bdd8959af16b364af55ca9d61ea9` and canonical npm tarball URL
17
+ `https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.16.1.tgz`.
14
18
  The root `owlcoda` package has a separate version lifecycle.
15
19
 
16
20
  The session is an execution interface. Project artifacts are the system of record.
17
21
 
22
+ ## Agent-native project actions
23
+
24
+ Translate ordinary user requests into durable project actions. Do not ask the
25
+ user to operate the CLI when the request and authority are already clear.
26
+
27
+ - "Split this large task and run it in parallel": initialize one project
28
+ definition before dispatch, then assign a distinct WorkItem to each Agent.
29
+ - "What is everyone doing?": read `project status`; do not reconstruct progress
30
+ from chat updates.
31
+ - "What is blocked or needs my decision?": report open decisions, unresolved
32
+ dependencies, critical work, and ready work from the projection.
33
+ - "I decided ...": append a decision resolution with rationale and evidence.
34
+ - "Hand this to another Agent": append the handoff, then a successor assignment;
35
+ never overwrite the old assignment.
36
+ - "Continue/take over": build `project takeover` for the current Agent and use
37
+ its bounded next action and evidence refs.
38
+ - "Capture this as data": append a data candidate only. Never call it a dataset
39
+ member without a separate admission decision.
40
+ - "Verify/finish": select No RunKit, Quick, or Formal from risk; bind a Formal
41
+ WorkItem to its actual execution and lease when applicable.
42
+
43
+ For a multi-Agent project, checkpoint meaningful state changes promptly. A
44
+ checkpoint is not a heartbeat and must not contain a guessed percentage.
45
+ Completion requires evidence. If an assignment binds an execution, derive its
46
+ state from the closeout and lease rather than trusting the Agent's claim.
47
+
48
+ ```bash
49
+ owlrunkit project init --workspace "$PROJECT_ROOT" --definition "$PROJECT_JSON"
50
+ owlrunkit project assign --workspace "$PROJECT_ROOT" --request "$EVENT_JSON"
51
+ owlrunkit project checkpoint --workspace "$PROJECT_ROOT" --request "$EVENT_JSON"
52
+ owlrunkit project status --workspace "$PROJECT_ROOT" --json
53
+ owlrunkit project takeover --workspace "$PROJECT_ROOT" --agent "$AGENT_ID" --json
54
+ ```
55
+
18
56
  ## Start safely
19
57
 
20
58
  1. Locate the project root and read its AGENTS.md chain.
@@ -131,10 +169,16 @@ The install manifest binds every Skill, Core, contract and attest file.
131
169
  Unknown installed drift fails closed instead of being overwritten. A changed
132
170
  process-wide Skill requires a registered complete fleet. Register each coverage
133
171
  root once with `owlrunkit fleet register-root --fleet-root <absolute-root>`.
134
- Ordinary installs then scan every registered root automatically. Repeated
172
+ Inspect and correct a broad or stale registry through the official
173
+ `fleet inspect-registry` and evidence-bound `fleet replace-registry` workflow;
174
+ never hand-edit the registry. Replacement is dry-runnable and append-only
175
+ receipts preserve the exact rollback preimage. Retired archives are evidence,
176
+ not active fleet writers. Ordinary installs use the registered active
177
+ membership automatically. Repeated
135
178
  `--fleet-root` or a frozen `--fleet-manifest` remain explicit one-off sources.
136
- RunKit skips control and dependency directories, freezes the discovered
137
- workspace list, and fails closed if a registered root is unreachable. It cannot
179
+ RunKit stops at each project boundary, reports damaged or incomplete markers by
180
+ exact path, freezes the discovered workspace list, and fails closed if a
181
+ registered root is unreachable. It cannot
138
182
  discover projects outside registered coverage and must not claim machine-wide
139
183
  safety. The installer validates every discovered project config and refuses the
140
184
  whole update before replacing the Skill or changing any project when one
@@ -193,7 +237,10 @@ Exact adoption requires the official npm registry `shasum`, `integrity` and
193
237
  tarball binding. A worktree, local tarball, `file:` dependency, Git source,
194
238
  workspace link or mutable tag is not formal adoption. Active or ambiguous work
195
239
  blocks migration before Config or Skill bytes change. Historical closed leases
196
- remain evidence but do not become active writers. Compatibility, onboarding,
240
+ use their trusted immutable closeout/Core semantics only when an accepted
241
+ closed execution exactly binds its released lease. Active, malformed,
242
+ hash-wrong, untrusted, or inconsistently released state still fails closed.
243
+ Compatibility, onboarding,
197
244
  rollback and recovery grant no Git, npm, release, deploy or foreign-write
198
245
  authority.
199
246
 
@@ -272,13 +319,24 @@ create a linked successor only when authority or write scope truly changes.
272
319
  Repeating the same `check` or `finish` command resumes exact create-only
273
320
  artifacts; a mismatch fails closed.
274
321
 
275
- Formal accepted evidence currently admits only the built-in Node syntax check:
276
- the exact `process.execPath`, `--check`, and an ordinary workspace file.
277
- Profile, package-manager, wrapper and custom commands are rejected before
278
- spawn because RunKit does not yet enforce a filesystem-write and network
279
- sandbox for them. Full controlled execution and legacy `verify` remain
280
- available, but their deny rules are not sandbox-equivalent and their receipts
281
- must not be silently promoted into this Formal accepted-evidence path.
322
+ Formal accepted evidence admits the built-in Node syntax check and real project
323
+ commands executed through a Verification Envelope:
324
+
325
+ ```bash
326
+ owlrunkit formal check \
327
+ --workspace "$PROJECT_ROOT" --run-id "$RUN_ID" \
328
+ --work-item "$WORK_ITEM_ID" --check-id "$CHECK_ID" \
329
+ --envelope "$VERIFICATION_ENVELOPE_JSON"
330
+ ```
331
+
332
+ The envelope must declare exact executable, argv, cwd, lockfiles, environment,
333
+ timeout, immutable source, declared output, disposable scratch, forbidden
334
+ paths, network mode, subprocess policy, and setup/check/teardown. RunKit must
335
+ actually enforce those constraints and verify cleanup. If the current platform
336
+ has no suitable backend, it must refuse Formal evidence instead of running the
337
+ command optimistically. The public 0.17 package provides the enforced macOS
338
+ backend; Linux remains fail-closed. Legacy `verify` may capture evidence but
339
+ must not be silently promoted into this Formal path.
282
340
 
283
341
  ## Freeze a dirty SourceCandidateV2
284
342
 
@@ -2,9 +2,9 @@
2
2
  "schemaVersion": "OwlCodaRunKitConfigV2",
3
3
  "core": {
4
4
  "contractVersion": "0.2",
5
- "coreVersion": "0.16.0",
6
- "coreManifestSha256": "sha256:320fb1d97b4459d1a14b0b67807dcf2bc6b03970492cb9fb2c6245b17912c81e",
7
- "coreSourceRef": "artifact:sha256:320fb1d97b4459d1a14b0b67807dcf2bc6b03970492cb9fb2c6245b17912c81e"
5
+ "coreVersion": "0.17.0",
6
+ "coreManifestSha256": "sha256:0c0c52e7f6299bdd3d3ea49005c8ceef0b28831d60af25d77da65a4e4de714c9",
7
+ "coreSourceRef": "artifact:sha256:0c0c52e7f6299bdd3d3ea49005c8ceef0b28831d60af25d77da65a4e4de714c9"
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.16.0",
3
+ "version": "0.17.0",
4
4
  "description": "Project-owned execution, evidence, verification, and recovery for coding agents.",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "author": "yeemio <owlclaw@163.com>",
@@ -36,6 +36,16 @@
36
36
  "sha256": "sha256:3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986"
37
37
  },
38
38
  "supportedProducerCoreIdentities": [
39
+ {
40
+ "contractVersion": "0.2",
41
+ "coreVersion": "0.17.0",
42
+ "coreManifestSha256": "sha256:0c0c52e7f6299bdd3d3ea49005c8ceef0b28831d60af25d77da65a4e4de714c9"
43
+ },
44
+ {
45
+ "contractVersion": "0.2",
46
+ "coreVersion": "0.16.1",
47
+ "coreManifestSha256": "sha256:38ac9110e328c38a81db05f1359734ca810b991c9f4de77647f9719f5e6af78b"
48
+ },
39
49
  {
40
50
  "contractVersion": "0.2",
41
51
  "coreVersion": "0.16.0",
@@ -18,6 +18,16 @@ import { captureWorkspaceSnapshot } from "./workspace-snapshot.mjs";
18
18
  export { validQuickReceiptShape } from "./quick-receipt-contract.mjs";
19
19
 
20
20
  export const SUPPORTED_QUICK_CORE_IDENTITIES = Object.freeze([
21
+ {
22
+ contractVersion: "0.2",
23
+ coreVersion: "0.17.0",
24
+ coreManifestSha256: "sha256:0c0c52e7f6299bdd3d3ea49005c8ceef0b28831d60af25d77da65a4e4de714c9",
25
+ },
26
+ {
27
+ contractVersion: "0.2",
28
+ coreVersion: "0.16.1",
29
+ coreManifestSha256: "sha256:38ac9110e328c38a81db05f1359734ca810b991c9f4de77647f9719f5e6af78b",
30
+ },
21
31
  {
22
32
  contractVersion: "0.2",
23
33
  coreVersion: "0.16.0",
@@ -2,7 +2,7 @@
2
2
  "schemaVersion": "OwlCodaRunKitRegistryReleasePolicyV1",
3
3
  "status": "release_candidate_unpublished",
4
4
  "packageName": "owlrunkit",
5
- "candidateVersion": "0.16.0",
5
+ "candidateVersion": "0.17.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.15.1",
27
- "shasum": "efdf9900019dd3b3cd776cde35fb3817d777ff09",
28
- "integrity": "sha512-39M+GWBIK5nT4B9blueOg/S839g/9YjSJ6IhVL3h99MdwbOvcLhQ0GvsWzKHeSjFyjCu1bdR0uZuyXXnev3sdA==",
29
- "tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.15.1.tgz"
26
+ "version": "0.16.1",
27
+ "shasum": "1bc119d24879bdd8959af16b364af55ca9d61ea9",
28
+ "integrity": "sha512-+DxKnADly7WIsGMiWDmo/rzG7XEsyqDtq7/1lUwqTf7aeekZJLw0qL5p7vm04YhgrTCd/rw9M0tUWihemYxyqQ==",
29
+ "tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.16.1.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.16.0",
6
- "documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.16.0",
5
+ "name": "owlrunkit-0.17.0",
6
+ "documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.17.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.16.0",
18
- "downloadLocation": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.16.0.tgz",
17
+ "versionInfo": "0.17.0",
18
+ "downloadLocation": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.17.0.tgz",
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.16.0"
27
+ "referenceLocator": "pkg:npm/owlrunkit@0.17.0"
28
28
  }
29
29
  ]
30
30
  }
@@ -14,7 +14,7 @@ import { fileURLToPath } from "node:url";
14
14
  import { parseProjectControlState } from "./project-control-parser.mjs";
15
15
 
16
16
  export const CONTRACT_VERSION = "0.2";
17
- export const CORE_VERSION = "0.16.0";
17
+ export const CORE_VERSION = "0.17.0";
18
18
  export const RUNTIME_ROOT = ".owlcoda/runkit";
19
19
 
20
20
  const CORE_FILES = [
@@ -65,7 +65,10 @@ const CORE_FILES = [
65
65
  "snapshot.mjs",
66
66
  "source-candidate.mjs",
67
67
  "source-fingerprint.mjs",
68
- "sync-core016-release-identity.mjs",
68
+ "sync-release-identity.mjs",
69
+ "team-project.mjs",
70
+ "verification-envelope.mjs",
71
+ "verification-envelope-check.mjs",
69
72
  "verification-receipt-gate.mjs",
70
73
  "verification-context.mjs",
71
74
  "verification-plan.mjs",
@@ -117,6 +120,10 @@ const CORE_FILES = [
117
120
  "schemas/visual-smoke-request-v1.schema.json",
118
121
  "schemas/visual-smoke-result-v1.schema.json",
119
122
  "schemas/verification-context-v1.schema.json",
123
+ "schemas/team-project-definition-v1.schema.json",
124
+ "schemas/team-project-event-v1.schema.json",
125
+ "schemas/team-project-status-v1.schema.json",
126
+ "schemas/verification-envelope-v1.schema.json",
120
127
  "schemas/verification-finalize-attempt-v1.schema.json",
121
128
  "schemas/verification-preflight-v1.schema.json",
122
129
  "schemas/verification-plan-v1.schema.json",
@@ -141,6 +148,9 @@ const CORE_FILES = [
141
148
  "templates/visual-smoke-request.json",
142
149
  "templates/verify-plan-request.json",
143
150
  "templates/worker-lease.json",
151
+ "templates/team-project-definition.json",
152
+ "templates/team-project-event.json",
153
+ "templates/verification-envelope.json",
144
154
  ];
145
155
 
146
156
  const CORE_DEPENDENCY_FILES = [