product-term-rename
Skill219 starsChanged 24 days agoApache-2.0View on GitHub
Rename dbt product terms across docs.getdbt.com per the finalized naming convention — Fusion/dbt Fusion engine to "dbt v2", dbt Core to "dbt v1", and genuinely product-agnostic uses to "dbt". Use when asked to run the product rename, flip Fusion terminology, apply the v1/v2 naming, or execute the Product Rename Strategy. Handles the constants flip, specific-vs-generic audit, grammar repair, scoped prose edits, raw-string sweep, and verification gates; excludes blogs and release notes, includes upgrade guides.
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 1 is distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 63
audits intent: if a core/fusion constant is used *generically* (product-agnostic), switch that occurrence to <Constant name="dbt" />.
- Very specific: line 71
Raw-string sweep: After edits, grep for residual old names — dbt Core, dbt Fusion, Fusion engine, Fusion — across scope INCLUDING …
- Distinctive: line 99
Keep PR descriptions light on naming specifics until dbt Summit.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Rename dbt product terms across the docs, following the finalized naming convention. Mechanical work is deterministic (bundled scripts); the LLM is spent only on prose that needs editorial judgment.
Core principle — be SPECIFIC, don't collapse
Each product renders as a distinct term so a reader can always tell which
product a sentence refers to. Do not collapse everything to bare dbt — that
makes contrasting sentences render identically ("removed in dbt and in dbt") and
hides the specific-vs-generic decision. Instead, constants render the specific
product, and dbt (generic) is applied deliberately, only where a statement
is genuinely product-agnostic.
The naming rules this skill enforces
- Fusion / dbt Fusion engine →
dbt v2. - dbt Core →
dbt v1(this is the default fordbt Core/ thecoreconstant). - Genuinely product-agnostic statements (true of dbt regardless of version) →
dbt— applied deliberately, e.g. by switching the occurrence to<Constant name="dbt" />. - Inline
v1/v2;dbt v1/dbt v2only in a header or at the start of a sentence. - Scope: exclude blogs and release notes; include upgrade guides;
everything else in
website/docs/**andwebsite/snippets/**is in scope. dbtis ALWAYS lowercase — neverDbt/DBT, even at a sentence/heading start.
Constants (Layer 1 targets) — edit website/constants.js
| key | pre-rename value | render as | note |
fusion | Fusion | dbt v2 | the v2 engine |
fusion_engine | dbt Fusion engine | dbt v2 | needs article cleanup ("the dbt v2" → "dbt v2") |
core | dbt Core | dbt v1 | the v1 engine — biggest surface (~585 uses) |
core_v1 | dbt Core v1.x | dbt v1 | |
core_v2 | dbt Core 2.0 | dbt v2 | |
dbt | dbt | dbt | generic ONLY — use deliberately |
Rendering the specific version resolves the same-sentence collisions at the source
(a core+fusion contrast now reads "dbt v1 … dbt v2" automatically). The Layer 2
prose pass trims constant-adjacent versioned forms to bare v1/v2 inline (rule 4).
Procedure
- Read config.
config/*.yml. Confirm target strings with the operator. - Update terminology sources FIRST so terms can't regenerate — edit the
product-name tables in
AGENTS.mdandcontributing/content-style-guide.mdto the corrected mapping: retire thedbt CoreandFusion/dbt Fusion enginerows; adddbt v1(formerly dbt Core) anddbt v2(formerly Fusion / dbt Core 2.0), each notingdbt v1/dbt v2at a header or sentence start and barev1/v2inline; keep thedbtrow as generic only — use deliberately for product-agnostic statements, not as the default for former dbt Core/Fusion. Also confirm the<Constant>examples reference the specific constants. - Scan.
python3 scripts/scan.py→inventory.json. Print the summary and HALT: counts by class, denylist hits, files needing judgment, raw-string residue. - Layer 1 — constants flip. Set the six values in
website/constants.js(table above). - Layer 1b — specific-vs-generic audit + grammar fix. Partition
constant_grammar_riskrecords by directory; spawn parallel subagents, one per file. Each:- fixes grammar the flip introduces (esp.
fusion_engine→ "dbt v2": drop the orphan article, "the dbt v2 is" → "dbt v2 is"; remove duplicate nouns); - audits intent: if a
core/fusionconstant is used generically (product-agnostic), switch that occurrence to<Constant name="dbt" />; otherwise leave the specific constant. Edit withEdit, neverWrite.
- fixes grammar the flip introduces (esp.
- Layer 2a — mechanical prose.
python3 scripts/apply_mechanical.py(auto_safe only). Deterministic. Run--dry-runfirst. - Layer 2b — judgment prose. Partition
auto_safe: falseby directory; spawn N≈10 parallel subagents, each with ONLY its slice +references/*.md. Apply rules 1–4 and 6. Term swaps only — see the editorial guardrail below. - Raw-string sweep. After edits,
grepfor residual old names —dbt Core,dbt Fusion,Fusion engine,Fusion— across scope INCLUDING frontmattertags:, JSX attribute strings,hoverSnippet, and pill arrays. These are easy to miss; drive the count to 0 (excluding denylisted identifiers). Confirm pill/body agreement in_adapters-*.md(apillsarray<Constant name="fusion">must match the rewritten body). - Verify.
python3 scripts/verify.py, thennpm run build(onBrokenLinks: throw) andvale website/docs website/snippets. Never proceed on a red gate. - Report. Files changed, occurrences by class, structural items deferred, generic-vs-specific coin-flips, and any editorial rewrites split out (below).
Editorial guardrail — term swaps only
This is a mechanical rename, not a content rewrite. Subagents must change ONLY the product term (and the minimal surrounding grammar to keep the sentence correct). Do not add facts, rephrase for style, or introduce new sentences (e.g. "Rust engine", "adapters live in a monorepo", migration prose). Anything that changes meaning belongs in a separate content-review PR — flag it, don't apply it here.
Guardrails
- Never text-replace anything in
config/never-touch.yml(CI tokens, repo slugs,AvailabilityMatrix fusion:key, component names, release-track values, compound identifiers likedbt-fusion#123). - Never edit inside
<Constant>tags (except switching a generic one todbt), code fences, inline backticks, URLs, frontmatterid/slug, or imports. - Structural renames (slugs, redirects, heading anchors) are a separate PR. When you
must change heading text, preserve the original anchor with an explicit
{#original-anchor}. - Ship the Vale rule in
references/Terminology.ymlin the same PR so terms can't regress. - Keep PR descriptions light on naming specifics until dbt Summit.
Targeted / test runs
python3 scripts/scan.py --scope-override "website/docs/docs/dbt-versions/dbt-upgrade/**/*.md"In this repository12 other files it gives its agents.
- AGENTS.mdAGENTS.md
- add-availability-badgeSkill
- cavecrewSkill
- caveman-commitSkill
- caveman-compressSkill
- caveman-helpSkill
- caveman-reviewSkill
- cavemanSkill
- caveman-statsSkill
- converting-notion-to-docusaurus-blogSkill
- create-docs-skeletonSkill
- docs-issue-triageSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

