@vela-science/canopus 0.6.4 → 0.7.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 (35) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +26 -16
  3. package/SECURITY.md +3 -2
  4. package/capsules/erdos1056-k15/bin/linux-arm64/{10428601-10428800 → 10428801-10429000}/verifier +0 -0
  5. package/capsules/erdos1056-k15/bin/linux-x86_64/{10428601-10428800 → 10428801-10429000}/verifier +0 -0
  6. package/dist/src/activity/events.d.ts +4 -1
  7. package/dist/src/activity/events.js +8 -2
  8. package/dist/src/activity/store.d.ts +2 -2
  9. package/dist/src/activity/store.js +4 -3
  10. package/dist/src/cli.js +2 -37
  11. package/dist/src/product/run.js +0 -7
  12. package/dist/src/run.d.ts +0 -7
  13. package/dist/src/run.js +0 -15
  14. package/dist/src/vela/cli.d.ts +0 -9
  15. package/dist/src/vela/cli.js +0 -48
  16. package/missions/erdos1056-k15-next/mission.draft.json +6 -6
  17. package/package.json +3 -10
  18. package/profiles/{erdos1056-k15-10428601-10428800.json → erdos1056-k15-10428801-10429000.json} +9 -9
  19. package/BUILD_WEEK.md +0 -198
  20. package/advisories/erdos1056-claim-fidelity/output.schema.json +0 -90
  21. package/advisories/erdos1056-claim-fidelity/registration.json +0 -42
  22. package/advisories/erdos1056-claim-fidelity/results/assessment.json +0 -1
  23. package/advisories/erdos1056-claim-fidelity/results/verification.json +0 -1
  24. package/dist/src/capability/withdrawal.d.ts +0 -47
  25. package/dist/src/capability/withdrawal.js +0 -487
  26. package/dist/src/product/withdraw.d.ts +0 -8
  27. package/dist/src/product/withdraw.js +0 -255
  28. package/docs/RELEASES.md +0 -1326
  29. package/evidence/build-week/run_eb6bcd46-cffd-4ae8-b630-2681bd84da71.public.json +0 -1
  30. package/evidence/build-week/run_f68e4cfc-e5c7-4c73-86cb-d79807c47ec4.public.json +0 -1
  31. package/evidence/erdos/run_192b3bef-9d6e-49e5-b72d-7ae903b29d5e/pending-commands.json +0 -1
  32. package/evidence/erdos/run_192b3bef-9d6e-49e5-b72d-7ae903b29d5e/public-run.json +0 -1
  33. package/evidence/erdos/run_192b3bef-9d6e-49e5-b72d-7ae903b29d5e/root-manifest.json +0 -1
  34. package/evidence/erdos/run_192b3bef-9d6e-49e5-b72d-7ae903b29d5e/web-import.json +0 -1
  35. package/scripts/run-claim-fidelity-advisory.mjs +0 -235
package/CHANGELOG.md CHANGED
@@ -2,6 +2,41 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.7.0 - 2026-07-25
6
+
7
+ - Retire long-lived proposal-withdrawal capabilities. Successful runs now
8
+ destroy the isolated producer key with the rest of the Vela home; `inspect`
9
+ reports only rooted run state, and the `withdraw` command and capability
10
+ store are removed. Historical activity records and Vela
11
+ `proposal.withdrawn` events remain readable, while pending proposals remain
12
+ canonical review records rather than reasons to retain a private key.
13
+ - Narrow the npm package to the active Canopus product boundary. Historical
14
+ Build Week records, release ledgers, advisories, and retained Erdős evidence
15
+ remain immutable in Git and tagged source archives but no longer inflate the
16
+ installed runtime. Stable README links point to the exact `v0.6.5` archive,
17
+ while missions, profiles, verifier capsules, schemas, runtime custody
18
+ fixtures, and current product guidance continue to ship.
19
+
20
+ ## 0.6.5 - 2026-07-25
21
+
22
+ - Advance the sole runnable Erdős 1056 profile to the adjacent,
23
+ non-overlapping range `10428801..10429000`. The registration freezes one
24
+ bounded Mission v1 draft and independently built static Linux ARM64 and
25
+ x86-64 verifier capsules before any model call. The completed
26
+ `10428601..10428800` profile remains reproducible from Canopus `0.6.3`, its
27
+ retained run evidence, and immutable Git history; its binaries are removed
28
+ from the active package rather than accumulated indefinitely.
29
+ - Complete that registered mission in 73,083 observed tokens. The frozen
30
+ verifier independently confirms the exhaustive bounded-negative result over
31
+ all 15 primes in `10428801..10429000`; Vela lands Receipt
32
+ `sha256:7a7c728516e79da3f25ac1f6c10c30908949b6aba118dc9752f61b90b4a96435`
33
+ as proposal `vpr_4a9068064a0c441c` through Defer with accepted-event delta
34
+ zero, and clean-clone reproduction matches. The result is not a universal
35
+ nonexistence claim and is not scientific acceptance.
36
+ - Publish only the sanitized read-only run projection at
37
+ `evidence/erdos/run_b3b0cf07-b149-4d53-8258-76ba0e1fc0a5`; the raw worker
38
+ directory, credentials, unrestricted logs, and withdrawal capability remain
39
+ outside the package.
5
40
  - Compose exactly with released Vela `0.915.1`. The maintenance release changes
6
41
  no mission, Receipt, verifier, policy, proposal, or authority contract.
7
42
  GitHub CI pins the released macOS, Linux, and Windows archives and binaries by
package/README.md CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  <p align="center">
18
18
  <a href="https://app.vela.space/frontiers/sidon-sets/runs/run_f68e4cfc-e5c7-4c73-86cb-d79807c47ec4">Retained Sidon run</a> ·
19
- <a href="BUILD_WEEK.md">Build Week record</a> ·
19
+ <a href="https://github.com/vela-science/vela-research-harness/blob/v0.6.5/BUILD_WEEK.md">Build Week archive</a> ·
20
20
  <a href="docs/MISSIONS.md">Missions</a> ·
21
21
  <a href="docs/RUN_RECORD.md">Run records</a> ·
22
22
  <a href="https://github.com/vela-science/vela">Vela</a>
@@ -57,15 +57,16 @@ Mission → GPT-5.6 → artifact → verifier → Receipt → Defer.
57
57
  **90 seconds — inspect the shipped product:**
58
58
 
59
59
  ```sh
60
- bunx @vela-science/canopus@0.6.4 --version
61
- bunx @vela-science/canopus@0.6.4 profile validate sidon-a24-at-least-7194-gpt56-v3
60
+ bunx @vela-science/canopus@0.7.0 --version
61
+ bunx @vela-science/canopus@0.7.0 profile validate sidon-a24-at-least-7194-gpt56-v3
62
62
  ```
63
63
 
64
- **Full workflow — reproduce without rebuilding Canopus:**
64
+ **Retained historical result — reproduce without rebuilding Canopus:**
65
65
 
66
+ This Sidon artifact remains bound to the Vela version recorded when it landed.
66
67
  Install the provenance-checked prebuilt
67
68
  [Vela 0.912.0 release](https://github.com/vela-science/vela/releases/tag/v0.912.0)
68
- for your platform, then:
69
+ for this replay only, then:
69
70
 
70
71
  ```sh
71
72
  git clone https://github.com/vela-science/sidon-frontier.git
@@ -80,21 +81,24 @@ The first command selects the pending artifact explicitly and runs Vela's
80
81
  frozen Sidon verifier. The second is an independent base-3 implementation that
81
82
  also rejects a bound collision injection. Neither command accepts the proposal.
82
83
 
84
+ For new missions, use Vela `0.915.1`, the version composed with Canopus
85
+ `0.7.0` and enforced by `canopus doctor`.
86
+
83
87
  ## Quickstart
84
88
 
85
89
  Run the provenance-backed public package with Bun:
86
90
 
87
91
  ```sh
88
- bunx @vela-science/canopus@0.6.4 --version
92
+ bunx @vela-science/canopus@0.7.0 --version
89
93
  ```
90
94
 
91
95
  Inspect a clean frontier, then run its first ranked producer offer:
92
96
 
93
97
  ```sh
94
- bunx @vela-science/canopus@0.6.4 doctor /path/to/frontier
95
- bunx @vela-science/canopus@0.6.4 run /path/to/frontier --first
96
- bunx @vela-science/canopus@0.6.4 inspect latest
97
- bunx @vela-science/canopus@0.6.4 replay /path/to/run.json
98
+ bunx @vela-science/canopus@0.7.0 doctor /path/to/frontier
99
+ bunx @vela-science/canopus@0.7.0 run /path/to/frontier --first
100
+ bunx @vela-science/canopus@0.7.0 inspect latest
101
+ bunx @vela-science/canopus@0.7.0 replay /path/to/run.json
98
102
  ```
99
103
 
100
104
  Export a completed Defer run without publishing or mutating anything:
@@ -113,7 +117,7 @@ standing after verification; historical run v0 records remain inspectable.
113
117
  Use `--no-land` for a diagnostic mission that cannot change the source frontier:
114
118
 
115
119
  ```sh
116
- bunx @vela-science/canopus@0.6.4 run /path/to/frontier --first --no-land
120
+ bunx @vela-science/canopus@0.7.0 run /path/to/frontier --first --no-land
117
121
  ```
118
122
 
119
123
  `doctor` binds the exact Vela, Codex, Git, frontier, packet, profile, and verifier
@@ -126,7 +130,7 @@ unregistered targets. It never silently skips the first ranked offer.
126
130
  | --- | --- | --- |
127
131
  | Codex worker | Use tools inside one bounded workspace | Reach the network, host home, human keys, or verifier |
128
132
  | Verifier | Read frozen candidate bytes and declared inputs | Write, use the network, or make an authority decision |
129
- | Canopus | Preserve evidence, replay, land a Receipt, withdraw its own proposal | Sign, accept, reject, or call verifier success acceptance |
133
+ | Canopus | Preserve evidence, replay, and land a Receipt | Sign, accept, reject, retain producer keys, or call verifier success acceptance |
130
134
 
131
135
  The worker uses macOS Seatbelt or Codex's Bubblewrap sandbox on Linux and WSL2.
132
136
  The verifier runs in a separate pinned container with network and writes denied.
@@ -140,17 +144,23 @@ canopus inspect [run.json | latest]
140
144
  canopus replay <run.json>
141
145
  ```
142
146
 
143
- Advanced profile and withdrawal commands are documented in
144
- [Missions](docs/MISSIONS.md). Installed profiles are closed,
147
+ Advanced profile commands are documented in [Missions](docs/MISSIONS.md).
148
+ Installed profiles are closed,
145
149
  content-addressed contracts that bind the target, packet, objective, artifact
146
150
  types, worker, verifier, replay command, budgets, and landing ceiling.
147
151
 
152
+ Producer identities are ephemeral. After a successful landing and clean-clone
153
+ reproduction, Canopus destroys the isolated Vela home instead of retaining a
154
+ proposal-scoped private key. A proposal may remain pending until Vela policy or
155
+ a human reviewer decides it; Canopus does not need a second control channel.
156
+
148
157
  ## Retained Build Week evidence
149
158
 
150
159
  Inspect the retained Mission → worker → artifact → verifier → Receipt → Defer
151
160
  chain on the [exact Sidon run](https://app.vela.space/frontiers/sidon-sets/runs/run_f68e4cfc-e5c7-4c73-86cb-d79807c47ec4).
152
161
  Exact commits, run roots, audit evidence, and nonclaims live in
153
- [`BUILD_WEEK.md`](BUILD_WEEK.md).
162
+ the retained
163
+ [`v0.6.5` Build Week archive](https://github.com/vela-science/vela-research-harness/blob/v0.6.5/BUILD_WEEK.md).
154
164
 
155
165
  ## Development
156
166
 
@@ -168,7 +178,7 @@ bun run pack:check
168
178
 
169
179
  - [Missions and profiles](docs/MISSIONS.md)
170
180
  - [Run records and publication](docs/RUN_RECORD.md)
171
- - [Release evidence](docs/RELEASES.md)
181
+ - [Historical release evidence](https://github.com/vela-science/vela-research-harness/blob/v0.7.0/docs/RELEASES.md)
172
182
  - [Why the harness stays removable](docs/adr/0001-harness-boundary-and-name.md)
173
183
 
174
184
  ## License
package/SECURITY.md CHANGED
@@ -5,8 +5,9 @@ Report vulnerabilities privately through GitHub Security Advisories for
5
5
 
6
6
  Canopus does not accept human signing keys. Do not place a human Vela key,
7
7
  provider credential, or unpublished scientific secret inside a run root.
8
- Successful runs scrub the isolated agent-key home, but operators remain
9
- responsible for deleting failed diagnostic runs and benchmark output.
8
+ Successful runs scrub the isolated agent-key home and retain no producer
9
+ private key or withdrawal capability. Operators remain responsible for
10
+ deleting failed diagnostic runs and benchmark output.
10
11
 
11
12
  Agent-authored Git commits and tags must explicitly disable ambient signing
12
13
  (`commit.gpgSign=false`, `tag.gpgSign=false`) and verify that the resulting Git
@@ -1,6 +1,9 @@
1
1
  export declare const ACTIVITY_SCHEMA: "canopus.activity.v0";
2
- export declare const ACTIVITY_TYPES: readonly ["run.started", "workspace.prepared", "roots.verified", "target.offered", "work.skipped", "work.claimed", "engine.started", "engine.completed", "artifact.frozen", "artifacts.published", "verifier.completed", "candidate.finalized", "receipt.mapped", "landing.observed", "landing.bound", "landing.completed", "withdrawal_capability.retained", "reproduction.completed", "projection.written", "run.completed", "run.failed"];
2
+ export declare const WRITABLE_ACTIVITY_TYPES: readonly ["run.started", "workspace.prepared", "roots.verified", "target.offered", "work.skipped", "work.claimed", "engine.started", "engine.completed", "artifact.frozen", "artifacts.published", "verifier.completed", "candidate.finalized", "receipt.mapped", "landing.observed", "landing.bound", "landing.completed", "reproduction.completed", "projection.written", "run.completed", "run.failed"];
3
+ export declare const HISTORICAL_ACTIVITY_TYPES: readonly ["withdrawal_capability.retained"];
4
+ export declare const ACTIVITY_TYPES: readonly ["run.started", "workspace.prepared", "roots.verified", "target.offered", "work.skipped", "work.claimed", "engine.started", "engine.completed", "artifact.frozen", "artifacts.published", "verifier.completed", "candidate.finalized", "receipt.mapped", "landing.observed", "landing.bound", "landing.completed", "reproduction.completed", "projection.written", "run.completed", "run.failed", "withdrawal_capability.retained"];
3
5
  export type ActivityType = (typeof ACTIVITY_TYPES)[number];
6
+ export type WritableActivityType = (typeof WRITABLE_ACTIVITY_TYPES)[number];
4
7
  export interface ActivityEventBody {
5
8
  schema: typeof ACTIVITY_SCHEMA;
6
9
  run_id: string;
@@ -1,5 +1,5 @@
1
1
  export const ACTIVITY_SCHEMA = "canopus.activity.v0";
2
- export const ACTIVITY_TYPES = [
2
+ export const WRITABLE_ACTIVITY_TYPES = [
3
3
  "run.started",
4
4
  "workspace.prepared",
5
5
  "roots.verified",
@@ -16,9 +16,15 @@ export const ACTIVITY_TYPES = [
16
16
  "landing.observed",
17
17
  "landing.bound",
18
18
  "landing.completed",
19
- "withdrawal_capability.retained",
20
19
  "reproduction.completed",
21
20
  "projection.written",
22
21
  "run.completed",
23
22
  "run.failed",
24
23
  ];
24
+ export const HISTORICAL_ACTIVITY_TYPES = [
25
+ "withdrawal_capability.retained",
26
+ ];
27
+ export const ACTIVITY_TYPES = [
28
+ ...WRITABLE_ACTIVITY_TYPES,
29
+ ...HISTORICAL_ACTIVITY_TYPES,
30
+ ];
@@ -1,4 +1,4 @@
1
- import { type ActivityEvent, type ActivityType } from "./events.js";
1
+ import { type ActivityEvent, type WritableActivityType } from "./events.js";
2
2
  export declare function readActivity(file: string): Promise<ActivityEvent[]>;
3
3
  export declare class ActivityStore {
4
4
  #private;
@@ -6,5 +6,5 @@ export declare class ActivityStore {
6
6
  static open(file: string, runId: string): Promise<ActivityStore>;
7
7
  get tip(): string | null;
8
8
  get events(): readonly ActivityEvent[];
9
- append(type: ActivityType, payload: Record<string, unknown>): Promise<ActivityEvent>;
9
+ append(type: WritableActivityType, payload: Record<string, unknown>): Promise<ActivityEvent>;
10
10
  }
@@ -3,7 +3,7 @@ import { mkdir, open } from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { canonicalJson, contentDigest } from "../util/canonical.js";
5
5
  import { readBoundedRegularFile } from "../util/files.js";
6
- import { ACTIVITY_SCHEMA, ACTIVITY_TYPES, } from "./events.js";
6
+ import { ACTIVITY_SCHEMA, ACTIVITY_TYPES, WRITABLE_ACTIVITY_TYPES, } from "./events.js";
7
7
  const MAX_ACTIVITY_BYTES = 64 * 1024 * 1024;
8
8
  const MAX_EVENT_BYTES = 1024 * 1024;
9
9
  function parseEvent(value, line) {
@@ -129,8 +129,9 @@ export class ActivityStore {
129
129
  });
130
130
  this.#queue = this.#queue.then(async () => {
131
131
  try {
132
- if (!ACTIVITY_TYPES.includes(type))
133
- throw new Error(`unknown activity type ${type}`);
132
+ if (!WRITABLE_ACTIVITY_TYPES.includes(type)) {
133
+ throw new Error(`retired or unknown activity type ${type}`);
134
+ }
134
135
  const body = {
135
136
  schema: ACTIVITY_SCHEMA,
136
137
  run_id: this.#runId,
package/dist/src/cli.js CHANGED
@@ -16,7 +16,6 @@ import { buildPublicationBundle } from "./projection/publication.js";
16
16
  import { doctorProduct } from "./product/doctor.js";
17
17
  import { replayProduct } from "./product/replay.js";
18
18
  import { runProduct } from "./product/run.js";
19
- import { withdrawProduct } from "./product/withdraw.js";
20
19
  import { CANOPUS_VERSION } from "./product/version.js";
21
20
  import { listProductProfiles, packProductProfile, validateProductProfile, } from "./product/profile-bundle.js";
22
21
  import { loadProductProfile } from "./product/profile.js";
@@ -24,7 +23,6 @@ import { runCanopus } from "./run.js";
24
23
  import { readBoundedRegularFile } from "./util/files.js";
25
24
  import { canonicalJson, contentDigest } from "./util/canonical.js";
26
25
  import { VelaClient } from "./vela/cli.js";
27
- import { withdrawalCapabilityStatus } from "./capability/withdrawal.js";
28
26
  function usage() {
29
27
  return `Canopus — bounded Vela research harness
30
28
 
@@ -39,7 +37,6 @@ Primary workflow:
39
37
  canopus publish-run <run.json> --mission <mission.json> \
40
38
  --repository <public-url> --output <new-directory>
41
39
  canopus replay <run.json>
42
- canopus withdraw [frontier] [--run <run.json|latest>] --reason <text>
43
40
 
44
41
  Mission v1 prepare/validate remains available under advanced help.
45
42
 
@@ -116,14 +113,6 @@ Creates a sanitized public projection, root manifest, proposal-scoped pending
116
113
  commands, and a read-only Vela Observatory import descriptor. It never lands,
117
114
  signs, accepts, pushes, or deploys.`;
118
115
  }
119
- function withdrawUsage() {
120
- return `Usage:
121
- canopus withdraw [frontier] [--run <run.json|latest>] --reason <text>
122
-
123
- Uses only the retained proposal-scoped producer capability. The operation runs
124
- in a disposable exact-head clone, verifies strict and clean-clone replay, then
125
- fast-forwards the clean source. It never mounts a worker or human key.`;
126
- }
127
116
  function isHelp(value) {
128
117
  return value === "--help" || value === "-h" || value === "help";
129
118
  }
@@ -445,10 +434,7 @@ async function inspectCommand(value, rest) {
445
434
  : schema === "canopus.failure.v0"
446
435
  ? projectFailure(parseFailureRecord(raw))
447
436
  : projectRun(parseRunRecord(raw));
448
- const withdrawal = "proposal_id" in projection
449
- ? await withdrawalCapabilityStatus(projection.proposal_id)
450
- : { state: "not_applicable", available: false };
451
- process.stdout.write(`${JSON.stringify({ ok: true, command: "inspect", run_file: file, projection, withdrawal })}\n`);
437
+ process.stdout.write(`${JSON.stringify({ ok: true, command: "inspect", run_file: file, projection })}\n`);
452
438
  }
453
439
  async function replayCommand(file, rest) {
454
440
  if (file === undefined || rest.length !== 0)
@@ -514,22 +500,6 @@ async function publishRunCommand(file, rest) {
514
500
  authority_effect: "none",
515
501
  })}\n`);
516
502
  }
517
- async function withdrawCommand(args) {
518
- const parsed = productOptions(args, ["--run", "--reason"], []);
519
- if (parsed.positional.length > 1)
520
- throw new Error("withdraw accepts at most one frontier");
521
- const reason = parsed.values.get("--reason");
522
- if (reason === undefined || reason.trim().length === 0)
523
- throw new Error("withdraw requires --reason");
524
- const runValue = parsed.values.get("--run") ?? "latest";
525
- const runFile = runValue === "latest" ? await latestRunFile() : path.resolve(runValue);
526
- const result = await withdrawProduct({
527
- frontier: path.resolve(parsed.positional[0] ?? "."),
528
- runFile,
529
- reason,
530
- });
531
- process.stdout.write(`${JSON.stringify(result)}\n`);
532
- }
533
503
  async function main(argv) {
534
504
  const [command, file, ...rest] = argv;
535
505
  if (command === undefined || isHelp(command)) {
@@ -557,8 +527,7 @@ async function main(argv) {
557
527
  : command === "replay" ? replayUsage()
558
528
  : command === "public-run" ? publicRunUsage()
559
529
  : command === "publish-run" ? publishRunUsage()
560
- : command === "withdraw" ? withdrawUsage()
561
- : usage()}\n`);
530
+ : usage()}\n`);
562
531
  return;
563
532
  }
564
533
  if (command === "doctor") {
@@ -577,10 +546,6 @@ async function main(argv) {
577
546
  await publishRunCommand(file, rest);
578
547
  return;
579
548
  }
580
- if (command === "withdraw") {
581
- await withdrawCommand(argv.slice(1));
582
- return;
583
- }
584
549
  if (command === "validate") {
585
550
  if (file === undefined)
586
551
  throw new Error("validate requires a mission file");
@@ -11,7 +11,6 @@ import { readBoundedRegularFile } from "../util/files.js";
11
11
  import { VelaClient } from "../vela/cli.js";
12
12
  import { doctorProduct } from "./doctor.js";
13
13
  import { loadProfileDraft, loadProfileResultContract, packagedWorkerProfile, stageProfileCapsule, } from "./profile.js";
14
- import { retainWithdrawalCapability } from "../capability/withdrawal.js";
15
14
  function packageFile(relative) {
16
15
  return fileURLToPath(new URL(`../../../${relative}`, import.meta.url));
17
16
  }
@@ -220,12 +219,6 @@ export async function runProduct(options) {
220
219
  bundleRoot,
221
220
  dockerBinary: dockerRuntime.binary,
222
221
  verifierRunner: runner,
223
- retainWithdrawalCapability: async (context) => {
224
- await retainWithdrawalCapability({
225
- ...context,
226
- velaBinary: diagnosis.public.runtimes.vela.binary,
227
- });
228
- },
229
222
  };
230
223
  const run = options.noLand === true
231
224
  ? await runCanopus({ ...commonRun, noLand: true })
package/dist/src/run.d.ts CHANGED
@@ -25,13 +25,6 @@ export interface CanopusRunOptions {
25
25
  bundleRoot?: string;
26
26
  dockerBinary?: string;
27
27
  verifierRunner?: CommandRunner;
28
- retainWithdrawalCapability?: (context: {
29
- velaHome: string;
30
- landingRepo: string;
31
- mission: Mission;
32
- landing: LandResult;
33
- finalRoots: MissionRoots;
34
- }) => Promise<void>;
35
28
  noLand?: false;
36
29
  }
37
30
  export interface CanopusNoLandOptions extends Omit<CanopusRunOptions, "noLand"> {
package/dist/src/run.js CHANGED
@@ -542,20 +542,6 @@ export async function runCanopus(options) {
542
542
  roots: reproductionInspection.roots,
543
543
  verifier_status: reproductionVerifier.status,
544
544
  });
545
- if (options.retainWithdrawalCapability !== undefined) {
546
- phase = "withdrawal_capability";
547
- await options.retainWithdrawalCapability({
548
- velaHome: paths.velaHome,
549
- landingRepo: paths.landing,
550
- mission: options.mission,
551
- landing,
552
- finalRoots: final.roots,
553
- });
554
- await activity.append("withdrawal_capability.retained", {
555
- proposal_id: landing.proposalId,
556
- authority: "producer_withdrawal_only",
557
- });
558
- }
559
545
  await rm(paths.velaHome, { recursive: true, force: true });
560
546
  const record = {
561
547
  schema: RUN_RECORD_SCHEMA,
@@ -630,7 +616,6 @@ export async function runCanopus(options) {
630
616
  if (phase.startsWith("landing_") ||
631
617
  phase === "receipt_binding" ||
632
618
  phase === "clean_clone_reproduction" ||
633
- phase === "withdrawal_capability" ||
634
619
  phase === "record_finalization") {
635
620
  let observedRoots = null;
636
621
  let inspectionError = null;
@@ -44,14 +44,6 @@ export interface VelaLandCommandObservation {
44
44
  stdout_digest: string;
45
45
  stderr_digest: string;
46
46
  }
47
- export interface VelaWithdrawalResult {
48
- proposal_id: string;
49
- withdrawal_event_id: string;
50
- withdrawn_at: string;
51
- state_root_before: string;
52
- state_root_after: string;
53
- publication_commit: string;
54
- }
55
47
  export declare function strictBaselineFromCheck(check: Record<string, unknown>): StrictBaseline;
56
48
  export declare function validateLandResult(mission: Mission, raw: Record<string, unknown>): LandResult;
57
49
  export declare class VelaClient {
@@ -64,7 +56,6 @@ export declare class VelaClient {
64
56
  next(mission: Mission, repoRoot: string): Promise<VelaCommandResponse>;
65
57
  offer(repoRoot: string, frontier: string, roots: MissionRoots, strictBaseline?: StrictBaseline, limit?: number): Promise<VelaCommandResponse>;
66
58
  work(mission: Mission, repoRoot: string, target: string, expected: MissionRoots): Promise<VelaCommandResponse>;
67
- withdraw(repoRoot: string, frontier: string, proposalId: string, actor: string, reason: string): Promise<VelaWithdrawalResult>;
68
59
  landAuthoredCommand(mission: Mission, repoRoot: string, input: AuthoredReceiptInput, _expected: MissionRoots): Promise<VelaLandCommandObservation>;
69
60
  parseLandCommand(observation: VelaLandCommandObservation): Record<string, unknown>;
70
61
  validateLandResult(mission: Mission, raw: Record<string, unknown>): LandResult;
@@ -509,54 +509,6 @@ export class VelaClient {
509
509
  }
510
510
  return { ok: true, value };
511
511
  }
512
- async withdraw(repoRoot, frontier, proposalId, actor, reason) {
513
- if (!/^vpr_[0-9a-f]{16}$/u.test(proposalId)) {
514
- throw new VelaClientError("malformed_output", "withdrawal requires a full proposal id");
515
- }
516
- if (!actor.startsWith("agent:") || reason.trim().length === 0) {
517
- throw new VelaClientError("malformed_output", "withdrawal requires an agent actor and reason");
518
- }
519
- const value = await this.#json(["review", "withdraw", frontierPath(frontier), proposalId, "--as", actor, "--reason", reason, "--json"], repoRoot, "vela review withdraw");
520
- if (value.ok !== true || value.command !== "review.withdraw") {
521
- throw new VelaClientError("malformed_output", "vela review withdraw returned an invalid envelope");
522
- }
523
- if (value.proposal_id !== proposalId || value.idempotent !== false || value.key_read !== true) {
524
- throw new VelaClientError("malformed_output", "vela review withdraw did not bind one new key-backed withdrawal");
525
- }
526
- const eventId = stringAt(value.withdrawal_event_id, "vela review withdraw.withdrawal_event_id", {
527
- max: 20,
528
- pattern: /^vev_[0-9a-f]{16}$/u,
529
- });
530
- const withdrawnAt = stringAt(value.withdrawn_at, "vela review withdraw.withdrawn_at", {
531
- min: 20,
532
- max: 64,
533
- });
534
- if (!Number.isFinite(Date.parse(withdrawnAt))) {
535
- throw new VelaClientError("malformed_output", "vela review withdraw returned an invalid timestamp");
536
- }
537
- const stateRootBefore = normalizeSha256(value.state_root_before, "vela review withdraw.state_root_before");
538
- const stateRootAfter = normalizeSha256(value.state_root_after, "vela review withdraw.state_root_after");
539
- if (stateRootBefore === stateRootAfter) {
540
- throw new VelaClientError("malformed_output", "new withdrawal did not change the event-log root");
541
- }
542
- const publication = fieldObject(value, "publication", "vela review withdraw");
543
- const publicationState = stringAt(publication.state, "vela review withdraw.publication.state", {
544
- min: 1,
545
- max: 32,
546
- });
547
- if (publicationState !== "committed_local" && publicationState !== "pushed") {
548
- throw new VelaClientError("command_failed", `withdrawal publication is ${publicationState}, not committed`);
549
- }
550
- const publicationCommit = stringAt(publication.commit, "vela review withdraw.publication.commit", { max: 64, pattern: GIT_OBJECT_RE });
551
- return {
552
- proposal_id: proposalId,
553
- withdrawal_event_id: eventId,
554
- withdrawn_at: withdrawnAt,
555
- state_root_before: stateRootBefore,
556
- state_root_after: stateRootAfter,
557
- publication_commit: publicationCommit,
558
- };
559
- }
560
512
  async landAuthoredCommand(mission, repoRoot, input, _expected) {
561
513
  if ((input.predictedObservable === undefined) === (input.notApplicable === undefined)) {
562
514
  throw new VelaClientError("malformed_output", "authored receipt requires exactly one prediction mode");
@@ -1,15 +1,15 @@
1
1
  {
2
- "id": "mission_erdos1056_k15_range_10428601_10428800_native2_retry",
2
+ "id": "mission_erdos1056_k15_range_10428801_10429000_native3",
3
3
  "target": "auto",
4
4
  "frontier": ".",
5
5
  "actor": "agent:canopus-local",
6
6
  "role": "producer",
7
7
  "claim_type": "computational",
8
8
  "replayability": "exact",
9
- "objective": "Perform one finite exhaustive search for an Erdős 1056 k=15 witness over every prime p in the exact inclusive range 10428601..10428800. Use a compiled C++ program, one prime at a time; a flat open-addressed table keyed by the factorial residue keeps this bounded computation inside the registered memory and time limits. For each prime, compute t! modulo p for every cut t in 0..p-1 and count every residue fiber. For each p choose its largest fiber, breaking a tie by the smallest residue. If any largest fiber has at least 16 cuts, stop at the first such prime and report status=witness. Otherwise report status=negative and the greatest multiplicity over the whole range, breaking ties by the earliest prime and then the smallest residue. In both cases list every increasing cut in the selected fiber. Produce exactly one UTF-8 artifact at artifacts/erdos1056-k15-range-10428601-10428800.txt with these newline-terminated lines in order: schema=canopus.erdos1056-k15-search.v1; status=witness or status=negative; problem=1056; k=15; range_start=10428601; range_end=10428800; primes_tested=<exact count>; max_multiplicity=<exact count>; best_p=<prime>; best_residue=<residue>; cuts=<comma-separated cuts>. Return engine status success only after the program completes the entire registered range and writes the exact artifact. This is an exact bounded computation, not a universal answer to Erdős 1056.",
9
+ "objective": "Perform one finite exhaustive search for an Erdős 1056 k=15 witness over every prime p in the exact inclusive range 10428801..10429000. Use a compiled C++ program, one prime at a time; a flat open-addressed table keyed by the factorial residue keeps this bounded computation inside the registered memory and time limits. For each prime, compute t! modulo p for every cut t in 0..p-1 and count every residue fiber. For each p choose its largest fiber, breaking a tie by the smallest residue. If any largest fiber has at least 16 cuts, stop at the first such prime and report status=witness. Otherwise report status=negative and the greatest multiplicity over the whole range, breaking ties by the earliest prime and then the smallest residue. In both cases list every increasing cut in the selected fiber. Produce exactly one UTF-8 artifact at artifacts/erdos1056-k15-range-10428801-10429000.txt with these newline-terminated lines in order: schema=canopus.erdos1056-k15-search.v1; status=witness or status=negative; problem=1056; k=15; range_start=10428801; range_end=10429000; primes_tested=<exact count>; max_multiplicity=<exact count>; best_p=<prime>; best_residue=<residue>; cuts=<comma-separated cuts>. Return engine status success only after the program completes the entire registered range and writes the exact artifact. This is an exact bounded computation, not a universal answer to Erdős 1056.",
10
10
  "completion_condition": "The independent frozen capsule recomputes the full exact range in a separate network-denied and write-denied container and byte-matches the single artifact.",
11
11
  "allowed_paths": [
12
- "artifacts/erdos1056-k15-range-10428601-10428800.txt"
12
+ "artifacts/erdos1056-k15-range-10428801-10429000.txt"
13
13
  ],
14
14
  "budgets": {
15
15
  "max_research_wall_time_ms": 1800000,
@@ -26,7 +26,7 @@
26
26
  "verifier": {
27
27
  "argv": [
28
28
  "capsule/verifier",
29
- "{artifact:artifacts/erdos1056-k15-range-10428601-10428800.txt}"
29
+ "{artifact:artifacts/erdos1056-k15-range-10428801-10429000.txt}"
30
30
  ],
31
31
  "cwd": "site",
32
32
  "timeout_ms": 300000,
@@ -34,7 +34,7 @@
34
34
  "capsule_path": "capsule/verifier"
35
35
  },
36
36
  "scientific_chain": {
37
- "predicted_observable": "The frozen verifier independently obtains the same first witness or complete bounded-negative result for all primes in 10428601..10428800 and exits zero on the exact candidate bytes.",
38
- "performed_test": "capsule/verifier artifacts/erdos1056-k15-range-10428601-10428800.txt"
37
+ "predicted_observable": "The frozen verifier independently obtains the same first witness or complete bounded-negative result for all primes in 10428801..10429000 and exits zero on the exact candidate bytes.",
38
+ "performed_test": "capsule/verifier artifacts/erdos1056-k15-range-10428801-10429000.txt"
39
39
  }
40
40
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vela-science/canopus",
3
- "version": "0.6.4",
3
+ "version": "0.7.0",
4
4
  "description": "A bounded, replaceable research harness over released Vela interfaces",
5
5
  "type": "module",
6
6
  "private": false,
@@ -31,7 +31,6 @@
31
31
  "dist/src/artifact",
32
32
  "dist/src/budget",
33
33
  "dist/src/candidate",
34
- "dist/src/capability",
35
34
  "dist/src/contracts",
36
35
  "dist/src/engines",
37
36
  "dist/src/evidence",
@@ -53,8 +52,8 @@
53
52
  "dist/src/run.js",
54
53
  "dist/src/run.d.ts",
55
54
  "schemas",
56
- "capsules/erdos1056-k15/bin/linux-arm64/10428601-10428800/verifier",
57
- "capsules/erdos1056-k15/bin/linux-x86_64/10428601-10428800/verifier",
55
+ "capsules/erdos1056-k15/bin/linux-arm64/10428801-10429000/verifier",
56
+ "capsules/erdos1056-k15/bin/linux-x86_64/10428801-10429000/verifier",
58
57
  "capsules/formal-erdos-505-test-dim-one/verifier",
59
58
  "capsules/quantum-10-1-4/verifier.py",
60
59
  "capsules/sidon-a24/bin/linux-arm64/verifier",
@@ -62,18 +61,12 @@
62
61
  "missions",
63
62
  "profiles",
64
63
  "runtime",
65
- "advisories",
66
- "evidence/build-week",
67
- "evidence/erdos",
68
- "scripts/run-claim-fidelity-advisory.mjs",
69
64
  "scripts/run-hostile-native-custody-fixture.mjs",
70
65
  "scripts/run-hostile-verifier-fixture.mjs",
71
66
  "tests/fixtures/hostile-verifier",
72
67
  "README.md",
73
- "BUILD_WEEK.md",
74
68
  "THIRD_PARTY.md",
75
69
  "docs/MISSIONS.md",
76
- "docs/RELEASES.md",
77
70
  "docs/RUN_RECORD.md",
78
71
  "CHANGELOG.md",
79
72
  "SECURITY.md",
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "schema": "canopus.profile.v2",
3
- "name": "erdos1056-k15-10428601-10428800",
3
+ "name": "erdos1056-k15-10428801-10429000",
4
4
  "target": "erdos:1056",
5
5
  "target_packet_schema": "erdos-frontier.problem-work.v1",
6
6
  "draft": "missions/erdos1056-k15-next/mission.draft.json",
7
- "draft_sha256": "sha256:31f0d178472b2eb904d081be09a78fdeb2f65091389e4b09650064e71f31c91f",
8
- "objective_sha256": "sha256:b70c05cfe940c96610386c1abf51507e3282c2f96f3c6ef8ae85b1216a2f4b0a",
7
+ "draft_sha256": "sha256:bcf426097f93fef79e2743e1591940f0d2e13a899f6b81b5e58e697213ddfd9e",
8
+ "objective_sha256": "sha256:cc5ec511b6b66a5d4e99047aba59a8b2e89dff5c8f496a759183355547f968a5",
9
9
  "completion_condition_sha256": "sha256:4a4a06e2c867867a191af27900e96c23e677db2775783f1829c31e4867a7f270",
10
- "allowed_artifacts_sha256": "sha256:11c82c9b03ba9cb220187160fac0923a38a533a5d7f05cc6749eaadfafa98d90",
10
+ "allowed_artifacts_sha256": "sha256:f0f5f096175d80648c9d0463c726ebdf2811ed25511b1640e7151ab3eb622bd3",
11
11
  "budgets_sha256": "sha256:5457a393d492978d8f191aca42fde0bf95261d74d701ce7ecd1b99f6e0dcbc0c",
12
- "replay_argv_sha256": "sha256:d39c48fc7f6fe2d052e15d3454fecbd7db81b6eb764b01fd3d80dc96393c146c",
12
+ "replay_argv_sha256": "sha256:5442bf3648b752afc9898cfec9197cb47021bde71caa48028700ede7367a9176",
13
13
  "landing": {
14
14
  "expected_routes": ["defer"],
15
15
  "max_accepted_delta": 0
@@ -18,15 +18,15 @@
18
18
  "darwin-arm64": {
19
19
  "worker_profile": "runtime/native-worker/config.toml",
20
20
  "worker_profile_sha256": "sha256:12b58762819481ad101e7a172a296224b6050a8a07a7431272e521a4102908da",
21
- "verifier_capsule": "capsules/erdos1056-k15/bin/linux-arm64/10428601-10428800/verifier",
22
- "verifier_capsule_sha256": "sha256:875a28177ef9b29d2480a8fe7906eddc3e809824190083abc885609555f8e52d",
21
+ "verifier_capsule": "capsules/erdos1056-k15/bin/linux-arm64/10428801-10429000/verifier",
22
+ "verifier_capsule_sha256": "sha256:c9533a8650ca2a76f37c4d482e5467849eb6df4e11d18759207abd94739293f3",
23
23
  "verifier_image": "ghcr.io/vela-science/canopus-verifier@sha256:a6f354862f2a3f7d72eb99244c65fa8583c98b74e17e3d5ce6e31ef48aa16536"
24
24
  },
25
25
  "linux-x86_64": {
26
26
  "worker_profile": "runtime/native-worker/config-linux.toml",
27
27
  "worker_profile_sha256": "sha256:fddecc4b7458b91f6d55ae16b666d297ae7bcd1a2f5deeb6650dcea60fc0242c",
28
- "verifier_capsule": "capsules/erdos1056-k15/bin/linux-x86_64/10428601-10428800/verifier",
29
- "verifier_capsule_sha256": "sha256:51fc4e682d7a7f8f30f5e0dc2584e17fe94a037d246ff402fbe5d5ca6b820dc8",
28
+ "verifier_capsule": "capsules/erdos1056-k15/bin/linux-x86_64/10428801-10429000/verifier",
29
+ "verifier_capsule_sha256": "sha256:f9c33462ce457cf465aa95ae7e557a33c3c3988f5a9b7891b2accedb0eabee9e",
30
30
  "verifier_image": "ghcr.io/vela-science/canopus-verifier@sha256:a6f354862f2a3f7d72eb99244c65fa8583c98b74e17e3d5ce6e31ef48aa16536"
31
31
  }
32
32
  }