@vela-science/canopus 0.7.0 → 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.
Files changed (94) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +67 -145
  3. package/capsules/erdos1056-k15/bin/linux-arm64/{10428801-10429000 → 10429201-10429400}/verifier +0 -0
  4. package/capsules/erdos1056-k15/bin/linux-x86_64/{10428801-10429000 → 10429201-10429400}/verifier +0 -0
  5. package/compatibility.json +25 -0
  6. package/dist/src/{receipt/map.d.ts → candidate/finalize.d.ts} +2 -9
  7. package/dist/src/candidate/finalize.js +71 -0
  8. package/dist/src/cli.js +89 -195
  9. package/dist/src/contracts/mission.d.ts +1 -13
  10. package/dist/src/contracts/mission.js +4 -42
  11. package/dist/src/contracts/validation.d.ts +1 -25
  12. package/dist/src/contracts/validation.js +1 -95
  13. package/dist/src/engines/codex-tools-native.js +2 -2
  14. package/dist/src/index.d.ts +5 -34
  15. package/dist/src/index.js +4 -34
  16. package/dist/src/mission/prepare.d.ts +10 -1
  17. package/dist/src/mission/prepare.js +29 -30
  18. package/dist/src/product/coverage.d.ts +17 -0
  19. package/dist/src/product/coverage.js +137 -0
  20. package/dist/src/product/doctor.d.ts +1 -2
  21. package/dist/src/product/doctor.js +29 -8
  22. package/dist/src/product/profile.js +8 -2
  23. package/dist/src/product/replay.js +11 -12
  24. package/dist/src/product/run.d.ts +5 -9
  25. package/dist/src/product/run.js +17 -81
  26. package/dist/src/product/submission.d.ts +40 -0
  27. package/dist/src/product/submission.js +217 -0
  28. package/dist/src/product/submit.d.ts +22 -0
  29. package/dist/src/product/submit.js +264 -0
  30. package/dist/src/product/version.d.ts +2 -2
  31. package/dist/src/product/version.js +27 -4
  32. package/dist/src/projection/current-run.d.ts +12 -0
  33. package/dist/src/projection/current-run.js +94 -0
  34. package/dist/src/projection/failure.d.ts +17 -7
  35. package/dist/src/projection/failure.js +43 -12
  36. package/dist/src/projection/retained-mission.d.ts +6 -0
  37. package/dist/src/projection/retained-mission.js +41 -0
  38. package/dist/src/projection/retained-run.d.ts +7 -0
  39. package/dist/src/projection/retained-run.js +50 -0
  40. package/dist/src/run.d.ts +43 -34
  41. package/dist/src/run.js +34 -397
  42. package/dist/src/util/canonical.d.ts +1 -5
  43. package/dist/src/util/canonical.js +1 -53
  44. package/dist/src/vela/cli.d.ts +7 -42
  45. package/dist/src/vela/cli.js +102 -475
  46. package/dist/src/vela/types.d.ts +3 -19
  47. package/dist/src/verifier/run.js +1 -1
  48. package/dist/src/workspace/prepare.d.ts +1 -1
  49. package/dist/src/workspace/prepare.js +15 -15
  50. package/docs/EVALUATION.md +142 -0
  51. package/docs/MISSIONS.md +42 -80
  52. package/docs/RUN_RECORD.md +77 -99
  53. package/docs/adr/0010-nonmutating-runs-and-explicit-submission.md +191 -0
  54. package/missions/erdos1056-k15-next/mission.draft.json +10 -8
  55. package/package.json +18 -15
  56. package/profiles/{erdos1056-k15-10428801-10429000.json → erdos1056-k15-10429201-10429400.json} +10 -10
  57. package/schemas/failure.v1.json +17 -0
  58. package/schemas/mission.v0.json +3 -4
  59. package/schemas/mission.v1.json +7 -28
  60. package/schemas/{run.v1.json → run.v2.json} +58 -116
  61. package/schemas/submission-bundle.v1.json +63 -0
  62. package/toolchain.lock.json +31 -0
  63. package/capsules/formal-erdos-505-test-dim-one/verifier +0 -105
  64. package/capsules/quantum-10-1-4/verifier.py +0 -152
  65. package/capsules/sidon-a24/bin/linux-arm64/verifier +0 -0
  66. package/capsules/sidon-a24/bin/linux-x86_64/verifier +0 -0
  67. package/dist/src/engines/codex-exec.d.ts +0 -17
  68. package/dist/src/engines/codex-exec.js +0 -136
  69. package/dist/src/engines/codex-tool-free.d.ts +0 -26
  70. package/dist/src/engines/codex-tool-free.js +0 -213
  71. package/dist/src/projection/diagnostic.d.ts +0 -12
  72. package/dist/src/projection/diagnostic.js +0 -61
  73. package/dist/src/projection/public-run.d.ts +0 -59
  74. package/dist/src/projection/public-run.js +0 -106
  75. package/dist/src/projection/publication.d.ts +0 -36
  76. package/dist/src/projection/publication.js +0 -47
  77. package/dist/src/projection/run.d.ts +0 -95
  78. package/dist/src/projection/run.js +0 -173
  79. package/dist/src/receipt/map.js +0 -168
  80. package/dist/src/repair/plan.d.ts +0 -2
  81. package/dist/src/repair/plan.js +0 -22
  82. package/dist/src/roles.d.ts +0 -2
  83. package/dist/src/roles.js +0 -9
  84. package/missions/formal-erdos-505-test-dim-one-gpt56/mission.draft.json +0 -40
  85. package/missions/quantum-10-1-4-retry/mission.draft.json +0 -40
  86. package/missions/sidon-a24-at-least-7194-gpt56/mission.draft.json +0 -42
  87. package/missions/sidon-a24-at-least-7194-gpt56-v2/mission.draft.json +0 -42
  88. package/missions/sidon-a24-at-least-7194-gpt56-v3/mission.draft.json +0 -42
  89. package/profiles/formal-erdos-505-test-dim-one-gpt56.json +0 -35
  90. package/profiles/quantum-10-1-4-stabilizer-retry.json +0 -35
  91. package/profiles/sidon-a24-at-least-7194-gpt56-v2.json +0 -35
  92. package/profiles/sidon-a24-at-least-7194-gpt56-v3.json +0 -35
  93. package/profiles/sidon-a24-at-least-7194-gpt56.json +0 -35
  94. package/schemas/canopus.public-run.v1.json +0 -116
@@ -1,27 +1,11 @@
1
- import type { LandRoute, MissionRoots } from "../contracts/mission.js";
1
+ import type { MissionRoots } from "../contracts/mission.js";
2
2
  export interface VelaInspection {
3
3
  version: string;
4
4
  roots: MissionRoots;
5
- check: Record<string, unknown>;
6
- proof: Record<string, unknown>;
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
- }
@@ -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([
@@ -5,7 +5,7 @@ export declare class WorkspaceError extends Error {
5
5
  export interface WorkspacePaths {
6
6
  root: string;
7
7
  input: string;
8
- landing: string;
8
+ frontier: string;
9
9
  work: string;
10
10
  output: string;
11
11
  artifacts: string;
@@ -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 landing = path.join(root, "landing");
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), landing], root, home, timeoutMs, maxOutputBytes);
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 landing clone its own
137
- // disposable local branch so publication never depends on caller state.
138
- await gitText(runner, ["git", "checkout", "-B", "canopus-landing", options.gitCommit], landing, home, timeoutMs, maxOutputBytes);
139
- const [commit, tree, status, landingCommit, landingTree, landingStatus] = await Promise.all([
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}"], landing, home, timeoutMs, maxOutputBytes),
144
- gitText(runner, ["git", "rev-parse", "--verify", "HEAD^{tree}"], landing, home, timeoutMs, maxOutputBytes),
145
- gitText(runner, ["git", "status", "--porcelain=v1", "--untracked-files=all"], landing, home, timeoutMs, maxOutputBytes),
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
- landingCommit !== options.gitCommit ||
150
- landingTree !== options.gitTree) {
151
- throw new WorkspaceError(`checkout root mismatch: expected ${options.gitCommit}/${options.gitTree}, observed ${commit}/${tree} and ${landingCommit}/${landingTree}`);
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 !== "" || landingStatus !== "") {
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, landing, work, output, artifacts, home, velaHome, verifierHome };
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
- landing,
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 Canopus mission contract. Canopus owns only the
4
- **Produce** step in Vela's five-step product story: produce → preserve → check
5
- decide → reuse. The frontier Git repository preserves; Vela checks and
6
- governs standing; signed policy or a protected human decision decides; the
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
- ## Mission v1: current
8
+ ## Current lifecycle
10
9
 
11
- Mission v1 keeps the same four roles and authority boundary while adding a
12
- tool-enabled local worker. `mission prepare` selects the first ranked attack,
13
- derives the clean Git and Vela roots, registers the complete pre-existing
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
- The producer runs through the native Codex CLI under a default-deny platform
24
- profile: Seatbelt on macOS and Codex's Bubblewrap sandbox on Linux or WSL2. The
25
- writable workspace contains only the exact target packet; the full source
26
- checkout, Vela home, host home, and authentication file remain outside
27
- command-readable paths. Provider transport is available only to the Codex
28
- process. Shell commands have no network access.
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 status is producer completion, not verifier or scientific standing.
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
- Defer-only Mission v1 bundles preserve their original zero-delta behavior. A
47
- profile may register `permit` only when it also freezes one closed positive
48
- `canopus.result-contract.v1` and a `vela.execution-binding.v1` over the full
49
- packet, profile, verifier-capsule, and result-contract roots. The worker result
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
- For exact construction profiles, prefer Vela-native `vela-witness` JSON and a
60
- packaged `vela-verify` executable. This gives the isolated producer verifier,
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
- ## Mission roles
31
+ ## Isolation
67
32
 
68
- One Mission v1 bundle runs one explicit role. The role changes the worker
69
- instruction, not the trust boundary:
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
- - `producer` constructs the smallest candidate or preserves a null result;
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
- A research loop may fan these into separate missions against the same exact
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
- This deliberately avoids a workflow DSL, agent society, or second graph. Git
85
- stores the bytes, Vela stores authority and accepted lineage, and Canopus is
86
- replaceable orchestration over those primitives.
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
- ## Mission v0: historical replay only
49
+ Each role produces its own Run. No role inherits pending or merely verified
50
+ work as accepted state.
89
51
 
90
- Mission v0 is retained solely so frozen benchmark registrations and historical
91
- run records remain reproducible. It used the same four roles with a tool-free
92
- worker and the older macOS Seatbelt verifier manifest. Do not prepare new
93
- product missions with v0; use Mission v1. Historical v0 bytes and results remain
94
- unchanged.
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.
@@ -1,101 +1,79 @@
1
- # Canopus run records
2
-
3
- A completed run writes these local records beneath its run root:
4
-
5
- - `activity.jsonl`: append-only orchestration events linked by full SHA-256
6
- digests, including the exact `vela next` offer digest and selected rank;
7
- - `candidate.json`: the frozen candidate and verifier facts;
8
- - `worker-events.jsonl`: the raw Codex event stream used as the tool trace;
9
- - `worker-final.json`: the exact final worker response;
10
- - `worker-stderr.bin`: the bounded raw worker stderr stream;
11
- - `engine-result.json`: the parsed worker outcome and usage;
12
- - `run.json`: the compact run record, exact roots, landing result, costs,
13
- clean-clone reproduction result, and stage-typed observations;
14
- - `evidence-manifest.json`: content roots for the worker, run, candidate,
15
- artifacts, verifier result, Receipt when present, and final frontier roots;
16
- - `projection.json`: a read-only view for another consumer;
17
- - `landing-command.json`: the exact argv, exit status, raw streams, and stream
18
- digests observed at the potentially effectful `vela land` boundary;
19
- - `landing-observation.json`: the parsed raw Vela result, retained before any
20
- Canopus interpretation.
21
-
22
- If anything fails at or after that boundary, `landing-recovery.json` records
23
- the last command, raw result when available, parsed route when available, and
24
- freshly inspected roots. `failure.json` points to that recovery record. A
25
- command timeout may have changed external state even when no complete stdout
26
- was captured, so recovery roots are authoritative over assumptions.
27
-
28
- These files are operational evidence, not Vela authority. The projection says
29
- so in its schema and can be rebuilt with `canopus inspect run.json`. Deleting
30
- the run-record files must not change Vela replay, a policy route, or accepted
31
- state.
32
-
33
- Completed runs now use `canopus.run.v1`. Its `observations` object separates
34
- three claims that must not be collapsed:
35
-
36
- - `worker_observations`: what the model reported or attempted;
37
- - `verifier_observations`: what the frozen mechanical verifier established;
38
- - `standing_caveats`: limitations that remain true after verification.
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
- The new directory contains the `canopus.public-run.v1` projection, an exact
55
- root manifest, read-only Observatory import data, and commands to reproduce or
56
- inspect the pending proposal and retain additional verifier evidence. The
57
- commands do not accept, publish, push, deploy, or cross a human authority
58
- boundary. The public projection contains only mission and model identity, a
59
- bounded activity summary, claim and caveats, artifact/verifier/Receipt roots,
60
- route, accepted delta, usage, source/final commits, and reproduction commands.
61
- It cannot export a failed or admitted run. Never publish the raw run directory,
62
- isolated homes, authentication, private paths, or unrestricted logs.
63
-
64
- The run root also contains isolated checkouts and content-addressed artifacts.
65
- The landing clone uses a disposable attached branch so Vela can publish exact
66
- deltas; the immutable input clone remains detached and read-only. Successful
67
- runs delete the isolated Vela home and its agent-only key. Failed runs may
68
- retain local diagnostic state until explicit cleanup. Never publish a run root
69
- or Codex credential directory wholesale. After verification, Mission v1 makes
70
- one unsigned non-authoritative Git commit containing exactly the frozen source
71
- artifacts before invoking `vela land`; `activity.jsonl` records that commit,
72
- tree, and path set. The terminal Vela commit then contains the Receipt, activity
73
- record, proposal, and `records/artifacts/sha256/<digest>` copies. This ordering
74
- keeps `vela.lock` and every clean Git checkout self-contained.
75
-
76
- A `--no-land` run writes `canopus.diagnostic-run.v1`, invokes the same frozen
77
- worker and verifier path, and leaves the source frontier at its starting commit
78
- and tree. It has no Receipt or proposal. A landed product run performs all work
79
- in isolated clones, verifies the clean clone, then fast-forwards the clean local
80
- source checkout to the exact verified landing commit. It never pushes a remote.
81
-
82
- Product output must live outside the source frontier and outside known
83
- cloud-synced Desktop or cloud-storage roots. Docker bind mounts over cloud-backed
84
- paths can stall without producing a verifier verdict, so Canopus refuses that
85
- placement rather than weakening the verification timeout.
86
-
87
- `route: defer` with `accepted_event_delta: 0` means the Receipt v1 record is
88
- pending human review. It is a successful producer handoff, not scientific
89
- acceptance. `route: permit` is valid only when an already signed Vela policy
90
- admits the exact proposal; Canopus still does not hold a human key.
91
-
92
- ## Budget semantics
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.