@openpond/evals 0.11.8 → 0.11.10

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.
@@ -0,0 +1,179 @@
1
+ import { z } from "zod";
2
+ import { ImmutableReleaseRefSchema } from "@openpond/harness";
3
+ export declare const AcceptanceCheckSchema: z.ZodObject<{
4
+ id: z.ZodString;
5
+ name: z.ZodString;
6
+ required: z.ZodBoolean;
7
+ role: z.ZodOptional<z.ZodEnum<{
8
+ retention: "retention";
9
+ quality: "quality";
10
+ diagnostic: "diagnostic";
11
+ }>>;
12
+ unit: z.ZodOptional<z.ZodString>;
13
+ baselineReuse: z.ZodOptional<z.ZodObject<{
14
+ maximumAgeSeconds: z.ZodNumber;
15
+ qualification: z.ZodObject<{
16
+ id: z.ZodString;
17
+ contentHash: z.ZodString;
18
+ }, z.core.$strict>;
19
+ }, z.core.$strict>>;
20
+ dataset: z.ZodObject<{
21
+ id: z.ZodString;
22
+ contentHash: z.ZodString;
23
+ }, z.core.$strict>;
24
+ evaluator: z.ZodObject<{
25
+ id: z.ZodString;
26
+ contentHash: z.ZodString;
27
+ }, z.core.$strict>;
28
+ executionHash: z.ZodString;
29
+ populationHash: z.ZodString;
30
+ metric: z.ZodString;
31
+ direction: z.ZodEnum<{
32
+ higher: "higher";
33
+ lower: "lower";
34
+ }>;
35
+ minimumCoverage: z.ZodNumber;
36
+ threshold: z.ZodNumber;
37
+ maximumRegression: z.ZodNumber;
38
+ maximumSpendUsd: z.ZodNumber;
39
+ }, z.core.$strict>;
40
+ export declare const AcceptancePlanContentSchema: z.ZodObject<{
41
+ schemaVersion: z.ZodLiteral<"openpond.acceptancePlan.v1">;
42
+ id: z.ZodString;
43
+ revision: z.ZodNumber;
44
+ checks: z.ZodArray<z.ZodObject<{
45
+ id: z.ZodString;
46
+ name: z.ZodString;
47
+ required: z.ZodBoolean;
48
+ role: z.ZodOptional<z.ZodEnum<{
49
+ retention: "retention";
50
+ quality: "quality";
51
+ diagnostic: "diagnostic";
52
+ }>>;
53
+ unit: z.ZodOptional<z.ZodString>;
54
+ baselineReuse: z.ZodOptional<z.ZodObject<{
55
+ maximumAgeSeconds: z.ZodNumber;
56
+ qualification: z.ZodObject<{
57
+ id: z.ZodString;
58
+ contentHash: z.ZodString;
59
+ }, z.core.$strict>;
60
+ }, z.core.$strict>>;
61
+ dataset: z.ZodObject<{
62
+ id: z.ZodString;
63
+ contentHash: z.ZodString;
64
+ }, z.core.$strict>;
65
+ evaluator: z.ZodObject<{
66
+ id: z.ZodString;
67
+ contentHash: z.ZodString;
68
+ }, z.core.$strict>;
69
+ executionHash: z.ZodString;
70
+ populationHash: z.ZodString;
71
+ metric: z.ZodString;
72
+ direction: z.ZodEnum<{
73
+ higher: "higher";
74
+ lower: "lower";
75
+ }>;
76
+ minimumCoverage: z.ZodNumber;
77
+ threshold: z.ZodNumber;
78
+ maximumRegression: z.ZodNumber;
79
+ maximumSpendUsd: z.ZodNumber;
80
+ }, z.core.$strict>>;
81
+ maximumSpendUsd: z.ZodNumber;
82
+ }, z.core.$strict>;
83
+ export declare const AcceptancePlanSchema: z.ZodObject<{
84
+ schemaVersion: z.ZodLiteral<"openpond.acceptancePlan.v1">;
85
+ id: z.ZodString;
86
+ revision: z.ZodNumber;
87
+ checks: z.ZodArray<z.ZodObject<{
88
+ id: z.ZodString;
89
+ name: z.ZodString;
90
+ required: z.ZodBoolean;
91
+ role: z.ZodOptional<z.ZodEnum<{
92
+ retention: "retention";
93
+ quality: "quality";
94
+ diagnostic: "diagnostic";
95
+ }>>;
96
+ unit: z.ZodOptional<z.ZodString>;
97
+ baselineReuse: z.ZodOptional<z.ZodObject<{
98
+ maximumAgeSeconds: z.ZodNumber;
99
+ qualification: z.ZodObject<{
100
+ id: z.ZodString;
101
+ contentHash: z.ZodString;
102
+ }, z.core.$strict>;
103
+ }, z.core.$strict>>;
104
+ dataset: z.ZodObject<{
105
+ id: z.ZodString;
106
+ contentHash: z.ZodString;
107
+ }, z.core.$strict>;
108
+ evaluator: z.ZodObject<{
109
+ id: z.ZodString;
110
+ contentHash: z.ZodString;
111
+ }, z.core.$strict>;
112
+ executionHash: z.ZodString;
113
+ populationHash: z.ZodString;
114
+ metric: z.ZodString;
115
+ direction: z.ZodEnum<{
116
+ higher: "higher";
117
+ lower: "lower";
118
+ }>;
119
+ minimumCoverage: z.ZodNumber;
120
+ threshold: z.ZodNumber;
121
+ maximumRegression: z.ZodNumber;
122
+ maximumSpendUsd: z.ZodNumber;
123
+ }, z.core.$strict>>;
124
+ maximumSpendUsd: z.ZodNumber;
125
+ contentHash: z.ZodString;
126
+ }, z.core.$strict>;
127
+ export type AcceptancePlan = z.infer<typeof AcceptancePlanSchema>;
128
+ export declare function createAcceptancePlan(input: z.input<typeof AcceptancePlanContentSchema>): AcceptancePlan;
129
+ export declare const AcceptanceMeasurementSchema: z.ZodObject<{
130
+ runId: z.ZodString;
131
+ artifact: z.ZodObject<{
132
+ id: z.ZodString;
133
+ contentHash: z.ZodString;
134
+ }, z.core.$strict>;
135
+ checkHash: z.ZodString;
136
+ populationHash: z.ZodString;
137
+ scoredPopulationHash: z.ZodString;
138
+ executionHash: z.ZodString;
139
+ evaluator: z.ZodObject<{
140
+ id: z.ZodString;
141
+ contentHash: z.ZodString;
142
+ }, z.core.$strict>;
143
+ metric: z.ZodString;
144
+ expectedCount: z.ZodNumber;
145
+ scoredCount: z.ZodNumber;
146
+ score: z.ZodNullable<z.ZodNumber>;
147
+ status: z.ZodEnum<{
148
+ pending: "pending";
149
+ failed: "failed";
150
+ completed: "completed";
151
+ cancelled: "cancelled";
152
+ running: "running";
153
+ }>;
154
+ evidenceHash: z.ZodString;
155
+ }, z.core.$strict>;
156
+ export type AcceptanceMeasurement = z.infer<typeof AcceptanceMeasurementSchema>;
157
+ export type AcceptanceVerdict = {
158
+ passed: boolean;
159
+ checks: Array<{
160
+ id: string;
161
+ required: boolean;
162
+ state: "passed" | "failed" | "blocked";
163
+ reasons: string[];
164
+ delta: number | null;
165
+ }>;
166
+ };
167
+ /** Evaluates verified retained measurements, never browser-supplied scores.
168
+ * Hosts must load and verify the referenced receipts and authorize their scope. */
169
+ export declare function evaluateAcceptancePlan(input: {
170
+ plan: AcceptancePlan;
171
+ baseline: z.infer<typeof ImmutableReleaseRefSchema>;
172
+ candidate: z.infer<typeof ImmutableReleaseRefSchema>;
173
+ measurements: Array<{
174
+ checkId: string;
175
+ baseline: AcceptanceMeasurement | null;
176
+ candidate: AcceptanceMeasurement | null;
177
+ }>;
178
+ }): AcceptanceVerdict;
179
+ //# sourceMappingURL=acceptance-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acceptance-plan.d.ts","sourceRoot":"","sources":["../../../../../src/learning/acceptance-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkC,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAI9F,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAWhC,CAAC;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAQtC,CAAC;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAAgE,CAAC;AAClG,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,GAAG,cAAc,CAGvG;AACD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;kBAStC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,iBAAiB,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAEvL;mFACmF;AACnF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;IAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;IAChI,YAAY,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,qBAAqB,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CAC3H,GAAG,iBAAiB,CA6BpB"}
@@ -32,4 +32,6 @@ export * from "./schedule-worker.js";
32
32
  export * from "./nightly-schedule.js";
33
33
  export * from "./policy-inspection.js";
34
34
  export * from "./task-queue-inspection.js";
35
+ export * from "./acceptance-plan.js";
36
+ export * from "./acceptance-group.js";
35
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/learning/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/learning/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAE3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openpond/evals",
3
- "version": "0.11.8",
3
+ "version": "0.11.10",
4
4
  "description": "Portable Tasksets, graders, evaluation runs, receipts, conformance fixtures, and Work evidence for OpenPond Harnesses",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -147,7 +147,7 @@
147
147
  "test": "vitest run --root ../.. --config vitest.config.ts --project evals",
148
148
  "check:api": "tsx scripts/check-public-package.ts",
149
149
  "check:consumer": "tsx scripts/verify-packed-consumer.ts",
150
- "check": "pnpm run typecheck && pnpm run test && pnpm run build && pnpm run check:api && pnpm run check:consumer && npm pack --dry-run",
150
+ "check": "pnpm run build && pnpm run typecheck && pnpm run test && pnpm run check:api && pnpm run check:consumer && npm pack --dry-run",
151
151
  "publish:check": "pnpm run build && pnpm run check:api && pnpm run check:consumer && npm pack --dry-run"
152
152
  },
153
153
  "dependencies": {
@@ -0,0 +1,261 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "schemaVersion": {
6
+ "type": "string",
7
+ "const": "openpond.acceptanceGroupManifest.v1"
8
+ },
9
+ "id": {
10
+ "$ref": "#/$defs/__schema0"
11
+ },
12
+ "teamId": {
13
+ "$ref": "#/$defs/__schema0"
14
+ },
15
+ "trainingJob": {
16
+ "$ref": "#/$defs/__schema1"
17
+ },
18
+ "baseline": {
19
+ "$ref": "#/$defs/__schema1"
20
+ },
21
+ "candidate": {
22
+ "$ref": "#/$defs/__schema1"
23
+ },
24
+ "plan": {
25
+ "type": "object",
26
+ "properties": {
27
+ "schemaVersion": {
28
+ "type": "string",
29
+ "const": "openpond.acceptancePlan.v1"
30
+ },
31
+ "id": {
32
+ "$ref": "#/$defs/__schema2"
33
+ },
34
+ "revision": {
35
+ "type": "integer",
36
+ "exclusiveMinimum": 0,
37
+ "maximum": 9007199254740991
38
+ },
39
+ "checks": {
40
+ "minItems": 1,
41
+ "maxItems": 100,
42
+ "type": "array",
43
+ "items": {
44
+ "$ref": "#/$defs/__schema3"
45
+ }
46
+ },
47
+ "maximumSpendUsd": {
48
+ "type": "number",
49
+ "exclusiveMinimum": 0
50
+ },
51
+ "contentHash": {
52
+ "$ref": "#/$defs/__schema9"
53
+ }
54
+ },
55
+ "required": [
56
+ "schemaVersion",
57
+ "id",
58
+ "revision",
59
+ "checks",
60
+ "maximumSpendUsd",
61
+ "contentHash"
62
+ ],
63
+ "additionalProperties": false
64
+ },
65
+ "maximumParallelAttempts": {
66
+ "type": "integer",
67
+ "minimum": 1,
68
+ "maximum": 8
69
+ },
70
+ "createdAt": {
71
+ "type": "string",
72
+ "format": "date-time",
73
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
74
+ },
75
+ "contentHash": {
76
+ "type": "string",
77
+ "pattern": "^[a-f0-9]{64}$"
78
+ }
79
+ },
80
+ "required": [
81
+ "schemaVersion",
82
+ "id",
83
+ "teamId",
84
+ "trainingJob",
85
+ "baseline",
86
+ "candidate",
87
+ "plan",
88
+ "maximumParallelAttempts",
89
+ "createdAt",
90
+ "contentHash"
91
+ ],
92
+ "additionalProperties": false,
93
+ "$defs": {
94
+ "__schema0": {
95
+ "type": "string",
96
+ "minLength": 1,
97
+ "maxLength": 240
98
+ },
99
+ "__schema1": {
100
+ "type": "object",
101
+ "properties": {
102
+ "id": {
103
+ "type": "string",
104
+ "minLength": 1,
105
+ "maxLength": 240
106
+ },
107
+ "contentHash": {
108
+ "type": "string",
109
+ "pattern": "^[a-f0-9]{64}$"
110
+ }
111
+ },
112
+ "required": [
113
+ "id",
114
+ "contentHash"
115
+ ],
116
+ "additionalProperties": false
117
+ },
118
+ "__schema2": {
119
+ "type": "string",
120
+ "minLength": 1,
121
+ "maxLength": 240
122
+ },
123
+ "__schema3": {
124
+ "type": "object",
125
+ "properties": {
126
+ "id": {
127
+ "$ref": "#/$defs/__schema2"
128
+ },
129
+ "name": {
130
+ "$ref": "#/$defs/__schema4"
131
+ },
132
+ "required": {
133
+ "$ref": "#/$defs/__schema5"
134
+ },
135
+ "role": {
136
+ "$ref": "#/$defs/__schema6"
137
+ },
138
+ "unit": {
139
+ "$ref": "#/$defs/__schema7"
140
+ },
141
+ "baselineReuse": {
142
+ "$ref": "#/$defs/__schema8"
143
+ },
144
+ "dataset": {
145
+ "$ref": "#/$defs/__schema1"
146
+ },
147
+ "evaluator": {
148
+ "$ref": "#/$defs/__schema1"
149
+ },
150
+ "executionHash": {
151
+ "$ref": "#/$defs/__schema9"
152
+ },
153
+ "populationHash": {
154
+ "$ref": "#/$defs/__schema9"
155
+ },
156
+ "metric": {
157
+ "$ref": "#/$defs/__schema2"
158
+ },
159
+ "direction": {
160
+ "$ref": "#/$defs/__schema10"
161
+ },
162
+ "minimumCoverage": {
163
+ "$ref": "#/$defs/__schema11"
164
+ },
165
+ "threshold": {
166
+ "$ref": "#/$defs/__schema12"
167
+ },
168
+ "maximumRegression": {
169
+ "$ref": "#/$defs/__schema13"
170
+ },
171
+ "maximumSpendUsd": {
172
+ "$ref": "#/$defs/__schema14"
173
+ }
174
+ },
175
+ "required": [
176
+ "id",
177
+ "name",
178
+ "required",
179
+ "dataset",
180
+ "evaluator",
181
+ "executionHash",
182
+ "populationHash",
183
+ "metric",
184
+ "direction",
185
+ "minimumCoverage",
186
+ "threshold",
187
+ "maximumRegression",
188
+ "maximumSpendUsd"
189
+ ],
190
+ "additionalProperties": false
191
+ },
192
+ "__schema4": {
193
+ "type": "string",
194
+ "minLength": 1,
195
+ "maxLength": 200
196
+ },
197
+ "__schema5": {
198
+ "type": "boolean"
199
+ },
200
+ "__schema6": {
201
+ "type": "string",
202
+ "enum": [
203
+ "quality",
204
+ "retention",
205
+ "diagnostic"
206
+ ]
207
+ },
208
+ "__schema7": {
209
+ "type": "string",
210
+ "minLength": 1,
211
+ "maxLength": 80
212
+ },
213
+ "__schema8": {
214
+ "type": "object",
215
+ "properties": {
216
+ "maximumAgeSeconds": {
217
+ "type": "integer",
218
+ "exclusiveMinimum": 0,
219
+ "maximum": 31536000
220
+ },
221
+ "qualification": {
222
+ "$ref": "#/$defs/__schema1"
223
+ }
224
+ },
225
+ "required": [
226
+ "maximumAgeSeconds",
227
+ "qualification"
228
+ ],
229
+ "additionalProperties": false
230
+ },
231
+ "__schema9": {
232
+ "type": "string",
233
+ "pattern": "^[a-f0-9]{64}$"
234
+ },
235
+ "__schema10": {
236
+ "type": "string",
237
+ "enum": [
238
+ "higher",
239
+ "lower"
240
+ ]
241
+ },
242
+ "__schema11": {
243
+ "type": "number",
244
+ "exclusiveMinimum": 0,
245
+ "maximum": 1
246
+ },
247
+ "__schema12": {
248
+ "type": "number"
249
+ },
250
+ "__schema13": {
251
+ "type": "number",
252
+ "minimum": 0
253
+ },
254
+ "__schema14": {
255
+ "type": "number",
256
+ "exclusiveMinimum": 0
257
+ }
258
+ },
259
+ "$id": "urn:openpond:learning:v1:acceptance-group-manifest",
260
+ "$comment": "Generated from @openpond/evals. Cross-resource identity, authorization, idempotency, admission, grading and split constraints are enforced by the shared domain service in addition to this structural schema."
261
+ }