[{"data":1,"prerenderedAt":1022},["ShallowReactive",2],{"docs-page-\u002Fdocs\u002Fbranching":3,"docs-surround-\u002Fdocs\u002Fbranching":997,"docs-navigation":1010},{"id":4,"title":5,"body":6,"description":988,"extension":989,"meta":990,"navigation":991,"path":993,"seo":994,"stem":995,"__hash__":996},"docs\u002Fdocs\u002F2.branching.md","Ramas y flujo de trabajo",{"type":7,"value":8,"toc":976},"minimark",[9,31,147,157,162,238,242,267,271,475,480,493,558,562,569,629,642,646,703,751,755,792,796,868,879,883,972],[10,11,12,13,17,18,21,22,24,25,27,28,30],"p",{},"Dos ramas permanentes (",[14,15,16],"code",{},"main"," y ",[14,19,20],{},"dev",") más ramas cortas de trabajo. ",[14,23,20],{}," es la rama de integración y se despliega sola en el entorno dev; ",[14,26,16],{}," es producción y solo recibe lo que ya pasó por ",[14,29,20],{}," (o un hotfix).",[32,33,34,50],"table",{},[35,36,37],"thead",{},[38,39,40,44,47],"tr",{},[41,42,43],"th",{},"Rama",[41,45,46],{},"Entorno",[41,48,49],{},"Reglas",[51,52,53,69,92,111,128],"tbody",{},[38,54,55,60,63],{},[56,57,58],"td",{},[14,59,16],{},[56,61,62],{},"Producción",[56,64,65,66,68],{},"Protegida. Solo llega código que pasó por ",[14,67,20],{},". Siempre desplegable.",[38,70,71,75,82],{},[56,72,73],{},[14,74,20],{},[56,76,77,78,81],{},"Entorno dev (por ejemplo ",[14,79,80],{},"dev.tudominio.com",")",[56,83,84,85,17,88,91],{},"Protegida. Integra ",[14,86,87],{},"feature\u002F*",[14,89,90],{},"fix\u002F*",". Cada merge dispara el despliegue de dev.",[38,93,94,99,102],{},[56,95,96],{},[14,97,98],{},"feature\u002F\u003Cslug>",[56,100,101],{},"—",[56,103,104,105,107,108,110],{},"Nueva funcionalidad. Sale de ",[14,106,20],{},", PR a ",[14,109,20],{},". Corta (días, no semanas).",[38,112,113,118,120],{},[56,114,115],{},[14,116,117],{},"fix\u002F\u003Cslug>",[56,119,101],{},[56,121,122,123,107,125,127],{},"Corrección de un bug. Sale de ",[14,124,20],{},[14,126,20],{},".",[38,129,130,135,137],{},[56,131,132],{},[14,133,134],{},"hotfix\u002F\u003Cslug>",[56,136,101],{},[56,138,139,140,107,142,144,145,127],{},"Bug crítico en producción. Sale de ",[14,141,16],{},[14,143,16],{}," y se sincroniza a ",[14,146,20],{},[148,149,155],"pre",{"className":150,"code":152,"language":153,"meta":154},[151],"language-text","feature\u002F* · fix\u002F* ──PR──▶ dev ──PR release──▶ main\n   (corta)              (entorno dev)        (producción)\n","text","",[14,156,152],{"__ignoreMap":154},[158,159,161],"h2",{"id":160},"reglas-de-oro","Reglas de oro",[163,164,165,182,188,194,205,215],"ol",{},[166,167,168,177,178,181],"li",{},[169,170,171,172,174,175],"strong",{},"Nunca se commitea directo a ",[14,173,16],{}," ni a ",[14,176,20],{},": todo llega por PR con el check ",[14,179,180],{},"Lint & build"," en verde.",[166,183,184,187],{},[169,185,186],{},"Una rama = un propósito."," No mezcles un refactor con una feature ni dos features en la misma rama.",[166,189,190,193],{},[169,191,192],{},"Ramas cortas."," Si algo lleva semanas, divídelo en entregas pequeñas que se integren por separado.",[166,195,196,201,202,204],{},[169,197,198,200],{},[14,199,20],{}," siempre desplegable."," Es lo que ve el resto del equipo en el entorno dev; lo que se rompe se arregla con ",[14,203,90],{}," o se revierte cuanto antes.",[166,206,207,210,211,214],{},[169,208,209],{},"El flujo verificado a mano se persiste como spec de Playwright"," en ",[14,212,213],{},"tests\u002Fe2e\u002F",". Un chequeo manual que no quedó como spec no cuenta como cobertura.",[166,216,217,220,221,224,225,224,228,231,232,237],{},[169,218,219],{},"Migraciones expand\u002Fcontract",": nunca ",[14,222,223],{},"DROP"," \u002F ",[14,226,227],{},"RENAME",[14,229,230],{},"NOT NULL"," en el mismo deploy que todavía usa la forma vieja (ver ",[233,234,236],"a",{"href":235},"\u002Fdocs\u002Fdeploy","Deploy y CI\u002FCD",").",[158,239,241],{"id":240},"nombres-de-rama","Nombres de rama",[243,244,245,254,260],"ul",{},[166,246,247,250,251,127],{},[14,248,249],{},"feature\u002Fproducts-export-csv",", ",[14,252,253],{},"fix\u002Fcommunications-dst-ventana",[166,255,256,257,127],{},"Con ticket delante si existe: ",[14,258,259],{},"feature\u002F123-products-export-csv",[166,261,262,263,266],{},"Minúsculas, guiones, sin espacios ni acentos. El slug describe el resultado (",[14,264,265],{},"export-excel","), no la acción.",[158,268,270],{"id":269},"nueva-feature-paso-a-paso","Nueva feature, paso a paso",[148,272,276],{"className":273,"code":274,"language":275,"meta":154,"style":154},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# 1. Parte de un dev actualizado\ngit switch dev\ngit pull origin dev\n\n# 2. Crea la rama\ngit switch -c feature\u002Fproducts-export-csv\n\n# 3. Implementa. El pre-commit arregla el lint de lo staged automáticamente.\n\n# 4. Antes de subir, corre el spec del flujo tocado (la suite completa no hace falta aquí)\npnpm exec playwright test tests\u002Fe2e\u002Fapp\u002Fproducts.spec.ts\n\n# 5. Sube: el hook pre-push corre la suite completa\ngit push -u origin feature\u002Fproducts-export-csv\n\n# 6. Abre el PR hacia dev\ngh pr create --base dev --title \"...\" --body \"...\"\n\n# 7. CI en verde → merge con squash → dev se despliega solo.\n# 8. Verifica en el entorno dev.\n","bash",[14,277,278,287,301,314,321,327,340,345,351,356,362,380,385,391,406,411,417,458,463,469],{"__ignoreMap":154},[279,280,283],"span",{"class":281,"line":282},"line",1,[279,284,286],{"class":285},"sHwdD","# 1. Parte de un dev actualizado\n",[279,288,290,294,298],{"class":281,"line":289},2,[279,291,293],{"class":292},"sBMFI","git",[279,295,297],{"class":296},"sfazB"," switch",[279,299,300],{"class":296}," dev\n",[279,302,304,306,309,312],{"class":281,"line":303},3,[279,305,293],{"class":292},[279,307,308],{"class":296}," pull",[279,310,311],{"class":296}," origin",[279,313,300],{"class":296},[279,315,317],{"class":281,"line":316},4,[279,318,320],{"emptyLinePlaceholder":319},true,"\n",[279,322,324],{"class":281,"line":323},5,[279,325,326],{"class":285},"# 2. Crea la rama\n",[279,328,330,332,334,337],{"class":281,"line":329},6,[279,331,293],{"class":292},[279,333,297],{"class":296},[279,335,336],{"class":296}," -c",[279,338,339],{"class":296}," feature\u002Fproducts-export-csv\n",[279,341,343],{"class":281,"line":342},7,[279,344,320],{"emptyLinePlaceholder":319},[279,346,348],{"class":281,"line":347},8,[279,349,350],{"class":285},"# 3. Implementa. El pre-commit arregla el lint de lo staged automáticamente.\n",[279,352,354],{"class":281,"line":353},9,[279,355,320],{"emptyLinePlaceholder":319},[279,357,359],{"class":281,"line":358},10,[279,360,361],{"class":285},"# 4. Antes de subir, corre el spec del flujo tocado (la suite completa no hace falta aquí)\n",[279,363,365,368,371,374,377],{"class":281,"line":364},11,[279,366,367],{"class":292},"pnpm",[279,369,370],{"class":296}," exec",[279,372,373],{"class":296}," playwright",[279,375,376],{"class":296}," test",[279,378,379],{"class":296}," tests\u002Fe2e\u002Fapp\u002Fproducts.spec.ts\n",[279,381,383],{"class":281,"line":382},12,[279,384,320],{"emptyLinePlaceholder":319},[279,386,388],{"class":281,"line":387},13,[279,389,390],{"class":285},"# 5. Sube: el hook pre-push corre la suite completa\n",[279,392,394,396,399,402,404],{"class":281,"line":393},14,[279,395,293],{"class":292},[279,397,398],{"class":296}," push",[279,400,401],{"class":296}," -u",[279,403,311],{"class":296},[279,405,339],{"class":296},[279,407,409],{"class":281,"line":408},15,[279,410,320],{"emptyLinePlaceholder":319},[279,412,414],{"class":281,"line":413},16,[279,415,416],{"class":285},"# 6. Abre el PR hacia dev\n",[279,418,420,423,426,429,432,435,438,442,445,448,451,453,455],{"class":281,"line":419},17,[279,421,422],{"class":292},"gh",[279,424,425],{"class":296}," pr",[279,427,428],{"class":296}," create",[279,430,431],{"class":296}," --base",[279,433,434],{"class":296}," dev",[279,436,437],{"class":296}," --title",[279,439,441],{"class":440},"sMK4o"," \"",[279,443,444],{"class":296},"...",[279,446,447],{"class":440},"\"",[279,449,450],{"class":296}," --body",[279,452,441],{"class":440},[279,454,444],{"class":296},[279,456,457],{"class":440},"\"\n",[279,459,461],{"class":281,"line":460},18,[279,462,320],{"emptyLinePlaceholder":319},[279,464,466],{"class":281,"line":465},19,[279,467,468],{"class":285},"# 7. CI en verde → merge con squash → dev se despliega solo.\n",[279,470,472],{"class":281,"line":471},20,[279,473,474],{"class":285},"# 8. Verifica en el entorno dev.\n",[476,477,479],"h3",{"id":478},"release-a-producción","Release a producción",[10,481,482,483,485,486,489,490,492],{},"Cuando lo integrado en ",[14,484,20],{}," está estable, se promociona con un PR ",[14,487,488],{},"dev → main"," (merge commit, sin squash, para conservar la historia de ",[14,491,20],{},"):",[148,494,496],{"className":273,"code":495,"language":275,"meta":154,"style":154},"git switch dev && git pull origin dev\ngh pr create --base main --head dev --title \"Release: \u003Cresumen>\" --body \"...\"\n# CI en verde → merge → deploy de producción con health check\n",[14,497,498,518,553],{"__ignoreMap":154},[279,499,500,502,504,506,509,512,514,516],{"class":281,"line":282},[279,501,293],{"class":292},[279,503,297],{"class":296},[279,505,434],{"class":296},[279,507,508],{"class":440}," &&",[279,510,511],{"class":292}," git",[279,513,308],{"class":296},[279,515,311],{"class":296},[279,517,300],{"class":296},[279,519,520,522,524,526,528,531,534,536,538,540,543,545,547,549,551],{"class":281,"line":289},[279,521,422],{"class":292},[279,523,425],{"class":296},[279,525,428],{"class":296},[279,527,431],{"class":296},[279,529,530],{"class":296}," main",[279,532,533],{"class":296}," --head",[279,535,434],{"class":296},[279,537,437],{"class":296},[279,539,441],{"class":440},[279,541,542],{"class":296},"Release: \u003Cresumen>",[279,544,447],{"class":440},[279,546,450],{"class":296},[279,548,441],{"class":440},[279,550,444],{"class":296},[279,552,457],{"class":440},[279,554,555],{"class":281,"line":303},[279,556,557],{"class":285},"# CI en verde → merge → deploy de producción con health check\n",[158,559,561],{"id":560},"fix-de-bug-paso-a-paso","Fix de bug, paso a paso",[10,563,564,565,568],{},"Igual que una feature, con ",[14,566,567],{},"fix\u002F"," y con el spec de regresión: primero el spec que reproduce el bug (falla), después el arreglo, después el spec en verde.",[148,570,572],{"className":273,"code":571,"language":275,"meta":154,"style":154},"git switch dev && git pull origin dev\ngit switch -c fix\u002Fcommunications-dst-ventana\n# 1) spec que reproduce el bug  2) arreglo mínimo  3) spec en verde\ngit push -u origin fix\u002Fcommunications-dst-ventana   # pre-push: suite completa\n# PR a dev → CI → squash merge → entorno dev\n",[14,573,574,592,603,608,624],{"__ignoreMap":154},[279,575,576,578,580,582,584,586,588,590],{"class":281,"line":282},[279,577,293],{"class":292},[279,579,297],{"class":296},[279,581,434],{"class":296},[279,583,508],{"class":440},[279,585,511],{"class":292},[279,587,308],{"class":296},[279,589,311],{"class":296},[279,591,300],{"class":296},[279,593,594,596,598,600],{"class":281,"line":289},[279,595,293],{"class":292},[279,597,297],{"class":296},[279,599,336],{"class":296},[279,601,602],{"class":296}," fix\u002Fcommunications-dst-ventana\n",[279,604,605],{"class":281,"line":303},[279,606,607],{"class":285},"# 1) spec que reproduce el bug  2) arreglo mínimo  3) spec en verde\n",[279,609,610,612,614,616,618,621],{"class":281,"line":316},[279,611,293],{"class":292},[279,613,398],{"class":296},[279,615,401],{"class":296},[279,617,311],{"class":296},[279,619,620],{"class":296}," fix\u002Fcommunications-dst-ventana",[279,622,623],{"class":285},"   # pre-push: suite completa\n",[279,625,626],{"class":281,"line":323},[279,627,628],{"class":285},"# PR a dev → CI → squash merge → entorno dev\n",[10,630,631,632,635,636,638,639,641],{},"Un fix normal ",[169,633,634],{},"no"," va directo a ",[14,637,16],{},": ",[14,640,16],{}," solo recibe lo que ya pasó por el entorno dev (la excepción es el hotfix).",[158,643,645],{"id":644},"hotfix-bug-crítico-en-producción","Hotfix (bug crítico en producción)",[148,647,649],{"className":273,"code":648,"language":275,"meta":154,"style":154},"git switch main && git pull origin main\ngit switch -c hotfix\u002Flogin-callback\n# arreglo mínimo + spec de regresión\ngit push -u origin hotfix\u002Flogin-callback\n# PR a main (excepción deliberada: no pasa por dev) → CI → merge → deploy de producción\n",[14,650,651,670,681,686,698],{"__ignoreMap":154},[279,652,653,655,657,659,661,663,665,667],{"class":281,"line":282},[279,654,293],{"class":292},[279,656,297],{"class":296},[279,658,530],{"class":296},[279,660,508],{"class":440},[279,662,511],{"class":292},[279,664,308],{"class":296},[279,666,311],{"class":296},[279,668,669],{"class":296}," main\n",[279,671,672,674,676,678],{"class":281,"line":289},[279,673,293],{"class":292},[279,675,297],{"class":296},[279,677,336],{"class":296},[279,679,680],{"class":296}," hotfix\u002Flogin-callback\n",[279,682,683],{"class":281,"line":303},[279,684,685],{"class":285},"# arreglo mínimo + spec de regresión\n",[279,687,688,690,692,694,696],{"class":281,"line":316},[279,689,293],{"class":292},[279,691,398],{"class":296},[279,693,401],{"class":296},[279,695,311],{"class":296},[279,697,680],{"class":296},[279,699,700],{"class":281,"line":323},[279,701,702],{"class":285},"# PR a main (excepción deliberada: no pasa por dev) → CI → merge → deploy de producción\n",[704,705,706,716],"warning",{},[10,707,708,709,712,713,715],{},"Después del hotfix hay que ",[169,710,711],{},"cerrar el ciclo",", o ",[14,714,20],{}," reintroducirá el bug en la próxima release:",[148,717,719],{"className":273,"code":718,"language":275,"meta":154,"style":154},"git switch dev\ngit merge main   # o un PR main → dev\ngit push origin dev\n",[14,720,721,729,741],{"__ignoreMap":154},[279,722,723,725,727],{"class":281,"line":282},[279,724,293],{"class":292},[279,726,297],{"class":296},[279,728,300],{"class":296},[279,730,731,733,736,738],{"class":281,"line":289},[279,732,293],{"class":292},[279,734,735],{"class":296}," merge",[279,737,530],{"class":296},[279,739,740],{"class":285},"   # o un PR main → dev\n",[279,742,743,745,747,749],{"class":281,"line":303},[279,744,293],{"class":292},[279,746,398],{"class":296},[279,748,311],{"class":296},[279,750,300],{"class":296},[158,752,754],{"id":753},"commits","Commits",[243,756,757,782,789],{},[166,758,759,760,763,764,224,767,224,770,224,773,224,776,224,779,127],{},"Formato recomendado (no obligatorio): ",[14,761,762],{},"tipo: descripción",", con ",[14,765,766],{},"feat",[14,768,769],{},"fix",[14,771,772],{},"chore",[14,774,775],{},"docs",[14,777,778],{},"refactor",[14,780,781],{},"test",[166,783,784,785,788],{},"Título corto; el cuerpo explica ",[169,786,787],{},"por qué",", no el qué (el diff ya dice el qué).",[166,790,791],{},"El pre-commit pasa ESLint sobre lo staged: no hace falta un commit aparte para formato.",[158,793,795],{"id":794},"pull-requests","Pull requests",[243,797,798,804],{},[166,799,800,801,127],{},"Título y descripción: qué cambia y ",[169,802,803],{},"cómo probarlo",[166,805,806,807],{},"Checklist antes de pedir review:\n",[243,808,811,824,843,852,862],{"className":809},[810],"contains-task-list",[166,812,815,819,820,823],{"className":813},[814],"task-list-item",[816,817],"input",{"disabled":319,"type":818},"checkbox"," Spec de Playwright del flujo tocado (o ",[14,821,822],{},"pnpm test:e2e:smoke",") corriendo en local.",[166,825,827,829,830,833,834,224,837,224,840,127],{"className":826},[814],[816,828],{"disabled":319,"type":818}," ",[14,831,832],{},"pnpm lint"," limpio y, si hay texto visible, i18n en ",[14,835,836],{},"en",[14,838,839],{},"es",[14,841,842],{},"pt",[166,844,846,848,849,237],{"className":845},[814],[816,847],{"disabled":319,"type":818}," Entidad nueva: eventos de dominio, audit log y triggers (ver ",[14,850,851],{},"AGENTS.md",[166,853,855,857,858,861],{"className":854},[814],[816,856],{"disabled":319,"type":818}," Migración: expand\u002Fcontract, generada con ",[14,859,860],{},"pnpm db:generate"," en el mismo PR.",[166,863,865,867],{"className":864},[814],[816,866],{"disabled":319,"type":818}," PR pequeño (≤ ~400 líneas) cuando sea posible.",[10,869,870,871,17,873,875,876,878],{},"Protege ",[14,872,16],{},[14,874,20],{}," en GitHub (Settings → Branches) exigiendo el check ",[14,877,180],{}," y prohibiendo force push.",[158,880,882],{"id":881},"qué-corre-y-cuándo","Qué corre y cuándo",[32,884,885,898],{},[35,886,887],{},[38,888,889,892,895],{},[41,890,891],{},"Momento",[41,893,894],{},"Qué corre",[41,896,897],{},"Se salta con",[51,899,900,923,938,948,961],{},[38,901,902,907,917],{},[56,903,904],{},[14,905,906],{},"git commit",[56,908,909,912,913,916],{},[14,910,911],{},"lint-staged"," (ESLint ",[14,914,915],{},"--fix"," sobre lo staged)",[56,918,919,922],{},[14,920,921],{},"--no-verify"," (excepcional)",[38,924,925,930,933],{},[56,926,927],{},[14,928,929],{},"git push",[56,931,932],{},"Suite Playwright completa",[56,934,935],{},[14,936,937],{},"SKIP_E2E=1 git push",[38,939,940,943,946],{},[56,941,942],{},"PR abierto",[56,944,945],{},"CI: lint + build (bloqueante), typecheck (informativo)",[56,947,101],{},[38,949,950,955,958],{},[56,951,952,953],{},"Push\u002Fmerge a ",[14,954,20],{},[56,956,957],{},"CI + despliegue del entorno dev",[56,959,960],{},"Interruptor de deploy apagado",[38,962,963,967,970],{},[56,964,952,965],{},[14,966,16],{},[56,968,969],{},"CI + despliegue de producción",[56,971,960],{},[973,974,975],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":154,"searchDepth":289,"depth":289,"links":977},[978,979,980,983,984,985,986,987],{"id":160,"depth":289,"text":161},{"id":240,"depth":289,"text":241},{"id":269,"depth":289,"text":270,"children":981},[982],{"id":478,"depth":303,"text":479},{"id":560,"depth":289,"text":561},{"id":644,"depth":289,"text":645},{"id":753,"depth":289,"text":754},{"id":794,"depth":289,"text":795},{"id":881,"depth":289,"text":882},"El modelo de dos ramas permanentes, los pasos para features y fixes, y qué corre en cada gate.","md",{},{"icon":992},"i-lucide-git-branch","\u002Fdocs\u002Fbranching",{"title":5,"description":988},"docs\u002F2.branching","C85C13qQWe9uGdmxB94m5RHm1c3_4ySZA-xlCwvliJc",[998,1004],{"title":999,"path":1000,"stem":1001,"description":1002,"icon":1003,"children":-1},"Guía de setup","\u002Fdocs\u002Fsetup","docs\u002F1.setup","Requisitos, variables de entorno y primer arranque, con comandos listos para copiar y pegar.","i-lucide-rocket",{"title":1005,"path":1006,"stem":1007,"description":1008,"icon":1009,"children":-1},"Design system","\u002Fdocs\u002Fdesign-system","docs\u002F3.design-system","Los tres niveles del sistema (tokens, clases .ds-*, temas de componentes) y las reglas para no salirse de él.","i-lucide-swatch-book",[1011],{"title":1012,"path":1013,"stem":775,"children":1014,"page":1021},"Docs","\u002Fdocs",[1015,1016,1017,1018],{"title":999,"path":1000,"stem":1001,"icon":1003},{"title":5,"path":993,"stem":995,"icon":992},{"title":1005,"path":1006,"stem":1007,"icon":1009},{"title":236,"path":235,"stem":1019,"icon":1020},"docs\u002F4.deploy","i-lucide-cloud-upload",false,1791214063325]