@vela-science/canopus 0.5.0 → 0.5.2

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 CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.2 - 2026-07-20
4
+
5
+ - Compose against Vela 0.911.1 so same-actor retries of `vela work` return the
6
+ exact active session without appending a second lease event.
7
+ - Preserve the 0.911.0 cold-use run as immutable diagnostic evidence; the
8
+ retry defect it exposed is not rewritten away.
9
+
10
+ ## 0.5.1 - 2026-07-20
11
+
12
+ - Preserve exact pending-result replay roots instead of recomputing a receipt
13
+ projection with incomplete post-run state.
14
+ - Keep the published `0.5.0` package and failed post-publication workflow as
15
+ audit evidence; `0.5.1` is the corrected default install target.
16
+
3
17
  ## 0.5.0 - 2026-07-20
4
18
 
5
19
  - Compose against released Vela 0.911.0 and surface configured, available, and
package/README.md CHANGED
@@ -38,8 +38,8 @@ Mission → GPT-5.6 → artifact → verifier → Receipt → Defer.
38
38
  **90 seconds — inspect the shipped product:**
39
39
 
40
40
  ```sh
41
- bunx @vela-science/canopus@0.5.0 --version
42
- bunx @vela-science/canopus@0.5.0 profile validate sidon-a24-at-least-7194-gpt56-v3
41
+ bunx @vela-science/canopus@0.5.2 --version
42
+ bunx @vela-science/canopus@0.5.2 profile validate sidon-a24-at-least-7194-gpt56-v3
43
43
  ```
44
44
 
45
45
  **Full workflow — reproduce without rebuilding Canopus:**
@@ -56,22 +56,22 @@ vela reproduce .
56
56
  Run the provenance-backed public package with Bun:
57
57
 
58
58
  ```sh
59
- bunx @vela-science/canopus@0.5.0 --version
59
+ bunx @vela-science/canopus@0.5.2 --version
60
60
  ```
61
61
 
62
62
  Inspect a clean frontier, then run its first ranked producer offer:
63
63
 
64
64
  ```sh
65
- bunx @vela-science/canopus@0.5.0 doctor /path/to/frontier
66
- bunx @vela-science/canopus@0.5.0 run /path/to/frontier --first
67
- bunx @vela-science/canopus@0.5.0 inspect latest
68
- bunx @vela-science/canopus@0.5.0 replay /path/to/run.json
65
+ bunx @vela-science/canopus@0.5.2 doctor /path/to/frontier
66
+ bunx @vela-science/canopus@0.5.2 run /path/to/frontier --first
67
+ bunx @vela-science/canopus@0.5.2 inspect latest
68
+ bunx @vela-science/canopus@0.5.2 replay /path/to/run.json
69
69
  ```
70
70
 
71
71
  Use `--no-land` for a diagnostic mission that cannot change the source frontier:
72
72
 
73
73
  ```sh
74
- bunx @vela-science/canopus@0.5.0 run /path/to/frontier --first --no-land
74
+ bunx @vela-science/canopus@0.5.2 run /path/to/frontier --first --no-land
75
75
  ```
76
76
 
77
77
  `doctor` binds the exact Vela, Codex, Git, frontier, packet, profile, and verifier
@@ -112,7 +112,7 @@ commits, run roots, audit evidence, and nonclaims live in
112
112
 
113
113
  ## Development
114
114
 
115
- Requires Bun 1.3.12, Vela 0.911.0, Codex CLI 0.144.6, and Docker. The built
115
+ Requires Bun 1.3.12, Vela 0.911.1, Codex CLI 0.144.6, and Docker. The built
116
116
  package also runs under Node 22 or 24; unsupported odd-numbered Node releases
117
117
  are rejected rather than silently treated as supported.
118
118
 
@@ -120,8 +120,8 @@ export async function doctorProduct(options) {
120
120
  runtimeIdentity({ name: "vela", cwd: frontier, home: runtime, runner }),
121
121
  runtimeIdentity({ name: "git", cwd: frontier, home: runtime, runner }),
122
122
  ]);
123
- if (vela.version !== "vela 0.911.0") {
124
- throw new Error(`Canopus ${CANOPUS_VERSION} requires vela 0.911.0, observed ${vela.version}`);
123
+ if (vela.version !== "vela 0.911.1") {
124
+ throw new Error(`Canopus ${CANOPUS_VERSION} requires vela 0.911.1, observed ${vela.version}`);
125
125
  }
126
126
  const [status, offer, gitStatus] = await Promise.all([
127
127
  jsonCommand({ runner, argv: [vela.binary, "status", ".", "--json"], cwd: frontier, home: runtime, label: "vela status" }),
@@ -16,6 +16,9 @@ function publicCaveat(value) {
16
16
  }
17
17
  return value;
18
18
  }
19
+ function shellArgument(value) {
20
+ return `'${value.replaceAll("'", `'"'"'`)}'`;
21
+ }
19
22
  export function projectPublicRun(options) {
20
23
  const { record, mission } = options;
21
24
  if (mission.schema !== "canopus.mission.v1") {
@@ -91,7 +94,7 @@ export function projectPublicRun(options) {
91
94
  `git clone ${repository.url}.git`,
92
95
  `cd ${repository.directory}`,
93
96
  `git checkout ${record.final_roots.git_commit}`,
94
- "vela reproduce .",
97
+ ...mission.allowed_paths.map((artifact) => `vela reproduce ${shellArgument(artifact)}`),
95
98
  ],
96
99
  },
97
100
  nonclaims: [
@@ -6,6 +6,12 @@ import { parseCandidate } from "../contracts/candidate.js";
6
6
  function unique(values) {
7
7
  return [...new Set(values)];
8
8
  }
9
+ function finalizeWorkerCaveat(value) {
10
+ if (/verif(?:y|ication|ier).*(?:pending|has not run)|pending.*verif(?:y|ication|ier)/iu.test(value)) {
11
+ return "The worker handed off without verifier authority; Canopus subsequently recorded the separate verifier outcome.";
12
+ }
13
+ return value;
14
+ }
9
15
  export function finalizeCandidate(options) {
10
16
  const draftPaths = options.engine.draft.artifacts.map((artifact) => `${artifact.path}:${artifact.kind}`).sort();
11
17
  const supporting = new Map((options.supportingArtifacts ?? []).map((entry) => [entry.path, entry.kind]));
@@ -34,7 +40,7 @@ export function finalizeCandidate(options) {
34
40
  ? `The engine proposed a candidate, but the declared verifier did not pass: ${options.engine.draft.claim}`
35
41
  : exactPositiveClaim ?? options.engine.draft.claim;
36
42
  const caveats = unique([
37
- ...options.engine.draft.caveats,
43
+ ...options.engine.draft.caveats.map(finalizeWorkerCaveat),
38
44
  `Declared verifier outcome: ${options.verifier.status}.`,
39
45
  "Canopus produced this record; it is not a human acceptance decision.",
40
46
  ]);
@@ -432,7 +432,7 @@ export class VelaClient {
432
432
  if (replay.source_hash !== undefined) {
433
433
  assertEqual(normalizeSha256(replay.source_hash, "vela check.replay.source_hash"), checkCurrent, "Vela source snapshot");
434
434
  }
435
- const proof = version === "0.900.0" || version === "0.900.1" || version === "0.900.2" || version === "0.901.0" || version === "0.910.0" || version === "0.911.0"
435
+ const proof = version === "0.900.0" || version === "0.900.1" || version === "0.900.2" || version === "0.901.0" || version === "0.910.0" || version === "0.911.0" || version === "0.911.1"
436
436
  ? {
437
437
  ok: true,
438
438
  command: "status_root_projection",
@@ -44,7 +44,10 @@ canopus public-run /local/run/run.json \
44
44
  `canopus.public-run.v1` contains only mission and model identity, a bounded
45
45
  activity summary, claim and caveats, artifact/verifier/Receipt roots, route,
46
46
  accepted delta, usage, source/final commits, and clean-clone reproduction
47
- commands. It cannot export a failed or admitted run. Never publish the raw run
47
+ commands. Those public commands target the mission's exact allowed artifact
48
+ paths; they do not substitute frontier-wide accepted-state replay for
49
+ verification of a pending artifact. It cannot export a failed or admitted run.
50
+ Never publish the raw run
48
51
  directory, isolated homes, authentication, private paths, or unrestricted logs.
49
52
 
50
53
  The run root also contains isolated checkouts and content-addressed artifacts.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vela-science/canopus",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "A bounded, replaceable research harness over released Vela interfaces",
5
5
  "type": "module",
6
6
  "private": false,