@openpond/evals 0.11.21 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +12 -0
  2. package/dist/connected-evidence/codex-command-observations.js +81 -0
  3. package/dist/connected-evidence/contracts.js +13 -0
  4. package/dist/connected-evidence/git-file-contracts.js +16 -0
  5. package/dist/connected-evidence/git-file-proof.js +86 -0
  6. package/dist/connected-evidence/git-starting-state.js +81 -0
  7. package/dist/connected-evidence/git.js +2 -0
  8. package/dist/connected-evidence/imports.js +2 -1
  9. package/dist/connected-evidence/index.js +1 -0
  10. package/dist/connected-evidence/normalize.js +1 -0
  11. package/dist/connected-evidence/sources/codex-metadata.js +33 -0
  12. package/dist/connected-evidence/sources/codex.js +16 -2
  13. package/dist/graders.js +10 -4
  14. package/dist/javascript-verifier.js +1 -0
  15. package/dist/native-conversations/codex-window-inventory.js +6 -7
  16. package/dist/native-conversations/git-assets.js +61 -0
  17. package/dist/native-conversations/index.js +1 -0
  18. package/dist/prepared-process-isolation.js +131 -0
  19. package/dist/rewards.js +17 -5
  20. package/dist/tasksets.js +6 -0
  21. package/dist/types/builtin-benchmarks/harness-refiner.d.ts +4 -0
  22. package/dist/types/builtin-benchmarks/harness-refiner.d.ts.map +1 -1
  23. package/dist/types/conformance.d.ts +8 -0
  24. package/dist/types/conformance.d.ts.map +1 -1
  25. package/dist/types/connected-evidence/codex-command-observations.d.ts +15 -0
  26. package/dist/types/connected-evidence/codex-command-observations.d.ts.map +1 -0
  27. package/dist/types/connected-evidence/contracts.d.ts +22 -0
  28. package/dist/types/connected-evidence/contracts.d.ts.map +1 -1
  29. package/dist/types/connected-evidence/git-file-contracts.d.ts +18 -0
  30. package/dist/types/connected-evidence/git-file-contracts.d.ts.map +1 -0
  31. package/dist/types/connected-evidence/git-file-proof.d.ts +13 -0
  32. package/dist/types/connected-evidence/git-file-proof.d.ts.map +1 -0
  33. package/dist/types/connected-evidence/git-starting-state.d.ts +28 -0
  34. package/dist/types/connected-evidence/git-starting-state.d.ts.map +1 -0
  35. package/dist/types/connected-evidence/git.d.ts +3 -0
  36. package/dist/types/connected-evidence/git.d.ts.map +1 -0
  37. package/dist/types/connected-evidence/imports.d.ts.map +1 -1
  38. package/dist/types/connected-evidence/index.d.ts +1 -0
  39. package/dist/types/connected-evidence/index.d.ts.map +1 -1
  40. package/dist/types/connected-evidence/normalize.d.ts +1 -0
  41. package/dist/types/connected-evidence/normalize.d.ts.map +1 -1
  42. package/dist/types/connected-evidence/sources/claude-code.d.ts +10 -0
  43. package/dist/types/connected-evidence/sources/claude-code.d.ts.map +1 -1
  44. package/dist/types/connected-evidence/sources/codex-metadata.d.ts +10 -0
  45. package/dist/types/connected-evidence/sources/codex-metadata.d.ts.map +1 -0
  46. package/dist/types/connected-evidence/sources/codex.d.ts +10 -0
  47. package/dist/types/connected-evidence/sources/codex.d.ts.map +1 -1
  48. package/dist/types/connected-evidence/sources/grok-build.d.ts +10 -0
  49. package/dist/types/connected-evidence/sources/grok-build.d.ts.map +1 -1
  50. package/dist/types/connected-evidence/sources/history.d.ts +20 -0
  51. package/dist/types/connected-evidence/sources/history.d.ts.map +1 -1
  52. package/dist/types/connected-evidence/sources/opencode.d.ts +10 -0
  53. package/dist/types/connected-evidence/sources/opencode.d.ts.map +1 -1
  54. package/dist/types/connected-evidence/sources/pi.d.ts +10 -0
  55. package/dist/types/connected-evidence/sources/pi.d.ts.map +1 -1
  56. package/dist/types/execution-contracts.d.ts +8 -0
  57. package/dist/types/execution-contracts.d.ts.map +1 -1
  58. package/dist/types/graders.d.ts +3 -0
  59. package/dist/types/graders.d.ts.map +1 -1
  60. package/dist/types/javascript-verifier.d.ts +1 -0
  61. package/dist/types/javascript-verifier.d.ts.map +1 -1
  62. package/dist/types/learning/admission.d.ts +1 -0
  63. package/dist/types/learning/admission.d.ts.map +1 -1
  64. package/dist/types/learning/authoring-service.d.ts +2 -0
  65. package/dist/types/learning/authoring-service.d.ts.map +1 -1
  66. package/dist/types/learning/authoring.d.ts +8 -0
  67. package/dist/types/learning/authoring.d.ts.map +1 -1
  68. package/dist/types/learning/batch-service.d.ts +4 -0
  69. package/dist/types/learning/batch-service.d.ts.map +1 -1
  70. package/dist/types/learning/contracts.d.ts +17 -0
  71. package/dist/types/learning/contracts.d.ts.map +1 -1
  72. package/dist/types/learning/operations.d.ts +8 -0
  73. package/dist/types/learning/operations.d.ts.map +1 -1
  74. package/dist/types/learning/repository.d.ts +14 -0
  75. package/dist/types/learning/repository.d.ts.map +1 -1
  76. package/dist/types/learning/reward-calibration-closure.d.ts +9 -1
  77. package/dist/types/learning/reward-calibration-closure.d.ts.map +1 -1
  78. package/dist/types/learning/reward-checks.d.ts +2 -0
  79. package/dist/types/learning/reward-checks.d.ts.map +1 -1
  80. package/dist/types/learning/transport.d.ts +18 -0
  81. package/dist/types/learning/transport.d.ts.map +1 -1
  82. package/dist/types/native-conversations/codex-window-inventory.d.ts.map +1 -1
  83. package/dist/types/native-conversations/git-assets.d.ts +32 -0
  84. package/dist/types/native-conversations/git-assets.d.ts.map +1 -0
  85. package/dist/types/native-conversations/index.d.ts +1 -0
  86. package/dist/types/native-conversations/index.d.ts.map +1 -1
  87. package/dist/types/prepared-process-isolation.d.ts +5 -0
  88. package/dist/types/prepared-process-isolation.d.ts.map +1 -0
  89. package/dist/types/review-conformance.d.ts +5 -5
  90. package/dist/types/rewards.d.ts +9 -0
  91. package/dist/types/rewards.d.ts.map +1 -1
  92. package/dist/types/tasksets.d.ts +16 -0
  93. package/dist/types/tasksets.d.ts.map +1 -1
  94. package/package.json +6 -1
  95. package/schemas/learning/v1/binding.schema.json +8 -0
  96. package/schemas/learning/v1/command-request.schema.json +8 -0
  97. package/schemas/learning/v1/decision.schema.json +5 -1
  98. package/schemas/learning/v1/draft.schema.json +8 -0
  99. package/schemas/learning/v1/grade.schema.json +5 -1
  100. package/schemas/learning/v1/package.schema.json +113 -93
  101. package/schemas/learning/v1/reward_check.schema.json +2 -1
@@ -0,0 +1,131 @@
1
+ /** Staged by the private verifier owner. Untrusted policy programs run with no
2
+ * capabilities as a different UID, outside the sealed private verifier tree.
3
+ * The parent must assess returned behavior; an exit code is never correctness. */
4
+ export const PREPARED_PROCESS_ISOLATION_SOURCE = String.raw `
5
+ import fs from "node:fs/promises";
6
+ import os from "node:os";
7
+ import path from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+ import { randomInt } from "node:crypto";
10
+
11
+ const MAX_BYTES = 15 * 1024 * 1024, MAX_OUTPUT = 1024 * 1024;
12
+ const usedUsers = new Set();
13
+ const safePath = value => typeof value === "string" && value.length > 0 && value.length <= 2000
14
+ && !value.startsWith("/") && !/[\\\x00-\x1f\x7f]/.test(value)
15
+ && value.split("/").every(part => part && part !== "." && part !== ".." && !part.startsWith(".env"));
16
+
17
+ /** files contain only public original/policy bytes and a public invocation
18
+ * adapter. Never stage independent assertions, expected answers or checkers. */
19
+ export async function runPolicyProgram(input) {
20
+ const privateRoot = path.dirname(fileURLToPath(import.meta.url));
21
+ if (process.getuid?.() !== 0 || !path.basename(privateRoot).startsWith(".openpond-reward-verifier-"))
22
+ throw new Error("policy_process_isolation_runtime_unavailable");
23
+ if (!Array.isArray(input.files) || input.files.length < 1 || input.files.length > 100
24
+ || !safePath(input.entrypoint) || !input.files.some(file => file.path === input.entrypoint)
25
+ || !Number.isSafeInteger(input.timeoutMs) || input.timeoutMs < 1 || input.timeoutMs > 60000
26
+ || !Array.isArray(input.args ?? []) || (input.args ?? []).length > 100
27
+ || (input.args ?? []).some(arg => typeof arg !== "string" || arg.length > 2000 || arg.includes("\0")))
28
+ throw new Error("policy_process_isolation_input_invalid");
29
+ let total = 0;
30
+ const paths = new Set();
31
+ const files = input.files.map(file => {
32
+ if (!safePath(file.path) || paths.has(file.path) || typeof file.base64 !== "string")
33
+ throw new Error("policy_process_isolation_file_invalid");
34
+ paths.add(file.path);
35
+ const bytes = Buffer.from(file.base64, "base64");
36
+ if (bytes.toString("base64") !== file.base64) throw new Error("policy_process_isolation_file_invalid");
37
+ total += bytes.length;
38
+ if (total > MAX_BYTES) throw new Error("policy_process_isolation_file_limit");
39
+ return { path: file.path, bytes };
40
+ });
41
+ // Directory access seals request JSON, checker modules, helper source and
42
+ // private artifacts before any untrusted program can be spawned.
43
+ await fs.chmod(privateRoot, 0o700);
44
+ const stat = await fs.stat(privateRoot);
45
+ if (stat.uid !== 0 || (stat.mode & 0o777) !== 0o700) throw new Error("policy_process_private_tree_not_sealed");
46
+ for (const executable of ["/usr/bin/setsid", "/usr/bin/setpriv", "/usr/local/bin/bun"])
47
+ await fs.access(executable, 1);
48
+ const directory = await fs.mkdtemp(path.join(os.tmpdir(), "openpond-policy-"));
49
+ let user;
50
+ do { user = randomInt(1000000, 2000000); } while (usedUsers.has(user));
51
+ usedUsers.add(user);
52
+ let child, timer, timedOut = false;
53
+ const kill = () => {
54
+ if (!child) return;
55
+ try { process.kill(-child.pid, "SIGKILL"); } catch {}
56
+ try { child.kill("SIGKILL"); } catch {}
57
+ };
58
+ try {
59
+ await fs.chmod(directory, 0o700);
60
+ await fs.chown(directory, user, user);
61
+ for (const file of files) {
62
+ const target = path.join(directory, file.path);
63
+ const parent = path.dirname(target);
64
+ await fs.mkdir(parent, { recursive: true, mode: 0o700 });
65
+ let current = parent;
66
+ while (current !== directory) {
67
+ await fs.chmod(current, 0o700); await fs.chown(current, user, user);
68
+ current = path.dirname(current);
69
+ }
70
+ await fs.writeFile(target, file.bytes, { mode: 0o600, flag: "wx" });
71
+ await fs.chown(target, user, user);
72
+ }
73
+ child = Bun.spawn(["/usr/bin/setsid", "/usr/bin/setpriv", "--reuid=" + user, "--regid=" + user, "--clear-groups",
74
+ "--no-new-privs", "--bounding-set=-all", "--inh-caps=-all", "--ambient-caps=-all",
75
+ "/usr/local/bin/bun", path.join(directory, input.entrypoint), ...(input.args ?? [])], {
76
+ cwd: directory, env: { PATH: "/usr/local/bin:/usr/bin:/bin", TMPDIR: directory }, stdout: "pipe", stderr: "pipe", stdin: "ignore",
77
+ });
78
+ timer = setTimeout(() => { timedOut = true; kill(); }, input.timeoutMs);
79
+ const read = async stream => {
80
+ const reader = stream.getReader(), chunks = [];
81
+ let bytes = 0;
82
+ try {
83
+ while (true) {
84
+ const item = await reader.read(); if (item.done) break;
85
+ bytes += item.value.byteLength;
86
+ if (bytes > MAX_OUTPUT) { kill(); throw new Error("policy_process_output_limit"); }
87
+ chunks.push(item.value);
88
+ }
89
+ return new TextDecoder("utf8", { fatal: true }).decode(Buffer.concat(chunks));
90
+ } finally { await reader.cancel(); reader.releaseLock(); }
91
+ };
92
+ const [stdout, stderr, exitCode] = await Promise.all([read(child.stdout), read(child.stderr), child.exited]);
93
+ return { stdout, stderr, exitCode, timedOut, isolation: { uid: user, gid: user, privateTreeSealed: true } };
94
+ } finally {
95
+ if (timer) clearTimeout(timer);
96
+ kill();
97
+ // A policy child can call setsid and escape its initial process group.
98
+ // Drain every process with this invocation's unique real UID before the
99
+ // next call; namespaces cannot grant a different outside UID or privilege.
100
+ try { await drainPolicyProcesses(user); }
101
+ finally { await fs.rm(directory, { recursive: true, force: true }); }
102
+ }
103
+ }
104
+
105
+ async function drainPolicyProcesses(user) {
106
+ const deadline = Date.now() + 2000;
107
+ let empty = 0;
108
+ while (Date.now() < deadline) {
109
+ const entries = (await fs.readdir("/proc")).filter(value => /^\d+$/.test(value));
110
+ if (entries.length > 10000) throw new Error("policy_process_inventory_limit");
111
+ let owned = 0;
112
+ for (const entry of entries) {
113
+ let status;
114
+ try { status = await fs.readFile("/proc/" + entry + "/status", "utf8"); }
115
+ catch (error) { if (["ENOENT", "ESRCH"].includes(error.code)) continue; throw error; }
116
+ const ids = /^Uid:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/m.exec(status);
117
+ if (ids && ids.slice(1).some(value => Number(value) === user)) {
118
+ // Zombies cannot fork, inspect a subsequent invocation or hold files.
119
+ if (/^State:\s+Z/m.test(status)) continue;
120
+ owned++;
121
+ try { process.kill(Number(entry), "SIGKILL"); }
122
+ catch (error) { if (error.code !== "ESRCH") throw error; }
123
+ }
124
+ }
125
+ empty = owned === 0 ? empty + 1 : 0;
126
+ if (empty >= 2) return;
127
+ await new Promise(resolve => setTimeout(resolve, 20));
128
+ }
129
+ throw new Error("policy_process_cleanup_unconfirmed");
130
+ }
131
+ `;
package/dist/rewards.js CHANGED
@@ -4,7 +4,7 @@ import { ImmutableAssetRefSchema, ImmutableReleaseRefSchema, ReleaseHashSchema,
4
4
  import { gradeEvidence, GraderEvidenceSchema } from "./graders.js";
5
5
  import { CustomVerifierGraderSpecSchema, DeterministicGraderSpecSchema, GraderSpecSchema, HumanGraderSpecSchema, ModelJudgeGraderSpecSchema } from "./tasksets.js";
6
6
  import { assertBoundedTaskJson, validateTaskSchema } from "./task-schema.js";
7
- const bindingFields = { id: true, version: true, weight: true, hardGate: true, rewardEligible: true, privileged: true };
7
+ const bindingFields = { taskIds: true, id: true, version: true, weight: true, hardGate: true, rewardEligible: true, privileged: true };
8
8
  export const FeedbackKeySchema = z.string().regex(/^[a-z][a-z0-9_]{0,79}$/);
9
9
  export function feedbackKeyForReward(reward) {
10
10
  return reward.feedbackKey ?? `reward_${contentHash(reward.id).slice(0, 24)}`;
@@ -49,6 +49,7 @@ export const RewardNormalizationSchema = z.discriminatedUnion("kind", [
49
49
  ]);
50
50
  export const RewardBindingSourceSchema = z.object({
51
51
  graderId: ReleaseIdSchema,
52
+ taskIds: z.array(ReleaseIdSchema).min(1).max(10_000).refine(ids => new Set(ids).size === ids.length, "Task scope must be unique.").optional(),
52
53
  reward: RewardReleaseRefSchema,
53
54
  role: z.enum(["training", "evaluation"]),
54
55
  normalization: RewardNormalizationSchema,
@@ -87,7 +88,7 @@ export const BoundRewardResultSchema = z.object({
87
88
  graderId: ReleaseIdSchema,
88
89
  reward: RewardReleaseRefSchema,
89
90
  role: z.enum(["training", "evaluation"]),
90
- status: z.enum(["scored", "pending", "unavailable", "failed"]),
91
+ status: z.enum(["scored", "pending", "unavailable", "failed", "not_applicable"]),
91
92
  rawScore: z.number().finite().nullable(),
92
93
  normalizedScore: z.number().min(0).max(1).nullable(),
93
94
  passed: z.boolean().nullable(),
@@ -99,6 +100,7 @@ export const RewardCompositionContentSchema = z.object({
99
100
  schemaVersion: z.literal("openpond.rewardComposition.v1"),
100
101
  binding: RewardReleaseRefSchema,
101
102
  taskHash: ReleaseHashSchema,
103
+ taskId: ReleaseIdSchema.optional(),
102
104
  outputHash: ReleaseHashSchema,
103
105
  results: z.array(BoundRewardResultSchema).max(100),
104
106
  training: z.object({ status: z.enum(["scored", "pending", "unscorable", "not_configured"]), score: z.number().min(0).max(1).nullable(), passed: z.boolean().nullable() }).strict(),
@@ -149,6 +151,10 @@ export async function executeRewardBinding(input) {
149
151
  for (const { source, reward } of resolved) {
150
152
  input.signal?.throwIfAborted();
151
153
  const result = { graderId: source.graderId, reward: source.reward, role: source.role, status: "unavailable", rawScore: null, normalizedScore: null, passed: null, evidenceHashes: [], message: null };
154
+ if (source.taskIds && !source.taskIds.includes(input.task.id)) {
155
+ results.push({ ...result, status: "not_applicable" });
156
+ continue;
157
+ }
152
158
  try {
153
159
  if (reward.implementation.kind === "human") {
154
160
  result.status = "pending";
@@ -183,11 +189,13 @@ export async function executeRewardBinding(input) {
183
189
  }
184
190
  results.push(BoundRewardResultSchema.parse(result));
185
191
  }
186
- return composeBoundRewards({ binding: input.binding, taskHash: contentHash(input.task), outputHash: contentHash(input.evidence), results });
192
+ return composeBoundRewards({ binding: input.binding, ...(input.binding.sources.some(source => source.taskIds) ? { taskId: input.task.id } : {}), taskHash: contentHash(input.task), outputHash: contentHash(input.evidence), results });
187
193
  }
188
194
  export function composeBoundRewards(input) {
189
195
  const binding = RewardBindingSchema.parse(input.binding);
190
196
  assertRewardHash(binding);
197
+ if (binding.sources.some(source => source.taskIds) && !input.taskId)
198
+ throw new LearningDomainError("reward_task_scope_missing");
191
199
  const results = input.results.map((result) => BoundRewardResultSchema.parse(result));
192
200
  if (results.length !== binding.sources.length || new Set(results.map((result) => result.graderId)).size !== results.length)
193
201
  throw new LearningDomainError("reward_result_set_incomplete");
@@ -195,6 +203,9 @@ export function composeBoundRewards(input) {
195
203
  const result = results.find((candidate) => candidate.graderId === source.graderId);
196
204
  if (!result || contentHash(result.reward) !== contentHash(source.reward) || result.role !== source.role)
197
205
  throw new LearningDomainError("reward_result_binding_mismatch");
206
+ const applicable = !source.taskIds || source.taskIds.includes(input.taskId);
207
+ if (applicable === (result.status === "not_applicable") || !applicable && (result.graderEvidence || result.evidenceHashes.length || result.message !== null))
208
+ throw new LearningDomainError("reward_result_task_scope_mismatch");
198
209
  if (result.graderEvidence) {
199
210
  const { contentHash: evidenceHash, ...body } = result.graderEvidence;
200
211
  if (contentHash(body) !== evidenceHash || !result.evidenceHashes.includes(evidenceHash)
@@ -219,6 +230,7 @@ export function composeBoundRewards(input) {
219
230
  schemaVersion: "openpond.rewardComposition.v1",
220
231
  binding: { id: binding.id, revision: binding.revision, contentHash: binding.contentHash },
221
232
  taskHash: input.taskHash,
233
+ ...(input.taskId ? { taskId: input.taskId } : {}),
222
234
  outputHash: input.outputHash,
223
235
  results,
224
236
  training: aggregate("training"),
@@ -226,7 +238,7 @@ export function composeBoundRewards(input) {
226
238
  });
227
239
  return RewardCompositionSchema.parse({ ...content, contentHash: contentHash(content) });
228
240
  function aggregate(role) {
229
- const selected = binding.sources.filter((source) => source.role === role).map((source) => ({ source, result: results.find((candidate) => candidate.graderId === source.graderId) }));
241
+ const selected = binding.sources.filter((source) => source.role === role && (!source.taskIds || source.taskIds.includes(input.taskId))).map((source) => ({ source, result: results.find((candidate) => candidate.graderId === source.graderId) }));
230
242
  if (!selected.length)
231
243
  return { status: "not_configured", score: null, passed: null };
232
244
  if (selected.some(({ source, result }) => source.required && result.status !== "scored" && result.status !== "pending"))
@@ -250,5 +262,5 @@ function withoutRewardHash(value) { const { contentHash: _hash, ...content } = v
250
262
  function compileSource(source, reward) {
251
263
  if (reward.implementation.kind === "learned_model")
252
264
  throw new LearningDomainError("learned_reward_requires_model_execution_adapter");
253
- return GraderSpecSchema.parse({ ...reward.implementation, id: source.graderId, version: String(reward.revision), weight: source.weight, hardGate: source.hardGate, rewardEligible: source.role === "training", privileged: source.privileged });
265
+ return GraderSpecSchema.parse({ ...reward.implementation, ...(source.taskIds ? { taskIds: source.taskIds } : {}), id: source.graderId, version: String(reward.revision), weight: source.weight, hardGate: source.hardGate, rewardEligible: source.role === "training", privileged: source.privileged });
254
266
  }
package/dist/tasksets.js CHANGED
@@ -28,6 +28,7 @@ export const EnvironmentContractSchema = z.object({
28
28
  }).strict();
29
29
  const GraderBaseSchema = z.object({
30
30
  id: ReleaseIdSchema,
31
+ taskIds: z.array(ReleaseIdSchema).min(1).max(10_000).refine(ids => new Set(ids).size === ids.length, "Grader task IDs must be unique.").optional(),
31
32
  version: z.string().trim().min(1).max(100),
32
33
  weight: z.number().nonnegative().max(1_000).default(1),
33
34
  hardGate: z.boolean().default(false),
@@ -120,6 +121,11 @@ export function validateTasksetRelease(input) {
120
121
  path: "environmentRelease",
121
122
  });
122
123
  }
124
+ const taskIds = new Set(taskset.tasks.map(task => task.id));
125
+ for (const grader of taskset.graders)
126
+ if (grader.taskIds?.some(id => !taskIds.has(id))) {
127
+ issues.push({ code: "grader_task_missing", severity: "error", message: `Grader ${grader.id} refers to a task outside this release.`, path: "graders" });
128
+ }
123
129
  const clusterSplits = new Map();
124
130
  for (const task of taskset.tasks) {
125
131
  if (taskset.metrics?.aggregation === "weighted_mean" && !Object.hasOwn(taskset.metrics.taskWeights, task.id)) {
@@ -73,6 +73,7 @@ export declare const harnessRefinerBenchmarkRelease: {
73
73
  privileged: boolean;
74
74
  kind: "content" | "schema" | "artifact" | "runtime_event" | "state";
75
75
  config: Record<string, unknown>;
76
+ taskIds?: string[] | undefined;
76
77
  } | {
77
78
  id: string;
78
79
  version: string;
@@ -90,6 +91,7 @@ export declare const harnessRefinerBenchmarkRelease: {
90
91
  visibility: "policy" | "verifier" | "host_private";
91
92
  };
92
93
  calibrationStatus: "pending" | "passed" | "failed";
94
+ taskIds?: string[] | undefined;
93
95
  model?: {
94
96
  providerId: string;
95
97
  modelId: string;
@@ -114,6 +116,7 @@ export declare const harnessRefinerBenchmarkRelease: {
114
116
  };
115
117
  timeoutMs: number;
116
118
  networkPolicy: "none";
119
+ taskIds?: string[] | undefined;
117
120
  runtime?: "isolated_javascript" | "sandbox_process" | undefined;
118
121
  exportName?: string | undefined;
119
122
  } | {
@@ -133,6 +136,7 @@ export declare const harnessRefinerBenchmarkRelease: {
133
136
  visibility: "policy" | "verifier" | "host_private";
134
137
  };
135
138
  reviewerRole: string;
139
+ taskIds?: string[] | undefined;
136
140
  form?: {
137
141
  schemaVersion: "openpond.humanForm.v1";
138
142
  mode: "individual" | "pairwise";
@@ -1 +1 @@
1
- {"version":3,"file":"harness-refiner.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-benchmarks/harness-refiner.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqqD1C,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASzE,CAAC"}
1
+ {"version":3,"file":"harness-refiner.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-benchmarks/harness-refiner.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqqD1C,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASzE,CAAC"}
@@ -183,6 +183,7 @@ export declare const genericToolConformance: {
183
183
  privileged: boolean;
184
184
  kind: "content" | "schema" | "artifact" | "runtime_event" | "state";
185
185
  config: Record<string, unknown>;
186
+ taskIds?: string[] | undefined;
186
187
  } | {
187
188
  id: string;
188
189
  version: string;
@@ -200,6 +201,7 @@ export declare const genericToolConformance: {
200
201
  visibility: "policy" | "verifier" | "host_private";
201
202
  };
202
203
  calibrationStatus: "pending" | "passed" | "failed";
204
+ taskIds?: string[] | undefined;
203
205
  model?: {
204
206
  providerId: string;
205
207
  modelId: string;
@@ -224,6 +226,7 @@ export declare const genericToolConformance: {
224
226
  };
225
227
  timeoutMs: number;
226
228
  networkPolicy: "none";
229
+ taskIds?: string[] | undefined;
227
230
  runtime?: "isolated_javascript" | "sandbox_process" | undefined;
228
231
  exportName?: string | undefined;
229
232
  } | {
@@ -243,6 +246,7 @@ export declare const genericToolConformance: {
243
246
  visibility: "policy" | "verifier" | "host_private";
244
247
  };
245
248
  reviewerRole: string;
249
+ taskIds?: string[] | undefined;
246
250
  form?: {
247
251
  schemaVersion: "openpond.humanForm.v1";
248
252
  mode: "individual" | "pairwise";
@@ -568,6 +572,7 @@ export declare const marketingPortfolioConformance: {
568
572
  privileged: boolean;
569
573
  kind: "content" | "schema" | "artifact" | "runtime_event" | "state";
570
574
  config: Record<string, unknown>;
575
+ taskIds?: string[] | undefined;
571
576
  } | {
572
577
  id: string;
573
578
  version: string;
@@ -585,6 +590,7 @@ export declare const marketingPortfolioConformance: {
585
590
  visibility: "policy" | "verifier" | "host_private";
586
591
  };
587
592
  calibrationStatus: "pending" | "passed" | "failed";
593
+ taskIds?: string[] | undefined;
588
594
  model?: {
589
595
  providerId: string;
590
596
  modelId: string;
@@ -609,6 +615,7 @@ export declare const marketingPortfolioConformance: {
609
615
  };
610
616
  timeoutMs: number;
611
617
  networkPolicy: "none";
618
+ taskIds?: string[] | undefined;
612
619
  runtime?: "isolated_javascript" | "sandbox_process" | undefined;
613
620
  exportName?: string | undefined;
614
621
  } | {
@@ -628,6 +635,7 @@ export declare const marketingPortfolioConformance: {
628
635
  visibility: "policy" | "verifier" | "host_private";
629
636
  };
630
637
  reviewerRole: string;
638
+ taskIds?: string[] | undefined;
631
639
  form?: {
632
640
  schemaVersion: "openpond.humanForm.v1";
633
641
  mode: "individual" | "pairwise";
@@ -1 +1 @@
1
- {"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../../../../src/conformance.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAEjC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGxC,CAAC"}
1
+ {"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../../../../src/conformance.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAEjC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGxC,CAAC"}
@@ -0,0 +1,15 @@
1
+ /** Interpret recorded syntax, never execute source code. Only sequential static
2
+ * exec_command calls have an unambiguous correspondence with retained results. */
3
+ export declare function recordedCodexCommands(source: string): {
4
+ cmd: string;
5
+ maxOutputTokens: number;
6
+ cwd: string | null;
7
+ }[];
8
+ /** This deliberately bounded read-only prefix establishes that no earlier
9
+ * recorded command modified the checkout before the status observation. */
10
+ export declare function isRecordedReadOnlyInventory(cmd: string): boolean;
11
+ export declare function recordedCodexCommandResults(value: unknown, count: number): {
12
+ output: string;
13
+ originalTokenCount: number;
14
+ }[];
15
+ //# sourceMappingURL=codex-command-observations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-command-observations.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/codex-command-observations.ts"],"names":[],"mappings":"AAcA;kFACkF;AAClF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM;SAGrB,MAAM;qBAAmB,MAAM;SAAO,MAAM,GAAG,IAAI;IAiCjF;AAED;2EAC2E;AAC3E,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,WAEtD;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;;;IAkBxE"}
@@ -111,6 +111,18 @@ export declare const ConnectedBoundarySchema: z.ZodObject<{
111
111
  gaps: z.ZodArray<z.ZodString>;
112
112
  }, z.core.$strict>;
113
113
  }, z.core.$strict>;
114
+ /** Source-reported repository identity is reconstruction evidence, not an
115
+ * admitted checkout or proof that the working tree was clean. */
116
+ export declare const ConnectedRepositoryContextSchema: z.ZodObject<{
117
+ schemaVersion: z.ZodLiteral<"openpond.connectedRepositoryContext.v1">;
118
+ kind: z.ZodLiteral<"git">;
119
+ commitHash: z.ZodString;
120
+ branch: z.ZodNullable<z.ZodString>;
121
+ recordedAt: z.ZodNullable<z.ZodString>;
122
+ sourceFileHash: z.ZodString;
123
+ metadataHash: z.ZodString;
124
+ workingDirectoryHash: z.ZodOptional<z.ZodString>;
125
+ }, z.core.$strict>;
114
126
  export declare const ConnectedSessionSchema: z.ZodObject<{
115
127
  schemaVersion: z.ZodLiteral<"openpond.connectedEvidence.v1">;
116
128
  normalizerVersion: z.ZodLiteral<"connected-evidence-1">;
@@ -134,6 +146,16 @@ export declare const ConnectedSessionSchema: z.ZodObject<{
134
146
  machineId: z.ZodString;
135
147
  sourceInstanceId: z.ZodString;
136
148
  }, z.core.$strict>>;
149
+ repositoryContext: z.ZodOptional<z.ZodObject<{
150
+ schemaVersion: z.ZodLiteral<"openpond.connectedRepositoryContext.v1">;
151
+ kind: z.ZodLiteral<"git">;
152
+ commitHash: z.ZodString;
153
+ branch: z.ZodNullable<z.ZodString>;
154
+ recordedAt: z.ZodNullable<z.ZodString>;
155
+ sourceFileHash: z.ZodString;
156
+ metadataHash: z.ZodString;
157
+ workingDirectoryHash: z.ZodOptional<z.ZodString>;
158
+ }, z.core.$strict>>;
137
159
  sourceFiles: z.ZodArray<z.ZodObject<{
138
160
  path: z.ZodString;
139
161
  contentHash: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,0BAA0B,EAAG,+BAAwC,CAAC;AACnF,eAAO,MAAM,4BAA4B,EAAG,sBAA+B,CAAC;AAC5E,eAAO,MAAM,yBAAyB;;;;;;;;;CACwF,CAAC;AAK/H,eAAO,MAAM,yBAAyB;;;;;;;;;;;EAAmI,CAAC;AAC1K,eAAO,MAAM,oBAAoB;;;;;;;;;;;kBAGtB,CAAC;AACZ,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAMtB,CAAC;AACZ,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAQzB,CAAC;AACZ,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAUxB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,WAK/D;AAkBD;mFACmF;AACnF,wBAAgB,gCAAgC,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAE7G;AACD,sFAAsF;AACtF,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKjF"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,0BAA0B,EAAG,+BAAwC,CAAC;AACnF,eAAO,MAAM,4BAA4B,EAAG,sBAA+B,CAAC;AAC5E,eAAO,MAAM,yBAAyB;;;;;;;;;CACwF,CAAC;AAK/H,eAAO,MAAM,yBAAyB;;;;;;;;;;;EAAmI,CAAC;AAC1K,eAAO,MAAM,oBAAoB;;;;;;;;;;;kBAGtB,CAAC;AACZ,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAMtB,CAAC;AACZ,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAQzB,CAAC;AACZ;iEACiE;AACjE,eAAO,MAAM,gCAAgC;;;;;;;;;kBASlC,CAAC;AACZ,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAWxB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,WAK/D;AAkBD;mFACmF;AACnF,wBAAgB,gCAAgC,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAE7G;AACD,sFAAsF;AACtF,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKjF"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ /** A Git object proof pins bytes to recorded history. It does not establish
3
+ * that the historical working tree was clean or that these are all dependencies. */
4
+ export declare const ConnectedGitFileProofSchema: z.ZodObject<{
5
+ schemaVersion: z.ZodLiteral<"openpond.connectedGitFileProof.v1">;
6
+ path: z.ZodString;
7
+ commit: z.ZodObject<{
8
+ hash: z.ZodString;
9
+ base64: z.ZodString;
10
+ }, z.core.$strict>;
11
+ trees: z.ZodArray<z.ZodObject<{
12
+ hash: z.ZodString;
13
+ base64: z.ZodString;
14
+ }, z.core.$strict>>;
15
+ contentsBase64: z.ZodString;
16
+ }, z.core.$strict>;
17
+ export type ConnectedGitFileProof = z.infer<typeof ConnectedGitFileProofSchema>;
18
+ //# sourceMappingURL=git-file-contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-file-contracts.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/git-file-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB;oFACoF;AACpF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;kBAM7B,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ export * from "./git-file-contracts.js";
2
+ /** The caller must supply repositoryContext from an authorized, hash-verified
3
+ * connected snapshot. No filesystem access or caller-selected Git command occurs. */
4
+ export declare function verifyConnectedGitFileProof(repositoryContext: unknown, raw: unknown): {
5
+ path: string;
6
+ commitHash: string;
7
+ gitObjectHash: string;
8
+ mode: string;
9
+ sizeBytes: number;
10
+ sha256: string;
11
+ contentsBase64: string;
12
+ };
13
+ //# sourceMappingURL=git-file-proof.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-file-proof.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/git-file-proof.ts"],"names":[],"mappings":"AAEA,cAAc,yBAAyB,CAAC;AAoCxC;qFACqF;AACrF,wBAAgB,2BAA2B,CAAC,iBAAiB,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO;;;;;;;;EAwCnF"}
@@ -0,0 +1,28 @@
1
+ /** Verify only the original first-tool boundary. Later requests need their own
2
+ * captured state. Both the repository context and observations come from the
3
+ * authorized immutable snapshot, never caller-supplied cleanliness claims. */
4
+ export declare function verifyConnectedGitStartingAssets(input: {
5
+ session: unknown;
6
+ boundaryId: string;
7
+ proofs: unknown[];
8
+ }): {
9
+ schemaVersion: "openpond.connectedGitStartingAssets.v1";
10
+ sessionHash: string;
11
+ boundaryId: string;
12
+ inputHash: string;
13
+ revisionHash: string;
14
+ commitHash: string;
15
+ observationHash: string;
16
+ selectedPathsUnmodified: true;
17
+ dependencyClosureQualified: false;
18
+ assets: {
19
+ path: string;
20
+ commitHash: string;
21
+ gitObjectHash: string;
22
+ mode: string;
23
+ sizeBytes: number;
24
+ sha256: string;
25
+ contentsBase64: string;
26
+ }[];
27
+ };
28
+ //# sourceMappingURL=git-starting-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-starting-state.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/git-starting-state.ts"],"names":[],"mappings":"AA2BA;;8EAE8E;AAC9E,wBAAgB,gCAAgC,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE;;;;;;;;;;;;;;;;;;;EAiDlH"}
@@ -0,0 +1,3 @@
1
+ export * from "./git-file-proof.js";
2
+ export * from "./git-starting-state.js";
3
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/git.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/imports.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACzB,MAAM,gBAAgB,CAAC;AAaxB,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,mBAAmB,EACnB,aAAa,GAAG,aAAa,CAC9B,CAAC;AACF,oFAAoF;AACpF,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,mBAAmB,UAExE;AACD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,gCAAgC,CAAC;IAChD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,iBAAiB,CAAA;KAAE,EAAE,CAAC;CACvE,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D,GAAG,kBAAkB,CAgJrB"}
1
+ {"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/imports.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACzB,MAAM,gBAAgB,CAAC;AAaxB,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,mBAAmB,EACnB,aAAa,GAAG,aAAa,CAC9B,CAAC;AACF,oFAAoF;AACpF,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,mBAAmB,UAExE;AACD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,gCAAgC,CAAC;IAChD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,iBAAiB,CAAA;KAAE,EAAE,CAAC;CACvE,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D,GAAG,kBAAkB,CAiJrB"}
@@ -4,4 +4,5 @@ export * from "./imports.js";
4
4
  export * from "./usage-summary.js";
5
5
  export * from "./python-correctness.js";
6
6
  export * from "./collector-coverage-contracts.js";
7
+ export * from "./git-file-contracts.js";
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,yBAAyB,CAAC"}
@@ -24,6 +24,7 @@ export declare function normalizeConnectedSession(input: {
24
24
  machineId: string;
25
25
  sourceInstanceId: string;
26
26
  };
27
+ repositoryContext?: ConnectedSession["repositoryContext"];
27
28
  }): ConnectedSession;
28
29
  export declare function connectedJsonLines(file: ConnectedFile): Record<string, unknown>[];
29
30
  export declare function object(value: unknown): Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/normalize.ts"],"names":[],"mappings":"AACA,OAAO,EACmB,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE3I,qBAAa,uCAAwC,SAAQ,KAAK;;CAEjE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,GAAE,SAAS,GAAG,cAA+B,GAAG,MAAM,GAAG,IAAI,CAIpH;AACD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa;;;;EAExD;AACD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,MAAM,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1G,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAC;IAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACjK,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CAClG,GAAG,gBAAgB,CAuDnB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAgBjF;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9D;AACD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,cAAc,CAEtH;AACD,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAsD"}
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/normalize.ts"],"names":[],"mappings":"AACA,OAAO,EACmB,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE3I,qBAAa,uCAAwC,SAAQ,KAAK;;CAEjE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,GAAE,SAAS,GAAG,cAA+B,GAAG,MAAM,GAAG,IAAI,CAIpH;AACD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa;;;;EAExD;AACD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,MAAM,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1G,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAC;IAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACjK,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;IACjG,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;CAC3D,GAAG,gBAAgB,CAwDnB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAgBjF;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9D;AACD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,cAAc,CAEtH;AACD,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAsD"}
@@ -74,5 +74,15 @@ export declare function parseClaudeSession(file: ConnectedFile, rows: Record<str
74
74
  machineId: string;
75
75
  sourceInstanceId: string;
76
76
  } | undefined;
77
+ repositoryContext?: {
78
+ schemaVersion: "openpond.connectedRepositoryContext.v1";
79
+ kind: "git";
80
+ commitHash: string;
81
+ branch: string | null;
82
+ recordedAt: string | null;
83
+ sourceFileHash: string;
84
+ metadataHash: string;
85
+ workingDirectoryHash?: string | undefined;
86
+ } | undefined;
77
87
  };
78
88
  //# sourceMappingURL=claude-code.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/claude-code.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCvG"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/claude-code.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCvG"}
@@ -0,0 +1,10 @@
1
+ /** Forked Codex rollouts retain their own header followed by ancestor headers.
2
+ * Only the declared, contiguous ancestry is metadata for that source. */
3
+ export declare class CodexMetadataChain {
4
+ metadata: Record<string, unknown> | null;
5
+ private parentId;
6
+ private closed;
7
+ private readonly ids;
8
+ accept(row: Record<string, unknown>): boolean;
9
+ }
10
+ //# sourceMappingURL=codex-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-metadata.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/codex-metadata.ts"],"names":[],"mappings":"AAAA;yEACyE;AACzE,qBAAa,kBAAkB;IAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAQ;IAChD,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IAEzC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;CAgB9C"}
@@ -74,5 +74,15 @@ export declare function parseCodexSession(file: ConnectedFile, rows: Record<stri
74
74
  machineId: string;
75
75
  sourceInstanceId: string;
76
76
  } | undefined;
77
+ repositoryContext?: {
78
+ schemaVersion: "openpond.connectedRepositoryContext.v1";
79
+ kind: "git";
80
+ commitHash: string;
81
+ branch: string | null;
82
+ recordedAt: string | null;
83
+ sourceFileHash: string;
84
+ metadataHash: string;
85
+ workingDirectoryHash?: string | undefined;
86
+ } | undefined;
77
87
  };
78
88
  //# sourceMappingURL=codex.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/codex.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKrE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmCrF"}
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/codex.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMrE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8CrF"}
@@ -75,5 +75,15 @@ export declare function parseGrokBuildSession(file: ConnectedFile, rows: Record<
75
75
  machineId: string;
76
76
  sourceInstanceId: string;
77
77
  } | undefined;
78
+ repositoryContext?: {
79
+ schemaVersion: "openpond.connectedRepositoryContext.v1";
80
+ kind: "git";
81
+ commitHash: string;
82
+ branch: string | null;
83
+ recordedAt: string | null;
84
+ sourceFileHash: string;
85
+ metadataHash: string;
86
+ workingDirectoryHash?: string | undefined;
87
+ } | undefined;
78
88
  };
79
89
  //# sourceMappingURL=grok-build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"grok-build.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/grok-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrE,uFAAuF;AACvF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4JhC"}
1
+ {"version":3,"file":"grok-build.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/grok-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrE,uFAAuF;AACvF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4JhC"}