Appearance
声明式菜单 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 告警,不抛异常
- 失败不得静默:
failed由schema-snapshot.test.ts断言为空,否则面板从 E2E 快照消失仍全绿 - panelId 重复时覆盖并告警,建议唯一
与其他子系统关系
- 被
menu-schema-register.ts集中调用以触发全量注册 - 供
menu-schema.integrity.test.ts做 schema 静态分析 - schema 类型来自
menu-schema.ts(MenuNode)