[{"data":1,"prerenderedAt":993},["ShallowReactive",2],{"navigation_docs":3,"-docs-cli-troubleshooting":137,"-docs-cli-troubleshooting-surround":988},[4,16,51,102,112,126],{"title":5,"path":6,"stem":7,"children":8,"icon":15},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[9,11],{"title":10,"path":6,"stem":7},"Introduction",{"title":12,"path":13,"stem":14},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F1.getting-started\u002F2.quickstart","i-lucide-rocket",{"title":17,"icon":18,"path":19,"stem":20,"children":21,"page":50},"Core Features","i-lucide-tag","\u002Fdocs\u002Fcore-features","docs\u002F2.core-features",[22,26,30,34,38,42,46],{"title":23,"path":24,"stem":25},"Audit Logs","\u002Fdocs\u002Fcore-features\u002Faudit-logs","docs\u002F2.core-features\u002Faudit-logs",{"title":27,"path":28,"stem":29},"Encryption","\u002Fdocs\u002Fcore-features\u002Fencryption","docs\u002F2.core-features\u002Fencryption",{"title":31,"path":32,"stem":33},"Environments","\u002Fdocs\u002Fcore-features\u002Fenvironments","docs\u002F2.core-features\u002Fenvironments",{"title":35,"path":36,"stem":37},"Projects","\u002Fdocs\u002Fcore-features\u002Fprojects","docs\u002F2.core-features\u002Fprojects",{"title":39,"path":40,"stem":41},"Teams","\u002Fdocs\u002Fcore-features\u002Fteams","docs\u002F2.core-features\u002Fteams",{"title":43,"path":44,"stem":45},"API Tokens","\u002Fdocs\u002Fcore-features\u002Ftokens","docs\u002F2.core-features\u002Ftokens",{"title":47,"path":48,"stem":49},"Variables","\u002Fdocs\u002Fcore-features\u002Fvariables","docs\u002F2.core-features\u002Fvariables",false,{"title":52,"icon":53,"path":54,"stem":55,"children":56},"CLI","i-lucide-terminal","\u002Fdocs\u002Fcli","docs\u002F3.cli\u002F2.index",[57,58,62,66,70,74,78,82,86,90,94,98],{"title":10,"path":54,"stem":55},{"title":59,"path":60,"stem":61},"Init","\u002Fdocs\u002Fcli\u002Finit","docs\u002F3.cli\u002F1.init",{"title":63,"path":64,"stem":65},"Agents & automation","\u002Fdocs\u002Fcli\u002Fagents-automation","docs\u002F3.cli\u002F10.agents-automation",{"title":67,"path":68,"stem":69},"Troubleshooting","\u002Fdocs\u002Fcli\u002Ftroubleshooting","docs\u002F3.cli\u002F11.troubleshooting",{"title":71,"path":72,"stem":73},"Sync policies","\u002Fdocs\u002Fcli\u002Fsync-policies","docs\u002F3.cli\u002F12.sync-policies",{"title":75,"path":76,"stem":77},"Run","\u002Fdocs\u002Fcli\u002Frun","docs\u002F3.cli\u002F3.run",{"title":79,"path":80,"stem":81},"Login and Logout","\u002Fdocs\u002Fcli\u002Flogin-logout","docs\u002F3.cli\u002F4.login-logout",{"title":83,"path":84,"stem":85},"Push and Pull","\u002Fdocs\u002Fcli\u002Fpush-pull","docs\u002F3.cli\u002F5.push-pull",{"title":87,"path":88,"stem":89},"Create","\u002Fdocs\u002Fcli\u002Fcreate","docs\u002F3.cli\u002F6.create",{"title":91,"path":92,"stem":93},"Config","\u002Fdocs\u002Fcli\u002Fconfig","docs\u002F3.cli\u002F7.config",{"title":95,"path":96,"stem":97},"Generate","\u002Fdocs\u002Fcli\u002Fgenerate","docs\u002F3.cli\u002F8.generate",{"title":99,"path":100,"stem":101},"Upgrade","\u002Fdocs\u002Fcli\u002Fupgrade","docs\u002F3.cli\u002F9.upgrade",{"title":103,"icon":104,"path":105,"stem":106,"children":107,"page":50},"Integrations","i-lucide-blocks","\u002Fdocs\u002Fintegrations","docs\u002F4.integrations",[108],{"title":109,"path":110,"stem":111},"Github","\u002Fdocs\u002Fintegrations\u002Fgithub","docs\u002F4.integrations\u002F1.github",{"title":113,"icon":114,"path":115,"stem":116,"children":117,"page":50},"Self-hosting","i-lucide-cloud","\u002Fdocs\u002Fself-hosting","docs\u002F5.self-hosting",[118,122],{"title":119,"path":120,"stem":121},"Deploy on Vercel","\u002Fdocs\u002Fself-hosting\u002Fvercel","docs\u002F5.self-hosting\u002F1.vercel",{"title":123,"path":124,"stem":125},"Environment variables","\u002Fdocs\u002Fself-hosting\u002Fenvironment-variables","docs\u002F5.self-hosting\u002F2.environment-variables",{"title":127,"path":128,"stem":129,"children":130,"icon":136},"Contributing","\u002Fdocs\u002Fcontributing","docs\u002F6.contributing\u002F1.index",[131,132],{"title":10,"path":128,"stem":129},{"title":133,"path":134,"stem":135},"Dev Setup","\u002Fdocs\u002Fcontributing\u002Fdev-setup","docs\u002F6.contributing\u002F2.dev-setup","i-lucide-heart-handshake",{"id":138,"title":67,"body":139,"description":981,"extension":982,"links":983,"meta":984,"navigation":985,"path":68,"seo":986,"stem":69,"__hash__":987},"docs\u002Fdocs\u002F3.cli\u002F11.troubleshooting.md",{"type":140,"value":141,"toc":965},"minimark",[142,160,194,199,444,451,455,527,531,536,546,551,605,612,617,621,653,657,662,675,681,689,704,708,712,739,743,777,784,788,791,873,876,926,930,933,952,961],[143,144,145,146,153,154,159],"p",{},"Quick fixes for the most common CLI issues. Run ",[147,148,149],"strong",{},[150,151,152],"code",{},"shelve doctor"," (or ",[147,155,156],{},[150,157,158],{},"shelve --json doctor",") first — it checks config, auth, API, cache, and agent context in one shot.",[161,162,168],"pre",{"className":163,"code":164,"filename":165,"language":166,"meta":167,"style":167},"language-bash shiki shiki-themes github-light github-dark github-dark","shelve doctor\nshelve --json doctor\n","terminal","bash","",[150,169,170,183],{"__ignoreMap":167},[171,172,175,179],"span",{"class":173,"line":174},"line",1,[171,176,178],{"class":177},"shcOC","shelve",[171,180,182],{"class":181},"sfrk1"," doctor\n",[171,184,186,188,192],{"class":173,"line":185},2,[171,187,178],{"class":177},[171,189,191],{"class":190},"suiK_"," --json",[171,193,182],{"class":181},[195,196,198],"h2",{"id":197},"error-codes","Error codes",[200,201,202,218],"table",{},[203,204,205],"thead",{},[206,207,208,212,215],"tr",{},[209,210,211],"th",{},"Code",[209,213,214],{},"Meaning",[209,216,217],{},"Fix",[219,220,221,252,271,295,314,327,344,357,376,395,411,431],"tbody",{},[206,222,223,229,238],{},[224,225,226],"td",{},[150,227,228],{},"AGENT_BLOCKED",[224,230,231,234,235],{},[150,232,233],{},"pull"," in an AI agent shell without ",[150,236,237],{},"--yes",[224,239,240,241,244,245,247,248,251],{},"Use ",[150,242,243],{},"shelve run -- \u003Ccmd>"," or pass ",[150,246,237],{}," if disk ",[150,249,250],{},".env"," is required",[206,253,254,259,262],{},[224,255,256],{},[150,257,258],{},"AUTH_REQUIRED",[224,260,261],{},"No token",[224,263,264,267,268],{},[150,265,266],{},"export SHELVE_TOKEN=…"," or ",[150,269,270],{},"shelve login",[206,272,273,278,285],{},[224,274,275],{},[150,276,277],{},"CONFIG_MISSING",[224,279,280,281,284],{},"No ",[150,282,283],{},"shelve.json"," and missing env",[224,286,287,288,291,292],{},"Create config or set ",[150,289,290],{},"SHELVE_TEAM_SLUG"," + ",[150,293,294],{},"SHELVE_PROJECT",[206,296,297,302,305],{},[224,298,299],{},[150,300,301],{},"MISSING_ENV",[224,303,304],{},"No environment selected",[224,306,307,267,310,313],{},[150,308,309],{},"--env staging",[150,311,312],{},"defaultEnv"," in config",[206,315,316,321,324],{},[224,317,318],{},[150,319,320],{},"MISSING_INPUT",[224,322,323],{},"Non-interactive mode missing a flag",[224,325,326],{},"Pass the flag shown in the error hint",[206,328,329,334,337],{},[224,330,331],{},[150,332,333],{},"FETCH_FAILED",[224,335,336],{},"Network\u002FAPI failure, no cache",[224,338,339,340,343],{},"Go online once, or use ",[150,341,342],{},"--offline"," if cache exists",[206,345,346,351,354],{},[224,347,348],{},[150,349,350],{},"FORBIDDEN",[224,352,353],{},"Token lacks scope",[224,355,356],{},"Create a token with read\u002Fwrite for the team\u002Fproject",[206,358,359,364,367],{},[224,360,361],{},[150,362,363],{},"PROJECT_NOT_FOUND",[224,365,366],{},"Project missing",[224,368,369,370,267,373],{},"Enable ",[150,371,372],{},"autoCreateProject",[150,374,375],{},"shelve create",[206,377,378,383,386],{},[224,379,380],{},[150,381,382],{},"PUSH_BLOCKED",[224,384,385],{},"Push disabled for this env",[224,387,388,389,267,392],{},"Check ",[150,390,391],{},"sync.protectedEnvironments",[150,393,394],{},"allowPush",[206,396,397,402,405],{},[224,398,399],{},[150,400,401],{},"PULL_BLOCKED",[224,403,404],{},"Pull disabled for this env",[224,406,407,408],{},"Set ",[150,409,410],{},"sync.environments.\u003Cenv>.allowPull",[206,412,413,418,424],{},[224,414,415],{},[150,416,417],{},"SYNC_CONFLICT",[224,419,420,421],{},"Diverging keys and ",[150,422,423],{},"onPushConflict: fail",[224,425,426,427,430],{},"Run ",[150,428,429],{},"shelve diff",", align values, or change policy",[206,432,433,438,441],{},[224,434,435],{},[150,436,437],{},"ENV_PROTECTED",[224,439,440],{},"Server blocked write to protected env",[224,442,443],{},"Update project sync policy in Shelve settings",[143,445,446,447,450],{},"See also ",[150,448,449],{},"shelve --help"," for the full list of structured error codes.",[195,452,454],{"id":453},"exit-codes","Exit codes",[200,456,457,465],{},[203,458,459],{},[206,460,461,463],{},[209,462,211],{},[209,464,214],{},[219,466,467,477,487,501,511],{},[206,468,469,474],{},[224,470,471],{},[150,472,473],{},"0",[224,475,476],{},"Success",[206,478,479,484],{},[224,480,481],{},[150,482,483],{},"1",[224,485,486],{},"CLI or API error",[206,488,489,494],{},[224,490,491],{},[150,492,493],{},"128 + n",[224,495,496,497,500],{},"Child killed by signal (",[150,498,499],{},"run",")",[206,502,503,508],{},[224,504,505],{},[150,506,507],{},"129",[224,509,510],{},"Parent process gone \u002F stdin EIO",[206,512,513,522],{},[224,514,515,518,519],{},[150,516,517],{},"130"," \u002F ",[150,520,521],{},"143",[224,523,524,525,500],{},"SIGINT \u002F SIGTERM (often treated as clean shutdown in ",[150,526,499],{},[195,528,530],{"id":529},"common-symptoms","Common symptoms",[532,533,535],"h3",{"id":534},"cli-hangs-waiting-for-input","CLI hangs waiting for input",[143,537,538,541,542,545],{},[147,539,540],{},"Cause:"," Interactive prompt (login, missing ",[150,543,544],{},"--env",", confirmation).",[143,547,548],{},[147,549,550],{},"Fix:",[161,552,554],{"className":163,"code":553,"filename":165,"language":166,"meta":167,"style":167},"export SHELVE_TOKEN=…\nexport SHELVE_TEAM_SLUG=…\nexport SHELVE_PROJECT=…\nshelve --non-interactive doctor\n",[150,555,556,572,583,595],{"__ignoreMap":167},[171,557,558,562,566,569],{"class":173,"line":174},[171,559,561],{"class":560},"so5gQ","export",[171,563,565],{"class":564},"slsVL"," SHELVE_TOKEN",[171,567,568],{"class":560},"=",[171,570,571],{"class":564},"…\n",[171,573,574,576,579,581],{"class":173,"line":185},[171,575,561],{"class":560},[171,577,578],{"class":564}," SHELVE_TEAM_SLUG",[171,580,568],{"class":560},[171,582,571],{"class":564},[171,584,586,588,591,593],{"class":173,"line":585},3,[171,587,561],{"class":560},[171,589,590],{"class":564}," SHELVE_PROJECT",[171,592,568],{"class":560},[171,594,571],{"class":564},[171,596,598,600,603],{"class":173,"line":597},4,[171,599,178],{"class":177},[171,601,602],{"class":190}," --non-interactive",[171,604,182],{"class":181},[532,606,608,611],{"id":607},"shelve-run-dev-exits-instantly",[150,609,610],{},"shelve run dev"," exits instantly",[143,613,614,616],{},[147,615,540],{}," Script resolution failed or script exits immediately.",[143,618,619],{},[147,620,550],{},[161,622,624],{"className":163,"code":623,"filename":165,"language":166,"meta":167,"style":167},"shelve run --debug dev\nshelve run -- pnpm dev\n",[150,625,626,639],{"__ignoreMap":167},[171,627,628,630,633,636],{"class":173,"line":174},[171,629,178],{"class":177},[171,631,632],{"class":181}," run",[171,634,635],{"class":190}," --debug",[171,637,638],{"class":181}," dev\n",[171,640,641,643,645,648,651],{"class":173,"line":185},[171,642,178],{"class":177},[171,644,632],{"class":181},[171,646,647],{"class":190}," --",[171,649,650],{"class":181}," pnpm",[171,652,638],{"class":181},[532,654,656],{"id":655},"secrets-not-updated-after-shelve-ui-change","Secrets not updated after Shelve UI change",[143,658,659,661],{},[147,660,540],{}," Old process env or stale cache.",[143,663,664,666,667,670,671,674],{},[147,665,550],{}," Restart with ",[150,668,669],{},"shelve run",", or use ",[150,672,673],{},"--watch --restart-on-change",".",[532,676,678,680],{"id":677},"pull-fails-in-cursor-claude-code",[150,679,233],{}," fails in Cursor \u002F Claude Code",[143,682,683,685,686,688],{},[147,684,540],{}," Agent guard (",[150,687,228],{},").",[143,690,691,693,694,696,697,700,701,703],{},[147,692,550],{}," Prefer ",[150,695,243],{},". Only ",[150,698,699],{},"shelve pull --yes"," if you explicitly need a ",[150,702,250],{}," file.",[532,705,707],{"id":706},"offline-plane-mode","Offline \u002F plane mode",[143,709,710],{},[147,711,550],{},[161,713,715],{"className":163,"code":714,"filename":165,"language":166,"meta":167,"style":167},"# After one successful online run:\nshelve run --offline -- pnpm build\n",[150,716,717,723],{"__ignoreMap":167},[171,718,719],{"class":173,"line":174},[171,720,722],{"class":721},"sCsY4","# After one successful online run:\n",[171,724,725,727,729,732,734,736],{"class":173,"line":185},[171,726,178],{"class":177},[171,728,632],{"class":181},[171,730,731],{"class":190}," --offline",[171,733,647],{"class":190},[171,735,650],{"class":181},[171,737,738],{"class":181}," build\n",[532,740,742],{"id":741},"json-automation-parse-errors","JSON automation parse errors",[744,745,746,757,766],"ul",{},[747,748,749,750,753,754],"li",{},"Success → ",[147,751,752],{},"stdout",": ",[150,755,756],{},"{ \"ok\": true, \"data\": … }",[747,758,759,760,753,763],{},"Errors → ",[147,761,762],{},"stderr",[150,764,765],{},"{ \"ok\": false, \"error\": { \"code\", \"message\" } }",[747,767,768,770,771,773,774],{},[150,769,499],{}," spawn metadata → ",[147,772,762],{}," event: ",[150,775,776],{},"{ \"ok\": true, \"event\": \"child_spawned\", … }",[143,778,779,780,783],{},"Secret ",[147,781,782],{},"values"," are never included in JSON output.",[195,785,787],{"id":786},"ci-github-actions","CI \u002F GitHub Actions",[143,789,790],{},"Use the composite action:",[161,792,796],{"className":793,"code":794,"language":795,"meta":167,"style":167},"language-yaml shiki shiki-themes github-light github-dark github-dark","- uses: .\u002F.github\u002Factions\u002Fshelve-run\n  with:\n    token: ${{ secrets.SHELVE_TOKEN }}\n    team-slug: my-team\n    project: my-app\n    env: ci\n    command: pnpm test\n","yaml",[150,797,798,812,820,830,840,851,862],{"__ignoreMap":167},[171,799,800,803,807,809],{"class":173,"line":174},[171,801,802],{"class":564},"- ",[171,804,806],{"class":805},"sByVh","uses",[171,808,753],{"class":564},[171,810,811],{"class":181},".\u002F.github\u002Factions\u002Fshelve-run\n",[171,813,814,817],{"class":173,"line":185},[171,815,816],{"class":805},"  with",[171,818,819],{"class":564},":\n",[171,821,822,825,827],{"class":173,"line":585},[171,823,824],{"class":805},"    token",[171,826,753],{"class":564},[171,828,829],{"class":181},"${{ secrets.SHELVE_TOKEN }}\n",[171,831,832,835,837],{"class":173,"line":597},[171,833,834],{"class":805},"    team-slug",[171,836,753],{"class":564},[171,838,839],{"class":181},"my-team\n",[171,841,843,846,848],{"class":173,"line":842},5,[171,844,845],{"class":805},"    project",[171,847,753],{"class":564},[171,849,850],{"class":181},"my-app\n",[171,852,854,857,859],{"class":173,"line":853},6,[171,855,856],{"class":805},"    env",[171,858,753],{"class":564},[171,860,861],{"class":181},"ci\n",[171,863,865,868,870],{"class":173,"line":864},7,[171,866,867],{"class":805},"    command",[171,869,753],{"class":564},[171,871,872],{"class":181},"pnpm test\n",[143,874,875],{},"Validate secrets before the main job:",[161,877,879],{"className":793,"code":878,"language":795,"meta":167,"style":167},"- run: npx @shelve\u002Fcli --json doctor\n  env:\n    SHELVE_TOKEN: ${{ secrets.SHELVE_TOKEN }}\n    SHELVE_TEAM_SLUG: my-team\n    SHELVE_PROJECT: my-app\n",[150,880,881,892,899,908,917],{"__ignoreMap":167},[171,882,883,885,887,889],{"class":173,"line":174},[171,884,802],{"class":564},[171,886,499],{"class":805},[171,888,753],{"class":564},[171,890,891],{"class":181},"npx @shelve\u002Fcli --json doctor\n",[171,893,894,897],{"class":173,"line":185},[171,895,896],{"class":805},"  env",[171,898,819],{"class":564},[171,900,901,904,906],{"class":173,"line":585},[171,902,903],{"class":805},"    SHELVE_TOKEN",[171,905,753],{"class":564},[171,907,829],{"class":181},[171,909,910,913,915],{"class":173,"line":597},[171,911,912],{"class":805},"    SHELVE_TEAM_SLUG",[171,914,753],{"class":564},[171,916,839],{"class":181},[171,918,919,922,924],{"class":173,"line":842},[171,920,921],{"class":805},"    SHELVE_PROJECT",[171,923,753],{"class":564},[171,925,850],{"class":181},[195,927,929],{"id":928},"agent-skill","Agent skill",[143,931,932],{},"Install the published skills:",[161,934,936],{"className":163,"code":935,"filename":165,"language":166,"meta":167,"style":167},"npx skills add https:\u002F\u002Fshelve.cloud\n",[150,937,938],{"__ignoreMap":167},[171,939,940,943,946,949],{"class":173,"line":174},[171,941,942],{"class":177},"npx",[171,944,945],{"class":181}," skills",[171,947,948],{"class":181}," add",[171,950,951],{"class":181}," https:\u002F\u002Fshelve.cloud\n",[143,953,954,955,958,959,688],{},"Catalog: ",[150,956,957],{},"https:\u002F\u002Fshelve.cloud\u002F.well-known\u002Fskills\u002Findex.json"," (skill: ",[150,960,178],{},[962,963,964],"style",{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}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);}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sByVh, html code.shiki .sByVh{--shiki-light:#22863A;--shiki-default:#85E89D;--shiki-dark:#85E89D}",{"title":167,"searchDepth":185,"depth":185,"links":966},[967,968,969,979,980],{"id":197,"depth":185,"text":198},{"id":453,"depth":185,"text":454},{"id":529,"depth":185,"text":530,"children":970},[971,972,974,975,977,978],{"id":534,"depth":585,"text":535},{"id":607,"depth":585,"text":973},"shelve run dev exits instantly",{"id":655,"depth":585,"text":656},{"id":677,"depth":585,"text":976},"pull fails in Cursor \u002F Claude Code",{"id":706,"depth":585,"text":707},{"id":741,"depth":585,"text":742},{"id":786,"depth":185,"text":787},{"id":928,"depth":185,"text":929},"Symptom → cause → fix for the Shelve CLI and agent automation.","md",null,{},true,{"title":67,"description":981},"9bsqmN2bP9tPaaLvPJnsBYFeju9JNR2h0Qv8HWvAo_w",[989,991],{"title":63,"path":64,"stem":65,"description":990,"children":-1},"Run the Shelve CLI from CI, scripts, and AI coding agents with global flags, JSON output, and non-interactive guards.",{"title":71,"path":72,"stem":73,"description":992,"children":-1},"Control who wins when local .env and Shelve diverge — push guards, pull merge, and diff.",1780236538815]