[{"data":1,"prerenderedAt":8049},["ShallowReactive",2],{"tutorial-dbt-bruin-analyst/wire-up-agent":3,"content-query-sxZRDSr6QT":1510,"content-query-g5ZKLlKTWc":2684},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"readingTime":11,"category":12,"tags":13,"difficulty":20,"module":5,"step":21,"variants":22,"journeys":23,"learnMore":26,"stepGif":36,"author":37,"body":41,"_type":746,"_id":1505,"_source":1506,"_file":1507,"_stem":1508,"_extension":1509},"/tutorials/dbt-bruin-analyst/wire-up-agent","dbt-bruin-analyst",false,"","Wire Up the AI Agent","Add Bruin MCP, point your agent at context/assets/, and use bruin query to run SQL with the same credentials your dbt project already uses.","2026-04-28",7,"Tutorial",[14,15,16,17,18,19],"Bruin CLI","MCP","dbt","Claude Code","Cursor","Codex","Beginner",5,[17,18,19],[24,25],"Data Analyst","Data Engineer",[27,30,33],{"label":28,"url":29},"Bruin MCP setup guide","https://getbruin.com/docs/bruin/getting-started/bruin-mcp.html",{"label":31,"url":32},"bruin query (docs)","https://getbruin.com/docs/bruin/commands/query.html",{"label":34,"url":35},"MCP best practices for AI agents","https://getbruin.com/docs/bruin/getting-started/bruin-mcp.html#best-practices-for-ai-agents","/img/learn/contoso-dbt-bruin-analyst.gif",{"name":38,"role":39,"image":40},"Bruin Team","Bruin Data","/bruin-logo-2025.svg",{"type":42,"children":43,"toc":1490},"root",[44,53,96,102,116,162,167,173,180,185,529,542,554,681,694,707,742,1140,1146,1151,1168,1173,1217,1229,1235,1351,1357,1362,1447,1459,1465,1484],{"type":45,"tag":46,"props":47,"children":49},"element","h2",{"id":48},"what-youll-do",[50],{"type":51,"value":52},"text","What you'll do",{"type":45,"tag":54,"props":55,"children":56},"ol",{},[57,63,91],{"type":45,"tag":58,"props":59,"children":60},"li",{},[61],{"type":51,"value":62},"Register Bruin MCP in your AI coding tool so the agent can ask Bruin \"how do I…?\" questions",{"type":45,"tag":58,"props":64,"children":65},{},[66,68,75,77,83,85],{"type":51,"value":67},"Add an ",{"type":45,"tag":69,"props":70,"children":72},"code",{"className":71},[],[73],{"type":51,"value":74},"AGENTS.md",{"type":51,"value":76}," at the repo root that points the agent at ",{"type":45,"tag":69,"props":78,"children":80},{"className":79},[],[81],{"type":51,"value":82},"context/assets/",{"type":51,"value":84}," and at ",{"type":45,"tag":69,"props":86,"children":88},{"className":87},[],[89],{"type":51,"value":90},"bruin query",{"type":45,"tag":58,"props":92,"children":93},{},[94],{"type":51,"value":95},"Verify the loop end-to-end with a real business question",{"type":45,"tag":46,"props":97,"children":99},{"id":98},"why-this-step-matters",[100],{"type":51,"value":101},"Why this step matters",{"type":45,"tag":103,"props":104,"children":105},"p",{},[106,108,114],{"type":51,"value":107},"The context layer is half the equation. The agent also needs an ",{"type":45,"tag":109,"props":110,"children":111},"strong",{},[112],{"type":51,"value":113},"interface",{"type":51,"value":115}," to use it:",{"type":45,"tag":117,"props":118,"children":119},"ul",{},[120,125,137],{"type":45,"tag":58,"props":121,"children":122},{},[123],{"type":51,"value":124},"A way to learn how Bruin itself works (asset types, command flags) — that's what Bruin MCP gives you",{"type":45,"tag":58,"props":126,"children":127},{},[128,130,135],{"type":51,"value":129},"A way to actually run SQL against the warehouse — that's ",{"type":45,"tag":69,"props":131,"children":133},{"className":132},[],[134],{"type":51,"value":90},{"type":51,"value":136},", which uses the same connection you defined in step 2",{"type":45,"tag":58,"props":138,"children":139},{},[140,142,148,150,155,157],{"type":51,"value":141},"A canonical workflow that tells the agent ",{"type":45,"tag":143,"props":144,"children":145},"em",{},[146],{"type":51,"value":147},"which",{"type":51,"value":149}," of the two to use, ",{"type":45,"tag":143,"props":151,"children":152},{},[153],{"type":51,"value":154},"when",{"type":51,"value":156}," — that's ",{"type":45,"tag":69,"props":158,"children":160},{"className":159},[],[161],{"type":51,"value":74},{"type":45,"tag":103,"props":163,"children":164},{},[165],{"type":51,"value":166},"Get all three in place and the agent stops guessing table names and starts citing the asset YAMLs you generated.",{"type":45,"tag":46,"props":168,"children":170},{"id":169},"instructions",[171],{"type":51,"value":172},"Instructions",{"type":45,"tag":174,"props":175,"children":177},"h3",{"id":176},"_1-register-bruin-mcp-in-your-ai-tool",[178],{"type":51,"value":179},"1. Register Bruin MCP in your AI tool",{"type":45,"tag":103,"props":181,"children":182},{},[183],{"type":51,"value":184},"Pick the tab that matches the tool you're using. Bruin MCP is stateless — register it once per machine, not per project.",{"type":45,"tag":186,"props":187,"children":189},"variant-tabs",{":variants":188},"[{\"id\":\"claude-code\",\"label\":\"Claude Code\"},{\"id\":\"cursor\",\"label\":\"Cursor\"},{\"id\":\"codex\",\"label\":\"Codex\"}]",[190,290,452],{"type":45,"tag":191,"props":192,"children":193},"template",{"v-slot:claude-code":7},[194,199,204,257,262],{"type":45,"tag":174,"props":195,"children":197},{"id":196},"claude-code",[198],{"type":51,"value":17},{"type":45,"tag":103,"props":200,"children":201},{},[202],{"type":51,"value":203},"Run this once in your terminal:",{"type":45,"tag":205,"props":206,"children":210},"pre",{"className":207,"code":208,"language":209,"meta":7,"style":7},"language-bash shiki shiki-themes github-dark","claude mcp add bruin -- bruin mcp\n","bash",[211],{"type":45,"tag":69,"props":212,"children":213},{"__ignoreMap":7},[214],{"type":45,"tag":215,"props":216,"children":219},"span",{"class":217,"line":218},"line",1,[220,226,232,237,242,248,252],{"type":45,"tag":215,"props":221,"children":223},{"style":222},"--shiki-default:#B392F0",[224],{"type":51,"value":225},"claude",{"type":45,"tag":215,"props":227,"children":229},{"style":228},"--shiki-default:#9ECBFF",[230],{"type":51,"value":231}," mcp",{"type":45,"tag":215,"props":233,"children":234},{"style":228},[235],{"type":51,"value":236}," add",{"type":45,"tag":215,"props":238,"children":239},{"style":228},[240],{"type":51,"value":241}," bruin",{"type":45,"tag":215,"props":243,"children":245},{"style":244},"--shiki-default:#79B8FF",[246],{"type":51,"value":247}," --",{"type":45,"tag":215,"props":249,"children":250},{"style":228},[251],{"type":51,"value":241},{"type":45,"tag":215,"props":253,"children":254},{"style":228},[255],{"type":51,"value":256}," mcp\n",{"type":45,"tag":103,"props":258,"children":259},{},[260],{"type":51,"value":261},"Restart your Claude Code session — MCP servers are loaded at session start, so the change won't apply until you open a new one.",{"type":45,"tag":103,"props":263,"children":264},{},[265,267,280,282,288],{"type":51,"value":266},"To verify, ask Claude Code: ",{"type":45,"tag":143,"props":268,"children":269},{},[270,272,278],{"type":51,"value":271},"\"Use the Bruin MCP to list the available ",{"type":45,"tag":69,"props":273,"children":275},{"className":274},[],[276],{"type":51,"value":277},"bruin",{"type":51,"value":279}," commands.\"",{"type":51,"value":281}," It should reply with a list pulled from ",{"type":45,"tag":69,"props":283,"children":285},{"className":284},[],[286],{"type":51,"value":287},"bruin_get_overview",{"type":51,"value":289}," rather than guessing.",{"type":45,"tag":191,"props":291,"children":292},{"v-slot:cursor":7},[293,298,338,416,424],{"type":45,"tag":174,"props":294,"children":296},{"id":295},"cursor",[297],{"type":51,"value":18},{"type":45,"tag":54,"props":299,"children":300},{},[301,313,323,333],{"type":45,"tag":58,"props":302,"children":303},{},[304,306,311],{"type":51,"value":305},"Open ",{"type":45,"tag":109,"props":307,"children":308},{},[309],{"type":51,"value":310},"Cursor Settings",{"type":51,"value":312}," (Cmd/Ctrl + ,)",{"type":45,"tag":58,"props":314,"children":315},{},[316,318],{"type":51,"value":317},"Navigate to ",{"type":45,"tag":109,"props":319,"children":320},{},[321],{"type":51,"value":322},"MCP & Integrations",{"type":45,"tag":58,"props":324,"children":325},{},[326,328],{"type":51,"value":327},"Click ",{"type":45,"tag":109,"props":329,"children":330},{},[331],{"type":51,"value":332},"Add Custom MCP",{"type":45,"tag":58,"props":334,"children":335},{},[336],{"type":51,"value":337},"Paste:",{"type":45,"tag":205,"props":339,"children":343},{"className":340,"code":341,"language":342,"meta":7,"style":7},"language-json shiki shiki-themes github-dark","{\n  \"mcpServers\": {\n    \"bruin\": {\n      \"command\": \"bruin\",\n      \"args\": [\"mcp\"]\n    }\n  }\n}\n","json",[344],{"type":45,"tag":69,"props":345,"children":346},{"__ignoreMap":7},[347,355,364,373,382,390,399,407],{"type":45,"tag":215,"props":348,"children":349},{"class":217,"line":218},[350],{"type":45,"tag":215,"props":351,"children":352},{},[353],{"type":51,"value":354},"{\n",{"type":45,"tag":215,"props":356,"children":358},{"class":217,"line":357},2,[359],{"type":45,"tag":215,"props":360,"children":361},{},[362],{"type":51,"value":363},"  \"mcpServers\": {\n",{"type":45,"tag":215,"props":365,"children":367},{"class":217,"line":366},3,[368],{"type":45,"tag":215,"props":369,"children":370},{},[371],{"type":51,"value":372},"    \"bruin\": {\n",{"type":45,"tag":215,"props":374,"children":376},{"class":217,"line":375},4,[377],{"type":45,"tag":215,"props":378,"children":379},{},[380],{"type":51,"value":381},"      \"command\": \"bruin\",\n",{"type":45,"tag":215,"props":383,"children":384},{"class":217,"line":21},[385],{"type":45,"tag":215,"props":386,"children":387},{},[388],{"type":51,"value":389},"      \"args\": [\"mcp\"]\n",{"type":45,"tag":215,"props":391,"children":393},{"class":217,"line":392},6,[394],{"type":45,"tag":215,"props":395,"children":396},{},[397],{"type":51,"value":398},"    }\n",{"type":45,"tag":215,"props":400,"children":401},{"class":217,"line":11},[402],{"type":45,"tag":215,"props":403,"children":404},{},[405],{"type":51,"value":406},"  }\n",{"type":45,"tag":215,"props":408,"children":410},{"class":217,"line":409},8,[411],{"type":45,"tag":215,"props":412,"children":413},{},[414],{"type":51,"value":415},"}\n",{"type":45,"tag":54,"props":417,"children":418},{"start":21},[419],{"type":45,"tag":58,"props":420,"children":421},{},[422],{"type":51,"value":423},"Restart Cursor.",{"type":45,"tag":103,"props":425,"children":426},{},[427,429,442,444,450],{"type":51,"value":428},"To verify, ask Cursor's chat: ",{"type":45,"tag":143,"props":430,"children":431},{},[432,434,440],{"type":51,"value":433},"\"Use the Bruin MCP to fetch the docs for ",{"type":45,"tag":69,"props":435,"children":437},{"className":436},[],[438],{"type":51,"value":439},"bruin import database",{"type":51,"value":441},".\"",{"type":51,"value":443}," It should pull the doc page via ",{"type":45,"tag":69,"props":445,"children":447},{"className":446},[],[448],{"type":51,"value":449},"bruin_get_doc_content",{"type":51,"value":451},".",{"type":45,"tag":191,"props":453,"children":454},{"v-slot:codex":7},[455,460,473,506,511],{"type":45,"tag":174,"props":456,"children":458},{"id":457},"codex",[459],{"type":51,"value":19},{"type":45,"tag":103,"props":461,"children":462},{},[463,465,471],{"type":51,"value":464},"Add this to ",{"type":45,"tag":69,"props":466,"children":468},{"className":467},[],[469],{"type":51,"value":470},"~/.codex/config.toml",{"type":51,"value":472},":",{"type":45,"tag":205,"props":474,"children":478},{"className":475,"code":476,"language":477,"meta":7,"style":7},"language-toml shiki shiki-themes github-dark","[mcp_servers.bruin]\ncommand = \"bruin\"\nargs = [\"mcp\"]\n","toml",[479],{"type":45,"tag":69,"props":480,"children":481},{"__ignoreMap":7},[482,490,498],{"type":45,"tag":215,"props":483,"children":484},{"class":217,"line":218},[485],{"type":45,"tag":215,"props":486,"children":487},{},[488],{"type":51,"value":489},"[mcp_servers.bruin]\n",{"type":45,"tag":215,"props":491,"children":492},{"class":217,"line":357},[493],{"type":45,"tag":215,"props":494,"children":495},{},[496],{"type":51,"value":497},"command = \"bruin\"\n",{"type":45,"tag":215,"props":499,"children":500},{"class":217,"line":366},[501],{"type":45,"tag":215,"props":502,"children":503},{},[504],{"type":51,"value":505},"args = [\"mcp\"]\n",{"type":45,"tag":103,"props":507,"children":508},{},[509],{"type":51,"value":510},"Restart Codex.",{"type":45,"tag":103,"props":512,"children":513},{},[514,516,521,523,528],{"type":51,"value":515},"To verify, ask Codex: ",{"type":45,"tag":143,"props":517,"children":518},{},[519],{"type":51,"value":520},"\"Use Bruin MCP to list connection types Bruin supports.\"",{"type":51,"value":522}," It should return the list from ",{"type":45,"tag":69,"props":524,"children":526},{"className":525},[],[527],{"type":51,"value":449},{"type":51,"value":451},{"type":45,"tag":174,"props":530,"children":532},{"id":531},"_2-confirm-bruin-query-works-as-the-agent-will-use-it",[533,535,540],{"type":51,"value":534},"2. Confirm ",{"type":45,"tag":69,"props":536,"children":538},{"className":537},[],[539],{"type":51,"value":90},{"type":51,"value":541}," works as the agent will use it",{"type":45,"tag":103,"props":543,"children":544},{},[545,547,552],{"type":51,"value":546},"Run a sanity-check query against your warehouse using the ",{"type":45,"tag":109,"props":548,"children":549},{},[550],{"type":51,"value":551},"scoped config",{"type":51,"value":553},", exactly the way the agent will:",{"type":45,"tag":205,"props":555,"children":557},{"className":207,"code":556,"language":209,"meta":7,"style":7},"bruin query \\\n  --config-file context/.bruin.yml \\\n  --connection contoso_dbt_bq \\\n  --query \"SELECT category_name, SUM(revenue_usd) AS rev\n           FROM \\`bruin-playground-arsalan.contoso_dbt_reports.rpt_revenue_by_segment\\`\n           WHERE year = 2024\n           GROUP BY 1\n           ORDER BY rev DESC\n           LIMIT 10\"\n",[558],{"type":45,"tag":69,"props":559,"children":560},{"__ignoreMap":7},[561,578,595,612,625,648,656,664,672],{"type":45,"tag":215,"props":562,"children":563},{"class":217,"line":218},[564,568,573],{"type":45,"tag":215,"props":565,"children":566},{"style":222},[567],{"type":51,"value":277},{"type":45,"tag":215,"props":569,"children":570},{"style":228},[571],{"type":51,"value":572}," query",{"type":45,"tag":215,"props":574,"children":575},{"style":244},[576],{"type":51,"value":577}," \\\n",{"type":45,"tag":215,"props":579,"children":580},{"class":217,"line":357},[581,586,591],{"type":45,"tag":215,"props":582,"children":583},{"style":244},[584],{"type":51,"value":585},"  --config-file",{"type":45,"tag":215,"props":587,"children":588},{"style":228},[589],{"type":51,"value":590}," context/.bruin.yml",{"type":45,"tag":215,"props":592,"children":593},{"style":244},[594],{"type":51,"value":577},{"type":45,"tag":215,"props":596,"children":597},{"class":217,"line":366},[598,603,608],{"type":45,"tag":215,"props":599,"children":600},{"style":244},[601],{"type":51,"value":602},"  --connection",{"type":45,"tag":215,"props":604,"children":605},{"style":228},[606],{"type":51,"value":607}," contoso_dbt_bq",{"type":45,"tag":215,"props":609,"children":610},{"style":244},[611],{"type":51,"value":577},{"type":45,"tag":215,"props":613,"children":614},{"class":217,"line":375},[615,620],{"type":45,"tag":215,"props":616,"children":617},{"style":244},[618],{"type":51,"value":619},"  --query",{"type":45,"tag":215,"props":621,"children":622},{"style":228},[623],{"type":51,"value":624}," \"SELECT category_name, SUM(revenue_usd) AS rev\n",{"type":45,"tag":215,"props":626,"children":627},{"class":217,"line":21},[628,633,638,643],{"type":45,"tag":215,"props":629,"children":630},{"style":228},[631],{"type":51,"value":632},"           FROM ",{"type":45,"tag":215,"props":634,"children":635},{"style":244},[636],{"type":51,"value":637},"\\`",{"type":45,"tag":215,"props":639,"children":640},{"style":228},[641],{"type":51,"value":642},"bruin-playground-arsalan.contoso_dbt_reports.rpt_revenue_by_segment",{"type":45,"tag":215,"props":644,"children":645},{"style":244},[646],{"type":51,"value":647},"\\`\n",{"type":45,"tag":215,"props":649,"children":650},{"class":217,"line":392},[651],{"type":45,"tag":215,"props":652,"children":653},{"style":228},[654],{"type":51,"value":655},"           WHERE year = 2024\n",{"type":45,"tag":215,"props":657,"children":658},{"class":217,"line":11},[659],{"type":45,"tag":215,"props":660,"children":661},{"style":228},[662],{"type":51,"value":663},"           GROUP BY 1\n",{"type":45,"tag":215,"props":665,"children":666},{"class":217,"line":409},[667],{"type":45,"tag":215,"props":668,"children":669},{"style":228},[670],{"type":51,"value":671},"           ORDER BY rev DESC\n",{"type":45,"tag":215,"props":673,"children":675},{"class":217,"line":674},9,[676],{"type":45,"tag":215,"props":677,"children":678},{"style":228},[679],{"type":51,"value":680},"           LIMIT 10\"\n",{"type":45,"tag":103,"props":682,"children":683},{},[684,686,692],{"type":51,"value":685},"You should get a small result table back. Because the connection uses Application Default Credentials, no keyfiles change hands — the agent runs SQL as your ",{"type":45,"tag":69,"props":687,"children":689},{"className":688},[],[690],{"type":51,"value":691},"gcloud auth application-default login",{"type":51,"value":693}," identity.",{"type":45,"tag":174,"props":695,"children":697},{"id":696},"_3-add-an-agentsmd-at-the-repo-root",[698,700,705],{"type":51,"value":699},"3. Add an ",{"type":45,"tag":69,"props":701,"children":703},{"className":702},[],[704],{"type":51,"value":74},{"type":51,"value":706}," at the repo root",{"type":45,"tag":103,"props":708,"children":709},{},[710,712,717,719,725,727,732,734,740],{"type":51,"value":711},"Create ",{"type":45,"tag":69,"props":713,"children":715},{"className":714},[],[716],{"type":51,"value":74},{"type":51,"value":718}," next to ",{"type":45,"tag":69,"props":720,"children":722},{"className":721},[],[723],{"type":51,"value":724},"dbt_project.yml",{"type":51,"value":726}," (the ",{"type":45,"tag":109,"props":728,"children":729},{},[730],{"type":51,"value":731},"repo root",{"type":51,"value":733},", not inside ",{"type":45,"tag":69,"props":735,"children":737},{"className":736},[],[738],{"type":51,"value":739},"context/",{"type":51,"value":741},"). AI coding tools auto-load this file at session start, so it's the canonical place for \"how to use this project\". Adapt the paths and connection name to your setup:",{"type":45,"tag":205,"props":743,"children":747},{"className":744,"code":745,"language":746,"meta":7,"style":7},"language-markdown shiki shiki-themes github-dark","# AGENTS.md\n\nThis repo contains a dbt project plus a Bruin context layer documenting the\nwarehouse it builds. Use this guide before reading code or running queries.\n\n## Canonical workflow\n\n1. **Read context first.** Before querying, open the relevant\n   `context/assets/\u003Cschema>/\u003Ctable>.asset.yml`. It has the description, grain,\n   column docs, and quality checks for that table — written from real samples.\n2. **Use Bruin MCP for tooling questions.** Anything like \"how does\n   `bruin import` work?\" or \"what asset types exist?\" — call the MCP server,\n   don't guess from training data.\n3. **Use `bruin query` for SQL.** Always pass `--config-file context/.bruin.yml`\n   so the scoped connection is used.\n4. **Cite the asset(s) you read.** When answering, reference the\n   `context/assets/...asset.yml` files you used.\n\n## Data access\n\n- Connection name: `contoso_dbt_bq`\n- Auth: Application Default Credentials (inherits `gcloud auth application-default login`)\n- This is **read-only.** Never INSERT, UPDATE, DELETE, MERGE, or DROP.\n- Always show the SQL before executing it.\n- Use `LIMIT 100` (or smaller) when exploring an unfamiliar table.\n\n## Layout\n\n- `models/` — dbt models. Don't run `dbt` for analysis questions; the\n  warehouse is already built. Read these only when asked about transformation logic.\n- `context/assets/contoso_dbt_raw/` — raw dlt-loaded tables (lowest level).\n- `context/assets/contoso_dbt_staging/` — `stg_*` cleaned/typed views.\n- `context/assets/contoso_dbt_reports/` — `rpt_*` mart-level reports.\n  Prefer these for business questions; staging is for ad-hoc deep dives.\n\n## Things to avoid\n\n- **Don't hand-edit `context/assets/*.asset.yml`.** They're regenerated by\n  `generate_context.sh`. Improve descriptions in the dbt model's `schema.yml`\n  upstream and re-run the generator.\n- **Don't mix configs across pipelines.** This project's connection lives in\n  `context/.bruin.yml`; other Bruin pipelines in the repo have their own.\n  Always use `--config-file`.\n- **Don't trust row counts in descriptions.** They're snapshot-time and may\n  be stale. If a question hinges on exact size, run `SELECT COUNT(*)` yourself.\n","markdown",[748],{"type":45,"tag":69,"props":749,"children":750},{"__ignoreMap":7},[751,759,768,776,784,791,799,806,814,822,831,840,849,858,867,876,885,894,902,911,919,928,937,946,955,964,972,981,989,998,1007,1016,1025,1034,1043,1051,1060,1068,1077,1086,1095,1104,1113,1122,1131],{"type":45,"tag":215,"props":752,"children":753},{"class":217,"line":218},[754],{"type":45,"tag":215,"props":755,"children":756},{},[757],{"type":51,"value":758},"# AGENTS.md\n",{"type":45,"tag":215,"props":760,"children":761},{"class":217,"line":357},[762],{"type":45,"tag":215,"props":763,"children":765},{"emptyLinePlaceholder":764},true,[766],{"type":51,"value":767},"\n",{"type":45,"tag":215,"props":769,"children":770},{"class":217,"line":366},[771],{"type":45,"tag":215,"props":772,"children":773},{},[774],{"type":51,"value":775},"This repo contains a dbt project plus a Bruin context layer documenting the\n",{"type":45,"tag":215,"props":777,"children":778},{"class":217,"line":375},[779],{"type":45,"tag":215,"props":780,"children":781},{},[782],{"type":51,"value":783},"warehouse it builds. Use this guide before reading code or running queries.\n",{"type":45,"tag":215,"props":785,"children":786},{"class":217,"line":21},[787],{"type":45,"tag":215,"props":788,"children":789},{"emptyLinePlaceholder":764},[790],{"type":51,"value":767},{"type":45,"tag":215,"props":792,"children":793},{"class":217,"line":392},[794],{"type":45,"tag":215,"props":795,"children":796},{},[797],{"type":51,"value":798},"## Canonical workflow\n",{"type":45,"tag":215,"props":800,"children":801},{"class":217,"line":11},[802],{"type":45,"tag":215,"props":803,"children":804},{"emptyLinePlaceholder":764},[805],{"type":51,"value":767},{"type":45,"tag":215,"props":807,"children":808},{"class":217,"line":409},[809],{"type":45,"tag":215,"props":810,"children":811},{},[812],{"type":51,"value":813},"1. **Read context first.** Before querying, open the relevant\n",{"type":45,"tag":215,"props":815,"children":816},{"class":217,"line":674},[817],{"type":45,"tag":215,"props":818,"children":819},{},[820],{"type":51,"value":821},"   `context/assets/\u003Cschema>/\u003Ctable>.asset.yml`. It has the description, grain,\n",{"type":45,"tag":215,"props":823,"children":825},{"class":217,"line":824},10,[826],{"type":45,"tag":215,"props":827,"children":828},{},[829],{"type":51,"value":830},"   column docs, and quality checks for that table — written from real samples.\n",{"type":45,"tag":215,"props":832,"children":834},{"class":217,"line":833},11,[835],{"type":45,"tag":215,"props":836,"children":837},{},[838],{"type":51,"value":839},"2. **Use Bruin MCP for tooling questions.** Anything like \"how does\n",{"type":45,"tag":215,"props":841,"children":843},{"class":217,"line":842},12,[844],{"type":45,"tag":215,"props":845,"children":846},{},[847],{"type":51,"value":848},"   `bruin import` work?\" or \"what asset types exist?\" — call the MCP server,\n",{"type":45,"tag":215,"props":850,"children":852},{"class":217,"line":851},13,[853],{"type":45,"tag":215,"props":854,"children":855},{},[856],{"type":51,"value":857},"   don't guess from training data.\n",{"type":45,"tag":215,"props":859,"children":861},{"class":217,"line":860},14,[862],{"type":45,"tag":215,"props":863,"children":864},{},[865],{"type":51,"value":866},"3. **Use `bruin query` for SQL.** Always pass `--config-file context/.bruin.yml`\n",{"type":45,"tag":215,"props":868,"children":870},{"class":217,"line":869},15,[871],{"type":45,"tag":215,"props":872,"children":873},{},[874],{"type":51,"value":875},"   so the scoped connection is used.\n",{"type":45,"tag":215,"props":877,"children":879},{"class":217,"line":878},16,[880],{"type":45,"tag":215,"props":881,"children":882},{},[883],{"type":51,"value":884},"4. **Cite the asset(s) you read.** When answering, reference the\n",{"type":45,"tag":215,"props":886,"children":888},{"class":217,"line":887},17,[889],{"type":45,"tag":215,"props":890,"children":891},{},[892],{"type":51,"value":893},"   `context/assets/...asset.yml` files you used.\n",{"type":45,"tag":215,"props":895,"children":897},{"class":217,"line":896},18,[898],{"type":45,"tag":215,"props":899,"children":900},{"emptyLinePlaceholder":764},[901],{"type":51,"value":767},{"type":45,"tag":215,"props":903,"children":905},{"class":217,"line":904},19,[906],{"type":45,"tag":215,"props":907,"children":908},{},[909],{"type":51,"value":910},"## Data access\n",{"type":45,"tag":215,"props":912,"children":914},{"class":217,"line":913},20,[915],{"type":45,"tag":215,"props":916,"children":917},{"emptyLinePlaceholder":764},[918],{"type":51,"value":767},{"type":45,"tag":215,"props":920,"children":922},{"class":217,"line":921},21,[923],{"type":45,"tag":215,"props":924,"children":925},{},[926],{"type":51,"value":927},"- Connection name: `contoso_dbt_bq`\n",{"type":45,"tag":215,"props":929,"children":931},{"class":217,"line":930},22,[932],{"type":45,"tag":215,"props":933,"children":934},{},[935],{"type":51,"value":936},"- Auth: Application Default Credentials (inherits `gcloud auth application-default login`)\n",{"type":45,"tag":215,"props":938,"children":940},{"class":217,"line":939},23,[941],{"type":45,"tag":215,"props":942,"children":943},{},[944],{"type":51,"value":945},"- This is **read-only.** Never INSERT, UPDATE, DELETE, MERGE, or DROP.\n",{"type":45,"tag":215,"props":947,"children":949},{"class":217,"line":948},24,[950],{"type":45,"tag":215,"props":951,"children":952},{},[953],{"type":51,"value":954},"- Always show the SQL before executing it.\n",{"type":45,"tag":215,"props":956,"children":958},{"class":217,"line":957},25,[959],{"type":45,"tag":215,"props":960,"children":961},{},[962],{"type":51,"value":963},"- Use `LIMIT 100` (or smaller) when exploring an unfamiliar table.\n",{"type":45,"tag":215,"props":965,"children":967},{"class":217,"line":966},26,[968],{"type":45,"tag":215,"props":969,"children":970},{"emptyLinePlaceholder":764},[971],{"type":51,"value":767},{"type":45,"tag":215,"props":973,"children":975},{"class":217,"line":974},27,[976],{"type":45,"tag":215,"props":977,"children":978},{},[979],{"type":51,"value":980},"## Layout\n",{"type":45,"tag":215,"props":982,"children":984},{"class":217,"line":983},28,[985],{"type":45,"tag":215,"props":986,"children":987},{"emptyLinePlaceholder":764},[988],{"type":51,"value":767},{"type":45,"tag":215,"props":990,"children":992},{"class":217,"line":991},29,[993],{"type":45,"tag":215,"props":994,"children":995},{},[996],{"type":51,"value":997},"- `models/` — dbt models. Don't run `dbt` for analysis questions; the\n",{"type":45,"tag":215,"props":999,"children":1001},{"class":217,"line":1000},30,[1002],{"type":45,"tag":215,"props":1003,"children":1004},{},[1005],{"type":51,"value":1006},"  warehouse is already built. Read these only when asked about transformation logic.\n",{"type":45,"tag":215,"props":1008,"children":1010},{"class":217,"line":1009},31,[1011],{"type":45,"tag":215,"props":1012,"children":1013},{},[1014],{"type":51,"value":1015},"- `context/assets/contoso_dbt_raw/` — raw dlt-loaded tables (lowest level).\n",{"type":45,"tag":215,"props":1017,"children":1019},{"class":217,"line":1018},32,[1020],{"type":45,"tag":215,"props":1021,"children":1022},{},[1023],{"type":51,"value":1024},"- `context/assets/contoso_dbt_staging/` — `stg_*` cleaned/typed views.\n",{"type":45,"tag":215,"props":1026,"children":1028},{"class":217,"line":1027},33,[1029],{"type":45,"tag":215,"props":1030,"children":1031},{},[1032],{"type":51,"value":1033},"- `context/assets/contoso_dbt_reports/` — `rpt_*` mart-level reports.\n",{"type":45,"tag":215,"props":1035,"children":1037},{"class":217,"line":1036},34,[1038],{"type":45,"tag":215,"props":1039,"children":1040},{},[1041],{"type":51,"value":1042},"  Prefer these for business questions; staging is for ad-hoc deep dives.\n",{"type":45,"tag":215,"props":1044,"children":1046},{"class":217,"line":1045},35,[1047],{"type":45,"tag":215,"props":1048,"children":1049},{"emptyLinePlaceholder":764},[1050],{"type":51,"value":767},{"type":45,"tag":215,"props":1052,"children":1054},{"class":217,"line":1053},36,[1055],{"type":45,"tag":215,"props":1056,"children":1057},{},[1058],{"type":51,"value":1059},"## Things to avoid\n",{"type":45,"tag":215,"props":1061,"children":1063},{"class":217,"line":1062},37,[1064],{"type":45,"tag":215,"props":1065,"children":1066},{"emptyLinePlaceholder":764},[1067],{"type":51,"value":767},{"type":45,"tag":215,"props":1069,"children":1071},{"class":217,"line":1070},38,[1072],{"type":45,"tag":215,"props":1073,"children":1074},{},[1075],{"type":51,"value":1076},"- **Don't hand-edit `context/assets/*.asset.yml`.** They're regenerated by\n",{"type":45,"tag":215,"props":1078,"children":1080},{"class":217,"line":1079},39,[1081],{"type":45,"tag":215,"props":1082,"children":1083},{},[1084],{"type":51,"value":1085},"  `generate_context.sh`. Improve descriptions in the dbt model's `schema.yml`\n",{"type":45,"tag":215,"props":1087,"children":1089},{"class":217,"line":1088},40,[1090],{"type":45,"tag":215,"props":1091,"children":1092},{},[1093],{"type":51,"value":1094},"  upstream and re-run the generator.\n",{"type":45,"tag":215,"props":1096,"children":1098},{"class":217,"line":1097},41,[1099],{"type":45,"tag":215,"props":1100,"children":1101},{},[1102],{"type":51,"value":1103},"- **Don't mix configs across pipelines.** This project's connection lives in\n",{"type":45,"tag":215,"props":1105,"children":1107},{"class":217,"line":1106},42,[1108],{"type":45,"tag":215,"props":1109,"children":1110},{},[1111],{"type":51,"value":1112},"  `context/.bruin.yml`; other Bruin pipelines in the repo have their own.\n",{"type":45,"tag":215,"props":1114,"children":1116},{"class":217,"line":1115},43,[1117],{"type":45,"tag":215,"props":1118,"children":1119},{},[1120],{"type":51,"value":1121},"  Always use `--config-file`.\n",{"type":45,"tag":215,"props":1123,"children":1125},{"class":217,"line":1124},44,[1126],{"type":45,"tag":215,"props":1127,"children":1128},{},[1129],{"type":51,"value":1130},"- **Don't trust row counts in descriptions.** They're snapshot-time and may\n",{"type":45,"tag":215,"props":1132,"children":1134},{"class":217,"line":1133},45,[1135],{"type":45,"tag":215,"props":1136,"children":1137},{},[1138],{"type":51,"value":1139},"  be stale. If a question hinges on exact size, run `SELECT COUNT(*)` yourself.\n",{"type":45,"tag":174,"props":1141,"children":1143},{"id":1142},"_4-try-the-loop-end-to-end",[1144],{"type":51,"value":1145},"4. Try the loop end-to-end",{"type":45,"tag":103,"props":1147,"children":1148},{},[1149],{"type":51,"value":1150},"Open your AI tool in this repo and ask a real question, e.g.:",{"type":45,"tag":1152,"props":1153,"children":1154},"blockquote",{},[1155],{"type":45,"tag":103,"props":1156,"children":1157},{},[1158,1160,1166],{"type":51,"value":1159},"\"Which retail categories had the largest year-over-year revenue change in 2024 vs. 2023? Show me your SQL before running it, and cite which ",{"type":45,"tag":69,"props":1161,"children":1163},{"className":1162},[],[1164],{"type":51,"value":1165},"context/assets/...",{"type":51,"value":1167}," files you used.\"",{"type":45,"tag":103,"props":1169,"children":1170},{},[1171],{"type":51,"value":1172},"A correctly-wired agent will:",{"type":45,"tag":54,"props":1174,"children":1175},{},[1176,1188,1201,1212],{"type":45,"tag":58,"props":1177,"children":1178},{},[1179,1180,1186],{"type":51,"value":305},{"type":45,"tag":69,"props":1181,"children":1183},{"className":1182},[],[1184],{"type":51,"value":1185},"context/assets/contoso_dbt_reports/rpt_revenue_by_segment.asset.yml",{"type":51,"value":1187}," and confirm the grain",{"type":45,"tag":58,"props":1189,"children":1190},{},[1191,1193,1199],{"type":51,"value":1192},"Draft a SQL query against ",{"type":45,"tag":69,"props":1194,"children":1196},{"className":1195},[],[1197],{"type":51,"value":1198},"contoso_dbt_reports.rpt_revenue_by_segment",{"type":51,"value":1200}," filtered by year",{"type":45,"tag":58,"props":1202,"children":1203},{},[1204,1206],{"type":51,"value":1205},"Show the SQL, wait for a go-ahead, then run ",{"type":45,"tag":69,"props":1207,"children":1209},{"className":1208},[],[1210],{"type":51,"value":1211},"bruin query --config-file context/.bruin.yml --connection contoso_dbt_bq --query \"...\"",{"type":45,"tag":58,"props":1213,"children":1214},{},[1215],{"type":51,"value":1216},"Cite the asset YAML it read",{"type":45,"tag":103,"props":1218,"children":1219},{},[1220,1222,1227],{"type":51,"value":1221},"If it skips step 1 (reading the asset), tighten ",{"type":45,"tag":69,"props":1223,"children":1225},{"className":1224},[],[1226],{"type":51,"value":74},{"type":51,"value":1228}," — the canonical workflow section is what enforces this behavior.",{"type":45,"tag":46,"props":1230,"children":1232},{"id":1231},"lessons-learned",[1233],{"type":51,"value":1234},"Lessons learned",{"type":45,"tag":117,"props":1236,"children":1237},{},[1238,1263,1273,1290,1315,1333],{"type":45,"tag":58,"props":1239,"children":1240},{},[1241,1253,1255,1261],{"type":45,"tag":109,"props":1242,"children":1243},{},[1244,1246,1252],{"type":51,"value":1245},"Isolate ",{"type":45,"tag":69,"props":1247,"children":1249},{"className":1248},[],[1250],{"type":51,"value":1251},".bruin.yml",{"type":51,"value":451},{"type":51,"value":1254}," A broken sibling connection breaks every command. Always ",{"type":45,"tag":69,"props":1256,"children":1258},{"className":1257},[],[1259],{"type":51,"value":1260},"--config-file",{"type":51,"value":1262},"-scope when working in a sub-pipeline.",{"type":45,"tag":58,"props":1264,"children":1265},{},[1266,1271],{"type":45,"tag":109,"props":1267,"children":1268},{},[1269],{"type":51,"value":1270},"ADC > keyfiles",{"type":51,"value":1272}," for agent workflows. No secrets to rotate, no files to gitignore, and the agent runs as the human's identity.",{"type":45,"tag":58,"props":1274,"children":1275},{},[1276,1281,1283,1289],{"type":45,"tag":109,"props":1277,"children":1278},{},[1279],{"type":51,"value":1280},"Filter loader-internal tables before enhance",{"type":51,"value":1282}," — otherwise Claude burns time describing ",{"type":45,"tag":69,"props":1284,"children":1286},{"className":1285},[],[1287],{"type":51,"value":1288},"_dlt_pipeline_state",{"type":51,"value":451},{"type":45,"tag":58,"props":1291,"children":1292},{},[1293,1313],{"type":45,"tag":109,"props":1294,"children":1295},{},[1296,1298,1304,1306,1312],{"type":51,"value":1297},"Always ",{"type":45,"tag":69,"props":1299,"children":1301},{"className":1300},[],[1302],{"type":51,"value":1303},"bruin validate",{"type":51,"value":1305}," after ",{"type":45,"tag":69,"props":1307,"children":1309},{"className":1308},[],[1310],{"type":51,"value":1311},"ai enhance",{"type":51,"value":451},{"type":51,"value":1314}," Cheap insurance against rare YAML corruption.",{"type":45,"tag":58,"props":1316,"children":1317},{},[1318,1331],{"type":45,"tag":109,"props":1319,"children":1320},{},[1321,1323,1329],{"type":51,"value":1322},"Re-run ",{"type":45,"tag":69,"props":1324,"children":1326},{"className":1325},[],[1327],{"type":51,"value":1328},"generate_context.sh",{"type":51,"value":1330}," after schema changes.",{"type":51,"value":1332}," Descriptions are snapshot-time; a column rename without regeneration leaves the agent quietly wrong.",{"type":45,"tag":58,"props":1334,"children":1335},{},[1336,1341,1343,1349],{"type":45,"tag":109,"props":1337,"children":1338},{},[1339],{"type":51,"value":1340},"Don't hand-edit generated YAMLs.",{"type":51,"value":1342}," Improve them upstream in the dbt model's ",{"type":45,"tag":69,"props":1344,"children":1346},{"className":1345},[],[1347],{"type":51,"value":1348},"schema.yml",{"type":51,"value":1350}," so the next import + enhance picks the change up.",{"type":45,"tag":46,"props":1352,"children":1354},{"id":1353},"adapting-this-to-a-different-dbt-project",[1355],{"type":51,"value":1356},"Adapting this to a different dbt project",{"type":45,"tag":103,"props":1358,"children":1359},{},[1360],{"type":51,"value":1361},"The minimal recipe for any existing dbt + warehouse setup:",{"type":45,"tag":54,"props":1363,"children":1364},{},[1365,1374,1393,1402,1407,1416,1425],{"type":45,"tag":58,"props":1366,"children":1367},{},[1368],{"type":45,"tag":69,"props":1369,"children":1371},{"className":1370},[],[1372],{"type":51,"value":1373},"mkdir -p context/assets",{"type":45,"tag":58,"props":1375,"children":1376},{},[1377,1379,1385,1387],{"type":51,"value":1378},"Write ",{"type":45,"tag":69,"props":1380,"children":1382},{"className":1381},[],[1383],{"type":51,"value":1384},"context/.bruin.yml",{"type":51,"value":1386}," (scoped) and ",{"type":45,"tag":69,"props":1388,"children":1390},{"className":1389},[],[1391],{"type":51,"value":1392},"context/pipeline.yml",{"type":45,"tag":58,"props":1394,"children":1395},{},[1396],{"type":45,"tag":69,"props":1397,"children":1399},{"className":1398},[],[1400],{"type":51,"value":1401},"bruin import database --schemas \u003Cyours...> context",{"type":45,"tag":58,"props":1403,"children":1404},{},[1405],{"type":51,"value":1406},"Delete loader-internal asset YAMLs",{"type":45,"tag":58,"props":1408,"children":1409},{},[1410],{"type":45,"tag":69,"props":1411,"children":1413},{"className":1412},[],[1414],{"type":51,"value":1415},"bruin ai enhance --claude context/assets",{"type":45,"tag":58,"props":1417,"children":1418},{},[1419],{"type":45,"tag":69,"props":1420,"children":1422},{"className":1421},[],[1423],{"type":51,"value":1424},"bruin validate --config-file context/.bruin.yml context",{"type":45,"tag":58,"props":1426,"children":1427},{},[1428,1429,1434,1436,1441,1442],{"type":51,"value":67},{"type":45,"tag":69,"props":1430,"children":1432},{"className":1431},[],[1433],{"type":51,"value":74},{"type":51,"value":1435}," that points agents at ",{"type":45,"tag":69,"props":1437,"children":1439},{"className":1438},[],[1440],{"type":51,"value":82},{"type":51,"value":84},{"type":45,"tag":69,"props":1443,"children":1445},{"className":1444},[],[1446],{"type":51,"value":90},{"type":45,"tag":103,"props":1448,"children":1449},{},[1450,1452,1457],{"type":51,"value":1451},"That's the whole context layer. Everything else (",{"type":45,"tag":69,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":51,"value":1328},{"type":51,"value":1458},", parity scripts, the contoso reference) is ergonomics on top.",{"type":45,"tag":46,"props":1460,"children":1462},{"id":1461},"what-just-happened",[1463],{"type":51,"value":1464},"What just happened",{"type":45,"tag":103,"props":1466,"children":1467},{},[1468,1470,1475,1477,1482],{"type":51,"value":1469},"You've turned an existing dbt + warehouse setup into something an AI agent can navigate confidently: it knows your tables (from import), understands what they mean (from enhancement), can ask Bruin tooling questions (from MCP), can run SQL safely (from ",{"type":45,"tag":69,"props":1471,"children":1473},{"className":1472},[],[1474],{"type":51,"value":90},{"type":51,"value":1476}," + ADC), and follows a canonical workflow (from ",{"type":45,"tag":69,"props":1478,"children":1480},{"className":1479},[],[1481],{"type":51,"value":74},{"type":51,"value":1483},"). The dbt project keeps doing its job — building tables — and the Bruin context layer keeps doing the new one: making those tables legible to AI.",{"type":45,"tag":1485,"props":1486,"children":1487},"style",{},[1488],{"type":51,"value":1489},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":7,"searchDepth":357,"depth":357,"links":1491},[1492,1493,1494,1502,1503,1504],{"id":48,"depth":357,"text":52},{"id":98,"depth":357,"text":101},{"id":169,"depth":357,"text":172,"children":1495},[1496,1497,1499,1501],{"id":176,"depth":366,"text":179},{"id":531,"depth":366,"text":1498},"2. Confirm bruin query works as the agent will use it",{"id":696,"depth":366,"text":1500},"3. Add an AGENTS.md at the repo root",{"id":1142,"depth":366,"text":1145},{"id":1231,"depth":357,"text":1234},{"id":1353,"depth":357,"text":1356},{"id":1461,"depth":357,"text":1464},"content:tutorials:dbt-bruin-analyst:wire-up-agent.md","content","tutorials/dbt-bruin-analyst/wire-up-agent.md","tutorials/dbt-bruin-analyst/wire-up-agent","md",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"readingTime":11,"category":12,"tags":1511,"difficulty":20,"module":5,"step":21,"variants":1512,"journeys":1513,"learnMore":1514,"stepGif":36,"author":1518,"body":1519,"_type":746,"_id":1505,"_source":1506,"_file":1507,"_stem":1508,"_extension":1509},[14,15,16,17,18,19],[17,18,19],[24,25],[1515,1516,1517],{"label":28,"url":29},{"label":31,"url":32},{"label":34,"url":35},{"name":38,"role":39,"image":40},{"type":42,"children":1520,"toc":2671},[1521,1525,1557,1561,1570,1606,1610,1614,1618,1622,1890,1900,1909,2018,2028,2038,2065,2386,2390,2394,2407,2411,2447,2457,2461,2554,2558,2562,2637,2647,2651,2667],{"type":45,"tag":46,"props":1522,"children":1523},{"id":48},[1524],{"type":51,"value":52},{"type":45,"tag":54,"props":1526,"children":1527},{},[1528,1532,1553],{"type":45,"tag":58,"props":1529,"children":1530},{},[1531],{"type":51,"value":62},{"type":45,"tag":58,"props":1533,"children":1534},{},[1535,1536,1541,1542,1547,1548],{"type":51,"value":67},{"type":45,"tag":69,"props":1537,"children":1539},{"className":1538},[],[1540],{"type":51,"value":74},{"type":51,"value":76},{"type":45,"tag":69,"props":1543,"children":1545},{"className":1544},[],[1546],{"type":51,"value":82},{"type":51,"value":84},{"type":45,"tag":69,"props":1549,"children":1551},{"className":1550},[],[1552],{"type":51,"value":90},{"type":45,"tag":58,"props":1554,"children":1555},{},[1556],{"type":51,"value":95},{"type":45,"tag":46,"props":1558,"children":1559},{"id":98},[1560],{"type":51,"value":101},{"type":45,"tag":103,"props":1562,"children":1563},{},[1564,1565,1569],{"type":51,"value":107},{"type":45,"tag":109,"props":1566,"children":1567},{},[1568],{"type":51,"value":113},{"type":51,"value":115},{"type":45,"tag":117,"props":1571,"children":1572},{},[1573,1577,1587],{"type":45,"tag":58,"props":1574,"children":1575},{},[1576],{"type":51,"value":124},{"type":45,"tag":58,"props":1578,"children":1579},{},[1580,1581,1586],{"type":51,"value":129},{"type":45,"tag":69,"props":1582,"children":1584},{"className":1583},[],[1585],{"type":51,"value":90},{"type":51,"value":136},{"type":45,"tag":58,"props":1588,"children":1589},{},[1590,1591,1595,1596,1600,1601],{"type":51,"value":141},{"type":45,"tag":143,"props":1592,"children":1593},{},[1594],{"type":51,"value":147},{"type":51,"value":149},{"type":45,"tag":143,"props":1597,"children":1598},{},[1599],{"type":51,"value":154},{"type":51,"value":156},{"type":45,"tag":69,"props":1602,"children":1604},{"className":1603},[],[1605],{"type":51,"value":74},{"type":45,"tag":103,"props":1607,"children":1608},{},[1609],{"type":51,"value":166},{"type":45,"tag":46,"props":1611,"children":1612},{"id":169},[1613],{"type":51,"value":172},{"type":45,"tag":174,"props":1615,"children":1616},{"id":176},[1617],{"type":51,"value":179},{"type":45,"tag":103,"props":1619,"children":1620},{},[1621],{"type":51,"value":184},{"type":45,"tag":186,"props":1623,"children":1624},{":variants":188},[1625,1698,1827],{"type":45,"tag":191,"props":1626,"children":1627},{"v-slot:claude-code":7},[1628,1632,1636,1673,1677],{"type":45,"tag":174,"props":1629,"children":1630},{"id":196},[1631],{"type":51,"value":17},{"type":45,"tag":103,"props":1633,"children":1634},{},[1635],{"type":51,"value":203},{"type":45,"tag":205,"props":1637,"children":1638},{"className":207,"code":208,"language":209,"meta":7,"style":7},[1639],{"type":45,"tag":69,"props":1640,"children":1641},{"__ignoreMap":7},[1642],{"type":45,"tag":215,"props":1643,"children":1644},{"class":217,"line":218},[1645,1649,1653,1657,1661,1665,1669],{"type":45,"tag":215,"props":1646,"children":1647},{"style":222},[1648],{"type":51,"value":225},{"type":45,"tag":215,"props":1650,"children":1651},{"style":228},[1652],{"type":51,"value":231},{"type":45,"tag":215,"props":1654,"children":1655},{"style":228},[1656],{"type":51,"value":236},{"type":45,"tag":215,"props":1658,"children":1659},{"style":228},[1660],{"type":51,"value":241},{"type":45,"tag":215,"props":1662,"children":1663},{"style":244},[1664],{"type":51,"value":247},{"type":45,"tag":215,"props":1666,"children":1667},{"style":228},[1668],{"type":51,"value":241},{"type":45,"tag":215,"props":1670,"children":1671},{"style":228},[1672],{"type":51,"value":256},{"type":45,"tag":103,"props":1674,"children":1675},{},[1676],{"type":51,"value":261},{"type":45,"tag":103,"props":1678,"children":1679},{},[1680,1681,1691,1692,1697],{"type":51,"value":266},{"type":45,"tag":143,"props":1682,"children":1683},{},[1684,1685,1690],{"type":51,"value":271},{"type":45,"tag":69,"props":1686,"children":1688},{"className":1687},[],[1689],{"type":51,"value":277},{"type":51,"value":279},{"type":51,"value":281},{"type":45,"tag":69,"props":1693,"children":1695},{"className":1694},[],[1696],{"type":51,"value":287},{"type":51,"value":289},{"type":45,"tag":191,"props":1699,"children":1700},{"v-slot:cursor":7},[1701,1705,1737,1799,1806],{"type":45,"tag":174,"props":1702,"children":1703},{"id":295},[1704],{"type":51,"value":18},{"type":45,"tag":54,"props":1706,"children":1707},{},[1708,1717,1725,1733],{"type":45,"tag":58,"props":1709,"children":1710},{},[1711,1712,1716],{"type":51,"value":305},{"type":45,"tag":109,"props":1713,"children":1714},{},[1715],{"type":51,"value":310},{"type":51,"value":312},{"type":45,"tag":58,"props":1718,"children":1719},{},[1720,1721],{"type":51,"value":317},{"type":45,"tag":109,"props":1722,"children":1723},{},[1724],{"type":51,"value":322},{"type":45,"tag":58,"props":1726,"children":1727},{},[1728,1729],{"type":51,"value":327},{"type":45,"tag":109,"props":1730,"children":1731},{},[1732],{"type":51,"value":332},{"type":45,"tag":58,"props":1734,"children":1735},{},[1736],{"type":51,"value":337},{"type":45,"tag":205,"props":1738,"children":1739},{"className":340,"code":341,"language":342,"meta":7,"style":7},[1740],{"type":45,"tag":69,"props":1741,"children":1742},{"__ignoreMap":7},[1743,1750,1757,1764,1771,1778,1785,1792],{"type":45,"tag":215,"props":1744,"children":1745},{"class":217,"line":218},[1746],{"type":45,"tag":215,"props":1747,"children":1748},{},[1749],{"type":51,"value":354},{"type":45,"tag":215,"props":1751,"children":1752},{"class":217,"line":357},[1753],{"type":45,"tag":215,"props":1754,"children":1755},{},[1756],{"type":51,"value":363},{"type":45,"tag":215,"props":1758,"children":1759},{"class":217,"line":366},[1760],{"type":45,"tag":215,"props":1761,"children":1762},{},[1763],{"type":51,"value":372},{"type":45,"tag":215,"props":1765,"children":1766},{"class":217,"line":375},[1767],{"type":45,"tag":215,"props":1768,"children":1769},{},[1770],{"type":51,"value":381},{"type":45,"tag":215,"props":1772,"children":1773},{"class":217,"line":21},[1774],{"type":45,"tag":215,"props":1775,"children":1776},{},[1777],{"type":51,"value":389},{"type":45,"tag":215,"props":1779,"children":1780},{"class":217,"line":392},[1781],{"type":45,"tag":215,"props":1782,"children":1783},{},[1784],{"type":51,"value":398},{"type":45,"tag":215,"props":1786,"children":1787},{"class":217,"line":11},[1788],{"type":45,"tag":215,"props":1789,"children":1790},{},[1791],{"type":51,"value":406},{"type":45,"tag":215,"props":1793,"children":1794},{"class":217,"line":409},[1795],{"type":45,"tag":215,"props":1796,"children":1797},{},[1798],{"type":51,"value":415},{"type":45,"tag":54,"props":1800,"children":1801},{"start":21},[1802],{"type":45,"tag":58,"props":1803,"children":1804},{},[1805],{"type":51,"value":423},{"type":45,"tag":103,"props":1807,"children":1808},{},[1809,1810,1820,1821,1826],{"type":51,"value":428},{"type":45,"tag":143,"props":1811,"children":1812},{},[1813,1814,1819],{"type":51,"value":433},{"type":45,"tag":69,"props":1815,"children":1817},{"className":1816},[],[1818],{"type":51,"value":439},{"type":51,"value":441},{"type":51,"value":443},{"type":45,"tag":69,"props":1822,"children":1824},{"className":1823},[],[1825],{"type":51,"value":449},{"type":51,"value":451},{"type":45,"tag":191,"props":1828,"children":1829},{"v-slot:codex":7},[1830,1834,1844,1871,1875],{"type":45,"tag":174,"props":1831,"children":1832},{"id":457},[1833],{"type":51,"value":19},{"type":45,"tag":103,"props":1835,"children":1836},{},[1837,1838,1843],{"type":51,"value":464},{"type":45,"tag":69,"props":1839,"children":1841},{"className":1840},[],[1842],{"type":51,"value":470},{"type":51,"value":472},{"type":45,"tag":205,"props":1845,"children":1846},{"className":475,"code":476,"language":477,"meta":7,"style":7},[1847],{"type":45,"tag":69,"props":1848,"children":1849},{"__ignoreMap":7},[1850,1857,1864],{"type":45,"tag":215,"props":1851,"children":1852},{"class":217,"line":218},[1853],{"type":45,"tag":215,"props":1854,"children":1855},{},[1856],{"type":51,"value":489},{"type":45,"tag":215,"props":1858,"children":1859},{"class":217,"line":357},[1860],{"type":45,"tag":215,"props":1861,"children":1862},{},[1863],{"type":51,"value":497},{"type":45,"tag":215,"props":1865,"children":1866},{"class":217,"line":366},[1867],{"type":45,"tag":215,"props":1868,"children":1869},{},[1870],{"type":51,"value":505},{"type":45,"tag":103,"props":1872,"children":1873},{},[1874],{"type":51,"value":510},{"type":45,"tag":103,"props":1876,"children":1877},{},[1878,1879,1883,1884,1889],{"type":51,"value":515},{"type":45,"tag":143,"props":1880,"children":1881},{},[1882],{"type":51,"value":520},{"type":51,"value":522},{"type":45,"tag":69,"props":1885,"children":1887},{"className":1886},[],[1888],{"type":51,"value":449},{"type":51,"value":451},{"type":45,"tag":174,"props":1891,"children":1892},{"id":531},[1893,1894,1899],{"type":51,"value":534},{"type":45,"tag":69,"props":1895,"children":1897},{"className":1896},[],[1898],{"type":51,"value":90},{"type":51,"value":541},{"type":45,"tag":103,"props":1901,"children":1902},{},[1903,1904,1908],{"type":51,"value":546},{"type":45,"tag":109,"props":1905,"children":1906},{},[1907],{"type":51,"value":551},{"type":51,"value":553},{"type":45,"tag":205,"props":1910,"children":1911},{"className":207,"code":556,"language":209,"meta":7,"style":7},[1912],{"type":45,"tag":69,"props":1913,"children":1914},{"__ignoreMap":7},[1915,1930,1945,1960,1971,1990,1997,2004,2011],{"type":45,"tag":215,"props":1916,"children":1917},{"class":217,"line":218},[1918,1922,1926],{"type":45,"tag":215,"props":1919,"children":1920},{"style":222},[1921],{"type":51,"value":277},{"type":45,"tag":215,"props":1923,"children":1924},{"style":228},[1925],{"type":51,"value":572},{"type":45,"tag":215,"props":1927,"children":1928},{"style":244},[1929],{"type":51,"value":577},{"type":45,"tag":215,"props":1931,"children":1932},{"class":217,"line":357},[1933,1937,1941],{"type":45,"tag":215,"props":1934,"children":1935},{"style":244},[1936],{"type":51,"value":585},{"type":45,"tag":215,"props":1938,"children":1939},{"style":228},[1940],{"type":51,"value":590},{"type":45,"tag":215,"props":1942,"children":1943},{"style":244},[1944],{"type":51,"value":577},{"type":45,"tag":215,"props":1946,"children":1947},{"class":217,"line":366},[1948,1952,1956],{"type":45,"tag":215,"props":1949,"children":1950},{"style":244},[1951],{"type":51,"value":602},{"type":45,"tag":215,"props":1953,"children":1954},{"style":228},[1955],{"type":51,"value":607},{"type":45,"tag":215,"props":1957,"children":1958},{"style":244},[1959],{"type":51,"value":577},{"type":45,"tag":215,"props":1961,"children":1962},{"class":217,"line":375},[1963,1967],{"type":45,"tag":215,"props":1964,"children":1965},{"style":244},[1966],{"type":51,"value":619},{"type":45,"tag":215,"props":1968,"children":1969},{"style":228},[1970],{"type":51,"value":624},{"type":45,"tag":215,"props":1972,"children":1973},{"class":217,"line":21},[1974,1978,1982,1986],{"type":45,"tag":215,"props":1975,"children":1976},{"style":228},[1977],{"type":51,"value":632},{"type":45,"tag":215,"props":1979,"children":1980},{"style":244},[1981],{"type":51,"value":637},{"type":45,"tag":215,"props":1983,"children":1984},{"style":228},[1985],{"type":51,"value":642},{"type":45,"tag":215,"props":1987,"children":1988},{"style":244},[1989],{"type":51,"value":647},{"type":45,"tag":215,"props":1991,"children":1992},{"class":217,"line":392},[1993],{"type":45,"tag":215,"props":1994,"children":1995},{"style":228},[1996],{"type":51,"value":655},{"type":45,"tag":215,"props":1998,"children":1999},{"class":217,"line":11},[2000],{"type":45,"tag":215,"props":2001,"children":2002},{"style":228},[2003],{"type":51,"value":663},{"type":45,"tag":215,"props":2005,"children":2006},{"class":217,"line":409},[2007],{"type":45,"tag":215,"props":2008,"children":2009},{"style":228},[2010],{"type":51,"value":671},{"type":45,"tag":215,"props":2012,"children":2013},{"class":217,"line":674},[2014],{"type":45,"tag":215,"props":2015,"children":2016},{"style":228},[2017],{"type":51,"value":680},{"type":45,"tag":103,"props":2019,"children":2020},{},[2021,2022,2027],{"type":51,"value":685},{"type":45,"tag":69,"props":2023,"children":2025},{"className":2024},[],[2026],{"type":51,"value":691},{"type":51,"value":693},{"type":45,"tag":174,"props":2029,"children":2030},{"id":696},[2031,2032,2037],{"type":51,"value":699},{"type":45,"tag":69,"props":2033,"children":2035},{"className":2034},[],[2036],{"type":51,"value":74},{"type":51,"value":706},{"type":45,"tag":103,"props":2039,"children":2040},{},[2041,2042,2047,2048,2053,2054,2058,2059,2064],{"type":51,"value":711},{"type":45,"tag":69,"props":2043,"children":2045},{"className":2044},[],[2046],{"type":51,"value":74},{"type":51,"value":718},{"type":45,"tag":69,"props":2049,"children":2051},{"className":2050},[],[2052],{"type":51,"value":724},{"type":51,"value":726},{"type":45,"tag":109,"props":2055,"children":2056},{},[2057],{"type":51,"value":731},{"type":51,"value":733},{"type":45,"tag":69,"props":2060,"children":2062},{"className":2061},[],[2063],{"type":51,"value":739},{"type":51,"value":741},{"type":45,"tag":205,"props":2066,"children":2067},{"className":744,"code":745,"language":746,"meta":7,"style":7},[2068],{"type":45,"tag":69,"props":2069,"children":2070},{"__ignoreMap":7},[2071,2078,2085,2092,2099,2106,2113,2120,2127,2134,2141,2148,2155,2162,2169,2176,2183,2190,2197,2204,2211,2218,2225,2232,2239,2246,2253,2260,2267,2274,2281,2288,2295,2302,2309,2316,2323,2330,2337,2344,2351,2358,2365,2372,2379],{"type":45,"tag":215,"props":2072,"children":2073},{"class":217,"line":218},[2074],{"type":45,"tag":215,"props":2075,"children":2076},{},[2077],{"type":51,"value":758},{"type":45,"tag":215,"props":2079,"children":2080},{"class":217,"line":357},[2081],{"type":45,"tag":215,"props":2082,"children":2083},{"emptyLinePlaceholder":764},[2084],{"type":51,"value":767},{"type":45,"tag":215,"props":2086,"children":2087},{"class":217,"line":366},[2088],{"type":45,"tag":215,"props":2089,"children":2090},{},[2091],{"type":51,"value":775},{"type":45,"tag":215,"props":2093,"children":2094},{"class":217,"line":375},[2095],{"type":45,"tag":215,"props":2096,"children":2097},{},[2098],{"type":51,"value":783},{"type":45,"tag":215,"props":2100,"children":2101},{"class":217,"line":21},[2102],{"type":45,"tag":215,"props":2103,"children":2104},{"emptyLinePlaceholder":764},[2105],{"type":51,"value":767},{"type":45,"tag":215,"props":2107,"children":2108},{"class":217,"line":392},[2109],{"type":45,"tag":215,"props":2110,"children":2111},{},[2112],{"type":51,"value":798},{"type":45,"tag":215,"props":2114,"children":2115},{"class":217,"line":11},[2116],{"type":45,"tag":215,"props":2117,"children":2118},{"emptyLinePlaceholder":764},[2119],{"type":51,"value":767},{"type":45,"tag":215,"props":2121,"children":2122},{"class":217,"line":409},[2123],{"type":45,"tag":215,"props":2124,"children":2125},{},[2126],{"type":51,"value":813},{"type":45,"tag":215,"props":2128,"children":2129},{"class":217,"line":674},[2130],{"type":45,"tag":215,"props":2131,"children":2132},{},[2133],{"type":51,"value":821},{"type":45,"tag":215,"props":2135,"children":2136},{"class":217,"line":824},[2137],{"type":45,"tag":215,"props":2138,"children":2139},{},[2140],{"type":51,"value":830},{"type":45,"tag":215,"props":2142,"children":2143},{"class":217,"line":833},[2144],{"type":45,"tag":215,"props":2145,"children":2146},{},[2147],{"type":51,"value":839},{"type":45,"tag":215,"props":2149,"children":2150},{"class":217,"line":842},[2151],{"type":45,"tag":215,"props":2152,"children":2153},{},[2154],{"type":51,"value":848},{"type":45,"tag":215,"props":2156,"children":2157},{"class":217,"line":851},[2158],{"type":45,"tag":215,"props":2159,"children":2160},{},[2161],{"type":51,"value":857},{"type":45,"tag":215,"props":2163,"children":2164},{"class":217,"line":860},[2165],{"type":45,"tag":215,"props":2166,"children":2167},{},[2168],{"type":51,"value":866},{"type":45,"tag":215,"props":2170,"children":2171},{"class":217,"line":869},[2172],{"type":45,"tag":215,"props":2173,"children":2174},{},[2175],{"type":51,"value":875},{"type":45,"tag":215,"props":2177,"children":2178},{"class":217,"line":878},[2179],{"type":45,"tag":215,"props":2180,"children":2181},{},[2182],{"type":51,"value":884},{"type":45,"tag":215,"props":2184,"children":2185},{"class":217,"line":887},[2186],{"type":45,"tag":215,"props":2187,"children":2188},{},[2189],{"type":51,"value":893},{"type":45,"tag":215,"props":2191,"children":2192},{"class":217,"line":896},[2193],{"type":45,"tag":215,"props":2194,"children":2195},{"emptyLinePlaceholder":764},[2196],{"type":51,"value":767},{"type":45,"tag":215,"props":2198,"children":2199},{"class":217,"line":904},[2200],{"type":45,"tag":215,"props":2201,"children":2202},{},[2203],{"type":51,"value":910},{"type":45,"tag":215,"props":2205,"children":2206},{"class":217,"line":913},[2207],{"type":45,"tag":215,"props":2208,"children":2209},{"emptyLinePlaceholder":764},[2210],{"type":51,"value":767},{"type":45,"tag":215,"props":2212,"children":2213},{"class":217,"line":921},[2214],{"type":45,"tag":215,"props":2215,"children":2216},{},[2217],{"type":51,"value":927},{"type":45,"tag":215,"props":2219,"children":2220},{"class":217,"line":930},[2221],{"type":45,"tag":215,"props":2222,"children":2223},{},[2224],{"type":51,"value":936},{"type":45,"tag":215,"props":2226,"children":2227},{"class":217,"line":939},[2228],{"type":45,"tag":215,"props":2229,"children":2230},{},[2231],{"type":51,"value":945},{"type":45,"tag":215,"props":2233,"children":2234},{"class":217,"line":948},[2235],{"type":45,"tag":215,"props":2236,"children":2237},{},[2238],{"type":51,"value":954},{"type":45,"tag":215,"props":2240,"children":2241},{"class":217,"line":957},[2242],{"type":45,"tag":215,"props":2243,"children":2244},{},[2245],{"type":51,"value":963},{"type":45,"tag":215,"props":2247,"children":2248},{"class":217,"line":966},[2249],{"type":45,"tag":215,"props":2250,"children":2251},{"emptyLinePlaceholder":764},[2252],{"type":51,"value":767},{"type":45,"tag":215,"props":2254,"children":2255},{"class":217,"line":974},[2256],{"type":45,"tag":215,"props":2257,"children":2258},{},[2259],{"type":51,"value":980},{"type":45,"tag":215,"props":2261,"children":2262},{"class":217,"line":983},[2263],{"type":45,"tag":215,"props":2264,"children":2265},{"emptyLinePlaceholder":764},[2266],{"type":51,"value":767},{"type":45,"tag":215,"props":2268,"children":2269},{"class":217,"line":991},[2270],{"type":45,"tag":215,"props":2271,"children":2272},{},[2273],{"type":51,"value":997},{"type":45,"tag":215,"props":2275,"children":2276},{"class":217,"line":1000},[2277],{"type":45,"tag":215,"props":2278,"children":2279},{},[2280],{"type":51,"value":1006},{"type":45,"tag":215,"props":2282,"children":2283},{"class":217,"line":1009},[2284],{"type":45,"tag":215,"props":2285,"children":2286},{},[2287],{"type":51,"value":1015},{"type":45,"tag":215,"props":2289,"children":2290},{"class":217,"line":1018},[2291],{"type":45,"tag":215,"props":2292,"children":2293},{},[2294],{"type":51,"value":1024},{"type":45,"tag":215,"props":2296,"children":2297},{"class":217,"line":1027},[2298],{"type":45,"tag":215,"props":2299,"children":2300},{},[2301],{"type":51,"value":1033},{"type":45,"tag":215,"props":2303,"children":2304},{"class":217,"line":1036},[2305],{"type":45,"tag":215,"props":2306,"children":2307},{},[2308],{"type":51,"value":1042},{"type":45,"tag":215,"props":2310,"children":2311},{"class":217,"line":1045},[2312],{"type":45,"tag":215,"props":2313,"children":2314},{"emptyLinePlaceholder":764},[2315],{"type":51,"value":767},{"type":45,"tag":215,"props":2317,"children":2318},{"class":217,"line":1053},[2319],{"type":45,"tag":215,"props":2320,"children":2321},{},[2322],{"type":51,"value":1059},{"type":45,"tag":215,"props":2324,"children":2325},{"class":217,"line":1062},[2326],{"type":45,"tag":215,"props":2327,"children":2328},{"emptyLinePlaceholder":764},[2329],{"type":51,"value":767},{"type":45,"tag":215,"props":2331,"children":2332},{"class":217,"line":1070},[2333],{"type":45,"tag":215,"props":2334,"children":2335},{},[2336],{"type":51,"value":1076},{"type":45,"tag":215,"props":2338,"children":2339},{"class":217,"line":1079},[2340],{"type":45,"tag":215,"props":2341,"children":2342},{},[2343],{"type":51,"value":1085},{"type":45,"tag":215,"props":2345,"children":2346},{"class":217,"line":1088},[2347],{"type":45,"tag":215,"props":2348,"children":2349},{},[2350],{"type":51,"value":1094},{"type":45,"tag":215,"props":2352,"children":2353},{"class":217,"line":1097},[2354],{"type":45,"tag":215,"props":2355,"children":2356},{},[2357],{"type":51,"value":1103},{"type":45,"tag":215,"props":2359,"children":2360},{"class":217,"line":1106},[2361],{"type":45,"tag":215,"props":2362,"children":2363},{},[2364],{"type":51,"value":1112},{"type":45,"tag":215,"props":2366,"children":2367},{"class":217,"line":1115},[2368],{"type":45,"tag":215,"props":2369,"children":2370},{},[2371],{"type":51,"value":1121},{"type":45,"tag":215,"props":2373,"children":2374},{"class":217,"line":1124},[2375],{"type":45,"tag":215,"props":2376,"children":2377},{},[2378],{"type":51,"value":1130},{"type":45,"tag":215,"props":2380,"children":2381},{"class":217,"line":1133},[2382],{"type":45,"tag":215,"props":2383,"children":2384},{},[2385],{"type":51,"value":1139},{"type":45,"tag":174,"props":2387,"children":2388},{"id":1142},[2389],{"type":51,"value":1145},{"type":45,"tag":103,"props":2391,"children":2392},{},[2393],{"type":51,"value":1150},{"type":45,"tag":1152,"props":2395,"children":2396},{},[2397],{"type":45,"tag":103,"props":2398,"children":2399},{},[2400,2401,2406],{"type":51,"value":1159},{"type":45,"tag":69,"props":2402,"children":2404},{"className":2403},[],[2405],{"type":51,"value":1165},{"type":51,"value":1167},{"type":45,"tag":103,"props":2408,"children":2409},{},[2410],{"type":51,"value":1172},{"type":45,"tag":54,"props":2412,"children":2413},{},[2414,2424,2434,2443],{"type":45,"tag":58,"props":2415,"children":2416},{},[2417,2418,2423],{"type":51,"value":305},{"type":45,"tag":69,"props":2419,"children":2421},{"className":2420},[],[2422],{"type":51,"value":1185},{"type":51,"value":1187},{"type":45,"tag":58,"props":2425,"children":2426},{},[2427,2428,2433],{"type":51,"value":1192},{"type":45,"tag":69,"props":2429,"children":2431},{"className":2430},[],[2432],{"type":51,"value":1198},{"type":51,"value":1200},{"type":45,"tag":58,"props":2435,"children":2436},{},[2437,2438],{"type":51,"value":1205},{"type":45,"tag":69,"props":2439,"children":2441},{"className":2440},[],[2442],{"type":51,"value":1211},{"type":45,"tag":58,"props":2444,"children":2445},{},[2446],{"type":51,"value":1216},{"type":45,"tag":103,"props":2448,"children":2449},{},[2450,2451,2456],{"type":51,"value":1221},{"type":45,"tag":69,"props":2452,"children":2454},{"className":2453},[],[2455],{"type":51,"value":74},{"type":51,"value":1228},{"type":45,"tag":46,"props":2458,"children":2459},{"id":1231},[2460],{"type":51,"value":1234},{"type":45,"tag":117,"props":2462,"children":2463},{},[2464,2484,2492,2506,2526,2540],{"type":45,"tag":58,"props":2465,"children":2466},{},[2467,2477,2478,2483],{"type":45,"tag":109,"props":2468,"children":2469},{},[2470,2471,2476],{"type":51,"value":1245},{"type":45,"tag":69,"props":2472,"children":2474},{"className":2473},[],[2475],{"type":51,"value":1251},{"type":51,"value":451},{"type":51,"value":1254},{"type":45,"tag":69,"props":2479,"children":2481},{"className":2480},[],[2482],{"type":51,"value":1260},{"type":51,"value":1262},{"type":45,"tag":58,"props":2485,"children":2486},{},[2487,2491],{"type":45,"tag":109,"props":2488,"children":2489},{},[2490],{"type":51,"value":1270},{"type":51,"value":1272},{"type":45,"tag":58,"props":2493,"children":2494},{},[2495,2499,2500,2505],{"type":45,"tag":109,"props":2496,"children":2497},{},[2498],{"type":51,"value":1280},{"type":51,"value":1282},{"type":45,"tag":69,"props":2501,"children":2503},{"className":2502},[],[2504],{"type":51,"value":1288},{"type":51,"value":451},{"type":45,"tag":58,"props":2507,"children":2508},{},[2509,2525],{"type":45,"tag":109,"props":2510,"children":2511},{},[2512,2513,2518,2519,2524],{"type":51,"value":1297},{"type":45,"tag":69,"props":2514,"children":2516},{"className":2515},[],[2517],{"type":51,"value":1303},{"type":51,"value":1305},{"type":45,"tag":69,"props":2520,"children":2522},{"className":2521},[],[2523],{"type":51,"value":1311},{"type":51,"value":451},{"type":51,"value":1314},{"type":45,"tag":58,"props":2527,"children":2528},{},[2529,2539],{"type":45,"tag":109,"props":2530,"children":2531},{},[2532,2533,2538],{"type":51,"value":1322},{"type":45,"tag":69,"props":2534,"children":2536},{"className":2535},[],[2537],{"type":51,"value":1328},{"type":51,"value":1330},{"type":51,"value":1332},{"type":45,"tag":58,"props":2541,"children":2542},{},[2543,2547,2548,2553],{"type":45,"tag":109,"props":2544,"children":2545},{},[2546],{"type":51,"value":1340},{"type":51,"value":1342},{"type":45,"tag":69,"props":2549,"children":2551},{"className":2550},[],[2552],{"type":51,"value":1348},{"type":51,"value":1350},{"type":45,"tag":46,"props":2555,"children":2556},{"id":1353},[2557],{"type":51,"value":1356},{"type":45,"tag":103,"props":2559,"children":2560},{},[2561],{"type":51,"value":1361},{"type":45,"tag":54,"props":2563,"children":2564},{},[2565,2573,2588,2596,2600,2608,2616],{"type":45,"tag":58,"props":2566,"children":2567},{},[2568],{"type":45,"tag":69,"props":2569,"children":2571},{"className":2570},[],[2572],{"type":51,"value":1373},{"type":45,"tag":58,"props":2574,"children":2575},{},[2576,2577,2582,2583],{"type":51,"value":1378},{"type":45,"tag":69,"props":2578,"children":2580},{"className":2579},[],[2581],{"type":51,"value":1384},{"type":51,"value":1386},{"type":45,"tag":69,"props":2584,"children":2586},{"className":2585},[],[2587],{"type":51,"value":1392},{"type":45,"tag":58,"props":2589,"children":2590},{},[2591],{"type":45,"tag":69,"props":2592,"children":2594},{"className":2593},[],[2595],{"type":51,"value":1401},{"type":45,"tag":58,"props":2597,"children":2598},{},[2599],{"type":51,"value":1406},{"type":45,"tag":58,"props":2601,"children":2602},{},[2603],{"type":45,"tag":69,"props":2604,"children":2606},{"className":2605},[],[2607],{"type":51,"value":1415},{"type":45,"tag":58,"props":2609,"children":2610},{},[2611],{"type":45,"tag":69,"props":2612,"children":2614},{"className":2613},[],[2615],{"type":51,"value":1424},{"type":45,"tag":58,"props":2617,"children":2618},{},[2619,2620,2625,2626,2631,2632],{"type":51,"value":67},{"type":45,"tag":69,"props":2621,"children":2623},{"className":2622},[],[2624],{"type":51,"value":74},{"type":51,"value":1435},{"type":45,"tag":69,"props":2627,"children":2629},{"className":2628},[],[2630],{"type":51,"value":82},{"type":51,"value":84},{"type":45,"tag":69,"props":2633,"children":2635},{"className":2634},[],[2636],{"type":51,"value":90},{"type":45,"tag":103,"props":2638,"children":2639},{},[2640,2641,2646],{"type":51,"value":1451},{"type":45,"tag":69,"props":2642,"children":2644},{"className":2643},[],[2645],{"type":51,"value":1328},{"type":51,"value":1458},{"type":45,"tag":46,"props":2648,"children":2649},{"id":1461},[2650],{"type":51,"value":1464},{"type":45,"tag":103,"props":2652,"children":2653},{},[2654,2655,2660,2661,2666],{"type":51,"value":1469},{"type":45,"tag":69,"props":2656,"children":2658},{"className":2657},[],[2659],{"type":51,"value":90},{"type":51,"value":1476},{"type":45,"tag":69,"props":2662,"children":2664},{"className":2663},[],[2665],{"type":51,"value":74},{"type":51,"value":1483},{"type":45,"tag":1485,"props":2668,"children":2669},{},[2670],{"type":51,"value":1489},{"title":7,"searchDepth":357,"depth":357,"links":2672},[2673,2674,2675,2681,2682,2683],{"id":48,"depth":357,"text":52},{"id":98,"depth":357,"text":101},{"id":169,"depth":357,"text":172,"children":2676},[2677,2678,2679,2680],{"id":176,"depth":366,"text":179},{"id":531,"depth":366,"text":1498},{"id":696,"depth":366,"text":1500},{"id":1142,"depth":366,"text":1145},{"id":1231,"depth":357,"text":1234},{"id":1353,"depth":357,"text":1356},{"id":1461,"depth":357,"text":1464},[2685,3241,4439,5509,6875],{"_path":2686,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":2687,"description":2688,"date":10,"readingTime":375,"category":12,"tags":2689,"difficulty":20,"module":5,"step":218,"journeys":2691,"learnMore":2692,"stepGif":36,"author":2702,"body":2703,"_type":746,"_id":3238,"_source":1506,"_file":3239,"_stem":3240,"_extension":1509},"/tutorials/dbt-bruin-analyst/dbt-prerequisite","Start From an Existing dbt Pipeline","A quick recap of the dbt setup this module assumes — staging models, mart models, and a warehouse already loaded with data.",[16,2690],"BigQuery",[24,25],[2693,2696,2699],{"label":2694,"url":2695},"Reference project: contoso-dbt on GitHub","https://github.com/arsalann/data_playground/tree/main/contoso-dbt",{"label":2697,"url":2698},"dbt + BigQuery profile setup","https://docs.getdbt.com/docs/core/connect-data-platform/bigquery-setup",{"label":2700,"url":2701},"Generating custom schema names in dbt","https://docs.getdbt.com/docs/build/custom-schemas",{"name":38,"role":39,"image":40},{"type":42,"children":2704,"toc":3228},[2705,2709,2714,2718,2738,2760,2775,2779,2785,2797,2807,2819,2825,2830,2971,3007,3013,3018,3037,3042,3083,3088,3204,3209,3213,3224],{"type":45,"tag":46,"props":2706,"children":2707},{"id":48},[2708],{"type":51,"value":52},{"type":45,"tag":103,"props":2710,"children":2711},{},[2712],{"type":51,"value":2713},"Confirm your dbt project is built and that the resulting tables exist in your warehouse. Everything in this module assumes those tables are already there — Bruin won't run dbt for you, it just describes what's in the warehouse afterward.",{"type":45,"tag":46,"props":2715,"children":2716},{"id":98},[2717],{"type":51,"value":101},{"type":45,"tag":103,"props":2719,"children":2720},{},[2721,2723,2728,2730,2736],{"type":51,"value":2722},"The Bruin context layer is ",{"type":45,"tag":109,"props":2724,"children":2725},{},[2726],{"type":51,"value":2727},"documentation-only",{"type":51,"value":2729}," for your dbt pipeline. It introspects the warehouse, not your dbt repo. So if your models haven't materialized yet, Bruin has nothing to import. Get ",{"type":45,"tag":69,"props":2731,"children":2733},{"className":2732},[],[2734],{"type":51,"value":2735},"dbt build",{"type":51,"value":2737}," green first, then come back.",{"type":45,"tag":103,"props":2739,"children":2740},{},[2741,2743,2751,2753,2758],{"type":51,"value":2742},"If you don't already have a project to follow along with, the ",{"type":45,"tag":2744,"props":2745,"children":2748},"a",{"href":2695,"rel":2746},[2747],"nofollow",[2749],{"type":51,"value":2750},"contoso-dbt reference repo",{"type":51,"value":2752}," is a complete worked example: dlt loads raw Contoso retail data into BigQuery, dbt builds 10 staging models and 7 report models on top, and the ",{"type":45,"tag":69,"props":2754,"children":2756},{"className":2755},[],[2757],{"type":51,"value":739},{"type":51,"value":2759}," directory holds the Bruin layer we'll build in the next steps.",{"type":45,"tag":1152,"props":2761,"children":2762},{},[2763],{"type":45,"tag":103,"props":2764,"children":2765},{},[2766,2768,2774],{"type":51,"value":2767},"If you already have a dbt project building cleanly into a warehouse, skim this page and skip ahead to ",{"type":45,"tag":2744,"props":2769,"children":2771},{"href":2770},"/learn/dbt-bruin-analyst/isolated-context",[2772],{"type":51,"value":2773},"Step 2: Create an Isolated Bruin Context",{"type":51,"value":451},{"type":45,"tag":46,"props":2776,"children":2777},{"id":169},[2778],{"type":51,"value":172},{"type":45,"tag":174,"props":2780,"children":2782},{"id":2781},"reference-project-layout",[2783],{"type":51,"value":2784},"Reference project layout",{"type":45,"tag":103,"props":2786,"children":2787},{},[2788,2790,2795],{"type":51,"value":2789},"The reference project ends up looking like this. The ",{"type":45,"tag":69,"props":2791,"children":2793},{"className":2792},[],[2794],{"type":51,"value":739},{"type":51,"value":2796}," directory is what this module produces — everything else is dbt prerequisites:",{"type":45,"tag":205,"props":2798,"children":2802},{"className":2799,"code":2801,"language":51},[2800],"language-text","contoso-dbt/\n├── ingest/pipeline.py         # dlt — loads raw tables to BigQuery\n├── models/                    # dbt — staging + reports\n│   ├── sources.yml\n│   ├── staging/stg_*.sql      (10)\n│   └── reports/rpt_*.sql      (7)\n├── context/                   # ← the Bruin context layer (this module)\n│   ├── .bruin.yml\n│   ├── pipeline.yml\n│   └── assets/\n│       ├── contoso_dbt_raw/*.asset.yml      (23)\n│       ├── contoso_dbt_staging/*.asset.yml  (10)\n│       └── contoso_dbt_reports/*.asset.yml  (7)\n├── AGENTS.md                  # how agents should use the context\n└── run_pipeline.sh            # dlt ingest + dbt build\n",[2803],{"type":45,"tag":69,"props":2804,"children":2805},{"__ignoreMap":7},[2806],{"type":51,"value":2801},{"type":45,"tag":103,"props":2808,"children":2809},{},[2810,2812,2817],{"type":51,"value":2811},"The end state is ",{"type":45,"tag":109,"props":2813,"children":2814},{},[2815],{"type":51,"value":2816},"40 YAMLs",{"type":51,"value":2818}," — one per materialized table — covering raw ingest, staging, and reports.",{"type":45,"tag":174,"props":2820,"children":2822},{"id":2821},"what-the-dbt-half-looks-like",[2823],{"type":51,"value":2824},"What the dbt half looks like",{"type":45,"tag":103,"props":2826,"children":2827},{},[2828],{"type":51,"value":2829},"The contoso-dbt project uses a fairly standard dbt-on-BigQuery setup. If yours looks similar, you're ready:",{"type":45,"tag":117,"props":2831,"children":2832},{},[2833,2868,2888,2908,2927,2961],{"type":45,"tag":58,"props":2834,"children":2835},{},[2836,2838,2843,2845,2851,2853,2858,2860,2866],{"type":51,"value":2837},"A ",{"type":45,"tag":69,"props":2839,"children":2841},{"className":2840},[],[2842],{"type":51,"value":724},{"type":51,"value":2844}," and a ",{"type":45,"tag":69,"props":2846,"children":2848},{"className":2847},[],[2849],{"type":51,"value":2850},"profiles.yml",{"type":51,"value":2852}," (the reference uses OAuth via ",{"type":45,"tag":69,"props":2854,"children":2856},{"className":2855},[],[2857],{"type":51,"value":691},{"type":51,"value":2859},", location ",{"type":45,"tag":69,"props":2861,"children":2863},{"className":2862},[],[2864],{"type":51,"value":2865},"EU",{"type":51,"value":2867},")",{"type":45,"tag":58,"props":2869,"children":2870},{},[2871,2872,2878,2880,2886],{"type":51,"value":2837},{"type":45,"tag":69,"props":2873,"children":2875},{"className":2874},[],[2876],{"type":51,"value":2877},"models/sources.yml",{"type":51,"value":2879}," declaring raw tables loaded by dlt into a ",{"type":45,"tag":69,"props":2881,"children":2883},{"className":2882},[],[2884],{"type":51,"value":2885},"*_raw",{"type":51,"value":2887}," schema",{"type":45,"tag":58,"props":2889,"children":2890},{},[2891,2893,2899,2901,2907],{"type":51,"value":2892},"Staging models (",{"type":45,"tag":69,"props":2894,"children":2896},{"className":2895},[],[2897],{"type":51,"value":2898},"stg_*.sql",{"type":51,"value":2900},") materialized into a ",{"type":45,"tag":69,"props":2902,"children":2904},{"className":2903},[],[2905],{"type":51,"value":2906},"*_staging",{"type":51,"value":2887},{"type":45,"tag":58,"props":2909,"children":2910},{},[2911,2913,2919,2920,2926],{"type":51,"value":2912},"Report / mart models (",{"type":45,"tag":69,"props":2914,"children":2916},{"className":2915},[],[2917],{"type":51,"value":2918},"rpt_*.sql",{"type":51,"value":2900},{"type":45,"tag":69,"props":2921,"children":2923},{"className":2922},[],[2924],{"type":51,"value":2925},"*_reports",{"type":51,"value":2887},{"type":45,"tag":58,"props":2928,"children":2929},{},[2930,2931,2937,2939,2945,2947,2953,2955],{"type":51,"value":2837},{"type":45,"tag":69,"props":2932,"children":2934},{"className":2933},[],[2935],{"type":51,"value":2936},"generate_schema_name.sql",{"type":51,"value":2938}," macro so a ",{"type":45,"tag":69,"props":2940,"children":2942},{"className":2941},[],[2943],{"type":51,"value":2944},"+schema: staging",{"type":51,"value":2946}," config lands as ",{"type":45,"tag":69,"props":2948,"children":2950},{"className":2949},[],[2951],{"type":51,"value":2952},"contoso_dbt_staging",{"type":51,"value":2954},", not ",{"type":45,"tag":69,"props":2956,"children":2958},{"className":2957},[],[2959],{"type":51,"value":2960},"contoso_dbt_contoso_dbt_staging",{"type":45,"tag":58,"props":2962,"children":2963},{},[2964,2969],{"type":45,"tag":69,"props":2965,"children":2967},{"className":2966},[],[2968],{"type":51,"value":2735},{"type":51,"value":2970}," runs cleanly and the tables exist in the warehouse",{"type":45,"tag":1152,"props":2972,"children":2973},{},[2974],{"type":45,"tag":103,"props":2975,"children":2976},{},[2977,2982,2984,2990,2992,2998,3000,3005],{"type":45,"tag":109,"props":2978,"children":2979},{},[2980],{"type":51,"value":2981},"Heads up on schema naming.",{"type":51,"value":2983}," dbt's default ",{"type":45,"tag":69,"props":2985,"children":2987},{"className":2986},[],[2988],{"type":51,"value":2989},"generate_schema_name",{"type":51,"value":2991}," macro concatenates the target schema with the ",{"type":45,"tag":69,"props":2993,"children":2995},{"className":2994},[],[2996],{"type":51,"value":2997},"+schema",{"type":51,"value":2999}," config, which is rarely what you want. The reference project overrides it to use the ",{"type":45,"tag":69,"props":3001,"children":3003},{"className":3002},[],[3004],{"type":51,"value":2997},{"type":51,"value":3006}," value directly. If your final schema names look doubled-up, this is usually why.",{"type":45,"tag":174,"props":3008,"children":3010},{"id":3009},"verify-the-warehouse-has-data",[3011],{"type":51,"value":3012},"Verify the warehouse has data",{"type":45,"tag":103,"props":3014,"children":3015},{},[3016],{"type":51,"value":3017},"Before moving to the Bruin steps, make sure your dbt-built tables actually exist. From your dbt project root:",{"type":45,"tag":205,"props":3019,"children":3021},{"className":207,"code":3020,"language":209,"meta":7,"style":7},"dbt build\n",[3022],{"type":45,"tag":69,"props":3023,"children":3024},{"__ignoreMap":7},[3025],{"type":45,"tag":215,"props":3026,"children":3027},{"class":217,"line":218},[3028,3032],{"type":45,"tag":215,"props":3029,"children":3030},{"style":222},[3031],{"type":51,"value":16},{"type":45,"tag":215,"props":3033,"children":3034},{"style":228},[3035],{"type":51,"value":3036}," build\n",{"type":45,"tag":103,"props":3038,"children":3039},{},[3040],{"type":51,"value":3041},"Then spot-check the warehouse. For BigQuery:",{"type":45,"tag":205,"props":3043,"children":3045},{"className":207,"code":3044,"language":209,"meta":7,"style":7},"bq ls bruin-playground-arsalan:contoso_dbt_staging\nbq ls bruin-playground-arsalan:contoso_dbt_reports\n",[3046],{"type":45,"tag":69,"props":3047,"children":3048},{"__ignoreMap":7},[3049,3067],{"type":45,"tag":215,"props":3050,"children":3051},{"class":217,"line":218},[3052,3057,3062],{"type":45,"tag":215,"props":3053,"children":3054},{"style":222},[3055],{"type":51,"value":3056},"bq",{"type":45,"tag":215,"props":3058,"children":3059},{"style":228},[3060],{"type":51,"value":3061}," ls",{"type":45,"tag":215,"props":3063,"children":3064},{"style":228},[3065],{"type":51,"value":3066}," bruin-playground-arsalan:contoso_dbt_staging\n",{"type":45,"tag":215,"props":3068,"children":3069},{"class":217,"line":357},[3070,3074,3078],{"type":45,"tag":215,"props":3071,"children":3072},{"style":222},[3073],{"type":51,"value":3056},{"type":45,"tag":215,"props":3075,"children":3076},{"style":228},[3077],{"type":51,"value":3061},{"type":45,"tag":215,"props":3079,"children":3080},{"style":228},[3081],{"type":51,"value":3082}," bruin-playground-arsalan:contoso_dbt_reports\n",{"type":45,"tag":103,"props":3084,"children":3085},{},[3086],{"type":51,"value":3087},"For Postgres / Redshift:",{"type":45,"tag":205,"props":3089,"children":3093},{"className":3090,"code":3091,"language":3092,"meta":7,"style":7},"language-sql shiki shiki-themes github-dark","SELECT table_schema, table_name\nFROM information_schema.tables\nWHERE table_schema IN ('contoso_dbt_staging', 'contoso_dbt_reports')\nORDER BY 1, 2;\n","sql",[3094],{"type":45,"tag":69,"props":3095,"children":3096},{"__ignoreMap":7},[3097,3112,3134,3177],{"type":45,"tag":215,"props":3098,"children":3099},{"class":217,"line":218},[3100,3106],{"type":45,"tag":215,"props":3101,"children":3103},{"style":3102},"--shiki-default:#F97583",[3104],{"type":51,"value":3105},"SELECT",{"type":45,"tag":215,"props":3107,"children":3109},{"style":3108},"--shiki-default:#E1E4E8",[3110],{"type":51,"value":3111}," table_schema, table_name\n",{"type":45,"tag":215,"props":3113,"children":3114},{"class":217,"line":357},[3115,3120,3125,3129],{"type":45,"tag":215,"props":3116,"children":3117},{"style":3102},[3118],{"type":51,"value":3119},"FROM",{"type":45,"tag":215,"props":3121,"children":3122},{"style":244},[3123],{"type":51,"value":3124}," information_schema",{"type":45,"tag":215,"props":3126,"children":3127},{"style":3108},[3128],{"type":51,"value":451},{"type":45,"tag":215,"props":3130,"children":3131},{"style":244},[3132],{"type":51,"value":3133},"tables\n",{"type":45,"tag":215,"props":3135,"children":3136},{"class":217,"line":366},[3137,3142,3147,3152,3157,3162,3167,3172],{"type":45,"tag":215,"props":3138,"children":3139},{"style":3102},[3140],{"type":51,"value":3141},"WHERE",{"type":45,"tag":215,"props":3143,"children":3144},{"style":3108},[3145],{"type":51,"value":3146}," table_schema ",{"type":45,"tag":215,"props":3148,"children":3149},{"style":3102},[3150],{"type":51,"value":3151},"IN",{"type":45,"tag":215,"props":3153,"children":3154},{"style":3108},[3155],{"type":51,"value":3156}," (",{"type":45,"tag":215,"props":3158,"children":3159},{"style":228},[3160],{"type":51,"value":3161},"'contoso_dbt_staging'",{"type":45,"tag":215,"props":3163,"children":3164},{"style":3108},[3165],{"type":51,"value":3166},", ",{"type":45,"tag":215,"props":3168,"children":3169},{"style":228},[3170],{"type":51,"value":3171},"'contoso_dbt_reports'",{"type":45,"tag":215,"props":3173,"children":3174},{"style":3108},[3175],{"type":51,"value":3176},")\n",{"type":45,"tag":215,"props":3178,"children":3179},{"class":217,"line":375},[3180,3185,3190,3194,3199],{"type":45,"tag":215,"props":3181,"children":3182},{"style":3102},[3183],{"type":51,"value":3184},"ORDER BY",{"type":45,"tag":215,"props":3186,"children":3187},{"style":244},[3188],{"type":51,"value":3189}," 1",{"type":45,"tag":215,"props":3191,"children":3192},{"style":3108},[3193],{"type":51,"value":3166},{"type":45,"tag":215,"props":3195,"children":3196},{"style":244},[3197],{"type":51,"value":3198},"2",{"type":45,"tag":215,"props":3200,"children":3201},{"style":3108},[3202],{"type":51,"value":3203},";\n",{"type":45,"tag":103,"props":3205,"children":3206},{},[3207],{"type":51,"value":3208},"You should see one row per materialized model. If a model is missing, fix dbt before continuing — Bruin will simply skip what isn't there.",{"type":45,"tag":46,"props":3210,"children":3211},{"id":1461},[3212],{"type":51,"value":1464},{"type":45,"tag":103,"props":3214,"children":3215},{},[3216,3218,3223],{"type":51,"value":3217},"You now have a working dbt project with materialized staging and report tables in your warehouse. That's the canonical input for the Bruin context layer: a set of real schemas Bruin can introspect. From here on out, no more dbt commands — everything is ",{"type":45,"tag":69,"props":3219,"children":3221},{"className":3220},[],[3222],{"type":51,"value":277},{"type":51,"value":451},{"type":45,"tag":1485,"props":3225,"children":3226},{},[3227],{"type":51,"value":1489},{"title":7,"searchDepth":357,"depth":357,"links":3229},[3230,3231,3232,3237],{"id":48,"depth":357,"text":52},{"id":98,"depth":357,"text":101},{"id":169,"depth":357,"text":172,"children":3233},[3234,3235,3236],{"id":2781,"depth":366,"text":2784},{"id":2821,"depth":366,"text":2824},{"id":3009,"depth":366,"text":3012},{"id":1461,"depth":357,"text":1464},"content:tutorials:dbt-bruin-analyst:dbt-prerequisite.md","tutorials/dbt-bruin-analyst/dbt-prerequisite.md","tutorials/dbt-bruin-analyst/dbt-prerequisite",{"_path":3242,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":3243,"description":3244,"date":10,"readingTime":392,"category":12,"tags":3245,"difficulty":20,"module":5,"step":357,"journeys":3246,"learnMore":3247,"stepGif":36,"author":3257,"body":3258,"_type":746,"_id":4436,"_source":1506,"_file":4437,"_stem":4438,"_extension":1509},"/tutorials/dbt-bruin-analyst/isolated-context","Create an Isolated Bruin Context","Add a self-contained context/ directory with its own .bruin.yml and pipeline.yml — so the documentation layer for your dbt project never collides with other Bruin pipelines in the same repo.",[14,16,2690],[24,25],[3248,3251,3254],{"label":3249,"url":3250},"Connections reference (docs)","https://getbruin.com/docs/bruin/core-concepts/connections.html",{"label":3252,"url":3253},"Pipeline configuration (docs)","https://getbruin.com/docs/bruin/core-concepts/pipeline.html",{"label":3255,"url":3256},"Application Default Credentials","https://cloud.google.com/docs/authentication/application-default-credentials",{"name":38,"role":39,"image":40},{"type":42,"children":3259,"toc":4423},[3260,3264,3291,3295,3314,3333,3337,3349,3355,3380,3405,3416,3428,3587,3605,3633,3668,3673,3835,3971,4123,4134,4144,4238,4279,4301,4307,4312,4350,4355,4364,4376,4403,4407,4419],{"type":45,"tag":46,"props":3261,"children":3262},{"id":48},[3263],{"type":51,"value":52},{"type":45,"tag":103,"props":3265,"children":3266},{},[3267,3269,3274,3276,3281,3283,3289],{"type":51,"value":3268},"Inside your dbt repo, create a ",{"type":45,"tag":69,"props":3270,"children":3272},{"className":3271},[],[3273],{"type":51,"value":739},{"type":51,"value":3275}," directory with its own ",{"type":45,"tag":69,"props":3277,"children":3279},{"className":3278},[],[3280],{"type":51,"value":1251},{"type":51,"value":3282}," and ",{"type":45,"tag":69,"props":3284,"children":3286},{"className":3285},[],[3287],{"type":51,"value":3288},"pipeline.yml",{"type":51,"value":3290},". This is the workspace Bruin will use to describe your warehouse — kept fully isolated from any other Bruin pipelines or configs that might already live in the repo.",{"type":45,"tag":46,"props":3292,"children":3293},{"id":98},[3294],{"type":51,"value":101},{"type":45,"tag":103,"props":3296,"children":3297},{},[3298,3300,3305,3307,3312],{"type":51,"value":3299},"Bruin will happily share a ",{"type":45,"tag":69,"props":3301,"children":3303},{"className":3302},[],[3304],{"type":51,"value":1251},{"type":51,"value":3306}," across an entire repo, but for a documentation-only context layer that's usually the wrong default. A broken connection in a sibling pipeline will cause every ",{"type":45,"tag":69,"props":3308,"children":3310},{"className":3309},[],[3311],{"type":51,"value":277},{"type":51,"value":3313}," command to error, even when you're just trying to import schemas. Scoping the config to a sub-directory keeps the dbt context layer self-contained, easy to delete, and easy to regenerate.",{"type":45,"tag":103,"props":3315,"children":3316},{},[3317,3319,3324,3326,3331],{"type":51,"value":3318},"The context layer is ",{"type":45,"tag":109,"props":3320,"children":3321},{},[3322],{"type":51,"value":3323},"its own pipeline",{"type":51,"value":3325},", even though it never runs transforms. It's documentation that happens to live in ",{"type":45,"tag":69,"props":3327,"children":3329},{"className":3328},[],[3330],{"type":51,"value":3288},{"type":51,"value":3332}," form so Bruin can validate it.",{"type":45,"tag":46,"props":3334,"children":3335},{"id":169},[3336],{"type":51,"value":172},{"type":45,"tag":103,"props":3338,"children":3339},{},[3340,3342,3347],{"type":51,"value":3341},"Run all of these from the root of your dbt project (the directory containing ",{"type":45,"tag":69,"props":3343,"children":3345},{"className":3344},[],[3346],{"type":51,"value":724},{"type":51,"value":3348},").",{"type":45,"tag":174,"props":3350,"children":3352},{"id":3351},"_1-create-the-context-directory",[3353],{"type":51,"value":3354},"1. Create the context directory",{"type":45,"tag":205,"props":3356,"children":3358},{"className":207,"code":3357,"language":209,"meta":7,"style":7},"mkdir -p context/assets\n",[3359],{"type":45,"tag":69,"props":3360,"children":3361},{"__ignoreMap":7},[3362],{"type":45,"tag":215,"props":3363,"children":3364},{"class":217,"line":218},[3365,3370,3375],{"type":45,"tag":215,"props":3366,"children":3367},{"style":222},[3368],{"type":51,"value":3369},"mkdir",{"type":45,"tag":215,"props":3371,"children":3372},{"style":244},[3373],{"type":51,"value":3374}," -p",{"type":45,"tag":215,"props":3376,"children":3377},{"style":228},[3378],{"type":51,"value":3379}," context/assets\n",{"type":45,"tag":103,"props":3381,"children":3382},{},[3383,3385,3390,3391,3396,3398,3403],{"type":51,"value":3384},"You'll end up with ",{"type":45,"tag":69,"props":3386,"children":3388},{"className":3387},[],[3389],{"type":51,"value":1384},{"type":51,"value":3166},{"type":45,"tag":69,"props":3392,"children":3394},{"className":3393},[],[3395],{"type":51,"value":1392},{"type":51,"value":3397},", and a populated ",{"type":45,"tag":69,"props":3399,"children":3401},{"className":3400},[],[3402],{"type":51,"value":82},{"type":51,"value":3404}," after the next step.",{"type":45,"tag":174,"props":3406,"children":3408},{"id":3407},"_2-write-a-scoped-bruinyml",[3409,3411],{"type":51,"value":3410},"2. Write a scoped ",{"type":45,"tag":69,"props":3412,"children":3414},{"className":3413},[],[3415],{"type":51,"value":1251},{"type":45,"tag":103,"props":3417,"children":3418},{},[3419,3421,3426],{"type":51,"value":3420},"Drop this into ",{"type":45,"tag":69,"props":3422,"children":3424},{"className":3423},[],[3425],{"type":51,"value":1384},{"type":51,"value":3427},". Replace the project ID with your own warehouse's:",{"type":45,"tag":205,"props":3429,"children":3433},{"className":3430,"code":3431,"language":3432,"meta":7,"style":7},"language-yaml shiki shiki-themes github-dark","# context/.bruin.yml\ndefault_environment: default\nenvironments:\n  default:\n    connections:\n      google_cloud_platform:\n        - name: contoso_dbt_bq\n          project_id: bruin-playground-arsalan\n          location: EU\n          use_application_default_credentials: true\n","yaml",[3434],{"type":45,"tag":69,"props":3435,"children":3436},{"__ignoreMap":7},[3437,3446,3465,3478,3490,3502,3514,3536,3553,3570],{"type":45,"tag":215,"props":3438,"children":3439},{"class":217,"line":218},[3440],{"type":45,"tag":215,"props":3441,"children":3443},{"style":3442},"--shiki-default:#6A737D",[3444],{"type":51,"value":3445},"# context/.bruin.yml\n",{"type":45,"tag":215,"props":3447,"children":3448},{"class":217,"line":357},[3449,3455,3460],{"type":45,"tag":215,"props":3450,"children":3452},{"style":3451},"--shiki-default:#85E89D",[3453],{"type":51,"value":3454},"default_environment",{"type":45,"tag":215,"props":3456,"children":3457},{"style":3108},[3458],{"type":51,"value":3459},": ",{"type":45,"tag":215,"props":3461,"children":3462},{"style":228},[3463],{"type":51,"value":3464},"default\n",{"type":45,"tag":215,"props":3466,"children":3467},{"class":217,"line":366},[3468,3473],{"type":45,"tag":215,"props":3469,"children":3470},{"style":3451},[3471],{"type":51,"value":3472},"environments",{"type":45,"tag":215,"props":3474,"children":3475},{"style":3108},[3476],{"type":51,"value":3477},":\n",{"type":45,"tag":215,"props":3479,"children":3480},{"class":217,"line":375},[3481,3486],{"type":45,"tag":215,"props":3482,"children":3483},{"style":3451},[3484],{"type":51,"value":3485},"  default",{"type":45,"tag":215,"props":3487,"children":3488},{"style":3108},[3489],{"type":51,"value":3477},{"type":45,"tag":215,"props":3491,"children":3492},{"class":217,"line":21},[3493,3498],{"type":45,"tag":215,"props":3494,"children":3495},{"style":3451},[3496],{"type":51,"value":3497},"    connections",{"type":45,"tag":215,"props":3499,"children":3500},{"style":3108},[3501],{"type":51,"value":3477},{"type":45,"tag":215,"props":3503,"children":3504},{"class":217,"line":392},[3505,3510],{"type":45,"tag":215,"props":3506,"children":3507},{"style":3451},[3508],{"type":51,"value":3509},"      google_cloud_platform",{"type":45,"tag":215,"props":3511,"children":3512},{"style":3108},[3513],{"type":51,"value":3477},{"type":45,"tag":215,"props":3515,"children":3516},{"class":217,"line":11},[3517,3522,3527,3531],{"type":45,"tag":215,"props":3518,"children":3519},{"style":3108},[3520],{"type":51,"value":3521},"        - ",{"type":45,"tag":215,"props":3523,"children":3524},{"style":3451},[3525],{"type":51,"value":3526},"name",{"type":45,"tag":215,"props":3528,"children":3529},{"style":3108},[3530],{"type":51,"value":3459},{"type":45,"tag":215,"props":3532,"children":3533},{"style":228},[3534],{"type":51,"value":3535},"contoso_dbt_bq\n",{"type":45,"tag":215,"props":3537,"children":3538},{"class":217,"line":409},[3539,3544,3548],{"type":45,"tag":215,"props":3540,"children":3541},{"style":3451},[3542],{"type":51,"value":3543},"          project_id",{"type":45,"tag":215,"props":3545,"children":3546},{"style":3108},[3547],{"type":51,"value":3459},{"type":45,"tag":215,"props":3549,"children":3550},{"style":228},[3551],{"type":51,"value":3552},"bruin-playground-arsalan\n",{"type":45,"tag":215,"props":3554,"children":3555},{"class":217,"line":674},[3556,3561,3565],{"type":45,"tag":215,"props":3557,"children":3558},{"style":3451},[3559],{"type":51,"value":3560},"          location",{"type":45,"tag":215,"props":3562,"children":3563},{"style":3108},[3564],{"type":51,"value":3459},{"type":45,"tag":215,"props":3566,"children":3567},{"style":228},[3568],{"type":51,"value":3569},"EU\n",{"type":45,"tag":215,"props":3571,"children":3572},{"class":217,"line":824},[3573,3578,3582],{"type":45,"tag":215,"props":3574,"children":3575},{"style":3451},[3576],{"type":51,"value":3577},"          use_application_default_credentials",{"type":45,"tag":215,"props":3579,"children":3580},{"style":3108},[3581],{"type":51,"value":3459},{"type":45,"tag":215,"props":3583,"children":3584},{"style":244},[3585],{"type":51,"value":3586},"true\n",{"type":45,"tag":103,"props":3588,"children":3589},{},[3590,3592,3596,3598,3603],{"type":51,"value":3591},"This connection uses ",{"type":45,"tag":109,"props":3593,"children":3594},{},[3595],{"type":51,"value":3255},{"type":51,"value":3597}," — the same ",{"type":45,"tag":69,"props":3599,"children":3601},{"className":3600},[],[3602],{"type":51,"value":691},{"type":51,"value":3604}," session you already use for dbt. No service account keyfile to rotate, no secret to gitignore, and the AI agent inherits your identity at query time.",{"type":45,"tag":1152,"props":3606,"children":3607},{},[3608],{"type":45,"tag":103,"props":3609,"children":3610},{},[3611,3616,3618,3624,3625,3631],{"type":45,"tag":109,"props":3612,"children":3613},{},[3614],{"type":51,"value":3615},"Gotcha — wrong field name.",{"type":51,"value":3617}," The field is ",{"type":45,"tag":69,"props":3619,"children":3621},{"className":3620},[],[3622],{"type":51,"value":3623},"use_application_default_credentials",{"type":51,"value":2954},{"type":45,"tag":69,"props":3626,"children":3628},{"className":3627},[],[3629],{"type":51,"value":3630},"use_default_credentials",{"type":51,"value":3632},". The latter is silently ignored and Bruin will look for a keyfile that isn't there.",{"type":45,"tag":1152,"props":3634,"children":3635},{},[3636],{"type":45,"tag":103,"props":3637,"children":3638},{},[3639,3644,3646,3651,3653,3658,3660,3666],{"type":45,"tag":109,"props":3640,"children":3641},{},[3642],{"type":51,"value":3643},"Gotcha — sibling configs.",{"type":51,"value":3645}," ",{"type":45,"tag":69,"props":3647,"children":3649},{"className":3648},[],[3650],{"type":51,"value":277},{"type":51,"value":3652}," walks up looking for ",{"type":45,"tag":69,"props":3654,"children":3656},{"className":3655},[],[3657],{"type":51,"value":1251},{"type":51,"value":3659},". If a parent directory has one with a broken connection, every command in this scope will error. Always pass ",{"type":45,"tag":69,"props":3661,"children":3663},{"className":3662},[],[3664],{"type":51,"value":3665},"--config-file context/.bruin.yml",{"type":51,"value":3667}," so Bruin only loads this file.",{"type":45,"tag":103,"props":3669,"children":3670},{},[3671],{"type":51,"value":3672},"For Redshift, ClickHouse, or Postgres, swap the connection block. Examples:",{"type":45,"tag":205,"props":3674,"children":3676},{"className":3430,"code":3675,"language":3432,"meta":7,"style":7},"# Postgres\nconnections:\n  postgres:\n    - name: contoso_dbt_pg\n      host: db.example.internal\n      port: 5432\n      username: analyst_ro\n      password: ${POSTGRES_PASSWORD}\n      database: contoso\n      ssl_mode: require\n",[3677],{"type":45,"tag":69,"props":3678,"children":3679},{"__ignoreMap":7},[3680,3688,3700,3712,3733,3750,3767,3784,3801,3818],{"type":45,"tag":215,"props":3681,"children":3682},{"class":217,"line":218},[3683],{"type":45,"tag":215,"props":3684,"children":3685},{"style":3442},[3686],{"type":51,"value":3687},"# Postgres\n",{"type":45,"tag":215,"props":3689,"children":3690},{"class":217,"line":357},[3691,3696],{"type":45,"tag":215,"props":3692,"children":3693},{"style":3451},[3694],{"type":51,"value":3695},"connections",{"type":45,"tag":215,"props":3697,"children":3698},{"style":3108},[3699],{"type":51,"value":3477},{"type":45,"tag":215,"props":3701,"children":3702},{"class":217,"line":366},[3703,3708],{"type":45,"tag":215,"props":3704,"children":3705},{"style":3451},[3706],{"type":51,"value":3707},"  postgres",{"type":45,"tag":215,"props":3709,"children":3710},{"style":3108},[3711],{"type":51,"value":3477},{"type":45,"tag":215,"props":3713,"children":3714},{"class":217,"line":375},[3715,3720,3724,3728],{"type":45,"tag":215,"props":3716,"children":3717},{"style":3108},[3718],{"type":51,"value":3719},"    - ",{"type":45,"tag":215,"props":3721,"children":3722},{"style":3451},[3723],{"type":51,"value":3526},{"type":45,"tag":215,"props":3725,"children":3726},{"style":3108},[3727],{"type":51,"value":3459},{"type":45,"tag":215,"props":3729,"children":3730},{"style":228},[3731],{"type":51,"value":3732},"contoso_dbt_pg\n",{"type":45,"tag":215,"props":3734,"children":3735},{"class":217,"line":21},[3736,3741,3745],{"type":45,"tag":215,"props":3737,"children":3738},{"style":3451},[3739],{"type":51,"value":3740},"      host",{"type":45,"tag":215,"props":3742,"children":3743},{"style":3108},[3744],{"type":51,"value":3459},{"type":45,"tag":215,"props":3746,"children":3747},{"style":228},[3748],{"type":51,"value":3749},"db.example.internal\n",{"type":45,"tag":215,"props":3751,"children":3752},{"class":217,"line":392},[3753,3758,3762],{"type":45,"tag":215,"props":3754,"children":3755},{"style":3451},[3756],{"type":51,"value":3757},"      port",{"type":45,"tag":215,"props":3759,"children":3760},{"style":3108},[3761],{"type":51,"value":3459},{"type":45,"tag":215,"props":3763,"children":3764},{"style":244},[3765],{"type":51,"value":3766},"5432\n",{"type":45,"tag":215,"props":3768,"children":3769},{"class":217,"line":11},[3770,3775,3779],{"type":45,"tag":215,"props":3771,"children":3772},{"style":3451},[3773],{"type":51,"value":3774},"      username",{"type":45,"tag":215,"props":3776,"children":3777},{"style":3108},[3778],{"type":51,"value":3459},{"type":45,"tag":215,"props":3780,"children":3781},{"style":228},[3782],{"type":51,"value":3783},"analyst_ro\n",{"type":45,"tag":215,"props":3785,"children":3786},{"class":217,"line":409},[3787,3792,3796],{"type":45,"tag":215,"props":3788,"children":3789},{"style":3451},[3790],{"type":51,"value":3791},"      password",{"type":45,"tag":215,"props":3793,"children":3794},{"style":3108},[3795],{"type":51,"value":3459},{"type":45,"tag":215,"props":3797,"children":3798},{"style":228},[3799],{"type":51,"value":3800},"${POSTGRES_PASSWORD}\n",{"type":45,"tag":215,"props":3802,"children":3803},{"class":217,"line":674},[3804,3809,3813],{"type":45,"tag":215,"props":3805,"children":3806},{"style":3451},[3807],{"type":51,"value":3808},"      database",{"type":45,"tag":215,"props":3810,"children":3811},{"style":3108},[3812],{"type":51,"value":3459},{"type":45,"tag":215,"props":3814,"children":3815},{"style":228},[3816],{"type":51,"value":3817},"contoso\n",{"type":45,"tag":215,"props":3819,"children":3820},{"class":217,"line":824},[3821,3826,3830],{"type":45,"tag":215,"props":3822,"children":3823},{"style":3451},[3824],{"type":51,"value":3825},"      ssl_mode",{"type":45,"tag":215,"props":3827,"children":3828},{"style":3108},[3829],{"type":51,"value":3459},{"type":45,"tag":215,"props":3831,"children":3832},{"style":228},[3833],{"type":51,"value":3834},"require\n",{"type":45,"tag":205,"props":3836,"children":3838},{"className":3430,"code":3837,"language":3432,"meta":7,"style":7},"# Redshift\nconnections:\n  redshift:\n    - name: contoso_dbt_rs\n      host: contoso.abcd1234.eu-west-1.redshift.amazonaws.com\n      port: 5439\n      username: analyst_ro\n      password: ${REDSHIFT_PASSWORD}\n      database: contoso\n",[3839],{"type":45,"tag":69,"props":3840,"children":3841},{"__ignoreMap":7},[3842,3850,3861,3873,3893,3909,3925,3940,3956],{"type":45,"tag":215,"props":3843,"children":3844},{"class":217,"line":218},[3845],{"type":45,"tag":215,"props":3846,"children":3847},{"style":3442},[3848],{"type":51,"value":3849},"# Redshift\n",{"type":45,"tag":215,"props":3851,"children":3852},{"class":217,"line":357},[3853,3857],{"type":45,"tag":215,"props":3854,"children":3855},{"style":3451},[3856],{"type":51,"value":3695},{"type":45,"tag":215,"props":3858,"children":3859},{"style":3108},[3860],{"type":51,"value":3477},{"type":45,"tag":215,"props":3862,"children":3863},{"class":217,"line":366},[3864,3869],{"type":45,"tag":215,"props":3865,"children":3866},{"style":3451},[3867],{"type":51,"value":3868},"  redshift",{"type":45,"tag":215,"props":3870,"children":3871},{"style":3108},[3872],{"type":51,"value":3477},{"type":45,"tag":215,"props":3874,"children":3875},{"class":217,"line":375},[3876,3880,3884,3888],{"type":45,"tag":215,"props":3877,"children":3878},{"style":3108},[3879],{"type":51,"value":3719},{"type":45,"tag":215,"props":3881,"children":3882},{"style":3451},[3883],{"type":51,"value":3526},{"type":45,"tag":215,"props":3885,"children":3886},{"style":3108},[3887],{"type":51,"value":3459},{"type":45,"tag":215,"props":3889,"children":3890},{"style":228},[3891],{"type":51,"value":3892},"contoso_dbt_rs\n",{"type":45,"tag":215,"props":3894,"children":3895},{"class":217,"line":21},[3896,3900,3904],{"type":45,"tag":215,"props":3897,"children":3898},{"style":3451},[3899],{"type":51,"value":3740},{"type":45,"tag":215,"props":3901,"children":3902},{"style":3108},[3903],{"type":51,"value":3459},{"type":45,"tag":215,"props":3905,"children":3906},{"style":228},[3907],{"type":51,"value":3908},"contoso.abcd1234.eu-west-1.redshift.amazonaws.com\n",{"type":45,"tag":215,"props":3910,"children":3911},{"class":217,"line":392},[3912,3916,3920],{"type":45,"tag":215,"props":3913,"children":3914},{"style":3451},[3915],{"type":51,"value":3757},{"type":45,"tag":215,"props":3917,"children":3918},{"style":3108},[3919],{"type":51,"value":3459},{"type":45,"tag":215,"props":3921,"children":3922},{"style":244},[3923],{"type":51,"value":3924},"5439\n",{"type":45,"tag":215,"props":3926,"children":3927},{"class":217,"line":11},[3928,3932,3936],{"type":45,"tag":215,"props":3929,"children":3930},{"style":3451},[3931],{"type":51,"value":3774},{"type":45,"tag":215,"props":3933,"children":3934},{"style":3108},[3935],{"type":51,"value":3459},{"type":45,"tag":215,"props":3937,"children":3938},{"style":228},[3939],{"type":51,"value":3783},{"type":45,"tag":215,"props":3941,"children":3942},{"class":217,"line":409},[3943,3947,3951],{"type":45,"tag":215,"props":3944,"children":3945},{"style":3451},[3946],{"type":51,"value":3791},{"type":45,"tag":215,"props":3948,"children":3949},{"style":3108},[3950],{"type":51,"value":3459},{"type":45,"tag":215,"props":3952,"children":3953},{"style":228},[3954],{"type":51,"value":3955},"${REDSHIFT_PASSWORD}\n",{"type":45,"tag":215,"props":3957,"children":3958},{"class":217,"line":674},[3959,3963,3967],{"type":45,"tag":215,"props":3960,"children":3961},{"style":3451},[3962],{"type":51,"value":3808},{"type":45,"tag":215,"props":3964,"children":3965},{"style":3108},[3966],{"type":51,"value":3459},{"type":45,"tag":215,"props":3968,"children":3969},{"style":228},[3970],{"type":51,"value":3817},{"type":45,"tag":205,"props":3972,"children":3974},{"className":3430,"code":3973,"language":3432,"meta":7,"style":7},"# ClickHouse\nconnections:\n  clickhouse:\n    - name: contoso_dbt_ch\n      host: contoso.eu-central-1.aws.clickhouse.cloud\n      port: 9440\n      username: analyst_ro\n      password: ${CLICKHOUSE_PASSWORD}\n      database: default\n      secure: true\n",[3975],{"type":45,"tag":69,"props":3976,"children":3977},{"__ignoreMap":7},[3978,3986,3997,4009,4029,4045,4061,4076,4092,4107],{"type":45,"tag":215,"props":3979,"children":3980},{"class":217,"line":218},[3981],{"type":45,"tag":215,"props":3982,"children":3983},{"style":3442},[3984],{"type":51,"value":3985},"# ClickHouse\n",{"type":45,"tag":215,"props":3987,"children":3988},{"class":217,"line":357},[3989,3993],{"type":45,"tag":215,"props":3990,"children":3991},{"style":3451},[3992],{"type":51,"value":3695},{"type":45,"tag":215,"props":3994,"children":3995},{"style":3108},[3996],{"type":51,"value":3477},{"type":45,"tag":215,"props":3998,"children":3999},{"class":217,"line":366},[4000,4005],{"type":45,"tag":215,"props":4001,"children":4002},{"style":3451},[4003],{"type":51,"value":4004},"  clickhouse",{"type":45,"tag":215,"props":4006,"children":4007},{"style":3108},[4008],{"type":51,"value":3477},{"type":45,"tag":215,"props":4010,"children":4011},{"class":217,"line":375},[4012,4016,4020,4024],{"type":45,"tag":215,"props":4013,"children":4014},{"style":3108},[4015],{"type":51,"value":3719},{"type":45,"tag":215,"props":4017,"children":4018},{"style":3451},[4019],{"type":51,"value":3526},{"type":45,"tag":215,"props":4021,"children":4022},{"style":3108},[4023],{"type":51,"value":3459},{"type":45,"tag":215,"props":4025,"children":4026},{"style":228},[4027],{"type":51,"value":4028},"contoso_dbt_ch\n",{"type":45,"tag":215,"props":4030,"children":4031},{"class":217,"line":21},[4032,4036,4040],{"type":45,"tag":215,"props":4033,"children":4034},{"style":3451},[4035],{"type":51,"value":3740},{"type":45,"tag":215,"props":4037,"children":4038},{"style":3108},[4039],{"type":51,"value":3459},{"type":45,"tag":215,"props":4041,"children":4042},{"style":228},[4043],{"type":51,"value":4044},"contoso.eu-central-1.aws.clickhouse.cloud\n",{"type":45,"tag":215,"props":4046,"children":4047},{"class":217,"line":392},[4048,4052,4056],{"type":45,"tag":215,"props":4049,"children":4050},{"style":3451},[4051],{"type":51,"value":3757},{"type":45,"tag":215,"props":4053,"children":4054},{"style":3108},[4055],{"type":51,"value":3459},{"type":45,"tag":215,"props":4057,"children":4058},{"style":244},[4059],{"type":51,"value":4060},"9440\n",{"type":45,"tag":215,"props":4062,"children":4063},{"class":217,"line":11},[4064,4068,4072],{"type":45,"tag":215,"props":4065,"children":4066},{"style":3451},[4067],{"type":51,"value":3774},{"type":45,"tag":215,"props":4069,"children":4070},{"style":3108},[4071],{"type":51,"value":3459},{"type":45,"tag":215,"props":4073,"children":4074},{"style":228},[4075],{"type":51,"value":3783},{"type":45,"tag":215,"props":4077,"children":4078},{"class":217,"line":409},[4079,4083,4087],{"type":45,"tag":215,"props":4080,"children":4081},{"style":3451},[4082],{"type":51,"value":3791},{"type":45,"tag":215,"props":4084,"children":4085},{"style":3108},[4086],{"type":51,"value":3459},{"type":45,"tag":215,"props":4088,"children":4089},{"style":228},[4090],{"type":51,"value":4091},"${CLICKHOUSE_PASSWORD}\n",{"type":45,"tag":215,"props":4093,"children":4094},{"class":217,"line":674},[4095,4099,4103],{"type":45,"tag":215,"props":4096,"children":4097},{"style":3451},[4098],{"type":51,"value":3808},{"type":45,"tag":215,"props":4100,"children":4101},{"style":3108},[4102],{"type":51,"value":3459},{"type":45,"tag":215,"props":4104,"children":4105},{"style":228},[4106],{"type":51,"value":3464},{"type":45,"tag":215,"props":4108,"children":4109},{"class":217,"line":824},[4110,4115,4119],{"type":45,"tag":215,"props":4111,"children":4112},{"style":3451},[4113],{"type":51,"value":4114},"      secure",{"type":45,"tag":215,"props":4116,"children":4117},{"style":3108},[4118],{"type":51,"value":3459},{"type":45,"tag":215,"props":4120,"children":4121},{"style":244},[4122],{"type":51,"value":3586},{"type":45,"tag":174,"props":4124,"children":4126},{"id":4125},"_3-write-a-pipelineyml",[4127,4129],{"type":51,"value":4128},"3. Write a ",{"type":45,"tag":69,"props":4130,"children":4132},{"className":4131},[],[4133],{"type":51,"value":3288},{"type":45,"tag":103,"props":4135,"children":4136},{},[4137,4138,4143],{"type":51,"value":3420},{"type":45,"tag":69,"props":4139,"children":4141},{"className":4140},[],[4142],{"type":51,"value":1392},{"type":51,"value":472},{"type":45,"tag":205,"props":4145,"children":4147},{"className":3430,"code":4146,"language":3432,"meta":7,"style":7},"# context/pipeline.yml\nname: contoso_dbt_context\nschedule: daily\nstart_date: \"2016-01-01\"\ndefault_connections:\n  google_cloud_platform: \"contoso_dbt_bq\"\n",[4148],{"type":45,"tag":69,"props":4149,"children":4150},{"__ignoreMap":7},[4151,4159,4175,4192,4209,4221],{"type":45,"tag":215,"props":4152,"children":4153},{"class":217,"line":218},[4154],{"type":45,"tag":215,"props":4155,"children":4156},{"style":3442},[4157],{"type":51,"value":4158},"# context/pipeline.yml\n",{"type":45,"tag":215,"props":4160,"children":4161},{"class":217,"line":357},[4162,4166,4170],{"type":45,"tag":215,"props":4163,"children":4164},{"style":3451},[4165],{"type":51,"value":3526},{"type":45,"tag":215,"props":4167,"children":4168},{"style":3108},[4169],{"type":51,"value":3459},{"type":45,"tag":215,"props":4171,"children":4172},{"style":228},[4173],{"type":51,"value":4174},"contoso_dbt_context\n",{"type":45,"tag":215,"props":4176,"children":4177},{"class":217,"line":366},[4178,4183,4187],{"type":45,"tag":215,"props":4179,"children":4180},{"style":3451},[4181],{"type":51,"value":4182},"schedule",{"type":45,"tag":215,"props":4184,"children":4185},{"style":3108},[4186],{"type":51,"value":3459},{"type":45,"tag":215,"props":4188,"children":4189},{"style":228},[4190],{"type":51,"value":4191},"daily\n",{"type":45,"tag":215,"props":4193,"children":4194},{"class":217,"line":375},[4195,4200,4204],{"type":45,"tag":215,"props":4196,"children":4197},{"style":3451},[4198],{"type":51,"value":4199},"start_date",{"type":45,"tag":215,"props":4201,"children":4202},{"style":3108},[4203],{"type":51,"value":3459},{"type":45,"tag":215,"props":4205,"children":4206},{"style":228},[4207],{"type":51,"value":4208},"\"2016-01-01\"\n",{"type":45,"tag":215,"props":4210,"children":4211},{"class":217,"line":21},[4212,4217],{"type":45,"tag":215,"props":4213,"children":4214},{"style":3451},[4215],{"type":51,"value":4216},"default_connections",{"type":45,"tag":215,"props":4218,"children":4219},{"style":3108},[4220],{"type":51,"value":3477},{"type":45,"tag":215,"props":4222,"children":4223},{"class":217,"line":392},[4224,4229,4233],{"type":45,"tag":215,"props":4225,"children":4226},{"style":3451},[4227],{"type":51,"value":4228},"  google_cloud_platform",{"type":45,"tag":215,"props":4230,"children":4231},{"style":3108},[4232],{"type":51,"value":3459},{"type":45,"tag":215,"props":4234,"children":4235},{"style":228},[4236],{"type":51,"value":4237},"\"contoso_dbt_bq\"\n",{"type":45,"tag":103,"props":4239,"children":4240},{},[4241,4243,4248,4250,4256,4258,4264,4265,4271,4272,4278],{"type":51,"value":4242},"The ",{"type":45,"tag":69,"props":4244,"children":4246},{"className":4245},[],[4247],{"type":51,"value":4216},{"type":51,"value":4249}," block makes the connection name implicit for every asset Bruin generates in the next step — you won't have to repeat ",{"type":45,"tag":69,"props":4251,"children":4253},{"className":4252},[],[4254],{"type":51,"value":4255},"connection: contoso_dbt_bq",{"type":51,"value":4257}," in 40 separate YAMLs. For non-BigQuery warehouses, use the matching key (",{"type":45,"tag":69,"props":4259,"children":4261},{"className":4260},[],[4262],{"type":51,"value":4263},"postgres",{"type":51,"value":3166},{"type":45,"tag":69,"props":4266,"children":4268},{"className":4267},[],[4269],{"type":51,"value":4270},"redshift",{"type":51,"value":3166},{"type":45,"tag":69,"props":4273,"children":4275},{"className":4274},[],[4276],{"type":51,"value":4277},"clickhouse",{"type":51,"value":3348},{"type":45,"tag":1152,"props":4280,"children":4281},{},[4282],{"type":45,"tag":103,"props":4283,"children":4284},{},[4285,4287,4292,4294,4299],{"type":51,"value":4286},"The pipeline never ",{"type":45,"tag":143,"props":4288,"children":4289},{},[4290],{"type":51,"value":4291},"runs",{"type":51,"value":4293}," anything — but Bruin still treats it as a pipeline, which gives you ",{"type":45,"tag":69,"props":4295,"children":4297},{"className":4296},[],[4298],{"type":51,"value":1303},{"type":51,"value":4300},", lineage, and docs generation for free.",{"type":45,"tag":174,"props":4302,"children":4304},{"id":4303},"_4-test-the-connection",[4305],{"type":51,"value":4306},"4. Test the connection",{"type":45,"tag":103,"props":4308,"children":4309},{},[4310],{"type":51,"value":4311},"Confirm Bruin can reach the warehouse before going further:",{"type":45,"tag":205,"props":4313,"children":4315},{"className":207,"code":4314,"language":209,"meta":7,"style":7},"bruin connections ping --config-file context/.bruin.yml contoso_dbt_bq\n",[4316],{"type":45,"tag":69,"props":4317,"children":4318},{"__ignoreMap":7},[4319],{"type":45,"tag":215,"props":4320,"children":4321},{"class":217,"line":218},[4322,4326,4331,4336,4341,4345],{"type":45,"tag":215,"props":4323,"children":4324},{"style":222},[4325],{"type":51,"value":277},{"type":45,"tag":215,"props":4327,"children":4328},{"style":228},[4329],{"type":51,"value":4330}," connections",{"type":45,"tag":215,"props":4332,"children":4333},{"style":228},[4334],{"type":51,"value":4335}," ping",{"type":45,"tag":215,"props":4337,"children":4338},{"style":244},[4339],{"type":51,"value":4340}," --config-file",{"type":45,"tag":215,"props":4342,"children":4343},{"style":228},[4344],{"type":51,"value":590},{"type":45,"tag":215,"props":4346,"children":4347},{"style":228},[4348],{"type":51,"value":4349}," contoso_dbt_bq\n",{"type":45,"tag":103,"props":4351,"children":4352},{},[4353],{"type":51,"value":4354},"Expected output:",{"type":45,"tag":205,"props":4356,"children":4359},{"className":4357,"code":4358,"language":51},[2800],"Successfully connected to 'contoso_dbt_bq'.\n",[4360],{"type":45,"tag":69,"props":4361,"children":4362},{"__ignoreMap":7},[4363],{"type":51,"value":4358},{"type":45,"tag":103,"props":4365,"children":4366},{},[4367,4369,4374],{"type":51,"value":4368},"If you see an authentication error, run ",{"type":45,"tag":69,"props":4370,"children":4372},{"className":4371},[],[4373],{"type":51,"value":691},{"type":51,"value":4375}," (BigQuery) or check your env vars (Postgres / Redshift / ClickHouse) and try again.",{"type":45,"tag":1152,"props":4377,"children":4378},{},[4379],{"type":45,"tag":103,"props":4380,"children":4381},{},[4382,4395,4397,4402],{"type":45,"tag":109,"props":4383,"children":4384},{},[4385,4387,4393],{"type":51,"value":4386},"Gotcha — ",{"type":45,"tag":69,"props":4388,"children":4390},{"className":4389},[],[4391],{"type":51,"value":4392},"bruin connections test",{"type":51,"value":4394}," loads everything.",{"type":51,"value":4396}," It walks every connection in scope, so a broken sibling connection breaks the test. Always ",{"type":45,"tag":69,"props":4398,"children":4400},{"className":4399},[],[4401],{"type":51,"value":1260},{"type":51,"value":1262},{"type":45,"tag":46,"props":4404,"children":4405},{"id":1461},[4406],{"type":51,"value":1464},{"type":45,"tag":103,"props":4408,"children":4409},{},[4410,4412,4417],{"type":51,"value":4411},"You now have a self-contained Bruin pipeline at ",{"type":45,"tag":69,"props":4413,"children":4415},{"className":4414},[],[4416],{"type":51,"value":739},{"type":51,"value":4418}," — config, connection, and pipeline metadata, isolated from anything else in the repo. The next step uses this scoped config to introspect your warehouse and turn every dbt-materialized table into a Bruin asset YAML.",{"type":45,"tag":1485,"props":4420,"children":4421},{},[4422],{"type":51,"value":1489},{"title":7,"searchDepth":357,"depth":357,"links":4424},[4425,4426,4427,4435],{"id":48,"depth":357,"text":52},{"id":98,"depth":357,"text":101},{"id":169,"depth":357,"text":172,"children":4428},[4429,4430,4432,4434],{"id":3351,"depth":366,"text":3354},{"id":3407,"depth":366,"text":4431},"2. Write a scoped .bruin.yml",{"id":4125,"depth":366,"text":4433},"3. Write a pipeline.yml",{"id":4303,"depth":366,"text":4306},{"id":1461,"depth":357,"text":1464},"content:tutorials:dbt-bruin-analyst:isolated-context.md","tutorials/dbt-bruin-analyst/isolated-context.md","tutorials/dbt-bruin-analyst/isolated-context",{"_path":4440,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":4441,"description":4442,"date":10,"readingTime":21,"category":12,"tags":4443,"difficulty":20,"module":5,"step":366,"journeys":4444,"learnMore":4445,"stepGif":36,"author":4452,"body":4453,"_type":746,"_id":5506,"_source":1506,"_file":5507,"_stem":5508,"_extension":1509},"/tutorials/dbt-bruin-analyst/import-schemas","Import Your dbt Schemas as Assets","Use bruin import database to introspect every materialized dbt schema and write one .asset.yml per table — raw, staging, and reports — in a single command.",[14,16],[24,25],[4446,4449],{"label":4447,"url":4448},"bruin import database (docs)","https://getbruin.com/docs/bruin/commands/import.html",{"label":4450,"url":4451},"Asset definition schema","https://getbruin.com/docs/bruin/assets/definition-schema.html",{"name":38,"role":39,"image":40},{"type":42,"children":4454,"toc":5493},[4455,4459,4504,4508,4513,4532,4536,4542,4547,4596,4631,4637,4657,4772,4785,4865,4899,4905,4925,4937,4946,4951,5148,5153,5159,5170,5291,5296,5302,5307,5339,5344,5353,5358,5364,5372,5397,5405,5425,5438,5462,5470,5475,5479,5489],{"type":45,"tag":46,"props":4456,"children":4457},{"id":48},[4458],{"type":51,"value":52},{"type":45,"tag":103,"props":4460,"children":4461},{},[4462,4464,4469,4471,4476,4477,4482,4483,4488,4490,4496,4498,4503],{"type":51,"value":4463},"Run ",{"type":45,"tag":69,"props":4465,"children":4467},{"className":4466},[],[4468],{"type":51,"value":439},{"type":51,"value":4470}," against the schemas your dbt project materializes (e.g., ",{"type":45,"tag":69,"props":4472,"children":4474},{"className":4473},[],[4475],{"type":51,"value":2885},{"type":51,"value":3166},{"type":45,"tag":69,"props":4478,"children":4480},{"className":4479},[],[4481],{"type":51,"value":2906},{"type":51,"value":3166},{"type":45,"tag":69,"props":4484,"children":4486},{"className":4485},[],[4487],{"type":51,"value":2925},{"type":51,"value":4489},"). Bruin connects to the warehouse, reads each table's column list and types, and writes one ",{"type":45,"tag":69,"props":4491,"children":4493},{"className":4492},[],[4494],{"type":51,"value":4495},".asset.yml",{"type":51,"value":4497}," per table under ",{"type":45,"tag":69,"props":4499,"children":4501},{"className":4500},[],[4502],{"type":51,"value":82},{"type":51,"value":451},{"type":45,"tag":46,"props":4505,"children":4506},{"id":98},[4507],{"type":51,"value":101},{"type":45,"tag":103,"props":4509,"children":4510},{},[4511],{"type":51,"value":4512},"This is the heavy lifting in one command. Without it, you'd be hand-writing 40 YAML files trying to remember every column, every type, every table. With it, Bruin reads the warehouse you just built with dbt and generates the skeletons for you in seconds.",{"type":45,"tag":103,"props":4514,"children":4515},{},[4516,4518,4523,4525,4530],{"type":51,"value":4517},"What you get out of this step is ",{"type":45,"tag":143,"props":4519,"children":4520},{},[4521],{"type":51,"value":4522},"structure",{"type":51,"value":4524},": tables, columns, types. The next step (AI enhance) adds the ",{"type":45,"tag":143,"props":4526,"children":4527},{},[4528],{"type":51,"value":4529},"meaning",{"type":51,"value":4531},": descriptions, tags, quality checks. Both halves matter — but the structure has to come from the warehouse, not from a guess.",{"type":45,"tag":46,"props":4533,"children":4534},{"id":169},[4535],{"type":51,"value":172},{"type":45,"tag":174,"props":4537,"children":4539},{"id":4538},"_1-identify-your-dbt-schemas",[4540],{"type":51,"value":4541},"1. Identify your dbt schemas",{"type":45,"tag":103,"props":4543,"children":4544},{},[4545],{"type":51,"value":4546},"You need the actual warehouse schema names. If you used the reference contoso project's schema convention, they're:",{"type":45,"tag":117,"props":4548,"children":4549},{},[4550,4561,4579],{"type":45,"tag":58,"props":4551,"children":4552},{},[4553,4559],{"type":45,"tag":69,"props":4554,"children":4556},{"className":4555},[],[4557],{"type":51,"value":4558},"contoso_dbt_raw",{"type":51,"value":4560}," — what dlt loads",{"type":45,"tag":58,"props":4562,"children":4563},{},[4564,4569,4571,4577],{"type":45,"tag":69,"props":4565,"children":4567},{"className":4566},[],[4568],{"type":51,"value":2952},{"type":51,"value":4570}," — ",{"type":45,"tag":69,"props":4572,"children":4574},{"className":4573},[],[4575],{"type":51,"value":4576},"stg_*",{"type":51,"value":4578}," models",{"type":45,"tag":58,"props":4580,"children":4581},{},[4582,4588,4589,4595],{"type":45,"tag":69,"props":4583,"children":4585},{"className":4584},[],[4586],{"type":51,"value":4587},"contoso_dbt_reports",{"type":51,"value":4570},{"type":45,"tag":69,"props":4590,"children":4592},{"className":4591},[],[4593],{"type":51,"value":4594},"rpt_*",{"type":51,"value":4578},{"type":45,"tag":103,"props":4597,"children":4598},{},[4599,4601,4606,4608,4614,4616,4622,4624,4629],{"type":51,"value":4600},"If you're not sure what your dbt project lands as, check ",{"type":45,"tag":69,"props":4602,"children":4604},{"className":4603},[],[4605],{"type":51,"value":724},{"type":51,"value":4607},". The full schema name is ",{"type":45,"tag":69,"props":4609,"children":4611},{"className":4610},[],[4612],{"type":51,"value":4613},"\u003Ctarget.schema>_\u003C+schema>",{"type":51,"value":4615}," by default, or just ",{"type":45,"tag":69,"props":4617,"children":4619},{"className":4618},[],[4620],{"type":51,"value":4621},"\u003C+schema>",{"type":51,"value":4623}," if you've overridden ",{"type":45,"tag":69,"props":4625,"children":4627},{"className":4626},[],[4628],{"type":51,"value":2989},{"type":51,"value":4630}," (the contoso project does).",{"type":45,"tag":174,"props":4632,"children":4634},{"id":4633},"_2-run-the-import",[4635],{"type":51,"value":4636},"2. Run the import",{"type":45,"tag":103,"props":4638,"children":4639},{},[4640,4642,4647,4649,4655],{"type":51,"value":4641},"From the dbt project root, point the import at your ",{"type":45,"tag":69,"props":4643,"children":4645},{"className":4644},[],[4646],{"type":51,"value":739},{"type":51,"value":4648}," pipeline folder. The ",{"type":45,"tag":69,"props":4650,"children":4652},{"className":4651},[],[4653],{"type":51,"value":4654},"--schemas",{"type":51,"value":4656}," flag is repeatable for BigQuery — pass it once per schema:",{"type":45,"tag":205,"props":4658,"children":4660},{"className":207,"code":4659,"language":209,"meta":7,"style":7},"bruin import database \\\n  --config-file context/.bruin.yml \\\n  --connection contoso_dbt_bq \\\n  --schemas contoso_dbt_raw \\\n  --schemas contoso_dbt_staging \\\n  --schemas contoso_dbt_reports \\\n  context\n",[4661],{"type":45,"tag":69,"props":4662,"children":4663},{"__ignoreMap":7},[4664,4685,4700,4715,4732,4748,4764],{"type":45,"tag":215,"props":4665,"children":4666},{"class":217,"line":218},[4667,4671,4676,4681],{"type":45,"tag":215,"props":4668,"children":4669},{"style":222},[4670],{"type":51,"value":277},{"type":45,"tag":215,"props":4672,"children":4673},{"style":228},[4674],{"type":51,"value":4675}," import",{"type":45,"tag":215,"props":4677,"children":4678},{"style":228},[4679],{"type":51,"value":4680}," database",{"type":45,"tag":215,"props":4682,"children":4683},{"style":244},[4684],{"type":51,"value":577},{"type":45,"tag":215,"props":4686,"children":4687},{"class":217,"line":357},[4688,4692,4696],{"type":45,"tag":215,"props":4689,"children":4690},{"style":244},[4691],{"type":51,"value":585},{"type":45,"tag":215,"props":4693,"children":4694},{"style":228},[4695],{"type":51,"value":590},{"type":45,"tag":215,"props":4697,"children":4698},{"style":244},[4699],{"type":51,"value":577},{"type":45,"tag":215,"props":4701,"children":4702},{"class":217,"line":366},[4703,4707,4711],{"type":45,"tag":215,"props":4704,"children":4705},{"style":244},[4706],{"type":51,"value":602},{"type":45,"tag":215,"props":4708,"children":4709},{"style":228},[4710],{"type":51,"value":607},{"type":45,"tag":215,"props":4712,"children":4713},{"style":244},[4714],{"type":51,"value":577},{"type":45,"tag":215,"props":4716,"children":4717},{"class":217,"line":375},[4718,4723,4728],{"type":45,"tag":215,"props":4719,"children":4720},{"style":244},[4721],{"type":51,"value":4722},"  --schemas",{"type":45,"tag":215,"props":4724,"children":4725},{"style":228},[4726],{"type":51,"value":4727}," contoso_dbt_raw",{"type":45,"tag":215,"props":4729,"children":4730},{"style":244},[4731],{"type":51,"value":577},{"type":45,"tag":215,"props":4733,"children":4734},{"class":217,"line":21},[4735,4739,4744],{"type":45,"tag":215,"props":4736,"children":4737},{"style":244},[4738],{"type":51,"value":4722},{"type":45,"tag":215,"props":4740,"children":4741},{"style":228},[4742],{"type":51,"value":4743}," contoso_dbt_staging",{"type":45,"tag":215,"props":4745,"children":4746},{"style":244},[4747],{"type":51,"value":577},{"type":45,"tag":215,"props":4749,"children":4750},{"class":217,"line":392},[4751,4755,4760],{"type":45,"tag":215,"props":4752,"children":4753},{"style":244},[4754],{"type":51,"value":4722},{"type":45,"tag":215,"props":4756,"children":4757},{"style":228},[4758],{"type":51,"value":4759}," contoso_dbt_reports",{"type":45,"tag":215,"props":4761,"children":4762},{"style":244},[4763],{"type":51,"value":577},{"type":45,"tag":215,"props":4765,"children":4766},{"class":217,"line":11},[4767],{"type":45,"tag":215,"props":4768,"children":4769},{"style":228},[4770],{"type":51,"value":4771},"  context\n",{"type":45,"tag":103,"props":4773,"children":4774},{},[4775,4777,4783],{"type":51,"value":4776},"For Postgres, Redshift, or ClickHouse, use ",{"type":45,"tag":69,"props":4778,"children":4780},{"className":4779},[],[4781],{"type":51,"value":4782},"--schema",{"type":51,"value":4784}," (singular) once per run:",{"type":45,"tag":205,"props":4786,"children":4788},{"className":207,"code":4787,"language":209,"meta":7,"style":7},"bruin import database \\\n  --config-file context/.bruin.yml \\\n  --connection contoso_dbt_pg \\\n  --schema contoso_dbt_staging \\\n  context\n",[4789],{"type":45,"tag":69,"props":4790,"children":4791},{"__ignoreMap":7},[4792,4811,4826,4842,4858],{"type":45,"tag":215,"props":4793,"children":4794},{"class":217,"line":218},[4795,4799,4803,4807],{"type":45,"tag":215,"props":4796,"children":4797},{"style":222},[4798],{"type":51,"value":277},{"type":45,"tag":215,"props":4800,"children":4801},{"style":228},[4802],{"type":51,"value":4675},{"type":45,"tag":215,"props":4804,"children":4805},{"style":228},[4806],{"type":51,"value":4680},{"type":45,"tag":215,"props":4808,"children":4809},{"style":244},[4810],{"type":51,"value":577},{"type":45,"tag":215,"props":4812,"children":4813},{"class":217,"line":357},[4814,4818,4822],{"type":45,"tag":215,"props":4815,"children":4816},{"style":244},[4817],{"type":51,"value":585},{"type":45,"tag":215,"props":4819,"children":4820},{"style":228},[4821],{"type":51,"value":590},{"type":45,"tag":215,"props":4823,"children":4824},{"style":244},[4825],{"type":51,"value":577},{"type":45,"tag":215,"props":4827,"children":4828},{"class":217,"line":366},[4829,4833,4838],{"type":45,"tag":215,"props":4830,"children":4831},{"style":244},[4832],{"type":51,"value":602},{"type":45,"tag":215,"props":4834,"children":4835},{"style":228},[4836],{"type":51,"value":4837}," contoso_dbt_pg",{"type":45,"tag":215,"props":4839,"children":4840},{"style":244},[4841],{"type":51,"value":577},{"type":45,"tag":215,"props":4843,"children":4844},{"class":217,"line":375},[4845,4850,4854],{"type":45,"tag":215,"props":4846,"children":4847},{"style":244},[4848],{"type":51,"value":4849},"  --schema",{"type":45,"tag":215,"props":4851,"children":4852},{"style":228},[4853],{"type":51,"value":4743},{"type":45,"tag":215,"props":4855,"children":4856},{"style":244},[4857],{"type":51,"value":577},{"type":45,"tag":215,"props":4859,"children":4860},{"class":217,"line":21},[4861],{"type":45,"tag":215,"props":4862,"children":4863},{"style":228},[4864],{"type":51,"value":4771},{"type":45,"tag":1152,"props":4866,"children":4867},{},[4868],{"type":45,"tag":103,"props":4869,"children":4870},{},[4871,4876,4878,4883,4885,4891,4893,4898],{"type":45,"tag":109,"props":4872,"children":4873},{},[4874],{"type":51,"value":4875},"Note:",{"type":51,"value":4877}," The trailing positional argument is the ",{"type":45,"tag":109,"props":4879,"children":4880},{},[4881],{"type":51,"value":4882},"pipeline path",{"type":51,"value":4884},", not the project root. That's ",{"type":45,"tag":69,"props":4886,"children":4888},{"className":4887},[],[4889],{"type":51,"value":4890},"context",{"type":51,"value":4892}," in our setup — the directory containing ",{"type":45,"tag":69,"props":4894,"children":4896},{"className":4895},[],[4897],{"type":51,"value":3288},{"type":51,"value":451},{"type":45,"tag":174,"props":4900,"children":4902},{"id":4901},"_3-inspect-what-was-generated",[4903],{"type":51,"value":4904},"3. Inspect what was generated",{"type":45,"tag":205,"props":4906,"children":4908},{"className":207,"code":4907,"language":209,"meta":7,"style":7},"ls context/assets/\n",[4909],{"type":45,"tag":69,"props":4910,"children":4911},{"__ignoreMap":7},[4912],{"type":45,"tag":215,"props":4913,"children":4914},{"class":217,"line":218},[4915,4920],{"type":45,"tag":215,"props":4916,"children":4917},{"style":222},[4918],{"type":51,"value":4919},"ls",{"type":45,"tag":215,"props":4921,"children":4922},{"style":228},[4923],{"type":51,"value":4924}," context/assets/\n",{"type":45,"tag":103,"props":4926,"children":4927},{},[4928,4930,4935],{"type":51,"value":4929},"You should see one folder per schema, each containing one ",{"type":45,"tag":69,"props":4931,"children":4933},{"className":4932},[],[4934],{"type":51,"value":4495},{"type":51,"value":4936}," per table:",{"type":45,"tag":205,"props":4938,"children":4941},{"className":4939,"code":4940,"language":51},[2800],"context/assets/\n├── contoso_dbt_raw/\n│   ├── customers.asset.yml\n│   ├── orders.asset.yml\n│   └── ...\n├── contoso_dbt_staging/\n│   ├── stg_customers.asset.yml\n│   └── ...\n└── contoso_dbt_reports/\n    ├── rpt_revenue_by_segment.asset.yml\n    └── ...\n",[4942],{"type":45,"tag":69,"props":4943,"children":4944},{"__ignoreMap":7},[4945],{"type":51,"value":4940},{"type":45,"tag":103,"props":4947,"children":4948},{},[4949],{"type":51,"value":4950},"Open one — they look like this:",{"type":45,"tag":205,"props":4952,"children":4954},{"className":3430,"code":4953,"language":3432,"meta":7,"style":7},"name: contoso_dbt_reports.rpt_revenue_by_segment\ntype: bq.source\ncolumns:\n  - name: segment_id\n    type: STRING\n  - name: category_name\n    type: STRING\n  - name: year\n    type: INT64\n  - name: revenue_usd\n    type: NUMERIC\n",[4955],{"type":45,"tag":69,"props":4956,"children":4957},{"__ignoreMap":7},[4958,4974,4991,5003,5024,5041,5061,5076,5096,5112,5132],{"type":45,"tag":215,"props":4959,"children":4960},{"class":217,"line":218},[4961,4965,4969],{"type":45,"tag":215,"props":4962,"children":4963},{"style":3451},[4964],{"type":51,"value":3526},{"type":45,"tag":215,"props":4966,"children":4967},{"style":3108},[4968],{"type":51,"value":3459},{"type":45,"tag":215,"props":4970,"children":4971},{"style":228},[4972],{"type":51,"value":4973},"contoso_dbt_reports.rpt_revenue_by_segment\n",{"type":45,"tag":215,"props":4975,"children":4976},{"class":217,"line":357},[4977,4982,4986],{"type":45,"tag":215,"props":4978,"children":4979},{"style":3451},[4980],{"type":51,"value":4981},"type",{"type":45,"tag":215,"props":4983,"children":4984},{"style":3108},[4985],{"type":51,"value":3459},{"type":45,"tag":215,"props":4987,"children":4988},{"style":228},[4989],{"type":51,"value":4990},"bq.source\n",{"type":45,"tag":215,"props":4992,"children":4993},{"class":217,"line":366},[4994,4999],{"type":45,"tag":215,"props":4995,"children":4996},{"style":3451},[4997],{"type":51,"value":4998},"columns",{"type":45,"tag":215,"props":5000,"children":5001},{"style":3108},[5002],{"type":51,"value":3477},{"type":45,"tag":215,"props":5004,"children":5005},{"class":217,"line":375},[5006,5011,5015,5019],{"type":45,"tag":215,"props":5007,"children":5008},{"style":3108},[5009],{"type":51,"value":5010},"  - ",{"type":45,"tag":215,"props":5012,"children":5013},{"style":3451},[5014],{"type":51,"value":3526},{"type":45,"tag":215,"props":5016,"children":5017},{"style":3108},[5018],{"type":51,"value":3459},{"type":45,"tag":215,"props":5020,"children":5021},{"style":228},[5022],{"type":51,"value":5023},"segment_id\n",{"type":45,"tag":215,"props":5025,"children":5026},{"class":217,"line":21},[5027,5032,5036],{"type":45,"tag":215,"props":5028,"children":5029},{"style":3451},[5030],{"type":51,"value":5031},"    type",{"type":45,"tag":215,"props":5033,"children":5034},{"style":3108},[5035],{"type":51,"value":3459},{"type":45,"tag":215,"props":5037,"children":5038},{"style":228},[5039],{"type":51,"value":5040},"STRING\n",{"type":45,"tag":215,"props":5042,"children":5043},{"class":217,"line":392},[5044,5048,5052,5056],{"type":45,"tag":215,"props":5045,"children":5046},{"style":3108},[5047],{"type":51,"value":5010},{"type":45,"tag":215,"props":5049,"children":5050},{"style":3451},[5051],{"type":51,"value":3526},{"type":45,"tag":215,"props":5053,"children":5054},{"style":3108},[5055],{"type":51,"value":3459},{"type":45,"tag":215,"props":5057,"children":5058},{"style":228},[5059],{"type":51,"value":5060},"category_name\n",{"type":45,"tag":215,"props":5062,"children":5063},{"class":217,"line":11},[5064,5068,5072],{"type":45,"tag":215,"props":5065,"children":5066},{"style":3451},[5067],{"type":51,"value":5031},{"type":45,"tag":215,"props":5069,"children":5070},{"style":3108},[5071],{"type":51,"value":3459},{"type":45,"tag":215,"props":5073,"children":5074},{"style":228},[5075],{"type":51,"value":5040},{"type":45,"tag":215,"props":5077,"children":5078},{"class":217,"line":409},[5079,5083,5087,5091],{"type":45,"tag":215,"props":5080,"children":5081},{"style":3108},[5082],{"type":51,"value":5010},{"type":45,"tag":215,"props":5084,"children":5085},{"style":3451},[5086],{"type":51,"value":3526},{"type":45,"tag":215,"props":5088,"children":5089},{"style":3108},[5090],{"type":51,"value":3459},{"type":45,"tag":215,"props":5092,"children":5093},{"style":228},[5094],{"type":51,"value":5095},"year\n",{"type":45,"tag":215,"props":5097,"children":5098},{"class":217,"line":674},[5099,5103,5107],{"type":45,"tag":215,"props":5100,"children":5101},{"style":3451},[5102],{"type":51,"value":5031},{"type":45,"tag":215,"props":5104,"children":5105},{"style":3108},[5106],{"type":51,"value":3459},{"type":45,"tag":215,"props":5108,"children":5109},{"style":228},[5110],{"type":51,"value":5111},"INT64\n",{"type":45,"tag":215,"props":5113,"children":5114},{"class":217,"line":824},[5115,5119,5123,5127],{"type":45,"tag":215,"props":5116,"children":5117},{"style":3108},[5118],{"type":51,"value":5010},{"type":45,"tag":215,"props":5120,"children":5121},{"style":3451},[5122],{"type":51,"value":3526},{"type":45,"tag":215,"props":5124,"children":5125},{"style":3108},[5126],{"type":51,"value":3459},{"type":45,"tag":215,"props":5128,"children":5129},{"style":228},[5130],{"type":51,"value":5131},"revenue_usd\n",{"type":45,"tag":215,"props":5133,"children":5134},{"class":217,"line":833},[5135,5139,5143],{"type":45,"tag":215,"props":5136,"children":5137},{"style":3451},[5138],{"type":51,"value":5031},{"type":45,"tag":215,"props":5140,"children":5141},{"style":3108},[5142],{"type":51,"value":3459},{"type":45,"tag":215,"props":5144,"children":5145},{"style":228},[5146],{"type":51,"value":5147},"NUMERIC\n",{"type":45,"tag":103,"props":5149,"children":5150},{},[5151],{"type":51,"value":5152},"No descriptions, no tags, no checks yet — just structure. That's by design. The AI enhance step in the next chapter is what fills in the meaning.",{"type":45,"tag":174,"props":5154,"children":5156},{"id":5155},"_4-filter-out-loader-internal-tables",[5157],{"type":51,"value":5158},"4. Filter out loader-internal tables",{"type":45,"tag":103,"props":5160,"children":5161},{},[5162,5164,5169],{"type":51,"value":5163},"If your raw schema was loaded by dlt, Fivetran, or Airbyte, the import will include their bookkeeping tables. They're not useful as agent context — drop them before enhancing so Claude doesn't waste time describing ",{"type":45,"tag":69,"props":5165,"children":5167},{"className":5166},[],[5168],{"type":51,"value":1288},{"type":51,"value":472},{"type":45,"tag":205,"props":5171,"children":5173},{"className":207,"code":5172,"language":209,"meta":7,"style":7},"# dlt\nfind context/assets -name \"_dlt_*.asset.yml\" -delete\n\n# Airbyte\nfind context/assets -name \"_airbyte_*.asset.yml\" -delete\n\n# Fivetran\nfind context/assets -name \"fivetran_*.asset.yml\" -delete\n",[5174],{"type":45,"tag":69,"props":5175,"children":5176},{"__ignoreMap":7},[5177,5185,5213,5220,5228,5252,5259,5267],{"type":45,"tag":215,"props":5178,"children":5179},{"class":217,"line":218},[5180],{"type":45,"tag":215,"props":5181,"children":5182},{"style":3442},[5183],{"type":51,"value":5184},"# dlt\n",{"type":45,"tag":215,"props":5186,"children":5187},{"class":217,"line":357},[5188,5193,5198,5203,5208],{"type":45,"tag":215,"props":5189,"children":5190},{"style":222},[5191],{"type":51,"value":5192},"find",{"type":45,"tag":215,"props":5194,"children":5195},{"style":228},[5196],{"type":51,"value":5197}," context/assets",{"type":45,"tag":215,"props":5199,"children":5200},{"style":244},[5201],{"type":51,"value":5202}," -name",{"type":45,"tag":215,"props":5204,"children":5205},{"style":228},[5206],{"type":51,"value":5207}," \"_dlt_*.asset.yml\"",{"type":45,"tag":215,"props":5209,"children":5210},{"style":244},[5211],{"type":51,"value":5212}," -delete\n",{"type":45,"tag":215,"props":5214,"children":5215},{"class":217,"line":366},[5216],{"type":45,"tag":215,"props":5217,"children":5218},{"emptyLinePlaceholder":764},[5219],{"type":51,"value":767},{"type":45,"tag":215,"props":5221,"children":5222},{"class":217,"line":375},[5223],{"type":45,"tag":215,"props":5224,"children":5225},{"style":3442},[5226],{"type":51,"value":5227},"# Airbyte\n",{"type":45,"tag":215,"props":5229,"children":5230},{"class":217,"line":21},[5231,5235,5239,5243,5248],{"type":45,"tag":215,"props":5232,"children":5233},{"style":222},[5234],{"type":51,"value":5192},{"type":45,"tag":215,"props":5236,"children":5237},{"style":228},[5238],{"type":51,"value":5197},{"type":45,"tag":215,"props":5240,"children":5241},{"style":244},[5242],{"type":51,"value":5202},{"type":45,"tag":215,"props":5244,"children":5245},{"style":228},[5246],{"type":51,"value":5247}," \"_airbyte_*.asset.yml\"",{"type":45,"tag":215,"props":5249,"children":5250},{"style":244},[5251],{"type":51,"value":5212},{"type":45,"tag":215,"props":5253,"children":5254},{"class":217,"line":392},[5255],{"type":45,"tag":215,"props":5256,"children":5257},{"emptyLinePlaceholder":764},[5258],{"type":51,"value":767},{"type":45,"tag":215,"props":5260,"children":5261},{"class":217,"line":11},[5262],{"type":45,"tag":215,"props":5263,"children":5264},{"style":3442},[5265],{"type":51,"value":5266},"# Fivetran\n",{"type":45,"tag":215,"props":5268,"children":5269},{"class":217,"line":409},[5270,5274,5278,5282,5287],{"type":45,"tag":215,"props":5271,"children":5272},{"style":222},[5273],{"type":51,"value":5192},{"type":45,"tag":215,"props":5275,"children":5276},{"style":228},[5277],{"type":51,"value":5197},{"type":45,"tag":215,"props":5279,"children":5280},{"style":244},[5281],{"type":51,"value":5202},{"type":45,"tag":215,"props":5283,"children":5284},{"style":228},[5285],{"type":51,"value":5286}," \"fivetran_*.asset.yml\"",{"type":45,"tag":215,"props":5288,"children":5289},{"style":244},[5290],{"type":51,"value":5212},{"type":45,"tag":103,"props":5292,"children":5293},{},[5294],{"type":51,"value":5295},"Run only the one(s) that match your loader. The contoso project uses dlt, so the first command applies.",{"type":45,"tag":174,"props":5297,"children":5299},{"id":5298},"_5-optional-validate-the-structure",[5300],{"type":51,"value":5301},"5. (Optional) Validate the structure",{"type":45,"tag":103,"props":5303,"children":5304},{},[5305],{"type":51,"value":5306},"Even before enhancement, you can sanity-check the YAMLs:",{"type":45,"tag":205,"props":5308,"children":5310},{"className":207,"code":5309,"language":209,"meta":7,"style":7},"bruin validate --config-file context/.bruin.yml context\n",[5311],{"type":45,"tag":69,"props":5312,"children":5313},{"__ignoreMap":7},[5314],{"type":45,"tag":215,"props":5315,"children":5316},{"class":217,"line":218},[5317,5321,5326,5330,5334],{"type":45,"tag":215,"props":5318,"children":5319},{"style":222},[5320],{"type":51,"value":277},{"type":45,"tag":215,"props":5322,"children":5323},{"style":228},[5324],{"type":51,"value":5325}," validate",{"type":45,"tag":215,"props":5327,"children":5328},{"style":244},[5329],{"type":51,"value":4340},{"type":45,"tag":215,"props":5331,"children":5332},{"style":228},[5333],{"type":51,"value":590},{"type":45,"tag":215,"props":5335,"children":5336},{"style":228},[5337],{"type":51,"value":5338}," context\n",{"type":45,"tag":103,"props":5340,"children":5341},{},[5342],{"type":51,"value":5343},"You should see one line per asset and a summary like:",{"type":45,"tag":205,"props":5345,"children":5348},{"className":5346,"code":5347,"language":51},[2800],"✓ Successfully validated 40 assets across 1 pipeline, all good.\n",[5349],{"type":45,"tag":69,"props":5350,"children":5351},{"__ignoreMap":7},[5352],{"type":51,"value":5347},{"type":45,"tag":103,"props":5354,"children":5355},{},[5356],{"type":51,"value":5357},"If you see parse errors, re-run the import for that schema — partial files can occasionally be left behind if the introspection is interrupted.",{"type":45,"tag":46,"props":5359,"children":5361},{"id":5360},"troubleshooting",[5362],{"type":51,"value":5363},"Troubleshooting",{"type":45,"tag":103,"props":5365,"children":5366},{},[5367],{"type":45,"tag":109,"props":5368,"children":5369},{},[5370],{"type":51,"value":5371},"\"connection not found\"",{"type":45,"tag":103,"props":5373,"children":5374},{},[5375,5377,5382,5384,5389,5391,5396],{"type":51,"value":5376},"You didn't pass ",{"type":45,"tag":69,"props":5378,"children":5380},{"className":5379},[],[5381],{"type":51,"value":1260},{"type":51,"value":5383},", so Bruin loaded a different ",{"type":45,"tag":69,"props":5385,"children":5387},{"className":5386},[],[5388],{"type":51,"value":1251},{"type":51,"value":5390}," from elsewhere in the repo. Always include ",{"type":45,"tag":69,"props":5392,"children":5394},{"className":5393},[],[5395],{"type":51,"value":3665},{"type":51,"value":451},{"type":45,"tag":103,"props":5398,"children":5399},{},[5400],{"type":45,"tag":109,"props":5401,"children":5402},{},[5403],{"type":51,"value":5404},"\"permission denied\" / \"access denied\" on a schema",{"type":45,"tag":103,"props":5406,"children":5407},{},[5408,5410,5416,5418,5423],{"type":51,"value":5409},"Your connection identity is missing read access. For BigQuery, the role is ",{"type":45,"tag":69,"props":5411,"children":5413},{"className":5412},[],[5414],{"type":51,"value":5415},"BigQuery Data Viewer",{"type":51,"value":5417}," on the dataset; for Postgres / Redshift, it's ",{"type":45,"tag":69,"props":5419,"children":5421},{"className":5420},[],[5422],{"type":51,"value":3105},{"type":51,"value":5424}," on the schema's tables.",{"type":45,"tag":103,"props":5426,"children":5427},{},[5428],{"type":45,"tag":109,"props":5429,"children":5430},{},[5431,5433],{"type":51,"value":5432},"Some tables are missing from ",{"type":45,"tag":69,"props":5434,"children":5436},{"className":5435},[],[5437],{"type":51,"value":82},{"type":45,"tag":103,"props":5439,"children":5440},{},[5441,5446,5448,5453,5455,5460],{"type":45,"tag":69,"props":5442,"children":5444},{"className":5443},[],[5445],{"type":51,"value":439},{"type":51,"value":5447}," only writes assets for tables that exist ",{"type":45,"tag":143,"props":5449,"children":5450},{},[5451],{"type":51,"value":5452},"right now",{"type":51,"value":5454},". If a dbt model failed to materialize, it won't be there. Re-run ",{"type":45,"tag":69,"props":5456,"children":5458},{"className":5457},[],[5459],{"type":51,"value":2735},{"type":51,"value":5461},", then re-run the import.",{"type":45,"tag":103,"props":5463,"children":5464},{},[5465],{"type":45,"tag":109,"props":5466,"children":5467},{},[5468],{"type":51,"value":5469},"Import is slow on a large schema",{"type":45,"tag":103,"props":5471,"children":5472},{},[5473],{"type":51,"value":5474},"Each table costs one metadata round-trip. For a few hundred tables this is still a matter of seconds; if you have thousands, consider importing one schema at a time so partial progress isn't lost on Ctrl-C.",{"type":45,"tag":46,"props":5476,"children":5477},{"id":1461},[5478],{"type":51,"value":1464},{"type":45,"tag":103,"props":5480,"children":5481},{},[5482,5487],{"type":45,"tag":69,"props":5483,"children":5485},{"className":5484},[],[5486],{"type":51,"value":82},{"type":51,"value":5488}," now mirrors your warehouse: one YAML per table, with column names and types pulled directly from the live database. This is the skeleton — the structural truth that the rest of the module builds on. Next we'll let Claude (or your AI of choice) fill in the descriptions, tags, and quality checks.",{"type":45,"tag":1485,"props":5490,"children":5491},{},[5492],{"type":51,"value":1489},{"title":7,"searchDepth":357,"depth":357,"links":5494},[5495,5496,5497,5504,5505],{"id":48,"depth":357,"text":52},{"id":98,"depth":357,"text":101},{"id":169,"depth":357,"text":172,"children":5498},[5499,5500,5501,5502,5503],{"id":4538,"depth":366,"text":4541},{"id":4633,"depth":366,"text":4636},{"id":4901,"depth":366,"text":4904},{"id":5155,"depth":366,"text":5158},{"id":5298,"depth":366,"text":5301},{"id":5360,"depth":357,"text":5363},{"id":1461,"depth":357,"text":1464},"content:tutorials:dbt-bruin-analyst:import-schemas.md","tutorials/dbt-bruin-analyst/import-schemas.md","tutorials/dbt-bruin-analyst/import-schemas",{"_path":5510,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":5511,"description":5512,"date":10,"readingTime":392,"category":12,"tags":5513,"difficulty":20,"module":5,"step":375,"journeys":5515,"learnMore":5516,"stepGif":36,"author":5526,"body":5527,"_type":746,"_id":6872,"_source":1506,"_file":6873,"_stem":6874,"_extension":1509},"/tutorials/dbt-bruin-analyst/enhance-and-validate","AI-Enhance and Validate the Context","Use bruin ai enhance to fill every asset with descriptions, tags, and quality checks — then bruin validate to make sure nothing got corrupted along the way.",[14,5514,16],"Bruin AI",[24,25],[5517,5520,5523],{"label":5518,"url":5519},"bruin ai enhance (docs)","https://getbruin.com/docs/bruin/commands/ai-enhance.html",{"label":5521,"url":5522},"Quality checks reference","https://getbruin.com/docs/bruin/quality/overview.html",{"label":5524,"url":5525},"bruin validate (docs)","https://getbruin.com/docs/bruin/commands/validate.html",{"name":38,"role":39,"image":40},{"type":42,"children":5528,"toc":6861},[5529,5533,5566,5570,5606,5625,5629,5635,5640,5673,5678,5770,5804,5825,5858,5900,5906,5911,5931,5936,6343,6348,6383,6389,6418,6422,6430,6435,6441,6473,6795,6807,6834,6838,6857],{"type":45,"tag":46,"props":5530,"children":5531},{"id":48},[5532],{"type":51,"value":52},{"type":45,"tag":54,"props":5534,"children":5535},{},[5536,5555],{"type":45,"tag":58,"props":5537,"children":5538},{},[5539,5540,5546,5548,5553],{"type":51,"value":4463},{"type":45,"tag":69,"props":5541,"children":5543},{"className":5542},[],[5544],{"type":51,"value":5545},"bruin ai enhance",{"type":51,"value":5547}," over ",{"type":45,"tag":69,"props":5549,"children":5551},{"className":5550},[],[5552],{"type":51,"value":82},{"type":51,"value":5554}," so every asset gets a description, semantic tags, per-column docs, and quality checks",{"type":45,"tag":58,"props":5556,"children":5557},{},[5558,5559,5564],{"type":51,"value":4463},{"type":45,"tag":69,"props":5560,"children":5562},{"className":5561},[],[5563],{"type":51,"value":1303},{"type":51,"value":5565}," to confirm none of the YAMLs ended up malformed",{"type":45,"tag":46,"props":5567,"children":5568},{"id":98},[5569],{"type":51,"value":101},{"type":45,"tag":103,"props":5571,"children":5572},{},[5573,5575,5580,5582,5588,5590,5596,5598,5604],{"type":51,"value":5574},"Without descriptions, an AI agent can read your schema but doesn't know what it ",{"type":45,"tag":143,"props":5576,"children":5577},{},[5578],{"type":51,"value":5579},"means",{"type":51,"value":5581},". It sees ",{"type":45,"tag":69,"props":5583,"children":5585},{"className":5584},[],[5586],{"type":51,"value":5587},"gmv",{"type":51,"value":5589}," and guesses; it sees ",{"type":45,"tag":69,"props":5591,"children":5593},{"className":5592},[],[5594],{"type":51,"value":5595},"status = 3",{"type":51,"value":5597}," and queries blindly; it sees a ",{"type":45,"tag":69,"props":5599,"children":5601},{"className":5600},[],[5602],{"type":51,"value":5603},"created_at",{"type":51,"value":5605}," column and assumes UTC. Enhancement is what turns the structural skeleton from the previous step into something an agent can actually reason about.",{"type":45,"tag":103,"props":5607,"children":5608},{},[5609,5611,5616,5618,5623],{"type":51,"value":5610},"Validation matters because ",{"type":45,"tag":69,"props":5612,"children":5614},{"className":5613},[],[5615],{"type":51,"value":1311},{"type":51,"value":5617}," writes to YAML files at scale, and rare edge cases can produce malformed files. A 30-second ",{"type":45,"tag":69,"props":5619,"children":5621},{"className":5620},[],[5622],{"type":51,"value":1303},{"type":51,"value":5624}," is cheap insurance that catches them immediately, before they confuse an agent at query time.",{"type":45,"tag":46,"props":5626,"children":5627},{"id":169},[5628],{"type":51,"value":172},{"type":45,"tag":174,"props":5630,"children":5632},{"id":5631},"_1-run-the-ai-enhancement",[5633],{"type":51,"value":5634},"1. Run the AI enhancement",{"type":45,"tag":103,"props":5636,"children":5637},{},[5638],{"type":51,"value":5639},"From the dbt project root:",{"type":45,"tag":205,"props":5641,"children":5643},{"className":207,"code":5642,"language":209,"meta":7,"style":7},"bruin ai enhance --claude context/assets\n",[5644],{"type":45,"tag":69,"props":5645,"children":5646},{"__ignoreMap":7},[5647],{"type":45,"tag":215,"props":5648,"children":5649},{"class":217,"line":218},[5650,5654,5659,5664,5669],{"type":45,"tag":215,"props":5651,"children":5652},{"style":222},[5653],{"type":51,"value":277},{"type":45,"tag":215,"props":5655,"children":5656},{"style":228},[5657],{"type":51,"value":5658}," ai",{"type":45,"tag":215,"props":5660,"children":5661},{"style":228},[5662],{"type":51,"value":5663}," enhance",{"type":45,"tag":215,"props":5665,"children":5666},{"style":244},[5667],{"type":51,"value":5668}," --claude",{"type":45,"tag":215,"props":5670,"children":5671},{"style":228},[5672],{"type":51,"value":3379},{"type":45,"tag":103,"props":5674,"children":5675},{},[5676],{"type":51,"value":5677},"For each asset, Bruin sends the column list + a sample of the data to Claude and fills in:",{"type":45,"tag":117,"props":5679,"children":5680},{},[5681,5693,5725,5737],{"type":45,"tag":58,"props":5682,"children":5683},{},[5684,5686,5691],{"type":51,"value":5685},"A multi-paragraph ",{"type":45,"tag":109,"props":5687,"children":5688},{},[5689],{"type":51,"value":5690},"description",{"type":51,"value":5692}," covering purpose, grain, lineage, and typical use",{"type":45,"tag":58,"props":5694,"children":5695},{},[5696,5698,5703,5705,5711,5712,5718,5719],{"type":51,"value":5697},"Semantic ",{"type":45,"tag":109,"props":5699,"children":5700},{},[5701],{"type":51,"value":5702},"tags",{"type":51,"value":5704}," like ",{"type":45,"tag":69,"props":5706,"children":5708},{"className":5707},[],[5709],{"type":51,"value":5710},"domain:retail",{"type":51,"value":3166},{"type":45,"tag":69,"props":5713,"children":5715},{"className":5714},[],[5716],{"type":51,"value":5717},"layer:staging",{"type":51,"value":3166},{"type":45,"tag":69,"props":5720,"children":5722},{"className":5721},[],[5723],{"type":51,"value":5724},"sensitivity:pii",{"type":45,"tag":58,"props":5726,"children":5727},{},[5728,5730,5735],{"type":51,"value":5729},"Per-column ",{"type":45,"tag":109,"props":5731,"children":5732},{},[5733],{"type":51,"value":5734},"descriptions",{"type":51,"value":5736}," with business meaning",{"type":45,"tag":58,"props":5738,"children":5739},{},[5740,5745,5746,5752,5754,5760,5762,5768],{"type":45,"tag":109,"props":5741,"children":5742},{},[5743],{"type":51,"value":5744},"Quality checks",{"type":51,"value":4570},{"type":45,"tag":69,"props":5747,"children":5749},{"className":5748},[],[5750],{"type":51,"value":5751},"not_null",{"type":51,"value":5753}," on keys, ",{"type":45,"tag":69,"props":5755,"children":5757},{"className":5756},[],[5758],{"type":51,"value":5759},"unique",{"type":51,"value":5761}," on identifiers, ",{"type":45,"tag":69,"props":5763,"children":5765},{"className":5764},[],[5766],{"type":51,"value":5767},"accepted_values",{"type":51,"value":5769}," on enums",{"type":45,"tag":103,"props":5771,"children":5772},{},[5773,5775,5781,5782,5788,5789,5795,5797,5803],{"type":51,"value":5774},"The command auto-detects which AI CLI you have installed. If you have several, pass an explicit flag — ",{"type":45,"tag":69,"props":5776,"children":5778},{"className":5777},[],[5779],{"type":51,"value":5780},"--claude",{"type":51,"value":3166},{"type":45,"tag":69,"props":5783,"children":5785},{"className":5784},[],[5786],{"type":51,"value":5787},"--opencode",{"type":51,"value":3166},{"type":45,"tag":69,"props":5790,"children":5792},{"className":5791},[],[5793],{"type":51,"value":5794},"--codex",{"type":51,"value":5796},", or ",{"type":45,"tag":69,"props":5798,"children":5800},{"className":5799},[],[5801],{"type":51,"value":5802},"--cursor",{"type":51,"value":451},{"type":45,"tag":1152,"props":5805,"children":5806},{},[5807],{"type":45,"tag":103,"props":5808,"children":5809},{},[5810,5815,5817,5823],{"type":45,"tag":109,"props":5811,"children":5812},{},[5813],{"type":51,"value":5814},"Time estimate.",{"type":51,"value":5816}," Each asset costs minutes of Claude time. For ~40 assets (the contoso reference), expect 30–60 minutes wall-clock. Bruin parallelizes up to 5 by default — increase with ",{"type":45,"tag":69,"props":5818,"children":5820},{"className":5819},[],[5821],{"type":51,"value":5822},"--concurrency 10",{"type":51,"value":5824}," if you want it faster and your AI quota tolerates it.",{"type":45,"tag":1152,"props":5826,"children":5827},{},[5828],{"type":45,"tag":103,"props":5829,"children":5830},{},[5831,5848,5850,5856],{"type":45,"tag":109,"props":5832,"children":5833},{},[5834,5835,5840,5842,5847],{"type":51,"value":4386},{"type":45,"tag":69,"props":5836,"children":5838},{"className":5837},[],[5839],{"type":51,"value":1311},{"type":51,"value":5841}," doesn't always honor ",{"type":45,"tag":69,"props":5843,"children":5845},{"className":5844},[],[5846],{"type":51,"value":1260},{"type":51,"value":451},{"type":51,"value":5849}," It can fall back to your global ",{"type":45,"tag":69,"props":5851,"children":5853},{"className":5852},[],[5854],{"type":51,"value":5855},"~/.bruin.yml",{"type":51,"value":5857}," for connection lookup, and if that has a broken connection you'll see \"fill columns failed\" warnings. The warnings are cosmetic — column types were already filled by the import step. The enhancement still writes correctly.",{"type":45,"tag":1152,"props":5859,"children":5860},{},[5861],{"type":45,"tag":103,"props":5862,"children":5863},{},[5864,5869,5871,5876,5878,5884,5886,5891,5893,5899],{"type":45,"tag":109,"props":5865,"children":5866},{},[5867],{"type":51,"value":5868},"Gotcha — rare YAML corruption.",{"type":51,"value":5870}," On a small fraction of assets, ",{"type":45,"tag":69,"props":5872,"children":5874},{"className":5873},[],[5875],{"type":51,"value":1311},{"type":51,"value":5877}," has been known to mangle the ",{"type":45,"tag":69,"props":5879,"children":5881},{"className":5880},[],[5882],{"type":51,"value":5883},"columns:",{"type":51,"value":5885}," block. Always run ",{"type":45,"tag":69,"props":5887,"children":5889},{"className":5888},[],[5890],{"type":51,"value":1303},{"type":51,"value":5892}," afterward (next step). If a single asset breaks, regenerate just that file: ",{"type":45,"tag":69,"props":5894,"children":5896},{"className":5895},[],[5897],{"type":51,"value":5898},"bruin ai enhance --claude context/assets/\u003Cschema>/\u003Ctable>.asset.yml",{"type":51,"value":451},{"type":45,"tag":174,"props":5901,"children":5903},{"id":5902},"_2-spot-check-a-single-asset",[5904],{"type":51,"value":5905},"2. Spot-check a single asset",{"type":45,"tag":103,"props":5907,"children":5908},{},[5909],{"type":51,"value":5910},"Open one of the report assets — these benefit most from enrichment because the column names alone don't tell the full story:",{"type":45,"tag":205,"props":5912,"children":5914},{"className":207,"code":5913,"language":209,"meta":7,"style":7},"cat context/assets/contoso_dbt_reports/rpt_revenue_by_segment.asset.yml\n",[5915],{"type":45,"tag":69,"props":5916,"children":5917},{"__ignoreMap":7},[5918],{"type":45,"tag":215,"props":5919,"children":5920},{"class":217,"line":218},[5921,5926],{"type":45,"tag":215,"props":5922,"children":5923},{"style":222},[5924],{"type":51,"value":5925},"cat",{"type":45,"tag":215,"props":5927,"children":5928},{"style":228},[5929],{"type":51,"value":5930}," context/assets/contoso_dbt_reports/rpt_revenue_by_segment.asset.yml\n",{"type":45,"tag":103,"props":5932,"children":5933},{},[5934],{"type":51,"value":5935},"You should now see something like:",{"type":45,"tag":205,"props":5937,"children":5939},{"className":3430,"code":5938,"language":3432,"meta":7,"style":7},"name: contoso_dbt_reports.rpt_revenue_by_segment\ntype: bq.source\ndescription: |\n  Yearly revenue rolled up by product segment and category. Built from the\n  staging order-line table joined with the product dimension. One row per\n  (segment_id, category_name, year). Used by retail merchandising and\n  finance for category-level reporting.\ntags:\n  - domain:retail\n  - layer:reports\n  - grain:segment_category_year\ncolumns:\n  - name: segment_id\n    type: STRING\n    description: \"Identifier for the product segment (joins to dim_segment).\"\n    checks:\n      - name: not_null\n  - name: category_name\n    type: STRING\n    description: \"Human-readable category label, e.g. 'Bikes', 'Components'.\"\n    checks:\n      - name: not_null\n  - name: year\n    type: INT64\n    description: \"Calendar year of the order date, in UTC.\"\n  - name: revenue_usd\n    type: NUMERIC\n    description: \"Sum of order_line.gross_amount in USD, post-discount.\"\n",[5940],{"type":45,"tag":69,"props":5941,"children":5942},{"__ignoreMap":7},[5943,5958,5973,5989,5997,6005,6013,6021,6032,6044,6056,6068,6079,6098,6113,6130,6142,6163,6182,6197,6213,6224,6243,6262,6277,6293,6312,6327],{"type":45,"tag":215,"props":5944,"children":5945},{"class":217,"line":218},[5946,5950,5954],{"type":45,"tag":215,"props":5947,"children":5948},{"style":3451},[5949],{"type":51,"value":3526},{"type":45,"tag":215,"props":5951,"children":5952},{"style":3108},[5953],{"type":51,"value":3459},{"type":45,"tag":215,"props":5955,"children":5956},{"style":228},[5957],{"type":51,"value":4973},{"type":45,"tag":215,"props":5959,"children":5960},{"class":217,"line":357},[5961,5965,5969],{"type":45,"tag":215,"props":5962,"children":5963},{"style":3451},[5964],{"type":51,"value":4981},{"type":45,"tag":215,"props":5966,"children":5967},{"style":3108},[5968],{"type":51,"value":3459},{"type":45,"tag":215,"props":5970,"children":5971},{"style":228},[5972],{"type":51,"value":4990},{"type":45,"tag":215,"props":5974,"children":5975},{"class":217,"line":366},[5976,5980,5984],{"type":45,"tag":215,"props":5977,"children":5978},{"style":3451},[5979],{"type":51,"value":5690},{"type":45,"tag":215,"props":5981,"children":5982},{"style":3108},[5983],{"type":51,"value":3459},{"type":45,"tag":215,"props":5985,"children":5986},{"style":3102},[5987],{"type":51,"value":5988},"|\n",{"type":45,"tag":215,"props":5990,"children":5991},{"class":217,"line":375},[5992],{"type":45,"tag":215,"props":5993,"children":5994},{"style":228},[5995],{"type":51,"value":5996},"  Yearly revenue rolled up by product segment and category. Built from the\n",{"type":45,"tag":215,"props":5998,"children":5999},{"class":217,"line":21},[6000],{"type":45,"tag":215,"props":6001,"children":6002},{"style":228},[6003],{"type":51,"value":6004},"  staging order-line table joined with the product dimension. One row per\n",{"type":45,"tag":215,"props":6006,"children":6007},{"class":217,"line":392},[6008],{"type":45,"tag":215,"props":6009,"children":6010},{"style":228},[6011],{"type":51,"value":6012},"  (segment_id, category_name, year). Used by retail merchandising and\n",{"type":45,"tag":215,"props":6014,"children":6015},{"class":217,"line":11},[6016],{"type":45,"tag":215,"props":6017,"children":6018},{"style":228},[6019],{"type":51,"value":6020},"  finance for category-level reporting.\n",{"type":45,"tag":215,"props":6022,"children":6023},{"class":217,"line":409},[6024,6028],{"type":45,"tag":215,"props":6025,"children":6026},{"style":3451},[6027],{"type":51,"value":5702},{"type":45,"tag":215,"props":6029,"children":6030},{"style":3108},[6031],{"type":51,"value":3477},{"type":45,"tag":215,"props":6033,"children":6034},{"class":217,"line":674},[6035,6039],{"type":45,"tag":215,"props":6036,"children":6037},{"style":3108},[6038],{"type":51,"value":5010},{"type":45,"tag":215,"props":6040,"children":6041},{"style":228},[6042],{"type":51,"value":6043},"domain:retail\n",{"type":45,"tag":215,"props":6045,"children":6046},{"class":217,"line":824},[6047,6051],{"type":45,"tag":215,"props":6048,"children":6049},{"style":3108},[6050],{"type":51,"value":5010},{"type":45,"tag":215,"props":6052,"children":6053},{"style":228},[6054],{"type":51,"value":6055},"layer:reports\n",{"type":45,"tag":215,"props":6057,"children":6058},{"class":217,"line":833},[6059,6063],{"type":45,"tag":215,"props":6060,"children":6061},{"style":3108},[6062],{"type":51,"value":5010},{"type":45,"tag":215,"props":6064,"children":6065},{"style":228},[6066],{"type":51,"value":6067},"grain:segment_category_year\n",{"type":45,"tag":215,"props":6069,"children":6070},{"class":217,"line":842},[6071,6075],{"type":45,"tag":215,"props":6072,"children":6073},{"style":3451},[6074],{"type":51,"value":4998},{"type":45,"tag":215,"props":6076,"children":6077},{"style":3108},[6078],{"type":51,"value":3477},{"type":45,"tag":215,"props":6080,"children":6081},{"class":217,"line":851},[6082,6086,6090,6094],{"type":45,"tag":215,"props":6083,"children":6084},{"style":3108},[6085],{"type":51,"value":5010},{"type":45,"tag":215,"props":6087,"children":6088},{"style":3451},[6089],{"type":51,"value":3526},{"type":45,"tag":215,"props":6091,"children":6092},{"style":3108},[6093],{"type":51,"value":3459},{"type":45,"tag":215,"props":6095,"children":6096},{"style":228},[6097],{"type":51,"value":5023},{"type":45,"tag":215,"props":6099,"children":6100},{"class":217,"line":860},[6101,6105,6109],{"type":45,"tag":215,"props":6102,"children":6103},{"style":3451},[6104],{"type":51,"value":5031},{"type":45,"tag":215,"props":6106,"children":6107},{"style":3108},[6108],{"type":51,"value":3459},{"type":45,"tag":215,"props":6110,"children":6111},{"style":228},[6112],{"type":51,"value":5040},{"type":45,"tag":215,"props":6114,"children":6115},{"class":217,"line":869},[6116,6121,6125],{"type":45,"tag":215,"props":6117,"children":6118},{"style":3451},[6119],{"type":51,"value":6120},"    description",{"type":45,"tag":215,"props":6122,"children":6123},{"style":3108},[6124],{"type":51,"value":3459},{"type":45,"tag":215,"props":6126,"children":6127},{"style":228},[6128],{"type":51,"value":6129},"\"Identifier for the product segment (joins to dim_segment).\"\n",{"type":45,"tag":215,"props":6131,"children":6132},{"class":217,"line":878},[6133,6138],{"type":45,"tag":215,"props":6134,"children":6135},{"style":3451},[6136],{"type":51,"value":6137},"    checks",{"type":45,"tag":215,"props":6139,"children":6140},{"style":3108},[6141],{"type":51,"value":3477},{"type":45,"tag":215,"props":6143,"children":6144},{"class":217,"line":887},[6145,6150,6154,6158],{"type":45,"tag":215,"props":6146,"children":6147},{"style":3108},[6148],{"type":51,"value":6149},"      - ",{"type":45,"tag":215,"props":6151,"children":6152},{"style":3451},[6153],{"type":51,"value":3526},{"type":45,"tag":215,"props":6155,"children":6156},{"style":3108},[6157],{"type":51,"value":3459},{"type":45,"tag":215,"props":6159,"children":6160},{"style":228},[6161],{"type":51,"value":6162},"not_null\n",{"type":45,"tag":215,"props":6164,"children":6165},{"class":217,"line":896},[6166,6170,6174,6178],{"type":45,"tag":215,"props":6167,"children":6168},{"style":3108},[6169],{"type":51,"value":5010},{"type":45,"tag":215,"props":6171,"children":6172},{"style":3451},[6173],{"type":51,"value":3526},{"type":45,"tag":215,"props":6175,"children":6176},{"style":3108},[6177],{"type":51,"value":3459},{"type":45,"tag":215,"props":6179,"children":6180},{"style":228},[6181],{"type":51,"value":5060},{"type":45,"tag":215,"props":6183,"children":6184},{"class":217,"line":904},[6185,6189,6193],{"type":45,"tag":215,"props":6186,"children":6187},{"style":3451},[6188],{"type":51,"value":5031},{"type":45,"tag":215,"props":6190,"children":6191},{"style":3108},[6192],{"type":51,"value":3459},{"type":45,"tag":215,"props":6194,"children":6195},{"style":228},[6196],{"type":51,"value":5040},{"type":45,"tag":215,"props":6198,"children":6199},{"class":217,"line":913},[6200,6204,6208],{"type":45,"tag":215,"props":6201,"children":6202},{"style":3451},[6203],{"type":51,"value":6120},{"type":45,"tag":215,"props":6205,"children":6206},{"style":3108},[6207],{"type":51,"value":3459},{"type":45,"tag":215,"props":6209,"children":6210},{"style":228},[6211],{"type":51,"value":6212},"\"Human-readable category label, e.g. 'Bikes', 'Components'.\"\n",{"type":45,"tag":215,"props":6214,"children":6215},{"class":217,"line":921},[6216,6220],{"type":45,"tag":215,"props":6217,"children":6218},{"style":3451},[6219],{"type":51,"value":6137},{"type":45,"tag":215,"props":6221,"children":6222},{"style":3108},[6223],{"type":51,"value":3477},{"type":45,"tag":215,"props":6225,"children":6226},{"class":217,"line":930},[6227,6231,6235,6239],{"type":45,"tag":215,"props":6228,"children":6229},{"style":3108},[6230],{"type":51,"value":6149},{"type":45,"tag":215,"props":6232,"children":6233},{"style":3451},[6234],{"type":51,"value":3526},{"type":45,"tag":215,"props":6236,"children":6237},{"style":3108},[6238],{"type":51,"value":3459},{"type":45,"tag":215,"props":6240,"children":6241},{"style":228},[6242],{"type":51,"value":6162},{"type":45,"tag":215,"props":6244,"children":6245},{"class":217,"line":939},[6246,6250,6254,6258],{"type":45,"tag":215,"props":6247,"children":6248},{"style":3108},[6249],{"type":51,"value":5010},{"type":45,"tag":215,"props":6251,"children":6252},{"style":3451},[6253],{"type":51,"value":3526},{"type":45,"tag":215,"props":6255,"children":6256},{"style":3108},[6257],{"type":51,"value":3459},{"type":45,"tag":215,"props":6259,"children":6260},{"style":228},[6261],{"type":51,"value":5095},{"type":45,"tag":215,"props":6263,"children":6264},{"class":217,"line":948},[6265,6269,6273],{"type":45,"tag":215,"props":6266,"children":6267},{"style":3451},[6268],{"type":51,"value":5031},{"type":45,"tag":215,"props":6270,"children":6271},{"style":3108},[6272],{"type":51,"value":3459},{"type":45,"tag":215,"props":6274,"children":6275},{"style":228},[6276],{"type":51,"value":5111},{"type":45,"tag":215,"props":6278,"children":6279},{"class":217,"line":957},[6280,6284,6288],{"type":45,"tag":215,"props":6281,"children":6282},{"style":3451},[6283],{"type":51,"value":6120},{"type":45,"tag":215,"props":6285,"children":6286},{"style":3108},[6287],{"type":51,"value":3459},{"type":45,"tag":215,"props":6289,"children":6290},{"style":228},[6291],{"type":51,"value":6292},"\"Calendar year of the order date, in UTC.\"\n",{"type":45,"tag":215,"props":6294,"children":6295},{"class":217,"line":966},[6296,6300,6304,6308],{"type":45,"tag":215,"props":6297,"children":6298},{"style":3108},[6299],{"type":51,"value":5010},{"type":45,"tag":215,"props":6301,"children":6302},{"style":3451},[6303],{"type":51,"value":3526},{"type":45,"tag":215,"props":6305,"children":6306},{"style":3108},[6307],{"type":51,"value":3459},{"type":45,"tag":215,"props":6309,"children":6310},{"style":228},[6311],{"type":51,"value":5131},{"type":45,"tag":215,"props":6313,"children":6314},{"class":217,"line":974},[6315,6319,6323],{"type":45,"tag":215,"props":6316,"children":6317},{"style":3451},[6318],{"type":51,"value":5031},{"type":45,"tag":215,"props":6320,"children":6321},{"style":3108},[6322],{"type":51,"value":3459},{"type":45,"tag":215,"props":6324,"children":6325},{"style":228},[6326],{"type":51,"value":5147},{"type":45,"tag":215,"props":6328,"children":6329},{"class":217,"line":983},[6330,6334,6338],{"type":45,"tag":215,"props":6331,"children":6332},{"style":3451},[6333],{"type":51,"value":6120},{"type":45,"tag":215,"props":6335,"children":6336},{"style":3108},[6337],{"type":51,"value":3459},{"type":45,"tag":215,"props":6339,"children":6340},{"style":228},[6341],{"type":51,"value":6342},"\"Sum of order_line.gross_amount in USD, post-discount.\"\n",{"type":45,"tag":103,"props":6344,"children":6345},{},[6346],{"type":51,"value":6347},"This is what the agent will read before it queries. The richer this gets, the better its SQL gets.",{"type":45,"tag":1152,"props":6349,"children":6350},{},[6351],{"type":45,"tag":103,"props":6352,"children":6353},{},[6354,6366,6368,6373,6375,6381],{"type":45,"tag":109,"props":6355,"children":6356},{},[6357,6359,6364],{"type":51,"value":6358},"Watch for incorrect ",{"type":45,"tag":69,"props":6360,"children":6362},{"className":6361},[],[6363],{"type":51,"value":5759},{"type":51,"value":6365}," checks.",{"type":51,"value":6367}," AI enhancement sometimes adds ",{"type":45,"tag":69,"props":6369,"children":6371},{"className":6370},[],[6372],{"type":51,"value":5759},{"type":51,"value":6374}," to columns that look like keys but aren't unique per row (e.g., ",{"type":45,"tag":69,"props":6376,"children":6378},{"className":6377},[],[6379],{"type":51,"value":6380},"segment_id",{"type":51,"value":6382}," in a yearly fact table appears once per year, not once total). Skim the generated checks and remove any that don't match how the data actually works.",{"type":45,"tag":174,"props":6384,"children":6386},{"id":6385},"_3-validate-the-whole-pipeline",[6387],{"type":51,"value":6388},"3. Validate the whole pipeline",{"type":45,"tag":205,"props":6390,"children":6391},{"className":207,"code":5309,"language":209,"meta":7,"style":7},[6392],{"type":45,"tag":69,"props":6393,"children":6394},{"__ignoreMap":7},[6395],{"type":45,"tag":215,"props":6396,"children":6397},{"class":217,"line":218},[6398,6402,6406,6410,6414],{"type":45,"tag":215,"props":6399,"children":6400},{"style":222},[6401],{"type":51,"value":277},{"type":45,"tag":215,"props":6403,"children":6404},{"style":228},[6405],{"type":51,"value":5325},{"type":45,"tag":215,"props":6407,"children":6408},{"style":244},[6409],{"type":51,"value":4340},{"type":45,"tag":215,"props":6411,"children":6412},{"style":228},[6413],{"type":51,"value":590},{"type":45,"tag":215,"props":6415,"children":6416},{"style":228},[6417],{"type":51,"value":5338},{"type":45,"tag":103,"props":6419,"children":6420},{},[6421],{"type":51,"value":4354},{"type":45,"tag":205,"props":6423,"children":6425},{"className":6424,"code":5347,"language":51},[2800],[6426],{"type":45,"tag":69,"props":6427,"children":6428},{"__ignoreMap":7},[6429],{"type":51,"value":5347},{"type":45,"tag":103,"props":6431,"children":6432},{},[6433],{"type":51,"value":6434},"If anything fails, the message will name the file and the line. Open it, fix or regenerate that single asset, and re-run validate until it's green.",{"type":45,"tag":174,"props":6436,"children":6438},{"id":6437},"_4-wrap-it-in-a-regenerator-script-optional",[6439],{"type":51,"value":6440},"4. Wrap it in a regenerator script (optional)",{"type":45,"tag":103,"props":6442,"children":6443},{},[6444,6446,6455,6457,6463,6465,6471],{"type":51,"value":6445},"The whole sequence — config, import, filter, enhance, validate — is idempotent and worth wrapping in a script so you can refresh the context layer whenever your dbt models change. The reference project has ",{"type":45,"tag":2744,"props":6447,"children":6449},{"href":2695,"rel":6448},[2747],[6450],{"type":45,"tag":69,"props":6451,"children":6453},{"className":6452},[],[6454],{"type":51,"value":1328},{"type":51,"value":6456}," with ",{"type":45,"tag":69,"props":6458,"children":6460},{"className":6459},[],[6461],{"type":51,"value":6462},"--skip-import",{"type":51,"value":6464}," (re-enhance only) and ",{"type":45,"tag":69,"props":6466,"children":6468},{"className":6467},[],[6469],{"type":51,"value":6470},"--skip-enhance",{"type":51,"value":6472}," (fast structure refresh) flags. A minimal version:",{"type":45,"tag":205,"props":6474,"children":6476},{"className":207,"code":6475,"language":209,"meta":7,"style":7},"#!/usr/bin/env bash\nset -euo pipefail\n\nCONFIG=\"context/.bruin.yml\"\nPIPELINE=\"context\"\n\nbruin import database \\\n  --config-file \"$CONFIG\" \\\n  --connection contoso_dbt_bq \\\n  --schemas contoso_dbt_raw \\\n  --schemas contoso_dbt_staging \\\n  --schemas contoso_dbt_reports \\\n  \"$PIPELINE\"\n\nfind \"$PIPELINE/assets\" -name \"_dlt_*.asset.yml\" -delete\n\nbruin ai enhance --claude \"$PIPELINE/assets\"\nbruin validate --config-file \"$CONFIG\" \"$PIPELINE\"\n",[6477],{"type":45,"tag":69,"props":6478,"children":6479},{"__ignoreMap":7},[6480,6488,6506,6513,6531,6548,6555,6574,6600,6615,6630,6645,6660,6678,6685,6717,6724,6756],{"type":45,"tag":215,"props":6481,"children":6482},{"class":217,"line":218},[6483],{"type":45,"tag":215,"props":6484,"children":6485},{"style":3442},[6486],{"type":51,"value":6487},"#!/usr/bin/env bash\n",{"type":45,"tag":215,"props":6489,"children":6490},{"class":217,"line":357},[6491,6496,6501],{"type":45,"tag":215,"props":6492,"children":6493},{"style":244},[6494],{"type":51,"value":6495},"set",{"type":45,"tag":215,"props":6497,"children":6498},{"style":244},[6499],{"type":51,"value":6500}," -euo",{"type":45,"tag":215,"props":6502,"children":6503},{"style":228},[6504],{"type":51,"value":6505}," pipefail\n",{"type":45,"tag":215,"props":6507,"children":6508},{"class":217,"line":366},[6509],{"type":45,"tag":215,"props":6510,"children":6511},{"emptyLinePlaceholder":764},[6512],{"type":51,"value":767},{"type":45,"tag":215,"props":6514,"children":6515},{"class":217,"line":375},[6516,6521,6526],{"type":45,"tag":215,"props":6517,"children":6518},{"style":3108},[6519],{"type":51,"value":6520},"CONFIG",{"type":45,"tag":215,"props":6522,"children":6523},{"style":3102},[6524],{"type":51,"value":6525},"=",{"type":45,"tag":215,"props":6527,"children":6528},{"style":228},[6529],{"type":51,"value":6530},"\"context/.bruin.yml\"\n",{"type":45,"tag":215,"props":6532,"children":6533},{"class":217,"line":21},[6534,6539,6543],{"type":45,"tag":215,"props":6535,"children":6536},{"style":3108},[6537],{"type":51,"value":6538},"PIPELINE",{"type":45,"tag":215,"props":6540,"children":6541},{"style":3102},[6542],{"type":51,"value":6525},{"type":45,"tag":215,"props":6544,"children":6545},{"style":228},[6546],{"type":51,"value":6547},"\"context\"\n",{"type":45,"tag":215,"props":6549,"children":6550},{"class":217,"line":392},[6551],{"type":45,"tag":215,"props":6552,"children":6553},{"emptyLinePlaceholder":764},[6554],{"type":51,"value":767},{"type":45,"tag":215,"props":6556,"children":6557},{"class":217,"line":11},[6558,6562,6566,6570],{"type":45,"tag":215,"props":6559,"children":6560},{"style":222},[6561],{"type":51,"value":277},{"type":45,"tag":215,"props":6563,"children":6564},{"style":228},[6565],{"type":51,"value":4675},{"type":45,"tag":215,"props":6567,"children":6568},{"style":228},[6569],{"type":51,"value":4680},{"type":45,"tag":215,"props":6571,"children":6572},{"style":244},[6573],{"type":51,"value":577},{"type":45,"tag":215,"props":6575,"children":6576},{"class":217,"line":409},[6577,6581,6586,6591,6596],{"type":45,"tag":215,"props":6578,"children":6579},{"style":244},[6580],{"type":51,"value":585},{"type":45,"tag":215,"props":6582,"children":6583},{"style":228},[6584],{"type":51,"value":6585}," \"",{"type":45,"tag":215,"props":6587,"children":6588},{"style":3108},[6589],{"type":51,"value":6590},"$CONFIG",{"type":45,"tag":215,"props":6592,"children":6593},{"style":228},[6594],{"type":51,"value":6595},"\"",{"type":45,"tag":215,"props":6597,"children":6598},{"style":244},[6599],{"type":51,"value":577},{"type":45,"tag":215,"props":6601,"children":6602},{"class":217,"line":674},[6603,6607,6611],{"type":45,"tag":215,"props":6604,"children":6605},{"style":244},[6606],{"type":51,"value":602},{"type":45,"tag":215,"props":6608,"children":6609},{"style":228},[6610],{"type":51,"value":607},{"type":45,"tag":215,"props":6612,"children":6613},{"style":244},[6614],{"type":51,"value":577},{"type":45,"tag":215,"props":6616,"children":6617},{"class":217,"line":824},[6618,6622,6626],{"type":45,"tag":215,"props":6619,"children":6620},{"style":244},[6621],{"type":51,"value":4722},{"type":45,"tag":215,"props":6623,"children":6624},{"style":228},[6625],{"type":51,"value":4727},{"type":45,"tag":215,"props":6627,"children":6628},{"style":244},[6629],{"type":51,"value":577},{"type":45,"tag":215,"props":6631,"children":6632},{"class":217,"line":833},[6633,6637,6641],{"type":45,"tag":215,"props":6634,"children":6635},{"style":244},[6636],{"type":51,"value":4722},{"type":45,"tag":215,"props":6638,"children":6639},{"style":228},[6640],{"type":51,"value":4743},{"type":45,"tag":215,"props":6642,"children":6643},{"style":244},[6644],{"type":51,"value":577},{"type":45,"tag":215,"props":6646,"children":6647},{"class":217,"line":842},[6648,6652,6656],{"type":45,"tag":215,"props":6649,"children":6650},{"style":244},[6651],{"type":51,"value":4722},{"type":45,"tag":215,"props":6653,"children":6654},{"style":228},[6655],{"type":51,"value":4759},{"type":45,"tag":215,"props":6657,"children":6658},{"style":244},[6659],{"type":51,"value":577},{"type":45,"tag":215,"props":6661,"children":6662},{"class":217,"line":851},[6663,6668,6673],{"type":45,"tag":215,"props":6664,"children":6665},{"style":228},[6666],{"type":51,"value":6667},"  \"",{"type":45,"tag":215,"props":6669,"children":6670},{"style":3108},[6671],{"type":51,"value":6672},"$PIPELINE",{"type":45,"tag":215,"props":6674,"children":6675},{"style":228},[6676],{"type":51,"value":6677},"\"\n",{"type":45,"tag":215,"props":6679,"children":6680},{"class":217,"line":860},[6681],{"type":45,"tag":215,"props":6682,"children":6683},{"emptyLinePlaceholder":764},[6684],{"type":51,"value":767},{"type":45,"tag":215,"props":6686,"children":6687},{"class":217,"line":869},[6688,6692,6696,6700,6705,6709,6713],{"type":45,"tag":215,"props":6689,"children":6690},{"style":222},[6691],{"type":51,"value":5192},{"type":45,"tag":215,"props":6693,"children":6694},{"style":228},[6695],{"type":51,"value":6585},{"type":45,"tag":215,"props":6697,"children":6698},{"style":3108},[6699],{"type":51,"value":6672},{"type":45,"tag":215,"props":6701,"children":6702},{"style":228},[6703],{"type":51,"value":6704},"/assets\"",{"type":45,"tag":215,"props":6706,"children":6707},{"style":244},[6708],{"type":51,"value":5202},{"type":45,"tag":215,"props":6710,"children":6711},{"style":228},[6712],{"type":51,"value":5207},{"type":45,"tag":215,"props":6714,"children":6715},{"style":244},[6716],{"type":51,"value":5212},{"type":45,"tag":215,"props":6718,"children":6719},{"class":217,"line":878},[6720],{"type":45,"tag":215,"props":6721,"children":6722},{"emptyLinePlaceholder":764},[6723],{"type":51,"value":767},{"type":45,"tag":215,"props":6725,"children":6726},{"class":217,"line":887},[6727,6731,6735,6739,6743,6747,6751],{"type":45,"tag":215,"props":6728,"children":6729},{"style":222},[6730],{"type":51,"value":277},{"type":45,"tag":215,"props":6732,"children":6733},{"style":228},[6734],{"type":51,"value":5658},{"type":45,"tag":215,"props":6736,"children":6737},{"style":228},[6738],{"type":51,"value":5663},{"type":45,"tag":215,"props":6740,"children":6741},{"style":244},[6742],{"type":51,"value":5668},{"type":45,"tag":215,"props":6744,"children":6745},{"style":228},[6746],{"type":51,"value":6585},{"type":45,"tag":215,"props":6748,"children":6749},{"style":3108},[6750],{"type":51,"value":6672},{"type":45,"tag":215,"props":6752,"children":6753},{"style":228},[6754],{"type":51,"value":6755},"/assets\"\n",{"type":45,"tag":215,"props":6757,"children":6758},{"class":217,"line":896},[6759,6763,6767,6771,6775,6779,6783,6787,6791],{"type":45,"tag":215,"props":6760,"children":6761},{"style":222},[6762],{"type":51,"value":277},{"type":45,"tag":215,"props":6764,"children":6765},{"style":228},[6766],{"type":51,"value":5325},{"type":45,"tag":215,"props":6768,"children":6769},{"style":244},[6770],{"type":51,"value":4340},{"type":45,"tag":215,"props":6772,"children":6773},{"style":228},[6774],{"type":51,"value":6585},{"type":45,"tag":215,"props":6776,"children":6777},{"style":3108},[6778],{"type":51,"value":6590},{"type":45,"tag":215,"props":6780,"children":6781},{"style":228},[6782],{"type":51,"value":6595},{"type":45,"tag":215,"props":6784,"children":6785},{"style":228},[6786],{"type":51,"value":6585},{"type":45,"tag":215,"props":6788,"children":6789},{"style":3108},[6790],{"type":51,"value":6672},{"type":45,"tag":215,"props":6792,"children":6793},{"style":228},[6794],{"type":51,"value":6677},{"type":45,"tag":103,"props":6796,"children":6797},{},[6798,6800,6805],{"type":51,"value":6799},"Save it as ",{"type":45,"tag":69,"props":6801,"children":6803},{"className":6802},[],[6804],{"type":51,"value":1328},{"type":51,"value":6806}," next to your dbt project. Run it after meaningful schema changes — column renames, new models, dropped tables — to keep the context layer in sync.",{"type":45,"tag":1152,"props":6808,"children":6809},{},[6810],{"type":45,"tag":103,"props":6811,"children":6812},{},[6813,6817,6819,6824,6826,6832],{"type":45,"tag":109,"props":6814,"children":6815},{},[6816],{"type":51,"value":1340},{"type":51,"value":6818}," They're regenerable artifacts. If a description is consistently wrong, fix it upstream — in the dbt model's ",{"type":45,"tag":69,"props":6820,"children":6822},{"className":6821},[],[6823],{"type":51,"value":1348},{"type":51,"value":6825}," or ",{"type":45,"tag":69,"props":6827,"children":6829},{"className":6828},[],[6830],{"type":51,"value":6831},"description: ",{"type":51,"value":6833}," block — and the next import + enhance will pick the change up.",{"type":45,"tag":46,"props":6835,"children":6836},{"id":1461},[6837],{"type":51,"value":1464},{"type":45,"tag":103,"props":6839,"children":6840},{},[6841,6843,6848,6850,6855],{"type":51,"value":6842},"Your ",{"type":45,"tag":69,"props":6844,"children":6846},{"className":6845},[],[6847],{"type":51,"value":82},{"type":51,"value":6849}," is now a 40-file knowledge base: every dbt-materialized table is documented with descriptions, tags, and checks that an AI agent can read before writing a single query. Combined with the warehouse connection from step 2, you have everything an agent needs ",{"type":45,"tag":143,"props":6851,"children":6852},{},[6853],{"type":51,"value":6854},"except",{"type":51,"value":6856}," the wiring that lets it actually call out to all of this. That's the next step.",{"type":45,"tag":1485,"props":6858,"children":6859},{},[6860],{"type":51,"value":1489},{"title":7,"searchDepth":357,"depth":357,"links":6862},[6863,6864,6865,6871],{"id":48,"depth":357,"text":52},{"id":98,"depth":357,"text":101},{"id":169,"depth":357,"text":172,"children":6866},[6867,6868,6869,6870],{"id":5631,"depth":366,"text":5634},{"id":5902,"depth":366,"text":5905},{"id":6385,"depth":366,"text":6388},{"id":6437,"depth":366,"text":6440},{"id":1461,"depth":357,"text":1464},"content:tutorials:dbt-bruin-analyst:enhance-and-validate.md","tutorials/dbt-bruin-analyst/enhance-and-validate.md","tutorials/dbt-bruin-analyst/enhance-and-validate",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"readingTime":11,"category":12,"tags":6876,"difficulty":20,"module":5,"step":21,"variants":6877,"journeys":6878,"learnMore":6879,"stepGif":36,"author":6883,"body":6884,"_type":746,"_id":1505,"_source":1506,"_file":1507,"_stem":1508,"_extension":1509},[14,15,16,17,18,19],[17,18,19],[24,25],[6880,6881,6882],{"label":28,"url":29},{"label":31,"url":32},{"label":34,"url":35},{"name":38,"role":39,"image":40},{"type":42,"children":6885,"toc":8036},[6886,6890,6922,6926,6935,6971,6975,6979,6983,6987,7255,7265,7274,7383,7393,7403,7430,7751,7755,7759,7772,7776,7812,7822,7826,7919,7923,7927,8002,8012,8016,8032],{"type":45,"tag":46,"props":6887,"children":6888},{"id":48},[6889],{"type":51,"value":52},{"type":45,"tag":54,"props":6891,"children":6892},{},[6893,6897,6918],{"type":45,"tag":58,"props":6894,"children":6895},{},[6896],{"type":51,"value":62},{"type":45,"tag":58,"props":6898,"children":6899},{},[6900,6901,6906,6907,6912,6913],{"type":51,"value":67},{"type":45,"tag":69,"props":6902,"children":6904},{"className":6903},[],[6905],{"type":51,"value":74},{"type":51,"value":76},{"type":45,"tag":69,"props":6908,"children":6910},{"className":6909},[],[6911],{"type":51,"value":82},{"type":51,"value":84},{"type":45,"tag":69,"props":6914,"children":6916},{"className":6915},[],[6917],{"type":51,"value":90},{"type":45,"tag":58,"props":6919,"children":6920},{},[6921],{"type":51,"value":95},{"type":45,"tag":46,"props":6923,"children":6924},{"id":98},[6925],{"type":51,"value":101},{"type":45,"tag":103,"props":6927,"children":6928},{},[6929,6930,6934],{"type":51,"value":107},{"type":45,"tag":109,"props":6931,"children":6932},{},[6933],{"type":51,"value":113},{"type":51,"value":115},{"type":45,"tag":117,"props":6936,"children":6937},{},[6938,6942,6952],{"type":45,"tag":58,"props":6939,"children":6940},{},[6941],{"type":51,"value":124},{"type":45,"tag":58,"props":6943,"children":6944},{},[6945,6946,6951],{"type":51,"value":129},{"type":45,"tag":69,"props":6947,"children":6949},{"className":6948},[],[6950],{"type":51,"value":90},{"type":51,"value":136},{"type":45,"tag":58,"props":6953,"children":6954},{},[6955,6956,6960,6961,6965,6966],{"type":51,"value":141},{"type":45,"tag":143,"props":6957,"children":6958},{},[6959],{"type":51,"value":147},{"type":51,"value":149},{"type":45,"tag":143,"props":6962,"children":6963},{},[6964],{"type":51,"value":154},{"type":51,"value":156},{"type":45,"tag":69,"props":6967,"children":6969},{"className":6968},[],[6970],{"type":51,"value":74},{"type":45,"tag":103,"props":6972,"children":6973},{},[6974],{"type":51,"value":166},{"type":45,"tag":46,"props":6976,"children":6977},{"id":169},[6978],{"type":51,"value":172},{"type":45,"tag":174,"props":6980,"children":6981},{"id":176},[6982],{"type":51,"value":179},{"type":45,"tag":103,"props":6984,"children":6985},{},[6986],{"type":51,"value":184},{"type":45,"tag":186,"props":6988,"children":6989},{":variants":188},[6990,7063,7192],{"type":45,"tag":191,"props":6991,"children":6992},{"v-slot:claude-code":7},[6993,6997,7001,7038,7042],{"type":45,"tag":174,"props":6994,"children":6995},{"id":196},[6996],{"type":51,"value":17},{"type":45,"tag":103,"props":6998,"children":6999},{},[7000],{"type":51,"value":203},{"type":45,"tag":205,"props":7002,"children":7003},{"className":207,"code":208,"language":209,"meta":7,"style":7},[7004],{"type":45,"tag":69,"props":7005,"children":7006},{"__ignoreMap":7},[7007],{"type":45,"tag":215,"props":7008,"children":7009},{"class":217,"line":218},[7010,7014,7018,7022,7026,7030,7034],{"type":45,"tag":215,"props":7011,"children":7012},{"style":222},[7013],{"type":51,"value":225},{"type":45,"tag":215,"props":7015,"children":7016},{"style":228},[7017],{"type":51,"value":231},{"type":45,"tag":215,"props":7019,"children":7020},{"style":228},[7021],{"type":51,"value":236},{"type":45,"tag":215,"props":7023,"children":7024},{"style":228},[7025],{"type":51,"value":241},{"type":45,"tag":215,"props":7027,"children":7028},{"style":244},[7029],{"type":51,"value":247},{"type":45,"tag":215,"props":7031,"children":7032},{"style":228},[7033],{"type":51,"value":241},{"type":45,"tag":215,"props":7035,"children":7036},{"style":228},[7037],{"type":51,"value":256},{"type":45,"tag":103,"props":7039,"children":7040},{},[7041],{"type":51,"value":261},{"type":45,"tag":103,"props":7043,"children":7044},{},[7045,7046,7056,7057,7062],{"type":51,"value":266},{"type":45,"tag":143,"props":7047,"children":7048},{},[7049,7050,7055],{"type":51,"value":271},{"type":45,"tag":69,"props":7051,"children":7053},{"className":7052},[],[7054],{"type":51,"value":277},{"type":51,"value":279},{"type":51,"value":281},{"type":45,"tag":69,"props":7058,"children":7060},{"className":7059},[],[7061],{"type":51,"value":287},{"type":51,"value":289},{"type":45,"tag":191,"props":7064,"children":7065},{"v-slot:cursor":7},[7066,7070,7102,7164,7171],{"type":45,"tag":174,"props":7067,"children":7068},{"id":295},[7069],{"type":51,"value":18},{"type":45,"tag":54,"props":7071,"children":7072},{},[7073,7082,7090,7098],{"type":45,"tag":58,"props":7074,"children":7075},{},[7076,7077,7081],{"type":51,"value":305},{"type":45,"tag":109,"props":7078,"children":7079},{},[7080],{"type":51,"value":310},{"type":51,"value":312},{"type":45,"tag":58,"props":7083,"children":7084},{},[7085,7086],{"type":51,"value":317},{"type":45,"tag":109,"props":7087,"children":7088},{},[7089],{"type":51,"value":322},{"type":45,"tag":58,"props":7091,"children":7092},{},[7093,7094],{"type":51,"value":327},{"type":45,"tag":109,"props":7095,"children":7096},{},[7097],{"type":51,"value":332},{"type":45,"tag":58,"props":7099,"children":7100},{},[7101],{"type":51,"value":337},{"type":45,"tag":205,"props":7103,"children":7104},{"className":340,"code":341,"language":342,"meta":7,"style":7},[7105],{"type":45,"tag":69,"props":7106,"children":7107},{"__ignoreMap":7},[7108,7115,7122,7129,7136,7143,7150,7157],{"type":45,"tag":215,"props":7109,"children":7110},{"class":217,"line":218},[7111],{"type":45,"tag":215,"props":7112,"children":7113},{},[7114],{"type":51,"value":354},{"type":45,"tag":215,"props":7116,"children":7117},{"class":217,"line":357},[7118],{"type":45,"tag":215,"props":7119,"children":7120},{},[7121],{"type":51,"value":363},{"type":45,"tag":215,"props":7123,"children":7124},{"class":217,"line":366},[7125],{"type":45,"tag":215,"props":7126,"children":7127},{},[7128],{"type":51,"value":372},{"type":45,"tag":215,"props":7130,"children":7131},{"class":217,"line":375},[7132],{"type":45,"tag":215,"props":7133,"children":7134},{},[7135],{"type":51,"value":381},{"type":45,"tag":215,"props":7137,"children":7138},{"class":217,"line":21},[7139],{"type":45,"tag":215,"props":7140,"children":7141},{},[7142],{"type":51,"value":389},{"type":45,"tag":215,"props":7144,"children":7145},{"class":217,"line":392},[7146],{"type":45,"tag":215,"props":7147,"children":7148},{},[7149],{"type":51,"value":398},{"type":45,"tag":215,"props":7151,"children":7152},{"class":217,"line":11},[7153],{"type":45,"tag":215,"props":7154,"children":7155},{},[7156],{"type":51,"value":406},{"type":45,"tag":215,"props":7158,"children":7159},{"class":217,"line":409},[7160],{"type":45,"tag":215,"props":7161,"children":7162},{},[7163],{"type":51,"value":415},{"type":45,"tag":54,"props":7165,"children":7166},{"start":21},[7167],{"type":45,"tag":58,"props":7168,"children":7169},{},[7170],{"type":51,"value":423},{"type":45,"tag":103,"props":7172,"children":7173},{},[7174,7175,7185,7186,7191],{"type":51,"value":428},{"type":45,"tag":143,"props":7176,"children":7177},{},[7178,7179,7184],{"type":51,"value":433},{"type":45,"tag":69,"props":7180,"children":7182},{"className":7181},[],[7183],{"type":51,"value":439},{"type":51,"value":441},{"type":51,"value":443},{"type":45,"tag":69,"props":7187,"children":7189},{"className":7188},[],[7190],{"type":51,"value":449},{"type":51,"value":451},{"type":45,"tag":191,"props":7193,"children":7194},{"v-slot:codex":7},[7195,7199,7209,7236,7240],{"type":45,"tag":174,"props":7196,"children":7197},{"id":457},[7198],{"type":51,"value":19},{"type":45,"tag":103,"props":7200,"children":7201},{},[7202,7203,7208],{"type":51,"value":464},{"type":45,"tag":69,"props":7204,"children":7206},{"className":7205},[],[7207],{"type":51,"value":470},{"type":51,"value":472},{"type":45,"tag":205,"props":7210,"children":7211},{"className":475,"code":476,"language":477,"meta":7,"style":7},[7212],{"type":45,"tag":69,"props":7213,"children":7214},{"__ignoreMap":7},[7215,7222,7229],{"type":45,"tag":215,"props":7216,"children":7217},{"class":217,"line":218},[7218],{"type":45,"tag":215,"props":7219,"children":7220},{},[7221],{"type":51,"value":489},{"type":45,"tag":215,"props":7223,"children":7224},{"class":217,"line":357},[7225],{"type":45,"tag":215,"props":7226,"children":7227},{},[7228],{"type":51,"value":497},{"type":45,"tag":215,"props":7230,"children":7231},{"class":217,"line":366},[7232],{"type":45,"tag":215,"props":7233,"children":7234},{},[7235],{"type":51,"value":505},{"type":45,"tag":103,"props":7237,"children":7238},{},[7239],{"type":51,"value":510},{"type":45,"tag":103,"props":7241,"children":7242},{},[7243,7244,7248,7249,7254],{"type":51,"value":515},{"type":45,"tag":143,"props":7245,"children":7246},{},[7247],{"type":51,"value":520},{"type":51,"value":522},{"type":45,"tag":69,"props":7250,"children":7252},{"className":7251},[],[7253],{"type":51,"value":449},{"type":51,"value":451},{"type":45,"tag":174,"props":7256,"children":7257},{"id":531},[7258,7259,7264],{"type":51,"value":534},{"type":45,"tag":69,"props":7260,"children":7262},{"className":7261},[],[7263],{"type":51,"value":90},{"type":51,"value":541},{"type":45,"tag":103,"props":7266,"children":7267},{},[7268,7269,7273],{"type":51,"value":546},{"type":45,"tag":109,"props":7270,"children":7271},{},[7272],{"type":51,"value":551},{"type":51,"value":553},{"type":45,"tag":205,"props":7275,"children":7276},{"className":207,"code":556,"language":209,"meta":7,"style":7},[7277],{"type":45,"tag":69,"props":7278,"children":7279},{"__ignoreMap":7},[7280,7295,7310,7325,7336,7355,7362,7369,7376],{"type":45,"tag":215,"props":7281,"children":7282},{"class":217,"line":218},[7283,7287,7291],{"type":45,"tag":215,"props":7284,"children":7285},{"style":222},[7286],{"type":51,"value":277},{"type":45,"tag":215,"props":7288,"children":7289},{"style":228},[7290],{"type":51,"value":572},{"type":45,"tag":215,"props":7292,"children":7293},{"style":244},[7294],{"type":51,"value":577},{"type":45,"tag":215,"props":7296,"children":7297},{"class":217,"line":357},[7298,7302,7306],{"type":45,"tag":215,"props":7299,"children":7300},{"style":244},[7301],{"type":51,"value":585},{"type":45,"tag":215,"props":7303,"children":7304},{"style":228},[7305],{"type":51,"value":590},{"type":45,"tag":215,"props":7307,"children":7308},{"style":244},[7309],{"type":51,"value":577},{"type":45,"tag":215,"props":7311,"children":7312},{"class":217,"line":366},[7313,7317,7321],{"type":45,"tag":215,"props":7314,"children":7315},{"style":244},[7316],{"type":51,"value":602},{"type":45,"tag":215,"props":7318,"children":7319},{"style":228},[7320],{"type":51,"value":607},{"type":45,"tag":215,"props":7322,"children":7323},{"style":244},[7324],{"type":51,"value":577},{"type":45,"tag":215,"props":7326,"children":7327},{"class":217,"line":375},[7328,7332],{"type":45,"tag":215,"props":7329,"children":7330},{"style":244},[7331],{"type":51,"value":619},{"type":45,"tag":215,"props":7333,"children":7334},{"style":228},[7335],{"type":51,"value":624},{"type":45,"tag":215,"props":7337,"children":7338},{"class":217,"line":21},[7339,7343,7347,7351],{"type":45,"tag":215,"props":7340,"children":7341},{"style":228},[7342],{"type":51,"value":632},{"type":45,"tag":215,"props":7344,"children":7345},{"style":244},[7346],{"type":51,"value":637},{"type":45,"tag":215,"props":7348,"children":7349},{"style":228},[7350],{"type":51,"value":642},{"type":45,"tag":215,"props":7352,"children":7353},{"style":244},[7354],{"type":51,"value":647},{"type":45,"tag":215,"props":7356,"children":7357},{"class":217,"line":392},[7358],{"type":45,"tag":215,"props":7359,"children":7360},{"style":228},[7361],{"type":51,"value":655},{"type":45,"tag":215,"props":7363,"children":7364},{"class":217,"line":11},[7365],{"type":45,"tag":215,"props":7366,"children":7367},{"style":228},[7368],{"type":51,"value":663},{"type":45,"tag":215,"props":7370,"children":7371},{"class":217,"line":409},[7372],{"type":45,"tag":215,"props":7373,"children":7374},{"style":228},[7375],{"type":51,"value":671},{"type":45,"tag":215,"props":7377,"children":7378},{"class":217,"line":674},[7379],{"type":45,"tag":215,"props":7380,"children":7381},{"style":228},[7382],{"type":51,"value":680},{"type":45,"tag":103,"props":7384,"children":7385},{},[7386,7387,7392],{"type":51,"value":685},{"type":45,"tag":69,"props":7388,"children":7390},{"className":7389},[],[7391],{"type":51,"value":691},{"type":51,"value":693},{"type":45,"tag":174,"props":7394,"children":7395},{"id":696},[7396,7397,7402],{"type":51,"value":699},{"type":45,"tag":69,"props":7398,"children":7400},{"className":7399},[],[7401],{"type":51,"value":74},{"type":51,"value":706},{"type":45,"tag":103,"props":7404,"children":7405},{},[7406,7407,7412,7413,7418,7419,7423,7424,7429],{"type":51,"value":711},{"type":45,"tag":69,"props":7408,"children":7410},{"className":7409},[],[7411],{"type":51,"value":74},{"type":51,"value":718},{"type":45,"tag":69,"props":7414,"children":7416},{"className":7415},[],[7417],{"type":51,"value":724},{"type":51,"value":726},{"type":45,"tag":109,"props":7420,"children":7421},{},[7422],{"type":51,"value":731},{"type":51,"value":733},{"type":45,"tag":69,"props":7425,"children":7427},{"className":7426},[],[7428],{"type":51,"value":739},{"type":51,"value":741},{"type":45,"tag":205,"props":7431,"children":7432},{"className":744,"code":745,"language":746,"meta":7,"style":7},[7433],{"type":45,"tag":69,"props":7434,"children":7435},{"__ignoreMap":7},[7436,7443,7450,7457,7464,7471,7478,7485,7492,7499,7506,7513,7520,7527,7534,7541,7548,7555,7562,7569,7576,7583,7590,7597,7604,7611,7618,7625,7632,7639,7646,7653,7660,7667,7674,7681,7688,7695,7702,7709,7716,7723,7730,7737,7744],{"type":45,"tag":215,"props":7437,"children":7438},{"class":217,"line":218},[7439],{"type":45,"tag":215,"props":7440,"children":7441},{},[7442],{"type":51,"value":758},{"type":45,"tag":215,"props":7444,"children":7445},{"class":217,"line":357},[7446],{"type":45,"tag":215,"props":7447,"children":7448},{"emptyLinePlaceholder":764},[7449],{"type":51,"value":767},{"type":45,"tag":215,"props":7451,"children":7452},{"class":217,"line":366},[7453],{"type":45,"tag":215,"props":7454,"children":7455},{},[7456],{"type":51,"value":775},{"type":45,"tag":215,"props":7458,"children":7459},{"class":217,"line":375},[7460],{"type":45,"tag":215,"props":7461,"children":7462},{},[7463],{"type":51,"value":783},{"type":45,"tag":215,"props":7465,"children":7466},{"class":217,"line":21},[7467],{"type":45,"tag":215,"props":7468,"children":7469},{"emptyLinePlaceholder":764},[7470],{"type":51,"value":767},{"type":45,"tag":215,"props":7472,"children":7473},{"class":217,"line":392},[7474],{"type":45,"tag":215,"props":7475,"children":7476},{},[7477],{"type":51,"value":798},{"type":45,"tag":215,"props":7479,"children":7480},{"class":217,"line":11},[7481],{"type":45,"tag":215,"props":7482,"children":7483},{"emptyLinePlaceholder":764},[7484],{"type":51,"value":767},{"type":45,"tag":215,"props":7486,"children":7487},{"class":217,"line":409},[7488],{"type":45,"tag":215,"props":7489,"children":7490},{},[7491],{"type":51,"value":813},{"type":45,"tag":215,"props":7493,"children":7494},{"class":217,"line":674},[7495],{"type":45,"tag":215,"props":7496,"children":7497},{},[7498],{"type":51,"value":821},{"type":45,"tag":215,"props":7500,"children":7501},{"class":217,"line":824},[7502],{"type":45,"tag":215,"props":7503,"children":7504},{},[7505],{"type":51,"value":830},{"type":45,"tag":215,"props":7507,"children":7508},{"class":217,"line":833},[7509],{"type":45,"tag":215,"props":7510,"children":7511},{},[7512],{"type":51,"value":839},{"type":45,"tag":215,"props":7514,"children":7515},{"class":217,"line":842},[7516],{"type":45,"tag":215,"props":7517,"children":7518},{},[7519],{"type":51,"value":848},{"type":45,"tag":215,"props":7521,"children":7522},{"class":217,"line":851},[7523],{"type":45,"tag":215,"props":7524,"children":7525},{},[7526],{"type":51,"value":857},{"type":45,"tag":215,"props":7528,"children":7529},{"class":217,"line":860},[7530],{"type":45,"tag":215,"props":7531,"children":7532},{},[7533],{"type":51,"value":866},{"type":45,"tag":215,"props":7535,"children":7536},{"class":217,"line":869},[7537],{"type":45,"tag":215,"props":7538,"children":7539},{},[7540],{"type":51,"value":875},{"type":45,"tag":215,"props":7542,"children":7543},{"class":217,"line":878},[7544],{"type":45,"tag":215,"props":7545,"children":7546},{},[7547],{"type":51,"value":884},{"type":45,"tag":215,"props":7549,"children":7550},{"class":217,"line":887},[7551],{"type":45,"tag":215,"props":7552,"children":7553},{},[7554],{"type":51,"value":893},{"type":45,"tag":215,"props":7556,"children":7557},{"class":217,"line":896},[7558],{"type":45,"tag":215,"props":7559,"children":7560},{"emptyLinePlaceholder":764},[7561],{"type":51,"value":767},{"type":45,"tag":215,"props":7563,"children":7564},{"class":217,"line":904},[7565],{"type":45,"tag":215,"props":7566,"children":7567},{},[7568],{"type":51,"value":910},{"type":45,"tag":215,"props":7570,"children":7571},{"class":217,"line":913},[7572],{"type":45,"tag":215,"props":7573,"children":7574},{"emptyLinePlaceholder":764},[7575],{"type":51,"value":767},{"type":45,"tag":215,"props":7577,"children":7578},{"class":217,"line":921},[7579],{"type":45,"tag":215,"props":7580,"children":7581},{},[7582],{"type":51,"value":927},{"type":45,"tag":215,"props":7584,"children":7585},{"class":217,"line":930},[7586],{"type":45,"tag":215,"props":7587,"children":7588},{},[7589],{"type":51,"value":936},{"type":45,"tag":215,"props":7591,"children":7592},{"class":217,"line":939},[7593],{"type":45,"tag":215,"props":7594,"children":7595},{},[7596],{"type":51,"value":945},{"type":45,"tag":215,"props":7598,"children":7599},{"class":217,"line":948},[7600],{"type":45,"tag":215,"props":7601,"children":7602},{},[7603],{"type":51,"value":954},{"type":45,"tag":215,"props":7605,"children":7606},{"class":217,"line":957},[7607],{"type":45,"tag":215,"props":7608,"children":7609},{},[7610],{"type":51,"value":963},{"type":45,"tag":215,"props":7612,"children":7613},{"class":217,"line":966},[7614],{"type":45,"tag":215,"props":7615,"children":7616},{"emptyLinePlaceholder":764},[7617],{"type":51,"value":767},{"type":45,"tag":215,"props":7619,"children":7620},{"class":217,"line":974},[7621],{"type":45,"tag":215,"props":7622,"children":7623},{},[7624],{"type":51,"value":980},{"type":45,"tag":215,"props":7626,"children":7627},{"class":217,"line":983},[7628],{"type":45,"tag":215,"props":7629,"children":7630},{"emptyLinePlaceholder":764},[7631],{"type":51,"value":767},{"type":45,"tag":215,"props":7633,"children":7634},{"class":217,"line":991},[7635],{"type":45,"tag":215,"props":7636,"children":7637},{},[7638],{"type":51,"value":997},{"type":45,"tag":215,"props":7640,"children":7641},{"class":217,"line":1000},[7642],{"type":45,"tag":215,"props":7643,"children":7644},{},[7645],{"type":51,"value":1006},{"type":45,"tag":215,"props":7647,"children":7648},{"class":217,"line":1009},[7649],{"type":45,"tag":215,"props":7650,"children":7651},{},[7652],{"type":51,"value":1015},{"type":45,"tag":215,"props":7654,"children":7655},{"class":217,"line":1018},[7656],{"type":45,"tag":215,"props":7657,"children":7658},{},[7659],{"type":51,"value":1024},{"type":45,"tag":215,"props":7661,"children":7662},{"class":217,"line":1027},[7663],{"type":45,"tag":215,"props":7664,"children":7665},{},[7666],{"type":51,"value":1033},{"type":45,"tag":215,"props":7668,"children":7669},{"class":217,"line":1036},[7670],{"type":45,"tag":215,"props":7671,"children":7672},{},[7673],{"type":51,"value":1042},{"type":45,"tag":215,"props":7675,"children":7676},{"class":217,"line":1045},[7677],{"type":45,"tag":215,"props":7678,"children":7679},{"emptyLinePlaceholder":764},[7680],{"type":51,"value":767},{"type":45,"tag":215,"props":7682,"children":7683},{"class":217,"line":1053},[7684],{"type":45,"tag":215,"props":7685,"children":7686},{},[7687],{"type":51,"value":1059},{"type":45,"tag":215,"props":7689,"children":7690},{"class":217,"line":1062},[7691],{"type":45,"tag":215,"props":7692,"children":7693},{"emptyLinePlaceholder":764},[7694],{"type":51,"value":767},{"type":45,"tag":215,"props":7696,"children":7697},{"class":217,"line":1070},[7698],{"type":45,"tag":215,"props":7699,"children":7700},{},[7701],{"type":51,"value":1076},{"type":45,"tag":215,"props":7703,"children":7704},{"class":217,"line":1079},[7705],{"type":45,"tag":215,"props":7706,"children":7707},{},[7708],{"type":51,"value":1085},{"type":45,"tag":215,"props":7710,"children":7711},{"class":217,"line":1088},[7712],{"type":45,"tag":215,"props":7713,"children":7714},{},[7715],{"type":51,"value":1094},{"type":45,"tag":215,"props":7717,"children":7718},{"class":217,"line":1097},[7719],{"type":45,"tag":215,"props":7720,"children":7721},{},[7722],{"type":51,"value":1103},{"type":45,"tag":215,"props":7724,"children":7725},{"class":217,"line":1106},[7726],{"type":45,"tag":215,"props":7727,"children":7728},{},[7729],{"type":51,"value":1112},{"type":45,"tag":215,"props":7731,"children":7732},{"class":217,"line":1115},[7733],{"type":45,"tag":215,"props":7734,"children":7735},{},[7736],{"type":51,"value":1121},{"type":45,"tag":215,"props":7738,"children":7739},{"class":217,"line":1124},[7740],{"type":45,"tag":215,"props":7741,"children":7742},{},[7743],{"type":51,"value":1130},{"type":45,"tag":215,"props":7745,"children":7746},{"class":217,"line":1133},[7747],{"type":45,"tag":215,"props":7748,"children":7749},{},[7750],{"type":51,"value":1139},{"type":45,"tag":174,"props":7752,"children":7753},{"id":1142},[7754],{"type":51,"value":1145},{"type":45,"tag":103,"props":7756,"children":7757},{},[7758],{"type":51,"value":1150},{"type":45,"tag":1152,"props":7760,"children":7761},{},[7762],{"type":45,"tag":103,"props":7763,"children":7764},{},[7765,7766,7771],{"type":51,"value":1159},{"type":45,"tag":69,"props":7767,"children":7769},{"className":7768},[],[7770],{"type":51,"value":1165},{"type":51,"value":1167},{"type":45,"tag":103,"props":7773,"children":7774},{},[7775],{"type":51,"value":1172},{"type":45,"tag":54,"props":7777,"children":7778},{},[7779,7789,7799,7808],{"type":45,"tag":58,"props":7780,"children":7781},{},[7782,7783,7788],{"type":51,"value":305},{"type":45,"tag":69,"props":7784,"children":7786},{"className":7785},[],[7787],{"type":51,"value":1185},{"type":51,"value":1187},{"type":45,"tag":58,"props":7790,"children":7791},{},[7792,7793,7798],{"type":51,"value":1192},{"type":45,"tag":69,"props":7794,"children":7796},{"className":7795},[],[7797],{"type":51,"value":1198},{"type":51,"value":1200},{"type":45,"tag":58,"props":7800,"children":7801},{},[7802,7803],{"type":51,"value":1205},{"type":45,"tag":69,"props":7804,"children":7806},{"className":7805},[],[7807],{"type":51,"value":1211},{"type":45,"tag":58,"props":7809,"children":7810},{},[7811],{"type":51,"value":1216},{"type":45,"tag":103,"props":7813,"children":7814},{},[7815,7816,7821],{"type":51,"value":1221},{"type":45,"tag":69,"props":7817,"children":7819},{"className":7818},[],[7820],{"type":51,"value":74},{"type":51,"value":1228},{"type":45,"tag":46,"props":7823,"children":7824},{"id":1231},[7825],{"type":51,"value":1234},{"type":45,"tag":117,"props":7827,"children":7828},{},[7829,7849,7857,7871,7891,7905],{"type":45,"tag":58,"props":7830,"children":7831},{},[7832,7842,7843,7848],{"type":45,"tag":109,"props":7833,"children":7834},{},[7835,7836,7841],{"type":51,"value":1245},{"type":45,"tag":69,"props":7837,"children":7839},{"className":7838},[],[7840],{"type":51,"value":1251},{"type":51,"value":451},{"type":51,"value":1254},{"type":45,"tag":69,"props":7844,"children":7846},{"className":7845},[],[7847],{"type":51,"value":1260},{"type":51,"value":1262},{"type":45,"tag":58,"props":7850,"children":7851},{},[7852,7856],{"type":45,"tag":109,"props":7853,"children":7854},{},[7855],{"type":51,"value":1270},{"type":51,"value":1272},{"type":45,"tag":58,"props":7858,"children":7859},{},[7860,7864,7865,7870],{"type":45,"tag":109,"props":7861,"children":7862},{},[7863],{"type":51,"value":1280},{"type":51,"value":1282},{"type":45,"tag":69,"props":7866,"children":7868},{"className":7867},[],[7869],{"type":51,"value":1288},{"type":51,"value":451},{"type":45,"tag":58,"props":7872,"children":7873},{},[7874,7890],{"type":45,"tag":109,"props":7875,"children":7876},{},[7877,7878,7883,7884,7889],{"type":51,"value":1297},{"type":45,"tag":69,"props":7879,"children":7881},{"className":7880},[],[7882],{"type":51,"value":1303},{"type":51,"value":1305},{"type":45,"tag":69,"props":7885,"children":7887},{"className":7886},[],[7888],{"type":51,"value":1311},{"type":51,"value":451},{"type":51,"value":1314},{"type":45,"tag":58,"props":7892,"children":7893},{},[7894,7904],{"type":45,"tag":109,"props":7895,"children":7896},{},[7897,7898,7903],{"type":51,"value":1322},{"type":45,"tag":69,"props":7899,"children":7901},{"className":7900},[],[7902],{"type":51,"value":1328},{"type":51,"value":1330},{"type":51,"value":1332},{"type":45,"tag":58,"props":7906,"children":7907},{},[7908,7912,7913,7918],{"type":45,"tag":109,"props":7909,"children":7910},{},[7911],{"type":51,"value":1340},{"type":51,"value":1342},{"type":45,"tag":69,"props":7914,"children":7916},{"className":7915},[],[7917],{"type":51,"value":1348},{"type":51,"value":1350},{"type":45,"tag":46,"props":7920,"children":7921},{"id":1353},[7922],{"type":51,"value":1356},{"type":45,"tag":103,"props":7924,"children":7925},{},[7926],{"type":51,"value":1361},{"type":45,"tag":54,"props":7928,"children":7929},{},[7930,7938,7953,7961,7965,7973,7981],{"type":45,"tag":58,"props":7931,"children":7932},{},[7933],{"type":45,"tag":69,"props":7934,"children":7936},{"className":7935},[],[7937],{"type":51,"value":1373},{"type":45,"tag":58,"props":7939,"children":7940},{},[7941,7942,7947,7948],{"type":51,"value":1378},{"type":45,"tag":69,"props":7943,"children":7945},{"className":7944},[],[7946],{"type":51,"value":1384},{"type":51,"value":1386},{"type":45,"tag":69,"props":7949,"children":7951},{"className":7950},[],[7952],{"type":51,"value":1392},{"type":45,"tag":58,"props":7954,"children":7955},{},[7956],{"type":45,"tag":69,"props":7957,"children":7959},{"className":7958},[],[7960],{"type":51,"value":1401},{"type":45,"tag":58,"props":7962,"children":7963},{},[7964],{"type":51,"value":1406},{"type":45,"tag":58,"props":7966,"children":7967},{},[7968],{"type":45,"tag":69,"props":7969,"children":7971},{"className":7970},[],[7972],{"type":51,"value":1415},{"type":45,"tag":58,"props":7974,"children":7975},{},[7976],{"type":45,"tag":69,"props":7977,"children":7979},{"className":7978},[],[7980],{"type":51,"value":1424},{"type":45,"tag":58,"props":7982,"children":7983},{},[7984,7985,7990,7991,7996,7997],{"type":51,"value":67},{"type":45,"tag":69,"props":7986,"children":7988},{"className":7987},[],[7989],{"type":51,"value":74},{"type":51,"value":1435},{"type":45,"tag":69,"props":7992,"children":7994},{"className":7993},[],[7995],{"type":51,"value":82},{"type":51,"value":84},{"type":45,"tag":69,"props":7998,"children":8000},{"className":7999},[],[8001],{"type":51,"value":90},{"type":45,"tag":103,"props":8003,"children":8004},{},[8005,8006,8011],{"type":51,"value":1451},{"type":45,"tag":69,"props":8007,"children":8009},{"className":8008},[],[8010],{"type":51,"value":1328},{"type":51,"value":1458},{"type":45,"tag":46,"props":8013,"children":8014},{"id":1461},[8015],{"type":51,"value":1464},{"type":45,"tag":103,"props":8017,"children":8018},{},[8019,8020,8025,8026,8031],{"type":51,"value":1469},{"type":45,"tag":69,"props":8021,"children":8023},{"className":8022},[],[8024],{"type":51,"value":90},{"type":51,"value":1476},{"type":45,"tag":69,"props":8027,"children":8029},{"className":8028},[],[8030],{"type":51,"value":74},{"type":51,"value":1483},{"type":45,"tag":1485,"props":8033,"children":8034},{},[8035],{"type":51,"value":1489},{"title":7,"searchDepth":357,"depth":357,"links":8037},[8038,8039,8040,8046,8047,8048],{"id":48,"depth":357,"text":52},{"id":98,"depth":357,"text":101},{"id":169,"depth":357,"text":172,"children":8041},[8042,8043,8044,8045],{"id":176,"depth":366,"text":179},{"id":531,"depth":366,"text":1498},{"id":696,"depth":366,"text":1500},{"id":1142,"depth":366,"text":1145},{"id":1231,"depth":357,"text":1234},{"id":1353,"depth":357,"text":1356},{"id":1461,"depth":357,"text":1464},1777396709687]