@colophon-claims/verify 0.0.0 → 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.
Files changed (96) hide show
  1. package/README.md +39 -0
  2. package/dist/admission/application.d.ts +18 -0
  3. package/dist/admission/application.js +53 -0
  4. package/dist/admission/contracts.d.ts +506 -0
  5. package/dist/admission/contracts.js +459 -0
  6. package/dist/admission/index.d.ts +5 -0
  7. package/dist/admission/index.js +5 -0
  8. package/dist/admission/intake.d.ts +75 -0
  9. package/dist/admission/intake.js +70 -0
  10. package/dist/admission/result-evaluation.d.ts +18 -0
  11. package/dist/admission/result-evaluation.js +71 -0
  12. package/dist/admission/screening-sample.d.ts +56 -0
  13. package/dist/admission/screening-sample.js +126 -0
  14. package/dist/admission/verification.d.ts +102 -0
  15. package/dist/admission/verification.js +844 -0
  16. package/dist/anchor/check.d.ts +95 -0
  17. package/dist/anchor/check.js +146 -0
  18. package/dist/anchor/ports.d.ts +6 -0
  19. package/dist/anchor/ports.js +354 -0
  20. package/dist/assets.d.ts +33 -0
  21. package/dist/assets.js +885 -0
  22. package/dist/bin.d.ts +2 -0
  23. package/dist/bin.js +20 -0
  24. package/dist/cli.d.ts +14 -0
  25. package/dist/cli.js +205 -0
  26. package/dist/comparison.d.ts +64 -0
  27. package/dist/comparison.js +235 -0
  28. package/dist/index.d.ts +23 -0
  29. package/dist/index.js +23 -0
  30. package/dist/manifest.d.ts +54 -0
  31. package/dist/manifest.js +240 -0
  32. package/dist/materialize.d.ts +4 -0
  33. package/dist/materialize.js +13 -0
  34. package/dist/profile/admission-receipts.d.ts +11 -0
  35. package/dist/profile/admission-receipts.js +24 -0
  36. package/dist/profile/anchor-claims.d.ts +157 -0
  37. package/dist/profile/anchor-claims.js +330 -0
  38. package/dist/profile/artifacts.d.ts +261 -0
  39. package/dist/profile/artifacts.js +139 -0
  40. package/dist/profile/assembly-ports.d.ts +19 -0
  41. package/dist/profile/assembly-ports.js +42 -0
  42. package/dist/profile/binary-judge-manifest.d.ts +121 -0
  43. package/dist/profile/binary-judge-manifest.js +106 -0
  44. package/dist/profile/binary-qualification.d.ts +9 -0
  45. package/dist/profile/binary-qualification.js +58 -0
  46. package/dist/profile/branding-assets.d.ts +5 -0
  47. package/dist/profile/branding-assets.js +5 -0
  48. package/dist/profile/branding.d.ts +24 -0
  49. package/dist/profile/branding.js +14 -0
  50. package/dist/profile/claim-consistency.d.ts +26 -0
  51. package/dist/profile/claim-consistency.js +91 -0
  52. package/dist/profile/claim.d.ts +327 -0
  53. package/dist/profile/claim.js +742 -0
  54. package/dist/profile/errors.d.ts +49 -0
  55. package/dist/profile/errors.js +78 -0
  56. package/dist/profile/inspect-assurance.d.ts +16 -0
  57. package/dist/profile/inspect-assurance.js +30 -0
  58. package/dist/profile/inspect-disclosure.d.ts +28 -0
  59. package/dist/profile/inspect-disclosure.js +54 -0
  60. package/dist/profile/inspect-manifest.d.ts +706 -0
  61. package/dist/profile/inspect-manifest.js +397 -0
  62. package/dist/profile/isolation.d.ts +21 -0
  63. package/dist/profile/isolation.js +31 -0
  64. package/dist/profile/pinning-evidence.d.ts +41 -0
  65. package/dist/profile/pinning-evidence.js +43 -0
  66. package/dist/profile/ports.d.ts +3 -0
  67. package/dist/profile/ports.js +11 -0
  68. package/dist/profile/preview-log.d.ts +4 -0
  69. package/dist/profile/preview-log.js +3 -0
  70. package/dist/profile/run-results.d.ts +17 -0
  71. package/dist/profile/run-results.js +23 -0
  72. package/dist/profile/signing.d.ts +10 -0
  73. package/dist/profile/signing.js +46 -0
  74. package/dist/profile/trust.d.ts +13 -0
  75. package/dist/profile/trust.js +35 -0
  76. package/dist/profile/venue.d.ts +2 -0
  77. package/dist/profile/venue.js +2 -0
  78. package/dist/profile/verdict.d.ts +28 -0
  79. package/dist/profile/verdict.js +51 -0
  80. package/dist/reader-instructions.d.ts +41 -0
  81. package/dist/reader-instructions.js +52 -0
  82. package/dist/schema.d.ts +380 -0
  83. package/dist/schema.js +498 -0
  84. package/dist/verify.d.ts +72 -0
  85. package/dist/verify.js +1573 -0
  86. package/dist/version.d.ts +2 -0
  87. package/dist/version.js +2 -0
  88. package/package.json +63 -3
  89. package/schemas/assembly-row.schema.json +194 -0
  90. package/schemas/bundle-manifest.schema.json +23 -0
  91. package/schemas/claim-package.schema.json +279 -0
  92. package/schemas/dsse-envelope.schema.json +25 -0
  93. package/schemas/evidence-catalog.schema.json +43 -0
  94. package/schemas/public-trust.schema.json +44 -0
  95. package/schemas/verdict-catalog.schema.json +27 -0
  96. package/scripts/external-verify.py +238 -0
@@ -0,0 +1,2 @@
1
+ /** Public verifier release line. Kept in one module for output and bundle instructions. */
2
+ export declare const VERIFIER_VERSION: "0.2.0";
@@ -0,0 +1,2 @@
1
+ /** Public verifier release line. Kept in one module for output and bundle instructions. */
2
+ export const VERIFIER_VERSION = "0.2.0";
package/package.json CHANGED
@@ -1,14 +1,74 @@
1
1
  {
2
2
  "name": "@colophon-claims/verify",
3
- "version": "0.0.0",
4
- "description": "Bootstrap placeholder. The first Colophon verifier cut is 2.0.0 from GitHub Actions.",
3
+ "version": "0.2.0",
4
+ "description": "Standalone public-bundle verifier for Colophon claims.",
5
+ "type": "module",
6
+ "engines": {
7
+ "node": ">=22"
8
+ },
5
9
  "license": "MIT",
6
10
  "repository": {
7
11
  "type": "git",
8
12
  "url": "https://github.com/Jinn-Network/mono.git",
9
13
  "directory": "packages/benchmark-product/verify"
10
14
  },
15
+ "main": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "import": "./dist/index.js",
20
+ "types": "./dist/index.d.ts"
21
+ },
22
+ "./admission": {
23
+ "import": "./dist/admission/index.js",
24
+ "types": "./dist/admission/index.d.ts"
25
+ }
26
+ },
27
+ "bin": {
28
+ "colophon-verify": "./dist/bin.js"
29
+ },
30
+ "files": [
31
+ "dist/",
32
+ "schemas/",
33
+ "scripts/external-verify.py",
34
+ "README.md"
35
+ ],
11
36
  "publishConfig": {
12
37
  "access": "public"
13
- }
38
+ },
39
+ "scripts": {
40
+ "build": "tsc -p tsconfig.build.json",
41
+ "typecheck": "tsc --noEmit -p tsconfig.json",
42
+ "test": "yarn build && node --test test/*.test.mjs && vitest run",
43
+ "pack:smoke": "node scripts/pack-smoke.mjs",
44
+ "prepack": "npm run build"
45
+ },
46
+ "dependencies": {
47
+ "@fontsource-variable/newsreader": "5.3.0",
48
+ "@fontsource-variable/public-sans": "5.3.0",
49
+ "@fontsource/ibm-plex-mono": "5.3.0",
50
+ "@jinn-network/benchmarking-aggregate": "0.1.0-canary.sha.e00b2fc47fc5635b007eb349fb1e41aa81bb3c50",
51
+ "@jinn-network/benchmarking-evidence": "0.1.0-canary.sha.e00b2fc47fc5635b007eb349fb1e41aa81bb3c50",
52
+ "@jinn-network/benchmarking-interop": "0.1.0-canary.sha.e00b2fc47fc5635b007eb349fb1e41aa81bb3c50",
53
+ "@jinn-network/benchmarking-local": "0.1.0-canary.sha.e00b2fc47fc5635b007eb349fb1e41aa81bb3c50",
54
+ "@jinn-network/benchmarking-protocol": "0.1.0-canary.sha.e00b2fc47fc5635b007eb349fb1e41aa81bb3c50",
55
+ "@jinn-network/benchmarking-records": "0.1.0-canary.sha.e00b2fc47fc5635b007eb349fb1e41aa81bb3c50",
56
+ "@jinn-network/benchmarking-run": "0.1.0-canary.sha.e00b2fc47fc5635b007eb349fb1e41aa81bb3c50",
57
+ "@jinn-network/task-admission": "0.1.0-canary.sha.e00b2fc47fc5635b007eb349fb1e41aa81bb3c50",
58
+ "@jinn-network/task-execution-profiles": "0.1.0-canary.sha.e00b2fc47fc5635b007eb349fb1e41aa81bb3c50",
59
+ "@jinn-network/task-execution-protocol": "0.1.0-canary.sha.e00b2fc47fc5635b007eb349fb1e41aa81bb3c50",
60
+ "@jinn-network/trust-core": "0.1.0-canary.sha.e00b2fc47fc5635b007eb349fb1e41aa81bb3c50",
61
+ "zod": "4.4.3"
62
+ },
63
+ "resolutions": {
64
+ "@noble/hashes": "2.2.0"
65
+ },
66
+ "devDependencies": {
67
+ "@jinn-network/trust-testing": "0.1.0-canary.sha.e00b2fc47fc5635b007eb349fb1e41aa81bb3c50",
68
+ "@types/node": "^22.0.0",
69
+ "ajv": "8.17.1",
70
+ "typescript": "^5.9.3",
71
+ "vitest": "^4.1.8"
72
+ },
73
+ "gitHead": "892a10067cc653d4971b22d77aea716b617ef2d6"
14
74
  }
@@ -0,0 +1,194 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$comment": "Describes one row of verification/assembly.jsonl (format benchmark-product-assembly/2): the first row is the run header, every following row is one matrix cell. Source of truth: BundleAssemblyHeaderSchema and BundleAssemblyCellSchema in @colophon-claims/verify src/schema.ts (open objects there, so unknown members are permitted here). The verifier additionally requires each row to be canonical JSON, cellKeys to be unique, and the graph edges to close exactly against the content-addressed records, the matrix, and the verdict catalog.",
4
+ "description": "One JSONL row of a benchmark-product public bundle's verification assembly.",
5
+ "oneOf": [
6
+ { "$ref": "#/$defs/header" },
7
+ { "$ref": "#/$defs/cell" }
8
+ ],
9
+ "$defs": {
10
+ "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
11
+ "namedOutput": {
12
+ "type": "object",
13
+ "properties": {
14
+ "name": { "type": "string" },
15
+ "sha256": { "$ref": "#/$defs/sha256" }
16
+ },
17
+ "required": ["name", "sha256"]
18
+ },
19
+ "verdict": {
20
+ "type": "object",
21
+ "properties": {
22
+ "sha256": { "$ref": "#/$defs/sha256" },
23
+ "relationship": { "enum": ["same-execution-scorer", "separate-log-verifier"] },
24
+ "evalTaskSha256": { "$ref": "#/$defs/sha256" },
25
+ "evalSubmissionSha256": { "$ref": "#/$defs/sha256" },
26
+ "evalDeliverySha256": { "$ref": "#/$defs/sha256" },
27
+ "evalAttempt": { "type": "string", "minLength": 1 },
28
+ "evalIndex": { "type": "integer", "minimum": 1 },
29
+ "evaluator": { "type": "string", "minLength": 1 },
30
+ "verdict": { "enum": ["pass", "fail", "inconclusive"] },
31
+ "evaluationSpecSha256": { "$ref": "#/$defs/sha256" },
32
+ "measurements": {
33
+ "type": "object",
34
+ "additionalProperties": { "type": ["string", "number", "boolean"] }
35
+ }
36
+ },
37
+ "required": ["sha256", "evalIndex", "evaluator", "verdict", "evaluationSpecSha256", "measurements"]
38
+ },
39
+ "header": {
40
+ "type": "object",
41
+ "properties": {
42
+ "format": { "const": "benchmark-product-assembly/2" },
43
+ "kind": { "const": "run" },
44
+ "runCancelled": { "type": "boolean" },
45
+ "draftId": { "type": "string", "minLength": 1 },
46
+ "assurancePreset": { "type": "string", "minLength": 1 },
47
+ "rehearsal": {
48
+ "type": "object",
49
+ "properties": {
50
+ "previewCount": { "type": "integer", "minimum": 1 },
51
+ "timestamps": {
52
+ "type": "array",
53
+ "items": { "type": "string", "format": "date-time" },
54
+ "minItems": 1
55
+ }
56
+ },
57
+ "required": ["previewCount", "timestamps"]
58
+ },
59
+ "graph": {
60
+ "type": "object",
61
+ "properties": {
62
+ "admissions": {
63
+ "type": "array",
64
+ "items": {
65
+ "type": "object",
66
+ "properties": {
67
+ "taskSha256": { "$ref": "#/$defs/sha256" },
68
+ "receiptSha256": { "$ref": "#/$defs/sha256" }
69
+ },
70
+ "required": ["taskSha256", "receiptSha256"]
71
+ }
72
+ },
73
+ "solveSubmissions": {
74
+ "type": "array",
75
+ "items": {
76
+ "type": "object",
77
+ "properties": {
78
+ "cellKey": { "type": "string", "minLength": 1 },
79
+ "dispatch": { "type": "integer", "minimum": 1 },
80
+ "sha256": { "$ref": "#/$defs/sha256" },
81
+ "pinningEvidenceSha256": { "$ref": "#/$defs/sha256" }
82
+ },
83
+ "required": ["cellKey", "dispatch", "sha256"]
84
+ }
85
+ },
86
+ "evaluationSubmissions": {
87
+ "type": "array",
88
+ "items": {
89
+ "type": "object",
90
+ "properties": {
91
+ "cellKey": { "type": "string", "minLength": 1 },
92
+ "dispatch": { "type": "integer", "minimum": 1 },
93
+ "evalIndex": { "type": "integer", "minimum": 1 },
94
+ "evaluationAttempt": { "type": "integer", "minimum": 1 },
95
+ "evaluator": { "type": "string", "minLength": 1 },
96
+ "evalTaskSha256": { "$ref": "#/$defs/sha256" },
97
+ "sha256": { "$ref": "#/$defs/sha256" }
98
+ },
99
+ "required": ["cellKey", "dispatch", "evalIndex", "evaluator", "evalTaskSha256", "sha256"]
100
+ }
101
+ },
102
+ "solveDeliveries": {
103
+ "type": "array",
104
+ "items": {
105
+ "type": "object",
106
+ "properties": {
107
+ "cellKey": { "type": "string", "minLength": 1 },
108
+ "dispatch": { "type": "integer", "minimum": 1 },
109
+ "attempt": { "type": "string", "minLength": 1 },
110
+ "sha256": { "$ref": "#/$defs/sha256" },
111
+ "outputs": { "type": "array", "items": { "$ref": "#/$defs/namedOutput" } }
112
+ },
113
+ "required": ["cellKey", "dispatch", "attempt", "sha256", "outputs"]
114
+ }
115
+ },
116
+ "evaluations": {
117
+ "type": "array",
118
+ "items": {
119
+ "type": "object",
120
+ "properties": {
121
+ "cellKey": { "type": "string", "minLength": 1 },
122
+ "evalIndex": { "type": "integer", "minimum": 1 },
123
+ "evaluationAttempt": { "type": "integer", "minimum": 1 },
124
+ "relationship": { "enum": ["same-execution-scorer", "separate-log-verifier"] },
125
+ "evaluator": { "type": "string" },
126
+ "evalTaskSha256": { "$ref": "#/$defs/sha256" },
127
+ "evalSubmissionSha256": { "$ref": "#/$defs/sha256" },
128
+ "evalAttempt": { "type": "string" },
129
+ "evalDeliverySha256": { "$ref": "#/$defs/sha256" },
130
+ "verdictSha256": { "$ref": "#/$defs/sha256" },
131
+ "evaluationTerminal": { "const": "could-not-grade" },
132
+ "failureCategory": { "type": "string", "minLength": 1 }
133
+ },
134
+ "required": ["cellKey", "evalIndex"]
135
+ }
136
+ },
137
+ "evaluationRetries": {
138
+ "type": "array",
139
+ "items": {
140
+ "type": "object",
141
+ "properties": {
142
+ "cellKey": { "type": "string", "minLength": 1 },
143
+ "dispatch": { "type": "integer", "minimum": 1 },
144
+ "evalIndex": { "type": "integer", "minimum": 1 },
145
+ "evaluationAttempt": { "type": "integer", "minimum": 1 },
146
+ "evaluator": { "type": "string", "minLength": 1 },
147
+ "evalTaskSha256": { "$ref": "#/$defs/sha256" },
148
+ "evalSubmissionSha256": { "$ref": "#/$defs/sha256" },
149
+ "evalAttempt": { "type": "string", "minLength": 1 },
150
+ "failureCategory": { "type": "string", "minLength": 1 },
151
+ "recoveryAdvice": { "const": "new-attempt-required" },
152
+ "detail": { "type": "string", "minLength": 1 }
153
+ },
154
+ "required": ["cellKey", "dispatch", "evalIndex", "evaluationAttempt", "evaluator", "failureCategory", "recoveryAdvice", "detail"]
155
+ }
156
+ }
157
+ },
158
+ "required": ["admissions", "solveSubmissions", "evaluationSubmissions", "solveDeliveries", "evaluations"]
159
+ }
160
+ },
161
+ "required": ["format", "kind", "runCancelled", "draftId", "assurancePreset", "graph"]
162
+ },
163
+ "cell": {
164
+ "type": "object",
165
+ "properties": {
166
+ "kind": { "const": "cell" },
167
+ "cellKey": { "type": "string", "minLength": 1 },
168
+ "armId": { "type": "string", "minLength": 1 },
169
+ "replicate": { "type": "integer", "minimum": 1 },
170
+ "taskDigest": { "$ref": "#/$defs/sha256" },
171
+ "dispatches": { "type": "integer", "minimum": 0 },
172
+ "accounted": { "type": "integer", "minimum": 1 },
173
+ "submissionSha256": { "$ref": "#/$defs/sha256" },
174
+ "pinningEvidenceSha256": { "$ref": "#/$defs/sha256" },
175
+ "attempt": { "type": "string", "minLength": 1 },
176
+ "deliverySha256": { "$ref": "#/$defs/sha256" },
177
+ "solveOutputs": { "type": "array", "items": { "$ref": "#/$defs/namedOutput" } },
178
+ "evaluationSpecSha256": { "$ref": "#/$defs/sha256" },
179
+ "evaluationTerminal": { "const": "could-not-grade" },
180
+ "admission": {
181
+ "type": "object",
182
+ "properties": {
183
+ "zeroReplayVariance": { "type": "boolean" },
184
+ "externalCapabilities": { "type": "boolean" }
185
+ },
186
+ "required": ["zeroReplayVariance", "externalCapabilities"]
187
+ },
188
+ "admissionReceiptSha256": { "$ref": "#/$defs/sha256" },
189
+ "verdicts": { "type": "array", "items": { "$ref": "#/$defs/verdict" } }
190
+ },
191
+ "required": ["kind", "cellKey", "armId", "replicate", "taskDigest", "dispatches", "verdicts"]
192
+ }
193
+ }
194
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$comment": "Describes bundle.json for the benchmark-product-public-bundle/2 format. Source of truth: BundleManifestSchema in @colophon-claims/verify src/manifest.ts, a union of this legacy shape (an open object, so unknown members are permitted here) and the evidence-native v5 manifest; the v4 and v5 bundle formats are outside this schema's scope. Structural validity only: the verifier additionally requires canonical JSON bytes, entries sorted strictly by path, per-file byte and digest equality, path-safety and symlink refusal, and two-way tree closure. bundle.json never lists itself; the bundle identity is the SHA-256 of bundle.json's own bytes.",
4
+ "description": "File manifest of a benchmark-product public bundle (format benchmark-product-public-bundle/2).",
5
+ "type": "object",
6
+ "properties": {
7
+ "format": { "const": "benchmark-product-public-bundle/2" },
8
+ "files": {
9
+ "type": "array",
10
+ "minItems": 1,
11
+ "items": {
12
+ "type": "object",
13
+ "properties": {
14
+ "bytes": { "type": "integer", "minimum": 0 },
15
+ "path": { "type": "string", "minLength": 1 },
16
+ "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
17
+ },
18
+ "required": ["bytes", "path", "sha256"]
19
+ }
20
+ }
21
+ },
22
+ "required": ["format", "files"]
23
+ }
@@ -0,0 +1,279 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$comment": "Describes claim-package.json (claimSchema benchmark-product.claim-package/1, or /2 for binary-qualification bundles). Source of truth: ClaimPackageWireSchema in @colophon-claims/verify src/profile/claim.ts (an open object there, so unknown members are permitted here). Every number is extracted verbatim from the sealed records the claim cites, never recomputed; the verifier rebuilds the whole package from verified facts and byte-compares it, so schema validity never substitutes for that recomputation. A claim carries exactly one method projection -- the wilson headline, the paired-delta comparison, pairwise-disagreement's panel, paired-majority-delta's contrast, or binary-instrument's qualification -- never neither.",
4
+ "description": "Standalone claim package of a benchmark-product public bundle.",
5
+ "type": "object",
6
+ "properties": {
7
+ "claimSchema": {
8
+ "enum": ["benchmark-product.claim-package/1", "benchmark-product.claim-package/2"]
9
+ },
10
+ "scope": {
11
+ "type": "object",
12
+ "properties": {
13
+ "draftId": { "type": "string", "minLength": 1 },
14
+ "benchmarkSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
15
+ "taskCount": { "type": "integer", "minimum": 0 },
16
+ "arms": {
17
+ "type": "array",
18
+ "items": {
19
+ "type": "object",
20
+ "properties": {
21
+ "armId": { "type": "string", "minLength": 1 },
22
+ "pinning": { "type": "object" }
23
+ },
24
+ "required": ["armId", "pinning"]
25
+ }
26
+ },
27
+ "replicates": { "type": "integer", "minimum": 1 },
28
+ "venue": { "const": "self-run" }
29
+ },
30
+ "required": ["draftId", "benchmarkSha256", "taskCount", "arms", "replicates", "venue"]
31
+ },
32
+ "records": {
33
+ "type": "object",
34
+ "properties": {
35
+ "benchmarkSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
36
+ "runSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
37
+ "matrixSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
38
+ "reportSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
39
+ "reportEnvelopeSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
40
+ },
41
+ "required": ["benchmarkSha256", "runSha256", "matrixSha256", "reportSha256", "reportEnvelopeSha256"]
42
+ },
43
+ "method": {
44
+ "type": "object",
45
+ "properties": {
46
+ "id": { "type": "string", "minLength": 1 },
47
+ "version": { "type": "string", "minLength": 1 },
48
+ "parameters": { "type": "object" },
49
+ "preregistered": { "type": "boolean" }
50
+ },
51
+ "required": ["id", "version", "parameters", "preregistered"]
52
+ },
53
+ "results": {},
54
+ "headline": {
55
+ "type": "object",
56
+ "additionalProperties": {
57
+ "type": "object",
58
+ "properties": {
59
+ "n": { "type": "integer", "minimum": 0 },
60
+ "passRate": { "type": "string" },
61
+ "wilsonInterval": {
62
+ "type": "object",
63
+ "properties": {
64
+ "low": { "type": "string" },
65
+ "high": { "type": "string" }
66
+ },
67
+ "required": ["low", "high"]
68
+ }
69
+ },
70
+ "required": ["n", "passRate", "wilsonInterval"]
71
+ }
72
+ },
73
+ "comparison": {
74
+ "type": "object",
75
+ "properties": {
76
+ "pairs": { "type": "integer", "minimum": 0 },
77
+ "delta": { "type": ["string", "null"] },
78
+ "interval": {
79
+ "type": ["object", "null"],
80
+ "properties": {
81
+ "alpha": { "type": "string" },
82
+ "low": { "type": "string" },
83
+ "high": { "type": "string" }
84
+ },
85
+ "required": ["alpha", "low", "high"]
86
+ },
87
+ "reasons": { "type": "array", "items": { "type": "string" } },
88
+ "pairing": {
89
+ "type": "object",
90
+ "properties": { "taskDigests": { "type": "array", "items": { "type": "string" } } },
91
+ "required": ["taskDigests"]
92
+ },
93
+ "clustering": {
94
+ "type": "object",
95
+ "properties": {
96
+ "basis": { "type": "string" },
97
+ "clusters": { "type": "integer", "minimum": 0 }
98
+ },
99
+ "required": ["basis", "clusters"]
100
+ },
101
+ "excluded": { "$ref": "#/$defs/conflicted" },
102
+ "conflicted": { "$ref": "#/$defs/conflicted" },
103
+ "bootstrap": {}
104
+ },
105
+ "required": ["pairs", "delta", "interval", "reasons", "pairing", "clustering", "excluded", "conflicted"]
106
+ },
107
+ "completeness": {},
108
+ "attrition": {},
109
+ "conflicted": { "$ref": "#/$defs/conflicted" },
110
+ "assurance": {
111
+ "type": "object",
112
+ "properties": {
113
+ "preset": { "type": "string", "minLength": 1 },
114
+ "resolved": {
115
+ "type": "object",
116
+ "properties": {
117
+ "independence": { "enum": ["gating", "disclosed"] },
118
+ "minVerdicts": { "type": "integer", "minimum": 1 },
119
+ "distinctEvaluator": { "type": "boolean" },
120
+ "verdictRule": { "enum": ["sole", "majority", "unanimous"] }
121
+ },
122
+ "required": ["independence", "minVerdicts", "distinctEvaluator", "verdictRule"]
123
+ },
124
+ "disclosure": { "type": "string", "minLength": 1 }
125
+ },
126
+ "required": ["preset", "resolved", "disclosure"]
127
+ },
128
+ "disclosures": {
129
+ "type": "object",
130
+ "properties": {
131
+ "perSubject": { "type": "array" },
132
+ "integrityTierCounts": {
133
+ "type": "object",
134
+ "properties": {
135
+ "re-derivable": { "type": "integer", "minimum": 0 },
136
+ "attested-only": { "type": "integer", "minimum": 0 }
137
+ },
138
+ "required": ["re-derivable", "attested-only"]
139
+ },
140
+ "pinningUnverifiableCounts": {
141
+ "type": "object",
142
+ "properties": {
143
+ "harness": { "type": "integer", "minimum": 0 },
144
+ "model": { "type": "integer", "minimum": 0 },
145
+ "loadout": { "type": "integer", "minimum": 0 },
146
+ "isolation": { "type": "integer", "minimum": 0 }
147
+ },
148
+ "required": ["harness", "model", "loadout", "isolation"]
149
+ }
150
+ },
151
+ "required": ["perSubject", "integrityTierCounts", "pinningUnverifiableCounts"]
152
+ },
153
+ "limitations": { "type": "array", "items": { "type": "string" } },
154
+ "venueHonesty": {},
155
+ "verification": {
156
+ "type": "object",
157
+ "properties": {
158
+ "command": { "type": "string", "minLength": 1 },
159
+ "compatibleCommand": { "type": "string", "minLength": 1 },
160
+ "checks": {
161
+ "type": "array",
162
+ "items": { "type": "string", "minLength": 1 },
163
+ "minItems": 1
164
+ },
165
+ "trustRoot": { "type": "string", "minLength": 1 }
166
+ },
167
+ "required": ["command", "compatibleCommand", "checks", "trustRoot"]
168
+ },
169
+ "rehearsal": {
170
+ "type": "object",
171
+ "properties": {
172
+ "previewCount": { "type": "integer", "minimum": 1 },
173
+ "timestamps": {
174
+ "type": "array",
175
+ "items": { "type": "string", "format": "date-time" },
176
+ "minItems": 1
177
+ }
178
+ },
179
+ "required": ["previewCount", "timestamps"]
180
+ },
181
+ "qualification": {},
182
+ "pairwiseDisagreement": {
183
+ "type": "object",
184
+ "properties": {
185
+ "pairs": {
186
+ "type": "array",
187
+ "items": {
188
+ "type": "object",
189
+ "properties": {
190
+ "armA": { "type": "string", "minLength": 1 },
191
+ "armB": { "type": "string", "minLength": 1 },
192
+ "n": { "type": "integer", "minimum": 0 },
193
+ "disagreements": { "type": "integer", "minimum": 0 },
194
+ "rate": { "type": ["string", "null"] },
195
+ "interval": { "$ref": "#/$defs/judgeInterval" },
196
+ "byCandidateClass": { "type": "array", "items": { "type": "object" } },
197
+ "byStratum": { "type": "array", "items": { "type": "object" } },
198
+ "exclusions": { "type": "array", "items": { "$ref": "#/$defs/exclusionTriple" } }
199
+ },
200
+ "required": ["armA", "armB", "n", "disagreements", "rate", "interval", "byCandidateClass", "byStratum", "exclusions"]
201
+ }
202
+ },
203
+ "conflicted": { "$ref": "#/$defs/conflicted" }
204
+ },
205
+ "required": ["pairs", "conflicted"]
206
+ },
207
+ "pairedMajorityDelta": {
208
+ "type": "object",
209
+ "properties": {
210
+ "baseline": { "type": "string", "minLength": 1 },
211
+ "candidate": { "type": "string", "minLength": 1 },
212
+ "n": { "type": "integer", "minimum": 0 },
213
+ "delta": { "type": ["string", "null"] },
214
+ "interval": { "$ref": "#/$defs/judgeInterval" },
215
+ "reasons": { "type": "array", "items": { "type": "string" } },
216
+ "clusters": {
217
+ "type": "object",
218
+ "properties": { "count": { "type": "integer", "minimum": 0 }, "manifest": {} },
219
+ "required": ["count"]
220
+ },
221
+ "byCandidateClass": { "type": "array", "items": { "type": "object" } },
222
+ "byStratum": { "type": "array", "items": { "type": "object" } },
223
+ "exclusions": { "type": "array", "items": { "$ref": "#/$defs/exclusionTriple" } },
224
+ "conflicted": { "$ref": "#/$defs/conflicted" }
225
+ },
226
+ "required": ["baseline", "candidate", "n", "delta", "interval", "reasons", "clusters", "byCandidateClass", "byStratum", "exclusions", "conflicted"]
227
+ }
228
+ },
229
+ "required": [
230
+ "claimSchema",
231
+ "scope",
232
+ "records",
233
+ "method",
234
+ "results",
235
+ "completeness",
236
+ "attrition",
237
+ "conflicted",
238
+ "assurance",
239
+ "disclosures",
240
+ "limitations",
241
+ "venueHonesty",
242
+ "verification"
243
+ ],
244
+ "anyOf": [
245
+ { "required": ["headline"] },
246
+ { "required": ["comparison"] },
247
+ { "required": ["pairwiseDisagreement"] },
248
+ { "required": ["pairedMajorityDelta"] }
249
+ ],
250
+ "$defs": {
251
+ "judgeInterval": {
252
+ "$comment": "pairwise-disagreement@1 and paired-majority-delta@1 key their intervals {lower, upper, alpha}, NOT paired-delta@1's {low, high, alpha}.",
253
+ "type": ["object", "null"],
254
+ "properties": {
255
+ "lower": { "type": "string" },
256
+ "upper": { "type": "string" },
257
+ "alpha": { "type": "string" }
258
+ },
259
+ "required": ["lower", "upper", "alpha"]
260
+ },
261
+ "exclusionTriple": {
262
+ "type": "object",
263
+ "properties": {
264
+ "taskDigest": { "type": "string", "minLength": 1 },
265
+ "armId": { "type": "string", "minLength": 1 },
266
+ "reason": { "type": "string", "minLength": 1 }
267
+ },
268
+ "required": ["taskDigest", "armId", "reason"]
269
+ },
270
+ "conflicted": {
271
+ "type": "object",
272
+ "properties": {
273
+ "count": { "type": "integer", "minimum": 0 },
274
+ "cellKeys": { "type": "array", "items": { "type": "string" } }
275
+ },
276
+ "required": ["count", "cellKeys"]
277
+ }
278
+ }
279
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$comment": "Describes the DSSE v1 envelopes a public bundle carries: report-envelope.json (payloadType application/vnd.jinn.benchmarking.report.v1+json; its decoded payload is byte-identical to report.json) and every verdict record (payloadType application/vnd.in-toto+json over an in-toto Statement v1). Source of truth: parseExactDsseEnvelope in @jinn-network/trust-core src/dsse.ts, which admits exactly these three members. Signatures are Ed25519 over the DSSE pre-authentication encoding 'DSSEv1 ' || len(payloadType) || ' ' || payloadType || ' ' || len(payload) || ' ' || payload (lengths as ASCII decimals, payload as raw decoded bytes). See https://github.com/secure-systems-lab/dsse.",
4
+ "description": "DSSE v1 signature envelope as carried by benchmark-product public bundles.",
5
+ "type": "object",
6
+ "properties": {
7
+ "payload": { "type": "string", "contentEncoding": "base64", "minLength": 1 },
8
+ "payloadType": { "type": "string", "minLength": 1 },
9
+ "signatures": {
10
+ "type": "array",
11
+ "minItems": 1,
12
+ "items": {
13
+ "type": "object",
14
+ "properties": {
15
+ "keyid": { "type": "string" },
16
+ "sig": { "type": "string", "contentEncoding": "base64", "minLength": 1 }
17
+ },
18
+ "required": ["sig"],
19
+ "additionalProperties": false
20
+ }
21
+ }
22
+ },
23
+ "required": ["payload", "payloadType", "signatures"],
24
+ "additionalProperties": false
25
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$comment": "Describes evidence.json, format benchmark-product-evidence-catalog/2. Source of truth: BundleEvidenceCatalogSchema in @colophon-claims/verify src/schema.ts (an open object there, so unknown members are permitted here). Every listed sha256 names records/<sha256>.bin, whose exact bytes re-hash to that digest. The verifier additionally requires canonical JSON bytes, unique digests, unique roles per record, and exact two-way closure between declared roles and the roles derived from the evidence graph.",
4
+ "description": "Content-addressed record catalog of a benchmark-product public bundle (format benchmark-product-evidence-catalog/2).",
5
+ "type": "object",
6
+ "properties": {
7
+ "format": { "const": "benchmark-product-evidence-catalog/2" },
8
+ "records": {
9
+ "type": "array",
10
+ "items": {
11
+ "type": "object",
12
+ "properties": {
13
+ "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
14
+ "roles": {
15
+ "type": "array",
16
+ "items": {
17
+ "enum": [
18
+ "task",
19
+ "runtime-selection",
20
+ "evaluation-spec",
21
+ "admission-receipt",
22
+ "solve-submission",
23
+ "run-pinning-evidence",
24
+ "evaluation-submission",
25
+ "solve-delivery",
26
+ "solve-output",
27
+ "evaluation-task",
28
+ "evaluation-delivery",
29
+ "verdict",
30
+ "judge-instrument",
31
+ "analysis-context",
32
+ "label-resolution"
33
+ ]
34
+ },
35
+ "minItems": 1
36
+ }
37
+ },
38
+ "required": ["sha256", "roles"]
39
+ }
40
+ }
41
+ },
42
+ "required": ["format", "records"]
43
+ }