@spacefast/common 0.0.6 → 0.0.8
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.
- package/brand-assets/spacefast-favicon.svg +16 -0
- package/brand-assets/spacefast-sf-full-bleed.svg +13 -0
- package/brand-assets/spacefast-wordmark.svg +5 -0
- package/dist/agents/connect-targets.d.ts +6 -1
- package/dist/agents/connect-targets.js +19 -0
- package/dist/brand-assets-build.d.ts +26 -0
- package/dist/brand-assets-build.js +81 -0
- package/dist/brand-assets.d.ts +42 -0
- package/dist/brand-assets.js +30 -0
- package/dist/contracts/access.d.ts +143 -0
- package/dist/contracts/access.js +33 -0
- package/dist/contracts/api-keys.d.ts +123 -0
- package/dist/contracts/api-keys.js +65 -0
- package/dist/contracts/builds.d.ts +40 -0
- package/dist/contracts/builds.js +17 -0
- package/dist/contracts/enums.js +5 -4
- package/dist/contracts/error-code-meta.d.ts +116 -4
- package/dist/contracts/error-code-meta.js +29 -1
- package/dist/contracts/error-codes.d.ts +1 -1
- package/dist/contracts/error-codes.js +28 -0
- package/dist/contracts/feature-lifecycle-core.d.ts +36 -0
- package/dist/contracts/feature-lifecycle-core.js +220 -0
- package/dist/contracts/feature-lifecycle.d.ts +7 -0
- package/dist/contracts/feature-lifecycle.js +31 -0
- package/dist/contracts/generated-feature-launch-entries.d.ts +2 -0
- package/dist/contracts/generated-feature-launch-entries.js +518 -0
- package/dist/contracts/ids.d.ts +4 -0
- package/dist/contracts/ids.js +8 -0
- package/dist/contracts/operations.d.ts +161 -1
- package/dist/contracts/operations.js +49 -1
- package/dist/contracts/platform.d.ts +6 -0
- package/dist/contracts/platform.js +6 -0
- package/dist/contracts/publishes.d.ts +130 -0
- package/dist/contracts/publishes.js +145 -0
- package/dist/contracts/repository-connections.d.ts +3 -0
- package/dist/contracts/repository-connections.js +13 -0
- package/dist/contracts/resources.d.ts +2 -0
- package/dist/contracts/resources.js +10 -2
- package/dist/contracts/runtime-api.d.ts +2 -0
- package/dist/contracts/runtime-api.js +1 -0
- package/dist/contracts/sf-config-v1.d.ts +75 -0
- package/dist/contracts/sf-config-v1.js +6 -0
- package/dist/contracts/spaces.d.ts +12 -3
- package/dist/contracts/spaces.js +22 -2
- package/dist/contracts/superadmin-spaces.d.ts +2 -0
- package/dist/contracts/superadmin-tenants.d.ts +6 -6
- package/dist/contracts/superadmin-tenants.js +6 -11
- package/dist/contracts/teams.d.ts +8 -11
- package/dist/contracts/teams.js +11 -16
- package/dist/docs/agent-setup.d.ts +51 -0
- package/dist/docs/agent-setup.js +168 -3
- package/dist/docs/error-docs.js +113 -1
- package/dist/slug-policy/blocklist.d.ts +4 -0
- package/dist/slug-policy/blocklist.js +122 -0
- package/dist/slug-policy/index.d.ts +17 -0
- package/dist/slug-policy/index.js +86 -0
- package/dist/utils/concurrency.d.ts +1 -0
- package/dist/utils/concurrency.js +22 -0
- package/dist/utils/email.d.ts +1 -0
- package/dist/utils/email.js +3 -0
- package/dist/utils/query-keys.d.ts +1 -0
- package/dist/utils/query-keys.js +4 -0
- package/dist/utils/sf-config-v1.d.ts +2 -0
- package/dist/utils/sf-config-v1.js +542 -0
- package/package.json +20 -1
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
// Generated from feature-launch-fixture.json. Do not edit.
|
|
2
|
+
// Regenerate with: cd packages/common && bun run generate:launch-entries
|
|
3
|
+
import { freezeFeatureRegistryEntry } from "./feature-lifecycle-core.js";
|
|
4
|
+
export const launchEntries = Object.freeze([
|
|
5
|
+
{
|
|
6
|
+
cohort: "launch",
|
|
7
|
+
key: "plans.paid.available",
|
|
8
|
+
name: "Paid acquisition",
|
|
9
|
+
description: "Controls new paid-plan acquisition; cancellation, portal and reconciliation are independent.",
|
|
10
|
+
stage: "internal",
|
|
11
|
+
surface: false,
|
|
12
|
+
defaultEnabled: false,
|
|
13
|
+
assignmentScopes: ["team", "global"],
|
|
14
|
+
docs: null,
|
|
15
|
+
owner: "team:commerce",
|
|
16
|
+
requires: [],
|
|
17
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
18
|
+
reviewAfter: "2026-08-11",
|
|
19
|
+
removeAfter: null,
|
|
20
|
+
gaAt: null,
|
|
21
|
+
allowedActorPolicies: ["request_actor"],
|
|
22
|
+
downRamp: {
|
|
23
|
+
code: "paid_acquisition_stop",
|
|
24
|
+
summary: "Deny new acquisition; allow cancel, portal, provider reconciliation and purchase recovery.",
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
cohort: "launch",
|
|
29
|
+
key: "anonymous.publishing",
|
|
30
|
+
name: "Anonymous publishing",
|
|
31
|
+
description: "Allows unauthenticated creation and publishing.",
|
|
32
|
+
stage: "ga",
|
|
33
|
+
surface: true,
|
|
34
|
+
defaultEnabled: true,
|
|
35
|
+
assignmentScopes: ["global"],
|
|
36
|
+
docs: {
|
|
37
|
+
channel: "public",
|
|
38
|
+
slug: "/docs/publishing/anonymous",
|
|
39
|
+
feedbackUrl: null,
|
|
40
|
+
},
|
|
41
|
+
owner: "team:publishing",
|
|
42
|
+
requires: [],
|
|
43
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
44
|
+
reviewAfter: "2026-07-26",
|
|
45
|
+
removeAfter: "2026-08-11",
|
|
46
|
+
gaAt: "2026-07-12",
|
|
47
|
+
allowedActorPolicies: ["request_actor", "global_policy"],
|
|
48
|
+
downRamp: {
|
|
49
|
+
code: "anonymous_publish_stop",
|
|
50
|
+
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.",
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
cohort: "launch",
|
|
55
|
+
key: "domains.catalog",
|
|
56
|
+
name: "Domain catalog",
|
|
57
|
+
description: "Controls authenticated domain product/catalog operations; public suggestions, availability and WHOIS remain unflagged.",
|
|
58
|
+
stage: "internal",
|
|
59
|
+
surface: true,
|
|
60
|
+
defaultEnabled: false,
|
|
61
|
+
assignmentScopes: ["user", "team", "global"],
|
|
62
|
+
docs: {
|
|
63
|
+
channel: "handbook",
|
|
64
|
+
slug: "/features/domains/catalog",
|
|
65
|
+
feedbackUrl: null,
|
|
66
|
+
},
|
|
67
|
+
owner: "team:domains",
|
|
68
|
+
requires: [],
|
|
69
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
70
|
+
reviewAfter: "2026-08-11",
|
|
71
|
+
removeAfter: "2026-10-10",
|
|
72
|
+
gaAt: null,
|
|
73
|
+
allowedActorPolicies: ["request_actor"],
|
|
74
|
+
downRamp: {
|
|
75
|
+
code: "domain_catalog_hide",
|
|
76
|
+
summary: "Hide authenticated catalog; public suggestions, availability and WHOIS remain.",
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
cohort: "launch",
|
|
81
|
+
key: "domains.registration",
|
|
82
|
+
name: "Domain registration",
|
|
83
|
+
description: "Controls registration status, purchase, renewal, transfer-in and registration settings.",
|
|
84
|
+
stage: "internal",
|
|
85
|
+
surface: true,
|
|
86
|
+
defaultEnabled: false,
|
|
87
|
+
assignmentScopes: ["user", "team", "global"],
|
|
88
|
+
docs: {
|
|
89
|
+
channel: "handbook",
|
|
90
|
+
slug: "/features/domains/registration",
|
|
91
|
+
feedbackUrl: null,
|
|
92
|
+
},
|
|
93
|
+
owner: "team:domains",
|
|
94
|
+
requires: [],
|
|
95
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
96
|
+
reviewAfter: "2026-08-11",
|
|
97
|
+
removeAfter: "2026-10-10",
|
|
98
|
+
gaAt: null,
|
|
99
|
+
allowedActorPolicies: ["request_actor", "persisted_request_actor"],
|
|
100
|
+
downRamp: {
|
|
101
|
+
code: "domain_registration_stop",
|
|
102
|
+
summary: "Deny new customer mutations and unstarted provider submits; generic existing-domain read plus service-only reconciliation/compensation for externally committed work continue.",
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
cohort: "launch",
|
|
107
|
+
key: "domains.dns_management",
|
|
108
|
+
name: "DNS management",
|
|
109
|
+
description: "Controls customer DNS zones, nameservers and records.",
|
|
110
|
+
stage: "internal",
|
|
111
|
+
surface: true,
|
|
112
|
+
defaultEnabled: false,
|
|
113
|
+
assignmentScopes: ["user", "team", "global"],
|
|
114
|
+
docs: {
|
|
115
|
+
channel: "handbook",
|
|
116
|
+
slug: "/features/domains/dns-management",
|
|
117
|
+
feedbackUrl: null,
|
|
118
|
+
},
|
|
119
|
+
owner: "team:domains",
|
|
120
|
+
requires: [],
|
|
121
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
122
|
+
reviewAfter: "2026-08-11",
|
|
123
|
+
removeAfter: "2026-10-10",
|
|
124
|
+
gaAt: null,
|
|
125
|
+
allowedActorPolicies: ["request_actor", "persisted_request_actor"],
|
|
126
|
+
downRamp: {
|
|
127
|
+
code: "dns_management_stop",
|
|
128
|
+
summary: "Deny customer mutation and unstarted provider apply; generic authoritative read plus service-only rollback/reconciliation for externally committed work continue.",
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
cohort: "launch",
|
|
133
|
+
key: "domains.wpcom_dns",
|
|
134
|
+
name: "WordPress.com DNS automation",
|
|
135
|
+
description: "Controls WordPress.com-owned DNS automation.",
|
|
136
|
+
stage: "internal",
|
|
137
|
+
surface: true,
|
|
138
|
+
defaultEnabled: false,
|
|
139
|
+
assignmentScopes: ["team", "global"],
|
|
140
|
+
docs: {
|
|
141
|
+
channel: "handbook",
|
|
142
|
+
slug: "/features/domains/wpcom-dns",
|
|
143
|
+
feedbackUrl: null,
|
|
144
|
+
},
|
|
145
|
+
owner: "team:domains",
|
|
146
|
+
requires: [],
|
|
147
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
148
|
+
reviewAfter: "2026-08-11",
|
|
149
|
+
removeAfter: "2026-10-10",
|
|
150
|
+
gaAt: null,
|
|
151
|
+
allowedActorPolicies: ["request_actor"],
|
|
152
|
+
downRamp: {
|
|
153
|
+
code: "wpcom_dns_stop",
|
|
154
|
+
summary: "Deny new automation; service/operator detach and reconciliation continue.",
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
cohort: "launch",
|
|
159
|
+
key: "domains.domain_connect",
|
|
160
|
+
name: "Domain Connect",
|
|
161
|
+
description: "Controls one-click Domain Connect DNS setup.",
|
|
162
|
+
stage: "internal",
|
|
163
|
+
surface: true,
|
|
164
|
+
defaultEnabled: false,
|
|
165
|
+
assignmentScopes: ["user", "team", "global"],
|
|
166
|
+
docs: {
|
|
167
|
+
channel: "handbook",
|
|
168
|
+
slug: "/features/domains/domain-connect",
|
|
169
|
+
feedbackUrl: null,
|
|
170
|
+
},
|
|
171
|
+
owner: "team:domains",
|
|
172
|
+
requires: [],
|
|
173
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
174
|
+
reviewAfter: "2026-08-11",
|
|
175
|
+
removeAfter: "2026-10-10",
|
|
176
|
+
gaAt: null,
|
|
177
|
+
allowedActorPolicies: ["request_actor", "persisted_request_actor"],
|
|
178
|
+
downRamp: {
|
|
179
|
+
code: "domain_connect_stop",
|
|
180
|
+
summary: "Deny new setup and every uncommitted callback; after an authenticated external commit, narrowly typed service-only reconciliation or compensation continues idempotently.",
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
cohort: "launch",
|
|
185
|
+
key: "domains.proxy_bindings",
|
|
186
|
+
name: "Domain proxy bindings",
|
|
187
|
+
description: "Controls team proxy bindings to external upstreams.",
|
|
188
|
+
stage: "private_beta",
|
|
189
|
+
surface: true,
|
|
190
|
+
defaultEnabled: false,
|
|
191
|
+
assignmentScopes: ["team", "global"],
|
|
192
|
+
docs: {
|
|
193
|
+
channel: "public",
|
|
194
|
+
slug: "/docs/domains/proxy-bindings",
|
|
195
|
+
feedbackUrl: null,
|
|
196
|
+
},
|
|
197
|
+
owner: "team:domains",
|
|
198
|
+
requires: [],
|
|
199
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
200
|
+
reviewAfter: "2026-08-11",
|
|
201
|
+
removeAfter: "2026-10-10",
|
|
202
|
+
gaAt: null,
|
|
203
|
+
allowedActorPolicies: ["resource_team"],
|
|
204
|
+
downRamp: {
|
|
205
|
+
code: "proxy_binding_stop",
|
|
206
|
+
summary: "Deny new binds; discoverable authenticated read/detach plus service reconciliation continue.",
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
cohort: "launch",
|
|
211
|
+
key: "annotations.preview_loader",
|
|
212
|
+
name: "Collab preview loader",
|
|
213
|
+
description: "Controls preview loader/config delivery.",
|
|
214
|
+
stage: "private_beta",
|
|
215
|
+
surface: true,
|
|
216
|
+
defaultEnabled: false,
|
|
217
|
+
assignmentScopes: ["team", "global"],
|
|
218
|
+
docs: {
|
|
219
|
+
channel: "public",
|
|
220
|
+
slug: "/docs/collab/preview-loader",
|
|
221
|
+
feedbackUrl: null,
|
|
222
|
+
},
|
|
223
|
+
owner: "team:collaboration",
|
|
224
|
+
requires: [],
|
|
225
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
226
|
+
reviewAfter: "2026-08-11",
|
|
227
|
+
removeAfter: "2026-10-10",
|
|
228
|
+
gaAt: null,
|
|
229
|
+
allowedActorPolicies: ["resource_team"],
|
|
230
|
+
downRamp: {
|
|
231
|
+
code: "preview_loader_stop",
|
|
232
|
+
summary: "Stop new loader/config delivery; immutable preview data remains.",
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
cohort: "launch",
|
|
237
|
+
key: "annotations.comments",
|
|
238
|
+
name: "Collab comments",
|
|
239
|
+
description: "Controls comment, reply and collaboration operations.",
|
|
240
|
+
stage: "private_beta",
|
|
241
|
+
surface: true,
|
|
242
|
+
defaultEnabled: false,
|
|
243
|
+
assignmentScopes: ["user", "team", "global"],
|
|
244
|
+
docs: {
|
|
245
|
+
channel: "public",
|
|
246
|
+
slug: "/docs/collab",
|
|
247
|
+
feedbackUrl: null,
|
|
248
|
+
},
|
|
249
|
+
owner: "team:collaboration",
|
|
250
|
+
requires: [],
|
|
251
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
252
|
+
reviewAfter: "2026-08-11",
|
|
253
|
+
removeAfter: "2026-10-10",
|
|
254
|
+
gaAt: null,
|
|
255
|
+
allowedActorPolicies: ["request_actor", "persisted_request_actor", "resource_team"],
|
|
256
|
+
downRamp: {
|
|
257
|
+
code: "comments_stop",
|
|
258
|
+
summary: "Deny every customer comment read/write route and deferred task; internal operator export/cleanup continue.",
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
cohort: "launch",
|
|
263
|
+
key: "annotations.notices",
|
|
264
|
+
name: "Collab notices",
|
|
265
|
+
description: "Controls notice token minting, publishing and projection.",
|
|
266
|
+
stage: "internal",
|
|
267
|
+
surface: false,
|
|
268
|
+
defaultEnabled: false,
|
|
269
|
+
assignmentScopes: ["team", "global"],
|
|
270
|
+
docs: null,
|
|
271
|
+
owner: "team:collaboration",
|
|
272
|
+
requires: [],
|
|
273
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
274
|
+
reviewAfter: "2026-08-11",
|
|
275
|
+
removeAfter: null,
|
|
276
|
+
gaAt: null,
|
|
277
|
+
allowedActorPolicies: ["resource_team"],
|
|
278
|
+
downRamp: {
|
|
279
|
+
code: "notices_stop",
|
|
280
|
+
summary: "Stop mint/publish; service/operator revoke and cleanup continue.",
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
cohort: "launch",
|
|
285
|
+
key: "annotations.published_comments",
|
|
286
|
+
name: "Published-host Collab comments",
|
|
287
|
+
description: "Controls Collab comment overlay on published hosts.",
|
|
288
|
+
stage: "private_beta",
|
|
289
|
+
surface: true,
|
|
290
|
+
defaultEnabled: false,
|
|
291
|
+
assignmentScopes: ["team", "global"],
|
|
292
|
+
docs: {
|
|
293
|
+
channel: "public",
|
|
294
|
+
slug: "/docs/collab/published-comments",
|
|
295
|
+
feedbackUrl: null,
|
|
296
|
+
},
|
|
297
|
+
owner: "team:collaboration",
|
|
298
|
+
requires: ["annotations.comments"],
|
|
299
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
300
|
+
reviewAfter: "2026-08-11",
|
|
301
|
+
removeAfter: "2026-10-10",
|
|
302
|
+
gaAt: null,
|
|
303
|
+
allowedActorPolicies: ["resource_team"],
|
|
304
|
+
downRamp: {
|
|
305
|
+
code: "published_comments_stop",
|
|
306
|
+
summary: "Stop published-host injection; stored data remains only for operator export/cleanup.",
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
cohort: "launch",
|
|
311
|
+
key: "sites.dedicated_runtime",
|
|
312
|
+
name: "Dedicated runtime",
|
|
313
|
+
description: "Controls dedicated-site placement, management and gated serving.",
|
|
314
|
+
stage: "internal",
|
|
315
|
+
surface: true,
|
|
316
|
+
defaultEnabled: false,
|
|
317
|
+
assignmentScopes: ["team", "global"],
|
|
318
|
+
docs: {
|
|
319
|
+
channel: "handbook",
|
|
320
|
+
slug: "/features/sites/dedicated-runtime",
|
|
321
|
+
feedbackUrl: null,
|
|
322
|
+
},
|
|
323
|
+
owner: "team:runtime",
|
|
324
|
+
requires: [],
|
|
325
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
326
|
+
reviewAfter: "2026-08-11",
|
|
327
|
+
removeAfter: "2026-10-10",
|
|
328
|
+
gaAt: null,
|
|
329
|
+
allowedActorPolicies: ["request_actor", "resource_team"],
|
|
330
|
+
downRamp: {
|
|
331
|
+
code: "dedicated_runtime_stop",
|
|
332
|
+
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.",
|
|
333
|
+
},
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
cohort: "launch",
|
|
337
|
+
key: "build.content_pipeline",
|
|
338
|
+
name: "Content pipeline",
|
|
339
|
+
description: "Controls publish/finalize use of the content transformation pipeline.",
|
|
340
|
+
stage: "internal",
|
|
341
|
+
surface: true,
|
|
342
|
+
defaultEnabled: false,
|
|
343
|
+
assignmentScopes: ["team", "global"],
|
|
344
|
+
docs: {
|
|
345
|
+
channel: "handbook",
|
|
346
|
+
slug: "/features/build/content-pipeline",
|
|
347
|
+
feedbackUrl: null,
|
|
348
|
+
},
|
|
349
|
+
owner: "team:build-platform",
|
|
350
|
+
requires: [],
|
|
351
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
352
|
+
reviewAfter: "2026-08-11",
|
|
353
|
+
removeAfter: "2026-10-10",
|
|
354
|
+
gaAt: null,
|
|
355
|
+
allowedActorPolicies: ["resource_team"],
|
|
356
|
+
downRamp: {
|
|
357
|
+
code: "content_pipeline_stop",
|
|
358
|
+
summary: "Deny next build/finalize; completed immutable output remains.",
|
|
359
|
+
},
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
cohort: "launch",
|
|
363
|
+
key: "tags",
|
|
364
|
+
name: "Tag Manager",
|
|
365
|
+
description: "Controls Tag Manager APIs, surfaces and its module inside the shared SDK container.",
|
|
366
|
+
stage: "private_beta",
|
|
367
|
+
surface: true,
|
|
368
|
+
defaultEnabled: false,
|
|
369
|
+
assignmentScopes: ["team", "global"],
|
|
370
|
+
docs: {
|
|
371
|
+
channel: "public",
|
|
372
|
+
slug: "/docs/tags",
|
|
373
|
+
feedbackUrl: null,
|
|
374
|
+
},
|
|
375
|
+
owner: "team:tag-manager",
|
|
376
|
+
requires: [],
|
|
377
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
378
|
+
reviewAfter: "2026-08-11",
|
|
379
|
+
removeAfter: "2026-10-10",
|
|
380
|
+
gaAt: null,
|
|
381
|
+
allowedActorPolicies: ["request_actor", "resource_team"],
|
|
382
|
+
downRamp: {
|
|
383
|
+
code: "tags_stop",
|
|
384
|
+
summary: "Deny every customer Tag API and dynamic module delivery; internal operator export/cleanup and platform-generated inert marker bytes remain.",
|
|
385
|
+
},
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
cohort: "launch",
|
|
389
|
+
key: "zero",
|
|
390
|
+
name: "Zero",
|
|
391
|
+
description: "Controls Zero APIs, activation and dynamic invocation.",
|
|
392
|
+
stage: "internal",
|
|
393
|
+
surface: true,
|
|
394
|
+
defaultEnabled: false,
|
|
395
|
+
assignmentScopes: ["team", "global"],
|
|
396
|
+
docs: {
|
|
397
|
+
channel: "handbook",
|
|
398
|
+
slug: "/features/zero",
|
|
399
|
+
feedbackUrl: null,
|
|
400
|
+
},
|
|
401
|
+
owner: "team:zero",
|
|
402
|
+
requires: ["sites.dedicated_runtime"],
|
|
403
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
404
|
+
reviewAfter: "2026-08-11",
|
|
405
|
+
removeAfter: "2026-10-10",
|
|
406
|
+
gaAt: null,
|
|
407
|
+
allowedActorPolicies: ["resource_team"],
|
|
408
|
+
downRamp: {
|
|
409
|
+
code: "zero_stop",
|
|
410
|
+
summary: "Stop activation/invocation; operator export/delete/migration recovery remain.",
|
|
411
|
+
},
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
cohort: "launch",
|
|
415
|
+
key: "access.invites",
|
|
416
|
+
name: "Access invites",
|
|
417
|
+
description: "Controls account-less viewer invitation workflows.",
|
|
418
|
+
stage: "internal",
|
|
419
|
+
surface: true,
|
|
420
|
+
defaultEnabled: false,
|
|
421
|
+
assignmentScopes: ["user", "team", "global"],
|
|
422
|
+
docs: {
|
|
423
|
+
channel: "handbook",
|
|
424
|
+
slug: "/features/access/invites",
|
|
425
|
+
feedbackUrl: null,
|
|
426
|
+
},
|
|
427
|
+
owner: "team:access",
|
|
428
|
+
requires: [],
|
|
429
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
430
|
+
reviewAfter: "2026-08-11",
|
|
431
|
+
removeAfter: "2026-10-10",
|
|
432
|
+
gaAt: null,
|
|
433
|
+
allowedActorPolicies: ["request_actor", "persisted_request_actor"],
|
|
434
|
+
downRamp: {
|
|
435
|
+
code: "invites_stop",
|
|
436
|
+
summary: "Deny every customer invite route and deferred delivery; internal operator cancel/revoke and service cleanup continue.",
|
|
437
|
+
},
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
cohort: "launch",
|
|
441
|
+
key: "access.sso_connections",
|
|
442
|
+
name: "SSO connections",
|
|
443
|
+
description: "Controls team OIDC connection creation and update.",
|
|
444
|
+
stage: "internal",
|
|
445
|
+
surface: true,
|
|
446
|
+
defaultEnabled: false,
|
|
447
|
+
assignmentScopes: ["user", "team", "global"],
|
|
448
|
+
docs: {
|
|
449
|
+
channel: "handbook",
|
|
450
|
+
slug: "/features/access/sso-connections",
|
|
451
|
+
feedbackUrl: null,
|
|
452
|
+
},
|
|
453
|
+
owner: "team:access",
|
|
454
|
+
requires: [],
|
|
455
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
456
|
+
reviewAfter: "2026-08-11",
|
|
457
|
+
removeAfter: "2026-10-10",
|
|
458
|
+
gaAt: null,
|
|
459
|
+
allowedActorPolicies: ["request_actor", "persisted_request_actor"],
|
|
460
|
+
downRamp: {
|
|
461
|
+
code: "sso_connections_stop",
|
|
462
|
+
summary: "Deny every customer SSO connection route and callback; internal operator revoke/cleanup continue.",
|
|
463
|
+
},
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
cohort: "launch",
|
|
467
|
+
key: "access.byo_issuers",
|
|
468
|
+
name: "Bring-your-own issuers",
|
|
469
|
+
description: "Controls owner-held external token issuer creation and update.",
|
|
470
|
+
stage: "internal",
|
|
471
|
+
surface: true,
|
|
472
|
+
defaultEnabled: false,
|
|
473
|
+
assignmentScopes: ["user", "team", "global"],
|
|
474
|
+
docs: {
|
|
475
|
+
channel: "handbook",
|
|
476
|
+
slug: "/features/access/byo-issuers",
|
|
477
|
+
feedbackUrl: null,
|
|
478
|
+
},
|
|
479
|
+
owner: "team:access",
|
|
480
|
+
requires: [],
|
|
481
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
482
|
+
reviewAfter: "2026-08-11",
|
|
483
|
+
removeAfter: "2026-10-10",
|
|
484
|
+
gaAt: null,
|
|
485
|
+
allowedActorPolicies: ["request_actor", "persisted_request_actor"],
|
|
486
|
+
downRamp: {
|
|
487
|
+
code: "byo_issuers_stop",
|
|
488
|
+
summary: "Deny every customer issuer route and callback; internal operator revoke/cleanup continue.",
|
|
489
|
+
},
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
cohort: "launch",
|
|
493
|
+
key: "spaces.slug_rename",
|
|
494
|
+
name: "Space slug rename",
|
|
495
|
+
description: "Changes mutable space identity metadata while the stable managed hostname and hostname rows remain unchanged.",
|
|
496
|
+
stage: "internal",
|
|
497
|
+
surface: true,
|
|
498
|
+
defaultEnabled: false,
|
|
499
|
+
assignmentScopes: ["user", "team", "global"],
|
|
500
|
+
docs: {
|
|
501
|
+
channel: "handbook",
|
|
502
|
+
slug: "/features/spaces/slug-rename",
|
|
503
|
+
feedbackUrl: null,
|
|
504
|
+
},
|
|
505
|
+
owner: "team:spaces",
|
|
506
|
+
requires: [],
|
|
507
|
+
lifecycleAdoptedAt: "2026-07-12",
|
|
508
|
+
reviewAfter: "2026-08-11",
|
|
509
|
+
removeAfter: "2026-10-10",
|
|
510
|
+
gaAt: null,
|
|
511
|
+
allowedActorPolicies: ["request_actor"],
|
|
512
|
+
downRamp: {
|
|
513
|
+
code: "slug_rename_stop",
|
|
514
|
+
summary: "Deny every new stable-host slug rename; the atomic metadata write has no deferred feature continuation.",
|
|
515
|
+
},
|
|
516
|
+
},
|
|
517
|
+
].map((definition) => freezeFeatureRegistryEntry(definition)));
|
|
518
|
+
export const registryHash = "sha256:bb171bdc1b4815eae685a2c97c5ab5042faf5b1fa0a99ad9ac4406d14210381d";
|
package/dist/contracts/ids.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
export declare const ID_PREFIXES: {
|
|
2
3
|
readonly ten: "Tenant";
|
|
3
4
|
readonly site: "Site";
|
|
@@ -15,6 +16,7 @@ export declare const ID_PREFIXES: {
|
|
|
15
16
|
readonly exp: "SpaceExport";
|
|
16
17
|
readonly trf: "SpaceTransfer";
|
|
17
18
|
readonly op: "Operation";
|
|
19
|
+
readonly pub: "Publish";
|
|
18
20
|
readonly whk: "Webhook";
|
|
19
21
|
readonly whd: "WebhookDelivery";
|
|
20
22
|
readonly rec: "DnsRecord";
|
|
@@ -35,6 +37,8 @@ export declare const ID_PREFIXES: {
|
|
|
35
37
|
export type IdPrefix = keyof typeof ID_PREFIXES;
|
|
36
38
|
/** Any registered public resource id, e.g. `spc_…` or `ver_…`. */
|
|
37
39
|
export type Id = `${IdPrefix}_${string}`;
|
|
40
|
+
/** Validate an id belonging to one registered public resource family. */
|
|
41
|
+
export declare function registeredIdSchema<P extends IdPrefix>(prefix: P): z.ZodCustom<`${P}_${string}`, `${P}_${string}`>;
|
|
38
42
|
export declare const MAIN_TENANT_ID = "ten_main";
|
|
39
43
|
/** Mint a globally unique id for a registered public resource prefix. */
|
|
40
44
|
export declare function createId<P extends IdPrefix>(prefix: P): `${P}_${string}`;
|
package/dist/contracts/ids.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
// Id prefix registry (internal-docs/platform.md "Id prefix registry", L1106-1127).
|
|
2
3
|
// Every PUBLIC resource registers a prefix here before it ships; ids are globally
|
|
3
4
|
// unique and handle ids (operations, exports, imports, transfers, builds) are
|
|
@@ -22,6 +23,7 @@ export const ID_PREFIXES = {
|
|
|
22
23
|
exp: "SpaceExport",
|
|
23
24
|
trf: "SpaceTransfer",
|
|
24
25
|
op: "Operation",
|
|
26
|
+
pub: "Publish",
|
|
25
27
|
whk: "Webhook",
|
|
26
28
|
whd: "WebhookDelivery",
|
|
27
29
|
rec: "DnsRecord",
|
|
@@ -40,6 +42,12 @@ export const ID_PREFIXES = {
|
|
|
40
42
|
stk: "ServiceToken",
|
|
41
43
|
acn: "AccessConnection",
|
|
42
44
|
};
|
|
45
|
+
/** Validate an id belonging to one registered public resource family. */
|
|
46
|
+
export function registeredIdSchema(prefix) {
|
|
47
|
+
return z.custom((value) => typeof value === "string" &&
|
|
48
|
+
value.startsWith(`${prefix}_`) &&
|
|
49
|
+
/^[A-Za-z0-9]+$/.test(value.slice(prefix.length + 1)), `Invalid ${ID_PREFIXES[prefix]} id`);
|
|
50
|
+
}
|
|
43
51
|
// The main Stattic tenant every self-serve team/user/resource lives under. A
|
|
44
52
|
// well-known CONSTANT, never configuration: grammatically a normal tenant id with
|
|
45
53
|
// zero special cases in contracts, policy URIs, or parsers (spec L1100-1105).
|