manage-dashboard-widgets — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited manage-dashboard-widgets (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
For PostHog engineers working on dashboard widget tiles in the repo.
Human overview: products/dashboards/CONTRIBUTING.md
In scope: widget tiles (widget_id on DashboardTile) — ship new types or change shipped types.
Out of scope: adding an existing type to a dashboard (MCP dashboard-widget-catalog-list → dashboard-widgets-batch-add); insight tiles, text cards, button tiles.
| Request | Path | Start here |
|---|---|---|
| New `widget_type` that does not exist | Ship | §2 Ship a new type — intake mandatory |
| Change a shipped type (config, query, UI, layout, RBAC, deprecate) | Update | §3 Update a shipped type — skip intake |
| Add existing type to a dashboard | — | MCP only — not this skill |
| Chart / trend / graph for product metrics on a dashboard | — | Insight tile — architecture.md § Charts |
Shipped types (code truth): architecture.md § Shipped types.
Mandatory for new types only. Read widget-intake.md and:
groupId, copy spine, list UX) — never AskQuestion banned topics.After spec confirmation → checklist-new-widget-type.md §1 → §8. §5b (dedicated stories — required before the PR, not a follow-up) is sequenced once MVP tests are green.
Skip intake. Identify the type from the request or EXPECTED_WIDGET_TYPES in widget_registry.py.
Cannot change in place: widget_type string on existing rows; stored w/h when catalog defaults change.
New visualization kind = ship (§2). Chart-primary = insight tile (architecture.md § Charts).
Both paths:
widget_type branches in dashboard.py. permissions-and-sharing.md § Product RBACgroupId only.widget_specs/configs.py + WidgetSpec in registry.py; hogli build:openapi for OpenAPI/FE Zod/MCP. Runtime PATCH stays JSONField. See config-and-codegen.md.New widget_type strings need no migration — register registries + catalogs only.
| Skill | When |
|---|---|
improving-drf-endpoints | dashboard @extend_schema (config serializers auto-derive from WIDGET_SPECS) |
writing-kea-logics | edit*WidgetModalLogic.ts or dashboardLogic.tsx |
django-migrations | DashboardWidget / DashboardTile schema only |
adopting-generated-api-types | Tile PATCH in frontend/utils.ts |
MVP smoke (renders + core tests — not a ship point):
hogli test products/dashboards/backend/api/test/test_run_widgets.py
hogli test products/dashboards/backend/api/test/test_dashboard_widgets.py
hogli test products/dashboards/frontend/widgets/registry.test.tsxShip gate (required before the PR): checklist §8 + hogli build:openapi + dedicated Storybook stories per checklist §5b (component + edit modal — required, not just the catalog overview).
Config SSOT changes (also run after widget_specs/ edits):
hogli test products/dashboards/backend/api/test/test_widget_config_schema_parity.py
hogli test products/dashboards/frontend/widgets/widgetConfigSchemaParity.test.ts
hogli test products/dashboards/backend/api/test/test_widget_openapi_enums.py # new widget_type onlyUpdate: tests for layers touched — at minimum test_run_widgets.py if BE changed, products/dashboards/frontend/widgets/ if FE changed, hogli build:openapi if config OpenAPI changed. See managing-existing-widgets.md routing table Also check column.
| Topic | Doc |
|---|---|
| Intake (new types only) | widget-intake.md — canonical defaults + spec recap |
| New type checklist | checklist-new-widget-type.md |
| Update shipped type | managing-existing-widgets.md |
| Architecture | architecture.md — file map, invariants |
| Config + codegen | config-and-codegen.md |
| WidgetCard / edit modal | composition.md |
| List footer / tile filters | list-widget-patterns.md |
| Tile min/max | layout-and-ux.md |
| RBAC / sharing | permissions-and-sharing.md |
| Setup gates | availability-and-gating.md |
| MCP after ship | mcp.md |
| Skill doc maintenance | skill-maintenance.md |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.