@sanning/proof 0.11.1 → 0.13.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 (51) hide show
  1. package/README.md +43 -8
  2. package/dist/agent-proof.d.ts +2 -2
  3. package/dist/agent-proof.js +4 -4
  4. package/dist/case-file.d.ts +126 -0
  5. package/dist/case-file.js +349 -0
  6. package/dist/case.d.ts +199 -43
  7. package/dist/case.js +522 -146
  8. package/dist/cli.d.ts +132 -1
  9. package/dist/cli.js +1140 -96
  10. package/dist/crypto.d.ts +1 -1
  11. package/dist/crypto.js +5 -1
  12. package/dist/declaration.d.ts +58 -52
  13. package/dist/declaration.js +256 -33
  14. package/dist/evidence.d.ts +2 -0
  15. package/dist/evidence.js +134 -19
  16. package/dist/exit-codes.d.ts +17 -0
  17. package/dist/exit-codes.js +50 -0
  18. package/dist/grading.d.ts +28 -13
  19. package/dist/grading.js +90 -31
  20. package/dist/handoff.d.ts +16 -1
  21. package/dist/handoff.js +91 -16
  22. package/dist/index.d.ts +10 -7
  23. package/dist/index.js +15 -7
  24. package/dist/message-parts.d.ts +11 -9
  25. package/dist/message-parts.js +11 -9
  26. package/dist/types.d.ts +1 -0
  27. package/dist/verifier.d.ts +9 -2
  28. package/dist/verifier.js +28 -12
  29. package/dist/zip-reader.d.ts +50 -0
  30. package/dist/zip-reader.js +220 -0
  31. package/package.json +2 -2
  32. package/src/agent-proof.ts +4 -4
  33. package/src/case-file.ts +419 -0
  34. package/src/case.ts +651 -156
  35. package/src/cli.ts +1325 -100
  36. package/src/crypto.ts +5 -1
  37. package/src/declaration.ts +248 -52
  38. package/src/evidence.ts +142 -21
  39. package/src/exit-codes.ts +54 -0
  40. package/src/grading.ts +109 -52
  41. package/src/handoff.ts +108 -17
  42. package/src/index.ts +60 -3
  43. package/src/message-parts.ts +11 -9
  44. package/src/types.ts +5 -0
  45. package/src/verifier.ts +35 -13
  46. package/src/zip-reader.ts +229 -0
  47. package/vectors/README.md +56 -3
  48. package/vectors/case-file-index.json +668 -0
  49. package/vectors/case-split.json +1102 -0
  50. package/vectors/pack-grading.json +68 -4
  51. package/vectors/stamp-on-chain.json +3 -3
@@ -0,0 +1,668 @@
1
+ {
2
+ "rule": "case-file-index",
3
+ "ruleVersion": 1,
4
+ "statement": "How a reader compares a case file's index, contents.json, with the folder it sits at the root of (evidence-bundle.md §5.6.3 v1.20, A25). The index is never an input to the case reading, and no finding here moves a verdict, a note, a contribution or an exit code. Findings come in this order: case_index_unreadable (and nothing else), case_index_pack_missing, case_index_pack_unlisted, case_index_file_missing, case_index_file_unlisted, case_index_file_differs, case_index_names_absent; within a kind by the UTF-8 bytes of the ref or path, and names_absent in the index's own order. Only files under a listed pack's folder or under report/ are reported as unlisted.",
5
+ "howToUse": "Call readCaseFileIndex / read_case_file_index with the bytes of index_hex (null: no index in the folder) and `files`, and compare the result with `expected`. A finding lists only the fields it carries.",
6
+ "rows": [
7
+ {
8
+ "id": "index-matches",
9
+ "why": "The honest index of an honest drop: every pack listed, every file listed with its hash, report/ listed. No findings. contents.json and HOW-TO-VERIFY.txt sit at the root, outside every pack and outside report/, and are not compared.",
10
+ "index_hex": "7b22616273656e74223a5b5d2c22636173655f6964223a22636173652d346231396465222c22636f6e74656e74735f76657273696f6e223a2273616e6e696e672e636173652d66696c652f7631222c227061636b73223a5b7b2266696c6573223a5b7b2270617468223a227061636b732f612f62756e646c652e6a736f6e222c22736861323536223a2263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463227d2c7b2270617468223a227061636b732f612f6c6f67732f782e6a736f6e222c22736861323536223a2235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232227d5d2c22726566223a2261227d2c7b2266696c6573223a5b7b2270617468223a227061636b732f622f62756e646c652e6a736f6e222c22736861323536223a2230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365227d5d2c22726566223a2262227d5d2c227265706f7274223a5b7b2270617468223a227265706f72742f524541444d452e747874222c22736861323536223a2230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437227d5d7d",
11
+ "files": [
12
+ {
13
+ "path": "HOW-TO-VERIFY.txt",
14
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
15
+ },
16
+ {
17
+ "path": "contents.json",
18
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
19
+ },
20
+ {
21
+ "path": "report/README.txt",
22
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
23
+ },
24
+ {
25
+ "path": "packs/b/bundle.json",
26
+ "sha256": "0e842f2531324788ca856cabd6730d8b42f95701ae528b10ab1ed324125b15ce"
27
+ },
28
+ {
29
+ "path": "packs/a/logs/x.json",
30
+ "sha256": "5041bf1f713df204784353e82f6a4a535931cb64f1f4b4a5aeaffcb720918b22"
31
+ },
32
+ {
33
+ "path": "packs/a/bundle.json",
34
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
35
+ }
36
+ ],
37
+ "expected": {
38
+ "index": "read",
39
+ "case_id": "case-4b19de",
40
+ "findings": []
41
+ }
42
+ },
43
+ {
44
+ "id": "pack-missing",
45
+ "why": "The index lists pack b and the folder holds no packs/b/bundle.json. The pack is missing, and so is the one file the index lists for it: two findings, because the rule names a listed pack with no bundle.json and, separately, a listed path with no file.",
46
+ "index_hex": "7b22616273656e74223a5b5d2c22636173655f6964223a22636173652d346231396465222c22636f6e74656e74735f76657273696f6e223a2273616e6e696e672e636173652d66696c652f7631222c227061636b73223a5b7b2266696c6573223a5b7b2270617468223a227061636b732f612f62756e646c652e6a736f6e222c22736861323536223a2263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463227d2c7b2270617468223a227061636b732f612f6c6f67732f782e6a736f6e222c22736861323536223a2235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232227d5d2c22726566223a2261227d2c7b2266696c6573223a5b7b2270617468223a227061636b732f622f62756e646c652e6a736f6e222c22736861323536223a2230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365227d5d2c22726566223a2262227d5d2c227265706f7274223a5b7b2270617468223a227265706f72742f524541444d452e747874222c22736861323536223a2230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437227d5d7d",
47
+ "files": [
48
+ {
49
+ "path": "HOW-TO-VERIFY.txt",
50
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
51
+ },
52
+ {
53
+ "path": "contents.json",
54
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
55
+ },
56
+ {
57
+ "path": "report/README.txt",
58
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
59
+ },
60
+ {
61
+ "path": "packs/a/logs/x.json",
62
+ "sha256": "5041bf1f713df204784353e82f6a4a535931cb64f1f4b4a5aeaffcb720918b22"
63
+ },
64
+ {
65
+ "path": "packs/a/bundle.json",
66
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
67
+ }
68
+ ],
69
+ "expected": {
70
+ "index": "read",
71
+ "case_id": "case-4b19de",
72
+ "findings": [
73
+ {
74
+ "kind": "case_index_pack_missing",
75
+ "ref": "b"
76
+ },
77
+ {
78
+ "kind": "case_index_file_missing",
79
+ "path": "packs/b/bundle.json"
80
+ }
81
+ ]
82
+ }
83
+ },
84
+ {
85
+ "id": "pack-unlisted",
86
+ "why": "A pack in the folder the index does not list. Its files are not reported one by one: only a LISTED pack's folder is compared file by file.",
87
+ "index_hex": "7b22616273656e74223a5b5d2c22636173655f6964223a22636173652d346231396465222c22636f6e74656e74735f76657273696f6e223a2273616e6e696e672e636173652d66696c652f7631222c227061636b73223a5b7b2266696c6573223a5b7b2270617468223a227061636b732f612f62756e646c652e6a736f6e222c22736861323536223a2263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463227d2c7b2270617468223a227061636b732f612f6c6f67732f782e6a736f6e222c22736861323536223a2235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232227d5d2c22726566223a2261227d2c7b2266696c6573223a5b7b2270617468223a227061636b732f622f62756e646c652e6a736f6e222c22736861323536223a2230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365227d5d2c22726566223a2262227d5d2c227265706f7274223a5b7b2270617468223a227265706f72742f524541444d452e747874222c22736861323536223a2230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437227d5d7d",
88
+ "files": [
89
+ {
90
+ "path": "packs/c/logs/y.json",
91
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
92
+ },
93
+ {
94
+ "path": "packs/c/bundle.json",
95
+ "sha256": "ff7e2c8be651b691bed15755e70125c17b1899525c991bb3392e94affe430be0"
96
+ },
97
+ {
98
+ "path": "HOW-TO-VERIFY.txt",
99
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
100
+ },
101
+ {
102
+ "path": "contents.json",
103
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
104
+ },
105
+ {
106
+ "path": "report/README.txt",
107
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
108
+ },
109
+ {
110
+ "path": "packs/b/bundle.json",
111
+ "sha256": "0e842f2531324788ca856cabd6730d8b42f95701ae528b10ab1ed324125b15ce"
112
+ },
113
+ {
114
+ "path": "packs/a/logs/x.json",
115
+ "sha256": "5041bf1f713df204784353e82f6a4a535931cb64f1f4b4a5aeaffcb720918b22"
116
+ },
117
+ {
118
+ "path": "packs/a/bundle.json",
119
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
120
+ }
121
+ ],
122
+ "expected": {
123
+ "index": "read",
124
+ "case_id": "case-4b19de",
125
+ "findings": [
126
+ {
127
+ "kind": "case_index_pack_unlisted",
128
+ "ref": "c"
129
+ }
130
+ ]
131
+ }
132
+ },
133
+ {
134
+ "id": "file-missing",
135
+ "why": "A listed file that is not in the folder.",
136
+ "index_hex": "7b22616273656e74223a5b5d2c22636173655f6964223a22636173652d346231396465222c22636f6e74656e74735f76657273696f6e223a2273616e6e696e672e636173652d66696c652f7631222c227061636b73223a5b7b2266696c6573223a5b7b2270617468223a227061636b732f612f62756e646c652e6a736f6e222c22736861323536223a2263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463227d2c7b2270617468223a227061636b732f612f6c6f67732f782e6a736f6e222c22736861323536223a2235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232227d5d2c22726566223a2261227d2c7b2266696c6573223a5b7b2270617468223a227061636b732f622f62756e646c652e6a736f6e222c22736861323536223a2230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365227d5d2c22726566223a2262227d5d2c227265706f7274223a5b7b2270617468223a227265706f72742f524541444d452e747874222c22736861323536223a2230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437227d5d7d",
137
+ "files": [
138
+ {
139
+ "path": "HOW-TO-VERIFY.txt",
140
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
141
+ },
142
+ {
143
+ "path": "contents.json",
144
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
145
+ },
146
+ {
147
+ "path": "report/README.txt",
148
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
149
+ },
150
+ {
151
+ "path": "packs/b/bundle.json",
152
+ "sha256": "0e842f2531324788ca856cabd6730d8b42f95701ae528b10ab1ed324125b15ce"
153
+ },
154
+ {
155
+ "path": "packs/a/bundle.json",
156
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
157
+ }
158
+ ],
159
+ "expected": {
160
+ "index": "read",
161
+ "case_id": "case-4b19de",
162
+ "findings": [
163
+ {
164
+ "kind": "case_index_file_missing",
165
+ "path": "packs/a/logs/x.json"
166
+ }
167
+ ]
168
+ }
169
+ },
170
+ {
171
+ "id": "file-unlisted",
172
+ "why": "A file under a listed pack's folder that the index does not list.",
173
+ "index_hex": "7b22616273656e74223a5b5d2c22636173655f6964223a22636173652d346231396465222c22636f6e74656e74735f76657273696f6e223a2273616e6e696e672e636173652d66696c652f7631222c227061636b73223a5b7b2266696c6573223a5b7b2270617468223a227061636b732f612f62756e646c652e6a736f6e222c22736861323536223a2263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463227d2c7b2270617468223a227061636b732f612f6c6f67732f782e6a736f6e222c22736861323536223a2235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232227d5d2c22726566223a2261227d2c7b2266696c6573223a5b7b2270617468223a227061636b732f622f62756e646c652e6a736f6e222c22736861323536223a2230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365227d5d2c22726566223a2262227d5d2c227265706f7274223a5b7b2270617468223a227265706f72742f524541444d452e747874222c22736861323536223a2230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437227d5d7d",
174
+ "files": [
175
+ {
176
+ "path": "packs/a/logs/extra.json",
177
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
178
+ },
179
+ {
180
+ "path": "HOW-TO-VERIFY.txt",
181
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
182
+ },
183
+ {
184
+ "path": "contents.json",
185
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
186
+ },
187
+ {
188
+ "path": "report/README.txt",
189
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
190
+ },
191
+ {
192
+ "path": "packs/b/bundle.json",
193
+ "sha256": "0e842f2531324788ca856cabd6730d8b42f95701ae528b10ab1ed324125b15ce"
194
+ },
195
+ {
196
+ "path": "packs/a/logs/x.json",
197
+ "sha256": "5041bf1f713df204784353e82f6a4a535931cb64f1f4b4a5aeaffcb720918b22"
198
+ },
199
+ {
200
+ "path": "packs/a/bundle.json",
201
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
202
+ }
203
+ ],
204
+ "expected": {
205
+ "index": "read",
206
+ "case_id": "case-4b19de",
207
+ "findings": [
208
+ {
209
+ "kind": "case_index_file_unlisted",
210
+ "path": "packs/a/logs/extra.json"
211
+ }
212
+ ]
213
+ }
214
+ },
215
+ {
216
+ "id": "report-file-unlisted",
217
+ "why": "A file under report/ that the index does not list.",
218
+ "index_hex": "7b22616273656e74223a5b5d2c22636173655f6964223a22636173652d346231396465222c22636f6e74656e74735f76657273696f6e223a2273616e6e696e672e636173652d66696c652f7631222c227061636b73223a5b7b2266696c6573223a5b7b2270617468223a227061636b732f612f62756e646c652e6a736f6e222c22736861323536223a2263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463227d2c7b2270617468223a227061636b732f612f6c6f67732f782e6a736f6e222c22736861323536223a2235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232227d5d2c22726566223a2261227d2c7b2266696c6573223a5b7b2270617468223a227061636b732f622f62756e646c652e6a736f6e222c22736861323536223a2230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365227d5d2c22726566223a2262227d5d2c227265706f7274223a5b7b2270617468223a227265706f72742f524541444d452e747874222c22736861323536223a2230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437227d5d7d",
219
+ "files": [
220
+ {
221
+ "path": "report/memo.pdf",
222
+ "sha256": "315d429b7714cedb6ad04ac31240145257692630457f3c88253c5beceac76027"
223
+ },
224
+ {
225
+ "path": "HOW-TO-VERIFY.txt",
226
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
227
+ },
228
+ {
229
+ "path": "contents.json",
230
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
231
+ },
232
+ {
233
+ "path": "report/README.txt",
234
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
235
+ },
236
+ {
237
+ "path": "packs/b/bundle.json",
238
+ "sha256": "0e842f2531324788ca856cabd6730d8b42f95701ae528b10ab1ed324125b15ce"
239
+ },
240
+ {
241
+ "path": "packs/a/logs/x.json",
242
+ "sha256": "5041bf1f713df204784353e82f6a4a535931cb64f1f4b4a5aeaffcb720918b22"
243
+ },
244
+ {
245
+ "path": "packs/a/bundle.json",
246
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
247
+ }
248
+ ],
249
+ "expected": {
250
+ "index": "read",
251
+ "case_id": "case-4b19de",
252
+ "findings": [
253
+ {
254
+ "kind": "case_index_file_unlisted",
255
+ "path": "report/memo.pdf"
256
+ }
257
+ ]
258
+ }
259
+ },
260
+ {
261
+ "id": "file-differs",
262
+ "why": "A listed file whose bytes do not hash to the listed value. The finding carries both values.",
263
+ "index_hex": "7b22616273656e74223a5b5d2c22636173655f6964223a22636173652d346231396465222c22636f6e74656e74735f76657273696f6e223a2273616e6e696e672e636173652d66696c652f7631222c227061636b73223a5b7b2266696c6573223a5b7b2270617468223a227061636b732f612f62756e646c652e6a736f6e222c22736861323536223a2263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463227d2c7b2270617468223a227061636b732f612f6c6f67732f782e6a736f6e222c22736861323536223a2235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232227d5d2c22726566223a2261227d2c7b2266696c6573223a5b7b2270617468223a227061636b732f622f62756e646c652e6a736f6e222c22736861323536223a2230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365227d5d2c22726566223a2262227d5d2c227265706f7274223a5b7b2270617468223a227265706f72742f524541444d452e747874222c22736861323536223a2230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437227d5d7d",
264
+ "files": [
265
+ {
266
+ "path": "HOW-TO-VERIFY.txt",
267
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
268
+ },
269
+ {
270
+ "path": "contents.json",
271
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
272
+ },
273
+ {
274
+ "path": "report/README.txt",
275
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
276
+ },
277
+ {
278
+ "path": "packs/b/bundle.json",
279
+ "sha256": "0e842f2531324788ca856cabd6730d8b42f95701ae528b10ab1ed324125b15ce"
280
+ },
281
+ {
282
+ "path": "packs/a/logs/x.json",
283
+ "sha256": "5041bf1f713df204784353e82f6a4a535931cb64f1f4b4a5aeaffcb720918b22"
284
+ },
285
+ {
286
+ "path": "packs/a/bundle.json",
287
+ "sha256": "7bc2d48abf2b22796bd883fe2b8a5643e960d69c3386fd06a51cc798453458fb"
288
+ }
289
+ ],
290
+ "expected": {
291
+ "index": "read",
292
+ "case_id": "case-4b19de",
293
+ "findings": [
294
+ {
295
+ "kind": "case_index_file_differs",
296
+ "path": "packs/a/bundle.json",
297
+ "listed_sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c",
298
+ "sha256": "7bc2d48abf2b22796bd883fe2b8a5643e960d69c3386fd06a51cc798453458fb"
299
+ }
300
+ ]
301
+ }
302
+ },
303
+ {
304
+ "id": "names-absent",
305
+ "why": "The assembler says two packs are absent, one with the key it expected them signed by and one without. One finding per entry, in the index's own order, each the assembler's statement and nothing more.",
306
+ "index_hex": "7b22616273656e74223a5b7b227075626c69635f6b6579223a2235366433386230303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030613163363735222c22726561736f6e223a2274686520636865636b65722773207061636b20776173206e6f742068616e646564206f766572227d2c7b22726561736f6e223a2261207468697264206167656e7420746f6f6b2070617274227d5d2c22636173655f6964223a22636173652d346231396465222c22636f6e74656e74735f76657273696f6e223a2273616e6e696e672e636173652d66696c652f7631222c227061636b73223a5b7b2266696c6573223a5b7b2270617468223a227061636b732f612f62756e646c652e6a736f6e222c22736861323536223a2263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463227d2c7b2270617468223a227061636b732f612f6c6f67732f782e6a736f6e222c22736861323536223a2235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232227d5d2c22726566223a2261227d2c7b2266696c6573223a5b7b2270617468223a227061636b732f622f62756e646c652e6a736f6e222c22736861323536223a2230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365227d5d2c22726566223a2262227d5d2c227265706f7274223a5b7b2270617468223a227265706f72742f524541444d452e747874222c22736861323536223a2230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437227d5d7d",
307
+ "files": [
308
+ {
309
+ "path": "HOW-TO-VERIFY.txt",
310
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
311
+ },
312
+ {
313
+ "path": "contents.json",
314
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
315
+ },
316
+ {
317
+ "path": "report/README.txt",
318
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
319
+ },
320
+ {
321
+ "path": "packs/b/bundle.json",
322
+ "sha256": "0e842f2531324788ca856cabd6730d8b42f95701ae528b10ab1ed324125b15ce"
323
+ },
324
+ {
325
+ "path": "packs/a/logs/x.json",
326
+ "sha256": "5041bf1f713df204784353e82f6a4a535931cb64f1f4b4a5aeaffcb720918b22"
327
+ },
328
+ {
329
+ "path": "packs/a/bundle.json",
330
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
331
+ }
332
+ ],
333
+ "expected": {
334
+ "index": "read",
335
+ "case_id": "case-4b19de",
336
+ "findings": [
337
+ {
338
+ "kind": "case_index_names_absent",
339
+ "reason": "the checker's pack was not handed over",
340
+ "public_key": "56d38b0000000000000000000000000000000000000000000000000000a1c675"
341
+ },
342
+ {
343
+ "kind": "case_index_names_absent",
344
+ "reason": "a third agent took part"
345
+ }
346
+ ]
347
+ }
348
+ },
349
+ {
350
+ "id": "unreadable-bom",
351
+ "why": "The honest index behind a byte-order mark. The index is read with the JSON reader §5.4.2 rule 7 pins, which refuses one, so the index is unreadable and no other comparison runs.",
352
+ "index_hex": "efbbbf7b22616273656e74223a5b5d2c22636173655f6964223a22636173652d346231396465222c22636f6e74656e74735f76657273696f6e223a2273616e6e696e672e636173652d66696c652f7631222c227061636b73223a5b7b2266696c6573223a5b7b2270617468223a227061636b732f612f62756e646c652e6a736f6e222c22736861323536223a2263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463227d2c7b2270617468223a227061636b732f612f6c6f67732f782e6a736f6e222c22736861323536223a2235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232227d5d2c22726566223a2261227d2c7b2266696c6573223a5b7b2270617468223a227061636b732f622f62756e646c652e6a736f6e222c22736861323536223a2230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365227d5d2c22726566223a2262227d5d2c227265706f7274223a5b7b2270617468223a227265706f72742f524541444d452e747874222c22736861323536223a2230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437227d5d7d",
353
+ "files": [
354
+ {
355
+ "path": "HOW-TO-VERIFY.txt",
356
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
357
+ },
358
+ {
359
+ "path": "contents.json",
360
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
361
+ },
362
+ {
363
+ "path": "report/README.txt",
364
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
365
+ },
366
+ {
367
+ "path": "packs/a/logs/x.json",
368
+ "sha256": "5041bf1f713df204784353e82f6a4a535931cb64f1f4b4a5aeaffcb720918b22"
369
+ },
370
+ {
371
+ "path": "packs/a/bundle.json",
372
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
373
+ }
374
+ ],
375
+ "expected": {
376
+ "index": "unreadable",
377
+ "case_id": null,
378
+ "findings": [
379
+ {
380
+ "kind": "case_index_unreadable",
381
+ "reason": "not readable as JSON"
382
+ }
383
+ ]
384
+ }
385
+ },
386
+ {
387
+ "id": "unreadable-unknown-version",
388
+ "why": "contents_version is a version this reader does not know.",
389
+ "index_hex": "7b22616273656e74223a5b5d2c22636173655f6964223a22636173652d346231396465222c22636f6e74656e74735f76657273696f6e223a2273616e6e696e672e636173652d66696c652f7632222c227061636b73223a5b7b2266696c6573223a5b7b2270617468223a227061636b732f612f62756e646c652e6a736f6e222c22736861323536223a2263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463227d2c7b2270617468223a227061636b732f612f6c6f67732f782e6a736f6e222c22736861323536223a2235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232227d5d2c22726566223a2261227d2c7b2266696c6573223a5b7b2270617468223a227061636b732f622f62756e646c652e6a736f6e222c22736861323536223a2230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365227d5d2c22726566223a2262227d5d2c227265706f7274223a5b7b2270617468223a227265706f72742f524541444d452e747874222c22736861323536223a2230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437227d5d7d",
390
+ "files": [
391
+ {
392
+ "path": "HOW-TO-VERIFY.txt",
393
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
394
+ },
395
+ {
396
+ "path": "contents.json",
397
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
398
+ },
399
+ {
400
+ "path": "report/README.txt",
401
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
402
+ },
403
+ {
404
+ "path": "packs/b/bundle.json",
405
+ "sha256": "0e842f2531324788ca856cabd6730d8b42f95701ae528b10ab1ed324125b15ce"
406
+ },
407
+ {
408
+ "path": "packs/a/logs/x.json",
409
+ "sha256": "5041bf1f713df204784353e82f6a4a535931cb64f1f4b4a5aeaffcb720918b22"
410
+ },
411
+ {
412
+ "path": "packs/a/bundle.json",
413
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
414
+ }
415
+ ],
416
+ "expected": {
417
+ "index": "unreadable",
418
+ "case_id": null,
419
+ "findings": [
420
+ {
421
+ "kind": "case_index_unreadable",
422
+ "reason": "contents_version is not sanning.case-file/v1"
423
+ }
424
+ ]
425
+ }
426
+ },
427
+ {
428
+ "id": "unreadable-missing-member",
429
+ "why": "A required member, absent[], is not there.",
430
+ "index_hex": "7b22636173655f6964223a22636173652d346231396465222c22636f6e74656e74735f76657273696f6e223a2273616e6e696e672e636173652d66696c652f7631222c227061636b73223a5b7b2266696c6573223a5b7b2270617468223a227061636b732f612f62756e646c652e6a736f6e222c22736861323536223a2263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463227d2c7b2270617468223a227061636b732f612f6c6f67732f782e6a736f6e222c22736861323536223a2235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232227d5d2c22726566223a2261227d2c7b2266696c6573223a5b7b2270617468223a227061636b732f622f62756e646c652e6a736f6e222c22736861323536223a2230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365227d5d2c22726566223a2262227d5d2c227265706f7274223a5b7b2270617468223a227265706f72742f524541444d452e747874222c22736861323536223a2230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437227d5d7d",
431
+ "files": [
432
+ {
433
+ "path": "HOW-TO-VERIFY.txt",
434
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
435
+ },
436
+ {
437
+ "path": "contents.json",
438
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
439
+ },
440
+ {
441
+ "path": "report/README.txt",
442
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
443
+ },
444
+ {
445
+ "path": "packs/b/bundle.json",
446
+ "sha256": "0e842f2531324788ca856cabd6730d8b42f95701ae528b10ab1ed324125b15ce"
447
+ },
448
+ {
449
+ "path": "packs/a/logs/x.json",
450
+ "sha256": "5041bf1f713df204784353e82f6a4a535931cb64f1f4b4a5aeaffcb720918b22"
451
+ },
452
+ {
453
+ "path": "packs/a/bundle.json",
454
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
455
+ }
456
+ ],
457
+ "expected": {
458
+ "index": "unreadable",
459
+ "case_id": null,
460
+ "findings": [
461
+ {
462
+ "kind": "case_index_unreadable",
463
+ "reason": "absent is not an array"
464
+ }
465
+ ]
466
+ }
467
+ },
468
+ {
469
+ "id": "no-index",
470
+ "why": "A folder with no contents.json is a folder of packs, with no finding.",
471
+ "index_hex": null,
472
+ "files": [
473
+ {
474
+ "path": "HOW-TO-VERIFY.txt",
475
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
476
+ },
477
+ {
478
+ "path": "contents.json",
479
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
480
+ },
481
+ {
482
+ "path": "report/README.txt",
483
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
484
+ },
485
+ {
486
+ "path": "packs/b/bundle.json",
487
+ "sha256": "0e842f2531324788ca856cabd6730d8b42f95701ae528b10ab1ed324125b15ce"
488
+ },
489
+ {
490
+ "path": "packs/a/logs/x.json",
491
+ "sha256": "5041bf1f713df204784353e82f6a4a535931cb64f1f4b4a5aeaffcb720918b22"
492
+ },
493
+ {
494
+ "path": "packs/a/bundle.json",
495
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
496
+ }
497
+ ],
498
+ "expected": {
499
+ "index": "absent",
500
+ "case_id": null,
501
+ "findings": []
502
+ }
503
+ },
504
+ {
505
+ "id": "unknown-member-ignored",
506
+ "why": "Members this reader does not know, at the top and inside a pack entry, are ignored.",
507
+ "index_hex": "7b22616273656e74223a5b5d2c22636173655f6964223a22636173652d346231396465222c22636f6e74656e74735f76657273696f6e223a2273616e6e696e672e636173652d66696c652f7631222c227061636b73223a5b7b2266696c6573223a5b7b2270617468223a227061636b732f612f62756e646c652e6a736f6e222c22736861323536223a2263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463227d2c7b2270617468223a227061636b732f612f6c6f67732f782e6a736f6e222c22736861323536223a2235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232227d5d2c226e6f7465223a2274686520756e646572777269746572222c22726566223a2261227d2c7b2266696c6573223a5b7b2270617468223a227061636b732f622f62756e646c652e6a736f6e222c22736861323536223a2230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365227d5d2c22726566223a2262227d5d2c2270726f6475636572223a7b226e616d65223a22616e63686f72222c2276657273696f6e223a22302e31332e30227d2c227265706f7274223a5b7b2270617468223a227265706f72742f524541444d452e747874222c22736861323536223a2230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437227d5d7d",
508
+ "files": [
509
+ {
510
+ "path": "HOW-TO-VERIFY.txt",
511
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
512
+ },
513
+ {
514
+ "path": "contents.json",
515
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
516
+ },
517
+ {
518
+ "path": "report/README.txt",
519
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
520
+ },
521
+ {
522
+ "path": "packs/b/bundle.json",
523
+ "sha256": "0e842f2531324788ca856cabd6730d8b42f95701ae528b10ab1ed324125b15ce"
524
+ },
525
+ {
526
+ "path": "packs/a/logs/x.json",
527
+ "sha256": "5041bf1f713df204784353e82f6a4a535931cb64f1f4b4a5aeaffcb720918b22"
528
+ },
529
+ {
530
+ "path": "packs/a/bundle.json",
531
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
532
+ }
533
+ ],
534
+ "expected": {
535
+ "index": "read",
536
+ "case_id": "case-4b19de",
537
+ "findings": []
538
+ }
539
+ },
540
+ {
541
+ "id": "not-jcs-accepted",
542
+ "why": "The honest index pretty-printed, with its members out of order. A producer writes JCS; a reader does not require it.",
543
+ "index_hex": "7b0a20202020227265706f7274223a205b0a20202020202020207b0a2020202020202020202020202270617468223a20227265706f72742f524541444d452e747874222c0a20202020202020202020202022736861323536223a202230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437220a20202020202020207d0a202020205d2c0a2020202022616273656e74223a205b5d2c0a20202020227061636b73223a205b0a20202020202020207b0a20202020202020202020202022726566223a202261222c0a2020202020202020202020202266696c6573223a205b0a202020202020202020202020202020207b0a20202020202020202020202020202020202020202270617468223a20227061636b732f612f62756e646c652e6a736f6e222c0a202020202020202020202020202020202020202022736861323536223a202263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463220a202020202020202020202020202020207d2c0a202020202020202020202020202020207b0a20202020202020202020202020202020202020202270617468223a20227061636b732f612f6c6f67732f782e6a736f6e222c0a202020202020202020202020202020202020202022736861323536223a202235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232220a202020202020202020202020202020207d0a2020202020202020202020205d0a20202020202020207d2c0a20202020202020207b0a20202020202020202020202022726566223a202262222c0a2020202020202020202020202266696c6573223a205b0a202020202020202020202020202020207b0a20202020202020202020202020202020202020202270617468223a20227061636b732f622f62756e646c652e6a736f6e222c0a202020202020202020202020202020202020202022736861323536223a202230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365220a202020202020202020202020202020207d0a2020202020202020202020205d0a20202020202020207d0a202020205d2c0a2020202022636173655f6964223a2022636173652d346231396465222c0a2020202022636f6e74656e74735f76657273696f6e223a202273616e6e696e672e636173652d66696c652f7631220a7d0a",
544
+ "files": [
545
+ {
546
+ "path": "HOW-TO-VERIFY.txt",
547
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
548
+ },
549
+ {
550
+ "path": "contents.json",
551
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
552
+ },
553
+ {
554
+ "path": "report/README.txt",
555
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
556
+ },
557
+ {
558
+ "path": "packs/b/bundle.json",
559
+ "sha256": "0e842f2531324788ca856cabd6730d8b42f95701ae528b10ab1ed324125b15ce"
560
+ },
561
+ {
562
+ "path": "packs/a/logs/x.json",
563
+ "sha256": "5041bf1f713df204784353e82f6a4a535931cb64f1f4b4a5aeaffcb720918b22"
564
+ },
565
+ {
566
+ "path": "packs/a/bundle.json",
567
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
568
+ }
569
+ ],
570
+ "expected": {
571
+ "index": "read",
572
+ "case_id": "case-4b19de",
573
+ "findings": []
574
+ }
575
+ },
576
+ {
577
+ "id": "order",
578
+ "why": "Every comparison kind at once, in the pinned order, and within a kind by the UTF-8 bytes of the path or ref: U+FF5E (EF BD 9E) sorts before U+1F600 (F0 9F 98 80) by UTF-8 bytes, and after it by UTF-16 code units, so a reader that sorted as JavaScript sorts strings would swap the two unlisted report files.",
579
+ "index_hex": "7b22616273656e74223a5b7b22726561736f6e223a2274686520636865636b65722773207061636b20776173206e6f742068616e646564206f766572227d5d2c22636173655f6964223a22636173652d346231396465222c22636f6e74656e74735f76657273696f6e223a2273616e6e696e672e636173652d66696c652f7631222c227061636b73223a5b7b2266696c6573223a5b7b2270617468223a227061636b732f612f62756e646c652e6a736f6e222c22736861323536223a2263386261656230383636353834333538646464303634316264353938626239623862383838303935336232613135356366363235303062386338396137333463227d2c7b2270617468223a227061636b732f612f6c6f67732f782e6a736f6e222c22736861323536223a2235303431626631663731336466323034373834333533653832663661346135333539333163623634663166346234613561656166666362373230393138623232227d5d2c22726566223a2261227d2c7b2266696c6573223a5b7b2270617468223a227061636b732f622f62756e646c652e6a736f6e222c22736861323536223a2230653834326632353331333234373838636138353663616264363733306438623432663935373031616535323862313061623165643332343132356231356365227d5d2c22726566223a2262227d2c7b2266696c6573223a5b5d2c22726566223a227a227d5d2c227265706f7274223a5b7b2270617468223a227265706f72742f524541444d452e747874222c22736861323536223a2230316563313839373665373637653831346165653962316361363966366239643331323963343336393063626234623434383463396539323331366362666437227d5d7d",
580
+ "files": [
581
+ {
582
+ "path": "packs/a/zzz.json",
583
+ "sha256": "4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce"
584
+ },
585
+ {
586
+ "path": "report/~.txt",
587
+ "sha256": "d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35"
588
+ },
589
+ {
590
+ "path": "report/😀.txt",
591
+ "sha256": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"
592
+ },
593
+ {
594
+ "path": "packs/c/bundle.json",
595
+ "sha256": "ff7e2c8be651b691bed15755e70125c17b1899525c991bb3392e94affe430be0"
596
+ },
597
+ {
598
+ "path": "packs/d/bundle.json",
599
+ "sha256": "7335e2c223602d7a4de72223406d996f9db3b6250f482856f388ad582694067c"
600
+ },
601
+ {
602
+ "path": "HOW-TO-VERIFY.txt",
603
+ "sha256": "76b25bc6207548c6bd05b1ab2e364ff8c493f6fb04e6a69d731a6f158482b7d9"
604
+ },
605
+ {
606
+ "path": "contents.json",
607
+ "sha256": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a"
608
+ },
609
+ {
610
+ "path": "report/README.txt",
611
+ "sha256": "01ec18976e767e814aee9b1ca69f6b9d3129c43690cbb4b4484c9e92316cbfd7"
612
+ },
613
+ {
614
+ "path": "packs/b/bundle.json",
615
+ "sha256": "6930f4d79c98896452175c379c484147853435eea464cab602cad30462d3fd88"
616
+ },
617
+ {
618
+ "path": "packs/a/bundle.json",
619
+ "sha256": "c8baeb0866584358ddd0641bd598bb9b8b8880953b2a155cf62500b8c89a734c"
620
+ }
621
+ ],
622
+ "expected": {
623
+ "index": "read",
624
+ "case_id": "case-4b19de",
625
+ "findings": [
626
+ {
627
+ "kind": "case_index_pack_missing",
628
+ "ref": "z"
629
+ },
630
+ {
631
+ "kind": "case_index_pack_unlisted",
632
+ "ref": "c"
633
+ },
634
+ {
635
+ "kind": "case_index_pack_unlisted",
636
+ "ref": "d"
637
+ },
638
+ {
639
+ "kind": "case_index_file_missing",
640
+ "path": "packs/a/logs/x.json"
641
+ },
642
+ {
643
+ "kind": "case_index_file_unlisted",
644
+ "path": "packs/a/zzz.json"
645
+ },
646
+ {
647
+ "kind": "case_index_file_unlisted",
648
+ "path": "report/~.txt"
649
+ },
650
+ {
651
+ "kind": "case_index_file_unlisted",
652
+ "path": "report/😀.txt"
653
+ },
654
+ {
655
+ "kind": "case_index_file_differs",
656
+ "path": "packs/b/bundle.json",
657
+ "listed_sha256": "0e842f2531324788ca856cabd6730d8b42f95701ae528b10ab1ed324125b15ce",
658
+ "sha256": "6930f4d79c98896452175c379c484147853435eea464cab602cad30462d3fd88"
659
+ },
660
+ {
661
+ "kind": "case_index_names_absent",
662
+ "reason": "the checker's pack was not handed over"
663
+ }
664
+ ]
665
+ }
666
+ }
667
+ ]
668
+ }