@slicedearth/whoisleuth-cli 2.4.0 → 2.6.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 (340) hide show
  1. package/DISCLOSURE +1 -1
  2. package/NOTICE +2 -2
  3. package/cli/argument-values.mjs +55 -0
  4. package/cli/arguments.mjs +24 -470
  5. package/cli/artifact-validation/case-response.mjs +67 -9
  6. package/cli/artifact-validation/lookup-evidence.mjs +18 -4
  7. package/cli/artifact-validation/signed-review.mjs +61 -64
  8. package/cli/artifact-verify.mjs +11 -2
  9. package/cli/assurance-arguments.mjs +56 -0
  10. package/cli/assurance-command-definitions.mjs +179 -0
  11. package/cli/assurance-command-runner.mjs +1 -1
  12. package/cli/bounded-json.mjs +1 -1
  13. package/cli/bulk-checkpoint.mjs +1 -1
  14. package/cli/bulk-command-runner.mjs +6 -8
  15. package/cli/bulk.mjs +2 -3
  16. package/cli/case-command.mjs +99 -6
  17. package/cli/case-pack.mjs +19 -4
  18. package/cli/ci-report.mjs +6 -3
  19. package/cli/collection-arguments.mjs +123 -0
  20. package/cli/collection-command-definitions.mjs +330 -0
  21. package/cli/collection-preflight.mjs +8 -1
  22. package/cli/command-argument-grammar.mjs +8 -210
  23. package/cli/command-definition.mjs +330 -0
  24. package/cli/command-reference.mjs +55 -1388
  25. package/cli/command-seeds.mjs +18 -0
  26. package/cli/compare.mjs +1 -1
  27. package/cli/config-profile.mjs +1 -1
  28. package/cli/ct-event-intake.mjs +4 -4
  29. package/cli/discover.mjs +2 -2
  30. package/cli/discovery-observation-snapshot.mjs +2 -2
  31. package/cli/discovery-scan-command-runner.mjs +7 -9
  32. package/cli/discovery-scan.mjs +1 -1
  33. package/cli/discovery-snapshot.mjs +2 -2
  34. package/cli/discovery-workflow.mjs +4 -4
  35. package/cli/domain-control-monitor.mjs +6 -6
  36. package/cli/domain-control-observations.mjs +2 -1
  37. package/cli/domain-feed.mjs +61 -0
  38. package/cli/errors.mjs +5 -6
  39. package/cli/evidence-arguments.mjs +46 -0
  40. package/cli/evidence-command-definitions.mjs +69 -0
  41. package/cli/evidence-command-runner.mjs +2 -3
  42. package/cli/evidence-signing.mjs +3 -2
  43. package/cli/external-observation-mapping.mjs +2 -2
  44. package/cli/formatters/json.mjs +1 -13
  45. package/cli/formatters/terminal-command-formats.mjs +6 -0
  46. package/cli/formatters/terminal-lookup.mjs +6 -0
  47. package/cli/history-arguments.mjs +39 -0
  48. package/cli/history-command-definitions.mjs +88 -0
  49. package/cli/indicator-set-command.mjs +32 -0
  50. package/cli/inline-command-families.mjs +6 -47
  51. package/cli/inline-command-runner.mjs +4 -31
  52. package/cli/input.mjs +2 -2
  53. package/cli/intake-command.mjs +147 -0
  54. package/cli/interchange-report.mjs +4 -2
  55. package/cli/investigation-artifacts.mjs +3 -4
  56. package/cli/investigation-package-review.mjs +2 -0
  57. package/cli/investigation-plan.mjs +32 -154
  58. package/cli/investigation-recipes.mjs +177 -0
  59. package/cli/investigation-run.mjs +78 -12
  60. package/cli/local-mmdb-review.mjs +220 -17
  61. package/cli/lookalike-calibration.mjs +1 -1
  62. package/cli/lookup-brief.mjs +2 -2
  63. package/cli/lookup-command-runner.mjs +19 -35
  64. package/cli/lookup-diff.mjs +10 -9
  65. package/cli/lookup-plan.mjs +10 -14
  66. package/cli/lookup-reconcile.mjs +6 -5
  67. package/cli/lookup-timeline.mjs +7 -6
  68. package/cli/mail-header-review.mjs +24 -247
  69. package/cli/mail-review.mjs +9 -7
  70. package/cli/network-arguments.mjs +51 -0
  71. package/cli/network-command-definitions.mjs +130 -0
  72. package/cli/network-command-runner.mjs +43 -31
  73. package/cli/offline-evidence-review.mjs +85 -6
  74. package/cli/posture.mjs +1 -1
  75. package/cli/registry-fixture-scaffold.mjs +1 -1
  76. package/cli/retained-artifact-diff.mjs +8 -7
  77. package/cli/review-arguments.mjs +132 -0
  78. package/cli/review-command-definitions.mjs +279 -0
  79. package/cli/review-command-runner.mjs +72 -159
  80. package/cli/risk-calibration.mjs +14 -12
  81. package/cli/runner.mjs +20 -32
  82. package/cli/saved-lookup.mjs +2 -2
  83. package/cli/selected-input-worker.mjs +73 -0
  84. package/cli/sharing-review.mjs +5 -64
  85. package/cli/source-reliability.mjs +2 -2
  86. package/cli/support-arguments.mjs +49 -0
  87. package/cli/support-command-definitions.mjs +209 -0
  88. package/cli/support-command-runner.mjs +4 -4
  89. package/cli/watchlist-review.mjs +43 -0
  90. package/cli/workflow-arguments.mjs +100 -0
  91. package/cli/workflow-command-definitions.mjs +103 -0
  92. package/cli/workflow-command-runner.mjs +40 -1
  93. package/docs/cli-reference.md +27 -0
  94. package/docs/cli.md +322 -4
  95. package/docs/contextual-reviews.md +178 -0
  96. package/docs/infrastructure-observations.md +126 -0
  97. package/docs/offline-intake-context.md +213 -0
  98. package/lib/analyst-taxonomy.mjs +2 -40
  99. package/lib/application-version.mjs +1 -1
  100. package/lib/availability.mjs +13 -789
  101. package/lib/bounded-contract-normalizers.mjs +4 -0
  102. package/lib/bounded-json.mjs +2 -330
  103. package/lib/browser-library-profile.mjs +62 -84
  104. package/lib/candidate-provenance-bounds.mjs +2 -0
  105. package/lib/classify.mjs +1 -1
  106. package/lib/credential-form-attribution.mjs +136 -0
  107. package/lib/credential-surface-profile.mjs +6 -2
  108. package/lib/ct-query.mjs +2 -27
  109. package/lib/ct-response-bounds.mjs +2 -9
  110. package/lib/ct-search.mjs +83 -47
  111. package/lib/dmarc-discovery.mjs +62 -0
  112. package/lib/dns-convergence-review.mjs +21 -8
  113. package/lib/dns-delegation-health.mjs +35 -15
  114. package/lib/dns-inheritance-review.mjs +53 -63
  115. package/lib/dns-intelligence.mjs +27 -11
  116. package/lib/dns-query-coverage.mjs +40 -0
  117. package/lib/domain-assurance.mjs +1 -1
  118. package/lib/domain-change-packet.mjs +12 -13
  119. package/lib/domain-change-review.mjs +32 -14
  120. package/lib/domain-control-flight-recorder.mjs +103 -27
  121. package/lib/domain-control-manifest.mjs +25 -17
  122. package/lib/domain-posture-analysis.mjs +75 -7
  123. package/lib/domain-posture-parsers.mjs +9 -0
  124. package/lib/domain-posture.mjs +45 -25
  125. package/lib/domain-registration.mjs +392 -0
  126. package/lib/evidence-export-privacy.mjs +27 -17
  127. package/lib/evidence-export.mjs +3 -3
  128. package/lib/evidence-report.mjs +5 -1
  129. package/lib/external-intelligence-risk.mjs +2 -124
  130. package/lib/favicon.mjs +13 -4
  131. package/lib/generated/cisa-kev-catalog.mjs +41 -3
  132. package/lib/generated/registrar-standing-catalogue.mjs +18 -10
  133. package/lib/generated/retire-browser-catalog.mjs +332 -19
  134. package/lib/generated/{unicode-confusables-17.mjs → unicode-confusables.mjs} +33 -33
  135. package/lib/html-signals.mjs +13 -2
  136. package/lib/http-evidence-bounds.mjs +2 -8
  137. package/lib/http-intelligence.mjs +13 -1
  138. package/lib/idn-confusable-policy.mjs +6 -4
  139. package/lib/idn-confusables.mjs +1 -1
  140. package/lib/interchange-fidelity-registry.mjs +10 -0
  141. package/lib/lookup-child-profile-contract.mjs +28 -11
  142. package/lib/lookup-contract-primitives.mjs +1 -1
  143. package/lib/lookup-diagnostics.mjs +1 -23
  144. package/lib/lookup-network-evidence-bounds.mjs +1 -10
  145. package/lib/lookup-progress.mjs +50 -1
  146. package/lib/lookup-response-contract.mjs +70 -40
  147. package/lib/lookup-response.mjs +5 -15
  148. package/lib/lookup-source-progress.mjs +8 -22
  149. package/lib/lookup.mjs +1 -1
  150. package/lib/operation-budget.mjs +4 -0
  151. package/lib/opportunity-scoring.mjs +2 -107
  152. package/lib/outbound-identity.mjs +1 -1
  153. package/lib/page-fingerprints.mjs +18 -1
  154. package/lib/perceptual-hash-comparison.mjs +2 -34
  155. package/lib/perceptual-hash.mjs +36 -10
  156. package/lib/portable-generator.mjs +2 -29
  157. package/lib/project-metadata.mjs +2 -8
  158. package/lib/rdap-client.mjs +11 -7
  159. package/lib/registrable-domain.mjs +2 -56
  160. package/lib/registrar-standing-contract.mjs +1 -1
  161. package/lib/registrar-standing.mjs +9 -13
  162. package/lib/registry-capabilities.mjs +2 -2
  163. package/lib/registry-capability-catalogue.mjs +27 -19
  164. package/lib/risk-calibration-summary.mjs +2 -352
  165. package/lib/risk-scoring.mjs +2 -345
  166. package/lib/scoring-evidence-quality.mjs +2 -107
  167. package/lib/semantic-version.mjs +2 -54
  168. package/lib/service-binding-dns.mjs +46 -2
  169. package/lib/smtp-transport-review.mjs +48 -19
  170. package/lib/sslbl-certificates.generated.mjs +142 -139
  171. package/lib/static-html-analysis.mjs +32 -4
  172. package/lib/structured-data-identity.mjs +1 -1
  173. package/lib/technology-evidence-role.mjs +1 -51
  174. package/lib/threat-intelligence-manifests.mjs +1 -1
  175. package/lib/threat-intelligence-runtime.mjs +1 -1
  176. package/lib/threat-intelligence-targets.mjs +1 -1
  177. package/lib/threat-intelligence-types.mjs +2 -75
  178. package/lib/tls-intelligence.mjs +30 -5
  179. package/lib/typosquat-generator.mjs +11 -2
  180. package/lib/website-enrichment.mjs +404 -0
  181. package/lib/whois-authority.mjs +43 -5
  182. package/lib/whois-chain.mjs +12 -3
  183. package/lib/whois-common-formats.mjs +3 -1
  184. package/lib/whois-contacts.mjs +13 -2
  185. package/lib/whois-normalization.mjs +3 -1
  186. package/lib/whois-parser.mjs +5 -3
  187. package/package.json +15 -14
  188. package/packages/analysis/analyst-taxonomy.mjs +40 -0
  189. package/packages/analysis/bounded-json.mjs +330 -0
  190. package/packages/analysis/candidate-provenance-bounds.mjs +4 -0
  191. package/packages/analysis/cli-argument-grammar.mjs +216 -0
  192. package/packages/analysis/ct-query.mjs +27 -0
  193. package/packages/analysis/ct-response-bounds.mjs +9 -0
  194. package/packages/analysis/external-intelligence-risk.mjs +124 -0
  195. package/packages/analysis/http-evidence-bounds.mjs +8 -0
  196. package/packages/analysis/lookup-network-evidence-bounds.mjs +10 -0
  197. package/packages/analysis/opportunity-scoring.mjs +107 -0
  198. package/packages/analysis/perceptual-hash-comparison.mjs +34 -0
  199. package/packages/analysis/portable-generator.mjs +29 -0
  200. package/packages/analysis/project-metadata.mjs +8 -0
  201. package/packages/analysis/registrable-domain.mjs +56 -0
  202. package/packages/analysis/risk-calibration-summary.mjs +352 -0
  203. package/packages/analysis/risk-scoring.mjs +348 -0
  204. package/packages/analysis/scoring-evidence-quality.mjs +107 -0
  205. package/packages/analysis/semantic-version.mjs +54 -0
  206. package/packages/analysis/threat-intelligence-types.mjs +75 -0
  207. package/packages/cases/case-containment-handoff.mjs +195 -0
  208. package/packages/cases/case-evidence-links.mjs +151 -0
  209. package/packages/cases/case-evidence-model.mjs +89 -12
  210. package/packages/cases/case-evidence-quality.mjs +5 -0
  211. package/packages/cases/case-export-input.mjs +7 -5
  212. package/packages/cases/case-incident-context.mjs +52 -0
  213. package/packages/cases/case-markdown.mjs +11 -0
  214. package/packages/cases/case-migration-model.mjs +40 -24
  215. package/packages/cases/case-object-coverage.mjs +33 -0
  216. package/packages/cases/case-packet-correction.mjs +106 -0
  217. package/packages/cases/case-recheck-model.mjs +124 -36
  218. package/packages/cases/case-record-contracts.mjs +1 -1
  219. package/packages/cases/case-record-core.mjs +1 -1
  220. package/packages/cases/case-record-operations.mjs +111 -118
  221. package/packages/cases/case-record-projection.mjs +23 -4
  222. package/packages/cases/case-record-version-input.mjs +41 -0
  223. package/packages/cases/case-report.mjs +93 -27
  224. package/packages/cases/case-requested-evidence.mjs +146 -0
  225. package/packages/cases/case-response-actions.mjs +159 -1
  226. package/packages/cases/case-response-model.mjs +16 -1
  227. package/packages/cases/case-response-object.mjs +119 -0
  228. package/packages/cases/case-response-outcomes.mjs +108 -20
  229. package/packages/cases/case-response-packet-render.mjs +35 -12
  230. package/packages/cases/case-response-packet.mjs +55 -13
  231. package/packages/cases/case-response-records.mjs +0 -1
  232. package/packages/cases/case-response-review-inputs.mjs +60 -8
  233. package/packages/cases/case-storage-model.mjs +1 -1
  234. package/packages/cases/case-workflow-metadata.mjs +217 -0
  235. package/packages/cases/case-workflow-migration.mjs +43 -0
  236. package/packages/cases/http-summary.mjs +6 -1
  237. package/packages/comparison/favicon-similarity.mjs +1 -1
  238. package/packages/comparison/page-similarity.mjs +1 -1
  239. package/packages/comparison/relationship-evidence.mjs +21 -9
  240. package/packages/comparison/relationship-provenance.mjs +7 -1
  241. package/packages/contracts/analyst-interchange.mjs +35 -15
  242. package/packages/contracts/candidate-watch-review.mjs +54 -0
  243. package/packages/contracts/case-portability.mjs +360 -49
  244. package/packages/contracts/cli-command-semantics.mjs +5 -0
  245. package/packages/contracts/cli-grammar.mjs +6 -0
  246. package/packages/contracts/cli-lookup-brief.mjs +2 -0
  247. package/packages/contracts/context-review.mjs +25 -0
  248. package/packages/contracts/document-intake.mjs +11 -0
  249. package/packages/contracts/domain-control-flight-recorder.mjs +30 -14
  250. package/packages/contracts/domain-control-manifest.mjs +1 -1
  251. package/packages/contracts/domain-control-monitor.mjs +13 -2
  252. package/packages/contracts/domain-control-review.mjs +36 -15
  253. package/packages/contracts/external-observation-interchange.mjs +96 -28
  254. package/packages/contracts/har-review.mjs +2 -0
  255. package/packages/contracts/identity-events.mjs +4 -0
  256. package/packages/contracts/investigation-run.mjs +2 -0
  257. package/packages/contracts/ip-address.mjs +10 -0
  258. package/packages/contracts/lookup-evidence.mjs +3 -2
  259. package/packages/contracts/mail-authentication.mjs +5 -0
  260. package/packages/contracts/message-intake.mjs +37 -0
  261. package/packages/contracts/offline-comparison.mjs +4 -1
  262. package/packages/contracts/passive-mail.mjs +10 -0
  263. package/packages/contracts/risk-calibration.mjs +44 -29
  264. package/packages/contracts/schema-lifecycle.mjs +3 -1
  265. package/packages/contracts/web-capture.mjs +2 -2
  266. package/packages/contracts/workspace-portability.mjs +144 -28
  267. package/packages/evidence/collection-quality.mjs +67 -0
  268. package/packages/evidence/credential-form-attribution.mjs +60 -0
  269. package/packages/evidence/dns-query-outcome.mjs +72 -0
  270. package/packages/evidence/email-recipient.mjs +18 -0
  271. package/packages/evidence/image-regions.mjs +15 -0
  272. package/packages/evidence/lookup-target.mjs +5 -1
  273. package/packages/evidence/observation.mjs +2 -0
  274. package/packages/evidence/png-pixels.mjs +117 -0
  275. package/packages/evidence/public-address-policy.mjs +83 -0
  276. package/packages/evidence/record-identity.mjs +60 -16
  277. package/packages/evidence/technology-evidence-role.mjs +51 -0
  278. package/packages/interchange/defensive-indicator-export.mjs +264 -0
  279. package/packages/interchange/external-findings-import.mjs +36 -29
  280. package/packages/interchange/json-output.mjs +14 -0
  281. package/packages/interchange/managed-indicator-export.mjs +36 -0
  282. package/packages/interchange/managed-indicator-set.mjs +223 -0
  283. package/packages/interchange/misp-indicator-export.mjs +93 -0
  284. package/packages/interchange/sharing-policy.mjs +56 -0
  285. package/packages/interchange/stix-indicator-export.mjs +129 -0
  286. package/packages/interchange/web-capture-import.mjs +22 -15
  287. package/packages/investigation/acquisition-decision-packet.mjs +79 -1
  288. package/packages/investigation/bulk-mail-exposure.mjs +7 -13
  289. package/packages/investigation/capture-coverage.mjs +57 -0
  290. package/packages/investigation/connector-provenance-review.mjs +100 -0
  291. package/packages/investigation/context-review.mjs +35 -0
  292. package/packages/investigation/document-intake.mjs +87 -0
  293. package/packages/investigation/docx-intake.mjs +133 -0
  294. package/packages/investigation/domain-history-review.mjs +132 -0
  295. package/packages/investigation/domain-transition-review.mjs +49 -0
  296. package/packages/investigation/evidence-coverage-ledger.mjs +9 -1
  297. package/packages/investigation/har-intake.mjs +68 -0
  298. package/packages/investigation/identity-event-intake.mjs +131 -0
  299. package/packages/investigation/identity-incident-review.mjs +39 -0
  300. package/packages/investigation/incident-sequence-review.mjs +58 -0
  301. package/packages/investigation/infrastructure-observation.mjs +234 -0
  302. package/packages/investigation/intake-context.mjs +284 -0
  303. package/packages/investigation/intake-indicators.mjs +116 -0
  304. package/packages/investigation/intake-phones.mjs +155 -0
  305. package/packages/investigation/intake-report.mjs +20 -0
  306. package/packages/investigation/investigation-manifest.mjs +35 -9
  307. package/packages/investigation/link-intake.mjs +209 -0
  308. package/packages/investigation/lookup-asset-graph.mjs +1 -1
  309. package/packages/investigation/mail-authentication-review.mjs +222 -0
  310. package/packages/investigation/mail-header-identity.mjs +209 -0
  311. package/packages/investigation/message-intake.mjs +235 -0
  312. package/packages/investigation/page-behaviour.mjs +113 -0
  313. package/packages/investigation/pdf-intake.mjs +155 -0
  314. package/packages/investigation/platform-continuity-review.mjs +60 -0
  315. package/packages/investigation/qr-intake.mjs +56 -0
  316. package/packages/investigation/requested-action-hints.mjs +11 -0
  317. package/packages/investigation/selected-input-review.mjs +17 -0
  318. package/packages/investigation/storefront-review.mjs +70 -0
  319. package/packages/monitoring/domain-feed.mjs +321 -0
  320. package/packages/workspace/brand-candidate-workflow.mjs +351 -0
  321. package/packages/workspace/brand-keyword-campaign.mjs +231 -0
  322. package/packages/workspace/brand-profile-model.mjs +48 -4
  323. package/packages/workspace/bulk-review-model.mjs +28 -26
  324. package/packages/workspace/bulk-session-model.mjs +27 -13
  325. package/packages/workspace/campaign-model.mjs +1 -1
  326. package/packages/workspace/candidate-watch-handoff.mjs +195 -0
  327. package/packages/workspace/detection-rule-model.mjs +11 -3
  328. package/packages/workspace/hostile-input.mjs +1 -1
  329. package/packages/workspace/investigation-guide.mjs +2 -2
  330. package/packages/workspace/investigation-template-model.mjs +26 -2
  331. package/packages/workspace/page-baseline.mjs +2 -2
  332. package/packages/workspace/relationship-observation-model.mjs +17 -13
  333. package/packages/workspace/shortlist-model.mjs +24 -7
  334. package/packages/workspace/watchlist-history.mjs +59 -16
  335. package/packages/workspace/watchlist-store.mjs +152 -11
  336. package/packages/workspace/website-snapshot-model.mjs +28 -3
  337. package/packages/workspace/workspace-archive-crypto.mjs +1 -1
  338. package/packages/workspace/workspace-archive.mjs +5 -4
  339. package/third-party-notices.txt +549 -16
  340. package/lib/hostname.mjs +0 -2
@@ -3,14 +3,15 @@ import { defineSchemaCompatibility } from "./schema-compatibility.mjs";
3
3
  import { defineSchemaLifecycleFamily } from "./schema-lifecycle.mjs";
4
4
  export const CASE_CONTRACT_OWNER = 'packages/contracts/case-portability.mts';
5
5
  export const MAX_CASE_OBJECTIVE_LENGTH = 320;
6
- export const LATEST_PUBLIC_APPLICATION_VERSION = '2.3.0';
7
- // Published writer identities are independent of the next writer. Historical
8
- // readers below use fixed release epochs, never a moving "latest" identity.
9
- export const LATEST_PUBLIC_CASE_SCHEMA_VERSION = 15;
10
- export const LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION = 11;
11
- export const LATEST_PUBLIC_CASE_RESPONSE_PACKET_VERSION = 9;
12
- export const LATEST_PUBLIC_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 3;
13
- export const LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION = 8;
6
+ // These published export names identify a format checkpoint, not the newest
7
+ // application patch. Release verification reads the preceding tag's durable
8
+ // commitments directly. Historical readers use fixed schema epochs below.
9
+ export const LATEST_PUBLIC_APPLICATION_VERSION = '2.4.0';
10
+ export const LATEST_PUBLIC_CASE_SCHEMA_VERSION = 16;
11
+ export const LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION = 12;
12
+ export const LATEST_PUBLIC_CASE_RESPONSE_PACKET_VERSION = 10;
13
+ export const LATEST_PUBLIC_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 4;
14
+ export const LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION = 9;
14
15
  export const CASE_PORTABILITY_IDENTITY_CONSTANTS = Object.freeze([
15
16
  'LATEST_PUBLIC_APPLICATION_VERSION',
16
17
  'LATEST_PUBLIC_CASE_SCHEMA_VERSION',
@@ -27,6 +28,7 @@ export const CASE_PORTABILITY_IDENTITY_CONSTANTS = Object.freeze([
27
28
  'PUBLISHED_V2_3_CASE_REPORT_SCHEMA_VERSION',
28
29
  'PUBLISHED_V2_3_CASE_RESPONSE_PACKET_VERSION',
29
30
  'PUBLISHED_V2_3_CASE_RESPONSE_REVIEW_INPUTS_VERSION',
31
+ 'PUBLISHED_V2_3_WORKSPACE_ARCHIVE_VERSION',
30
32
  'CASE_BROWSER_STORE_LIFECYCLE_SCHEMA',
31
33
  'CASE_EXPORT_LIFECYCLE_SCHEMA',
32
34
  'CASE_SCHEMA_VERSION',
@@ -52,6 +54,7 @@ export const CASE_PORTABILITY_IDENTITY_CONSTANTS = Object.freeze([
52
54
  'WORKSPACE_ARCHIVE_SCHEMA',
53
55
  'PUBLIC_WORKSPACE_ARCHIVE_VERSION',
54
56
  'WORKSPACE_ARCHIVE_VERSION',
57
+ 'WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID',
55
58
  'SUPPORTED_WORKSPACE_ARCHIVE_VERSIONS',
56
59
  'PUBLIC_WORKSPACE_ARCHIVE_SECTION_IDS',
57
60
  'WORKSPACE_ARCHIVE_SECTION_IDS',
@@ -158,12 +161,18 @@ export const PUBLISHED_V2_CASE_SCHEMA_VERSION = 13;
158
161
  export const PUBLISHED_V2_2_CASE_SCHEMA_VERSION = 14;
159
162
  export const PUBLISHED_V2_3_CASE_SCHEMA_VERSION = 15;
160
163
  export const INCIDENT_CASE_SCHEMA_VERSION = 16;
161
- export const CASE_SCHEMA_VERSION = INCIDENT_CASE_SCHEMA_VERSION;
164
+ export const EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION = 17;
165
+ export const OBJECT_RESPONSE_CASE_SCHEMA_VERSION = 18;
166
+ export const DELIVERY_CORRECTION_CASE_SCHEMA_VERSION = 19;
167
+ export const CASE_SCHEMA_VERSION = DELIVERY_CORRECTION_CASE_SCHEMA_VERSION;
162
168
  export const CASE_BROWSER_SUPPORTED_VERSIONS = Object.freeze([
163
169
  PUBLIC_CASE_SCHEMA_VERSION,
164
170
  PUBLISHED_V2_CASE_SCHEMA_VERSION,
165
171
  PUBLISHED_V2_2_CASE_SCHEMA_VERSION,
166
172
  PUBLISHED_V2_3_CASE_SCHEMA_VERSION,
173
+ INCIDENT_CASE_SCHEMA_VERSION,
174
+ EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION,
175
+ OBJECT_RESPONSE_CASE_SCHEMA_VERSION,
167
176
  CASE_SCHEMA_VERSION,
168
177
  ]);
169
178
  export const CASE_IMPORT_VERSIONS = CASE_BROWSER_SUPPORTED_VERSIONS;
@@ -172,11 +181,16 @@ export const PUBLIC_CASE_REPORT_SCHEMA_VERSION = 8;
172
181
  export const PUBLISHED_V2_CASE_REPORT_SCHEMA_VERSION = 9;
173
182
  export const PUBLISHED_V2_2_CASE_REPORT_SCHEMA_VERSION = 10;
174
183
  export const PUBLISHED_V2_3_CASE_REPORT_SCHEMA_VERSION = 11;
175
- export const CASE_REPORT_SCHEMA_VERSION = 12;
184
+ export const EVIDENCE_FOLLOW_UP_CASE_REPORT_SCHEMA_VERSION = 13;
185
+ export const OBJECT_RESPONSE_CASE_REPORT_SCHEMA_VERSION = 14;
186
+ export const CASE_REPORT_SCHEMA_VERSION = 15;
176
187
  export const CASE_REPORT_OUTPUT_VERSIONS = Object.freeze([
177
188
  PUBLISHED_V2_CASE_REPORT_SCHEMA_VERSION,
178
189
  PUBLISHED_V2_2_CASE_REPORT_SCHEMA_VERSION,
179
190
  PUBLISHED_V2_3_CASE_REPORT_SCHEMA_VERSION,
191
+ LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION,
192
+ EVIDENCE_FOLLOW_UP_CASE_REPORT_SCHEMA_VERSION,
193
+ OBJECT_RESPONSE_CASE_REPORT_SCHEMA_VERSION,
180
194
  CASE_REPORT_SCHEMA_VERSION,
181
195
  ]);
182
196
  export const CASE_RESPONSE_PACKET_SCHEMA = 'whoisleuth.case-response-packet';
@@ -184,12 +198,17 @@ export const PUBLIC_CASE_RESPONSE_PACKET_VERSION = 6;
184
198
  export const PUBLISHED_V2_CASE_RESPONSE_PACKET_VERSION = 7;
185
199
  export const PUBLISHED_V2_2_CASE_RESPONSE_PACKET_VERSION = 8;
186
200
  export const PUBLISHED_V2_3_CASE_RESPONSE_PACKET_VERSION = 9;
187
- export const CASE_RESPONSE_PACKET_VERSION = 10;
201
+ export const EVIDENCE_FOLLOW_UP_CASE_RESPONSE_PACKET_VERSION = 11;
202
+ export const OBJECT_RESPONSE_CASE_PACKET_VERSION = 12;
203
+ export const CASE_RESPONSE_PACKET_VERSION = 13;
188
204
  export const CASE_RESPONSE_PACKET_OUTPUT_VERSIONS = Object.freeze([
189
205
  PUBLIC_CASE_RESPONSE_PACKET_VERSION,
190
206
  PUBLISHED_V2_CASE_RESPONSE_PACKET_VERSION,
191
207
  PUBLISHED_V2_2_CASE_RESPONSE_PACKET_VERSION,
192
208
  PUBLISHED_V2_3_CASE_RESPONSE_PACKET_VERSION,
209
+ LATEST_PUBLIC_CASE_RESPONSE_PACKET_VERSION,
210
+ EVIDENCE_FOLLOW_UP_CASE_RESPONSE_PACKET_VERSION,
211
+ OBJECT_RESPONSE_CASE_PACKET_VERSION,
193
212
  CASE_RESPONSE_PACKET_VERSION,
194
213
  ]);
195
214
  export const SUPPORTED_CASE_RESPONSE_PACKET_VERSIONS = CASE_RESPONSE_PACKET_OUTPUT_VERSIONS;
@@ -197,16 +216,21 @@ export const CASE_RESPONSE_REVIEW_INPUTS_SCHEMA = 'whoisleuth.case-response-revi
197
216
  export const PUBLISHED_V2_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 1;
198
217
  export const PUBLISHED_V2_2_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 2;
199
218
  export const PUBLISHED_V2_3_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 3;
200
- export const CASE_RESPONSE_REVIEW_INPUTS_VERSION = 4;
219
+ export const EVIDENCE_FOLLOW_UP_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 5;
220
+ export const OBJECT_RESPONSE_CASE_REVIEW_INPUTS_VERSION = 6;
221
+ export const CASE_RESPONSE_REVIEW_INPUTS_VERSION = 7;
201
222
  export const SUPPORTED_CASE_RESPONSE_REVIEW_INPUTS_VERSIONS = Object.freeze([
202
223
  PUBLISHED_V2_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
203
224
  PUBLISHED_V2_2_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
204
225
  PUBLISHED_V2_3_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
226
+ LATEST_PUBLIC_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
227
+ EVIDENCE_FOLLOW_UP_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
228
+ OBJECT_RESPONSE_CASE_REVIEW_INPUTS_VERSION,
205
229
  CASE_RESPONSE_REVIEW_INPUTS_VERSION,
206
230
  ]);
207
231
  export const CLI_CASE_PACK_SCHEMA = 'whoisleuth.cli.case-pack';
208
232
  export const CLI_CASE_PACK_VERSION = 2;
209
- export const CLI_CASE_PACK_WRITER_FIXTURE_ID = 'cli-case-pack-v2-case-v16-current';
233
+ export const CLI_CASE_PACK_WRITER_FIXTURE_ID = 'cli-case-pack-v2-case-v19-current';
210
234
  export const CLI_CASE_PACK_INPUT_CASE_VERSIONS = Object.freeze(CASE_IMPORT_VERSIONS.filter((version) => version >= PUBLISHED_V2_3_CASE_SCHEMA_VERSION));
211
235
  export const SUPPORTED_CLI_CASE_PACK_VERSIONS = Object.freeze([CLI_CASE_PACK_VERSION]);
212
236
  export const CLI_CASE_PACK_ROOT_KEYS = Object.freeze(['version', 'exportedAt', 'cases', 'packet', 'integrity']);
@@ -225,6 +249,9 @@ export const CLI_CASE_PACK_CASE_REPORT_EPOCHS = Object.freeze([
225
249
  Object.freeze({ caseVersions: Object.freeze([PUBLISHED_V2_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([PUBLISHED_V2_CASE_REPORT_SCHEMA_VERSION]) }),
226
250
  Object.freeze({ caseVersions: Object.freeze([PUBLISHED_V2_2_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([PUBLISHED_V2_2_CASE_REPORT_SCHEMA_VERSION]) }),
227
251
  Object.freeze({ caseVersions: Object.freeze([PUBLISHED_V2_3_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([PUBLISHED_V2_3_CASE_REPORT_SCHEMA_VERSION]) }),
252
+ Object.freeze({ caseVersions: Object.freeze([INCIDENT_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION]) }),
253
+ Object.freeze({ caseVersions: Object.freeze([EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([EVIDENCE_FOLLOW_UP_CASE_REPORT_SCHEMA_VERSION]) }),
254
+ Object.freeze({ caseVersions: Object.freeze([OBJECT_RESPONSE_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([OBJECT_RESPONSE_CASE_REPORT_SCHEMA_VERSION]) }),
228
255
  Object.freeze({ caseVersions: Object.freeze([CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([CASE_REPORT_SCHEMA_VERSION]) }),
229
256
  ]);
230
257
  export function caseReportVersionMatchesCase(caseVersion, reportVersion) {
@@ -237,11 +264,14 @@ export const WORKSPACE_ARCHIVE_SCHEMA = 'whoisleuth.workspace-archive';
237
264
  export const PUBLIC_WORKSPACE_ARCHIVE_VERSION = 5;
238
265
  export const PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION = 6;
239
266
  export const PUBLISHED_V2_2_WORKSPACE_ARCHIVE_VERSION = 7;
240
- export const WORKSPACE_ARCHIVE_VERSION = 9;
267
+ export const PUBLISHED_V2_3_WORKSPACE_ARCHIVE_VERSION = 8;
268
+ export const WORKSPACE_ARCHIVE_VERSION = 10;
269
+ export const WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID = 'workspace-archive-v10-case-v19-empty-current';
241
270
  export const SUPPORTED_WORKSPACE_ARCHIVE_VERSIONS = Object.freeze([
242
271
  PUBLIC_WORKSPACE_ARCHIVE_VERSION,
243
272
  PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION,
244
273
  PUBLISHED_V2_2_WORKSPACE_ARCHIVE_VERSION,
274
+ PUBLISHED_V2_3_WORKSPACE_ARCHIVE_VERSION,
245
275
  LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION,
246
276
  WORKSPACE_ARCHIVE_VERSION,
247
277
  ]);
@@ -438,6 +468,104 @@ export function serialiseWorkspaceArchiveSection(value) {
438
468
  return serialised;
439
469
  }
440
470
  const CASE_LIFECYCLE_FIXTURES = Object.freeze([
471
+ Object.freeze({
472
+ id: 'browser-case-v19',
473
+ path: 'test/fixtures/case-lifecycle/browser-case-v19.json',
474
+ bytes: 3312,
475
+ sha256: '3d3c3c3f35f05406d5f4d2b9a0925e6971a9dd237f570733a0b1e82a52d99a92',
476
+ contentDigestSha256: null,
477
+ schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA,
478
+ version: CASE_SCHEMA_VERSION,
479
+ role: 'current',
480
+ expectation: 'accepted_exact',
481
+ expectedOutputFixtureId: null,
482
+ shapeId: 'case.browser-store.v19',
483
+ scope: 'repository',
484
+ }),
485
+ Object.freeze({
486
+ id: 'case-export-v19',
487
+ path: 'test/fixtures/case-lifecycle/case-export-v19.json',
488
+ bytes: 3356,
489
+ sha256: '65cbb4952766cf6016d4ba81b5859a8a2bd16eb373c7c2f6d08d666aa29c99c1',
490
+ contentDigestSha256: null,
491
+ schema: CASE_EXPORT_LIFECYCLE_SCHEMA,
492
+ version: CASE_SCHEMA_VERSION,
493
+ role: 'current',
494
+ expectation: 'accepted_exact',
495
+ expectedOutputFixtureId: null,
496
+ shapeId: 'case.export.v19',
497
+ scope: 'repository',
498
+ }),
499
+ Object.freeze({
500
+ id: 'case-report-v15',
501
+ path: 'test/fixtures/case-lifecycle/case-report-v15.json',
502
+ bytes: 4894,
503
+ sha256: '8e6fe5c4c8cd96aa5a89f39e6290137157db40fe07c84525f26e0a6105e4d162',
504
+ contentDigestSha256: null,
505
+ schema: CASE_REPORT_SCHEMA,
506
+ version: CASE_REPORT_SCHEMA_VERSION,
507
+ role: 'current',
508
+ expectation: 'accepted_exact',
509
+ expectedOutputFixtureId: null,
510
+ shapeId: 'case.report.v15',
511
+ scope: 'repository',
512
+ }),
513
+ Object.freeze({
514
+ id: 'case-response-review-inputs-v7',
515
+ path: 'test/fixtures/case-lifecycle/case-response-review-inputs-v7.json',
516
+ bytes: 7634,
517
+ sha256: 'f8a7de7af1a2f341b5123e0d6c41d10a85f4dcaa13815b3aa7974355f070f55b',
518
+ contentDigestSha256: null,
519
+ schema: CASE_RESPONSE_REVIEW_INPUTS_SCHEMA,
520
+ version: CASE_RESPONSE_REVIEW_INPUTS_VERSION,
521
+ role: 'current',
522
+ expectation: 'accepted_exact',
523
+ expectedOutputFixtureId: null,
524
+ shapeId: 'case.response-review-inputs.v7',
525
+ scope: 'repository',
526
+ }),
527
+ Object.freeze({
528
+ id: 'case-response-packet-v13',
529
+ path: 'test/fixtures/case-lifecycle/case-response-packet-v13.json',
530
+ bytes: 12276,
531
+ sha256: 'e24bfaa12c12ee9bca57e165dcbd8445a9768b3095a19fb08f1c56a12e1acc97',
532
+ contentDigestSha256: "sha256:424cd8a9fd2dbfec2e272891d97359164f4492426e3160eb6e2f52d9b432b9fe",
533
+ schema: CASE_RESPONSE_PACKET_SCHEMA,
534
+ version: CASE_RESPONSE_PACKET_VERSION,
535
+ role: 'current',
536
+ expectation: 'accepted_exact',
537
+ expectedOutputFixtureId: null,
538
+ shapeId: 'case.response-packet.v13',
539
+ scope: 'repository',
540
+ }),
541
+ Object.freeze({
542
+ id: 'cli-case-pack-v2-case-v19-current',
543
+ path: 'test/fixtures/case-lifecycle/cli-case-pack-v2-case-v19-current.json',
544
+ bytes: 9874,
545
+ sha256: 'd29be046deeed1ff8b626ec3e79d7c14be690d35b67a506f95141075f50c3701',
546
+ contentDigestSha256: "sha256:218f1a1ca412920a85c2577b5fc958e6bbef47606da8056a09069619560e8435",
547
+ schema: CLI_CASE_PACK_SCHEMA,
548
+ version: CLI_CASE_PACK_VERSION,
549
+ role: 'current',
550
+ expectation: 'accepted_exact',
551
+ expectedOutputFixtureId: null,
552
+ shapeId: 'case.cli-pack.current',
553
+ scope: 'repository',
554
+ }),
555
+ Object.freeze({
556
+ id: WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID,
557
+ path: `test/fixtures/case-lifecycle/${WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID}.json`,
558
+ bytes: 7616,
559
+ sha256: '4dee9ab450b16a2ab4cf46a4807fd2be81c1809c8dd4641fbef47ffb78b21794',
560
+ contentDigestSha256: null,
561
+ schema: WORKSPACE_ARCHIVE_SCHEMA,
562
+ version: WORKSPACE_ARCHIVE_VERSION,
563
+ role: 'current',
564
+ expectation: 'accepted_exact',
565
+ expectedOutputFixtureId: null,
566
+ shapeId: 'case.workspace-archive.v10',
567
+ scope: 'repository',
568
+ }),
441
569
  Object.freeze({
442
570
  id: 'browser-case-v12-public',
443
571
  path: 'test/fixtures/case-lifecycle/browser-case-v12.json',
@@ -448,7 +576,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
448
576
  version: PUBLIC_CASE_SCHEMA_VERSION,
449
577
  role: 'historical',
450
578
  expectation: 'normalises_to_current_output',
451
- expectedOutputFixtureId: 'browser-case-v16',
579
+ expectedOutputFixtureId: 'browser-case-v19',
452
580
  shapeId: `case.browser-store.v${PUBLIC_CASE_SCHEMA_VERSION}`,
453
581
  scope: 'repository',
454
582
  }),
@@ -462,7 +590,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
462
590
  version: PUBLISHED_V2_CASE_SCHEMA_VERSION,
463
591
  role: 'historical',
464
592
  expectation: 'normalises_to_current_output',
465
- expectedOutputFixtureId: 'browser-case-v16',
593
+ expectedOutputFixtureId: 'browser-case-v19',
466
594
  shapeId: `case.browser-store.v${PUBLISHED_V2_CASE_SCHEMA_VERSION}`,
467
595
  scope: 'repository',
468
596
  }),
@@ -476,7 +604,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
476
604
  version: PUBLISHED_V2_2_CASE_SCHEMA_VERSION,
477
605
  role: 'historical',
478
606
  expectation: 'normalises_to_current_output',
479
- expectedOutputFixtureId: 'browser-case-v16',
607
+ expectedOutputFixtureId: 'browser-case-v19',
480
608
  shapeId: `case.browser-store.v${PUBLISHED_V2_2_CASE_SCHEMA_VERSION}`,
481
609
  scope: 'repository',
482
610
  }),
@@ -490,7 +618,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
490
618
  version: PUBLISHED_V2_3_CASE_SCHEMA_VERSION,
491
619
  role: 'historical',
492
620
  expectation: 'normalises_to_current_output',
493
- expectedOutputFixtureId: 'browser-case-v16',
621
+ expectedOutputFixtureId: 'browser-case-v19',
494
622
  shapeId: `case.browser-store.v${PUBLISHED_V2_3_CASE_SCHEMA_VERSION}`,
495
623
  scope: 'repository',
496
624
  }),
@@ -501,11 +629,39 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
501
629
  sha256: 'e0d9dd7d1da29ca31e1b6ccd0c514c44267d84fe9db2eff0ffce23c51fb04ce4',
502
630
  contentDigestSha256: null,
503
631
  schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA,
504
- version: CASE_SCHEMA_VERSION,
505
- role: 'current',
506
- expectation: 'accepted_exact',
507
- expectedOutputFixtureId: null,
508
- shapeId: `case.browser-store.v${CASE_SCHEMA_VERSION}`,
632
+ version: INCIDENT_CASE_SCHEMA_VERSION,
633
+ role: 'historical',
634
+ expectation: 'normalises_to_current_output',
635
+ expectedOutputFixtureId: 'browser-case-v19',
636
+ shapeId: `case.browser-store.v${INCIDENT_CASE_SCHEMA_VERSION}`,
637
+ scope: 'repository',
638
+ }),
639
+ Object.freeze({
640
+ id: 'browser-case-v17',
641
+ path: 'test/fixtures/case-lifecycle/browser-case-v17.json',
642
+ bytes: 3312,
643
+ sha256: '8de3bb904b09ec07994d832738b148321902d91c4351763eebdc0cf908bf5429',
644
+ contentDigestSha256: null,
645
+ schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA,
646
+ version: EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION,
647
+ role: 'historical',
648
+ expectation: 'normalises_to_current_output',
649
+ expectedOutputFixtureId: 'browser-case-v19',
650
+ shapeId: `case.browser-store.v${EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION}`,
651
+ scope: 'repository',
652
+ }),
653
+ Object.freeze({
654
+ id: 'browser-case-v18',
655
+ path: 'test/fixtures/case-lifecycle/browser-case-v18.json',
656
+ bytes: 3312,
657
+ sha256: 'def2f8c2aca1b124d7361438ab7e448b2f53c2ef6804336da35b441d0233528a',
658
+ contentDigestSha256: null,
659
+ schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA,
660
+ version: OBJECT_RESPONSE_CASE_SCHEMA_VERSION,
661
+ role: 'historical',
662
+ expectation: 'normalises_to_current_output',
663
+ expectedOutputFixtureId: 'browser-case-v19',
664
+ shapeId: `case.browser-store.v${OBJECT_RESPONSE_CASE_SCHEMA_VERSION}`,
509
665
  scope: 'repository',
510
666
  }),
511
667
  Object.freeze({
@@ -518,7 +674,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
518
674
  version: PUBLIC_CASE_SCHEMA_VERSION,
519
675
  role: 'historical',
520
676
  expectation: 'normalises_to_current_output',
521
- expectedOutputFixtureId: 'case-export-v16',
677
+ expectedOutputFixtureId: 'case-export-v19',
522
678
  shapeId: `case.export.v${PUBLIC_CASE_SCHEMA_VERSION}`,
523
679
  scope: 'repository',
524
680
  }),
@@ -532,7 +688,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
532
688
  version: PUBLISHED_V2_CASE_SCHEMA_VERSION,
533
689
  role: 'historical',
534
690
  expectation: 'normalises_to_current_output',
535
- expectedOutputFixtureId: 'case-export-v16',
691
+ expectedOutputFixtureId: 'case-export-v19',
536
692
  shapeId: `case.export.v${PUBLISHED_V2_CASE_SCHEMA_VERSION}`,
537
693
  scope: 'repository',
538
694
  }),
@@ -546,7 +702,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
546
702
  version: PUBLISHED_V2_2_CASE_SCHEMA_VERSION,
547
703
  role: 'historical',
548
704
  expectation: 'normalises_to_current_output',
549
- expectedOutputFixtureId: 'case-export-v16',
705
+ expectedOutputFixtureId: 'case-export-v19',
550
706
  shapeId: `case.export.v${PUBLISHED_V2_2_CASE_SCHEMA_VERSION}`,
551
707
  scope: 'repository',
552
708
  }),
@@ -560,7 +716,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
560
716
  version: PUBLISHED_V2_3_CASE_SCHEMA_VERSION,
561
717
  role: 'historical',
562
718
  expectation: 'normalises_to_current_output',
563
- expectedOutputFixtureId: 'case-export-v16',
719
+ expectedOutputFixtureId: 'case-export-v19',
564
720
  shapeId: `case.export.v${PUBLISHED_V2_3_CASE_SCHEMA_VERSION}`,
565
721
  scope: 'repository',
566
722
  }),
@@ -571,11 +727,39 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
571
727
  sha256: 'b0c14fd4d391b1067f101d61c1549c28570999c9cebb58aed21e164d7af56ad8',
572
728
  contentDigestSha256: null,
573
729
  schema: CASE_EXPORT_LIFECYCLE_SCHEMA,
574
- version: CASE_SCHEMA_VERSION,
575
- role: 'current',
576
- expectation: 'accepted_exact',
577
- expectedOutputFixtureId: null,
578
- shapeId: `case.export.v${CASE_SCHEMA_VERSION}`,
730
+ version: INCIDENT_CASE_SCHEMA_VERSION,
731
+ role: 'historical',
732
+ expectation: 'normalises_to_current_output',
733
+ expectedOutputFixtureId: 'case-export-v19',
734
+ shapeId: `case.export.v${INCIDENT_CASE_SCHEMA_VERSION}`,
735
+ scope: 'repository',
736
+ }),
737
+ Object.freeze({
738
+ id: 'case-export-v17',
739
+ path: 'test/fixtures/case-lifecycle/case-export-v17.json',
740
+ bytes: 3356,
741
+ sha256: 'bbce977c1045fd2b5d576619f07c6cc19388d3d192f671f467ab0ad069f01e8b',
742
+ contentDigestSha256: null,
743
+ schema: CASE_EXPORT_LIFECYCLE_SCHEMA,
744
+ version: EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION,
745
+ role: 'historical',
746
+ expectation: 'normalises_to_current_output',
747
+ expectedOutputFixtureId: 'case-export-v19',
748
+ shapeId: `case.export.v${EVIDENCE_FOLLOW_UP_CASE_SCHEMA_VERSION}`,
749
+ scope: 'repository',
750
+ }),
751
+ Object.freeze({
752
+ id: 'case-export-v18',
753
+ path: 'test/fixtures/case-lifecycle/case-export-v18.json',
754
+ bytes: 3356,
755
+ sha256: '796744c3dbffdbdb2e93dbece159a812a9c1f7c6e46b9ecd130aa84f1283828b',
756
+ contentDigestSha256: null,
757
+ schema: CASE_EXPORT_LIFECYCLE_SCHEMA,
758
+ version: OBJECT_RESPONSE_CASE_SCHEMA_VERSION,
759
+ role: 'historical',
760
+ expectation: 'normalises_to_current_output',
761
+ expectedOutputFixtureId: 'case-export-v19',
762
+ shapeId: `case.export.v${OBJECT_RESPONSE_CASE_SCHEMA_VERSION}`,
579
763
  scope: 'repository',
580
764
  }),
581
765
  Object.freeze({
@@ -641,11 +825,39 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
641
825
  sha256: '175b9ab720d95e497eb89a73f437b00c5db9595833b02b033a09bb526a926f36',
642
826
  contentDigestSha256: null,
643
827
  schema: CASE_REPORT_SCHEMA,
644
- version: CASE_REPORT_SCHEMA_VERSION,
645
- role: 'current',
828
+ version: LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION,
829
+ role: 'historical',
830
+ expectation: 'accepted_exact',
831
+ expectedOutputFixtureId: null,
832
+ shapeId: `case.report.v${LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION}`,
833
+ scope: 'repository',
834
+ }),
835
+ Object.freeze({
836
+ id: 'case-report-v13',
837
+ path: 'test/fixtures/case-lifecycle/case-report-v13.json',
838
+ bytes: 4894,
839
+ sha256: '3b0e69f800a2b7a087a0ffcdf81ebbe4237863f42aea7812fd0d0f6b600b8426',
840
+ contentDigestSha256: null,
841
+ schema: CASE_REPORT_SCHEMA,
842
+ version: EVIDENCE_FOLLOW_UP_CASE_REPORT_SCHEMA_VERSION,
843
+ role: 'historical',
646
844
  expectation: 'accepted_exact',
647
845
  expectedOutputFixtureId: null,
648
- shapeId: `case.report.v${CASE_REPORT_SCHEMA_VERSION}`,
846
+ shapeId: `case.report.v${EVIDENCE_FOLLOW_UP_CASE_REPORT_SCHEMA_VERSION}`,
847
+ scope: 'repository',
848
+ }),
849
+ Object.freeze({
850
+ id: 'case-report-v14',
851
+ path: 'test/fixtures/case-lifecycle/case-report-v14.json',
852
+ bytes: 4894,
853
+ sha256: '0fb3613dfaace2f86e38eaa86f9c081a41afde2a7a373a21a6c0de78cd17e6ac',
854
+ contentDigestSha256: null,
855
+ schema: CASE_REPORT_SCHEMA,
856
+ version: OBJECT_RESPONSE_CASE_REPORT_SCHEMA_VERSION,
857
+ role: 'historical',
858
+ expectation: 'accepted_exact',
859
+ expectedOutputFixtureId: null,
860
+ shapeId: `case.report.v${OBJECT_RESPONSE_CASE_REPORT_SCHEMA_VERSION}`,
649
861
  scope: 'repository',
650
862
  }),
651
863
  Object.freeze({
@@ -697,11 +909,39 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
697
909
  sha256: '991475b878f65d9673e60c776162daf921ec5915e16715080ea0534516cff9c4',
698
910
  contentDigestSha256: 'sha256:97cfe929ace59edb46ee0b84e6135614aba782e170e730c3de3fb24b82413162',
699
911
  schema: CASE_RESPONSE_PACKET_SCHEMA,
700
- version: CASE_RESPONSE_PACKET_VERSION,
701
- role: 'current',
912
+ version: LATEST_PUBLIC_CASE_RESPONSE_PACKET_VERSION,
913
+ role: 'historical',
702
914
  expectation: 'accepted_exact',
703
915
  expectedOutputFixtureId: null,
704
- shapeId: `case.response-packet.v${CASE_RESPONSE_PACKET_VERSION}`,
916
+ shapeId: `case.response-packet.v${LATEST_PUBLIC_CASE_RESPONSE_PACKET_VERSION}`,
917
+ scope: 'repository',
918
+ }),
919
+ Object.freeze({
920
+ id: 'case-response-packet-v11',
921
+ path: 'test/fixtures/case-lifecycle/case-response-packet-v11.json',
922
+ bytes: 12276,
923
+ sha256: '42817b82fbba58930866d9d4f5554732f56c143fd7a64c6e0acab57b66ddfdce',
924
+ contentDigestSha256: "sha256:603558cc7a9112ab759b7dd01f44c53c9408ed6d71db19f562fced2629d5c437",
925
+ schema: CASE_RESPONSE_PACKET_SCHEMA,
926
+ version: EVIDENCE_FOLLOW_UP_CASE_RESPONSE_PACKET_VERSION,
927
+ role: 'historical',
928
+ expectation: 'accepted_exact',
929
+ expectedOutputFixtureId: null,
930
+ shapeId: `case.response-packet.v${EVIDENCE_FOLLOW_UP_CASE_RESPONSE_PACKET_VERSION}`,
931
+ scope: 'repository',
932
+ }),
933
+ Object.freeze({
934
+ id: 'case-response-packet-v12',
935
+ path: 'test/fixtures/case-lifecycle/case-response-packet-v12.json',
936
+ bytes: 12276,
937
+ sha256: '2f35363026f10b5eb7f7c0c3ece9c69ae776b4366510512302d7c43e8baee099',
938
+ contentDigestSha256: 'sha256:4fa4e033ef4cc7943d6ee95e513f27a982f35d0e3da402cda78bc9df28db9e05',
939
+ schema: CASE_RESPONSE_PACKET_SCHEMA,
940
+ version: OBJECT_RESPONSE_CASE_PACKET_VERSION,
941
+ role: 'historical',
942
+ expectation: 'accepted_exact',
943
+ expectedOutputFixtureId: null,
944
+ shapeId: `case.response-packet.v${OBJECT_RESPONSE_CASE_PACKET_VERSION}`,
705
945
  scope: 'repository',
706
946
  }),
707
947
  Object.freeze({
@@ -753,11 +993,39 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
753
993
  sha256: 'b054fc8405663992055ec6c07998fd19ab2f12dcc581b87b42f773b1ab4acec7',
754
994
  contentDigestSha256: null,
755
995
  schema: CASE_RESPONSE_REVIEW_INPUTS_SCHEMA,
756
- version: CASE_RESPONSE_REVIEW_INPUTS_VERSION,
757
- role: 'current',
996
+ version: LATEST_PUBLIC_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
997
+ role: 'historical',
998
+ expectation: 'accepted_exact',
999
+ expectedOutputFixtureId: null,
1000
+ shapeId: `case.response-review-inputs.v${LATEST_PUBLIC_CASE_RESPONSE_REVIEW_INPUTS_VERSION}`,
1001
+ scope: 'repository',
1002
+ }),
1003
+ Object.freeze({
1004
+ id: 'case-response-review-inputs-v5',
1005
+ path: 'test/fixtures/case-lifecycle/case-response-review-inputs-v5.json',
1006
+ bytes: 7604,
1007
+ sha256: '4a54acbc37ee4384c7a2b5c6168d3fffce6757e259d5314da537c8d423c8bee4',
1008
+ contentDigestSha256: null,
1009
+ schema: CASE_RESPONSE_REVIEW_INPUTS_SCHEMA,
1010
+ version: EVIDENCE_FOLLOW_UP_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
1011
+ role: 'historical',
1012
+ expectation: 'accepted_exact',
1013
+ expectedOutputFixtureId: null,
1014
+ shapeId: `case.response-review-inputs.v${EVIDENCE_FOLLOW_UP_CASE_RESPONSE_REVIEW_INPUTS_VERSION}`,
1015
+ scope: 'repository',
1016
+ }),
1017
+ Object.freeze({
1018
+ id: 'case-response-review-inputs-v6',
1019
+ path: 'test/fixtures/case-lifecycle/case-response-review-inputs-v6.json',
1020
+ bytes: 7604,
1021
+ sha256: '1cfd2d65b85b3c0c3e92af388be1163eff6efea740a05447bdc54024ed98be0d',
1022
+ contentDigestSha256: null,
1023
+ schema: CASE_RESPONSE_REVIEW_INPUTS_SCHEMA,
1024
+ version: OBJECT_RESPONSE_CASE_REVIEW_INPUTS_VERSION,
1025
+ role: 'historical',
758
1026
  expectation: 'accepted_exact',
759
1027
  expectedOutputFixtureId: null,
760
- shapeId: `case.response-review-inputs.v${CASE_RESPONSE_REVIEW_INPUTS_VERSION}`,
1028
+ shapeId: `case.response-review-inputs.v${OBJECT_RESPONSE_CASE_REVIEW_INPUTS_VERSION}`,
761
1029
  scope: 'repository',
762
1030
  }),
763
1031
  Object.freeze({
@@ -831,8 +1099,8 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
831
1099
  scope: 'repository',
832
1100
  }),
833
1101
  Object.freeze({
834
- id: CLI_CASE_PACK_WRITER_FIXTURE_ID,
835
- path: `test/fixtures/case-lifecycle/${CLI_CASE_PACK_WRITER_FIXTURE_ID}.json`,
1102
+ id: 'cli-case-pack-v2-case-v16-current',
1103
+ path: 'test/fixtures/case-lifecycle/cli-case-pack-v2-case-v16-current.json',
836
1104
  bytes: 9602,
837
1105
  sha256: '2ac29a7b64b3d8930e92f6ab6b826566061224f281799f9b4b15c0acc98550f0',
838
1106
  contentDigestSha256: 'sha256:c6e3cfbe171a85e9318a0a6780d54dc4ad3e662113a75f483fd527c2e36e0143',
@@ -844,6 +1112,34 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
844
1112
  shapeId: 'case.cli-pack.current',
845
1113
  scope: 'repository',
846
1114
  }),
1115
+ Object.freeze({
1116
+ id: 'cli-case-pack-v2-case-v17-current',
1117
+ path: 'test/fixtures/case-lifecycle/cli-case-pack-v2-case-v17-current.json',
1118
+ bytes: 9874,
1119
+ sha256: '3b25440521ddcc1e3ea65a0e56907df4fb725e27b91415c8f1afabab1c4f7e58',
1120
+ contentDigestSha256: 'sha256:3cbf9f6dcacdc8efdaa55319e5ce7068a5cf2ea116c80e9ff8ccf6d2dc8741c6',
1121
+ schema: CLI_CASE_PACK_SCHEMA,
1122
+ version: CLI_CASE_PACK_VERSION,
1123
+ role: 'current',
1124
+ expectation: 'accepted_exact',
1125
+ expectedOutputFixtureId: null,
1126
+ shapeId: 'case.cli-pack.current',
1127
+ scope: 'repository',
1128
+ }),
1129
+ Object.freeze({
1130
+ id: 'cli-case-pack-v2-case-v18-current',
1131
+ path: 'test/fixtures/case-lifecycle/cli-case-pack-v2-case-v18-current.json',
1132
+ bytes: 9874,
1133
+ sha256: 'fb95d648a3e8a6772a0da0726e9259cff622f58287d5cc5d6232904db2e32c42',
1134
+ contentDigestSha256: 'sha256:e55955de4751538fbf5830129d99e08b0aef28325a1d98a31ecfe0b5415cef20',
1135
+ schema: CLI_CASE_PACK_SCHEMA,
1136
+ version: CLI_CASE_PACK_VERSION,
1137
+ role: 'current',
1138
+ expectation: 'accepted_exact',
1139
+ expectedOutputFixtureId: null,
1140
+ shapeId: 'case.cli-pack.current',
1141
+ scope: 'repository',
1142
+ }),
847
1143
  Object.freeze({
848
1144
  id: 'workspace-archive-v5-public',
849
1145
  path: 'test/fixtures/case-lifecycle/workspace-archive-v5-public.json',
@@ -854,7 +1150,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
854
1150
  version: PUBLIC_WORKSPACE_ARCHIVE_VERSION,
855
1151
  role: 'historical',
856
1152
  expectation: 'normalises_to_current_output',
857
- expectedOutputFixtureId: `workspace-archive-v${WORKSPACE_ARCHIVE_VERSION}-empty-current`,
1153
+ expectedOutputFixtureId: WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID,
858
1154
  shapeId: 'case.workspace-archive.v5',
859
1155
  scope: 'repository',
860
1156
  }),
@@ -868,7 +1164,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
868
1164
  version: PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION,
869
1165
  role: 'historical',
870
1166
  expectation: 'normalises_to_current_output',
871
- expectedOutputFixtureId: `workspace-archive-v${WORKSPACE_ARCHIVE_VERSION}-empty-current`,
1167
+ expectedOutputFixtureId: WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID,
872
1168
  shapeId: 'case.workspace-archive.v6',
873
1169
  scope: 'repository',
874
1170
  }),
@@ -882,7 +1178,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
882
1178
  version: PUBLISHED_V2_2_WORKSPACE_ARCHIVE_VERSION,
883
1179
  role: 'historical',
884
1180
  expectation: 'normalises_to_current_output',
885
- expectedOutputFixtureId: `workspace-archive-v${WORKSPACE_ARCHIVE_VERSION}-empty-current`,
1181
+ expectedOutputFixtureId: WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID,
886
1182
  shapeId: 'case.workspace-archive.v7',
887
1183
  scope: 'repository',
888
1184
  }),
@@ -893,10 +1189,10 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
893
1189
  sha256: '747062e2dbbcf96724b19718d36bf0dc50b08e96d8adb670115d2315032b6c05',
894
1190
  contentDigestSha256: null,
895
1191
  schema: WORKSPACE_ARCHIVE_SCHEMA,
896
- version: LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION,
1192
+ version: PUBLISHED_V2_3_WORKSPACE_ARCHIVE_VERSION,
897
1193
  role: 'historical',
898
1194
  expectation: 'normalises_to_current_output',
899
- expectedOutputFixtureId: `workspace-archive-v${WORKSPACE_ARCHIVE_VERSION}-empty-current`,
1195
+ expectedOutputFixtureId: WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID,
900
1196
  shapeId: 'case.workspace-archive.v8',
901
1197
  scope: 'repository',
902
1198
  }),
@@ -907,11 +1203,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
907
1203
  sha256: '6786a9a892bdc21814b0f1165cd9286fb82258862a4c15140daf9caae71daff0',
908
1204
  contentDigestSha256: null,
909
1205
  schema: WORKSPACE_ARCHIVE_SCHEMA,
1206
+ version: LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION,
1207
+ role: 'historical',
1208
+ expectation: 'normalises_to_current_output',
1209
+ expectedOutputFixtureId: WORKSPACE_ARCHIVE_WRITER_FIXTURE_ID,
1210
+ shapeId: 'case.workspace-archive.v9',
1211
+ scope: 'repository',
1212
+ }),
1213
+ Object.freeze({
1214
+ id: 'workspace-archive-v10-empty-current',
1215
+ path: 'test/fixtures/case-lifecycle/workspace-archive-v10-empty-current.json',
1216
+ bytes: 7616,
1217
+ sha256: 'd40c0e6f28cac0cac5b38d45642e9cd86a7d77c689a852e85b2747b376c93a15',
1218
+ contentDigestSha256: null,
1219
+ schema: WORKSPACE_ARCHIVE_SCHEMA,
910
1220
  version: WORKSPACE_ARCHIVE_VERSION,
911
1221
  role: 'current',
912
1222
  expectation: 'accepted_exact',
913
1223
  expectedOutputFixtureId: null,
914
- shapeId: `case.workspace-archive.v${WORKSPACE_ARCHIVE_VERSION}`,
1224
+ shapeId: 'case.workspace-archive.v10',
915
1225
  scope: 'repository',
916
1226
  }),
917
1227
  Object.freeze({
@@ -1041,6 +1351,7 @@ const CASE_LIFECYCLE_SHAPES = Object.freeze([
1041
1351
  ...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], [
1042
1352
  'contract', 'version', 'profile', 'case', 'incident', 'contacts',
1043
1353
  'recipientRoute', 'actionBinding', 'selectedEvidence', 'contradictions',
1354
+ ...(version >= 7 ? ['sourceQualifications'] : []),
1044
1355
  'readiness', 'artefactReferences', 'escalationHistory',
1045
1356
  'escalationHistoryOmitted', 'escalationHistoryLimitations', 'responseLifecycle',
1046
1357
  ], 'preserve_signed_document')),