用途:指导 PostHog 工程师在仓库内开发仪表盘 widget tile。适用范围为 widget tile(DashboardTile 上的 widget_id),即新增类型或修改已发布类型;不包含把已有类型加入仪表盘(属 MCP 流程)、insight tile、文本卡片、按钮 tile。
路由:新增不存在的 widget_type 走“Ship”路径,且必须做 intake:先读 widget-intake.md,在仓库中发现具体产品 UI 组件/场景,应用 groupId、文案主线、列表 UX 等默认与推断,遇到歧义用一次批量追问(最多 6 个开放问题),提交 spec 表并确认后再执行 checklist-new-widget-type.md 第 1 至第 8 节;第 5b 节的专属 stories 在 MVP 测试通过后排序、PR 前必须完成。修改已发布类型走“Update”路径,跳过 intake:由请求或 widget_registry.py 中的 EXPECTED_WIDGET_TYPES 识别类型,读 managing-existing-widgets.md 的路由表定位主要文件,确认类型、变更内容与向后兼容的配置迁移,按表中链接引用推进,不要重读新类型清单。
限制与不变量:不能在原地修改已有行的 widget_type 字符串,也不能在目录默认值变化时修改已存的 w/h;新可视化种类等于新增(走 Ship),以图表为主应使用 insight tile。RBAC 由注册表驱动,dashboard.py 中不得按 widget_type 分支;同一 widget_type 在注册表、两个目录与前端注册表中一致,变体仅共享 groupId;各类代码放在产品路径而非平台外壳;WidgetCard 采用复合模式;配置契约以 Pydantic 为单一事实来源(widget_specs/configs.py 与 registry.py 的 WidgetSpec),用 hogli build:openapi 生成 OpenAPI、前端 Zod 与 MCP,运行时 PATCH 仍为 JSONField;新增 widget_type 字符串无需迁移,只需注册注册表与目录。
验证与配套技能:MVP 冒烟运行 hogli test products/dashboards/backend/api/test/test_run_widgets.py、test_dashboard_widgets.py 与 frontend/widgets/registry.test.tsx;发布门禁为 checklist 第 8 节、hogli build:openapi 及第 5b 节要求的组件与编辑弹窗 Storybook stories。修改配置 SSOT 后另跑 test_widget_config_schema_parity.py、widgetConfigSchemaParity.test.ts,新增类型时跑 test_widget_openapi_enums.py。相关技能包括 improving-drf-endpoints、writing-kea-logics、django-migrations、adopting-generated-api-types。其余细节暂未提供。