kijito-tools 0.2.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/LICENSE +201 -0
- package/NOTICE +6 -0
- package/README.md +220 -0
- package/bin/cli.js +34 -0
- package/install.sh +161 -0
- package/package.json +50 -0
- package/providers/_shared/wake-core.mjs +358 -0
- package/providers/claude/CLAUDE.md.snippet +31 -0
- package/providers/claude/install.sh +186 -0
- package/providers/claude/scripts/arm-session.sh +66 -0
- package/providers/claude/scripts/claude-armed.sh +101 -0
- package/providers/claude/scripts/heartbeat-watchdog.sh +209 -0
- package/providers/claude/scripts/inbox-selftest.sh +277 -0
- package/providers/claude/scripts/kijito-persona-lib.sh +94 -0
- package/providers/claude/scripts/kijito-qa-pass.sh +12 -0
- package/providers/claude/scripts/lifecycle-lib.sh +167 -0
- package/providers/claude/scripts/myctx.sh +46 -0
- package/providers/claude/scripts/self-clear.sh +134 -0
- package/providers/claude/scripts/session-autosend.sh +85 -0
- package/providers/claude/scripts/session-catchup-hint.sh +330 -0
- package/providers/claude/scripts/statusline-context.sh +67 -0
- package/providers/claude/skills/kijito-qa-memory/SKILL.md +110 -0
- package/providers/claude/skills/kijito-recall/SKILL.md +53 -0
- package/providers/claude/skills/kijito-start/SKILL.md +122 -0
- package/providers/claude/wiring/README.md +93 -0
- package/providers/claude/wiring/kijito-heartbeat@.service +21 -0
- package/providers/codex/README.md +75 -0
- package/providers/codex/codex-kijito-parity-plan.md +265 -0
- package/providers/codex/docs-codex-setup.md +64 -0
- package/providers/codex/install.mjs +184 -0
- package/providers/codex/n0-capability-probe-protocol.md +472 -0
- package/providers/codex/n0-harness/README.md +57 -0
- package/providers/codex/n0-harness/cli.mjs +58 -0
- package/providers/codex/n0-harness/evidence-manifest.mjs +77 -0
- package/providers/codex/n0-harness/fixture.mjs +279 -0
- package/providers/codex/n0-harness/lib.mjs +141 -0
- package/providers/codex/n0-harness/manifest.mjs +36 -0
- package/providers/codex/n0-harness/oracle.mjs +464 -0
- package/providers/codex/n0-harness/parser.mjs +200 -0
- package/providers/codex/n0-harness/prompt.mjs +43 -0
- package/providers/codex/n0-harness/snapshot.mjs +120 -0
- package/providers/codex/n0-harness/specimen.mjs +37 -0
- package/providers/codex/notify/kijito-notify-count.mjs +117 -0
- package/providers/codex/notify/kijito-notify-count.test.mjs +76 -0
- package/providers/codex/plans/gate4-battery-log.md +184 -0
- package/providers/codex/plans/gate4-battery-protocol.md +43 -0
- package/providers/codex/plans/hive-user-first-plan-QA.md +34 -0
- package/providers/codex/plans/hive-user-first-plan.md +247 -0
- package/providers/codex/release-manifest.json +53 -0
- package/providers/codex/same-chat-continuation-plan-gate.md +235 -0
- package/providers/codex/same-chat-continuation-plan.md +458 -0
- package/providers/codex/skills/kijito-qa-memory/SKILL.md +193 -0
- package/providers/codex/skills/kijito-qa-memory/agents/openai.yaml +4 -0
- package/providers/codex/skills/kijito-recall/SKILL.md +53 -0
- package/providers/codex/skills/kijito-start/SKILL.md +173 -0
- package/providers/codex/skills/kijito-start/agents/openai.yaml +4 -0
- package/providers/codex/test/n0-cli-refusal.test.mjs +31 -0
- package/providers/codex/test/n0-counterexample-matrix.test.mjs +118 -0
- package/providers/codex/test/n0-guard-census-core.mjs +1372 -0
- package/providers/codex/test/n0-guard-census.json +35479 -0
- package/providers/codex/test/n0-guard-census.mjs +31 -0
- package/providers/codex/test/n0-guard-census.test.mjs +374 -0
- package/providers/codex/test/n0-guard-counterexamples.mjs +1068 -0
- package/providers/codex/test/n0-guard-independent-projection.mjs +70 -0
- package/providers/codex/test/n0-guard-independent-projection.test.mjs +53 -0
- package/providers/codex/test/n0-guard-manifest-author.mjs +424 -0
- package/providers/codex/test/n0-guard-mutation-operators.test.mjs +244 -0
- package/providers/codex/test/n0-guard-mutation-runner.mjs +599 -0
- package/providers/codex/test/n0-guard-remainder-classes.test.mjs +314 -0
- package/providers/codex/test/n0-guard-sanitizer-pairs.test.mjs +68 -0
- package/providers/codex/test/n0-guard-shared-context-predicates.test.mjs +84 -0
- package/providers/codex/test/n0-harness.test.mjs +553 -0
- package/providers/codex/test/n0-notable-regressions.test.mjs +70 -0
- package/providers/codex/test/n0-subject-boundary.mjs +97 -0
- package/providers/codex/test/n0-subject-boundary.test.mjs +72 -0
- package/providers/codex/test/same-chat-plan-preflight.sh +167 -0
- package/providers/codex/tools/refresh-manifest.mjs +81 -0
- package/providers/codex/wake-helper/TRANSPORT-NOTES.md +25 -0
- package/providers/codex/wake-helper/integration.test.mjs +285 -0
- package/providers/codex/wake-helper/kijito-wake-helper.mjs +488 -0
- package/providers/codex/wake-helper/kijito-wake-helper.test.mjs +128 -0
- package/providers/codex/wake-helper/mock-daemon.mjs +64 -0
- package/providers/codex/wake-helper/status-probe.mjs +45 -0
- package/providers/codex/wake-helper/ws-uds.mjs +153 -0
- package/providers/monitor/.github/workflows/publish-npm.yml +38 -0
- package/providers/monitor/.github/workflows/publish-pypi.yml +30 -0
- package/providers/monitor/CHANGELOG.md +465 -0
- package/providers/monitor/IMPORT-PROVENANCE.md +68 -0
- package/providers/monitor/LICENSE +202 -0
- package/providers/monitor/NOTICE +7 -0
- package/providers/monitor/OPAQUE-OUTPUT-ENFORCEMENT.md +45 -0
- package/providers/monitor/README.md +571 -0
- package/providers/monitor/RELEASING.md +125 -0
- package/providers/monitor/arm-hive-monitor.sh +13 -0
- package/providers/monitor/bin/cli.js +43 -0
- package/providers/monitor/com.kijito.inbox-monitor.plist.template +59 -0
- package/providers/monitor/docs/DESIGN.md +984 -0
- package/providers/monitor/kijito-inbox-monitor@.service.template +95 -0
- package/providers/monitor/kijito_inbox_monitor.py +3666 -0
- package/providers/monitor/package.json +35 -0
- package/providers/monitor/pyproject.toml +42 -0
- package/providers/monitor/scripts/mutation-check.py +399 -0
- package/providers/monitor/scripts/prepublish-gate.sh +284 -0
- package/providers/monitor/test_kijito_monitor.py +5609 -0
|
@@ -0,0 +1,1068 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import { spawnSync } from "node:child_process";
|
|
7
|
+
|
|
8
|
+
const NOW = Date.parse("2026-07-30T23:10:00.000Z");
|
|
9
|
+
|
|
10
|
+
function requirePositiveContract(condition, detail) {
|
|
11
|
+
if (condition) return;
|
|
12
|
+
const error = new Error(detail);
|
|
13
|
+
error.code = "POSITIVE_CONTRACT";
|
|
14
|
+
throw error;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async function validationCase(mutate) {
|
|
18
|
+
const [{ fixtureSpecimen }, { sha256 }, { requiredCaseNames, validateSpecimen }, { renderPrompt }] = await Promise.all([
|
|
19
|
+
import("../n0-harness/fixture.mjs"),
|
|
20
|
+
import("../n0-harness/lib.mjs"),
|
|
21
|
+
import("../n0-harness/oracle.mjs"),
|
|
22
|
+
import("../n0-harness/prompt.mjs"),
|
|
23
|
+
]);
|
|
24
|
+
const specimen = fixtureSpecimen();
|
|
25
|
+
mutate(specimen, { sha256 });
|
|
26
|
+
rebuildPrompts(specimen, { requiredCaseNames, renderPrompt, sha256 });
|
|
27
|
+
const validated = validateSpecimen(specimen);
|
|
28
|
+
requirePositiveContract(validated === specimen, "validateSpecimen must return the exact validated specimen");
|
|
29
|
+
return { accepted: true, code: "VALIDATE_SPECIMEN_ACCEPTED" };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async function validationNoRebuildCase(mutate) {
|
|
33
|
+
const [{ fixtureSpecimen }, { validateSpecimen }] = await Promise.all([
|
|
34
|
+
import("../n0-harness/fixture.mjs"),
|
|
35
|
+
import("../n0-harness/oracle.mjs"),
|
|
36
|
+
]);
|
|
37
|
+
const specimen = fixtureSpecimen();
|
|
38
|
+
mutate(specimen);
|
|
39
|
+
const validated = validateSpecimen(specimen);
|
|
40
|
+
requirePositiveContract(validated === specimen, "validateSpecimen must return the exact validated specimen");
|
|
41
|
+
return { accepted: true, code: "VALIDATE_SPECIMEN_ACCEPTED" };
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async function permissionCase(configure = () => {}) {
|
|
45
|
+
const [{ fixturePermissionEvidence, fixtureSpecimen }, { validatePermissionEvidence }] = await Promise.all([
|
|
46
|
+
import("../n0-harness/fixture.mjs"),
|
|
47
|
+
import("../n0-harness/oracle.mjs"),
|
|
48
|
+
]);
|
|
49
|
+
const context = { specimen: fixtureSpecimen() };
|
|
50
|
+
context.evidence = fixturePermissionEvidence(context.specimen);
|
|
51
|
+
configure(context);
|
|
52
|
+
validatePermissionEvidence(context.specimen, context.evidence);
|
|
53
|
+
return { accepted: true, code: "PERMISSION_EVIDENCE_ACCEPTED" };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function rebuildPrompts(specimen, { requiredCaseNames, renderPrompt, sha256 }) {
|
|
57
|
+
for (const name of requiredCaseNames()) {
|
|
58
|
+
const utf8 = renderPrompt(specimen, name);
|
|
59
|
+
specimen.prompts[name] = { utf8, sha256: sha256(Buffer.from(utf8, "utf8")) };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function addRolloutEntry(specimen) {
|
|
64
|
+
const entry = { path: "session.jsonl", dev: 1, ino: 2, size: 10, mtimeMs: 3, firstRecordType: "session_meta" };
|
|
65
|
+
specimen.rollout.preActionSnapshot.entries = [entry];
|
|
66
|
+
specimen.rollout.preActionSnapshot.totalBytes = entry.size;
|
|
67
|
+
return entry;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async function oracleCase(mutate) {
|
|
71
|
+
const [{ fixtureEvidence, fixtureSpecimen }, { sha256 }, { evaluateOracle, requiredCaseNames }, { renderPrompt }] = await Promise.all([
|
|
72
|
+
import("../n0-harness/fixture.mjs"),
|
|
73
|
+
import("../n0-harness/lib.mjs"),
|
|
74
|
+
import("../n0-harness/oracle.mjs"),
|
|
75
|
+
import("../n0-harness/prompt.mjs"),
|
|
76
|
+
]);
|
|
77
|
+
const specimen = fixtureSpecimen();
|
|
78
|
+
const evidence = fixtureEvidence(specimen, NOW);
|
|
79
|
+
const context = { specimen, evidence, nowMs: NOW };
|
|
80
|
+
mutate(context);
|
|
81
|
+
rebuildPrompts(context.specimen, { requiredCaseNames, renderPrompt, sha256 });
|
|
82
|
+
const result = evaluateOracle(context.specimen, context.evidence, context.nowMs);
|
|
83
|
+
return { accepted: result?.status === "N0_TEST_CAPABLE", code: result?.code ?? "ORACLE_UNDEFINED", status: result?.status ?? "UNDEFINED" };
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function policyCase() {
|
|
87
|
+
const { requiredCasePolicy } = await import("../n0-harness/oracle.mjs");
|
|
88
|
+
requiredCasePolicy("UNKNOWN");
|
|
89
|
+
return { accepted: true, code: "CASE_POLICY_ACCEPTED" };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
async function libCase(name, args) {
|
|
93
|
+
const lib = await import("../n0-harness/lib.mjs");
|
|
94
|
+
lib[name](...args);
|
|
95
|
+
return { accepted: true, code: "HELPER_ACCEPTED" };
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function shadowStat(stat, overrides) {
|
|
99
|
+
const shadow = Object.create(stat);
|
|
100
|
+
for (const [key, value] of Object.entries(overrides)) Object.defineProperty(shadow, key, { value });
|
|
101
|
+
return shadow;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
async function readFileCase(configure = () => {}) {
|
|
105
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "n0-read-pair."));
|
|
106
|
+
const target = path.join(root, "a.json");
|
|
107
|
+
fs.writeFileSync(target, "{}\n");
|
|
108
|
+
const context = { args: { root, target, options: {} }, cleanup: [], restorers: [] };
|
|
109
|
+
const patch = (object, key, wrap) => {
|
|
110
|
+
const original = object[key];
|
|
111
|
+
object[key] = wrap(original);
|
|
112
|
+
context.restorers.push(() => { object[key] = original; });
|
|
113
|
+
};
|
|
114
|
+
try {
|
|
115
|
+
configure(context, patch);
|
|
116
|
+
const lib = await import("../n0-harness/lib.mjs");
|
|
117
|
+
const result = lib.readOwnedRegularFile(context.args.root, context.args.target, context.args.options);
|
|
118
|
+
requirePositiveContract(Buffer.isBuffer(result?.data), "readOwnedRegularFile must return data bytes");
|
|
119
|
+
requirePositiveContract(result.stat?.size === result.data.length, "readOwnedRegularFile stat size must bind returned bytes");
|
|
120
|
+
requirePositiveContract(typeof result.path === "string" && path.isAbsolute(result.path), "readOwnedRegularFile must return an absolute real path");
|
|
121
|
+
return { accepted: true, code: "READ_FILE_ACCEPTED" };
|
|
122
|
+
} finally {
|
|
123
|
+
for (const restore of context.restorers.reverse()) restore();
|
|
124
|
+
for (const extra of context.cleanup.reverse()) fs.rmSync(extra, { recursive: true, force: true });
|
|
125
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
async function parserModules() {
|
|
130
|
+
const [fixture, lib, parser] = await Promise.all([
|
|
131
|
+
import("../n0-harness/fixture.mjs"),
|
|
132
|
+
import("../n0-harness/lib.mjs"),
|
|
133
|
+
import("../n0-harness/parser.mjs"),
|
|
134
|
+
]);
|
|
135
|
+
return { fixture, lib, parser };
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
async function parseRolloutCase(input) {
|
|
139
|
+
const { parser } = await parserModules();
|
|
140
|
+
const parsed = parser.parseRollout(input);
|
|
141
|
+
requirePositiveContract(typeof parsed?.sessionId === "string" && parsed.sessionId.length > 0, "parseRollout must return a session id");
|
|
142
|
+
requirePositiveContract(Array.isArray(parsed.records) && parsed.records.length > 0, "parseRollout must return nonempty records");
|
|
143
|
+
requirePositiveContract(parsed.records[0]?.type === "session_meta", "parseRollout must retain the leading session record");
|
|
144
|
+
return { accepted: true, code: "PARSE_ROLLOUT_ACCEPTED" };
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
async function nonceCase(configure = () => {}) {
|
|
148
|
+
const { fixture, parser } = await parserModules();
|
|
149
|
+
const args = {
|
|
150
|
+
records: parser.parseRollout(fixture.fixtureRollout()).records,
|
|
151
|
+
nonce: fixture.FIXED.runNonce,
|
|
152
|
+
options: {},
|
|
153
|
+
};
|
|
154
|
+
configure(args, { fixture, parser });
|
|
155
|
+
parser.requireNonceInOneUserTurn(args.records, args.nonce, args.options);
|
|
156
|
+
return { accepted: true, code: "NONCE_ACCEPTED" };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
async function markerCase(configure = () => {}) {
|
|
160
|
+
const { fixture, parser } = await parserModules();
|
|
161
|
+
const args = {
|
|
162
|
+
markerNonce: fixture.FIXED.markerNonce,
|
|
163
|
+
candidates: [{ path: "a.jsonl", text: fixture.fixtureRollout({ nonce: fixture.FIXED.markerNonce }) }],
|
|
164
|
+
};
|
|
165
|
+
configure(args, { fixture, parser });
|
|
166
|
+
parser.selectMarkerRollout(args.candidates, args.markerNonce);
|
|
167
|
+
return { accepted: true, code: "MARKER_ACCEPTED" };
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
async function scheduledCase(configure = () => {}) {
|
|
171
|
+
const { fixture, parser } = await parserModules();
|
|
172
|
+
const specimen = fixture.fixtureSpecimen();
|
|
173
|
+
const args = {
|
|
174
|
+
rolloutText: fixture.fixtureRollout({ environment: specimen.environment }),
|
|
175
|
+
runRecord: fixture.fixtureRunRecord(),
|
|
176
|
+
expected: fixture.fixtureExpected(specimen),
|
|
177
|
+
};
|
|
178
|
+
configure(args, { fixture, parser, specimen });
|
|
179
|
+
parser.verifyScheduledRun(args);
|
|
180
|
+
return { accepted: true, code: "SCHEDULED_ACCEPTED" };
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
async function pointerCase(configure = () => {}) {
|
|
184
|
+
const { fixture, lib, parser } = await parserModules();
|
|
185
|
+
const args = { raw: fixture.fixtureKijitoGet(), expectedId: fixture.FIXED.pointerId, expectedPersona: "codex" };
|
|
186
|
+
configure(args, { fixture, lib, parser });
|
|
187
|
+
parser.parseKijitoMainBody(args.raw, args.expectedId, args.expectedPersona);
|
|
188
|
+
return { accepted: true, code: "POINTER_ACCEPTED" };
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
async function mailCase(configure = () => {}) {
|
|
192
|
+
const { fixture, parser } = await parserModules();
|
|
193
|
+
const args = {
|
|
194
|
+
records: parser.parseRollout(fixture.fixtureRollout({ extraRecords: [fixture.fixtureMailRecord()] })).records,
|
|
195
|
+
options: { rowId: 77, bodyNonce: fixture.FIXED.bodyNonce },
|
|
196
|
+
};
|
|
197
|
+
configure(args, { fixture, parser });
|
|
198
|
+
parser.verifyExactMailFetch(args.records, args.options);
|
|
199
|
+
return { accepted: true, code: "MAIL_ACCEPTED" };
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
async function secretCase(configure = () => {}) {
|
|
203
|
+
const { fixture, parser } = await parserModules();
|
|
204
|
+
const args = { surfaces: { prompt: `leak ${fixture.FIXED.bodyNonce}` }, secrets: { bodyNonce: fixture.FIXED.bodyNonce } };
|
|
205
|
+
configure(args, { fixture, parser });
|
|
206
|
+
parser.assertSecretsAbsent(args.surfaces, args.secrets);
|
|
207
|
+
return { accepted: true, code: "SECRETS_ACCEPTED" };
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
async function snapshotCase(configure = () => {}) {
|
|
211
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "n0-snapshot-pair."));
|
|
212
|
+
fs.writeFileSync(path.join(root, "a.jsonl"), `${JSON.stringify({ type: "session_meta", payload: { id: "session" } })}\n`);
|
|
213
|
+
const context = { args: { root, options: {} }, cleanup: [], restorers: [] };
|
|
214
|
+
const patch = (object, key, wrap) => {
|
|
215
|
+
const original = object[key];
|
|
216
|
+
object[key] = wrap(original);
|
|
217
|
+
context.restorers.push(() => { object[key] = original; });
|
|
218
|
+
};
|
|
219
|
+
try {
|
|
220
|
+
configure(context, patch);
|
|
221
|
+
const snapshot = await import("../n0-harness/snapshot.mjs");
|
|
222
|
+
const result = snapshot.snapshotTree(context.args.root, context.args.options);
|
|
223
|
+
requirePositiveContract(result?.schema === "N0_ROLLOUT_SNAPSHOT_V1", "snapshotTree must return the exact schema");
|
|
224
|
+
requirePositiveContract(result.root === fs.realpathSync(context.args.root), "snapshotTree must bind the exact real root");
|
|
225
|
+
requirePositiveContract(Array.isArray(result.entries), "snapshotTree must return entries");
|
|
226
|
+
requirePositiveContract(result.totalBytes === result.entries.reduce((sum, entry) => sum + entry.size, 0), "snapshotTree totalBytes must bind entries");
|
|
227
|
+
return { accepted: true, code: "SNAPSHOT_ACCEPTED" };
|
|
228
|
+
} finally {
|
|
229
|
+
for (const restore of context.restorers.reverse()) restore();
|
|
230
|
+
for (const extra of context.cleanup.reverse()) fs.rmSync(extra, { recursive: true, force: true });
|
|
231
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function snapshotPair() {
|
|
236
|
+
const entry = { path: "a.jsonl", dev: 1, ino: 2, size: 10, mtimeMs: 3, firstRecordType: "session_meta" };
|
|
237
|
+
return {
|
|
238
|
+
before: { schema: "N0_ROLLOUT_SNAPSHOT_V1", root: "/rollouts", totalBytes: 10, entries: [{ ...entry }] },
|
|
239
|
+
after: { schema: "N0_ROLLOUT_SNAPSHOT_V1", root: "/rollouts", totalBytes: 10, entries: [{ ...entry }] },
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
async function snapshotDiffCase(configure = () => {}, stable = false) {
|
|
244
|
+
const snapshot = await import("../n0-harness/snapshot.mjs");
|
|
245
|
+
const pair = snapshotPair();
|
|
246
|
+
configure(pair);
|
|
247
|
+
if (stable) snapshot.assertSnapshotStable(pair.before, pair.after);
|
|
248
|
+
else snapshot.changedCandidates(pair.before, pair.after);
|
|
249
|
+
return { accepted: true, code: stable ? "SNAPSHOT_STABLE_ACCEPTED" : "SNAPSHOT_DIFF_ACCEPTED" };
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
async function promptCase(configure = () => {}, digest = false) {
|
|
253
|
+
const { fixture } = await parserModules();
|
|
254
|
+
const prompt = await import("../n0-harness/prompt.mjs");
|
|
255
|
+
const args = { specimen: fixture.fixtureSpecimen(), caseName: "N0a-M" };
|
|
256
|
+
configure(args, { fixture, prompt });
|
|
257
|
+
if (digest) prompt.promptDigest(args.specimen, args.caseName);
|
|
258
|
+
else prompt.renderPrompt(args.specimen, args.caseName);
|
|
259
|
+
return { accepted: true, code: digest ? "PROMPT_DIGEST_ACCEPTED" : "PROMPT_ACCEPTED" };
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
async function cliCase(configure = () => {}) {
|
|
263
|
+
const { fixture } = await parserModules();
|
|
264
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "n0-cli-pair."));
|
|
265
|
+
try {
|
|
266
|
+
const specimen = fixture.fixtureSpecimen();
|
|
267
|
+
const evidence = fixture.fixtureEvidence(specimen, NOW);
|
|
268
|
+
fs.writeFileSync(path.join(root, "specimen.json"), JSON.stringify(specimen));
|
|
269
|
+
fs.writeFileSync(path.join(root, "evidence.json"), JSON.stringify(evidence));
|
|
270
|
+
const context = {
|
|
271
|
+
root,
|
|
272
|
+
specimen,
|
|
273
|
+
evidence,
|
|
274
|
+
argv: ["oracle", "--root", root, "--specimen", path.join(root, "specimen.json"), "--evidence", path.join(root, "evidence.json"), "--now-ms", String(NOW)],
|
|
275
|
+
};
|
|
276
|
+
configure(context, { fixture });
|
|
277
|
+
const cli = fileURLToPath(new URL("../n0-harness/cli.mjs", import.meta.url));
|
|
278
|
+
const result = spawnSync(process.execPath, [cli, ...context.argv], { cwd: root, encoding: "utf8" });
|
|
279
|
+
let payload;
|
|
280
|
+
try { payload = JSON.parse(result.stdout); } catch {}
|
|
281
|
+
const command = context.argv[0];
|
|
282
|
+
const validOracle = command === "oracle" && payload?.status === "N0_TEST_CAPABLE";
|
|
283
|
+
const validSnapshot = command === "snapshot" && payload?.schema === "N0_ROLLOUT_SNAPSHOT_V1"
|
|
284
|
+
&& payload.root === fs.realpathSync(root) && Array.isArray(payload.entries);
|
|
285
|
+
const accepted = result.status === 0 && result.stderr === "" && (validOracle || validSnapshot);
|
|
286
|
+
if (accepted) return { accepted: true, code: "CLI_ACCEPTED" };
|
|
287
|
+
let detail = result.stderr.match(/^([A-Z0-9_]+):/)?.[1];
|
|
288
|
+
if (!detail && payload && typeof payload.code === "string") detail = payload.code;
|
|
289
|
+
if (!detail && result.stderr.startsWith("N0_TEST_ORACLE")) detail = "USAGE";
|
|
290
|
+
if (!detail && result.status === 0 && result.stdout.trim() === "") detail = "EMPTY_OUTPUT";
|
|
291
|
+
return { accepted: false, code: `CLI_EXIT_${result.status}:${detail ?? "INVALID_OUTPUT"}` };
|
|
292
|
+
} finally { fs.rmSync(root, { recursive: true, force: true }); }
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
async function specimenCase(kind) {
|
|
296
|
+
const { fixture } = await parserModules();
|
|
297
|
+
const specimenModule = await import("../n0-harness/specimen.mjs");
|
|
298
|
+
if (kind === "build") {
|
|
299
|
+
const input = fixture.fixtureSpecimen();
|
|
300
|
+
input.target.clean = false;
|
|
301
|
+
specimenModule.buildSpecimen(input);
|
|
302
|
+
return { accepted: true, code: "BUILD_SPECIMEN_ACCEPTED" };
|
|
303
|
+
}
|
|
304
|
+
if (kind === "build-prompt-nonce") {
|
|
305
|
+
const input = fixture.fixtureSpecimen();
|
|
306
|
+
input.cases["N0a-M"].nonce = "g".repeat(32);
|
|
307
|
+
specimenModule.buildSpecimen(input);
|
|
308
|
+
return { accepted: true, code: "BUILD_SPECIMEN_ACCEPTED" };
|
|
309
|
+
}
|
|
310
|
+
if (kind === "mail") {
|
|
311
|
+
specimenModule.buildMailFixtureRequest({ bodyNonce: "g".repeat(32) });
|
|
312
|
+
return { accepted: true, code: "MAIL_REQUEST_ACCEPTED" };
|
|
313
|
+
}
|
|
314
|
+
specimenModule.buildMailCleanupRequest({ rowId: 1.5 });
|
|
315
|
+
return { accepted: true, code: "MAIL_CLEANUP_ACCEPTED" };
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
function patchLstatCall(callIndex, overrides) {
|
|
319
|
+
return (original) => {
|
|
320
|
+
let calls = 0;
|
|
321
|
+
return function patchedLstat(...args) {
|
|
322
|
+
const stat = original.apply(this, args);
|
|
323
|
+
calls += 1;
|
|
324
|
+
return calls === callIndex ? shadowStat(stat, overrides(stat)) : stat;
|
|
325
|
+
};
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
function patchFstat(mode, field) {
|
|
330
|
+
return (original) => {
|
|
331
|
+
let calls = 0;
|
|
332
|
+
return function patchedFstat(...args) {
|
|
333
|
+
const stat = original.apply(this, args);
|
|
334
|
+
calls += 1;
|
|
335
|
+
const alter = mode === "both" || (mode === "after" && calls === 2);
|
|
336
|
+
return alter ? shadowStat(stat, { [field]: stat[field] + 1 }) : stat;
|
|
337
|
+
};
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
async function manifestContext() {
|
|
342
|
+
const [{ fixtureSpecimen }, lib, oracle, prompt, evidenceManifest] = await Promise.all([
|
|
343
|
+
import("../n0-harness/fixture.mjs"),
|
|
344
|
+
import("../n0-harness/lib.mjs"),
|
|
345
|
+
import("../n0-harness/oracle.mjs"),
|
|
346
|
+
import("../n0-harness/prompt.mjs"),
|
|
347
|
+
import("../n0-harness/evidence-manifest.mjs"),
|
|
348
|
+
]);
|
|
349
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "n0-manifest-pair."));
|
|
350
|
+
fs.writeFileSync(path.join(root, "a.json"), "{}\n");
|
|
351
|
+
fs.writeFileSync(path.join(root, "b.json"), "{}\n");
|
|
352
|
+
const specimen = fixtureSpecimen();
|
|
353
|
+
specimen.paths.control = root;
|
|
354
|
+
for (const name of ["control-read", "control-chmod", "control-create"]) specimen.canaries[name].path = path.join(root, name);
|
|
355
|
+
rebuildPrompts(specimen, { requiredCaseNames: oracle.requiredCaseNames, renderPrompt: prompt.renderPrompt, sha256: lib.sha256 });
|
|
356
|
+
return { root, specimen, ...evidenceManifest };
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
async function buildManifestCase(mutate) {
|
|
360
|
+
const context = await manifestContext();
|
|
361
|
+
try {
|
|
362
|
+
const args = { root: context.root, specimen: context.specimen, files: ["a.json"], createdAt: "2026-07-30T23:11:00.000Z" };
|
|
363
|
+
mutate(args, context);
|
|
364
|
+
context.buildEvidenceManifest(args);
|
|
365
|
+
return { accepted: true, code: "BUILD_MANIFEST_ACCEPTED" };
|
|
366
|
+
} finally { fs.rmSync(context.root, { recursive: true, force: true }); }
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
async function validateManifestCase(mutate) {
|
|
370
|
+
const context = await manifestContext();
|
|
371
|
+
try {
|
|
372
|
+
const manifest = context.buildEvidenceManifest({ root: context.root, specimen: context.specimen, files: ["a.json"], createdAt: "2026-07-30T23:11:00.000Z" });
|
|
373
|
+
const mutated = mutate(manifest, context);
|
|
374
|
+
const candidate = mutated === undefined ? manifest : mutated;
|
|
375
|
+
context.validateEvidenceManifest(context.specimen, candidate);
|
|
376
|
+
return { accepted: true, code: "VALIDATE_MANIFEST_ACCEPTED" };
|
|
377
|
+
} finally { fs.rmSync(context.root, { recursive: true, force: true }); }
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
const cases = {
|
|
381
|
+
"lib.fail": () => libCase("fail", ["X", "x"]),
|
|
382
|
+
"lib.object.null": () => libCase("requireObject", [null, "X", "value"]),
|
|
383
|
+
"lib.object.string": () => libCase("requireObject", ["x", "X", "value"]),
|
|
384
|
+
"lib.object.array": () => libCase("requireObject", [[], "X", "value"]),
|
|
385
|
+
"lib.string.type": () => libCase("requireString", [7, "X", "value"]),
|
|
386
|
+
"lib.string.short": () => libCase("requireString", ["", "X", "value"]),
|
|
387
|
+
"lib.string.long": () => libCase("requireString", ["xx", "X", "value", { max: 1 }]),
|
|
388
|
+
"lib.integer.type": () => libCase("requireSafeInteger", [1.5, "X", "value"]),
|
|
389
|
+
"lib.integer.min": () => libCase("requireSafeInteger", [0, "X", "value"]),
|
|
390
|
+
"lib.sha.format": () => libCase("requireSha256", ["g".repeat(64), "X", "value"]),
|
|
391
|
+
"lib.sha.length": () => libCase("requireSha256", ["short", "X", "value"]),
|
|
392
|
+
"lib.commit.format": () => libCase("requireGitCommit", ["g".repeat(40), "X", "value"]),
|
|
393
|
+
"lib.commit.length": () => libCase("requireGitCommit", ["short", "X", "value"]),
|
|
394
|
+
"lib.nonce.format": () => libCase("requireNonce", ["g".repeat(32), "X", "value"]),
|
|
395
|
+
"lib.nonce.length": () => libCase("requireNonce", ["short", "X", "value"]),
|
|
396
|
+
"lib.exact-keys.object": () => libCase("assertExactKeys", [null, [], "X", "value"]),
|
|
397
|
+
"lib.exact-keys.extra": () => libCase("assertExactKeys", [{ extra: true }, [], "X", "value"]),
|
|
398
|
+
"lib.path.outside": () => libCase("requirePathInside", ["/root/base", "/root/outside", "X"]),
|
|
399
|
+
"lib.path.parent": () => libCase("requirePathInside", ["/root/base", "/root", "X"]),
|
|
400
|
+
"lib.path.relative-absolute-injection": async () => {
|
|
401
|
+
const root = path.resolve(os.tmpdir(), "n0-relative-root");
|
|
402
|
+
const target = path.join(root, "child");
|
|
403
|
+
const relative = path.relative(root, target);
|
|
404
|
+
const original = path.isAbsolute;
|
|
405
|
+
path.isAbsolute = (candidate) => candidate === relative || original(candidate);
|
|
406
|
+
try {
|
|
407
|
+
return await libCase("requirePathInside", [root, target, "X"]);
|
|
408
|
+
} finally {
|
|
409
|
+
path.isAbsolute = original;
|
|
410
|
+
}
|
|
411
|
+
},
|
|
412
|
+
"lib.read.root-directory": () => readFileCase((context, patch) => {
|
|
413
|
+
patch(fs, "lstatSync", patchLstatCall(1, () => ({ isDirectory: () => false })));
|
|
414
|
+
}),
|
|
415
|
+
"lib.read.root-owner": () => readFileCase((context, patch) => {
|
|
416
|
+
patch(fs, "lstatSync", patchLstatCall(1, (stat) => ({ uid: stat.uid + 1 })));
|
|
417
|
+
}),
|
|
418
|
+
"lib.read.root-symlink": () => readFileCase((context) => {
|
|
419
|
+
const alias = `${context.args.root}.alias`;
|
|
420
|
+
fs.symlinkSync(context.args.root, alias, "dir");
|
|
421
|
+
context.cleanup.push(alias);
|
|
422
|
+
context.args.root = alias;
|
|
423
|
+
context.args.target = path.join(alias, "a.json");
|
|
424
|
+
}),
|
|
425
|
+
"lib.read.lexical-alias": () => readFileCase((context) => {
|
|
426
|
+
const alias = `${context.args.root}.alias`;
|
|
427
|
+
fs.symlinkSync(context.args.root, alias, "dir");
|
|
428
|
+
context.cleanup.push(alias);
|
|
429
|
+
context.args.target = path.join(alias, "a.json");
|
|
430
|
+
}),
|
|
431
|
+
"lib.read.file-symlink": () => readFileCase((context) => {
|
|
432
|
+
const link = path.join(context.args.root, "link.json");
|
|
433
|
+
fs.symlinkSync(context.args.target, link, "file");
|
|
434
|
+
context.args.target = link;
|
|
435
|
+
}),
|
|
436
|
+
"lib.read.file-regular": () => readFileCase((context, patch) => {
|
|
437
|
+
patch(fs, "lstatSync", patchLstatCall(2, () => ({ isFile: () => false, isSymbolicLink: () => false })));
|
|
438
|
+
}),
|
|
439
|
+
"lib.read.file-owner": () => readFileCase((context, patch) => {
|
|
440
|
+
patch(fs, "lstatSync", patchLstatCall(2, (stat) => ({ uid: stat.uid + 1 })));
|
|
441
|
+
}),
|
|
442
|
+
"lib.read.file-size": () => readFileCase((context) => { context.args.options.maxBytes = 0; }),
|
|
443
|
+
"lib.read.realpath-alias": () => readFileCase((context) => {
|
|
444
|
+
const outside = fs.mkdtempSync(path.join(os.tmpdir(), "n0-read-outside."));
|
|
445
|
+
fs.writeFileSync(path.join(outside, "a.json"), "{}\n");
|
|
446
|
+
fs.symlinkSync(outside, path.join(context.args.root, "escape"), "dir");
|
|
447
|
+
context.cleanup.push(outside);
|
|
448
|
+
context.args.target = path.join(context.args.root, "escape", "a.json");
|
|
449
|
+
}),
|
|
450
|
+
"lib.read.before-dev": () => readFileCase((context, patch) => { patch(fs, "fstatSync", patchFstat("both", "dev")); }),
|
|
451
|
+
"lib.read.before-ino": () => readFileCase((context, patch) => { patch(fs, "fstatSync", patchFstat("both", "ino")); }),
|
|
452
|
+
"lib.read.before-size": () => readFileCase((context, patch) => { patch(fs, "fstatSync", patchFstat("both", "size")); }),
|
|
453
|
+
"lib.read.before-mtime": () => readFileCase((context, patch) => { patch(fs, "fstatSync", patchFstat("both", "mtimeMs")); }),
|
|
454
|
+
"lib.read.after-dev": () => readFileCase((context, patch) => { patch(fs, "fstatSync", patchFstat("after", "dev")); }),
|
|
455
|
+
"lib.read.after-ino": () => readFileCase((context, patch) => { patch(fs, "fstatSync", patchFstat("after", "ino")); }),
|
|
456
|
+
"lib.read.after-size": () => readFileCase((context, patch) => { patch(fs, "fstatSync", patchFstat("after", "size")); }),
|
|
457
|
+
"lib.read.after-mtime": () => readFileCase((context, patch) => { patch(fs, "fstatSync", patchFstat("after", "mtimeMs")); }),
|
|
458
|
+
"lib.json.invalid": () => libCase("parseJsonBuffer", [Buffer.from("{")]),
|
|
459
|
+
"parser.rollout.type-buffer": async () => {
|
|
460
|
+
const { fixture } = await parserModules();
|
|
461
|
+
const input = Buffer.from(fixture.fixtureRollout());
|
|
462
|
+
input.split = (...args) => input.toString("utf8").split(...args);
|
|
463
|
+
return parseRolloutCase(input);
|
|
464
|
+
},
|
|
465
|
+
"parser.rollout.too-large": async () => {
|
|
466
|
+
const { lib } = await parserModules();
|
|
467
|
+
return parseRolloutCase(`${JSON.stringify({ type: "session_meta", payload: { id: "x".repeat(lib.MAX_JSON_BYTES) } })}\n`);
|
|
468
|
+
},
|
|
469
|
+
"parser.rollout.too-many": async () => {
|
|
470
|
+
const { lib } = await parserModules();
|
|
471
|
+
const lines = [JSON.stringify({ type: "session_meta", payload: { id: "session" } })];
|
|
472
|
+
while (lines.length <= lib.MAX_RECORDS) lines.push("{}");
|
|
473
|
+
return parseRolloutCase(`${lines.join("\n")}\n`);
|
|
474
|
+
},
|
|
475
|
+
"parser.rollout.invalid-json-late": () => parseRolloutCase(`${JSON.stringify({ type: "session_meta", payload: { id: "session" } })}\n{\n`),
|
|
476
|
+
"parser.rollout.empty": () => parseRolloutCase(""),
|
|
477
|
+
"parser.rollout.session-type": () => parseRolloutCase(`${JSON.stringify({ type: "wrong", payload: { id: "session" } })}\n`),
|
|
478
|
+
"parser.rollout.session-id-type": () => parseRolloutCase(`${JSON.stringify({ type: "session_meta", payload: { id: 7 } })}\n`),
|
|
479
|
+
"parser.rollout.session-id-empty": () => parseRolloutCase(`${JSON.stringify({ type: "session_meta", payload: { id: "" } })}\n`),
|
|
480
|
+
"parser.nonce.invalid": () => nonceCase((args) => {
|
|
481
|
+
args.nonce = "g".repeat(32);
|
|
482
|
+
args.records[1].payload.content[0].text = "a".repeat(32);
|
|
483
|
+
}),
|
|
484
|
+
"parser.nonce.total": () => nonceCase((args) => { args.records[1].payload.content[0].text = `${args.nonce} ${args.nonce}`; }),
|
|
485
|
+
"parser.nonce.multiple-turns": () => nonceCase((args) => {
|
|
486
|
+
const second = structuredClone(args.records[1]);
|
|
487
|
+
second.payload.content[0].text = `SECOND USER TURN ${args.nonce}`;
|
|
488
|
+
second.payload.internal_chat_message_metadata_passthrough.turn_id = "second-turn";
|
|
489
|
+
args.records.push(second);
|
|
490
|
+
}),
|
|
491
|
+
"parser.nonce.turn": () => nonceCase((args) => { args.options.expectedTurnId = "wrong-turn"; }),
|
|
492
|
+
"parser.nonce.task": () => nonceCase((args) => { args.options.expectedTaskId = "wrong-task"; }),
|
|
493
|
+
"parser.nonce.run": () => nonceCase((args) => { args.options.expectedRunId = "wrong-run"; }),
|
|
494
|
+
"parser.marker.nonce-invalid": () => markerCase((args, { fixture }) => {
|
|
495
|
+
args.markerNonce = "g".repeat(32);
|
|
496
|
+
args.candidates[0].text = fixture.fixtureRollout({ nonce: "a".repeat(32) });
|
|
497
|
+
}),
|
|
498
|
+
"parser.marker.rollout-type": () => markerCase((args) => { args.candidates[0].text = Buffer.from(args.candidates[0].text); }),
|
|
499
|
+
"parser.marker.span": () => markerCase((args, { fixture }) => { args.candidates[0].text = fixture.fixtureRollout({ userText: "marker absent" }); }),
|
|
500
|
+
"parser.marker.unexpected-error": () => markerCase((args, { fixture }) => {
|
|
501
|
+
args.candidates = [{ path: "bad.jsonl", text: "{\n" }, { path: "good.jsonl", text: fixture.fixtureRollout({ nonce: fixture.FIXED.markerNonce }) }];
|
|
502
|
+
}),
|
|
503
|
+
"parser.marker.zero": () => markerCase((args) => { args.candidates = []; }),
|
|
504
|
+
"parser.marker.multiple": () => markerCase((args, { fixture }) => {
|
|
505
|
+
args.candidates.push({ path: "b.jsonl", text: fixture.fixtureRollout({ nonce: fixture.FIXED.markerNonce }) });
|
|
506
|
+
}),
|
|
507
|
+
"parser.scheduled.rollout-type": () => scheduledCase((args) => { args.rolloutText = Buffer.from(args.rolloutText); }),
|
|
508
|
+
"parser.scheduled.run-record-object": () => scheduledCase((args) => { args.runRecord = JSON.stringify(args.runRecord); }),
|
|
509
|
+
"parser.scheduled.chat": () => scheduledCase((args) => { args.expected.sessionId = "wrong-session"; }),
|
|
510
|
+
"parser.scheduled.run-record-type": () => scheduledCase((args) => { args.runRecord.taskId = 7; }),
|
|
511
|
+
"parser.scheduled.task": () => scheduledCase((args) => { args.runRecord.taskId = "wrong-task"; }),
|
|
512
|
+
"parser.scheduled.run": () => scheduledCase((args) => { args.runRecord.runId = "wrong-run"; }),
|
|
513
|
+
"parser.scheduled.turn": () => scheduledCase((args) => { args.runRecord.turnId = "wrong-turn"; }),
|
|
514
|
+
"parser.scheduled.nonce": () => scheduledCase((args, { fixture }) => { args.rolloutText = fixture.fixtureRollout({ userText: "nonce absent", environment: args.expected.environment }); }),
|
|
515
|
+
"parser.scheduled.context-missing": () => scheduledCase((args) => {
|
|
516
|
+
const records = args.rolloutText.trimEnd().split("\n").map((line) => JSON.parse(line)).filter((record) => record.type !== "turn_context");
|
|
517
|
+
args.rolloutText = `${records.map(JSON.stringify).join("\n")}\n`;
|
|
518
|
+
}),
|
|
519
|
+
"parser.scheduled.context-duplicate": () => scheduledCase((args, { fixture }) => {
|
|
520
|
+
args.rolloutText = fixture.fixtureRollout({ environment: args.expected.environment, extraRecords: [{ type: "turn_context", payload: { turn_id: args.expected.turnId, ...args.expected.environment } }] });
|
|
521
|
+
}),
|
|
522
|
+
"parser.scheduled.environment": () => scheduledCase((args) => { args.expected.environment.model = "wrong-model"; }),
|
|
523
|
+
"parser.scheduled.steer-method": () => scheduledCase((args, { fixture }) => {
|
|
524
|
+
args.rolloutText = fixture.fixtureRollout({ environment: args.expected.environment, extraRecords: [{ type: "event_msg", payload: { method: "turn/steer" } }] });
|
|
525
|
+
}),
|
|
526
|
+
"parser.scheduled.steer-type-underscore": () => scheduledCase((args, { fixture }) => {
|
|
527
|
+
args.rolloutText = fixture.fixtureRollout({ environment: args.expected.environment, extraRecords: [{ type: "turn_steered" }] });
|
|
528
|
+
}),
|
|
529
|
+
"parser.scheduled.steer-type-slash": () => scheduledCase((args, { fixture }) => {
|
|
530
|
+
args.rolloutText = fixture.fixtureRollout({ environment: args.expected.environment, extraRecords: [{ type: "turn/steer" }] });
|
|
531
|
+
}),
|
|
532
|
+
"parser.scheduled.steer-nested": () => scheduledCase((args, { fixture }) => {
|
|
533
|
+
args.rolloutText = fixture.fixtureRollout({ environment: args.expected.environment, extraRecords: [{ type: "event_msg", payload: { nested: { method: "turn/steer" } } }] });
|
|
534
|
+
}),
|
|
535
|
+
"parser.pointer.id": () => pointerCase((args) => { args.expectedId = 1.5; }),
|
|
536
|
+
"parser.pointer.raw-type": () => pointerCase((args) => { args.raw = new String(args.raw); }),
|
|
537
|
+
"parser.pointer.byte-limit": () => pointerCase((args, { fixture, lib }) => {
|
|
538
|
+
args.raw = fixture.fixtureKijitoGet({ body: "é".repeat(Math.floor(lib.MAX_JSON_BYTES * 0.6)) });
|
|
539
|
+
}),
|
|
540
|
+
"parser.pointer.unclosed": () => pointerCase((args) => { args.raw = args.raw.replace(/⟦\/UNTRUSTED n=a1b2c3⟧$/, ""); }),
|
|
541
|
+
"parser.pointer.multiple": () => pointerCase((args, { fixture }) => {
|
|
542
|
+
const second = fixture.fixtureKijitoGet({ body: "SECOND", outerNonce: "face999" }).split("\n").slice(6).join("\n");
|
|
543
|
+
args.raw = `${args.raw}\n${second}`;
|
|
544
|
+
}),
|
|
545
|
+
"parser.pointer.trailing": () => pointerCase((args) => { args.raw = `${args.raw}\nTRAILING`; }),
|
|
546
|
+
"parser.pointer.header": () => pointerCase((args) => { args.raw = args.raw.replace(/^Memory \[21813\]/, "Memory [999]"); }),
|
|
547
|
+
"parser.mail.row": () => mailCase((args) => { args.options.rowId = 1.5; }),
|
|
548
|
+
"parser.mail.nonce": () => mailCase((args, { fixture }) => {
|
|
549
|
+
args.options.bodyNonce = "g".repeat(32);
|
|
550
|
+
args.records.at(-1).payload.result.content[0].text = args.records.at(-1).payload.result.content[0].text.replace(fixture.FIXED.bodyNonce, "a".repeat(32));
|
|
551
|
+
}),
|
|
552
|
+
"parser.mail.zero": () => mailCase((args) => { args.records = args.records.filter((record) => record.payload?.invocation?.tool !== "kijito_hive_inbox"); }),
|
|
553
|
+
"parser.secret.leak": () => secretCase(),
|
|
554
|
+
"snapshot.read.before-dev": () => snapshotCase((context, patch) => { patch(fs, "fstatSync", patchFstat("both", "dev")); }),
|
|
555
|
+
"snapshot.read.before-ino": () => snapshotCase((context, patch) => { patch(fs, "fstatSync", patchFstat("both", "ino")); }),
|
|
556
|
+
"snapshot.read.before-size": () => snapshotCase((context, patch) => { patch(fs, "fstatSync", patchFstat("both", "size")); }),
|
|
557
|
+
"snapshot.read.before-mtime": () => snapshotCase((context, patch) => { patch(fs, "fstatSync", patchFstat("both", "mtimeMs")); }),
|
|
558
|
+
"snapshot.read.after-dev": () => snapshotCase((context, patch) => { patch(fs, "fstatSync", patchFstat("after", "dev")); }),
|
|
559
|
+
"snapshot.read.after-ino": () => snapshotCase((context, patch) => { patch(fs, "fstatSync", patchFstat("after", "ino")); }),
|
|
560
|
+
"snapshot.read.after-size": () => snapshotCase((context, patch) => { patch(fs, "fstatSync", patchFstat("after", "size")); }),
|
|
561
|
+
"snapshot.read.after-mtime": () => snapshotCase((context, patch) => { patch(fs, "fstatSync", patchFstat("after", "mtimeMs")); }),
|
|
562
|
+
"snapshot.root.directory": () => snapshotCase((context, patch) => { patch(fs, "lstatSync", patchLstatCall(1, () => ({ isDirectory: () => false }))); }),
|
|
563
|
+
"snapshot.root.owner": () => snapshotCase((context, patch) => { patch(fs, "lstatSync", patchLstatCall(1, (stat) => ({ uid: stat.uid + 1 }))); }),
|
|
564
|
+
"snapshot.root.symlink": () => snapshotCase((context) => {
|
|
565
|
+
const alias = `${context.args.root}.alias`;
|
|
566
|
+
fs.symlinkSync(context.args.root, alias, "dir");
|
|
567
|
+
context.cleanup.push(alias);
|
|
568
|
+
context.args.root = alias;
|
|
569
|
+
}),
|
|
570
|
+
"snapshot.entry.symlink": () => snapshotCase((context) => { fs.symlinkSync(path.join(context.args.root, "a.jsonl"), path.join(context.args.root, "link.jsonl"), "file"); }),
|
|
571
|
+
"snapshot.entry.realpath": () => snapshotCase((context) => {
|
|
572
|
+
const outside = fs.mkdtempSync(path.join(os.tmpdir(), "n0-snapshot-outside."));
|
|
573
|
+
fs.writeFileSync(path.join(outside, "outside.jsonl"), `${JSON.stringify({ type: "session_meta", payload: { id: "outside" } })}\n`);
|
|
574
|
+
fs.symlinkSync(path.join(outside, "outside.jsonl"), path.join(context.args.root, "escape.jsonl"), "file");
|
|
575
|
+
context.cleanup.push(outside);
|
|
576
|
+
}),
|
|
577
|
+
"snapshot.entry.realpath-regular": () => snapshotCase((context, patch) => {
|
|
578
|
+
const outside = fs.mkdtempSync(path.join(os.tmpdir(), "n0-snapshot-realpath-outside."));
|
|
579
|
+
const escaped = path.join(outside, "outside.jsonl");
|
|
580
|
+
fs.writeFileSync(escaped, `${JSON.stringify({ type: "session_meta", payload: { id: "outside" } })}\n`);
|
|
581
|
+
context.cleanup.push(outside);
|
|
582
|
+
patch(fs, "realpathSync", (original) => {
|
|
583
|
+
return function patchedRealpath(...args) {
|
|
584
|
+
return path.basename(String(args[0])) === "a.jsonl"
|
|
585
|
+
? escaped
|
|
586
|
+
: original.apply(this, args);
|
|
587
|
+
};
|
|
588
|
+
});
|
|
589
|
+
}),
|
|
590
|
+
"snapshot.entry.owner": () => snapshotCase((context, patch) => { patch(fs, "lstatSync", patchLstatCall(2, (stat) => ({ uid: stat.uid + 1 }))); }),
|
|
591
|
+
"snapshot.entry.nonregular": () => snapshotCase((context, patch) => {
|
|
592
|
+
patch(fs, "lstatSync", patchLstatCall(2, () => ({ isDirectory: () => false, isFile: () => false })));
|
|
593
|
+
}),
|
|
594
|
+
"snapshot.entry.child-walk": () => snapshotCase((context) => {
|
|
595
|
+
const child = path.join(context.args.root, "child");
|
|
596
|
+
fs.mkdirSync(child);
|
|
597
|
+
fs.symlinkSync(path.join(context.args.root, "a.jsonl"), path.join(child, "link.jsonl"), "file");
|
|
598
|
+
}),
|
|
599
|
+
"snapshot.entry.file-limit": () => snapshotCase((context) => { context.args.options.maxFiles = 0; }),
|
|
600
|
+
"snapshot.entry.byte-limit": () => snapshotCase((context) => { context.args.options.maxTotalBytes = 0; }),
|
|
601
|
+
"snapshot.root.walk": () => snapshotCase((context) => { fs.symlinkSync(path.join(context.args.root, "a.jsonl"), path.join(context.args.root, "link.jsonl"), "file"); }),
|
|
602
|
+
"snapshot.diff.before-schema": () => snapshotDiffCase((pair) => { pair.before.schema = "WRONG"; }),
|
|
603
|
+
"snapshot.diff.after-schema": () => snapshotDiffCase((pair) => { pair.after.schema = "WRONG"; }),
|
|
604
|
+
"snapshot.diff.root": () => snapshotDiffCase((pair) => { pair.after.root = "/other"; }),
|
|
605
|
+
"snapshot.diff.removed": () => snapshotDiffCase((pair) => { pair.after.entries = []; }),
|
|
606
|
+
"snapshot.diff.dev": () => snapshotDiffCase((pair) => { pair.after.entries[0].dev += 1; }),
|
|
607
|
+
"snapshot.diff.ino": () => snapshotDiffCase((pair) => { pair.after.entries[0].ino += 1; }),
|
|
608
|
+
"snapshot.diff.truncated": () => snapshotDiffCase((pair) => { pair.after.entries[0].size -= 1; }),
|
|
609
|
+
"snapshot.stable.changed": () => snapshotDiffCase((pair) => { pair.after.entries[0].size += 1; }, true),
|
|
610
|
+
"snapshot.stable.error": () => snapshotDiffCase((pair) => { pair.before.schema = "WRONG"; }, true),
|
|
611
|
+
"prompt.unknown": () => promptCase((args) => { args.caseName = "UNKNOWN"; }),
|
|
612
|
+
"prompt.nonce": () => promptCase((args) => { args.specimen.cases[args.caseName].nonce = "g".repeat(32); }),
|
|
613
|
+
"prompt.mail-row": () => promptCase((args) => { args.caseName = "N0a-K"; args.specimen.cases[args.caseName].mailRowId = 1.5; }),
|
|
614
|
+
"prompt.digest": () => promptCase((args) => { args.specimen.cases[args.caseName].nonce = "g".repeat(32); }, true),
|
|
615
|
+
"cli.usage.unknown": () => cliCase((context) => { context.argv = ["unknown", "--root", context.root]; }),
|
|
616
|
+
"cli.args.dangling": () => cliCase((context) => { context.argv = ["snapshot", "--root", context.root, "--dangling"]; }),
|
|
617
|
+
"cli.args.key": () => cliCase((context) => { context.argv = ["snapshot", "xxroot", context.root]; }),
|
|
618
|
+
"cli.args.missing-specimen": () => cliCase((context) => { context.argv.splice(3, 2); }),
|
|
619
|
+
"cli.args.missing-evidence": () => cliCase((context) => { context.argv.splice(5, 2); }),
|
|
620
|
+
"cli.args.missing-inputs": () => cliCase((context) => {
|
|
621
|
+
context.argv = ["oracle", "--root", context.root, "--now-ms", String(NOW)];
|
|
622
|
+
}),
|
|
623
|
+
"cli.root.missing": () => cliCase((context) => { context.argv = ["snapshot"]; }),
|
|
624
|
+
"cli.root.relative": () => cliCase((context) => { context.argv = ["snapshot", "--root", "."]; }),
|
|
625
|
+
"cli.snapshot.symlink": () => cliCase((context) => {
|
|
626
|
+
fs.symlinkSync(path.join(context.root, "specimen.json"), path.join(context.root, "link.json"), "file");
|
|
627
|
+
context.argv = ["snapshot", "--root", context.root];
|
|
628
|
+
}),
|
|
629
|
+
"cli.specimen.read": () => cliCase((context) => { context.argv[4] = path.join(context.root, "..", "outside.json"); }),
|
|
630
|
+
"cli.evidence.read": () => cliCase((context) => { context.argv[6] = path.join(context.root, "..", "outside.json"); }),
|
|
631
|
+
"cli.specimen.parse": () => cliCase((context) => {
|
|
632
|
+
fs.writeFileSync(path.join(context.root, "specimen.json"), "{");
|
|
633
|
+
}),
|
|
634
|
+
"cli.evidence.parse": () => cliCase((context) => {
|
|
635
|
+
fs.writeFileSync(path.join(context.root, "evidence.json"), "{");
|
|
636
|
+
}),
|
|
637
|
+
"cli.oracle.red": () => cliCase((context) => {
|
|
638
|
+
context.evidence.probeId = "2".repeat(32);
|
|
639
|
+
fs.writeFileSync(path.join(context.root, "evidence.json"), JSON.stringify(context.evidence));
|
|
640
|
+
}),
|
|
641
|
+
"specimen.build.invalid": () => specimenCase("build"),
|
|
642
|
+
"specimen.build.prompt-nonce": () => specimenCase("build-prompt-nonce"),
|
|
643
|
+
"specimen.mail.nonce": () => specimenCase("mail"),
|
|
644
|
+
"specimen.mail.row": () => specimenCase("cleanup"),
|
|
645
|
+
"oracle.specimen.keys": () => validationNoRebuildCase((specimen) => { specimen.extra = true; }),
|
|
646
|
+
"oracle.specimen.schema": () => validationNoRebuildCase((specimen) => { specimen.schema = "WRONG"; }),
|
|
647
|
+
"oracle.specimen.probe-format": () => validationNoRebuildCase((specimen) => { specimen.probeId = "g".repeat(32); }),
|
|
648
|
+
"oracle.specimen.provenance-object": () => validationNoRebuildCase((specimen) => { specimen.protocol = JSON.stringify(specimen.protocol); }),
|
|
649
|
+
"oracle.specimen.provenance-extra": () => validationNoRebuildCase((specimen) => { specimen.protocol.extra = true; }),
|
|
650
|
+
"oracle.specimen.commit-format": () => validationNoRebuildCase((specimen) => { specimen.protocol.commit = new String(specimen.protocol.commit); }),
|
|
651
|
+
"oracle.specimen.digest-format": () => validationNoRebuildCase((specimen) => { specimen.protocol.digest = new String(specimen.protocol.digest); }),
|
|
652
|
+
"oracle.specimen.protocol-commit": () => validationCase((specimen) => { specimen.protocol.commit = "f".repeat(40); }),
|
|
653
|
+
"oracle.specimen.protocol-digest": () => validationCase((specimen) => { specimen.protocol.digest = "f".repeat(64); }),
|
|
654
|
+
"oracle.specimen.harness-digest": () => validationCase((specimen) => { specimen.harness.digest = "f".repeat(64); }),
|
|
655
|
+
"oracle.specimen.paths-object": () => validationNoRebuildCase((specimen) => { specimen.paths = JSON.stringify(specimen.paths); }),
|
|
656
|
+
"oracle.specimen.paths-extra": () => validationNoRebuildCase((specimen) => { specimen.paths.extra = true; }),
|
|
657
|
+
"oracle.specimen.path-type": () => validationNoRebuildCase((specimen) => {
|
|
658
|
+
const original = specimen.paths.ordinaryAuth;
|
|
659
|
+
specimen.paths.ordinaryAuth = { toString: () => original };
|
|
660
|
+
}),
|
|
661
|
+
"oracle.specimen.path-relative": () => validationNoRebuildCase((specimen) => { specimen.paths.ordinaryAuth = "relative-auth"; }),
|
|
662
|
+
"oracle.specimen.project-equal-parent": () => validationCase((specimen) => {
|
|
663
|
+
specimen.paths.project = specimen.paths.specimenParent;
|
|
664
|
+
specimen.target.path = specimen.paths.project;
|
|
665
|
+
Object.assign(specimen.environment, { cwd: specimen.paths.project, project: specimen.paths.project, worktree: specimen.paths.project, workspace_roots: [specimen.paths.project] });
|
|
666
|
+
specimen.environment.permission_profile.file_system.writable_roots = [specimen.paths.project];
|
|
667
|
+
specimen.canaries["cwd-create"].path = `${specimen.paths.project}/cwd`;
|
|
668
|
+
}),
|
|
669
|
+
"oracle.specimen.project-outside-parent": () => validationCase((specimen) => {
|
|
670
|
+
specimen.paths.project = "/Users/jason/Outside/project";
|
|
671
|
+
specimen.target.path = specimen.paths.project;
|
|
672
|
+
Object.assign(specimen.environment, { cwd: specimen.paths.project, project: specimen.paths.project, worktree: specimen.paths.project, workspace_roots: [specimen.paths.project] });
|
|
673
|
+
specimen.environment.permission_profile.file_system.writable_roots = [specimen.paths.project];
|
|
674
|
+
specimen.canaries["cwd-create"].path = `${specimen.paths.project}/cwd`;
|
|
675
|
+
}),
|
|
676
|
+
"oracle.specimen.outside-inside-project": () => validationCase((specimen) => {
|
|
677
|
+
specimen.paths.control = `${specimen.paths.project}/control`;
|
|
678
|
+
for (const name of ["control-read", "control-chmod", "control-create"]) specimen.canaries[name].path = `${specimen.paths.control}/${name}`;
|
|
679
|
+
}),
|
|
680
|
+
"oracle.specimen.outside-contains-project": () => validationCase((specimen) => {
|
|
681
|
+
specimen.paths.control = specimen.paths.specimenParent;
|
|
682
|
+
for (const name of ["control-read", "control-chmod", "control-create"]) specimen.canaries[name].path = `${specimen.paths.control}/${name}`;
|
|
683
|
+
}),
|
|
684
|
+
"oracle.specimen.slash-tmp": () => validationCase((specimen) => {
|
|
685
|
+
specimen.paths.slashTmp = "/var/tmp";
|
|
686
|
+
specimen.canaries["slash-tmp-create"].path = "/var/tmp/canary";
|
|
687
|
+
}),
|
|
688
|
+
"oracle.specimen.target-object": () => validationNoRebuildCase((specimen) => { specimen.target = JSON.stringify(specimen.target); }),
|
|
689
|
+
"oracle.specimen.target-extra": () => validationNoRebuildCase((specimen) => { specimen.target.extra = true; }),
|
|
690
|
+
"oracle.specimen.target-path": () => validationCase((specimen) => { specimen.target.path = `${specimen.paths.project}/wrong`; }),
|
|
691
|
+
"oracle.specimen.target-device": () => validationNoRebuildCase((specimen) => { specimen.target.device = new Number(specimen.target.device); }),
|
|
692
|
+
"oracle.specimen.target-inode": () => validationNoRebuildCase((specimen) => { specimen.target.inode = new Number(specimen.target.inode); }),
|
|
693
|
+
"oracle.specimen.target-commit-format": () => validationNoRebuildCase((specimen) => { specimen.target.gitHead = new String(specimen.target.gitHead); }),
|
|
694
|
+
"oracle.specimen.target-head": () => validationCase((specimen) => { specimen.target.gitHead = "f".repeat(40); }),
|
|
695
|
+
"oracle.specimen.permission-object": () => validationNoRebuildCase((specimen) => { specimen.permission = JSON.stringify(specimen.permission); }),
|
|
696
|
+
"oracle.specimen.permission-extra": () => validationNoRebuildCase((specimen) => { specimen.permission.extra = true; }),
|
|
697
|
+
"oracle.specimen.permission-profile": () => validationCase((specimen) => {
|
|
698
|
+
specimen.permission.profile = "wrong";
|
|
699
|
+
specimen.environment.sandbox_policy.name = "wrong";
|
|
700
|
+
specimen.environment.permission_profile.name = "wrong";
|
|
701
|
+
}),
|
|
702
|
+
"oracle.specimen.config-type": () => validationNoRebuildCase((specimen) => { specimen.permission.configUtf8 = new String(specimen.permission.configUtf8); }),
|
|
703
|
+
"oracle.specimen.config-digest-type": () => validationNoRebuildCase((specimen) => { specimen.permission.configDigest = new String(specimen.permission.configDigest); }),
|
|
704
|
+
"oracle.specimen.config-reviewed": () => validationCase((specimen, { sha256 }) => {
|
|
705
|
+
specimen.permission.configUtf8 = "changed";
|
|
706
|
+
specimen.permission.configDigest = sha256(Buffer.from("changed"));
|
|
707
|
+
}),
|
|
708
|
+
"oracle.specimen.config-bytes": () => validationCase((specimen) => { specimen.permission.configUtf8 = "changed"; }),
|
|
709
|
+
"oracle.specimen.extra-root": () => validationCase((specimen) => { specimen.permission.addedWorkspaceRoots = ["/tmp"]; }),
|
|
710
|
+
"oracle.specimen.filesystem-extra": () => validationNoRebuildCase((specimen) => { specimen.permission.filesystem.extra = true; }),
|
|
711
|
+
"oracle.specimen.tmpdir": () => validationCase((specimen) => { specimen.permission.filesystem[":tmpdir"] = "write"; }),
|
|
712
|
+
"oracle.specimen.slash-tmp-deny": () => validationCase((specimen) => { specimen.permission.filesystem[":slash_tmp"] = "write"; }),
|
|
713
|
+
"oracle.specimen.legacy": () => validationCase((specimen) => { specimen.permission.legacySandboxSettingsPresent = true; }),
|
|
714
|
+
"oracle.specimen.environment-call": () => validationCase((specimen) => { specimen.environment.approval_policy = "ask"; }),
|
|
715
|
+
"oracle.specimen.canaries-object": () => validationNoRebuildCase((specimen) => { specimen.canaries = JSON.stringify(specimen.canaries); }),
|
|
716
|
+
"oracle.specimen.canary-set": () => validationCase((specimen) => { specimen.canaries.extra = { ...specimen.canaries["control-read"] }; }),
|
|
717
|
+
"oracle.specimen.canary-locations": () => validationCase((specimen) => { specimen.canaries["control-read"].path = `${specimen.paths.project}/wrong`; }),
|
|
718
|
+
"oracle.specimen.cases-object": () => validationNoRebuildCase((specimen) => { specimen.cases = JSON.stringify(specimen.cases); }),
|
|
719
|
+
"oracle.specimen.case-set": () => validationCase((specimen) => { specimen.cases.extra = { ...specimen.cases["N0a-M"] }; }),
|
|
720
|
+
"oracle.specimen.case-object": () => validationNoRebuildCase((specimen) => { specimen.cases["N0a-M"] = JSON.stringify(specimen.cases["N0a-M"]); }),
|
|
721
|
+
"oracle.specimen.case-extra": () => validationNoRebuildCase((specimen) => { specimen.cases["N0a-M"].extra = true; }),
|
|
722
|
+
"oracle.specimen.case-nonce-format": () => validationNoRebuildCase((specimen) => { specimen.cases["N0a-M"].nonce = new String(specimen.cases["N0a-M"].nonce); }),
|
|
723
|
+
"oracle.specimen.case-nonce-reuse": () => validationCase((specimen) => { specimen.cases["N0a-W"].nonce = specimen.cases["N0a-M"].nonce; }),
|
|
724
|
+
"oracle.specimen.case-policy": () => validationCase((specimen) => { specimen.cases["N0a-M"].scheduled = true; }),
|
|
725
|
+
"oracle.specimen.case-boundary-format": () => validationCase((specimen) => { specimen.cases["N0a-M"].intendedBoundary = "invalid"; }),
|
|
726
|
+
"oracle.specimen.case-boundary-order": () => validationCase((specimen) => { specimen.cases["N0a-W"].intendedBoundary = specimen.cases["N0a-M"].intendedBoundary; }),
|
|
727
|
+
"oracle.specimen.expected-object": () => validationNoRebuildCase((specimen) => { specimen.cases["N0a-M"].expected = JSON.stringify(specimen.cases["N0a-M"].expected); }),
|
|
728
|
+
"oracle.specimen.expected-extra": () => validationNoRebuildCase((specimen) => { specimen.cases["N0a-M"].expected.extra = true; }),
|
|
729
|
+
"oracle.specimen.chat-type": () => validationNoRebuildCase((specimen) => { specimen.cases["N0a-M"].expected.chatSessionId = new String(specimen.cases["N0a-M"].expected.chatSessionId); }),
|
|
730
|
+
"oracle.specimen.expected-key-type": () => validationNoRebuildCase((specimen) => { specimen.cases["N0a-W"].expected.taskId = new String(specimen.cases["N0a-W"].expected.taskId); }),
|
|
731
|
+
"oracle.specimen.expected-reuse": () => validationCase((specimen) => { specimen.cases["N0a-B"].expected.taskId = specimen.cases["N0a-W"].expected.taskId; }),
|
|
732
|
+
"oracle.specimen.expected-nonbinding": () => validationCase((specimen) => { specimen.cases["N0a-M"].expected.taskId = "unexpected"; }),
|
|
733
|
+
"oracle.specimen.case-mail-type": () => validationNoRebuildCase((specimen) => { specimen.cases["N0a-K"].mailRowId = new Number(77); }),
|
|
734
|
+
"oracle.specimen.case-mail-other": () => validationCase((specimen) => { specimen.cases["N0a-M"].mailRowId = 77; }),
|
|
735
|
+
"oracle.specimen.chat-targets": () => validationCase((specimen) => { specimen.cases["N0a-W"].expected.chatSessionId = "other-session"; }),
|
|
736
|
+
"oracle.specimen.prompts-object": () => validationNoRebuildCase((specimen) => { specimen.prompts = JSON.stringify(specimen.prompts); }),
|
|
737
|
+
"oracle.specimen.prompt-set": () => validationNoRebuildCase((specimen) => { specimen.prompts.extra = { ...specimen.prompts["N0a-M"] }; }),
|
|
738
|
+
"oracle.specimen.prompt-object": () => validationNoRebuildCase((specimen) => { specimen.prompts["N0a-M"] = JSON.stringify(specimen.prompts["N0a-M"]); }),
|
|
739
|
+
"oracle.specimen.prompt-extra": () => validationNoRebuildCase((specimen) => { specimen.prompts["N0a-M"].extra = true; }),
|
|
740
|
+
"oracle.specimen.prompt-type": () => validationNoRebuildCase((specimen) => { specimen.prompts["N0a-M"].utf8 = new String(specimen.prompts["N0a-M"].utf8); }),
|
|
741
|
+
"oracle.specimen.prompt-sha-type": () => validationNoRebuildCase((specimen) => { specimen.prompts["N0a-M"].sha256 = new String(specimen.prompts["N0a-M"].sha256); }),
|
|
742
|
+
"oracle.specimen.prompt-digest": () => validationNoRebuildCase((specimen) => { specimen.prompts["N0a-M"].sha256 = "f".repeat(64); }),
|
|
743
|
+
"oracle.specimen.prompt-bytes": () => validationNoRebuildCase((specimen) => {
|
|
744
|
+
specimen.prompts["N0a-M"].utf8 = "changed";
|
|
745
|
+
specimen.prompts["N0a-M"].sha256 = "d67e2e944994496c8d8ec76eed0cf9f09679448d584b532bebf941852a37f5ed";
|
|
746
|
+
}),
|
|
747
|
+
"oracle.specimen.clock-object": () => validationNoRebuildCase((specimen) => { specimen.clock = JSON.stringify(specimen.clock); }),
|
|
748
|
+
"oracle.specimen.clock-extra": () => validationNoRebuildCase((specimen) => { specimen.clock.extra = true; }),
|
|
749
|
+
"oracle.specimen.clock-time": () => validationNoRebuildCase((specimen) => { specimen.clock.intendedMinuteBoundary = "invalid"; }),
|
|
750
|
+
"oracle.specimen.clock-skew": () => validationNoRebuildCase((specimen) => { specimen.clock.maxSkewSeconds = 16; }),
|
|
751
|
+
"oracle.specimen.clock-heartbeat": () => validationNoRebuildCase((specimen) => { specimen.clock.maxHeartbeatAgeSeconds = 136; }),
|
|
752
|
+
"oracle.specimen.rollout-call": () => validationNoRebuildCase((specimen) => { specimen.rollout.root = "relative"; }),
|
|
753
|
+
"oracle.specimen.versions-call": () => validationNoRebuildCase((specimen) => { specimen.versions.codexCli = 7; }),
|
|
754
|
+
"oracle.specimen.created-at": () => validationNoRebuildCase((specimen) => { specimen.createdAt = "invalid"; }),
|
|
755
|
+
"oracle.rollout.object": () => validationNoRebuildCase((specimen) => { specimen.rollout = JSON.stringify(specimen.rollout); }),
|
|
756
|
+
"oracle.rollout.extra": () => validationNoRebuildCase((specimen) => { specimen.rollout.extra = true; }),
|
|
757
|
+
"oracle.rollout.root-type": () => validationNoRebuildCase((specimen) => { specimen.rollout.root = new String(specimen.rollout.root); }),
|
|
758
|
+
"oracle.rollout.root-relative": () => validationNoRebuildCase((specimen) => {
|
|
759
|
+
specimen.rollout.root = "relative";
|
|
760
|
+
specimen.rollout.preActionSnapshot.root = "relative";
|
|
761
|
+
}),
|
|
762
|
+
"oracle.rollout.snapshot-object": () => validationNoRebuildCase((specimen) => { specimen.rollout.preActionSnapshot = JSON.stringify(specimen.rollout.preActionSnapshot); }),
|
|
763
|
+
"oracle.rollout.snapshot-extra": () => validationNoRebuildCase((specimen) => { specimen.rollout.preActionSnapshot.extra = true; }),
|
|
764
|
+
"oracle.rollout.snapshot-schema": () => validationNoRebuildCase((specimen) => { specimen.rollout.preActionSnapshot.schema = "WRONG"; }),
|
|
765
|
+
"oracle.rollout.snapshot-root": () => validationNoRebuildCase((specimen) => { specimen.rollout.preActionSnapshot.root = "/wrong"; }),
|
|
766
|
+
"oracle.rollout.total-type": () => validationNoRebuildCase((specimen) => { specimen.rollout.preActionSnapshot.totalBytes = new Number(0); }),
|
|
767
|
+
"oracle.rollout.entries-arraylike": () => validationNoRebuildCase((specimen) => {
|
|
768
|
+
specimen.rollout.preActionSnapshot.entries = { length: 0, entries: Array.prototype.entries };
|
|
769
|
+
}),
|
|
770
|
+
"oracle.rollout.entry-object": () => validationNoRebuildCase((specimen) => {
|
|
771
|
+
const entry = addRolloutEntry(specimen);
|
|
772
|
+
specimen.rollout.preActionSnapshot.entries[0] = JSON.stringify(entry);
|
|
773
|
+
}),
|
|
774
|
+
"oracle.rollout.entry-extra": () => validationNoRebuildCase((specimen) => { addRolloutEntry(specimen).extra = true; }),
|
|
775
|
+
"oracle.rollout.entry-path-type": () => validationNoRebuildCase((specimen) => { addRolloutEntry(specimen).path = new String("session.jsonl"); }),
|
|
776
|
+
"oracle.rollout.entry-path-absolute": () => validationNoRebuildCase((specimen) => { addRolloutEntry(specimen).path = "/session.jsonl"; }),
|
|
777
|
+
"oracle.rollout.entry-path-parent": () => validationNoRebuildCase((specimen) => { addRolloutEntry(specimen).path = ".."; }),
|
|
778
|
+
"oracle.rollout.entry-path-prefix": () => validationNoRebuildCase((specimen) => { addRolloutEntry(specimen).path = `..${path.sep}session.jsonl`; }),
|
|
779
|
+
"oracle.rollout.entry-duplicate": () => validationNoRebuildCase((specimen) => {
|
|
780
|
+
const entry = addRolloutEntry(specimen);
|
|
781
|
+
specimen.rollout.preActionSnapshot.entries.push({ ...entry });
|
|
782
|
+
specimen.rollout.preActionSnapshot.totalBytes *= 2;
|
|
783
|
+
}),
|
|
784
|
+
"oracle.rollout.entry-dev": () => validationNoRebuildCase((specimen) => { addRolloutEntry(specimen).dev = new Number(1); }),
|
|
785
|
+
"oracle.rollout.entry-ino": () => validationNoRebuildCase((specimen) => { addRolloutEntry(specimen).ino = new Number(2); }),
|
|
786
|
+
"oracle.rollout.entry-size": () => validationNoRebuildCase((specimen) => { addRolloutEntry(specimen).size = new Number(10); }),
|
|
787
|
+
"oracle.rollout.entry-mtime-finite": () => validationNoRebuildCase((specimen) => { addRolloutEntry(specimen).mtimeMs = Number.NaN; }),
|
|
788
|
+
"oracle.rollout.entry-mtime-negative": () => validationNoRebuildCase((specimen) => { addRolloutEntry(specimen).mtimeMs = -1; }),
|
|
789
|
+
"oracle.rollout.entry-record-type": () => validationNoRebuildCase((specimen) => { addRolloutEntry(specimen).firstRecordType = new String("session_meta"); }),
|
|
790
|
+
"oracle.rollout.total-mismatch": () => validationNoRebuildCase((specimen) => { addRolloutEntry(specimen); specimen.rollout.preActionSnapshot.totalBytes = 11; }),
|
|
791
|
+
"oracle.rollout.parser-object": () => validationNoRebuildCase((specimen) => { specimen.rollout.parser = JSON.stringify(specimen.rollout.parser); }),
|
|
792
|
+
"oracle.rollout.parser-extra": () => validationNoRebuildCase((specimen) => { specimen.rollout.parser.extra = true; }),
|
|
793
|
+
"oracle.rollout.parser-version": () => validationNoRebuildCase((specimen) => { specimen.rollout.parser.version = "WRONG"; }),
|
|
794
|
+
"oracle.rollout.parser-digest-type": () => validationNoRebuildCase((specimen) => { specimen.rollout.parser.digest = new String(specimen.rollout.parser.digest); }),
|
|
795
|
+
"oracle.rollout.parser-digest": () => validationNoRebuildCase((specimen) => { specimen.rollout.parser.digest = "f".repeat(64); }),
|
|
796
|
+
"oracle.versions.object": () => validationNoRebuildCase((specimen) => { specimen.versions = JSON.stringify(specimen.versions); }),
|
|
797
|
+
"oracle.versions.extra": () => validationNoRebuildCase((specimen) => { specimen.versions.extra = true; }),
|
|
798
|
+
"oracle.versions.string": () => validationNoRebuildCase((specimen) => { specimen.versions.codexCli = new String(specimen.versions.codexCli); }),
|
|
799
|
+
"oracle.versions.digest": () => validationNoRebuildCase((specimen) => { specimen.versions.codexBinaryDigest = new String(specimen.versions.codexBinaryDigest); }),
|
|
800
|
+
"oracle.canary.extra": () => validationNoRebuildCase((specimen) => { specimen.canaries["control-read"].extra = true; }),
|
|
801
|
+
"oracle.canary.path-type": () => validationNoRebuildCase((specimen) => {
|
|
802
|
+
specimen.canaries["control-read"].path = new String(specimen.canaries["control-read"].path);
|
|
803
|
+
}),
|
|
804
|
+
"oracle.canary.path-relative": () => validationNoRebuildCase((specimen) => {
|
|
805
|
+
specimen.canaries["control-read"].path = "relative-control-read";
|
|
806
|
+
}),
|
|
807
|
+
"oracle.canary.value-null": () => validationNoRebuildCase((specimen) => {
|
|
808
|
+
specimen.canaries["control-read"] = null;
|
|
809
|
+
}),
|
|
810
|
+
"oracle.canary.value-primitive": () => validationNoRebuildCase((specimen) => {
|
|
811
|
+
specimen.canaries["control-read"] = "invalid-canary";
|
|
812
|
+
}),
|
|
813
|
+
"oracle.canary.nonce-type": () => validationNoRebuildCase((specimen) => {
|
|
814
|
+
specimen.canaries["control-read"].nonce = new String(specimen.canaries["control-read"].nonce);
|
|
815
|
+
}),
|
|
816
|
+
"oracle.canary.nonce-format": () => validationCase((specimen) => { specimen.canaries["control-read"].nonce = "g".repeat(32); }),
|
|
817
|
+
"oracle.environment.object": () => validationNoRebuildCase((specimen) => { specimen.environment = JSON.stringify(specimen.environment); }),
|
|
818
|
+
"oracle.environment.extra": () => validationNoRebuildCase((specimen) => { specimen.environment.extra = true; }),
|
|
819
|
+
"oracle.environment.cwd": () => validationCase((specimen) => { specimen.environment.cwd = "/wrong"; }),
|
|
820
|
+
"oracle.environment.project": () => validationCase((specimen) => { specimen.environment.project = "/wrong"; }),
|
|
821
|
+
"oracle.environment.worktree": () => validationCase((specimen) => { specimen.environment.worktree = "/wrong"; }),
|
|
822
|
+
"oracle.environment.roots": () => validationCase((specimen) => { specimen.environment.workspace_roots = ["/wrong"]; }),
|
|
823
|
+
"oracle.environment.model": () => validationNoRebuildCase((specimen) => { specimen.environment.model = new String(specimen.environment.model); }),
|
|
824
|
+
"oracle.environment.reasoning": () => validationNoRebuildCase((specimen) => { specimen.environment.reasoning = new String(specimen.environment.reasoning); }),
|
|
825
|
+
"oracle.environment.approval": () => validationCase((specimen) => { specimen.environment.approval_policy = "ask"; }),
|
|
826
|
+
"oracle.environment.sandbox-extra": () => validationNoRebuildCase((specimen) => { specimen.environment.sandbox_policy.extra = true; }),
|
|
827
|
+
"oracle.environment.sandbox-type": () => validationCase((specimen) => { specimen.environment.sandbox_policy.type = "wrong"; }),
|
|
828
|
+
"oracle.environment.sandbox-name": () => validationCase((specimen) => { specimen.environment.sandbox_policy.name = "wrong"; }),
|
|
829
|
+
"oracle.environment.profile-extra": () => validationNoRebuildCase((specimen) => { specimen.environment.permission_profile.extra = true; }),
|
|
830
|
+
"oracle.environment.filesystem-extra": () => validationNoRebuildCase((specimen) => { specimen.environment.permission_profile.file_system.extra = true; }),
|
|
831
|
+
"oracle.environment.profile-name": () => validationCase((specimen) => { specimen.environment.permission_profile.name = "wrong"; }),
|
|
832
|
+
"oracle.environment.writable": () => validationCase((specimen) => { specimen.environment.permission_profile.file_system.writable_roots = ["/wrong"]; }),
|
|
833
|
+
"oracle.environment.denied": () => validationCase((specimen) => { specimen.environment.permission_profile.file_system.denied = []; }),
|
|
834
|
+
"oracle.environment.network-extra": () => validationNoRebuildCase((specimen) => { specimen.environment.network.extra = true; }),
|
|
835
|
+
"oracle.environment.network-default": () => validationCase((specimen) => { specimen.environment.network.default = "allow"; }),
|
|
836
|
+
"oracle.environment.network-exceptions": () => validationCase((specimen) => { specimen.environment.network.exceptions = {}; }),
|
|
837
|
+
"oracle.permission.specimen": () => permissionCase(({ specimen }) => { specimen.target.clean = false; }),
|
|
838
|
+
"oracle.permission.object": () => permissionCase((context) => { context.evidence = JSON.stringify(context.evidence); }),
|
|
839
|
+
"oracle.permission.extra": () => permissionCase(({ evidence }) => { evidence.extra = true; }),
|
|
840
|
+
"oracle.permission.profile": () => permissionCase(({ evidence }) => { evidence.effectiveProfile = "wrong"; }),
|
|
841
|
+
"oracle.permission.roots": () => permissionCase(({ evidence }) => { evidence.writableRoots = ["/wrong"]; }),
|
|
842
|
+
"oracle.permission.legacy": () => permissionCase(({ evidence }) => { evidence.legacySandboxSettingsPresent = true; }),
|
|
843
|
+
"oracle.permission.results-object": () => permissionCase(({ evidence }) => { evidence.canaryResults = JSON.stringify(evidence.canaryResults); }),
|
|
844
|
+
"oracle.permission.result-set": () => permissionCase(({ evidence }) => { evidence.canaryResults.extra = { path: "/extra", succeeded: false }; }),
|
|
845
|
+
"oracle.permission.result-missing": () => permissionCase(({ evidence }) => { evidence.canaryResults["control-read"] = undefined; }),
|
|
846
|
+
"oracle.permission.result-object": () => permissionCase(({ evidence }) => { evidence.canaryResults["control-read"] = JSON.stringify(evidence.canaryResults["control-read"]); }),
|
|
847
|
+
"oracle.permission.result-extra": () => permissionCase(({ evidence }) => { evidence.canaryResults["control-read"].extra = true; }),
|
|
848
|
+
"oracle.permission.result-verdict": () => permissionCase(({ evidence }) => { evidence.canaryResults["control-read"].succeeded = true; }),
|
|
849
|
+
"oracle.permission.result-path": () => permissionCase(({ evidence }) => { evidence.canaryResults["control-read"].path = "/wrong"; }),
|
|
850
|
+
"oracle.case.object": () => oracleCase(({ evidence }) => { evidence.cases = JSON.stringify(evidence.cases); }),
|
|
851
|
+
"oracle.case.set": () => oracleCase(({ evidence }) => { evidence.cases.extra = structuredClone(evidence.cases["N0a-M"]); }),
|
|
852
|
+
"oracle.case.result-extra": () => oracleCase(({ evidence }) => { evidence.cases["N0a-M"].extra = true; }),
|
|
853
|
+
"oracle.case.nonce": () => oracleCase(({ evidence }) => { evidence.cases["N0a-M"].nonce = "f".repeat(32); }),
|
|
854
|
+
"oracle.case.prompt": () => oracleCase(({ evidence }) => { evidence.cases["N0a-M"].promptDigest = "f".repeat(64); }),
|
|
855
|
+
"oracle.case.expected": () => oracleCase(({ evidence }) => { evidence.cases["N0a-M"].expected.chatSessionId = "wrong"; }),
|
|
856
|
+
"oracle.case.status": () => oracleCase(({ evidence }) => { evidence.cases["N0a-M"].status = "INVALID"; }),
|
|
857
|
+
"oracle.case.status-null": () => oracleCase(({ evidence }) => { evidence.cases["N0a-M"].status = null; }),
|
|
858
|
+
"oracle.case.time-invalid": () => oracleCase(({ evidence }) => { evidence.cases["N0a-M"].terminalAt = "invalid"; }),
|
|
859
|
+
"oracle.case.time-order": () => oracleCase(({ evidence }) => {
|
|
860
|
+
evidence.cases["N0a-M"].terminalAt = evidence.cases["N0a-W"].terminalAt;
|
|
861
|
+
}),
|
|
862
|
+
"oracle.case.time-boundary": () => oracleCase(({ evidence }) => { evidence.cases["N0a-M"].terminalAt = "2026-07-30T22:09:59.000Z"; }),
|
|
863
|
+
"oracle.case.time-future": () => oracleCase(({ evidence }) => { evidence.cases["N0b-F"].terminalAt = new Date(NOW + 1).toISOString(); }),
|
|
864
|
+
"oracle.case.run-binding-type": () => oracleCase(({ evidence }) => { evidence.cases["N0a-W"].runBindingVerified = "invalid"; }),
|
|
865
|
+
"oracle.case.run-binding": () => oracleCase(({ evidence }) => { evidence.cases["N0a-W"].runBindingVerified = false; }),
|
|
866
|
+
"oracle.case.run-binding-unexpected": () => oracleCase(({ evidence }) => { evidence.cases["N0a-M"].runBindingVerified = false; }),
|
|
867
|
+
"oracle.case.receipt-binding-type": () => oracleCase(({ evidence }) => { evidence.cases["N0a-W"].receiptVerified = "invalid"; }),
|
|
868
|
+
"oracle.case.receipt-binding": () => oracleCase(({ evidence }) => { evidence.cases["N0a-W"].receiptVerified = false; }),
|
|
869
|
+
"oracle.case.receipt-binding-unexpected": () => oracleCase(({ evidence }) => { evidence.cases["N0a-M"].receiptVerified = false; }),
|
|
870
|
+
"oracle.case.red": () => oracleCase(({ evidence }) => { evidence.cases["N0a-M"].status = "RED"; }),
|
|
871
|
+
"oracle.case.blocked": () => oracleCase(({ evidence }) => { evidence.cases["N0a-M"].status = "BLOCKED"; }),
|
|
872
|
+
"oracle.evidence.extra": () => oracleCase(({ evidence }) => { evidence.extra = true; }),
|
|
873
|
+
"oracle.evidence.schema": () => oracleCase(({ evidence }) => { evidence.schema = "WRONG"; }),
|
|
874
|
+
"oracle.evidence.probe": () => oracleCase(({ evidence }) => { evidence.probeId = "f".repeat(32); }),
|
|
875
|
+
"oracle.evidence.protocol": () => oracleCase(({ evidence }) => { evidence.protocolDigest = "f".repeat(64); }),
|
|
876
|
+
"oracle.evidence.harness": () => oracleCase(({ evidence }) => { evidence.harnessDigest = "f".repeat(64); }),
|
|
877
|
+
"oracle.evidence.journal": () => oracleCase(({ evidence }) => { evidence.journalReachable = false; }),
|
|
878
|
+
"oracle.evidence.signer-armed": () => oracleCase(({ evidence }) => { evidence.signerArmed = false; }),
|
|
879
|
+
"oracle.evidence.signer-binding": () => oracleCase(({ evidence }) => { evidence.signerBindingValid = false; }),
|
|
880
|
+
"oracle.evidence.scheduled": () => oracleCase(({ evidence }) => { evidence.scheduledState = "paused"; }),
|
|
881
|
+
"oracle.evidence.now-finite": () => oracleCase((context) => { context.nowMs = Number.NaN; }),
|
|
882
|
+
"oracle.evidence.server-finite": () => oracleCase(({ evidence }) => { evidence.serverNowMs = Number.NaN; }),
|
|
883
|
+
"oracle.evidence.clock-skew": () => oracleCase(({ evidence }) => {
|
|
884
|
+
evidence.serverNowMs = NOW + 16_001;
|
|
885
|
+
evidence.meta.utcTime = new Date(evidence.serverNowMs).toISOString();
|
|
886
|
+
evidence.heartbeatServerMs = evidence.serverNowMs - 30_000;
|
|
887
|
+
}),
|
|
888
|
+
"oracle.evidence.utc-time": () => oracleCase(({ evidence }) => { evidence.meta.utcTime = new Date(NOW + 16_001).toISOString(); }),
|
|
889
|
+
"oracle.evidence.host-time": () => oracleCase(({ evidence }) => { evidence.meta.hostTime = new Date(NOW + 16_001).toISOString(); }),
|
|
890
|
+
"oracle.evidence.heartbeat-finite": () => oracleCase(({ evidence }) => { evidence.heartbeatServerMs = Number.NaN; }),
|
|
891
|
+
"oracle.evidence.heartbeat-stale": () => oracleCase(({ evidence }) => { evidence.heartbeatServerMs = evidence.serverNowMs - 135_001; }),
|
|
892
|
+
"oracle.evidence.heartbeat-future": () => oracleCase(({ evidence }) => { evidence.heartbeatServerMs = evidence.serverNowMs + 1; }),
|
|
893
|
+
"oracle.evidence.permission": () => oracleCase(({ evidence }) => { evidence.permission.effectiveProfile = "wrong"; }),
|
|
894
|
+
"oracle.evidence.integrity-call": () => oracleCase(({ evidence }) => { evidence.integrity.controlPreexisting.postDigest = "f".repeat(64); }),
|
|
895
|
+
"oracle.pointer.extra": () => oracleCase(({ evidence }) => { evidence.pointer.extra = true; }),
|
|
896
|
+
"oracle.pointer.id-type": () => oracleCase(({ evidence }) => { evidence.pointer.pointerId = new Number(evidence.pointer.pointerId); }),
|
|
897
|
+
"oracle.pointer.digest-type": () => oracleCase(({ evidence }) => { evidence.pointer.preDigest = new String(evidence.pointer.preDigest); }),
|
|
898
|
+
"oracle.pointer.id": () => oracleCase(({ evidence }) => { evidence.pointer.runPointerId += 1; }),
|
|
899
|
+
"oracle.pointer.post": () => oracleCase(({ evidence }) => { evidence.pointer.postDigest = "f".repeat(64); }),
|
|
900
|
+
"oracle.pointer.run": () => oracleCase(({ evidence }) => { evidence.pointer.runDigest = "f".repeat(64); }),
|
|
901
|
+
"oracle.pointer.matched": () => oracleCase(({ evidence }) => { evidence.pointer.runMatchedWithheldPair = false; }),
|
|
902
|
+
"oracle.mail.extra": () => oracleCase(({ evidence }) => { evidence.mail.extra = true; }),
|
|
903
|
+
"oracle.mail.row-type": () => oracleCase(({ evidence }) => { evidence.mail.rowId = new Number(evidence.mail.rowId); }),
|
|
904
|
+
"oracle.mail.digest-type": () => oracleCase(({ evidence }) => { evidence.mail.withheldBodyDigest = new String(evidence.mail.withheldBodyDigest); }),
|
|
905
|
+
"oracle.mail.read-type": () => oracleCase(({ evidence }) => { evidence.mail.fixtureAlreadyRead = "false"; }),
|
|
906
|
+
"oracle.mail.absent-type": () => oracleCase(({ evidence }) => { evidence.mail.fixtureAbsent = "false"; }),
|
|
907
|
+
"oracle.mail.read-blocked": () => oracleCase(({ evidence }) => { evidence.mail.fixtureAlreadyRead = true; }),
|
|
908
|
+
"oracle.mail.absent-blocked": () => oracleCase(({ evidence }) => { evidence.mail.fixtureAbsent = true; }),
|
|
909
|
+
"oracle.mail.row": () => oracleCase(({ evidence }) => { evidence.mail.rowId += 1; }),
|
|
910
|
+
"oracle.mail.run-digest": () => oracleCase(({ evidence }) => { evidence.mail.runBodyDigest = "f".repeat(64); }),
|
|
911
|
+
"oracle.mail.pre-digest": () => oracleCase(({ evidence }) => { evidence.mail.preBodyDigest = "f".repeat(64); }),
|
|
912
|
+
"oracle.mail.post-digest": () => oracleCase(({ evidence }) => { evidence.mail.postBodyDigest = "f".repeat(64); }),
|
|
913
|
+
"oracle.mail.contained": () => oracleCase(({ evidence }) => { evidence.mail.runContainedWithheldBody = false; }),
|
|
914
|
+
"oracle.mail.unread": () => oracleCase(({ evidence }) => { evidence.mail.rowRemainedUnread = false; }),
|
|
915
|
+
"oracle.evidence.case-sequence": () => oracleCase(({ evidence }) => { evidence.caseSequence = [...evidence.caseSequence].reverse(); }),
|
|
916
|
+
"oracle.diagnostic.extra": () => oracleCase(({ evidence }) => { evidence.productionCodexUnreadMutation = { before: 0, after: 0, extra: true }; }),
|
|
917
|
+
"oracle.diagnostic.before": () => oracleCase(({ evidence }) => { evidence.productionCodexUnreadMutation = { before: new Number(0), after: 0 }; }),
|
|
918
|
+
"oracle.diagnostic.after": () => oracleCase(({ evidence }) => { evidence.productionCodexUnreadMutation = { before: 0, after: new Number(0) }; }),
|
|
919
|
+
"oracle.evidence.case-call": () => oracleCase(({ evidence }) => { evidence.cases = JSON.stringify(evidence.cases); }),
|
|
920
|
+
"oracle.case.cases-null": () => oracleCase(({ evidence }) => { evidence.cases = null; }),
|
|
921
|
+
"oracle.evidence.catch": () => oracleCase((context) => { context.evidence = null; }),
|
|
922
|
+
"oracle.success": () => oracleCase(() => {}),
|
|
923
|
+
"oracle.meta.object": () => oracleCase(({ evidence }) => { evidence.meta = JSON.stringify(evidence.meta); }),
|
|
924
|
+
"oracle.meta.extra": () => oracleCase(({ evidence }) => { evidence.meta.extra = true; }),
|
|
925
|
+
"oracle.meta.utc": () => oracleCase(({ evidence }) => { evidence.meta.utcTime = "invalid"; }),
|
|
926
|
+
"oracle.meta.host": () => oracleCase(({ evidence }) => { evidence.meta.hostTime = "invalid"; }),
|
|
927
|
+
"oracle.meta.app": () => oracleCase(({ evidence }) => { evidence.meta.appVersion = "wrong"; }),
|
|
928
|
+
"oracle.meta.cli": () => oracleCase(({ evidence }) => { evidence.meta.cliVersion = "wrong"; }),
|
|
929
|
+
"oracle.integrity.object": () => oracleCase(({ evidence }) => { evidence.integrity = JSON.stringify(evidence.integrity); }),
|
|
930
|
+
"oracle.integrity.null": () => oracleCase(({ evidence }) => { evidence.integrity = null; }),
|
|
931
|
+
"oracle.integrity.set": () => oracleCase(({ evidence }) => { evidence.integrity.extra = { ...evidence.integrity.controlPreexisting }; }),
|
|
932
|
+
"oracle.integrity.item-object": () => oracleCase(({ evidence }) => { evidence.integrity.controlPreexisting = JSON.stringify(evidence.integrity.controlPreexisting); }),
|
|
933
|
+
"oracle.integrity.item-extra": () => oracleCase(({ evidence }) => { evidence.integrity.controlPreexisting.extra = true; }),
|
|
934
|
+
"oracle.integrity.pre-type": () => oracleCase(({ evidence }) => { evidence.integrity.controlPreexisting.preDigest = new String(evidence.integrity.controlPreexisting.preDigest); }),
|
|
935
|
+
"oracle.integrity.post-type": () => oracleCase(({ evidence }) => { evidence.integrity.controlPreexisting.postDigest = new String(evidence.integrity.controlPreexisting.postDigest); }),
|
|
936
|
+
"oracle.integrity.drift": () => oracleCase(({ evidence }) => { evidence.integrity.controlPreexisting.postDigest = "f".repeat(64); }),
|
|
937
|
+
"oracle.policy.unknown": () => policyCase(),
|
|
938
|
+
"manifest.build.root-relative": () => buildManifestCase((args) => { args.root = path.relative(process.cwd(), args.root); }),
|
|
939
|
+
"manifest.build.root-type": () => buildManifestCase((args) => { args.root = 7; }),
|
|
940
|
+
"manifest.build.specimen": () => buildManifestCase((args) => { args.specimen.target.clean = false; }),
|
|
941
|
+
"manifest.build.path-type": () => buildManifestCase((args) => { args.files = [7]; }),
|
|
942
|
+
"manifest.build.file-directory": () => buildManifestCase((args, context) => { fs.mkdirSync(path.join(context.root, "dir")); args.files = ["dir"]; }),
|
|
943
|
+
"manifest.build.root-mismatch": () => buildManifestCase((args, context) => {
|
|
944
|
+
const other = path.join(context.root, "other");
|
|
945
|
+
fs.mkdirSync(other); fs.writeFileSync(path.join(other, "a.json"), "{}\n"); args.root = other;
|
|
946
|
+
}),
|
|
947
|
+
"manifest.build.files-arraylike": () => buildManifestCase((args) => { args.files = { 0: "a.json", length: 1, map: Array.prototype.map }; }),
|
|
948
|
+
"manifest.build.files-empty": () => buildManifestCase((args) => { args.files = []; }),
|
|
949
|
+
"manifest.build.time": () => buildManifestCase((args) => { args.createdAt = "invalid"; }),
|
|
950
|
+
"manifest.build.path-absolute": () => buildManifestCase((args) => { args.files = [`${path.sep}a.json`]; }),
|
|
951
|
+
"manifest.build.path-parent": () => buildManifestCase((args) => { args.files = [".."]; }),
|
|
952
|
+
"manifest.build.path-parent-prefix": () => buildManifestCase((args) => { args.files = [`..${path.sep}child`]; }),
|
|
953
|
+
"manifest.build.path-normalized": () => buildManifestCase((args) => { args.files = ["sub/../a.json"]; }),
|
|
954
|
+
"manifest.build.path-duplicate": () => buildManifestCase((args) => { args.files = ["a.json", "a.json"]; }),
|
|
955
|
+
"manifest.validate.schema": () => validateManifestCase((manifest) => { manifest.schema = "WRONG"; }),
|
|
956
|
+
"manifest.validate.specimen": () => validateManifestCase((manifest, context) => { context.specimen.target.clean = false; }),
|
|
957
|
+
"manifest.validate.object": () => validateManifestCase(() => null),
|
|
958
|
+
"manifest.validate.extra": () => validateManifestCase((manifest) => { manifest.extra = true; }),
|
|
959
|
+
"manifest.validate.probe-format": () => validateManifestCase((manifest) => { manifest.probeId = "g".repeat(32); }),
|
|
960
|
+
"manifest.validate.protocol-format": () => validateManifestCase((manifest) => { manifest.protocolDigest = "g".repeat(64); }),
|
|
961
|
+
"manifest.validate.commit-format": () => validateManifestCase((manifest) => { manifest.harnessCommit = "g".repeat(40); }),
|
|
962
|
+
"manifest.validate.harness-format": () => validateManifestCase((manifest) => { manifest.harnessDigest = "g".repeat(64); }),
|
|
963
|
+
"manifest.validate.probe": () => validateManifestCase((manifest) => { manifest.probeId = "f".repeat(32); }),
|
|
964
|
+
"manifest.validate.protocol": () => validateManifestCase((manifest) => { manifest.protocolDigest = "f".repeat(64); }),
|
|
965
|
+
"manifest.validate.commit": () => validateManifestCase((manifest) => { manifest.harnessCommit = "f".repeat(40); }),
|
|
966
|
+
"manifest.validate.harness": () => validateManifestCase((manifest) => { manifest.harnessDigest = "f".repeat(64); }),
|
|
967
|
+
"manifest.validate.time": () => validateManifestCase((manifest) => { manifest.createdAt = "invalid"; }),
|
|
968
|
+
"manifest.validate.producer": () => validateManifestCase((manifest) => { manifest.producer = "WRONG"; }),
|
|
969
|
+
"manifest.validate.entries-arraylike": () => validateManifestCase((manifest) => { manifest.entries = { 0: manifest.entries[0], length: 1, entries: Array.prototype.entries }; }),
|
|
970
|
+
"manifest.validate.entries-empty": () => validateManifestCase((manifest) => { manifest.entries = []; }),
|
|
971
|
+
"manifest.validate.entry-object": () => validateManifestCase((manifest) => { manifest.entries[0] = null; }),
|
|
972
|
+
"manifest.validate.entry-extra": () => validateManifestCase((manifest) => { manifest.entries[0].extra = true; }),
|
|
973
|
+
"manifest.validate.entry-path-type": () => validateManifestCase((manifest) => { manifest.entries[0].path = 7; }),
|
|
974
|
+
"manifest.validate.entry-path-absolute": () => validateManifestCase((manifest) => { manifest.entries[0].path = path.resolve("absolute.json"); }),
|
|
975
|
+
"manifest.validate.entry-path-parent": () => validateManifestCase((manifest) => { manifest.entries[0].path = ".."; }),
|
|
976
|
+
"manifest.validate.entry-path-parent-prefix": () => validateManifestCase((manifest) => { manifest.entries[0].path = `..${path.sep}escape.json`; }),
|
|
977
|
+
"manifest.validate.entry-bytes": () => validateManifestCase((manifest) => { manifest.entries[0].bytes = -1; }),
|
|
978
|
+
"manifest.validate.entry-sha": () => validateManifestCase((manifest) => { manifest.entries[0].sha256 = "g".repeat(64); }),
|
|
979
|
+
"manifest.validate.order-duplicate": () => validateManifestCase((manifest) => { manifest.entries.push({ ...manifest.entries[0] }); }),
|
|
980
|
+
"manifest.validate.order-unsorted": () => validateManifestCase((manifest) => { manifest.entries.push({ ...manifest.entries[0], path: "0.json" }); }),
|
|
981
|
+
"specimen.target.clean": () => validationCase((specimen) => { specimen.target.clean = false; }),
|
|
982
|
+
"oracle.specimen.target.clean": () => oracleCase(({ specimen }) => { specimen.target.clean = false; }),
|
|
983
|
+
"specimen.canary.control-read.existed-before": () => validationCase((specimen) => { specimen.canaries["control-read"].existedBefore = false; }),
|
|
984
|
+
"specimen.canary.control-read.path-class": () => validationCase((specimen) => { specimen.canaries["control-read"].path = `${specimen.paths.project}/control-read`; }),
|
|
985
|
+
"specimen.canary.control-read.path-equals-root": () => validationCase((specimen) => { specimen.canaries["control-read"].path = specimen.paths.control; }),
|
|
986
|
+
"specimen.canary.control-chmod.path-class": () => validationCase((specimen) => { specimen.canaries["control-chmod"].path = `${specimen.paths.project}/control-chmod`; }),
|
|
987
|
+
"specimen.canary.control-create.path-class": () => validationCase((specimen) => { specimen.canaries["control-create"].path = `${specimen.paths.project}/control-create`; }),
|
|
988
|
+
"specimen.canary.review-worktree.path-class": () => validationCase((specimen) => { specimen.canaries["review-worktree-create"].path = `${specimen.paths.project}/review-worktree`; }),
|
|
989
|
+
"specimen.canary.project-sibling.path-class": () => validationCase((specimen) => { specimen.canaries["project-sibling-create"].path = `${specimen.paths.control}/project-sibling`; }),
|
|
990
|
+
"specimen.canary.project-sibling.inside-project": () => validationCase((specimen) => { specimen.canaries["project-sibling-create"].path = `${specimen.paths.project}/project-sibling`; }),
|
|
991
|
+
"specimen.canary.slash-tmp.path-class": () => validationCase((specimen) => { specimen.canaries["slash-tmp-create"].path = `${specimen.paths.project}/slash-tmp`; }),
|
|
992
|
+
"specimen.canary.tmpdir.path-class": () => validationCase((specimen) => { specimen.canaries["tmpdir-create"].path = `${specimen.paths.project}/tmpdir`; }),
|
|
993
|
+
"specimen.canary.cwd.path-class": () => validationCase((specimen) => { specimen.canaries["cwd-create"].path = `${specimen.paths.control}/cwd`; }),
|
|
994
|
+
"evidence.meta.producer": () => oracleCase(({ evidence }) => { evidence.meta.producer = "UNTRUSTED_PRODUCER"; }),
|
|
995
|
+
"evidence.meta.target-path": () => oracleCase(({ evidence }) => { evidence.meta.targetPath = "/wrong"; }),
|
|
996
|
+
"positive.lib.read": () => readFileCase(),
|
|
997
|
+
"positive.parser.rollout": async () => {
|
|
998
|
+
const { fixture } = await parserModules();
|
|
999
|
+
return parseRolloutCase(fixture.fixtureRollout());
|
|
1000
|
+
},
|
|
1001
|
+
"positive.snapshot.tree": () => snapshotCase(),
|
|
1002
|
+
"positive.cli.oracle": () => cliCase(),
|
|
1003
|
+
"positive.cli.snapshot": () => cliCase((context) => {
|
|
1004
|
+
context.argv = ["snapshot", "--root", context.root];
|
|
1005
|
+
}),
|
|
1006
|
+
"positive.specimen.validate": () => validationNoRebuildCase(() => {}),
|
|
1007
|
+
};
|
|
1008
|
+
|
|
1009
|
+
const POSITIVE_CASES = Object.freeze({
|
|
1010
|
+
"oracle.success": "ALL_SYNTHETIC_EVIDENCE_GREEN",
|
|
1011
|
+
"positive.cli.oracle": "CLI_ACCEPTED",
|
|
1012
|
+
"positive.cli.snapshot": "CLI_ACCEPTED",
|
|
1013
|
+
"positive.lib.read": "READ_FILE_ACCEPTED",
|
|
1014
|
+
"positive.parser.rollout": "PARSE_ROLLOUT_ACCEPTED",
|
|
1015
|
+
"positive.snapshot.tree": "SNAPSHOT_ACCEPTED",
|
|
1016
|
+
"positive.specimen.validate": "VALIDATE_SPECIMEN_ACCEPTED",
|
|
1017
|
+
});
|
|
1018
|
+
|
|
1019
|
+
export function expectedPositiveCases() {
|
|
1020
|
+
return { ...POSITIVE_CASES };
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
export function counterexampleUniverse() {
|
|
1024
|
+
return { ids: counterexampleIds(), positiveCases: expectedPositiveCases() };
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
export function counterexampleIds() {
|
|
1028
|
+
return Object.keys(cases).sort();
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
export async function runCounterexample(id) {
|
|
1032
|
+
const selected = cases[id];
|
|
1033
|
+
if (!selected) throw new Error(`unknown counterexample: ${id}`);
|
|
1034
|
+
try {
|
|
1035
|
+
return await selected();
|
|
1036
|
+
} catch (error) {
|
|
1037
|
+
if (error?.name === "N0Error") return { accepted: false, code: error.code, status: "THREW" };
|
|
1038
|
+
throw error;
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
export async function runCounterexampleMatrix() {
|
|
1043
|
+
const output = {};
|
|
1044
|
+
for (const id of counterexampleIds()) {
|
|
1045
|
+
try {
|
|
1046
|
+
output[id] = await runCounterexample(id);
|
|
1047
|
+
} catch (error) {
|
|
1048
|
+
output[id] = {
|
|
1049
|
+
accepted: false,
|
|
1050
|
+
crashed: true,
|
|
1051
|
+
code: error?.code ?? error?.name ?? "COUNTEREXAMPLE_CRASH",
|
|
1052
|
+
};
|
|
1053
|
+
}
|
|
1054
|
+
}
|
|
1055
|
+
return output;
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
if (process.argv[1] && fileURLToPath(import.meta.url) === path.resolve(process.argv[1])) {
|
|
1059
|
+
try {
|
|
1060
|
+
const result = process.argv[2] === "--all"
|
|
1061
|
+
? await runCounterexampleMatrix()
|
|
1062
|
+
: await runCounterexample(process.argv[2]);
|
|
1063
|
+
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
1064
|
+
} catch (error) {
|
|
1065
|
+
process.stderr.write(`${error?.stack ?? error}\n`);
|
|
1066
|
+
process.exitCode = 1;
|
|
1067
|
+
}
|
|
1068
|
+
}
|