@slicedearth/whoisleuth-cli 2.3.0 → 2.4.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 (264) hide show
  1. package/NOTICE +6 -0
  2. package/README.md +19 -15
  3. package/bin/whoisleuth.mjs +8 -1
  4. package/cli/archive-content-digest.mjs +14 -0
  5. package/cli/archive-inspect.mjs +20 -53
  6. package/cli/arguments.mjs +68 -6
  7. package/cli/artifact-validation/case-response.mjs +47 -41
  8. package/cli/artifact-validation/investigation-capsule.mjs +52 -31
  9. package/cli/artifact-validation/lookup-evidence.mjs +12 -6
  10. package/cli/artifact-validation/signed-review.mjs +83 -61
  11. package/cli/artifact-validation/structure-primitives.mjs +1 -105
  12. package/cli/artifact-verify.mjs +90 -24
  13. package/cli/assurance-command-runner.mjs +39 -4
  14. package/cli/bagit-folder.mjs +57 -0
  15. package/cli/bagit-review.mjs +23 -0
  16. package/cli/bounded-json.mjs +1 -1
  17. package/cli/bulk-command-runner.mjs +2 -0
  18. package/cli/bulk-output.mjs +29 -3
  19. package/cli/case-command.mjs +195 -0
  20. package/cli/case-pack.mjs +39 -31
  21. package/cli/command-argument-grammar.mjs +4 -0
  22. package/cli/command-reference.mjs +145 -75
  23. package/cli/completion.mjs +298 -79
  24. package/cli/config-profile.mjs +7 -5
  25. package/cli/ct-event-intake.mjs +12 -12
  26. package/cli/discover.mjs +4 -3
  27. package/cli/discovery-observation-snapshot.mjs +44 -16
  28. package/cli/discovery-scan-command-runner.mjs +2 -0
  29. package/cli/discovery-scan.mjs +7 -4
  30. package/cli/discovery-workflow.mjs +1 -1
  31. package/cli/domain-control-monitor.mjs +50 -20
  32. package/cli/domain-control-observations.mjs +149 -102
  33. package/cli/errors.mjs +33 -1
  34. package/cli/evidence-command-runner.mjs +16 -5
  35. package/cli/evidence-signing.mjs +2 -2
  36. package/cli/external-observation-mapping.mjs +7 -8
  37. package/cli/formatters/terminal-lookup.mjs +18 -46
  38. package/cli/formatters/terminal-shared.mjs +5 -3
  39. package/cli/formatters/terminal-technology.mjs +114 -0
  40. package/cli/inline-command-families.mjs +1 -0
  41. package/cli/interactive-launcher.mjs +2 -160
  42. package/cli/interchange-report.mjs +4 -8
  43. package/cli/investigation-artifacts.mjs +176 -0
  44. package/cli/investigation-checkpoint.mjs +10 -0
  45. package/cli/investigation-folder.mjs +114 -0
  46. package/cli/investigation-manifest.mjs +1 -112
  47. package/cli/investigation-package-review.mjs +103 -0
  48. package/cli/investigation-plan.mjs +32 -19
  49. package/cli/investigation-run.mjs +188 -33
  50. package/cli/local-document-checkpoint.mjs +170 -0
  51. package/cli/lookup-browser.mjs +5 -12
  52. package/cli/lookup-command-runner.mjs +17 -6
  53. package/cli/lookup-diff.mjs +37 -3
  54. package/cli/lookup-plan.mjs +11 -5
  55. package/cli/lookup-reconcile.mjs +10 -8
  56. package/cli/mail-review.mjs +66 -14
  57. package/cli/manual.mjs +1 -0
  58. package/cli/network-command-runner.mjs +2 -0
  59. package/cli/output-file.mjs +31 -5
  60. package/cli/registry-doctor.mjs +3 -1
  61. package/cli/registry-support.mjs +1 -1
  62. package/cli/retained-artifact-diff.mjs +2 -2
  63. package/cli/review-command-runner.mjs +45 -0
  64. package/cli/runner.mjs +55 -6
  65. package/cli/sharing-review.mjs +21 -34
  66. package/cli/signer-trust.mjs +104 -0
  67. package/cli/source-reliability.mjs +74 -83
  68. package/cli/terminal-input.mjs +168 -0
  69. package/cli/workflow-command-runner.mjs +68 -13
  70. package/docs/cli-reference.md +76 -30
  71. package/docs/cli.md +289 -25
  72. package/lib/abort.mjs +4 -1
  73. package/lib/availability.mjs +161 -112
  74. package/lib/bounded-file.mjs +3 -1
  75. package/lib/bounded-html-document.mjs +125 -0
  76. package/lib/bounded-json.mjs +43 -3
  77. package/lib/browser-library-profile.mjs +42 -51
  78. package/lib/browser-library-worker.mjs +112 -0
  79. package/lib/client-behavior-profile.mjs +3 -3
  80. package/lib/ct-search.mjs +11 -4
  81. package/lib/dns-delegation-health.mjs +24 -14
  82. package/lib/dns-inheritance-review.mjs +217 -0
  83. package/lib/dns-intelligence.mjs +36 -23
  84. package/lib/dns-mx.mjs +1 -1
  85. package/lib/dnssec-evidence-validation.mjs +11 -3
  86. package/lib/domain-change-packet.mjs +7 -2
  87. package/lib/domain-change-review.mjs +14 -8
  88. package/lib/domain-control-flight-recorder.mjs +219 -118
  89. package/lib/domain-control-manifest.mjs +117 -57
  90. package/lib/domain-posture-analysis.mjs +20 -7
  91. package/lib/domain-posture-parsers.mjs +88 -6
  92. package/lib/domain-posture.mjs +113 -26
  93. package/lib/evidence-export-privacy.mjs +561 -0
  94. package/lib/evidence-export.mjs +11 -592
  95. package/lib/evidence-report.mjs +3 -1
  96. package/lib/favicon.mjs +117 -41
  97. package/lib/generated/cisa-kev-catalog.mjs +12 -4
  98. package/lib/generated/registrar-standing-catalogue.mjs +7 -7
  99. package/lib/generated/retire-browser-catalog.mjs +2335 -940
  100. package/lib/hostname.mjs +2 -38
  101. package/lib/html-signals.mjs +82 -85
  102. package/lib/http-evidence-bounds.mjs +2 -1
  103. package/lib/http-intelligence.mjs +39 -26
  104. package/lib/lookup-cache.mjs +34 -11
  105. package/lib/lookup-child-profile-contract.mjs +24 -15
  106. package/lib/lookup-diagnostics.mjs +24 -1
  107. package/lib/lookup-progress.mjs +30 -13
  108. package/lib/lookup-response-contract.mjs +1048 -0
  109. package/lib/lookup-response.mjs +7 -10
  110. package/lib/lookup-source-progress.mjs +17 -14
  111. package/lib/lookup.mjs +48 -27
  112. package/lib/observed-network-context.mjs +43 -27
  113. package/lib/outbound-request-bounds.mjs +4 -1
  114. package/lib/page-fingerprints.mjs +69 -133
  115. package/lib/page-role-profile.mjs +12 -8
  116. package/lib/perceptual-hash.mjs +43 -14
  117. package/lib/rdap-bootstrap.mjs +72 -22
  118. package/lib/rdap-client.mjs +15 -7
  119. package/lib/rdap-normalization.mjs +33 -18
  120. package/lib/rdap-search-workbench.mjs +1 -1
  121. package/lib/rdap-transport.mjs +47 -20
  122. package/lib/rdap-types.mjs +2 -1
  123. package/lib/rdap.mjs +18 -3
  124. package/lib/registrable-domain.mjs +21 -1
  125. package/lib/registrar-standing-contract.mjs +1 -0
  126. package/lib/registry-capabilities.mjs +5 -1
  127. package/lib/registry-capability-catalogue.mjs +2 -1
  128. package/lib/registry-dates.mjs +2 -190
  129. package/lib/registry-insights.mjs +56 -18
  130. package/lib/response-policy.mjs +86 -48
  131. package/lib/risk-calibration-summary.mjs +17 -3
  132. package/lib/rpki-evidence.mjs +8 -5
  133. package/lib/safe-fetch.mjs +54 -47
  134. package/lib/security-txt.mjs +10 -7
  135. package/lib/service-binding-dns.mjs +8 -0
  136. package/lib/smtp-transport-review.mjs +27 -15
  137. package/lib/sslbl-certificates.generated.mjs +136 -135
  138. package/lib/static-html-analysis.mjs +117 -146
  139. package/lib/structured-data-identity.mjs +1 -0
  140. package/lib/technology-markup.mjs +100 -0
  141. package/lib/threat-intelligence-manifests.mjs +11 -139
  142. package/lib/threat-intelligence-runtime.mjs +24 -52
  143. package/lib/threat-intelligence-targets.mjs +6 -34
  144. package/lib/threat-intelligence-types.mjs +39 -0
  145. package/lib/typosquat-generator.mjs +19 -15
  146. package/lib/urlhaus-intelligence.mjs +8 -3
  147. package/lib/urlscan-intelligence.mjs +1 -1
  148. package/lib/website-security-posture.mjs +30 -6
  149. package/lib/website-technology.mjs +111 -71
  150. package/lib/whois-authority.mjs +14 -2
  151. package/lib/whois-chain.mjs +9 -2
  152. package/lib/whois-common-formats.mjs +5 -5
  153. package/lib/whois-contracts.mjs +2 -1
  154. package/lib/whois-dialects.mjs +2 -2
  155. package/lib/whois-parser-support.mjs +8 -1
  156. package/lib/whois-transport.mjs +23 -7
  157. package/package.json +2 -1
  158. package/packages/cases/case-attachment-model.mjs +83 -0
  159. package/packages/cases/case-evidence-model.mjs +156 -62
  160. package/packages/cases/case-export-input.mjs +53 -0
  161. package/packages/cases/case-migration-model.mjs +59 -25
  162. package/packages/cases/case-model.mjs +1 -0
  163. package/packages/cases/case-recheck-model.mjs +91 -0
  164. package/packages/cases/case-record-core.mjs +3 -2
  165. package/packages/cases/case-record-operations.mjs +89 -27
  166. package/packages/cases/case-record-projection.mjs +23 -20
  167. package/packages/cases/case-report.mjs +63 -52
  168. package/packages/cases/case-response-actions.mjs +654 -0
  169. package/packages/cases/case-response-model.mjs +41 -1129
  170. package/packages/cases/case-response-outcomes.mjs +317 -0
  171. package/packages/cases/case-response-packet-render.mjs +153 -0
  172. package/packages/cases/case-response-packet-types.mjs +1 -0
  173. package/packages/cases/case-response-packet-vocabulary.mjs +48 -0
  174. package/packages/cases/case-response-packet.mjs +38 -587
  175. package/packages/cases/case-response-records.mjs +94 -0
  176. package/packages/cases/case-response-review-inputs.mjs +371 -0
  177. package/packages/cases/case-response-values.mjs +85 -0
  178. package/packages/cases/case-review-package.mjs +45 -0
  179. package/packages/cases/case-selection.mjs +46 -0
  180. package/packages/cases/case-storage-model.mjs +25 -0
  181. package/packages/cases/response-route-freshness.mjs +16 -0
  182. package/packages/comparison/capture-context.mjs +61 -0
  183. package/packages/comparison/comparison-ledger-bulk.mjs +4 -1
  184. package/packages/comparison/page-similarity.mjs +2 -1
  185. package/packages/comparison/relationship-evidence.mjs +85 -8
  186. package/packages/comparison/relationship-provenance.mjs +93 -0
  187. package/packages/contracts/analyst-interchange.mjs +216 -0
  188. package/packages/contracts/analyst-review-state-contract.mjs +11 -0
  189. package/packages/contracts/analyst-review-state.mjs +5 -4
  190. package/packages/contracts/case-portability.mjs +279 -116
  191. package/packages/contracts/case-views-contract.mjs +12 -0
  192. package/packages/contracts/case-views.mjs +26 -0
  193. package/packages/contracts/cli-command-semantics.mjs +1 -0
  194. package/packages/contracts/cli-lookup.mjs +0 -1
  195. package/packages/contracts/domain-control-flight-recorder.mjs +80 -42
  196. package/packages/contracts/domain-control-manifest.mjs +127 -73
  197. package/packages/contracts/domain-control-monitor.mjs +48 -45
  198. package/packages/contracts/domain-control-review.mjs +179 -121
  199. package/packages/contracts/domain-name.mjs +21 -0
  200. package/packages/contracts/external-observation-interchange.mjs +2 -1
  201. package/packages/contracts/extracted-domain-lifecycle.mjs +11 -32
  202. package/packages/contracts/http-url.mjs +2 -0
  203. package/packages/contracts/investigation-package-limits.mjs +24 -0
  204. package/packages/contracts/investigation-portability.mjs +56 -27
  205. package/packages/contracts/investigation-run.mjs +16 -0
  206. package/packages/contracts/ip-address.mjs +34 -0
  207. package/packages/contracts/lookup-evidence.mjs +35 -0
  208. package/packages/contracts/offline-comparison.mjs +1 -2
  209. package/packages/contracts/page-fingerprints.mjs +15 -0
  210. package/packages/contracts/risk-calibration.mjs +0 -1
  211. package/packages/contracts/schema-compatibility.mjs +1 -1
  212. package/packages/contracts/schema-lifecycle.mjs +83 -153
  213. package/packages/contracts/selected-file-limits.mjs +6 -0
  214. package/packages/contracts/vulnerability-identifiers.mjs +5 -0
  215. package/packages/contracts/web-capture.mjs +10 -0
  216. package/packages/contracts/workspace-portability.mjs +160 -225
  217. package/packages/evidence/artifact-integrity.mjs +8 -2
  218. package/packages/evidence/artifact-structure.mjs +105 -0
  219. package/packages/evidence/decision-fact.mjs +4 -1
  220. package/packages/evidence/domain-control-runtime.mjs +155 -27
  221. package/packages/evidence/domain-posture-context.mjs +79 -0
  222. package/packages/evidence/image-regions.mjs +56 -0
  223. package/packages/evidence/latest-observations.mjs +28 -0
  224. package/packages/evidence/lookup-target.mjs +104 -0
  225. package/packages/evidence/observation.mjs +16 -1
  226. package/packages/evidence/passphrase-encryption.mjs +44 -0
  227. package/packages/evidence/record-identity.mjs +72 -0
  228. package/packages/evidence/registry-dates.mjs +190 -0
  229. package/packages/evidence/retained-file.mjs +69 -0
  230. package/packages/evidence/review-age.mjs +14 -0
  231. package/packages/interchange/bagit.mjs +342 -0
  232. package/packages/interchange/bounded-zip-extraction.mjs +278 -0
  233. package/packages/interchange/crc32.mjs +17 -0
  234. package/packages/interchange/external-findings-import.mjs +89 -49
  235. package/packages/interchange/web-capture-import.mjs +382 -0
  236. package/packages/investigation/bulk-mail-exposure.mjs +2 -1
  237. package/packages/investigation/investigation-bagit.mjs +14 -0
  238. package/packages/investigation/investigation-capsule.mjs +33 -5
  239. package/packages/investigation/investigation-manifest.mjs +200 -0
  240. package/packages/investigation/investigation-package-crypto.mjs +98 -0
  241. package/packages/investigation/investigation-package.mjs +200 -0
  242. package/packages/investigation/lookup-asset-graph-inputs.mjs +38 -0
  243. package/packages/investigation/lookup-asset-graph.mjs +161 -141
  244. package/packages/investigation/lookup-claim-readiness.mjs +18 -0
  245. package/packages/investigation/lookup-investigation-brief.mjs +3 -3
  246. package/packages/investigation/lookup-task-guidance.mjs +58 -0
  247. package/packages/monitoring/analyst-review-state.mjs +38 -90
  248. package/packages/workspace/brand-profile-model.mjs +158 -20
  249. package/packages/workspace/bulk-columns.mjs +17 -0
  250. package/packages/workspace/bulk-review-model.mjs +11 -5
  251. package/packages/workspace/bulk-session-model.mjs +95 -20
  252. package/packages/workspace/bulk-sort.mjs +1 -0
  253. package/packages/workspace/case-views.mjs +102 -0
  254. package/packages/workspace/hostile-input.mjs +29 -8
  255. package/packages/workspace/investigation-template-model.mjs +19 -4
  256. package/packages/workspace/page-baseline.mjs +18 -15
  257. package/packages/workspace/relationship-observation-model.mjs +41 -26
  258. package/packages/workspace/watchlist-history.mjs +2 -2
  259. package/packages/workspace/watchlist-store.mjs +8 -2
  260. package/packages/workspace/website-snapshot-model.mjs +70 -30
  261. package/packages/workspace/workspace-archive-crypto.mjs +41 -61
  262. package/packages/workspace/workspace-archive.mjs +85 -21
  263. package/third-party-notices.txt +29 -2
  264. package/packages/investigation/bulk-review-export.mjs +0 -63
@@ -5,13 +5,16 @@ import { MAX_DOMAIN_CONTROL_MONITOR_CONCURRENCY, MAX_DOMAIN_CONTROL_MONITOR_DOMA
5
5
  export { MAX_DOMAIN_CONTROL_MONITOR_CONCURRENCY, MAX_DOMAIN_CONTROL_MONITOR_DOMAINS, MIN_DOMAIN_CONTROL_MONITOR_CONCURRENCY, MIN_DOMAIN_CONTROL_MONITOR_DOMAINS, } from "./domain-control-monitor.mjs";
6
6
  export const DOMAIN_CONTROL_MANIFEST_INPUT_SCHEMA = 'whoisleuth.domain-control-manifest-input';
7
7
  export const DOMAIN_CONTROL_MANIFEST_SCHEMA = 'whoisleuth.domain-control-manifest';
8
- export const DOMAIN_CONTROL_MANIFEST_INPUT_VERSION = 1;
9
- export const DOMAIN_CONTROL_MANIFEST_VERSION = 2;
8
+ export const PUBLIC_DOMAIN_CONTROL_MANIFEST_INPUT_VERSION = 1;
9
+ export const PUBLIC_DOMAIN_CONTROL_MANIFEST_VERSION = 2;
10
+ export const DOMAIN_CONTROL_MANIFEST_INPUT_VERSION = 2;
11
+ export const DOMAIN_CONTROL_MANIFEST_VERSION = 3;
10
12
  export const MAX_DOMAIN_CONTROL_MANIFEST_BYTES = 16 * 1024 * 1024;
11
13
  export const MIN_DOMAIN_CONTROL_MANIFEST_ENTRIES = 1;
12
14
  export const MAX_DOMAIN_CONTROL_MANIFEST_ENTRIES = 100;
13
15
  export const MIN_DOMAIN_CONTROL_RECORDS = 0;
14
16
  export const MAX_CANONICAL_DOMAIN_CONTROL_RECORDS = 32;
17
+ export const MAX_CURRENT_DOMAIN_CONTROL_RECORDS = 64;
15
18
  export const DOMAIN_CONTROL_RECORD_INPUT_BOUND_FACTOR = 4;
16
19
  export const MAX_DOMAIN_CONTROL_INPUT_RECORDS = MAX_CANONICAL_DOMAIN_CONTROL_RECORDS
17
20
  * DOMAIN_CONTROL_RECORD_INPUT_BOUND_FACTOR;
@@ -48,7 +51,7 @@ export const MAX_DOMAIN_CONTROL_BROWSER_PROFILE_ENTRIES = 20;
48
51
  export const MAX_DOMAIN_CONTROL_CLI_REVIEW_JSON_DEPTH = 50;
49
52
  export const MAX_DOMAIN_CONTROL_CLI_REVIEW_JSON_KEYS = 5_050_000;
50
53
  export const MAX_DOMAIN_CONTROL_CLI_REVIEW_JSON_VALUES = 10_100_000;
51
- export const MAX_DOMAIN_CONTROL_PORTABLE_BYTES = 15 * 1024 * 1024;
54
+ export const MAX_DOMAIN_CONTROL_PORTABLE_BYTES = MAX_DOMAIN_CONTROL_MANIFEST_BYTES;
52
55
  export const DOMAIN_CONTROL_MANIFEST_INPUT_KEYS = Object.freeze([
53
56
  'schema',
54
57
  'version',
@@ -64,7 +67,7 @@ export const DOMAIN_CONTROL_MANIFEST_ROOT_KEYS = Object.freeze([
64
67
  'limitations',
65
68
  'integrity',
66
69
  ]);
67
- export const DOMAIN_CONTROL_MANIFEST_ENTRY_KEYS = Object.freeze([
70
+ export const PUBLIC_DOMAIN_CONTROL_MANIFEST_ENTRY_KEYS = Object.freeze([
68
71
  'domain',
69
72
  'nameservers',
70
73
  'ds',
@@ -76,6 +79,9 @@ export const DOMAIN_CONTROL_MANIFEST_ENTRY_KEYS = Object.freeze([
76
79
  'renewalReviewAt',
77
80
  'note',
78
81
  ]);
82
+ export const DOMAIN_CONTROL_MANIFEST_ENTRY_KEYS = Object.freeze([
83
+ ...PUBLIC_DOMAIN_CONTROL_MANIFEST_ENTRY_KEYS, 'recordModes',
84
+ ]);
79
85
  export const DOMAIN_CONTROL_MANIFEST_INTEGRITY_KEYS = Object.freeze([
80
86
  'algorithm',
81
87
  'canonicalization',
@@ -87,6 +93,12 @@ export const DOMAIN_CONTROL_RECORD_LIST_FIELDS = Object.freeze([
87
93
  'mx',
88
94
  'caa',
89
95
  ]);
96
+ export const DOMAIN_CONTROL_RECORD_MODE_OPTIONS = Object.freeze([
97
+ { value: 'unconfigured', label: 'Not configured' },
98
+ { value: 'expect_none', label: 'Expect no records' },
99
+ { value: 'expect_records', label: 'Expect records' },
100
+ { value: 'observe_only', label: 'Observe only' },
101
+ ]);
90
102
  export const DOMAIN_CONTROL_MX_RECORD_KEYS = Object.freeze([
91
103
  'exchange',
92
104
  'host',
@@ -108,26 +120,37 @@ export const DOMAIN_CONTROL_DS_RECORD_KEYS = Object.freeze([
108
120
  'digest_type',
109
121
  'digest',
110
122
  ]);
111
- export const DOMAIN_CONTROL_MANIFEST_LIMITATIONS = Object.freeze([
123
+ export const PUBLIC_DOMAIN_CONTROL_MANIFEST_LIMITATIONS = Object.freeze([
112
124
  'This analyst-authored manifest records intended domain-control state. It does not collect evidence or change registrar, DNS, mail, or certificate configuration.',
113
125
  'Empty desired fields are unconfigured rather than claims that a record should be absent.',
114
126
  ]);
127
+ export const DOMAIN_CONTROL_MANIFEST_LIMITATIONS = Object.freeze([
128
+ PUBLIC_DOMAIN_CONTROL_MANIFEST_LIMITATIONS[0],
129
+ 'Record expectations distinguish unconfigured, expected absence, specified records and observation-only fields. Missing or incomplete observations cannot establish absence.',
130
+ ]);
115
131
  export const SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS = Object.freeze([
132
+ PUBLIC_DOMAIN_CONTROL_MANIFEST_VERSION,
116
133
  DOMAIN_CONTROL_MANIFEST_VERSION,
117
134
  ]);
135
+ export const SUPPORTED_DOMAIN_CONTROL_MANIFEST_INPUT_VERSIONS = Object.freeze([
136
+ PUBLIC_DOMAIN_CONTROL_MANIFEST_INPUT_VERSION, DOMAIN_CONTROL_MANIFEST_INPUT_VERSION,
137
+ ]);
138
+ const INPUT_SHAPE_IDS = SUPPORTED_DOMAIN_CONTROL_MANIFEST_INPUT_VERSIONS.map((version) => `domain-control.input.v${version}`);
139
+ const CURRENT_MANIFEST_SHAPE_ID = `domain-control.manifest.v${DOMAIN_CONTROL_MANIFEST_VERSION}`;
140
+ const MANIFEST_SHAPE_IDS = SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS.map((version) => `domain-control.manifest.v${version}`);
118
141
  export const DOMAIN_CONTROL_MANIFEST_INPUT_COMPATIBILITY = defineSchemaCompatibility({
119
142
  id: 'export.domain-control-manifest-input',
120
143
  kind: 'export',
121
144
  schema: DOMAIN_CONTROL_MANIFEST_INPUT_SCHEMA,
122
145
  currentVersion: DOMAIN_CONTROL_MANIFEST_INPUT_VERSION,
123
- supportedVersions: [DOMAIN_CONTROL_MANIFEST_INPUT_VERSION],
146
+ supportedVersions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_INPUT_VERSIONS,
124
147
  acceptsUnversionedLegacy: false,
125
148
  futureVersionBehavior: 'reject',
126
- migration: 'exact_current_only',
149
+ migration: 'read_only',
127
150
  writeSemantics: 'read_only',
128
151
  byteBudget: MAX_DOMAIN_CONTROL_MANIFEST_BYTES,
129
152
  owner: 'packages/contracts/domain-control-manifest.mts',
130
- note: 'Exact-current bounded ordinary JSON desired-state input. Malformed list shapes, ambiguous structured aliases, unknown structured fields, and over-limit collections fail closed outside the supported envelope.',
153
+ note: 'Current input supports explicit record expectations. Public input version 1 remains readable with its original empty-field meaning and record normalisation.',
131
154
  });
132
155
  export const DOMAIN_CONTROL_MANIFEST_COMPATIBILITY = defineSchemaCompatibility({
133
156
  id: 'export.domain-control-manifest',
@@ -141,7 +164,7 @@ export const DOMAIN_CONTROL_MANIFEST_COMPATIBILITY = defineSchemaCompatibility({
141
164
  writeSemantics: 'non_destructive_merge',
142
165
  byteBudget: MAX_DOMAIN_CONTROL_MANIFEST_BYTES,
143
166
  owner: 'packages/contracts/domain-control-manifest.mts',
144
- note: 'The v1.47.4 current writer and v2 use version 2 with deterministic sorted-json-v2 integrity for bounded analyst-authored desired state; browser import is an explicit non-destructive field selection.',
167
+ note: 'Current version 3 retains explicit record expectations. Public version 2 remains verifiable with its exact canonical bytes and empty-field meaning; browser import is an explicit non-destructive field selection.',
145
168
  });
146
169
  export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
147
170
  id: 'domain-control-manifest',
@@ -152,38 +175,38 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
152
175
  DOMAIN_CONTROL_MANIFEST_COMPATIBILITY,
153
176
  ],
154
177
  contracts: [
155
- {
178
+ ...SUPPORTED_DOMAIN_CONTROL_MANIFEST_INPUT_VERSIONS.map((version) => ({
156
179
  compatibilityId: DOMAIN_CONTROL_MANIFEST_INPUT_COMPATIBILITY.id,
157
180
  schema: DOMAIN_CONTROL_MANIFEST_INPUT_SCHEMA,
158
- version: DOMAIN_CONTROL_MANIFEST_INPUT_VERSION,
181
+ version,
159
182
  role: 'input',
160
- lifecycle: 'current',
183
+ lifecycle: version === DOMAIN_CONTROL_MANIFEST_INPUT_VERSION ? 'current' : 'legacy',
161
184
  readable: true,
162
- emitted: true,
185
+ emitted: version === DOMAIN_CONTROL_MANIFEST_INPUT_VERSION,
163
186
  exactKeys: true,
164
187
  extensionPolicy: 'reject',
165
188
  futureVersionBehaviour: 'reject',
166
189
  migrationTarget: null,
167
190
  canonicalisation: null,
168
191
  byteBudget: MAX_DOMAIN_CONTROL_MANIFEST_BYTES,
169
- fixtureIds: ['domain-control-manifest-input-v1'],
170
- },
171
- {
192
+ fixtureIds: [`domain-control-manifest-input-v${version}`],
193
+ })),
194
+ ...SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS.map((version) => ({
172
195
  compatibilityId: DOMAIN_CONTROL_MANIFEST_COMPATIBILITY.id,
173
196
  schema: DOMAIN_CONTROL_MANIFEST_SCHEMA,
174
- version: DOMAIN_CONTROL_MANIFEST_VERSION,
197
+ version,
175
198
  role: 'document',
176
- lifecycle: 'current',
199
+ lifecycle: version === DOMAIN_CONTROL_MANIFEST_VERSION ? 'current' : 'legacy',
177
200
  readable: true,
178
- emitted: true,
201
+ emitted: version === DOMAIN_CONTROL_MANIFEST_VERSION,
179
202
  exactKeys: true,
180
203
  extensionPolicy: 'reject',
181
204
  futureVersionBehaviour: 'reject',
182
205
  migrationTarget: null,
183
206
  canonicalisation: 'sorted-json-v2',
184
207
  byteBudget: MAX_DOMAIN_CONTROL_MANIFEST_BYTES,
185
- fixtureIds: ['domain-control-manifest-v2'],
186
- },
208
+ fixtureIds: [`domain-control-manifest-v${version}`],
209
+ })),
187
210
  ],
188
211
  fixtures: [
189
212
  {
@@ -193,10 +216,10 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
193
216
  sha256: '2b8a10dec2d78ae0804a469d99b3dfbacbf380c8af0a01ec903106861cd73b09',
194
217
  contentDigestSha256: null,
195
218
  schema: DOMAIN_CONTROL_MANIFEST_INPUT_SCHEMA,
196
- version: DOMAIN_CONTROL_MANIFEST_INPUT_VERSION,
219
+ version: PUBLIC_DOMAIN_CONTROL_MANIFEST_INPUT_VERSION,
197
220
  role: 'input',
198
- expectation: 'normalises_to_current_output',
199
- expectedOutputFixtureId: 'domain-control-manifest-v2',
221
+ expectation: 'accepted_exact',
222
+ expectedOutputFixtureId: null,
200
223
  scope: 'repository',
201
224
  },
202
225
  {
@@ -206,21 +229,32 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
206
229
  sha256: '799211e5eba37e733c7f22aac92e073950ffb69c2da64cc11af7ade303deb17a',
207
230
  contentDigestSha256: 'sha256:6d2015c111fe05e44babfd42f9adefbfb3bee3caf9fad33c60b9ca640b0f0c8a',
208
231
  schema: DOMAIN_CONTROL_MANIFEST_SCHEMA,
209
- version: DOMAIN_CONTROL_MANIFEST_VERSION,
210
- role: 'current',
232
+ version: PUBLIC_DOMAIN_CONTROL_MANIFEST_VERSION,
233
+ role: 'historical',
211
234
  expectation: 'accepted_exact',
212
235
  expectedOutputFixtureId: null,
213
236
  scope: 'repository',
214
237
  },
238
+ {
239
+ id: 'domain-control-manifest-input-v2', path: 'test/fixtures/domain-control-manifest-input-v2.json',
240
+ bytes: 435, sha256: 'c4a23b9d04e704ee7e9e749211996f06f98fb0ae97f70eac7ecf44968ea67d3b', contentDigestSha256: null,
241
+ schema: DOMAIN_CONTROL_MANIFEST_INPUT_SCHEMA, version: DOMAIN_CONTROL_MANIFEST_INPUT_VERSION,
242
+ role: 'input', expectation: 'normalises_to_current_output', expectedOutputFixtureId: 'domain-control-manifest-v3', scope: 'repository',
243
+ },
244
+ {
245
+ id: 'domain-control-manifest-v3', path: 'test/fixtures/domain-control-manifest-v3.json',
246
+ bytes: 1180, sha256: '35a99dcdcaefdb280b3b64decde8c06fb47b46e7a47e480becf117b1c87b0c72', contentDigestSha256: 'sha256:873c645257b7391bc958781ef02f913d454002a9d66b9f5889bec3a181477214',
247
+ schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, version: DOMAIN_CONTROL_MANIFEST_VERSION,
248
+ role: 'current', expectation: 'accepted_exact', expectedOutputFixtureId: null, scope: 'repository',
249
+ },
215
250
  ],
216
251
  metadata: {
217
- metadataVersion: 2,
218
252
  enforcement: 'declarative_only',
219
253
  shapes: [
220
- {
221
- id: 'domain-control.input.v1',
254
+ ...SUPPORTED_DOMAIN_CONTROL_MANIFEST_INPUT_VERSIONS.map((version) => ({
255
+ id: `domain-control.input.v${version}`,
222
256
  schema: DOMAIN_CONTROL_MANIFEST_INPUT_SCHEMA,
223
- versions: [DOMAIN_CONTROL_MANIFEST_INPUT_VERSION],
257
+ versions: [version],
224
258
  objects: [
225
259
  {
226
260
  path: '$',
@@ -231,7 +265,7 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
231
265
  {
232
266
  path: '$.entries[]',
233
267
  requiredKeys: ['domain'],
234
- optionalKeys: DOMAIN_CONTROL_MANIFEST_ENTRY_KEYS.filter((key) => key !== 'domain'),
268
+ optionalKeys: (version === PUBLIC_DOMAIN_CONTROL_MANIFEST_INPUT_VERSION ? PUBLIC_DOMAIN_CONTROL_MANIFEST_ENTRY_KEYS : DOMAIN_CONTROL_MANIFEST_ENTRY_KEYS).filter((key) => key !== 'domain'),
235
269
  unknownKeys: 'reject',
236
270
  },
237
271
  {
@@ -252,6 +286,7 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
252
286
  optionalKeys: DOMAIN_CONTROL_DS_RECORD_KEYS,
253
287
  unknownKeys: 'reject',
254
288
  },
289
+ ...(version === DOMAIN_CONTROL_MANIFEST_INPUT_VERSION ? [{ path: '$.entries[].recordModes', requiredKeys: [], optionalKeys: DOMAIN_CONTROL_RECORD_LIST_FIELDS, unknownKeys: 'reject' }] : []),
255
290
  ],
256
291
  fixedArrays: [],
257
292
  normalisation: 'input_to_current',
@@ -259,11 +294,11 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
259
294
  schema: DOMAIN_CONTROL_MANIFEST_SCHEMA,
260
295
  version: DOMAIN_CONTROL_MANIFEST_VERSION,
261
296
  },
262
- },
263
- {
264
- id: 'domain-control.manifest.v1-v2',
297
+ })),
298
+ ...SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS.map((version) => ({
299
+ id: `domain-control.manifest.v${version}`,
265
300
  schema: DOMAIN_CONTROL_MANIFEST_SCHEMA,
266
- versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS,
301
+ versions: [version],
267
302
  objects: [
268
303
  {
269
304
  path: '$',
@@ -273,7 +308,7 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
273
308
  },
274
309
  {
275
310
  path: '$.entries[]',
276
- requiredKeys: DOMAIN_CONTROL_MANIFEST_ENTRY_KEYS,
311
+ requiredKeys: version === PUBLIC_DOMAIN_CONTROL_MANIFEST_VERSION ? PUBLIC_DOMAIN_CONTROL_MANIFEST_ENTRY_KEYS : DOMAIN_CONTROL_MANIFEST_ENTRY_KEYS,
277
312
  optionalKeys: [],
278
313
  unknownKeys: 'reject',
279
314
  },
@@ -283,16 +318,17 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
283
318
  optionalKeys: [],
284
319
  unknownKeys: 'reject',
285
320
  },
321
+ ...(version === DOMAIN_CONTROL_MANIFEST_VERSION ? [{ path: '$.entries[].recordModes', requiredKeys: DOMAIN_CONTROL_RECORD_LIST_FIELDS, optionalKeys: [], unknownKeys: 'reject' }] : []),
286
322
  ],
287
323
  fixedArrays: [
288
324
  {
289
325
  path: '$.limitations',
290
- values: DOMAIN_CONTROL_MANIFEST_LIMITATIONS,
326
+ values: version === PUBLIC_DOMAIN_CONTROL_MANIFEST_VERSION ? PUBLIC_DOMAIN_CONTROL_MANIFEST_LIMITATIONS : DOMAIN_CONTROL_MANIFEST_LIMITATIONS,
291
327
  },
292
328
  ],
293
329
  normalisation: 'preserve_signed_document',
294
330
  target: null,
295
- },
331
+ })),
296
332
  ],
297
333
  boundProfiles: [
298
334
  {
@@ -304,10 +340,7 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
304
340
  { id: 'input-ds', path: '$.entries[].ds', phase: 'pre_accumulation', unit: 'items', minimum: MIN_DOMAIN_CONTROL_RECORDS, maximum: MAX_DOMAIN_CONTROL_INPUT_RECORDS, handling: 'reject' },
305
341
  { id: 'input-mx', path: '$.entries[].mx', phase: 'pre_accumulation', unit: 'items', minimum: MIN_DOMAIN_CONTROL_RECORDS, maximum: MAX_DOMAIN_CONTROL_INPUT_RECORDS, handling: 'reject' },
306
342
  { id: 'input-caa', path: '$.entries[].caa', phase: 'pre_accumulation', unit: 'items', minimum: MIN_DOMAIN_CONTROL_RECORDS, maximum: MAX_DOMAIN_CONTROL_INPUT_RECORDS, handling: 'reject' },
307
- { id: 'canonical-nameservers', path: '$.entries[].nameservers', phase: 'normalised', unit: 'items', minimum: MIN_DOMAIN_CONTROL_RECORDS, maximum: MAX_CANONICAL_DOMAIN_CONTROL_RECORDS, handling: 'truncate' },
308
- { id: 'canonical-ds', path: '$.entries[].ds', phase: 'normalised', unit: 'items', minimum: MIN_DOMAIN_CONTROL_RECORDS, maximum: MAX_CANONICAL_DOMAIN_CONTROL_RECORDS, handling: 'truncate' },
309
- { id: 'canonical-mx', path: '$.entries[].mx', phase: 'normalised', unit: 'items', minimum: MIN_DOMAIN_CONTROL_RECORDS, maximum: MAX_CANONICAL_DOMAIN_CONTROL_RECORDS, handling: 'truncate' },
310
- { id: 'canonical-caa', path: '$.entries[].caa', phase: 'normalised', unit: 'items', minimum: MIN_DOMAIN_CONTROL_RECORDS, maximum: MAX_CANONICAL_DOMAIN_CONTROL_RECORDS, handling: 'truncate' },
343
+ ...DOMAIN_CONTROL_RECORD_LIST_FIELDS.map((field) => ({ id: `current-${field}`, path: `$.entries[].${field}`, phase: 'normalised', unit: 'items', minimum: MIN_DOMAIN_CONTROL_RECORDS, maximum: MAX_CURRENT_DOMAIN_CONTROL_RECORDS, handling: 'reject' })),
311
344
  { id: 'json-depth', path: '$', phase: 'pre_accumulation', unit: 'depth', minimum: 0, maximum: MAX_DOMAIN_CONTROL_JSON_DEPTH, handling: 'reject' },
312
345
  { id: 'json-values', path: '$', phase: 'pre_accumulation', unit: 'values', minimum: 1, maximum: MAX_DOMAIN_CONTROL_JSON_VALUES, handling: 'reject' },
313
346
  { id: 'raw-domain', path: '$.entries[].domain', phase: 'pre_accumulation', unit: 'characters', minimum: 1, maximum: MAX_DOMAIN_CONTROL_NAME_INPUT_LENGTH, handling: 'reject' },
@@ -358,6 +391,10 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
358
391
  { id: 'manifest-digest', path: '$.integrity.digestSha256', phase: 'normalised', unit: 'characters', minimum: DOMAIN_CONTROL_DIGEST_SHA256_LENGTH, maximum: DOMAIN_CONTROL_DIGEST_SHA256_LENGTH, handling: 'reject' },
359
392
  ],
360
393
  },
394
+ {
395
+ id: 'domain-control.public-records.v2',
396
+ bounds: DOMAIN_CONTROL_RECORD_LIST_FIELDS.map((field) => ({ id: `public-${field}`, path: `$.entries[].${field}`, phase: 'normalised', unit: 'items', minimum: MIN_DOMAIN_CONTROL_RECORDS, maximum: MAX_CANONICAL_DOMAIN_CONTROL_RECORDS, handling: 'truncate' })),
397
+ },
361
398
  {
362
399
  id: 'domain-control.browser-file.v1',
363
400
  bounds: [
@@ -674,16 +711,33 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
674
711
  },
675
712
  ],
676
713
  consumerEdges: [
714
+ {
715
+ id: 'domain-control.browser-build-input',
716
+ plane: 'browser',
717
+ operation: 'build-input',
718
+ acceptedContracts: [],
719
+ emittedContract: { schema: DOMAIN_CONTROL_MANIFEST_INPUT_SCHEMA, version: DOMAIN_CONTROL_MANIFEST_INPUT_VERSION },
720
+ shapeIds: [`domain-control.input.v${DOMAIN_CONTROL_MANIFEST_INPUT_VERSION}`],
721
+ boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.public-records.v2', 'domain-control.browser-profile.v1'],
722
+ hookIds: ['domain-control.browser.build-input'],
723
+ serialisationProfileId: null,
724
+ privacyProfileId: 'domain-control.manifest-sensitive.v1',
725
+ expiryPolicyId: 'domain-control.expiry.build-future.v1',
726
+ requestMode: 'none',
727
+ retentionEffect: 'none',
728
+ bindingState: 'declared_unenforced',
729
+ policyState: 'current',
730
+ },
677
731
  {
678
732
  id: 'domain-control.browser-export',
679
733
  plane: 'browser',
680
734
  operation: 'export',
681
735
  acceptedContracts: [
682
- { schema: DOMAIN_CONTROL_MANIFEST_INPUT_SCHEMA, versions: [DOMAIN_CONTROL_MANIFEST_INPUT_VERSION], mode: 'direct' },
736
+ { schema: DOMAIN_CONTROL_MANIFEST_INPUT_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_INPUT_VERSIONS, mode: 'direct' },
683
737
  ],
684
738
  emittedContract: { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, version: DOMAIN_CONTROL_MANIFEST_VERSION },
685
- shapeIds: ['domain-control.input.v1', 'domain-control.manifest.v1-v2'],
686
- boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.browser-profile.v1'],
739
+ shapeIds: [...INPUT_SHAPE_IDS, CURRENT_MANIFEST_SHAPE_ID],
740
+ boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.public-records.v2', 'domain-control.browser-profile.v1'],
687
741
  hookIds: [
688
742
  'domain-control.shared.build-unsigned',
689
743
  'domain-control.shared.measure-serialised-bytes',
@@ -708,9 +762,9 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
708
762
  { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS, mode: 'direct' },
709
763
  ],
710
764
  emittedContract: null,
711
- shapeIds: ['domain-control.manifest.v1-v2'],
765
+ shapeIds: MANIFEST_SHAPE_IDS,
712
766
  boundProfileIds: [
713
- 'domain-control.core-wire.v1',
767
+ 'domain-control.core-wire.v1', 'domain-control.public-records.v2',
714
768
  'domain-control.browser-file.v1',
715
769
  'domain-control.browser-profile.v1',
716
770
  ],
@@ -732,11 +786,11 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
732
786
  plane: 'node',
733
787
  operation: 'build',
734
788
  acceptedContracts: [
735
- { schema: DOMAIN_CONTROL_MANIFEST_INPUT_SCHEMA, versions: [DOMAIN_CONTROL_MANIFEST_INPUT_VERSION], mode: 'direct' },
789
+ { schema: DOMAIN_CONTROL_MANIFEST_INPUT_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_INPUT_VERSIONS, mode: 'direct' },
736
790
  ],
737
791
  emittedContract: { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, version: DOMAIN_CONTROL_MANIFEST_VERSION },
738
- shapeIds: ['domain-control.input.v1', 'domain-control.manifest.v1-v2'],
739
- boundProfileIds: ['domain-control.core-wire.v1'],
792
+ shapeIds: [...INPUT_SHAPE_IDS, CURRENT_MANIFEST_SHAPE_ID],
793
+ boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.public-records.v2'],
740
794
  hookIds: [
741
795
  'domain-control.shared.build-unsigned',
742
796
  'domain-control.shared.assert-byte-budget',
@@ -758,8 +812,8 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
758
812
  { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS, mode: 'direct' },
759
813
  ],
760
814
  emittedContract: null,
761
- shapeIds: ['domain-control.manifest.v1-v2'],
762
- boundProfileIds: ['domain-control.core-wire.v1'],
815
+ shapeIds: MANIFEST_SHAPE_IDS,
816
+ boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.public-records.v2'],
763
817
  hookIds: [
764
818
  'domain-control.shared.normalise-document',
765
819
  'domain-control.node.verify-integrity',
@@ -780,8 +834,8 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
780
834
  { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS, mode: 'embedded' },
781
835
  ],
782
836
  emittedContract: null,
783
- shapeIds: ['domain-control.manifest.v1-v2'],
784
- boundProfileIds: ['domain-control.core-wire.v1'],
837
+ shapeIds: MANIFEST_SHAPE_IDS,
838
+ boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.public-records.v2'],
785
839
  hookIds: ['domain-control.node.verify-integrity', 'domain-control.node.review'],
786
840
  serialisationProfileId: null,
787
841
  privacyProfileId: 'domain-control.review-sensitive.v1',
@@ -799,8 +853,8 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
799
853
  { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS, mode: 'embedded' },
800
854
  ],
801
855
  emittedContract: null,
802
- shapeIds: ['domain-control.manifest.v1-v2'],
803
- boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.cli-domain-control-file.v1'],
856
+ shapeIds: MANIFEST_SHAPE_IDS,
857
+ boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.public-records.v2', 'domain-control.cli-domain-control-file.v1'],
804
858
  hookIds: ['domain-control.node.verify-integrity', 'domain-control.node.review'],
805
859
  serialisationProfileId: null,
806
860
  privacyProfileId: 'domain-control.review-sensitive.v1',
@@ -818,8 +872,8 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
818
872
  { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS, mode: 'embedded' },
819
873
  ],
820
874
  emittedContract: null,
821
- shapeIds: ['domain-control.manifest.v1-v2'],
822
- boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.cli-domain-control-file.v1'],
875
+ shapeIds: MANIFEST_SHAPE_IDS,
876
+ boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.public-records.v2', 'domain-control.cli-domain-control-file.v1'],
823
877
  hookIds: [
824
878
  'domain-control.node.verify-integrity',
825
879
  'domain-control.node.review',
@@ -838,11 +892,11 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
838
892
  plane: 'cli',
839
893
  operation: 'build',
840
894
  acceptedContracts: [
841
- { schema: DOMAIN_CONTROL_MANIFEST_INPUT_SCHEMA, versions: [DOMAIN_CONTROL_MANIFEST_INPUT_VERSION], mode: 'direct' },
895
+ { schema: DOMAIN_CONTROL_MANIFEST_INPUT_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_INPUT_VERSIONS, mode: 'direct' },
842
896
  ],
843
897
  emittedContract: { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, version: DOMAIN_CONTROL_MANIFEST_VERSION },
844
- shapeIds: ['domain-control.input.v1', 'domain-control.manifest.v1-v2'],
845
- boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.cli-domain-control-file.v1'],
898
+ shapeIds: [...INPUT_SHAPE_IDS, CURRENT_MANIFEST_SHAPE_ID],
899
+ boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.public-records.v2', 'domain-control.cli-domain-control-file.v1'],
846
900
  hookIds: [
847
901
  'domain-control.shared.measure-serialised-bytes',
848
902
  'domain-control.shared.assert-byte-budget',
@@ -865,8 +919,8 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
865
919
  { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS, mode: 'direct' },
866
920
  ],
867
921
  emittedContract: null,
868
- shapeIds: ['domain-control.manifest.v1-v2'],
869
- boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.cli-portable-file.v1'],
922
+ shapeIds: MANIFEST_SHAPE_IDS,
923
+ boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.public-records.v2', 'domain-control.cli-portable-file.v1'],
870
924
  hookIds: [
871
925
  'domain-control.cli.offline-structure',
872
926
  'domain-control.cli.offline-verify',
@@ -888,8 +942,8 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
888
942
  { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS, mode: 'direct' },
889
943
  ],
890
944
  emittedContract: null,
891
- shapeIds: ['domain-control.manifest.v1-v2'],
892
- boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.cli-portable-file.v1'],
945
+ shapeIds: MANIFEST_SHAPE_IDS,
946
+ boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.public-records.v2', 'domain-control.cli-portable-file.v1'],
893
947
  hookIds: ['domain-control.cli.interchange-report', 'domain-control.cli.offline-verify'],
894
948
  serialisationProfileId: null,
895
949
  privacyProfileId: 'domain-control.metadata-only.v1',
@@ -907,8 +961,8 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
907
961
  { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS, mode: 'direct' },
908
962
  ],
909
963
  emittedContract: null,
910
- shapeIds: ['domain-control.manifest.v1-v2'],
911
- boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.cli-portable-file.v1'],
964
+ shapeIds: MANIFEST_SHAPE_IDS,
965
+ boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.public-records.v2', 'domain-control.cli-portable-file.v1'],
912
966
  hookIds: ['domain-control.cli.offline-verify', 'domain-control.cli.sign-package'],
913
967
  serialisationProfileId: null,
914
968
  privacyProfileId: 'domain-control.signed-wrapper.v1',
@@ -926,8 +980,8 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
926
980
  { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS, mode: 'embedded' },
927
981
  ],
928
982
  emittedContract: null,
929
- shapeIds: ['domain-control.manifest.v1-v2'],
930
- boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.cli-portable-file.v1'],
983
+ shapeIds: MANIFEST_SHAPE_IDS,
984
+ boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.public-records.v2', 'domain-control.cli-portable-file.v1'],
931
985
  hookIds: ['domain-control.cli.verify-signature', 'domain-control.cli.offline-verify'],
932
986
  serialisationProfileId: null,
933
987
  privacyProfileId: 'domain-control.metadata-only.v1',
@@ -945,8 +999,8 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
945
999
  { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS, mode: 'direct' },
946
1000
  ],
947
1001
  emittedContract: null,
948
- shapeIds: ['domain-control.manifest.v1-v2'],
949
- boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.cli-portable-file.v1'],
1002
+ shapeIds: MANIFEST_SHAPE_IDS,
1003
+ boundProfileIds: ['domain-control.core-wire.v1', 'domain-control.public-records.v2', 'domain-control.cli-portable-file.v1'],
950
1004
  hookIds: ['domain-control.cli.sharing-review', 'domain-control.cli.offline-verify'],
951
1005
  serialisationProfileId: null,
952
1006
  privacyProfileId: 'domain-control.metadata-only.v1',
@@ -964,9 +1018,9 @@ export const DOMAIN_CONTROL_SCHEMA_LIFECYCLE = defineSchemaLifecycleFamily({
964
1018
  { schema: DOMAIN_CONTROL_MANIFEST_SCHEMA, versions: SUPPORTED_DOMAIN_CONTROL_MANIFEST_VERSIONS, mode: 'direct' },
965
1019
  ],
966
1020
  emittedContract: null,
967
- shapeIds: ['domain-control.manifest.v1-v2'],
1021
+ shapeIds: MANIFEST_SHAPE_IDS,
968
1022
  boundProfileIds: [
969
- 'domain-control.core-wire.v1',
1023
+ 'domain-control.core-wire.v1', 'domain-control.public-records.v2',
970
1024
  'domain-control.cli-monitor-file.v1',
971
1025
  'domain-control.cli-monitor-action.v1',
972
1026
  ],