three-tier-gating.mdx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. ---
  2. title: "三层门禁系统 - 功能可见性控制架构"
  3. description: "详解 Claude Code 三层门禁系统:构建时 feature()、运行时 GrowthBook 和身份层 USER_TYPE,如何控制功能的可见性和灰度发布。"
  4. keywords: ["门禁系统", "功能门控", "feature flag", "灰度发布", "可见性控制"]
  5. ---
  6. {/* 本章目标:建立对三层门禁系统的全局认知,为后续四篇深入文章奠定坐标系 */}
  7. ## 冰山一角
  8. 你日常使用的 Claude Code,只是完整代码库的冰山一角。
  9. 逆向工程揭示了一个事实:大量功能被精心"藏"在三层独立的门禁系统之后。有些是正在 A/B 测试的实验性功能,有些是仅限 Anthropic 员工使用的内部工具,还有些是尚未对外发布的下一代能力。
  10. > 我们在 `src/` 中发现了 88+ 个构建时 feature flags、500+ 个运行时 A/B 测试标记,以及一整套身份门控机制。
  11. ## 三层门禁全景
  12. | 维度 | 第一层:构建时 `feature()` | 第二层:运行时 GrowthBook | 第三层:身份 `USER_TYPE` |
  13. |------|---------------------------|--------------------------|-------------------------|
  14. | **控制方式** | `bun:bundle` 编译时宏 | GrowthBook SDK 远程求值 | 构建时 `--define` 常量 |
  15. | **决策时机** | 打包时(代码直接被删除) | 启动时 + 定期刷新 | 打包时(常量折叠) |
  16. | **粒度** | 全有或全无 | 按用户/设备/组织定向 | 按构建版本(ant / external) |
  17. | **标记数量** | 88+ | 500+ (`tengu_*` 前缀) | 1(`ant` vs `external`) |
  18. | **逆向可见性** | 代码残留,但永远走 `false` 分支 | 完整 SDK 代码可读 | 条件分支清晰可见 |
  19. ## 决策流程
  20. 当一个功能请求进入 Claude Code,它会依次经过三层门禁的检查:
  21. ```
  22. 功能请求
  23. ┌─────────────────────────┐
  24. │ 第一层:feature('X') │ ──── 编译时已决定 ──→ false → 代码被 DCE 移除
  25. │ (构建时 Feature Flag) │
  26. └─────────┬───────────────┘
  27. │ true (仅内部构建)
  28. ┌─────────────────────────┐
  29. │ 第二层:tengu_xxx │ ──── 运行时按用户属性 ──→ 不在实验组 → 功能关闭
  30. │ (GrowthBook A/B 测试) │
  31. └─────────┬───────────────┘
  32. │ 在实验组
  33. ┌─────────────────────────┐
  34. │ 第三层:USER_TYPE │ ──── ant? external? ──→ external → 功能不可用
  35. │ (身份门控) │
  36. └─────────┬───────────────┘
  37. │ ant
  38. 功能可用 ✓
  39. ```
  40. 三层门禁**相互独立**,一个功能可能同时受多层控制。例如,KAIROS 助手模式同时需要 `feature('KAIROS')` 构建时开启 **和** `tengu_kairos` 运行时实验命中。
  41. ## 逆向工程揭示了什么
  42. 在这个反编译版本中:
  43. - **第一层**完全透明——`feature()` 被兜底为 `() => false`,所有 88+ 个 flag 的代码路径都可以阅读,只是永远不会执行
  44. - **第二层**完整保留——GrowthBook SDK 的 1156 行代码完整可读,包括用户定向属性、缓存策略、覆盖机制
  45. - **第三层**清晰可见——`process.env.USER_TYPE === 'ant'` 出现在 60+ 个位置,每一处都标记着"仅限内部"的功能边界
  46. <Note>
  47. 这三层门禁不是安全机制——它们是产品发布策略。目的是让 Anthropic 能够在不同用户群体中渐进式地测试和发布功能,而不是阻止逆向工程。
  48. </Note>
  49. ## 接下来
  50. 后续四篇文章将分别深入每一层门禁的细节:
  51. <CardGroup cols={2}>
  52. <Card title="88 面旗帜" icon="flag" href="/docs/internals/feature-flags">
  53. 构建时 Feature Flags 的完整分类与解读
  54. </Card>
  55. <Card title="千面千人" icon="flask" href="/docs/internals/growthbook-ab-testing">
  56. GrowthBook A/B 测试体系的运作机制
  57. </Card>
  58. <Card title="未公开功能巡礼" icon="eye" href="/docs/internals/hidden-features">
  59. KAIROS、PROACTIVE 等 8 大隐藏功能深度解析
  60. </Card>
  61. <Card title="Ant 的特权世界" icon="shield" href="/docs/internals/ant-only-world">
  62. Anthropic 员工专属的工具、命令与 API
  63. </Card>
  64. </CardGroup>