@vela-science/canopus 0.4.5 → 0.5.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/BUILD_WEEK.md +102 -106
- package/CHANGELOG.md +27 -0
- package/README.md +109 -126
- package/capsules/erdos1056-k15/bin/linux-arm64/10428401-10428600/verifier +0 -0
- package/capsules/erdos1056-k15/bin/linux-x86_64/10428401-10428600/verifier +0 -0
- package/capsules/formal-erdos-505-test-dim-one/verifier +0 -0
- package/capsules/quantum-10-1-4/verifier.py +152 -0
- package/capsules/sidon-a24/bin/linux-arm64/verifier +0 -0
- package/capsules/sidon-a24/bin/linux-x86_64/verifier +0 -0
- package/dist/src/engines/codex-tools-native.d.ts +7 -0
- package/dist/src/engines/codex-tools-native.js +54 -4
- package/dist/src/product/doctor.js +20 -4
- package/dist/src/projection/public-run.js +8 -2
- package/dist/src/run.d.ts +1 -0
- package/dist/src/run.js +23 -1
- package/dist/src/vela/cli.js +1 -1
- package/docs/RELEASES.md +62 -0
- package/evidence/build-week/run_f68e4cfc-e5c7-4c73-86cb-d79807c47ec4.public.json +1 -0
- package/missions/quantum-10-1-4-retry/mission.draft.json +40 -0
- package/missions/sidon-a24-at-least-7194-gpt56/mission.draft.json +42 -0
- package/missions/sidon-a24-at-least-7194-gpt56-v2/mission.draft.json +42 -0
- package/missions/sidon-a24-at-least-7194-gpt56-v3/mission.draft.json +42 -0
- package/package.json +14 -9
- package/profiles/quantum-10-1-4-stabilizer-retry.json +35 -0
- package/profiles/sidon-a24-at-least-7194-gpt56-v2.json +35 -0
- package/profiles/sidon-a24-at-least-7194-gpt56-v3.json +35 -0
- package/profiles/sidon-a24-at-least-7194-gpt56.json +35 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Verify one explicit [[10,1,d>=4]] stabilizer witness."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import itertools
|
|
7
|
+
import json
|
|
8
|
+
import pathlib
|
|
9
|
+
import sys
|
|
10
|
+
|
|
11
|
+
SCHEMA = "canopus.quantum-stabilizer-witness.v1"
|
|
12
|
+
TARGET = "quantum:[[10,1,4]]"
|
|
13
|
+
N = 10
|
|
14
|
+
K = 1
|
|
15
|
+
EXPECTED_KEYS = {"schema", "target", "n", "k", "generators"}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def fail(message: str) -> "NoReturn":
|
|
19
|
+
print(f"quantum verifier: {message}", file=sys.stderr)
|
|
20
|
+
raise SystemExit(1)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def pauli_vector(pauli: str) -> int:
|
|
24
|
+
if len(pauli) != N or any(symbol not in "IXYZ" for symbol in pauli):
|
|
25
|
+
fail("each generator must be a length-10 string over I, X, Y, Z")
|
|
26
|
+
vector = 0
|
|
27
|
+
for qubit, symbol in enumerate(pauli):
|
|
28
|
+
if symbol in "XY":
|
|
29
|
+
vector |= 1 << qubit
|
|
30
|
+
if symbol in "ZY":
|
|
31
|
+
vector |= 1 << (N + qubit)
|
|
32
|
+
return vector
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def symplectic(left: int, right: int) -> int:
|
|
36
|
+
mask = (1 << N) - 1
|
|
37
|
+
left_x, left_z = left & mask, left >> N
|
|
38
|
+
right_x, right_z = right & mask, right >> N
|
|
39
|
+
return ((left_x & right_z).bit_count() + (left_z & right_x).bit_count()) & 1
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def binary_rank(rows: list[int]) -> int:
|
|
43
|
+
basis: dict[int, int] = {}
|
|
44
|
+
for original in rows:
|
|
45
|
+
row = original
|
|
46
|
+
while row:
|
|
47
|
+
pivot = row.bit_length() - 1
|
|
48
|
+
if pivot in basis:
|
|
49
|
+
row ^= basis[pivot]
|
|
50
|
+
else:
|
|
51
|
+
basis[pivot] = row
|
|
52
|
+
break
|
|
53
|
+
return len(basis)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def stabilizer_span(generators: list[int]) -> set[int]:
|
|
57
|
+
span = {0}
|
|
58
|
+
for generator in generators:
|
|
59
|
+
span.update(value ^ generator for value in tuple(span))
|
|
60
|
+
return span
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def error_vector(positions: tuple[int, ...], symbols: tuple[str, ...]) -> int:
|
|
64
|
+
vector = 0
|
|
65
|
+
for qubit, symbol in zip(positions, symbols, strict=True):
|
|
66
|
+
if symbol in "XY":
|
|
67
|
+
vector |= 1 << qubit
|
|
68
|
+
if symbol in "ZY":
|
|
69
|
+
vector |= 1 << (N + qubit)
|
|
70
|
+
return vector
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def main() -> None:
|
|
74
|
+
if len(sys.argv) != 2:
|
|
75
|
+
fail("usage: verifier.py WITNESS.json")
|
|
76
|
+
witness_path = pathlib.Path(sys.argv[1])
|
|
77
|
+
metadata = witness_path.lstat()
|
|
78
|
+
if not witness_path.is_file() or witness_path.is_symlink() or metadata.st_size > 65_536:
|
|
79
|
+
fail("witness must be one bounded regular file")
|
|
80
|
+
with witness_path.open("rb") as source:
|
|
81
|
+
raw = source.read(65_537)
|
|
82
|
+
if len(raw) > 65_536:
|
|
83
|
+
fail("witness exceeds 65536 bytes")
|
|
84
|
+
try:
|
|
85
|
+
witness = json.loads(raw)
|
|
86
|
+
except (UnicodeDecodeError, json.JSONDecodeError) as error:
|
|
87
|
+
fail(f"witness is not valid UTF-8 JSON: {error}")
|
|
88
|
+
if not isinstance(witness, dict) or set(witness) != EXPECTED_KEYS:
|
|
89
|
+
fail("witness fields must be exactly schema, target, n, k, generators")
|
|
90
|
+
if witness["schema"] != SCHEMA or witness["target"] != TARGET:
|
|
91
|
+
fail("witness schema or target is wrong")
|
|
92
|
+
if type(witness["n"]) is not int or type(witness["k"]) is not int:
|
|
93
|
+
fail("n and k must be integers")
|
|
94
|
+
if witness["n"] != N or witness["k"] != K:
|
|
95
|
+
fail("witness must declare n=10 and k=1")
|
|
96
|
+
declared = witness["generators"]
|
|
97
|
+
if not isinstance(declared, list) or len(declared) != N - K:
|
|
98
|
+
fail("witness must contain exactly nine generators")
|
|
99
|
+
if any(not isinstance(generator, str) for generator in declared):
|
|
100
|
+
fail("every generator must be a string")
|
|
101
|
+
if len(set(declared)) != len(declared):
|
|
102
|
+
fail("generators must be distinct")
|
|
103
|
+
generators = [pauli_vector(generator) for generator in declared]
|
|
104
|
+
if any(generator == 0 for generator in generators):
|
|
105
|
+
fail("identity is not a generator")
|
|
106
|
+
for left, right in itertools.combinations(generators, 2):
|
|
107
|
+
if symplectic(left, right) != 0:
|
|
108
|
+
fail("generators do not commute")
|
|
109
|
+
rank = binary_rank(generators)
|
|
110
|
+
if rank != N - K:
|
|
111
|
+
fail(f"generator rank is {rank}, expected nine")
|
|
112
|
+
span = stabilizer_span(generators)
|
|
113
|
+
if len(span) != 1 << (N - K):
|
|
114
|
+
fail("stabilizer span has the wrong cardinality")
|
|
115
|
+
|
|
116
|
+
tested = 0
|
|
117
|
+
degenerate = 0
|
|
118
|
+
for weight in range(1, 4):
|
|
119
|
+
for positions in itertools.combinations(range(N), weight):
|
|
120
|
+
for symbols in itertools.product("XYZ", repeat=weight):
|
|
121
|
+
tested += 1
|
|
122
|
+
error = error_vector(positions, symbols)
|
|
123
|
+
if all(symplectic(error, generator) == 0 for generator in generators):
|
|
124
|
+
if error not in span:
|
|
125
|
+
fail(
|
|
126
|
+
"found an undetectable non-stabilizer Pauli below weight four: "
|
|
127
|
+
f"positions={positions}, symbols={''.join(symbols)}"
|
|
128
|
+
)
|
|
129
|
+
degenerate += 1
|
|
130
|
+
if tested != 3_675:
|
|
131
|
+
fail(f"internal enumeration count is {tested}, expected 3675")
|
|
132
|
+
print(
|
|
133
|
+
json.dumps(
|
|
134
|
+
{
|
|
135
|
+
"schema": "canopus.quantum-stabilizer-verification.v1",
|
|
136
|
+
"target": TARGET,
|
|
137
|
+
"n": N,
|
|
138
|
+
"k": K,
|
|
139
|
+
"rank": rank,
|
|
140
|
+
"stabilizer_size": len(span),
|
|
141
|
+
"errors_weight_1_to_3_tested": tested,
|
|
142
|
+
"low_weight_stabilizers": degenerate,
|
|
143
|
+
"distance_at_least": 4,
|
|
144
|
+
},
|
|
145
|
+
sort_keys=True,
|
|
146
|
+
separators=(",", ":"),
|
|
147
|
+
)
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
if __name__ == "__main__":
|
|
152
|
+
main()
|
|
Binary file
|
|
Binary file
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { parseCandidateDraft } from "../candidate/validate.js";
|
|
1
2
|
import { type CommandRunner } from "../util/command.js";
|
|
2
3
|
import type { Engine, EngineContext, EngineResult } from "./engine.js";
|
|
3
4
|
export declare const NATIVE_WORKER_DISABLED_FEATURES: readonly ["apps", "artifact", "auth_elicitation", "browser_use", "browser_use_external", "computer_use", "enable_fanout", "enable_mcp_apps", "goals", "hooks", "image_generation", "in_app_browser", "memories", "multi_agent", "multi_agent_v2", "plugin_sharing", "plugins", "remote_plugin", "standalone_web_search", "tool_call_mcp_elicitation", "tool_suggest", "workspace_dependencies"];
|
|
@@ -8,6 +9,12 @@ export interface CodexToolsNativeOptions {
|
|
|
8
9
|
permissionProfile: string;
|
|
9
10
|
runner?: CommandRunner;
|
|
10
11
|
}
|
|
12
|
+
export declare function hydrateWorkspaceArtifacts(options: {
|
|
13
|
+
draft: ReturnType<typeof parseCandidateDraft>;
|
|
14
|
+
workspace: string;
|
|
15
|
+
maxArtifactBytes: number;
|
|
16
|
+
secrets: readonly Buffer[];
|
|
17
|
+
}): Promise<ReturnType<typeof parseCandidateDraft>>;
|
|
11
18
|
export declare function assertNativeRuntimeProfile(options: {
|
|
12
19
|
binary: string;
|
|
13
20
|
runner: CommandRunner;
|
|
@@ -3,6 +3,7 @@ import { constants } from "node:fs";
|
|
|
3
3
|
import { chmod, copyFile, lstat, mkdir, realpath, rm, writeFile } from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import process from "node:process";
|
|
6
|
+
import { TextDecoder } from "node:util";
|
|
6
7
|
import { assertDraftArtifactsAllowed, parseCandidateDraft } from "../candidate/validate.js";
|
|
7
8
|
import { canonicalJson, contentDigest, sha256Bytes } from "../util/canonical.js";
|
|
8
9
|
import { isolatedEnvironment, runCommand } from "../util/command.js";
|
|
@@ -53,7 +54,14 @@ function prompt(mission) {
|
|
|
53
54
|
"Return the artifact path and kind exactly as output_contract specifies. Status success means only that those complete candidate bytes exist; the separate frozen Lean capsule owns elaboration and the axiom audit.",
|
|
54
55
|
"Use at most four shell or patch tool calls. A token-efficient handoff is part of this mission's product contract.",
|
|
55
56
|
]
|
|
56
|
-
:
|
|
57
|
+
: mission.target === "sidon:a24-improve"
|
|
58
|
+
? [
|
|
59
|
+
"The shell and apply_patch tools are active in this worker. Begin with a narrow shell call against the one registered packet; do not report a missing-tool failure without attempting that call.",
|
|
60
|
+
`Read only current_state.tracked_unaccepted_seed, output_contract, verification, and negative_contract from ${mission.target_packet.path}. The tracked seed's encoded_points field contains every exact baseline point needed for the search; no other input file exists or is required.`,
|
|
61
|
+
"Write search source and temporary data only inside the current workspace. On macOS compile with the exposed Xcode clang++ and TMPDIR=$PWD/tmp; do not invoke xcrun, xcodebuild, a package manager, a container, Vela, or the frozen verifier.",
|
|
62
|
+
"Spend the bounded runtime on an exact net-positive exchange over the supplied baseline. Independently recheck a positive candidate before returning its compact witness JSON at the exact declared workspace path. Inline it when practical; for a large artifact use the workspace-backed handoff described below. A failed bounded search is null, never a universal maximality claim.",
|
|
63
|
+
]
|
|
64
|
+
: [];
|
|
57
65
|
return [
|
|
58
66
|
"Execute one bounded Canopus research mission inside a fresh writable workspace containing only the exact hash-verified target packet.",
|
|
59
67
|
"Use shell and apply_patch only when useful. Browser, web search, MCP, apps, memories, computer use, delegation, signing, and human keys are forbidden.",
|
|
@@ -64,7 +72,7 @@ function prompt(mission) {
|
|
|
64
72
|
"Keep tool output narrow. Do not print or ingest the whole target packet.",
|
|
65
73
|
"Worker status reports producer completion, not verifier or scientific standing. Return status success when you produced all artifact bytes required by the output contract, even though you cannot run the separate verifier. State that verification remains pending; Canopus will freeze the bytes and run the verifier after you exit.",
|
|
66
74
|
"Return null only when the bounded work produced no candidate. Return failed only when you could not produce a contract-complete candidate or observed disqualifying evidence. Never turn a bounded negative search into universal nonexistence, verifier failure into success, or Git publication into scientific acceptance.",
|
|
67
|
-
"Return only the supplied engine-output JSON shape. Artifact bytes must be
|
|
75
|
+
"Return only the supplied engine-output JSON shape. Artifact bytes must be UTF-8 at mission.allowed_paths. Inline small artifacts. For a large declared artifact, content may be the empty string only when the complete bytes exist at that exact path inside the current workspace; Canopus will bound, scan, and freeze those bytes before workspace cleanup.",
|
|
68
76
|
...execution,
|
|
69
77
|
"Mission:",
|
|
70
78
|
canonicalJson(mission),
|
|
@@ -134,6 +142,42 @@ function assertNoSecrets(buffers, secrets) {
|
|
|
134
142
|
}
|
|
135
143
|
}
|
|
136
144
|
}
|
|
145
|
+
export async function hydrateWorkspaceArtifacts(options) {
|
|
146
|
+
const workspace = await realpath(options.workspace);
|
|
147
|
+
const artifacts = await Promise.all(options.draft.artifacts.map(async (artifact) => {
|
|
148
|
+
if (artifact.content !== "")
|
|
149
|
+
return artifact;
|
|
150
|
+
const candidate = path.join(workspace, artifact.path);
|
|
151
|
+
const relative = path.relative(workspace, candidate);
|
|
152
|
+
if (relative === "" || relative === ".." || relative.startsWith(`..${path.sep}`)) {
|
|
153
|
+
throw new Error(`workspace-backed artifact escapes the native worker workspace: ${artifact.path}`);
|
|
154
|
+
}
|
|
155
|
+
let resolved;
|
|
156
|
+
try {
|
|
157
|
+
resolved = await realpath(candidate);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
throw new Error(`workspace-backed artifact is missing at ${artifact.path}: ${String(error)}`);
|
|
161
|
+
}
|
|
162
|
+
if (resolved !== candidate) {
|
|
163
|
+
throw new Error(`workspace-backed artifact must not traverse a symbolic link: ${artifact.path}`);
|
|
164
|
+
}
|
|
165
|
+
const bytes = await readBoundedRegularFile(resolved, options.maxArtifactBytes);
|
|
166
|
+
if (bytes.length === 0) {
|
|
167
|
+
throw new Error(`workspace-backed artifact is empty at ${artifact.path}`);
|
|
168
|
+
}
|
|
169
|
+
assertNoSecrets([bytes], options.secrets);
|
|
170
|
+
let content;
|
|
171
|
+
try {
|
|
172
|
+
content = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
throw new Error(`workspace-backed artifact is not valid UTF-8 at ${artifact.path}: ${String(error)}`);
|
|
176
|
+
}
|
|
177
|
+
return { ...artifact, content };
|
|
178
|
+
}));
|
|
179
|
+
return { ...options.draft, artifacts };
|
|
180
|
+
}
|
|
137
181
|
function workerArgv(options) {
|
|
138
182
|
return [
|
|
139
183
|
options.binary,
|
|
@@ -369,8 +413,14 @@ export class CodexToolsNativeEngine {
|
|
|
369
413
|
catch (error) {
|
|
370
414
|
throw new Error(`native Codex final response is not JSON: ${String(error)}`);
|
|
371
415
|
}
|
|
372
|
-
const
|
|
373
|
-
assertDraftArtifactsAllowed(
|
|
416
|
+
const parsedDraft = parseCandidateDraft(raw);
|
|
417
|
+
assertDraftArtifactsAllowed(parsedDraft, mission.allowed_paths);
|
|
418
|
+
const draft = await hydrateWorkspaceArtifacts({
|
|
419
|
+
draft: parsedDraft,
|
|
420
|
+
workspace,
|
|
421
|
+
maxArtifactBytes: mission.budgets.max_artifact_bytes,
|
|
422
|
+
secrets,
|
|
423
|
+
});
|
|
374
424
|
return {
|
|
375
425
|
draft,
|
|
376
426
|
engine: {
|
|
@@ -28,10 +28,26 @@ function nonnegative(value, at) {
|
|
|
28
28
|
}
|
|
29
29
|
return value;
|
|
30
30
|
}
|
|
31
|
+
function noAvailableProducerTarget(offer) {
|
|
32
|
+
const leased = Array.isArray(offer.leased_targets) ? offer.leased_targets : [];
|
|
33
|
+
if (leased.length > 0) {
|
|
34
|
+
const summaries = leased.map((value, index) => {
|
|
35
|
+
const lease = objectAt(value, `vela next.leased_targets[${index}]`);
|
|
36
|
+
const target = stringAt(lease.target_id, "leased target id", { min: 1, max: 256 });
|
|
37
|
+
const actor = stringAt(lease.actor, "leased target actor", { min: 1, max: 256 });
|
|
38
|
+
const expires = lease.expires_at === undefined
|
|
39
|
+
? "unknown expiry"
|
|
40
|
+
: stringAt(lease.expires_at, "leased target expiry", { min: 1, max: 64 });
|
|
41
|
+
return `${target} by ${actor} until ${expires}`;
|
|
42
|
+
});
|
|
43
|
+
return new Error(`no producer target is currently available; configured work is leased: ${summaries.join(", ")}`);
|
|
44
|
+
}
|
|
45
|
+
return new Error("vela next returned no producer target");
|
|
46
|
+
}
|
|
31
47
|
export function selectProductOffer(offer, profile, requestedTarget) {
|
|
32
48
|
const targets = offer.targets;
|
|
33
49
|
if (!Array.isArray(targets) || targets.length === 0) {
|
|
34
|
-
throw
|
|
50
|
+
throw noAvailableProducerTarget(offer);
|
|
35
51
|
}
|
|
36
52
|
if (requestedTarget !== undefined && requestedTarget !== profile.target) {
|
|
37
53
|
throw new Error(`registered profile ${profile.name} targets ${profile.target}, not requested target ${requestedTarget}`);
|
|
@@ -62,7 +78,7 @@ export async function resolveProductProfile(offer, profileName, requestedTarget)
|
|
|
62
78
|
return loadProductProfile(profileName);
|
|
63
79
|
const targets = offer.targets;
|
|
64
80
|
if (!Array.isArray(targets) || targets.length === 0) {
|
|
65
|
-
throw
|
|
81
|
+
throw noAvailableProducerTarget(offer);
|
|
66
82
|
}
|
|
67
83
|
const selectedOffer = requestedTarget === undefined
|
|
68
84
|
? objectAt(targets[0], "vela next.targets[0]")
|
|
@@ -104,8 +120,8 @@ export async function doctorProduct(options) {
|
|
|
104
120
|
runtimeIdentity({ name: "vela", cwd: frontier, home: runtime, runner }),
|
|
105
121
|
runtimeIdentity({ name: "git", cwd: frontier, home: runtime, runner }),
|
|
106
122
|
]);
|
|
107
|
-
if (vela.version !== "vela 0.
|
|
108
|
-
throw new Error(`Canopus ${CANOPUS_VERSION} requires vela 0.
|
|
123
|
+
if (vela.version !== "vela 0.911.0") {
|
|
124
|
+
throw new Error(`Canopus ${CANOPUS_VERSION} requires vela 0.911.0, observed ${vela.version}`);
|
|
109
125
|
}
|
|
110
126
|
const [status, offer, gitStatus] = await Promise.all([
|
|
111
127
|
jsonCommand({ runner, argv: [vela.binary, "status", ".", "--json"], cwd: frontier, home: runtime, label: "vela status" }),
|
|
@@ -10,6 +10,12 @@ function publicRepository(value) {
|
|
|
10
10
|
throw new Error("public run repository is invalid");
|
|
11
11
|
return { url, directory };
|
|
12
12
|
}
|
|
13
|
+
function publicCaveat(value) {
|
|
14
|
+
if (/verif(?:y|ication|ier).*(?:pending|has not run)|pending.*verif(?:y|ication|ier)/iu.test(value)) {
|
|
15
|
+
return "The worker handed off without verifier authority; Canopus subsequently recorded the separate verifier pass shown in this projection.";
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
13
19
|
export function projectPublicRun(options) {
|
|
14
20
|
const { record, mission } = options;
|
|
15
21
|
if (mission.schema !== "canopus.mission.v1") {
|
|
@@ -54,7 +60,7 @@ export function projectPublicRun(options) {
|
|
|
54
60
|
clean_clone_replay: "matched",
|
|
55
61
|
},
|
|
56
62
|
claim: record.candidate.claim,
|
|
57
|
-
caveats: [...record.candidate.caveats],
|
|
63
|
+
caveats: [...new Set(record.candidate.caveats.map(publicCaveat))],
|
|
58
64
|
artifact_roots: record.candidate.artifacts.map((artifact) => artifact.digest).sort(),
|
|
59
65
|
verifier_root: contentDigest(record.verifier),
|
|
60
66
|
receipt_root: record.landing.receipt_root,
|
|
@@ -90,7 +96,7 @@ export function projectPublicRun(options) {
|
|
|
90
96
|
},
|
|
91
97
|
nonclaims: [
|
|
92
98
|
"Verifier success is not scientific acceptance.",
|
|
93
|
-
"The bounded result does not
|
|
99
|
+
"The bounded result does not establish maximality or settle the broader scientific problem.",
|
|
94
100
|
"Canopus did not sign or perform a human decision.",
|
|
95
101
|
],
|
|
96
102
|
};
|
package/dist/src/run.d.ts
CHANGED
|
@@ -90,5 +90,6 @@ export declare function validateTargetOffer(target: string, response: VelaComman
|
|
|
90
90
|
index: number;
|
|
91
91
|
id: string;
|
|
92
92
|
};
|
|
93
|
+
export declare function isPrivateWorkSessionStatus(entry: string): boolean;
|
|
93
94
|
export declare function runCanopus(options: CanopusNoLandOptions): Promise<CanopusDiagnosticRunResult>;
|
|
94
95
|
export declare function runCanopus(options: CanopusRunOptions): Promise<CanopusRunResult>;
|
package/dist/src/run.js
CHANGED
|
@@ -99,6 +99,18 @@ function publicationState(land) {
|
|
|
99
99
|
const value = land.publication.state;
|
|
100
100
|
return typeof value === "string" ? value : "unknown";
|
|
101
101
|
}
|
|
102
|
+
export function isPrivateWorkSessionStatus(entry) {
|
|
103
|
+
if (!entry.startsWith("?? "))
|
|
104
|
+
return false;
|
|
105
|
+
const relative = entry.slice(3);
|
|
106
|
+
const parts = relative.split("/");
|
|
107
|
+
return (parts.length === 4 &&
|
|
108
|
+
parts[0] === ".vela" &&
|
|
109
|
+
parts[1] === "work" &&
|
|
110
|
+
parts[2] !== undefined &&
|
|
111
|
+
/^[a-zA-Z0-9._-]+$/u.test(parts[2]) &&
|
|
112
|
+
parts[3] === "session.json");
|
|
113
|
+
}
|
|
102
114
|
async function writeExclusive(file, value) {
|
|
103
115
|
await writeFile(file, canonicalJson(value), { flag: "wx", mode: 0o600 });
|
|
104
116
|
}
|
|
@@ -138,7 +150,17 @@ async function publishArtifactSources(options) {
|
|
|
138
150
|
}
|
|
139
151
|
const status = (await git(["status", "--porcelain=v1", "-z", "--untracked-files=all"]))
|
|
140
152
|
.toString("utf8").split("\0").filter((entry) => entry.length > 0).sort();
|
|
141
|
-
|
|
153
|
+
// `vela work` deliberately keeps its producer capability in one private,
|
|
154
|
+
// untracked session file until `vela land` consumes it. The worker cannot
|
|
155
|
+
// access the landing clone, and every other unstaged path remains fatal.
|
|
156
|
+
const privateWorkSessions = status.filter(isPrivateWorkSessionStatus);
|
|
157
|
+
if (privateWorkSessions.length > 1) {
|
|
158
|
+
throw new Error("artifact publication observed multiple private Vela work sessions");
|
|
159
|
+
}
|
|
160
|
+
const expectedStatus = [
|
|
161
|
+
...paths.map((entry) => `A ${entry}`),
|
|
162
|
+
...privateWorkSessions,
|
|
163
|
+
].sort();
|
|
142
164
|
if (canonicalJson(status) !== canonicalJson(expectedStatus)) {
|
|
143
165
|
throw new Error("artifact publication observed unrelated or unstaged repository changes");
|
|
144
166
|
}
|
package/dist/src/vela/cli.js
CHANGED
|
@@ -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"
|
|
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"
|
|
436
436
|
? {
|
|
437
437
|
ok: true,
|
|
438
438
|
command: "status_root_projection",
|
package/docs/RELEASES.md
CHANGED
|
@@ -1,5 +1,45 @@
|
|
|
1
1
|
# Release evidence
|
|
2
2
|
|
|
3
|
+
## Canopus v0.4.6
|
|
4
|
+
|
|
5
|
+
Version `0.4.6` is the primary Build Week science release. It registers the
|
|
6
|
+
bounded `gpt-5.6-sol` Sidon mission, securely retains the worker's declared
|
|
7
|
+
large artifact before workspace teardown, packages the frozen Sidon verifier
|
|
8
|
+
capsules, and publishes the sanitized public projection of the successful
|
|
9
|
+
7,194-point construction.
|
|
10
|
+
|
|
11
|
+
The exact run completed the full product chain: worker success, frozen
|
|
12
|
+
verifier pass, Vela route `defer`, accepted-state delta zero, and matching
|
|
13
|
+
clean-clone replay. The pending proposal is evidence, not scientific
|
|
14
|
+
acceptance.
|
|
15
|
+
|
|
16
|
+
- Source/tag: `ad72a7aca63aaa6c060f840020cca6871e4a9f11` / `v0.4.6`
|
|
17
|
+
- Cross-platform CI and installed-package smoke:
|
|
18
|
+
[run 29783128714](https://github.com/vela-science/vela-research-harness/actions/runs/29783128714)
|
|
19
|
+
- CodeQL:
|
|
20
|
+
[run 29783117151](https://github.com/vela-science/vela-research-harness/actions/runs/29783117151)
|
|
21
|
+
- OIDC publish and GitHub build attestation:
|
|
22
|
+
[run 29783128737](https://github.com/vela-science/vela-research-harness/actions/runs/29783128737)
|
|
23
|
+
- Package SHA-256: `d1c30b0c35b56cb7d874e3646a5d3ddc2abe2f61e38da0c6d2c7163d6de09300`
|
|
24
|
+
- npm shasum: `ca9e9f5a8c064c749523f2e47a4936030367eed3`
|
|
25
|
+
- npm integrity:
|
|
26
|
+
`sha512-Y3vL/29YEYnKt6iniPvSi5C85UHEOWZ+vtlXiqZSyyyNo5emXkC5gt8fJ4chzEMi7iTYzaRPOv0hsNuPnbUhVQ==`
|
|
27
|
+
- A fresh `npm audit signatures --include-attestations` verifies the registry
|
|
28
|
+
signatures and the SLSA provenance v1 attestation.
|
|
29
|
+
- A clean registry execution under Node `v24.14.0` returned `canopus 0.4.6`
|
|
30
|
+
and validated the exact packaged Sidon v3 profile root.
|
|
31
|
+
- Public package and matching release:
|
|
32
|
+
[npm](https://www.npmjs.com/package/@vela-science/canopus/v/0.4.6),
|
|
33
|
+
[GitHub](https://github.com/vela-science/vela-research-harness/releases/tag/v0.4.6)
|
|
34
|
+
|
|
35
|
+
The OIDC workflow published successfully, but its immediate registry
|
|
36
|
+
attestation audit encountered a transient npm attestations-endpoint `404`, so
|
|
37
|
+
the final GitHub-release step did not run. Once the same registry tarball
|
|
38
|
+
passed both `gh attestation verify` against the exact release workflow/tag and
|
|
39
|
+
the npm signature audit, the matching GitHub release was created from those
|
|
40
|
+
bytes. The tag did not move and no reusable npm token was introduced. The
|
|
41
|
+
workflow now retries the full audit while the registry endpoint propagates.
|
|
42
|
+
|
|
3
43
|
## Canopus v0.4.5
|
|
4
44
|
|
|
5
45
|
Version `0.4.5` is a documentation-only truthfulness correction over 0.4.4.
|
|
@@ -8,6 +48,28 @@ independent verifier, while keeping the separate GPT-5.6 formal failure and
|
|
|
8
48
|
claim-fidelity advisory explicit. Runtime behavior, mission registrations,
|
|
9
49
|
evidence roots, Vela compatibility, and authority boundaries are unchanged.
|
|
10
50
|
|
|
51
|
+
The correction is independently release-verifiable:
|
|
52
|
+
|
|
53
|
+
- Source/tag: `eccb3975505706b12c48c372e471c34303dffbd2` / `v0.4.5`
|
|
54
|
+
- Cross-platform CI and installed-package smoke:
|
|
55
|
+
[run 29772472168](https://github.com/vela-science/vela-research-harness/actions/runs/29772472168)
|
|
56
|
+
- CodeQL:
|
|
57
|
+
[run 29772445358](https://github.com/vela-science/vela-research-harness/actions/runs/29772445358)
|
|
58
|
+
- OIDC publish, SLSA provenance audit, and GitHub release:
|
|
59
|
+
[run 29772472340](https://github.com/vela-science/vela-research-harness/actions/runs/29772472340)
|
|
60
|
+
- Package SHA-256: `b0b8f0357337b79e3dca0ef4a1c1b90a14885f3f01759666cd31f082675474c5`
|
|
61
|
+
- npm shasum: `fd55cc35d22e82b1976adab2265dff09cc84a948`
|
|
62
|
+
- npm integrity:
|
|
63
|
+
`sha512-J9BqSPjqfp6OMW/7odlYtluSRkY3WfQpa/5ky/nuhzCdUOa8ksb7Be8oTtu19KuqEL/9BY4PhOHyUgptr5drHQ==`
|
|
64
|
+
- The npm and GitHub release tarballs are byte-identical.
|
|
65
|
+
- A clean registry execution under Node `v24.18.0` returned `canopus 0.4.5`,
|
|
66
|
+
listed both packaged profiles, and validated
|
|
67
|
+
`formal-erdos-505-test-dim-one-gpt56` at the registered profile and draft
|
|
68
|
+
roots.
|
|
69
|
+
- Public package and matching release:
|
|
70
|
+
[npm](https://www.npmjs.com/package/@vela-science/canopus/v/0.4.5),
|
|
71
|
+
[GitHub](https://github.com/vela-science/vela-research-harness/releases/tag/v0.4.5)
|
|
72
|
+
|
|
11
73
|
## Canopus v0.4.4
|
|
12
74
|
|
|
13
75
|
Version `0.4.4` advances the product and hosted integration from Vela 0.901.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"activity":{"clean_clone_replay":"matched","verifier":"pass","worker":"success"},"artifact_roots":["sha256:5eca82c582a9d3b6ae63d137cf7dadd4a01e40d52bc1bfac99932d1d8752f884","sha256:878b05e01dbc4a785e5a671f977509f0bb338dfcb58ac53bf03d47bf6465f01e","sha256:ba5da48c4f6fd744a70eb82d5e1a8291f981bf5ee4df9ec2d86d8184fde22de3"],"authority":"read_only_projection","caveats":["The worker handed off without verifier authority; Canopus subsequently recorded the separate verifier pass shown in this projection.","Declared verifier outcome: passed.","Canopus produced this record; it is not a human acceptance decision."],"claim":"Produced the exact reconstructed 7,194-point Sidon witness for {0,1}^24.","final":{"commit":"4289e05876f142e72af622672e190be26f6a6f1d","event_log_root":"sha256:11a668d1cdd9caa18f6c3c78ac8c03431bd2ab9beb71f3c62c747d8a7b6571cd","snapshot_root":"sha256:0441baf3d3c0f7f58e51d8d0b54d2e20ee94c57cfe3fd52ec0ea6dde2ee0c92d"},"mission":{"digest":"sha256:611dc75d2dce98b218deeaf68985dec961a0722446fe1d2879447997ffcfa2ba","id":"mission_sidon_a24_at_least_7194_gpt56_v3","model":"gpt-5.6-sol","registration_kind":"profile","registration_name":"sidon-a24-at-least-7194-gpt56-v3","registration_root":"sha256:3b529df4304b96890cdd7eed5f90fd862422b8b1e7b4da1cef0a478e6e7cdebe","target":"sidon:a24-improve","target_packet_root":"sha256:09977a08357cbe240c5a7f5c3ea8e5c7055d6b5d71bcfb5f947b49accee1a3a8"},"nonclaims":["Verifier success is not scientific acceptance.","The bounded result does not establish maximality or settle the broader scientific problem.","Canopus did not sign or perform a human decision."],"policy":{"accepted_state_delta":0,"proposal_id":"vpr_491cc97cfdfe98ff","route":"defer"},"receipt_root":"sha256:91b9f0c72e2934d3f98a34de93b61a168c8a9ff560a18a63ff4a1ee6ae2f897c","reproduction":{"commands":["git clone https://github.com/vela-science/sidon-frontier.git","cd sidon-frontier","git checkout 4289e05876f142e72af622672e190be26f6a6f1d","vela reproduce ."]},"run_id":"run_f68e4cfc-e5c7-4c73-86cb-d79807c47ec4","schema":"canopus.public-run.v1","source":{"commit":"6f9dca7e30ea3d9db3f440fcb4b50ece21dcf40e","event_log_root":"sha256:f063218142b0995179f751036108c94e7f368eb257be31e6807a36121f7a13aa","repository":"https://github.com/vela-science/sidon-frontier","snapshot_root":"sha256:fe5498193ab1079696af6de6f8a899334908a247fd78f7a25fb476b5b36b43b8"},"usage":{"attempts":1,"observed_tokens":105553,"research_elapsed_ms":88131,"research_processes":7},"verifier_root":"sha256:89130864b3ca4f354673416d4352616265b1e3dc25147a4ae91bbbf3874fbff8"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "mission_quantum_10_1_4_stabilizer_v2",
|
|
3
|
+
"target": "quantum:[[10,1,4]]",
|
|
4
|
+
"frontier": ".",
|
|
5
|
+
"actor": "agent:canopus-local",
|
|
6
|
+
"role": "producer",
|
|
7
|
+
"claim_type": "computational",
|
|
8
|
+
"replayability": "exact",
|
|
9
|
+
"objective": "Produce exactly one explicit stabilizer witness at artifacts/quantum-10-1-4.witness.json. The JSON fields must be exactly schema, target, n, k, and generators. Set schema to canopus.quantum-stabilizer-witness.v1, target to quantum:[[10,1,4]], n to 10, k to 1, and generators to exactly nine distinct length-10 strings over I, X, Y, Z. The generators must be non-identity, pairwise commuting, GF(2)-independent, and define no undetectable non-stabilizer Pauli of weight one, two, or three. A null or failed result is valid if no candidate is found. Work only from the supplied frontier and do not assume access to any earlier run artifact. Do not claim classification, optimality, or universal nonexistence.",
|
|
10
|
+
"completion_condition": "The frozen verifier independently checks generator validity, pairwise symplectic commutation, rank nine, stabilizer-span membership, and all 3,675 Pauli errors of weight one through three in a separate network-denied and write-denied container.",
|
|
11
|
+
"allowed_paths": [
|
|
12
|
+
"artifacts/quantum-10-1-4.witness.json"
|
|
13
|
+
],
|
|
14
|
+
"budgets": {
|
|
15
|
+
"max_research_wall_time_ms": 1800000,
|
|
16
|
+
"max_research_processes": 16,
|
|
17
|
+
"max_research_output_bytes": 16777216,
|
|
18
|
+
"max_prompt_bytes": 2097152,
|
|
19
|
+
"max_artifact_bytes": 65536,
|
|
20
|
+
"max_attempts": 1,
|
|
21
|
+
"max_observed_tokens": 400000
|
|
22
|
+
},
|
|
23
|
+
"worker": {
|
|
24
|
+
"model": "gpt-5.4"
|
|
25
|
+
},
|
|
26
|
+
"verifier": {
|
|
27
|
+
"argv": [
|
|
28
|
+
"capsule/verifier",
|
|
29
|
+
"{artifact:artifacts/quantum-10-1-4.witness.json}"
|
|
30
|
+
],
|
|
31
|
+
"cwd": "targets",
|
|
32
|
+
"timeout_ms": 30000,
|
|
33
|
+
"max_output_bytes": 65536,
|
|
34
|
+
"capsule_path": "capsule/verifier"
|
|
35
|
+
},
|
|
36
|
+
"scientific_chain": {
|
|
37
|
+
"predicted_observable": "The frozen verifier reports rank nine, stabilizer size 512, exactly 3,675 checked Pauli errors, and distance_at_least=4 for the supplied generator set.",
|
|
38
|
+
"performed_test": "capsule/verifier artifacts/quantum-10-1-4.witness.json"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "mission_sidon_a24_at_least_7194_gpt56_v1",
|
|
3
|
+
"target": "auto",
|
|
4
|
+
"frontier": ".",
|
|
5
|
+
"actor": "agent:canopus-local",
|
|
6
|
+
"role": "producer",
|
|
7
|
+
"claim_type": "computational",
|
|
8
|
+
"replayability": "exact",
|
|
9
|
+
"objective": "Produce exactly one genuinely new Vela-native Sidon witness at artifacts/sidon-a24-gpt56-7194.witness.json and declare it as kind vela-witness. The input frontier contains a mechanically verified but pending 7,193-point baseline at artifacts/sidon-a24-improvement.witness.json with SHA-256 f3712b47633a239133b5e0491e68fffc85831b761c27402ba9de8057f09252e7, plus the prior exact 1-for-2 exchange implementation and benchmark under research/. Use those immutable inputs as a starting point, but do not return the existing 7,193 witness or merely replay its already-known one-point-extension and 1-for-2 result. Design, implement, and execute a stronger bounded search capable of a net improvement, such as a broader 1-for-2 search on the 7,193 baseline, a 2-for-3 or larger conflict-hypergraph exchange, or another exact collision-preserving repair method. Temporary source and diagnostics may be created outside the declared artifact path, but the only declared scientific artifact is the final witness. The artifact must be compact JSON with kind sidon, n 24, claimed_size at least 7194, and points as claimed_size distinct arrays of exactly 24 binary integers. Before reporting success, independently recheck the complete candidate by generating all m(m+1)/2 componentwise integer pair sums and confirming they are distinct. Report engine status success only after that check passes. If the bounded search does not find a valid improvement, return null with the strongest exact negative observations and no artifact. Do not claim maximality, classification, scientific acceptance, or a world record.",
|
|
10
|
+
"completion_condition": "The separate frozen Vela verifier parses the declared witness, independently checks 24-bit distinctness and every unordered componentwise pair sum, binds the exact claim that a Sidon subset of {0,1}^24 with at least 7,194 elements exists, and exits zero in a network-denied, read-only container. Canopus then clean-clone replays the same artifact and verifier roots and Vela routes the Receipt to Defer with accepted-state delta zero.",
|
|
11
|
+
"allowed_paths": [
|
|
12
|
+
"artifacts/sidon-a24-gpt56-7194.witness.json"
|
|
13
|
+
],
|
|
14
|
+
"budgets": {
|
|
15
|
+
"max_research_wall_time_ms": 1800000,
|
|
16
|
+
"max_research_processes": 16,
|
|
17
|
+
"max_research_output_bytes": 16777216,
|
|
18
|
+
"max_prompt_bytes": 2097152,
|
|
19
|
+
"max_artifact_bytes": 1048576,
|
|
20
|
+
"max_attempts": 1,
|
|
21
|
+
"max_observed_tokens": 400000
|
|
22
|
+
},
|
|
23
|
+
"worker": {
|
|
24
|
+
"model": "gpt-5.6-sol"
|
|
25
|
+
},
|
|
26
|
+
"verifier": {
|
|
27
|
+
"argv": [
|
|
28
|
+
"capsule/verifier",
|
|
29
|
+
"--claim",
|
|
30
|
+
"There exists a Sidon subset of {0,1}^24 with at least 7,194 elements.",
|
|
31
|
+
"{artifact:artifacts/sidon-a24-gpt56-7194.witness.json}"
|
|
32
|
+
],
|
|
33
|
+
"cwd": "targets",
|
|
34
|
+
"timeout_ms": 300000,
|
|
35
|
+
"max_output_bytes": 65536,
|
|
36
|
+
"capsule_path": "capsule/verifier"
|
|
37
|
+
},
|
|
38
|
+
"scientific_chain": {
|
|
39
|
+
"predicted_observable": "A newly produced set contains at least 7,194 distinct 24-bit points and all of its unordered componentwise integer pair sums are distinct.",
|
|
40
|
+
"performed_test": "capsule/verifier --claim 'There exists a Sidon subset of {0,1}^24 with at least 7,194 elements.' artifacts/sidon-a24-gpt56-7194.witness.json"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "mission_sidon_a24_at_least_7194_gpt56_v2",
|
|
3
|
+
"target": "auto",
|
|
4
|
+
"frontier": ".",
|
|
5
|
+
"actor": "agent:canopus-local",
|
|
6
|
+
"role": "producer",
|
|
7
|
+
"claim_type": "computational",
|
|
8
|
+
"replayability": "exact",
|
|
9
|
+
"objective": "Produce exactly one genuinely new Vela-native Sidon witness at artifacts/sidon-a24-gpt56-7194.witness.json and declare it as kind vela-witness. This repairs the first GPT-5.6 attempt's unavailable-input defect: the exact target packet now embeds the complete mechanically verified pending 7,193-point baseline in current_state.tracked_unaccepted_seed.encoded_points. Require its encoded_points_sha256 to equal sha256:cbf35310bafabb05a610e3e4e6ff3c5f5c60c5a80cb6821a3cde165b672c643a and its witness root to equal sha256:f3712b47633a239133b5e0491e68fffc85831b761c27402ba9de8057f09252e7 before using it. The packet also records the prior exact one-removal/two-addition exchange that improved 7,192 to 7,193. Do not return that existing witness or merely replay its already-known exchange. Design, implement, and execute a stronger bounded search capable of another net improvement, such as a broader 1-for-2 search on the 7,193 baseline, a 2-for-3 or larger conflict-hypergraph exchange, or another exact collision-preserving repair method. Temporary source and diagnostics may be created inside the worker workspace, but the only declared scientific artifact is the final witness. The artifact must be compact JSON with kind sidon, n 24, claimed_size at least 7194, and points as claimed_size distinct arrays of exactly 24 binary integers. Before reporting success, independently recheck the complete candidate by generating all m(m+1)/2 componentwise integer pair sums and confirming they are distinct. Report engine status success only after that check passes. If the bounded search does not find a valid improvement, return null with the strongest exact negative observations and no artifact. Do not claim maximality, classification, scientific acceptance, or a world record.",
|
|
10
|
+
"completion_condition": "The separate frozen Vela verifier parses the declared witness, independently checks 24-bit distinctness and every unordered componentwise integer pair sum, binds the exact claim that a Sidon subset of {0,1}^24 with at least 7,194 elements exists, and exits zero in a network-denied, read-only container. Canopus then clean-clone replays the same artifact and verifier roots and Vela routes the Receipt to Defer with accepted-state delta zero.",
|
|
11
|
+
"allowed_paths": [
|
|
12
|
+
"artifacts/sidon-a24-gpt56-7194.witness.json"
|
|
13
|
+
],
|
|
14
|
+
"budgets": {
|
|
15
|
+
"max_research_wall_time_ms": 1800000,
|
|
16
|
+
"max_research_processes": 16,
|
|
17
|
+
"max_research_output_bytes": 16777216,
|
|
18
|
+
"max_prompt_bytes": 2097152,
|
|
19
|
+
"max_artifact_bytes": 1048576,
|
|
20
|
+
"max_attempts": 1,
|
|
21
|
+
"max_observed_tokens": 600000
|
|
22
|
+
},
|
|
23
|
+
"worker": {
|
|
24
|
+
"model": "gpt-5.6-sol"
|
|
25
|
+
},
|
|
26
|
+
"verifier": {
|
|
27
|
+
"argv": [
|
|
28
|
+
"capsule/verifier",
|
|
29
|
+
"--claim",
|
|
30
|
+
"There exists a Sidon subset of {0,1}^24 with at least 7,194 elements.",
|
|
31
|
+
"{artifact:artifacts/sidon-a24-gpt56-7194.witness.json}"
|
|
32
|
+
],
|
|
33
|
+
"cwd": "targets",
|
|
34
|
+
"timeout_ms": 300000,
|
|
35
|
+
"max_output_bytes": 65536,
|
|
36
|
+
"capsule_path": "capsule/verifier"
|
|
37
|
+
},
|
|
38
|
+
"scientific_chain": {
|
|
39
|
+
"predicted_observable": "A newly produced set contains at least 7,194 distinct 24-bit points and all of its unordered componentwise integer pair sums are distinct.",
|
|
40
|
+
"performed_test": "capsule/verifier --claim 'There exists a Sidon subset of {0,1}^24 with at least 7,194 elements.' artifacts/sidon-a24-gpt56-7194.witness.json"
|
|
41
|
+
}
|
|
42
|
+
}
|