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.
Files changed (40) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +159 -52
  3. package/docs/architecture/OWLCODA_RUNKIT_0184_EXTERNAL_DELIVERY_INTAKE_PRODUCT_DECISION_20260812.md +209 -0
  4. package/docs/architecture/OWLCODA_RUNKIT_018_PROJECT_DRIVER_PRODUCT_DEFINITION.md +16 -5
  5. package/docs/architecture/OWLCODA_RUNKIT_USAGE_MODE_SELECTION_PRODUCT_DECISION_20260811.md +54 -3
  6. package/docs/architecture/OWLCODA_RUN_KIT_CONTRACT_V0_2.md +7 -0
  7. package/integrations/codex/skills/owlcoda-runkit/SKILL.md +125 -74
  8. package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
  9. package/integrations/codex/skills/owlcoda-runkit/references/contract-v0.1.md +160 -0
  10. package/integrations/codex/skills/owlcoda-runkit/references/contract-v0.2.md +545 -0
  11. package/package.json +1 -1
  12. package/packages/attest/README.md +4 -3
  13. package/packages/attest/consumer-surface-v1.json +1 -0
  14. package/packages/attest/distribution-manifest-v1.json +12 -1
  15. package/packages/attest/schemas/quick-verification-receipt-v2.schema.json +232 -0
  16. package/packages/attest/src/index.mjs +4 -1
  17. package/packages/attest/src/quick-receipt-contract.mjs +16 -6
  18. package/packages/attest/src/quick.mjs +21 -2
  19. package/packages/attest/src/workspace-snapshot.mjs +10 -1
  20. package/registry-release-policy-v1.json +5 -5
  21. package/sbom.spdx.json +5 -5
  22. package/scripts/runkit-contract/assurance-router.mjs +25 -6
  23. package/scripts/runkit-contract/core-contract.mjs +10 -1
  24. package/scripts/runkit-contract/onboarding-doctor.mjs +1 -1
  25. package/scripts/runkit-contract/profile-onboarding.mjs +263 -15
  26. package/scripts/runkit-contract/project-cli-resolver.mjs +6 -0
  27. package/scripts/runkit-contract/project-external-delivery.mjs +707 -0
  28. package/scripts/runkit-contract/quick-metrics.mjs +3 -3
  29. package/scripts/runkit-contract/quick-receipt.mjs +79 -12
  30. package/scripts/runkit-contract/quick-verify.mjs +89 -12
  31. package/scripts/runkit-contract/runkit-bootstrap.mjs +6 -1
  32. package/scripts/runkit-contract/runkit-cli.mjs +363 -143
  33. package/scripts/runkit-contract/schemas/assurance-route-v2.schema.json +26 -0
  34. package/scripts/runkit-contract/schemas/profile-detection-v3.schema.json +170 -0
  35. package/scripts/runkit-contract/schemas/team-project-event-v2.schema.json +128 -0
  36. package/scripts/runkit-contract/schemas/team-project-event-v3.schema.json +146 -0
  37. package/scripts/runkit-contract/schemas/team-project-status-v2.schema.json +85 -0
  38. package/scripts/runkit-contract/schemas/usage-mode-recommendation-v2.schema.json +136 -0
  39. package/scripts/runkit-contract/team-project.mjs +782 -55
  40. package/scripts/runkit-contract/usage-mode.mjs +28 -7
@@ -34,11 +34,13 @@ The ordinary user-facing flow is a typed direct CLI surface:
34
34
  3. `project checkpoint` records meaningful state and evidence.
35
35
  4. `project handoff` transfers a responsibility without overwriting its
36
36
  history.
37
- 5. `project decision` opens or resolves a decision with rationale and evidence.
38
- 6. `project integrate` records an integration-gate result with evidence.
39
- 7. `project status` projects the current team state.
40
- 8. `project takeover` builds the next bounded action for a successor Agent.
41
- 9. After the project derives `overall=completed`, `project successor`
37
+ 5. `project reject-and-return` preserves a current failed checkpoint and opens
38
+ one evidence-linked rework assignment atomically.
39
+ 6. `project decision` opens or resolves a decision with rationale and evidence.
40
+ 7. `project integrate` records an integration-gate result with evidence.
41
+ 8. `project status` projects the current team state.
42
+ 9. `project takeover` builds the next bounded action for a successor Agent.
43
+ 10. After the project derives `overall=completed`, `project successor`
42
44
  archives it and installs one fresh project under explicit Owner invocation.
43
45
 
44
46
  Except for the one definition supplied to `init`, normal users provide typed
@@ -65,6 +67,11 @@ checkpoint.
65
67
  ## Continuity actions
66
68
 
67
69
  A handoff preserves the outgoing assignment and records the successor action.
70
+ A reject-and-return event binds the current failed checkpoint, failed
71
+ assignment, reviewer, evidence, target Agent, and new rework assignment in one
72
+ append-only write. The failed event stays terminal and immutable; the WorkItem
73
+ continues from a new derived active rework attempt. It cannot target completed,
74
+ active, implicit execution-only failure, or historical failure state.
68
75
  A decision separates the open question from its later resolution, rationale,
69
76
  and evidence. An integration event records that the project gate was reached;
70
77
  it is not a Git merge, release, deployment, or publication operation. Status and
@@ -132,6 +139,10 @@ untrusted control state. Normal project coordination retains
132
139
  `authorizationGranted=false` unless a separately authorized boundary says
133
140
  otherwise.
134
141
 
142
+ The new atomic rework record uses `OwlCodaRunKitTeamProjectEventV2`; existing
143
+ Event V1 bytes and meanings are unchanged and remain readable. This avoids
144
+ silently adding a new event meaning to the versioned V1 contract.
145
+
135
146
  ## Assurance boundary
136
147
 
137
148
  Multiple Agents coordinating a project do not make project coordination Formal
@@ -1,6 +1,6 @@
1
1
  # OwlCoda RunKit 使用模式选择:Sierac MES Dogfood 产品决议
2
2
 
3
- 状态:**0.18.1 已发布;本文主体保留发布前产品决议,文末追加 0.18.2 dogfood 补丁候选**
3
+ 状态:**0.18.3 已发布;本文主体保留既有产品决议,0.18.4 外部候选纳管决议另见同日架构文档**
4
4
  日期:2026-08-11
5
5
 
6
6
  ## 已验证现场事实
@@ -162,5 +162,56 @@ RunKit contract/package gate、Core 身份同步、pack 内容检查和安装 sm
162
162
  - profile 纯格式规范化计划显式返回 `normalizationOnly: true`;
163
163
  - package README 与五模式、profile reconcile 的已实现真值一致。
164
164
 
165
- 当前这些内容只是本地 `owlrunkit@0.18.2` 候选。它不代表 commit、tag、npm 发布、
166
- 全局 Skill 更新、OwlChen/OwlFootball 迁移或任何业务授权已经发生。
165
+ 上述 0.18.2 内容已经发布;准确 Git/npm 身份以 `docs/PRODUCT-TRUTH.md` 和独立发布
166
+ 回执为准。发布本身没有更新全局 Skill、迁移外部项目或授予业务权限。
167
+
168
+ ## 0.18.3 Sierac recovery dogfood 修复(已发布)
169
+
170
+ ### 新增现场事实
171
+
172
+ Sierac MES 三轮 0.18.2 实测继续支持“普通小任务少用、跨窗口使用 Project Driver、
173
+ 高价值状态转换使用 Quick”的模式决议。冷启动 takeover 约 0.4 秒恢复了当前 truth,
174
+ 并正确识别陈旧 handoff;一次 W1.8 回滚与 W1.9 恢复在串行读回后留下 GO Quick
175
+ attestation,且没有扩大到 Formal、生产、Git 或业务验收。
176
+
177
+ 同一轮暴露了五个可复现的 Quick 产品缺口:
178
+
179
+ - 为把远端脚本精确交给 SSH,操作者只能把 base64 放进 argv;单个参数达到
180
+ 14,469 bytes,整条 argv 约 14,539 bytes,receipt 为 79,591 bytes。
181
+ - 顶层摘要只保留最后三行,无法同时展示前半段 W1.8 回滚与后半段 W1.9 恢复。
182
+ - 项目现存 13/13 Quick 都携带固定 `quick_ignored_artifact_unbound`,没有可行动差异。
183
+ - 日常 Quick 仍需第二次调用 `quick-attest`。
184
+ - `quick-metrics --help` 返回通用 invalid-input,默认结果无条件展开全部 receipt 路径。
185
+
186
+ ### 本轮实现
187
+
188
+ - `quick-verify --stdin-file <file>` 将最多 1 MiB 的 regular non-symlink 输入复制到
189
+ receipt store,以路径、大小和 SHA-256 生成 `OwlCodaQuickVerificationReceiptV2`,
190
+ 再把已保存字节作为 exact stdin;脚本内容不进入 argv 或 receipt JSON。
191
+ - `outputSummary` 同时返回有界 head 与 tail,完整 stdout/stderr 仍是唯一证据材料。
192
+ - 新 Quick 不再生成固定 ignored-artifact issue;历史 receipt 仍严格可读,但 attest
193
+ 不再把该推测性代码作为问题输出。未声明 ignored output 仍不属于 Quick 证明范围。
194
+ - `quick-verify --attest` 在一个高层调用中返回独立 attestation 对象,不把 Quick
195
+ 提升为 Formal。
196
+ - `quick-metrics --local` 默认只返回聚合;`--verbose` 才返回 receipt 路径,并新增
197
+ action-specific help。
198
+ - 后续真实候选复核证明 RunKit 能保存“测试全绿但版本合同错误”的 rejection、Quick
199
+ receipt、源码未变事实和重新责任人。`project reject-and-return` 因此作为同一
200
+ 0.18.3 候选的原子 Project Driver 动作:只接受当前显式 failed checkpoint,保留
201
+ 失败事件,记录 reviewer/reason/evidence,并创建新的 rework assignment。新记录使用
202
+ Event V2,不改写 Event V1 合同。
203
+ - standalone npm 构建把 Contract v0.1/v0.2 的权威字节复制到 Skill 自身的
204
+ `references/`,使发布包内相对链接和之后的 managed Skill 安装保持一致。
205
+
206
+ ### 后续缺口
207
+
208
+ `project takeover` stale-handoff 与外部候选 delta 已进入未发布的 0.18.4 源码候选;
209
+ recovery evidence 的 `captured_before` / `restores_to` 语义字段仍未实现。Project Driver 自动 ID、时间戳、
210
+ 单项完成与 integrate 合并,以及路径范围指纹仍保留在既有 backlog。
211
+
212
+ ### 不能声称
213
+
214
+ `0.18.3` 已在后续独立发布 Gate 中完成 commit、tag、npm publication 与 registry
215
+ consumer smoke;安装、项目 adoption、共享 Skill 激活和业务结果仍是不同事实。
216
+ `0.18.4` 的 controller/target 分离与外部 DeliveryPacket 纳管边界见
217
+ `OWLCODA_RUNKIT_0184_EXTERNAL_DELIVERY_INTAKE_PRODUCT_DECISION_20260812.md`;该版本当前仍只是源码候选。
@@ -471,6 +471,13 @@ project-owned receipt store and performs no telemetry or network access. A
471
471
  Quick `GO` remains `captured_verification`; it cannot satisfy the Formal
472
472
  Contract v0.2 acceptance gate.
473
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
+
474
481
  Deterministic `repair` persists a reviewable plan before replay, reuses only
475
482
  fresh receipt-bound coverage, replays pending exact argv, and appends
476
483
  replacement lineage. Failed and orphaned attempts remain inspectable. Repair
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  name: owlcoda-runkit
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, record intentionally deferred verification without repeating covered tests, 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.
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, atomically return failed work for evidence-linked rework, import an external DeliveryPacket from a frozen target worktree, record intentionally deferred verification without repeating covered tests, 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
- Bundled release: standalone `owlrunkit@0.18.2`, bundling Contract `0.2` and
11
- Core `0.18.2` with manifest
12
- `sha256:abe17ff794b4019d8d476f09eb5d4105bae1070b1df0aab53e6c94c7ec8b65a6`.
13
- The published `owlrunkit@0.18.1` package is the trusted prior for rollback;
10
+ Bundled release: standalone `owlrunkit@0.18.4`, bundling Contract `0.2` and
11
+ Core `0.18.4` with manifest
12
+ `sha256:372d4c247e4b40b0fd2f3fe0f5bf928548095bfb7e2e92e9ac66790e2717f77d`.
13
+ The published `owlrunkit@0.18.3` package is the trusted prior for rollback;
14
14
  verify exact official npm registry provenance before adoption. The immutable
15
15
  rollback baseline for the prior release is `owlrunkit@0.16.1` with SHA-1
16
16
  `1bc119d24879bdd8959af16b364af55ca9d61ea9` and canonical npm tarball URL
@@ -24,8 +24,11 @@ The session is an execution interface. Project artifacts are the system of recor
24
24
  Translate ordinary user requests into durable typed project actions. Do not ask
25
25
  the user to operate the CLI when the request and authority are already clear.
26
26
 
27
- The normal mainline is `init`, `assign`, `checkpoint`, `handoff`, `decision`,
28
- `verification`, `integrate`, `status`, and `takeover`. After a project
27
+ The normal mainline is `init`, `assign`, `checkpoint`, `handoff`,
28
+ `reject-and-return`, `decision`, `verification`, `integrate`, `status`, and
29
+ `takeover`. External source lanes use `target-snapshot` and `import-delivery`
30
+ without installing RunKit or writing control artifacts into the frozen target.
31
+ After a project
29
32
  derives completed, `successor` is the bounded lifecycle step. `init` accepts one project definition
30
33
  JSON; subsequent actions use direct typed flags. Normal users do not author
31
34
  request, event, receipt, or hash JSON. The legacy `--request <event.json>` form
@@ -40,8 +43,17 @@ remains available for existing automation and compatibility.
40
43
  - "I decided ...": append a decision resolution with rationale and evidence.
41
44
  - "Hand this to another Agent": append the handoff, then a successor assignment;
42
45
  never overwrite the old assignment.
46
+ - "Reject this failed candidate and return it": use one `project
47
+ reject-and-return` event. Preserve the failed checkpoint, bind the review
48
+ evidence, create the rework assignment, and never rewrite failure as active.
43
49
  - "Continue/take over": build `project takeover` for the current Agent and use
44
- its bounded next action and evidence refs.
50
+ its bounded next action and evidence refs. Report stale handoffs as obsolete,
51
+ and use the projected current external candidate plus its predecessor delta
52
+ instead of reconstructing source identity from chat.
53
+ - "Import Luna/Cursor delivery": capture the target entry before source work
54
+ when possible, then verify and import its exact DeliveryPacket. Without the
55
+ entry snapshot, report `candidate_only`; never claim an entry-to-candidate
56
+ overlay proof that was not captured.
45
57
  - "Start the next project": only after status derives `overall=completed`,
46
58
  invoke `project successor` with a different V1 definition and explicit
47
59
  transition ID. Preserve the content-addressed archive and journal; never
@@ -66,35 +78,53 @@ Completion requires evidence. If an assignment binds an execution, derive its
66
78
  state from the closeout and lease rather than trusting the Agent's claim.
67
79
 
68
80
  ```bash
69
- owlrunkit project init --workspace "$PROJECT_ROOT" --definition "$PROJECT_JSON"
70
- owlrunkit project assign --workspace "$PROJECT_ROOT" --assignment-id "$ASSIGNMENT_ID" \
81
+ npx --no-install owlrunkit project init --workspace "$PROJECT_ROOT" --definition "$PROJECT_JSON"
82
+ npx --no-install owlrunkit project assign --workspace "$PROJECT_ROOT" --assignment-id "$ASSIGNMENT_ID" \
71
83
  --at "$OCCURRED_AT" --work-item "$WORK_ITEM_ID" --agent "$AGENT_ID"
72
- owlrunkit project checkpoint --workspace "$PROJECT_ROOT" --checkpoint-id "$CHECKPOINT_ID" \
84
+ npx --no-install owlrunkit project checkpoint --workspace "$PROJECT_ROOT" --checkpoint-id "$CHECKPOINT_ID" \
73
85
  --at "$OCCURRED_AT" --assignment-id "$ASSIGNMENT_ID" --work-item "$WORK_ITEM_ID" \
74
86
  --state active --summary "$SUMMARY" --next "$NEXT_ACTION"
75
- owlrunkit project handoff --workspace "$PROJECT_ROOT" --handoff-id "$HANDOFF_ID" \
87
+ npx --no-install owlrunkit project handoff --workspace "$PROJECT_ROOT" --handoff-id "$HANDOFF_ID" \
76
88
  --at "$OCCURRED_AT" --assignment-id "$ASSIGNMENT_ID" --work-item "$WORK_ITEM_ID" \
77
89
  --from-agent "$AGENT_ID" --to-agent "$SUCCESSOR_AGENT_ID" \
78
90
  --summary "$SUMMARY" --next "$NEXT_ACTION" --evidence "$EVIDENCE_REF"
79
- owlrunkit project decision --workspace "$PROJECT_ROOT" --resolve \
91
+ npx --no-install owlrunkit project reject-and-return --workspace "$PROJECT_ROOT" \
92
+ --rework-id "$REWORK_ID" --at "$OCCURRED_AT" --work-item "$WORK_ITEM_ID" \
93
+ --reviewer-agent "$REVIEWER_AGENT_ID" --to-agent "$AGENT_ID" \
94
+ --reason "$REJECTION_REASON" --next "$NEXT_ACTION" --evidence "$EVIDENCE_REF"
95
+ npx --no-install owlrunkit project decision --workspace "$PROJECT_ROOT" --resolve \
80
96
  --decision-id "$DECISION_ID" --at "$OCCURRED_AT" --resolution "$RESOLUTION" \
81
97
  --rationale "$RATIONALE" --evidence "$EVIDENCE_REF"
82
- owlrunkit project verification --workspace "$PROJECT_ROOT" --defer \
98
+ npx --no-install owlrunkit project verification --workspace "$PROJECT_ROOT" --defer \
83
99
  --verification-id "$VERIFICATION_ID" --at "$OCCURRED_AT" \
84
100
  --work-item "$WORK_ITEM_ID" --owner-agent "$AGENT_ID" \
85
101
  --check "$CHECK_ID" --reason "$REASON" --due-gate "$GATE_ID"
86
- owlrunkit project verification --workspace "$PROJECT_ROOT" --close \
102
+ npx --no-install owlrunkit project verification --workspace "$PROJECT_ROOT" --close \
87
103
  --verification-id "$VERIFICATION_ID" --at "$OCCURRED_AT" \
88
104
  --disposition verified --summary "$SUMMARY" --evidence "$EVIDENCE_REF"
89
- owlrunkit project integrate --workspace "$PROJECT_ROOT" --gate "$GATE_ID" \
105
+ npx --no-install owlrunkit project integrate --workspace "$PROJECT_ROOT" --gate "$GATE_ID" \
90
106
  --at "$OCCURRED_AT" --summary "$SUMMARY" --evidence "$EVIDENCE_REF"
91
- owlrunkit project status --workspace "$PROJECT_ROOT" --json
92
- owlrunkit project takeover --workspace "$PROJECT_ROOT" --agent "$AGENT_ID" --json
93
- owlrunkit project successor --workspace "$PROJECT_ROOT" \
107
+ npx --no-install owlrunkit project status --workspace "$PROJECT_ROOT" --json
108
+ npx --no-install owlrunkit project takeover --workspace "$PROJECT_ROOT" --agent "$AGENT_ID" --json
109
+ npx --no-install owlrunkit project successor --workspace "$PROJECT_ROOT" \
94
110
  --transition-id "$TRANSITION_ID" --at "$OCCURRED_AT" \
95
111
  --definition "$NEXT_PROJECT_JSON" --reason "$SUCCESSOR_REASON" --json
112
+ npx --no-install owlrunkit project target-snapshot --workspace "$PROJECT_ROOT" \
113
+ --snapshot-id "$ENTRY_SNAPSHOT_ID" --at "$OCCURRED_AT" \
114
+ --work-item "$WORK_ITEM_ID" --target-workspace "$TARGET_WORKTREE" --apply
115
+ npx --no-install owlrunkit project import-delivery --workspace "$PROJECT_ROOT" \
116
+ --delivery-id "$DELIVERY_ID" --at "$OCCURRED_AT" \
117
+ --assignment-id "$ASSIGNMENT_ID" --work-item "$WORK_ITEM_ID" \
118
+ --producer "$AGENT_ID" --target-workspace "$TARGET_WORKTREE" \
119
+ --packet "$DELIVERY_PACKET" --entry-snapshot "$ENTRY_SNAPSHOT_ID" --apply
96
120
  ```
97
121
 
122
+ Controller and target must be disjoint real directories, and the target must
123
+ be its exact Git worktree root. Import rechecks packet bytes and stable target
124
+ identity, including both sides of renames. Do not use legacy raw project event
125
+ requests to represent an external delivery; Event V3 is admitted only through
126
+ `project import-delivery`.
127
+
98
128
  `project successor` accepts only a derived-completed active project and a
99
129
  different fresh V1 identity. It archives the exact prior bytes, never borrows
100
130
  old events, and resumes only an identical durable transition. Treat symlinks,
@@ -141,11 +171,16 @@ Git, release, deployment, or production action.
141
171
  4. Never include `.owlcoda/runkit/**` in delivery changed files, profile rules or lease owned paths.
142
172
  5. Read [references/contract-v0.2.md](references/contract-v0.2.md) for new executions and accepted closeouts. Read [references/contract-v0.1.md](references/contract-v0.1.md) only when interpreting historical v0.1 artifacts.
143
173
 
144
- Use the `owlrunkit` command for normal work. Its bootstrap resolves the
174
+ Use `npx --no-install owlrunkit` for every command after the exact project
175
+ dependency is installed. A bare `owlrunkit` may resolve an older global binary
176
+ that cannot trust a newer project Core, so do not use it for project status,
177
+ verification, or Project Driver actions. The package bootstrap resolves the
145
178
  project's exact locally bound OwlRunKit CLI before interpreting project control
146
- state. The currently installed package handles bootstrap-only operations such
179
+ state. A current package may still be used for bootstrap-only operations such
147
180
  as initialization, exact adoption and Core-successor migration. Do not bypass
148
- that resolver with a global CLI or a copied Skill Core. Project-local
181
+ the project-local entry with a global CLI or a copied/shared Skill Core. If a
182
+ process-level Skill declares an older release, use this installed package Skill
183
+ and report the activation drift; do not silently apply the old rules. Project-local
149
184
  delegation requires the canonical official npm tarball URL and SHA-512 SRI,
150
185
  an installed Core identity trusted by the current bootstrap, and the same Core
151
186
  identity in project Config; any mismatch fails closed.
@@ -155,9 +190,9 @@ below has no CLI entry.
155
190
  ## Initialize and inspect
156
191
 
157
192
  ```bash
158
- owlrunkit init --workspace "$PROJECT_ROOT"
159
- owlrunkit inspect --json --workspace "$PROJECT_ROOT"
160
- owlrunkit status --workspace "$PROJECT_ROOT"
193
+ npx --no-install owlrunkit init --workspace "$PROJECT_ROOT"
194
+ npx --no-install owlrunkit inspect --json --workspace "$PROJECT_ROOT"
195
+ npx --no-install owlrunkit status --workspace "$PROJECT_ROOT"
161
196
  ```
162
197
 
163
198
  Initialization may write only `.owlcoda/runkit/`. It must not modify business source.
@@ -196,29 +231,41 @@ repair surfaces. OwlRunKit uses its own version lifecycle: the standalone
196
231
  For one low-risk exact command, use the Core v0.13 Quick path:
197
232
 
198
233
  ```bash
199
- owlrunkit quick-verify \
234
+ npx --no-install owlrunkit quick-verify \
200
235
  --workspace "$PROJECT_ROOT" -- "$ABSOLUTE_EXECUTABLE" "arg-one"
201
236
 
202
- owlrunkit quick-attest \
237
+ npx --no-install owlrunkit quick-verify \
238
+ --workspace "$PROJECT_ROOT" --stdin-file "$SCRIPT_FILE" --attest \
239
+ -- ssh test-host /bin/sh
240
+
241
+ npx --no-install owlrunkit quick-attest \
203
242
  --workspace "$PROJECT_ROOT" --receipt "$QUICK_RECEIPT"
204
243
 
205
- owlrunkit quick-metrics \
206
- --workspace "$PROJECT_ROOT" --local
244
+ npx --no-install owlrunkit quick-metrics \
245
+ --workspace "$PROJECT_ROOT"
246
+
247
+ npx --no-install owlrunkit quick-metrics \
248
+ --workspace "$PROJECT_ROOT" --verbose
207
249
  ```
208
250
 
209
- Quick receipts are `captured_verification`, not Formal acceptance. Metrics are
210
- local-only and perform no telemetry or network request.
251
+ `--stdin-file` copies and SHA-256-binds at most 1 MiB of regular non-symlink
252
+ input before supplying the stored bytes as exact stdin. `--attest` returns the
253
+ separate attestation object in the same high-level invocation. Quick receipts
254
+ remain `captured_verification`, not Formal acceptance. Metrics are aggregate by
255
+ default; `--verbose` adds receipt paths. Metrics are always local-only and
256
+ perform no telemetry or network request; the former `--local` flag remains an
257
+ accepted compatibility no-op.
211
258
 
212
259
  Core v0.13 also adds deterministic repair and exact-byte offline transport:
213
260
 
214
261
  ```bash
215
- owlrunkit repair \
262
+ npx --no-install owlrunkit repair \
216
263
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID"
217
264
 
218
- owlrunkit offline-export \
265
+ npx --no-install owlrunkit offline-export \
219
266
  --workspace "$PROJECT_ROOT" --receipt "$RECEIPT" --output "$BUNDLE"
220
267
 
221
- owlrunkit offline-import \
268
+ npx --no-install owlrunkit offline-import \
222
269
  --workspace "$PROJECT_ROOT" --bundle "$BUNDLE" --store "$OFFLINE_STORE"
223
270
  ```
224
271
 
@@ -253,7 +300,7 @@ loaded into the current session and grants no update authority.
253
300
  The install manifest binds every Skill, Core, contract and attest file.
254
301
  Unknown installed drift fails closed instead of being overwritten. A changed
255
302
  process-wide Skill requires a registered complete fleet. Register each coverage
256
- root once with `owlrunkit fleet register-root --fleet-root <absolute-root>`.
303
+ root once with `npx --no-install owlrunkit fleet register-root --fleet-root <absolute-root>`.
257
304
  Inspect and correct a broad or stale registry through the official
258
305
  `fleet inspect-registry` and evidence-bound `fleet replace-registry` workflow;
259
306
  never hand-edit the registry. Replacement is dry-runnable and append-only
@@ -311,11 +358,11 @@ made inactive 0.13/0.14 ConfigV2 upgrades and exact rollback safe. Historical
311
358
  projects, profiles, executions, packets, receipts and closeouts remain readable.
312
359
 
313
360
  ```bash
314
- owlrunkit doctor --workspace "$PROJECT_ROOT"
315
- owlrunkit profiles detect --workspace "$PROJECT_ROOT" --dry-run
316
- owlrunkit profiles validate --workspace "$PROJECT_ROOT"
317
- owlrunkit profiles impact --workspace "$PROJECT_ROOT" --changed path/to/file
318
- owlrunkit adopt --workspace "$PROJECT_ROOT" --exact owlrunkit@0.15.1
361
+ npx --no-install owlrunkit doctor --workspace "$PROJECT_ROOT"
362
+ npx --no-install owlrunkit profiles detect --workspace "$PROJECT_ROOT" --dry-run
363
+ npx --no-install owlrunkit profiles validate --workspace "$PROJECT_ROOT"
364
+ npx --no-install owlrunkit profiles impact --workspace "$PROJECT_ROOT" --changed path/to/file
365
+ npx --no-install owlrunkit adopt --workspace "$PROJECT_ROOT" --exact owlrunkit@0.15.1
319
366
  ```
320
367
 
321
368
  Exact adoption requires the official npm registry `shasum`, `integrity` and
@@ -334,15 +381,15 @@ authority.
334
381
  Core 0.16 makes the safe path the ordinary path without weakening its gates:
335
382
 
336
383
  ```bash
337
- owlrunkit fleet register-root --fleet-root /absolute/declared-projects
338
- owlrunkit fleet discover
339
- owlrunkit profiles detect --workspace "$PROJECT_ROOT" --dry-run
340
- owlrunkit profiles detect --workspace "$PROJECT_ROOT" --apply
341
- owlrunkit profiles reconcile --workspace "$PROJECT_ROOT" --dry-run
342
- owlrunkit mode recommend --workspace "$PROJECT_ROOT"
343
- owlrunkit assurance route --workspace "$PROJECT_ROOT" \
384
+ npx --no-install owlrunkit fleet register-root --fleet-root /absolute/declared-projects
385
+ npx --no-install owlrunkit fleet discover
386
+ npx --no-install owlrunkit profiles detect --workspace "$PROJECT_ROOT" --dry-run
387
+ npx --no-install owlrunkit profiles detect --workspace "$PROJECT_ROOT" --apply
388
+ npx --no-install owlrunkit profiles reconcile --workspace "$PROJECT_ROOT" --dry-run
389
+ npx --no-install owlrunkit mode recommend --workspace "$PROJECT_ROOT"
390
+ npx --no-install owlrunkit assurance route --workspace "$PROJECT_ROOT" \
344
391
  --request "$ASSURANCE_REQUEST_JSON"
345
- owlrunkit status --workspace "$PROJECT_ROOT"
392
+ npx --no-install owlrunkit status --workspace "$PROJECT_ROOT"
346
393
  ```
347
394
 
348
395
  Fleet discovery is complete only within all registered coverage roots, an
@@ -353,14 +400,18 @@ adopts only unambiguous high-confidence, project-local regular-file launchers;
353
400
  `profiles reconcile` previews or atomically updates an existing profile set
354
401
  with a rollback receipt. Low-confidence candidates remain untouched. Lock-bound npm and exact
355
402
  project-installed pnpm, Yarn, and Bun launchers are supported; PATH-only
356
- package managers remain review-required. `assurance route`
403
+ package managers remain review-required. A V2 dry-run reports
404
+ `profiles_insufficient` when real Git-visible source paths remain uncovered or
405
+ there is no actionable primary. Use its `minimalSuggestedProfile` and copyable
406
+ `repairCommands`; do not invent absent conventional directories as blockers.
407
+ `assurance route`
357
408
  deterministically selects No RunKit, Quick Verification or Formal Delivery
358
409
  from explicit risk facts and fails closed to Formal when required facts are
359
410
  missing.
360
411
 
361
412
  ## Choose continuity and assurance independently
362
413
 
363
- Start with `owlrunkit mode recommend --workspace "$PROJECT_ROOT"`. The five
414
+ Start with `npx --no-install owlrunkit mode recommend --workspace "$PROJECT_ROOT"`. The five
364
415
  user-facing modes are presets over two independent dimensions:
365
416
 
366
417
  - continuity: `none | project_driver`
@@ -400,17 +451,17 @@ incremental checks, then finish once:
400
451
  ```bash
401
452
  NODE_BIN="$(node -p 'process.execPath')"
402
453
 
403
- owlrunkit formal start \
454
+ npx --no-install owlrunkit formal start \
404
455
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID" --goal "$GOAL_JSON" \
405
456
  --work-item "$WORK_ITEM_ID" \
406
457
  --owned-path "src/exact-file.ts" --owned-path "tests/feature/**"
407
458
 
408
- owlrunkit formal check \
459
+ npx --no-install owlrunkit formal check \
409
460
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID" \
410
461
  --from-lease "$WORK_ITEM_ID" --check-id "$CHECK_ID" \
411
462
  --cwd "." -- "$NODE_BIN" --check "src/exact-file.ts"
412
463
 
413
- owlrunkit formal finish \
464
+ npx --no-install owlrunkit formal finish \
414
465
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID" --decision accepted
415
466
  ```
416
467
 
@@ -427,7 +478,7 @@ Formal accepted evidence admits the built-in Node syntax check and real project
427
478
  commands executed through a Verification Envelope:
428
479
 
429
480
  ```bash
430
- owlrunkit formal check \
481
+ npx --no-install owlrunkit formal check \
431
482
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID" \
432
483
  --work-item "$WORK_ITEM_ID" --check-id "$CHECK_ID" \
433
484
  --envelope "$VERIFICATION_ENVELOPE_JSON"
@@ -448,12 +499,12 @@ Freeze, verify and materialize an immutable candidate without requiring a Git
448
499
  commit:
449
500
 
450
501
  ```bash
451
- owlrunkit candidate freeze --workspace "$PROJECT_ROOT" \
502
+ npx --no-install owlrunkit candidate freeze --workspace "$PROJECT_ROOT" \
452
503
  --run-id "$RUN_ID" --from-lease "$WORK_ITEM_ID" \
453
504
  --candidate-id "$CANDIDATE_ID"
454
- owlrunkit candidate verify --workspace "$PROJECT_ROOT" \
505
+ npx --no-install owlrunkit candidate verify --workspace "$PROJECT_ROOT" \
455
506
  --candidate "$SOURCE_CANDIDATE"
456
- owlrunkit candidate materialize --workspace "$PROJECT_ROOT" \
507
+ npx --no-install owlrunkit candidate materialize --workspace "$PROJECT_ROOT" \
457
508
  --candidate "$SOURCE_CANDIDATE" \
458
509
  --target-workspace "$CLEAN_WORKSPACE"
459
510
  ```
@@ -471,10 +522,10 @@ authority.
471
522
  Use a frozen SourceCandidateV2 and the registered fleet boundary:
472
523
 
473
524
  ```bash
474
- owlrunkit core-successor plan --workspace "$PROJECT_ROOT" \
525
+ npx --no-install owlrunkit core-successor plan --workspace "$PROJECT_ROOT" \
475
526
  --plan-id "$PLAN_ID" --run-id "$RUN_ID" \
476
527
  --from-lease "$WORK_ITEM_ID" --candidate-id "$CANDIDATE_ID"
477
- owlrunkit core-successor apply --workspace "$PROJECT_ROOT" \
528
+ npx --no-install owlrunkit core-successor apply --workspace "$PROJECT_ROOT" \
478
529
  --plan "$SUCCESSOR_PLAN" --owner-authority "$OWNER_AUTHORITY" \
479
530
  --receipt-id "$RECEIPT_ID"
480
531
  ```
@@ -491,11 +542,11 @@ execute. No execution result is silently inherited.
491
542
  Separate build acceptance from permission to mutate a machine:
492
543
 
493
544
  ```bash
494
- owlrunkit deployment prepare --workspace "$PROJECT_ROOT" \
545
+ npx --no-install owlrunkit deployment prepare --workspace "$PROJECT_ROOT" \
495
546
  --run-id "$PREPARE_RUN_ID" --artifact "$ARTIFACT" \
496
547
  --owner-decision "$OWNER_DECISION" \
497
548
  --media-type application/gzip --output "$PREPARE_RECEIPT"
498
- owlrunkit deployment execute --workspace "$PROJECT_ROOT" \
549
+ npx --no-install owlrunkit deployment execute --workspace "$PROJECT_ROOT" \
499
550
  --prepare "$PREPARE_RECEIPT" \
500
551
  --owner-decision "$OWNER_DECISION" \
501
552
  --owner-authority "$OWNER_AUTHORITY" \
@@ -548,7 +599,7 @@ and protocol contract, not an out-of-the-box privileged VM deployment.
548
599
  Acquire one bounded writer lease with repeated explicit paths:
549
600
 
550
601
  ```bash
551
- owlrunkit lease acquire \
602
+ npx --no-install owlrunkit lease acquire \
552
603
  --workspace "$PROJECT_ROOT" \
553
604
  --run-id "$RUN_ID" \
554
605
  --work-item "$WORK_ITEM_ID" \
@@ -559,10 +610,10 @@ owlrunkit lease acquire \
559
610
  Inspect or release it through the Core instead of editing lease JSON:
560
611
 
561
612
  ```bash
562
- owlrunkit lease inspect \
613
+ npx --no-install owlrunkit lease inspect \
563
614
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID"
564
615
 
565
- owlrunkit lease release \
616
+ npx --no-install owlrunkit lease release \
566
617
  --workspace "$PROJECT_ROOT" --run-id "$RUN_ID" \
567
618
  --work-item "$WORK_ITEM_ID"
568
619
  ```
@@ -570,7 +621,7 @@ owlrunkit lease release \
570
621
  After implementation, derive the bounded DeliveryPacket from the active lease:
571
622
 
572
623
  ```bash
573
- owlrunkit delivery create \
624
+ npx --no-install owlrunkit delivery create \
574
625
  --workspace "$PROJECT_ROOT" \
575
626
  --run-id "$RUN_ID" \
576
627
  --from-lease "$WORK_ITEM_ID" \
@@ -606,7 +657,7 @@ If any path is uncovered, use the declared full profile. Do not interpret an emp
606
657
  Before reusing evidence, prepare `OwlCodaRunKitCoverageAdoptRequestV1` and run:
607
658
 
608
659
  ```bash
609
- owlrunkit coverage-adopt \
660
+ npx --no-install owlrunkit coverage-adopt \
610
661
  --workspace "$PROJECT_ROOT" \
611
662
  --run-id "$RUN_ID" \
612
663
  --request "$COVERAGE_ADOPT_REQUEST_JSON"
@@ -626,7 +677,7 @@ After inspecting the source execution, prepare `OwlCodaRunKitResumeRequestV1`
626
677
  and run:
627
678
 
628
679
  ```bash
629
- owlrunkit resume \
680
+ npx --no-install owlrunkit resume \
630
681
  --workspace "$PROJECT_ROOT" \
631
682
  --run-id "$SOURCE_RUN_ID" \
632
683
  --request "$RESUME_REQUEST_JSON"
@@ -656,7 +707,7 @@ After freezing a DeliveryPacket, prepare
656
707
  SHA-256, then run:
657
708
 
658
709
  ```bash
659
- owlrunkit verify-plan \
710
+ npx --no-install owlrunkit verify-plan \
660
711
  --workspace "$PROJECT_ROOT" \
661
712
  --run-id "$RUN_ID" \
662
713
  --request "$VERIFY_PLAN_REQUEST_JSON"
@@ -687,7 +738,7 @@ For a model workload, first bind the remaining work to a hashed
687
738
  `OwlCodaRunKitResourcePreflightRequestV1` and run:
688
739
 
689
740
  ```bash
690
- owlrunkit resource-preflight \
741
+ npx --no-install owlrunkit resource-preflight \
691
742
  --workspace "$PROJECT_ROOT" \
692
743
  --run-id "$RUN_ID" \
693
744
  --request "$RESOURCE_PREFLIGHT_REQUEST_JSON"
@@ -732,7 +783,7 @@ labels are not acceptance evidence.
732
783
  Prepare `OwlCodaRunKitSnapshotRequestV1`, then run:
733
784
 
734
785
  ```bash
735
- owlrunkit snapshot \
786
+ npx --no-install owlrunkit snapshot \
736
787
  --workspace "$PROJECT_ROOT" \
737
788
  --run-id "$RUN_ID" \
738
789
  --request "$SNAPSHOT_REQUEST_JSON"
@@ -754,7 +805,7 @@ and after the command.
754
805
  Prepare `OwlCodaRunKitVisualSmokeRequestV1`, then run:
755
806
 
756
807
  ```bash
757
- owlrunkit visual-smoke \
808
+ npx --no-install owlrunkit visual-smoke \
758
809
  --workspace "$PROJECT_ROOT" \
759
810
  --run-id "$RUN_ID" \
760
811
  --request "$VISUAL_SMOKE_REQUEST_JSON"
@@ -774,7 +825,7 @@ After every required snapshot passed and the DeliveryPacket is still fresh,
774
825
  prepare `OwlCodaRunKitFinalizeRequestV1` and run:
775
826
 
776
827
  ```bash
777
- owlrunkit finalize \
828
+ npx --no-install owlrunkit finalize \
778
829
  --workspace "$PROJECT_ROOT" \
779
830
  --run-id "$RUN_ID" \
780
831
  --request "$FINALIZE_REQUEST_JSON"
@@ -791,7 +842,7 @@ this command is available.
791
842
  Close only after consuming the current stage receipt and making an explicit controller decision:
792
843
 
793
844
  ```bash
794
- owlrunkit closeout \
845
+ npx --no-install owlrunkit closeout \
795
846
  --workspace "$PROJECT_ROOT" \
796
847
  --run-id "$RUN_ID" \
797
848
  --decision accepted \
@@ -812,7 +863,7 @@ After an accepted closeout, capture fresh project-root snapshots and start from
812
863
  `sourceCandidatePath` or legacy `deliveryPacketPath`, then run:
813
864
 
814
865
  ```bash
815
- owlrunkit ready-for-commit \
866
+ npx --no-install owlrunkit ready-for-commit \
816
867
  --workspace "$PROJECT_ROOT" \
817
868
  --run-id "$RUN_ID" \
818
869
  --request "$READY_REQUEST_JSON"
@@ -2,9 +2,9 @@
2
2
  "schemaVersion": "OwlCodaRunKitConfigV2",
3
3
  "core": {
4
4
  "contractVersion": "0.2",
5
- "coreVersion": "0.18.2",
6
- "coreManifestSha256": "sha256:abe17ff794b4019d8d476f09eb5d4105bae1070b1df0aab53e6c94c7ec8b65a6",
7
- "coreSourceRef": "artifact:sha256:abe17ff794b4019d8d476f09eb5d4105bae1070b1df0aab53e6c94c7ec8b65a6"
5
+ "coreVersion": "0.18.4",
6
+ "coreManifestSha256": "sha256:372d4c247e4b40b0fd2f3fe0f5bf928548095bfb7e2e92e9ac66790e2717f77d",
7
+ "coreSourceRef": "artifact:sha256:372d4c247e4b40b0fd2f3fe0f5bf928548095bfb7e2e92e9ac66790e2717f77d"
8
8
  },
9
9
  "authorizationPolicy": "external_explicit_authority_required"
10
10
  }