owlrunkit 0.17.2 → 0.18.1
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 +64 -0
- package/README.md +117 -14
- package/docs/architecture/OWLCODA_RUNKIT_017_AGENT_NATIVE_PRODUCT_DEFINITION.md +2 -3
- package/docs/architecture/OWLCODA_RUNKIT_018_PROJECT_DRIVER_PRODUCT_DEFINITION.md +165 -0
- package/docs/architecture/OWLCODA_RUNKIT_USAGE_MODE_SELECTION_PRODUCT_DECISION_20260811.md +142 -0
- package/integrations/codex/skills/owlcoda-runkit/SKILL.md +127 -23
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
- package/package.json +2 -2
- package/packages/attest/distribution-manifest-v1.json +10 -0
- package/packages/attest/src/quick.mjs +10 -0
- package/registry-release-policy-v1.json +5 -5
- package/sbom.spdx.json +5 -5
- package/scripts/runkit-contract/assurance-router.mjs +28 -20
- package/scripts/runkit-contract/core-contract.mjs +7 -1
- package/scripts/runkit-contract/inspect-presentation.mjs +38 -5
- package/scripts/runkit-contract/install-codex-skill.mjs +60 -1
- package/scripts/runkit-contract/onboarding-doctor.mjs +19 -1
- package/scripts/runkit-contract/profile-onboarding.mjs +597 -22
- package/scripts/runkit-contract/project-cli-resolver.mjs +6 -0
- package/scripts/runkit-contract/quick-attest.mjs +1 -0
- package/scripts/runkit-contract/quick-metrics.mjs +43 -5
- package/scripts/runkit-contract/quick-verify.mjs +15 -4
- package/scripts/runkit-contract/runkit-cli.mjs +747 -20
- package/scripts/runkit-contract/schemas/profile-reconcile-plan-v1.schema.json +105 -0
- package/scripts/runkit-contract/schemas/profile-reconcile-receipt-v1.schema.json +60 -0
- package/scripts/runkit-contract/schemas/team-project-event-v1.schema.json +16 -1
- package/scripts/runkit-contract/schemas/team-project-status-v1.schema.json +34 -1
- package/scripts/runkit-contract/schemas/team-project-successor-receipt-v1.schema.json +204 -0
- package/scripts/runkit-contract/schemas/usage-mode-recommendation-v1.schema.json +136 -0
- package/scripts/runkit-contract/team-project-successor.mjs +1176 -0
- package/scripts/runkit-contract/team-project.mjs +1082 -43
- package/scripts/runkit-contract/templates/assurance-request.json +6 -0
- package/scripts/runkit-contract/usage-mode.mjs +229 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,69 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.18.1
|
|
4
|
+
|
|
5
|
+
- Adds read-only `mode recommend` and `mode status` commands with five
|
|
6
|
+
user-facing presets over independent continuity and assurance dimensions.
|
|
7
|
+
- Routes long-running, interruption recovery, and ordinary reversible project
|
|
8
|
+
mutation to Project Driver continuity without automatically forcing Formal.
|
|
9
|
+
Multi-writer, permission/security, funds, irreversible, rollback-uncertain,
|
|
10
|
+
schema/data migration, and explicit acceptance facts still force Formal.
|
|
11
|
+
- Fixes Quick metrics to report receipt-time pass, fail, and source mutation
|
|
12
|
+
independently of later workspace drift.
|
|
13
|
+
- Returns the standalone `quick-attest` command from Quick results and adds
|
|
14
|
+
action-specific `quick-attest --help`.
|
|
15
|
+
- Diagnoses managed Skill/config Core version drift independently from installed
|
|
16
|
+
file integrity.
|
|
17
|
+
- Aligns `doctor` with full profile validation, stops profile detection from
|
|
18
|
+
inventing absent `src/**` and `tests/**` surfaces, and adds atomic profile
|
|
19
|
+
reconciliation for an existing project.
|
|
20
|
+
- Adds action-specific `adopt --help` and keeps top-level inspection focused on
|
|
21
|
+
the Project Driver's dominant project gap when one exists.
|
|
22
|
+
- Preserves `authorizationGranted=false` and the separation between workflow,
|
|
23
|
+
acceptance, Git, release, deployment, production, and business authority.
|
|
24
|
+
|
|
25
|
+
## 0.18.0
|
|
26
|
+
|
|
27
|
+
- Introduces the Project Driver product path for continuity across Agents and
|
|
28
|
+
sessions, with typed direct `init`, `assign`, `checkpoint`, `handoff`,
|
|
29
|
+
`decision`, `verification`, `integrate`, `status`, `takeover`, and
|
|
30
|
+
bounded `successor` actions.
|
|
31
|
+
- Projects a deterministic dominant gap, next action, next actor, and headline
|
|
32
|
+
from durable project artifacts without accepting guessed percentages or
|
|
33
|
+
inventing completion.
|
|
34
|
+
- Keeps legacy `--request` event input for compatibility while removing the
|
|
35
|
+
need for normal users to author request, event, receipt, or hash JSON.
|
|
36
|
+
- Clarifies that ordinary multi-Agent coordination does not automatically mean
|
|
37
|
+
Formal; the assurance boundary follows the underlying risk and authority.
|
|
38
|
+
- Adds a deferred-verification ledger that records stable unrun check IDs,
|
|
39
|
+
reason, owner, and due integration gate without executing tests. Due open
|
|
40
|
+
checks block only their declared gate; closure requires verification evidence
|
|
41
|
+
or an already resolved project decision that says the check is no longer
|
|
42
|
+
required.
|
|
43
|
+
- Keeps coverage reuse in the existing verification-plan/receipt substrate, so
|
|
44
|
+
Project Driver status exposes the remaining gap instead of creating a second
|
|
45
|
+
test engine or repeatedly rerunning covered checks.
|
|
46
|
+
- Defines the 0.18 Project Driver as a bounded surface for new projects and
|
|
47
|
+
controlled dogfood. Its product name does not claim to be a general
|
|
48
|
+
long-running, multi-phase, or enterprise control plane.
|
|
49
|
+
- Adds an Owner-invoked Project Successor for one derived-completed active V1
|
|
50
|
+
project: archive the exact prior bytes under a content-addressed identity,
|
|
51
|
+
install one different empty V1 project at the same active path, and recover
|
|
52
|
+
the atomic transition from a durable journal after interruption.
|
|
53
|
+
- Rejects incomplete or changed project truth, the same project identity,
|
|
54
|
+
symlinked inputs, archive collisions, and competing successor transactions.
|
|
55
|
+
Completed archives are sealed against ordinary writes; exact retry and the
|
|
56
|
+
next successor boundary validate every completed journal's archive bytes and
|
|
57
|
+
seal before active truth or a new journal can change. Status and takeover do
|
|
58
|
+
not perform that historical scan. Incomplete projects stay on their current
|
|
59
|
+
truth. The receipt grants no Git, release, publication, deployment, or
|
|
60
|
+
adoption authority. Handoff and takeover do not automatically promote an
|
|
61
|
+
authoritative writer.
|
|
62
|
+
- Keeps Core successor, release compatibility, publication, Project Successor,
|
|
63
|
+
and project adoption as separate authority boundaries.
|
|
64
|
+
- Preserves the published `0.17.2` Core and package as the trusted rollback
|
|
65
|
+
prior for the independent `0.18.0` candidate.
|
|
66
|
+
|
|
3
67
|
## 0.17.2
|
|
4
68
|
|
|
5
69
|
- Treats valid profile launcher portability warnings as non-blocking maintenance,
|
package/README.md
CHANGED
|
@@ -1,14 +1,31 @@
|
|
|
1
1
|
# OwlRunKit
|
|
2
2
|
|
|
3
|
-
OwlRunKit is OwlCoda's
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
OwlRunKit is OwlCoda's Project Driver for cross-Agent project continuity and
|
|
4
|
+
progression. Its execution, evidence, verification, and recovery substrate
|
|
5
|
+
makes that continuity inspectable and recoverable. RunKit 0.18 keeps work
|
|
6
|
+
moving across Agents and sessions through a typed direct flow while preserving
|
|
7
|
+
the existing assurance, source, and evidence boundaries.
|
|
8
|
+
|
|
9
|
+
RunKit 0.18.1 adds a human-first usage-mode recommendation that selects
|
|
10
|
+
continuity and assurance independently. It keeps ordinary development light
|
|
11
|
+
while preserving mandatory Formal routing for material safety and authority
|
|
12
|
+
facts.
|
|
13
|
+
|
|
14
|
+
The 0.18 Project Driver is a bounded surface for new projects and controlled
|
|
15
|
+
dogfood. Its product name does not claim to be a general long-running,
|
|
16
|
+
multi-phase, or enterprise control plane. Version 0.18 adds one bounded
|
|
17
|
+
Project Successor operation: an Owner may archive the exact prior bytes of a
|
|
18
|
+
derived-completed active project and install a different, empty V1 project as the sole
|
|
19
|
+
active project. It is not a general migration or multi-project writer system.
|
|
20
|
+
Incomplete projects stay on their current truth. Handoff and takeover do not
|
|
21
|
+
automatically promote an authoritative writer. Core successor, release
|
|
22
|
+
compatibility, publication, Project Successor, and project adoption remain
|
|
23
|
+
separate authority boundaries.
|
|
7
24
|
|
|
8
25
|
## Install
|
|
9
26
|
|
|
10
27
|
```bash
|
|
11
|
-
npm install --save-exact owlrunkit@0.
|
|
28
|
+
npm install --save-exact owlrunkit@0.18.1
|
|
12
29
|
```
|
|
13
30
|
|
|
14
31
|
The `owlrunkit` bootstrap uses the project's exact locally bound CLI for
|
|
@@ -24,24 +41,110 @@ the project Config must independently bind the same Core.
|
|
|
24
41
|
owlrunkit --version
|
|
25
42
|
owlrunkit init --workspace /absolute/path/to/project
|
|
26
43
|
owlrunkit doctor --workspace /absolute/path/to/project
|
|
44
|
+
owlrunkit mode recommend --workspace /absolute/path/to/project
|
|
45
|
+
owlrunkit mode status --workspace /absolute/path/to/project
|
|
27
46
|
```
|
|
28
47
|
|
|
29
|
-
|
|
48
|
+
`mode recommend` is read-only and defaults to human output; add `--json` for a
|
|
49
|
+
machine contract. The five user modes are presets over `continuity`
|
|
50
|
+
(`none | project_driver`) and `assurance` (`none | quick | formal`). They never
|
|
51
|
+
grant Git, release, deployment, production, or business authority.
|
|
30
52
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
53
|
+
## Project Driver: Coordinate a multi-Agent project
|
|
54
|
+
|
|
55
|
+
RunKit 0.18 keeps the project alive independently of any one Agent or chat.
|
|
56
|
+
Initialize a definition, then use typed direct commands for the normal
|
|
57
|
+
assignment, checkpoint, handoff, decision, integration, status, and takeover
|
|
58
|
+
flow:
|
|
35
59
|
|
|
36
60
|
```bash
|
|
61
|
+
cp node_modules/owlrunkit/scripts/runkit-contract/templates/team-project-definition.json ./project-definition.json
|
|
37
62
|
owlrunkit project init --workspace . \
|
|
38
|
-
--definition
|
|
39
|
-
owlrunkit project assign --workspace . \
|
|
40
|
-
--
|
|
63
|
+
--definition ./project-definition.json
|
|
64
|
+
owlrunkit project assign --workspace . --assignment-id assign-1 \
|
|
65
|
+
--at 2026-08-09T00:00:00.000Z --work-item work-item-1 --agent agent-runtime
|
|
66
|
+
owlrunkit project checkpoint --workspace . --checkpoint-id checkpoint-1 \
|
|
67
|
+
--at 2026-08-09T00:05:00.000Z --assignment-id assign-1 --work-item work-item-1 \
|
|
68
|
+
--state active --summary 'Implement the bounded work item' \
|
|
69
|
+
--completed-units 0 \
|
|
70
|
+
--next 'Run the focused verification'
|
|
71
|
+
owlrunkit project handoff --workspace . --handoff-id handoff-1 \
|
|
72
|
+
--at 2026-08-09T00:10:00.000Z --assignment-id assign-1 --work-item work-item-1 \
|
|
73
|
+
--from-agent agent-runtime --to-agent agent-successor \
|
|
74
|
+
--summary 'Source work is ready for continuation' --next 'Run verification' \
|
|
75
|
+
--evidence evidence/source.txt
|
|
76
|
+
owlrunkit project assign --workspace . --assignment-id assign-2 \
|
|
77
|
+
--at 2026-08-09T00:11:00.000Z --work-item work-item-1 \
|
|
78
|
+
--agent agent-successor --supersedes assign-1
|
|
79
|
+
owlrunkit project decision --workspace . --open --decision-id decision-1 \
|
|
80
|
+
--at 2026-08-09T00:12:00.000Z --title 'Choose the accepted source path' \
|
|
81
|
+
--question 'Which source path should continue?' --owner-agent agent-successor \
|
|
82
|
+
--blocking-work-item work-item-1 --option accepted --option rejected
|
|
83
|
+
owlrunkit project decision --workspace . --resolve --decision-id decision-1 \
|
|
84
|
+
--at 2026-08-09T00:13:00.000Z --resolution 'Use the accepted source path' \
|
|
85
|
+
--rationale 'It preserves the project contract' --evidence evidence/decision.txt
|
|
86
|
+
owlrunkit project checkpoint --workspace . --checkpoint-id checkpoint-2 \
|
|
87
|
+
--at 2026-08-09T00:14:00.000Z --assignment-id assign-2 \
|
|
88
|
+
--work-item work-item-1 --state completed --completed-units 1 \
|
|
89
|
+
--summary 'Accepted work is complete' --evidence evidence/completion.txt
|
|
90
|
+
owlrunkit project verification --workspace . --defer \
|
|
91
|
+
--verification-id release-batch --at 2026-08-09T00:14:30.000Z \
|
|
92
|
+
--work-item work-item-1 --owner-agent agent-successor \
|
|
93
|
+
--check typecheck --check full-suite --check package-smoke \
|
|
94
|
+
--reason 'Run broad checks once after the related changes settle' \
|
|
95
|
+
--due-gate integration-ready
|
|
96
|
+
# After those checks run once against the frozen candidate:
|
|
97
|
+
owlrunkit project verification --workspace . --close \
|
|
98
|
+
--verification-id release-batch --at 2026-08-09T00:14:45.000Z \
|
|
99
|
+
--disposition verified --summary 'The batched release checks passed' \
|
|
100
|
+
--evidence evidence/release-batch.txt
|
|
101
|
+
owlrunkit project integrate --workspace . --gate integration-ready \
|
|
102
|
+
--at 2026-08-09T00:15:00.000Z --summary 'Integration gate evidence is complete' \
|
|
103
|
+
--evidence evidence/integration.txt
|
|
41
104
|
owlrunkit project status --workspace .
|
|
42
|
-
owlrunkit project takeover --workspace . --agent agent-
|
|
105
|
+
owlrunkit project takeover --workspace . --agent agent-successor
|
|
106
|
+
owlrunkit project successor --workspace . --transition-id project-next-001 \
|
|
107
|
+
--at 2026-08-09T00:16:00.000Z --definition ./next-project-definition.json \
|
|
108
|
+
--reason 'Archive the completed project and begin the next bounded project'
|
|
43
109
|
```
|
|
44
110
|
|
|
111
|
+
Normal users supply the one definition JSON to `init`, then use typed flags and
|
|
112
|
+
values. They do not need to author request, event, receipt, or hash JSON. The
|
|
113
|
+
legacy `--request <event.json>` path remains available for existing automation
|
|
114
|
+
and compatibility. Multiple Agents do not make project coordination Formal by
|
|
115
|
+
themselves. This flow does not make project coordination Formal by itself; the
|
|
116
|
+
assurance lane follows the underlying high-risk integration,
|
|
117
|
+
release, production, migration, destructive, or explicit Formal-acceptance boundary.
|
|
118
|
+
|
|
119
|
+
`project verification --defer` is a small deferred-verification ledger, not a
|
|
120
|
+
test scheduler. It records stable check IDs, why they were intentionally not
|
|
121
|
+
run yet, the responsible Agent, and the integration gate before which they
|
|
122
|
+
must close. `status` and `takeover` keep that gap visible without repeatedly
|
|
123
|
+
executing anything; the due gate stays blocked while the record is open.
|
|
124
|
+
Closing as `verified` requires evidence. Closing a check that is no longer
|
|
125
|
+
required uses `--disposition no_longer_required` and must reference an already
|
|
126
|
+
resolved project decision. RunKit never turns either disposition into Git,
|
|
127
|
+
release, deployment, or business authority.
|
|
128
|
+
|
|
129
|
+
The existing coverage-adoption and verification-plan surfaces remain the
|
|
130
|
+
source for reusable receipts and exact pending commands in the Formal lane.
|
|
131
|
+
The Project Driver records the remaining coordination gap; it does not create
|
|
132
|
+
a second test engine or ask an Agent to repeat already covered checks.
|
|
133
|
+
|
|
134
|
+
`project successor` is available only after the current project derives
|
|
135
|
+
`overall=completed`. It keeps the active path at
|
|
136
|
+
`.owlcoda/runkit/project`, moves the exact prior bytes into a
|
|
137
|
+
content-addressed `project-archives` entry, and installs a new definition with
|
|
138
|
+
an empty event directory. A durable transition journal makes the same request
|
|
139
|
+
restartable after interruption; a competing transition, symlink, archive
|
|
140
|
+
collision, changed truth, same project identity, or incomplete project fails
|
|
141
|
+
closed. Archived regular files and directories are sealed against ordinary
|
|
142
|
+
writes with the receipt-bound `0444`/`0555` policy before completion. Archive
|
|
143
|
+
integrity and that seal are validated on an exact retry and before any later
|
|
144
|
+
successor; `project status` and `project takeover` remain active-truth
|
|
145
|
+
projections and do not perform a broad historical archive scan. The receipt
|
|
146
|
+
always keeps Git, release, publish, deploy, and adoption authority false.
|
|
147
|
+
|
|
45
148
|
`project status` reports every Agent's active, waiting, completed, and failed
|
|
46
149
|
work; unresolved dependencies and decisions; the ready queue; critical work;
|
|
47
150
|
and integration gates. It does not accept a guessed completion percentage.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# OwlRunKit 0.17 Agent-Native Product Definition
|
|
2
2
|
|
|
3
|
-
Status:
|
|
3
|
+
Status: released in `owlrunkit@0.17.2` and integrated into the private mainline.
|
|
4
4
|
|
|
5
5
|
## Product purpose
|
|
6
6
|
|
|
@@ -150,5 +150,4 @@ The release is acceptable only when all of these are mechanically demonstrated:
|
|
|
150
150
|
9. existing 0.16 execution, migration, fleet, deployment, and release contracts
|
|
151
151
|
remain compatible;
|
|
152
152
|
10. the standalone npm artifact is reproducible, scrubbed, identity-bound, and
|
|
153
|
-
|
|
154
|
-
|
|
153
|
+
independently verified after publication.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# OwlCoda RunKit 0.18 Project Driver Product Definition
|
|
2
|
+
|
|
3
|
+
Status: public product contract for the standalone `owlrunkit@0.18.0` candidate.
|
|
4
|
+
This document defines the normal project-continuity path; it does not grant Git,
|
|
5
|
+
release, npm, deployment, production, migration, destructive, or business
|
|
6
|
+
authority.
|
|
7
|
+
|
|
8
|
+
The 0.18 Project Driver is a bounded surface for new projects and controlled
|
|
9
|
+
dogfood. Its product name does not claim to be a general long-running,
|
|
10
|
+
multi-phase, or enterprise control plane. Version 0.18 includes one bounded
|
|
11
|
+
Project Successor lifecycle operation for a derived-completed active V1
|
|
12
|
+
project. It is not a general existing-project migration, multi-project
|
|
13
|
+
registry, or automatic writer-promotion system. Incomplete projects stay on
|
|
14
|
+
their current truth. Handoff and takeover do not automatically promote an
|
|
15
|
+
authoritative writer. Core successor, rollback compatibility, publication,
|
|
16
|
+
Project Successor, and project adoption remain separate authority boundaries.
|
|
17
|
+
|
|
18
|
+
## Product outcome
|
|
19
|
+
|
|
20
|
+
RunKit 0.18 is the Project Driver for work that continues across Agents,
|
|
21
|
+
sessions, interruptions, and handoffs. A user should be able to return to a
|
|
22
|
+
blank session, run `status` or `takeover`, and receive a bounded next action,
|
|
23
|
+
the responsible Agent, the dominant gap, and the evidence needed to proceed.
|
|
24
|
+
The normal recovery target is a useful takeover packet within two minutes on a
|
|
25
|
+
local project with an existing definition and event history.
|
|
26
|
+
|
|
27
|
+
## Normal typed mainline
|
|
28
|
+
|
|
29
|
+
The ordinary user-facing flow is a typed direct CLI surface:
|
|
30
|
+
|
|
31
|
+
1. `project init` accepts one project definition JSON file and creates the
|
|
32
|
+
durable project model.
|
|
33
|
+
2. `project assign` gives a WorkItem to an Agent.
|
|
34
|
+
3. `project checkpoint` records meaningful state and evidence.
|
|
35
|
+
4. `project handoff` transfers a responsibility without overwriting its
|
|
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`
|
|
42
|
+
archives it and installs one fresh project under explicit Owner invocation.
|
|
43
|
+
|
|
44
|
+
Except for the one definition supplied to `init`, normal users provide typed
|
|
45
|
+
flags and values. They do not need to author request, event, receipt, or hash
|
|
46
|
+
JSON. The legacy `--request <event.json>` path remains available for existing
|
|
47
|
+
automation and compatibility, but it is not the product's primary interaction.
|
|
48
|
+
|
|
49
|
+
## Project Driver projection
|
|
50
|
+
|
|
51
|
+
Every status and takeover projection exposes the same deterministic recovery
|
|
52
|
+
spine:
|
|
53
|
+
|
|
54
|
+
- `dominantGap`: the highest-priority unresolved decision, failed WorkItem,
|
|
55
|
+
blocked dependency root, active responsibility, or integration gate;
|
|
56
|
+
- `nextAction`: the next bounded action that is legal from the durable state;
|
|
57
|
+
- `nextActorId`: the Agent responsible for that action when one is known;
|
|
58
|
+
- `headline`: a concise human explanation of the current project state.
|
|
59
|
+
|
|
60
|
+
The projection derives these fields from append-only artifacts. It never accepts
|
|
61
|
+
a guessed percentage, promotes an evidence candidate into business truth,
|
|
62
|
+
invents completion, or overwrites an earlier assignment, handoff, decision, or
|
|
63
|
+
checkpoint.
|
|
64
|
+
|
|
65
|
+
## Continuity actions
|
|
66
|
+
|
|
67
|
+
A handoff preserves the outgoing assignment and records the successor action.
|
|
68
|
+
A decision separates the open question from its later resolution, rationale,
|
|
69
|
+
and evidence. An integration event records that the project gate was reached;
|
|
70
|
+
it is not a Git merge, release, deployment, or publication operation. Status and
|
|
71
|
+
takeover are read-only projections and are safe to repeat after an interruption.
|
|
72
|
+
|
|
73
|
+
## Bounded Project Successor
|
|
74
|
+
|
|
75
|
+
`project successor` is the only 0.18 operation that replaces the active
|
|
76
|
+
Project Driver truth. It first requires the current project to derive
|
|
77
|
+
`overall=completed`; a chat summary, checkpoint claim, or caller flag cannot
|
|
78
|
+
substitute for that projection. The target definition must use a different
|
|
79
|
+
project identity and begins with no events.
|
|
80
|
+
|
|
81
|
+
The operation holds an external lifecycle lock and the active project control
|
|
82
|
+
lock, records a durable transition journal, archives the exact prior bytes of
|
|
83
|
+
every regular file and directory under a content-addressed raw manifest, and atomically installs
|
|
84
|
+
the fresh active project at `.owlcoda/runkit/project`. Exact retries resume
|
|
85
|
+
the journal after the prepared, archived, or active-installed boundaries.
|
|
86
|
+
Before completion, archived regular files and directories are sealed against
|
|
87
|
+
ordinary writes with a receipt-bound `0444`/`0555` policy. An exact retry
|
|
88
|
+
validates that archive's bytes and seal. Before any later successor writes a
|
|
89
|
+
new journal or moves active truth, it validates the archive bound by every
|
|
90
|
+
completed transition journal. Status and takeover remain active-truth
|
|
91
|
+
projections and do not perform this historical scan. Different concurrent
|
|
92
|
+
transitions, leaf or ancestor symlinks, non-regular files, archive collisions,
|
|
93
|
+
truth drift, borrowed events, and ambiguous active state fail closed.
|
|
94
|
+
|
|
95
|
+
This lifecycle operation does not select a new authoritative Agent, migrate an
|
|
96
|
+
incomplete project, merge project histories, discover multiple projects, adopt
|
|
97
|
+
a package, or grant repository or release authority. Its receipt records all
|
|
98
|
+
Git, tag, publish, and deploy actions as false.
|
|
99
|
+
|
|
100
|
+
## Deferred verification without test thrash
|
|
101
|
+
|
|
102
|
+
RunKit may record a `verification_deferred` project event when related changes
|
|
103
|
+
should settle before a focused or broad check is run. The event contains only
|
|
104
|
+
stable check identifiers, the reason for deferral, the responsible Agent, the
|
|
105
|
+
related WorkItem, and the exact integration gate before which it is due. It
|
|
106
|
+
does not contain an executable shell command and does not schedule or run a
|
|
107
|
+
test.
|
|
108
|
+
|
|
109
|
+
An open record becomes the dominant project gap only after the ordinary work
|
|
110
|
+
needed by that gate is complete. The declared gate cannot pass until the record
|
|
111
|
+
closes. A `verified` close requires evidence; a `no_longer_required` close
|
|
112
|
+
requires a previously resolved project decision. The second disposition is
|
|
113
|
+
reported honestly and is never presented as a passing test.
|
|
114
|
+
|
|
115
|
+
Coverage adoption, source-bound receipts, and `verify-plan` remain responsible
|
|
116
|
+
for deciding which Formal commands are already covered and which are pending.
|
|
117
|
+
The Project Driver consumes that outcome as coordination truth rather than
|
|
118
|
+
duplicating the verification engine. This allows an Agent team to batch a
|
|
119
|
+
small, explainable group of related changes and verify it once at the correct
|
|
120
|
+
transition while preserving visible, fail-closed debt.
|
|
121
|
+
|
|
122
|
+
## Hidden trust substrate
|
|
123
|
+
|
|
124
|
+
The typed surface is backed by the existing trust substrate: immutable project
|
|
125
|
+
definition identity, append-only and idempotent events, canonical bytes,
|
|
126
|
+
regular workspace and path checks, source and evidence references, and
|
|
127
|
+
execution-bound lifecycle truth where a WorkItem binds an execution. Config,
|
|
128
|
+
profiles, leases, fingerprints, receipts, and the `.owlcoda/runkit` directory
|
|
129
|
+
remain internal control data; they are not user-supplied authorization.
|
|
130
|
+
The substrate continues to fail closed on malformed, ambiguous, redirected, or
|
|
131
|
+
untrusted control state. Normal project coordination retains
|
|
132
|
+
`authorizationGranted=false` unless a separately authorized boundary says
|
|
133
|
+
otherwise.
|
|
134
|
+
|
|
135
|
+
## Assurance boundary
|
|
136
|
+
|
|
137
|
+
Multiple Agents coordinating a project do not make project coordination Formal
|
|
138
|
+
by themselves. This normal flow does not make project coordination Formal by
|
|
139
|
+
itself; multi-Agent coordination does not automatically mean Formal.
|
|
140
|
+
The assurance lane is selected by the underlying risk and authority: ordinary
|
|
141
|
+
coordination may remain on the typed Project Driver path; high-risk source
|
|
142
|
+
integration, release, production, migration, destructive work, or an explicit
|
|
143
|
+
Formal acceptance request crosses the assurance boundary. Quick and Formal
|
|
144
|
+
verification remain distinct receipts and workflows. Neither grants Git, npm,
|
|
145
|
+
deployment, production, funds, or business authority.
|
|
146
|
+
|
|
147
|
+
## Performance and operating burden
|
|
148
|
+
|
|
149
|
+
The Project Driver is local-first and daemon-free. A project needs one
|
|
150
|
+
definition and an append-only event directory; ordinary users do not maintain
|
|
151
|
+
lease, receipt, fingerprint, or request JSON by hand. `status` and `takeover`
|
|
152
|
+
are read-only and deterministic, and repeated calls do not create project
|
|
153
|
+
events. Projection cost grows with the bounded definition and event history,
|
|
154
|
+
while the two-minute takeover target keeps interruption recovery operationally
|
|
155
|
+
small enough for routine Agent changes.
|
|
156
|
+
|
|
157
|
+
## Authority and compatibility
|
|
158
|
+
|
|
159
|
+
`owlrunkit@0.18.0` is an independent standalone candidate. The root `owlcoda`
|
|
160
|
+
package keeps its separate `0.15.32` lifecycle, and the published `owlrunkit`
|
|
161
|
+
`0.17.2` package remains the trusted rollback prior. Existing 0.17.x project
|
|
162
|
+
artifacts remain readable through the Core successor and trusted-prior paths.
|
|
163
|
+
The 0.17 Agent-Native product definition remains bundled as historical
|
|
164
|
+
compatibility documentation; this 0.18 document is the current Project Driver
|
|
165
|
+
contract.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# OwlCoda RunKit 使用模式选择:Sierac MES Dogfood 产品决议
|
|
2
|
+
|
|
3
|
+
状态:**0.18.1 本地候选,未发布、未安装、未激活**
|
|
4
|
+
日期:2026-08-11
|
|
5
|
+
|
|
6
|
+
## 已验证现场事实
|
|
7
|
+
|
|
8
|
+
以下结论来自对
|
|
9
|
+
`/Users/yeemio/AI/project/sieracMes-AI/.owlcoda/runkit/` 的只读检查,
|
|
10
|
+
不是体验推测:
|
|
11
|
+
|
|
12
|
+
- W1.6 留下四份 Quick Receipt V1。按回执生成时的 `exitResult` 与
|
|
13
|
+
`mutationDecision` 分类,结果是 3 pass、1 fail、0 source mutation;四份均为
|
|
14
|
+
`source_unchanged`。
|
|
15
|
+
- 旧版 `quick-metrics` 使用“当前 workspace 是否仍匹配历史回执”来统计历史结果。
|
|
16
|
+
在后续源码变化后,它把四份回执全部错算为 `sourceMutated`,并输出
|
|
17
|
+
`passed=0 / failed=0 / sourceMutated=4`。
|
|
18
|
+
- Quick 的实际测试命令发现了 W1.6 的 pytest 问题;RunKit 的价值是保留失败、
|
|
19
|
+
绑定候选并阻止错误完成声明,不是替代项目测试发现业务缺陷。
|
|
20
|
+
- 三次相关 Quick 的机器耗时约九秒。主要摩擦来自人工选择模式、填写标识和
|
|
21
|
+
时间戳、分别 checkpoint/integrate,以及排查不一致命令。
|
|
22
|
+
- Project Driver 对长线程、跨会话恢复、脏工作树和延期验收有实际价值。
|
|
23
|
+
- 现场成功回执长期携带 `quick_ignored_artifact_unbound`,但 attestation 仍可为
|
|
24
|
+
GO;该 issue 目前缺少清晰、可行动的严重级别。
|
|
25
|
+
|
|
26
|
+
## 产品长期决策
|
|
27
|
+
|
|
28
|
+
RunKit 定位为“飞行记录仪和阶段控制器”,不是所有命令的审批系统。
|
|
29
|
+
|
|
30
|
+
用户看到五种模式,但内部不以单一枚举承担全部语义。路由始终保留两个正交维度:
|
|
31
|
+
|
|
32
|
+
| 用户模式 | continuity | assurance | 典型用途 |
|
|
33
|
+
| --- | --- | --- | --- |
|
|
34
|
+
| `off` | `none` | `none` | 分析、文档、一次性探索、无需复用证据的小任务 |
|
|
35
|
+
| `light` | `none` | `quick` | 单 writer、低风险、一个冻结候选、一条精确验证命令 |
|
|
36
|
+
| `managed` | `project_driver` | WorkItem 级 `none/quick/formal` | 跨会话目标、交接、checkpoint、gate |
|
|
37
|
+
| `formal` | 依连续性事实自动选择 | `formal` | 真正高风险或合同要求正式验收的边界 |
|
|
38
|
+
| `auto` | 按事实选择 | 按事实选择 | 默认推荐 |
|
|
39
|
+
|
|
40
|
+
模式只表达工作流偏好,不表达授权。任何模式都不得授予 Git、发布、部署、生产或
|
|
41
|
+
业务权限。
|
|
42
|
+
|
|
43
|
+
下列事实强制 Formal:多 writer、权限或安全边界、资金、不可逆变更、回滚不确定、
|
|
44
|
+
schema/data migration、明确 Formal acceptance。`off/light/managed` 不能覆盖这些
|
|
45
|
+
事实。
|
|
46
|
+
|
|
47
|
+
下列标签或事实单独出现时不强制 Formal:普通项目源码修改、`longRunning`、
|
|
48
|
+
`interruptionRecovery`、production、release、deployment。长周期和中断恢复主要
|
|
49
|
+
选择 Project Driver;单 writer、可回滚且有业务读回的普通源码变更可以是
|
|
50
|
+
`managed + quick`。风险被 containment 后必须重新路由,升级不具有粘性。
|
|
51
|
+
|
|
52
|
+
## 0.18.0 已有能力
|
|
53
|
+
|
|
54
|
+
- Quick Verification 保存 source-bound 命令回执、stdout/stderr 和失败状态。
|
|
55
|
+
- Project Driver 保存目标、WorkItem、依赖、checkpoint、handoff、decision、
|
|
56
|
+
verification gate 和 takeover 状态。
|
|
57
|
+
- Formal Delivery 提供候选、lease、严格证据与正式验收边界。
|
|
58
|
+
- 所有这些能力都保持 `authorizationGranted=false`,验收与 Git/发布/部署/业务授权
|
|
59
|
+
分离。
|
|
60
|
+
|
|
61
|
+
0.18.0 并没有提供五模式入口,也没有解决本次现场暴露的历史 metrics、Quick 后续
|
|
62
|
+
命令、`quick-attest --help` 和 Skill/Core 版本漂移诊断。
|
|
63
|
+
|
|
64
|
+
## 本轮 0.18.1 候选实现
|
|
65
|
+
|
|
66
|
+
### 使用模式只读入口
|
|
67
|
+
|
|
68
|
+
新增:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
owlrunkit mode recommend --workspace "$PWD"
|
|
72
|
+
owlrunkit mode status --workspace "$PWD"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
普通输出为人类可读文本;`--json` 提供严格机器结果。推荐结果包含:推荐模式、
|
|
76
|
+
continuity、assurance、触发原因、被拒绝的较轻模式、预计新增步骤和证据数、下一条
|
|
77
|
+
命令、降级是否允许,以及完整权限边界。
|
|
78
|
+
|
|
79
|
+
`mode status` 当前只报告 `default_auto`,不创建 `.owlcoda`,也不暗示已有持久化
|
|
80
|
+
设置。本轮没有实现 `mode set`。
|
|
81
|
+
|
|
82
|
+
### MVP 一致性修复
|
|
83
|
+
|
|
84
|
+
- `quick-metrics` 以历史回执自身的 `exitResult` 与 `mutationDecision` 统计 pass、
|
|
85
|
+
fail 和 source mutation;当前 workspace 漂移不再改写历史结果。回执 schema、
|
|
86
|
+
snapshot binding 和输出材料仍校验;Core/context 的信任结论继续由
|
|
87
|
+
`quick-attest` 独立报告,不改写历史运行统计。
|
|
88
|
+
- Quick 结果的后续命令改为可执行的
|
|
89
|
+
`owlrunkit quick-attest --workspace ... --receipt ...`。
|
|
90
|
+
- `quick-attest --help` 返回 action-specific help。
|
|
91
|
+
- assurance router 不再因普通 project mutation、long-running、interruption
|
|
92
|
+
recovery 或 production/release/deployment 标签自动升级 Formal;真正强制事实仍
|
|
93
|
+
fail closed,且解除后可以降级。
|
|
94
|
+
- Skill installer 的只读 `inspect` 同时检查受管文件完整性与运行包的
|
|
95
|
+
Skill/config Core 版本;版本旧时明确返回 `version_mismatch`。
|
|
96
|
+
- 同一候选内的 profile 一致性修复不再为不存在、也无法从真实脚本/workspace
|
|
97
|
+
推导出的 `src/**`、`tests/**` 制造阻塞项,并提供现有 profile 的原子 reconcile。
|
|
98
|
+
|
|
99
|
+
## 后续缺口
|
|
100
|
+
|
|
101
|
+
### P1:Quick warning 需要可行动语义
|
|
102
|
+
|
|
103
|
+
把 `quick_ignored_artifact_unbound` 区分为不影响当前决策的 maintenance note 与会
|
|
104
|
+
阻断复用的 issue。验收标准:GO 回执不再永久携带无法行动的高噪声告警;任何被
|
|
105
|
+
降级的提示仍在详细输出中可查,真实材料缺口继续 fail closed。
|
|
106
|
+
|
|
107
|
+
### P1:Project Driver 日常动作减负
|
|
108
|
+
|
|
109
|
+
自动生成安全的事件 ID 和时间戳,并提供一个原子“完成 WorkItem 并在条件满足时
|
|
110
|
+
integrate”动作;`completedUnits` 可从已声明的单工作项单位推导。验收标准:普通
|
|
111
|
+
单项完成不需要手填 ID/时间戳,也不需要两次独立命令,同时 append-only 事件和
|
|
112
|
+
重试幂等性不变。
|
|
113
|
+
|
|
114
|
+
### P1:验证指纹按真实路径范围绑定
|
|
115
|
+
|
|
116
|
+
Quick/coverage 应区分验证声明覆盖的源码、仅文档/空白变化和真正全局 gate。验收
|
|
117
|
+
标准:不相关文档或空白变化不会诱导重复大测试;声明范围内变化、lockfile 变化和
|
|
118
|
+
global gate 仍正确失效。
|
|
119
|
+
|
|
120
|
+
### P2:持久化模式偏好
|
|
121
|
+
|
|
122
|
+
只有在只读推荐经过更多 dogfood 后再评估
|
|
123
|
+
`owlrunkit mode set --mode auto|off|light|managed|formal`。验收标准:偏好具有明确
|
|
124
|
+
来源和审计读回,且永远不能覆盖强制 Formal 路由。
|
|
125
|
+
|
|
126
|
+
## 不能声称的内容
|
|
127
|
+
|
|
128
|
+
- 这份文档和当前 worktree 不是已发布的 0.18.1,也不是 npm、Core、Skill 或任何
|
|
129
|
+
项目的升级完成证明。
|
|
130
|
+
- `mode recommend` 根据调用者提供的结构化事实路由;它不会自动发现所有业务、
|
|
131
|
+
权限、资金或迁移风险。
|
|
132
|
+
- RunKit 降低进度、证据和完成状态幻觉,不直接解决 Sierac MES 业务问答幻觉。
|
|
133
|
+
后者仍由 canonical 接口、schema、adapter 与 Answer Harness 负责。
|
|
134
|
+
- Quick 不是 Formal acceptance,Project Driver 不是测试执行器,任何 GO/accepted
|
|
135
|
+
结果都不授予 Git、发布、部署、生产或业务权限。
|
|
136
|
+
|
|
137
|
+
## 版本建议
|
|
138
|
+
|
|
139
|
+
本组变更适合形成 `owlrunkit@0.18.1` 小版本候选:它保持 0.18 的 Project Driver
|
|
140
|
+
和回执合同,新增只读 CLI,并修复 dogfood 验证出的行为缺陷。候选只有在聚焦测试、
|
|
141
|
+
RunKit contract/package gate、Core 身份同步、pack 内容检查和安装 smoke 都通过后
|
|
142
|
+
才具备发布评审资格;发布、项目升级与运行时激活仍是之后的独立动作。
|