@spacefast/common 0.0.12 → 0.0.17

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 (189) hide show
  1. package/dist/agents/client-registry.d.ts +22 -0
  2. package/dist/agents/client-registry.js +41 -0
  3. package/dist/agents/connect-targets.d.ts +51 -6
  4. package/dist/agents/connect-targets.js +93 -28
  5. package/dist/brand.d.ts +0 -11
  6. package/dist/brand.js +0 -20
  7. package/dist/config/domains.d.ts +15 -6
  8. package/dist/config/domains.js +24 -10
  9. package/dist/config/postgres-budget.d.ts +3 -0
  10. package/dist/config/postgres-budget.js +6 -1
  11. package/dist/config/postgres-budget.json +2 -1
  12. package/dist/contracts/abuse.js +1 -1
  13. package/dist/contracts/access.d.ts +486 -1196
  14. package/dist/contracts/access.js +323 -1054
  15. package/dist/contracts/activity.d.ts +1 -1
  16. package/dist/contracts/activity.js +11 -15
  17. package/dist/contracts/api-keys.d.ts +16 -0
  18. package/dist/contracts/api-keys.js +11 -9
  19. package/dist/contracts/archives.d.ts +1 -2
  20. package/dist/contracts/archives.js +15 -17
  21. package/dist/contracts/beta.js +1 -1
  22. package/dist/contracts/builds.js +14 -14
  23. package/dist/contracts/channels.js +2 -2
  24. package/dist/contracts/comments.d.ts +143 -99
  25. package/dist/contracts/comments.js +194 -79
  26. package/dist/contracts/common.d.ts +12 -12
  27. package/dist/contracts/common.js +33 -30
  28. package/dist/contracts/continuation.js +5 -5
  29. package/dist/contracts/countries.js +2 -7
  30. package/dist/contracts/data-source-routes.d.ts +20 -0
  31. package/dist/contracts/data-source-routes.js +15 -0
  32. package/dist/contracts/device-auth.d.ts +13 -9
  33. package/dist/contracts/device-auth.js +12 -12
  34. package/dist/contracts/docs.d.ts +10 -10
  35. package/dist/contracts/domains.js +39 -33
  36. package/dist/contracts/enums.d.ts +4 -14
  37. package/dist/contracts/enums.js +3 -10
  38. package/dist/contracts/error-code-meta.d.ts +122 -56
  39. package/dist/contracts/error-code-meta.js +43 -19
  40. package/dist/contracts/error-codes.d.ts +7 -4
  41. package/dist/contracts/error-codes.js +48 -24
  42. package/dist/contracts/events.d.ts +22 -15
  43. package/dist/contracts/events.js +33 -5
  44. package/dist/contracts/execution.d.ts +238 -0
  45. package/dist/contracts/execution.js +309 -0
  46. package/dist/contracts/feature-lifecycle.d.ts +39 -188
  47. package/dist/contracts/feature-lifecycle.js +52 -196
  48. package/dist/contracts/features.d.ts +13 -115
  49. package/dist/contracts/features.js +5 -35
  50. package/dist/contracts/functions.d.ts +597 -0
  51. package/dist/contracts/functions.js +475 -0
  52. package/dist/contracts/grants.d.ts +1175 -0
  53. package/dist/contracts/grants.js +783 -0
  54. package/dist/contracts/ids.d.ts +7 -5
  55. package/dist/contracts/ids.js +7 -7
  56. package/dist/contracts/internal.js +2 -2
  57. package/dist/contracts/mcp.d.ts +17 -556
  58. package/dist/contracts/mcp.js +9 -103
  59. package/dist/contracts/me.js +3 -4
  60. package/dist/contracts/notifications.d.ts +108 -0
  61. package/dist/contracts/notifications.js +54 -0
  62. package/dist/contracts/oauth-resources.d.ts +22 -5
  63. package/dist/contracts/oauth-resources.js +23 -2
  64. package/dist/contracts/operations.d.ts +0 -48
  65. package/dist/contracts/operations.js +0 -19
  66. package/dist/contracts/pages.d.ts +10 -14
  67. package/dist/contracts/pages.js +17 -21
  68. package/dist/contracts/plan-policy.d.ts +1 -8
  69. package/dist/contracts/plan-policy.js +1 -4
  70. package/dist/contracts/platform.d.ts +78 -30
  71. package/dist/contracts/platform.js +69 -20
  72. package/dist/contracts/problem-document.d.ts +14 -0
  73. package/dist/contracts/problem-document.js +35 -0
  74. package/dist/contracts/push-new.d.ts +41 -2
  75. package/dist/contracts/push-new.js +4 -0
  76. package/dist/contracts/quotas.d.ts +0 -1
  77. package/dist/contracts/quotas.js +0 -5
  78. package/dist/contracts/repository-connections.d.ts +1 -1
  79. package/dist/contracts/resources.d.ts +16 -71
  80. package/dist/contracts/resources.js +13 -16
  81. package/dist/contracts/runtime-api.d.ts +666 -303
  82. package/dist/contracts/runtime-api.js +272 -113
  83. package/dist/contracts/runtime-app.d.ts +168 -0
  84. package/dist/contracts/runtime-app.js +42 -0
  85. package/dist/contracts/runtime-db.d.ts +424 -0
  86. package/dist/contracts/runtime-db.js +108 -0
  87. package/dist/contracts/runtime-storage.d.ts +120 -0
  88. package/dist/contracts/runtime-storage.js +40 -0
  89. package/dist/contracts/sf-config-v1.d.ts +54 -1
  90. package/dist/contracts/sf-config-v1.js +2 -2
  91. package/dist/contracts/sites.d.ts +6 -0
  92. package/dist/contracts/sites.js +30 -11
  93. package/dist/contracts/space-config.d.ts +91 -121
  94. package/dist/contracts/space-config.js +464 -42
  95. package/dist/contracts/spaces.d.ts +300 -171
  96. package/dist/contracts/spaces.js +128 -98
  97. package/dist/contracts/superadmin-emails.d.ts +2 -2
  98. package/dist/contracts/superadmin-spaces.d.ts +26 -130
  99. package/dist/contracts/superadmin-spaces.js +22 -0
  100. package/dist/contracts/superadmin-tenants.js +4 -4
  101. package/dist/contracts/superadmin.d.ts +4 -0
  102. package/dist/contracts/superadmin.js +14 -1
  103. package/dist/contracts/tags.d.ts +6 -6
  104. package/dist/contracts/tags.js +1 -1
  105. package/dist/contracts/teams.d.ts +9 -9
  106. package/dist/contracts/teams.js +25 -16
  107. package/dist/contracts/theme-json.js +1 -1
  108. package/dist/contracts/transfers.d.ts +0 -1
  109. package/dist/contracts/transfers.js +4 -4
  110. package/dist/contracts/variables.js +3 -3
  111. package/dist/contracts/zero.d.ts +384 -596
  112. package/dist/contracts/zero.js +167 -299
  113. package/dist/dashboard-paths/index.d.ts +18 -3
  114. package/dist/dashboard-paths/index.js +19 -0
  115. package/dist/docs/agent-handoff-document.d.ts +2 -2
  116. package/dist/docs/agent-handoff-document.js +8 -7
  117. package/dist/docs/agent-prose.d.ts +22 -3
  118. package/dist/docs/agent-prose.js +227 -55
  119. package/dist/docs/agent-setup.d.ts +14 -11
  120. package/dist/docs/agent-setup.js +289 -61
  121. package/dist/docs/agent-solutions.d.ts +6 -6
  122. package/dist/docs/agent-solutions.js +24 -22
  123. package/dist/docs/catalog.d.ts +53 -98
  124. package/dist/docs/catalog.js +90 -117
  125. package/dist/docs/error-docs.js +304 -236
  126. package/dist/docs/skill-distribution.d.ts +2 -0
  127. package/dist/docs/skill-distribution.js +7 -4
  128. package/dist/docs/skills.d.ts +546 -0
  129. package/dist/docs/skills.js +340 -0
  130. package/dist/utils/auth-redirect.d.ts +1 -3
  131. package/dist/utils/auth-redirect.js +1 -21
  132. package/dist/utils/browser-credential.d.ts +19 -0
  133. package/dist/utils/browser-credential.js +62 -0
  134. package/dist/utils/build-settings.d.ts +2 -0
  135. package/dist/utils/build-settings.js +61 -9
  136. package/dist/utils/comment-avatars.d.ts +7 -0
  137. package/dist/utils/comment-avatars.js +42 -0
  138. package/dist/utils/content-type.d.ts +3 -3
  139. package/dist/utils/content-type.js +38 -61
  140. package/dist/utils/credential-policy.d.ts +1 -1
  141. package/dist/utils/credential-policy.js +4 -0
  142. package/dist/utils/domain-diagnostics.d.ts +5 -5
  143. package/dist/utils/domain-diagnostics.js +21 -10
  144. package/dist/utils/egress-policy.fixtures.json +1 -1
  145. package/dist/utils/grants.d.ts +53 -0
  146. package/dist/utils/grants.js +160 -0
  147. package/dist/utils/local-space-state.d.ts +78 -4
  148. package/dist/utils/local-space-state.js +384 -82
  149. package/dist/utils/one-shot-replay.d.ts +14 -0
  150. package/dist/utils/one-shot-replay.js +21 -0
  151. package/dist/utils/page-preview.d.ts +7 -0
  152. package/dist/utils/page-preview.js +9 -0
  153. package/dist/utils/pages.d.ts +2 -5
  154. package/dist/utils/pages.js +64 -33
  155. package/dist/utils/publish-form-data.d.ts +22 -0
  156. package/dist/utils/publish-form-data.js +26 -0
  157. package/dist/utils/publish-policy.d.ts +34 -4
  158. package/dist/utils/publish-policy.js +149 -62
  159. package/dist/utils/query-keys.d.ts +8 -10
  160. package/dist/utils/query-keys.js +14 -10
  161. package/dist/utils/runtime-paths.d.ts +3 -0
  162. package/dist/utils/runtime-paths.js +7 -0
  163. package/dist/utils/secure-local-file.d.ts +73 -0
  164. package/dist/utils/secure-local-file.js +1373 -0
  165. package/dist/utils/space-config.d.ts +17 -4
  166. package/dist/utils/space-config.js +151 -8
  167. package/dist/utils/static-runtime-policy.d.ts +5 -0
  168. package/dist/utils/static-runtime-policy.js +54 -10
  169. package/dist/utils/storage-policy.d.ts +20 -0
  170. package/dist/utils/storage-policy.fixtures.json +174 -0
  171. package/dist/utils/storage-policy.js +193 -0
  172. package/dist/utils/upload-session.d.ts +15 -1
  173. package/dist/utils/upload-session.js +68 -2
  174. package/dist/utils/version-file-browser.d.ts +13 -0
  175. package/dist/utils/version-file-browser.js +59 -0
  176. package/package.json +20 -1
  177. package/dist/contracts/mounts.d.ts +0 -142
  178. package/dist/contracts/mounts.js +0 -56
  179. package/dist/utils/access-grant.d.ts +0 -14
  180. package/dist/utils/access-grant.js +0 -88
  181. package/dist/utils/access-match.d.ts +0 -46
  182. package/dist/utils/access-match.fixtures.json +0 -513
  183. package/dist/utils/access-match.js +0 -312
  184. package/dist/utils/access-verdict.fixtures.json +0 -421
  185. package/dist/utils/asset-fingerprint.d.ts +0 -53
  186. package/dist/utils/asset-fingerprint.js +0 -574
  187. package/dist/utils/sf-config-v1.d.ts +0 -2
  188. package/dist/utils/sf-config-v1.fixtures.json +0 -9
  189. package/dist/utils/sf-config-v1.js +0 -551
@@ -244,7 +244,7 @@ const featureEntries = Object.freeze([
244
244
  assignmentScopes: ["team", "global"],
245
245
  docs: {
246
246
  channel: "public",
247
- slug: "/docs/domains/proxy-bindings",
247
+ slug: "/docs/spaces/proxy-routes",
248
248
  feedbackUrl: null,
249
249
  },
250
250
  owner: "team:domains",
@@ -259,47 +259,6 @@ const featureEntries = Object.freeze([
259
259
  summary: "Deny new binds; discoverable authenticated read/detach plus service reconciliation continue.",
260
260
  },
261
261
  },
262
- {
263
- cohort: "launch",
264
- key: "collab.comments",
265
- name: "Comments",
266
- description: "Enables Cast-backed comments on eligible immutable version URLs.",
267
- stage: "ga",
268
- surface: true,
269
- defaultEnabled: true,
270
- runtime: {
271
- enabledInDevelopment: true,
272
- enabledForA8c: true,
273
- planDefaults: {},
274
- },
275
- assignmentScopes: ["user", "team", "global"],
276
- docs: {
277
- channel: "public",
278
- slug: "/docs/collab",
279
- feedbackUrl: null,
280
- },
281
- owner: "team:collaboration",
282
- requires: [],
283
- lifecycleAdoptedAt: "2026-07-12",
284
- reviewAfter: "2026-08-11",
285
- removeAfter: "2026-10-10",
286
- gaAt: "2026-07-23",
287
- allowedActorPolicies: ["request_actor", "persisted_request_actor", "resource_team"],
288
- downRamp: {
289
- code: "comments_stop",
290
- summary: "Deny every customer comment read/write route and deferred task; internal operator export/cleanup continue.",
291
- },
292
- },
293
- {
294
- key: "collab.anonymous_commenters",
295
- name: "Anonymous commenters",
296
- description: "Allows anyone with the link to comment when space policy allows it.",
297
- defaultEnabled: true,
298
- runtime: {
299
- enabledForA8c: true,
300
- planDefaults: {},
301
- },
302
- },
303
262
  {
304
263
  cohort: "launch",
305
264
  key: "collab.notices",
@@ -326,37 +285,6 @@ const featureEntries = Object.freeze([
326
285
  summary: "Stop mint/publish; service/operator revoke and cleanup continue.",
327
286
  },
328
287
  },
329
- {
330
- cohort: "launch",
331
- key: "collab.published_comments",
332
- name: "Published host comments",
333
- description: "Allows the Collab overlay to mount comments on a space's live/published host, not just immutable preview URLs.",
334
- stage: "ga",
335
- surface: true,
336
- defaultEnabled: true,
337
- runtime: {
338
- enabledInDevelopment: true,
339
- enabledForA8c: true,
340
- planDefaults: {},
341
- },
342
- assignmentScopes: ["team", "global"],
343
- docs: {
344
- channel: "public",
345
- slug: "/docs/collab/published-comments",
346
- feedbackUrl: null,
347
- },
348
- owner: "team:collaboration",
349
- requires: ["collab.comments"],
350
- lifecycleAdoptedAt: "2026-07-12",
351
- reviewAfter: "2026-08-11",
352
- removeAfter: "2026-10-10",
353
- gaAt: "2026-07-23",
354
- allowedActorPolicies: ["resource_team"],
355
- downRamp: {
356
- code: "published_comments_stop",
357
- summary: "Stop published-host injection; stored data remains only for operator export/cleanup.",
358
- },
359
- },
360
288
  {
361
289
  key: "collab.drawing",
362
290
  name: "Collab drawing",
@@ -373,9 +301,12 @@ const featureEntries = Object.freeze([
373
301
  key: "sites.dedicated_runtime",
374
302
  name: "Dedicated runtime sites",
375
303
  description: "Allows teams to create dedicated WP.Cloud sites and place team spaces on them.",
376
- stage: "internal",
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.
307
+ stage: "ga",
377
308
  surface: true,
378
- defaultEnabled: false,
309
+ defaultEnabled: true,
379
310
  runtime: {
380
311
  enabledInDevelopment: true,
381
312
  enabledForA8c: true,
@@ -383,16 +314,16 @@ const featureEntries = Object.freeze([
383
314
  },
384
315
  assignmentScopes: ["team", "global"],
385
316
  docs: {
386
- channel: "handbook",
387
- slug: "/features/sites/dedicated-runtime",
317
+ channel: "public",
318
+ slug: "/docs/apps",
388
319
  feedbackUrl: null,
389
320
  },
390
321
  owner: "team:runtime",
391
322
  requires: [],
392
323
  lifecycleAdoptedAt: "2026-07-12",
393
- reviewAfter: "2026-08-11",
394
- removeAfter: "2026-10-10",
395
- gaAt: null,
324
+ reviewAfter: null,
325
+ removeAfter: "2026-11-01",
326
+ gaAt: "2026-08-05",
396
327
  allowedActorPolicies: ["request_actor", "resource_team"],
397
328
  downRamp: {
398
329
  code: "dedicated_runtime_stop",
@@ -473,30 +404,27 @@ const featureEntries = Object.freeze([
473
404
  key: "zero",
474
405
  name: "Spacefast Zero",
475
406
  description: "Enables Spacefast Zero command surfaces and hosted Zero app workflows.",
476
- stage: "internal",
407
+ // Zero is public. The flag remains only as the canonical operational
408
+ // down-ramp; dedicatedRuntime is the one customer eligibility decision.
409
+ stage: "ga",
477
410
  surface: true,
478
- defaultEnabled: false,
411
+ defaultEnabled: true,
479
412
  runtime: {
480
413
  enabledForA8c: true,
481
- // Zero capsules can only run on a dedicated site, so the plans that grant
482
- // `dedicatedRuntime` ARE the ones allowed to use it. Leaving these false
483
- // made the entitlement and the flag two independent switches for one
484
- // decision, and a team that paid for dedicated runtime still got
485
- // `zero_requires_dedicated_plan` at finalize.
486
- planDefaults: { enterprise: true, internal: true },
414
+ planDefaults: {},
487
415
  },
488
416
  assignmentScopes: ["team", "global"],
489
417
  docs: {
490
- channel: "handbook",
491
- slug: "/features/zero",
418
+ channel: "public",
419
+ slug: "/docs/apps/zero",
492
420
  feedbackUrl: null,
493
421
  },
494
422
  owner: "team:zero",
495
423
  requires: ["sites.dedicated_runtime"],
496
424
  lifecycleAdoptedAt: "2026-07-12",
497
- reviewAfter: "2026-08-11",
498
- removeAfter: "2026-10-10",
499
- gaAt: null,
425
+ reviewAfter: null,
426
+ removeAfter: "2026-11-01",
427
+ gaAt: "2026-08-05",
500
428
  allowedActorPolicies: ["resource_team"],
501
429
  downRamp: {
502
430
  code: "zero_stop",
@@ -505,132 +433,60 @@ const featureEntries = Object.freeze([
505
433
  },
506
434
  {
507
435
  cohort: "launch",
508
- key: "access.invites",
509
- name: "Space invites",
510
- description: "Enables account-less viewer invites with magic-link accept and the request-access loop (access-plan §5.3/§5.4).",
511
- stage: "internal",
512
- surface: true,
513
- defaultEnabled: false,
514
- runtime: {
515
- enabledInDevelopment: true,
516
- enabledForA8c: true,
517
- planDefaults: {},
518
- },
519
- assignmentScopes: ["user", "team", "global"],
520
- docs: {
521
- channel: "handbook",
522
- slug: "/features/access/invites",
523
- feedbackUrl: null,
524
- },
525
- owner: "team:access",
526
- requires: [],
527
- lifecycleAdoptedAt: "2026-07-12",
528
- reviewAfter: "2026-08-11",
529
- removeAfter: "2026-10-10",
530
- gaAt: null,
531
- allowedActorPolicies: ["request_actor", "persisted_request_actor"],
532
- downRamp: {
533
- code: "invites_stop",
534
- summary: "Deny every customer invite route and deferred delivery; internal operator cancel/revoke and service cleanup continue.",
535
- },
536
- },
537
- {
538
- key: "access.firewall_card",
539
- name: "Firewall card",
540
- description: "Enables the managed firewall block card (country/IP/bot rules) in space access settings (access-plan §5.6).",
541
- defaultEnabled: true,
542
- runtime: {
543
- enabledInDevelopment: true,
544
- enabledForA8c: true,
545
- planDefaults: {},
546
- },
547
- },
548
- {
549
- cohort: "launch",
550
- key: "access.sso_connections",
551
- name: "Company SSO connections",
552
- description: "Enables team-level OIDC connections minted at the authorize endpoint (access-plan §6.2, X-18).",
553
- stage: "internal",
436
+ key: "functions",
437
+ name: "Spacefast Functions",
438
+ description: "Dispatches a version's dynamic requests to the execution host. Compiling the worker at publish is not gated: " +
439
+ "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",
554
443
  surface: true,
555
444
  defaultEnabled: false,
556
445
  runtime: {
557
- enabledInDevelopment: true,
558
446
  enabledForA8c: true,
559
447
  planDefaults: {},
560
448
  },
561
- assignmentScopes: ["user", "team", "global"],
449
+ assignmentScopes: ["team", "global"],
562
450
  docs: {
563
- channel: "handbook",
564
- slug: "/features/access/sso-connections",
451
+ channel: "public",
452
+ slug: "/docs/apps/functions",
565
453
  feedbackUrl: null,
566
454
  },
567
- owner: "team:access",
455
+ 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.
568
460
  requires: [],
569
- lifecycleAdoptedAt: "2026-07-12",
570
- reviewAfter: "2026-08-11",
571
- removeAfter: "2026-10-10",
461
+ lifecycleAdoptedAt: "2026-07-27",
462
+ reviewAfter: "2026-09-02",
463
+ removeAfter: "2026-11-01",
572
464
  gaAt: null,
573
- allowedActorPolicies: ["request_actor", "persisted_request_actor"],
465
+ allowedActorPolicies: ["resource_team"],
574
466
  downRamp: {
575
- code: "sso_connections_stop",
576
- summary: "Deny every customer SSO connection route and callback; internal operator revoke/cleanup continue.",
467
+ code: "functions_stop",
468
+ summary: "Stop emitting dispatch configuration at finalize; published bundles stay on disk as inert content and the " +
469
+ "version serves statically. Versions already carrying a config keep dispatching until they are replaced — " +
470
+ "unsetting the runtime's dispatch token is the immediate kill.",
577
471
  },
578
472
  },
579
473
  {
580
474
  cohort: "launch",
581
- key: "access.byo_issuers",
582
- name: "Bring-your-own issuers",
583
- description: "Enables owner-held external token issuers with ext:-namespace binding (access-plan §6.3, X-19).",
584
- stage: "internal",
475
+ key: "spaces.slug_rename",
476
+ name: "Space slug rename",
477
+ description: "Renames a space and its managed hostname while retained former hostnames temporarily redirect to the current address.",
478
+ stage: "ga",
585
479
  surface: true,
586
- defaultEnabled: false,
587
- runtime: {
588
- enabledInDevelopment: true,
589
- enabledForA8c: true,
590
- planDefaults: {},
591
- },
592
- assignmentScopes: ["user", "team", "global"],
593
- docs: {
594
- channel: "handbook",
595
- slug: "/features/access/byo-issuers",
596
- feedbackUrl: null,
597
- },
598
- owner: "team:access",
599
- requires: [],
600
- lifecycleAdoptedAt: "2026-07-12",
601
- reviewAfter: "2026-08-11",
602
- removeAfter: "2026-10-10",
603
- gaAt: null,
604
- allowedActorPolicies: ["request_actor", "persisted_request_actor"],
605
- downRamp: {
606
- code: "byo_issuers_stop",
607
- summary: "Deny every customer issuer route and callback; internal operator revoke/cleanup continue.",
608
- },
609
- },
610
- {
611
- key: "access.views_panel",
612
- name: "Views panel",
613
- description: "Enables the identified who-viewed-what panel riding the analytics tiers (access-plan §5.6b, X-28).",
614
480
  defaultEnabled: true,
615
481
  runtime: {
616
482
  enabledInDevelopment: true,
617
483
  enabledForA8c: true,
618
484
  planDefaults: {},
619
485
  },
620
- },
621
- {
622
- cohort: "launch",
623
- key: "spaces.slug_rename",
624
- name: "Space slug rename",
625
- description: "Changes mutable space identity metadata while the stable managed hostname and hostname rows remain unchanged.",
626
- stage: "internal",
627
- surface: true,
628
- defaultEnabled: false,
629
- runtime: null,
630
486
  assignmentScopes: ["user", "team", "global"],
631
487
  docs: {
632
- channel: "handbook",
633
- slug: "/features/spaces/slug-rename",
488
+ channel: "public",
489
+ slug: "/docs/spaces/rename",
634
490
  feedbackUrl: null,
635
491
  },
636
492
  owner: "team:spaces",
@@ -638,11 +494,11 @@ const featureEntries = Object.freeze([
638
494
  lifecycleAdoptedAt: "2026-07-12",
639
495
  reviewAfter: "2026-08-11",
640
496
  removeAfter: "2026-10-10",
641
- gaAt: null,
497
+ gaAt: "2026-07-27",
642
498
  allowedActorPolicies: ["request_actor"],
643
499
  downRamp: {
644
500
  code: "slug_rename_stop",
645
- summary: "Deny every new stable-host slug rename; the atomic metadata write has no deferred feature continuation.",
501
+ summary: "Deny new slug renames while already-committed hostname redirects and runtime convergence continue.",
646
502
  },
647
503
  },
648
504
  ]);
@@ -10,7 +10,7 @@ export declare const planCodeSchema: z.ZodEnum<{
10
10
  }>;
11
11
  export type PlanCode = z.infer<typeof planCodeSchema>;
12
12
  export declare const DEFAULT_PLAN_CODE: PlanCode;
13
- export declare const FEATURE_KEYS: readonly ("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.comments" | "collab.anonymous_commenters" | "collab.notices" | "collab.published_comments" | "collab.drawing" | "sites.dedicated_runtime" | "shelf" | "tags" | "access.invites" | "access.firewall_card" | "access.sso_connections" | "access.byo_issuers" | "access.views_panel")[];
13
+ export declare const FEATURE_KEYS: readonly ("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")[];
14
14
  export declare const featureKeySchema: z.ZodEnum<{
15
15
  zero: "zero";
16
16
  "plans.paid.available": "plans.paid.available";
@@ -22,19 +22,13 @@ export declare const featureKeySchema: z.ZodEnum<{
22
22
  "domains.wpcom_dns": "domains.wpcom_dns";
23
23
  "domains.domain_connect": "domains.domain_connect";
24
24
  "domains.proxy_bindings": "domains.proxy_bindings";
25
- "collab.comments": "collab.comments";
26
- "collab.anonymous_commenters": "collab.anonymous_commenters";
27
25
  "collab.notices": "collab.notices";
28
- "collab.published_comments": "collab.published_comments";
29
26
  "collab.drawing": "collab.drawing";
30
27
  "sites.dedicated_runtime": "sites.dedicated_runtime";
31
28
  shelf: "shelf";
32
29
  tags: "tags";
33
- "access.invites": "access.invites";
34
- "access.firewall_card": "access.firewall_card";
35
- "access.sso_connections": "access.sso_connections";
36
- "access.byo_issuers": "access.byo_issuers";
37
- "access.views_panel": "access.views_panel";
30
+ functions: "functions";
31
+ "spaces.slug_rename": "spaces.slug_rename";
38
32
  }>;
39
33
  export type FeatureKey = RuntimeFeatureKey;
40
34
  export declare const FEATURE_OVERRIDE_STATES: readonly ["enabled", "disabled", "kill_switch"];
@@ -51,7 +45,6 @@ export declare const planLimitsSchema: z.ZodObject<{
51
45
  teamMembers: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
52
46
  subTeams: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
53
47
  externalDomainGroups: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
54
- publicImmutableVersionWindowDays: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
55
48
  versionRetentionDays: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
56
49
  versionGatedKeepDays: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
57
50
  egressBytesPerDay: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
@@ -62,15 +55,11 @@ export declare const planLimitsSchema: z.ZodObject<{
62
55
  buildAccessLogRetentionHours: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
63
56
  buildsDeploysMonthly: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
64
57
  analyticsRetentionDays: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
65
- cloudRulesPerSpace: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
66
58
  shareLinksPerSpace: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
67
59
  invitesPerSpace: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
68
60
  inviteEmailsPerSpaceDaily: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
69
61
  inviteEmailsPerAccountDaily: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
70
62
  pendingAccessRequestsPerSpace: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
71
- serviceTokensPerTeam: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
72
- connectionsPerTeam: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
73
- teamDefaultRules: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
74
63
  }, z.core.$strip>;
75
64
  export type PlanLimits = z.infer<typeof planLimitsSchema>;
76
65
  export declare const teamEntitlementsSchema: z.ZodObject<{
@@ -86,7 +75,6 @@ export declare const teamEntitlementsSchema: z.ZodObject<{
86
75
  teamMembers: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
87
76
  subTeams: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
88
77
  externalDomainGroups: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
89
- publicImmutableVersionWindowDays: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
90
78
  versionRetentionDays: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
91
79
  versionGatedKeepDays: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
92
80
  egressBytesPerDay: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
@@ -97,17 +85,12 @@ export declare const teamEntitlementsSchema: z.ZodObject<{
97
85
  buildAccessLogRetentionHours: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
98
86
  buildsDeploysMonthly: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
99
87
  analyticsRetentionDays: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
100
- cloudRulesPerSpace: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
101
88
  shareLinksPerSpace: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
102
89
  invitesPerSpace: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
103
90
  inviteEmailsPerSpaceDaily: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
104
91
  inviteEmailsPerAccountDaily: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
105
92
  pendingAccessRequestsPerSpace: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
106
- serviceTokensPerTeam: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
107
- connectionsPerTeam: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
108
- teamDefaultRules: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
109
93
  }, z.core.$strip>;
110
- headersBasicAuth: z.ZodBoolean;
111
94
  externalProxy: z.ZodBoolean;
112
95
  dedicatedRuntime: z.ZodBoolean;
113
96
  pagesTemplates: z.ZodBoolean;
@@ -125,7 +108,6 @@ export declare const teamEntitlementsResponseSchema: z.ZodObject<{
125
108
  personal: "personal";
126
109
  enterprise: "enterprise";
127
110
  }>;
128
- headersBasicAuth: z.ZodBoolean;
129
111
  externalProxy: z.ZodBoolean;
130
112
  dedicatedRuntime: z.ZodBoolean;
131
113
  pagesTemplates: z.ZodBoolean;
@@ -138,7 +120,6 @@ export declare const teamEntitlementsResponseSchema: z.ZodObject<{
138
120
  subTeams: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
139
121
  storageBytes: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
140
122
  externalDomainGroups: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
141
- publicImmutableVersionWindowDays: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
142
123
  maxFileBytes: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
143
124
  maxVersionFiles: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
144
125
  routingRules: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
@@ -146,15 +127,11 @@ export declare const teamEntitlementsResponseSchema: z.ZodObject<{
146
127
  buildAccessLogRetentionHours: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
147
128
  buildsDeploysMonthly: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
148
129
  analyticsRetentionDays: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
149
- cloudRulesPerSpace: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
150
130
  shareLinksPerSpace: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
151
131
  invitesPerSpace: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
152
132
  inviteEmailsPerSpaceDaily: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
153
133
  inviteEmailsPerAccountDaily: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
154
134
  pendingAccessRequestsPerSpace: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
155
- serviceTokensPerTeam: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
156
- connectionsPerTeam: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
157
- teamDefaultRules: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"unlimited">]>;
158
135
  }, z.core.$strip>;
159
136
  }, z.core.$strip>;
160
137
  export type PlanDefinition = {
@@ -162,7 +139,6 @@ export type PlanDefinition = {
162
139
  name: string;
163
140
  monthlyPriceUsd: number | null;
164
141
  limits: PlanLimits;
165
- headersBasicAuth: boolean;
166
142
  externalProxy: boolean;
167
143
  dedicatedRuntime: boolean;
168
144
  /** Paid full-page takeover templates under _pages/. */
@@ -275,26 +251,6 @@ export declare const FEATURE_DEFINITIONS: Readonly<{
275
251
  readonly enabledForA8c: boolean;
276
252
  readonly planDefaults: Readonly<Partial<Record<PlanCode, boolean>>>;
277
253
  };
278
- readonly "collab.comments": {
279
- readonly key: "collab.comments";
280
- readonly name: string;
281
- readonly description: string;
282
- readonly defaultEnabled: boolean;
283
- } & {
284
- readonly enabledInDevelopment?: boolean;
285
- readonly enabledForA8c: boolean;
286
- readonly planDefaults: Readonly<Partial<Record<PlanCode, boolean>>>;
287
- };
288
- readonly "collab.anonymous_commenters": {
289
- readonly key: "collab.anonymous_commenters";
290
- readonly name: string;
291
- readonly description: string;
292
- readonly defaultEnabled: boolean;
293
- } & {
294
- readonly enabledInDevelopment?: boolean;
295
- readonly enabledForA8c: boolean;
296
- readonly planDefaults: Readonly<Partial<Record<PlanCode, boolean>>>;
297
- };
298
254
  readonly "collab.notices": {
299
255
  readonly key: "collab.notices";
300
256
  readonly name: string;
@@ -305,16 +261,6 @@ export declare const FEATURE_DEFINITIONS: Readonly<{
305
261
  readonly enabledForA8c: boolean;
306
262
  readonly planDefaults: Readonly<Partial<Record<PlanCode, boolean>>>;
307
263
  };
308
- readonly "collab.published_comments": {
309
- readonly key: "collab.published_comments";
310
- readonly name: string;
311
- readonly description: string;
312
- readonly defaultEnabled: boolean;
313
- } & {
314
- readonly enabledInDevelopment?: boolean;
315
- readonly enabledForA8c: boolean;
316
- readonly planDefaults: Readonly<Partial<Record<PlanCode, boolean>>>;
317
- };
318
264
  readonly "collab.drawing": {
319
265
  readonly key: "collab.drawing";
320
266
  readonly name: string;
@@ -355,38 +301,8 @@ export declare const FEATURE_DEFINITIONS: Readonly<{
355
301
  readonly enabledForA8c: boolean;
356
302
  readonly planDefaults: Readonly<Partial<Record<PlanCode, boolean>>>;
357
303
  };
358
- readonly "access.invites": {
359
- readonly key: "access.invites";
360
- readonly name: string;
361
- readonly description: string;
362
- readonly defaultEnabled: boolean;
363
- } & {
364
- readonly enabledInDevelopment?: boolean;
365
- readonly enabledForA8c: boolean;
366
- readonly planDefaults: Readonly<Partial<Record<PlanCode, boolean>>>;
367
- };
368
- readonly "access.firewall_card": {
369
- readonly key: "access.firewall_card";
370
- readonly name: string;
371
- readonly description: string;
372
- readonly defaultEnabled: boolean;
373
- } & {
374
- readonly enabledInDevelopment?: boolean;
375
- readonly enabledForA8c: boolean;
376
- readonly planDefaults: Readonly<Partial<Record<PlanCode, boolean>>>;
377
- };
378
- readonly "access.sso_connections": {
379
- readonly key: "access.sso_connections";
380
- readonly name: string;
381
- readonly description: string;
382
- readonly defaultEnabled: boolean;
383
- } & {
384
- readonly enabledInDevelopment?: boolean;
385
- readonly enabledForA8c: boolean;
386
- readonly planDefaults: Readonly<Partial<Record<PlanCode, boolean>>>;
387
- };
388
- readonly "access.byo_issuers": {
389
- readonly key: "access.byo_issuers";
304
+ readonly functions: {
305
+ readonly key: "functions";
390
306
  readonly name: string;
391
307
  readonly description: string;
392
308
  readonly defaultEnabled: boolean;
@@ -395,8 +311,8 @@ export declare const FEATURE_DEFINITIONS: Readonly<{
395
311
  readonly enabledForA8c: boolean;
396
312
  readonly planDefaults: Readonly<Partial<Record<PlanCode, boolean>>>;
397
313
  };
398
- readonly "access.views_panel": {
399
- readonly key: "access.views_panel";
314
+ readonly "spaces.slug_rename": {
315
+ readonly key: "spaces.slug_rename";
400
316
  readonly name: string;
401
317
  readonly description: string;
402
318
  readonly defaultEnabled: boolean;
@@ -424,19 +340,13 @@ export declare const FeatureStateSchema: z.ZodObject<{
424
340
  "domains.wpcom_dns": "domains.wpcom_dns";
425
341
  "domains.domain_connect": "domains.domain_connect";
426
342
  "domains.proxy_bindings": "domains.proxy_bindings";
427
- "collab.comments": "collab.comments";
428
- "collab.anonymous_commenters": "collab.anonymous_commenters";
429
343
  "collab.notices": "collab.notices";
430
- "collab.published_comments": "collab.published_comments";
431
344
  "collab.drawing": "collab.drawing";
432
345
  "sites.dedicated_runtime": "sites.dedicated_runtime";
433
346
  shelf: "shelf";
434
347
  tags: "tags";
435
- "access.invites": "access.invites";
436
- "access.firewall_card": "access.firewall_card";
437
- "access.sso_connections": "access.sso_connections";
438
- "access.byo_issuers": "access.byo_issuers";
439
- "access.views_panel": "access.views_panel";
348
+ functions: "functions";
349
+ "spaces.slug_rename": "spaces.slug_rename";
440
350
  }>;
441
351
  enabled: z.ZodBoolean;
442
352
  source: z.ZodEnum<{
@@ -465,19 +375,13 @@ export declare const FeatureStateResponseSchema: z.ZodObject<{
465
375
  "domains.wpcom_dns": "domains.wpcom_dns";
466
376
  "domains.domain_connect": "domains.domain_connect";
467
377
  "domains.proxy_bindings": "domains.proxy_bindings";
468
- "collab.comments": "collab.comments";
469
- "collab.anonymous_commenters": "collab.anonymous_commenters";
470
378
  "collab.notices": "collab.notices";
471
- "collab.published_comments": "collab.published_comments";
472
379
  "collab.drawing": "collab.drawing";
473
380
  "sites.dedicated_runtime": "sites.dedicated_runtime";
474
381
  shelf: "shelf";
475
382
  tags: "tags";
476
- "access.invites": "access.invites";
477
- "access.firewall_card": "access.firewall_card";
478
- "access.sso_connections": "access.sso_connections";
479
- "access.byo_issuers": "access.byo_issuers";
480
- "access.views_panel": "access.views_panel";
383
+ functions: "functions";
384
+ "spaces.slug_rename": "spaces.slug_rename";
481
385
  }>, z.ZodObject<{
482
386
  key: z.ZodEnum<{
483
387
  zero: "zero";
@@ -490,19 +394,13 @@ export declare const FeatureStateResponseSchema: z.ZodObject<{
490
394
  "domains.wpcom_dns": "domains.wpcom_dns";
491
395
  "domains.domain_connect": "domains.domain_connect";
492
396
  "domains.proxy_bindings": "domains.proxy_bindings";
493
- "collab.comments": "collab.comments";
494
- "collab.anonymous_commenters": "collab.anonymous_commenters";
495
397
  "collab.notices": "collab.notices";
496
- "collab.published_comments": "collab.published_comments";
497
398
  "collab.drawing": "collab.drawing";
498
399
  "sites.dedicated_runtime": "sites.dedicated_runtime";
499
400
  shelf: "shelf";
500
401
  tags: "tags";
501
- "access.invites": "access.invites";
502
- "access.firewall_card": "access.firewall_card";
503
- "access.sso_connections": "access.sso_connections";
504
- "access.byo_issuers": "access.byo_issuers";
505
- "access.views_panel": "access.views_panel";
402
+ functions: "functions";
403
+ "spaces.slug_rename": "spaces.slug_rename";
506
404
  }>;
507
405
  enabled: z.ZodBoolean;
508
406
  source: z.ZodEnum<{