Skip to content

声明式菜单 Schema 注册表

系统概览

ADR-093 元测试基础设施。收集各面板的 MenuNode[] schema,供 menu-schema.integrity.test.ts 做静态分析。注册是自愿的:各 *-levels.ts 导出 getXxxSchema() 后在此注册。

核心职责

  • registry: Map<panelId, () => MenuNode[]>
  • registerSchema(panelId, builder) — 注册面板 schema 构建函数(重复覆盖并 DEV 告警)
  • collectAllSchemas() — 执行所有 builder 返回 { panelId, nodes }[] 快照(失败跳过)
  • collectAllSchemasWithFailures() — 同上,另返回 failed: { panelId, error }[]
  • flattenNodes(nodes) — 递归展开声明式树为扁平 MenuNode[]

对外 API(节选)

  • registerSchema(panelId, builder)
  • collectAllSchemas()
  • collectAllSchemasWithFailures()
  • flattenNodes(nodes)
  • _clearRegistry()(仅测试)

关键约定

  • builder 可能依赖运行时状态,失败跳过该面板并 DEV 告警,不抛异常
  • 失败不得静默:failedschema-snapshot.test.ts 断言为空,否则面板从 E2E 快照消失仍全绿
  • panelId 重复时覆盖并告警,建议唯一

与其他子系统关系

  • menu-schema-register.ts 集中调用以触发全量注册
  • menu-schema.integrity.test.ts 做 schema 静态分析
  • schema 类型来自 menu-schema.tsMenuNode