@spacefast/common 0.0.12 → 0.0.13

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 (113) hide show
  1. package/dist/contracts/access.d.ts +386 -1201
  2. package/dist/contracts/access.js +240 -1057
  3. package/dist/contracts/activity.d.ts +1 -1
  4. package/dist/contracts/activity.js +6 -14
  5. package/dist/contracts/api-keys.d.ts +16 -0
  6. package/dist/contracts/api-keys.js +2 -0
  7. package/dist/contracts/archives.d.ts +1 -2
  8. package/dist/contracts/archives.js +4 -6
  9. package/dist/contracts/comments.d.ts +58 -85
  10. package/dist/contracts/comments.js +86 -67
  11. package/dist/contracts/countries.js +2 -7
  12. package/dist/contracts/data-source-routes.d.ts +20 -0
  13. package/dist/contracts/data-source-routes.js +15 -0
  14. package/dist/contracts/device-auth.d.ts +7 -3
  15. package/dist/contracts/enums.d.ts +2 -4
  16. package/dist/contracts/enums.js +3 -8
  17. package/dist/contracts/error-code-meta.d.ts +17 -20
  18. package/dist/contracts/error-code-meta.js +8 -5
  19. package/dist/contracts/error-codes.d.ts +1 -1
  20. package/dist/contracts/error-codes.js +4 -5
  21. package/dist/contracts/events.d.ts +13 -13
  22. package/dist/contracts/execution.d.ts +212 -0
  23. package/dist/contracts/execution.js +288 -0
  24. package/dist/contracts/feature-lifecycle.d.ts +21 -167
  25. package/dist/contracts/feature-lifecycle.js +27 -173
  26. package/dist/contracts/features.d.ts +13 -115
  27. package/dist/contracts/features.js +1 -31
  28. package/dist/contracts/functions.d.ts +729 -0
  29. package/dist/contracts/functions.js +485 -0
  30. package/dist/contracts/git.d.ts +1 -1
  31. package/dist/contracts/grants.d.ts +1158 -0
  32. package/dist/contracts/grants.js +696 -0
  33. package/dist/contracts/ids.d.ts +5 -3
  34. package/dist/contracts/ids.js +5 -3
  35. package/dist/contracts/mcp.d.ts +6 -6
  36. package/dist/contracts/oauth-resources.d.ts +5 -5
  37. package/dist/contracts/oauth-resources.js +1 -0
  38. package/dist/contracts/operations.d.ts +2 -2
  39. package/dist/contracts/pages.d.ts +6 -14
  40. package/dist/contracts/pages.js +6 -23
  41. package/dist/contracts/plan-policy.d.ts +1 -8
  42. package/dist/contracts/plan-policy.js +1 -4
  43. package/dist/contracts/platform.d.ts +78 -30
  44. package/dist/contracts/platform.js +59 -12
  45. package/dist/contracts/push-new.d.ts +26 -2
  46. package/dist/contracts/push-new.js +8 -0
  47. package/dist/contracts/quotas.d.ts +0 -1
  48. package/dist/contracts/quotas.js +0 -5
  49. package/dist/contracts/repository-connections.d.ts +1 -1
  50. package/dist/contracts/resources.d.ts +10 -66
  51. package/dist/contracts/resources.js +4 -10
  52. package/dist/contracts/runtime-api.d.ts +558 -265
  53. package/dist/contracts/runtime-api.js +178 -91
  54. package/dist/contracts/runtime-app.d.ts +138 -0
  55. package/dist/contracts/runtime-app.js +21 -0
  56. package/dist/contracts/sf-config-v1.d.ts +5 -0
  57. package/dist/contracts/sites.d.ts +5 -0
  58. package/dist/contracts/sites.js +12 -1
  59. package/dist/contracts/space-config.d.ts +46 -116
  60. package/dist/contracts/space-config.js +320 -24
  61. package/dist/contracts/spaces.d.ts +253 -158
  62. package/dist/contracts/spaces.js +68 -54
  63. package/dist/contracts/superadmin-emails.d.ts +2 -2
  64. package/dist/contracts/superadmin-spaces.d.ts +15 -130
  65. package/dist/contracts/superadmin-spaces.js +7 -0
  66. package/dist/contracts/tags.d.ts +23 -23
  67. package/dist/contracts/teams.d.ts +9 -9
  68. package/dist/contracts/transfers.d.ts +0 -1
  69. package/dist/contracts/zero.d.ts +195 -273
  70. package/dist/contracts/zero.js +78 -206
  71. package/dist/dashboard-paths/index.d.ts +2 -2
  72. package/dist/dashboard-paths/index.js +1 -0
  73. package/dist/docs/agent-prose.js +10 -8
  74. package/dist/docs/agent-setup.d.ts +2 -2
  75. package/dist/docs/agent-setup.js +11 -9
  76. package/dist/docs/agent-solutions.js +1 -1
  77. package/dist/docs/catalog.d.ts +28 -28
  78. package/dist/docs/catalog.js +29 -29
  79. package/dist/docs/error-docs.js +23 -27
  80. package/dist/utils/asset-fingerprint.d.ts +11 -0
  81. package/dist/utils/asset-fingerprint.js +46 -0
  82. package/dist/utils/auth-redirect.d.ts +1 -3
  83. package/dist/utils/auth-redirect.js +1 -21
  84. package/dist/utils/build-settings.d.ts +2 -0
  85. package/dist/utils/build-settings.js +61 -9
  86. package/dist/utils/credential-policy.d.ts +1 -1
  87. package/dist/utils/credential-policy.js +4 -0
  88. package/dist/utils/egress-policy.fixtures.json +1 -1
  89. package/dist/utils/grants.d.ts +53 -0
  90. package/dist/utils/grants.js +160 -0
  91. package/dist/utils/local-space-state.js +1 -0
  92. package/dist/utils/pages.d.ts +11 -5
  93. package/dist/utils/pages.js +19 -32
  94. package/dist/utils/publish-policy.d.ts +34 -4
  95. package/dist/utils/publish-policy.js +132 -61
  96. package/dist/utils/query-keys.d.ts +1 -6
  97. package/dist/utils/query-keys.js +1 -6
  98. package/dist/utils/space-config.d.ts +5 -1
  99. package/dist/utils/space-config.js +35 -0
  100. package/dist/utils/static-runtime-policy.d.ts +5 -0
  101. package/dist/utils/static-runtime-policy.js +54 -10
  102. package/dist/utils/upload-session.d.ts +3 -0
  103. package/dist/utils/upload-session.js +31 -0
  104. package/package.json +2 -1
  105. package/dist/utils/access-grant.d.ts +0 -14
  106. package/dist/utils/access-grant.js +0 -88
  107. package/dist/utils/access-match.d.ts +0 -46
  108. package/dist/utils/access-match.fixtures.json +0 -513
  109. package/dist/utils/access-match.js +0 -312
  110. package/dist/utils/access-verdict.fixtures.json +0 -421
  111. package/dist/utils/sf-config-v1.d.ts +0 -2
  112. package/dist/utils/sf-config-v1.fixtures.json +0 -9
  113. package/dist/utils/sf-config-v1.js +0 -551
@@ -261,45 +261,6 @@ declare const featureEntries: readonly [{
261
261
  readonly code: "proxy_binding_stop";
262
262
  readonly summary: "Deny new binds; discoverable authenticated read/detach plus service reconciliation continue.";
263
263
  };
264
- }, {
265
- readonly cohort: "launch";
266
- readonly key: "collab.comments";
267
- readonly name: "Comments";
268
- readonly description: "Enables Cast-backed comments on eligible immutable version URLs.";
269
- readonly stage: "ga";
270
- readonly surface: true;
271
- readonly defaultEnabled: true;
272
- readonly runtime: {
273
- readonly enabledInDevelopment: true;
274
- readonly enabledForA8c: true;
275
- readonly planDefaults: {};
276
- };
277
- readonly assignmentScopes: readonly ["user", "team", "global"];
278
- readonly docs: {
279
- readonly channel: "public";
280
- readonly slug: "/docs/collab";
281
- readonly feedbackUrl: null;
282
- };
283
- readonly owner: "team:collaboration";
284
- readonly requires: readonly [];
285
- readonly lifecycleAdoptedAt: "2026-07-12";
286
- readonly reviewAfter: "2026-08-11";
287
- readonly removeAfter: "2026-10-10";
288
- readonly gaAt: "2026-07-23";
289
- readonly allowedActorPolicies: readonly ["request_actor", "persisted_request_actor", "resource_team"];
290
- readonly downRamp: {
291
- readonly code: "comments_stop";
292
- readonly summary: "Deny every customer comment read/write route and deferred task; internal operator export/cleanup continue.";
293
- };
294
- }, {
295
- readonly key: "collab.anonymous_commenters";
296
- readonly name: "Anonymous commenters";
297
- readonly description: "Allows anyone with the link to comment when space policy allows it.";
298
- readonly defaultEnabled: true;
299
- readonly runtime: {
300
- readonly enabledForA8c: true;
301
- readonly planDefaults: {};
302
- };
303
264
  }, {
304
265
  readonly cohort: "launch";
305
266
  readonly key: "collab.notices";
@@ -325,36 +286,6 @@ declare const featureEntries: readonly [{
325
286
  readonly code: "notices_stop";
326
287
  readonly summary: "Stop mint/publish; service/operator revoke and cleanup continue.";
327
288
  };
328
- }, {
329
- readonly cohort: "launch";
330
- readonly key: "collab.published_comments";
331
- readonly name: "Published host comments";
332
- readonly description: "Allows the Collab overlay to mount comments on a space's live/published host, not just immutable preview URLs.";
333
- readonly stage: "ga";
334
- readonly surface: true;
335
- readonly defaultEnabled: true;
336
- readonly runtime: {
337
- readonly enabledInDevelopment: true;
338
- readonly enabledForA8c: true;
339
- readonly planDefaults: {};
340
- };
341
- readonly assignmentScopes: readonly ["team", "global"];
342
- readonly docs: {
343
- readonly channel: "public";
344
- readonly slug: "/docs/collab/published-comments";
345
- readonly feedbackUrl: null;
346
- };
347
- readonly owner: "team:collaboration";
348
- readonly requires: readonly ["collab.comments"];
349
- readonly lifecycleAdoptedAt: "2026-07-12";
350
- readonly reviewAfter: "2026-08-11";
351
- readonly removeAfter: "2026-10-10";
352
- readonly gaAt: "2026-07-23";
353
- readonly allowedActorPolicies: readonly ["resource_team"];
354
- readonly downRamp: {
355
- readonly code: "published_comments_stop";
356
- readonly summary: "Stop published-host injection; stored data remains only for operator export/cleanup.";
357
- };
358
289
  }, {
359
290
  readonly key: "collab.drawing";
360
291
  readonly name: "Collab drawing";
@@ -495,127 +426,50 @@ declare const featureEntries: readonly [{
495
426
  };
496
427
  }, {
497
428
  readonly cohort: "launch";
498
- readonly key: "access.invites";
499
- readonly name: "Space invites";
500
- readonly description: "Enables account-less viewer invites with magic-link accept and the request-access loop (access-plan §5.3/§5.4).";
501
- readonly stage: "internal";
502
- readonly surface: true;
503
- readonly defaultEnabled: false;
504
- readonly runtime: {
505
- readonly enabledInDevelopment: true;
506
- readonly enabledForA8c: true;
507
- readonly planDefaults: {};
508
- };
509
- readonly assignmentScopes: readonly ["user", "team", "global"];
510
- readonly docs: {
511
- readonly channel: "handbook";
512
- readonly slug: "/features/access/invites";
513
- readonly feedbackUrl: null;
514
- };
515
- readonly owner: "team:access";
516
- readonly requires: readonly [];
517
- readonly lifecycleAdoptedAt: "2026-07-12";
518
- readonly reviewAfter: "2026-08-11";
519
- readonly removeAfter: "2026-10-10";
520
- readonly gaAt: null;
521
- readonly allowedActorPolicies: readonly ["request_actor", "persisted_request_actor"];
522
- readonly downRamp: {
523
- readonly code: "invites_stop";
524
- readonly summary: "Deny every customer invite route and deferred delivery; internal operator cancel/revoke and service cleanup continue.";
525
- };
526
- }, {
527
- readonly key: "access.firewall_card";
528
- readonly name: "Firewall card";
529
- readonly description: "Enables the managed firewall block card (country/IP/bot rules) in space access settings (access-plan §5.6).";
530
- readonly defaultEnabled: true;
531
- readonly runtime: {
532
- readonly enabledInDevelopment: true;
533
- readonly enabledForA8c: true;
534
- readonly planDefaults: {};
535
- };
536
- }, {
537
- readonly cohort: "launch";
538
- readonly key: "access.sso_connections";
539
- readonly name: "Company SSO connections";
540
- readonly description: "Enables team-level OIDC connections minted at the authorize endpoint (access-plan §6.2, X-18).";
429
+ readonly key: "functions";
430
+ readonly name: "Spacefast Functions";
431
+ readonly description: string;
541
432
  readonly stage: "internal";
542
433
  readonly surface: true;
543
434
  readonly defaultEnabled: false;
544
435
  readonly runtime: {
545
- readonly enabledInDevelopment: true;
546
436
  readonly enabledForA8c: true;
547
437
  readonly planDefaults: {};
548
438
  };
549
- readonly assignmentScopes: readonly ["user", "team", "global"];
439
+ readonly assignmentScopes: readonly ["team", "global"];
550
440
  readonly docs: {
551
441
  readonly channel: "handbook";
552
- readonly slug: "/features/access/sso-connections";
442
+ readonly slug: "/features/functions";
553
443
  readonly feedbackUrl: null;
554
444
  };
555
- readonly owner: "team:access";
445
+ readonly owner: "team:zero";
556
446
  readonly requires: readonly [];
557
- readonly lifecycleAdoptedAt: "2026-07-12";
558
- readonly reviewAfter: "2026-08-11";
559
- readonly removeAfter: "2026-10-10";
447
+ readonly lifecycleAdoptedAt: "2026-07-27";
448
+ readonly reviewAfter: "2026-08-26";
449
+ readonly removeAfter: "2026-10-25";
560
450
  readonly gaAt: null;
561
- readonly allowedActorPolicies: readonly ["request_actor", "persisted_request_actor"];
451
+ readonly allowedActorPolicies: readonly ["resource_team"];
562
452
  readonly downRamp: {
563
- readonly code: "sso_connections_stop";
564
- readonly summary: "Deny every customer SSO connection route and callback; internal operator revoke/cleanup continue.";
453
+ readonly code: "functions_stop";
454
+ readonly summary: string;
565
455
  };
566
456
  }, {
567
457
  readonly cohort: "launch";
568
- readonly key: "access.byo_issuers";
569
- readonly name: "Bring-your-own issuers";
570
- readonly description: "Enables owner-held external token issuers with ext:-namespace binding (access-plan §6.3, X-19).";
571
- readonly stage: "internal";
458
+ readonly key: "spaces.slug_rename";
459
+ readonly name: "Space slug rename";
460
+ readonly description: "Renames a space and its managed hostname while retained former hostnames temporarily redirect to the current address.";
461
+ readonly stage: "ga";
572
462
  readonly surface: true;
573
- readonly defaultEnabled: false;
574
- readonly runtime: {
575
- readonly enabledInDevelopment: true;
576
- readonly enabledForA8c: true;
577
- readonly planDefaults: {};
578
- };
579
- readonly assignmentScopes: readonly ["user", "team", "global"];
580
- readonly docs: {
581
- readonly channel: "handbook";
582
- readonly slug: "/features/access/byo-issuers";
583
- readonly feedbackUrl: null;
584
- };
585
- readonly owner: "team:access";
586
- readonly requires: readonly [];
587
- readonly lifecycleAdoptedAt: "2026-07-12";
588
- readonly reviewAfter: "2026-08-11";
589
- readonly removeAfter: "2026-10-10";
590
- readonly gaAt: null;
591
- readonly allowedActorPolicies: readonly ["request_actor", "persisted_request_actor"];
592
- readonly downRamp: {
593
- readonly code: "byo_issuers_stop";
594
- readonly summary: "Deny every customer issuer route and callback; internal operator revoke/cleanup continue.";
595
- };
596
- }, {
597
- readonly key: "access.views_panel";
598
- readonly name: "Views panel";
599
- readonly description: "Enables the identified who-viewed-what panel riding the analytics tiers (access-plan §5.6b, X-28).";
600
463
  readonly defaultEnabled: true;
601
464
  readonly runtime: {
602
465
  readonly enabledInDevelopment: true;
603
466
  readonly enabledForA8c: true;
604
467
  readonly planDefaults: {};
605
468
  };
606
- }, {
607
- readonly cohort: "launch";
608
- readonly key: "spaces.slug_rename";
609
- readonly name: "Space slug rename";
610
- readonly description: "Changes mutable space identity metadata while the stable managed hostname and hostname rows remain unchanged.";
611
- readonly stage: "internal";
612
- readonly surface: true;
613
- readonly defaultEnabled: false;
614
- readonly runtime: null;
615
469
  readonly assignmentScopes: readonly ["user", "team", "global"];
616
470
  readonly docs: {
617
- readonly channel: "handbook";
618
- readonly slug: "/features/spaces/slug-rename";
471
+ readonly channel: "public";
472
+ readonly slug: "/docs/spaces/rename";
619
473
  readonly feedbackUrl: null;
620
474
  };
621
475
  readonly owner: "team:spaces";
@@ -623,11 +477,11 @@ declare const featureEntries: readonly [{
623
477
  readonly lifecycleAdoptedAt: "2026-07-12";
624
478
  readonly reviewAfter: "2026-08-11";
625
479
  readonly removeAfter: "2026-10-10";
626
- readonly gaAt: null;
480
+ readonly gaAt: "2026-07-27";
627
481
  readonly allowedActorPolicies: readonly ["request_actor"];
628
482
  readonly downRamp: {
629
483
  readonly code: "slug_rename_stop";
630
- readonly summary: "Deny every new stable-host slug rename; the atomic metadata write has no deferred feature continuation.";
484
+ readonly summary: "Deny new slug renames while already-committed hostname redirects and runtime convergence continue.";
631
485
  };
632
486
  }];
633
487
  type FeatureEntry = (typeof featureEntries)[number];
@@ -645,5 +499,5 @@ type RuntimeDefinitionRecord<K extends string> = {
645
499
  readonly [Key in K]: RuntimeFeatureDefinitionShape<Key>;
646
500
  };
647
501
  export declare const FEATURE_RUNTIME_KEYS: readonly RuntimeFeatureKey[];
648
- 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.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">>;
502
+ 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">>;
649
503
  export declare const FEATURE_LIFECYCLE_BY_KEY: ReadonlyMap<LifecycleFeatureKey, FeatureRegistryEntry<LifecycleFeatureKey>>;
@@ -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",
@@ -505,132 +433,58 @@ 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).",
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.",
511
440
  stage: "internal",
512
441
  surface: true,
513
442
  defaultEnabled: false,
514
443
  runtime: {
515
- enabledInDevelopment: true,
516
444
  enabledForA8c: true,
517
445
  planDefaults: {},
518
446
  },
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",
554
- surface: true,
555
- defaultEnabled: false,
556
- runtime: {
557
- enabledInDevelopment: true,
558
- enabledForA8c: true,
559
- planDefaults: {},
560
- },
561
- assignmentScopes: ["user", "team", "global"],
447
+ assignmentScopes: ["team", "global"],
562
448
  docs: {
563
449
  channel: "handbook",
564
- slug: "/features/access/sso-connections",
450
+ slug: "/features/functions",
565
451
  feedbackUrl: null,
566
452
  },
567
- owner: "team:access",
453
+ owner: "team:zero",
454
+ // Deliberately no `sites.dedicated_runtime` requirement, unlike Zero: a
455
+ // worker executes on Cloudflare rather than on the space's box, and reaches
456
+ // the database only through the broker. Shared placement is safe here in a
457
+ // way it is not for a capsule.
568
458
  requires: [],
569
- lifecycleAdoptedAt: "2026-07-12",
570
- reviewAfter: "2026-08-11",
571
- removeAfter: "2026-10-10",
459
+ lifecycleAdoptedAt: "2026-07-27",
460
+ reviewAfter: "2026-08-26",
461
+ removeAfter: "2026-10-25",
572
462
  gaAt: null,
573
- allowedActorPolicies: ["request_actor", "persisted_request_actor"],
463
+ allowedActorPolicies: ["resource_team"],
574
464
  downRamp: {
575
- code: "sso_connections_stop",
576
- summary: "Deny every customer SSO connection route and callback; internal operator revoke/cleanup continue.",
465
+ code: "functions_stop",
466
+ summary: "Stop emitting dispatch configuration at finalize; published bundles stay on disk as inert content and the " +
467
+ "version serves statically. Versions already carrying a config keep dispatching until they are replaced — " +
468
+ "unsetting the runtime's dispatch token is the immediate kill.",
577
469
  },
578
470
  },
579
471
  {
580
472
  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",
473
+ key: "spaces.slug_rename",
474
+ name: "Space slug rename",
475
+ description: "Renames a space and its managed hostname while retained former hostnames temporarily redirect to the current address.",
476
+ stage: "ga",
585
477
  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
478
  defaultEnabled: true,
615
479
  runtime: {
616
480
  enabledInDevelopment: true,
617
481
  enabledForA8c: true,
618
482
  planDefaults: {},
619
483
  },
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
484
  assignmentScopes: ["user", "team", "global"],
631
485
  docs: {
632
- channel: "handbook",
633
- slug: "/features/spaces/slug-rename",
486
+ channel: "public",
487
+ slug: "/docs/spaces/rename",
634
488
  feedbackUrl: null,
635
489
  },
636
490
  owner: "team:spaces",
@@ -638,11 +492,11 @@ const featureEntries = Object.freeze([
638
492
  lifecycleAdoptedAt: "2026-07-12",
639
493
  reviewAfter: "2026-08-11",
640
494
  removeAfter: "2026-10-10",
641
- gaAt: null,
495
+ gaAt: "2026-07-27",
642
496
  allowedActorPolicies: ["request_actor"],
643
497
  downRamp: {
644
498
  code: "slug_rename_stop",
645
- summary: "Deny every new stable-host slug rename; the atomic metadata write has no deferred feature continuation.",
499
+ summary: "Deny new slug renames while already-committed hostname redirects and runtime convergence continue.",
646
500
  },
647
501
  },
648
502
  ]);