@vela-science/canopus 0.6.5 → 0.8.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 +97 -0
- package/README.md +67 -139
- package/SECURITY.md +3 -2
- package/capsules/erdos1056-k15/bin/linux-arm64/{10428801-10429000 → 10429201-10429400}/verifier +0 -0
- package/capsules/erdos1056-k15/bin/linux-x86_64/{10428801-10429000 → 10429201-10429400}/verifier +0 -0
- package/compatibility.json +25 -0
- package/dist/src/activity/events.d.ts +4 -1
- package/dist/src/activity/events.js +8 -2
- package/dist/src/activity/store.d.ts +2 -2
- package/dist/src/activity/store.js +4 -3
- package/dist/src/{receipt/map.d.ts → candidate/finalize.d.ts} +2 -9
- package/dist/src/candidate/finalize.js +71 -0
- package/dist/src/cli.js +88 -229
- package/dist/src/contracts/mission.d.ts +1 -13
- package/dist/src/contracts/mission.js +4 -42
- package/dist/src/contracts/validation.d.ts +1 -25
- package/dist/src/contracts/validation.js +1 -95
- package/dist/src/engines/codex-tools-native.js +2 -2
- package/dist/src/index.d.ts +5 -34
- package/dist/src/index.js +4 -34
- package/dist/src/mission/prepare.d.ts +10 -1
- package/dist/src/mission/prepare.js +29 -30
- package/dist/src/product/coverage.d.ts +17 -0
- package/dist/src/product/coverage.js +137 -0
- package/dist/src/product/doctor.d.ts +1 -2
- package/dist/src/product/doctor.js +29 -8
- package/dist/src/product/profile.js +8 -2
- package/dist/src/product/replay.js +11 -12
- package/dist/src/product/run.d.ts +5 -9
- package/dist/src/product/run.js +17 -88
- package/dist/src/product/submission.d.ts +40 -0
- package/dist/src/product/submission.js +217 -0
- package/dist/src/product/submit.d.ts +22 -0
- package/dist/src/product/submit.js +264 -0
- package/dist/src/product/version.d.ts +2 -2
- package/dist/src/product/version.js +27 -4
- package/dist/src/projection/current-run.d.ts +12 -0
- package/dist/src/projection/current-run.js +94 -0
- package/dist/src/projection/failure.d.ts +17 -7
- package/dist/src/projection/failure.js +43 -12
- package/dist/src/projection/retained-mission.d.ts +6 -0
- package/dist/src/projection/retained-mission.js +41 -0
- package/dist/src/projection/retained-run.d.ts +7 -0
- package/dist/src/projection/retained-run.js +50 -0
- package/dist/src/run.d.ts +43 -41
- package/dist/src/run.js +34 -412
- package/dist/src/util/canonical.d.ts +1 -5
- package/dist/src/util/canonical.js +1 -53
- package/dist/src/vela/cli.d.ts +7 -51
- package/dist/src/vela/cli.js +102 -523
- package/dist/src/vela/types.d.ts +3 -19
- package/dist/src/verifier/run.js +1 -1
- package/dist/src/workspace/prepare.d.ts +1 -1
- package/dist/src/workspace/prepare.js +15 -15
- package/docs/EVALUATION.md +142 -0
- package/docs/MISSIONS.md +42 -80
- package/docs/RUN_RECORD.md +77 -99
- package/docs/adr/0010-nonmutating-runs-and-explicit-submission.md +191 -0
- package/missions/erdos1056-k15-next/mission.draft.json +10 -8
- package/package.json +18 -22
- package/profiles/{erdos1056-k15-10428801-10429000.json → erdos1056-k15-10429201-10429400.json} +10 -10
- package/schemas/failure.v1.json +17 -0
- package/schemas/mission.v0.json +3 -4
- package/schemas/mission.v1.json +7 -28
- package/schemas/{run.v1.json → run.v2.json} +58 -116
- package/schemas/submission-bundle.v1.json +63 -0
- package/toolchain.lock.json +31 -0
- package/BUILD_WEEK.md +0 -198
- package/advisories/erdos1056-claim-fidelity/output.schema.json +0 -90
- package/advisories/erdos1056-claim-fidelity/registration.json +0 -42
- package/advisories/erdos1056-claim-fidelity/results/assessment.json +0 -1
- package/advisories/erdos1056-claim-fidelity/results/verification.json +0 -1
- package/capsules/formal-erdos-505-test-dim-one/verifier +0 -105
- package/capsules/quantum-10-1-4/verifier.py +0 -152
- package/capsules/sidon-a24/bin/linux-arm64/verifier +0 -0
- package/capsules/sidon-a24/bin/linux-x86_64/verifier +0 -0
- package/dist/src/capability/withdrawal.d.ts +0 -47
- package/dist/src/capability/withdrawal.js +0 -487
- package/dist/src/engines/codex-exec.d.ts +0 -17
- package/dist/src/engines/codex-exec.js +0 -136
- package/dist/src/engines/codex-tool-free.d.ts +0 -26
- package/dist/src/engines/codex-tool-free.js +0 -213
- package/dist/src/product/withdraw.d.ts +0 -8
- package/dist/src/product/withdraw.js +0 -255
- package/dist/src/projection/diagnostic.d.ts +0 -12
- package/dist/src/projection/diagnostic.js +0 -61
- package/dist/src/projection/public-run.d.ts +0 -59
- package/dist/src/projection/public-run.js +0 -106
- package/dist/src/projection/publication.d.ts +0 -36
- package/dist/src/projection/publication.js +0 -47
- package/dist/src/projection/run.d.ts +0 -95
- package/dist/src/projection/run.js +0 -173
- package/dist/src/receipt/map.js +0 -168
- package/dist/src/repair/plan.d.ts +0 -2
- package/dist/src/repair/plan.js +0 -22
- package/dist/src/roles.d.ts +0 -2
- package/dist/src/roles.js +0 -9
- package/docs/RELEASES.md +0 -1389
- package/evidence/build-week/run_eb6bcd46-cffd-4ae8-b630-2681bd84da71.public.json +0 -1
- package/evidence/build-week/run_f68e4cfc-e5c7-4c73-86cb-d79807c47ec4.public.json +0 -1
- package/evidence/erdos/run_192b3bef-9d6e-49e5-b72d-7ae903b29d5e/pending-commands.json +0 -1
- package/evidence/erdos/run_192b3bef-9d6e-49e5-b72d-7ae903b29d5e/public-run.json +0 -1
- package/evidence/erdos/run_192b3bef-9d6e-49e5-b72d-7ae903b29d5e/root-manifest.json +0 -1
- package/evidence/erdos/run_192b3bef-9d6e-49e5-b72d-7ae903b29d5e/web-import.json +0 -1
- package/evidence/erdos/run_b3b0cf07-b149-4d53-8258-76ba0e1fc0a5/pending-commands.json +0 -1
- package/evidence/erdos/run_b3b0cf07-b149-4d53-8258-76ba0e1fc0a5/public-run.json +0 -1
- package/evidence/erdos/run_b3b0cf07-b149-4d53-8258-76ba0e1fc0a5/root-manifest.json +0 -1
- package/evidence/erdos/run_b3b0cf07-b149-4d53-8258-76ba0e1fc0a5/web-import.json +0 -1
- package/missions/formal-erdos-505-test-dim-one-gpt56/mission.draft.json +0 -40
- package/missions/quantum-10-1-4-retry/mission.draft.json +0 -40
- package/missions/sidon-a24-at-least-7194-gpt56/mission.draft.json +0 -42
- package/missions/sidon-a24-at-least-7194-gpt56-v2/mission.draft.json +0 -42
- package/missions/sidon-a24-at-least-7194-gpt56-v3/mission.draft.json +0 -42
- package/profiles/formal-erdos-505-test-dim-one-gpt56.json +0 -35
- package/profiles/quantum-10-1-4-stabilizer-retry.json +0 -35
- package/profiles/sidon-a24-at-least-7194-gpt56-v2.json +0 -35
- package/profiles/sidon-a24-at-least-7194-gpt56-v3.json +0 -35
- package/profiles/sidon-a24-at-least-7194-gpt56.json +0 -35
- package/schemas/canopus.public-run.v1.json +0 -116
- package/scripts/run-claim-fidelity-advisory.mjs +0 -235
package/dist/src/vela/types.d.ts
CHANGED
|
@@ -1,27 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MissionRoots } from "../contracts/mission.js";
|
|
2
2
|
export interface VelaInspection {
|
|
3
3
|
version: string;
|
|
4
4
|
roots: MissionRoots;
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
status: Record<string, unknown>;
|
|
6
|
+
repository: Record<string, unknown>;
|
|
7
7
|
}
|
|
8
8
|
export interface VelaCommandResponse {
|
|
9
9
|
ok: true;
|
|
10
10
|
value: Record<string, unknown>;
|
|
11
11
|
}
|
|
12
|
-
export interface LandResult {
|
|
13
|
-
operationId: string;
|
|
14
|
-
receiptRoot: string;
|
|
15
|
-
recordId: string;
|
|
16
|
-
proposalId: string;
|
|
17
|
-
findingId: string;
|
|
18
|
-
route: LandRoute | "exact_retry";
|
|
19
|
-
originalRoute: LandRoute | null;
|
|
20
|
-
rawRoute: string;
|
|
21
|
-
detail: string;
|
|
22
|
-
acceptedEventCountBefore: number | null;
|
|
23
|
-
acceptedEventCountAfter: number | null;
|
|
24
|
-
acceptedEventDelta: number | null;
|
|
25
|
-
publication: Record<string, unknown>;
|
|
26
|
-
raw: Record<string, unknown>;
|
|
27
|
-
}
|
package/dist/src/verifier/run.js
CHANGED
|
@@ -240,8 +240,8 @@ export async function runVerifier(options) {
|
|
|
240
240
|
// still the same three bounded trees; it does not widen the readable set.
|
|
241
241
|
const declaredReadRoots = [
|
|
242
242
|
options.paths.input,
|
|
243
|
-
options.paths.artifacts,
|
|
244
243
|
options.paths.verifierHome,
|
|
244
|
+
...new Set(options.artifacts.map((artifact) => path.dirname(artifact.frozenPath))),
|
|
245
245
|
].map((entry) => path.resolve(entry));
|
|
246
246
|
const readRoots = [
|
|
247
247
|
...new Set([
|
|
@@ -109,7 +109,7 @@ export async function prepareWorkspace(options) {
|
|
|
109
109
|
}
|
|
110
110
|
const root = await assertFreshOutsideRoot(options.sourceRepo, options.runRoot);
|
|
111
111
|
const input = path.join(root, "input");
|
|
112
|
-
const
|
|
112
|
+
const frontier = path.join(root, "frontier");
|
|
113
113
|
const work = path.join(root, "work");
|
|
114
114
|
const output = path.join(root, "output");
|
|
115
115
|
const artifacts = path.join(root, "artifacts");
|
|
@@ -130,37 +130,37 @@ export async function prepareWorkspace(options) {
|
|
|
130
130
|
]);
|
|
131
131
|
try {
|
|
132
132
|
await gitText(runner, ["git", "clone", "--no-hardlinks", "--no-checkout", "--", await realpath(options.sourceRepo), input], root, home, timeoutMs, maxOutputBytes);
|
|
133
|
-
await gitText(runner, ["git", "clone", "--no-hardlinks", "--no-checkout", "--", await realpath(options.sourceRepo),
|
|
133
|
+
await gitText(runner, ["git", "clone", "--no-hardlinks", "--no-checkout", "--", await realpath(options.sourceRepo), frontier], root, home, timeoutMs, maxOutputBytes);
|
|
134
134
|
await gitText(runner, ["git", "checkout", "--detach", options.gitCommit], input, home, timeoutMs, maxOutputBytes);
|
|
135
135
|
// Vela publishes exact scientific deltas to the current ref. Keep the
|
|
136
|
-
// immutable input detached, but give the isolated
|
|
137
|
-
// disposable local branch so
|
|
138
|
-
await gitText(runner, ["git", "checkout", "-B", "canopus-
|
|
139
|
-
const [commit, tree, status,
|
|
136
|
+
// immutable input detached, but give the isolated control clone its own
|
|
137
|
+
// disposable local branch so inspection never depends on caller state.
|
|
138
|
+
await gitText(runner, ["git", "checkout", "-B", "canopus-frontier", options.gitCommit], frontier, home, timeoutMs, maxOutputBytes);
|
|
139
|
+
const [commit, tree, status, frontierCommit, frontierTree, frontierStatus] = await Promise.all([
|
|
140
140
|
gitText(runner, ["git", "rev-parse", "--verify", "HEAD^{commit}"], input, home, timeoutMs, maxOutputBytes),
|
|
141
141
|
gitText(runner, ["git", "rev-parse", "--verify", "HEAD^{tree}"], input, home, timeoutMs, maxOutputBytes),
|
|
142
142
|
gitText(runner, ["git", "status", "--porcelain=v1", "--untracked-files=all"], input, home, timeoutMs, maxOutputBytes),
|
|
143
|
-
gitText(runner, ["git", "rev-parse", "--verify", "HEAD^{commit}"],
|
|
144
|
-
gitText(runner, ["git", "rev-parse", "--verify", "HEAD^{tree}"],
|
|
145
|
-
gitText(runner, ["git", "status", "--porcelain=v1", "--untracked-files=all"],
|
|
143
|
+
gitText(runner, ["git", "rev-parse", "--verify", "HEAD^{commit}"], frontier, home, timeoutMs, maxOutputBytes),
|
|
144
|
+
gitText(runner, ["git", "rev-parse", "--verify", "HEAD^{tree}"], frontier, home, timeoutMs, maxOutputBytes),
|
|
145
|
+
gitText(runner, ["git", "status", "--porcelain=v1", "--untracked-files=all"], frontier, home, timeoutMs, maxOutputBytes),
|
|
146
146
|
]);
|
|
147
147
|
if (commit !== options.gitCommit ||
|
|
148
148
|
tree !== options.gitTree ||
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
throw new WorkspaceError(`checkout root mismatch: expected ${options.gitCommit}/${options.gitTree}, observed ${commit}/${tree} and ${
|
|
149
|
+
frontierCommit !== options.gitCommit ||
|
|
150
|
+
frontierTree !== options.gitTree) {
|
|
151
|
+
throw new WorkspaceError(`checkout root mismatch: expected ${options.gitCommit}/${options.gitTree}, observed ${commit}/${tree} and ${frontierCommit}/${frontierTree}`);
|
|
152
152
|
}
|
|
153
|
-
if (status !== "" ||
|
|
153
|
+
if (status !== "" || frontierStatus !== "") {
|
|
154
154
|
throw new WorkspaceError("exact checkout is unexpectedly dirty");
|
|
155
155
|
}
|
|
156
156
|
await sealTree(input, options.maxEntries ?? 200_000);
|
|
157
|
-
return { root, input,
|
|
157
|
+
return { root, input, frontier, work, output, artifacts, home, velaHome, verifierHome };
|
|
158
158
|
}
|
|
159
159
|
catch (error) {
|
|
160
160
|
await cleanupWorkspace({
|
|
161
161
|
root,
|
|
162
162
|
input,
|
|
163
|
-
|
|
163
|
+
frontier,
|
|
164
164
|
work,
|
|
165
165
|
output,
|
|
166
166
|
artifacts,
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Canopus and Vela evaluation
|
|
2
|
+
|
|
3
|
+
Canopus is useful only if it turns a fixed model and task budget into more
|
|
4
|
+
verified, repairable, and reviewable work than a simpler runner. Vela is useful
|
|
5
|
+
only if its state and authority contracts make review, reuse, correction, and
|
|
6
|
+
handoff safer or cheaper than ordinary files, Git, and exact-lock baselines.
|
|
7
|
+
|
|
8
|
+
Evaluation therefore tests four claims separately:
|
|
9
|
+
|
|
10
|
+
1. **Canopus execution lift:** with the same model, task, information, tools,
|
|
11
|
+
verifier, and budget, Canopus improves independently verified completion or
|
|
12
|
+
reduces invalid artifacts.
|
|
13
|
+
2. **Vela state lift:** with fixed work products, Vela improves premise
|
|
14
|
+
selection, replay, correction, review, or authority integrity.
|
|
15
|
+
3. **Combined-system efficiency:** Canopus and Vela increase correct scientific
|
|
16
|
+
dispositions or reusable verified progress per all-in cost and expert-hour.
|
|
17
|
+
4. **Adoption:** a cold user can reproduce, interpret, and continue real work
|
|
18
|
+
without maintainer coaching or replacing their existing workbench.
|
|
19
|
+
|
|
20
|
+
None of these claims is implied by the others. A verifier pass is not
|
|
21
|
+
scientific acceptance. Internal replay is not independent reproduction. One
|
|
22
|
+
useful frontier result is not evidence of a repeatable discovery engine.
|
|
23
|
+
|
|
24
|
+
## Release gates
|
|
25
|
+
|
|
26
|
+
Every report places these gates above aggregate outcomes:
|
|
27
|
+
|
|
28
|
+
- zero unauthorized accepted-state transitions;
|
|
29
|
+
- zero human, repository, or provider credential leaks;
|
|
30
|
+
- zero verifier-to-acceptance conflation;
|
|
31
|
+
- zero undetected registered-history tampering;
|
|
32
|
+
- zero hidden exclusion of registered targets or failed runs;
|
|
33
|
+
- zero unreported benchmark-answer leakage;
|
|
34
|
+
- exact replay of every reported supported case.
|
|
35
|
+
|
|
36
|
+
A gate failure disqualifies the run as release evidence. It cannot be averaged
|
|
37
|
+
away by task completion, model quality, or cost.
|
|
38
|
+
|
|
39
|
+
## Comparison contract
|
|
40
|
+
|
|
41
|
+
The smallest useful comparison includes:
|
|
42
|
+
|
|
43
|
+
- a native model or benchmark-native baseline;
|
|
44
|
+
- a native baseline with the same verifier and structured task facts;
|
|
45
|
+
- a Canopus arm;
|
|
46
|
+
- a Canopus plus Vela arm only when the task tests state, governance, or reuse.
|
|
47
|
+
|
|
48
|
+
The model, task bytes, information, tools, verifier, evaluator, budget, retry
|
|
49
|
+
rule, stopping rule, and primary outcome are frozen before usable model output.
|
|
50
|
+
Both matched-capability and best-product comparisons may be reported, but must
|
|
51
|
+
not be mixed.
|
|
52
|
+
|
|
53
|
+
Registrations bind exact tasks, versions, roots, arms, assignment, seeds,
|
|
54
|
+
budgets, scorers, audits, hard gates, exclusions, and publication rules.
|
|
55
|
+
Amendments after usable output are visible corrections, never silent edits.
|
|
56
|
+
|
|
57
|
+
## Outcomes and cost
|
|
58
|
+
|
|
59
|
+
Reports keep these layers separate:
|
|
60
|
+
|
|
61
|
+
- attempt;
|
|
62
|
+
- artifact produced;
|
|
63
|
+
- independent verifier result;
|
|
64
|
+
- correct Vela route or scientific disposition;
|
|
65
|
+
- independent reproduction;
|
|
66
|
+
- downstream reuse;
|
|
67
|
+
- external recognition.
|
|
68
|
+
|
|
69
|
+
Primary metrics depend on the registered claim. Common measures are verified
|
|
70
|
+
completion, false scientific admission, epistemic rescue, intervention harm,
|
|
71
|
+
model-swap resilience, correction localization, duplicate-work rate, and
|
|
72
|
+
correct dispositions per expert-hour.
|
|
73
|
+
|
|
74
|
+
All-in cost includes model tokens or price, compute, setup, repair, verifier
|
|
75
|
+
time, human intervention, expert review, and operational overhead. A `10x`
|
|
76
|
+
claim requires a matched denominator and quality threshold, a preregistered
|
|
77
|
+
study, a held-out replication, and no hard-gate failure.
|
|
78
|
+
|
|
79
|
+
## Benchmark order
|
|
80
|
+
|
|
81
|
+
Use established suites before inventing Vela-specific tasks:
|
|
82
|
+
|
|
83
|
+
1. Harness-Bench and a compact Harbor Index subset for harness comparison and
|
|
84
|
+
regression;
|
|
85
|
+
2. AstaBench, verified ScienceAgentBench, CORE-Bench, or
|
|
86
|
+
SocSci-Repro-Bench for scientific execution and honest non-reproduction;
|
|
87
|
+
3. Corral for evidence uptake and response to refutation;
|
|
88
|
+
4. Continual Learning Bench for accepted-state inheritance and stale-state
|
|
89
|
+
harm;
|
|
90
|
+
5. Formal Conjectures and exact frontier tasks for statement fidelity,
|
|
91
|
+
correction, and field evidence.
|
|
92
|
+
|
|
93
|
+
Vela-specific suites are limited to invariants external benchmarks do not
|
|
94
|
+
measure: authority, accepted-state inheritance, correction, canonicalization,
|
|
95
|
+
multi-agent coordination, reviewer leverage, and cold adoption. They form a
|
|
96
|
+
registry of focused suites, not one blended leaderboard score.
|
|
97
|
+
|
|
98
|
+
## Immediate evidence loop
|
|
99
|
+
|
|
100
|
+
Before expanding the adapter surface:
|
|
101
|
+
|
|
102
|
+
1. close or explicitly stop every existing registered Canopus experiment;
|
|
103
|
+
2. preserve the July 26 Erdős rejected candidate and verifier-bound repair as
|
|
104
|
+
one canonical regression case;
|
|
105
|
+
3. add a matched native Codex arm;
|
|
106
|
+
4. generalize registrations only enough to support multiple tasks, arms,
|
|
107
|
+
seeds, and randomized blocks;
|
|
108
|
+
5. retain benchmark-native scoring unchanged;
|
|
109
|
+
6. add one InspectAI bridge and one Harbor or METR Task Standard bridge;
|
|
110
|
+
7. publish failures, exclusions, roots, costs, and raw reproducible records.
|
|
111
|
+
|
|
112
|
+
The existing `inheritance-001` ceiling tie is evidence against adding more
|
|
113
|
+
agent-state machinery. The composition smoke supports only a narrow
|
|
114
|
+
representation-compression claim. Neither result justifies a protocol object.
|
|
115
|
+
|
|
116
|
+
## Simplification rule
|
|
117
|
+
|
|
118
|
+
Evaluation support remains a removable Canopus layer. Raw records stay
|
|
119
|
+
immutable and content-addressed; generated reports and web projections are
|
|
120
|
+
disposable. Evaluation data does not enter Vela's canonical scientific log,
|
|
121
|
+
and no benchmark database becomes a source of truth.
|
|
122
|
+
|
|
123
|
+
For each Canopus or Vela subsystem, run a preregistered ablation when its value
|
|
124
|
+
is uncertain. If a simpler structured baseline matches quality and safety with
|
|
125
|
+
less friction, remove or narrow the subsystem. In particular:
|
|
126
|
+
|
|
127
|
+
- reduce Canopus to a thin reproducible producer wrapper if its mission
|
|
128
|
+
machinery does not improve verified output;
|
|
129
|
+
- preserve only Vela's smallest universal invariants if Git, DSSE, exact locks,
|
|
130
|
+
and a written reducer match its correction and authority behavior;
|
|
131
|
+
- stop discovery-engine claims if fixed-denominator recognized yield does not
|
|
132
|
+
exceed the baseline;
|
|
133
|
+
- change the adoption wedge if cold users require live maintainer
|
|
134
|
+
interpretation.
|
|
135
|
+
|
|
136
|
+
The north-star question is:
|
|
137
|
+
|
|
138
|
+
> Does the system produce more genuine, reusable science per scarce human
|
|
139
|
+
> judgment?
|
|
140
|
+
|
|
141
|
+
This document is an evaluation-layer contract. It introduces no Vela protocol
|
|
142
|
+
object, authority path, workflow language, or canonical result store.
|
package/docs/MISSIONS.md
CHANGED
|
@@ -1,94 +1,56 @@
|
|
|
1
|
-
# Missions
|
|
1
|
+
# Missions and profiles
|
|
2
2
|
|
|
3
|
-
Mission v1 is the current
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Observatory and other replaceable readers support reuse.
|
|
3
|
+
Mission v1 is the current advanced execution contract. A profile selects one
|
|
4
|
+
bounded target, packet, objective, worker boundary, verifier capsule, result
|
|
5
|
+
contract, and budget. Preparing a Mission binds the exact Git and Vela roots
|
|
6
|
+
plus the Vela, Codex, container, packet, profile, and capsule identities.
|
|
8
7
|
|
|
9
|
-
##
|
|
8
|
+
## Current lifecycle
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
strict blocker set, and copies the exact packet, native permission profile,
|
|
15
|
-
structured-output schema, and verifier capsule into a portable bundle. The
|
|
16
|
-
Codex binary, model, verifier image, exact Linux verifier platform, resource
|
|
17
|
-
ceilings, and every copied byte are hash-pinned. Historical Mission v1 records
|
|
18
|
-
without a platform retain their old replay behavior; newly prepared missions
|
|
19
|
-
always bind one. Product-prepared missions also retain the selected profile's
|
|
20
|
-
exact name and full root, including Defer-only runs; older Mission v1 records
|
|
21
|
-
without that non-protocol field replay unchanged.
|
|
10
|
+
```text
|
|
11
|
+
profile → mission → run → replay → optional export → optional submit
|
|
12
|
+
```
|
|
22
13
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
14
|
+
- A **Run** is local orchestration evidence. It never mutates a frontier.
|
|
15
|
+
- A successful Run may **export** one authenticated Vela Submission.
|
|
16
|
+
- **Submit** is a separate explicit action that asks Vela to register the
|
|
17
|
+
Submission as a pending Proposal.
|
|
18
|
+
- Mechanical verifier output is not a Vela Verification Record.
|
|
19
|
+
- Neither Canopus nor its verifier creates a Decision, Event, or Standing.
|
|
29
20
|
|
|
30
|
-
Worker
|
|
31
|
-
`success` means the worker supplied every artifact byte required by the output
|
|
32
|
-
contract and explicitly leaves verification pending. Only such a draft proceeds
|
|
33
|
-
to the separate network-denied verifier. `null` means the bounded work produced
|
|
34
|
-
no candidate; `failed` means the worker could not produce a contract-complete
|
|
35
|
-
candidate or observed disqualifying evidence. Both are preserved in
|
|
36
|
-
`engine-result.json` and stop before verification or Receipt landing. After a
|
|
37
|
-
verifier pass, Canopus publishes exactly the frozen artifact sources in one
|
|
38
|
-
unsigned non-authoritative Git commit and then calls `vela land`.
|
|
39
|
-
The frozen verifier manifest reports the actual Docker boundary and bound Linux
|
|
40
|
-
architecture; the older macOS-Seatbelt manifest remains only for Mission v0.
|
|
41
|
-
`canopus inspect latest` includes safely stopped runs as well as completed runs;
|
|
42
|
-
its failure projection distinguishes no landing attempt from an observed Vela
|
|
43
|
-
effect that requires the retained landing-recovery evidence. Withdrawal's
|
|
44
|
-
`latest` selector remains limited to completed, proposal-bearing runs.
|
|
21
|
+
Worker outcomes remain simple:
|
|
45
22
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
must be an exact computational success, the verifier must pass, its claim is
|
|
51
|
-
replaced by the contract's exact canonical claim, and every required artifact
|
|
52
|
-
kind must be present before Canopus authors the binding through Vela's Receipt
|
|
53
|
-
builder. Any mismatch stops before landing. Vela alone evaluates the
|
|
54
|
-
already-signed policy; Canopus then requires the registered route and
|
|
55
|
-
accepted-event delta and reproduces the retained Receipt from a clean clone.
|
|
56
|
-
Canopus does not treat its own Receipt verifier row as load-bearing Vela
|
|
57
|
-
assurance.
|
|
23
|
+
- `success`: every declared Artifact exists and the Run may proceed to the
|
|
24
|
+
frozen verifier;
|
|
25
|
+
- `null`: the bounded attempt produced no valid candidate;
|
|
26
|
+
- `failed`: execution was incomplete or disqualified.
|
|
58
27
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
Vela policy derivation, strict replay, and third-party reproduction one shared
|
|
62
|
-
pure verifier and claim-fidelity contract. A target-specific wrapper is kept
|
|
63
|
-
only when Vela has no suitable verifier; it is not duplicated for presentation
|
|
64
|
-
or convenience.
|
|
28
|
+
Only a verifier-passing `success` Run with at least one Artifact, one caveat,
|
|
29
|
+
and a full `vela.execution-binding.v1` can be exported.
|
|
65
30
|
|
|
66
|
-
##
|
|
31
|
+
## Isolation
|
|
67
32
|
|
|
68
|
-
|
|
69
|
-
|
|
33
|
+
The Codex worker receives only the exact packet and bounded writable workspace.
|
|
34
|
+
The full source checkout, host home, Vela custody, authentication files, and
|
|
35
|
+
verifier remain outside command-readable paths. The verifier runs separately
|
|
36
|
+
with network and writes denied. A clean-clone verifier replay must match before
|
|
37
|
+
the Run completes.
|
|
70
38
|
|
|
71
|
-
|
|
72
|
-
- `adversary` seeks a concrete counterexample or narrows the claim;
|
|
73
|
-
- `verifier` checks correspondence between the candidate and declared tests,
|
|
74
|
-
while the separate frozen executable remains the mechanical verifier; and
|
|
75
|
-
- `fidelity` checks that prose claims do not outrun frozen artifacts and
|
|
76
|
-
verifier facts.
|
|
39
|
+
## Roles
|
|
77
40
|
|
|
78
|
-
|
|
79
|
-
accepted roots. Each result lands its own Receipt and route. A repair mission
|
|
80
|
-
names an immutable parent candidate, but a substantive downstream mission may
|
|
81
|
-
inherit only state that Vela reports as accepted. Defer, a verifier pass, or a
|
|
82
|
-
Canopus candidate digest is not an inheritance edge.
|
|
41
|
+
The retained roles change the prompt, not the trust boundary:
|
|
83
42
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
43
|
+
- `producer` constructs a candidate or records a bounded null result;
|
|
44
|
+
- `adversary` seeks a concrete counterexample or scope failure;
|
|
45
|
+
- `verifier` checks correspondence while the frozen executable remains the
|
|
46
|
+
mechanical verifier;
|
|
47
|
+
- `fidelity` checks that prose does not outrun the retained bytes.
|
|
87
48
|
|
|
88
|
-
|
|
49
|
+
Each role produces its own Run. No role inherits pending or merely verified
|
|
50
|
+
work as accepted state.
|
|
89
51
|
|
|
90
|
-
Mission v0
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
52
|
+
## Historical Mission v0
|
|
53
|
+
|
|
54
|
+
Mission v0 remains readable for immutable historical replay. The current branch
|
|
55
|
+
does not prepare or execute new v0 product missions. Use the release that
|
|
56
|
+
created a historical Run when exact old behavior is required.
|
package/docs/RUN_RECORD.md
CHANGED
|
@@ -1,101 +1,79 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
Immutable `canopus.run.v0` records remain readable and replayable. Canopus does
|
|
41
|
-
not rewrite them to manufacture the new evidence categories.
|
|
42
|
-
|
|
43
|
-
For a public evidence surface, generate the publication bundle only after the
|
|
44
|
-
successful run has reached Defer with zero accepted-state delta and matched
|
|
45
|
-
clean-clone replay:
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
canopus publish-run /local/run/run.json \
|
|
49
|
-
--mission /local/run/mission/mission.json \
|
|
50
|
-
--repository https://github.com/vela-science/formal-conjectures-frontier \
|
|
51
|
-
--output ./public-evidence
|
|
1
|
+
# Run, export, and submit records
|
|
2
|
+
|
|
3
|
+
## Run
|
|
4
|
+
|
|
5
|
+
A completed current Run writes `canopus.run.v2` beneath its private run root.
|
|
6
|
+
Its contract is deliberately nonmutating:
|
|
7
|
+
|
|
8
|
+
```json
|
|
9
|
+
{
|
|
10
|
+
"schema": "canopus.run.v2",
|
|
11
|
+
"effect": "none",
|
|
12
|
+
"authority": "non_authoritative",
|
|
13
|
+
"submission": null
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The run root retains:
|
|
18
|
+
|
|
19
|
+
- append-only orchestration activity;
|
|
20
|
+
- exact worker events, final response, and bounded stderr;
|
|
21
|
+
- candidate bytes and content-addressed Artifacts;
|
|
22
|
+
- verifier identity and result;
|
|
23
|
+
- clean-clone reproduction;
|
|
24
|
+
- exact mission, source, runtime, budget, and evidence roots.
|
|
25
|
+
|
|
26
|
+
`canopus show` projects these records. `canopus replay` reruns the frozen
|
|
27
|
+
verifier. Deleting Canopus or its run directory cannot change Vela replay or
|
|
28
|
+
Standing.
|
|
29
|
+
|
|
30
|
+
## Export
|
|
31
|
+
|
|
32
|
+
`canopus export` creates `canopus.submission-bundle.v1`:
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
submission-bundle/
|
|
36
|
+
submission.json
|
|
37
|
+
manifest.json
|
|
38
|
+
artifacts/sha256/<full-digest>
|
|
52
39
|
```
|
|
53
40
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
The
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
The mission hard-bounds prompt bytes, artifact bytes, attempts, spawned
|
|
95
|
-
research-lane processes, and captured research-lane output. The same ledger
|
|
96
|
-
covers the first verifier and clean-clone verifier. `max_observed_tokens` is an
|
|
97
|
-
honest postcondition over provider-reported usage; the Codex subscription
|
|
98
|
-
surface does not expose a portable pre-call token cutoff. Git and Vela are the
|
|
99
|
-
control plane and retain their own fixed command timeout/output bounds. The
|
|
100
|
-
mission therefore does not advertise a hard end-to-end subprocess or billing
|
|
101
|
-
budget it cannot enforce.
|
|
41
|
+
`submission.json` is a whole-body Ed25519-signed `vela.submission.v1`.
|
|
42
|
+
Independent verifier output is named only as a verification requirement; it is
|
|
43
|
+
not mislabeled as producer authority or a Vela Verification Record.
|
|
44
|
+
|
|
45
|
+
The current worker contract keeps verifier status out of the Claim. Export
|
|
46
|
+
fails closed if a retained older Run says verification is pending after its
|
|
47
|
+
verifier passed or contains control bytes. In that narrow case the producer may
|
|
48
|
+
pass `--claim` with `--scope-limit`; Canopus signs a corrected Submission,
|
|
49
|
+
records that the wording changed after the run, and leaves the Run byte-for-byte
|
|
50
|
+
unchanged. Arbitrary Claim replacement on a non-stale Run is refused.
|
|
51
|
+
|
|
52
|
+
The producer key is ephemeral. It is not placed in run evidence, the portable
|
|
53
|
+
bundle, or a retained capability store. A producer that independently keeps its
|
|
54
|
+
own key may use Vela's direct withdrawal interface; Canopus does not add a
|
|
55
|
+
second key lifecycle.
|
|
56
|
+
|
|
57
|
+
## Submit
|
|
58
|
+
|
|
59
|
+
`canopus submit`:
|
|
60
|
+
|
|
61
|
+
1. verifies the bundle, Submission signature, Artifacts, source Git roots, and
|
|
62
|
+
exact Vela binary;
|
|
63
|
+
2. keeps transport blobs outside the clone and lets Vela create their canonical
|
|
64
|
+
content-addressed paths inside the repository-authority transaction;
|
|
65
|
+
3. performs the Vela registration in a disposable exact-head clone;
|
|
66
|
+
4. requires `vela.submit-result.v1`, `pending_review`, and accepted-event delta
|
|
67
|
+
zero;
|
|
68
|
+
5. fast-forwards the clean source checkout only after the registration is
|
|
69
|
+
complete.
|
|
70
|
+
|
|
71
|
+
Submit does not create a Verification Record, Decision, Event, or accepted
|
|
72
|
+
Standing.
|
|
73
|
+
|
|
74
|
+
## Budgets
|
|
75
|
+
|
|
76
|
+
Missions bound prompt bytes, Artifact bytes, attempts, processes, output, wall
|
|
77
|
+
time, and observed provider tokens. The same verifier budget covers initial and
|
|
78
|
+
clean-clone replay. Provider-reported token totals are verified post hoc; the
|
|
79
|
+
subscription CLI does not expose a portable pre-call billing cutoff.
|