@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.
- package/CHANGELOG.md +35 -0
- package/README.md +26 -16
- package/SECURITY.md +3 -2
- package/capsules/erdos1056-k15/bin/linux-arm64/{10428601-10428800 → 10428801-10429000}/verifier +0 -0
- package/capsules/erdos1056-k15/bin/linux-x86_64/{10428601-10428800 → 10428801-10429000}/verifier +0 -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/cli.js +2 -37
- package/dist/src/product/run.js +0 -7
- package/dist/src/run.d.ts +0 -7
- package/dist/src/run.js +0 -15
- package/dist/src/vela/cli.d.ts +0 -9
- package/dist/src/vela/cli.js +0 -48
- package/missions/erdos1056-k15-next/mission.draft.json +6 -6
- package/package.json +3 -10
- package/profiles/{erdos1056-k15-10428601-10428800.json → erdos1056-k15-10428801-10429000.json} +9 -9
- 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/dist/src/capability/withdrawal.d.ts +0 -47
- package/dist/src/capability/withdrawal.js +0 -487
- package/dist/src/product/withdraw.d.ts +0 -8
- package/dist/src/product/withdraw.js +0 -255
- package/docs/RELEASES.md +0 -1326
- 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/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
|
|
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.
|
|
61
|
-
bunx @vela-science/canopus@0.
|
|
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
|
-
**
|
|
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
|
|
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.
|
|
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.
|
|
95
|
-
bunx @vela-science/canopus@0.
|
|
96
|
-
bunx @vela-science/canopus@0.
|
|
97
|
-
bunx @vela-science/canopus@0.
|
|
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.
|
|
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
|
|
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
|
|
144
|
-
|
|
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
|
-
|
|
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
|
-
- [
|
|
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
|
|
9
|
-
|
|
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
|
package/capsules/erdos1056-k15/bin/linux-arm64/{10428601-10428800 → 10428801-10429000}/verifier
RENAMED
|
Binary file
|
package/capsules/erdos1056-k15/bin/linux-x86_64/{10428601-10428800 → 10428801-10429000}/verifier
RENAMED
|
Binary file
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export declare const ACTIVITY_SCHEMA: "canopus.activity.v0";
|
|
2
|
-
export declare const
|
|
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
|
|
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
|
|
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:
|
|
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 (!
|
|
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
|
-
|
|
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
|
-
:
|
|
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");
|
package/dist/src/product/run.js
CHANGED
|
@@ -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;
|
package/dist/src/vela/cli.d.ts
CHANGED
|
@@ -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;
|
package/dist/src/vela/cli.js
CHANGED
|
@@ -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": "
|
|
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
|
|
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-
|
|
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-
|
|
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
|
|
38
|
-
"performed_test": "capsule/verifier artifacts/erdos1056-k15-range-
|
|
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.
|
|
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/
|
|
57
|
-
"capsules/erdos1056-k15/bin/linux-x86_64/
|
|
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",
|
package/profiles/{erdos1056-k15-10428601-10428800.json → erdos1056-k15-10428801-10429000.json}
RENAMED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "canopus.profile.v2",
|
|
3
|
-
"name": "erdos1056-k15-
|
|
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:
|
|
8
|
-
"objective_sha256": "sha256:
|
|
7
|
+
"draft_sha256": "sha256:bcf426097f93fef79e2743e1591940f0d2e13a899f6b81b5e58e697213ddfd9e",
|
|
8
|
+
"objective_sha256": "sha256:cc5ec511b6b66a5d4e99047aba59a8b2e89dff5c8f496a759183355547f968a5",
|
|
9
9
|
"completion_condition_sha256": "sha256:4a4a06e2c867867a191af27900e96c23e677db2775783f1829c31e4867a7f270",
|
|
10
|
-
"allowed_artifacts_sha256": "sha256:
|
|
10
|
+
"allowed_artifacts_sha256": "sha256:f0f5f096175d80648c9d0463c726ebdf2811ed25511b1640e7151ab3eb622bd3",
|
|
11
11
|
"budgets_sha256": "sha256:5457a393d492978d8f191aca42fde0bf95261d74d701ce7ecd1b99f6e0dcbc0c",
|
|
12
|
-
"replay_argv_sha256": "sha256:
|
|
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/
|
|
22
|
-
"verifier_capsule_sha256": "sha256:
|
|
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/
|
|
29
|
-
"verifier_capsule_sha256": "sha256:
|
|
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
|
}
|