@spacefast/common 0.0.23 → 0.0.24

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 (176) hide show
  1. package/dist/config/domains.d.ts +1 -1
  2. package/dist/config/domains.js +1 -0
  3. package/dist/config/index.d.ts +0 -1
  4. package/dist/config/index.js +0 -1
  5. package/dist/contracts/abuse.d.ts +2 -0
  6. package/dist/contracts/abuse.js +12 -0
  7. package/dist/contracts/access.d.ts +121 -9
  8. package/dist/contracts/access.js +73 -9
  9. package/dist/contracts/activity.d.ts +1 -1
  10. package/dist/contracts/activity.js +0 -9
  11. package/dist/contracts/api-keys.d.ts +21 -21
  12. package/dist/contracts/beta.js +1 -1
  13. package/dist/contracts/billing.d.ts +1 -34
  14. package/dist/contracts/billing.js +4 -53
  15. package/dist/contracts/builds.d.ts +8 -8
  16. package/dist/contracts/builds.js +10 -3
  17. package/dist/contracts/cli.d.ts +10 -0
  18. package/dist/contracts/cli.js +10 -0
  19. package/dist/contracts/collab-public.d.ts +63 -0
  20. package/dist/contracts/collab-public.js +46 -0
  21. package/dist/contracts/comments.d.ts +283 -54
  22. package/dist/contracts/comments.js +173 -52
  23. package/dist/contracts/common.d.ts +3 -3
  24. package/dist/contracts/device-auth.d.ts +6 -6
  25. package/dist/contracts/device-auth.js +1 -1
  26. package/dist/contracts/docs.d.ts +5 -5
  27. package/dist/contracts/domains.d.ts +36 -36
  28. package/dist/contracts/enums.d.ts +33 -30
  29. package/dist/contracts/enums.js +52 -38
  30. package/dist/contracts/error-code-meta.d.ts +37 -126
  31. package/dist/contracts/error-code-meta.js +12 -41
  32. package/dist/contracts/error-codes.d.ts +1 -1
  33. package/dist/contracts/error-codes.js +10 -32
  34. package/dist/contracts/execution.d.ts +35 -57
  35. package/dist/contracts/execution.js +41 -40
  36. package/dist/contracts/feature-lifecycle-core.d.ts +0 -6
  37. package/dist/contracts/feature-lifecycle-core.js +2 -31
  38. package/dist/contracts/feature-lifecycle.d.ts +8 -38
  39. package/dist/contracts/feature-lifecycle.js +16 -48
  40. package/dist/contracts/features.d.ts +15 -13
  41. package/dist/contracts/features.js +39 -38
  42. package/dist/contracts/functions.d.ts +97 -70
  43. package/dist/contracts/functions.js +101 -34
  44. package/dist/contracts/git.d.ts +1 -1
  45. package/dist/contracts/grants.d.ts +7 -3
  46. package/dist/contracts/grants.js +18 -9
  47. package/dist/contracts/internal.d.ts +14 -1
  48. package/dist/contracts/internal.js +17 -7
  49. package/dist/contracts/oauth-resources.d.ts +4 -3
  50. package/dist/contracts/oauth-resources.js +12 -3
  51. package/dist/contracts/operations.d.ts +90 -5
  52. package/dist/contracts/operations.js +75 -1
  53. package/dist/contracts/pages.d.ts +6 -1
  54. package/dist/contracts/pages.js +24 -1
  55. package/dist/contracts/plan-policy.d.ts +1 -3
  56. package/dist/contracts/plan-policy.js +1 -2
  57. package/dist/contracts/platform.d.ts +61 -148
  58. package/dist/contracts/platform.js +70 -126
  59. package/dist/contracts/publish-archive.d.ts +498 -0
  60. package/dist/contracts/publish-archive.js +25 -0
  61. package/dist/contracts/resources.d.ts +12 -24
  62. package/dist/contracts/resources.js +32 -12
  63. package/dist/contracts/runtime-api.d.ts +369 -175
  64. package/dist/contracts/runtime-api.js +372 -348
  65. package/dist/contracts/runtime-app.d.ts +127 -120
  66. package/dist/contracts/runtime-app.js +19 -10
  67. package/dist/contracts/runtime-db.d.ts +1 -1
  68. package/dist/contracts/runtime-services.d.ts +219 -0
  69. package/dist/contracts/runtime-services.js +437 -0
  70. package/dist/contracts/runtime-storage.d.ts +45 -32
  71. package/dist/contracts/runtime-storage.js +30 -8
  72. package/dist/contracts/space-config.d.ts +10 -16
  73. package/dist/contracts/space-config.js +14 -10
  74. package/dist/contracts/spaces.d.ts +241 -436
  75. package/dist/contracts/spaces.js +128 -145
  76. package/dist/contracts/superadmin-activity.d.ts +57 -4
  77. package/dist/contracts/superadmin-activity.js +48 -2
  78. package/dist/contracts/superadmin-search.d.ts +126 -0
  79. package/dist/contracts/superadmin-search.js +61 -0
  80. package/dist/contracts/superadmin-spaces.d.ts +358 -89
  81. package/dist/contracts/superadmin-spaces.js +97 -24
  82. package/dist/contracts/superadmin-teams.d.ts +28 -10
  83. package/dist/contracts/superadmin-teams.js +5 -8
  84. package/dist/contracts/superadmin.d.ts +0 -32
  85. package/dist/contracts/superadmin.js +3 -11
  86. package/dist/contracts/tags.d.ts +9 -9
  87. package/dist/contracts/teams.d.ts +38 -0
  88. package/dist/contracts/teams.js +34 -16
  89. package/dist/contracts/transfers.d.ts +0 -49
  90. package/dist/contracts/transfers.js +2 -6
  91. package/dist/contracts/usage.d.ts +61 -0
  92. package/dist/contracts/usage.js +64 -0
  93. package/dist/contracts/variables.d.ts +2 -7
  94. package/dist/contracts/variables.js +6 -5
  95. package/dist/contracts/webhooks.d.ts +2 -2
  96. package/dist/contracts/zero.d.ts +87 -56
  97. package/dist/contracts/zero.js +82 -20
  98. package/dist/dashboard-paths/index.d.ts +1 -1
  99. package/dist/dashboard-paths/index.js +1 -0
  100. package/dist/docs/agent-prose.d.ts +1 -1
  101. package/dist/docs/agent-prose.js +57 -61
  102. package/dist/docs/agent-setup.js +40 -13
  103. package/dist/docs/catalog.d.ts +19 -19
  104. package/dist/docs/catalog.js +30 -19
  105. package/dist/docs/error-docs.js +63 -151
  106. package/dist/test-helpers/fetch-stub.d.ts +16 -0
  107. package/dist/test-helpers/fetch-stub.js +24 -0
  108. package/dist/utils/build-settings.js +9 -3
  109. package/dist/utils/canonical-json.d.ts +10 -0
  110. package/dist/utils/canonical-json.js +21 -0
  111. package/dist/utils/cast-transport.d.ts +28 -0
  112. package/dist/utils/cast-transport.js +52 -0
  113. package/dist/utils/claim-token.d.ts +0 -8
  114. package/dist/utils/claim-token.js +3 -15
  115. package/dist/utils/credential-policy.d.ts +1 -1
  116. package/dist/utils/env-file.d.ts +17 -0
  117. package/dist/utils/env-file.js +96 -0
  118. package/dist/utils/error-code.d.ts +2 -0
  119. package/dist/utils/error-code.js +7 -0
  120. package/dist/utils/generate-space-name.d.ts +8 -10
  121. package/dist/utils/generate-space-name.js +206 -21
  122. package/dist/utils/grant-decision.fixtures.json +2938 -0
  123. package/dist/utils/grants.d.ts +2 -0
  124. package/dist/utils/grants.js +25 -2
  125. package/dist/utils/gravatar.d.ts +9 -0
  126. package/dist/utils/gravatar.js +31 -0
  127. package/dist/utils/idempotency.d.ts +6 -0
  128. package/dist/utils/idempotency.js +28 -0
  129. package/dist/utils/local-space-state.d.ts +1 -5
  130. package/dist/utils/local-space-state.js +7 -26
  131. package/dist/utils/page-fonts.d.ts +2 -2
  132. package/dist/utils/page-fonts.js +22 -4
  133. package/dist/utils/pages.d.ts +1 -2
  134. package/dist/utils/pages.js +21 -5
  135. package/dist/utils/publish-form-data.d.ts +12 -0
  136. package/dist/utils/publish-form-data.js +10 -0
  137. package/dist/utils/publish-policy.d.ts +20 -0
  138. package/dist/utils/publish-policy.fixtures.json +397 -0
  139. package/dist/utils/publish-policy.js +36 -19
  140. package/dist/utils/push-new.d.ts +7 -0
  141. package/dist/utils/push-new.js +7 -0
  142. package/dist/utils/query-keys.d.ts +0 -1
  143. package/dist/utils/query-keys.js +0 -1
  144. package/dist/utils/runtime-paths.d.ts +5 -0
  145. package/dist/utils/runtime-paths.js +5 -0
  146. package/dist/utils/runtime-upload-batch.d.ts +0 -5
  147. package/dist/utils/runtime-upload-batch.js +1 -27
  148. package/dist/utils/runtime-upload.d.ts +3 -13
  149. package/dist/utils/runtime-upload.js +4 -14
  150. package/dist/utils/space-config.d.ts +0 -33
  151. package/dist/utils/space-config.js +5 -326
  152. package/dist/utils/storage-policy.d.ts +1 -1
  153. package/dist/utils/storage-policy.js +3 -1
  154. package/dist/utils/structured-error.d.ts +14 -0
  155. package/dist/utils/structured-error.js +22 -0
  156. package/dist/utils/version-path.js +12 -3
  157. package/dist/vocabulary.d.ts +5 -3
  158. package/dist/vocabulary.js +13 -10
  159. package/package.json +10 -5
  160. package/dist/config/postgres-budget.d.ts +0 -129
  161. package/dist/config/postgres-budget.js +0 -140
  162. package/dist/config/postgres-budget.json +0 -51
  163. package/dist/contracts/archives.d.ts +0 -331
  164. package/dist/contracts/archives.js +0 -120
  165. package/dist/contracts/deployments.d.ts +0 -574
  166. package/dist/contracts/deployments.js +0 -97
  167. package/dist/contracts/sites.d.ts +0 -416
  168. package/dist/contracts/sites.js +0 -168
  169. package/dist/contracts/superadmin-queues.d.ts +0 -414
  170. package/dist/contracts/superadmin-queues.js +0 -202
  171. package/dist/contracts/superadmin-runtime.d.ts +0 -27
  172. package/dist/contracts/superadmin-runtime.js +0 -38
  173. package/dist/index.d.ts +0 -1
  174. package/dist/index.js +0 -1
  175. package/dist/utils/api.d.ts +0 -4
  176. package/dist/utils/api.js +0 -13
@@ -1,7 +1,7 @@
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;
@@ -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,7 +302,6 @@ 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.";
@@ -345,7 +325,6 @@ declare const featureEntries: readonly [{
345
325
  readonly surface: true;
346
326
  readonly defaultEnabled: false;
347
327
  readonly runtime: null;
348
- readonly assignmentScopes: readonly ["team", "global"];
349
328
  readonly docs: {
350
329
  readonly channel: "handbook";
351
330
  readonly slug: "/features/build/content-pipeline";
@@ -357,7 +336,6 @@ declare const featureEntries: readonly [{
357
336
  readonly reviewAfter: "2026-08-11";
358
337
  readonly removeAfter: "2026-10-10";
359
338
  readonly gaAt: null;
360
- readonly allowedActorPolicies: readonly ["resource_team"];
361
339
  readonly downRamp: {
362
340
  readonly code: "content_pipeline_stop";
363
341
  readonly summary: "Deny next build/finalize; completed immutable output remains.";
@@ -375,7 +353,6 @@ declare const featureEntries: readonly [{
375
353
  readonly enabledForA8c: true;
376
354
  readonly planDefaults: {};
377
355
  };
378
- readonly assignmentScopes: readonly ["team", "global"];
379
356
  readonly docs: {
380
357
  readonly channel: "public";
381
358
  readonly slug: "/docs/tags";
@@ -387,7 +364,6 @@ declare const featureEntries: readonly [{
387
364
  readonly reviewAfter: "2026-08-11";
388
365
  readonly removeAfter: "2026-10-10";
389
366
  readonly gaAt: null;
390
- readonly allowedActorPolicies: readonly ["request_actor", "resource_team"];
391
367
  readonly downRamp: {
392
368
  readonly code: "tags_stop";
393
369
  readonly summary: "Deny every customer Tag API and dynamic module delivery; internal operator export/cleanup and platform-generated inert marker bytes remain.";
@@ -404,19 +380,17 @@ declare const featureEntries: readonly [{
404
380
  readonly enabledForA8c: true;
405
381
  readonly planDefaults: {};
406
382
  };
407
- readonly assignmentScopes: readonly ["team", "global"];
408
383
  readonly docs: {
409
384
  readonly channel: "public";
410
385
  readonly slug: "/docs/apps/zero";
411
386
  readonly feedbackUrl: null;
412
387
  };
413
388
  readonly owner: "team:zero";
414
- readonly requires: readonly ["sites.dedicated_runtime"];
389
+ readonly requires: readonly [];
415
390
  readonly lifecycleAdoptedAt: "2026-07-12";
416
391
  readonly reviewAfter: null;
417
392
  readonly removeAfter: "2026-11-01";
418
393
  readonly gaAt: "2026-08-05";
419
- readonly allowedActorPolicies: readonly ["resource_team"];
420
394
  readonly downRamp: {
421
395
  readonly code: "zero_stop";
422
396
  readonly summary: "Stop activation/invocation; operator export/delete/migration recovery remain.";
@@ -426,14 +400,13 @@ declare const featureEntries: readonly [{
426
400
  readonly key: "functions";
427
401
  readonly name: "Spacefast Functions";
428
402
  readonly description: string;
429
- readonly stage: "private_beta";
403
+ readonly stage: "ga";
430
404
  readonly surface: true;
431
- readonly defaultEnabled: false;
405
+ readonly defaultEnabled: true;
432
406
  readonly runtime: {
433
407
  readonly enabledForA8c: true;
434
408
  readonly planDefaults: {};
435
409
  };
436
- readonly assignmentScopes: readonly ["team", "global"];
437
410
  readonly docs: {
438
411
  readonly channel: "public";
439
412
  readonly slug: "/docs/apps/functions";
@@ -442,10 +415,9 @@ declare const featureEntries: readonly [{
442
415
  readonly owner: "team:zero";
443
416
  readonly requires: readonly [];
444
417
  readonly lifecycleAdoptedAt: "2026-07-27";
445
- readonly reviewAfter: "2026-09-02";
418
+ readonly reviewAfter: null;
446
419
  readonly removeAfter: "2026-11-01";
447
- readonly gaAt: null;
448
- readonly allowedActorPolicies: readonly ["resource_team"];
420
+ readonly gaAt: "2026-08-12";
449
421
  readonly downRamp: {
450
422
  readonly code: "functions_stop";
451
423
  readonly summary: string;
@@ -463,7 +435,6 @@ declare const featureEntries: readonly [{
463
435
  readonly enabledForA8c: true;
464
436
  readonly planDefaults: {};
465
437
  };
466
- readonly assignmentScopes: readonly ["user", "team", "global"];
467
438
  readonly docs: {
468
439
  readonly channel: "public";
469
440
  readonly slug: "/docs/spaces/rename";
@@ -475,7 +446,6 @@ declare const featureEntries: readonly [{
475
446
  readonly reviewAfter: "2026-08-11";
476
447
  readonly removeAfter: "2026-10-10";
477
448
  readonly gaAt: "2026-07-27";
478
- readonly allowedActorPolicies: readonly ["request_actor"];
479
449
  readonly downRamp: {
480
450
  readonly code: "slug_rename_stop";
481
451
  readonly summary: "Deny new slug renames while already-committed hostname redirects and runtime convergence continue.";
@@ -1,5 +1,5 @@
1
1
  import { freezeFeatureRegistryEntry } from "./feature-lifecycle-core.js";
2
- export { FEATURE_ASSIGNMENT_SCOPES, FEATURE_EXECUTION_ACTOR_POLICIES, FEATURE_OWNER_IDS, FEATURE_STAGES, freezeFeatureRegistryEntry, validateFeatureLifecycleRegistry, } from "./feature-lifecycle-core.js";
2
+ export { FEATURE_OWNER_IDS, FEATURE_STAGES, freezeFeatureRegistryEntry, validateFeatureLifecycleRegistry, } from "./feature-lifecycle-core.js";
3
3
  const featureEntries = Object.freeze([
4
4
  {
5
5
  cohort: "launch",
@@ -13,7 +13,6 @@ const featureEntries = Object.freeze([
13
13
  enabledForA8c: true,
14
14
  planDefaults: {},
15
15
  },
16
- assignmentScopes: ["team", "global"],
17
16
  docs: null,
18
17
  owner: "team:commerce",
19
18
  requires: [],
@@ -21,7 +20,6 @@ const featureEntries = Object.freeze([
21
20
  reviewAfter: "2026-08-11",
22
21
  removeAfter: null,
23
22
  gaAt: null,
24
- allowedActorPolicies: ["request_actor"],
25
23
  downRamp: {
26
24
  code: "paid_acquisition_stop",
27
25
  summary: "Deny new acquisition; allow cancel, portal, provider reconciliation and purchase recovery.",
@@ -39,7 +37,6 @@ const featureEntries = Object.freeze([
39
37
  enabledForA8c: true,
40
38
  planDefaults: {},
41
39
  },
42
- assignmentScopes: ["global"],
43
40
  docs: {
44
41
  channel: "public",
45
42
  slug: "/docs/publishing/anonymous",
@@ -51,7 +48,6 @@ const featureEntries = Object.freeze([
51
48
  reviewAfter: "2026-07-26",
52
49
  removeAfter: "2026-08-11",
53
50
  gaAt: "2026-07-12",
54
- allowedActorPolicies: ["request_actor", "global_policy"],
55
51
  downRamp: {
56
52
  code: "anonymous_publish_stop",
57
53
  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.",
@@ -87,7 +83,6 @@ const featureEntries = Object.freeze([
87
83
  surface: true,
88
84
  defaultEnabled: false,
89
85
  runtime: null,
90
- assignmentScopes: ["user", "team", "global"],
91
86
  docs: {
92
87
  channel: "handbook",
93
88
  slug: "/features/domains/catalog",
@@ -99,7 +94,6 @@ const featureEntries = Object.freeze([
99
94
  reviewAfter: "2026-08-11",
100
95
  removeAfter: "2026-10-10",
101
96
  gaAt: null,
102
- allowedActorPolicies: ["request_actor"],
103
97
  downRamp: {
104
98
  code: "domain_catalog_hide",
105
99
  summary: "Hide authenticated catalog; public suggestions, availability and WHOIS remain.",
@@ -118,7 +112,6 @@ const featureEntries = Object.freeze([
118
112
  enabledForA8c: true,
119
113
  planDefaults: {},
120
114
  },
121
- assignmentScopes: ["user", "team", "global"],
122
115
  docs: {
123
116
  channel: "handbook",
124
117
  slug: "/features/domains/registration",
@@ -130,7 +123,6 @@ const featureEntries = Object.freeze([
130
123
  reviewAfter: "2026-08-11",
131
124
  removeAfter: "2026-10-10",
132
125
  gaAt: null,
133
- allowedActorPolicies: ["request_actor", "persisted_request_actor"],
134
126
  downRamp: {
135
127
  code: "domain_registration_stop",
136
128
  summary: "Deny new customer mutations and unstarted provider submits; generic existing-domain read plus service-only reconciliation/compensation for externally committed work continue.",
@@ -149,7 +141,6 @@ const featureEntries = Object.freeze([
149
141
  enabledForA8c: true,
150
142
  planDefaults: {},
151
143
  },
152
- assignmentScopes: ["user", "team", "global"],
153
144
  docs: {
154
145
  channel: "handbook",
155
146
  slug: "/features/domains/dns-management",
@@ -161,7 +152,6 @@ const featureEntries = Object.freeze([
161
152
  reviewAfter: "2026-08-11",
162
153
  removeAfter: "2026-10-10",
163
154
  gaAt: null,
164
- allowedActorPolicies: ["request_actor", "persisted_request_actor"],
165
155
  downRamp: {
166
156
  code: "dns_management_stop",
167
157
  summary: "Deny customer mutation and unstarted provider apply; generic authoritative read plus service-only rollback/reconciliation for externally committed work continue.",
@@ -179,7 +169,6 @@ const featureEntries = Object.freeze([
179
169
  enabledForA8c: true,
180
170
  planDefaults: {},
181
171
  },
182
- assignmentScopes: ["team", "global"],
183
172
  docs: {
184
173
  channel: "handbook",
185
174
  slug: "/features/domains/wpcom-dns",
@@ -191,7 +180,6 @@ const featureEntries = Object.freeze([
191
180
  reviewAfter: "2026-08-11",
192
181
  removeAfter: "2026-10-10",
193
182
  gaAt: null,
194
- allowedActorPolicies: ["request_actor"],
195
183
  downRamp: {
196
184
  code: "wpcom_dns_stop",
197
185
  summary: "Deny new automation; service/operator detach and reconciliation continue.",
@@ -209,7 +197,6 @@ const featureEntries = Object.freeze([
209
197
  enabledForA8c: true,
210
198
  planDefaults: {},
211
199
  },
212
- assignmentScopes: ["user", "team", "global"],
213
200
  docs: {
214
201
  channel: "handbook",
215
202
  slug: "/features/domains/domain-connect",
@@ -221,7 +208,6 @@ const featureEntries = Object.freeze([
221
208
  reviewAfter: "2026-08-11",
222
209
  removeAfter: "2026-10-10",
223
210
  gaAt: null,
224
- allowedActorPolicies: ["request_actor", "persisted_request_actor"],
225
211
  downRamp: {
226
212
  code: "domain_connect_stop",
227
213
  summary: "Deny new setup and every uncommitted callback; after an authenticated external commit, narrowly typed service-only reconciliation or compensation continues idempotently.",
@@ -241,7 +227,6 @@ const featureEntries = Object.freeze([
241
227
  internal: true,
242
228
  },
243
229
  },
244
- assignmentScopes: ["team", "global"],
245
230
  docs: {
246
231
  channel: "public",
247
232
  slug: "/docs/spaces/proxy-routes",
@@ -253,7 +238,6 @@ const featureEntries = Object.freeze([
253
238
  reviewAfter: "2026-08-11",
254
239
  removeAfter: "2026-10-10",
255
240
  gaAt: null,
256
- allowedActorPolicies: ["resource_team"],
257
241
  downRamp: {
258
242
  code: "proxy_binding_stop",
259
243
  summary: "Deny new binds; discoverable authenticated read/detach plus service reconciliation continue.",
@@ -263,7 +247,7 @@ const featureEntries = Object.freeze([
263
247
  cohort: "launch",
264
248
  key: "collab.notices",
265
249
  name: "Realtime notices",
266
- description: "Reserved kill-switch for future realtime preview notices.",
250
+ 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.",
267
251
  stage: "internal",
268
252
  surface: false,
269
253
  defaultEnabled: false,
@@ -271,7 +255,6 @@ const featureEntries = Object.freeze([
271
255
  enabledForA8c: true,
272
256
  planDefaults: {},
273
257
  },
274
- assignmentScopes: ["team", "global"],
275
258
  docs: null,
276
259
  owner: "team:collaboration",
277
260
  requires: [],
@@ -279,7 +262,6 @@ const featureEntries = Object.freeze([
279
262
  reviewAfter: "2026-08-11",
280
263
  removeAfter: null,
281
264
  gaAt: null,
282
- allowedActorPolicies: ["resource_team"],
283
265
  downRamp: {
284
266
  code: "notices_stop",
285
267
  summary: "Stop mint/publish; service/operator revoke and cleanup continue.",
@@ -301,9 +283,8 @@ const featureEntries = Object.freeze([
301
283
  key: "sites.dedicated_runtime",
302
284
  name: "Dedicated runtime sites",
303
285
  description: "Allows teams to create dedicated WP.Cloud sites and place team spaces on them.",
304
- // Availability and billing are separate decisions: the public surface is
305
- // on, while the dedicatedRuntime entitlement still decides which teams may
306
- // allocate the isolated infrastructure it exposes.
286
+ // Every Space owns its runtime site. The flag remains only as the
287
+ // operational down-ramp for new placement and materialization.
307
288
  stage: "ga",
308
289
  surface: true,
309
290
  defaultEnabled: true,
@@ -312,7 +293,6 @@ const featureEntries = Object.freeze([
312
293
  enabledForA8c: true,
313
294
  planDefaults: {},
314
295
  },
315
- assignmentScopes: ["team", "global"],
316
296
  docs: {
317
297
  channel: "public",
318
298
  slug: "/docs/apps",
@@ -324,7 +304,6 @@ const featureEntries = Object.freeze([
324
304
  reviewAfter: null,
325
305
  removeAfter: "2026-11-01",
326
306
  gaAt: "2026-08-05",
327
- allowedActorPolicies: ["request_actor", "resource_team"],
328
307
  downRamp: {
329
308
  code: "dedicated_runtime_stop",
330
309
  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.",
@@ -350,7 +329,6 @@ const featureEntries = Object.freeze([
350
329
  surface: true,
351
330
  defaultEnabled: false,
352
331
  runtime: null,
353
- assignmentScopes: ["team", "global"],
354
332
  docs: {
355
333
  channel: "handbook",
356
334
  slug: "/features/build/content-pipeline",
@@ -362,7 +340,6 @@ const featureEntries = Object.freeze([
362
340
  reviewAfter: "2026-08-11",
363
341
  removeAfter: "2026-10-10",
364
342
  gaAt: null,
365
- allowedActorPolicies: ["resource_team"],
366
343
  downRamp: {
367
344
  code: "content_pipeline_stop",
368
345
  summary: "Deny next build/finalize; completed immutable output remains.",
@@ -381,7 +358,6 @@ const featureEntries = Object.freeze([
381
358
  enabledForA8c: true,
382
359
  planDefaults: {},
383
360
  },
384
- assignmentScopes: ["team", "global"],
385
361
  docs: {
386
362
  channel: "public",
387
363
  slug: "/docs/tags",
@@ -393,7 +369,6 @@ const featureEntries = Object.freeze([
393
369
  reviewAfter: "2026-08-11",
394
370
  removeAfter: "2026-10-10",
395
371
  gaAt: null,
396
- allowedActorPolicies: ["request_actor", "resource_team"],
397
372
  downRamp: {
398
373
  code: "tags_stop",
399
374
  summary: "Deny every customer Tag API and dynamic module delivery; internal operator export/cleanup and platform-generated inert marker bytes remain.",
@@ -404,8 +379,8 @@ const featureEntries = Object.freeze([
404
379
  key: "zero",
405
380
  name: "Spacefast Zero",
406
381
  description: "Enables Spacefast Zero command surfaces and hosted Zero app workflows.",
407
- // Zero is public. The flag remains only as the canonical operational
408
- // down-ramp; dedicatedRuntime is the one customer eligibility decision.
382
+ // Zero is public on every plan. The flag remains only as the canonical
383
+ // operational down-ramp.
409
384
  stage: "ga",
410
385
  surface: true,
411
386
  defaultEnabled: true,
@@ -413,19 +388,17 @@ const featureEntries = Object.freeze([
413
388
  enabledForA8c: true,
414
389
  planDefaults: {},
415
390
  },
416
- assignmentScopes: ["team", "global"],
417
391
  docs: {
418
392
  channel: "public",
419
393
  slug: "/docs/apps/zero",
420
394
  feedbackUrl: null,
421
395
  },
422
396
  owner: "team:zero",
423
- requires: ["sites.dedicated_runtime"],
397
+ requires: [],
424
398
  lifecycleAdoptedAt: "2026-07-12",
425
399
  reviewAfter: null,
426
400
  removeAfter: "2026-11-01",
427
401
  gaAt: "2026-08-05",
428
- allowedActorPolicies: ["resource_team"],
429
402
  downRamp: {
430
403
  code: "zero_stop",
431
404
  summary: "Stop activation/invocation; operator export/delete/migration recovery remain.",
@@ -437,32 +410,29 @@ const featureEntries = Object.freeze([
437
410
  name: "Spacefast Functions",
438
411
  description: "Dispatches a version's dynamic requests to the execution host. Compiling the worker at publish is not gated: " +
439
412
  "the CLI always ships the bundle, and this flag decides whether anything runs it.",
440
- // Functions remains a private beta: public docs carry the badge and this
441
- // flag still decides who dispatches.
442
- stage: "private_beta",
413
+ // Functions is public on every plan. The flag remains only as the
414
+ // operational down-ramp for dispatch.
415
+ stage: "ga",
443
416
  surface: true,
444
- defaultEnabled: false,
417
+ defaultEnabled: true,
445
418
  runtime: {
446
419
  enabledForA8c: true,
447
420
  planDefaults: {},
448
421
  },
449
- assignmentScopes: ["team", "global"],
450
422
  docs: {
451
423
  channel: "public",
452
424
  slug: "/docs/apps/functions",
453
425
  feedbackUrl: null,
454
426
  },
455
427
  owner: "team:zero",
456
- // Deliberately no `sites.dedicated_runtime` requirement, unlike Zero: a
457
- // worker executes on Cloudflare rather than on the space's box, and reaches
458
- // the database only through the broker. Shared placement is safe here in a
459
- // way it is not for a capsule.
428
+ // A worker executes on Cloudflare rather than on the space's box and
429
+ // reaches the database only through the broker, so dispatch has no
430
+ // dedicated-runtime lifecycle dependency.
460
431
  requires: [],
461
432
  lifecycleAdoptedAt: "2026-07-27",
462
- reviewAfter: "2026-09-02",
433
+ reviewAfter: null,
463
434
  removeAfter: "2026-11-01",
464
- gaAt: null,
465
- allowedActorPolicies: ["resource_team"],
435
+ gaAt: "2026-08-12",
466
436
  downRamp: {
467
437
  code: "functions_stop",
468
438
  summary: "Stop emitting dispatch configuration at finalize; published bundles stay on disk as inert content and the " +
@@ -483,7 +453,6 @@ const featureEntries = Object.freeze([
483
453
  enabledForA8c: true,
484
454
  planDefaults: {},
485
455
  },
486
- assignmentScopes: ["user", "team", "global"],
487
456
  docs: {
488
457
  channel: "public",
489
458
  slug: "/docs/spaces/rename",
@@ -495,7 +464,6 @@ const featureEntries = Object.freeze([
495
464
  reviewAfter: "2026-08-11",
496
465
  removeAfter: "2026-10-10",
497
466
  gaAt: "2026-07-27",
498
- allowedActorPolicies: ["request_actor"],
499
467
  downRamp: {
500
468
  code: "slug_rename_stop",
501
469
  summary: "Deny new slug renames while already-committed hostname redirects and runtime convergence continue.",