@slicedearth/whoisleuth-cli 2.2.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 +12 -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 +60 -11
  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 +6 -4
  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 +171 -51
  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 +3 -2
  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,7 +2,7 @@ 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.1.0';
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
8
  'LATEST_PUBLIC_CASE_SCHEMA_VERSION',
@@ -118,6 +118,7 @@ export const CASE_DOMAIN_COMPATIBILITY_FACADES = Object.freeze([
118
118
  ['frontend/src/lib/analysis/case-response-model.ts', 'packages/cases/case-response-model.mts'],
119
119
  ['frontend/src/lib/analysis/case-response-packet.ts', 'packages/cases/case-response-packet.mts'],
120
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'],
121
122
  ['frontend/src/lib/analysis/http-summary.ts', 'packages/cases/http-summary.mts'],
122
123
  ['frontend/src/lib/analysis/opaque-reference-id.ts', 'packages/cases/opaque-reference-id.mts'],
123
124
  ['frontend/src/lib/analysis/workspace-archive.ts', 'packages/workspace/workspace-archive.mts'],
@@ -131,40 +132,44 @@ export const CASE_BROWSER_STORE_LIFECYCLE_SCHEMA = 'whoisleuth.browser.case-stor
131
132
  export const CASE_EXPORT_LIFECYCLE_SCHEMA = 'whoisleuth.case-export';
132
133
  export const PUBLIC_CASE_SCHEMA_VERSION = 12;
133
134
  export const PUBLISHED_V2_CASE_SCHEMA_VERSION = 13;
134
- export const CASE_SCHEMA_VERSION = 14;
135
135
  export const LATEST_PUBLIC_CASE_SCHEMA_VERSION = 14;
136
+ export const CASE_SCHEMA_VERSION = 15;
136
137
  export const CASE_BROWSER_SUPPORTED_VERSIONS = Object.freeze([
137
138
  PUBLIC_CASE_SCHEMA_VERSION,
138
139
  PUBLISHED_V2_CASE_SCHEMA_VERSION,
140
+ LATEST_PUBLIC_CASE_SCHEMA_VERSION,
139
141
  CASE_SCHEMA_VERSION,
140
142
  ]);
141
143
  export const CASE_IMPORT_VERSIONS = CASE_BROWSER_SUPPORTED_VERSIONS;
142
144
  export const CASE_REPORT_SCHEMA = 'whoisleuth.case-report';
143
145
  export const PUBLIC_CASE_REPORT_SCHEMA_VERSION = 8;
144
146
  export const PUBLISHED_V2_CASE_REPORT_SCHEMA_VERSION = 9;
145
- export const CASE_REPORT_SCHEMA_VERSION = 10;
146
147
  export const LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION = 10;
148
+ export const CASE_REPORT_SCHEMA_VERSION = 11;
147
149
  export const CASE_REPORT_OUTPUT_VERSIONS = Object.freeze([
148
150
  PUBLISHED_V2_CASE_REPORT_SCHEMA_VERSION,
151
+ LATEST_PUBLIC_CASE_REPORT_SCHEMA_VERSION,
149
152
  CASE_REPORT_SCHEMA_VERSION,
150
153
  ]);
151
154
  export const CASE_RESPONSE_PACKET_SCHEMA = 'whoisleuth.case-response-packet';
152
155
  export const PUBLIC_CASE_RESPONSE_PACKET_VERSION = 6;
153
156
  export const PUBLISHED_V2_CASE_RESPONSE_PACKET_VERSION = 7;
154
- export const CASE_RESPONSE_PACKET_VERSION = 8;
155
157
  export const LATEST_PUBLIC_CASE_RESPONSE_PACKET_VERSION = 8;
158
+ export const CASE_RESPONSE_PACKET_VERSION = 9;
156
159
  export const CASE_RESPONSE_PACKET_OUTPUT_VERSIONS = Object.freeze([
157
160
  PUBLIC_CASE_RESPONSE_PACKET_VERSION,
158
161
  PUBLISHED_V2_CASE_RESPONSE_PACKET_VERSION,
162
+ LATEST_PUBLIC_CASE_RESPONSE_PACKET_VERSION,
159
163
  CASE_RESPONSE_PACKET_VERSION,
160
164
  ]);
161
165
  export const SUPPORTED_CASE_RESPONSE_PACKET_VERSIONS = CASE_RESPONSE_PACKET_OUTPUT_VERSIONS;
162
166
  export const CASE_RESPONSE_REVIEW_INPUTS_SCHEMA = 'whoisleuth.case-response-review-inputs';
163
167
  export const PUBLISHED_V2_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 1;
164
- export const CASE_RESPONSE_REVIEW_INPUTS_VERSION = 2;
165
168
  export const LATEST_PUBLIC_CASE_RESPONSE_REVIEW_INPUTS_VERSION = 2;
169
+ export const CASE_RESPONSE_REVIEW_INPUTS_VERSION = 3;
166
170
  export const SUPPORTED_CASE_RESPONSE_REVIEW_INPUTS_VERSIONS = Object.freeze([
167
171
  PUBLISHED_V2_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
172
+ LATEST_PUBLIC_CASE_RESPONSE_REVIEW_INPUTS_VERSION,
168
173
  CASE_RESPONSE_REVIEW_INPUTS_VERSION,
169
174
  ]);
170
175
  export const CLI_CASE_PACK_SCHEMA = 'whoisleuth.cli.case-pack';
@@ -184,6 +189,7 @@ export const CLI_CASE_PACK_LIMITATIONS = Object.freeze([
184
189
  export const CLI_CASE_PACK_CASE_REPORT_EPOCHS = Object.freeze([
185
190
  Object.freeze({ caseVersions: Object.freeze([PUBLIC_CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([PUBLIC_CASE_REPORT_SCHEMA_VERSION]) }),
186
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]) }),
187
193
  Object.freeze({ caseVersions: Object.freeze([CASE_SCHEMA_VERSION]), reportVersions: Object.freeze([CASE_REPORT_SCHEMA_VERSION]) }),
188
194
  ]);
189
195
  export function caseReportVersionMatchesCase(caseVersion, reportVersion) {
@@ -195,11 +201,12 @@ export function caseReportVersionMatchesCase(caseVersion, reportVersion) {
195
201
  export const WORKSPACE_ARCHIVE_SCHEMA = 'whoisleuth.workspace-archive';
196
202
  export const PUBLIC_WORKSPACE_ARCHIVE_VERSION = 5;
197
203
  export const PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION = 6;
198
- export const WORKSPACE_ARCHIVE_VERSION = 7;
199
204
  export const LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION = 7;
205
+ export const WORKSPACE_ARCHIVE_VERSION = 8;
200
206
  export const SUPPORTED_WORKSPACE_ARCHIVE_VERSIONS = Object.freeze([
201
207
  PUBLIC_WORKSPACE_ARCHIVE_VERSION,
202
208
  PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION,
209
+ LATEST_PUBLIC_WORKSPACE_ARCHIVE_VERSION,
203
210
  WORKSPACE_ARCHIVE_VERSION,
204
211
  ]);
205
212
  export function isSupportedWorkspaceArchiveVersion(value) {
@@ -334,28 +341,28 @@ export const CASE_RESPONSE_PACKET_COMPATIBILITY = defineSchemaCompatibility({
334
341
  currentVersion: CASE_RESPONSE_PACKET_VERSION, supportedVersions: CASE_RESPONSE_PACKET_OUTPUT_VERSIONS,
335
342
  acceptsUnversionedLegacy: false, futureVersionBehavior: 'reject', migration: 'read_only',
336
343
  writeSemantics: 'read_only', byteBudget: null, owner: CASE_CONTRACT_OWNER,
337
- 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.',
338
345
  });
339
346
  export const CASE_RESPONSE_REVIEW_INPUTS_COMPATIBILITY = defineSchemaCompatibility({
340
347
  id: 'derived.case-response-review-inputs', kind: 'derived', schema: CASE_RESPONSE_REVIEW_INPUTS_SCHEMA,
341
348
  currentVersion: CASE_RESPONSE_REVIEW_INPUTS_VERSION, supportedVersions: SUPPORTED_CASE_RESPONSE_REVIEW_INPUTS_VERSIONS,
342
349
  acceptsUnversionedLegacy: false, futureVersionBehavior: 'reject', migration: 'read_only',
343
350
  writeSemantics: 'read_only', byteBudget: null, owner: CASE_CONTRACT_OWNER,
344
- 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.',
345
352
  });
346
353
  export const CLI_CASE_PACK_COMPATIBILITY = defineSchemaCompatibility({
347
354
  id: 'export.cli-case-pack', kind: 'export', schema: CLI_CASE_PACK_SCHEMA, currentVersion: CLI_CASE_PACK_VERSION,
348
355
  supportedVersions: SUPPORTED_CLI_CASE_PACK_VERSIONS, acceptsUnversionedLegacy: false,
349
356
  futureVersionBehavior: 'reject', migration: 'read_only', writeSemantics: 'read_only',
350
357
  byteBudget: MAX_CASE_IMPORT_BYTES, owner: CASE_CONTRACT_OWNER,
351
- 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.',
352
359
  });
353
360
  export const WORKSPACE_ARCHIVE_COMPATIBILITY = defineSchemaCompatibility({
354
361
  id: 'export.workspace-archive', kind: 'export', schema: WORKSPACE_ARCHIVE_SCHEMA,
355
362
  currentVersion: WORKSPACE_ARCHIVE_VERSION, supportedVersions: SUPPORTED_WORKSPACE_ARCHIVE_VERSIONS,
356
363
  acceptsUnversionedLegacy: false, futureVersionBehavior: 'reject', migration: 'normalize_to_current',
357
364
  writeSemantics: 'non_destructive_merge', byteBudget: MAX_WORKSPACE_ARCHIVE_BYTES, owner: CASE_CONTRACT_OWNER,
358
- 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.',
359
366
  });
360
367
  export const WORKSPACE_SETTINGS_COMPATIBILITY = defineSchemaCompatibility({
361
368
  id: 'export.workspace-settings-section', kind: 'export', schema: WORKSPACE_SETTINGS_SCHEMA,
@@ -401,7 +408,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
401
408
  version: PUBLIC_CASE_SCHEMA_VERSION,
402
409
  role: 'historical',
403
410
  expectation: 'normalises_to_current_output',
404
- expectedOutputFixtureId: 'browser-case-v14',
411
+ expectedOutputFixtureId: 'browser-case-v15',
405
412
  shapeId: 'case.browser-store.public',
406
413
  scope: 'repository',
407
414
  }),
@@ -415,8 +422,8 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
415
422
  version: PUBLISHED_V2_CASE_SCHEMA_VERSION,
416
423
  role: 'historical',
417
424
  expectation: 'normalises_to_current_output',
418
- expectedOutputFixtureId: 'browser-case-v14',
419
- shapeId: 'case.browser-store.v13',
425
+ expectedOutputFixtureId: 'browser-case-v15',
426
+ shapeId: 'case.browser-store.v13-v14',
420
427
  scope: 'repository',
421
428
  }),
422
429
  Object.freeze({
@@ -426,6 +433,20 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
426
433
  sha256: 'ece46f5d27a52a20196678af8236674836f3979c0d45f0ad5751c00677ec8bae',
427
434
  contentDigestSha256: null,
428
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,
429
450
  version: CASE_SCHEMA_VERSION,
430
451
  role: 'current',
431
452
  expectation: 'accepted_exact',
@@ -443,7 +464,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
443
464
  version: PUBLIC_CASE_SCHEMA_VERSION,
444
465
  role: 'historical',
445
466
  expectation: 'normalises_to_current_output',
446
- expectedOutputFixtureId: 'case-export-v14',
467
+ expectedOutputFixtureId: 'case-export-v15',
447
468
  shapeId: 'case.export.public',
448
469
  scope: 'repository',
449
470
  }),
@@ -457,8 +478,8 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
457
478
  version: PUBLISHED_V2_CASE_SCHEMA_VERSION,
458
479
  role: 'historical',
459
480
  expectation: 'normalises_to_current_output',
460
- expectedOutputFixtureId: 'case-export-v14',
461
- shapeId: 'case.export.v13',
481
+ expectedOutputFixtureId: 'case-export-v15',
482
+ shapeId: 'case.export.v13-v14',
462
483
  scope: 'repository',
463
484
  }),
464
485
  Object.freeze({
@@ -468,6 +489,20 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
468
489
  sha256: '50cf1df53c3558852b712844d588d9eb955af858e160969d9a6af613c257feaf',
469
490
  contentDigestSha256: null,
470
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,
471
506
  version: CASE_SCHEMA_VERSION,
472
507
  role: 'current',
473
508
  expectation: 'accepted_exact',
@@ -510,11 +545,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
510
545
  sha256: '36c8b89bb1b335d923bd5035020ff47f89c88775e14d08af2d2eb2ee2f5cc03a',
511
546
  contentDigestSha256: null,
512
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,
513
562
  version: CASE_REPORT_SCHEMA_VERSION,
514
563
  role: 'current',
515
564
  expectation: 'accepted_exact',
516
565
  expectedOutputFixtureId: null,
517
- shapeId: 'case.report.v10',
566
+ shapeId: 'case.report.v11',
518
567
  scope: 'repository',
519
568
  }),
520
569
  Object.freeze({
@@ -538,11 +587,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
538
587
  sha256: '7bd2237f208714b92c3669c0581dbf0bc2dc22369e53b3ef9da088e8af0f4a83',
539
588
  contentDigestSha256: 'sha256:86d4d88d1d9fc969e6efa432061c64bf0725767d81c50b8655abd2d231dcc5b6',
540
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,
541
604
  version: CASE_RESPONSE_PACKET_VERSION,
542
605
  role: 'current',
543
606
  expectation: 'accepted_exact',
544
607
  expectedOutputFixtureId: null,
545
- shapeId: 'case.response-packet.v8',
608
+ shapeId: 'case.response-packet.v9',
546
609
  scope: 'repository',
547
610
  }),
548
611
  Object.freeze({
@@ -566,11 +629,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
566
629
  sha256: 'dcc9aaa7cdbd79a33559095f4c212e4eea5ad635c8c36290456d8b1946845aa6',
567
630
  contentDigestSha256: null,
568
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,
569
646
  version: CASE_RESPONSE_REVIEW_INPUTS_VERSION,
570
647
  role: 'current',
571
648
  expectation: 'accepted_exact',
572
649
  expectedOutputFixtureId: null,
573
- shapeId: 'case.response-review-inputs.v2',
650
+ shapeId: 'case.response-review-inputs.v3',
574
651
  scope: 'repository',
575
652
  }),
576
653
  Object.freeze({
@@ -615,6 +692,20 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
615
692
  shapeId: 'case.cli-pack.current',
616
693
  scope: 'repository',
617
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',
701
+ schema: CLI_CASE_PACK_SCHEMA,
702
+ version: CLI_CASE_PACK_VERSION,
703
+ role: 'current',
704
+ expectation: 'accepted_exact',
705
+ expectedOutputFixtureId: null,
706
+ shapeId: 'case.cli-pack.current',
707
+ scope: 'repository',
708
+ }),
618
709
  Object.freeze({
619
710
  id: 'workspace-archive-v5-public',
620
711
  path: 'test/fixtures/case-lifecycle/workspace-archive-v5-public.json',
@@ -625,7 +716,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
625
716
  version: PUBLIC_WORKSPACE_ARCHIVE_VERSION,
626
717
  role: 'historical',
627
718
  expectation: 'normalises_to_current_output',
628
- expectedOutputFixtureId: 'workspace-archive-v7-empty-current',
719
+ expectedOutputFixtureId: 'workspace-archive-v8-empty-current',
629
720
  shapeId: 'case.workspace-archive.v5',
630
721
  scope: 'repository',
631
722
  }),
@@ -639,7 +730,7 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
639
730
  version: PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION,
640
731
  role: 'historical',
641
732
  expectation: 'normalises_to_current_output',
642
- expectedOutputFixtureId: 'workspace-archive-v7-empty-current',
733
+ expectedOutputFixtureId: 'workspace-archive-v8-empty-current',
643
734
  shapeId: 'case.workspace-archive.v6',
644
735
  scope: 'repository',
645
736
  }),
@@ -650,11 +741,25 @@ const CASE_LIFECYCLE_FIXTURES = Object.freeze([
650
741
  sha256: '892b0d321f42bfb34501019388da682071024af452a8263f138cc08221947f0a',
651
742
  contentDigestSha256: null,
652
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,
653
758
  version: WORKSPACE_ARCHIVE_VERSION,
654
759
  role: 'current',
655
760
  expectation: 'accepted_exact',
656
761
  expectedOutputFixtureId: null,
657
- shapeId: 'case.workspace-archive.v7',
762
+ shapeId: 'case.workspace-archive.v8',
658
763
  scope: 'repository',
659
764
  }),
660
765
  Object.freeze({
@@ -755,9 +860,9 @@ function shape(id, schema, versions, requiredKeys, normalisation, target = null)
755
860
  }
756
861
  const CASE_LIFECYCLE_SHAPES = Object.freeze([
757
862
  shape('case.browser-store.public', CASE_BROWSER_STORE_LIFECYCLE_SCHEMA, [PUBLIC_CASE_SCHEMA_VERSION], ['version', 'cases'], 'project_known_fields'),
758
- 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'),
759
864
  shape('case.browser-store.current', CASE_BROWSER_STORE_LIFECYCLE_SCHEMA, [CASE_SCHEMA_VERSION], ['version', 'cases'], 'project_known_fields'),
760
- 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'),
761
866
  shape('case.export.public', CASE_EXPORT_LIFECYCLE_SCHEMA, [PUBLIC_CASE_SCHEMA_VERSION], ['version', 'cases'], 'preserve_document'),
762
867
  shape('case.response-packet.v6', CASE_RESPONSE_PACKET_SCHEMA, [PUBLIC_CASE_RESPONSE_PACKET_VERSION], [
763
868
  'schema', 'schemaVersion', 'generatedAt', 'reviewRequired', 'submissionPerformed',
@@ -766,7 +871,8 @@ const CASE_LIFECYCLE_SHAPES = Object.freeze([
766
871
  ], 'preserve_signed_document'),
767
872
  shape('case.export.current', CASE_EXPORT_LIFECYCLE_SCHEMA, [CASE_SCHEMA_VERSION], ['version', 'cases'], 'preserve_document'),
768
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'),
769
- 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'),
770
876
  shape('case.response-packet.v7', CASE_RESPONSE_PACKET_SCHEMA, [PUBLISHED_V2_CASE_RESPONSE_PACKET_VERSION], [
771
877
  'schema', 'schemaVersion', 'generatedAt', 'reviewRequired', 'submissionPerformed',
772
878
  'profile', 'case', 'incident', 'contacts', 'provenance', 'selectedEvidence',
@@ -774,7 +880,14 @@ const CASE_LIFECYCLE_SHAPES = Object.freeze([
774
880
  'escalationHistoryOmitted', 'escalationHistoryLimitations', 'responseLifecycle',
775
881
  'authorisation', 'integrity',
776
882
  ], 'preserve_signed_document'),
777
- 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], [
778
891
  'schema', 'schemaVersion', 'generatedAt', 'reviewRequired', 'submissionPerformed',
779
892
  'profile', 'case', 'incident', 'contacts', 'recipientRoute', 'actionBinding',
780
893
  'provenance', 'selectedEvidence', 'contradictions', 'readiness', 'artefactReferences',
@@ -786,7 +899,13 @@ const CASE_LIFECYCLE_SHAPES = Object.freeze([
786
899
  'contradictions', 'readiness', 'artefactReferences', 'escalationHistory',
787
900
  'escalationHistoryOmitted', 'escalationHistoryLimitations', 'responseLifecycle',
788
901
  ], 'preserve_signed_document'),
789
- 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], [
790
909
  'contract', 'version', 'profile', 'case', 'incident', 'contacts',
791
910
  'recipientRoute', 'actionBinding', 'selectedEvidence', 'contradictions',
792
911
  'readiness', 'artefactReferences', 'escalationHistory',
@@ -795,7 +914,8 @@ const CASE_LIFECYCLE_SHAPES = Object.freeze([
795
914
  shape('case.cli-pack.current', CLI_CASE_PACK_SCHEMA, [CLI_CASE_PACK_VERSION], CLI_CASE_PACK_ROOT_KEYS, 'preserve_signed_document'),
796
915
  shape('case.workspace-archive.v5', WORKSPACE_ARCHIVE_SCHEMA, [5], ['schema', 'version', 'generatedAt', 'manifest', 'sections', 'limitations'], 'preserve_signed_document'),
797
916
  shape('case.workspace-archive.v6', WORKSPACE_ARCHIVE_SCHEMA, [PUBLISHED_V2_WORKSPACE_ARCHIVE_VERSION], ['schema', 'version', 'generatedAt', 'manifest', 'sections', 'limitations'], 'preserve_signed_document'),
798
- 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'),
799
919
  shape('case.workspace-settings.v1', WORKSPACE_SETTINGS_SCHEMA, [WORKSPACE_SETTINGS_VERSION], ['schema', 'version', 'activeProfileId', 'theme'], 'preserve_document'),
800
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'),
801
921
  ]);
@@ -1035,13 +1155,13 @@ const CASE_LIFECYCLE_EXPIRY = Object.freeze([{
1035
1155
  }]);
1036
1156
  const CASE_LIFECYCLE_SERIALISATION = Object.freeze([
1037
1157
  {
1038
- id: 'case.browser-store.json.v14',
1158
+ id: 'case.browser-store.json.v15',
1039
1159
  schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA,
1040
1160
  versions: [CASE_SCHEMA_VERSION],
1041
1161
  mediaType: 'application/json',
1042
1162
  encoding: 'utf-8',
1043
1163
  bom: false,
1044
- indentSpaces: 2,
1164
+ indentSpaces: 0,
1045
1165
  terminalLf: true,
1046
1166
  propertyOrder: 'normalised_fixed',
1047
1167
  canonicalisation: null,
@@ -1050,10 +1170,10 @@ const CASE_LIFECYCLE_SERIALISATION = Object.freeze([
1050
1170
  verifierHookIds: [],
1051
1171
  },
1052
1172
  ...[
1053
- ['case.export.json.v14', CASE_EXPORT_LIFECYCLE_SCHEMA, [CASE_SCHEMA_VERSION], 'none', []],
1054
- ['case.report.json.v10', CASE_REPORT_SCHEMA, [...CASE_REPORT_OUTPUT_VERSIONS], 'none', []],
1055
- ['case.packet.json.v8', CASE_RESPONSE_PACKET_SCHEMA, [...SUPPORTED_CASE_RESPONSE_PACKET_VERSIONS], 'structural_only_requires_separate_verification', ['case.packet.verify']],
1056
- ['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']],
1057
1177
  ['case.encrypted-workspace.json.v1', ENCRYPTED_WORKSPACE_ARCHIVE_SCHEMA, [ENCRYPTED_WORKSPACE_ARCHIVE_VERSION], 'structural_only_requires_separate_verification', ['case.encrypted-workspace.verify']],
1058
1178
  ].map(([id, schema, versions, integrity, verifierHookIds]) => ({
1059
1179
  id,
@@ -1104,10 +1224,10 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1104
1224
  discriminator: null,
1105
1225
  }],
1106
1226
  emittedContract: { schema: CASE_BROWSER_STORE_LIFECYCLE_SCHEMA, version: CASE_SCHEMA_VERSION, discriminator: null },
1107
- 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'],
1108
1228
  boundProfileIds: ['case.browser-store.bounds', 'case.domain.bounds'],
1109
1229
  hookIds: ['case.browser.normalise', 'case.browser.serialise'],
1110
- serialisationProfileId: 'case.browser-store.json.v14',
1230
+ serialisationProfileId: 'case.browser-store.json.v15',
1111
1231
  privacyProfileId: 'case.privacy.browser-state',
1112
1232
  retentionEffect: 'browser_indexeddb',
1113
1233
  ...sharedEdge,
@@ -1123,7 +1243,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1123
1243
  discriminator: null,
1124
1244
  }],
1125
1245
  emittedContract: null,
1126
- shapeIds: ['case.export.public', 'case.export.v13', 'case.export.current'],
1246
+ shapeIds: ['case.export.public', 'case.export.v13-v14', 'case.export.current'],
1127
1247
  boundProfileIds: ['case.portable.bounds', 'case.domain.bounds'],
1128
1248
  hookIds: ['case.export.merge'],
1129
1249
  serialisationProfileId: null,
@@ -1140,7 +1260,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1140
1260
  shapeIds: ['case.export.current'],
1141
1261
  boundProfileIds: ['case.portable.bounds', 'case.domain.bounds'],
1142
1262
  hookIds: ['case.export.build', 'case.portable.serialise'],
1143
- serialisationProfileId: 'case.export.json.v14',
1263
+ serialisationProfileId: 'case.export.json.v15',
1144
1264
  privacyProfileId: 'case.privacy.portable-output',
1145
1265
  retentionEffect: 'operator_controlled_output',
1146
1266
  ...sharedEdge,
@@ -1156,7 +1276,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1156
1276
  discriminator: null,
1157
1277
  }],
1158
1278
  emittedContract: null,
1159
- shapeIds: ['case.report.v9', 'case.report.v10'],
1279
+ shapeIds: ['case.report.v9', 'case.report.v10', 'case.report.v11'],
1160
1280
  boundProfileIds: ['case.domain.bounds'],
1161
1281
  hookIds: ['case.cli-pack.verify'],
1162
1282
  serialisationProfileId: null,
@@ -1170,10 +1290,10 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1170
1290
  operation: 'build-report',
1171
1291
  acceptedContracts: [],
1172
1292
  emittedContract: { schema: CASE_REPORT_SCHEMA, version: CASE_REPORT_SCHEMA_VERSION, discriminator: null },
1173
- shapeIds: ['case.report.v10'],
1293
+ shapeIds: ['case.report.v11'],
1174
1294
  boundProfileIds: ['case.domain.bounds'],
1175
1295
  hookIds: ['case.report.build', 'case.portable.serialise'],
1176
- serialisationProfileId: 'case.report.json.v10',
1296
+ serialisationProfileId: 'case.report.json.v11',
1177
1297
  privacyProfileId: 'case.privacy.portable-output',
1178
1298
  retentionEffect: 'operator_controlled_output',
1179
1299
  ...sharedEdge,
@@ -1189,7 +1309,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1189
1309
  discriminator: null,
1190
1310
  }],
1191
1311
  emittedContract: null,
1192
- 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'],
1193
1313
  boundProfileIds: ['case.packet.bounds'],
1194
1314
  hookIds: ['case.packet.verify'],
1195
1315
  serialisationProfileId: null,
@@ -1208,7 +1328,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1208
1328
  discriminator: null,
1209
1329
  }],
1210
1330
  emittedContract: null,
1211
- 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'],
1212
1332
  boundProfileIds: ['case.packet.bounds'],
1213
1333
  hookIds: ['case.packet.structure', 'case.packet.verify'],
1214
1334
  serialisationProfileId: null,
@@ -1222,10 +1342,10 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1222
1342
  operation: 'build-packet',
1223
1343
  acceptedContracts: [],
1224
1344
  emittedContract: { schema: CASE_RESPONSE_PACKET_SCHEMA, version: CASE_RESPONSE_PACKET_VERSION, discriminator: null },
1225
- shapeIds: ['case.response-packet.v8'],
1345
+ shapeIds: ['case.response-packet.v9'],
1226
1346
  boundProfileIds: ['case.packet.bounds'],
1227
1347
  hookIds: ['case.packet.build', 'case.portable.serialise'],
1228
- serialisationProfileId: 'case.packet.json.v8',
1348
+ serialisationProfileId: 'case.packet.json.v9',
1229
1349
  privacyProfileId: 'case.privacy.portable-output',
1230
1350
  retentionEffect: 'operator_controlled_output',
1231
1351
  ...sharedEdge,
@@ -1241,7 +1361,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1241
1361
  discriminator: null,
1242
1362
  }],
1243
1363
  emittedContract: null,
1244
- 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'],
1245
1365
  boundProfileIds: ['case.packet.bounds'],
1246
1366
  hookIds: ['case.review-inputs.validate'],
1247
1367
  serialisationProfileId: null,
@@ -1259,7 +1379,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1259
1379
  version: CASE_RESPONSE_REVIEW_INPUTS_VERSION,
1260
1380
  discriminator: null,
1261
1381
  },
1262
- shapeIds: ['case.response-review-inputs.v2'],
1382
+ shapeIds: ['case.response-review-inputs.v3'],
1263
1383
  boundProfileIds: ['case.packet.bounds'],
1264
1384
  hookIds: ['case.review-inputs.build'],
1265
1385
  serialisationProfileId: null,
@@ -1321,7 +1441,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1321
1441
  discriminator: null,
1322
1442
  }],
1323
1443
  emittedContract: null,
1324
- 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'],
1325
1445
  boundProfileIds: ['case.workspace.bounds'],
1326
1446
  hookIds: ['case.workspace.verify'],
1327
1447
  serialisationProfileId: null,
@@ -1335,10 +1455,10 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1335
1455
  operation: 'build-workspace',
1336
1456
  acceptedContracts: [],
1337
1457
  emittedContract: { schema: WORKSPACE_ARCHIVE_SCHEMA, version: WORKSPACE_ARCHIVE_VERSION, discriminator: null },
1338
- shapeIds: ['case.workspace-archive.v7'],
1458
+ shapeIds: ['case.workspace-archive.v8'],
1339
1459
  boundProfileIds: ['case.workspace.bounds'],
1340
1460
  hookIds: ['case.workspace.build', 'case.portable.serialise'],
1341
- serialisationProfileId: 'case.workspace.json.v7',
1461
+ serialisationProfileId: 'case.workspace.json.v8',
1342
1462
  privacyProfileId: 'case.privacy.portable-output',
1343
1463
  retentionEffect: 'operator_controlled_output',
1344
1464
  ...sharedEdge,
@@ -1391,7 +1511,7 @@ const CASE_LIFECYCLE_CONSUMERS = Object.freeze([
1391
1511
  version: ENCRYPTED_WORKSPACE_ARCHIVE_VERSION,
1392
1512
  discriminator: null,
1393
1513
  },
1394
- 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'],
1395
1515
  boundProfileIds: ['case.workspace.bounds', 'case.encrypted-workspace.bounds'],
1396
1516
  hookIds: ['case.encrypted-workspace.build', 'case.portable.serialise'],
1397
1517
  serialisationProfileId: 'case.encrypted-workspace.json.v1',