@spacefast/common 0.0.23 → 0.0.26

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 (224) hide show
  1. package/brand-assets/LICENSE-Haskoy.txt +93 -0
  2. package/brand-assets/haskoy-latin-variable.woff2 +0 -0
  3. package/brand-assets/spacefast-favicon.svg +4 -4
  4. package/brand-assets/spacefast-sf-full-bleed.svg +3 -3
  5. package/brand-assets/spacefast-wordmark.svg +2 -4
  6. package/dist/agents/connect-targets.js +1 -1
  7. package/dist/agents/private-key-oauth.d.ts +0 -1
  8. package/dist/agents/private-key-oauth.js +46 -63
  9. package/dist/brand-assets-build.js +4 -6
  10. package/dist/brand-assets.d.ts +5 -15
  11. package/dist/brand-assets.js +15 -14
  12. package/dist/config/domains.d.ts +47 -7
  13. package/dist/config/domains.js +66 -10
  14. package/dist/config/index.d.ts +0 -1
  15. package/dist/config/index.js +0 -1
  16. package/dist/contracts/abuse.d.ts +2 -0
  17. package/dist/contracts/abuse.js +12 -0
  18. package/dist/contracts/access.d.ts +124 -12
  19. package/dist/contracts/access.js +73 -9
  20. package/dist/contracts/activity.d.ts +1 -1
  21. package/dist/contracts/activity.js +5 -12
  22. package/dist/contracts/api-keys.d.ts +21 -21
  23. package/dist/contracts/api-keys.js +2 -2
  24. package/dist/contracts/beta.js +1 -1
  25. package/dist/contracts/billing.d.ts +3 -35
  26. package/dist/contracts/billing.js +33 -52
  27. package/dist/contracts/builds.d.ts +30 -18
  28. package/dist/contracts/builds.js +28 -9
  29. package/dist/contracts/channels.js +1 -1
  30. package/dist/contracts/cli.d.ts +10 -0
  31. package/dist/contracts/cli.js +10 -0
  32. package/dist/contracts/collab-public.d.ts +63 -0
  33. package/dist/contracts/collab-public.js +46 -0
  34. package/dist/contracts/comments.d.ts +282 -53
  35. package/dist/contracts/comments.js +173 -52
  36. package/dist/contracts/common.d.ts +3 -3
  37. package/dist/contracts/common.js +5 -5
  38. package/dist/contracts/crons.d.ts +35 -0
  39. package/dist/contracts/crons.js +42 -0
  40. package/dist/contracts/device-auth.d.ts +6 -6
  41. package/dist/contracts/device-auth.js +2 -2
  42. package/dist/contracts/docs.js +2 -2
  43. package/dist/contracts/domains.d.ts +38 -27
  44. package/dist/contracts/domains.js +29 -2
  45. package/dist/contracts/enums.d.ts +34 -30
  46. package/dist/contracts/enums.js +62 -48
  47. package/dist/contracts/error-code-meta.d.ts +50 -125
  48. package/dist/contracts/error-code-meta.js +29 -41
  49. package/dist/contracts/error-codes.d.ts +1 -1
  50. package/dist/contracts/error-codes.js +14 -33
  51. package/dist/contracts/execution.d.ts +47 -66
  52. package/dist/contracts/execution.js +53 -49
  53. package/dist/contracts/feature-lifecycle-core.d.ts +0 -6
  54. package/dist/contracts/feature-lifecycle-core.js +2 -31
  55. package/dist/contracts/feature-lifecycle.d.ts +12 -52
  56. package/dist/contracts/feature-lifecycle.js +16 -59
  57. package/dist/contracts/features.d.ts +48 -60
  58. package/dist/contracts/features.js +59 -51
  59. package/dist/contracts/functions.d.ts +266 -72
  60. package/dist/contracts/functions.js +260 -37
  61. package/dist/contracts/git.d.ts +28 -34
  62. package/dist/contracts/git.js +10 -11
  63. package/dist/contracts/grants.d.ts +9 -5
  64. package/dist/contracts/grants.js +18 -9
  65. package/dist/contracts/ids.js +2 -2
  66. package/dist/contracts/internal.d.ts +8 -6
  67. package/dist/contracts/internal.js +12 -12
  68. package/dist/contracts/mcp.d.ts +11 -0
  69. package/dist/contracts/mcp.js +5 -0
  70. package/dist/contracts/me.js +1 -1
  71. package/dist/contracts/oauth-resources.d.ts +4 -3
  72. package/dist/contracts/oauth-resources.js +12 -3
  73. package/dist/contracts/operations.d.ts +90 -5
  74. package/dist/contracts/operations.js +77 -3
  75. package/dist/contracts/pages.d.ts +12 -7
  76. package/dist/contracts/pages.js +24 -1
  77. package/dist/contracts/plan-policy.d.ts +0 -2
  78. package/dist/contracts/plan-policy.js +2 -3
  79. package/dist/contracts/platform.d.ts +61 -148
  80. package/dist/contracts/platform.js +70 -126
  81. package/dist/contracts/publish-archive.d.ts +508 -0
  82. package/dist/contracts/publish-archive.js +32 -0
  83. package/dist/contracts/push-new.d.ts +4 -4
  84. package/dist/contracts/quotas.js +2 -2
  85. package/dist/contracts/repository-connections.d.ts +43 -30
  86. package/dist/contracts/repository-connections.js +11 -3
  87. package/dist/contracts/resources.d.ts +12 -24
  88. package/dist/contracts/resources.js +36 -16
  89. package/dist/contracts/runtime-api.d.ts +433 -192
  90. package/dist/contracts/runtime-api.js +421 -356
  91. package/dist/contracts/runtime-app.d.ts +127 -120
  92. package/dist/contracts/runtime-app.js +19 -10
  93. package/dist/contracts/runtime-db.d.ts +5 -5
  94. package/dist/contracts/runtime-db.js +2 -2
  95. package/dist/contracts/runtime-purge.d.ts +8 -0
  96. package/dist/contracts/runtime-purge.js +7 -0
  97. package/dist/contracts/runtime-services.d.ts +219 -0
  98. package/dist/contracts/runtime-services.js +437 -0
  99. package/dist/contracts/runtime-storage.d.ts +46 -32
  100. package/dist/contracts/runtime-storage.js +31 -8
  101. package/dist/contracts/sf-config-v1.d.ts +48 -10
  102. package/dist/contracts/space-config.d.ts +69 -18
  103. package/dist/contracts/space-config.js +226 -27
  104. package/dist/contracts/spaces.d.ts +236 -450
  105. package/dist/contracts/spaces.js +131 -151
  106. package/dist/contracts/superadmin-activity.d.ts +57 -4
  107. package/dist/contracts/superadmin-activity.js +48 -2
  108. package/dist/contracts/superadmin-search.d.ts +126 -0
  109. package/dist/contracts/superadmin-search.js +61 -0
  110. package/dist/contracts/superadmin-spaces.d.ts +361 -92
  111. package/dist/contracts/superadmin-spaces.js +97 -24
  112. package/dist/contracts/superadmin-teams.d.ts +28 -10
  113. package/dist/contracts/superadmin-teams.js +5 -8
  114. package/dist/contracts/superadmin-tenants.d.ts +0 -6
  115. package/dist/contracts/superadmin-tenants.js +1 -7
  116. package/dist/contracts/superadmin.d.ts +135 -54
  117. package/dist/contracts/superadmin.js +46 -23
  118. package/dist/contracts/tags.d.ts +12 -12
  119. package/dist/contracts/tags.js +3 -3
  120. package/dist/contracts/teams.d.ts +49 -14
  121. package/dist/contracts/teams.js +40 -22
  122. package/dist/contracts/transfers.d.ts +0 -49
  123. package/dist/contracts/transfers.js +4 -8
  124. package/dist/contracts/usage.d.ts +61 -0
  125. package/dist/contracts/usage.js +64 -0
  126. package/dist/contracts/variables.d.ts +2 -7
  127. package/dist/contracts/variables.js +9 -8
  128. package/dist/contracts/webhooks.d.ts +2 -2
  129. package/dist/contracts/zero.d.ts +102 -73
  130. package/dist/contracts/zero.js +94 -32
  131. package/dist/dashboard-paths/index.d.ts +1 -1
  132. package/dist/dashboard-paths/index.js +1 -0
  133. package/dist/docs/agent-prose.d.ts +2 -2
  134. package/dist/docs/agent-prose.js +63 -70
  135. package/dist/docs/agent-setup.js +45 -15
  136. package/dist/docs/catalog.d.ts +24 -24
  137. package/dist/docs/catalog.js +35 -24
  138. package/dist/docs/error-docs.js +194 -270
  139. package/dist/docs/skills.d.ts +12 -12
  140. package/dist/docs/skills.js +4 -4
  141. package/dist/test-helpers/fetch-stub.d.ts +16 -0
  142. package/dist/test-helpers/fetch-stub.js +25 -0
  143. package/dist/utils/build-settings.d.ts +5 -1
  144. package/dist/utils/build-settings.js +91 -13
  145. package/dist/utils/canonical-json.d.ts +10 -0
  146. package/dist/utils/canonical-json.js +22 -0
  147. package/dist/utils/cast-transport.d.ts +28 -0
  148. package/dist/utils/cast-transport.js +52 -0
  149. package/dist/utils/claim-token.d.ts +0 -8
  150. package/dist/utils/claim-token.js +3 -15
  151. package/dist/utils/concurrency.js +1 -0
  152. package/dist/utils/credential-policy.d.ts +1 -1
  153. package/dist/utils/credential-policy.js +4 -3
  154. package/dist/utils/dns-instructions.js +9 -9
  155. package/dist/utils/env-file.d.ts +17 -0
  156. package/dist/utils/env-file.js +96 -0
  157. package/dist/utils/error-code.d.ts +2 -0
  158. package/dist/utils/error-code.js +8 -0
  159. package/dist/utils/generate-space-name.d.ts +8 -10
  160. package/dist/utils/generate-space-name.js +206 -21
  161. package/dist/utils/grant-decision.fixtures.json +2938 -0
  162. package/dist/utils/grants.d.ts +2 -0
  163. package/dist/utils/grants.js +26 -1
  164. package/dist/utils/gravatar.d.ts +9 -0
  165. package/dist/utils/gravatar.js +31 -0
  166. package/dist/utils/idempotency.d.ts +6 -0
  167. package/dist/utils/idempotency.js +28 -0
  168. package/dist/utils/local-space-state.d.ts +9 -16
  169. package/dist/utils/local-space-state.js +20 -50
  170. package/dist/utils/one-shot-replay.d.ts +4 -1
  171. package/dist/utils/page-colors.d.ts +14 -12
  172. package/dist/utils/page-colors.js +15 -13
  173. package/dist/utils/page-fonts.d.ts +2 -2
  174. package/dist/utils/page-fonts.js +15 -4
  175. package/dist/utils/pages.d.ts +21 -3
  176. package/dist/utils/pages.js +42 -13
  177. package/dist/utils/publish-form-data.d.ts +12 -0
  178. package/dist/utils/publish-form-data.js +10 -0
  179. package/dist/utils/publish-policy.d.ts +27 -0
  180. package/dist/utils/publish-policy.fixtures.json +403 -0
  181. package/dist/utils/publish-policy.js +45 -20
  182. package/dist/utils/push-new.d.ts +7 -0
  183. package/dist/utils/push-new.js +7 -0
  184. package/dist/utils/query-keys.d.ts +4 -5
  185. package/dist/utils/query-keys.js +2 -3
  186. package/dist/utils/runtime-paths.d.ts +5 -0
  187. package/dist/utils/runtime-paths.js +5 -0
  188. package/dist/utils/runtime-upload-batch.d.ts +0 -5
  189. package/dist/utils/runtime-upload-batch.js +1 -27
  190. package/dist/utils/runtime-upload.d.ts +6 -11
  191. package/dist/utils/runtime-upload.js +10 -13
  192. package/dist/utils/secure-local-file.js +5 -16
  193. package/dist/utils/space-config.d.ts +1 -34
  194. package/dist/utils/space-config.js +8 -326
  195. package/dist/utils/static-runtime-policy.d.ts +9 -3
  196. package/dist/utils/static-runtime-policy.fixtures.json +38 -41
  197. package/dist/utils/static-runtime-policy.js +22 -56
  198. package/dist/utils/storage-policy.d.ts +1 -1
  199. package/dist/utils/storage-policy.js +3 -1
  200. package/dist/utils/structured-error.d.ts +14 -0
  201. package/dist/utils/structured-error.js +22 -0
  202. package/dist/utils/upload-session.d.ts +4 -1
  203. package/dist/utils/upload-session.js +33 -5
  204. package/dist/utils/version-path.js +13 -4
  205. package/dist/vocabulary.d.ts +13 -11
  206. package/dist/vocabulary.js +42 -28
  207. package/package.json +7 -17
  208. package/dist/config/postgres-budget.d.ts +0 -129
  209. package/dist/config/postgres-budget.js +0 -140
  210. package/dist/config/postgres-budget.json +0 -51
  211. package/dist/contracts/archives.d.ts +0 -331
  212. package/dist/contracts/archives.js +0 -120
  213. package/dist/contracts/deployments.d.ts +0 -574
  214. package/dist/contracts/deployments.js +0 -97
  215. package/dist/contracts/sites.d.ts +0 -416
  216. package/dist/contracts/sites.js +0 -168
  217. package/dist/contracts/superadmin-queues.d.ts +0 -414
  218. package/dist/contracts/superadmin-queues.js +0 -202
  219. package/dist/contracts/superadmin-runtime.d.ts +0 -27
  220. package/dist/contracts/superadmin-runtime.js +0 -38
  221. package/dist/index.d.ts +0 -1
  222. package/dist/index.js +0 -1
  223. package/dist/utils/api.d.ts +0 -4
  224. package/dist/utils/api.js +0 -13
@@ -1,11 +1,4 @@
1
1
  export const FEATURE_STAGES = ["internal", "private_beta", "ga"];
2
- export const FEATURE_ASSIGNMENT_SCOPES = ["user", "team", "global"];
3
- export const FEATURE_EXECUTION_ACTOR_POLICIES = [
4
- "request_actor",
5
- "persisted_request_actor",
6
- "resource_team",
7
- "global_policy",
8
- ];
9
2
  export const FEATURE_OWNER_IDS = [
10
3
  "team:access",
11
4
  "team:build-platform",
@@ -21,10 +14,8 @@ export const FEATURE_OWNER_IDS = [
21
14
  export function freezeFeatureRegistryEntry(definition) {
22
15
  return Object.freeze({
23
16
  ...definition,
24
- assignmentScopes: Object.freeze([...definition.assignmentScopes]),
25
17
  docs: definition.docs === null ? null : Object.freeze({ ...definition.docs }),
26
18
  requires: Object.freeze([...definition.requires]),
27
- allowedActorPolicies: Object.freeze([...definition.allowedActorPolicies]),
28
19
  downRamp: Object.freeze({ ...definition.downRamp }),
29
20
  });
30
21
  }
@@ -104,21 +95,8 @@ export function validateFeatureLifecycleRegistry(registry) {
104
95
  if (hasRequiredMetadata(definition.downRamp.code) &&
105
96
  !/^[a-z][a-z0-9]*(?:_[a-z][a-z0-9]*)*$/.test(definition.downRamp.code))
106
97
  errors.push(`${definition.key}: downRamp.code must use canonical snake_case`);
107
- if (definition.assignmentScopes.length === 0 || !definition.assignmentScopes.includes("global"))
108
- errors.push(`${definition.key}: assignmentScopes must include global`);
109
- if (definition.allowedActorPolicies.length === 0)
110
- errors.push(`${definition.key}: allowedActorPolicies must not be empty`);
111
- for (const [field, values] of [
112
- ["assignmentScopes", definition.assignmentScopes],
113
- ["allowedActorPolicies", definition.allowedActorPolicies],
114
- ["requires", definition.requires],
115
- ]) {
116
- for (const duplicate of duplicateValues(values))
117
- errors.push(`${definition.key}: ${field} contains duplicate ${duplicate}`);
118
- }
119
- if (definition.allowedActorPolicies.includes("global_policy") &&
120
- (definition.assignmentScopes.length !== 1 || definition.assignmentScopes[0] !== "global"))
121
- errors.push(`${definition.key}: global policy requires exactly global assignment scope`);
98
+ for (const duplicate of duplicateValues(definition.requires))
99
+ errors.push(`${definition.key}: requires contains duplicate ${duplicate}`);
122
100
  if (definition.stage !== "ga" && definition.surface && definition.defaultEnabled)
123
101
  errors.push(`${definition.key}: non-GA features default off`);
124
102
  if (definition.stage === "ga" && definition.surface && !definition.defaultEnabled)
@@ -173,19 +151,12 @@ export function validateFeatureLifecycleRegistry(registry) {
173
151
  definition.removeAfter !== null &&
174
152
  definition.gaAt > definition.removeAfter)
175
153
  errors.push(`${definition.key}: gaAt must not follow removeAfter`);
176
- if (definition.assignmentScopes.includes("user") &&
177
- !definition.allowedActorPolicies.some((policy) => policy === "request_actor" || policy === "persisted_request_actor"))
178
- errors.push(`${definition.key}: user scope requires an actor-aware policy`);
179
154
  for (const dependency of definition.requires) {
180
155
  const dependencyDefinition = byKey.get(dependency);
181
156
  if (!dependencyDefinition) {
182
157
  errors.push(`${definition.key}: unknown dependency ${dependency}`);
183
158
  continue;
184
159
  }
185
- if (definition.allowedActorPolicies.some((policy) => !dependencyDefinition.allowedActorPolicies.includes(policy)))
186
- errors.push(`${definition.key}: actor policies must be allowed by dependency ${dependency}`);
187
- if (definition.assignmentScopes.some((scope) => !dependencyDefinition.assignmentScopes.includes(scope)))
188
- errors.push(`${definition.key}: assignment scopes must be supported by dependency ${dependency}`);
189
160
  if (FEATURE_STAGES.indexOf(dependencyDefinition.stage) <
190
161
  FEATURE_STAGES.indexOf(definition.stage))
191
162
  errors.push(`${definition.key}: dependency ${dependency} must be at least as mature as its dependent`);
@@ -1,13 +1,13 @@
1
1
  import type { FeatureRegistryEntry } from "./feature-lifecycle-core.js";
2
2
  import type { PlanCode } from "./features.js";
3
- export { FEATURE_ASSIGNMENT_SCOPES, FEATURE_EXECUTION_ACTOR_POLICIES, FEATURE_OWNER_IDS, FEATURE_STAGES, freezeFeatureRegistryEntry, validateFeatureLifecycleRegistry, } from "./feature-lifecycle-core.js";
4
- export type { FeatureAssignmentScope, FeatureExecutionActorPolicy, FeatureOwnerId, FeatureRegistryEntry, FeatureStage, } from "./feature-lifecycle-core.js";
3
+ export { FEATURE_OWNER_IDS, FEATURE_STAGES, freezeFeatureRegistryEntry, validateFeatureLifecycleRegistry, } from "./feature-lifecycle-core.js";
4
+ export type { FeatureOwnerId, FeatureRegistryEntry, FeatureStage, } from "./feature-lifecycle-core.js";
5
5
  type RuntimeFeaturePolicy = {
6
6
  readonly enabledInDevelopment?: boolean;
7
7
  readonly enabledForA8c: boolean;
8
8
  readonly planDefaults: Readonly<Partial<Record<PlanCode, boolean>>>;
9
9
  };
10
- type RuntimeFeatureDefinitionShape<K extends string> = {
10
+ type RuntimeFeatureDefinitionFields<K extends string> = {
11
11
  readonly key: K;
12
12
  readonly name: string;
13
13
  readonly description: string;
@@ -25,7 +25,6 @@ declare const featureEntries: readonly [{
25
25
  readonly enabledForA8c: true;
26
26
  readonly planDefaults: {};
27
27
  };
28
- readonly assignmentScopes: readonly ["team", "global"];
29
28
  readonly docs: null;
30
29
  readonly owner: "team:commerce";
31
30
  readonly requires: readonly [];
@@ -33,7 +32,6 @@ declare const featureEntries: readonly [{
33
32
  readonly reviewAfter: "2026-08-11";
34
33
  readonly removeAfter: null;
35
34
  readonly gaAt: null;
36
- readonly allowedActorPolicies: readonly ["request_actor"];
37
35
  readonly downRamp: {
38
36
  readonly code: "paid_acquisition_stop";
39
37
  readonly summary: "Deny new acquisition; allow cancel, portal, provider reconciliation and purchase recovery.";
@@ -50,7 +48,6 @@ declare const featureEntries: readonly [{
50
48
  readonly enabledForA8c: true;
51
49
  readonly planDefaults: {};
52
50
  };
53
- readonly assignmentScopes: readonly ["global"];
54
51
  readonly docs: {
55
52
  readonly channel: "public";
56
53
  readonly slug: "/docs/publishing/anonymous";
@@ -62,7 +59,6 @@ declare const featureEntries: readonly [{
62
59
  readonly reviewAfter: "2026-07-26";
63
60
  readonly removeAfter: "2026-08-11";
64
61
  readonly gaAt: "2026-07-12";
65
- readonly allowedActorPolicies: readonly ["request_actor", "global_policy"];
66
62
  readonly downRamp: {
67
63
  readonly code: "anonymous_publish_stop";
68
64
  readonly summary: "Deny new anonymous content/version/upload authorization or commit/finalize/promote/push side effects; already-issued bounded staging ingress stays quarantined, while static serving and service cleanup remain.";
@@ -95,7 +91,6 @@ declare const featureEntries: readonly [{
95
91
  readonly surface: true;
96
92
  readonly defaultEnabled: false;
97
93
  readonly runtime: null;
98
- readonly assignmentScopes: readonly ["user", "team", "global"];
99
94
  readonly docs: {
100
95
  readonly channel: "handbook";
101
96
  readonly slug: "/features/domains/catalog";
@@ -107,7 +102,6 @@ declare const featureEntries: readonly [{
107
102
  readonly reviewAfter: "2026-08-11";
108
103
  readonly removeAfter: "2026-10-10";
109
104
  readonly gaAt: null;
110
- readonly allowedActorPolicies: readonly ["request_actor"];
111
105
  readonly downRamp: {
112
106
  readonly code: "domain_catalog_hide";
113
107
  readonly summary: "Hide authenticated catalog; public suggestions, availability and WHOIS remain.";
@@ -125,7 +119,6 @@ declare const featureEntries: readonly [{
125
119
  readonly enabledForA8c: true;
126
120
  readonly planDefaults: {};
127
121
  };
128
- readonly assignmentScopes: readonly ["user", "team", "global"];
129
122
  readonly docs: {
130
123
  readonly channel: "handbook";
131
124
  readonly slug: "/features/domains/registration";
@@ -137,7 +130,6 @@ declare const featureEntries: readonly [{
137
130
  readonly reviewAfter: "2026-08-11";
138
131
  readonly removeAfter: "2026-10-10";
139
132
  readonly gaAt: null;
140
- readonly allowedActorPolicies: readonly ["request_actor", "persisted_request_actor"];
141
133
  readonly downRamp: {
142
134
  readonly code: "domain_registration_stop";
143
135
  readonly summary: "Deny new customer mutations and unstarted provider submits; generic existing-domain read plus service-only reconciliation/compensation for externally committed work continue.";
@@ -155,7 +147,6 @@ declare const featureEntries: readonly [{
155
147
  readonly enabledForA8c: true;
156
148
  readonly planDefaults: {};
157
149
  };
158
- readonly assignmentScopes: readonly ["user", "team", "global"];
159
150
  readonly docs: {
160
151
  readonly channel: "handbook";
161
152
  readonly slug: "/features/domains/dns-management";
@@ -167,7 +158,6 @@ declare const featureEntries: readonly [{
167
158
  readonly reviewAfter: "2026-08-11";
168
159
  readonly removeAfter: "2026-10-10";
169
160
  readonly gaAt: null;
170
- readonly allowedActorPolicies: readonly ["request_actor", "persisted_request_actor"];
171
161
  readonly downRamp: {
172
162
  readonly code: "dns_management_stop";
173
163
  readonly summary: "Deny customer mutation and unstarted provider apply; generic authoritative read plus service-only rollback/reconciliation for externally committed work continue.";
@@ -184,7 +174,6 @@ declare const featureEntries: readonly [{
184
174
  readonly enabledForA8c: true;
185
175
  readonly planDefaults: {};
186
176
  };
187
- readonly assignmentScopes: readonly ["team", "global"];
188
177
  readonly docs: {
189
178
  readonly channel: "handbook";
190
179
  readonly slug: "/features/domains/wpcom-dns";
@@ -196,7 +185,6 @@ declare const featureEntries: readonly [{
196
185
  readonly reviewAfter: "2026-08-11";
197
186
  readonly removeAfter: "2026-10-10";
198
187
  readonly gaAt: null;
199
- readonly allowedActorPolicies: readonly ["request_actor"];
200
188
  readonly downRamp: {
201
189
  readonly code: "wpcom_dns_stop";
202
190
  readonly summary: "Deny new automation; service/operator detach and reconciliation continue.";
@@ -213,7 +201,6 @@ declare const featureEntries: readonly [{
213
201
  readonly enabledForA8c: true;
214
202
  readonly planDefaults: {};
215
203
  };
216
- readonly assignmentScopes: readonly ["user", "team", "global"];
217
204
  readonly docs: {
218
205
  readonly channel: "handbook";
219
206
  readonly slug: "/features/domains/domain-connect";
@@ -225,7 +212,6 @@ declare const featureEntries: readonly [{
225
212
  readonly reviewAfter: "2026-08-11";
226
213
  readonly removeAfter: "2026-10-10";
227
214
  readonly gaAt: null;
228
- readonly allowedActorPolicies: readonly ["request_actor", "persisted_request_actor"];
229
215
  readonly downRamp: {
230
216
  readonly code: "domain_connect_stop";
231
217
  readonly summary: "Deny new setup and every uncommitted callback; after an authenticated external commit, narrowly typed service-only reconciliation or compensation continues idempotently.";
@@ -244,7 +230,6 @@ declare const featureEntries: readonly [{
244
230
  readonly internal: true;
245
231
  };
246
232
  };
247
- readonly assignmentScopes: readonly ["team", "global"];
248
233
  readonly docs: {
249
234
  readonly channel: "public";
250
235
  readonly slug: "/docs/spaces/proxy-routes";
@@ -256,7 +241,6 @@ declare const featureEntries: readonly [{
256
241
  readonly reviewAfter: "2026-08-11";
257
242
  readonly removeAfter: "2026-10-10";
258
243
  readonly gaAt: null;
259
- readonly allowedActorPolicies: readonly ["resource_team"];
260
244
  readonly downRamp: {
261
245
  readonly code: "proxy_binding_stop";
262
246
  readonly summary: "Deny new binds; discoverable authenticated read/detach plus service reconciliation continue.";
@@ -265,7 +249,7 @@ declare const featureEntries: readonly [{
265
249
  readonly cohort: "launch";
266
250
  readonly key: "collab.notices";
267
251
  readonly name: "Realtime notices";
268
- readonly description: "Reserved kill-switch for future realtime preview notices.";
252
+ readonly description: "Live: the Space notice room. Turns on the dashboard's realtime comment feed and the overlay's notice chips. Not an authorization — who may watch a Space's feed is decided by its Grants.";
269
253
  readonly stage: "internal";
270
254
  readonly surface: false;
271
255
  readonly defaultEnabled: false;
@@ -273,7 +257,6 @@ declare const featureEntries: readonly [{
273
257
  readonly enabledForA8c: true;
274
258
  readonly planDefaults: {};
275
259
  };
276
- readonly assignmentScopes: readonly ["team", "global"];
277
260
  readonly docs: null;
278
261
  readonly owner: "team:collaboration";
279
262
  readonly requires: readonly [];
@@ -281,7 +264,6 @@ declare const featureEntries: readonly [{
281
264
  readonly reviewAfter: "2026-08-11";
282
265
  readonly removeAfter: null;
283
266
  readonly gaAt: null;
284
- readonly allowedActorPolicies: readonly ["resource_team"];
285
267
  readonly downRamp: {
286
268
  readonly code: "notices_stop";
287
269
  readonly summary: "Stop mint/publish; service/operator revoke and cleanup continue.";
@@ -309,7 +291,6 @@ declare const featureEntries: readonly [{
309
291
  readonly enabledForA8c: true;
310
292
  readonly planDefaults: {};
311
293
  };
312
- readonly assignmentScopes: readonly ["team", "global"];
313
294
  readonly docs: {
314
295
  readonly channel: "public";
315
296
  readonly slug: "/docs/apps";
@@ -321,21 +302,10 @@ declare const featureEntries: readonly [{
321
302
  readonly reviewAfter: null;
322
303
  readonly removeAfter: "2026-11-01";
323
304
  readonly gaAt: "2026-08-05";
324
- readonly allowedActorPolicies: readonly ["request_actor", "resource_team"];
325
305
  readonly downRamp: {
326
306
  readonly code: "dedicated_runtime_stop";
327
307
  readonly summary: "Deny customer mutation and new placement/materialization immediately; serve-time revocation of already-materialized output lands with the deferred runtime-proof slice; operator recovery/export/delete remain; downloaded bytes cannot be recalled.";
328
308
  };
329
- }, {
330
- readonly key: "shelf";
331
- readonly name: "Shelf";
332
- readonly description: "Exposes the per-user artifact shelf: dashboard curation and public /shelf/{handle} pages.";
333
- readonly defaultEnabled: false;
334
- readonly runtime: {
335
- readonly enabledInDevelopment: true;
336
- readonly enabledForA8c: true;
337
- readonly planDefaults: {};
338
- };
339
309
  }, {
340
310
  readonly cohort: "launch";
341
311
  readonly key: "build.content_pipeline";
@@ -345,7 +315,6 @@ declare const featureEntries: readonly [{
345
315
  readonly surface: true;
346
316
  readonly defaultEnabled: false;
347
317
  readonly runtime: null;
348
- readonly assignmentScopes: readonly ["team", "global"];
349
318
  readonly docs: {
350
319
  readonly channel: "handbook";
351
320
  readonly slug: "/features/build/content-pipeline";
@@ -357,7 +326,6 @@ declare const featureEntries: readonly [{
357
326
  readonly reviewAfter: "2026-08-11";
358
327
  readonly removeAfter: "2026-10-10";
359
328
  readonly gaAt: null;
360
- readonly allowedActorPolicies: readonly ["resource_team"];
361
329
  readonly downRamp: {
362
330
  readonly code: "content_pipeline_stop";
363
331
  readonly summary: "Deny next build/finalize; completed immutable output remains.";
@@ -375,7 +343,6 @@ declare const featureEntries: readonly [{
375
343
  readonly enabledForA8c: true;
376
344
  readonly planDefaults: {};
377
345
  };
378
- readonly assignmentScopes: readonly ["team", "global"];
379
346
  readonly docs: {
380
347
  readonly channel: "public";
381
348
  readonly slug: "/docs/tags";
@@ -387,7 +354,6 @@ declare const featureEntries: readonly [{
387
354
  readonly reviewAfter: "2026-08-11";
388
355
  readonly removeAfter: "2026-10-10";
389
356
  readonly gaAt: null;
390
- readonly allowedActorPolicies: readonly ["request_actor", "resource_team"];
391
357
  readonly downRamp: {
392
358
  readonly code: "tags_stop";
393
359
  readonly summary: "Deny every customer Tag API and dynamic module delivery; internal operator export/cleanup and platform-generated inert marker bytes remain.";
@@ -404,19 +370,17 @@ declare const featureEntries: readonly [{
404
370
  readonly enabledForA8c: true;
405
371
  readonly planDefaults: {};
406
372
  };
407
- readonly assignmentScopes: readonly ["team", "global"];
408
373
  readonly docs: {
409
374
  readonly channel: "public";
410
375
  readonly slug: "/docs/apps/zero";
411
376
  readonly feedbackUrl: null;
412
377
  };
413
378
  readonly owner: "team:zero";
414
- readonly requires: readonly ["sites.dedicated_runtime"];
379
+ readonly requires: readonly [];
415
380
  readonly lifecycleAdoptedAt: "2026-07-12";
416
381
  readonly reviewAfter: null;
417
382
  readonly removeAfter: "2026-11-01";
418
383
  readonly gaAt: "2026-08-05";
419
- readonly allowedActorPolicies: readonly ["resource_team"];
420
384
  readonly downRamp: {
421
385
  readonly code: "zero_stop";
422
386
  readonly summary: "Stop activation/invocation; operator export/delete/migration recovery remain.";
@@ -426,14 +390,13 @@ declare const featureEntries: readonly [{
426
390
  readonly key: "functions";
427
391
  readonly name: "Spacefast Functions";
428
392
  readonly description: string;
429
- readonly stage: "private_beta";
393
+ readonly stage: "ga";
430
394
  readonly surface: true;
431
- readonly defaultEnabled: false;
395
+ readonly defaultEnabled: true;
432
396
  readonly runtime: {
433
397
  readonly enabledForA8c: true;
434
398
  readonly planDefaults: {};
435
399
  };
436
- readonly assignmentScopes: readonly ["team", "global"];
437
400
  readonly docs: {
438
401
  readonly channel: "public";
439
402
  readonly slug: "/docs/apps/functions";
@@ -442,10 +405,9 @@ declare const featureEntries: readonly [{
442
405
  readonly owner: "team:zero";
443
406
  readonly requires: readonly [];
444
407
  readonly lifecycleAdoptedAt: "2026-07-27";
445
- readonly reviewAfter: "2026-09-02";
408
+ readonly reviewAfter: null;
446
409
  readonly removeAfter: "2026-11-01";
447
- readonly gaAt: null;
448
- readonly allowedActorPolicies: readonly ["resource_team"];
410
+ readonly gaAt: "2026-08-12";
449
411
  readonly downRamp: {
450
412
  readonly code: "functions_stop";
451
413
  readonly summary: string;
@@ -463,7 +425,6 @@ declare const featureEntries: readonly [{
463
425
  readonly enabledForA8c: true;
464
426
  readonly planDefaults: {};
465
427
  };
466
- readonly assignmentScopes: readonly ["user", "team", "global"];
467
428
  readonly docs: {
468
429
  readonly channel: "public";
469
430
  readonly slug: "/docs/spaces/rename";
@@ -475,7 +436,6 @@ declare const featureEntries: readonly [{
475
436
  readonly reviewAfter: "2026-08-11";
476
437
  readonly removeAfter: "2026-10-10";
477
438
  readonly gaAt: "2026-07-27";
478
- readonly allowedActorPolicies: readonly ["request_actor"];
479
439
  readonly downRamp: {
480
440
  readonly code: "slug_rename_stop";
481
441
  readonly summary: "Deny new slug renames while already-committed hostname redirects and runtime convergence continue.";
@@ -490,11 +450,11 @@ type RuntimeFeatureEntry = Extract<FeatureEntry, {
490
450
  }>;
491
451
  export type LifecycleFeatureKey = LifecycleFeatureEntry["key"];
492
452
  export type RuntimeFeatureKey = RuntimeFeatureEntry["key"];
493
- export type RuntimeFeatureDefinition<K extends RuntimeFeatureKey = RuntimeFeatureKey> = RuntimeFeatureDefinitionShape<K>;
453
+ export type RuntimeFeatureDefinition<K extends RuntimeFeatureKey = RuntimeFeatureKey> = RuntimeFeatureDefinitionFields<K>;
494
454
  export declare const FEATURE_LIFECYCLE_REGISTRY: readonly FeatureRegistryEntry<LifecycleFeatureKey>[];
495
455
  type RuntimeDefinitionRecord<K extends string> = {
496
- readonly [Key in K]: RuntimeFeatureDefinitionShape<Key>;
456
+ readonly [Key in K]: RuntimeFeatureDefinitionFields<Key>;
497
457
  };
498
458
  export declare const FEATURE_RUNTIME_KEYS: readonly RuntimeFeatureKey[];
499
- export declare const FEATURE_RUNTIME_DEFINITIONS: Readonly<RuntimeDefinitionRecord<"zero" | "plans.paid.available" | "anonymous.publishing" | "beta.enrollment_gate" | "domains.search" | "domains.registration" | "domains.dns_management" | "domains.wpcom_dns" | "domains.domain_connect" | "domains.proxy_bindings" | "collab.notices" | "collab.drawing" | "sites.dedicated_runtime" | "shelf" | "tags" | "functions" | "spaces.slug_rename">>;
459
+ export declare const FEATURE_RUNTIME_DEFINITIONS: Readonly<RuntimeDefinitionRecord<"zero" | "tags" | "functions" | "plans.paid.available" | "anonymous.publishing" | "beta.enrollment_gate" | "domains.search" | "domains.registration" | "domains.dns_management" | "domains.wpcom_dns" | "domains.domain_connect" | "domains.proxy_bindings" | "collab.notices" | "collab.drawing" | "sites.dedicated_runtime" | "spaces.slug_rename">>;
500
460
  export declare const FEATURE_LIFECYCLE_BY_KEY: ReadonlyMap<LifecycleFeatureKey, FeatureRegistryEntry<LifecycleFeatureKey>>;