@slicedearth/whoisleuth-cli 2.1.0 → 2.3.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 (77) hide show
  1. package/README.md +2 -1
  2. package/cli/arguments.mjs +389 -1745
  3. package/cli/artifact-validation/case-response.mjs +55 -30
  4. package/cli/artifact-validation/signed-review.mjs +30 -12
  5. package/cli/bulk-checkpoint.mjs +34 -3
  6. package/cli/case-pack.mjs +39 -92
  7. package/cli/command-argument-grammar.mjs +211 -0
  8. package/cli/command-reference.mjs +200 -213
  9. package/cli/completion.mjs +5 -1
  10. package/cli/discovery-observation-snapshot.mjs +16 -3
  11. package/cli/discovery-scan-command-runner.mjs +19 -0
  12. package/cli/discovery-scan.mjs +6 -0
  13. package/cli/domain-control-observations.mjs +1 -1
  14. package/cli/inline-command-families.mjs +1 -0
  15. package/cli/input.mjs +116 -0
  16. package/cli/interchange-report.mjs +14 -0
  17. package/cli/lookalike-calibration.mjs +7 -2
  18. package/cli/lookup-brief.mjs +4 -2
  19. package/cli/lookup-browser-view.mjs +1 -1
  20. package/cli/mail-header-review.mjs +467 -0
  21. package/cli/review-command-runner.mjs +25 -0
  22. package/cli/risk-calibration.mjs +19 -17
  23. package/cli/runner.mjs +7 -1
  24. package/docs/cli-reference.md +8 -1
  25. package/docs/cli.md +24 -1
  26. package/lib/bounded-json.mjs +9 -6
  27. package/lib/dns-convergence-review.mjs +1 -0
  28. package/lib/dns-intelligence.mjs +37 -3
  29. package/lib/dnssec-chain-validation.mjs +6 -0
  30. package/lib/domain-change-packet.mjs +42 -14
  31. package/lib/domain-control-flight-recorder.mjs +4 -1
  32. package/lib/domain-control-manifest.mjs +16 -16
  33. package/lib/domain-posture-parsers.mjs +114 -3
  34. package/lib/domain-posture.mjs +34 -3
  35. package/lib/evidence-export.mjs +63 -13
  36. package/lib/evidence-report.mjs +2 -2
  37. package/lib/html-signals.mjs +39 -33
  38. package/lib/local-geoip-evidence.mjs +19 -3
  39. package/lib/lookup-response.mjs +5 -4
  40. package/lib/lookup-source-progress.mjs +27 -4
  41. package/lib/nameserver-preflight-review.mjs +1 -0
  42. package/lib/rdap-capabilities.mjs +1 -1
  43. package/lib/registry-insights.mjs +35 -22
  44. package/lib/risk-calibration-summary.mjs +1 -3
  45. package/lib/security-txt.mjs +33 -1
  46. package/lib/static-html-analysis.mjs +69 -13
  47. package/lib/website-technology.mjs +79 -11
  48. package/lib/zone-intent-review.mjs +16 -6
  49. package/package.json +1 -1
  50. package/packages/cases/case-migration-model.mjs +71 -22
  51. package/packages/cases/case-record-contracts.mjs +5 -20
  52. package/packages/cases/case-record-core.mjs +10 -21
  53. package/packages/cases/case-record-decisions.mjs +72 -0
  54. package/packages/cases/case-record-model.mjs +1 -0
  55. package/packages/cases/case-record-operations.mjs +240 -3
  56. package/packages/cases/case-record-projection.mjs +218 -0
  57. package/packages/cases/case-report.mjs +11 -6
  58. package/packages/cases/case-response-model.mjs +43 -6
  59. package/packages/cases/case-response-packet.mjs +78 -27
  60. package/packages/cases/case-storage-model.mjs +6 -2
  61. package/packages/comparison/comparison-ledger-bulk.mjs +9 -10
  62. package/packages/comparison/page-similarity.mjs +3 -1
  63. package/packages/contracts/case-portability.mjs +183 -53
  64. package/packages/contracts/cli-command-semantics.mjs +93 -0
  65. package/packages/contracts/risk-calibration.mjs +15 -10
  66. package/packages/contracts/workspace-portability.mjs +44 -7
  67. package/packages/evidence/domain-control-runtime.mjs +46 -6
  68. package/packages/interchange/external-findings-import.mjs +115 -46
  69. package/packages/investigation/lookup-asset-graph.mjs +35 -27
  70. package/packages/workspace/brand-profile-model.mjs +118 -2
  71. package/packages/workspace/bulk-review-model.mjs +13 -7
  72. package/packages/workspace/bulk-session-model.mjs +5 -4
  73. package/packages/workspace/detection-rule-model.mjs +70 -22
  74. package/packages/workspace/relationship-observation-model.mjs +4 -1
  75. package/packages/workspace/website-snapshot-model.mjs +106 -8
  76. package/packages/workspace/workspace-archive.mjs +2 -0
  77. package/cli/evidence-command-arguments.mjs +0 -156
@@ -2,9 +2,14 @@ import { MAX_DOMAIN_NAME_LENGTH } from "./domain-name.mjs";
2
2
  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
- export const LATEST_PUBLIC_APPLICATION_VERSION = '2.0.1';
5
+ export const LATEST_PUBLIC_APPLICATION_VERSION = '2.2.0';
6
6
  export const CASE_PORTABILITY_IDENTITY_CONSTANTS = Object.freeze([
7
7
  'LATEST_PUBLIC_APPLICATION_VERSION',
8
+ 'LATEST_PUBLIC_CASE_SCHEMA_VERSION',
9
+ 'LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION',
10
+ 'LATEST_PUBLIC_CASE_RESPONSE_PACKET_VERSION',
11
+ 'LATEST_PUBLIC_CASE_RESPONSE_REVIEW_INPUTS_VERSION',
12
+ 'LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION',
8
13
  'CASE_BROWSER_STORE_LIFECYCLE_SCHEMA',
9
14
  'CASE_EXPORT_LIFECYCLE_SCHEMA',
10
15
  'CASE_SCHEMA_VERSION',
@@ -113,6 +118,7 @@ export const CASE_DOMAIN_COMPATIBILITY_FACADES = Object.freeze([
113
118
  ['frontend/src/lib/analysis/case-response-model.ts', 'packages/cases/case-response-model.mts'],
114
119
  ['frontend/src/lib/analysis/case-response-packet.ts', 'packages/cases/case-response-packet.mts'],
115
120
  ['frontend/src/lib/analysis/case-storage-model.ts', 'packages/cases/case-storage-model.mts'],
121
+ ['frontend/src/lib/analysis/case-type-evidence-readiness.ts', 'packages/cases/case-type-evidence-readiness.mts'],
116
122
  ['frontend/src/lib/analysis/http-summary.ts', 'packages/cases/http-summary.mts'],
117
123
  ['frontend/src/lib/analysis/opaque-reference-id.ts', 'packages/cases/opaque-reference-id.mts'],
118
124
  ['frontend/src/lib/analysis/workspace-archive.ts', 'packages/workspace/workspace-archive.mts'],
@@ -126,36 +132,44 @@ export const CASE_BROWSER_STORE_LIFECYCLE_SCHEMA = 'whoisleuth.browser.case-stor
126
132
  export const CASE_EXPORT_LIFECYCLE_SCHEMA = 'whoisleuth.case-export';
127
133
  export const PUBLIC_CASE_SCHEMA_VERSION = 12;
128
134
  export const PUBLISHED_V2_CASE_SCHEMA_VERSION = 13;
129
- export const CASE_SCHEMA_VERSION = 14;
135
+ export const LATEST_PUBLIC_CASE_SCHEMA_VERSION = 14;
136
+ export const CASE_SCHEMA_VERSION = 15;
130
137
  export const CASE_BROWSER_SUPPORTED_VERSIONS = Object.freeze([
131
138
  PUBLIC_CASE_SCHEMA_VERSION,
132
139
  PUBLISHED_V2_CASE_SCHEMA_VERSION,
140
+ LATEST_PUBLIC_CASE_SCHEMA_VERSION,
133
141
  CASE_SCHEMA_VERSION,
134
142
  ]);
135
143
  export const CASE_IMPORT_VERSIONS = CASE_BROWSER_SUPPORTED_VERSIONS;
136
144
  export const CASE_REPORT_SCHEMA = 'whoisleuth.case-report';
137
145
  export const PUBLIC_CASE_REPORT_SCHEMA_VERSION = 8;
138
146
  export const PUBLISHED_V2_CASE_REPORT_SCHEMA_VERSION = 9;
139
- export const CASE_REPORT_SCHEMA_VERSION = 10;
147
+ export const LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION = 10;
148
+ export const CASE_REPORT_SCHEMA_VERSION = 11;
140
149
  export const CASE_REPORT_OUTPUT_VERSIONS = Object.freeze([
141
150
  PUBLISHED_V2_CASE_REPORT_SCHEMA_VERSION,
151
+ LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION,
142
152
  CASE_REPORT_SCHEMA_VERSION,
143
153
  ]);
144
154
  export const CASE_RESPONSE_PACKET_SCHEMA = 'whoisleuth.case-response-packet';
145
155
  export const PUBLIC_CASE_RESPONSE_PACKET_VERSION = 6;
146
156
  export const PUBLISHED_V2_CASE_RESPONSE_PACKET_VERSION = 7;
147
- export const CASE_RESPONSE_PACKET_VERSION = 8;
157
+ export const LATEST_PUBLIC_CASE_RESPONSE_PACKET_VERSION = 8;
158
+ export const CASE_RESPONSE_PACKET_VERSION = 9;
148
159
  export const CASE_RESPONSE_PACKET_OUTPUT_VERSIONS = Object.freeze([
149
160
  PUBLIC_CASE_RESPONSE_PACKET_VERSION,
150
161
  PUBLISHED_V2_CASE_RESPONSE_PACKET_VERSION,
162
+ LATEST_PUBLIC_CASE_RESPONSE_PACKET_VERSION,
151
163
  CASE_RESPONSE_PACKET_VERSION,
152
164
  ]);
153
165
  export const SUPPORTED_CASE_RESPONSE_PACKET_VERSIONS = CASE_RESPONSE_PACKET_OUTPUT_VERSIONS;
154
166
  export const CASE_RESPONSE_REVIEW_INPUTS_SCHEMA = 'whoisleuth.case-response-review-inputs';
155
167
  export const PUBLISHED_V2_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 1;
156
- export const CASE_RESPONSE_REVIEW_INPUTS_VERSION = 2;
168
+ export const LATEST_PUBLIC_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 2;
169
+ export const CASE_RESPONSE_REVIEW_INPUTS_VERSION = 3;
157
170
  export const SUPPORTED_CASE_RESPONSE_REVIEW_INPUTS_VERSIONS = Object.freeze([
158
171
  PUBLISHED_V2_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
172
+ LATEST_PUBLIC_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
159
173
  CASE_RESPONSE_REVIEW_INPUTS_VERSION,
160
174
  ]);
161
175
  export const CLI_CASE_PACK_SCHEMA = 'whoisleuth.cli.case-pack';
@@ -175,6 +189,7 @@ export const CLI_CASE_PACK_LIMITATIONS = Object.freeze([
175
189
  export const CLI_CASE_PACK_CASE_REPORT_EPOCHS = Object.freeze([
176
190
  Object.freeze({ caseVersions: Object.freeze([PUBLIC_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([PUBLIC_CASE_REPORT_SCHEMA_VERSION]) }),
177
191
  Object.freeze({ caseVersions: Object.freeze([PUBLISHED_V2_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([PUBLISHED_V2_CASE_REPORT_SCHEMA_VERSION]) }),
192
+ Object.freeze({ caseVersions: Object.freeze([LATEST_PUBLIC_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION]) }),
178
193
  Object.freeze({ caseVersions: Object.freeze([CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([CASE_REPORT_SCHEMA_VERSION]) }),
179
194
  ]);
180
195
  export function caseReportVersionMatchesCase(caseVersion, reportVersion) {
@@ -186,10 +201,12 @@ export function caseReportVersionMatchesCase(caseVersion, reportVersion) {
186
201
  export const WORKSPACE_ARCHIVE_SCHEMA = 'whoisleuth.workspace-archive';
187
202
  export const PUBLIC_WORKSPACE_ARCHIVE_VERSION = 5;
188
203
  export const PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION = 6;
189
- export const WORKSPACE_ARCHIVE_VERSION = 7;
204
+ export const LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION = 7;
205
+ export const WORKSPACE_ARCHIVE_VERSION = 8;
190
206
  export const SUPPORTED_WORKSPACE_ARCHIVE_VERSIONS = Object.freeze([
191
207
  PUBLIC_WORKSPACE_ARCHIVE_VERSION,
192
208
  PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION,
209
+ LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION,
193
210
  WORKSPACE_ARCHIVE_VERSION,
194
211
  ]);
195
212
  export function isSupportedWorkspaceArchiveVersion(value) {
@@ -324,28 +341,28 @@ export const CASE_RESPONSE_PACKET_COMPATIBILITY = defineSchemaCompatibility({
324
341
  currentVersion: CASE_RESPONSE_PACKET_VERSION, supportedVersions: CASE_RESPONSE_PACKET_OUTPUT_VERSIONS,
325
342
  acceptsUnversionedLegacy: false, futureVersionBehavior: 'reject', migration: 'read_only',
326
343
  writeSemantics: 'read_only', byteBudget: null, owner: CASE_CONTRACT_OWNER,
327
- note: 'Exact packet versions 6, 7 and 8 are verified independently; other versions fail closed.',
344
+ note: 'Exact packet versions 6, 7, 8 and 9 are verified independently; other versions fail closed.',
328
345
  });
329
346
  export const CASE_RESPONSE_REVIEW_INPUTS_COMPATIBILITY = defineSchemaCompatibility({
330
347
  id: 'derived.case-response-review-inputs', kind: 'derived', schema: CASE_RESPONSE_REVIEW_INPUTS_SCHEMA,
331
348
  currentVersion: CASE_RESPONSE_REVIEW_INPUTS_VERSION, supportedVersions: SUPPORTED_CASE_RESPONSE_REVIEW_INPUTS_VERSIONS,
332
349
  acceptsUnversionedLegacy: false, futureVersionBehavior: 'reject', migration: 'read_only',
333
350
  writeSemantics: 'read_only', byteBudget: null, owner: CASE_CONTRACT_OWNER,
334
- note: 'Exact published review-input version 1 and current version 2 remain independently readable for response authorisation; extensions and future versions fail closed.',
351
+ note: 'Exact review-input versions 1, 2 and 3 remain independently readable for response authorisation; extensions and future versions fail closed.',
335
352
  });
336
353
  export const CLI_CASE_PACK_COMPATIBILITY = defineSchemaCompatibility({
337
354
  id: 'export.cli-case-pack', kind: 'export', schema: CLI_CASE_PACK_SCHEMA, currentVersion: CLI_CASE_PACK_VERSION,
338
355
  supportedVersions: SUPPORTED_CLI_CASE_PACK_VERSIONS, acceptsUnversionedLegacy: false,
339
356
  futureVersionBehavior: 'reject', migration: 'read_only', writeSemantics: 'read_only',
340
357
  byteBudget: MAX_CASE_IMPORT_BYTES, owner: CASE_CONTRACT_OWNER,
341
- note: 'Case-pack version 2 verifies exact Case/report epochs 12/8, 13/9 and 14/10 with deterministic sorted-json-v2 integrity.',
358
+ note: 'Case-pack version 2 verifies exact Case/report epochs 12/8, 13/9, 14/10 and 15/11 with deterministic sorted-json-v2 integrity.',
342
359
  });
343
360
  export const WORKSPACE_ARCHIVE_COMPATIBILITY = defineSchemaCompatibility({
344
361
  id: 'export.workspace-archive', kind: 'export', schema: WORKSPACE_ARCHIVE_SCHEMA,
345
362
  currentVersion: WORKSPACE_ARCHIVE_VERSION, supportedVersions: SUPPORTED_WORKSPACE_ARCHIVE_VERSIONS,
346
363
  acceptsUnversionedLegacy: false, futureVersionBehavior: 'reject', migration: 'normalize_to_current',
347
364
  writeSemantics: 'non_destructive_merge', byteBudget: MAX_WORKSPACE_ARCHIVE_BYTES, owner: CASE_CONTRACT_OWNER,
348
- note: 'Workspace version 7 carries the current Case contract. Exact versions 5 and 6 remain readable; version 5 gains an empty Review Item section without inventing decisions, and future envelopes fail without mutation.',
365
+ note: 'Workspace version 8 carries the current Case contract. Exact versions 5, 6 and 7 remain readable; version 5 gains an empty Review Item section without inventing decisions, and future envelopes fail without mutation.',
349
366
  });
350
367
  export const WORKSPACE_SETTINGS_COMPATIBILITY = defineSchemaCompatibility({
351
368
  id: 'export.workspace-settings-section', kind: 'export', schema: WORKSPACE_SETTINGS_SCHEMA,
@@ -391,7 +408,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
391
408
  version: PUBLIC_CASE_SCHEMA_VERSION,
392
409
  role: 'historical',
393
410
  expectation: 'normalises_to_current_output',
394
- expectedOutputFixtureId: 'browser-case-v14',
411
+ expectedOutputFixtureId: 'browser-case-v15',
395
412
  shapeId: 'case.browser-store.public',
396
413
  scope: 'repository',
397
414
  }),
@@ -405,8 +422,8 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
405
422
  version: PUBLISHED_V2_CASE_SCHEMA_VERSION,
406
423
  role: 'historical',
407
424
  expectation: 'normalises_to_current_output',
408
- expectedOutputFixtureId: 'browser-case-v14',
409
- shapeId: 'case.browser-store.v13',
425
+ expectedOutputFixtureId: 'browser-case-v15',
426
+ shapeId: 'case.browser-store.v13-v14',
410
427
  scope: 'repository',
411
428
  }),
412
429
  Object.freeze({
@@ -416,6 +433,20 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
416
433
  sha256: 'ece46f5d27a52a20196678af8236674836f3979c0d45f0ad5751c00677ec8bae',
417
434
  contentDigestSha256: null,
418
435
  schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA,
436
+ version: LATEST_PUBLIC_CASE_SCHEMA_VERSION,
437
+ role: 'historical',
438
+ expectation: 'normalises_to_current_output',
439
+ expectedOutputFixtureId: 'browser-case-v15',
440
+ shapeId: 'case.browser-store.v13-v14',
441
+ scope: 'repository',
442
+ }),
443
+ Object.freeze({
444
+ id: 'browser-case-v15',
445
+ path: 'test/fixtures/case-lifecycle/browser-case-v15.json',
446
+ bytes: 2221,
447
+ sha256: 'a061116c9052a7f73ca6b5a88870bc58cbb083cf5fe82e942539b3847c12ad88',
448
+ contentDigestSha256: null,
449
+ schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA,
419
450
  version: CASE_SCHEMA_VERSION,
420
451
  role: 'current',
421
452
  expectation: 'accepted_exact',
@@ -433,7 +464,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
433
464
  version: PUBLIC_CASE_SCHEMA_VERSION,
434
465
  role: 'historical',
435
466
  expectation: 'normalises_to_current_output',
436
- expectedOutputFixtureId: 'case-export-v14',
467
+ expectedOutputFixtureId: 'case-export-v15',
437
468
  shapeId: 'case.export.public',
438
469
  scope: 'repository',
439
470
  }),
@@ -447,8 +478,8 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
447
478
  version: PUBLISHED_V2_CASE_SCHEMA_VERSION,
448
479
  role: 'historical',
449
480
  expectation: 'normalises_to_current_output',
450
- expectedOutputFixtureId: 'case-export-v14',
451
- shapeId: 'case.export.v13',
481
+ expectedOutputFixtureId: 'case-export-v15',
482
+ shapeId: 'case.export.v13-v14',
452
483
  scope: 'repository',
453
484
  }),
454
485
  Object.freeze({
@@ -458,6 +489,20 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
458
489
  sha256: '50cf1df53c3558852b712844d588d9eb955af858e160969d9a6af613c257feaf',
459
490
  contentDigestSha256: null,
460
491
  schema: CASE_EXPORT_LIFECYCLE_SCHEMA,
492
+ version: LATEST_PUBLIC_CASE_SCHEMA_VERSION,
493
+ role: 'historical',
494
+ expectation: 'normalises_to_current_output',
495
+ expectedOutputFixtureId: 'case-export-v15',
496
+ shapeId: 'case.export.v13-v14',
497
+ scope: 'repository',
498
+ }),
499
+ Object.freeze({
500
+ id: 'case-export-v15',
501
+ path: 'test/fixtures/case-lifecycle/case-export-v15.json',
502
+ bytes: 3211,
503
+ sha256: '26cd852ee202b7a50bd2a64e5d412ab52a38aa7195f81a86b26b222398b406f9',
504
+ contentDigestSha256: null,
505
+ schema: CASE_EXPORT_LIFECYCLE_SCHEMA,
461
506
  version: CASE_SCHEMA_VERSION,
462
507
  role: 'current',
463
508
  expectation: 'accepted_exact',
@@ -500,11 +545,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
500
545
  sha256: '36c8b89bb1b335d923bd5035020ff47f89c88775e14d08af2d2eb2ee2f5cc03a',
501
546
  contentDigestSha256: null,
502
547
  schema: CASE_REPORT_SCHEMA,
548
+ version: LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION,
549
+ role: 'historical',
550
+ expectation: 'accepted_exact',
551
+ expectedOutputFixtureId: null,
552
+ shapeId: 'case.report.v10',
553
+ scope: 'repository',
554
+ }),
555
+ Object.freeze({
556
+ id: 'case-report-v11',
557
+ path: 'test/fixtures/case-lifecycle/case-report-v11.json',
558
+ bytes: 4640,
559
+ sha256: 'bbe57dac61074b7badd094b7ffaabd46d3779c10152563e7a101a2126daf09b6',
560
+ contentDigestSha256: null,
561
+ schema: CASE_REPORT_SCHEMA,
503
562
  version: CASE_REPORT_SCHEMA_VERSION,
504
563
  role: 'current',
505
564
  expectation: 'accepted_exact',
506
565
  expectedOutputFixtureId: null,
507
- shapeId: 'case.report.v10',
566
+ shapeId: 'case.report.v11',
508
567
  scope: 'repository',
509
568
  }),
510
569
  Object.freeze({
@@ -528,11 +587,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
528
587
  sha256: '7bd2237f208714b92c3669c0581dbf0bc2dc22369e53b3ef9da088e8af0f4a83',
529
588
  contentDigestSha256: 'sha256:86d4d88d1d9fc969e6efa432061c64bf0725767d81c50b8655abd2d231dcc5b6',
530
589
  schema: CASE_RESPONSE_PACKET_SCHEMA,
590
+ version: LATEST_PUBLIC_CASE_RESPONSE_PACKET_VERSION,
591
+ role: 'historical',
592
+ expectation: 'accepted_exact',
593
+ expectedOutputFixtureId: null,
594
+ shapeId: 'case.response-packet.v8',
595
+ scope: 'repository',
596
+ }),
597
+ Object.freeze({
598
+ id: 'case-response-packet-v9',
599
+ path: 'test/fixtures/case-lifecycle/case-response-packet-v9.json',
600
+ bytes: 12275,
601
+ sha256: '6dbb9b9d2c199ebb0a1f43c3a08aaac98554787b40fed0456eff60ab2f36906c',
602
+ contentDigestSha256: 'sha256:3500158f08920e43ad16d588b8bfe3b8b92c58370d80468db4330baabeeca497',
603
+ schema: CASE_RESPONSE_PACKET_SCHEMA,
531
604
  version: CASE_RESPONSE_PACKET_VERSION,
532
605
  role: 'current',
533
606
  expectation: 'accepted_exact',
534
607
  expectedOutputFixtureId: null,
535
- shapeId: 'case.response-packet.v8',
608
+ shapeId: 'case.response-packet.v9',
536
609
  scope: 'repository',
537
610
  }),
538
611
  Object.freeze({
@@ -556,11 +629,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
556
629
  sha256: 'dcc9aaa7cdbd79a33559095f4c212e4eea5ad635c8c36290456d8b1946845aa6',
557
630
  contentDigestSha256: null,
558
631
  schema: CASE_RESPONSE_REVIEW_INPUTS_SCHEMA,
632
+ version: LATEST_PUBLIC_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
633
+ role: 'historical',
634
+ expectation: 'accepted_exact',
635
+ expectedOutputFixtureId: null,
636
+ shapeId: 'case.response-review-inputs.v2',
637
+ scope: 'repository',
638
+ }),
639
+ Object.freeze({
640
+ id: 'case-response-review-inputs-v3',
641
+ path: 'test/fixtures/case-lifecycle/case-response-review-inputs-v3.json',
642
+ bytes: 7604,
643
+ sha256: '13e0711d0a75635825af8cff4a1552efe1be153cc1892c886585f28c25ff03ae',
644
+ contentDigestSha256: null,
645
+ schema: CASE_RESPONSE_REVIEW_INPUTS_SCHEMA,
559
646
  version: CASE_RESPONSE_REVIEW_INPUTS_VERSION,
560
647
  role: 'current',
561
648
  expectation: 'accepted_exact',
562
649
  expectedOutputFixtureId: null,
563
- shapeId: 'case.response-review-inputs.v2',
650
+ shapeId: 'case.response-review-inputs.v3',
564
651
  scope: 'repository',
565
652
  }),
566
653
  Object.freeze({
@@ -595,8 +682,22 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
595
682
  id: 'cli-case-pack-v2-case-v14',
596
683
  path: 'test/fixtures/case-lifecycle/cli-case-pack-v2-case-v14.json',
597
684
  bytes: 9363,
598
- sha256: 'b51f23bca2dc91715f2aeeb931b79e4f990d59c3564d7cd60a9abac7e0d687a6',
599
- contentDigestSha256: 'sha256:82b88b1251c773a01823fccac9baf3e95f752570f091559c58dd0b1664444655',
685
+ sha256: 'e25e98602c92e696a50c9fd48924c6c13853a5c23ea6fe617abc0b89d8c9e8ee',
686
+ contentDigestSha256: 'sha256:50044835b0e7aa45137b2f75b9894aa35c71101c769062eb524078bfb55eecc0',
687
+ schema: CLI_CASE_PACK_SCHEMA,
688
+ version: CLI_CASE_PACK_VERSION,
689
+ role: 'current',
690
+ expectation: 'accepted_exact',
691
+ expectedOutputFixtureId: null,
692
+ shapeId: 'case.cli-pack.current',
693
+ scope: 'repository',
694
+ }),
695
+ Object.freeze({
696
+ id: 'cli-case-pack-v2-case-v15',
697
+ path: 'test/fixtures/case-lifecycle/cli-case-pack-v2-case-v15.json',
698
+ bytes: 9439,
699
+ sha256: '9c07b7828f5e348a6e9ca05e1bd487998851491d85d0b30b38adba196f84faee',
700
+ contentDigestSha256: 'sha256:475a91fe7c3afddd3f73ba5b9a698c08bc7b37f3fb67bcf86441ee908beb0dc8',
600
701
  schema: CLI_CASE_PACK_SCHEMA,
601
702
  version: CLI_CASE_PACK_VERSION,
602
703
  role: 'current',
@@ -615,7 +716,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
615
716
  version: PUBLIC_WORKSPACE_ARCHIVE_VERSION,
616
717
  role: 'historical',
617
718
  expectation: 'normalises_to_current_output',
618
- expectedOutputFixtureId: 'workspace-archive-v7-empty-current',
719
+ expectedOutputFixtureId: 'workspace-archive-v8-empty-current',
619
720
  shapeId: 'case.workspace-archive.v5',
620
721
  scope: 'repository',
621
722
  }),
@@ -629,7 +730,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
629
730
  version: PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION,
630
731
  role: 'historical',
631
732
  expectation: 'normalises_to_current_output',
632
- expectedOutputFixtureId: 'workspace-archive-v7-empty-current',
733
+ expectedOutputFixtureId: 'workspace-archive-v8-empty-current',
633
734
  shapeId: 'case.workspace-archive.v6',
634
735
  scope: 'repository',
635
736
  }),
@@ -640,11 +741,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
640
741
  sha256: '892b0d321f42bfb34501019388da682071024af452a8263f138cc08221947f0a',
641
742
  contentDigestSha256: null,
642
743
  schema: WORKSPACE_ARCHIVE_SCHEMA,
744
+ version: LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION,
745
+ role: 'historical',
746
+ expectation: 'normalises_to_current_output',
747
+ expectedOutputFixtureId: 'workspace-archive-v8-empty-current',
748
+ shapeId: 'case.workspace-archive.v7',
749
+ scope: 'repository',
750
+ }),
751
+ Object.freeze({
752
+ id: 'workspace-archive-v8-empty-current',
753
+ path: 'test/fixtures/case-lifecycle/workspace-archive-v8-empty-current.json',
754
+ bytes: 7258,
755
+ sha256: '747062e2dbbcf96724b19718d36bf0dc50b08e96d8adb670115d2315032b6c05',
756
+ contentDigestSha256: null,
757
+ schema: WORKSPACE_ARCHIVE_SCHEMA,
643
758
  version: WORKSPACE_ARCHIVE_VERSION,
644
759
  role: 'current',
645
760
  expectation: 'accepted_exact',
646
761
  expectedOutputFixtureId: null,
647
- shapeId: 'case.workspace-archive.v7',
762
+ shapeId: 'case.workspace-archive.v8',
648
763
  scope: 'repository',
649
764
  }),
650
765
  Object.freeze({
@@ -745,9 +860,9 @@ function shape(id, schema, versions, requiredKeys, normalisation, target = null)
745
860
  }
746
861
  const CASE_LIFECYCLE_SHAPES = Object.freeze([
747
862
  shape('case.browser-store.public', CASE_BROWSER_STORE_LIFECYCLE_SCHEMA, [PUBLIC_CASE_SCHEMA_VERSION], ['version', 'cases'], 'project_known_fields'),
748
- shape('case.browser-store.v13', CASE_BROWSER_STORE_LIFECYCLE_SCHEMA, [PUBLISHED_V2_CASE_SCHEMA_VERSION], ['version', 'cases'], 'project_known_fields'),
863
+ shape('case.browser-store.v13-v14', CASE_BROWSER_STORE_LIFECYCLE_SCHEMA, [PUBLISHED_V2_CASE_SCHEMA_VERSION, LATEST_PUBLIC_CASE_SCHEMA_VERSION], ['version', 'cases'], 'project_known_fields'),
749
864
  shape('case.browser-store.current', CASE_BROWSER_STORE_LIFECYCLE_SCHEMA, [CASE_SCHEMA_VERSION], ['version', 'cases'], 'project_known_fields'),
750
- shape('case.export.v13', CASE_EXPORT_LIFECYCLE_SCHEMA, [PUBLISHED_V2_CASE_SCHEMA_VERSION], ['version', 'cases'], 'preserve_document'),
865
+ shape('case.export.v13-v14', CASE_EXPORT_LIFECYCLE_SCHEMA, [PUBLISHED_V2_CASE_SCHEMA_VERSION, LATEST_PUBLIC_CASE_SCHEMA_VERSION], ['version', 'cases'], 'preserve_document'),
751
866
  shape('case.export.public', CASE_EXPORT_LIFECYCLE_SCHEMA, [PUBLIC_CASE_SCHEMA_VERSION], ['version', 'cases'], 'preserve_document'),
752
867
  shape('case.response-packet.v6', CASE_RESPONSE_PACKET_SCHEMA, [PUBLIC_CASE_RESPONSE_PACKET_VERSION], [
753
868
  'schema', 'schemaVersion', 'generatedAt', 'reviewRequired', 'submissionPerformed',
@@ -756,7 +871,8 @@ const CASE_LIFECYCLE_SHAPES = Object.freeze([
756
871
  ], 'preserve_signed_document'),
757
872
  shape('case.export.current', CASE_EXPORT_LIFECYCLE_SCHEMA, [CASE_SCHEMA_VERSION], ['version', 'cases'], 'preserve_document'),
758
873
  shape('case.report.v9', CASE_REPORT_SCHEMA, [PUBLISHED_V2_CASE_REPORT_SCHEMA_VERSION], ['schema', 'schemaVersion', 'generatedAt', 'application', 'case', 'currentAssessment', 'evidenceTimeline', 'analystResponse', 'responseLifecycle', 'limitations'], 'preserve_document'),
759
- shape('case.report.v10', CASE_REPORT_SCHEMA, [CASE_REPORT_SCHEMA_VERSION], ['schema', 'schemaVersion', 'generatedAt', 'application', 'case', 'currentAssessment', 'evidenceTimeline', 'analystResponse', 'responseLifecycle', 'limitations'], 'preserve_document'),
874
+ shape('case.report.v10', CASE_REPORT_SCHEMA, [LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION], ['schema', 'schemaVersion', 'generatedAt', 'application', 'case', 'currentAssessment', 'evidenceTimeline', 'analystResponse', 'responseLifecycle', 'limitations'], 'preserve_document'),
875
+ shape('case.report.v11', CASE_REPORT_SCHEMA, [CASE_REPORT_SCHEMA_VERSION], ['schema', 'schemaVersion', 'generatedAt', 'application', 'case', 'currentAssessment', 'evidenceTimeline', 'analystResponse', 'responseLifecycle', 'limitations'], 'preserve_document'),
760
876
  shape('case.response-packet.v7', CASE_RESPONSE_PACKET_SCHEMA, [PUBLISHED_V2_CASE_RESPONSE_PACKET_VERSION], [
761
877
  'schema', 'schemaVersion', 'generatedAt', 'reviewRequired', 'submissionPerformed',
762
878
  'profile', 'case', 'incident', 'contacts', 'provenance', 'selectedEvidence',
@@ -764,7 +880,14 @@ const CASE_LIFECYCLE_SHAPES = Object.freeze([
764
880
  'escalationHistoryOmitted', 'escalationHistoryLimitations', 'responseLifecycle',
765
881
  'authorisation', 'integrity',
766
882
  ], 'preserve_signed_document'),
767
- shape('case.response-packet.v8', CASE_RESPONSE_PACKET_SCHEMA, [CASE_RESPONSE_PACKET_VERSION], [
883
+ shape('case.response-packet.v8', CASE_RESPONSE_PACKET_SCHEMA, [LATEST_PUBLIC_CASE_RESPONSE_PACKET_VERSION], [
884
+ 'schema', 'schemaVersion', 'generatedAt', 'reviewRequired', 'submissionPerformed',
885
+ 'profile', 'case', 'incident', 'contacts', 'recipientRoute', 'actionBinding',
886
+ 'provenance', 'selectedEvidence', 'contradictions', 'readiness', 'artefactReferences',
887
+ 'preflight', 'escalationHistory', 'escalationHistoryOmitted',
888
+ 'escalationHistoryLimitations', 'responseLifecycle', 'authorisation', 'integrity',
889
+ ], 'preserve_signed_document'),
890
+ shape('case.response-packet.v9', CASE_RESPONSE_PACKET_SCHEMA, [CASE_RESPONSE_PACKET_VERSION], [
768
891
  'schema', 'schemaVersion', 'generatedAt', 'reviewRequired', 'submissionPerformed',
769
892
  'profile', 'case', 'incident', 'contacts', 'recipientRoute', 'actionBinding',
770
893
  'provenance', 'selectedEvidence', 'contradictions', 'readiness', 'artefactReferences',
@@ -776,7 +899,13 @@ const CASE_LIFECYCLE_SHAPES = Object.freeze([
776
899
  'contradictions', 'readiness', 'artefactReferences', 'escalationHistory',
777
900
  'escalationHistoryOmitted', 'escalationHistoryLimitations', 'responseLifecycle',
778
901
  ], 'preserve_signed_document'),
779
- shape('case.response-review-inputs.v2', CASE_RESPONSE_REVIEW_INPUTS_SCHEMA, [CASE_RESPONSE_REVIEW_INPUTS_VERSION], [
902
+ shape('case.response-review-inputs.v2', CASE_RESPONSE_REVIEW_INPUTS_SCHEMA, [LATEST_PUBLIC_CASE_RESPONSE_REVIEW_INPUTS_VERSION], [
903
+ 'contract', 'version', 'profile', 'case', 'incident', 'contacts',
904
+ 'recipientRoute', 'actionBinding', 'selectedEvidence', 'contradictions',
905
+ 'readiness', 'artefactReferences', 'escalationHistory',
906
+ 'escalationHistoryOmitted', 'escalationHistoryLimitations', 'responseLifecycle',
907
+ ], 'preserve_signed_document'),
908
+ shape('case.response-review-inputs.v3', CASE_RESPONSE_REVIEW_INPUTS_SCHEMA, [CASE_RESPONSE_REVIEW_INPUTS_VERSION], [
780
909
  'contract', 'version', 'profile', 'case', 'incident', 'contacts',
781
910
  'recipientRoute', 'actionBinding', 'selectedEvidence', 'contradictions',
782
911
  'readiness', 'artefactReferences', 'escalationHistory',
@@ -785,7 +914,8 @@ const CASE_LIFECYCLE_SHAPES = Object.freeze([
785
914
  shape('case.cli-pack.current', CLI_CASE_PACK_SCHEMA, [CLI_CASE_PACK_VERSION], CLI_CASE_PACK_ROOT_KEYS, 'preserve_signed_document'),
786
915
  shape('case.workspace-archive.v5', WORKSPACE_ARCHIVE_SCHEMA, [5], ['schema', 'version', 'generatedAt', 'manifest', 'sections', 'limitations'], 'preserve_signed_document'),
787
916
  shape('case.workspace-archive.v6', WORKSPACE_ARCHIVE_SCHEMA, [PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION], ['schema', 'version', 'generatedAt', 'manifest', 'sections', 'limitations'], 'preserve_signed_document'),
788
- shape('case.workspace-archive.v7', WORKSPACE_ARCHIVE_SCHEMA, [WORKSPACE_ARCHIVE_VERSION], ['schema', 'version', 'generatedAt', 'manifest', 'sections', 'limitations'], 'preserve_signed_document'),
917
+ shape('case.workspace-archive.v7', WORKSPACE_ARCHIVE_SCHEMA, [LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION], ['schema', 'version', 'generatedAt', 'manifest', 'sections', 'limitations'], 'preserve_signed_document'),
918
+ shape('case.workspace-archive.v8', WORKSPACE_ARCHIVE_SCHEMA, [WORKSPACE_ARCHIVE_VERSION], ['schema', 'version', 'generatedAt', 'manifest', 'sections', 'limitations'], 'preserve_signed_document'),
789
919
  shape('case.workspace-settings.v1', WORKSPACE_SETTINGS_SCHEMA, [WORKSPACE_SETTINGS_VERSION], ['schema', 'version', 'activeProfileId', 'theme'], 'preserve_document'),
790
920
  shape('case.encrypted-workspace-archive.v1', ENCRYPTED_WORKSPACE_ARCHIVE_SCHEMA, [ENCRYPTED_WORKSPACE_ARCHIVE_VERSION], ['schema', 'version', 'createdAt', 'content', 'kdf', 'cipher', 'ciphertext'], 'preserve_signed_document'),
791
921
  ]);
@@ -1025,13 +1155,13 @@ const CASE_LIFECYCLE_EXPIRY = Object.freeze([{
1025
1155
  }]);
1026
1156
  const CASE_LIFECYCLE_SERIALISATION = Object.freeze([
1027
1157
  {
1028
- id: 'case.browser-store.json.v14',
1158
+ id: 'case.browser-store.json.v15',
1029
1159
  schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA,
1030
1160
  versions: [CASE_SCHEMA_VERSION],
1031
1161
  mediaType: 'application/json',
1032
1162
  encoding: 'utf-8',
1033
1163
  bom: false,
1034
- indentSpaces: 2,
1164
+ indentSpaces: 0,
1035
1165
  terminalLf: true,
1036
1166
  propertyOrder: 'normalised_fixed',
1037
1167
  canonicalisation: null,
@@ -1040,10 +1170,10 @@ const CASE_LIFECYCLE_SERIALISATION = Object.freeze([
1040
1170
  verifierHookIds: [],
1041
1171
  },
1042
1172
  ...[
1043
- ['case.export.json.v14', CASE_EXPORT_LIFECYCLE_SCHEMA, [CASE_SCHEMA_VERSION], 'none', []],
1044
- ['case.report.json.v10', CASE_REPORT_SCHEMA, [...CASE_REPORT_OUTPUT_VERSIONS], 'none', []],
1045
- ['case.packet.json.v8', CASE_RESPONSE_PACKET_SCHEMA, [...SUPPORTED_CASE_RESPONSE_PACKET_VERSIONS], 'structural_only_requires_separate_verification', ['case.packet.verify']],
1046
- ['case.workspace.json.v7', WORKSPACE_ARCHIVE_SCHEMA, [WORKSPACE_ARCHIVE_VERSION], 'structural_only_requires_separate_verification', ['case.workspace.verify']],
1173
+ ['case.export.json.v15', CASE_EXPORT_LIFECYCLE_SCHEMA, [CASE_SCHEMA_VERSION], 'none', []],
1174
+ ['case.report.json.v11', CASE_REPORT_SCHEMA, [...CASE_REPORT_OUTPUT_VERSIONS], 'none', []],
1175
+ ['case.packet.json.v9', CASE_RESPONSE_PACKET_SCHEMA, [...SUPPORTED_CASE_RESPONSE_PACKET_VERSIONS], 'structural_only_requires_separate_verification', ['case.packet.verify']],
1176
+ ['case.workspace.json.v8', WORKSPACE_ARCHIVE_SCHEMA, [WORKSPACE_ARCHIVE_VERSION], 'structural_only_requires_separate_verification', ['case.workspace.verify']],
1047
1177
  ['case.encrypted-workspace.json.v1', ENCRYPTED_WORKSPACE_ARCHIVE_SCHEMA, [ENCRYPTED_WORKSPACE_ARCHIVE_VERSION], 'structural_only_requires_separate_verification', ['case.encrypted-workspace.verify']],
1048
1178
  ].map(([id, schema, versions, integrity, verifierHookIds]) => ({
1049
1179
  id,
@@ -1094,10 +1224,10 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1094
1224
  discriminator: null,
1095
1225
  }],
1096
1226
  emittedContract: { schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA, version: CASE_SCHEMA_VERSION, discriminator: null },
1097
- shapeIds: ['case.browser-store.public', 'case.browser-store.v13', 'case.browser-store.current'],
1227
+ shapeIds: ['case.browser-store.public', 'case.browser-store.v13-v14', 'case.browser-store.current'],
1098
1228
  boundProfileIds: ['case.browser-store.bounds', 'case.domain.bounds'],
1099
1229
  hookIds: ['case.browser.normalise', 'case.browser.serialise'],
1100
- serialisationProfileId: 'case.browser-store.json.v14',
1230
+ serialisationProfileId: 'case.browser-store.json.v15',
1101
1231
  privacyProfileId: 'case.privacy.browser-state',
1102
1232
  retentionEffect: 'browser_indexeddb',
1103
1233
  ...sharedEdge,
@@ -1113,7 +1243,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1113
1243
  discriminator: null,
1114
1244
  }],
1115
1245
  emittedContract: null,
1116
- shapeIds: ['case.export.public', 'case.export.v13', 'case.export.current'],
1246
+ shapeIds: ['case.export.public', 'case.export.v13-v14', 'case.export.current'],
1117
1247
  boundProfileIds: ['case.portable.bounds', 'case.domain.bounds'],
1118
1248
  hookIds: ['case.export.merge'],
1119
1249
  serialisationProfileId: null,
@@ -1130,7 +1260,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1130
1260
  shapeIds: ['case.export.current'],
1131
1261
  boundProfileIds: ['case.portable.bounds', 'case.domain.bounds'],
1132
1262
  hookIds: ['case.export.build', 'case.portable.serialise'],
1133
- serialisationProfileId: 'case.export.json.v14',
1263
+ serialisationProfileId: 'case.export.json.v15',
1134
1264
  privacyProfileId: 'case.privacy.portable-output',
1135
1265
  retentionEffect: 'operator_controlled_output',
1136
1266
  ...sharedEdge,
@@ -1146,7 +1276,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1146
1276
  discriminator: null,
1147
1277
  }],
1148
1278
  emittedContract: null,
1149
- shapeIds: ['case.report.v9', 'case.report.v10'],
1279
+ shapeIds: ['case.report.v9', 'case.report.v10', 'case.report.v11'],
1150
1280
  boundProfileIds: ['case.domain.bounds'],
1151
1281
  hookIds: ['case.cli-pack.verify'],
1152
1282
  serialisationProfileId: null,
@@ -1160,10 +1290,10 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1160
1290
  operation: 'build-report',
1161
1291
  acceptedContracts: [],
1162
1292
  emittedContract: { schema: CASE_REPORT_SCHEMA, version: CASE_REPORT_SCHEMA_VERSION, discriminator: null },
1163
- shapeIds: ['case.report.v10'],
1293
+ shapeIds: ['case.report.v11'],
1164
1294
  boundProfileIds: ['case.domain.bounds'],
1165
1295
  hookIds: ['case.report.build', 'case.portable.serialise'],
1166
- serialisationProfileId: 'case.report.json.v10',
1296
+ serialisationProfileId: 'case.report.json.v11',
1167
1297
  privacyProfileId: 'case.privacy.portable-output',
1168
1298
  retentionEffect: 'operator_controlled_output',
1169
1299
  ...sharedEdge,
@@ -1179,7 +1309,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1179
1309
  discriminator: null,
1180
1310
  }],
1181
1311
  emittedContract: null,
1182
- shapeIds: ['case.response-packet.v6', 'case.response-packet.v7', 'case.response-packet.v8'],
1312
+ shapeIds: ['case.response-packet.v6', 'case.response-packet.v7', 'case.response-packet.v8', 'case.response-packet.v9'],
1183
1313
  boundProfileIds: ['case.packet.bounds'],
1184
1314
  hookIds: ['case.packet.verify'],
1185
1315
  serialisationProfileId: null,
@@ -1198,7 +1328,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1198
1328
  discriminator: null,
1199
1329
  }],
1200
1330
  emittedContract: null,
1201
- shapeIds: ['case.response-packet.v6', 'case.response-packet.v7', 'case.response-packet.v8'],
1331
+ shapeIds: ['case.response-packet.v6', 'case.response-packet.v7', 'case.response-packet.v8', 'case.response-packet.v9'],
1202
1332
  boundProfileIds: ['case.packet.bounds'],
1203
1333
  hookIds: ['case.packet.structure', 'case.packet.verify'],
1204
1334
  serialisationProfileId: null,
@@ -1212,10 +1342,10 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1212
1342
  operation: 'build-packet',
1213
1343
  acceptedContracts: [],
1214
1344
  emittedContract: { schema: CASE_RESPONSE_PACKET_SCHEMA, version: CASE_RESPONSE_PACKET_VERSION, discriminator: null },
1215
- shapeIds: ['case.response-packet.v8'],
1345
+ shapeIds: ['case.response-packet.v9'],
1216
1346
  boundProfileIds: ['case.packet.bounds'],
1217
1347
  hookIds: ['case.packet.build', 'case.portable.serialise'],
1218
- serialisationProfileId: 'case.packet.json.v8',
1348
+ serialisationProfileId: 'case.packet.json.v9',
1219
1349
  privacyProfileId: 'case.privacy.portable-output',
1220
1350
  retentionEffect: 'operator_controlled_output',
1221
1351
  ...sharedEdge,
@@ -1231,7 +1361,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1231
1361
  discriminator: null,
1232
1362
  }],
1233
1363
  emittedContract: null,
1234
- shapeIds: ['case.response-review-inputs.v1', 'case.response-review-inputs.v2'],
1364
+ shapeIds: ['case.response-review-inputs.v1', 'case.response-review-inputs.v2', 'case.response-review-inputs.v3'],
1235
1365
  boundProfileIds: ['case.packet.bounds'],
1236
1366
  hookIds: ['case.review-inputs.validate'],
1237
1367
  serialisationProfileId: null,
@@ -1249,7 +1379,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1249
1379
  version: CASE_RESPONSE_REVIEW_INPUTS_VERSION,
1250
1380
  discriminator: null,
1251
1381
  },
1252
- shapeIds: ['case.response-review-inputs.v2'],
1382
+ shapeIds: ['case.response-review-inputs.v3'],
1253
1383
  boundProfileIds: ['case.packet.bounds'],
1254
1384
  hookIds: ['case.review-inputs.build'],
1255
1385
  serialisationProfileId: null,
@@ -1311,7 +1441,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1311
1441
  discriminator: null,
1312
1442
  }],
1313
1443
  emittedContract: null,
1314
- shapeIds: ['case.workspace-archive.v5', 'case.workspace-archive.v6', 'case.workspace-archive.v7', 'case.workspace-settings.v1'],
1444
+ shapeIds: ['case.workspace-archive.v5', 'case.workspace-archive.v6', 'case.workspace-archive.v7', 'case.workspace-archive.v8', 'case.workspace-settings.v1'],
1315
1445
  boundProfileIds: ['case.workspace.bounds'],
1316
1446
  hookIds: ['case.workspace.verify'],
1317
1447
  serialisationProfileId: null,
@@ -1325,10 +1455,10 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1325
1455
  operation: 'build-workspace',
1326
1456
  acceptedContracts: [],
1327
1457
  emittedContract: { schema: WORKSPACE_ARCHIVE_SCHEMA, version: WORKSPACE_ARCHIVE_VERSION, discriminator: null },
1328
- shapeIds: ['case.workspace-archive.v7'],
1458
+ shapeIds: ['case.workspace-archive.v8'],
1329
1459
  boundProfileIds: ['case.workspace.bounds'],
1330
1460
  hookIds: ['case.workspace.build', 'case.portable.serialise'],
1331
- serialisationProfileId: 'case.workspace.json.v7',
1461
+ serialisationProfileId: 'case.workspace.json.v8',
1332
1462
  privacyProfileId: 'case.privacy.portable-output',
1333
1463
  retentionEffect: 'operator_controlled_output',
1334
1464
  ...sharedEdge,
@@ -1381,7 +1511,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1381
1511
  version: ENCRYPTED_WORKSPACE_ARCHIVE_VERSION,
1382
1512
  discriminator: null,
1383
1513
  },
1384
- shapeIds: ['case.workspace-archive.v5', 'case.workspace-archive.v6', 'case.workspace-archive.v7', 'case.encrypted-workspace-archive.v1'],
1514
+ shapeIds: ['case.workspace-archive.v5', 'case.workspace-archive.v6', 'case.workspace-archive.v7', 'case.workspace-archive.v8', 'case.encrypted-workspace-archive.v1'],
1385
1515
  boundProfileIds: ['case.workspace.bounds', 'case.encrypted-workspace.bounds'],
1386
1516
  hookIds: ['case.encrypted-workspace.build', 'case.portable.serialise'],
1387
1517
  serialisationProfileId: 'case.encrypted-workspace.json.v1',