owlrunkit 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/LICENSE +674 -0
- package/NOTICE.md +137 -0
- package/README.md +44 -0
- package/SOURCE.md +10 -0
- package/docs/architecture/OWLCODA_RUN_KIT_CONTRACT_V0_1.md +160 -0
- package/docs/architecture/OWLCODA_RUN_KIT_CONTRACT_V0_2.md +459 -0
- package/integrations/codex/skills/owlcoda-runkit/SKILL.md +408 -0
- package/integrations/codex/skills/owlcoda-runkit/agents/openai.yaml +4 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/agents-snippet.md +7 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +10 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/coverage-adopt-request.json +26 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/execution-delivery-packet.json +13 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/finalize-request.json +18 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/goal-contract.json +11 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/profiles.json +9 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/ready-for-commit-request.json +11 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/resource-preflight-request.json +56 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/resume-request.json +10 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/snapshot-request.json +23 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/verification-context.json +15 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/verification-receipt.json +11 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/verify-plan-request.json +31 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/visual-smoke-request.json +32 -0
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/worker-lease.json +7 -0
- package/package.json +24 -0
- package/packages/attest/LICENSE +674 -0
- package/packages/attest/README.md +63 -0
- package/packages/attest/cli/owlcoda-attest.mjs +155 -0
- package/packages/attest/consumer-surface-v1.json +255 -0
- package/packages/attest/distribution-manifest-v1.json +104 -0
- package/packages/attest/fixtures/bad/accepted-authority-leak.json +7 -0
- package/packages/attest/fixtures/bad/accepted-failed-receipt.json +7 -0
- package/packages/attest/fixtures/bad/active-context-binding-mismatch.json +7 -0
- package/packages/attest/fixtures/bad/active-source-binding-mismatch.json +7 -0
- package/packages/attest/fixtures/bad/context-fingerprint-mismatch.json +7 -0
- package/packages/attest/fixtures/bad/duplicate-object-key.json +8 -0
- package/packages/attest/fixtures/bad/multiple-active-leaves.json +10 -0
- package/packages/attest/fixtures/bad/orphan-replacement.json +7 -0
- package/packages/attest/fixtures/bad/root-shape-extra-property.json +8 -0
- package/packages/attest/fixtures/bad/source-fingerprint-mismatch.json +7 -0
- package/packages/attest/fixtures/good/accepted-replacement-chain.json +59 -0
- package/packages/attest/fixtures/good/blocked-single-leaf.json +9 -0
- package/packages/attest/fixtures/index.json +90 -0
- package/packages/attest/sbom.spdx.json +33 -0
- package/packages/attest/schemas/attestation-ref-v1.schema.json +44 -0
- package/packages/attest/schemas/attestation-result-v1.schema.json +163 -0
- package/packages/attest/schemas/offline-attestation-bundle-v1.schema.json +30 -0
- package/packages/attest/schemas/public-verification-bundle-v1.schema.json +74 -0
- package/packages/attest/schemas/quick-verification-receipt-v1.schema.json +219 -0
- package/packages/attest/schemas/workspace-snapshot-v1.schema.json +135 -0
- package/packages/attest/src/canonical.mjs +12 -0
- package/packages/attest/src/formal.mjs +762 -0
- package/packages/attest/src/index.mjs +113 -0
- package/packages/attest/src/offline-bundle.mjs +108 -0
- package/packages/attest/src/quick-receipt-contract.mjs +156 -0
- package/packages/attest/src/quick.mjs +274 -0
- package/packages/attest/src/reference-contract.mjs +64 -0
- package/packages/attest/src/reference.mjs +131 -0
- package/packages/attest/src/workspace-snapshot.mjs +171 -0
- package/registry-release-policy-v1.json +34 -0
- package/sbom.spdx.json +39 -0
- package/scripts/runkit-contract/acceptance-evidence.mjs +103 -0
- package/scripts/runkit-contract/core-contract.mjs +392 -0
- package/scripts/runkit-contract/coverage-adoption.mjs +414 -0
- package/scripts/runkit-contract/delivery-create.mjs +252 -0
- package/scripts/runkit-contract/delivery-selection.mjs +31 -0
- package/scripts/runkit-contract/finalize.mjs +790 -0
- package/scripts/runkit-contract/inspect-presentation.mjs +183 -0
- package/scripts/runkit-contract/install-codex-skill.mjs +239 -0
- package/scripts/runkit-contract/lease-lifecycle.mjs +324 -0
- package/scripts/runkit-contract/lifecycle-orchestration.mjs +415 -0
- package/scripts/runkit-contract/offline-store.mjs +248 -0
- package/scripts/runkit-contract/profile-impact.mjs +223 -0
- package/scripts/runkit-contract/provenance-common.mjs +153 -0
- package/scripts/runkit-contract/quick-attest.mjs +4 -0
- package/scripts/runkit-contract/quick-canonical.mjs +41 -0
- package/scripts/runkit-contract/quick-metrics.mjs +86 -0
- package/scripts/runkit-contract/quick-receipt.mjs +139 -0
- package/scripts/runkit-contract/quick-verify.mjs +201 -0
- package/scripts/runkit-contract/quick-workspace-snapshot.mjs +3 -0
- package/scripts/runkit-contract/ready-for-commit.mjs +188 -0
- package/scripts/runkit-contract/receipt-lineage.mjs +332 -0
- package/scripts/runkit-contract/registry-adoption-gate.mjs +117 -0
- package/scripts/runkit-contract/repair-execution.mjs +997 -0
- package/scripts/runkit-contract/resource-preflight.mjs +829 -0
- package/scripts/runkit-contract/resume-execution.mjs +569 -0
- package/scripts/runkit-contract/runkit-cli.mjs +1214 -0
- package/scripts/runkit-contract/schemas/closeout-receipt-v2.schema.json +42 -0
- package/scripts/runkit-contract/schemas/core-artifact-v2.schema.json +23 -0
- package/scripts/runkit-contract/schemas/core-artifact.schema.json +23 -0
- package/scripts/runkit-contract/schemas/coverage-adopt-request-v1.schema.json +66 -0
- package/scripts/runkit-contract/schemas/engine-pin-v2.schema.json +14 -0
- package/scripts/runkit-contract/schemas/engine-pin.schema.json +14 -0
- package/scripts/runkit-contract/schemas/evidence-coverage-index-v1.schema.json +131 -0
- package/scripts/runkit-contract/schemas/finalize-request-v1.schema.json +131 -0
- package/scripts/runkit-contract/schemas/profiles.schema.json +47 -0
- package/scripts/runkit-contract/schemas/project-config-v2.schema.json +13 -0
- package/scripts/runkit-contract/schemas/project-config.schema.json +13 -0
- package/scripts/runkit-contract/schemas/ready-for-commit-v1.schema.json +26 -0
- package/scripts/runkit-contract/schemas/replayable-evidence-v1.schema.json +82 -0
- package/scripts/runkit-contract/schemas/resource-preflight-request-v1.schema.json +178 -0
- package/scripts/runkit-contract/schemas/resource-preflight-v1.schema.json +153 -0
- package/scripts/runkit-contract/schemas/resume-attempt-v1.schema.json +80 -0
- package/scripts/runkit-contract/schemas/resume-request-v1.schema.json +77 -0
- package/scripts/runkit-contract/schemas/snapshot-v1.schema.json +71 -0
- package/scripts/runkit-contract/schemas/verification-context-v1.schema.json +92 -0
- package/scripts/runkit-contract/schemas/verification-plan-v1.schema.json +150 -0
- package/scripts/runkit-contract/schemas/verification-receipt-v2.schema.json +118 -0
- package/scripts/runkit-contract/schemas/verify-plan-request-v1.schema.json +56 -0
- package/scripts/runkit-contract/schemas/visual-smoke-request-v1.schema.json +64 -0
- package/scripts/runkit-contract/schemas/visual-smoke-result-v1.schema.json +68 -0
- package/scripts/runkit-contract/snapshot.mjs +340 -0
- package/scripts/runkit-contract/source-fingerprint.mjs +404 -0
- package/scripts/runkit-contract/templates/coverage-adopt-request.json +26 -0
- package/scripts/runkit-contract/templates/finalize-request.json +18 -0
- package/scripts/runkit-contract/templates/goal-contract.json +11 -0
- package/scripts/runkit-contract/templates/ready-for-commit-request.json +11 -0
- package/scripts/runkit-contract/templates/resource-preflight-request.json +56 -0
- package/scripts/runkit-contract/templates/resume-request.json +10 -0
- package/scripts/runkit-contract/templates/snapshot-request.json +23 -0
- package/scripts/runkit-contract/templates/verify-plan-request.json +31 -0
- package/scripts/runkit-contract/templates/visual-smoke-request.json +32 -0
- package/scripts/runkit-contract/templates/worker-lease.json +7 -0
- package/scripts/runkit-contract/verification-context.mjs +141 -0
- package/scripts/runkit-contract/verification-plan.mjs +608 -0
- package/scripts/runkit-contract/verification-receipt-gate.mjs +566 -0
- package/scripts/runkit-contract/visual-smoke.mjs +410 -0
package/NOTICE.md
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# NOTICE
|
|
2
|
+
|
|
3
|
+
## OwlCoda Positioning
|
|
4
|
+
|
|
5
|
+
OwlCoda is an independent local AI coding platform. It is not affiliated with
|
|
6
|
+
any external coding assistant vendor.
|
|
7
|
+
|
|
8
|
+
Third-party product names may appear where they are needed for protocol
|
|
9
|
+
interoperability, optional user-provided provider integrations, migration
|
|
10
|
+
history, or competitive analysis. The default npm release package contains the
|
|
11
|
+
OwlCoda runtime, bundled skill resources, branding assets, configuration
|
|
12
|
+
examples, and public release documents. Bundled skills and third-party-derived
|
|
13
|
+
resources keep their own license files and provenance records where applicable.
|
|
14
|
+
|
|
15
|
+
Starting with the `0.15.0` license boundary, the OwlCoda core package is
|
|
16
|
+
released under `GPL-3.0-or-later`. Third-party dependencies and in-tree
|
|
17
|
+
attributions keep their own licenses as listed below; this notice records
|
|
18
|
+
those dependencies and does not override the OwlCoda project license.
|
|
19
|
+
|
|
20
|
+
### What OwlCoda Provides
|
|
21
|
+
|
|
22
|
+
OwlCoda provides:
|
|
23
|
+
- Protocol translation layer (messages API ↔ OpenAI Chat Completions)
|
|
24
|
+
- Local model platform integration (Ollama, LM Studio, vLLM)
|
|
25
|
+
- Native REPL, tool orchestration, and session workflows
|
|
26
|
+
- Production infrastructure (health monitoring, rate limiting, circuit breakers)
|
|
27
|
+
- Extended REPL commands and observability
|
|
28
|
+
|
|
29
|
+
### What OwlCoda Does NOT Provide
|
|
30
|
+
|
|
31
|
+
OwlCoda does not claim to be any third-party coding assistant, does not ship a
|
|
32
|
+
third-party branded UI, and does not rely on an external vendor CLI as its
|
|
33
|
+
primary product surface.
|
|
34
|
+
|
|
35
|
+
### Protocol Interoperability vs Affiliation
|
|
36
|
+
|
|
37
|
+
OwlCoda implements two widely-deployed wire formats so that users can
|
|
38
|
+
plug their existing local runtime into it without rewriting the
|
|
39
|
+
runtime:
|
|
40
|
+
|
|
41
|
+
1. The Messages-shaped API (originated by Anthropic and now implemented
|
|
42
|
+
by many independent open-source servers) — incoming `/v1/messages`
|
|
43
|
+
requests are accepted in this shape and translated as needed.
|
|
44
|
+
2. The OpenAI Chat Completions wire format — outgoing requests to
|
|
45
|
+
user-configured backends use this shape because most local
|
|
46
|
+
inference runtimes (Ollama, LM Studio, vLLM, etc.) expose it.
|
|
47
|
+
|
|
48
|
+
Implementing these wire formats is a technical interoperability
|
|
49
|
+
choice, not a brand affiliation. Where the codebase contains the
|
|
50
|
+
literal strings `Anthropic`, `Anthropic-compatible`,
|
|
51
|
+
`anthropic-version`, `/v1/messages`, or imports the public
|
|
52
|
+
`@anthropic-ai/sdk` package, those references are protocol-level,
|
|
53
|
+
exist solely to maintain over-the-wire compatibility, and do not
|
|
54
|
+
constitute or imply:
|
|
55
|
+
|
|
56
|
+
- endorsement by, or sponsorship from, Anthropic, OpenAI, or any
|
|
57
|
+
other third party;
|
|
58
|
+
- any affiliation, partnership, or contractual relationship with
|
|
59
|
+
those parties; or
|
|
60
|
+
- a claim that OwlCoda is a substitute for, or a derivative of,
|
|
61
|
+
any third-party product.
|
|
62
|
+
|
|
63
|
+
The `@anthropic-ai/sdk` package is listed as a `devDependency` only
|
|
64
|
+
and is used by `tests/sdk-verify.ts` as an interoperability sanity
|
|
65
|
+
check against OwlCoda's own server implementation. It is not loaded
|
|
66
|
+
by the OwlCoda runtime.
|
|
67
|
+
|
|
68
|
+
## Third-Party Source Attributions
|
|
69
|
+
|
|
70
|
+
OwlCoda incorporates source code derived from the following third-party
|
|
71
|
+
projects. Their original copyright notices and MIT permission text are
|
|
72
|
+
reproduced below as required by their licenses.
|
|
73
|
+
|
|
74
|
+
### Ink (https://github.com/vadimdemedes/ink)
|
|
75
|
+
|
|
76
|
+
The `src/ink/` directory contains a fork of the Ink terminal-UI library
|
|
77
|
+
originally authored by Vadim Demedes. OwlCoda's fork extends Ink with
|
|
78
|
+
ScrollBox / viewport-culling / sticky-scroll primitives needed by the
|
|
79
|
+
native REPL, but the underlying reconciler, layout, renderer, DOM, event,
|
|
80
|
+
and component code remain derivative of upstream Ink.
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
MIT License
|
|
84
|
+
|
|
85
|
+
Copyright (c) Vadim Demedes <vadimdemedes@hey.com> (vadimdemedes.com)
|
|
86
|
+
|
|
87
|
+
Permission is hereby granted, free of charge, to any person obtaining a
|
|
88
|
+
copy of this software and associated documentation files (the "Software"),
|
|
89
|
+
to deal in the Software without restriction, including without limitation
|
|
90
|
+
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
91
|
+
and/or sell copies of the Software, and to permit persons to whom the
|
|
92
|
+
Software is furnished to do so, subject to the following conditions:
|
|
93
|
+
|
|
94
|
+
The above copyright notice and this permission notice shall be included
|
|
95
|
+
in all copies or substantial portions of the Software.
|
|
96
|
+
|
|
97
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
98
|
+
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
99
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
100
|
+
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
101
|
+
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
102
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
103
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
A copy of this attribution also lives at `src/ink/ATTRIBUTION.md` so it
|
|
107
|
+
travels with the fork in any redistribution.
|
|
108
|
+
|
|
109
|
+
### Direct Runtime Dependencies
|
|
110
|
+
|
|
111
|
+
OwlCoda's published tarball ships only `dist/`; runtime dependencies are
|
|
112
|
+
resolved by `npm install` and their full license texts are available
|
|
113
|
+
under `node_modules/<pkg>/LICENSE` after install. The list below is
|
|
114
|
+
provided for transparency; it does not replace the per-package license
|
|
115
|
+
files that npm fetches automatically.
|
|
116
|
+
|
|
117
|
+
For GPL-covered npm packages, corresponding source availability is documented
|
|
118
|
+
in `SOURCE.md`. Dependency-license review for GPLv3 compatibility is a release
|
|
119
|
+
gate distinct from the older "does this project depend on GPL code?" check.
|
|
120
|
+
|
|
121
|
+
| Package | License |
|
|
122
|
+
|---|---|
|
|
123
|
+
| `@anthropic-ai/sdk` (devDependency, type-only import + verify script) | MIT |
|
|
124
|
+
| `@commander-js/extra-typings` | MIT |
|
|
125
|
+
| `@growthbook/growthbook` | MIT |
|
|
126
|
+
| `@modelcontextprotocol/sdk` | MIT |
|
|
127
|
+
| `@opentelemetry/*` (api, core, sdk-logs, sdk-metrics, sdk-trace-base, resources, api-logs, semantic-conventions) | Apache-2.0 |
|
|
128
|
+
| `axios`, `chalk`, `chokidar`, `marked`, `react`, `react-reconciler`, `ws`, `zod`, `undici`, `execa`, `turndown`, `xss`, `yaml`, others | MIT |
|
|
129
|
+
| `cacache`, `cli-highlight`, `semver`, `signal-exit`, `yaml` | ISC |
|
|
130
|
+
| `diff` | BSD-3-Clause |
|
|
131
|
+
| `lru-cache` | BlueOak-1.0.0 |
|
|
132
|
+
| `ink` (npm — co-installed alongside the in-tree fork in `src/ink/`) | MIT (Vadim Demedes) |
|
|
133
|
+
|
|
134
|
+
No GPL / AGPL / SSPL / Business Source / Commons Clause / Elastic License
|
|
135
|
+
dependencies are present in the current transitive graph (verified via
|
|
136
|
+
`npm ls --all`). That is a dependency fact, not a statement about OwlCoda's own
|
|
137
|
+
project license.
|
package/README.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# OwlRunKit
|
|
2
|
+
|
|
3
|
+
OwlRunKit is OwlCoda's project-owned execution and evidence engine, released
|
|
4
|
+
with its own version lifecycle.
|
|
5
|
+
|
|
6
|
+
It keeps bounded agent work inspectable and recoverable through goal
|
|
7
|
+
contracts, exact writer leases, source-bound delivery packets, verification
|
|
8
|
+
receipts, deterministic repair, accepted or blocked closeout, and explicit
|
|
9
|
+
release authority.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install --save-exact owlrunkit@0.13.0
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Initialize and inspect a project:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
owlrunkit init --workspace /absolute/path/to/project
|
|
21
|
+
owlrunkit inspect --workspace /absolute/path/to/project --json
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The package also includes the read-only verifier:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
owlrunkit-attest /absolute/path/to/receipt.json
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
RunKit belongs to the OwlCoda product family and source repository, but its
|
|
31
|
+
npm version is independent from the `owlcoda` CLI version.
|
|
32
|
+
|
|
33
|
+
RunKit does not grant Git, release, publish, deploy, or business authority.
|
|
34
|
+
Those remain explicit external decisions even when verification passes.
|
|
35
|
+
|
|
36
|
+
## Requirements
|
|
37
|
+
|
|
38
|
+
- Node.js 20.19 or newer
|
|
39
|
+
- a local project directory
|
|
40
|
+
- no network access for normal verification and recovery operations
|
|
41
|
+
|
|
42
|
+
## License
|
|
43
|
+
|
|
44
|
+
GPL-3.0-or-later. See `LICENSE` and `NOTICE.md`.
|
package/SOURCE.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Source
|
|
2
|
+
|
|
3
|
+
OwlRunKit is maintained in the private OwlCoda source repository. The npm
|
|
4
|
+
tarball contains the complete JavaScript source for the published runtime and
|
|
5
|
+
read-only verifier; it does not contain generated minified binaries.
|
|
6
|
+
|
|
7
|
+
The authoritative release is identified by the npm registry version, shasum,
|
|
8
|
+
integrity, and tarball URL. Local directories, `file:` dependencies, local
|
|
9
|
+
tarballs, Git URLs, workspace links, and mutable dist-tags are not accepted as
|
|
10
|
+
formal cross-project adoption evidence.
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# OwlCoda RunKit Contract v0.1
|
|
2
|
+
|
|
3
|
+
Status: **frozen for Codex-side project execution**
|
|
4
|
+
Frozen at: 2026-07-13
|
|
5
|
+
Runner prerequisite: Node.js 20+
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
RunKit Contract v0.1 defines the smallest reusable execution contract proven while developing OwlCoda inside Codex. It coordinates project-owned truth, bounded workers, delivery evidence, stage verification, invalidation and replacement without relying on chat history or agent memory.
|
|
10
|
+
|
|
11
|
+
This is a control and evidence contract. It is not an OwlCoda product API, a workflow designer, a memory system or a release system.
|
|
12
|
+
|
|
13
|
+
## Frozen principles
|
|
14
|
+
|
|
15
|
+
1. **Project-owned truth** — goals, packets, profiles, receipts and decisions live as project artifacts. Agent memory may help locate them but is never authoritative.
|
|
16
|
+
2. **One owner per write scope** — every work item has an explicit lease and owned paths. Parallelism is allowed only across non-overlapping scopes.
|
|
17
|
+
3. **Complete a phase before stage verification** — implementation lanes may batch a coherent phase and stop at `ready_for_stage_verification`; the stage gate runs once after all dependencies are fresh.
|
|
18
|
+
4. **Evidence travels with delivery** — a delivery packet records scoped whole-file hashes, canonical fingerprint, commands already run and repository actions. The controller verifies hashes instead of repeating covered commands.
|
|
19
|
+
5. **Stale evidence fails before execution** — a scoped source mismatch returns `invalidated_by_concurrent_write`; verification commands must remain at zero until a fresh replacement packet is valid.
|
|
20
|
+
6. **Uncovered change fails closed** — if no profile covers a changed path, the decision is `full_profile_required`, never an empty successful selection.
|
|
21
|
+
7. **Lineage validity is not verification success** — a structurally valid receipt graph becomes accepted only when the active receipt binds the current source fingerprint, exact selected profiles and real command receipts.
|
|
22
|
+
8. **Append-only replacement** — invalidated receipts remain immutable. A replacement references the parent receipt SHA-256 and becomes the only active leaf.
|
|
23
|
+
9. **Foreign projects remain project-owned** — read-only shadow runs may read another repository but must write all runner artifacts and scratch outside that repository and prove its start/end state is unchanged.
|
|
24
|
+
10. **Runtime truth beats transcript appearance** — gate decisions consume files, hashes, exit codes and receipts, not worker summaries.
|
|
25
|
+
|
|
26
|
+
### Additive clarifications
|
|
27
|
+
|
|
28
|
+
These rules narrow unsafe or ambiguous inputs without changing the frozen v0.1 semantics:
|
|
29
|
+
|
|
30
|
+
1. **Runtime state is never product source** — `.owlcoda/runkit` and every descendant are reserved. They are forbidden in delivery `changedFiles`, verification profile path rules and lease owned paths. A violation is `invalid_input` / exit `3`, never a source change or profile match.
|
|
31
|
+
2. **One execution pins one engine** — execution creation records `contractVersion`, `coreVersion`, `coreManifestSha256` and an immutable or content-addressed `coreSourceRef`. Every later core invocation compares this pin before acting. A mismatch fails closed as `engine_changed_during_execution` / exit `2`; it cannot silently mix implementations inside one lineage.
|
|
32
|
+
3. **Core and producer data are separate** — acceptance semantics consume the contract version, pinned core identity and core payload. Producer identity is provenance. Adapter-specific extensions are namespaced and cannot add authority or change acceptance.
|
|
33
|
+
4. **Configuration is data, not authority** — project configuration, profiles and command declarations never authorize Git, publish, deploy, destructive actions, credential use or foreign-project writes.
|
|
34
|
+
|
|
35
|
+
## Artifact chain
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
GoalContract
|
|
39
|
+
-> ExecutionPlan
|
|
40
|
+
-> WorkItem + WorkerLease
|
|
41
|
+
-> ExecutionDeliveryPacket
|
|
42
|
+
-> VerificationProfile selection
|
|
43
|
+
-> Stage VerificationReceipt
|
|
44
|
+
-> GateDecision
|
|
45
|
+
-> CloseoutReceipt
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`events.jsonl` is the append-only transition ledger. `execution-plan.json` is a derived mutable snapshot and must not override contradictory events or receipts.
|
|
49
|
+
|
|
50
|
+
## Delivery source contract
|
|
51
|
+
|
|
52
|
+
An `ExecutionDeliveryPacket` contains exactly one source hash map:
|
|
53
|
+
|
|
54
|
+
- `changedFiles.files`, or
|
|
55
|
+
- `changedFiles.wholeFileSha256`.
|
|
56
|
+
|
|
57
|
+
Both shapes present is malformed. Paths must be safe repository-relative paths: no absolute path, Windows rooted or drive-relative path, backslash, NUL, empty segment, `.` or `..`. Selected sources must be regular files inside the physical workspace root; symlinks and root escapes are rejected. The reserved `.owlcoda/runkit` subtree is rejected even though it is otherwise repository-relative, preventing receipts from recursively changing the fingerprint they describe.
|
|
58
|
+
|
|
59
|
+
Canonical stream:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
<path><TAB>sha256:<lowercase-whole-file-sha256><LF>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Rows are ordered by ascending Unicode code units, independent of locale and ICU. The source fingerprint is SHA-256 of the UTF-8 bytes of the canonical stream.
|
|
66
|
+
|
|
67
|
+
Source gate results and process exit codes:
|
|
68
|
+
|
|
69
|
+
- `valid` — exit `0`
|
|
70
|
+
- `invalidated_by_concurrent_write` — exit `2`
|
|
71
|
+
- `malformed_packet` — exit `3`
|
|
72
|
+
|
|
73
|
+
## Verification profile contract
|
|
74
|
+
|
|
75
|
+
A profile has a stable `id` and path rules. v0.1 supports only:
|
|
76
|
+
|
|
77
|
+
- exact safe repository-relative path;
|
|
78
|
+
- safe non-empty `directory/**` prefix.
|
|
79
|
+
|
|
80
|
+
For legal inputs the resolver returns deterministic, de-duplicated profile IDs. Any uncovered changed path returns:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"decision": "full_profile_required",
|
|
85
|
+
"profileIds": [],
|
|
86
|
+
"uncoveredPaths": ["..."]
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Unsafe input is `invalid_input` / exit `3`; it is not converted into a profile decision. Profiles may not name `.owlcoda/runkit`, `.owlcoda/runkit/**` or a descendant exact path.
|
|
91
|
+
|
|
92
|
+
## Receipt lineage contract
|
|
93
|
+
|
|
94
|
+
Each lineage entry contains:
|
|
95
|
+
|
|
96
|
+
- a 64-hex `receiptSha256` matching canonical receipt content;
|
|
97
|
+
- a receipt object;
|
|
98
|
+
- optional 64-hex `parentReceiptSha256` referencing an earlier invalidated receipt.
|
|
99
|
+
|
|
100
|
+
Receipt SHA values are globally unique. The lineage rejects malformed entries, hash mismatch, missing or non-prior parent, parent with the wrong state, cycles, branches and multiple active leaves.
|
|
101
|
+
|
|
102
|
+
Lineage CLI exit codes:
|
|
103
|
+
|
|
104
|
+
- structurally valid — exit `0`
|
|
105
|
+
- well-formed but invalid — exit `2`
|
|
106
|
+
- malformed input — exit `3`
|
|
107
|
+
|
|
108
|
+
## Joint verification gate
|
|
109
|
+
|
|
110
|
+
The active receipt must bind:
|
|
111
|
+
|
|
112
|
+
- a current source gate with `status=valid` and exit `0`;
|
|
113
|
+
- the exact recomputed source fingerprint;
|
|
114
|
+
- the exact targeted profile IDs;
|
|
115
|
+
- a valid single-leaf receipt lineage.
|
|
116
|
+
|
|
117
|
+
For `status=passed`, `commandRuns` must be greater than zero and equal the number of command receipts. Every command receipt requires a non-empty command, exit `0`, and SHA-256 for stdout and stderr.
|
|
118
|
+
|
|
119
|
+
A zero-command receipt may remain `shadow_validated` or `ready_for_verification`, but it cannot be accepted as passed.
|
|
120
|
+
|
|
121
|
+
## Stage verification economy
|
|
122
|
+
|
|
123
|
+
- Implementation lanes complete a coherent phase before testing when the round contract selects stage verification.
|
|
124
|
+
- A stage owner consumes all fresh packets and runs one declared top-level profile.
|
|
125
|
+
- The controller validates the packet and receipt hashes and does not repeat covered commands.
|
|
126
|
+
- A failed stage is classified before repair. Only the affected stage is rerun after a replacement packet; unrelated profiles remain valid.
|
|
127
|
+
- Full regression belongs at an integration, merge or release boundary, not every feature delivery.
|
|
128
|
+
|
|
129
|
+
## Foreign-project read-only mode
|
|
130
|
+
|
|
131
|
+
Before and after the stage, record at minimum:
|
|
132
|
+
|
|
133
|
+
- foreign HEAD;
|
|
134
|
+
- raw Git status bytes and SHA-256;
|
|
135
|
+
- a declared workspace manifest fingerprint appropriate to the project;
|
|
136
|
+
- selected file hashes.
|
|
137
|
+
|
|
138
|
+
All foreign build scratch and receipts must be redirected to the controller project's artifact directory. Any start/end mismatch is `foreign_workspace_changed_during_shadow`, even when the verifier itself passed.
|
|
139
|
+
|
|
140
|
+
## Provenance
|
|
141
|
+
|
|
142
|
+
- Run001 proved leases, receipt-first handoff, targeted repair and controller economy.
|
|
143
|
+
- Run002 proved a packaged provider-backed synthetic coding loop and restart recovery.
|
|
144
|
+
- Run003 proved stale packet invalidation, minimal affected profile selection and append-only replacement.
|
|
145
|
+
- Run004 proved the contract against the foreign Swift/macOS OwlOps project with one stage command, one focused Swift verifier and zero foreign repository writes.
|
|
146
|
+
|
|
147
|
+
The exact evidence hashes are recorded in the Run004 manifest and closeout receipt.
|
|
148
|
+
|
|
149
|
+
## Versioning rule
|
|
150
|
+
|
|
151
|
+
The semantics above are frozen as v0.1. New optional fields are allowed when they do not weaken these invariants. Any change to path grammar, canonicalization, exit meanings, invalidation timing, receipt parentage, acceptance evidence or foreign-write policy requires a new contract version.
|
|
152
|
+
|
|
153
|
+
## Not yet included
|
|
154
|
+
|
|
155
|
+
- reusable npm package or global installation;
|
|
156
|
+
- Codex plugin or skill distribution;
|
|
157
|
+
- remote worker transport;
|
|
158
|
+
- UI/workflow designer;
|
|
159
|
+
- cloud/team memory;
|
|
160
|
+
- automatic commit, publish or deployment authority.
|