owlrunkit 0.18.3 → 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 (29) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +125 -52
  3. package/docs/architecture/OWLCODA_RUNKIT_0184_EXTERNAL_DELIVERY_INTAKE_PRODUCT_DECISION_20260812.md +209 -0
  4. package/docs/architecture/OWLCODA_RUNKIT_USAGE_MODE_SELECTION_PRODUCT_DECISION_20260811.md +8 -7
  5. package/integrations/codex/skills/owlcoda-runkit/SKILL.md +109 -77
  6. package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
  7. package/package.json +1 -1
  8. package/packages/attest/distribution-manifest-v1.json +5 -0
  9. package/packages/attest/src/quick-receipt-contract.mjs +3 -3
  10. package/packages/attest/src/quick.mjs +5 -0
  11. package/packages/attest/src/workspace-snapshot.mjs +10 -1
  12. package/registry-release-policy-v1.json +5 -5
  13. package/sbom.spdx.json +5 -5
  14. package/scripts/runkit-contract/assurance-router.mjs +25 -6
  15. package/scripts/runkit-contract/core-contract.mjs +9 -1
  16. package/scripts/runkit-contract/onboarding-doctor.mjs +1 -1
  17. package/scripts/runkit-contract/profile-onboarding.mjs +263 -15
  18. package/scripts/runkit-contract/project-cli-resolver.mjs +6 -0
  19. package/scripts/runkit-contract/project-external-delivery.mjs +707 -0
  20. package/scripts/runkit-contract/quick-verify.mjs +1 -1
  21. package/scripts/runkit-contract/runkit-bootstrap.mjs +6 -1
  22. package/scripts/runkit-contract/runkit-cli.mjs +278 -140
  23. package/scripts/runkit-contract/schemas/assurance-route-v2.schema.json +26 -0
  24. package/scripts/runkit-contract/schemas/profile-detection-v3.schema.json +170 -0
  25. package/scripts/runkit-contract/schemas/team-project-event-v3.schema.json +146 -0
  26. package/scripts/runkit-contract/schemas/team-project-status-v2.schema.json +85 -0
  27. package/scripts/runkit-contract/schemas/usage-mode-recommendation-v2.schema.json +136 -0
  28. package/scripts/runkit-contract/team-project.mjs +477 -15
  29. package/scripts/runkit-contract/usage-mode.mjs +28 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,47 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.18.4
4
+
5
+ - Adds controller-owned `project target-snapshot --dry-run|--apply` for binding
6
+ an immutable target HEAD, visible dirty overlay, WorkItem path boundary, and
7
+ full workspace fingerprint without writing the frozen target worktree.
8
+ - Adds `project import-delivery --dry-run|--apply` for verifying an external
9
+ DeliveryPacket against that target and recording exact candidate identity in
10
+ Project Driver through append-only Event V3.
11
+ - Distinguishes an attested entry-to-candidate overlay from `candidate_only`
12
+ intake when no entry snapshot exists, so current candidate verification is
13
+ never overstated as historical delta proof.
14
+ - Classifies visible tool-cache and dependency-environment changes separately
15
+ while rejecting packet paths outside WorkItem ownership and any unclassified
16
+ source delta before project truth is written.
17
+ - Documents project-local `npx --no-install owlrunkit` as the normal command
18
+ surface and treats an older global CLI or process-level Skill as version
19
+ drift, not as authority to reinterpret a newer project.
20
+ - Makes `profiles detect --dry-run` return the V3 contract with real visible
21
+ changed paths, `profiles_insufficient` when source coverage is incomplete,
22
+ a minimal suggested profile, and copyable preview/apply repair commands.
23
+ - Emits Status/Takeover V2 and extends takeover with stale-handoff reasons plus
24
+ the current external delivery and exact per-file delta from its predecessor,
25
+ while retaining the one-screen human projection.
26
+ - Emits Assurance Route V2 and Usage Mode Recommendation V2 with project-local
27
+ commands. The published Profile Detection V2, Status/Takeover V1, Assurance
28
+ Route V1, and Usage Mode Recommendation V1 contracts remain unchanged for
29
+ existing consumers.
30
+ - Adds action-specific `project assign --help` and makes `quick-metrics`
31
+ local-by-default without requiring `--local`; the old flag remains an
32
+ accepted compatibility no-op.
33
+ - Requires disjoint controller and target workspaces, binds only an exact Git
34
+ worktree root, brackets DeliveryPacket verification with stable target
35
+ snapshots, and rejects base-identity drift plus both sides of any
36
+ cross-boundary rename.
37
+ - Reserves Event V3 for verified `import-delivery` intake so legacy raw request
38
+ actions cannot inject external-delivery truth without checking target bytes.
39
+ - Revalidates Git-visible changed paths between profile detection and apply;
40
+ Git-status failure and rename-source coverage now fail closed instead of
41
+ appearing as a high-confidence empty candidate.
42
+ - Keeps target writes and every Git, release, deployment, production, UX, and
43
+ business authorization flag false.
44
+
3
45
  ## 0.18.3
4
46
 
5
47
  - Adds `quick-verify --stdin-file <file>` so a local or remote verification
package/README.md CHANGED
@@ -21,6 +21,22 @@ actionable-only receipt issues, optional one-command attestation, and concise
21
21
  metrics by default. It also adds one atomic failed-work return path and makes
22
22
  the bundled Skill's contract references self-contained.
23
23
 
24
+ RunKit 0.18.4 lets one controller project bind a separate frozen target
25
+ worktree without installing dependencies or `.owlcoda` into that target. It
26
+ captures an immutable entry snapshot, verifies an external DeliveryPacket,
27
+ classifies visible dirty-overlay changes, and imports the candidate identity
28
+ into Project Driver. Missing entry truth is reported as `candidate_only`, not
29
+ as an attested delta. Tool-cache and dependency-environment changes are
30
+ disclosed separately; unclassified source changes fail closed. The release
31
+ also makes project-local `npx --no-install owlrunkit` the documented command
32
+ surface so an older global binary cannot reinterpret newer project truth.
33
+ Profile detection now exposes real uncovered source paths and copyable repair
34
+ commands instead of reporting a non-actionable success. Takeover reports stale
35
+ handoffs and the exact current-versus-previous external candidate delta.
36
+ These additions use Profile Detection V3, Status/Takeover V2, Assurance Route
37
+ V2, and Usage Mode Recommendation V2; the published predecessor contracts
38
+ remain unchanged.
39
+
24
40
  The 0.18 Project Driver is a bounded surface for new projects and controlled
25
41
  dogfood. Its product name does not claim to be a general long-running,
26
42
  multi-phase, or enterprise control plane. Version 0.18 adds one bounded
@@ -35,10 +51,11 @@ separate authority boundaries.
35
51
  ## Install
36
52
 
37
53
  ```bash
38
- npm install --save-exact owlrunkit@0.18.3
54
+ npm install --save-exact owlrunkit@0.18.4
39
55
  ```
40
56
 
41
- The `owlrunkit` bootstrap uses the project's exact locally bound CLI for
57
+ Use `npx --no-install owlrunkit` for project commands. The package bootstrap
58
+ uses the project's exact locally bound CLI for
42
59
  ordinary project commands. The installed current package remains responsible
43
60
  for bootstrap operations such as initialization, adoption, and Core successor
44
61
  migration, so a global CLI does not reinterpret an older project's control
@@ -48,11 +65,11 @@ the current bootstrap Core or its embedded prior-release identity catalog, and
48
65
  the project Config must independently bind the same Core.
49
66
 
50
67
  ```bash
51
- owlrunkit --version
52
- owlrunkit init --workspace /absolute/path/to/project
53
- owlrunkit doctor --workspace /absolute/path/to/project
54
- owlrunkit mode recommend --workspace /absolute/path/to/project
55
- owlrunkit mode status --workspace /absolute/path/to/project
68
+ npx --no-install owlrunkit --version
69
+ npx --no-install owlrunkit init --workspace /absolute/path/to/project
70
+ npx --no-install owlrunkit doctor --workspace /absolute/path/to/project
71
+ npx --no-install owlrunkit mode recommend --workspace /absolute/path/to/project
72
+ npx --no-install owlrunkit mode status --workspace /absolute/path/to/project
56
73
  ```
57
74
 
58
75
  `mode recommend` is read-only and defaults to human output; add `--json` for a
@@ -69,59 +86,59 @@ status, and takeover flow:
69
86
 
70
87
  ```bash
71
88
  cp node_modules/owlrunkit/scripts/runkit-contract/templates/team-project-definition.json ./project-definition.json
72
- owlrunkit project init --workspace . \
89
+ npx --no-install owlrunkit project init --workspace . \
73
90
  --definition ./project-definition.json
74
- owlrunkit project assign --workspace . --assignment-id assign-1 \
91
+ npx --no-install owlrunkit project assign --workspace . --assignment-id assign-1 \
75
92
  --at 2026-08-09T00:00:00.000Z --work-item work-item-1 --agent agent-runtime
76
- owlrunkit project checkpoint --workspace . --checkpoint-id checkpoint-1 \
93
+ npx --no-install owlrunkit project checkpoint --workspace . --checkpoint-id checkpoint-1 \
77
94
  --at 2026-08-09T00:05:00.000Z --assignment-id assign-1 --work-item work-item-1 \
78
95
  --state active --summary 'Implement the bounded work item' \
79
96
  --completed-units 0 \
80
97
  --next 'Run the focused verification'
81
- owlrunkit project handoff --workspace . --handoff-id handoff-1 \
98
+ npx --no-install owlrunkit project handoff --workspace . --handoff-id handoff-1 \
82
99
  --at 2026-08-09T00:10:00.000Z --assignment-id assign-1 --work-item work-item-1 \
83
100
  --from-agent agent-runtime --to-agent agent-successor \
84
101
  --summary 'Source work is ready for continuation' --next 'Run verification' \
85
102
  --evidence evidence/source.txt
86
103
  # If review instead rejects a failed checkpoint, preserve it and open rework
87
104
  # without first mutating the WorkItem back to active:
88
- owlrunkit project reject-and-return --workspace . --rework-id review-1 \
105
+ npx --no-install owlrunkit project reject-and-return --workspace . --rework-id review-1 \
89
106
  --at 2026-08-09T00:10:30.000Z --work-item work-item-1 \
90
107
  --reviewer-agent agent-control --to-agent agent-runtime \
91
108
  --reason 'The candidate violates its versioned contract' \
92
109
  --next 'Repair the contract and rerun the focused check' \
93
110
  --evidence evidence/rejected-review.txt
94
- owlrunkit project assign --workspace . --assignment-id assign-2 \
111
+ npx --no-install owlrunkit project assign --workspace . --assignment-id assign-2 \
95
112
  --at 2026-08-09T00:11:00.000Z --work-item work-item-1 \
96
113
  --agent agent-successor --supersedes assign-1
97
- owlrunkit project decision --workspace . --open --decision-id decision-1 \
114
+ npx --no-install owlrunkit project decision --workspace . --open --decision-id decision-1 \
98
115
  --at 2026-08-09T00:12:00.000Z --title 'Choose the accepted source path' \
99
116
  --question 'Which source path should continue?' --owner-agent agent-successor \
100
117
  --blocking-work-item work-item-1 --option accepted --option rejected
101
- owlrunkit project decision --workspace . --resolve --decision-id decision-1 \
118
+ npx --no-install owlrunkit project decision --workspace . --resolve --decision-id decision-1 \
102
119
  --at 2026-08-09T00:13:00.000Z --resolution 'Use the accepted source path' \
103
120
  --rationale 'It preserves the project contract' --evidence evidence/decision.txt
104
- owlrunkit project checkpoint --workspace . --checkpoint-id checkpoint-2 \
121
+ npx --no-install owlrunkit project checkpoint --workspace . --checkpoint-id checkpoint-2 \
105
122
  --at 2026-08-09T00:14:00.000Z --assignment-id assign-2 \
106
123
  --work-item work-item-1 --state completed --completed-units 1 \
107
124
  --summary 'Accepted work is complete' --evidence evidence/completion.txt
108
- owlrunkit project verification --workspace . --defer \
125
+ npx --no-install owlrunkit project verification --workspace . --defer \
109
126
  --verification-id release-batch --at 2026-08-09T00:14:30.000Z \
110
127
  --work-item work-item-1 --owner-agent agent-successor \
111
128
  --check typecheck --check full-suite --check package-smoke \
112
129
  --reason 'Run broad checks once after the related changes settle' \
113
130
  --due-gate integration-ready
114
131
  # After those checks run once against the frozen candidate:
115
- owlrunkit project verification --workspace . --close \
132
+ npx --no-install owlrunkit project verification --workspace . --close \
116
133
  --verification-id release-batch --at 2026-08-09T00:14:45.000Z \
117
134
  --disposition verified --summary 'The batched release checks passed' \
118
135
  --evidence evidence/release-batch.txt
119
- owlrunkit project integrate --workspace . --gate integration-ready \
136
+ npx --no-install owlrunkit project integrate --workspace . --gate integration-ready \
120
137
  --at 2026-08-09T00:15:00.000Z --summary 'Integration gate evidence is complete' \
121
138
  --evidence evidence/integration.txt
122
- owlrunkit project status --workspace .
123
- owlrunkit project takeover --workspace . --agent agent-successor
124
- owlrunkit project successor --workspace . --transition-id project-next-001 \
139
+ npx --no-install owlrunkit project status --workspace .
140
+ npx --no-install owlrunkit project takeover --workspace . --agent agent-successor
141
+ npx --no-install owlrunkit project successor --workspace . --transition-id project-next-001 \
125
142
  --at 2026-08-09T00:16:00.000Z --definition ./next-project-definition.json \
126
143
  --reason 'Archive the completed project and begin the next bounded project'
127
144
  ```
@@ -141,6 +158,47 @@ the reviewer, evidence, target Agent, and new assignment. The failed checkpoint
141
158
  remains immutable; status and takeover expose the rework relation and attempt.
142
159
  The command is not a Git rejection, merge action, or release authorization.
143
160
 
161
+ ### Import a frozen external source lane
162
+
163
+ Capture the target before delegating source work, then import the producer's
164
+ DeliveryPacket after it freezes the candidate:
165
+
166
+ ```bash
167
+ npx --no-install owlrunkit project target-snapshot --workspace . \
168
+ --snapshot-id w2-5-entry --at 2026-08-12T08:00:00.000Z \
169
+ --work-item work-item-1 --target-workspace /absolute/frozen/worktree --apply
170
+
171
+ npx --no-install owlrunkit project import-delivery --workspace . \
172
+ --delivery-id w2-5-luna --at 2026-08-12T09:00:00.000Z \
173
+ --assignment-id assign-1 --work-item work-item-1 --producer luna-max \
174
+ --target-workspace /absolute/frozen/worktree \
175
+ --packet /absolute/delivery-packet.json \
176
+ --entry-snapshot w2-5-entry --apply
177
+ ```
178
+
179
+ Both commands support `--dry-run` instead of `--apply`. Artifacts are written
180
+ only under the controller's `.owlcoda/runkit/project`; the target is read-only.
181
+ Controller and target must be disjoint real directories, and the target must
182
+ be the exact Git worktree root rather than a nested repository directory.
183
+ The imported Event V3 records `deliveryCandidateFingerprint`,
184
+ `workspaceSnapshotFingerprint`, target HEAD, candidate file hashes, overlay
185
+ classification, and explicit `proven` / `notProven` statements. Omitting
186
+ `--entry-snapshot` verifies the current candidate bytes but records
187
+ `overlayStatus=candidate_only`.
188
+
189
+ The cache classification covers cache paths visible to Git status, such as
190
+ `.vitest/**`, `.vite/**`, `.pytest_cache/**`, and `__pycache__/**`. It does not
191
+ claim to bind ignored paths (`ignoredPathsBound=false`) and does not yet create
192
+ an isolated dependency consumer or temporary test cache. Lockfile or
193
+ `node_modules` changes outside the packet are disclosed as dependency
194
+ environment changes. Any other entry-to-candidate delta, or any packet path
195
+ outside the WorkItem's allowed ownership, blocks import before project truth is
196
+ written. This includes the deleted source side of a Git rename; changing target
197
+ HEAD, tracked tree, or submodule identity also blocks overlay attestation.
198
+ Event V3 can be created only by this verified intake path, not a legacy raw
199
+ project request. No imported delivery grants Git, release, deployment,
200
+ production, UX, or business acceptance.
201
+
144
202
  `project verification --defer` is a small deferred-verification ledger, not a
145
203
  test scheduler. It records stable check IDs, why they were intentionally not
146
204
  run yet, the responsible Agent, and the integration gate before which they
@@ -178,6 +236,11 @@ WorkItem. An assignment may bind an exact RunKit execution and lease; in that
178
236
  case, the WorkItem cannot complete until the execution has a trusted accepted
179
237
  closeout and its lease is released.
180
238
 
239
+ `project takeover` adds the current candidate, its exact added/changed/removed
240
+ path delta from the previous imported delivery, and handoffs that are stale
241
+ because later project truth superseded them. These are read-only projections;
242
+ they do not reopen work or grant writer authority.
243
+
181
244
  The Agent-facing natural actions are stable: split and assign work, report
182
245
  status, open or resolve a decision, hand off, take over, capture evidence, and
183
246
  verify. The CLI is the durable implementation surface; users can keep speaking
@@ -189,11 +252,11 @@ Preview deterministic, project-local commands, or atomically adopt only
189
252
  high-confidence candidates:
190
253
 
191
254
  ```bash
192
- owlrunkit profiles detect --workspace . --dry-run
193
- owlrunkit profiles detect --workspace . --apply
194
- owlrunkit profiles reconcile --workspace . --dry-run
195
- owlrunkit profiles reconcile --workspace . --apply
196
- owlrunkit profiles validate --workspace .
255
+ npx --no-install owlrunkit profiles detect --workspace . --dry-run
256
+ npx --no-install owlrunkit profiles detect --workspace . --apply
257
+ npx --no-install owlrunkit profiles reconcile --workspace . --dry-run
258
+ npx --no-install owlrunkit profiles reconcile --workspace . --apply
259
+ npx --no-install owlrunkit profiles validate --workspace .
197
260
  ```
198
261
 
199
262
  `profiles detect --apply` is create-only. `profiles reconcile` previews or
@@ -205,12 +268,21 @@ launchers. A PATH-only package manager remains review-required. A dry-run that
205
268
  only canonicalizes JSON formatting reports `normalizationOnly: true` instead of
206
269
  showing unexplained hash drift with an empty update list.
207
270
 
271
+ The dry-run is the V2 detection contract. It reports `profiles_insufficient`
272
+ instead of `profiles_detected` when Git-visible source paths are uncovered or
273
+ no actionable primary exists. `changedPaths`, `uncoveredSourcePaths`,
274
+ `primaryBlockers`, `minimalSuggestedProfile`, and `repairCommands` explain the
275
+ gap using only real project surfaces; absent conventional `src/` or `tests/`
276
+ directories are never invented as blockers. Detection records both sides of a
277
+ Git rename, reports Git-status failure, and rechecks the exact changed-path set
278
+ before apply so a stale dry-run cannot write incomplete coverage.
279
+
208
280
  ## Choose auto, off, light, managed, or formal
209
281
 
210
282
  Start with the human-first read-only recommendation:
211
283
 
212
284
  ```bash
213
- owlrunkit mode recommend --workspace .
285
+ npx --no-install owlrunkit mode recommend --workspace .
214
286
  ```
215
287
 
216
288
  - **off / No RunKit** uses neither continuity nor assurance for analysis,
@@ -231,7 +303,7 @@ recommendation; escalation is not sticky.
231
303
  Machine integrations may route an explicit risk-facts document directly:
232
304
 
233
305
  ```bash
234
- owlrunkit assurance route --workspace . \
306
+ npx --no-install owlrunkit assurance route --workspace . \
235
307
  --request ./scripts/runkit-contract/templates/assurance-request.json
236
308
  ```
237
309
 
@@ -245,11 +317,11 @@ grant Git, release, publish, deploy, or business authority.
245
317
  Run Quick with:
246
318
 
247
319
  ```bash
248
- owlrunkit quick-verify --workspace . -- npm test
249
- owlrunkit quick-verify --workspace . --stdin-file ./remote-check.sh --attest \
320
+ npx --no-install owlrunkit quick-verify --workspace . -- npm test
321
+ npx --no-install owlrunkit quick-verify --workspace . --stdin-file ./remote-check.sh --attest \
250
322
  -- ssh test-host /bin/sh
251
- owlrunkit quick-metrics --workspace . --local
252
- owlrunkit quick-metrics --workspace . --local --verbose
323
+ npx --no-install owlrunkit quick-metrics --workspace .
324
+ npx --no-install owlrunkit quick-metrics --workspace . --verbose
253
325
  ```
254
326
 
255
327
  `--stdin-file` accepts a regular non-symlink file up to 1 MiB, copies its exact
@@ -261,8 +333,9 @@ restore phases remain visible while the complete artifacts stay receipt-bound.
261
333
  `--attest` runs the existing attestation immediately and returns its independent
262
334
  object alongside the Quick result; it does not promote Quick to Formal.
263
335
 
264
- `quick-metrics --local` returns aggregate counts only. Add `--verbose` when the
265
- individual receipt paths are needed. New successful receipts no longer carry
336
+ `quick-metrics` is local-only and returns aggregate counts. Add `--verbose`
337
+ when the individual receipt paths are needed. The former `--local` flag remains
338
+ accepted as a compatibility no-op. New successful receipts no longer carry
266
339
  the fixed `quick_ignored_artifact_unbound` issue; historical receipts remain
267
340
  strictly readable without surfacing that non-actionable code as an attestation
268
341
  issue.
@@ -274,13 +347,13 @@ Given a Goal Contract and the paths this work item may write, the happy path is:
274
347
  ```bash
275
348
  NODE_BIN="$(node -p 'process.execPath')"
276
349
 
277
- owlrunkit formal start --workspace . --run-id release-001 \
350
+ npx --no-install owlrunkit formal start --workspace . --run-id release-001 \
278
351
  --goal .owlcoda/runkit/goal.json --owned-path 'src/**'
279
352
 
280
- owlrunkit formal check --workspace . --run-id release-001 \
353
+ npx --no-install owlrunkit formal check --workspace . --run-id release-001 \
281
354
  --check-id source-syntax -- "$NODE_BIN" --check src/index.js
282
355
 
283
- owlrunkit formal finish --workspace . --run-id release-001 \
356
+ npx --no-install owlrunkit formal finish --workspace . --run-id release-001 \
284
357
  --decision accepted
285
358
  ```
286
359
 
@@ -296,7 +369,7 @@ Formal also accepts a real project command through an enforced Verification
296
369
  Envelope:
297
370
 
298
371
  ```bash
299
- owlrunkit formal check --workspace . --run-id release-001 \
372
+ npx --no-install owlrunkit formal check --workspace . --run-id release-001 \
300
373
  --work-item delivery --check-id project-tests \
301
374
  --envelope scripts/runkit-contract/templates/verification-envelope.json
302
375
  ```
@@ -311,7 +384,7 @@ the policy, the command is not run and no Formal acceptance is possible.
311
384
  Existing legacy verification may still capture evidence, but it is not silently
312
385
  promoted into this Formal path.
313
386
 
314
- Use `owlrunkit status --workspace .` for a concise human view of what is ready,
387
+ Use `npx --no-install owlrunkit status --workspace .` for a concise human view of what is ready,
315
388
  what has not happened, how many gates remain, and the next allowed action.
316
389
 
317
390
  ## Freeze a dirty worktree safely
@@ -321,11 +394,11 @@ artifact. It binds the baseline, exact owned-path closure, source manifest,
321
394
  and payload bytes without requiring a Git commit.
322
395
 
323
396
  ```bash
324
- owlrunkit candidate freeze --workspace . --run-id release-001 \
397
+ npx --no-install owlrunkit candidate freeze --workspace . --run-id release-001 \
325
398
  --from-lease delivery --candidate-id rc-001
326
- owlrunkit candidate verify --workspace . \
399
+ npx --no-install owlrunkit candidate verify --workspace . \
327
400
  --candidate .owlcoda/runkit/executions/release-001/source-candidates/rc-001.json
328
- owlrunkit candidate materialize --workspace . \
401
+ npx --no-install owlrunkit candidate materialize --workspace . \
329
402
  --candidate .owlcoda/runkit/executions/release-001/source-candidates/rc-001.json \
330
403
  --target-workspace /absolute/clean/materialization
331
404
  ```
@@ -344,10 +417,10 @@ Register every coverage root once. Later discovery and process-wide migration
344
417
  commands use the persistent registry automatically:
345
418
 
346
419
  ```bash
347
- owlrunkit fleet register-root --fleet-root /absolute/projects
348
- owlrunkit fleet register-root --fleet-root /absolute/other-projects
349
- owlrunkit fleet inspect-registry
350
- owlrunkit fleet discover
420
+ npx --no-install owlrunkit fleet register-root --fleet-root /absolute/projects
421
+ npx --no-install owlrunkit fleet register-root --fleet-root /absolute/other-projects
422
+ npx --no-install owlrunkit fleet inspect-registry
423
+ npx --no-install owlrunkit fleet discover
351
424
  ```
352
425
 
353
426
  The registry lives under the user-owned OwlCoda home. Initial discovery stops
@@ -372,10 +445,10 @@ Core successor separates an immutable candidate and fleet-wide plan from the
372
445
  Owner-authorized migration:
373
446
 
374
447
  ```bash
375
- owlrunkit core-successor plan --workspace . --plan-id core-016 \
448
+ npx --no-install owlrunkit core-successor plan --workspace . --plan-id core-016 \
376
449
  --run-id release-001 --from-lease delivery --candidate-id rc-001
377
450
 
378
- owlrunkit core-successor apply --workspace . \
451
+ npx --no-install owlrunkit core-successor apply --workspace . \
379
452
  --plan .owlcoda/runkit/core-successors/core-016/plan.json \
380
453
  --owner-authority ./owner-core-successor-authority.json \
381
454
  --receipt-id core-016-apply
@@ -395,19 +468,19 @@ Build and verification stay separate from the later permission to change a
395
468
  machine:
396
469
 
397
470
  ```bash
398
- owlrunkit deployment prepare --workspace . --run-id build-001 \
471
+ npx --no-install owlrunkit deployment prepare --workspace . --run-id build-001 \
399
472
  --artifact dist/app.tgz --media-type application/gzip \
400
473
  --owner-decision ./owner-deployment-decision.json \
401
474
  --output .owlcoda/runkit/deployments/app-prepare.json
402
475
 
403
- owlrunkit deployment execute --workspace . \
476
+ npx --no-install owlrunkit deployment execute --workspace . \
404
477
  --prepare .owlcoda/runkit/deployments/app-prepare.json \
405
478
  --owner-decision ./owner-deployment-decision.json \
406
479
  --owner-authority ./deployment-owner-authority.json \
407
480
  --manifest ./remote-deployment-manifest.json
408
481
 
409
482
  # Resume the automatic child after an interrupted or indeterminate stage.
410
- owlrunkit deployment execute --workspace . --resume \
483
+ npx --no-install owlrunkit deployment execute --workspace . --resume \
411
484
  --prepare .owlcoda/runkit/deployments/app-prepare.json \
412
485
  --owner-decision ./owner-deployment-decision.json \
413
486
  --owner-authority ./deployment-owner-authority.json \
@@ -0,0 +1,209 @@
1
+ # OwlRunKit 0.18.4 External Delivery Intake Product Decision
2
+
3
+ > Status: implemented source candidate; unpublished, uninstalled, unadopted
4
+ >
5
+ > Date: 2026-08-12, Asia/Shanghai
6
+ >
7
+ > Scope: controller/target separation, external DeliveryPacket intake,
8
+ > dirty-overlay classification, actionable profile detection, takeover truth
9
+ > delta, and project-local command identity
10
+
11
+ ## Decision
12
+
13
+ RunKit remains a flight recorder and stage controller. Its default posture is
14
+ light: ordinary analysis and small reversible source work do not require a
15
+ RunKit execution. Quick binds one important verification command. Project
16
+ Driver preserves continuity across sessions and writers. Formal remains
17
+ reserved for facts that actually require stronger assurance, such as multiple
18
+ writers or authorities, permissions, security, funds, irreversible change,
19
+ uncertain rollback, schema/data migration, or an explicit Formal acceptance
20
+ contract.
21
+
22
+ Version 0.18.4 addresses one narrower gap: a Project Driver in a controller
23
+ worktree must be able to record a candidate produced in a different frozen
24
+ worktree without installing dependencies, writing `.owlcoda`, or changing
25
+ package metadata in the target. Three adjacent onboarding and recovery defects
26
+ are included because they otherwise leave this path non-actionable: false-success
27
+ profile detection, missing stale/current candidate truth in takeover, and
28
+ inconsistent CLI help/local metrics behavior.
29
+
30
+ ## Accepted dogfood facts
31
+
32
+ These facts come from the Sierac MES, OwlChen, OwlFootball, Luna, and Cursor
33
+ dogfood reports accepted as product input. This candidate does not re-run those
34
+ foreign-project workflows.
35
+
36
+ - Project Driver is a net benefit for long threads, cross-session takeover,
37
+ multi-stage test deployment, and explicit Gate ownership.
38
+ - Quick is useful when it binds a frozen candidate and one decision-changing
39
+ command. It is not the mechanism that discovers most source bugs.
40
+ - Ordinary single-writer source micro-batches become slower when every command
41
+ is wrapped in RunKit ceremony.
42
+ - A controller worktree may have a valid RunKit project while a frozen source
43
+ worktree cannot accept `.owlcoda`, `package.json`, a lockfile, or
44
+ `node_modules` changes.
45
+ - External Luna and Cursor deliveries currently require manual path/hash
46
+ aggregation before their candidate identity appears in Project Driver.
47
+ - `npx --no-install owlrunkit` can use the exact project package while a bare
48
+ `owlrunkit` may resolve an older global binary. An old binary cannot safely
49
+ predict or trust a future Core identity.
50
+ - Visible test-tool cache files can change a dirty-worktree fingerprint even
51
+ when the intended source candidate did not change.
52
+ - Profile detection can look successful while its candidates do not cover the
53
+ Git-visible source candidate or provide an actionable primary repair.
54
+ - A blank-session takeover needs to distinguish stale handoffs and show the
55
+ current external candidate delta instead of presenting historical facts as
56
+ competing next actions.
57
+ - Source/test success is not UX completion, deployment activation, production
58
+ truth, or business effectiveness.
59
+
60
+ ## Long-term product decision
61
+
62
+ Continuity and assurance remain independent dimensions. External source lanes
63
+ do not become Formal merely because they use another worktree or Agent.
64
+
65
+ | Situation | Continuity | Assurance |
66
+ | --- | --- | --- |
67
+ | Analysis, documentation discussion, disposable exploration | none | none |
68
+ | One low-risk frozen candidate and one exact command | none | quick |
69
+ | Cross-session or multi-stage ordinary reversible source work | project_driver | none or quick |
70
+ | Mandatory high-risk fact or explicit Formal acceptance | as needed | formal |
71
+
72
+ The user-facing presets remain `off`, `light`, `managed`, `formal`, and `auto`.
73
+ They are preferences, not authorization, and cannot weaken a mandatory Formal
74
+ route.
75
+
76
+ ## Released capability before this candidate
77
+
78
+ The public npm release remains `owlrunkit@0.18.3`. It already provides:
79
+
80
+ - independent continuity/assurance mode recommendation;
81
+ - one-command `quick-verify --attest`;
82
+ - hash-bound `--stdin-file` input;
83
+ - bounded head-and-tail Quick output;
84
+ - actionable Quick issues and aggregate-by-default metrics;
85
+ - atomic failed-work `reject-and-return`;
86
+ - self-contained packaged Skill contract references.
87
+
88
+ Those features are not new 0.18.4 claims.
89
+
90
+ ## 0.18.4 candidate implementation
91
+
92
+ ### Controller-owned entry snapshot
93
+
94
+ `project target-snapshot --dry-run|--apply` reads a target Git worktree twice
95
+ and binds:
96
+
97
+ - canonical target workspace reference;
98
+ - repository identity and target HEAD;
99
+ - tracked tree, submodules, dependency lockfiles, and visible dirty overlay;
100
+ - the WorkItem's allowed path boundary;
101
+ - one full workspace snapshot fingerprint.
102
+
103
+ Only the controller's `.owlcoda/runkit/project/target-snapshots` path may be
104
+ written. Controller and target must be disjoint real directories, and target
105
+ must resolve to the exact Git worktree root. The target worktree is read-only.
106
+
107
+ ### External DeliveryPacket import
108
+
109
+ `project import-delivery --dry-run|--apply` verifies the packet's exact
110
+ whole-file hashes against the target and records append-only Event V3 with:
111
+
112
+ - `deliveryCandidateFingerprint` for the packet file set;
113
+ - `workspaceSnapshotFingerprint` for the complete target snapshot;
114
+ - target HEAD, producer, WorkItem, and current assignment;
115
+ - entry snapshot reference and hash when available;
116
+ - candidate paths and entry-to-candidate changed paths;
117
+ - tool-cache, dependency-environment, unchanged-packet, and out-of-scope
118
+ classifications;
119
+ - explicit `proven` and `notProven` statements;
120
+ - `targetWritePerformed=false` and `authorizationGranted=false`.
121
+
122
+ If no entry snapshot exists, the packet can still prove the current candidate
123
+ bytes. The event is then `candidate_only`; it cannot claim that the historical
124
+ entry-to-candidate delta was observed. Any packet path outside WorkItem
125
+ ownership or any unclassified source delta rejects the import before project
126
+ truth is written. Import brackets packet verification with stable workspace
127
+ snapshots, compares HEAD, tracked tree, submodules, and visible dirty overlay,
128
+ and treats both source and destination of a rename as changed paths. Event V3
129
+ is reserved for this verified intake path; legacy raw event requests cannot
130
+ manufacture an external-delivery fact.
131
+
132
+ ### Command and Skill identity
133
+
134
+ Installed-project instructions use `npx --no-install owlrunkit`. A process-level
135
+ shared Skill or bare global CLI with an older version is reported as drift, not
136
+ used as authority to reinterpret current project truth. Safe fleet Skill
137
+ replacement remains a separate installation action and is not performed by
138
+ this candidate.
139
+
140
+ ### Actionable profile onboarding
141
+
142
+ Public `profiles detect --dry-run` returns Profile Detection V3. V2 remains an
143
+ unchanged compatibility contract for existing consumers; V3 adds actionable
144
+ coverage fields. It reads Git-visible changed paths without writing the
145
+ workspace and reports
146
+ `profiles_insufficient` when source paths remain uncovered or no actionable
147
+ primary exists. The result includes exact uncovered paths, primary blockers, a
148
+ minimal profile using only real project surfaces, and copyable preview/apply
149
+ repair commands. Existing-profile repair continues through atomic
150
+ `profiles reconcile`; absent conventional directories are not blockers.
151
+ Detection and apply bind the same Git-visible changed-path set, including both
152
+ sides of a rename. Status failure or drift blocks apply before configuration is
153
+ written.
154
+
155
+ ### Takeover truth delta and CLI consistency
156
+
157
+ `project status` and `project takeover` emit V2 projections while their V1
158
+ exports remain unchanged for existing consumers. Takeover V2 projects handoffs
159
+ made stale by later project facts, the current imported external delivery, and
160
+ an exact added/changed/removed path
161
+ delta from the previous delivery. The human projection remains one-screen.
162
+ `project assign --help` is action-specific, and `quick-metrics` is local by
163
+ definition: `--local` is optional and retained only as a compatibility no-op.
164
+
165
+ Assurance and usage-mode routing follow the same rule: their V1 contracts retain
166
+ the original bare-command machine values, while the CLI uses Assurance Route V2
167
+ and Usage Mode Recommendation V2 with project-local
168
+ `npx --no-install owlrunkit` commands.
169
+
170
+ ## Acceptance-level presentation
171
+
172
+ Every imported delivery must keep these layers distinct:
173
+
174
+ 1. candidate file identity verified;
175
+ 2. entry-to-candidate visible overlay attested, or explicitly not attested;
176
+ 3. verification command/test result, if separately run;
177
+ 4. UX or independent product acceptance, if separately performed;
178
+ 5. deployment/runtime activation, if separately authorized and read back;
179
+ 6. production or business effectiveness, if separately accepted.
180
+
181
+ No lower layer promotes a higher one.
182
+
183
+ ## Follow-up gaps
184
+
185
+ Ten issue classes remain outside 0.18.4 and need separate contracts:
186
+
187
+ - isolated temporary dependency consumer and test-cache execution;
188
+ - binding ignored paths when a task explicitly needs them;
189
+ - delta-oriented reuse of an older receipt plus a small allowed-path change;
190
+ - external runtime mutation, rollback, final-state, and stage-failure fields;
191
+ - upstream WorkItem invalidation/reopen with downstream waiting propagation;
192
+ - recovery evidence semantics;
193
+ - large-artifact deduplication;
194
+ - atomic onboarding/bootstrap and safer shared-Skill fleet activation;
195
+ - business-first stage summaries and acceptance-level UI projection;
196
+ - efficiency metrics for repeated commands, false blocks, manual intervention,
197
+ handoff wait, and time to acceptable result.
198
+
199
+ ## What this candidate cannot claim
200
+
201
+ - It is not published `owlrunkit@0.18.4`.
202
+ - It is not installed, adopted, activated, committed, tagged, or pushed.
203
+ - It does not auto-detect a source lane that was never assigned or imported.
204
+ - It does not prove ignored cache paths; workspace snapshots continue to say
205
+ `ignoredPathsBound=false`.
206
+ - It does not isolate dependencies or automatically reuse prior tests.
207
+ - It does not run tests, create a Quick/Formal execution, modify Git, deploy,
208
+ access production, or grant business authority.
209
+ - It does not move domain contracts or product judgment into OwlCoda.
@@ -1,6 +1,6 @@
1
1
  # OwlCoda RunKit 使用模式选择:Sierac MES Dogfood 产品决议
2
2
 
3
- 状态:**0.18.2 已发布;本文主体保留既有产品决议,文末追加未发布的 0.18.3 dogfood 修复候选**
3
+ 状态:**0.18.3 已发布;本文主体保留既有产品决议,0.18.4 外部候选纳管决议另见同日架构文档**
4
4
  日期:2026-08-11
5
5
 
6
6
  ## 已验证现场事实
@@ -165,7 +165,7 @@ RunKit contract/package gate、Core 身份同步、pack 内容检查和安装 sm
165
165
  上述 0.18.2 内容已经发布;准确 Git/npm 身份以 `docs/PRODUCT-TRUTH.md` 和独立发布
166
166
  回执为准。发布本身没有更新全局 Skill、迁移外部项目或授予业务权限。
167
167
 
168
- ## 0.18.3 Sierac recovery dogfood 修复候选
168
+ ## 0.18.3 Sierac recovery dogfood 修复(已发布)
169
169
 
170
170
  ### 新增现场事实
171
171
 
@@ -205,12 +205,13 @@ attestation,且没有扩大到 Formal、生产、Git 或业务验收。
205
205
 
206
206
  ### 后续缺口
207
207
 
208
- 本轮没有实现次优先级的 `project takeover` stale-handoff delta,也没有新增 recovery
209
- evidence 的 `captured_before` / `restores_to` 语义字段。Project Driver 自动 ID、时间戳、
208
+ `project takeover` stale-handoff 与外部候选 delta 已进入未发布的 0.18.4 源码候选;
209
+ recovery evidence 的 `captured_before` / `restores_to` 语义字段仍未实现。Project Driver 自动 ID、时间戳、
210
210
  单项完成与 integrate 合并,以及路径范围指纹仍保留在既有 backlog。
211
211
 
212
212
  ### 不能声称
213
213
 
214
- `0.18.3` 当前只是隔离 worktree 内的源码候选。它尚未 commit、合并、tag、publish、
215
- 安装、全局 Skill 更新或外部项目 adoption;聚焦测试也不构成发布授权、生产授权或
216
- 业务验收。
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`;该版本当前仍只是源码候选。