[{"data":1,"prerenderedAt":8139},["ShallowReactive",2],{"tutorial-dbt-bruin-analyst/enhance-and-validate":3,"content-query-lKydTNdXCn":1508,"content-query-g5ZKLlKTWc":2727},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"readingTime":11,"category":12,"tags":13,"difficulty":17,"module":5,"step":18,"journeys":19,"learnMore":22,"stepGif":32,"author":33,"body":37,"_type":1502,"_id":1503,"_source":1504,"_file":1505,"_stem":1506,"_extension":1507},"/tutorials/dbt-bruin-analyst/enhance-and-validate","dbt-bruin-analyst",false,"","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.","2026-04-28",6,"Tutorial",[14,15,16],"Bruin CLI","Bruin AI","dbt","Beginner",4,[20,21],"Data Analyst","Data Engineer",[23,26,29],{"label":24,"url":25},"bruin ai enhance (docs)","https://getbruin.com/docs/bruin/commands/ai-enhance.html",{"label":27,"url":28},"Quality checks reference","https://getbruin.com/docs/bruin/quality/overview.html",{"label":30,"url":31},"bruin validate (docs)","https://getbruin.com/docs/bruin/commands/validate.html","/img/learn/contoso-dbt-bruin-analyst.gif",{"name":34,"role":35,"image":36},"Bruin Team","Bruin Data","/bruin-logo-2025.svg",{"type":38,"children":39,"toc":1491},"root",[40,49,88,94,132,152,158,165,170,214,219,315,350,372,407,449,455,460,480,485,938,943,978,984,1018,1023,1033,1038,1044,1080,1419,1431,1460,1466,1485],{"type":41,"tag":42,"props":43,"children":45},"element","h2",{"id":44},"what-youll-do",[46],{"type":47,"value":48},"text","What you'll do",{"type":41,"tag":50,"props":51,"children":52},"ol",{},[53,76],{"type":41,"tag":54,"props":55,"children":56},"li",{},[57,59,66,68,74],{"type":47,"value":58},"Run ",{"type":41,"tag":60,"props":61,"children":63},"code",{"className":62},[],[64],{"type":47,"value":65},"bruin ai enhance",{"type":47,"value":67}," over ",{"type":41,"tag":60,"props":69,"children":71},{"className":70},[],[72],{"type":47,"value":73},"context/assets/",{"type":47,"value":75}," so every asset gets a description, semantic tags, per-column docs, and quality checks",{"type":41,"tag":54,"props":77,"children":78},{},[79,80,86],{"type":47,"value":58},{"type":41,"tag":60,"props":81,"children":83},{"className":82},[],[84],{"type":47,"value":85},"bruin validate",{"type":47,"value":87}," to confirm none of the YAMLs ended up malformed",{"type":41,"tag":42,"props":89,"children":91},{"id":90},"why-this-step-matters",[92],{"type":47,"value":93},"Why this step matters",{"type":41,"tag":95,"props":96,"children":97},"p",{},[98,100,106,108,114,116,122,124,130],{"type":47,"value":99},"Without descriptions, an AI agent can read your schema but doesn't know what it ",{"type":41,"tag":101,"props":102,"children":103},"em",{},[104],{"type":47,"value":105},"means",{"type":47,"value":107},". It sees ",{"type":41,"tag":60,"props":109,"children":111},{"className":110},[],[112],{"type":47,"value":113},"gmv",{"type":47,"value":115}," and guesses; it sees ",{"type":41,"tag":60,"props":117,"children":119},{"className":118},[],[120],{"type":47,"value":121},"status = 3",{"type":47,"value":123}," and queries blindly; it sees a ",{"type":41,"tag":60,"props":125,"children":127},{"className":126},[],[128],{"type":47,"value":129},"created_at",{"type":47,"value":131}," column and assumes UTC. Enhancement is what turns the structural skeleton from the previous step into something an agent can actually reason about.",{"type":41,"tag":95,"props":133,"children":134},{},[135,137,143,145,150],{"type":47,"value":136},"Validation matters because ",{"type":41,"tag":60,"props":138,"children":140},{"className":139},[],[141],{"type":47,"value":142},"ai enhance",{"type":47,"value":144}," writes to YAML files at scale, and rare edge cases can produce malformed files. A 30-second ",{"type":41,"tag":60,"props":146,"children":148},{"className":147},[],[149],{"type":47,"value":85},{"type":47,"value":151}," is cheap insurance that catches them immediately, before they confuse an agent at query time.",{"type":41,"tag":42,"props":153,"children":155},{"id":154},"instructions",[156],{"type":47,"value":157},"Instructions",{"type":41,"tag":159,"props":160,"children":162},"h3",{"id":161},"_1-run-the-ai-enhancement",[163],{"type":47,"value":164},"1. Run the AI enhancement",{"type":41,"tag":95,"props":166,"children":167},{},[168],{"type":47,"value":169},"From the dbt project root:",{"type":41,"tag":171,"props":172,"children":176},"pre",{"className":173,"code":174,"language":175,"meta":7,"style":7},"language-bash shiki shiki-themes github-dark","bruin ai enhance --claude context/assets\n","bash",[177],{"type":41,"tag":60,"props":178,"children":179},{"__ignoreMap":7},[180],{"type":41,"tag":181,"props":182,"children":185},"span",{"class":183,"line":184},"line",1,[186,192,198,203,209],{"type":41,"tag":181,"props":187,"children":189},{"style":188},"--shiki-default:#B392F0",[190],{"type":47,"value":191},"bruin",{"type":41,"tag":181,"props":193,"children":195},{"style":194},"--shiki-default:#9ECBFF",[196],{"type":47,"value":197}," ai",{"type":41,"tag":181,"props":199,"children":200},{"style":194},[201],{"type":47,"value":202}," enhance",{"type":41,"tag":181,"props":204,"children":206},{"style":205},"--shiki-default:#79B8FF",[207],{"type":47,"value":208}," --claude",{"type":41,"tag":181,"props":210,"children":211},{"style":194},[212],{"type":47,"value":213}," context/assets\n",{"type":41,"tag":95,"props":215,"children":216},{},[217],{"type":47,"value":218},"For each asset, Bruin sends the column list + a sample of the data to Claude and fills in:",{"type":41,"tag":220,"props":221,"children":222},"ul",{},[223,236,269,281],{"type":41,"tag":54,"props":224,"children":225},{},[226,228,234],{"type":47,"value":227},"A multi-paragraph ",{"type":41,"tag":229,"props":230,"children":231},"strong",{},[232],{"type":47,"value":233},"description",{"type":47,"value":235}," covering purpose, grain, lineage, and typical use",{"type":41,"tag":54,"props":237,"children":238},{},[239,241,246,248,254,256,262,263],{"type":47,"value":240},"Semantic ",{"type":41,"tag":229,"props":242,"children":243},{},[244],{"type":47,"value":245},"tags",{"type":47,"value":247}," like ",{"type":41,"tag":60,"props":249,"children":251},{"className":250},[],[252],{"type":47,"value":253},"domain:retail",{"type":47,"value":255},", ",{"type":41,"tag":60,"props":257,"children":259},{"className":258},[],[260],{"type":47,"value":261},"layer:staging",{"type":47,"value":255},{"type":41,"tag":60,"props":264,"children":266},{"className":265},[],[267],{"type":47,"value":268},"sensitivity:pii",{"type":41,"tag":54,"props":270,"children":271},{},[272,274,279],{"type":47,"value":273},"Per-column ",{"type":41,"tag":229,"props":275,"children":276},{},[277],{"type":47,"value":278},"descriptions",{"type":47,"value":280}," with business meaning",{"type":41,"tag":54,"props":282,"children":283},{},[284,289,291,297,299,305,307,313],{"type":41,"tag":229,"props":285,"children":286},{},[287],{"type":47,"value":288},"Quality checks",{"type":47,"value":290}," — ",{"type":41,"tag":60,"props":292,"children":294},{"className":293},[],[295],{"type":47,"value":296},"not_null",{"type":47,"value":298}," on keys, ",{"type":41,"tag":60,"props":300,"children":302},{"className":301},[],[303],{"type":47,"value":304},"unique",{"type":47,"value":306}," on identifiers, ",{"type":41,"tag":60,"props":308,"children":310},{"className":309},[],[311],{"type":47,"value":312},"accepted_values",{"type":47,"value":314}," on enums",{"type":41,"tag":95,"props":316,"children":317},{},[318,320,326,327,333,334,340,342,348],{"type":47,"value":319},"The command auto-detects which AI CLI you have installed. If you have several, pass an explicit flag — ",{"type":41,"tag":60,"props":321,"children":323},{"className":322},[],[324],{"type":47,"value":325},"--claude",{"type":47,"value":255},{"type":41,"tag":60,"props":328,"children":330},{"className":329},[],[331],{"type":47,"value":332},"--opencode",{"type":47,"value":255},{"type":41,"tag":60,"props":335,"children":337},{"className":336},[],[338],{"type":47,"value":339},"--codex",{"type":47,"value":341},", or ",{"type":41,"tag":60,"props":343,"children":345},{"className":344},[],[346],{"type":47,"value":347},"--cursor",{"type":47,"value":349},".",{"type":41,"tag":351,"props":352,"children":353},"blockquote",{},[354],{"type":41,"tag":95,"props":355,"children":356},{},[357,362,364,370],{"type":41,"tag":229,"props":358,"children":359},{},[360],{"type":47,"value":361},"Time estimate.",{"type":47,"value":363}," 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":41,"tag":60,"props":365,"children":367},{"className":366},[],[368],{"type":47,"value":369},"--concurrency 10",{"type":47,"value":371}," if you want it faster and your AI quota tolerates it.",{"type":41,"tag":351,"props":373,"children":374},{},[375],{"type":41,"tag":95,"props":376,"children":377},{},[378,397,399,405],{"type":41,"tag":229,"props":379,"children":380},{},[381,383,388,390,396],{"type":47,"value":382},"Gotcha — ",{"type":41,"tag":60,"props":384,"children":386},{"className":385},[],[387],{"type":47,"value":142},{"type":47,"value":389}," doesn't always honor ",{"type":41,"tag":60,"props":391,"children":393},{"className":392},[],[394],{"type":47,"value":395},"--config-file",{"type":47,"value":349},{"type":47,"value":398}," It can fall back to your global ",{"type":41,"tag":60,"props":400,"children":402},{"className":401},[],[403],{"type":47,"value":404},"~/.bruin.yml",{"type":47,"value":406}," 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":41,"tag":351,"props":408,"children":409},{},[410],{"type":41,"tag":95,"props":411,"children":412},{},[413,418,420,425,427,433,435,440,442,448],{"type":41,"tag":229,"props":414,"children":415},{},[416],{"type":47,"value":417},"Gotcha — rare YAML corruption.",{"type":47,"value":419}," On a small fraction of assets, ",{"type":41,"tag":60,"props":421,"children":423},{"className":422},[],[424],{"type":47,"value":142},{"type":47,"value":426}," has been known to mangle the ",{"type":41,"tag":60,"props":428,"children":430},{"className":429},[],[431],{"type":47,"value":432},"columns:",{"type":47,"value":434}," block. Always run ",{"type":41,"tag":60,"props":436,"children":438},{"className":437},[],[439],{"type":47,"value":85},{"type":47,"value":441}," afterward (next step). If a single asset breaks, regenerate just that file: ",{"type":41,"tag":60,"props":443,"children":445},{"className":444},[],[446],{"type":47,"value":447},"bruin ai enhance --claude context/assets/\u003Cschema>/\u003Ctable>.asset.yml",{"type":47,"value":349},{"type":41,"tag":159,"props":450,"children":452},{"id":451},"_2-spot-check-a-single-asset",[453],{"type":47,"value":454},"2. Spot-check a single asset",{"type":41,"tag":95,"props":456,"children":457},{},[458],{"type":47,"value":459},"Open one of the report assets — these benefit most from enrichment because the column names alone don't tell the full story:",{"type":41,"tag":171,"props":461,"children":463},{"className":173,"code":462,"language":175,"meta":7,"style":7},"cat context/assets/contoso_dbt_reports/rpt_revenue_by_segment.asset.yml\n",[464],{"type":41,"tag":60,"props":465,"children":466},{"__ignoreMap":7},[467],{"type":41,"tag":181,"props":468,"children":469},{"class":183,"line":184},[470,475],{"type":41,"tag":181,"props":471,"children":472},{"style":188},[473],{"type":47,"value":474},"cat",{"type":41,"tag":181,"props":476,"children":477},{"style":194},[478],{"type":47,"value":479}," context/assets/contoso_dbt_reports/rpt_revenue_by_segment.asset.yml\n",{"type":41,"tag":95,"props":481,"children":482},{},[483],{"type":47,"value":484},"You should now see something like:",{"type":41,"tag":171,"props":486,"children":490},{"className":487,"code":488,"language":489,"meta":7,"style":7},"language-yaml shiki shiki-themes github-dark","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","yaml",[491],{"type":41,"tag":60,"props":492,"children":493},{"__ignoreMap":7},[494,514,532,550,558,567,575,584,597,611,624,637,650,671,689,707,720,742,763,779,796,808,828,849,866,883,904,921],{"type":41,"tag":181,"props":495,"children":496},{"class":183,"line":184},[497,503,509],{"type":41,"tag":181,"props":498,"children":500},{"style":499},"--shiki-default:#85E89D",[501],{"type":47,"value":502},"name",{"type":41,"tag":181,"props":504,"children":506},{"style":505},"--shiki-default:#E1E4E8",[507],{"type":47,"value":508},": ",{"type":41,"tag":181,"props":510,"children":511},{"style":194},[512],{"type":47,"value":513},"contoso_dbt_reports.rpt_revenue_by_segment\n",{"type":41,"tag":181,"props":515,"children":517},{"class":183,"line":516},2,[518,523,527],{"type":41,"tag":181,"props":519,"children":520},{"style":499},[521],{"type":47,"value":522},"type",{"type":41,"tag":181,"props":524,"children":525},{"style":505},[526],{"type":47,"value":508},{"type":41,"tag":181,"props":528,"children":529},{"style":194},[530],{"type":47,"value":531},"bq.source\n",{"type":41,"tag":181,"props":533,"children":535},{"class":183,"line":534},3,[536,540,544],{"type":41,"tag":181,"props":537,"children":538},{"style":499},[539],{"type":47,"value":233},{"type":41,"tag":181,"props":541,"children":542},{"style":505},[543],{"type":47,"value":508},{"type":41,"tag":181,"props":545,"children":547},{"style":546},"--shiki-default:#F97583",[548],{"type":47,"value":549},"|\n",{"type":41,"tag":181,"props":551,"children":552},{"class":183,"line":18},[553],{"type":41,"tag":181,"props":554,"children":555},{"style":194},[556],{"type":47,"value":557},"  Yearly revenue rolled up by product segment and category. Built from the\n",{"type":41,"tag":181,"props":559,"children":561},{"class":183,"line":560},5,[562],{"type":41,"tag":181,"props":563,"children":564},{"style":194},[565],{"type":47,"value":566},"  staging order-line table joined with the product dimension. One row per\n",{"type":41,"tag":181,"props":568,"children":569},{"class":183,"line":11},[570],{"type":41,"tag":181,"props":571,"children":572},{"style":194},[573],{"type":47,"value":574},"  (segment_id, category_name, year). Used by retail merchandising and\n",{"type":41,"tag":181,"props":576,"children":578},{"class":183,"line":577},7,[579],{"type":41,"tag":181,"props":580,"children":581},{"style":194},[582],{"type":47,"value":583},"  finance for category-level reporting.\n",{"type":41,"tag":181,"props":585,"children":587},{"class":183,"line":586},8,[588,592],{"type":41,"tag":181,"props":589,"children":590},{"style":499},[591],{"type":47,"value":245},{"type":41,"tag":181,"props":593,"children":594},{"style":505},[595],{"type":47,"value":596},":\n",{"type":41,"tag":181,"props":598,"children":600},{"class":183,"line":599},9,[601,606],{"type":41,"tag":181,"props":602,"children":603},{"style":505},[604],{"type":47,"value":605},"  - ",{"type":41,"tag":181,"props":607,"children":608},{"style":194},[609],{"type":47,"value":610},"domain:retail\n",{"type":41,"tag":181,"props":612,"children":614},{"class":183,"line":613},10,[615,619],{"type":41,"tag":181,"props":616,"children":617},{"style":505},[618],{"type":47,"value":605},{"type":41,"tag":181,"props":620,"children":621},{"style":194},[622],{"type":47,"value":623},"layer:reports\n",{"type":41,"tag":181,"props":625,"children":627},{"class":183,"line":626},11,[628,632],{"type":41,"tag":181,"props":629,"children":630},{"style":505},[631],{"type":47,"value":605},{"type":41,"tag":181,"props":633,"children":634},{"style":194},[635],{"type":47,"value":636},"grain:segment_category_year\n",{"type":41,"tag":181,"props":638,"children":640},{"class":183,"line":639},12,[641,646],{"type":41,"tag":181,"props":642,"children":643},{"style":499},[644],{"type":47,"value":645},"columns",{"type":41,"tag":181,"props":647,"children":648},{"style":505},[649],{"type":47,"value":596},{"type":41,"tag":181,"props":651,"children":653},{"class":183,"line":652},13,[654,658,662,666],{"type":41,"tag":181,"props":655,"children":656},{"style":505},[657],{"type":47,"value":605},{"type":41,"tag":181,"props":659,"children":660},{"style":499},[661],{"type":47,"value":502},{"type":41,"tag":181,"props":663,"children":664},{"style":505},[665],{"type":47,"value":508},{"type":41,"tag":181,"props":667,"children":668},{"style":194},[669],{"type":47,"value":670},"segment_id\n",{"type":41,"tag":181,"props":672,"children":674},{"class":183,"line":673},14,[675,680,684],{"type":41,"tag":181,"props":676,"children":677},{"style":499},[678],{"type":47,"value":679},"    type",{"type":41,"tag":181,"props":681,"children":682},{"style":505},[683],{"type":47,"value":508},{"type":41,"tag":181,"props":685,"children":686},{"style":194},[687],{"type":47,"value":688},"STRING\n",{"type":41,"tag":181,"props":690,"children":692},{"class":183,"line":691},15,[693,698,702],{"type":41,"tag":181,"props":694,"children":695},{"style":499},[696],{"type":47,"value":697},"    description",{"type":41,"tag":181,"props":699,"children":700},{"style":505},[701],{"type":47,"value":508},{"type":41,"tag":181,"props":703,"children":704},{"style":194},[705],{"type":47,"value":706},"\"Identifier for the product segment (joins to dim_segment).\"\n",{"type":41,"tag":181,"props":708,"children":710},{"class":183,"line":709},16,[711,716],{"type":41,"tag":181,"props":712,"children":713},{"style":499},[714],{"type":47,"value":715},"    checks",{"type":41,"tag":181,"props":717,"children":718},{"style":505},[719],{"type":47,"value":596},{"type":41,"tag":181,"props":721,"children":723},{"class":183,"line":722},17,[724,729,733,737],{"type":41,"tag":181,"props":725,"children":726},{"style":505},[727],{"type":47,"value":728},"      - ",{"type":41,"tag":181,"props":730,"children":731},{"style":499},[732],{"type":47,"value":502},{"type":41,"tag":181,"props":734,"children":735},{"style":505},[736],{"type":47,"value":508},{"type":41,"tag":181,"props":738,"children":739},{"style":194},[740],{"type":47,"value":741},"not_null\n",{"type":41,"tag":181,"props":743,"children":745},{"class":183,"line":744},18,[746,750,754,758],{"type":41,"tag":181,"props":747,"children":748},{"style":505},[749],{"type":47,"value":605},{"type":41,"tag":181,"props":751,"children":752},{"style":499},[753],{"type":47,"value":502},{"type":41,"tag":181,"props":755,"children":756},{"style":505},[757],{"type":47,"value":508},{"type":41,"tag":181,"props":759,"children":760},{"style":194},[761],{"type":47,"value":762},"category_name\n",{"type":41,"tag":181,"props":764,"children":766},{"class":183,"line":765},19,[767,771,775],{"type":41,"tag":181,"props":768,"children":769},{"style":499},[770],{"type":47,"value":679},{"type":41,"tag":181,"props":772,"children":773},{"style":505},[774],{"type":47,"value":508},{"type":41,"tag":181,"props":776,"children":777},{"style":194},[778],{"type":47,"value":688},{"type":41,"tag":181,"props":780,"children":782},{"class":183,"line":781},20,[783,787,791],{"type":41,"tag":181,"props":784,"children":785},{"style":499},[786],{"type":47,"value":697},{"type":41,"tag":181,"props":788,"children":789},{"style":505},[790],{"type":47,"value":508},{"type":41,"tag":181,"props":792,"children":793},{"style":194},[794],{"type":47,"value":795},"\"Human-readable category label, e.g. 'Bikes', 'Components'.\"\n",{"type":41,"tag":181,"props":797,"children":799},{"class":183,"line":798},21,[800,804],{"type":41,"tag":181,"props":801,"children":802},{"style":499},[803],{"type":47,"value":715},{"type":41,"tag":181,"props":805,"children":806},{"style":505},[807],{"type":47,"value":596},{"type":41,"tag":181,"props":809,"children":811},{"class":183,"line":810},22,[812,816,820,824],{"type":41,"tag":181,"props":813,"children":814},{"style":505},[815],{"type":47,"value":728},{"type":41,"tag":181,"props":817,"children":818},{"style":499},[819],{"type":47,"value":502},{"type":41,"tag":181,"props":821,"children":822},{"style":505},[823],{"type":47,"value":508},{"type":41,"tag":181,"props":825,"children":826},{"style":194},[827],{"type":47,"value":741},{"type":41,"tag":181,"props":829,"children":831},{"class":183,"line":830},23,[832,836,840,844],{"type":41,"tag":181,"props":833,"children":834},{"style":505},[835],{"type":47,"value":605},{"type":41,"tag":181,"props":837,"children":838},{"style":499},[839],{"type":47,"value":502},{"type":41,"tag":181,"props":841,"children":842},{"style":505},[843],{"type":47,"value":508},{"type":41,"tag":181,"props":845,"children":846},{"style":194},[847],{"type":47,"value":848},"year\n",{"type":41,"tag":181,"props":850,"children":852},{"class":183,"line":851},24,[853,857,861],{"type":41,"tag":181,"props":854,"children":855},{"style":499},[856],{"type":47,"value":679},{"type":41,"tag":181,"props":858,"children":859},{"style":505},[860],{"type":47,"value":508},{"type":41,"tag":181,"props":862,"children":863},{"style":194},[864],{"type":47,"value":865},"INT64\n",{"type":41,"tag":181,"props":867,"children":869},{"class":183,"line":868},25,[870,874,878],{"type":41,"tag":181,"props":871,"children":872},{"style":499},[873],{"type":47,"value":697},{"type":41,"tag":181,"props":875,"children":876},{"style":505},[877],{"type":47,"value":508},{"type":41,"tag":181,"props":879,"children":880},{"style":194},[881],{"type":47,"value":882},"\"Calendar year of the order date, in UTC.\"\n",{"type":41,"tag":181,"props":884,"children":886},{"class":183,"line":885},26,[887,891,895,899],{"type":41,"tag":181,"props":888,"children":889},{"style":505},[890],{"type":47,"value":605},{"type":41,"tag":181,"props":892,"children":893},{"style":499},[894],{"type":47,"value":502},{"type":41,"tag":181,"props":896,"children":897},{"style":505},[898],{"type":47,"value":508},{"type":41,"tag":181,"props":900,"children":901},{"style":194},[902],{"type":47,"value":903},"revenue_usd\n",{"type":41,"tag":181,"props":905,"children":907},{"class":183,"line":906},27,[908,912,916],{"type":41,"tag":181,"props":909,"children":910},{"style":499},[911],{"type":47,"value":679},{"type":41,"tag":181,"props":913,"children":914},{"style":505},[915],{"type":47,"value":508},{"type":41,"tag":181,"props":917,"children":918},{"style":194},[919],{"type":47,"value":920},"NUMERIC\n",{"type":41,"tag":181,"props":922,"children":924},{"class":183,"line":923},28,[925,929,933],{"type":41,"tag":181,"props":926,"children":927},{"style":499},[928],{"type":47,"value":697},{"type":41,"tag":181,"props":930,"children":931},{"style":505},[932],{"type":47,"value":508},{"type":41,"tag":181,"props":934,"children":935},{"style":194},[936],{"type":47,"value":937},"\"Sum of order_line.gross_amount in USD, post-discount.\"\n",{"type":41,"tag":95,"props":939,"children":940},{},[941],{"type":47,"value":942},"This is what the agent will read before it queries. The richer this gets, the better its SQL gets.",{"type":41,"tag":351,"props":944,"children":945},{},[946],{"type":41,"tag":95,"props":947,"children":948},{},[949,961,963,968,970,976],{"type":41,"tag":229,"props":950,"children":951},{},[952,954,959],{"type":47,"value":953},"Watch for incorrect ",{"type":41,"tag":60,"props":955,"children":957},{"className":956},[],[958],{"type":47,"value":304},{"type":47,"value":960}," checks.",{"type":47,"value":962}," AI enhancement sometimes adds ",{"type":41,"tag":60,"props":964,"children":966},{"className":965},[],[967],{"type":47,"value":304},{"type":47,"value":969}," to columns that look like keys but aren't unique per row (e.g., ",{"type":41,"tag":60,"props":971,"children":973},{"className":972},[],[974],{"type":47,"value":975},"segment_id",{"type":47,"value":977}," 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":41,"tag":159,"props":979,"children":981},{"id":980},"_3-validate-the-whole-pipeline",[982],{"type":47,"value":983},"3. Validate the whole pipeline",{"type":41,"tag":171,"props":985,"children":987},{"className":173,"code":986,"language":175,"meta":7,"style":7},"bruin validate --config-file context/.bruin.yml context\n",[988],{"type":41,"tag":60,"props":989,"children":990},{"__ignoreMap":7},[991],{"type":41,"tag":181,"props":992,"children":993},{"class":183,"line":184},[994,998,1003,1008,1013],{"type":41,"tag":181,"props":995,"children":996},{"style":188},[997],{"type":47,"value":191},{"type":41,"tag":181,"props":999,"children":1000},{"style":194},[1001],{"type":47,"value":1002}," validate",{"type":41,"tag":181,"props":1004,"children":1005},{"style":205},[1006],{"type":47,"value":1007}," --config-file",{"type":41,"tag":181,"props":1009,"children":1010},{"style":194},[1011],{"type":47,"value":1012}," context/.bruin.yml",{"type":41,"tag":181,"props":1014,"children":1015},{"style":194},[1016],{"type":47,"value":1017}," context\n",{"type":41,"tag":95,"props":1019,"children":1020},{},[1021],{"type":47,"value":1022},"Expected output:",{"type":41,"tag":171,"props":1024,"children":1028},{"className":1025,"code":1027,"language":47},[1026],"language-text","✓ Successfully validated 40 assets across 1 pipeline, all good.\n",[1029],{"type":41,"tag":60,"props":1030,"children":1031},{"__ignoreMap":7},[1032],{"type":47,"value":1027},{"type":41,"tag":95,"props":1034,"children":1035},{},[1036],{"type":47,"value":1037},"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":41,"tag":159,"props":1039,"children":1041},{"id":1040},"_4-wrap-it-in-a-regenerator-script-optional",[1042],{"type":47,"value":1043},"4. Wrap it in a regenerator script (optional)",{"type":41,"tag":95,"props":1045,"children":1046},{},[1047,1049,1062,1064,1070,1072,1078],{"type":47,"value":1048},"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":41,"tag":1050,"props":1051,"children":1055},"a",{"href":1052,"rel":1053},"https://github.com/arsalann/data_playground/tree/main/contoso-dbt",[1054],"nofollow",[1056],{"type":41,"tag":60,"props":1057,"children":1059},{"className":1058},[],[1060],{"type":47,"value":1061},"generate_context.sh",{"type":47,"value":1063}," with ",{"type":41,"tag":60,"props":1065,"children":1067},{"className":1066},[],[1068],{"type":47,"value":1069},"--skip-import",{"type":47,"value":1071}," (re-enhance only) and ",{"type":41,"tag":60,"props":1073,"children":1075},{"className":1074},[],[1076],{"type":47,"value":1077},"--skip-enhance",{"type":47,"value":1079}," (fast structure refresh) flags. A minimal version:",{"type":41,"tag":171,"props":1081,"children":1083},{"className":173,"code":1082,"language":175,"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",[1084],{"type":41,"tag":60,"props":1085,"children":1086},{"__ignoreMap":7},[1087,1096,1114,1123,1141,1158,1165,1187,1214,1231,1248,1264,1280,1298,1305,1341,1348,1380],{"type":41,"tag":181,"props":1088,"children":1089},{"class":183,"line":184},[1090],{"type":41,"tag":181,"props":1091,"children":1093},{"style":1092},"--shiki-default:#6A737D",[1094],{"type":47,"value":1095},"#!/usr/bin/env bash\n",{"type":41,"tag":181,"props":1097,"children":1098},{"class":183,"line":516},[1099,1104,1109],{"type":41,"tag":181,"props":1100,"children":1101},{"style":205},[1102],{"type":47,"value":1103},"set",{"type":41,"tag":181,"props":1105,"children":1106},{"style":205},[1107],{"type":47,"value":1108}," -euo",{"type":41,"tag":181,"props":1110,"children":1111},{"style":194},[1112],{"type":47,"value":1113}," pipefail\n",{"type":41,"tag":181,"props":1115,"children":1116},{"class":183,"line":534},[1117],{"type":41,"tag":181,"props":1118,"children":1120},{"emptyLinePlaceholder":1119},true,[1121],{"type":47,"value":1122},"\n",{"type":41,"tag":181,"props":1124,"children":1125},{"class":183,"line":18},[1126,1131,1136],{"type":41,"tag":181,"props":1127,"children":1128},{"style":505},[1129],{"type":47,"value":1130},"CONFIG",{"type":41,"tag":181,"props":1132,"children":1133},{"style":546},[1134],{"type":47,"value":1135},"=",{"type":41,"tag":181,"props":1137,"children":1138},{"style":194},[1139],{"type":47,"value":1140},"\"context/.bruin.yml\"\n",{"type":41,"tag":181,"props":1142,"children":1143},{"class":183,"line":560},[1144,1149,1153],{"type":41,"tag":181,"props":1145,"children":1146},{"style":505},[1147],{"type":47,"value":1148},"PIPELINE",{"type":41,"tag":181,"props":1150,"children":1151},{"style":546},[1152],{"type":47,"value":1135},{"type":41,"tag":181,"props":1154,"children":1155},{"style":194},[1156],{"type":47,"value":1157},"\"context\"\n",{"type":41,"tag":181,"props":1159,"children":1160},{"class":183,"line":11},[1161],{"type":41,"tag":181,"props":1162,"children":1163},{"emptyLinePlaceholder":1119},[1164],{"type":47,"value":1122},{"type":41,"tag":181,"props":1166,"children":1167},{"class":183,"line":577},[1168,1172,1177,1182],{"type":41,"tag":181,"props":1169,"children":1170},{"style":188},[1171],{"type":47,"value":191},{"type":41,"tag":181,"props":1173,"children":1174},{"style":194},[1175],{"type":47,"value":1176}," import",{"type":41,"tag":181,"props":1178,"children":1179},{"style":194},[1180],{"type":47,"value":1181}," database",{"type":41,"tag":181,"props":1183,"children":1184},{"style":205},[1185],{"type":47,"value":1186}," \\\n",{"type":41,"tag":181,"props":1188,"children":1189},{"class":183,"line":586},[1190,1195,1200,1205,1210],{"type":41,"tag":181,"props":1191,"children":1192},{"style":205},[1193],{"type":47,"value":1194},"  --config-file",{"type":41,"tag":181,"props":1196,"children":1197},{"style":194},[1198],{"type":47,"value":1199}," \"",{"type":41,"tag":181,"props":1201,"children":1202},{"style":505},[1203],{"type":47,"value":1204},"$CONFIG",{"type":41,"tag":181,"props":1206,"children":1207},{"style":194},[1208],{"type":47,"value":1209},"\"",{"type":41,"tag":181,"props":1211,"children":1212},{"style":205},[1213],{"type":47,"value":1186},{"type":41,"tag":181,"props":1215,"children":1216},{"class":183,"line":599},[1217,1222,1227],{"type":41,"tag":181,"props":1218,"children":1219},{"style":205},[1220],{"type":47,"value":1221},"  --connection",{"type":41,"tag":181,"props":1223,"children":1224},{"style":194},[1225],{"type":47,"value":1226}," contoso_dbt_bq",{"type":41,"tag":181,"props":1228,"children":1229},{"style":205},[1230],{"type":47,"value":1186},{"type":41,"tag":181,"props":1232,"children":1233},{"class":183,"line":613},[1234,1239,1244],{"type":41,"tag":181,"props":1235,"children":1236},{"style":205},[1237],{"type":47,"value":1238},"  --schemas",{"type":41,"tag":181,"props":1240,"children":1241},{"style":194},[1242],{"type":47,"value":1243}," contoso_dbt_raw",{"type":41,"tag":181,"props":1245,"children":1246},{"style":205},[1247],{"type":47,"value":1186},{"type":41,"tag":181,"props":1249,"children":1250},{"class":183,"line":626},[1251,1255,1260],{"type":41,"tag":181,"props":1252,"children":1253},{"style":205},[1254],{"type":47,"value":1238},{"type":41,"tag":181,"props":1256,"children":1257},{"style":194},[1258],{"type":47,"value":1259}," contoso_dbt_staging",{"type":41,"tag":181,"props":1261,"children":1262},{"style":205},[1263],{"type":47,"value":1186},{"type":41,"tag":181,"props":1265,"children":1266},{"class":183,"line":639},[1267,1271,1276],{"type":41,"tag":181,"props":1268,"children":1269},{"style":205},[1270],{"type":47,"value":1238},{"type":41,"tag":181,"props":1272,"children":1273},{"style":194},[1274],{"type":47,"value":1275}," contoso_dbt_reports",{"type":41,"tag":181,"props":1277,"children":1278},{"style":205},[1279],{"type":47,"value":1186},{"type":41,"tag":181,"props":1281,"children":1282},{"class":183,"line":652},[1283,1288,1293],{"type":41,"tag":181,"props":1284,"children":1285},{"style":194},[1286],{"type":47,"value":1287},"  \"",{"type":41,"tag":181,"props":1289,"children":1290},{"style":505},[1291],{"type":47,"value":1292},"$PIPELINE",{"type":41,"tag":181,"props":1294,"children":1295},{"style":194},[1296],{"type":47,"value":1297},"\"\n",{"type":41,"tag":181,"props":1299,"children":1300},{"class":183,"line":673},[1301],{"type":41,"tag":181,"props":1302,"children":1303},{"emptyLinePlaceholder":1119},[1304],{"type":47,"value":1122},{"type":41,"tag":181,"props":1306,"children":1307},{"class":183,"line":691},[1308,1313,1317,1321,1326,1331,1336],{"type":41,"tag":181,"props":1309,"children":1310},{"style":188},[1311],{"type":47,"value":1312},"find",{"type":41,"tag":181,"props":1314,"children":1315},{"style":194},[1316],{"type":47,"value":1199},{"type":41,"tag":181,"props":1318,"children":1319},{"style":505},[1320],{"type":47,"value":1292},{"type":41,"tag":181,"props":1322,"children":1323},{"style":194},[1324],{"type":47,"value":1325},"/assets\"",{"type":41,"tag":181,"props":1327,"children":1328},{"style":205},[1329],{"type":47,"value":1330}," -name",{"type":41,"tag":181,"props":1332,"children":1333},{"style":194},[1334],{"type":47,"value":1335}," \"_dlt_*.asset.yml\"",{"type":41,"tag":181,"props":1337,"children":1338},{"style":205},[1339],{"type":47,"value":1340}," -delete\n",{"type":41,"tag":181,"props":1342,"children":1343},{"class":183,"line":709},[1344],{"type":41,"tag":181,"props":1345,"children":1346},{"emptyLinePlaceholder":1119},[1347],{"type":47,"value":1122},{"type":41,"tag":181,"props":1349,"children":1350},{"class":183,"line":722},[1351,1355,1359,1363,1367,1371,1375],{"type":41,"tag":181,"props":1352,"children":1353},{"style":188},[1354],{"type":47,"value":191},{"type":41,"tag":181,"props":1356,"children":1357},{"style":194},[1358],{"type":47,"value":197},{"type":41,"tag":181,"props":1360,"children":1361},{"style":194},[1362],{"type":47,"value":202},{"type":41,"tag":181,"props":1364,"children":1365},{"style":205},[1366],{"type":47,"value":208},{"type":41,"tag":181,"props":1368,"children":1369},{"style":194},[1370],{"type":47,"value":1199},{"type":41,"tag":181,"props":1372,"children":1373},{"style":505},[1374],{"type":47,"value":1292},{"type":41,"tag":181,"props":1376,"children":1377},{"style":194},[1378],{"type":47,"value":1379},"/assets\"\n",{"type":41,"tag":181,"props":1381,"children":1382},{"class":183,"line":744},[1383,1387,1391,1395,1399,1403,1407,1411,1415],{"type":41,"tag":181,"props":1384,"children":1385},{"style":188},[1386],{"type":47,"value":191},{"type":41,"tag":181,"props":1388,"children":1389},{"style":194},[1390],{"type":47,"value":1002},{"type":41,"tag":181,"props":1392,"children":1393},{"style":205},[1394],{"type":47,"value":1007},{"type":41,"tag":181,"props":1396,"children":1397},{"style":194},[1398],{"type":47,"value":1199},{"type":41,"tag":181,"props":1400,"children":1401},{"style":505},[1402],{"type":47,"value":1204},{"type":41,"tag":181,"props":1404,"children":1405},{"style":194},[1406],{"type":47,"value":1209},{"type":41,"tag":181,"props":1408,"children":1409},{"style":194},[1410],{"type":47,"value":1199},{"type":41,"tag":181,"props":1412,"children":1413},{"style":505},[1414],{"type":47,"value":1292},{"type":41,"tag":181,"props":1416,"children":1417},{"style":194},[1418],{"type":47,"value":1297},{"type":41,"tag":95,"props":1420,"children":1421},{},[1422,1424,1429],{"type":47,"value":1423},"Save it as ",{"type":41,"tag":60,"props":1425,"children":1427},{"className":1426},[],[1428],{"type":47,"value":1061},{"type":47,"value":1430}," 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":41,"tag":351,"props":1432,"children":1433},{},[1434],{"type":41,"tag":95,"props":1435,"children":1436},{},[1437,1442,1444,1450,1452,1458],{"type":41,"tag":229,"props":1438,"children":1439},{},[1440],{"type":47,"value":1441},"Don't hand-edit generated YAMLs.",{"type":47,"value":1443}," They're regenerable artifacts. If a description is consistently wrong, fix it upstream — in the dbt model's ",{"type":41,"tag":60,"props":1445,"children":1447},{"className":1446},[],[1448],{"type":47,"value":1449},"schema.yml",{"type":47,"value":1451}," or ",{"type":41,"tag":60,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":47,"value":1457},"description: ",{"type":47,"value":1459}," block — and the next import + enhance will pick the change up.",{"type":41,"tag":42,"props":1461,"children":1463},{"id":1462},"what-just-happened",[1464],{"type":47,"value":1465},"What just happened",{"type":41,"tag":95,"props":1467,"children":1468},{},[1469,1471,1476,1478,1483],{"type":47,"value":1470},"Your ",{"type":41,"tag":60,"props":1472,"children":1474},{"className":1473},[],[1475],{"type":47,"value":73},{"type":47,"value":1477}," 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":41,"tag":101,"props":1479,"children":1480},{},[1481],{"type":47,"value":1482},"except",{"type":47,"value":1484}," the wiring that lets it actually call out to all of this. That's the next step.",{"type":41,"tag":1486,"props":1487,"children":1488},"style",{},[1489],{"type":47,"value":1490},"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":516,"depth":516,"links":1492},[1493,1494,1495,1501],{"id":44,"depth":516,"text":48},{"id":90,"depth":516,"text":93},{"id":154,"depth":516,"text":157,"children":1496},[1497,1498,1499,1500],{"id":161,"depth":534,"text":164},{"id":451,"depth":534,"text":454},{"id":980,"depth":534,"text":983},{"id":1040,"depth":534,"text":1043},{"id":1462,"depth":516,"text":1465},"markdown","content:tutorials:dbt-bruin-analyst:enhance-and-validate.md","content","tutorials/dbt-bruin-analyst/enhance-and-validate.md","tutorials/dbt-bruin-analyst/enhance-and-validate","md",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"readingTime":11,"category":12,"tags":1509,"difficulty":17,"module":5,"step":18,"journeys":1510,"learnMore":1511,"stepGif":32,"author":1515,"body":1516,"_type":1502,"_id":1503,"_source":1504,"_file":1505,"_stem":1506,"_extension":1507},[14,15,16],[20,21],[1512,1513,1514],{"label":24,"url":25},{"label":27,"url":28},{"label":30,"url":31},{"name":34,"role":35,"image":36},{"type":38,"children":1517,"toc":2716},[1518,1522,1551,1555,1582,1598,1602,1606,1610,1639,1643,1716,1744,1761,1790,1825,1829,1833,1850,1854,2244,2248,2277,2281,2310,2314,2322,2326,2330,2356,2660,2670,2693,2697,2712],{"type":41,"tag":42,"props":1519,"children":1520},{"id":44},[1521],{"type":47,"value":48},{"type":41,"tag":50,"props":1523,"children":1524},{},[1525,1541],{"type":41,"tag":54,"props":1526,"children":1527},{},[1528,1529,1534,1535,1540],{"type":47,"value":58},{"type":41,"tag":60,"props":1530,"children":1532},{"className":1531},[],[1533],{"type":47,"value":65},{"type":47,"value":67},{"type":41,"tag":60,"props":1536,"children":1538},{"className":1537},[],[1539],{"type":47,"value":73},{"type":47,"value":75},{"type":41,"tag":54,"props":1542,"children":1543},{},[1544,1545,1550],{"type":47,"value":58},{"type":41,"tag":60,"props":1546,"children":1548},{"className":1547},[],[1549],{"type":47,"value":85},{"type":47,"value":87},{"type":41,"tag":42,"props":1552,"children":1553},{"id":90},[1554],{"type":47,"value":93},{"type":41,"tag":95,"props":1556,"children":1557},{},[1558,1559,1563,1564,1569,1570,1575,1576,1581],{"type":47,"value":99},{"type":41,"tag":101,"props":1560,"children":1561},{},[1562],{"type":47,"value":105},{"type":47,"value":107},{"type":41,"tag":60,"props":1565,"children":1567},{"className":1566},[],[1568],{"type":47,"value":113},{"type":47,"value":115},{"type":41,"tag":60,"props":1571,"children":1573},{"className":1572},[],[1574],{"type":47,"value":121},{"type":47,"value":123},{"type":41,"tag":60,"props":1577,"children":1579},{"className":1578},[],[1580],{"type":47,"value":129},{"type":47,"value":131},{"type":41,"tag":95,"props":1583,"children":1584},{},[1585,1586,1591,1592,1597],{"type":47,"value":136},{"type":41,"tag":60,"props":1587,"children":1589},{"className":1588},[],[1590],{"type":47,"value":142},{"type":47,"value":144},{"type":41,"tag":60,"props":1593,"children":1595},{"className":1594},[],[1596],{"type":47,"value":85},{"type":47,"value":151},{"type":41,"tag":42,"props":1599,"children":1600},{"id":154},[1601],{"type":47,"value":157},{"type":41,"tag":159,"props":1603,"children":1604},{"id":161},[1605],{"type":47,"value":164},{"type":41,"tag":95,"props":1607,"children":1608},{},[1609],{"type":47,"value":169},{"type":41,"tag":171,"props":1611,"children":1612},{"className":173,"code":174,"language":175,"meta":7,"style":7},[1613],{"type":41,"tag":60,"props":1614,"children":1615},{"__ignoreMap":7},[1616],{"type":41,"tag":181,"props":1617,"children":1618},{"class":183,"line":184},[1619,1623,1627,1631,1635],{"type":41,"tag":181,"props":1620,"children":1621},{"style":188},[1622],{"type":47,"value":191},{"type":41,"tag":181,"props":1624,"children":1625},{"style":194},[1626],{"type":47,"value":197},{"type":41,"tag":181,"props":1628,"children":1629},{"style":194},[1630],{"type":47,"value":202},{"type":41,"tag":181,"props":1632,"children":1633},{"style":205},[1634],{"type":47,"value":208},{"type":41,"tag":181,"props":1636,"children":1637},{"style":194},[1638],{"type":47,"value":213},{"type":41,"tag":95,"props":1640,"children":1641},{},[1642],{"type":47,"value":218},{"type":41,"tag":220,"props":1644,"children":1645},{},[1646,1655,1681,1690],{"type":41,"tag":54,"props":1647,"children":1648},{},[1649,1650,1654],{"type":47,"value":227},{"type":41,"tag":229,"props":1651,"children":1652},{},[1653],{"type":47,"value":233},{"type":47,"value":235},{"type":41,"tag":54,"props":1656,"children":1657},{},[1658,1659,1663,1664,1669,1670,1675,1676],{"type":47,"value":240},{"type":41,"tag":229,"props":1660,"children":1661},{},[1662],{"type":47,"value":245},{"type":47,"value":247},{"type":41,"tag":60,"props":1665,"children":1667},{"className":1666},[],[1668],{"type":47,"value":253},{"type":47,"value":255},{"type":41,"tag":60,"props":1671,"children":1673},{"className":1672},[],[1674],{"type":47,"value":261},{"type":47,"value":255},{"type":41,"tag":60,"props":1677,"children":1679},{"className":1678},[],[1680],{"type":47,"value":268},{"type":41,"tag":54,"props":1682,"children":1683},{},[1684,1685,1689],{"type":47,"value":273},{"type":41,"tag":229,"props":1686,"children":1687},{},[1688],{"type":47,"value":278},{"type":47,"value":280},{"type":41,"tag":54,"props":1691,"children":1692},{},[1693,1697,1698,1703,1704,1709,1710,1715],{"type":41,"tag":229,"props":1694,"children":1695},{},[1696],{"type":47,"value":288},{"type":47,"value":290},{"type":41,"tag":60,"props":1699,"children":1701},{"className":1700},[],[1702],{"type":47,"value":296},{"type":47,"value":298},{"type":41,"tag":60,"props":1705,"children":1707},{"className":1706},[],[1708],{"type":47,"value":304},{"type":47,"value":306},{"type":41,"tag":60,"props":1711,"children":1713},{"className":1712},[],[1714],{"type":47,"value":312},{"type":47,"value":314},{"type":41,"tag":95,"props":1717,"children":1718},{},[1719,1720,1725,1726,1731,1732,1737,1738,1743],{"type":47,"value":319},{"type":41,"tag":60,"props":1721,"children":1723},{"className":1722},[],[1724],{"type":47,"value":325},{"type":47,"value":255},{"type":41,"tag":60,"props":1727,"children":1729},{"className":1728},[],[1730],{"type":47,"value":332},{"type":47,"value":255},{"type":41,"tag":60,"props":1733,"children":1735},{"className":1734},[],[1736],{"type":47,"value":339},{"type":47,"value":341},{"type":41,"tag":60,"props":1739,"children":1741},{"className":1740},[],[1742],{"type":47,"value":347},{"type":47,"value":349},{"type":41,"tag":351,"props":1745,"children":1746},{},[1747],{"type":41,"tag":95,"props":1748,"children":1749},{},[1750,1754,1755,1760],{"type":41,"tag":229,"props":1751,"children":1752},{},[1753],{"type":47,"value":361},{"type":47,"value":363},{"type":41,"tag":60,"props":1756,"children":1758},{"className":1757},[],[1759],{"type":47,"value":369},{"type":47,"value":371},{"type":41,"tag":351,"props":1762,"children":1763},{},[1764],{"type":41,"tag":95,"props":1765,"children":1766},{},[1767,1783,1784,1789],{"type":41,"tag":229,"props":1768,"children":1769},{},[1770,1771,1776,1777,1782],{"type":47,"value":382},{"type":41,"tag":60,"props":1772,"children":1774},{"className":1773},[],[1775],{"type":47,"value":142},{"type":47,"value":389},{"type":41,"tag":60,"props":1778,"children":1780},{"className":1779},[],[1781],{"type":47,"value":395},{"type":47,"value":349},{"type":47,"value":398},{"type":41,"tag":60,"props":1785,"children":1787},{"className":1786},[],[1788],{"type":47,"value":404},{"type":47,"value":406},{"type":41,"tag":351,"props":1791,"children":1792},{},[1793],{"type":41,"tag":95,"props":1794,"children":1795},{},[1796,1800,1801,1806,1807,1812,1813,1818,1819,1824],{"type":41,"tag":229,"props":1797,"children":1798},{},[1799],{"type":47,"value":417},{"type":47,"value":419},{"type":41,"tag":60,"props":1802,"children":1804},{"className":1803},[],[1805],{"type":47,"value":142},{"type":47,"value":426},{"type":41,"tag":60,"props":1808,"children":1810},{"className":1809},[],[1811],{"type":47,"value":432},{"type":47,"value":434},{"type":41,"tag":60,"props":1814,"children":1816},{"className":1815},[],[1817],{"type":47,"value":85},{"type":47,"value":441},{"type":41,"tag":60,"props":1820,"children":1822},{"className":1821},[],[1823],{"type":47,"value":447},{"type":47,"value":349},{"type":41,"tag":159,"props":1826,"children":1827},{"id":451},[1828],{"type":47,"value":454},{"type":41,"tag":95,"props":1830,"children":1831},{},[1832],{"type":47,"value":459},{"type":41,"tag":171,"props":1834,"children":1835},{"className":173,"code":462,"language":175,"meta":7,"style":7},[1836],{"type":41,"tag":60,"props":1837,"children":1838},{"__ignoreMap":7},[1839],{"type":41,"tag":181,"props":1840,"children":1841},{"class":183,"line":184},[1842,1846],{"type":41,"tag":181,"props":1843,"children":1844},{"style":188},[1845],{"type":47,"value":474},{"type":41,"tag":181,"props":1847,"children":1848},{"style":194},[1849],{"type":47,"value":479},{"type":41,"tag":95,"props":1851,"children":1852},{},[1853],{"type":47,"value":484},{"type":41,"tag":171,"props":1855,"children":1856},{"className":487,"code":488,"language":489,"meta":7,"style":7},[1857],{"type":41,"tag":60,"props":1858,"children":1859},{"__ignoreMap":7},[1860,1875,1890,1905,1912,1919,1926,1933,1944,1955,1966,1977,1988,2007,2022,2037,2048,2067,2086,2101,2116,2127,2146,2165,2180,2195,2214,2229],{"type":41,"tag":181,"props":1861,"children":1862},{"class":183,"line":184},[1863,1867,1871],{"type":41,"tag":181,"props":1864,"children":1865},{"style":499},[1866],{"type":47,"value":502},{"type":41,"tag":181,"props":1868,"children":1869},{"style":505},[1870],{"type":47,"value":508},{"type":41,"tag":181,"props":1872,"children":1873},{"style":194},[1874],{"type":47,"value":513},{"type":41,"tag":181,"props":1876,"children":1877},{"class":183,"line":516},[1878,1882,1886],{"type":41,"tag":181,"props":1879,"children":1880},{"style":499},[1881],{"type":47,"value":522},{"type":41,"tag":181,"props":1883,"children":1884},{"style":505},[1885],{"type":47,"value":508},{"type":41,"tag":181,"props":1887,"children":1888},{"style":194},[1889],{"type":47,"value":531},{"type":41,"tag":181,"props":1891,"children":1892},{"class":183,"line":534},[1893,1897,1901],{"type":41,"tag":181,"props":1894,"children":1895},{"style":499},[1896],{"type":47,"value":233},{"type":41,"tag":181,"props":1898,"children":1899},{"style":505},[1900],{"type":47,"value":508},{"type":41,"tag":181,"props":1902,"children":1903},{"style":546},[1904],{"type":47,"value":549},{"type":41,"tag":181,"props":1906,"children":1907},{"class":183,"line":18},[1908],{"type":41,"tag":181,"props":1909,"children":1910},{"style":194},[1911],{"type":47,"value":557},{"type":41,"tag":181,"props":1913,"children":1914},{"class":183,"line":560},[1915],{"type":41,"tag":181,"props":1916,"children":1917},{"style":194},[1918],{"type":47,"value":566},{"type":41,"tag":181,"props":1920,"children":1921},{"class":183,"line":11},[1922],{"type":41,"tag":181,"props":1923,"children":1924},{"style":194},[1925],{"type":47,"value":574},{"type":41,"tag":181,"props":1927,"children":1928},{"class":183,"line":577},[1929],{"type":41,"tag":181,"props":1930,"children":1931},{"style":194},[1932],{"type":47,"value":583},{"type":41,"tag":181,"props":1934,"children":1935},{"class":183,"line":586},[1936,1940],{"type":41,"tag":181,"props":1937,"children":1938},{"style":499},[1939],{"type":47,"value":245},{"type":41,"tag":181,"props":1941,"children":1942},{"style":505},[1943],{"type":47,"value":596},{"type":41,"tag":181,"props":1945,"children":1946},{"class":183,"line":599},[1947,1951],{"type":41,"tag":181,"props":1948,"children":1949},{"style":505},[1950],{"type":47,"value":605},{"type":41,"tag":181,"props":1952,"children":1953},{"style":194},[1954],{"type":47,"value":610},{"type":41,"tag":181,"props":1956,"children":1957},{"class":183,"line":613},[1958,1962],{"type":41,"tag":181,"props":1959,"children":1960},{"style":505},[1961],{"type":47,"value":605},{"type":41,"tag":181,"props":1963,"children":1964},{"style":194},[1965],{"type":47,"value":623},{"type":41,"tag":181,"props":1967,"children":1968},{"class":183,"line":626},[1969,1973],{"type":41,"tag":181,"props":1970,"children":1971},{"style":505},[1972],{"type":47,"value":605},{"type":41,"tag":181,"props":1974,"children":1975},{"style":194},[1976],{"type":47,"value":636},{"type":41,"tag":181,"props":1978,"children":1979},{"class":183,"line":639},[1980,1984],{"type":41,"tag":181,"props":1981,"children":1982},{"style":499},[1983],{"type":47,"value":645},{"type":41,"tag":181,"props":1985,"children":1986},{"style":505},[1987],{"type":47,"value":596},{"type":41,"tag":181,"props":1989,"children":1990},{"class":183,"line":652},[1991,1995,1999,2003],{"type":41,"tag":181,"props":1992,"children":1993},{"style":505},[1994],{"type":47,"value":605},{"type":41,"tag":181,"props":1996,"children":1997},{"style":499},[1998],{"type":47,"value":502},{"type":41,"tag":181,"props":2000,"children":2001},{"style":505},[2002],{"type":47,"value":508},{"type":41,"tag":181,"props":2004,"children":2005},{"style":194},[2006],{"type":47,"value":670},{"type":41,"tag":181,"props":2008,"children":2009},{"class":183,"line":673},[2010,2014,2018],{"type":41,"tag":181,"props":2011,"children":2012},{"style":499},[2013],{"type":47,"value":679},{"type":41,"tag":181,"props":2015,"children":2016},{"style":505},[2017],{"type":47,"value":508},{"type":41,"tag":181,"props":2019,"children":2020},{"style":194},[2021],{"type":47,"value":688},{"type":41,"tag":181,"props":2023,"children":2024},{"class":183,"line":691},[2025,2029,2033],{"type":41,"tag":181,"props":2026,"children":2027},{"style":499},[2028],{"type":47,"value":697},{"type":41,"tag":181,"props":2030,"children":2031},{"style":505},[2032],{"type":47,"value":508},{"type":41,"tag":181,"props":2034,"children":2035},{"style":194},[2036],{"type":47,"value":706},{"type":41,"tag":181,"props":2038,"children":2039},{"class":183,"line":709},[2040,2044],{"type":41,"tag":181,"props":2041,"children":2042},{"style":499},[2043],{"type":47,"value":715},{"type":41,"tag":181,"props":2045,"children":2046},{"style":505},[2047],{"type":47,"value":596},{"type":41,"tag":181,"props":2049,"children":2050},{"class":183,"line":722},[2051,2055,2059,2063],{"type":41,"tag":181,"props":2052,"children":2053},{"style":505},[2054],{"type":47,"value":728},{"type":41,"tag":181,"props":2056,"children":2057},{"style":499},[2058],{"type":47,"value":502},{"type":41,"tag":181,"props":2060,"children":2061},{"style":505},[2062],{"type":47,"value":508},{"type":41,"tag":181,"props":2064,"children":2065},{"style":194},[2066],{"type":47,"value":741},{"type":41,"tag":181,"props":2068,"children":2069},{"class":183,"line":744},[2070,2074,2078,2082],{"type":41,"tag":181,"props":2071,"children":2072},{"style":505},[2073],{"type":47,"value":605},{"type":41,"tag":181,"props":2075,"children":2076},{"style":499},[2077],{"type":47,"value":502},{"type":41,"tag":181,"props":2079,"children":2080},{"style":505},[2081],{"type":47,"value":508},{"type":41,"tag":181,"props":2083,"children":2084},{"style":194},[2085],{"type":47,"value":762},{"type":41,"tag":181,"props":2087,"children":2088},{"class":183,"line":765},[2089,2093,2097],{"type":41,"tag":181,"props":2090,"children":2091},{"style":499},[2092],{"type":47,"value":679},{"type":41,"tag":181,"props":2094,"children":2095},{"style":505},[2096],{"type":47,"value":508},{"type":41,"tag":181,"props":2098,"children":2099},{"style":194},[2100],{"type":47,"value":688},{"type":41,"tag":181,"props":2102,"children":2103},{"class":183,"line":781},[2104,2108,2112],{"type":41,"tag":181,"props":2105,"children":2106},{"style":499},[2107],{"type":47,"value":697},{"type":41,"tag":181,"props":2109,"children":2110},{"style":505},[2111],{"type":47,"value":508},{"type":41,"tag":181,"props":2113,"children":2114},{"style":194},[2115],{"type":47,"value":795},{"type":41,"tag":181,"props":2117,"children":2118},{"class":183,"line":798},[2119,2123],{"type":41,"tag":181,"props":2120,"children":2121},{"style":499},[2122],{"type":47,"value":715},{"type":41,"tag":181,"props":2124,"children":2125},{"style":505},[2126],{"type":47,"value":596},{"type":41,"tag":181,"props":2128,"children":2129},{"class":183,"line":810},[2130,2134,2138,2142],{"type":41,"tag":181,"props":2131,"children":2132},{"style":505},[2133],{"type":47,"value":728},{"type":41,"tag":181,"props":2135,"children":2136},{"style":499},[2137],{"type":47,"value":502},{"type":41,"tag":181,"props":2139,"children":2140},{"style":505},[2141],{"type":47,"value":508},{"type":41,"tag":181,"props":2143,"children":2144},{"style":194},[2145],{"type":47,"value":741},{"type":41,"tag":181,"props":2147,"children":2148},{"class":183,"line":830},[2149,2153,2157,2161],{"type":41,"tag":181,"props":2150,"children":2151},{"style":505},[2152],{"type":47,"value":605},{"type":41,"tag":181,"props":2154,"children":2155},{"style":499},[2156],{"type":47,"value":502},{"type":41,"tag":181,"props":2158,"children":2159},{"style":505},[2160],{"type":47,"value":508},{"type":41,"tag":181,"props":2162,"children":2163},{"style":194},[2164],{"type":47,"value":848},{"type":41,"tag":181,"props":2166,"children":2167},{"class":183,"line":851},[2168,2172,2176],{"type":41,"tag":181,"props":2169,"children":2170},{"style":499},[2171],{"type":47,"value":679},{"type":41,"tag":181,"props":2173,"children":2174},{"style":505},[2175],{"type":47,"value":508},{"type":41,"tag":181,"props":2177,"children":2178},{"style":194},[2179],{"type":47,"value":865},{"type":41,"tag":181,"props":2181,"children":2182},{"class":183,"line":868},[2183,2187,2191],{"type":41,"tag":181,"props":2184,"children":2185},{"style":499},[2186],{"type":47,"value":697},{"type":41,"tag":181,"props":2188,"children":2189},{"style":505},[2190],{"type":47,"value":508},{"type":41,"tag":181,"props":2192,"children":2193},{"style":194},[2194],{"type":47,"value":882},{"type":41,"tag":181,"props":2196,"children":2197},{"class":183,"line":885},[2198,2202,2206,2210],{"type":41,"tag":181,"props":2199,"children":2200},{"style":505},[2201],{"type":47,"value":605},{"type":41,"tag":181,"props":2203,"children":2204},{"style":499},[2205],{"type":47,"value":502},{"type":41,"tag":181,"props":2207,"children":2208},{"style":505},[2209],{"type":47,"value":508},{"type":41,"tag":181,"props":2211,"children":2212},{"style":194},[2213],{"type":47,"value":903},{"type":41,"tag":181,"props":2215,"children":2216},{"class":183,"line":906},[2217,2221,2225],{"type":41,"tag":181,"props":2218,"children":2219},{"style":499},[2220],{"type":47,"value":679},{"type":41,"tag":181,"props":2222,"children":2223},{"style":505},[2224],{"type":47,"value":508},{"type":41,"tag":181,"props":2226,"children":2227},{"style":194},[2228],{"type":47,"value":920},{"type":41,"tag":181,"props":2230,"children":2231},{"class":183,"line":923},[2232,2236,2240],{"type":41,"tag":181,"props":2233,"children":2234},{"style":499},[2235],{"type":47,"value":697},{"type":41,"tag":181,"props":2237,"children":2238},{"style":505},[2239],{"type":47,"value":508},{"type":41,"tag":181,"props":2241,"children":2242},{"style":194},[2243],{"type":47,"value":937},{"type":41,"tag":95,"props":2245,"children":2246},{},[2247],{"type":47,"value":942},{"type":41,"tag":351,"props":2249,"children":2250},{},[2251],{"type":41,"tag":95,"props":2252,"children":2253},{},[2254,2264,2265,2270,2271,2276],{"type":41,"tag":229,"props":2255,"children":2256},{},[2257,2258,2263],{"type":47,"value":953},{"type":41,"tag":60,"props":2259,"children":2261},{"className":2260},[],[2262],{"type":47,"value":304},{"type":47,"value":960},{"type":47,"value":962},{"type":41,"tag":60,"props":2266,"children":2268},{"className":2267},[],[2269],{"type":47,"value":304},{"type":47,"value":969},{"type":41,"tag":60,"props":2272,"children":2274},{"className":2273},[],[2275],{"type":47,"value":975},{"type":47,"value":977},{"type":41,"tag":159,"props":2278,"children":2279},{"id":980},[2280],{"type":47,"value":983},{"type":41,"tag":171,"props":2282,"children":2283},{"className":173,"code":986,"language":175,"meta":7,"style":7},[2284],{"type":41,"tag":60,"props":2285,"children":2286},{"__ignoreMap":7},[2287],{"type":41,"tag":181,"props":2288,"children":2289},{"class":183,"line":184},[2290,2294,2298,2302,2306],{"type":41,"tag":181,"props":2291,"children":2292},{"style":188},[2293],{"type":47,"value":191},{"type":41,"tag":181,"props":2295,"children":2296},{"style":194},[2297],{"type":47,"value":1002},{"type":41,"tag":181,"props":2299,"children":2300},{"style":205},[2301],{"type":47,"value":1007},{"type":41,"tag":181,"props":2303,"children":2304},{"style":194},[2305],{"type":47,"value":1012},{"type":41,"tag":181,"props":2307,"children":2308},{"style":194},[2309],{"type":47,"value":1017},{"type":41,"tag":95,"props":2311,"children":2312},{},[2313],{"type":47,"value":1022},{"type":41,"tag":171,"props":2315,"children":2317},{"className":2316,"code":1027,"language":47},[1026],[2318],{"type":41,"tag":60,"props":2319,"children":2320},{"__ignoreMap":7},[2321],{"type":47,"value":1027},{"type":41,"tag":95,"props":2323,"children":2324},{},[2325],{"type":47,"value":1037},{"type":41,"tag":159,"props":2327,"children":2328},{"id":1040},[2329],{"type":47,"value":1043},{"type":41,"tag":95,"props":2331,"children":2332},{},[2333,2334,2343,2344,2349,2350,2355],{"type":47,"value":1048},{"type":41,"tag":1050,"props":2335,"children":2337},{"href":1052,"rel":2336},[1054],[2338],{"type":41,"tag":60,"props":2339,"children":2341},{"className":2340},[],[2342],{"type":47,"value":1061},{"type":47,"value":1063},{"type":41,"tag":60,"props":2345,"children":2347},{"className":2346},[],[2348],{"type":47,"value":1069},{"type":47,"value":1071},{"type":41,"tag":60,"props":2351,"children":2353},{"className":2352},[],[2354],{"type":47,"value":1077},{"type":47,"value":1079},{"type":41,"tag":171,"props":2357,"children":2358},{"className":173,"code":1082,"language":175,"meta":7,"style":7},[2359],{"type":41,"tag":60,"props":2360,"children":2361},{"__ignoreMap":7},[2362,2369,2384,2391,2406,2421,2428,2447,2470,2485,2500,2515,2530,2545,2552,2583,2590,2621],{"type":41,"tag":181,"props":2363,"children":2364},{"class":183,"line":184},[2365],{"type":41,"tag":181,"props":2366,"children":2367},{"style":1092},[2368],{"type":47,"value":1095},{"type":41,"tag":181,"props":2370,"children":2371},{"class":183,"line":516},[2372,2376,2380],{"type":41,"tag":181,"props":2373,"children":2374},{"style":205},[2375],{"type":47,"value":1103},{"type":41,"tag":181,"props":2377,"children":2378},{"style":205},[2379],{"type":47,"value":1108},{"type":41,"tag":181,"props":2381,"children":2382},{"style":194},[2383],{"type":47,"value":1113},{"type":41,"tag":181,"props":2385,"children":2386},{"class":183,"line":534},[2387],{"type":41,"tag":181,"props":2388,"children":2389},{"emptyLinePlaceholder":1119},[2390],{"type":47,"value":1122},{"type":41,"tag":181,"props":2392,"children":2393},{"class":183,"line":18},[2394,2398,2402],{"type":41,"tag":181,"props":2395,"children":2396},{"style":505},[2397],{"type":47,"value":1130},{"type":41,"tag":181,"props":2399,"children":2400},{"style":546},[2401],{"type":47,"value":1135},{"type":41,"tag":181,"props":2403,"children":2404},{"style":194},[2405],{"type":47,"value":1140},{"type":41,"tag":181,"props":2407,"children":2408},{"class":183,"line":560},[2409,2413,2417],{"type":41,"tag":181,"props":2410,"children":2411},{"style":505},[2412],{"type":47,"value":1148},{"type":41,"tag":181,"props":2414,"children":2415},{"style":546},[2416],{"type":47,"value":1135},{"type":41,"tag":181,"props":2418,"children":2419},{"style":194},[2420],{"type":47,"value":1157},{"type":41,"tag":181,"props":2422,"children":2423},{"class":183,"line":11},[2424],{"type":41,"tag":181,"props":2425,"children":2426},{"emptyLinePlaceholder":1119},[2427],{"type":47,"value":1122},{"type":41,"tag":181,"props":2429,"children":2430},{"class":183,"line":577},[2431,2435,2439,2443],{"type":41,"tag":181,"props":2432,"children":2433},{"style":188},[2434],{"type":47,"value":191},{"type":41,"tag":181,"props":2436,"children":2437},{"style":194},[2438],{"type":47,"value":1176},{"type":41,"tag":181,"props":2440,"children":2441},{"style":194},[2442],{"type":47,"value":1181},{"type":41,"tag":181,"props":2444,"children":2445},{"style":205},[2446],{"type":47,"value":1186},{"type":41,"tag":181,"props":2448,"children":2449},{"class":183,"line":586},[2450,2454,2458,2462,2466],{"type":41,"tag":181,"props":2451,"children":2452},{"style":205},[2453],{"type":47,"value":1194},{"type":41,"tag":181,"props":2455,"children":2456},{"style":194},[2457],{"type":47,"value":1199},{"type":41,"tag":181,"props":2459,"children":2460},{"style":505},[2461],{"type":47,"value":1204},{"type":41,"tag":181,"props":2463,"children":2464},{"style":194},[2465],{"type":47,"value":1209},{"type":41,"tag":181,"props":2467,"children":2468},{"style":205},[2469],{"type":47,"value":1186},{"type":41,"tag":181,"props":2471,"children":2472},{"class":183,"line":599},[2473,2477,2481],{"type":41,"tag":181,"props":2474,"children":2475},{"style":205},[2476],{"type":47,"value":1221},{"type":41,"tag":181,"props":2478,"children":2479},{"style":194},[2480],{"type":47,"value":1226},{"type":41,"tag":181,"props":2482,"children":2483},{"style":205},[2484],{"type":47,"value":1186},{"type":41,"tag":181,"props":2486,"children":2487},{"class":183,"line":613},[2488,2492,2496],{"type":41,"tag":181,"props":2489,"children":2490},{"style":205},[2491],{"type":47,"value":1238},{"type":41,"tag":181,"props":2493,"children":2494},{"style":194},[2495],{"type":47,"value":1243},{"type":41,"tag":181,"props":2497,"children":2498},{"style":205},[2499],{"type":47,"value":1186},{"type":41,"tag":181,"props":2501,"children":2502},{"class":183,"line":626},[2503,2507,2511],{"type":41,"tag":181,"props":2504,"children":2505},{"style":205},[2506],{"type":47,"value":1238},{"type":41,"tag":181,"props":2508,"children":2509},{"style":194},[2510],{"type":47,"value":1259},{"type":41,"tag":181,"props":2512,"children":2513},{"style":205},[2514],{"type":47,"value":1186},{"type":41,"tag":181,"props":2516,"children":2517},{"class":183,"line":639},[2518,2522,2526],{"type":41,"tag":181,"props":2519,"children":2520},{"style":205},[2521],{"type":47,"value":1238},{"type":41,"tag":181,"props":2523,"children":2524},{"style":194},[2525],{"type":47,"value":1275},{"type":41,"tag":181,"props":2527,"children":2528},{"style":205},[2529],{"type":47,"value":1186},{"type":41,"tag":181,"props":2531,"children":2532},{"class":183,"line":652},[2533,2537,2541],{"type":41,"tag":181,"props":2534,"children":2535},{"style":194},[2536],{"type":47,"value":1287},{"type":41,"tag":181,"props":2538,"children":2539},{"style":505},[2540],{"type":47,"value":1292},{"type":41,"tag":181,"props":2542,"children":2543},{"style":194},[2544],{"type":47,"value":1297},{"type":41,"tag":181,"props":2546,"children":2547},{"class":183,"line":673},[2548],{"type":41,"tag":181,"props":2549,"children":2550},{"emptyLinePlaceholder":1119},[2551],{"type":47,"value":1122},{"type":41,"tag":181,"props":2553,"children":2554},{"class":183,"line":691},[2555,2559,2563,2567,2571,2575,2579],{"type":41,"tag":181,"props":2556,"children":2557},{"style":188},[2558],{"type":47,"value":1312},{"type":41,"tag":181,"props":2560,"children":2561},{"style":194},[2562],{"type":47,"value":1199},{"type":41,"tag":181,"props":2564,"children":2565},{"style":505},[2566],{"type":47,"value":1292},{"type":41,"tag":181,"props":2568,"children":2569},{"style":194},[2570],{"type":47,"value":1325},{"type":41,"tag":181,"props":2572,"children":2573},{"style":205},[2574],{"type":47,"value":1330},{"type":41,"tag":181,"props":2576,"children":2577},{"style":194},[2578],{"type":47,"value":1335},{"type":41,"tag":181,"props":2580,"children":2581},{"style":205},[2582],{"type":47,"value":1340},{"type":41,"tag":181,"props":2584,"children":2585},{"class":183,"line":709},[2586],{"type":41,"tag":181,"props":2587,"children":2588},{"emptyLinePlaceholder":1119},[2589],{"type":47,"value":1122},{"type":41,"tag":181,"props":2591,"children":2592},{"class":183,"line":722},[2593,2597,2601,2605,2609,2613,2617],{"type":41,"tag":181,"props":2594,"children":2595},{"style":188},[2596],{"type":47,"value":191},{"type":41,"tag":181,"props":2598,"children":2599},{"style":194},[2600],{"type":47,"value":197},{"type":41,"tag":181,"props":2602,"children":2603},{"style":194},[2604],{"type":47,"value":202},{"type":41,"tag":181,"props":2606,"children":2607},{"style":205},[2608],{"type":47,"value":208},{"type":41,"tag":181,"props":2610,"children":2611},{"style":194},[2612],{"type":47,"value":1199},{"type":41,"tag":181,"props":2614,"children":2615},{"style":505},[2616],{"type":47,"value":1292},{"type":41,"tag":181,"props":2618,"children":2619},{"style":194},[2620],{"type":47,"value":1379},{"type":41,"tag":181,"props":2622,"children":2623},{"class":183,"line":744},[2624,2628,2632,2636,2640,2644,2648,2652,2656],{"type":41,"tag":181,"props":2625,"children":2626},{"style":188},[2627],{"type":47,"value":191},{"type":41,"tag":181,"props":2629,"children":2630},{"style":194},[2631],{"type":47,"value":1002},{"type":41,"tag":181,"props":2633,"children":2634},{"style":205},[2635],{"type":47,"value":1007},{"type":41,"tag":181,"props":2637,"children":2638},{"style":194},[2639],{"type":47,"value":1199},{"type":41,"tag":181,"props":2641,"children":2642},{"style":505},[2643],{"type":47,"value":1204},{"type":41,"tag":181,"props":2645,"children":2646},{"style":194},[2647],{"type":47,"value":1209},{"type":41,"tag":181,"props":2649,"children":2650},{"style":194},[2651],{"type":47,"value":1199},{"type":41,"tag":181,"props":2653,"children":2654},{"style":505},[2655],{"type":47,"value":1292},{"type":41,"tag":181,"props":2657,"children":2658},{"style":194},[2659],{"type":47,"value":1297},{"type":41,"tag":95,"props":2661,"children":2662},{},[2663,2664,2669],{"type":47,"value":1423},{"type":41,"tag":60,"props":2665,"children":2667},{"className":2666},[],[2668],{"type":47,"value":1061},{"type":47,"value":1430},{"type":41,"tag":351,"props":2671,"children":2672},{},[2673],{"type":41,"tag":95,"props":2674,"children":2675},{},[2676,2680,2681,2686,2687,2692],{"type":41,"tag":229,"props":2677,"children":2678},{},[2679],{"type":47,"value":1441},{"type":47,"value":1443},{"type":41,"tag":60,"props":2682,"children":2684},{"className":2683},[],[2685],{"type":47,"value":1449},{"type":47,"value":1451},{"type":41,"tag":60,"props":2688,"children":2690},{"className":2689},[],[2691],{"type":47,"value":1457},{"type":47,"value":1459},{"type":41,"tag":42,"props":2694,"children":2695},{"id":1462},[2696],{"type":47,"value":1465},{"type":41,"tag":95,"props":2698,"children":2699},{},[2700,2701,2706,2707,2711],{"type":47,"value":1470},{"type":41,"tag":60,"props":2702,"children":2704},{"className":2703},[],[2705],{"type":47,"value":73},{"type":47,"value":1477},{"type":41,"tag":101,"props":2708,"children":2709},{},[2710],{"type":47,"value":1482},{"type":47,"value":1484},{"type":41,"tag":1486,"props":2713,"children":2714},{},[2715],{"type":47,"value":1490},{"title":7,"searchDepth":516,"depth":516,"links":2717},[2718,2719,2720,2726],{"id":44,"depth":516,"text":48},{"id":90,"depth":516,"text":93},{"id":154,"depth":516,"text":157,"children":2721},[2722,2723,2724,2725],{"id":161,"depth":534,"text":164},{"id":451,"depth":534,"text":454},{"id":980,"depth":534,"text":983},{"id":1040,"depth":534,"text":1043},{"id":1462,"depth":516,"text":1465},[2728,3280,4472,5515,6734],{"_path":2729,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":2730,"description":2731,"date":10,"readingTime":18,"category":12,"tags":2732,"difficulty":17,"module":5,"step":184,"journeys":2734,"learnMore":2735,"stepGif":32,"author":2744,"body":2745,"_type":1502,"_id":3277,"_source":1504,"_file":3278,"_stem":3279,"_extension":1507},"/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,2733],"BigQuery",[20,21],[2736,2738,2741],{"label":2737,"url":1052},"Reference project: contoso-dbt on GitHub",{"label":2739,"url":2740},"dbt + BigQuery profile setup","https://docs.getdbt.com/docs/core/connect-data-platform/bigquery-setup",{"label":2742,"url":2743},"Generating custom schema names in dbt","https://docs.getdbt.com/docs/build/custom-schemas",{"name":34,"role":35,"image":36},{"type":38,"children":2746,"toc":3267},[2747,2751,2756,2760,2780,2801,2816,2820,2826,2838,2847,2859,2865,2870,3013,3049,3055,3060,3079,3084,3125,3130,3243,3248,3252,3263],{"type":41,"tag":42,"props":2748,"children":2749},{"id":44},[2750],{"type":47,"value":48},{"type":41,"tag":95,"props":2752,"children":2753},{},[2754],{"type":47,"value":2755},"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":41,"tag":42,"props":2757,"children":2758},{"id":90},[2759],{"type":47,"value":93},{"type":41,"tag":95,"props":2761,"children":2762},{},[2763,2765,2770,2772,2778],{"type":47,"value":2764},"The Bruin context layer is ",{"type":41,"tag":229,"props":2766,"children":2767},{},[2768],{"type":47,"value":2769},"documentation-only",{"type":47,"value":2771}," 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":41,"tag":60,"props":2773,"children":2775},{"className":2774},[],[2776],{"type":47,"value":2777},"dbt build",{"type":47,"value":2779}," green first, then come back.",{"type":41,"tag":95,"props":2781,"children":2782},{},[2783,2785,2791,2793,2799],{"type":47,"value":2784},"If you don't already have a project to follow along with, the ",{"type":41,"tag":1050,"props":2786,"children":2788},{"href":1052,"rel":2787},[1054],[2789],{"type":47,"value":2790},"contoso-dbt reference repo",{"type":47,"value":2792}," 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":41,"tag":60,"props":2794,"children":2796},{"className":2795},[],[2797],{"type":47,"value":2798},"context/",{"type":47,"value":2800}," directory holds the Bruin layer we'll build in the next steps.",{"type":41,"tag":351,"props":2802,"children":2803},{},[2804],{"type":41,"tag":95,"props":2805,"children":2806},{},[2807,2809,2815],{"type":47,"value":2808},"If you already have a dbt project building cleanly into a warehouse, skim this page and skip ahead to ",{"type":41,"tag":1050,"props":2810,"children":2812},{"href":2811},"/learn/dbt-bruin-analyst/isolated-context",[2813],{"type":47,"value":2814},"Step 2: Create an Isolated Bruin Context",{"type":47,"value":349},{"type":41,"tag":42,"props":2817,"children":2818},{"id":154},[2819],{"type":47,"value":157},{"type":41,"tag":159,"props":2821,"children":2823},{"id":2822},"reference-project-layout",[2824],{"type":47,"value":2825},"Reference project layout",{"type":41,"tag":95,"props":2827,"children":2828},{},[2829,2831,2836],{"type":47,"value":2830},"The reference project ends up looking like this. The ",{"type":41,"tag":60,"props":2832,"children":2834},{"className":2833},[],[2835],{"type":47,"value":2798},{"type":47,"value":2837}," directory is what this module produces — everything else is dbt prerequisites:",{"type":41,"tag":171,"props":2839,"children":2842},{"className":2840,"code":2841,"language":47},[1026],"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",[2843],{"type":41,"tag":60,"props":2844,"children":2845},{"__ignoreMap":7},[2846],{"type":47,"value":2841},{"type":41,"tag":95,"props":2848,"children":2849},{},[2850,2852,2857],{"type":47,"value":2851},"The end state is ",{"type":41,"tag":229,"props":2853,"children":2854},{},[2855],{"type":47,"value":2856},"40 YAMLs",{"type":47,"value":2858}," — one per materialized table — covering raw ingest, staging, and reports.",{"type":41,"tag":159,"props":2860,"children":2862},{"id":2861},"what-the-dbt-half-looks-like",[2863],{"type":47,"value":2864},"What the dbt half looks like",{"type":41,"tag":95,"props":2866,"children":2867},{},[2868],{"type":47,"value":2869},"The contoso-dbt project uses a fairly standard dbt-on-BigQuery setup. If yours looks similar, you're ready:",{"type":41,"tag":220,"props":2871,"children":2872},{},[2873,2910,2930,2950,2969,3003],{"type":41,"tag":54,"props":2874,"children":2875},{},[2876,2878,2884,2886,2892,2894,2900,2902,2908],{"type":47,"value":2877},"A ",{"type":41,"tag":60,"props":2879,"children":2881},{"className":2880},[],[2882],{"type":47,"value":2883},"dbt_project.yml",{"type":47,"value":2885}," and a ",{"type":41,"tag":60,"props":2887,"children":2889},{"className":2888},[],[2890],{"type":47,"value":2891},"profiles.yml",{"type":47,"value":2893}," (the reference uses OAuth via ",{"type":41,"tag":60,"props":2895,"children":2897},{"className":2896},[],[2898],{"type":47,"value":2899},"gcloud auth application-default login",{"type":47,"value":2901},", location ",{"type":41,"tag":60,"props":2903,"children":2905},{"className":2904},[],[2906],{"type":47,"value":2907},"EU",{"type":47,"value":2909},")",{"type":41,"tag":54,"props":2911,"children":2912},{},[2913,2914,2920,2922,2928],{"type":47,"value":2877},{"type":41,"tag":60,"props":2915,"children":2917},{"className":2916},[],[2918],{"type":47,"value":2919},"models/sources.yml",{"type":47,"value":2921}," declaring raw tables loaded by dlt into a ",{"type":41,"tag":60,"props":2923,"children":2925},{"className":2924},[],[2926],{"type":47,"value":2927},"*_raw",{"type":47,"value":2929}," schema",{"type":41,"tag":54,"props":2931,"children":2932},{},[2933,2935,2941,2943,2949],{"type":47,"value":2934},"Staging models (",{"type":41,"tag":60,"props":2936,"children":2938},{"className":2937},[],[2939],{"type":47,"value":2940},"stg_*.sql",{"type":47,"value":2942},") materialized into a ",{"type":41,"tag":60,"props":2944,"children":2946},{"className":2945},[],[2947],{"type":47,"value":2948},"*_staging",{"type":47,"value":2929},{"type":41,"tag":54,"props":2951,"children":2952},{},[2953,2955,2961,2962,2968],{"type":47,"value":2954},"Report / mart models (",{"type":41,"tag":60,"props":2956,"children":2958},{"className":2957},[],[2959],{"type":47,"value":2960},"rpt_*.sql",{"type":47,"value":2942},{"type":41,"tag":60,"props":2963,"children":2965},{"className":2964},[],[2966],{"type":47,"value":2967},"*_reports",{"type":47,"value":2929},{"type":41,"tag":54,"props":2970,"children":2971},{},[2972,2973,2979,2981,2987,2989,2995,2997],{"type":47,"value":2877},{"type":41,"tag":60,"props":2974,"children":2976},{"className":2975},[],[2977],{"type":47,"value":2978},"generate_schema_name.sql",{"type":47,"value":2980}," macro so a ",{"type":41,"tag":60,"props":2982,"children":2984},{"className":2983},[],[2985],{"type":47,"value":2986},"+schema: staging",{"type":47,"value":2988}," config lands as ",{"type":41,"tag":60,"props":2990,"children":2992},{"className":2991},[],[2993],{"type":47,"value":2994},"contoso_dbt_staging",{"type":47,"value":2996},", not ",{"type":41,"tag":60,"props":2998,"children":3000},{"className":2999},[],[3001],{"type":47,"value":3002},"contoso_dbt_contoso_dbt_staging",{"type":41,"tag":54,"props":3004,"children":3005},{},[3006,3011],{"type":41,"tag":60,"props":3007,"children":3009},{"className":3008},[],[3010],{"type":47,"value":2777},{"type":47,"value":3012}," runs cleanly and the tables exist in the warehouse",{"type":41,"tag":351,"props":3014,"children":3015},{},[3016],{"type":41,"tag":95,"props":3017,"children":3018},{},[3019,3024,3026,3032,3034,3040,3042,3047],{"type":41,"tag":229,"props":3020,"children":3021},{},[3022],{"type":47,"value":3023},"Heads up on schema naming.",{"type":47,"value":3025}," dbt's default ",{"type":41,"tag":60,"props":3027,"children":3029},{"className":3028},[],[3030],{"type":47,"value":3031},"generate_schema_name",{"type":47,"value":3033}," macro concatenates the target schema with the ",{"type":41,"tag":60,"props":3035,"children":3037},{"className":3036},[],[3038],{"type":47,"value":3039},"+schema",{"type":47,"value":3041}," config, which is rarely what you want. The reference project overrides it to use the ",{"type":41,"tag":60,"props":3043,"children":3045},{"className":3044},[],[3046],{"type":47,"value":3039},{"type":47,"value":3048}," value directly. If your final schema names look doubled-up, this is usually why.",{"type":41,"tag":159,"props":3050,"children":3052},{"id":3051},"verify-the-warehouse-has-data",[3053],{"type":47,"value":3054},"Verify the warehouse has data",{"type":41,"tag":95,"props":3056,"children":3057},{},[3058],{"type":47,"value":3059},"Before moving to the Bruin steps, make sure your dbt-built tables actually exist. From your dbt project root:",{"type":41,"tag":171,"props":3061,"children":3063},{"className":173,"code":3062,"language":175,"meta":7,"style":7},"dbt build\n",[3064],{"type":41,"tag":60,"props":3065,"children":3066},{"__ignoreMap":7},[3067],{"type":41,"tag":181,"props":3068,"children":3069},{"class":183,"line":184},[3070,3074],{"type":41,"tag":181,"props":3071,"children":3072},{"style":188},[3073],{"type":47,"value":16},{"type":41,"tag":181,"props":3075,"children":3076},{"style":194},[3077],{"type":47,"value":3078}," build\n",{"type":41,"tag":95,"props":3080,"children":3081},{},[3082],{"type":47,"value":3083},"Then spot-check the warehouse. For BigQuery:",{"type":41,"tag":171,"props":3085,"children":3087},{"className":173,"code":3086,"language":175,"meta":7,"style":7},"bq ls bruin-playground-arsalan:contoso_dbt_staging\nbq ls bruin-playground-arsalan:contoso_dbt_reports\n",[3088],{"type":41,"tag":60,"props":3089,"children":3090},{"__ignoreMap":7},[3091,3109],{"type":41,"tag":181,"props":3092,"children":3093},{"class":183,"line":184},[3094,3099,3104],{"type":41,"tag":181,"props":3095,"children":3096},{"style":188},[3097],{"type":47,"value":3098},"bq",{"type":41,"tag":181,"props":3100,"children":3101},{"style":194},[3102],{"type":47,"value":3103}," ls",{"type":41,"tag":181,"props":3105,"children":3106},{"style":194},[3107],{"type":47,"value":3108}," bruin-playground-arsalan:contoso_dbt_staging\n",{"type":41,"tag":181,"props":3110,"children":3111},{"class":183,"line":516},[3112,3116,3120],{"type":41,"tag":181,"props":3113,"children":3114},{"style":188},[3115],{"type":47,"value":3098},{"type":41,"tag":181,"props":3117,"children":3118},{"style":194},[3119],{"type":47,"value":3103},{"type":41,"tag":181,"props":3121,"children":3122},{"style":194},[3123],{"type":47,"value":3124}," bruin-playground-arsalan:contoso_dbt_reports\n",{"type":41,"tag":95,"props":3126,"children":3127},{},[3128],{"type":47,"value":3129},"For Postgres / Redshift:",{"type":41,"tag":171,"props":3131,"children":3135},{"className":3132,"code":3133,"language":3134,"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",[3136],{"type":41,"tag":60,"props":3137,"children":3138},{"__ignoreMap":7},[3139,3152,3174,3216],{"type":41,"tag":181,"props":3140,"children":3141},{"class":183,"line":184},[3142,3147],{"type":41,"tag":181,"props":3143,"children":3144},{"style":546},[3145],{"type":47,"value":3146},"SELECT",{"type":41,"tag":181,"props":3148,"children":3149},{"style":505},[3150],{"type":47,"value":3151}," table_schema, table_name\n",{"type":41,"tag":181,"props":3153,"children":3154},{"class":183,"line":516},[3155,3160,3165,3169],{"type":41,"tag":181,"props":3156,"children":3157},{"style":546},[3158],{"type":47,"value":3159},"FROM",{"type":41,"tag":181,"props":3161,"children":3162},{"style":205},[3163],{"type":47,"value":3164}," information_schema",{"type":41,"tag":181,"props":3166,"children":3167},{"style":505},[3168],{"type":47,"value":349},{"type":41,"tag":181,"props":3170,"children":3171},{"style":205},[3172],{"type":47,"value":3173},"tables\n",{"type":41,"tag":181,"props":3175,"children":3176},{"class":183,"line":534},[3177,3182,3187,3192,3197,3202,3206,3211],{"type":41,"tag":181,"props":3178,"children":3179},{"style":546},[3180],{"type":47,"value":3181},"WHERE",{"type":41,"tag":181,"props":3183,"children":3184},{"style":505},[3185],{"type":47,"value":3186}," table_schema ",{"type":41,"tag":181,"props":3188,"children":3189},{"style":546},[3190],{"type":47,"value":3191},"IN",{"type":41,"tag":181,"props":3193,"children":3194},{"style":505},[3195],{"type":47,"value":3196}," (",{"type":41,"tag":181,"props":3198,"children":3199},{"style":194},[3200],{"type":47,"value":3201},"'contoso_dbt_staging'",{"type":41,"tag":181,"props":3203,"children":3204},{"style":505},[3205],{"type":47,"value":255},{"type":41,"tag":181,"props":3207,"children":3208},{"style":194},[3209],{"type":47,"value":3210},"'contoso_dbt_reports'",{"type":41,"tag":181,"props":3212,"children":3213},{"style":505},[3214],{"type":47,"value":3215},")\n",{"type":41,"tag":181,"props":3217,"children":3218},{"class":183,"line":18},[3219,3224,3229,3233,3238],{"type":41,"tag":181,"props":3220,"children":3221},{"style":546},[3222],{"type":47,"value":3223},"ORDER BY",{"type":41,"tag":181,"props":3225,"children":3226},{"style":205},[3227],{"type":47,"value":3228}," 1",{"type":41,"tag":181,"props":3230,"children":3231},{"style":505},[3232],{"type":47,"value":255},{"type":41,"tag":181,"props":3234,"children":3235},{"style":205},[3236],{"type":47,"value":3237},"2",{"type":41,"tag":181,"props":3239,"children":3240},{"style":505},[3241],{"type":47,"value":3242},";\n",{"type":41,"tag":95,"props":3244,"children":3245},{},[3246],{"type":47,"value":3247},"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":41,"tag":42,"props":3249,"children":3250},{"id":1462},[3251],{"type":47,"value":1465},{"type":41,"tag":95,"props":3253,"children":3254},{},[3255,3257,3262],{"type":47,"value":3256},"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":41,"tag":60,"props":3258,"children":3260},{"className":3259},[],[3261],{"type":47,"value":191},{"type":47,"value":349},{"type":41,"tag":1486,"props":3264,"children":3265},{},[3266],{"type":47,"value":1490},{"title":7,"searchDepth":516,"depth":516,"links":3268},[3269,3270,3271,3276],{"id":44,"depth":516,"text":48},{"id":90,"depth":516,"text":93},{"id":154,"depth":516,"text":157,"children":3272},[3273,3274,3275],{"id":2822,"depth":534,"text":2825},{"id":2861,"depth":534,"text":2864},{"id":3051,"depth":534,"text":3054},{"id":1462,"depth":516,"text":1465},"content:tutorials:dbt-bruin-analyst:dbt-prerequisite.md","tutorials/dbt-bruin-analyst/dbt-prerequisite.md","tutorials/dbt-bruin-analyst/dbt-prerequisite",{"_path":3281,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":3282,"description":3283,"date":10,"readingTime":11,"category":12,"tags":3284,"difficulty":17,"module":5,"step":516,"journeys":3285,"learnMore":3286,"stepGif":32,"author":3296,"body":3297,"_type":1502,"_id":4469,"_source":1504,"_file":4470,"_stem":4471,"_extension":1507},"/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,2733],[20,21],[3287,3290,3293],{"label":3288,"url":3289},"Connections reference (docs)","https://getbruin.com/docs/bruin/core-concepts/connections.html",{"label":3291,"url":3292},"Pipeline configuration (docs)","https://getbruin.com/docs/bruin/core-concepts/pipeline.html",{"label":3294,"url":3295},"Application Default Credentials","https://cloud.google.com/docs/authentication/application-default-credentials",{"name":34,"role":35,"image":36},{"type":38,"children":3298,"toc":4456},[3299,3303,3331,3335,3354,3373,3377,3389,3395,3419,3446,3457,3469,3621,3639,3667,3702,3707,3869,4005,4157,4168,4179,4273,4314,4336,4342,4347,4384,4388,4397,4409,4436,4440,4452],{"type":41,"tag":42,"props":3300,"children":3301},{"id":44},[3302],{"type":47,"value":48},{"type":41,"tag":95,"props":3304,"children":3305},{},[3306,3308,3313,3315,3321,3323,3329],{"type":47,"value":3307},"Inside your dbt repo, create a ",{"type":41,"tag":60,"props":3309,"children":3311},{"className":3310},[],[3312],{"type":47,"value":2798},{"type":47,"value":3314}," directory with its own ",{"type":41,"tag":60,"props":3316,"children":3318},{"className":3317},[],[3319],{"type":47,"value":3320},".bruin.yml",{"type":47,"value":3322}," and ",{"type":41,"tag":60,"props":3324,"children":3326},{"className":3325},[],[3327],{"type":47,"value":3328},"pipeline.yml",{"type":47,"value":3330},". 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":41,"tag":42,"props":3332,"children":3333},{"id":90},[3334],{"type":47,"value":93},{"type":41,"tag":95,"props":3336,"children":3337},{},[3338,3340,3345,3347,3352],{"type":47,"value":3339},"Bruin will happily share a ",{"type":41,"tag":60,"props":3341,"children":3343},{"className":3342},[],[3344],{"type":47,"value":3320},{"type":47,"value":3346}," 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":41,"tag":60,"props":3348,"children":3350},{"className":3349},[],[3351],{"type":47,"value":191},{"type":47,"value":3353}," 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":41,"tag":95,"props":3355,"children":3356},{},[3357,3359,3364,3366,3371],{"type":47,"value":3358},"The context layer is ",{"type":41,"tag":229,"props":3360,"children":3361},{},[3362],{"type":47,"value":3363},"its own pipeline",{"type":47,"value":3365},", even though it never runs transforms. It's documentation that happens to live in ",{"type":41,"tag":60,"props":3367,"children":3369},{"className":3368},[],[3370],{"type":47,"value":3328},{"type":47,"value":3372}," form so Bruin can validate it.",{"type":41,"tag":42,"props":3374,"children":3375},{"id":154},[3376],{"type":47,"value":157},{"type":41,"tag":95,"props":3378,"children":3379},{},[3380,3382,3387],{"type":47,"value":3381},"Run all of these from the root of your dbt project (the directory containing ",{"type":41,"tag":60,"props":3383,"children":3385},{"className":3384},[],[3386],{"type":47,"value":2883},{"type":47,"value":3388},").",{"type":41,"tag":159,"props":3390,"children":3392},{"id":3391},"_1-create-the-context-directory",[3393],{"type":47,"value":3394},"1. Create the context directory",{"type":41,"tag":171,"props":3396,"children":3398},{"className":173,"code":3397,"language":175,"meta":7,"style":7},"mkdir -p context/assets\n",[3399],{"type":41,"tag":60,"props":3400,"children":3401},{"__ignoreMap":7},[3402],{"type":41,"tag":181,"props":3403,"children":3404},{"class":183,"line":184},[3405,3410,3415],{"type":41,"tag":181,"props":3406,"children":3407},{"style":188},[3408],{"type":47,"value":3409},"mkdir",{"type":41,"tag":181,"props":3411,"children":3412},{"style":205},[3413],{"type":47,"value":3414}," -p",{"type":41,"tag":181,"props":3416,"children":3417},{"style":194},[3418],{"type":47,"value":213},{"type":41,"tag":95,"props":3420,"children":3421},{},[3422,3424,3430,3431,3437,3439,3444],{"type":47,"value":3423},"You'll end up with ",{"type":41,"tag":60,"props":3425,"children":3427},{"className":3426},[],[3428],{"type":47,"value":3429},"context/.bruin.yml",{"type":47,"value":255},{"type":41,"tag":60,"props":3432,"children":3434},{"className":3433},[],[3435],{"type":47,"value":3436},"context/pipeline.yml",{"type":47,"value":3438},", and a populated ",{"type":41,"tag":60,"props":3440,"children":3442},{"className":3441},[],[3443],{"type":47,"value":73},{"type":47,"value":3445}," after the next step.",{"type":41,"tag":159,"props":3447,"children":3449},{"id":3448},"_2-write-a-scoped-bruinyml",[3450,3452],{"type":47,"value":3451},"2. Write a scoped ",{"type":41,"tag":60,"props":3453,"children":3455},{"className":3454},[],[3456],{"type":47,"value":3320},{"type":41,"tag":95,"props":3458,"children":3459},{},[3460,3462,3467],{"type":47,"value":3461},"Drop this into ",{"type":41,"tag":60,"props":3463,"children":3465},{"className":3464},[],[3466],{"type":47,"value":3429},{"type":47,"value":3468},". Replace the project ID with your own warehouse's:",{"type":41,"tag":171,"props":3470,"children":3472},{"className":487,"code":3471,"language":489,"meta":7,"style":7},"# 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",[3473],{"type":41,"tag":60,"props":3474,"children":3475},{"__ignoreMap":7},[3476,3484,3501,3513,3525,3537,3549,3570,3587,3604],{"type":41,"tag":181,"props":3477,"children":3478},{"class":183,"line":184},[3479],{"type":41,"tag":181,"props":3480,"children":3481},{"style":1092},[3482],{"type":47,"value":3483},"# context/.bruin.yml\n",{"type":41,"tag":181,"props":3485,"children":3486},{"class":183,"line":516},[3487,3492,3496],{"type":41,"tag":181,"props":3488,"children":3489},{"style":499},[3490],{"type":47,"value":3491},"default_environment",{"type":41,"tag":181,"props":3493,"children":3494},{"style":505},[3495],{"type":47,"value":508},{"type":41,"tag":181,"props":3497,"children":3498},{"style":194},[3499],{"type":47,"value":3500},"default\n",{"type":41,"tag":181,"props":3502,"children":3503},{"class":183,"line":534},[3504,3509],{"type":41,"tag":181,"props":3505,"children":3506},{"style":499},[3507],{"type":47,"value":3508},"environments",{"type":41,"tag":181,"props":3510,"children":3511},{"style":505},[3512],{"type":47,"value":596},{"type":41,"tag":181,"props":3514,"children":3515},{"class":183,"line":18},[3516,3521],{"type":41,"tag":181,"props":3517,"children":3518},{"style":499},[3519],{"type":47,"value":3520},"  default",{"type":41,"tag":181,"props":3522,"children":3523},{"style":505},[3524],{"type":47,"value":596},{"type":41,"tag":181,"props":3526,"children":3527},{"class":183,"line":560},[3528,3533],{"type":41,"tag":181,"props":3529,"children":3530},{"style":499},[3531],{"type":47,"value":3532},"    connections",{"type":41,"tag":181,"props":3534,"children":3535},{"style":505},[3536],{"type":47,"value":596},{"type":41,"tag":181,"props":3538,"children":3539},{"class":183,"line":11},[3540,3545],{"type":41,"tag":181,"props":3541,"children":3542},{"style":499},[3543],{"type":47,"value":3544},"      google_cloud_platform",{"type":41,"tag":181,"props":3546,"children":3547},{"style":505},[3548],{"type":47,"value":596},{"type":41,"tag":181,"props":3550,"children":3551},{"class":183,"line":577},[3552,3557,3561,3565],{"type":41,"tag":181,"props":3553,"children":3554},{"style":505},[3555],{"type":47,"value":3556},"        - ",{"type":41,"tag":181,"props":3558,"children":3559},{"style":499},[3560],{"type":47,"value":502},{"type":41,"tag":181,"props":3562,"children":3563},{"style":505},[3564],{"type":47,"value":508},{"type":41,"tag":181,"props":3566,"children":3567},{"style":194},[3568],{"type":47,"value":3569},"contoso_dbt_bq\n",{"type":41,"tag":181,"props":3571,"children":3572},{"class":183,"line":586},[3573,3578,3582],{"type":41,"tag":181,"props":3574,"children":3575},{"style":499},[3576],{"type":47,"value":3577},"          project_id",{"type":41,"tag":181,"props":3579,"children":3580},{"style":505},[3581],{"type":47,"value":508},{"type":41,"tag":181,"props":3583,"children":3584},{"style":194},[3585],{"type":47,"value":3586},"bruin-playground-arsalan\n",{"type":41,"tag":181,"props":3588,"children":3589},{"class":183,"line":599},[3590,3595,3599],{"type":41,"tag":181,"props":3591,"children":3592},{"style":499},[3593],{"type":47,"value":3594},"          location",{"type":41,"tag":181,"props":3596,"children":3597},{"style":505},[3598],{"type":47,"value":508},{"type":41,"tag":181,"props":3600,"children":3601},{"style":194},[3602],{"type":47,"value":3603},"EU\n",{"type":41,"tag":181,"props":3605,"children":3606},{"class":183,"line":613},[3607,3612,3616],{"type":41,"tag":181,"props":3608,"children":3609},{"style":499},[3610],{"type":47,"value":3611},"          use_application_default_credentials",{"type":41,"tag":181,"props":3613,"children":3614},{"style":505},[3615],{"type":47,"value":508},{"type":41,"tag":181,"props":3617,"children":3618},{"style":205},[3619],{"type":47,"value":3620},"true\n",{"type":41,"tag":95,"props":3622,"children":3623},{},[3624,3626,3630,3632,3637],{"type":47,"value":3625},"This connection uses ",{"type":41,"tag":229,"props":3627,"children":3628},{},[3629],{"type":47,"value":3294},{"type":47,"value":3631}," — the same ",{"type":41,"tag":60,"props":3633,"children":3635},{"className":3634},[],[3636],{"type":47,"value":2899},{"type":47,"value":3638}," 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":41,"tag":351,"props":3640,"children":3641},{},[3642],{"type":41,"tag":95,"props":3643,"children":3644},{},[3645,3650,3652,3658,3659,3665],{"type":41,"tag":229,"props":3646,"children":3647},{},[3648],{"type":47,"value":3649},"Gotcha — wrong field name.",{"type":47,"value":3651}," The field is ",{"type":41,"tag":60,"props":3653,"children":3655},{"className":3654},[],[3656],{"type":47,"value":3657},"use_application_default_credentials",{"type":47,"value":2996},{"type":41,"tag":60,"props":3660,"children":3662},{"className":3661},[],[3663],{"type":47,"value":3664},"use_default_credentials",{"type":47,"value":3666},". The latter is silently ignored and Bruin will look for a keyfile that isn't there.",{"type":41,"tag":351,"props":3668,"children":3669},{},[3670],{"type":41,"tag":95,"props":3671,"children":3672},{},[3673,3678,3680,3685,3687,3692,3694,3700],{"type":41,"tag":229,"props":3674,"children":3675},{},[3676],{"type":47,"value":3677},"Gotcha — sibling configs.",{"type":47,"value":3679}," ",{"type":41,"tag":60,"props":3681,"children":3683},{"className":3682},[],[3684],{"type":47,"value":191},{"type":47,"value":3686}," walks up looking for ",{"type":41,"tag":60,"props":3688,"children":3690},{"className":3689},[],[3691],{"type":47,"value":3320},{"type":47,"value":3693},". If a parent directory has one with a broken connection, every command in this scope will error. Always pass ",{"type":41,"tag":60,"props":3695,"children":3697},{"className":3696},[],[3698],{"type":47,"value":3699},"--config-file context/.bruin.yml",{"type":47,"value":3701}," so Bruin only loads this file.",{"type":41,"tag":95,"props":3703,"children":3704},{},[3705],{"type":47,"value":3706},"For Redshift, ClickHouse, or Postgres, swap the connection block. Examples:",{"type":41,"tag":171,"props":3708,"children":3710},{"className":487,"code":3709,"language":489,"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",[3711],{"type":41,"tag":60,"props":3712,"children":3713},{"__ignoreMap":7},[3714,3722,3734,3746,3767,3784,3801,3818,3835,3852],{"type":41,"tag":181,"props":3715,"children":3716},{"class":183,"line":184},[3717],{"type":41,"tag":181,"props":3718,"children":3719},{"style":1092},[3720],{"type":47,"value":3721},"# Postgres\n",{"type":41,"tag":181,"props":3723,"children":3724},{"class":183,"line":516},[3725,3730],{"type":41,"tag":181,"props":3726,"children":3727},{"style":499},[3728],{"type":47,"value":3729},"connections",{"type":41,"tag":181,"props":3731,"children":3732},{"style":505},[3733],{"type":47,"value":596},{"type":41,"tag":181,"props":3735,"children":3736},{"class":183,"line":534},[3737,3742],{"type":41,"tag":181,"props":3738,"children":3739},{"style":499},[3740],{"type":47,"value":3741},"  postgres",{"type":41,"tag":181,"props":3743,"children":3744},{"style":505},[3745],{"type":47,"value":596},{"type":41,"tag":181,"props":3747,"children":3748},{"class":183,"line":18},[3749,3754,3758,3762],{"type":41,"tag":181,"props":3750,"children":3751},{"style":505},[3752],{"type":47,"value":3753},"    - ",{"type":41,"tag":181,"props":3755,"children":3756},{"style":499},[3757],{"type":47,"value":502},{"type":41,"tag":181,"props":3759,"children":3760},{"style":505},[3761],{"type":47,"value":508},{"type":41,"tag":181,"props":3763,"children":3764},{"style":194},[3765],{"type":47,"value":3766},"contoso_dbt_pg\n",{"type":41,"tag":181,"props":3768,"children":3769},{"class":183,"line":560},[3770,3775,3779],{"type":41,"tag":181,"props":3771,"children":3772},{"style":499},[3773],{"type":47,"value":3774},"      host",{"type":41,"tag":181,"props":3776,"children":3777},{"style":505},[3778],{"type":47,"value":508},{"type":41,"tag":181,"props":3780,"children":3781},{"style":194},[3782],{"type":47,"value":3783},"db.example.internal\n",{"type":41,"tag":181,"props":3785,"children":3786},{"class":183,"line":11},[3787,3792,3796],{"type":41,"tag":181,"props":3788,"children":3789},{"style":499},[3790],{"type":47,"value":3791},"      port",{"type":41,"tag":181,"props":3793,"children":3794},{"style":505},[3795],{"type":47,"value":508},{"type":41,"tag":181,"props":3797,"children":3798},{"style":205},[3799],{"type":47,"value":3800},"5432\n",{"type":41,"tag":181,"props":3802,"children":3803},{"class":183,"line":577},[3804,3809,3813],{"type":41,"tag":181,"props":3805,"children":3806},{"style":499},[3807],{"type":47,"value":3808},"      username",{"type":41,"tag":181,"props":3810,"children":3811},{"style":505},[3812],{"type":47,"value":508},{"type":41,"tag":181,"props":3814,"children":3815},{"style":194},[3816],{"type":47,"value":3817},"analyst_ro\n",{"type":41,"tag":181,"props":3819,"children":3820},{"class":183,"line":586},[3821,3826,3830],{"type":41,"tag":181,"props":3822,"children":3823},{"style":499},[3824],{"type":47,"value":3825},"      password",{"type":41,"tag":181,"props":3827,"children":3828},{"style":505},[3829],{"type":47,"value":508},{"type":41,"tag":181,"props":3831,"children":3832},{"style":194},[3833],{"type":47,"value":3834},"${POSTGRES_PASSWORD}\n",{"type":41,"tag":181,"props":3836,"children":3837},{"class":183,"line":599},[3838,3843,3847],{"type":41,"tag":181,"props":3839,"children":3840},{"style":499},[3841],{"type":47,"value":3842},"      database",{"type":41,"tag":181,"props":3844,"children":3845},{"style":505},[3846],{"type":47,"value":508},{"type":41,"tag":181,"props":3848,"children":3849},{"style":194},[3850],{"type":47,"value":3851},"contoso\n",{"type":41,"tag":181,"props":3853,"children":3854},{"class":183,"line":613},[3855,3860,3864],{"type":41,"tag":181,"props":3856,"children":3857},{"style":499},[3858],{"type":47,"value":3859},"      ssl_mode",{"type":41,"tag":181,"props":3861,"children":3862},{"style":505},[3863],{"type":47,"value":508},{"type":41,"tag":181,"props":3865,"children":3866},{"style":194},[3867],{"type":47,"value":3868},"require\n",{"type":41,"tag":171,"props":3870,"children":3872},{"className":487,"code":3871,"language":489,"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",[3873],{"type":41,"tag":60,"props":3874,"children":3875},{"__ignoreMap":7},[3876,3884,3895,3907,3927,3943,3959,3974,3990],{"type":41,"tag":181,"props":3877,"children":3878},{"class":183,"line":184},[3879],{"type":41,"tag":181,"props":3880,"children":3881},{"style":1092},[3882],{"type":47,"value":3883},"# Redshift\n",{"type":41,"tag":181,"props":3885,"children":3886},{"class":183,"line":516},[3887,3891],{"type":41,"tag":181,"props":3888,"children":3889},{"style":499},[3890],{"type":47,"value":3729},{"type":41,"tag":181,"props":3892,"children":3893},{"style":505},[3894],{"type":47,"value":596},{"type":41,"tag":181,"props":3896,"children":3897},{"class":183,"line":534},[3898,3903],{"type":41,"tag":181,"props":3899,"children":3900},{"style":499},[3901],{"type":47,"value":3902},"  redshift",{"type":41,"tag":181,"props":3904,"children":3905},{"style":505},[3906],{"type":47,"value":596},{"type":41,"tag":181,"props":3908,"children":3909},{"class":183,"line":18},[3910,3914,3918,3922],{"type":41,"tag":181,"props":3911,"children":3912},{"style":505},[3913],{"type":47,"value":3753},{"type":41,"tag":181,"props":3915,"children":3916},{"style":499},[3917],{"type":47,"value":502},{"type":41,"tag":181,"props":3919,"children":3920},{"style":505},[3921],{"type":47,"value":508},{"type":41,"tag":181,"props":3923,"children":3924},{"style":194},[3925],{"type":47,"value":3926},"contoso_dbt_rs\n",{"type":41,"tag":181,"props":3928,"children":3929},{"class":183,"line":560},[3930,3934,3938],{"type":41,"tag":181,"props":3931,"children":3932},{"style":499},[3933],{"type":47,"value":3774},{"type":41,"tag":181,"props":3935,"children":3936},{"style":505},[3937],{"type":47,"value":508},{"type":41,"tag":181,"props":3939,"children":3940},{"style":194},[3941],{"type":47,"value":3942},"contoso.abcd1234.eu-west-1.redshift.amazonaws.com\n",{"type":41,"tag":181,"props":3944,"children":3945},{"class":183,"line":11},[3946,3950,3954],{"type":41,"tag":181,"props":3947,"children":3948},{"style":499},[3949],{"type":47,"value":3791},{"type":41,"tag":181,"props":3951,"children":3952},{"style":505},[3953],{"type":47,"value":508},{"type":41,"tag":181,"props":3955,"children":3956},{"style":205},[3957],{"type":47,"value":3958},"5439\n",{"type":41,"tag":181,"props":3960,"children":3961},{"class":183,"line":577},[3962,3966,3970],{"type":41,"tag":181,"props":3963,"children":3964},{"style":499},[3965],{"type":47,"value":3808},{"type":41,"tag":181,"props":3967,"children":3968},{"style":505},[3969],{"type":47,"value":508},{"type":41,"tag":181,"props":3971,"children":3972},{"style":194},[3973],{"type":47,"value":3817},{"type":41,"tag":181,"props":3975,"children":3976},{"class":183,"line":586},[3977,3981,3985],{"type":41,"tag":181,"props":3978,"children":3979},{"style":499},[3980],{"type":47,"value":3825},{"type":41,"tag":181,"props":3982,"children":3983},{"style":505},[3984],{"type":47,"value":508},{"type":41,"tag":181,"props":3986,"children":3987},{"style":194},[3988],{"type":47,"value":3989},"${REDSHIFT_PASSWORD}\n",{"type":41,"tag":181,"props":3991,"children":3992},{"class":183,"line":599},[3993,3997,4001],{"type":41,"tag":181,"props":3994,"children":3995},{"style":499},[3996],{"type":47,"value":3842},{"type":41,"tag":181,"props":3998,"children":3999},{"style":505},[4000],{"type":47,"value":508},{"type":41,"tag":181,"props":4002,"children":4003},{"style":194},[4004],{"type":47,"value":3851},{"type":41,"tag":171,"props":4006,"children":4008},{"className":487,"code":4007,"language":489,"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",[4009],{"type":41,"tag":60,"props":4010,"children":4011},{"__ignoreMap":7},[4012,4020,4031,4043,4063,4079,4095,4110,4126,4141],{"type":41,"tag":181,"props":4013,"children":4014},{"class":183,"line":184},[4015],{"type":41,"tag":181,"props":4016,"children":4017},{"style":1092},[4018],{"type":47,"value":4019},"# ClickHouse\n",{"type":41,"tag":181,"props":4021,"children":4022},{"class":183,"line":516},[4023,4027],{"type":41,"tag":181,"props":4024,"children":4025},{"style":499},[4026],{"type":47,"value":3729},{"type":41,"tag":181,"props":4028,"children":4029},{"style":505},[4030],{"type":47,"value":596},{"type":41,"tag":181,"props":4032,"children":4033},{"class":183,"line":534},[4034,4039],{"type":41,"tag":181,"props":4035,"children":4036},{"style":499},[4037],{"type":47,"value":4038},"  clickhouse",{"type":41,"tag":181,"props":4040,"children":4041},{"style":505},[4042],{"type":47,"value":596},{"type":41,"tag":181,"props":4044,"children":4045},{"class":183,"line":18},[4046,4050,4054,4058],{"type":41,"tag":181,"props":4047,"children":4048},{"style":505},[4049],{"type":47,"value":3753},{"type":41,"tag":181,"props":4051,"children":4052},{"style":499},[4053],{"type":47,"value":502},{"type":41,"tag":181,"props":4055,"children":4056},{"style":505},[4057],{"type":47,"value":508},{"type":41,"tag":181,"props":4059,"children":4060},{"style":194},[4061],{"type":47,"value":4062},"contoso_dbt_ch\n",{"type":41,"tag":181,"props":4064,"children":4065},{"class":183,"line":560},[4066,4070,4074],{"type":41,"tag":181,"props":4067,"children":4068},{"style":499},[4069],{"type":47,"value":3774},{"type":41,"tag":181,"props":4071,"children":4072},{"style":505},[4073],{"type":47,"value":508},{"type":41,"tag":181,"props":4075,"children":4076},{"style":194},[4077],{"type":47,"value":4078},"contoso.eu-central-1.aws.clickhouse.cloud\n",{"type":41,"tag":181,"props":4080,"children":4081},{"class":183,"line":11},[4082,4086,4090],{"type":41,"tag":181,"props":4083,"children":4084},{"style":499},[4085],{"type":47,"value":3791},{"type":41,"tag":181,"props":4087,"children":4088},{"style":505},[4089],{"type":47,"value":508},{"type":41,"tag":181,"props":4091,"children":4092},{"style":205},[4093],{"type":47,"value":4094},"9440\n",{"type":41,"tag":181,"props":4096,"children":4097},{"class":183,"line":577},[4098,4102,4106],{"type":41,"tag":181,"props":4099,"children":4100},{"style":499},[4101],{"type":47,"value":3808},{"type":41,"tag":181,"props":4103,"children":4104},{"style":505},[4105],{"type":47,"value":508},{"type":41,"tag":181,"props":4107,"children":4108},{"style":194},[4109],{"type":47,"value":3817},{"type":41,"tag":181,"props":4111,"children":4112},{"class":183,"line":586},[4113,4117,4121],{"type":41,"tag":181,"props":4114,"children":4115},{"style":499},[4116],{"type":47,"value":3825},{"type":41,"tag":181,"props":4118,"children":4119},{"style":505},[4120],{"type":47,"value":508},{"type":41,"tag":181,"props":4122,"children":4123},{"style":194},[4124],{"type":47,"value":4125},"${CLICKHOUSE_PASSWORD}\n",{"type":41,"tag":181,"props":4127,"children":4128},{"class":183,"line":599},[4129,4133,4137],{"type":41,"tag":181,"props":4130,"children":4131},{"style":499},[4132],{"type":47,"value":3842},{"type":41,"tag":181,"props":4134,"children":4135},{"style":505},[4136],{"type":47,"value":508},{"type":41,"tag":181,"props":4138,"children":4139},{"style":194},[4140],{"type":47,"value":3500},{"type":41,"tag":181,"props":4142,"children":4143},{"class":183,"line":613},[4144,4149,4153],{"type":41,"tag":181,"props":4145,"children":4146},{"style":499},[4147],{"type":47,"value":4148},"      secure",{"type":41,"tag":181,"props":4150,"children":4151},{"style":505},[4152],{"type":47,"value":508},{"type":41,"tag":181,"props":4154,"children":4155},{"style":205},[4156],{"type":47,"value":3620},{"type":41,"tag":159,"props":4158,"children":4160},{"id":4159},"_3-write-a-pipelineyml",[4161,4163],{"type":47,"value":4162},"3. Write a ",{"type":41,"tag":60,"props":4164,"children":4166},{"className":4165},[],[4167],{"type":47,"value":3328},{"type":41,"tag":95,"props":4169,"children":4170},{},[4171,4172,4177],{"type":47,"value":3461},{"type":41,"tag":60,"props":4173,"children":4175},{"className":4174},[],[4176],{"type":47,"value":3436},{"type":47,"value":4178},":",{"type":41,"tag":171,"props":4180,"children":4182},{"className":487,"code":4181,"language":489,"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",[4183],{"type":41,"tag":60,"props":4184,"children":4185},{"__ignoreMap":7},[4186,4194,4210,4227,4244,4256],{"type":41,"tag":181,"props":4187,"children":4188},{"class":183,"line":184},[4189],{"type":41,"tag":181,"props":4190,"children":4191},{"style":1092},[4192],{"type":47,"value":4193},"# context/pipeline.yml\n",{"type":41,"tag":181,"props":4195,"children":4196},{"class":183,"line":516},[4197,4201,4205],{"type":41,"tag":181,"props":4198,"children":4199},{"style":499},[4200],{"type":47,"value":502},{"type":41,"tag":181,"props":4202,"children":4203},{"style":505},[4204],{"type":47,"value":508},{"type":41,"tag":181,"props":4206,"children":4207},{"style":194},[4208],{"type":47,"value":4209},"contoso_dbt_context\n",{"type":41,"tag":181,"props":4211,"children":4212},{"class":183,"line":534},[4213,4218,4222],{"type":41,"tag":181,"props":4214,"children":4215},{"style":499},[4216],{"type":47,"value":4217},"schedule",{"type":41,"tag":181,"props":4219,"children":4220},{"style":505},[4221],{"type":47,"value":508},{"type":41,"tag":181,"props":4223,"children":4224},{"style":194},[4225],{"type":47,"value":4226},"daily\n",{"type":41,"tag":181,"props":4228,"children":4229},{"class":183,"line":18},[4230,4235,4239],{"type":41,"tag":181,"props":4231,"children":4232},{"style":499},[4233],{"type":47,"value":4234},"start_date",{"type":41,"tag":181,"props":4236,"children":4237},{"style":505},[4238],{"type":47,"value":508},{"type":41,"tag":181,"props":4240,"children":4241},{"style":194},[4242],{"type":47,"value":4243},"\"2016-01-01\"\n",{"type":41,"tag":181,"props":4245,"children":4246},{"class":183,"line":560},[4247,4252],{"type":41,"tag":181,"props":4248,"children":4249},{"style":499},[4250],{"type":47,"value":4251},"default_connections",{"type":41,"tag":181,"props":4253,"children":4254},{"style":505},[4255],{"type":47,"value":596},{"type":41,"tag":181,"props":4257,"children":4258},{"class":183,"line":11},[4259,4264,4268],{"type":41,"tag":181,"props":4260,"children":4261},{"style":499},[4262],{"type":47,"value":4263},"  google_cloud_platform",{"type":41,"tag":181,"props":4265,"children":4266},{"style":505},[4267],{"type":47,"value":508},{"type":41,"tag":181,"props":4269,"children":4270},{"style":194},[4271],{"type":47,"value":4272},"\"contoso_dbt_bq\"\n",{"type":41,"tag":95,"props":4274,"children":4275},{},[4276,4278,4283,4285,4291,4293,4299,4300,4306,4307,4313],{"type":47,"value":4277},"The ",{"type":41,"tag":60,"props":4279,"children":4281},{"className":4280},[],[4282],{"type":47,"value":4251},{"type":47,"value":4284}," block makes the connection name implicit for every asset Bruin generates in the next step — you won't have to repeat ",{"type":41,"tag":60,"props":4286,"children":4288},{"className":4287},[],[4289],{"type":47,"value":4290},"connection: contoso_dbt_bq",{"type":47,"value":4292}," in 40 separate YAMLs. For non-BigQuery warehouses, use the matching key (",{"type":41,"tag":60,"props":4294,"children":4296},{"className":4295},[],[4297],{"type":47,"value":4298},"postgres",{"type":47,"value":255},{"type":41,"tag":60,"props":4301,"children":4303},{"className":4302},[],[4304],{"type":47,"value":4305},"redshift",{"type":47,"value":255},{"type":41,"tag":60,"props":4308,"children":4310},{"className":4309},[],[4311],{"type":47,"value":4312},"clickhouse",{"type":47,"value":3388},{"type":41,"tag":351,"props":4315,"children":4316},{},[4317],{"type":41,"tag":95,"props":4318,"children":4319},{},[4320,4322,4327,4329,4334],{"type":47,"value":4321},"The pipeline never ",{"type":41,"tag":101,"props":4323,"children":4324},{},[4325],{"type":47,"value":4326},"runs",{"type":47,"value":4328}," anything — but Bruin still treats it as a pipeline, which gives you ",{"type":41,"tag":60,"props":4330,"children":4332},{"className":4331},[],[4333],{"type":47,"value":85},{"type":47,"value":4335},", lineage, and docs generation for free.",{"type":41,"tag":159,"props":4337,"children":4339},{"id":4338},"_4-test-the-connection",[4340],{"type":47,"value":4341},"4. Test the connection",{"type":41,"tag":95,"props":4343,"children":4344},{},[4345],{"type":47,"value":4346},"Confirm Bruin can reach the warehouse before going further:",{"type":41,"tag":171,"props":4348,"children":4350},{"className":173,"code":4349,"language":175,"meta":7,"style":7},"bruin connections ping --config-file context/.bruin.yml contoso_dbt_bq\n",[4351],{"type":41,"tag":60,"props":4352,"children":4353},{"__ignoreMap":7},[4354],{"type":41,"tag":181,"props":4355,"children":4356},{"class":183,"line":184},[4357,4361,4366,4371,4375,4379],{"type":41,"tag":181,"props":4358,"children":4359},{"style":188},[4360],{"type":47,"value":191},{"type":41,"tag":181,"props":4362,"children":4363},{"style":194},[4364],{"type":47,"value":4365}," connections",{"type":41,"tag":181,"props":4367,"children":4368},{"style":194},[4369],{"type":47,"value":4370}," ping",{"type":41,"tag":181,"props":4372,"children":4373},{"style":205},[4374],{"type":47,"value":1007},{"type":41,"tag":181,"props":4376,"children":4377},{"style":194},[4378],{"type":47,"value":1012},{"type":41,"tag":181,"props":4380,"children":4381},{"style":194},[4382],{"type":47,"value":4383}," contoso_dbt_bq\n",{"type":41,"tag":95,"props":4385,"children":4386},{},[4387],{"type":47,"value":1022},{"type":41,"tag":171,"props":4389,"children":4392},{"className":4390,"code":4391,"language":47},[1026],"Successfully connected to 'contoso_dbt_bq'.\n",[4393],{"type":41,"tag":60,"props":4394,"children":4395},{"__ignoreMap":7},[4396],{"type":47,"value":4391},{"type":41,"tag":95,"props":4398,"children":4399},{},[4400,4402,4407],{"type":47,"value":4401},"If you see an authentication error, run ",{"type":41,"tag":60,"props":4403,"children":4405},{"className":4404},[],[4406],{"type":47,"value":2899},{"type":47,"value":4408}," (BigQuery) or check your env vars (Postgres / Redshift / ClickHouse) and try again.",{"type":41,"tag":351,"props":4410,"children":4411},{},[4412],{"type":41,"tag":95,"props":4413,"children":4414},{},[4415,4427,4429,4434],{"type":41,"tag":229,"props":4416,"children":4417},{},[4418,4419,4425],{"type":47,"value":382},{"type":41,"tag":60,"props":4420,"children":4422},{"className":4421},[],[4423],{"type":47,"value":4424},"bruin connections test",{"type":47,"value":4426}," loads everything.",{"type":47,"value":4428}," It walks every connection in scope, so a broken sibling connection breaks the test. Always ",{"type":41,"tag":60,"props":4430,"children":4432},{"className":4431},[],[4433],{"type":47,"value":395},{"type":47,"value":4435},"-scope when working in a sub-pipeline.",{"type":41,"tag":42,"props":4437,"children":4438},{"id":1462},[4439],{"type":47,"value":1465},{"type":41,"tag":95,"props":4441,"children":4442},{},[4443,4445,4450],{"type":47,"value":4444},"You now have a self-contained Bruin pipeline at ",{"type":41,"tag":60,"props":4446,"children":4448},{"className":4447},[],[4449],{"type":47,"value":2798},{"type":47,"value":4451}," — 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":41,"tag":1486,"props":4453,"children":4454},{},[4455],{"type":47,"value":1490},{"title":7,"searchDepth":516,"depth":516,"links":4457},[4458,4459,4460,4468],{"id":44,"depth":516,"text":48},{"id":90,"depth":516,"text":93},{"id":154,"depth":516,"text":157,"children":4461},[4462,4463,4465,4467],{"id":3391,"depth":534,"text":3394},{"id":3448,"depth":534,"text":4464},"2. Write a scoped .bruin.yml",{"id":4159,"depth":534,"text":4466},"3. Write a pipeline.yml",{"id":4338,"depth":534,"text":4341},{"id":1462,"depth":516,"text":1465},"content:tutorials:dbt-bruin-analyst:isolated-context.md","tutorials/dbt-bruin-analyst/isolated-context.md","tutorials/dbt-bruin-analyst/isolated-context",{"_path":4473,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":4474,"description":4475,"date":10,"readingTime":560,"category":12,"tags":4476,"difficulty":17,"module":5,"step":534,"journeys":4477,"learnMore":4478,"stepGif":32,"author":4485,"body":4486,"_type":1502,"_id":5512,"_source":1504,"_file":5513,"_stem":5514,"_extension":1507},"/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],[20,21],[4479,4482],{"label":4480,"url":4481},"bruin import database (docs)","https://getbruin.com/docs/bruin/commands/import.html",{"label":4483,"url":4484},"Asset definition schema","https://getbruin.com/docs/bruin/assets/definition-schema.html",{"name":34,"role":35,"image":36},{"type":38,"children":4487,"toc":5499},[4488,4492,4537,4541,4546,4565,4569,4575,4580,4628,4663,4669,4689,4798,4811,4891,4925,4931,4951,4963,4972,4977,5161,5166,5172,5184,5301,5306,5312,5317,5346,5351,5359,5364,5370,5378,5403,5411,5431,5444,5468,5476,5481,5485,5495],{"type":41,"tag":42,"props":4489,"children":4490},{"id":44},[4491],{"type":47,"value":48},{"type":41,"tag":95,"props":4493,"children":4494},{},[4495,4496,4502,4504,4509,4510,4515,4516,4521,4523,4529,4531,4536],{"type":47,"value":58},{"type":41,"tag":60,"props":4497,"children":4499},{"className":4498},[],[4500],{"type":47,"value":4501},"bruin import database",{"type":47,"value":4503}," against the schemas your dbt project materializes (e.g., ",{"type":41,"tag":60,"props":4505,"children":4507},{"className":4506},[],[4508],{"type":47,"value":2927},{"type":47,"value":255},{"type":41,"tag":60,"props":4511,"children":4513},{"className":4512},[],[4514],{"type":47,"value":2948},{"type":47,"value":255},{"type":41,"tag":60,"props":4517,"children":4519},{"className":4518},[],[4520],{"type":47,"value":2967},{"type":47,"value":4522},"). Bruin connects to the warehouse, reads each table's column list and types, and writes one ",{"type":41,"tag":60,"props":4524,"children":4526},{"className":4525},[],[4527],{"type":47,"value":4528},".asset.yml",{"type":47,"value":4530}," per table under ",{"type":41,"tag":60,"props":4532,"children":4534},{"className":4533},[],[4535],{"type":47,"value":73},{"type":47,"value":349},{"type":41,"tag":42,"props":4538,"children":4539},{"id":90},[4540],{"type":47,"value":93},{"type":41,"tag":95,"props":4542,"children":4543},{},[4544],{"type":47,"value":4545},"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":41,"tag":95,"props":4547,"children":4548},{},[4549,4551,4556,4558,4563],{"type":47,"value":4550},"What you get out of this step is ",{"type":41,"tag":101,"props":4552,"children":4553},{},[4554],{"type":47,"value":4555},"structure",{"type":47,"value":4557},": tables, columns, types. The next step (AI enhance) adds the ",{"type":41,"tag":101,"props":4559,"children":4560},{},[4561],{"type":47,"value":4562},"meaning",{"type":47,"value":4564},": descriptions, tags, quality checks. Both halves matter — but the structure has to come from the warehouse, not from a guess.",{"type":41,"tag":42,"props":4566,"children":4567},{"id":154},[4568],{"type":47,"value":157},{"type":41,"tag":159,"props":4570,"children":4572},{"id":4571},"_1-identify-your-dbt-schemas",[4573],{"type":47,"value":4574},"1. Identify your dbt schemas",{"type":41,"tag":95,"props":4576,"children":4577},{},[4578],{"type":47,"value":4579},"You need the actual warehouse schema names. If you used the reference contoso project's schema convention, they're:",{"type":41,"tag":220,"props":4581,"children":4582},{},[4583,4594,4611],{"type":41,"tag":54,"props":4584,"children":4585},{},[4586,4592],{"type":41,"tag":60,"props":4587,"children":4589},{"className":4588},[],[4590],{"type":47,"value":4591},"contoso_dbt_raw",{"type":47,"value":4593}," — what dlt loads",{"type":41,"tag":54,"props":4595,"children":4596},{},[4597,4602,4603,4609],{"type":41,"tag":60,"props":4598,"children":4600},{"className":4599},[],[4601],{"type":47,"value":2994},{"type":47,"value":290},{"type":41,"tag":60,"props":4604,"children":4606},{"className":4605},[],[4607],{"type":47,"value":4608},"stg_*",{"type":47,"value":4610}," models",{"type":41,"tag":54,"props":4612,"children":4613},{},[4614,4620,4621,4627],{"type":41,"tag":60,"props":4615,"children":4617},{"className":4616},[],[4618],{"type":47,"value":4619},"contoso_dbt_reports",{"type":47,"value":290},{"type":41,"tag":60,"props":4622,"children":4624},{"className":4623},[],[4625],{"type":47,"value":4626},"rpt_*",{"type":47,"value":4610},{"type":41,"tag":95,"props":4629,"children":4630},{},[4631,4633,4638,4640,4646,4648,4654,4656,4661],{"type":47,"value":4632},"If you're not sure what your dbt project lands as, check ",{"type":41,"tag":60,"props":4634,"children":4636},{"className":4635},[],[4637],{"type":47,"value":2883},{"type":47,"value":4639},". The full schema name is ",{"type":41,"tag":60,"props":4641,"children":4643},{"className":4642},[],[4644],{"type":47,"value":4645},"\u003Ctarget.schema>_\u003C+schema>",{"type":47,"value":4647}," by default, or just ",{"type":41,"tag":60,"props":4649,"children":4651},{"className":4650},[],[4652],{"type":47,"value":4653},"\u003C+schema>",{"type":47,"value":4655}," if you've overridden ",{"type":41,"tag":60,"props":4657,"children":4659},{"className":4658},[],[4660],{"type":47,"value":3031},{"type":47,"value":4662}," (the contoso project does).",{"type":41,"tag":159,"props":4664,"children":4666},{"id":4665},"_2-run-the-import",[4667],{"type":47,"value":4668},"2. Run the import",{"type":41,"tag":95,"props":4670,"children":4671},{},[4672,4674,4679,4681,4687],{"type":47,"value":4673},"From the dbt project root, point the import at your ",{"type":41,"tag":60,"props":4675,"children":4677},{"className":4676},[],[4678],{"type":47,"value":2798},{"type":47,"value":4680}," pipeline folder. The ",{"type":41,"tag":60,"props":4682,"children":4684},{"className":4683},[],[4685],{"type":47,"value":4686},"--schemas",{"type":47,"value":4688}," flag is repeatable for BigQuery — pass it once per schema:",{"type":41,"tag":171,"props":4690,"children":4692},{"className":173,"code":4691,"language":175,"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",[4693],{"type":41,"tag":60,"props":4694,"children":4695},{"__ignoreMap":7},[4696,4715,4730,4745,4760,4775,4790],{"type":41,"tag":181,"props":4697,"children":4698},{"class":183,"line":184},[4699,4703,4707,4711],{"type":41,"tag":181,"props":4700,"children":4701},{"style":188},[4702],{"type":47,"value":191},{"type":41,"tag":181,"props":4704,"children":4705},{"style":194},[4706],{"type":47,"value":1176},{"type":41,"tag":181,"props":4708,"children":4709},{"style":194},[4710],{"type":47,"value":1181},{"type":41,"tag":181,"props":4712,"children":4713},{"style":205},[4714],{"type":47,"value":1186},{"type":41,"tag":181,"props":4716,"children":4717},{"class":183,"line":516},[4718,4722,4726],{"type":41,"tag":181,"props":4719,"children":4720},{"style":205},[4721],{"type":47,"value":1194},{"type":41,"tag":181,"props":4723,"children":4724},{"style":194},[4725],{"type":47,"value":1012},{"type":41,"tag":181,"props":4727,"children":4728},{"style":205},[4729],{"type":47,"value":1186},{"type":41,"tag":181,"props":4731,"children":4732},{"class":183,"line":534},[4733,4737,4741],{"type":41,"tag":181,"props":4734,"children":4735},{"style":205},[4736],{"type":47,"value":1221},{"type":41,"tag":181,"props":4738,"children":4739},{"style":194},[4740],{"type":47,"value":1226},{"type":41,"tag":181,"props":4742,"children":4743},{"style":205},[4744],{"type":47,"value":1186},{"type":41,"tag":181,"props":4746,"children":4747},{"class":183,"line":18},[4748,4752,4756],{"type":41,"tag":181,"props":4749,"children":4750},{"style":205},[4751],{"type":47,"value":1238},{"type":41,"tag":181,"props":4753,"children":4754},{"style":194},[4755],{"type":47,"value":1243},{"type":41,"tag":181,"props":4757,"children":4758},{"style":205},[4759],{"type":47,"value":1186},{"type":41,"tag":181,"props":4761,"children":4762},{"class":183,"line":560},[4763,4767,4771],{"type":41,"tag":181,"props":4764,"children":4765},{"style":205},[4766],{"type":47,"value":1238},{"type":41,"tag":181,"props":4768,"children":4769},{"style":194},[4770],{"type":47,"value":1259},{"type":41,"tag":181,"props":4772,"children":4773},{"style":205},[4774],{"type":47,"value":1186},{"type":41,"tag":181,"props":4776,"children":4777},{"class":183,"line":11},[4778,4782,4786],{"type":41,"tag":181,"props":4779,"children":4780},{"style":205},[4781],{"type":47,"value":1238},{"type":41,"tag":181,"props":4783,"children":4784},{"style":194},[4785],{"type":47,"value":1275},{"type":41,"tag":181,"props":4787,"children":4788},{"style":205},[4789],{"type":47,"value":1186},{"type":41,"tag":181,"props":4791,"children":4792},{"class":183,"line":577},[4793],{"type":41,"tag":181,"props":4794,"children":4795},{"style":194},[4796],{"type":47,"value":4797},"  context\n",{"type":41,"tag":95,"props":4799,"children":4800},{},[4801,4803,4809],{"type":47,"value":4802},"For Postgres, Redshift, or ClickHouse, use ",{"type":41,"tag":60,"props":4804,"children":4806},{"className":4805},[],[4807],{"type":47,"value":4808},"--schema",{"type":47,"value":4810}," (singular) once per run:",{"type":41,"tag":171,"props":4812,"children":4814},{"className":173,"code":4813,"language":175,"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",[4815],{"type":41,"tag":60,"props":4816,"children":4817},{"__ignoreMap":7},[4818,4837,4852,4868,4884],{"type":41,"tag":181,"props":4819,"children":4820},{"class":183,"line":184},[4821,4825,4829,4833],{"type":41,"tag":181,"props":4822,"children":4823},{"style":188},[4824],{"type":47,"value":191},{"type":41,"tag":181,"props":4826,"children":4827},{"style":194},[4828],{"type":47,"value":1176},{"type":41,"tag":181,"props":4830,"children":4831},{"style":194},[4832],{"type":47,"value":1181},{"type":41,"tag":181,"props":4834,"children":4835},{"style":205},[4836],{"type":47,"value":1186},{"type":41,"tag":181,"props":4838,"children":4839},{"class":183,"line":516},[4840,4844,4848],{"type":41,"tag":181,"props":4841,"children":4842},{"style":205},[4843],{"type":47,"value":1194},{"type":41,"tag":181,"props":4845,"children":4846},{"style":194},[4847],{"type":47,"value":1012},{"type":41,"tag":181,"props":4849,"children":4850},{"style":205},[4851],{"type":47,"value":1186},{"type":41,"tag":181,"props":4853,"children":4854},{"class":183,"line":534},[4855,4859,4864],{"type":41,"tag":181,"props":4856,"children":4857},{"style":205},[4858],{"type":47,"value":1221},{"type":41,"tag":181,"props":4860,"children":4861},{"style":194},[4862],{"type":47,"value":4863}," contoso_dbt_pg",{"type":41,"tag":181,"props":4865,"children":4866},{"style":205},[4867],{"type":47,"value":1186},{"type":41,"tag":181,"props":4869,"children":4870},{"class":183,"line":18},[4871,4876,4880],{"type":41,"tag":181,"props":4872,"children":4873},{"style":205},[4874],{"type":47,"value":4875},"  --schema",{"type":41,"tag":181,"props":4877,"children":4878},{"style":194},[4879],{"type":47,"value":1259},{"type":41,"tag":181,"props":4881,"children":4882},{"style":205},[4883],{"type":47,"value":1186},{"type":41,"tag":181,"props":4885,"children":4886},{"class":183,"line":560},[4887],{"type":41,"tag":181,"props":4888,"children":4889},{"style":194},[4890],{"type":47,"value":4797},{"type":41,"tag":351,"props":4892,"children":4893},{},[4894],{"type":41,"tag":95,"props":4895,"children":4896},{},[4897,4902,4904,4909,4911,4917,4919,4924],{"type":41,"tag":229,"props":4898,"children":4899},{},[4900],{"type":47,"value":4901},"Note:",{"type":47,"value":4903}," The trailing positional argument is the ",{"type":41,"tag":229,"props":4905,"children":4906},{},[4907],{"type":47,"value":4908},"pipeline path",{"type":47,"value":4910},", not the project root. That's ",{"type":41,"tag":60,"props":4912,"children":4914},{"className":4913},[],[4915],{"type":47,"value":4916},"context",{"type":47,"value":4918}," in our setup — the directory containing ",{"type":41,"tag":60,"props":4920,"children":4922},{"className":4921},[],[4923],{"type":47,"value":3328},{"type":47,"value":349},{"type":41,"tag":159,"props":4926,"children":4928},{"id":4927},"_3-inspect-what-was-generated",[4929],{"type":47,"value":4930},"3. Inspect what was generated",{"type":41,"tag":171,"props":4932,"children":4934},{"className":173,"code":4933,"language":175,"meta":7,"style":7},"ls context/assets/\n",[4935],{"type":41,"tag":60,"props":4936,"children":4937},{"__ignoreMap":7},[4938],{"type":41,"tag":181,"props":4939,"children":4940},{"class":183,"line":184},[4941,4946],{"type":41,"tag":181,"props":4942,"children":4943},{"style":188},[4944],{"type":47,"value":4945},"ls",{"type":41,"tag":181,"props":4947,"children":4948},{"style":194},[4949],{"type":47,"value":4950}," context/assets/\n",{"type":41,"tag":95,"props":4952,"children":4953},{},[4954,4956,4961],{"type":47,"value":4955},"You should see one folder per schema, each containing one ",{"type":41,"tag":60,"props":4957,"children":4959},{"className":4958},[],[4960],{"type":47,"value":4528},{"type":47,"value":4962}," per table:",{"type":41,"tag":171,"props":4964,"children":4967},{"className":4965,"code":4966,"language":47},[1026],"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",[4968],{"type":41,"tag":60,"props":4969,"children":4970},{"__ignoreMap":7},[4971],{"type":47,"value":4966},{"type":41,"tag":95,"props":4973,"children":4974},{},[4975],{"type":47,"value":4976},"Open one — they look like this:",{"type":41,"tag":171,"props":4978,"children":4980},{"className":487,"code":4979,"language":489,"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",[4981],{"type":41,"tag":60,"props":4982,"children":4983},{"__ignoreMap":7},[4984,4999,5014,5025,5044,5059,5078,5093,5112,5127,5146],{"type":41,"tag":181,"props":4985,"children":4986},{"class":183,"line":184},[4987,4991,4995],{"type":41,"tag":181,"props":4988,"children":4989},{"style":499},[4990],{"type":47,"value":502},{"type":41,"tag":181,"props":4992,"children":4993},{"style":505},[4994],{"type":47,"value":508},{"type":41,"tag":181,"props":4996,"children":4997},{"style":194},[4998],{"type":47,"value":513},{"type":41,"tag":181,"props":5000,"children":5001},{"class":183,"line":516},[5002,5006,5010],{"type":41,"tag":181,"props":5003,"children":5004},{"style":499},[5005],{"type":47,"value":522},{"type":41,"tag":181,"props":5007,"children":5008},{"style":505},[5009],{"type":47,"value":508},{"type":41,"tag":181,"props":5011,"children":5012},{"style":194},[5013],{"type":47,"value":531},{"type":41,"tag":181,"props":5015,"children":5016},{"class":183,"line":534},[5017,5021],{"type":41,"tag":181,"props":5018,"children":5019},{"style":499},[5020],{"type":47,"value":645},{"type":41,"tag":181,"props":5022,"children":5023},{"style":505},[5024],{"type":47,"value":596},{"type":41,"tag":181,"props":5026,"children":5027},{"class":183,"line":18},[5028,5032,5036,5040],{"type":41,"tag":181,"props":5029,"children":5030},{"style":505},[5031],{"type":47,"value":605},{"type":41,"tag":181,"props":5033,"children":5034},{"style":499},[5035],{"type":47,"value":502},{"type":41,"tag":181,"props":5037,"children":5038},{"style":505},[5039],{"type":47,"value":508},{"type":41,"tag":181,"props":5041,"children":5042},{"style":194},[5043],{"type":47,"value":670},{"type":41,"tag":181,"props":5045,"children":5046},{"class":183,"line":560},[5047,5051,5055],{"type":41,"tag":181,"props":5048,"children":5049},{"style":499},[5050],{"type":47,"value":679},{"type":41,"tag":181,"props":5052,"children":5053},{"style":505},[5054],{"type":47,"value":508},{"type":41,"tag":181,"props":5056,"children":5057},{"style":194},[5058],{"type":47,"value":688},{"type":41,"tag":181,"props":5060,"children":5061},{"class":183,"line":11},[5062,5066,5070,5074],{"type":41,"tag":181,"props":5063,"children":5064},{"style":505},[5065],{"type":47,"value":605},{"type":41,"tag":181,"props":5067,"children":5068},{"style":499},[5069],{"type":47,"value":502},{"type":41,"tag":181,"props":5071,"children":5072},{"style":505},[5073],{"type":47,"value":508},{"type":41,"tag":181,"props":5075,"children":5076},{"style":194},[5077],{"type":47,"value":762},{"type":41,"tag":181,"props":5079,"children":5080},{"class":183,"line":577},[5081,5085,5089],{"type":41,"tag":181,"props":5082,"children":5083},{"style":499},[5084],{"type":47,"value":679},{"type":41,"tag":181,"props":5086,"children":5087},{"style":505},[5088],{"type":47,"value":508},{"type":41,"tag":181,"props":5090,"children":5091},{"style":194},[5092],{"type":47,"value":688},{"type":41,"tag":181,"props":5094,"children":5095},{"class":183,"line":586},[5096,5100,5104,5108],{"type":41,"tag":181,"props":5097,"children":5098},{"style":505},[5099],{"type":47,"value":605},{"type":41,"tag":181,"props":5101,"children":5102},{"style":499},[5103],{"type":47,"value":502},{"type":41,"tag":181,"props":5105,"children":5106},{"style":505},[5107],{"type":47,"value":508},{"type":41,"tag":181,"props":5109,"children":5110},{"style":194},[5111],{"type":47,"value":848},{"type":41,"tag":181,"props":5113,"children":5114},{"class":183,"line":599},[5115,5119,5123],{"type":41,"tag":181,"props":5116,"children":5117},{"style":499},[5118],{"type":47,"value":679},{"type":41,"tag":181,"props":5120,"children":5121},{"style":505},[5122],{"type":47,"value":508},{"type":41,"tag":181,"props":5124,"children":5125},{"style":194},[5126],{"type":47,"value":865},{"type":41,"tag":181,"props":5128,"children":5129},{"class":183,"line":613},[5130,5134,5138,5142],{"type":41,"tag":181,"props":5131,"children":5132},{"style":505},[5133],{"type":47,"value":605},{"type":41,"tag":181,"props":5135,"children":5136},{"style":499},[5137],{"type":47,"value":502},{"type":41,"tag":181,"props":5139,"children":5140},{"style":505},[5141],{"type":47,"value":508},{"type":41,"tag":181,"props":5143,"children":5144},{"style":194},[5145],{"type":47,"value":903},{"type":41,"tag":181,"props":5147,"children":5148},{"class":183,"line":626},[5149,5153,5157],{"type":41,"tag":181,"props":5150,"children":5151},{"style":499},[5152],{"type":47,"value":679},{"type":41,"tag":181,"props":5154,"children":5155},{"style":505},[5156],{"type":47,"value":508},{"type":41,"tag":181,"props":5158,"children":5159},{"style":194},[5160],{"type":47,"value":920},{"type":41,"tag":95,"props":5162,"children":5163},{},[5164],{"type":47,"value":5165},"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":41,"tag":159,"props":5167,"children":5169},{"id":5168},"_4-filter-out-loader-internal-tables",[5170],{"type":47,"value":5171},"4. Filter out loader-internal tables",{"type":41,"tag":95,"props":5173,"children":5174},{},[5175,5177,5183],{"type":47,"value":5176},"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":41,"tag":60,"props":5178,"children":5180},{"className":5179},[],[5181],{"type":47,"value":5182},"_dlt_pipeline_state",{"type":47,"value":4178},{"type":41,"tag":171,"props":5185,"children":5187},{"className":173,"code":5186,"language":175,"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",[5188],{"type":41,"tag":60,"props":5189,"children":5190},{"__ignoreMap":7},[5191,5199,5223,5230,5238,5262,5269,5277],{"type":41,"tag":181,"props":5192,"children":5193},{"class":183,"line":184},[5194],{"type":41,"tag":181,"props":5195,"children":5196},{"style":1092},[5197],{"type":47,"value":5198},"# dlt\n",{"type":41,"tag":181,"props":5200,"children":5201},{"class":183,"line":516},[5202,5206,5211,5215,5219],{"type":41,"tag":181,"props":5203,"children":5204},{"style":188},[5205],{"type":47,"value":1312},{"type":41,"tag":181,"props":5207,"children":5208},{"style":194},[5209],{"type":47,"value":5210}," context/assets",{"type":41,"tag":181,"props":5212,"children":5213},{"style":205},[5214],{"type":47,"value":1330},{"type":41,"tag":181,"props":5216,"children":5217},{"style":194},[5218],{"type":47,"value":1335},{"type":41,"tag":181,"props":5220,"children":5221},{"style":205},[5222],{"type":47,"value":1340},{"type":41,"tag":181,"props":5224,"children":5225},{"class":183,"line":534},[5226],{"type":41,"tag":181,"props":5227,"children":5228},{"emptyLinePlaceholder":1119},[5229],{"type":47,"value":1122},{"type":41,"tag":181,"props":5231,"children":5232},{"class":183,"line":18},[5233],{"type":41,"tag":181,"props":5234,"children":5235},{"style":1092},[5236],{"type":47,"value":5237},"# Airbyte\n",{"type":41,"tag":181,"props":5239,"children":5240},{"class":183,"line":560},[5241,5245,5249,5253,5258],{"type":41,"tag":181,"props":5242,"children":5243},{"style":188},[5244],{"type":47,"value":1312},{"type":41,"tag":181,"props":5246,"children":5247},{"style":194},[5248],{"type":47,"value":5210},{"type":41,"tag":181,"props":5250,"children":5251},{"style":205},[5252],{"type":47,"value":1330},{"type":41,"tag":181,"props":5254,"children":5255},{"style":194},[5256],{"type":47,"value":5257}," \"_airbyte_*.asset.yml\"",{"type":41,"tag":181,"props":5259,"children":5260},{"style":205},[5261],{"type":47,"value":1340},{"type":41,"tag":181,"props":5263,"children":5264},{"class":183,"line":11},[5265],{"type":41,"tag":181,"props":5266,"children":5267},{"emptyLinePlaceholder":1119},[5268],{"type":47,"value":1122},{"type":41,"tag":181,"props":5270,"children":5271},{"class":183,"line":577},[5272],{"type":41,"tag":181,"props":5273,"children":5274},{"style":1092},[5275],{"type":47,"value":5276},"# Fivetran\n",{"type":41,"tag":181,"props":5278,"children":5279},{"class":183,"line":586},[5280,5284,5288,5292,5297],{"type":41,"tag":181,"props":5281,"children":5282},{"style":188},[5283],{"type":47,"value":1312},{"type":41,"tag":181,"props":5285,"children":5286},{"style":194},[5287],{"type":47,"value":5210},{"type":41,"tag":181,"props":5289,"children":5290},{"style":205},[5291],{"type":47,"value":1330},{"type":41,"tag":181,"props":5293,"children":5294},{"style":194},[5295],{"type":47,"value":5296}," \"fivetran_*.asset.yml\"",{"type":41,"tag":181,"props":5298,"children":5299},{"style":205},[5300],{"type":47,"value":1340},{"type":41,"tag":95,"props":5302,"children":5303},{},[5304],{"type":47,"value":5305},"Run only the one(s) that match your loader. The contoso project uses dlt, so the first command applies.",{"type":41,"tag":159,"props":5307,"children":5309},{"id":5308},"_5-optional-validate-the-structure",[5310],{"type":47,"value":5311},"5. (Optional) Validate the structure",{"type":41,"tag":95,"props":5313,"children":5314},{},[5315],{"type":47,"value":5316},"Even before enhancement, you can sanity-check the YAMLs:",{"type":41,"tag":171,"props":5318,"children":5319},{"className":173,"code":986,"language":175,"meta":7,"style":7},[5320],{"type":41,"tag":60,"props":5321,"children":5322},{"__ignoreMap":7},[5323],{"type":41,"tag":181,"props":5324,"children":5325},{"class":183,"line":184},[5326,5330,5334,5338,5342],{"type":41,"tag":181,"props":5327,"children":5328},{"style":188},[5329],{"type":47,"value":191},{"type":41,"tag":181,"props":5331,"children":5332},{"style":194},[5333],{"type":47,"value":1002},{"type":41,"tag":181,"props":5335,"children":5336},{"style":205},[5337],{"type":47,"value":1007},{"type":41,"tag":181,"props":5339,"children":5340},{"style":194},[5341],{"type":47,"value":1012},{"type":41,"tag":181,"props":5343,"children":5344},{"style":194},[5345],{"type":47,"value":1017},{"type":41,"tag":95,"props":5347,"children":5348},{},[5349],{"type":47,"value":5350},"You should see one line per asset and a summary like:",{"type":41,"tag":171,"props":5352,"children":5354},{"className":5353,"code":1027,"language":47},[1026],[5355],{"type":41,"tag":60,"props":5356,"children":5357},{"__ignoreMap":7},[5358],{"type":47,"value":1027},{"type":41,"tag":95,"props":5360,"children":5361},{},[5362],{"type":47,"value":5363},"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":41,"tag":42,"props":5365,"children":5367},{"id":5366},"troubleshooting",[5368],{"type":47,"value":5369},"Troubleshooting",{"type":41,"tag":95,"props":5371,"children":5372},{},[5373],{"type":41,"tag":229,"props":5374,"children":5375},{},[5376],{"type":47,"value":5377},"\"connection not found\"",{"type":41,"tag":95,"props":5379,"children":5380},{},[5381,5383,5388,5390,5395,5397,5402],{"type":47,"value":5382},"You didn't pass ",{"type":41,"tag":60,"props":5384,"children":5386},{"className":5385},[],[5387],{"type":47,"value":395},{"type":47,"value":5389},", so Bruin loaded a different ",{"type":41,"tag":60,"props":5391,"children":5393},{"className":5392},[],[5394],{"type":47,"value":3320},{"type":47,"value":5396}," from elsewhere in the repo. Always include ",{"type":41,"tag":60,"props":5398,"children":5400},{"className":5399},[],[5401],{"type":47,"value":3699},{"type":47,"value":349},{"type":41,"tag":95,"props":5404,"children":5405},{},[5406],{"type":41,"tag":229,"props":5407,"children":5408},{},[5409],{"type":47,"value":5410},"\"permission denied\" / \"access denied\" on a schema",{"type":41,"tag":95,"props":5412,"children":5413},{},[5414,5416,5422,5424,5429],{"type":47,"value":5415},"Your connection identity is missing read access. For BigQuery, the role is ",{"type":41,"tag":60,"props":5417,"children":5419},{"className":5418},[],[5420],{"type":47,"value":5421},"BigQuery Data Viewer",{"type":47,"value":5423}," on the dataset; for Postgres / Redshift, it's ",{"type":41,"tag":60,"props":5425,"children":5427},{"className":5426},[],[5428],{"type":47,"value":3146},{"type":47,"value":5430}," on the schema's tables.",{"type":41,"tag":95,"props":5432,"children":5433},{},[5434],{"type":41,"tag":229,"props":5435,"children":5436},{},[5437,5439],{"type":47,"value":5438},"Some tables are missing from ",{"type":41,"tag":60,"props":5440,"children":5442},{"className":5441},[],[5443],{"type":47,"value":73},{"type":41,"tag":95,"props":5445,"children":5446},{},[5447,5452,5454,5459,5461,5466],{"type":41,"tag":60,"props":5448,"children":5450},{"className":5449},[],[5451],{"type":47,"value":4501},{"type":47,"value":5453}," only writes assets for tables that exist ",{"type":41,"tag":101,"props":5455,"children":5456},{},[5457],{"type":47,"value":5458},"right now",{"type":47,"value":5460},". If a dbt model failed to materialize, it won't be there. Re-run ",{"type":41,"tag":60,"props":5462,"children":5464},{"className":5463},[],[5465],{"type":47,"value":2777},{"type":47,"value":5467},", then re-run the import.",{"type":41,"tag":95,"props":5469,"children":5470},{},[5471],{"type":41,"tag":229,"props":5472,"children":5473},{},[5474],{"type":47,"value":5475},"Import is slow on a large schema",{"type":41,"tag":95,"props":5477,"children":5478},{},[5479],{"type":47,"value":5480},"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":41,"tag":42,"props":5482,"children":5483},{"id":1462},[5484],{"type":47,"value":1465},{"type":41,"tag":95,"props":5486,"children":5487},{},[5488,5493],{"type":41,"tag":60,"props":5489,"children":5491},{"className":5490},[],[5492],{"type":47,"value":73},{"type":47,"value":5494}," 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":41,"tag":1486,"props":5496,"children":5497},{},[5498],{"type":47,"value":1490},{"title":7,"searchDepth":516,"depth":516,"links":5500},[5501,5502,5503,5510,5511],{"id":44,"depth":516,"text":48},{"id":90,"depth":516,"text":93},{"id":154,"depth":516,"text":157,"children":5504},[5505,5506,5507,5508,5509],{"id":4571,"depth":534,"text":4574},{"id":4665,"depth":534,"text":4668},{"id":4927,"depth":534,"text":4930},{"id":5168,"depth":534,"text":5171},{"id":5308,"depth":534,"text":5311},{"id":5366,"depth":516,"text":5369},{"id":1462,"depth":516,"text":1465},"content:tutorials:dbt-bruin-analyst:import-schemas.md","tutorials/dbt-bruin-analyst/import-schemas.md","tutorials/dbt-bruin-analyst/import-schemas",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"readingTime":11,"category":12,"tags":5516,"difficulty":17,"module":5,"step":18,"journeys":5517,"learnMore":5518,"stepGif":32,"author":5522,"body":5523,"_type":1502,"_id":1503,"_source":1504,"_file":1505,"_stem":1506,"_extension":1507},[14,15,16],[20,21],[5519,5520,5521],{"label":24,"url":25},{"label":27,"url":28},{"label":30,"url":31},{"name":34,"role":35,"image":36},{"type":38,"children":5524,"toc":6723},[5525,5529,5558,5562,5589,5605,5609,5613,5617,5646,5650,5723,5751,5768,5797,5832,5836,5840,5857,5861,6251,6255,6284,6288,6317,6321,6329,6333,6337,6363,6667,6677,6700,6704,6719],{"type":41,"tag":42,"props":5526,"children":5527},{"id":44},[5528],{"type":47,"value":48},{"type":41,"tag":50,"props":5530,"children":5531},{},[5532,5548],{"type":41,"tag":54,"props":5533,"children":5534},{},[5535,5536,5541,5542,5547],{"type":47,"value":58},{"type":41,"tag":60,"props":5537,"children":5539},{"className":5538},[],[5540],{"type":47,"value":65},{"type":47,"value":67},{"type":41,"tag":60,"props":5543,"children":5545},{"className":5544},[],[5546],{"type":47,"value":73},{"type":47,"value":75},{"type":41,"tag":54,"props":5549,"children":5550},{},[5551,5552,5557],{"type":47,"value":58},{"type":41,"tag":60,"props":5553,"children":5555},{"className":5554},[],[5556],{"type":47,"value":85},{"type":47,"value":87},{"type":41,"tag":42,"props":5559,"children":5560},{"id":90},[5561],{"type":47,"value":93},{"type":41,"tag":95,"props":5563,"children":5564},{},[5565,5566,5570,5571,5576,5577,5582,5583,5588],{"type":47,"value":99},{"type":41,"tag":101,"props":5567,"children":5568},{},[5569],{"type":47,"value":105},{"type":47,"value":107},{"type":41,"tag":60,"props":5572,"children":5574},{"className":5573},[],[5575],{"type":47,"value":113},{"type":47,"value":115},{"type":41,"tag":60,"props":5578,"children":5580},{"className":5579},[],[5581],{"type":47,"value":121},{"type":47,"value":123},{"type":41,"tag":60,"props":5584,"children":5586},{"className":5585},[],[5587],{"type":47,"value":129},{"type":47,"value":131},{"type":41,"tag":95,"props":5590,"children":5591},{},[5592,5593,5598,5599,5604],{"type":47,"value":136},{"type":41,"tag":60,"props":5594,"children":5596},{"className":5595},[],[5597],{"type":47,"value":142},{"type":47,"value":144},{"type":41,"tag":60,"props":5600,"children":5602},{"className":5601},[],[5603],{"type":47,"value":85},{"type":47,"value":151},{"type":41,"tag":42,"props":5606,"children":5607},{"id":154},[5608],{"type":47,"value":157},{"type":41,"tag":159,"props":5610,"children":5611},{"id":161},[5612],{"type":47,"value":164},{"type":41,"tag":95,"props":5614,"children":5615},{},[5616],{"type":47,"value":169},{"type":41,"tag":171,"props":5618,"children":5619},{"className":173,"code":174,"language":175,"meta":7,"style":7},[5620],{"type":41,"tag":60,"props":5621,"children":5622},{"__ignoreMap":7},[5623],{"type":41,"tag":181,"props":5624,"children":5625},{"class":183,"line":184},[5626,5630,5634,5638,5642],{"type":41,"tag":181,"props":5627,"children":5628},{"style":188},[5629],{"type":47,"value":191},{"type":41,"tag":181,"props":5631,"children":5632},{"style":194},[5633],{"type":47,"value":197},{"type":41,"tag":181,"props":5635,"children":5636},{"style":194},[5637],{"type":47,"value":202},{"type":41,"tag":181,"props":5639,"children":5640},{"style":205},[5641],{"type":47,"value":208},{"type":41,"tag":181,"props":5643,"children":5644},{"style":194},[5645],{"type":47,"value":213},{"type":41,"tag":95,"props":5647,"children":5648},{},[5649],{"type":47,"value":218},{"type":41,"tag":220,"props":5651,"children":5652},{},[5653,5662,5688,5697],{"type":41,"tag":54,"props":5654,"children":5655},{},[5656,5657,5661],{"type":47,"value":227},{"type":41,"tag":229,"props":5658,"children":5659},{},[5660],{"type":47,"value":233},{"type":47,"value":235},{"type":41,"tag":54,"props":5663,"children":5664},{},[5665,5666,5670,5671,5676,5677,5682,5683],{"type":47,"value":240},{"type":41,"tag":229,"props":5667,"children":5668},{},[5669],{"type":47,"value":245},{"type":47,"value":247},{"type":41,"tag":60,"props":5672,"children":5674},{"className":5673},[],[5675],{"type":47,"value":253},{"type":47,"value":255},{"type":41,"tag":60,"props":5678,"children":5680},{"className":5679},[],[5681],{"type":47,"value":261},{"type":47,"value":255},{"type":41,"tag":60,"props":5684,"children":5686},{"className":5685},[],[5687],{"type":47,"value":268},{"type":41,"tag":54,"props":5689,"children":5690},{},[5691,5692,5696],{"type":47,"value":273},{"type":41,"tag":229,"props":5693,"children":5694},{},[5695],{"type":47,"value":278},{"type":47,"value":280},{"type":41,"tag":54,"props":5698,"children":5699},{},[5700,5704,5705,5710,5711,5716,5717,5722],{"type":41,"tag":229,"props":5701,"children":5702},{},[5703],{"type":47,"value":288},{"type":47,"value":290},{"type":41,"tag":60,"props":5706,"children":5708},{"className":5707},[],[5709],{"type":47,"value":296},{"type":47,"value":298},{"type":41,"tag":60,"props":5712,"children":5714},{"className":5713},[],[5715],{"type":47,"value":304},{"type":47,"value":306},{"type":41,"tag":60,"props":5718,"children":5720},{"className":5719},[],[5721],{"type":47,"value":312},{"type":47,"value":314},{"type":41,"tag":95,"props":5724,"children":5725},{},[5726,5727,5732,5733,5738,5739,5744,5745,5750],{"type":47,"value":319},{"type":41,"tag":60,"props":5728,"children":5730},{"className":5729},[],[5731],{"type":47,"value":325},{"type":47,"value":255},{"type":41,"tag":60,"props":5734,"children":5736},{"className":5735},[],[5737],{"type":47,"value":332},{"type":47,"value":255},{"type":41,"tag":60,"props":5740,"children":5742},{"className":5741},[],[5743],{"type":47,"value":339},{"type":47,"value":341},{"type":41,"tag":60,"props":5746,"children":5748},{"className":5747},[],[5749],{"type":47,"value":347},{"type":47,"value":349},{"type":41,"tag":351,"props":5752,"children":5753},{},[5754],{"type":41,"tag":95,"props":5755,"children":5756},{},[5757,5761,5762,5767],{"type":41,"tag":229,"props":5758,"children":5759},{},[5760],{"type":47,"value":361},{"type":47,"value":363},{"type":41,"tag":60,"props":5763,"children":5765},{"className":5764},[],[5766],{"type":47,"value":369},{"type":47,"value":371},{"type":41,"tag":351,"props":5769,"children":5770},{},[5771],{"type":41,"tag":95,"props":5772,"children":5773},{},[5774,5790,5791,5796],{"type":41,"tag":229,"props":5775,"children":5776},{},[5777,5778,5783,5784,5789],{"type":47,"value":382},{"type":41,"tag":60,"props":5779,"children":5781},{"className":5780},[],[5782],{"type":47,"value":142},{"type":47,"value":389},{"type":41,"tag":60,"props":5785,"children":5787},{"className":5786},[],[5788],{"type":47,"value":395},{"type":47,"value":349},{"type":47,"value":398},{"type":41,"tag":60,"props":5792,"children":5794},{"className":5793},[],[5795],{"type":47,"value":404},{"type":47,"value":406},{"type":41,"tag":351,"props":5798,"children":5799},{},[5800],{"type":41,"tag":95,"props":5801,"children":5802},{},[5803,5807,5808,5813,5814,5819,5820,5825,5826,5831],{"type":41,"tag":229,"props":5804,"children":5805},{},[5806],{"type":47,"value":417},{"type":47,"value":419},{"type":41,"tag":60,"props":5809,"children":5811},{"className":5810},[],[5812],{"type":47,"value":142},{"type":47,"value":426},{"type":41,"tag":60,"props":5815,"children":5817},{"className":5816},[],[5818],{"type":47,"value":432},{"type":47,"value":434},{"type":41,"tag":60,"props":5821,"children":5823},{"className":5822},[],[5824],{"type":47,"value":85},{"type":47,"value":441},{"type":41,"tag":60,"props":5827,"children":5829},{"className":5828},[],[5830],{"type":47,"value":447},{"type":47,"value":349},{"type":41,"tag":159,"props":5833,"children":5834},{"id":451},[5835],{"type":47,"value":454},{"type":41,"tag":95,"props":5837,"children":5838},{},[5839],{"type":47,"value":459},{"type":41,"tag":171,"props":5841,"children":5842},{"className":173,"code":462,"language":175,"meta":7,"style":7},[5843],{"type":41,"tag":60,"props":5844,"children":5845},{"__ignoreMap":7},[5846],{"type":41,"tag":181,"props":5847,"children":5848},{"class":183,"line":184},[5849,5853],{"type":41,"tag":181,"props":5850,"children":5851},{"style":188},[5852],{"type":47,"value":474},{"type":41,"tag":181,"props":5854,"children":5855},{"style":194},[5856],{"type":47,"value":479},{"type":41,"tag":95,"props":5858,"children":5859},{},[5860],{"type":47,"value":484},{"type":41,"tag":171,"props":5862,"children":5863},{"className":487,"code":488,"language":489,"meta":7,"style":7},[5864],{"type":41,"tag":60,"props":5865,"children":5866},{"__ignoreMap":7},[5867,5882,5897,5912,5919,5926,5933,5940,5951,5962,5973,5984,5995,6014,6029,6044,6055,6074,6093,6108,6123,6134,6153,6172,6187,6202,6221,6236],{"type":41,"tag":181,"props":5868,"children":5869},{"class":183,"line":184},[5870,5874,5878],{"type":41,"tag":181,"props":5871,"children":5872},{"style":499},[5873],{"type":47,"value":502},{"type":41,"tag":181,"props":5875,"children":5876},{"style":505},[5877],{"type":47,"value":508},{"type":41,"tag":181,"props":5879,"children":5880},{"style":194},[5881],{"type":47,"value":513},{"type":41,"tag":181,"props":5883,"children":5884},{"class":183,"line":516},[5885,5889,5893],{"type":41,"tag":181,"props":5886,"children":5887},{"style":499},[5888],{"type":47,"value":522},{"type":41,"tag":181,"props":5890,"children":5891},{"style":505},[5892],{"type":47,"value":508},{"type":41,"tag":181,"props":5894,"children":5895},{"style":194},[5896],{"type":47,"value":531},{"type":41,"tag":181,"props":5898,"children":5899},{"class":183,"line":534},[5900,5904,5908],{"type":41,"tag":181,"props":5901,"children":5902},{"style":499},[5903],{"type":47,"value":233},{"type":41,"tag":181,"props":5905,"children":5906},{"style":505},[5907],{"type":47,"value":508},{"type":41,"tag":181,"props":5909,"children":5910},{"style":546},[5911],{"type":47,"value":549},{"type":41,"tag":181,"props":5913,"children":5914},{"class":183,"line":18},[5915],{"type":41,"tag":181,"props":5916,"children":5917},{"style":194},[5918],{"type":47,"value":557},{"type":41,"tag":181,"props":5920,"children":5921},{"class":183,"line":560},[5922],{"type":41,"tag":181,"props":5923,"children":5924},{"style":194},[5925],{"type":47,"value":566},{"type":41,"tag":181,"props":5927,"children":5928},{"class":183,"line":11},[5929],{"type":41,"tag":181,"props":5930,"children":5931},{"style":194},[5932],{"type":47,"value":574},{"type":41,"tag":181,"props":5934,"children":5935},{"class":183,"line":577},[5936],{"type":41,"tag":181,"props":5937,"children":5938},{"style":194},[5939],{"type":47,"value":583},{"type":41,"tag":181,"props":5941,"children":5942},{"class":183,"line":586},[5943,5947],{"type":41,"tag":181,"props":5944,"children":5945},{"style":499},[5946],{"type":47,"value":245},{"type":41,"tag":181,"props":5948,"children":5949},{"style":505},[5950],{"type":47,"value":596},{"type":41,"tag":181,"props":5952,"children":5953},{"class":183,"line":599},[5954,5958],{"type":41,"tag":181,"props":5955,"children":5956},{"style":505},[5957],{"type":47,"value":605},{"type":41,"tag":181,"props":5959,"children":5960},{"style":194},[5961],{"type":47,"value":610},{"type":41,"tag":181,"props":5963,"children":5964},{"class":183,"line":613},[5965,5969],{"type":41,"tag":181,"props":5966,"children":5967},{"style":505},[5968],{"type":47,"value":605},{"type":41,"tag":181,"props":5970,"children":5971},{"style":194},[5972],{"type":47,"value":623},{"type":41,"tag":181,"props":5974,"children":5975},{"class":183,"line":626},[5976,5980],{"type":41,"tag":181,"props":5977,"children":5978},{"style":505},[5979],{"type":47,"value":605},{"type":41,"tag":181,"props":5981,"children":5982},{"style":194},[5983],{"type":47,"value":636},{"type":41,"tag":181,"props":5985,"children":5986},{"class":183,"line":639},[5987,5991],{"type":41,"tag":181,"props":5988,"children":5989},{"style":499},[5990],{"type":47,"value":645},{"type":41,"tag":181,"props":5992,"children":5993},{"style":505},[5994],{"type":47,"value":596},{"type":41,"tag":181,"props":5996,"children":5997},{"class":183,"line":652},[5998,6002,6006,6010],{"type":41,"tag":181,"props":5999,"children":6000},{"style":505},[6001],{"type":47,"value":605},{"type":41,"tag":181,"props":6003,"children":6004},{"style":499},[6005],{"type":47,"value":502},{"type":41,"tag":181,"props":6007,"children":6008},{"style":505},[6009],{"type":47,"value":508},{"type":41,"tag":181,"props":6011,"children":6012},{"style":194},[6013],{"type":47,"value":670},{"type":41,"tag":181,"props":6015,"children":6016},{"class":183,"line":673},[6017,6021,6025],{"type":41,"tag":181,"props":6018,"children":6019},{"style":499},[6020],{"type":47,"value":679},{"type":41,"tag":181,"props":6022,"children":6023},{"style":505},[6024],{"type":47,"value":508},{"type":41,"tag":181,"props":6026,"children":6027},{"style":194},[6028],{"type":47,"value":688},{"type":41,"tag":181,"props":6030,"children":6031},{"class":183,"line":691},[6032,6036,6040],{"type":41,"tag":181,"props":6033,"children":6034},{"style":499},[6035],{"type":47,"value":697},{"type":41,"tag":181,"props":6037,"children":6038},{"style":505},[6039],{"type":47,"value":508},{"type":41,"tag":181,"props":6041,"children":6042},{"style":194},[6043],{"type":47,"value":706},{"type":41,"tag":181,"props":6045,"children":6046},{"class":183,"line":709},[6047,6051],{"type":41,"tag":181,"props":6048,"children":6049},{"style":499},[6050],{"type":47,"value":715},{"type":41,"tag":181,"props":6052,"children":6053},{"style":505},[6054],{"type":47,"value":596},{"type":41,"tag":181,"props":6056,"children":6057},{"class":183,"line":722},[6058,6062,6066,6070],{"type":41,"tag":181,"props":6059,"children":6060},{"style":505},[6061],{"type":47,"value":728},{"type":41,"tag":181,"props":6063,"children":6064},{"style":499},[6065],{"type":47,"value":502},{"type":41,"tag":181,"props":6067,"children":6068},{"style":505},[6069],{"type":47,"value":508},{"type":41,"tag":181,"props":6071,"children":6072},{"style":194},[6073],{"type":47,"value":741},{"type":41,"tag":181,"props":6075,"children":6076},{"class":183,"line":744},[6077,6081,6085,6089],{"type":41,"tag":181,"props":6078,"children":6079},{"style":505},[6080],{"type":47,"value":605},{"type":41,"tag":181,"props":6082,"children":6083},{"style":499},[6084],{"type":47,"value":502},{"type":41,"tag":181,"props":6086,"children":6087},{"style":505},[6088],{"type":47,"value":508},{"type":41,"tag":181,"props":6090,"children":6091},{"style":194},[6092],{"type":47,"value":762},{"type":41,"tag":181,"props":6094,"children":6095},{"class":183,"line":765},[6096,6100,6104],{"type":41,"tag":181,"props":6097,"children":6098},{"style":499},[6099],{"type":47,"value":679},{"type":41,"tag":181,"props":6101,"children":6102},{"style":505},[6103],{"type":47,"value":508},{"type":41,"tag":181,"props":6105,"children":6106},{"style":194},[6107],{"type":47,"value":688},{"type":41,"tag":181,"props":6109,"children":6110},{"class":183,"line":781},[6111,6115,6119],{"type":41,"tag":181,"props":6112,"children":6113},{"style":499},[6114],{"type":47,"value":697},{"type":41,"tag":181,"props":6116,"children":6117},{"style":505},[6118],{"type":47,"value":508},{"type":41,"tag":181,"props":6120,"children":6121},{"style":194},[6122],{"type":47,"value":795},{"type":41,"tag":181,"props":6124,"children":6125},{"class":183,"line":798},[6126,6130],{"type":41,"tag":181,"props":6127,"children":6128},{"style":499},[6129],{"type":47,"value":715},{"type":41,"tag":181,"props":6131,"children":6132},{"style":505},[6133],{"type":47,"value":596},{"type":41,"tag":181,"props":6135,"children":6136},{"class":183,"line":810},[6137,6141,6145,6149],{"type":41,"tag":181,"props":6138,"children":6139},{"style":505},[6140],{"type":47,"value":728},{"type":41,"tag":181,"props":6142,"children":6143},{"style":499},[6144],{"type":47,"value":502},{"type":41,"tag":181,"props":6146,"children":6147},{"style":505},[6148],{"type":47,"value":508},{"type":41,"tag":181,"props":6150,"children":6151},{"style":194},[6152],{"type":47,"value":741},{"type":41,"tag":181,"props":6154,"children":6155},{"class":183,"line":830},[6156,6160,6164,6168],{"type":41,"tag":181,"props":6157,"children":6158},{"style":505},[6159],{"type":47,"value":605},{"type":41,"tag":181,"props":6161,"children":6162},{"style":499},[6163],{"type":47,"value":502},{"type":41,"tag":181,"props":6165,"children":6166},{"style":505},[6167],{"type":47,"value":508},{"type":41,"tag":181,"props":6169,"children":6170},{"style":194},[6171],{"type":47,"value":848},{"type":41,"tag":181,"props":6173,"children":6174},{"class":183,"line":851},[6175,6179,6183],{"type":41,"tag":181,"props":6176,"children":6177},{"style":499},[6178],{"type":47,"value":679},{"type":41,"tag":181,"props":6180,"children":6181},{"style":505},[6182],{"type":47,"value":508},{"type":41,"tag":181,"props":6184,"children":6185},{"style":194},[6186],{"type":47,"value":865},{"type":41,"tag":181,"props":6188,"children":6189},{"class":183,"line":868},[6190,6194,6198],{"type":41,"tag":181,"props":6191,"children":6192},{"style":499},[6193],{"type":47,"value":697},{"type":41,"tag":181,"props":6195,"children":6196},{"style":505},[6197],{"type":47,"value":508},{"type":41,"tag":181,"props":6199,"children":6200},{"style":194},[6201],{"type":47,"value":882},{"type":41,"tag":181,"props":6203,"children":6204},{"class":183,"line":885},[6205,6209,6213,6217],{"type":41,"tag":181,"props":6206,"children":6207},{"style":505},[6208],{"type":47,"value":605},{"type":41,"tag":181,"props":6210,"children":6211},{"style":499},[6212],{"type":47,"value":502},{"type":41,"tag":181,"props":6214,"children":6215},{"style":505},[6216],{"type":47,"value":508},{"type":41,"tag":181,"props":6218,"children":6219},{"style":194},[6220],{"type":47,"value":903},{"type":41,"tag":181,"props":6222,"children":6223},{"class":183,"line":906},[6224,6228,6232],{"type":41,"tag":181,"props":6225,"children":6226},{"style":499},[6227],{"type":47,"value":679},{"type":41,"tag":181,"props":6229,"children":6230},{"style":505},[6231],{"type":47,"value":508},{"type":41,"tag":181,"props":6233,"children":6234},{"style":194},[6235],{"type":47,"value":920},{"type":41,"tag":181,"props":6237,"children":6238},{"class":183,"line":923},[6239,6243,6247],{"type":41,"tag":181,"props":6240,"children":6241},{"style":499},[6242],{"type":47,"value":697},{"type":41,"tag":181,"props":6244,"children":6245},{"style":505},[6246],{"type":47,"value":508},{"type":41,"tag":181,"props":6248,"children":6249},{"style":194},[6250],{"type":47,"value":937},{"type":41,"tag":95,"props":6252,"children":6253},{},[6254],{"type":47,"value":942},{"type":41,"tag":351,"props":6256,"children":6257},{},[6258],{"type":41,"tag":95,"props":6259,"children":6260},{},[6261,6271,6272,6277,6278,6283],{"type":41,"tag":229,"props":6262,"children":6263},{},[6264,6265,6270],{"type":47,"value":953},{"type":41,"tag":60,"props":6266,"children":6268},{"className":6267},[],[6269],{"type":47,"value":304},{"type":47,"value":960},{"type":47,"value":962},{"type":41,"tag":60,"props":6273,"children":6275},{"className":6274},[],[6276],{"type":47,"value":304},{"type":47,"value":969},{"type":41,"tag":60,"props":6279,"children":6281},{"className":6280},[],[6282],{"type":47,"value":975},{"type":47,"value":977},{"type":41,"tag":159,"props":6285,"children":6286},{"id":980},[6287],{"type":47,"value":983},{"type":41,"tag":171,"props":6289,"children":6290},{"className":173,"code":986,"language":175,"meta":7,"style":7},[6291],{"type":41,"tag":60,"props":6292,"children":6293},{"__ignoreMap":7},[6294],{"type":41,"tag":181,"props":6295,"children":6296},{"class":183,"line":184},[6297,6301,6305,6309,6313],{"type":41,"tag":181,"props":6298,"children":6299},{"style":188},[6300],{"type":47,"value":191},{"type":41,"tag":181,"props":6302,"children":6303},{"style":194},[6304],{"type":47,"value":1002},{"type":41,"tag":181,"props":6306,"children":6307},{"style":205},[6308],{"type":47,"value":1007},{"type":41,"tag":181,"props":6310,"children":6311},{"style":194},[6312],{"type":47,"value":1012},{"type":41,"tag":181,"props":6314,"children":6315},{"style":194},[6316],{"type":47,"value":1017},{"type":41,"tag":95,"props":6318,"children":6319},{},[6320],{"type":47,"value":1022},{"type":41,"tag":171,"props":6322,"children":6324},{"className":6323,"code":1027,"language":47},[1026],[6325],{"type":41,"tag":60,"props":6326,"children":6327},{"__ignoreMap":7},[6328],{"type":47,"value":1027},{"type":41,"tag":95,"props":6330,"children":6331},{},[6332],{"type":47,"value":1037},{"type":41,"tag":159,"props":6334,"children":6335},{"id":1040},[6336],{"type":47,"value":1043},{"type":41,"tag":95,"props":6338,"children":6339},{},[6340,6341,6350,6351,6356,6357,6362],{"type":47,"value":1048},{"type":41,"tag":1050,"props":6342,"children":6344},{"href":1052,"rel":6343},[1054],[6345],{"type":41,"tag":60,"props":6346,"children":6348},{"className":6347},[],[6349],{"type":47,"value":1061},{"type":47,"value":1063},{"type":41,"tag":60,"props":6352,"children":6354},{"className":6353},[],[6355],{"type":47,"value":1069},{"type":47,"value":1071},{"type":41,"tag":60,"props":6358,"children":6360},{"className":6359},[],[6361],{"type":47,"value":1077},{"type":47,"value":1079},{"type":41,"tag":171,"props":6364,"children":6365},{"className":173,"code":1082,"language":175,"meta":7,"style":7},[6366],{"type":41,"tag":60,"props":6367,"children":6368},{"__ignoreMap":7},[6369,6376,6391,6398,6413,6428,6435,6454,6477,6492,6507,6522,6537,6552,6559,6590,6597,6628],{"type":41,"tag":181,"props":6370,"children":6371},{"class":183,"line":184},[6372],{"type":41,"tag":181,"props":6373,"children":6374},{"style":1092},[6375],{"type":47,"value":1095},{"type":41,"tag":181,"props":6377,"children":6378},{"class":183,"line":516},[6379,6383,6387],{"type":41,"tag":181,"props":6380,"children":6381},{"style":205},[6382],{"type":47,"value":1103},{"type":41,"tag":181,"props":6384,"children":6385},{"style":205},[6386],{"type":47,"value":1108},{"type":41,"tag":181,"props":6388,"children":6389},{"style":194},[6390],{"type":47,"value":1113},{"type":41,"tag":181,"props":6392,"children":6393},{"class":183,"line":534},[6394],{"type":41,"tag":181,"props":6395,"children":6396},{"emptyLinePlaceholder":1119},[6397],{"type":47,"value":1122},{"type":41,"tag":181,"props":6399,"children":6400},{"class":183,"line":18},[6401,6405,6409],{"type":41,"tag":181,"props":6402,"children":6403},{"style":505},[6404],{"type":47,"value":1130},{"type":41,"tag":181,"props":6406,"children":6407},{"style":546},[6408],{"type":47,"value":1135},{"type":41,"tag":181,"props":6410,"children":6411},{"style":194},[6412],{"type":47,"value":1140},{"type":41,"tag":181,"props":6414,"children":6415},{"class":183,"line":560},[6416,6420,6424],{"type":41,"tag":181,"props":6417,"children":6418},{"style":505},[6419],{"type":47,"value":1148},{"type":41,"tag":181,"props":6421,"children":6422},{"style":546},[6423],{"type":47,"value":1135},{"type":41,"tag":181,"props":6425,"children":6426},{"style":194},[6427],{"type":47,"value":1157},{"type":41,"tag":181,"props":6429,"children":6430},{"class":183,"line":11},[6431],{"type":41,"tag":181,"props":6432,"children":6433},{"emptyLinePlaceholder":1119},[6434],{"type":47,"value":1122},{"type":41,"tag":181,"props":6436,"children":6437},{"class":183,"line":577},[6438,6442,6446,6450],{"type":41,"tag":181,"props":6439,"children":6440},{"style":188},[6441],{"type":47,"value":191},{"type":41,"tag":181,"props":6443,"children":6444},{"style":194},[6445],{"type":47,"value":1176},{"type":41,"tag":181,"props":6447,"children":6448},{"style":194},[6449],{"type":47,"value":1181},{"type":41,"tag":181,"props":6451,"children":6452},{"style":205},[6453],{"type":47,"value":1186},{"type":41,"tag":181,"props":6455,"children":6456},{"class":183,"line":586},[6457,6461,6465,6469,6473],{"type":41,"tag":181,"props":6458,"children":6459},{"style":205},[6460],{"type":47,"value":1194},{"type":41,"tag":181,"props":6462,"children":6463},{"style":194},[6464],{"type":47,"value":1199},{"type":41,"tag":181,"props":6466,"children":6467},{"style":505},[6468],{"type":47,"value":1204},{"type":41,"tag":181,"props":6470,"children":6471},{"style":194},[6472],{"type":47,"value":1209},{"type":41,"tag":181,"props":6474,"children":6475},{"style":205},[6476],{"type":47,"value":1186},{"type":41,"tag":181,"props":6478,"children":6479},{"class":183,"line":599},[6480,6484,6488],{"type":41,"tag":181,"props":6481,"children":6482},{"style":205},[6483],{"type":47,"value":1221},{"type":41,"tag":181,"props":6485,"children":6486},{"style":194},[6487],{"type":47,"value":1226},{"type":41,"tag":181,"props":6489,"children":6490},{"style":205},[6491],{"type":47,"value":1186},{"type":41,"tag":181,"props":6493,"children":6494},{"class":183,"line":613},[6495,6499,6503],{"type":41,"tag":181,"props":6496,"children":6497},{"style":205},[6498],{"type":47,"value":1238},{"type":41,"tag":181,"props":6500,"children":6501},{"style":194},[6502],{"type":47,"value":1243},{"type":41,"tag":181,"props":6504,"children":6505},{"style":205},[6506],{"type":47,"value":1186},{"type":41,"tag":181,"props":6508,"children":6509},{"class":183,"line":626},[6510,6514,6518],{"type":41,"tag":181,"props":6511,"children":6512},{"style":205},[6513],{"type":47,"value":1238},{"type":41,"tag":181,"props":6515,"children":6516},{"style":194},[6517],{"type":47,"value":1259},{"type":41,"tag":181,"props":6519,"children":6520},{"style":205},[6521],{"type":47,"value":1186},{"type":41,"tag":181,"props":6523,"children":6524},{"class":183,"line":639},[6525,6529,6533],{"type":41,"tag":181,"props":6526,"children":6527},{"style":205},[6528],{"type":47,"value":1238},{"type":41,"tag":181,"props":6530,"children":6531},{"style":194},[6532],{"type":47,"value":1275},{"type":41,"tag":181,"props":6534,"children":6535},{"style":205},[6536],{"type":47,"value":1186},{"type":41,"tag":181,"props":6538,"children":6539},{"class":183,"line":652},[6540,6544,6548],{"type":41,"tag":181,"props":6541,"children":6542},{"style":194},[6543],{"type":47,"value":1287},{"type":41,"tag":181,"props":6545,"children":6546},{"style":505},[6547],{"type":47,"value":1292},{"type":41,"tag":181,"props":6549,"children":6550},{"style":194},[6551],{"type":47,"value":1297},{"type":41,"tag":181,"props":6553,"children":6554},{"class":183,"line":673},[6555],{"type":41,"tag":181,"props":6556,"children":6557},{"emptyLinePlaceholder":1119},[6558],{"type":47,"value":1122},{"type":41,"tag":181,"props":6560,"children":6561},{"class":183,"line":691},[6562,6566,6570,6574,6578,6582,6586],{"type":41,"tag":181,"props":6563,"children":6564},{"style":188},[6565],{"type":47,"value":1312},{"type":41,"tag":181,"props":6567,"children":6568},{"style":194},[6569],{"type":47,"value":1199},{"type":41,"tag":181,"props":6571,"children":6572},{"style":505},[6573],{"type":47,"value":1292},{"type":41,"tag":181,"props":6575,"children":6576},{"style":194},[6577],{"type":47,"value":1325},{"type":41,"tag":181,"props":6579,"children":6580},{"style":205},[6581],{"type":47,"value":1330},{"type":41,"tag":181,"props":6583,"children":6584},{"style":194},[6585],{"type":47,"value":1335},{"type":41,"tag":181,"props":6587,"children":6588},{"style":205},[6589],{"type":47,"value":1340},{"type":41,"tag":181,"props":6591,"children":6592},{"class":183,"line":709},[6593],{"type":41,"tag":181,"props":6594,"children":6595},{"emptyLinePlaceholder":1119},[6596],{"type":47,"value":1122},{"type":41,"tag":181,"props":6598,"children":6599},{"class":183,"line":722},[6600,6604,6608,6612,6616,6620,6624],{"type":41,"tag":181,"props":6601,"children":6602},{"style":188},[6603],{"type":47,"value":191},{"type":41,"tag":181,"props":6605,"children":6606},{"style":194},[6607],{"type":47,"value":197},{"type":41,"tag":181,"props":6609,"children":6610},{"style":194},[6611],{"type":47,"value":202},{"type":41,"tag":181,"props":6613,"children":6614},{"style":205},[6615],{"type":47,"value":208},{"type":41,"tag":181,"props":6617,"children":6618},{"style":194},[6619],{"type":47,"value":1199},{"type":41,"tag":181,"props":6621,"children":6622},{"style":505},[6623],{"type":47,"value":1292},{"type":41,"tag":181,"props":6625,"children":6626},{"style":194},[6627],{"type":47,"value":1379},{"type":41,"tag":181,"props":6629,"children":6630},{"class":183,"line":744},[6631,6635,6639,6643,6647,6651,6655,6659,6663],{"type":41,"tag":181,"props":6632,"children":6633},{"style":188},[6634],{"type":47,"value":191},{"type":41,"tag":181,"props":6636,"children":6637},{"style":194},[6638],{"type":47,"value":1002},{"type":41,"tag":181,"props":6640,"children":6641},{"style":205},[6642],{"type":47,"value":1007},{"type":41,"tag":181,"props":6644,"children":6645},{"style":194},[6646],{"type":47,"value":1199},{"type":41,"tag":181,"props":6648,"children":6649},{"style":505},[6650],{"type":47,"value":1204},{"type":41,"tag":181,"props":6652,"children":6653},{"style":194},[6654],{"type":47,"value":1209},{"type":41,"tag":181,"props":6656,"children":6657},{"style":194},[6658],{"type":47,"value":1199},{"type":41,"tag":181,"props":6660,"children":6661},{"style":505},[6662],{"type":47,"value":1292},{"type":41,"tag":181,"props":6664,"children":6665},{"style":194},[6666],{"type":47,"value":1297},{"type":41,"tag":95,"props":6668,"children":6669},{},[6670,6671,6676],{"type":47,"value":1423},{"type":41,"tag":60,"props":6672,"children":6674},{"className":6673},[],[6675],{"type":47,"value":1061},{"type":47,"value":1430},{"type":41,"tag":351,"props":6678,"children":6679},{},[6680],{"type":41,"tag":95,"props":6681,"children":6682},{},[6683,6687,6688,6693,6694,6699],{"type":41,"tag":229,"props":6684,"children":6685},{},[6686],{"type":47,"value":1441},{"type":47,"value":1443},{"type":41,"tag":60,"props":6689,"children":6691},{"className":6690},[],[6692],{"type":47,"value":1449},{"type":47,"value":1451},{"type":41,"tag":60,"props":6695,"children":6697},{"className":6696},[],[6698],{"type":47,"value":1457},{"type":47,"value":1459},{"type":41,"tag":42,"props":6701,"children":6702},{"id":1462},[6703],{"type":47,"value":1465},{"type":41,"tag":95,"props":6705,"children":6706},{},[6707,6708,6713,6714,6718],{"type":47,"value":1470},{"type":41,"tag":60,"props":6709,"children":6711},{"className":6710},[],[6712],{"type":47,"value":73},{"type":47,"value":1477},{"type":41,"tag":101,"props":6715,"children":6716},{},[6717],{"type":47,"value":1482},{"type":47,"value":1484},{"type":41,"tag":1486,"props":6720,"children":6721},{},[6722],{"type":47,"value":1490},{"title":7,"searchDepth":516,"depth":516,"links":6724},[6725,6726,6727,6733],{"id":44,"depth":516,"text":48},{"id":90,"depth":516,"text":93},{"id":154,"depth":516,"text":157,"children":6728},[6729,6730,6731,6732],{"id":161,"depth":534,"text":164},{"id":451,"depth":534,"text":454},{"id":980,"depth":534,"text":983},{"id":1040,"depth":534,"text":1043},{"id":1462,"depth":516,"text":1465},{"_path":6735,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":6736,"description":6737,"date":10,"readingTime":577,"category":12,"tags":6738,"difficulty":17,"module":5,"step":560,"variants":6743,"journeys":6744,"learnMore":6745,"stepGif":32,"author":6755,"body":6756,"_type":1502,"_id":8136,"_source":1504,"_file":8137,"_stem":8138,"_extension":1507},"/tutorials/dbt-bruin-analyst/wire-up-agent","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.",[14,6739,16,6740,6741,6742],"MCP","Claude Code","Cursor","Codex",[6740,6741,6742],[20,21],[6746,6749,6752],{"label":6747,"url":6748},"Bruin MCP setup guide","https://getbruin.com/docs/bruin/getting-started/bruin-mcp.html",{"label":6750,"url":6751},"bruin query (docs)","https://getbruin.com/docs/bruin/commands/query.html",{"label":6753,"url":6754},"MCP best practices for AI agents","https://getbruin.com/docs/bruin/getting-started/bruin-mcp.html#best-practices-for-ai-agents",{"name":34,"role":35,"image":36},{"type":38,"children":6757,"toc":8121},[6758,6762,6801,6805,6817,6861,6866,6870,6876,6881,7207,7220,7232,7353,7365,7378,7411,7787,7793,7798,7814,7819,7863,7875,7881,7988,7994,7999,8082,8094,8098,8117],{"type":41,"tag":42,"props":6759,"children":6760},{"id":44},[6761],{"type":47,"value":48},{"type":41,"tag":50,"props":6763,"children":6764},{},[6765,6770,6796],{"type":41,"tag":54,"props":6766,"children":6767},{},[6768],{"type":47,"value":6769},"Register Bruin MCP in your AI coding tool so the agent can ask Bruin \"how do I…?\" questions",{"type":41,"tag":54,"props":6771,"children":6772},{},[6773,6775,6781,6783,6788,6790],{"type":47,"value":6774},"Add an ",{"type":41,"tag":60,"props":6776,"children":6778},{"className":6777},[],[6779],{"type":47,"value":6780},"AGENTS.md",{"type":47,"value":6782}," at the repo root that points the agent at ",{"type":41,"tag":60,"props":6784,"children":6786},{"className":6785},[],[6787],{"type":47,"value":73},{"type":47,"value":6789}," and at ",{"type":41,"tag":60,"props":6791,"children":6793},{"className":6792},[],[6794],{"type":47,"value":6795},"bruin query",{"type":41,"tag":54,"props":6797,"children":6798},{},[6799],{"type":47,"value":6800},"Verify the loop end-to-end with a real business question",{"type":41,"tag":42,"props":6802,"children":6803},{"id":90},[6804],{"type":47,"value":93},{"type":41,"tag":95,"props":6806,"children":6807},{},[6808,6810,6815],{"type":47,"value":6809},"The context layer is half the equation. The agent also needs an ",{"type":41,"tag":229,"props":6811,"children":6812},{},[6813],{"type":47,"value":6814},"interface",{"type":47,"value":6816}," to use it:",{"type":41,"tag":220,"props":6818,"children":6819},{},[6820,6825,6837],{"type":41,"tag":54,"props":6821,"children":6822},{},[6823],{"type":47,"value":6824},"A way to learn how Bruin itself works (asset types, command flags) — that's what Bruin MCP gives you",{"type":41,"tag":54,"props":6826,"children":6827},{},[6828,6830,6835],{"type":47,"value":6829},"A way to actually run SQL against the warehouse — that's ",{"type":41,"tag":60,"props":6831,"children":6833},{"className":6832},[],[6834],{"type":47,"value":6795},{"type":47,"value":6836},", which uses the same connection you defined in step 2",{"type":41,"tag":54,"props":6838,"children":6839},{},[6840,6842,6847,6849,6854,6856],{"type":47,"value":6841},"A canonical workflow that tells the agent ",{"type":41,"tag":101,"props":6843,"children":6844},{},[6845],{"type":47,"value":6846},"which",{"type":47,"value":6848}," of the two to use, ",{"type":41,"tag":101,"props":6850,"children":6851},{},[6852],{"type":47,"value":6853},"when",{"type":47,"value":6855}," — that's ",{"type":41,"tag":60,"props":6857,"children":6859},{"className":6858},[],[6860],{"type":47,"value":6780},{"type":41,"tag":95,"props":6862,"children":6863},{},[6864],{"type":47,"value":6865},"Get all three in place and the agent stops guessing table names and starts citing the asset YAMLs you generated.",{"type":41,"tag":42,"props":6867,"children":6868},{"id":154},[6869],{"type":47,"value":157},{"type":41,"tag":159,"props":6871,"children":6873},{"id":6872},"_1-register-bruin-mcp-in-your-ai-tool",[6874],{"type":47,"value":6875},"1. Register Bruin MCP in your AI tool",{"type":41,"tag":95,"props":6877,"children":6878},{},[6879],{"type":47,"value":6880},"Pick the tab that matches the tool you're using. Bruin MCP is stateless — register it once per machine, not per project.",{"type":41,"tag":6882,"props":6883,"children":6885},"variant-tabs",{":variants":6884},"[{\"id\":\"claude-code\",\"label\":\"Claude Code\"},{\"id\":\"cursor\",\"label\":\"Cursor\"},{\"id\":\"codex\",\"label\":\"Codex\"}]",[6886,6976,7131],{"type":41,"tag":6887,"props":6888,"children":6889},"template",{"v-slot:claude-code":7},[6890,6895,6900,6944,6949],{"type":41,"tag":159,"props":6891,"children":6893},{"id":6892},"claude-code",[6894],{"type":47,"value":6740},{"type":41,"tag":95,"props":6896,"children":6897},{},[6898],{"type":47,"value":6899},"Run this once in your terminal:",{"type":41,"tag":171,"props":6901,"children":6903},{"className":173,"code":6902,"language":175,"meta":7,"style":7},"claude mcp add bruin -- bruin mcp\n",[6904],{"type":41,"tag":60,"props":6905,"children":6906},{"__ignoreMap":7},[6907],{"type":41,"tag":181,"props":6908,"children":6909},{"class":183,"line":184},[6910,6915,6920,6925,6930,6935,6939],{"type":41,"tag":181,"props":6911,"children":6912},{"style":188},[6913],{"type":47,"value":6914},"claude",{"type":41,"tag":181,"props":6916,"children":6917},{"style":194},[6918],{"type":47,"value":6919}," mcp",{"type":41,"tag":181,"props":6921,"children":6922},{"style":194},[6923],{"type":47,"value":6924}," add",{"type":41,"tag":181,"props":6926,"children":6927},{"style":194},[6928],{"type":47,"value":6929}," bruin",{"type":41,"tag":181,"props":6931,"children":6932},{"style":205},[6933],{"type":47,"value":6934}," --",{"type":41,"tag":181,"props":6936,"children":6937},{"style":194},[6938],{"type":47,"value":6929},{"type":41,"tag":181,"props":6940,"children":6941},{"style":194},[6942],{"type":47,"value":6943}," mcp\n",{"type":41,"tag":95,"props":6945,"children":6946},{},[6947],{"type":47,"value":6948},"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":41,"tag":95,"props":6950,"children":6951},{},[6952,6954,6966,6968,6974],{"type":47,"value":6953},"To verify, ask Claude Code: ",{"type":41,"tag":101,"props":6955,"children":6956},{},[6957,6959,6964],{"type":47,"value":6958},"\"Use the Bruin MCP to list the available ",{"type":41,"tag":60,"props":6960,"children":6962},{"className":6961},[],[6963],{"type":47,"value":191},{"type":47,"value":6965}," commands.\"",{"type":47,"value":6967}," It should reply with a list pulled from ",{"type":41,"tag":60,"props":6969,"children":6971},{"className":6970},[],[6972],{"type":47,"value":6973},"bruin_get_overview",{"type":47,"value":6975}," rather than guessing.",{"type":41,"tag":6887,"props":6977,"children":6978},{"v-slot:cursor":7},[6979,6984,7024,7097,7105],{"type":41,"tag":159,"props":6980,"children":6982},{"id":6981},"cursor",[6983],{"type":47,"value":6741},{"type":41,"tag":50,"props":6985,"children":6986},{},[6987,6999,7009,7019],{"type":41,"tag":54,"props":6988,"children":6989},{},[6990,6992,6997],{"type":47,"value":6991},"Open ",{"type":41,"tag":229,"props":6993,"children":6994},{},[6995],{"type":47,"value":6996},"Cursor Settings",{"type":47,"value":6998}," (Cmd/Ctrl + ,)",{"type":41,"tag":54,"props":7000,"children":7001},{},[7002,7004],{"type":47,"value":7003},"Navigate to ",{"type":41,"tag":229,"props":7005,"children":7006},{},[7007],{"type":47,"value":7008},"MCP & Integrations",{"type":41,"tag":54,"props":7010,"children":7011},{},[7012,7014],{"type":47,"value":7013},"Click ",{"type":41,"tag":229,"props":7015,"children":7016},{},[7017],{"type":47,"value":7018},"Add Custom MCP",{"type":41,"tag":54,"props":7020,"children":7021},{},[7022],{"type":47,"value":7023},"Paste:",{"type":41,"tag":171,"props":7025,"children":7029},{"className":7026,"code":7027,"language":7028,"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",[7030],{"type":41,"tag":60,"props":7031,"children":7032},{"__ignoreMap":7},[7033,7041,7049,7057,7065,7073,7081,7089],{"type":41,"tag":181,"props":7034,"children":7035},{"class":183,"line":184},[7036],{"type":41,"tag":181,"props":7037,"children":7038},{},[7039],{"type":47,"value":7040},"{\n",{"type":41,"tag":181,"props":7042,"children":7043},{"class":183,"line":516},[7044],{"type":41,"tag":181,"props":7045,"children":7046},{},[7047],{"type":47,"value":7048},"  \"mcpServers\": {\n",{"type":41,"tag":181,"props":7050,"children":7051},{"class":183,"line":534},[7052],{"type":41,"tag":181,"props":7053,"children":7054},{},[7055],{"type":47,"value":7056},"    \"bruin\": {\n",{"type":41,"tag":181,"props":7058,"children":7059},{"class":183,"line":18},[7060],{"type":41,"tag":181,"props":7061,"children":7062},{},[7063],{"type":47,"value":7064},"      \"command\": \"bruin\",\n",{"type":41,"tag":181,"props":7066,"children":7067},{"class":183,"line":560},[7068],{"type":41,"tag":181,"props":7069,"children":7070},{},[7071],{"type":47,"value":7072},"      \"args\": [\"mcp\"]\n",{"type":41,"tag":181,"props":7074,"children":7075},{"class":183,"line":11},[7076],{"type":41,"tag":181,"props":7077,"children":7078},{},[7079],{"type":47,"value":7080},"    }\n",{"type":41,"tag":181,"props":7082,"children":7083},{"class":183,"line":577},[7084],{"type":41,"tag":181,"props":7085,"children":7086},{},[7087],{"type":47,"value":7088},"  }\n",{"type":41,"tag":181,"props":7090,"children":7091},{"class":183,"line":586},[7092],{"type":41,"tag":181,"props":7093,"children":7094},{},[7095],{"type":47,"value":7096},"}\n",{"type":41,"tag":50,"props":7098,"children":7099},{"start":560},[7100],{"type":41,"tag":54,"props":7101,"children":7102},{},[7103],{"type":47,"value":7104},"Restart Cursor.",{"type":41,"tag":95,"props":7106,"children":7107},{},[7108,7110,7122,7124,7130],{"type":47,"value":7109},"To verify, ask Cursor's chat: ",{"type":41,"tag":101,"props":7111,"children":7112},{},[7113,7115,7120],{"type":47,"value":7114},"\"Use the Bruin MCP to fetch the docs for ",{"type":41,"tag":60,"props":7116,"children":7118},{"className":7117},[],[7119],{"type":47,"value":4501},{"type":47,"value":7121},".\"",{"type":47,"value":7123}," It should pull the doc page via ",{"type":41,"tag":60,"props":7125,"children":7127},{"className":7126},[],[7128],{"type":47,"value":7129},"bruin_get_doc_content",{"type":47,"value":349},{"type":41,"tag":6887,"props":7132,"children":7133},{"v-slot:codex":7},[7134,7139,7151,7184,7189],{"type":41,"tag":159,"props":7135,"children":7137},{"id":7136},"codex",[7138],{"type":47,"value":6742},{"type":41,"tag":95,"props":7140,"children":7141},{},[7142,7144,7150],{"type":47,"value":7143},"Add this to ",{"type":41,"tag":60,"props":7145,"children":7147},{"className":7146},[],[7148],{"type":47,"value":7149},"~/.codex/config.toml",{"type":47,"value":4178},{"type":41,"tag":171,"props":7152,"children":7156},{"className":7153,"code":7154,"language":7155,"meta":7,"style":7},"language-toml shiki shiki-themes github-dark","[mcp_servers.bruin]\ncommand = \"bruin\"\nargs = [\"mcp\"]\n","toml",[7157],{"type":41,"tag":60,"props":7158,"children":7159},{"__ignoreMap":7},[7160,7168,7176],{"type":41,"tag":181,"props":7161,"children":7162},{"class":183,"line":184},[7163],{"type":41,"tag":181,"props":7164,"children":7165},{},[7166],{"type":47,"value":7167},"[mcp_servers.bruin]\n",{"type":41,"tag":181,"props":7169,"children":7170},{"class":183,"line":516},[7171],{"type":41,"tag":181,"props":7172,"children":7173},{},[7174],{"type":47,"value":7175},"command = \"bruin\"\n",{"type":41,"tag":181,"props":7177,"children":7178},{"class":183,"line":534},[7179],{"type":41,"tag":181,"props":7180,"children":7181},{},[7182],{"type":47,"value":7183},"args = [\"mcp\"]\n",{"type":41,"tag":95,"props":7185,"children":7186},{},[7187],{"type":47,"value":7188},"Restart Codex.",{"type":41,"tag":95,"props":7190,"children":7191},{},[7192,7194,7199,7201,7206],{"type":47,"value":7193},"To verify, ask Codex: ",{"type":41,"tag":101,"props":7195,"children":7196},{},[7197],{"type":47,"value":7198},"\"Use Bruin MCP to list connection types Bruin supports.\"",{"type":47,"value":7200}," It should return the list from ",{"type":41,"tag":60,"props":7202,"children":7204},{"className":7203},[],[7205],{"type":47,"value":7129},{"type":47,"value":349},{"type":41,"tag":159,"props":7208,"children":7210},{"id":7209},"_2-confirm-bruin-query-works-as-the-agent-will-use-it",[7211,7213,7218],{"type":47,"value":7212},"2. Confirm ",{"type":41,"tag":60,"props":7214,"children":7216},{"className":7215},[],[7217],{"type":47,"value":6795},{"type":47,"value":7219}," works as the agent will use it",{"type":41,"tag":95,"props":7221,"children":7222},{},[7223,7225,7230],{"type":47,"value":7224},"Run a sanity-check query against your warehouse using the ",{"type":41,"tag":229,"props":7226,"children":7227},{},[7228],{"type":47,"value":7229},"scoped config",{"type":47,"value":7231},", exactly the way the agent will:",{"type":41,"tag":171,"props":7233,"children":7235},{"className":173,"code":7234,"language":175,"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",[7236],{"type":41,"tag":60,"props":7237,"children":7238},{"__ignoreMap":7},[7239,7255,7270,7285,7298,7321,7329,7337,7345],{"type":41,"tag":181,"props":7240,"children":7241},{"class":183,"line":184},[7242,7246,7251],{"type":41,"tag":181,"props":7243,"children":7244},{"style":188},[7245],{"type":47,"value":191},{"type":41,"tag":181,"props":7247,"children":7248},{"style":194},[7249],{"type":47,"value":7250}," query",{"type":41,"tag":181,"props":7252,"children":7253},{"style":205},[7254],{"type":47,"value":1186},{"type":41,"tag":181,"props":7256,"children":7257},{"class":183,"line":516},[7258,7262,7266],{"type":41,"tag":181,"props":7259,"children":7260},{"style":205},[7261],{"type":47,"value":1194},{"type":41,"tag":181,"props":7263,"children":7264},{"style":194},[7265],{"type":47,"value":1012},{"type":41,"tag":181,"props":7267,"children":7268},{"style":205},[7269],{"type":47,"value":1186},{"type":41,"tag":181,"props":7271,"children":7272},{"class":183,"line":534},[7273,7277,7281],{"type":41,"tag":181,"props":7274,"children":7275},{"style":205},[7276],{"type":47,"value":1221},{"type":41,"tag":181,"props":7278,"children":7279},{"style":194},[7280],{"type":47,"value":1226},{"type":41,"tag":181,"props":7282,"children":7283},{"style":205},[7284],{"type":47,"value":1186},{"type":41,"tag":181,"props":7286,"children":7287},{"class":183,"line":18},[7288,7293],{"type":41,"tag":181,"props":7289,"children":7290},{"style":205},[7291],{"type":47,"value":7292},"  --query",{"type":41,"tag":181,"props":7294,"children":7295},{"style":194},[7296],{"type":47,"value":7297}," \"SELECT category_name, SUM(revenue_usd) AS rev\n",{"type":41,"tag":181,"props":7299,"children":7300},{"class":183,"line":560},[7301,7306,7311,7316],{"type":41,"tag":181,"props":7302,"children":7303},{"style":194},[7304],{"type":47,"value":7305},"           FROM ",{"type":41,"tag":181,"props":7307,"children":7308},{"style":205},[7309],{"type":47,"value":7310},"\\`",{"type":41,"tag":181,"props":7312,"children":7313},{"style":194},[7314],{"type":47,"value":7315},"bruin-playground-arsalan.contoso_dbt_reports.rpt_revenue_by_segment",{"type":41,"tag":181,"props":7317,"children":7318},{"style":205},[7319],{"type":47,"value":7320},"\\`\n",{"type":41,"tag":181,"props":7322,"children":7323},{"class":183,"line":11},[7324],{"type":41,"tag":181,"props":7325,"children":7326},{"style":194},[7327],{"type":47,"value":7328},"           WHERE year = 2024\n",{"type":41,"tag":181,"props":7330,"children":7331},{"class":183,"line":577},[7332],{"type":41,"tag":181,"props":7333,"children":7334},{"style":194},[7335],{"type":47,"value":7336},"           GROUP BY 1\n",{"type":41,"tag":181,"props":7338,"children":7339},{"class":183,"line":586},[7340],{"type":41,"tag":181,"props":7341,"children":7342},{"style":194},[7343],{"type":47,"value":7344},"           ORDER BY rev DESC\n",{"type":41,"tag":181,"props":7346,"children":7347},{"class":183,"line":599},[7348],{"type":41,"tag":181,"props":7349,"children":7350},{"style":194},[7351],{"type":47,"value":7352},"           LIMIT 10\"\n",{"type":41,"tag":95,"props":7354,"children":7355},{},[7356,7358,7363],{"type":47,"value":7357},"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":41,"tag":60,"props":7359,"children":7361},{"className":7360},[],[7362],{"type":47,"value":2899},{"type":47,"value":7364}," identity.",{"type":41,"tag":159,"props":7366,"children":7368},{"id":7367},"_3-add-an-agentsmd-at-the-repo-root",[7369,7371,7376],{"type":47,"value":7370},"3. Add an ",{"type":41,"tag":60,"props":7372,"children":7374},{"className":7373},[],[7375],{"type":47,"value":6780},{"type":47,"value":7377}," at the repo root",{"type":41,"tag":95,"props":7379,"children":7380},{},[7381,7383,7388,7390,7395,7397,7402,7404,7409],{"type":47,"value":7382},"Create ",{"type":41,"tag":60,"props":7384,"children":7386},{"className":7385},[],[7387],{"type":47,"value":6780},{"type":47,"value":7389}," next to ",{"type":41,"tag":60,"props":7391,"children":7393},{"className":7392},[],[7394],{"type":47,"value":2883},{"type":47,"value":7396}," (the ",{"type":41,"tag":229,"props":7398,"children":7399},{},[7400],{"type":47,"value":7401},"repo root",{"type":47,"value":7403},", not inside ",{"type":41,"tag":60,"props":7405,"children":7407},{"className":7406},[],[7408],{"type":47,"value":2798},{"type":47,"value":7410},"). 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":41,"tag":171,"props":7412,"children":7415},{"className":7413,"code":7414,"language":1502,"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",[7416],{"type":41,"tag":60,"props":7417,"children":7418},{"__ignoreMap":7},[7419,7427,7434,7442,7450,7457,7465,7472,7480,7488,7496,7504,7512,7520,7528,7536,7544,7552,7559,7567,7574,7582,7590,7598,7606,7614,7621,7629,7636,7645,7654,7663,7672,7681,7690,7698,7707,7715,7724,7733,7742,7751,7760,7769,7778],{"type":41,"tag":181,"props":7420,"children":7421},{"class":183,"line":184},[7422],{"type":41,"tag":181,"props":7423,"children":7424},{},[7425],{"type":47,"value":7426},"# AGENTS.md\n",{"type":41,"tag":181,"props":7428,"children":7429},{"class":183,"line":516},[7430],{"type":41,"tag":181,"props":7431,"children":7432},{"emptyLinePlaceholder":1119},[7433],{"type":47,"value":1122},{"type":41,"tag":181,"props":7435,"children":7436},{"class":183,"line":534},[7437],{"type":41,"tag":181,"props":7438,"children":7439},{},[7440],{"type":47,"value":7441},"This repo contains a dbt project plus a Bruin context layer documenting the\n",{"type":41,"tag":181,"props":7443,"children":7444},{"class":183,"line":18},[7445],{"type":41,"tag":181,"props":7446,"children":7447},{},[7448],{"type":47,"value":7449},"warehouse it builds. Use this guide before reading code or running queries.\n",{"type":41,"tag":181,"props":7451,"children":7452},{"class":183,"line":560},[7453],{"type":41,"tag":181,"props":7454,"children":7455},{"emptyLinePlaceholder":1119},[7456],{"type":47,"value":1122},{"type":41,"tag":181,"props":7458,"children":7459},{"class":183,"line":11},[7460],{"type":41,"tag":181,"props":7461,"children":7462},{},[7463],{"type":47,"value":7464},"## Canonical workflow\n",{"type":41,"tag":181,"props":7466,"children":7467},{"class":183,"line":577},[7468],{"type":41,"tag":181,"props":7469,"children":7470},{"emptyLinePlaceholder":1119},[7471],{"type":47,"value":1122},{"type":41,"tag":181,"props":7473,"children":7474},{"class":183,"line":586},[7475],{"type":41,"tag":181,"props":7476,"children":7477},{},[7478],{"type":47,"value":7479},"1. **Read context first.** Before querying, open the relevant\n",{"type":41,"tag":181,"props":7481,"children":7482},{"class":183,"line":599},[7483],{"type":41,"tag":181,"props":7484,"children":7485},{},[7486],{"type":47,"value":7487},"   `context/assets/\u003Cschema>/\u003Ctable>.asset.yml`. It has the description, grain,\n",{"type":41,"tag":181,"props":7489,"children":7490},{"class":183,"line":613},[7491],{"type":41,"tag":181,"props":7492,"children":7493},{},[7494],{"type":47,"value":7495},"   column docs, and quality checks for that table — written from real samples.\n",{"type":41,"tag":181,"props":7497,"children":7498},{"class":183,"line":626},[7499],{"type":41,"tag":181,"props":7500,"children":7501},{},[7502],{"type":47,"value":7503},"2. **Use Bruin MCP for tooling questions.** Anything like \"how does\n",{"type":41,"tag":181,"props":7505,"children":7506},{"class":183,"line":639},[7507],{"type":41,"tag":181,"props":7508,"children":7509},{},[7510],{"type":47,"value":7511},"   `bruin import` work?\" or \"what asset types exist?\" — call the MCP server,\n",{"type":41,"tag":181,"props":7513,"children":7514},{"class":183,"line":652},[7515],{"type":41,"tag":181,"props":7516,"children":7517},{},[7518],{"type":47,"value":7519},"   don't guess from training data.\n",{"type":41,"tag":181,"props":7521,"children":7522},{"class":183,"line":673},[7523],{"type":41,"tag":181,"props":7524,"children":7525},{},[7526],{"type":47,"value":7527},"3. **Use `bruin query` for SQL.** Always pass `--config-file context/.bruin.yml`\n",{"type":41,"tag":181,"props":7529,"children":7530},{"class":183,"line":691},[7531],{"type":41,"tag":181,"props":7532,"children":7533},{},[7534],{"type":47,"value":7535},"   so the scoped connection is used.\n",{"type":41,"tag":181,"props":7537,"children":7538},{"class":183,"line":709},[7539],{"type":41,"tag":181,"props":7540,"children":7541},{},[7542],{"type":47,"value":7543},"4. **Cite the asset(s) you read.** When answering, reference the\n",{"type":41,"tag":181,"props":7545,"children":7546},{"class":183,"line":722},[7547],{"type":41,"tag":181,"props":7548,"children":7549},{},[7550],{"type":47,"value":7551},"   `context/assets/...asset.yml` files you used.\n",{"type":41,"tag":181,"props":7553,"children":7554},{"class":183,"line":744},[7555],{"type":41,"tag":181,"props":7556,"children":7557},{"emptyLinePlaceholder":1119},[7558],{"type":47,"value":1122},{"type":41,"tag":181,"props":7560,"children":7561},{"class":183,"line":765},[7562],{"type":41,"tag":181,"props":7563,"children":7564},{},[7565],{"type":47,"value":7566},"## Data access\n",{"type":41,"tag":181,"props":7568,"children":7569},{"class":183,"line":781},[7570],{"type":41,"tag":181,"props":7571,"children":7572},{"emptyLinePlaceholder":1119},[7573],{"type":47,"value":1122},{"type":41,"tag":181,"props":7575,"children":7576},{"class":183,"line":798},[7577],{"type":41,"tag":181,"props":7578,"children":7579},{},[7580],{"type":47,"value":7581},"- Connection name: `contoso_dbt_bq`\n",{"type":41,"tag":181,"props":7583,"children":7584},{"class":183,"line":810},[7585],{"type":41,"tag":181,"props":7586,"children":7587},{},[7588],{"type":47,"value":7589},"- Auth: Application Default Credentials (inherits `gcloud auth application-default login`)\n",{"type":41,"tag":181,"props":7591,"children":7592},{"class":183,"line":830},[7593],{"type":41,"tag":181,"props":7594,"children":7595},{},[7596],{"type":47,"value":7597},"- This is **read-only.** Never INSERT, UPDATE, DELETE, MERGE, or DROP.\n",{"type":41,"tag":181,"props":7599,"children":7600},{"class":183,"line":851},[7601],{"type":41,"tag":181,"props":7602,"children":7603},{},[7604],{"type":47,"value":7605},"- Always show the SQL before executing it.\n",{"type":41,"tag":181,"props":7607,"children":7608},{"class":183,"line":868},[7609],{"type":41,"tag":181,"props":7610,"children":7611},{},[7612],{"type":47,"value":7613},"- Use `LIMIT 100` (or smaller) when exploring an unfamiliar table.\n",{"type":41,"tag":181,"props":7615,"children":7616},{"class":183,"line":885},[7617],{"type":41,"tag":181,"props":7618,"children":7619},{"emptyLinePlaceholder":1119},[7620],{"type":47,"value":1122},{"type":41,"tag":181,"props":7622,"children":7623},{"class":183,"line":906},[7624],{"type":41,"tag":181,"props":7625,"children":7626},{},[7627],{"type":47,"value":7628},"## Layout\n",{"type":41,"tag":181,"props":7630,"children":7631},{"class":183,"line":923},[7632],{"type":41,"tag":181,"props":7633,"children":7634},{"emptyLinePlaceholder":1119},[7635],{"type":47,"value":1122},{"type":41,"tag":181,"props":7637,"children":7639},{"class":183,"line":7638},29,[7640],{"type":41,"tag":181,"props":7641,"children":7642},{},[7643],{"type":47,"value":7644},"- `models/` — dbt models. Don't run `dbt` for analysis questions; the\n",{"type":41,"tag":181,"props":7646,"children":7648},{"class":183,"line":7647},30,[7649],{"type":41,"tag":181,"props":7650,"children":7651},{},[7652],{"type":47,"value":7653},"  warehouse is already built. Read these only when asked about transformation logic.\n",{"type":41,"tag":181,"props":7655,"children":7657},{"class":183,"line":7656},31,[7658],{"type":41,"tag":181,"props":7659,"children":7660},{},[7661],{"type":47,"value":7662},"- `context/assets/contoso_dbt_raw/` — raw dlt-loaded tables (lowest level).\n",{"type":41,"tag":181,"props":7664,"children":7666},{"class":183,"line":7665},32,[7667],{"type":41,"tag":181,"props":7668,"children":7669},{},[7670],{"type":47,"value":7671},"- `context/assets/contoso_dbt_staging/` — `stg_*` cleaned/typed views.\n",{"type":41,"tag":181,"props":7673,"children":7675},{"class":183,"line":7674},33,[7676],{"type":41,"tag":181,"props":7677,"children":7678},{},[7679],{"type":47,"value":7680},"- `context/assets/contoso_dbt_reports/` — `rpt_*` mart-level reports.\n",{"type":41,"tag":181,"props":7682,"children":7684},{"class":183,"line":7683},34,[7685],{"type":41,"tag":181,"props":7686,"children":7687},{},[7688],{"type":47,"value":7689},"  Prefer these for business questions; staging is for ad-hoc deep dives.\n",{"type":41,"tag":181,"props":7691,"children":7693},{"class":183,"line":7692},35,[7694],{"type":41,"tag":181,"props":7695,"children":7696},{"emptyLinePlaceholder":1119},[7697],{"type":47,"value":1122},{"type":41,"tag":181,"props":7699,"children":7701},{"class":183,"line":7700},36,[7702],{"type":41,"tag":181,"props":7703,"children":7704},{},[7705],{"type":47,"value":7706},"## Things to avoid\n",{"type":41,"tag":181,"props":7708,"children":7710},{"class":183,"line":7709},37,[7711],{"type":41,"tag":181,"props":7712,"children":7713},{"emptyLinePlaceholder":1119},[7714],{"type":47,"value":1122},{"type":41,"tag":181,"props":7716,"children":7718},{"class":183,"line":7717},38,[7719],{"type":41,"tag":181,"props":7720,"children":7721},{},[7722],{"type":47,"value":7723},"- **Don't hand-edit `context/assets/*.asset.yml`.** They're regenerated by\n",{"type":41,"tag":181,"props":7725,"children":7727},{"class":183,"line":7726},39,[7728],{"type":41,"tag":181,"props":7729,"children":7730},{},[7731],{"type":47,"value":7732},"  `generate_context.sh`. Improve descriptions in the dbt model's `schema.yml`\n",{"type":41,"tag":181,"props":7734,"children":7736},{"class":183,"line":7735},40,[7737],{"type":41,"tag":181,"props":7738,"children":7739},{},[7740],{"type":47,"value":7741},"  upstream and re-run the generator.\n",{"type":41,"tag":181,"props":7743,"children":7745},{"class":183,"line":7744},41,[7746],{"type":41,"tag":181,"props":7747,"children":7748},{},[7749],{"type":47,"value":7750},"- **Don't mix configs across pipelines.** This project's connection lives in\n",{"type":41,"tag":181,"props":7752,"children":7754},{"class":183,"line":7753},42,[7755],{"type":41,"tag":181,"props":7756,"children":7757},{},[7758],{"type":47,"value":7759},"  `context/.bruin.yml`; other Bruin pipelines in the repo have their own.\n",{"type":41,"tag":181,"props":7761,"children":7763},{"class":183,"line":7762},43,[7764],{"type":41,"tag":181,"props":7765,"children":7766},{},[7767],{"type":47,"value":7768},"  Always use `--config-file`.\n",{"type":41,"tag":181,"props":7770,"children":7772},{"class":183,"line":7771},44,[7773],{"type":41,"tag":181,"props":7774,"children":7775},{},[7776],{"type":47,"value":7777},"- **Don't trust row counts in descriptions.** They're snapshot-time and may\n",{"type":41,"tag":181,"props":7779,"children":7781},{"class":183,"line":7780},45,[7782],{"type":41,"tag":181,"props":7783,"children":7784},{},[7785],{"type":47,"value":7786},"  be stale. If a question hinges on exact size, run `SELECT COUNT(*)` yourself.\n",{"type":41,"tag":159,"props":7788,"children":7790},{"id":7789},"_4-try-the-loop-end-to-end",[7791],{"type":47,"value":7792},"4. Try the loop end-to-end",{"type":41,"tag":95,"props":7794,"children":7795},{},[7796],{"type":47,"value":7797},"Open your AI tool in this repo and ask a real question, e.g.:",{"type":41,"tag":351,"props":7799,"children":7800},{},[7801],{"type":41,"tag":95,"props":7802,"children":7803},{},[7804,7806,7812],{"type":47,"value":7805},"\"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":41,"tag":60,"props":7807,"children":7809},{"className":7808},[],[7810],{"type":47,"value":7811},"context/assets/...",{"type":47,"value":7813}," files you used.\"",{"type":41,"tag":95,"props":7815,"children":7816},{},[7817],{"type":47,"value":7818},"A correctly-wired agent will:",{"type":41,"tag":50,"props":7820,"children":7821},{},[7822,7834,7847,7858],{"type":41,"tag":54,"props":7823,"children":7824},{},[7825,7826,7832],{"type":47,"value":6991},{"type":41,"tag":60,"props":7827,"children":7829},{"className":7828},[],[7830],{"type":47,"value":7831},"context/assets/contoso_dbt_reports/rpt_revenue_by_segment.asset.yml",{"type":47,"value":7833}," and confirm the grain",{"type":41,"tag":54,"props":7835,"children":7836},{},[7837,7839,7845],{"type":47,"value":7838},"Draft a SQL query against ",{"type":41,"tag":60,"props":7840,"children":7842},{"className":7841},[],[7843],{"type":47,"value":7844},"contoso_dbt_reports.rpt_revenue_by_segment",{"type":47,"value":7846}," filtered by year",{"type":41,"tag":54,"props":7848,"children":7849},{},[7850,7852],{"type":47,"value":7851},"Show the SQL, wait for a go-ahead, then run ",{"type":41,"tag":60,"props":7853,"children":7855},{"className":7854},[],[7856],{"type":47,"value":7857},"bruin query --config-file context/.bruin.yml --connection contoso_dbt_bq --query \"...\"",{"type":41,"tag":54,"props":7859,"children":7860},{},[7861],{"type":47,"value":7862},"Cite the asset YAML it read",{"type":41,"tag":95,"props":7864,"children":7865},{},[7866,7868,7873],{"type":47,"value":7867},"If it skips step 1 (reading the asset), tighten ",{"type":41,"tag":60,"props":7869,"children":7871},{"className":7870},[],[7872],{"type":47,"value":6780},{"type":47,"value":7874}," — the canonical workflow section is what enforces this behavior.",{"type":41,"tag":42,"props":7876,"children":7878},{"id":7877},"lessons-learned",[7879],{"type":47,"value":7880},"Lessons learned",{"type":41,"tag":220,"props":7882,"children":7883},{},[7884,7906,7916,7932,7955,7972],{"type":41,"tag":54,"props":7885,"children":7886},{},[7887,7898,7900,7905],{"type":41,"tag":229,"props":7888,"children":7889},{},[7890,7892,7897],{"type":47,"value":7891},"Isolate ",{"type":41,"tag":60,"props":7893,"children":7895},{"className":7894},[],[7896],{"type":47,"value":3320},{"type":47,"value":349},{"type":47,"value":7899}," A broken sibling connection breaks every command. Always ",{"type":41,"tag":60,"props":7901,"children":7903},{"className":7902},[],[7904],{"type":47,"value":395},{"type":47,"value":4435},{"type":41,"tag":54,"props":7907,"children":7908},{},[7909,7914],{"type":41,"tag":229,"props":7910,"children":7911},{},[7912],{"type":47,"value":7913},"ADC > keyfiles",{"type":47,"value":7915}," for agent workflows. No secrets to rotate, no files to gitignore, and the agent runs as the human's identity.",{"type":41,"tag":54,"props":7917,"children":7918},{},[7919,7924,7926,7931],{"type":41,"tag":229,"props":7920,"children":7921},{},[7922],{"type":47,"value":7923},"Filter loader-internal tables before enhance",{"type":47,"value":7925}," — otherwise Claude burns time describing ",{"type":41,"tag":60,"props":7927,"children":7929},{"className":7928},[],[7930],{"type":47,"value":5182},{"type":47,"value":349},{"type":41,"tag":54,"props":7933,"children":7934},{},[7935,7953],{"type":41,"tag":229,"props":7936,"children":7937},{},[7938,7940,7945,7947,7952],{"type":47,"value":7939},"Always ",{"type":41,"tag":60,"props":7941,"children":7943},{"className":7942},[],[7944],{"type":47,"value":85},{"type":47,"value":7946}," after ",{"type":41,"tag":60,"props":7948,"children":7950},{"className":7949},[],[7951],{"type":47,"value":142},{"type":47,"value":349},{"type":47,"value":7954}," Cheap insurance against rare YAML corruption.",{"type":41,"tag":54,"props":7956,"children":7957},{},[7958,7970],{"type":41,"tag":229,"props":7959,"children":7960},{},[7961,7963,7968],{"type":47,"value":7962},"Re-run ",{"type":41,"tag":60,"props":7964,"children":7966},{"className":7965},[],[7967],{"type":47,"value":1061},{"type":47,"value":7969}," after schema changes.",{"type":47,"value":7971}," Descriptions are snapshot-time; a column rename without regeneration leaves the agent quietly wrong.",{"type":41,"tag":54,"props":7973,"children":7974},{},[7975,7979,7981,7986],{"type":41,"tag":229,"props":7976,"children":7977},{},[7978],{"type":47,"value":1441},{"type":47,"value":7980}," Improve them upstream in the dbt model's ",{"type":41,"tag":60,"props":7982,"children":7984},{"className":7983},[],[7985],{"type":47,"value":1449},{"type":47,"value":7987}," so the next import + enhance picks the change up.",{"type":41,"tag":42,"props":7989,"children":7991},{"id":7990},"adapting-this-to-a-different-dbt-project",[7992],{"type":47,"value":7993},"Adapting this to a different dbt project",{"type":41,"tag":95,"props":7995,"children":7996},{},[7997],{"type":47,"value":7998},"The minimal recipe for any existing dbt + warehouse setup:",{"type":41,"tag":50,"props":8000,"children":8001},{},[8002,8011,8028,8037,8042,8051,8060],{"type":41,"tag":54,"props":8003,"children":8004},{},[8005],{"type":41,"tag":60,"props":8006,"children":8008},{"className":8007},[],[8009],{"type":47,"value":8010},"mkdir -p context/assets",{"type":41,"tag":54,"props":8012,"children":8013},{},[8014,8016,8021,8023],{"type":47,"value":8015},"Write ",{"type":41,"tag":60,"props":8017,"children":8019},{"className":8018},[],[8020],{"type":47,"value":3429},{"type":47,"value":8022}," (scoped) and ",{"type":41,"tag":60,"props":8024,"children":8026},{"className":8025},[],[8027],{"type":47,"value":3436},{"type":41,"tag":54,"props":8029,"children":8030},{},[8031],{"type":41,"tag":60,"props":8032,"children":8034},{"className":8033},[],[8035],{"type":47,"value":8036},"bruin import database --schemas \u003Cyours...> context",{"type":41,"tag":54,"props":8038,"children":8039},{},[8040],{"type":47,"value":8041},"Delete loader-internal asset YAMLs",{"type":41,"tag":54,"props":8043,"children":8044},{},[8045],{"type":41,"tag":60,"props":8046,"children":8048},{"className":8047},[],[8049],{"type":47,"value":8050},"bruin ai enhance --claude context/assets",{"type":41,"tag":54,"props":8052,"children":8053},{},[8054],{"type":41,"tag":60,"props":8055,"children":8057},{"className":8056},[],[8058],{"type":47,"value":8059},"bruin validate --config-file context/.bruin.yml context",{"type":41,"tag":54,"props":8061,"children":8062},{},[8063,8064,8069,8071,8076,8077],{"type":47,"value":6774},{"type":41,"tag":60,"props":8065,"children":8067},{"className":8066},[],[8068],{"type":47,"value":6780},{"type":47,"value":8070}," that points agents at ",{"type":41,"tag":60,"props":8072,"children":8074},{"className":8073},[],[8075],{"type":47,"value":73},{"type":47,"value":6789},{"type":41,"tag":60,"props":8078,"children":8080},{"className":8079},[],[8081],{"type":47,"value":6795},{"type":41,"tag":95,"props":8083,"children":8084},{},[8085,8087,8092],{"type":47,"value":8086},"That's the whole context layer. Everything else (",{"type":41,"tag":60,"props":8088,"children":8090},{"className":8089},[],[8091],{"type":47,"value":1061},{"type":47,"value":8093},", parity scripts, the contoso reference) is ergonomics on top.",{"type":41,"tag":42,"props":8095,"children":8096},{"id":1462},[8097],{"type":47,"value":1465},{"type":41,"tag":95,"props":8099,"children":8100},{},[8101,8103,8108,8110,8115],{"type":47,"value":8102},"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":41,"tag":60,"props":8104,"children":8106},{"className":8105},[],[8107],{"type":47,"value":6795},{"type":47,"value":8109}," + ADC), and follows a canonical workflow (from ",{"type":41,"tag":60,"props":8111,"children":8113},{"className":8112},[],[8114],{"type":47,"value":6780},{"type":47,"value":8116},"). 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":41,"tag":1486,"props":8118,"children":8119},{},[8120],{"type":47,"value":1490},{"title":7,"searchDepth":516,"depth":516,"links":8122},[8123,8124,8125,8133,8134,8135],{"id":44,"depth":516,"text":48},{"id":90,"depth":516,"text":93},{"id":154,"depth":516,"text":157,"children":8126},[8127,8128,8130,8132],{"id":6872,"depth":534,"text":6875},{"id":7209,"depth":534,"text":8129},"2. Confirm bruin query works as the agent will use it",{"id":7367,"depth":534,"text":8131},"3. Add an AGENTS.md at the repo root",{"id":7789,"depth":534,"text":7792},{"id":7877,"depth":516,"text":7880},{"id":7990,"depth":516,"text":7993},{"id":1462,"depth":516,"text":1465},"content:tutorials:dbt-bruin-analyst:wire-up-agent.md","tutorials/dbt-bruin-analyst/wire-up-agent.md","tutorials/dbt-bruin-analyst/wire-up-agent",1777396709646]