> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# 功能开关与公告

灰度上线、按工作区门禁、向成员广播。

## 初学者演练

先决条件：阅读下面的两个初学者指南，完成 Web 本地设置，并在编辑器的根目录中打开此 monorepo。网页设置属于`apps/web/.env.local`； Next.js不读取根`.env`。默认fake模式下的`/dashboard`是无数据库演示； `/auth` 需要迁移数据库。

简而言之：工作区是一个团队的单独用户、数据和设置。服务器是可信后端；让提供商密钥远离浏览器和电话代码。迁移是创建或更新表的版本化数据库更改。人工智能模型是回答的引擎；型号目录是服务器上可用型号 ID 和价格的列表。提供商是一种外部服务，例如人工智能、电子邮件或计费服务。权利是允许工作区使用某项功能的授权。 Webhook 是一个服务发送到另一个服务的 URL 的消息。

1、以平台管理员身份登录，打开`/admin/flags`；创建或选择一个测试标志并将其明确设置为启用，然后禁用。

2. 刷新读取标志的产品表面并确认其呈现方式更改。

3. 当启用标志时，角色和权利仍必须保护服务器操作。如果 API 在禁用时仍然可访问，请在预期位置添加服务器端标志检查。

对于自定义代码，请从提供的 `prompts/README.md` 开始，然后复制最接近的提示：对于应用程序屏幕为 `prompts/new-app-screen.md`，对于公共页面为 `prompts/new-landing-page.md`。对于服务器、数据库或提供商工作，请为您的编码代理提供本指南的任务，并要求其读取 `AGENTS.md`、`.ai/PROJECT_CONTEXT.md` 和匹配的 `.ai/` 镜像；检查此处指定的确切源文件；列出文件并在编辑前进行检查；保留工作区所有权和仅限服务器的机密；并向您展示差异。告诉它您想要的行为、输入和输出字段、允许的角色、预期的成功和错误以及测试帐户、提供程序或设备。使用样本值；永远不要粘贴真正的秘密。

[开始之前](https://supastack.dev/zh/docs/web/before-you-start.md)

[终端基础知识](https://supastack.dev/zh/docs/web/terminal-basics.md)

[网络本地设置](https://supastack.dev/zh/docs/web/ship-in-5-minutes.md)

[座席提示和项目内存](https://supastack.dev/zh/docs/web/agents.md)


## 在管理中配置标志

`/admin/flags` 和 `feature-flags.ts` 提供套件的标志管理/评估路径。 Flag配置属于平台管理员；产品 UI 可以对允许的功能做出反应，而无需获得更改标志的权限。


## 保持授权分开

标志支持产品行为，而角色和权利则授权调用者。根据需要检查两者。禁用的导航链接不会阻止直接 API 呼叫。


## 验证启用和禁用的行为

测试默认值、缺少标志、更新、角色拒绝和标志门控服务器操作。添加推出逻辑时保留工作区访问检查。

[平台角色](https://supastack.dev/zh/docs/web/admin.md)

[付费访问](https://supastack.dev/zh/docs/web/setup-payments.md)


## 安装与配置

feature-flag-runtime 按调用方上下文解析开关：未配置的开关默认关闭，按开关的覆盖可定向到特定工作区或用户。缺失的开关绝不会悄悄放行一个界面。

平台公告（announcement-actions）通过成员已在看的同一通知界面广播应用内通知 —— listActiveAnnouncements 提供横幅内容，dismissAnnouncementAction 记录关闭。

```
await isFeatureEnabled(flag, { workspaceId })
await resolveFeatureFlags(context)

listActiveAnnouncements()
dismissAnnouncementAction(formData)
```


## 实现流程

暗发代码：先在开关后合并，给自己的工作区开启，再逐步扩大。界面转正后移除开关 —— 陈旧开关是第二份事实来源。

在服务端边界和导航上同时检查开关：藏了链接但路由还开着不算门禁。公告不要走事务邮件通道 —— 它们是产品动态，不是收据。


## 验证与排障

验证关闭的开关端到端隐藏导航、路由与操作；覆盖只对其目标生效；清空后回到默认值。测试公告送达目标工作区且关闭状态持久。


## 下一篇

[安全与隐私](https://supastack.dev/zh/docs/web/security.md)
