Skip to main content

add-availability-badge

Add or resolve an `availability` frontmatter field for a docs.getdbt.com page, so the page renders the correct applicability badge (where a feature runs, what plan/access it needs, which dbt engine version). Use when asked to add an availability badge, mark a page as platform/local/Enterprise-only, or figure out what availability value a feature needs.

跳到安装

来源信息

仓库
dbt-labs/docs.getdbt.com
最近来源活动
2026年7月30日 14:01
检测到的 SKILL.md 语言
英语
星标
215
分支
1,203

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
add-availability-badge
description
Add or resolve an `availability` frontmatter field for a docs.getdbt.com page, so the page renders the correct applicability badge (where a feature runs, what plan/access it needs, which dbt engine version). Use when asked to add an availability badge, mark a page as platform/local/Enterprise-only, or figure out what availability value a feature needs.
Add the `availability` field to a page's frontmatter so it renders the right applicability badge (engine, surface, access/plan). Source of truth: [Notion: How to use and add applicability badges](https://app.notion.com/p/dbtlabs/How-to-use-and-add-applicability-badges-frontmatter-3a7bb38ebda780809baed78e3e893f51) and `src/components/availability/availabilityPresets.js` (paths below are relative to `website/`, the repo root for this project). The spec is inlined below — re-fetching the Notion doc on every run wastes tokens on a stable, code-backed spec. If something here looks wrong, check `src/components/availability/availabilityPresets.js` first — it's the actual render logic — before trusting the Notion doc or this file. ## Workflow 1. **Get the input**, either form: - A **preset name** directly ("use `platform_login`") — validate it exists in the preset table below, insert as-is. - A **plain-language description** ("this is an Enterprise+ platform feature", "CLI-only, no platform") — resolve it to a preset if one fits, otherwise build a custom object from the field reference. Ask a clarifying question ONLY when genuinely ambiguous — for example, if the feature skips a plan tier (needs `plans` array, not `minPlan`), or you can't tell if login is required outside the platform surface. 2. **Only add to pages that don't already have `availability`.** This skill inserts; it doesn't audit or fix existing badges. If asked to fix an existing one, say so and stop — that's out of scope. 3. **Insert as a top-level `availability` key** in the page's YAML frontmatter block — same level as `title`, `description`, etc. 4. **State what it renders as** (badge text) so the user can sanity-check without opening a browser — see rendering rules below. ## Step 1: try a preset first Presets bundle `surface`/`access`/`engine` into one name. Confirmed current list from `availabilityPresets.js`: | Preset | Resolves to | Renders as | |---|---|---| | `all_users` | `access: free` (no surface/engine) | *(no badge — applies to everyone)* | | `platform_login` | `surface: platform`, `access: login_required` | "dbt platform" (login segment suppressed on platform) | | `local_free` | `surface: local`, `access: free` | "Local development" | | `local_all` | `surface: local_development` | "Local development" | | `everywhere_usage` | `access: usage_based` | "Usage-based" (+ "Login required" if not platform) | ```yaml --- title: Managing environments availability: platform_login --- ``` **Preset vs. location name:** a bare location value (`local`, `local_development`, `platform`) used alone as `availability: local` is valid too — it sets `surface` only, nothing else. Don't use bare `platform` alone, though — it renders identically to `platform_login` but doesn't document the login requirement for future editors. Always use the `platform_login` preset instead of typing `platform` by itself. ## Step 2: custom config, if no preset fits ```yaml --- availability: surface: platform # local | local_development | platform | omit = every surface access: paid_plan # free | login_required | usage_based | paid_plan | omit = every access level minPlan: enterprise # only with access: paid_plan. starter | enterprise | enterprise_plus # plans: [starter, enterprise_plus] # alternative to minPlan — use ONE, never both engine: v2 # v1 | v2 | omit (or "all") = both engines --- ``` Only include fields the page actually needs — every field is independently optional. ### Field reference | Field | Values | Notes | |---|---|---| | `surface` | `local`, `local_development`, `platform` | Omit = every surface. `local` = CLI-only, no platform equivalent. `local_development` = local tool that also works with platform-connected projects. | | `access` | `free`, `login_required`, `usage_based`, `paid_plan` | Omit = every access level. `free` only renders a badge segment when paired with `surface: platform` (elsewhere free is assumed, no badge). `login_required` is hidden on `surface: platform` (login is already implied). | | `minPlan` | `starter`, `enterprise`, `enterprise_plus` | Only with `access: paid_plan`. Expands **upward** — `minPlan: starter` renders "Starter, Enterprise, Enterprise+". Pick the lowest tier that has the feature. | | `plans` | array, e.g. `[starter, enterprise_plus]` | Alternative to `minPlan`, for the rare case that skips a tier in the ladder. Use one or the other, never both. | | `engine` | `v1`, `v2` | Omit or `all` = both. `v1` = dbt Core 1.x. `v2` = dbt Fusion engine 2.0+. | ### Rendering rules (so you can predict the output without a browser) - Badge segment order is always **engine → surface → access**, e.g. "Available in v2 \| dbt platform \| Enterprise, Enterprise+" — regardless of the order fields appear in the YAML. `\|` denotes a rendered separator in the badge text, not `<VersionBlock>` or `<Tabs>` — don't insert literal `<VersionBlock>`/`<Tabs>` for this. - `paid_plan` always spells out every tier `minPlan` expands to (e.g. "Enterprise, Enterprise+"), never just the highest or lowest one. - Tooltip field labels: `engine` → "Version", `surface` → "Where", `access` → "Access". ## Examples **CLI-only, dbt Core 1.x only:** ```yaml availability: surface: local engine: v1 ``` Renders: "Available in v1 \| Local development" **Applies to literally everyone:** ```yaml availability: all_users ``` Renders: nothing — intentional, a badge here would be noise. **Enterprise+ platform feature:** ```yaml availability: surface: platform access: paid_plan minPlan: enterprise ``` Renders: "dbt platform \| Enterprise, Enterprise+" **Billed on usage, not plan-gated:** ```yaml availability: surface: platform access: usage_based ``` Renders: "dbt platform \| Usage-based" **Skips a tier (Starter and Enterprise+, not plain Enterprise):** ```yaml availability: surface: platform access: paid_plan plans: [starter, enterprise_plus] ``` Renders: "dbt platform \| Starter, Enterprise+" **Fusion-only, also works on platform-connected projects:** ```yaml availability: surface: local_development engine: v2 ``` Renders: "Available in v2 \| Local development" ## Gotchas - Never set both `minPlan` and `plans` — pick one. - Never write `availability: platform` bare — use the `platform_login` preset so the login requirement is documented for future editors, even though both render identically. - A preset name can never collide with a location name (`local`, `local_development`, `platform`) — the renderer tells them apart by checking if the value matches a known surface first. If you invent a new preset name later, don't name it after a surface value. - Out of scope for this skill: fixing/auditing `availability` blocks that already exist on a page. Flag it to the user and stop instead of editing. - The `.vscode/docs.code-snippets` autocomplete snippet mentioned in the Notion doc (from PR #9677) wasn't found in this checkout as of this writing — don't assume it's present; check before telling a user to rely on it.
在 GitHub 查看