@slicedearth/whoisleuth-cli 2.5.1 → 2.7.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 (170) hide show
  1. package/DISCLOSURE +9 -6
  2. package/NOTICE +3 -2
  3. package/README.md +60 -67
  4. package/cli/artifact-validation/case-response.mjs +6 -814
  5. package/cli/artifact-validation/lookup-evidence.mjs +30 -3
  6. package/cli/artifact-validation/signed-review.mjs +2 -51
  7. package/cli/artifact-verify.mjs +41 -3
  8. package/cli/bulk-command-runner.mjs +4 -6
  9. package/cli/case-command.mjs +92 -16
  10. package/cli/case-pack.mjs +14 -3
  11. package/cli/ci-report.mjs +17 -5
  12. package/cli/command-definition.mjs +7 -6
  13. package/cli/discovery-scan-command-runner.mjs +4 -6
  14. package/cli/doctor.mjs +37 -3
  15. package/cli/domain-feed.mjs +61 -0
  16. package/cli/formatters/html.mjs +3 -0
  17. package/cli/formatters/json.mjs +9 -14
  18. package/cli/formatters/terminal-lookup.mjs +24 -1
  19. package/cli/history-command-definitions.mjs +1 -1
  20. package/cli/indicator-set-command.mjs +1 -2
  21. package/cli/intake-command.mjs +43 -3
  22. package/cli/investigation-artifacts.mjs +2 -3
  23. package/cli/investigation-package-review.mjs +2 -0
  24. package/cli/investigation-plan.mjs +15 -0
  25. package/cli/local-mmdb-review.mjs +27 -4
  26. package/cli/lookup-brief.mjs +11 -5
  27. package/cli/lookup-command-runner.mjs +21 -13
  28. package/cli/offline-evidence-review.mjs +51 -5
  29. package/cli/review-arguments.mjs +3 -2
  30. package/cli/review-command-definitions.mjs +23 -17
  31. package/cli/review-command-runner.mjs +6 -3
  32. package/cli/risk-calibration.mjs +6 -4
  33. package/cli/saved-lookup.mjs +22 -7
  34. package/cli/selected-input-worker.mjs +12 -2
  35. package/cli/source-reliability.mjs +12 -10
  36. package/cli/support-arguments.mjs +1 -1
  37. package/cli/support-command-definitions.mjs +5 -4
  38. package/cli/support-command-runner.mjs +9 -7
  39. package/cli/watchlist-review.mjs +43 -0
  40. package/cli/workflow-arguments.mjs +14 -0
  41. package/cli/workflow-command-definitions.mjs +27 -1
  42. package/cli/workflow-command-runner.mjs +32 -0
  43. package/docs/cli-reference.md +49 -11
  44. package/docs/cli.md +200 -26
  45. package/docs/contextual-reviews.md +38 -5
  46. package/docs/infrastructure-observations.md +135 -0
  47. package/docs/offline-intake-context.md +213 -0
  48. package/lib/credential-form-attribution.mjs +136 -0
  49. package/lib/credential-surface-profile.mjs +6 -2
  50. package/lib/dmarc-discovery.mjs +4 -2
  51. package/lib/dns-delegation-health.mjs +23 -7
  52. package/lib/dns-inheritance-review.mjs +14 -1
  53. package/lib/dns-intelligence.mjs +18 -4
  54. package/lib/domain-posture-analysis.mjs +53 -2
  55. package/lib/domain-posture-parsers.mjs +9 -0
  56. package/lib/domain-posture.mjs +29 -10
  57. package/lib/evidence-export-privacy.mjs +5 -2
  58. package/lib/evidence-export.mjs +10 -4
  59. package/lib/evidence-report.mjs +3 -1
  60. package/lib/favicon.mjs +13 -4
  61. package/lib/generated/cisa-kev-catalog.mjs +17 -4
  62. package/lib/generated/registrar-standing-catalogue.mjs +7 -7
  63. package/lib/generated/retire-browser-catalog.mjs +178 -5
  64. package/lib/html-signals.mjs +6 -0
  65. package/lib/idn-confusables.mjs +5 -1
  66. package/lib/lookup-child-profile-contract.mjs +28 -11
  67. package/lib/lookup-collection-receipt.mjs +52 -0
  68. package/lib/lookup-diagnostics.mjs +2 -12
  69. package/lib/lookup-progress.mjs +29 -31
  70. package/lib/lookup-response-contract.mjs +10 -0
  71. package/lib/lookup-response.mjs +15 -14
  72. package/lib/lookup-source-progress.mjs +4 -2
  73. package/lib/lookup.mjs +33 -2
  74. package/lib/operation-budget.mjs +4 -0
  75. package/lib/rdap-capabilities.mjs +43 -9
  76. package/lib/registry-insights.mjs +17 -6
  77. package/lib/service-binding-dns.mjs +19 -2
  78. package/lib/sslbl-certificates.generated.mjs +142 -140
  79. package/lib/static-html-analysis.mjs +32 -4
  80. package/lib/technology-evidence-role.mjs +1 -51
  81. package/lib/tls-intelligence.mjs +30 -5
  82. package/lib/website-enrichment.mjs +39 -23
  83. package/lib/whois-authority.mjs +56 -1
  84. package/lib/whois-chain.mjs +14 -4
  85. package/lib/whois-common-formats.mjs +3 -1
  86. package/lib/whois-contacts.mjs +13 -2
  87. package/lib/whois-contracts.mjs +2 -0
  88. package/lib/whois-normalization.mjs +4 -4
  89. package/package.json +9 -7
  90. package/packages/analysis/bounded-json.mjs +12 -2
  91. package/packages/analysis/risk-scoring.mjs +12 -9
  92. package/packages/cases/case-attachment-model.mjs +36 -1
  93. package/packages/cases/case-checkpoint-receipts.mjs +68 -0
  94. package/packages/cases/case-containment-handoff.mjs +195 -0
  95. package/packages/cases/case-evidence-links.mjs +44 -0
  96. package/packages/cases/case-evidence-model.mjs +51 -7
  97. package/packages/cases/case-migration-model.mjs +9 -1
  98. package/packages/cases/case-object-coverage.mjs +119 -0
  99. package/packages/cases/case-packet-correction.mjs +106 -0
  100. package/packages/cases/case-recheck-model.mjs +35 -5
  101. package/packages/cases/case-record-operations.mjs +87 -9
  102. package/packages/cases/case-record-projection.mjs +43 -5
  103. package/packages/cases/case-record-version-input.mjs +23 -1
  104. package/packages/cases/case-report.mjs +35 -4
  105. package/packages/cases/case-requested-evidence.mjs +1 -1
  106. package/packages/cases/case-response-actions.mjs +57 -1
  107. package/packages/cases/case-response-model.mjs +7 -0
  108. package/packages/cases/case-response-object.mjs +119 -0
  109. package/packages/cases/case-response-outcomes.mjs +81 -14
  110. package/packages/cases/case-response-packet-render.mjs +22 -3
  111. package/packages/cases/case-response-packet-validation.mjs +880 -0
  112. package/packages/cases/case-response-packet-vocabulary.mjs +12 -1
  113. package/packages/cases/case-response-packet.mjs +32 -17
  114. package/packages/cases/case-response-review-inputs.mjs +66 -8
  115. package/packages/cases/case-type-presentation.mjs +10 -0
  116. package/packages/cases/case-workflow-metadata.mjs +1 -17
  117. package/packages/comparison/capture-context.mjs +3 -2
  118. package/packages/contracts/analyst-interchange.mjs +7 -5
  119. package/packages/contracts/analyst-review-state-contract.mjs +1 -1
  120. package/packages/contracts/candidate-watch-review.mjs +54 -0
  121. package/packages/contracts/case-portability.mjs +292 -43
  122. package/packages/contracts/cli-command-semantics.mjs +3 -0
  123. package/packages/contracts/cli-doctor.mjs +4 -0
  124. package/packages/contracts/cli-lookup.mjs +57 -46
  125. package/packages/contracts/context-review.mjs +2 -1
  126. package/packages/contracts/external-observation-interchange.mjs +96 -28
  127. package/packages/contracts/lookup-evidence.mjs +13 -2
  128. package/packages/contracts/message-intake.mjs +7 -1
  129. package/packages/contracts/registry-insights.mjs +6 -0
  130. package/packages/contracts/risk-calibration.mjs +44 -29
  131. package/packages/contracts/schema-lifecycle.mjs +3 -1
  132. package/packages/contracts/web-capture.mjs +1 -1
  133. package/packages/contracts/workspace-portability.mjs +86 -16
  134. package/packages/evidence/collection-quality.mjs +1 -1
  135. package/packages/evidence/credential-form-attribution.mjs +60 -0
  136. package/packages/evidence/dmarc-policy-context.mjs +80 -0
  137. package/packages/evidence/image-regions.mjs +15 -0
  138. package/packages/evidence/lookup-collection-receipt.mjs +140 -0
  139. package/packages/evidence/lookup-collection-review.mjs +74 -0
  140. package/packages/evidence/record-identity.mjs +60 -16
  141. package/packages/evidence/technology-evidence-role.mjs +51 -0
  142. package/packages/interchange/external-findings-import.mjs +40 -21
  143. package/packages/interchange/json-output.mjs +14 -0
  144. package/packages/interchange/managed-indicator-export.mjs +3 -2
  145. package/packages/interchange/managed-indicator-set.mjs +13 -0
  146. package/packages/investigation/acquisition-decision-packet.mjs +78 -0
  147. package/packages/investigation/bulk-mail-exposure.mjs +2 -2
  148. package/packages/investigation/context-review.mjs +3 -3
  149. package/packages/investigation/document-intake.mjs +9 -3
  150. package/packages/investigation/domain-history-review.mjs +50 -12
  151. package/packages/investigation/domain-transition-review.mjs +2 -0
  152. package/packages/investigation/infrastructure-observation.mjs +234 -0
  153. package/packages/investigation/intake-context.mjs +284 -0
  154. package/packages/investigation/intake-indicators.mjs +116 -0
  155. package/packages/investigation/intake-phones.mjs +155 -0
  156. package/packages/investigation/intake-report.mjs +2 -1
  157. package/packages/investigation/investigation-manifest.mjs +33 -7
  158. package/packages/investigation/link-intake.mjs +38 -8
  159. package/packages/investigation/message-intake.mjs +55 -15
  160. package/packages/monitoring/domain-feed.mjs +321 -0
  161. package/packages/workspace/brand-candidate-workflow.mjs +351 -0
  162. package/packages/workspace/brand-keyword-campaign.mjs +241 -0
  163. package/packages/workspace/brand-profile-model.mjs +46 -2
  164. package/packages/workspace/bulk-session-model.mjs +12 -0
  165. package/packages/workspace/candidate-watch-handoff.mjs +195 -0
  166. package/packages/workspace/detection-rule-model.mjs +10 -2
  167. package/packages/workspace/shortlist-model.mjs +10 -2
  168. package/packages/workspace/watchlist-history.mjs +31 -4
  169. package/packages/workspace/watchlist-store.mjs +136 -7
  170. package/third-party-notices.txt +30 -30
@@ -54,6 +54,7 @@ export const CASE_PORTABILITY_IDENTITY_CONSTANTS = Object.freeze([
54
54
  'WORKSPACE_ARCHIVE_SCHEMA',
55
55
  'PUBLIC_WORKSPACE_ARCHIVE_VERSION',
56
56
  'WORKSPACE_ARCHIVE_VERSION',
57
+ 'WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID',
57
58
  'SUPPORTED_WORKSPACE_ARCHIVE_VERSIONS',
58
59
  'PUBLIC_WORKSPACE_ARCHIVE_SECTION_IDS',
59
60
  'WORKSPACE_ARCHIVE_SECTION_IDS',
@@ -161,13 +162,19 @@ export const PUBLISHED_V2_2_CASE_SCHEMA_VERSION = 14;
161
162
  export const PUBLISHED_V2_3_CASE_SCHEMA_VERSION = 15;
162
163
  export const INCIDENT_CASE_SCHEMA_VERSION = 16;
163
164
  export const EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION = 17;
164
- export const CASE_SCHEMA_VERSION = EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION;
165
+ export const OBJECT_RESPONSE_CASE_SCHEMA_VERSION = 18;
166
+ export const DELIVERY_CORRECTION_CASE_SCHEMA_VERSION = 19;
167
+ export const COLLECTION_RECEIPT_CASE_SCHEMA_VERSION = 20;
168
+ export const CASE_SCHEMA_VERSION = COLLECTION_RECEIPT_CASE_SCHEMA_VERSION;
165
169
  export const CASE_BROWSER_SUPPORTED_VERSIONS = Object.freeze([
166
170
  PUBLIC_CASE_SCHEMA_VERSION,
167
171
  PUBLISHED_V2_CASE_SCHEMA_VERSION,
168
172
  PUBLISHED_V2_2_CASE_SCHEMA_VERSION,
169
173
  PUBLISHED_V2_3_CASE_SCHEMA_VERSION,
170
174
  INCIDENT_CASE_SCHEMA_VERSION,
175
+ EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION,
176
+ OBJECT_RESPONSE_CASE_SCHEMA_VERSION,
177
+ DELIVERY_CORRECTION_CASE_SCHEMA_VERSION,
171
178
  CASE_SCHEMA_VERSION,
172
179
  ]);
173
180
  export const CASE_IMPORT_VERSIONS = CASE_BROWSER_SUPPORTED_VERSIONS;
@@ -176,12 +183,16 @@ export const PUBLIC_CASE_REPORT_SCHEMA_VERSION = 8;
176
183
  export const PUBLISHED_V2_CASE_REPORT_SCHEMA_VERSION = 9;
177
184
  export const PUBLISHED_V2_2_CASE_REPORT_SCHEMA_VERSION = 10;
178
185
  export const PUBLISHED_V2_3_CASE_REPORT_SCHEMA_VERSION = 11;
179
- export const CASE_REPORT_SCHEMA_VERSION = 13;
186
+ export const EVIDENCE_FOLLOW_UP_CASE_REPORT_SCHEMA_VERSION = 13;
187
+ export const OBJECT_RESPONSE_CASE_REPORT_SCHEMA_VERSION = 14;
188
+ export const CASE_REPORT_SCHEMA_VERSION = 15;
180
189
  export const CASE_REPORT_OUTPUT_VERSIONS = Object.freeze([
181
190
  PUBLISHED_V2_CASE_REPORT_SCHEMA_VERSION,
182
191
  PUBLISHED_V2_2_CASE_REPORT_SCHEMA_VERSION,
183
192
  PUBLISHED_V2_3_CASE_REPORT_SCHEMA_VERSION,
184
193
  LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION,
194
+ EVIDENCE_FOLLOW_UP_CASE_REPORT_SCHEMA_VERSION,
195
+ OBJECT_RESPONSE_CASE_REPORT_SCHEMA_VERSION,
185
196
  CASE_REPORT_SCHEMA_VERSION,
186
197
  ]);
187
198
  export const CASE_RESPONSE_PACKET_SCHEMA = 'whoisleuth.case-response-packet';
@@ -189,13 +200,17 @@ export const PUBLIC_CASE_RESPONSE_PACKET_VERSION = 6;
189
200
  export const PUBLISHED_V2_CASE_RESPONSE_PACKET_VERSION = 7;
190
201
  export const PUBLISHED_V2_2_CASE_RESPONSE_PACKET_VERSION = 8;
191
202
  export const PUBLISHED_V2_3_CASE_RESPONSE_PACKET_VERSION = 9;
192
- export const CASE_RESPONSE_PACKET_VERSION = 11;
203
+ export const EVIDENCE_FOLLOW_UP_CASE_RESPONSE_PACKET_VERSION = 11;
204
+ export const OBJECT_RESPONSE_CASE_PACKET_VERSION = 12;
205
+ export const CASE_RESPONSE_PACKET_VERSION = 13;
193
206
  export const CASE_RESPONSE_PACKET_OUTPUT_VERSIONS = Object.freeze([
194
207
  PUBLIC_CASE_RESPONSE_PACKET_VERSION,
195
208
  PUBLISHED_V2_CASE_RESPONSE_PACKET_VERSION,
196
209
  PUBLISHED_V2_2_CASE_RESPONSE_PACKET_VERSION,
197
210
  PUBLISHED_V2_3_CASE_RESPONSE_PACKET_VERSION,
198
211
  LATEST_PUBLIC_CASE_RESPONSE_PACKET_VERSION,
212
+ EVIDENCE_FOLLOW_UP_CASE_RESPONSE_PACKET_VERSION,
213
+ OBJECT_RESPONSE_CASE_PACKET_VERSION,
199
214
  CASE_RESPONSE_PACKET_VERSION,
200
215
  ]);
201
216
  export const SUPPORTED_CASE_RESPONSE_PACKET_VERSIONS = CASE_RESPONSE_PACKET_OUTPUT_VERSIONS;
@@ -203,17 +218,21 @@ export const CASE_RESPONSE_REVIEW_INPUTS_SCHEMA = 'whoisleuth.case-response-revi
203
218
  export const PUBLISHED_V2_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 1;
204
219
  export const PUBLISHED_V2_2_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 2;
205
220
  export const PUBLISHED_V2_3_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 3;
206
- export const CASE_RESPONSE_REVIEW_INPUTS_VERSION = 5;
221
+ export const EVIDENCE_FOLLOW_UP_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 5;
222
+ export const OBJECT_RESPONSE_CASE_REVIEW_INPUTS_VERSION = 6;
223
+ export const CASE_RESPONSE_REVIEW_INPUTS_VERSION = 7;
207
224
  export const SUPPORTED_CASE_RESPONSE_REVIEW_INPUTS_VERSIONS = Object.freeze([
208
225
  PUBLISHED_V2_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
209
226
  PUBLISHED_V2_2_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
210
227
  PUBLISHED_V2_3_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
211
228
  LATEST_PUBLIC_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
229
+ EVIDENCE_FOLLOW_UP_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
230
+ OBJECT_RESPONSE_CASE_REVIEW_INPUTS_VERSION,
212
231
  CASE_RESPONSE_REVIEW_INPUTS_VERSION,
213
232
  ]);
214
233
  export const CLI_CASE_PACK_SCHEMA = 'whoisleuth.cli.case-pack';
215
234
  export const CLI_CASE_PACK_VERSION = 2;
216
- export const CLI_CASE_PACK_WRITER_FIXTURE_ID = 'cli-case-pack-v2-case-v17-current';
235
+ export const CLI_CASE_PACK_WRITER_FIXTURE_ID = `cli-case-pack-v${CLI_CASE_PACK_VERSION}-case-v${CASE_SCHEMA_VERSION}-current`;
217
236
  export const CLI_CASE_PACK_INPUT_CASE_VERSIONS = Object.freeze(CASE_IMPORT_VERSIONS.filter((version) => version >= PUBLISHED_V2_3_CASE_SCHEMA_VERSION));
218
237
  export const SUPPORTED_CLI_CASE_PACK_VERSIONS = Object.freeze([CLI_CASE_PACK_VERSION]);
219
238
  export const CLI_CASE_PACK_ROOT_KEYS = Object.freeze(['version', 'exportedAt', 'cases', 'packet', 'integrity']);
@@ -233,7 +252,9 @@ export const CLI_CASE_PACK_CASE_REPORT_EPOCHS = Object.freeze([
233
252
  Object.freeze({ caseVersions: Object.freeze([PUBLISHED_V2_2_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([PUBLISHED_V2_2_CASE_REPORT_SCHEMA_VERSION]) }),
234
253
  Object.freeze({ caseVersions: Object.freeze([PUBLISHED_V2_3_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([PUBLISHED_V2_3_CASE_REPORT_SCHEMA_VERSION]) }),
235
254
  Object.freeze({ caseVersions: Object.freeze([INCIDENT_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION]) }),
236
- Object.freeze({ caseVersions: Object.freeze([CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([CASE_REPORT_SCHEMA_VERSION]) }),
255
+ Object.freeze({ caseVersions: Object.freeze([EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([EVIDENCE_FOLLOW_UP_CASE_REPORT_SCHEMA_VERSION]) }),
256
+ Object.freeze({ caseVersions: Object.freeze([OBJECT_RESPONSE_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([OBJECT_RESPONSE_CASE_REPORT_SCHEMA_VERSION]) }),
257
+ Object.freeze({ caseVersions: Object.freeze([DELIVERY_CORRECTION_CASE_SCHEMA_VERSION, COLLECTION_RECEIPT_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([CASE_REPORT_SCHEMA_VERSION]) }),
237
258
  ]);
238
259
  export function caseReportVersionMatchesCase(caseVersion, reportVersion) {
239
260
  return typeof reportVersion === 'number'
@@ -246,12 +267,14 @@ export const PUBLIC_WORKSPACE_ARCHIVE_VERSION = 5;
246
267
  export const PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION = 6;
247
268
  export const PUBLISHED_V2_2_WORKSPACE_ARCHIVE_VERSION = 7;
248
269
  export const PUBLISHED_V2_3_WORKSPACE_ARCHIVE_VERSION = 8;
249
- export const WORKSPACE_ARCHIVE_VERSION = 9;
270
+ export const WORKSPACE_ARCHIVE_VERSION = 10;
271
+ export const WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID = `workspace-archive-v${WORKSPACE_ARCHIVE_VERSION}-case-v${CASE_SCHEMA_VERSION}-empty-current`;
250
272
  export const SUPPORTED_WORKSPACE_ARCHIVE_VERSIONS = Object.freeze([
251
273
  PUBLIC_WORKSPACE_ARCHIVE_VERSION,
252
274
  PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION,
253
275
  PUBLISHED_V2_2_WORKSPACE_ARCHIVE_VERSION,
254
276
  PUBLISHED_V2_3_WORKSPACE_ARCHIVE_VERSION,
277
+ LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION,
255
278
  WORKSPACE_ARCHIVE_VERSION,
256
279
  ]);
257
280
  export function isSupportedWorkspaceArchiveVersion(value) {
@@ -447,6 +470,133 @@ export function serialiseWorkspaceArchiveSection(value) {
447
470
  return serialised;
448
471
  }
449
472
  const CASE_LIFECYCLE_FIXTURES = Object.freeze([
473
+ Object.freeze({
474
+ id: 'browser-case-v20', path: 'test/fixtures/case-lifecycle/browser-case-v20.json', bytes: 3312,
475
+ sha256: '6dd0fa2d486a746d24c1d2b5dc85a31ff50219e2cb8d0d993b4d35a0ac460977', contentDigestSha256: null,
476
+ schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA, version: COLLECTION_RECEIPT_CASE_SCHEMA_VERSION,
477
+ role: 'current', expectation: 'accepted_exact', expectedOutputFixtureId: null,
478
+ shapeId: 'case.browser-store.v20', scope: 'repository',
479
+ }),
480
+ Object.freeze({
481
+ id: 'case-export-v20', path: 'test/fixtures/case-lifecycle/case-export-v20.json', bytes: 3356,
482
+ sha256: '52e3b852358fd0c3d1f53b2cbe8cab2d5002ed71954c4c9ddc2b7884aa226e22', contentDigestSha256: null,
483
+ schema: CASE_EXPORT_LIFECYCLE_SCHEMA, version: COLLECTION_RECEIPT_CASE_SCHEMA_VERSION,
484
+ role: 'current', expectation: 'accepted_exact', expectedOutputFixtureId: null,
485
+ shapeId: 'case.export.v20', scope: 'repository',
486
+ }),
487
+ Object.freeze({
488
+ id: 'cli-case-pack-v2-case-v20-current', path: 'test/fixtures/case-lifecycle/cli-case-pack-v2-case-v20-current.json', bytes: 9874,
489
+ sha256: '2cf92058e3c6a84409089a201dfe5aad2cbd74e79bee90327abc75dd45fc1dcf',
490
+ contentDigestSha256: 'sha256:e42dfc160add1defda8d36b1399f6c730b0a9bd4df6128a85f08bdef6c7527f6',
491
+ schema: CLI_CASE_PACK_SCHEMA, version: CLI_CASE_PACK_VERSION,
492
+ role: 'current', expectation: 'accepted_exact', expectedOutputFixtureId: null,
493
+ shapeId: 'case.cli-pack.current', scope: 'repository',
494
+ }),
495
+ Object.freeze({
496
+ id: 'workspace-archive-v10-case-v20-empty-current', path: 'test/fixtures/case-lifecycle/workspace-archive-v10-case-v20-empty-current.json', bytes: 7616,
497
+ sha256: 'b82005bc4bf7ea855076eefa059f5d39d41633ad5a53d55f49b7413b0fe99f2c', contentDigestSha256: null,
498
+ schema: WORKSPACE_ARCHIVE_SCHEMA, version: WORKSPACE_ARCHIVE_VERSION,
499
+ role: 'current', expectation: 'accepted_exact', expectedOutputFixtureId: null,
500
+ shapeId: 'case.workspace-archive.v10', scope: 'repository',
501
+ }),
502
+ Object.freeze({
503
+ id: 'browser-case-v19',
504
+ path: 'test/fixtures/case-lifecycle/browser-case-v19.json',
505
+ bytes: 3312,
506
+ sha256: '3d3c3c3f35f05406d5f4d2b9a0925e6971a9dd237f570733a0b1e82a52d99a92',
507
+ contentDigestSha256: null,
508
+ schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA,
509
+ version: DELIVERY_CORRECTION_CASE_SCHEMA_VERSION,
510
+ role: 'historical',
511
+ expectation: 'normalises_to_current_output',
512
+ expectedOutputFixtureId: `browser-case-v${CASE_SCHEMA_VERSION}`,
513
+ shapeId: 'case.browser-store.v19',
514
+ scope: 'repository',
515
+ }),
516
+ Object.freeze({
517
+ id: 'case-export-v19',
518
+ path: 'test/fixtures/case-lifecycle/case-export-v19.json',
519
+ bytes: 3356,
520
+ sha256: '65cbb4952766cf6016d4ba81b5859a8a2bd16eb373c7c2f6d08d666aa29c99c1',
521
+ contentDigestSha256: null,
522
+ schema: CASE_EXPORT_LIFECYCLE_SCHEMA,
523
+ version: DELIVERY_CORRECTION_CASE_SCHEMA_VERSION,
524
+ role: 'historical',
525
+ expectation: 'normalises_to_current_output',
526
+ expectedOutputFixtureId: `case-export-v${CASE_SCHEMA_VERSION}`,
527
+ shapeId: 'case.export.v19',
528
+ scope: 'repository',
529
+ }),
530
+ Object.freeze({
531
+ id: 'case-report-v15',
532
+ path: 'test/fixtures/case-lifecycle/case-report-v15.json',
533
+ bytes: 4894,
534
+ sha256: '8e6fe5c4c8cd96aa5a89f39e6290137157db40fe07c84525f26e0a6105e4d162',
535
+ contentDigestSha256: null,
536
+ schema: CASE_REPORT_SCHEMA,
537
+ version: CASE_REPORT_SCHEMA_VERSION,
538
+ role: 'current',
539
+ expectation: 'accepted_exact',
540
+ expectedOutputFixtureId: null,
541
+ shapeId: 'case.report.v15',
542
+ scope: 'repository',
543
+ }),
544
+ Object.freeze({
545
+ id: 'case-response-review-inputs-v7',
546
+ path: 'test/fixtures/case-lifecycle/case-response-review-inputs-v7.json',
547
+ bytes: 7634,
548
+ sha256: 'f8a7de7af1a2f341b5123e0d6c41d10a85f4dcaa13815b3aa7974355f070f55b',
549
+ contentDigestSha256: null,
550
+ schema: CASE_RESPONSE_REVIEW_INPUTS_SCHEMA,
551
+ version: CASE_RESPONSE_REVIEW_INPUTS_VERSION,
552
+ role: 'current',
553
+ expectation: 'accepted_exact',
554
+ expectedOutputFixtureId: null,
555
+ shapeId: 'case.response-review-inputs.v7',
556
+ scope: 'repository',
557
+ }),
558
+ Object.freeze({
559
+ id: 'case-response-packet-v13',
560
+ path: 'test/fixtures/case-lifecycle/case-response-packet-v13.json',
561
+ bytes: 12276,
562
+ sha256: 'e24bfaa12c12ee9bca57e165dcbd8445a9768b3095a19fb08f1c56a12e1acc97',
563
+ contentDigestSha256: "sha256:424cd8a9fd2dbfec2e272891d97359164f4492426e3160eb6e2f52d9b432b9fe",
564
+ schema: CASE_RESPONSE_PACKET_SCHEMA,
565
+ version: CASE_RESPONSE_PACKET_VERSION,
566
+ role: 'current',
567
+ expectation: 'accepted_exact',
568
+ expectedOutputFixtureId: null,
569
+ shapeId: 'case.response-packet.v13',
570
+ scope: 'repository',
571
+ }),
572
+ Object.freeze({
573
+ id: 'cli-case-pack-v2-case-v19-current',
574
+ path: 'test/fixtures/case-lifecycle/cli-case-pack-v2-case-v19-current.json',
575
+ bytes: 9874,
576
+ sha256: 'd29be046deeed1ff8b626ec3e79d7c14be690d35b67a506f95141075f50c3701',
577
+ contentDigestSha256: "sha256:218f1a1ca412920a85c2577b5fc958e6bbef47606da8056a09069619560e8435",
578
+ schema: CLI_CASE_PACK_SCHEMA,
579
+ version: CLI_CASE_PACK_VERSION,
580
+ role: 'current',
581
+ expectation: 'accepted_exact',
582
+ expectedOutputFixtureId: null,
583
+ shapeId: 'case.cli-pack.current',
584
+ scope: 'repository',
585
+ }),
586
+ Object.freeze({
587
+ id: 'workspace-archive-v10-case-v19-empty-current',
588
+ path: 'test/fixtures/case-lifecycle/workspace-archive-v10-case-v19-empty-current.json',
589
+ bytes: 7616,
590
+ sha256: '4dee9ab450b16a2ab4cf46a4807fd2be81c1809c8dd4641fbef47ffb78b21794',
591
+ contentDigestSha256: null,
592
+ schema: WORKSPACE_ARCHIVE_SCHEMA,
593
+ version: WORKSPACE_ARCHIVE_VERSION,
594
+ role: 'current',
595
+ expectation: 'accepted_exact',
596
+ expectedOutputFixtureId: null,
597
+ shapeId: 'case.workspace-archive.v10',
598
+ scope: 'repository',
599
+ }),
450
600
  Object.freeze({
451
601
  id: 'browser-case-v12-public',
452
602
  path: 'test/fixtures/case-lifecycle/browser-case-v12.json',
@@ -457,7 +607,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
457
607
  version: PUBLIC_CASE_SCHEMA_VERSION,
458
608
  role: 'historical',
459
609
  expectation: 'normalises_to_current_output',
460
- expectedOutputFixtureId: 'browser-case-v17',
610
+ expectedOutputFixtureId: `browser-case-v${CASE_SCHEMA_VERSION}`,
461
611
  shapeId: `case.browser-store.v${PUBLIC_CASE_SCHEMA_VERSION}`,
462
612
  scope: 'repository',
463
613
  }),
@@ -471,7 +621,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
471
621
  version: PUBLISHED_V2_CASE_SCHEMA_VERSION,
472
622
  role: 'historical',
473
623
  expectation: 'normalises_to_current_output',
474
- expectedOutputFixtureId: 'browser-case-v17',
624
+ expectedOutputFixtureId: `browser-case-v${CASE_SCHEMA_VERSION}`,
475
625
  shapeId: `case.browser-store.v${PUBLISHED_V2_CASE_SCHEMA_VERSION}`,
476
626
  scope: 'repository',
477
627
  }),
@@ -485,7 +635,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
485
635
  version: PUBLISHED_V2_2_CASE_SCHEMA_VERSION,
486
636
  role: 'historical',
487
637
  expectation: 'normalises_to_current_output',
488
- expectedOutputFixtureId: 'browser-case-v17',
638
+ expectedOutputFixtureId: `browser-case-v${CASE_SCHEMA_VERSION}`,
489
639
  shapeId: `case.browser-store.v${PUBLISHED_V2_2_CASE_SCHEMA_VERSION}`,
490
640
  scope: 'repository',
491
641
  }),
@@ -499,7 +649,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
499
649
  version: PUBLISHED_V2_3_CASE_SCHEMA_VERSION,
500
650
  role: 'historical',
501
651
  expectation: 'normalises_to_current_output',
502
- expectedOutputFixtureId: 'browser-case-v17',
652
+ expectedOutputFixtureId: `browser-case-v${CASE_SCHEMA_VERSION}`,
503
653
  shapeId: `case.browser-store.v${PUBLISHED_V2_3_CASE_SCHEMA_VERSION}`,
504
654
  scope: 'repository',
505
655
  }),
@@ -513,7 +663,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
513
663
  version: INCIDENT_CASE_SCHEMA_VERSION,
514
664
  role: 'historical',
515
665
  expectation: 'normalises_to_current_output',
516
- expectedOutputFixtureId: 'browser-case-v17',
666
+ expectedOutputFixtureId: `browser-case-v${CASE_SCHEMA_VERSION}`,
517
667
  shapeId: `case.browser-store.v${INCIDENT_CASE_SCHEMA_VERSION}`,
518
668
  scope: 'repository',
519
669
  }),
@@ -524,11 +674,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
524
674
  sha256: '8de3bb904b09ec07994d832738b148321902d91c4351763eebdc0cf908bf5429',
525
675
  contentDigestSha256: null,
526
676
  schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA,
527
- version: CASE_SCHEMA_VERSION,
528
- role: 'current',
529
- expectation: 'accepted_exact',
530
- expectedOutputFixtureId: null,
531
- shapeId: `case.browser-store.v${CASE_SCHEMA_VERSION}`,
677
+ version: EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION,
678
+ role: 'historical',
679
+ expectation: 'normalises_to_current_output',
680
+ expectedOutputFixtureId: `browser-case-v${CASE_SCHEMA_VERSION}`,
681
+ shapeId: `case.browser-store.v${EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION}`,
682
+ scope: 'repository',
683
+ }),
684
+ Object.freeze({
685
+ id: 'browser-case-v18',
686
+ path: 'test/fixtures/case-lifecycle/browser-case-v18.json',
687
+ bytes: 3312,
688
+ sha256: 'def2f8c2aca1b124d7361438ab7e448b2f53c2ef6804336da35b441d0233528a',
689
+ contentDigestSha256: null,
690
+ schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA,
691
+ version: OBJECT_RESPONSE_CASE_SCHEMA_VERSION,
692
+ role: 'historical',
693
+ expectation: 'normalises_to_current_output',
694
+ expectedOutputFixtureId: `browser-case-v${CASE_SCHEMA_VERSION}`,
695
+ shapeId: `case.browser-store.v${OBJECT_RESPONSE_CASE_SCHEMA_VERSION}`,
532
696
  scope: 'repository',
533
697
  }),
534
698
  Object.freeze({
@@ -541,7 +705,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
541
705
  version: PUBLIC_CASE_SCHEMA_VERSION,
542
706
  role: 'historical',
543
707
  expectation: 'normalises_to_current_output',
544
- expectedOutputFixtureId: 'case-export-v17',
708
+ expectedOutputFixtureId: `case-export-v${CASE_SCHEMA_VERSION}`,
545
709
  shapeId: `case.export.v${PUBLIC_CASE_SCHEMA_VERSION}`,
546
710
  scope: 'repository',
547
711
  }),
@@ -555,7 +719,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
555
719
  version: PUBLISHED_V2_CASE_SCHEMA_VERSION,
556
720
  role: 'historical',
557
721
  expectation: 'normalises_to_current_output',
558
- expectedOutputFixtureId: 'case-export-v17',
722
+ expectedOutputFixtureId: `case-export-v${CASE_SCHEMA_VERSION}`,
559
723
  shapeId: `case.export.v${PUBLISHED_V2_CASE_SCHEMA_VERSION}`,
560
724
  scope: 'repository',
561
725
  }),
@@ -569,7 +733,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
569
733
  version: PUBLISHED_V2_2_CASE_SCHEMA_VERSION,
570
734
  role: 'historical',
571
735
  expectation: 'normalises_to_current_output',
572
- expectedOutputFixtureId: 'case-export-v17',
736
+ expectedOutputFixtureId: `case-export-v${CASE_SCHEMA_VERSION}`,
573
737
  shapeId: `case.export.v${PUBLISHED_V2_2_CASE_SCHEMA_VERSION}`,
574
738
  scope: 'repository',
575
739
  }),
@@ -583,7 +747,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
583
747
  version: PUBLISHED_V2_3_CASE_SCHEMA_VERSION,
584
748
  role: 'historical',
585
749
  expectation: 'normalises_to_current_output',
586
- expectedOutputFixtureId: 'case-export-v17',
750
+ expectedOutputFixtureId: `case-export-v${CASE_SCHEMA_VERSION}`,
587
751
  shapeId: `case.export.v${PUBLISHED_V2_3_CASE_SCHEMA_VERSION}`,
588
752
  scope: 'repository',
589
753
  }),
@@ -597,7 +761,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
597
761
  version: INCIDENT_CASE_SCHEMA_VERSION,
598
762
  role: 'historical',
599
763
  expectation: 'normalises_to_current_output',
600
- expectedOutputFixtureId: 'case-export-v17',
764
+ expectedOutputFixtureId: `case-export-v${CASE_SCHEMA_VERSION}`,
601
765
  shapeId: `case.export.v${INCIDENT_CASE_SCHEMA_VERSION}`,
602
766
  scope: 'repository',
603
767
  }),
@@ -608,11 +772,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
608
772
  sha256: 'bbce977c1045fd2b5d576619f07c6cc19388d3d192f671f467ab0ad069f01e8b',
609
773
  contentDigestSha256: null,
610
774
  schema: CASE_EXPORT_LIFECYCLE_SCHEMA,
611
- version: CASE_SCHEMA_VERSION,
612
- role: 'current',
613
- expectation: 'accepted_exact',
614
- expectedOutputFixtureId: null,
615
- shapeId: `case.export.v${CASE_SCHEMA_VERSION}`,
775
+ version: EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION,
776
+ role: 'historical',
777
+ expectation: 'normalises_to_current_output',
778
+ expectedOutputFixtureId: `case-export-v${CASE_SCHEMA_VERSION}`,
779
+ shapeId: `case.export.v${EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION}`,
780
+ scope: 'repository',
781
+ }),
782
+ Object.freeze({
783
+ id: 'case-export-v18',
784
+ path: 'test/fixtures/case-lifecycle/case-export-v18.json',
785
+ bytes: 3356,
786
+ sha256: '796744c3dbffdbdb2e93dbece159a812a9c1f7c6e46b9ecd130aa84f1283828b',
787
+ contentDigestSha256: null,
788
+ schema: CASE_EXPORT_LIFECYCLE_SCHEMA,
789
+ version: OBJECT_RESPONSE_CASE_SCHEMA_VERSION,
790
+ role: 'historical',
791
+ expectation: 'normalises_to_current_output',
792
+ expectedOutputFixtureId: `case-export-v${CASE_SCHEMA_VERSION}`,
793
+ shapeId: `case.export.v${OBJECT_RESPONSE_CASE_SCHEMA_VERSION}`,
616
794
  scope: 'repository',
617
795
  }),
618
796
  Object.freeze({
@@ -692,11 +870,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
692
870
  sha256: '3b0e69f800a2b7a087a0ffcdf81ebbe4237863f42aea7812fd0d0f6b600b8426',
693
871
  contentDigestSha256: null,
694
872
  schema: CASE_REPORT_SCHEMA,
695
- version: CASE_REPORT_SCHEMA_VERSION,
696
- role: 'current',
873
+ version: EVIDENCE_FOLLOW_UP_CASE_REPORT_SCHEMA_VERSION,
874
+ role: 'historical',
875
+ expectation: 'accepted_exact',
876
+ expectedOutputFixtureId: null,
877
+ shapeId: `case.report.v${EVIDENCE_FOLLOW_UP_CASE_REPORT_SCHEMA_VERSION}`,
878
+ scope: 'repository',
879
+ }),
880
+ Object.freeze({
881
+ id: 'case-report-v14',
882
+ path: 'test/fixtures/case-lifecycle/case-report-v14.json',
883
+ bytes: 4894,
884
+ sha256: '0fb3613dfaace2f86e38eaa86f9c081a41afde2a7a373a21a6c0de78cd17e6ac',
885
+ contentDigestSha256: null,
886
+ schema: CASE_REPORT_SCHEMA,
887
+ version: OBJECT_RESPONSE_CASE_REPORT_SCHEMA_VERSION,
888
+ role: 'historical',
697
889
  expectation: 'accepted_exact',
698
890
  expectedOutputFixtureId: null,
699
- shapeId: `case.report.v${CASE_REPORT_SCHEMA_VERSION}`,
891
+ shapeId: `case.report.v${OBJECT_RESPONSE_CASE_REPORT_SCHEMA_VERSION}`,
700
892
  scope: 'repository',
701
893
  }),
702
894
  Object.freeze({
@@ -762,11 +954,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
762
954
  sha256: '42817b82fbba58930866d9d4f5554732f56c143fd7a64c6e0acab57b66ddfdce',
763
955
  contentDigestSha256: "sha256:603558cc7a9112ab759b7dd01f44c53c9408ed6d71db19f562fced2629d5c437",
764
956
  schema: CASE_RESPONSE_PACKET_SCHEMA,
765
- version: CASE_RESPONSE_PACKET_VERSION,
766
- role: 'current',
957
+ version: EVIDENCE_FOLLOW_UP_CASE_RESPONSE_PACKET_VERSION,
958
+ role: 'historical',
767
959
  expectation: 'accepted_exact',
768
960
  expectedOutputFixtureId: null,
769
- shapeId: `case.response-packet.v${CASE_RESPONSE_PACKET_VERSION}`,
961
+ shapeId: `case.response-packet.v${EVIDENCE_FOLLOW_UP_CASE_RESPONSE_PACKET_VERSION}`,
962
+ scope: 'repository',
963
+ }),
964
+ Object.freeze({
965
+ id: 'case-response-packet-v12',
966
+ path: 'test/fixtures/case-lifecycle/case-response-packet-v12.json',
967
+ bytes: 12276,
968
+ sha256: '2f35363026f10b5eb7f7c0c3ece9c69ae776b4366510512302d7c43e8baee099',
969
+ contentDigestSha256: 'sha256:4fa4e033ef4cc7943d6ee95e513f27a982f35d0e3da402cda78bc9df28db9e05',
970
+ schema: CASE_RESPONSE_PACKET_SCHEMA,
971
+ version: OBJECT_RESPONSE_CASE_PACKET_VERSION,
972
+ role: 'historical',
973
+ expectation: 'accepted_exact',
974
+ expectedOutputFixtureId: null,
975
+ shapeId: `case.response-packet.v${OBJECT_RESPONSE_CASE_PACKET_VERSION}`,
770
976
  scope: 'repository',
771
977
  }),
772
978
  Object.freeze({
@@ -832,11 +1038,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
832
1038
  sha256: '4a54acbc37ee4384c7a2b5c6168d3fffce6757e259d5314da537c8d423c8bee4',
833
1039
  contentDigestSha256: null,
834
1040
  schema: CASE_RESPONSE_REVIEW_INPUTS_SCHEMA,
835
- version: CASE_RESPONSE_REVIEW_INPUTS_VERSION,
836
- role: 'current',
1041
+ version: EVIDENCE_FOLLOW_UP_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
1042
+ role: 'historical',
837
1043
  expectation: 'accepted_exact',
838
1044
  expectedOutputFixtureId: null,
839
- shapeId: `case.response-review-inputs.v${CASE_RESPONSE_REVIEW_INPUTS_VERSION}`,
1045
+ shapeId: `case.response-review-inputs.v${EVIDENCE_FOLLOW_UP_CASE_RESPONSE_REVIEW_INPUTS_VERSION}`,
1046
+ scope: 'repository',
1047
+ }),
1048
+ Object.freeze({
1049
+ id: 'case-response-review-inputs-v6',
1050
+ path: 'test/fixtures/case-lifecycle/case-response-review-inputs-v6.json',
1051
+ bytes: 7604,
1052
+ sha256: '1cfd2d65b85b3c0c3e92af388be1163eff6efea740a05447bdc54024ed98be0d',
1053
+ contentDigestSha256: null,
1054
+ schema: CASE_RESPONSE_REVIEW_INPUTS_SCHEMA,
1055
+ version: OBJECT_RESPONSE_CASE_REVIEW_INPUTS_VERSION,
1056
+ role: 'historical',
1057
+ expectation: 'accepted_exact',
1058
+ expectedOutputFixtureId: null,
1059
+ shapeId: `case.response-review-inputs.v${OBJECT_RESPONSE_CASE_REVIEW_INPUTS_VERSION}`,
840
1060
  scope: 'repository',
841
1061
  }),
842
1062
  Object.freeze({
@@ -924,8 +1144,8 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
924
1144
  scope: 'repository',
925
1145
  }),
926
1146
  Object.freeze({
927
- id: CLI_CASE_PACK_WRITER_FIXTURE_ID,
928
- path: `test/fixtures/case-lifecycle/${CLI_CASE_PACK_WRITER_FIXTURE_ID}.json`,
1147
+ id: 'cli-case-pack-v2-case-v17-current',
1148
+ path: 'test/fixtures/case-lifecycle/cli-case-pack-v2-case-v17-current.json',
929
1149
  bytes: 9874,
930
1150
  sha256: '3b25440521ddcc1e3ea65a0e56907df4fb725e27b91415c8f1afabab1c4f7e58',
931
1151
  contentDigestSha256: 'sha256:3cbf9f6dcacdc8efdaa55319e5ce7068a5cf2ea116c80e9ff8ccf6d2dc8741c6',
@@ -937,6 +1157,20 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
937
1157
  shapeId: 'case.cli-pack.current',
938
1158
  scope: 'repository',
939
1159
  }),
1160
+ Object.freeze({
1161
+ id: 'cli-case-pack-v2-case-v18-current',
1162
+ path: 'test/fixtures/case-lifecycle/cli-case-pack-v2-case-v18-current.json',
1163
+ bytes: 9874,
1164
+ sha256: 'fb95d648a3e8a6772a0da0726e9259cff622f58287d5cc5d6232904db2e32c42',
1165
+ contentDigestSha256: 'sha256:e55955de4751538fbf5830129d99e08b0aef28325a1d98a31ecfe0b5415cef20',
1166
+ schema: CLI_CASE_PACK_SCHEMA,
1167
+ version: CLI_CASE_PACK_VERSION,
1168
+ role: 'current',
1169
+ expectation: 'accepted_exact',
1170
+ expectedOutputFixtureId: null,
1171
+ shapeId: 'case.cli-pack.current',
1172
+ scope: 'repository',
1173
+ }),
940
1174
  Object.freeze({
941
1175
  id: 'workspace-archive-v5-public',
942
1176
  path: 'test/fixtures/case-lifecycle/workspace-archive-v5-public.json',
@@ -947,7 +1181,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
947
1181
  version: PUBLIC_WORKSPACE_ARCHIVE_VERSION,
948
1182
  role: 'historical',
949
1183
  expectation: 'normalises_to_current_output',
950
- expectedOutputFixtureId: `workspace-archive-v${WORKSPACE_ARCHIVE_VERSION}-empty-current`,
1184
+ expectedOutputFixtureId: WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID,
951
1185
  shapeId: 'case.workspace-archive.v5',
952
1186
  scope: 'repository',
953
1187
  }),
@@ -961,7 +1195,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
961
1195
  version: PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION,
962
1196
  role: 'historical',
963
1197
  expectation: 'normalises_to_current_output',
964
- expectedOutputFixtureId: `workspace-archive-v${WORKSPACE_ARCHIVE_VERSION}-empty-current`,
1198
+ expectedOutputFixtureId: WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID,
965
1199
  shapeId: 'case.workspace-archive.v6',
966
1200
  scope: 'repository',
967
1201
  }),
@@ -975,7 +1209,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
975
1209
  version: PUBLISHED_V2_2_WORKSPACE_ARCHIVE_VERSION,
976
1210
  role: 'historical',
977
1211
  expectation: 'normalises_to_current_output',
978
- expectedOutputFixtureId: `workspace-archive-v${WORKSPACE_ARCHIVE_VERSION}-empty-current`,
1212
+ expectedOutputFixtureId: WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID,
979
1213
  shapeId: 'case.workspace-archive.v7',
980
1214
  scope: 'repository',
981
1215
  }),
@@ -989,7 +1223,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
989
1223
  version: PUBLISHED_V2_3_WORKSPACE_ARCHIVE_VERSION,
990
1224
  role: 'historical',
991
1225
  expectation: 'normalises_to_current_output',
992
- expectedOutputFixtureId: `workspace-archive-v${WORKSPACE_ARCHIVE_VERSION}-empty-current`,
1226
+ expectedOutputFixtureId: WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID,
993
1227
  shapeId: 'case.workspace-archive.v8',
994
1228
  scope: 'repository',
995
1229
  }),
@@ -1000,11 +1234,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
1000
1234
  sha256: '6786a9a892bdc21814b0f1165cd9286fb82258862a4c15140daf9caae71daff0',
1001
1235
  contentDigestSha256: null,
1002
1236
  schema: WORKSPACE_ARCHIVE_SCHEMA,
1237
+ version: LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION,
1238
+ role: 'historical',
1239
+ expectation: 'normalises_to_current_output',
1240
+ expectedOutputFixtureId: WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID,
1241
+ shapeId: 'case.workspace-archive.v9',
1242
+ scope: 'repository',
1243
+ }),
1244
+ Object.freeze({
1245
+ id: 'workspace-archive-v10-empty-current',
1246
+ path: 'test/fixtures/case-lifecycle/workspace-archive-v10-empty-current.json',
1247
+ bytes: 7616,
1248
+ sha256: 'd40c0e6f28cac0cac5b38d45642e9cd86a7d77c689a852e85b2747b376c93a15',
1249
+ contentDigestSha256: null,
1250
+ schema: WORKSPACE_ARCHIVE_SCHEMA,
1003
1251
  version: WORKSPACE_ARCHIVE_VERSION,
1004
1252
  role: 'current',
1005
1253
  expectation: 'accepted_exact',
1006
1254
  expectedOutputFixtureId: null,
1007
- shapeId: `case.workspace-archive.v${WORKSPACE_ARCHIVE_VERSION}`,
1255
+ shapeId: 'case.workspace-archive.v10',
1008
1256
  scope: 'repository',
1009
1257
  }),
1010
1258
  Object.freeze({
@@ -1134,6 +1382,7 @@ const CASE_LIFECYCLE_SHAPES = Object.freeze([
1134
1382
  ...SUPPORTED_CASE_RESPONSE_REVIEW_INPUTS_VERSIONS.filter((version) => version >= PUBLISHED_V2_2_CASE_RESPONSE_REVIEW_INPUTS_VERSION).map((version) => shape(`case.response-review-inputs.v${version}`, CASE_RESPONSE_REVIEW_INPUTS_SCHEMA, [version], [
1135
1383
  'contract', 'version', 'profile', 'case', 'incident', 'contacts',
1136
1384
  'recipientRoute', 'actionBinding', 'selectedEvidence', 'contradictions',
1385
+ ...(version >= 7 ? ['sourceQualifications'] : []),
1137
1386
  'readiness', 'artefactReferences', 'escalationHistory',
1138
1387
  'escalationHistoryOmitted', 'escalationHistoryLimitations', 'responseLifecycle',
1139
1388
  ], 'preserve_signed_document')),
@@ -14,6 +14,7 @@ export const CAPABILITY_IDS = Object.freeze({
14
14
  URLSCAN_SEARCH: 'urlscan_search',
15
15
  URLHAUS_HOST: 'urlhaus_host',
16
16
  THREATFOX_DOMAIN_IOC: 'threatfox_domain_ioc',
17
+ DOMAIN_FEED_SEARCH: 'domain_feed_search',
17
18
  REGISTRAR_RDAP: 'registrar_rdap',
18
19
  NETWORK_CONTEXT: 'network_context',
19
20
  REVERSE_DNS: 'reverse_dns',
@@ -88,6 +89,8 @@ export const CLI_COMMAND_SEMANTICS = Object.freeze({
88
89
  'change-packet': semantic('respond', CAPABILITY_IDS.PORTABLE_EVIDENCE),
89
90
  'sharing-review': semantic('respond', CAPABILITY_IDS.PORTABLE_EVIDENCE),
90
91
  'workflow-plan': semantic('assure', CAPABILITY_IDS.OFFLINE_REVIEW),
92
+ 'watchlist-review': semantic('assure', CAPABILITY_IDS.OFFLINE_REVIEW),
93
+ 'domain-feed': semantic('investigate', CAPABILITY_IDS.OFFLINE_REVIEW),
91
94
  'workflow-run': semantic('assure', CAPABILITY_IDS.WORKFLOW_EXECUTION),
92
95
  diff: semantic('assure', CAPABILITY_IDS.OFFLINE_REVIEW),
93
96
  reconcile: semantic('assure', CAPABILITY_IDS.OFFLINE_REVIEW),
@@ -0,0 +1,4 @@
1
+ export const DOCTOR_SCHEMA = 'whoisleuth.cli.doctor';
2
+ export const DOCTOR_VERSION = 1;
3
+ export const DOCTOR_SUMMARY_SCHEMA = 'whoisleuth.cli.doctor-summary';
4
+ export const DOCTOR_SUMMARY_VERSION = 1;