[{"data":1,"prerenderedAt":1584},["ShallowReactive",2],{"navigation_docs":3,"-guides-run-upgrade-your-configuration":504,"-guides-run-upgrade-your-configuration-surround":1579},[4,28,51,187,214,469],{"title":5,"path":6,"stem":7,"children":8,"page":-1},"Get started","\u002Fget-started","1.get-started",[9,12,16,20,24],{"title":10,"path":6,"stem":11},"Overview","1.get-started\u002Findex",{"title":13,"path":14,"stem":15},"Why Kraft","\u002Fget-started\u002Fwhy-kraft","1.get-started\u002F0.why-kraft",{"title":17,"path":18,"stem":19},"Install","\u002Fget-started\u002Finstall","1.get-started\u002F1.install",{"title":21,"path":22,"stem":23},"Your first work item","\u002Fget-started\u002Ffirst-work-item","1.get-started\u002F2.first-work-item",{"title":25,"path":26,"stem":27},"FAQ","\u002Fget-started\u002Ffaq","1.get-started\u002F3.faq",{"title":29,"path":30,"stem":31,"children":32,"page":-1},"Concepts","\u002Fconcepts","2.concepts",[33,35,39,43,47],{"title":10,"path":30,"stem":34},"2.concepts\u002Findex",{"title":36,"path":37,"stem":38},"How a work item runs","\u002Fconcepts\u002Fhow-a-work-item-runs","2.concepts\u002F1.how-a-work-item-runs",{"title":40,"path":41,"stem":42},"Caps and budgets","\u002Fconcepts\u002Fcaps-and-budgets","2.concepts\u002F2.caps-and-budgets",{"title":44,"path":45,"stem":46},"Why a permission gate","\u002Fconcepts\u002Fpermission-gate","2.concepts\u002F3.permission-gate",{"title":48,"path":49,"stem":50},"Vocabulary","\u002Fconcepts\u002Fvocabulary","2.concepts\u002F4.vocabulary",{"title":52,"path":53,"stem":54,"children":55,"page":-1},"Guides","\u002Fguides","3.guides",[56,58,96,113,134,183],{"title":10,"path":53,"stem":57},"3.guides\u002Findex",{"title":59,"path":60,"stem":61,"children":62,"page":95},"Day to day","\u002Fguides\u002Fday-to-day","3.guides\u002F1.day-to-day",[63,67,71,75,79,83,87,91],{"title":64,"path":65,"stem":66},"The setup wizard on first start","\u002Fguides\u002Fday-to-day\u002Ffirst-run","3.guides\u002F1.day-to-day\u002F2.first-run",{"title":68,"path":69,"stem":70},"File a work item","\u002Fguides\u002Fday-to-day\u002Ffile-a-work-item","3.guides\u002F1.day-to-day\u002F3.file-a-work-item",{"title":72,"path":73,"stem":74},"Use Kraft from your agent","\u002Fguides\u002Fday-to-day\u002Fagent-integration","3.guides\u002F1.day-to-day\u002F4.agent-integration",{"title":76,"path":77,"stem":78},"Reviewing a change","\u002Fguides\u002Fday-to-day\u002Freview-a-change","3.guides\u002F1.day-to-day\u002F5.review-a-change",{"title":80,"path":81,"stem":82},"Raise a cap on a stopped item","\u002Fguides\u002Fday-to-day\u002Fraise-a-cap","3.guides\u002F1.day-to-day\u002F6.raise-a-cap",{"title":84,"path":85,"stem":86},"Kraft for VS Code","\u002Fguides\u002Fday-to-day\u002Fvscode","3.guides\u002F1.day-to-day\u002F7.vscode",{"title":88,"path":89,"stem":90},"Kraft on a phone","\u002Fguides\u002Fday-to-day\u002Fkraft-on-a-phone","3.guides\u002F1.day-to-day\u002F8.kraft-on-a-phone",{"title":92,"path":93,"stem":94},"Get notified when an item needs you","\u002Fguides\u002Fday-to-day\u002Fnotifications","3.guides\u002F1.day-to-day\u002F9.notifications",false,{"title":97,"path":98,"stem":99,"children":100,"page":95},"Customize and automate","\u002Fguides\u002Fcustomize","3.guides\u002F2.customize",[101,105,109],{"title":102,"path":103,"stem":104},"Write your own chain","\u002Fguides\u002Fcustomize\u002Fwrite-your-own-chain","3.guides\u002F2.customize\u002F1.write-your-own-chain",{"title":106,"path":107,"stem":108},"Add a security review or a gate reviewer","\u002Fguides\u002Fcustomize\u002Fadd-review-agents","3.guides\u002F2.customize\u002F2.add-review-agents",{"title":110,"path":111,"stem":112},"Schedule or webhook work","\u002Fguides\u002Fcustomize\u002Fschedule-and-webhook-work","3.guides\u002F2.customize\u002F3.schedule-and-webhook-work",{"title":114,"path":115,"stem":116,"children":117,"page":95},"Agents and harnesses","\u002Fguides\u002Fharnesses","3.guides\u002F3.harnesses",[118,122,126,130],{"title":119,"path":120,"stem":121},"Switch a task to another harness","\u002Fguides\u002Fharnesses\u002Fswitch-harness","3.guides\u002F3.harnesses\u002F1.switch-harness",{"title":123,"path":124,"stem":125},"Add or override a harness","\u002Fguides\u002Fharnesses\u002Fadding-a-harness","3.guides\u002F3.harnesses\u002F2.adding-a-harness",{"title":127,"path":128,"stem":129},"Build a worker Kit","\u002Fguides\u002Fharnesses\u002Fworker-kit","3.guides\u002F3.harnesses\u002F3.worker-kit",{"title":131,"path":132,"stem":133},"Give a worker its login","\u002Fguides\u002Fharnesses\u002Fgive-a-worker-its-login","3.guides\u002F3.harnesses\u002F4.give-a-worker-its-login",{"title":135,"path":136,"stem":137,"children":138,"page":95},"Run the server","\u002Fguides\u002Frun","3.guides\u002F4.run",[139,143,147,151,155,159,163,167,171,175,179],{"title":140,"path":141,"stem":142},"Remote access","\u002Fguides\u002Frun\u002Fremote-access","3.guides\u002F4.run\u002F01.remote-access",{"title":144,"path":145,"stem":146},"Put a proxy in front of Kraft","\u002Fguides\u002Frun\u002Fput-a-proxy-in-front-of-kraft","3.guides\u002F4.run\u002F02.put-a-proxy-in-front-of-kraft",{"title":148,"path":149,"stem":150},"Restart Kraft without ending running agents","\u002Fguides\u002Frun\u002Frestart-kraft","3.guides\u002F4.run\u002F03.restart-kraft",{"title":152,"path":153,"stem":154},"Back up and restore the database","\u002Fguides\u002Frun\u002Fback-up-and-restore","3.guides\u002F4.run\u002F04.back-up-and-restore",{"title":156,"path":157,"stem":158},"Logs and disk space","\u002Fguides\u002Frun\u002Flogs-and-disk-space","3.guides\u002F4.run\u002F05.logs-and-disk-space",{"title":160,"path":161,"stem":162},"Run Kraft as a service","\u002Fguides\u002Frun\u002Frun-as-a-service","3.guides\u002F4.run\u002F06.run-as-a-service",{"title":164,"path":165,"stem":166},"Upgrade Kraft","\u002Fguides\u002Frun\u002Fupgrade-kraft","3.guides\u002F4.run\u002F07.upgrade-kraft",{"title":168,"path":169,"stem":170},"Upgrade your configuration","\u002Fguides\u002Frun\u002Fupgrade-your-configuration","3.guides\u002F4.run\u002F08.upgrade-your-configuration",{"title":172,"path":173,"stem":174},"Upgrade from 1.4","\u002Fguides\u002Frun\u002Fupgrade-from-1-4","3.guides\u002F4.run\u002F09.upgrade-from-1-4",{"title":176,"path":177,"stem":178},"Upgrade from 0.x or a release candidate","\u002Fguides\u002Frun\u002Fupgrade-from-0-x-or-a-release-candidate","3.guides\u002F4.run\u002F10.upgrade-from-0-x-or-a-release-candidate",{"title":180,"path":181,"stem":182},"Roll back to 1.4","\u002Fguides\u002Frun\u002Froll-back","3.guides\u002F4.run\u002F11.roll-back",{"title":184,"path":185,"stem":186},"Kraft Lite","\u002Fguides\u002Fkraft-lite","3.guides\u002F5.kraft-lite",{"title":188,"path":189,"stem":190,"children":191,"page":-1},"Troubleshooting","\u002Ftroubleshooting","4.troubleshooting",[192,194,198,202,206,210],{"title":10,"path":189,"stem":193},"4.troubleshooting\u002Findex",{"title":195,"path":196,"stem":197},"Why did my item stop?","\u002Ftroubleshooting\u002Fwhy-did-my-item-stop","4.troubleshooting\u002F1.why-did-my-item-stop",{"title":199,"path":200,"stem":201},"Stop reasons in detail","\u002Ftroubleshooting\u002Fstop-reasons-in-detail","4.troubleshooting\u002F2.stop-reasons-in-detail",{"title":203,"path":204,"stem":205},"Starting and reaching Kraft","\u002Ftroubleshooting\u002Fstarting-and-reaching-kraft","4.troubleshooting\u002F3.starting-and-reaching-kraft",{"title":207,"path":208,"stem":209},"Doctor failures","\u002Ftroubleshooting\u002Fdoctor-failures","4.troubleshooting\u002F4.doctor-failures",{"title":211,"path":212,"stem":213},"Sandbox and Kit stops","\u002Ftroubleshooting\u002Fsandbox-and-kit-stops","4.troubleshooting\u002F5.sandbox-and-kit-stops",{"title":215,"path":216,"stem":217,"children":218,"page":-1},"Reference","\u002Freference","5.reference",[219,221,259,281,285,375,393,419,423,427,461,465],{"title":10,"path":216,"stem":220},"5.reference\u002Findex",{"title":222,"path":223,"stem":224,"children":225,"page":-1},"Web UI","\u002Freference\u002Fweb-ui","5.reference\u002F00.web-ui\u002Findex",[226,227,231,235,239,243,247,251,255],{"title":10,"path":223,"stem":224},{"title":228,"path":229,"stem":230},"Sidebar, search, and keyboard","\u002Freference\u002Fweb-ui\u002Fsidebar-search-and-keyboard","5.reference\u002F00.web-ui\u002F0.sidebar-search-and-keyboard",{"title":232,"path":233,"stem":234},"The board","\u002Freference\u002Fweb-ui\u002Fboard","5.reference\u002F00.web-ui\u002F1.board",{"title":236,"path":237,"stem":238},"An item's page","\u002Freference\u002Fweb-ui\u002Fitem-page","5.reference\u002F00.web-ui\u002F2.item-page",{"title":240,"path":241,"stem":242},"Fix loops and test scopes","\u002Freference\u002Fweb-ui\u002Ffix-loops-and-test-scopes","5.reference\u002F00.web-ui\u002F3.fix-loops-and-test-scopes",{"title":244,"path":245,"stem":246},"Config before an item starts","\u002Freference\u002Fweb-ui\u002Fconfig-before-start","5.reference\u002F00.web-ui\u002F4.config-before-start",{"title":248,"path":249,"stem":250},"The review page","\u002Freference\u002Fweb-ui\u002Freview-page","5.reference\u002F00.web-ui\u002F5.review-page",{"title":252,"path":253,"stem":254},"Templates and Settings","\u002Freference\u002Fweb-ui\u002Ftemplates-and-settings","5.reference\u002F00.web-ui\u002F6.templates-and-settings",{"title":256,"path":257,"stem":258},"Analytics","\u002Freference\u002Fweb-ui\u002Fanalytics","5.reference\u002F00.web-ui\u002F7.analytics",{"title":260,"path":261,"stem":262,"children":263,"page":-1},"CLI","\u002Freference\u002Fcli","5.reference\u002F01.cli\u002Findex",[264,265,269,273,277],{"title":10,"path":261,"stem":262},{"title":266,"path":267,"stem":268},"Item verbs","\u002Freference\u002Fcli\u002Fitem","5.reference\u002F01.cli\u002F2.item",{"title":270,"path":271,"stem":272},"View verbs","\u002Freference\u002Fcli\u002Fview","5.reference\u002F01.cli\u002F3.view",{"title":274,"path":275,"stem":276},"Repo verbs","\u002Freference\u002Fcli\u002Frepo","5.reference\u002F01.cli\u002F4.repo",{"title":278,"path":279,"stem":280},"Admin verbs","\u002Freference\u002Fcli\u002Fadmin","5.reference\u002F01.cli\u002F5.admin",{"title":282,"path":283,"stem":284},"Work item statuses","\u002Freference\u002Fstatuses","5.reference\u002F02.statuses",{"title":286,"path":287,"stem":288,"children":289,"page":-1},"Configuration","\u002Freference\u002Fconfiguration","5.reference\u002F03.configuration\u002Findex",[290,291,309,313,317,321,325,329,333,337,371],{"title":10,"path":287,"stem":288},{"title":292,"path":293,"stem":294,"children":295,"page":-1},"repos.yaml","\u002Freference\u002Fconfiguration\u002Frepos","5.reference\u002F03.configuration\u002F02.repos\u002Findex",[296,297,301,305],{"title":10,"path":293,"stem":294},{"title":298,"path":299,"stem":300},"How connect proposes commands","\u002Freference\u002Fconfiguration\u002Frepos\u002Fconnect-proposals","5.reference\u002F03.configuration\u002F02.repos\u002F1.connect-proposals",{"title":302,"path":303,"stem":304},"detectors.yaml","\u002Freference\u002Fconfiguration\u002Frepos\u002Fdetectors","5.reference\u002F03.configuration\u002F02.repos\u002F2.detectors",{"title":306,"path":307,"stem":308},"Workspaces","\u002Freference\u002Fconfiguration\u002Frepos\u002Fworkspaces","5.reference\u002F03.configuration\u002F02.repos\u002F3.workspaces",{"title":310,"path":311,"stem":312},"policy.yaml","\u002Freference\u002Fconfiguration\u002Fpolicy","5.reference\u002F03.configuration\u002F03.policy",{"title":314,"path":315,"stem":316},"Library and chains","\u002Freference\u002Fconfiguration\u002Flibrary-and-chains","5.reference\u002F03.configuration\u002F04.library-and-chains",{"title":318,"path":319,"stem":320},"harnesses.yaml","\u002Freference\u002Fconfiguration\u002Fharnesses-file","5.reference\u002F03.configuration\u002F05.harnesses-file",{"title":322,"path":323,"stem":324},"access.yaml","\u002Freference\u002Fconfiguration\u002Faccess","5.reference\u002F03.configuration\u002F06.access",{"title":326,"path":327,"stem":328},"intake.yaml","\u002Freference\u002Fconfiguration\u002Fintake","5.reference\u002F03.configuration\u002F07.intake",{"title":330,"path":331,"stem":332},"notify.yaml","\u002Freference\u002Fconfiguration\u002Fnotify","5.reference\u002F03.configuration\u002F08.notify",{"title":334,"path":335,"stem":336},"theme.yaml","\u002Freference\u002Fconfiguration\u002Ftheme","5.reference\u002F03.configuration\u002F09.theme",{"title":338,"path":339,"stem":340,"children":341,"page":-1},"Sandboxed workers","\u002Freference\u002Fconfiguration\u002Fsandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002Findex",[342,343,347,351,355,359,363,367],{"title":10,"path":339,"stem":340},{"title":344,"path":345,"stem":346},"Resource limits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fresource-limits","5.reference\u002F03.configuration\u002F10.sandbox\u002F1.resource-limits",{"title":348,"path":349,"stem":350},"Callbacks from a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcallbacks","5.reference\u002F03.configuration\u002F10.sandbox\u002F2.callbacks",{"title":352,"path":353,"stem":354},"Network policy","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fnetwork-policy","5.reference\u002F03.configuration\u002F10.sandbox\u002F3.network-policy",{"title":356,"path":357,"stem":358},"Credentials","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcredentials","5.reference\u002F03.configuration\u002F10.sandbox\u002F4.credentials",{"title":360,"path":361,"stem":362},"Kits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fkits","5.reference\u002F03.configuration\u002F10.sandbox\u002F5.kits",{"title":364,"path":365,"stem":366},"sandbox.yaml","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fsandbox-yaml","5.reference\u002F03.configuration\u002F10.sandbox\u002F6.sandbox-yaml",{"title":368,"path":369,"stem":370},"Git in a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fgit-in-a-sandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002F7.git-in-a-sandbox",{"title":372,"path":373,"stem":374},"Environment variables","\u002Freference\u002Fconfiguration\u002Fenvironment-variables","5.reference\u002F03.configuration\u002F11.environment-variables",{"title":376,"path":377,"stem":378,"children":379,"page":-1},"Chain file keys","\u002Freference\u002Fchain-nodes","5.reference\u002F04.chain-nodes\u002Findex",[380,381,385,389],{"title":10,"path":377,"stem":378},{"title":382,"path":383,"stem":384},"Subprocess tasks","\u002Freference\u002Fchain-nodes\u002Fsubprocess-tasks","5.reference\u002F04.chain-nodes\u002F2.subprocess-tasks",{"title":386,"path":387,"stem":388},"Fix loop and judge","\u002Freference\u002Fchain-nodes\u002Ffix-loop","5.reference\u002F04.chain-nodes\u002F3.fix-loop",{"title":390,"path":391,"stem":392},"Result file","\u002Freference\u002Fchain-nodes\u002Fresult-file","5.reference\u002F04.chain-nodes\u002F4.result-file",{"title":394,"path":395,"stem":396,"children":397,"page":-1},"Agent harnesses","\u002Freference\u002Fharnesses","5.reference\u002F05.harnesses\u002Findex",[398,399,403,407,411,415],{"title":10,"path":395,"stem":396},{"title":400,"path":401,"stem":402},"Unattended runs","\u002Freference\u002Fharnesses\u002Funattended-runs","5.reference\u002F05.harnesses\u002F2.unattended-runs",{"title":404,"path":405,"stem":406},"Agent profiles","\u002Freference\u002Fharnesses\u002Fagent-profiles","5.reference\u002F05.harnesses\u002F3.agent-profiles",{"title":408,"path":409,"stem":410},"Harness definition files","\u002Freference\u002Fharnesses\u002Fharness-files","5.reference\u002F05.harnesses\u002F4.harness-files",{"title":412,"path":413,"stem":414},"Fallback and escalation","\u002Freference\u002Fharnesses\u002Ffallback-and-escalation","5.reference\u002F05.harnesses\u002F5.fallback-and-escalation",{"title":416,"path":417,"stem":418},"Cost reporting","\u002Freference\u002Fharnesses\u002Fcost-reporting","5.reference\u002F05.harnesses\u002F6.cost-reporting",{"title":420,"path":421,"stem":422},"Permission gate","\u002Freference\u002Fpermissions","5.reference\u002F06.permissions",{"title":424,"path":425,"stem":426},"Inbound triggers","\u002Freference\u002Ftriggers","5.reference\u002F07.triggers",{"title":428,"path":429,"stem":430,"children":431,"page":-1},"HTTP API","\u002Freference\u002Fhttp-api","5.reference\u002F08.http-api\u002Findex",[432,433,437,441,445,449,453,457],{"title":10,"path":429,"stem":430},{"title":434,"path":435,"stem":436},"Filing, reading and changing work items","\u002Freference\u002Fhttp-api\u002Fwork-items","5.reference\u002F08.http-api\u002F2.work-items",{"title":438,"path":439,"stem":440},"Gates, run control, ending and retry","\u002Freference\u002Fhttp-api\u002Fgates-run-control-and-ending","5.reference\u002F08.http-api\u002F3.gates-run-control-and-ending",{"title":442,"path":443,"stem":444},"The work item object","\u002Freference\u002Fhttp-api\u002Fwork-item-object","5.reference\u002F08.http-api\u002F4.work-item-object",{"title":446,"path":447,"stem":448},"Budget, events, diff and documents","\u002Freference\u002Fhttp-api\u002Fbudget-and-events","5.reference\u002F08.http-api\u002F5.budget-and-events",{"title":450,"path":451,"stem":452},"Repos, chains, harnesses and the server","\u002Freference\u002Fhttp-api\u002Frepos-chains-harnesses-and-server","5.reference\u002F08.http-api\u002F6.repos-chains-harnesses-and-server",{"title":454,"path":455,"stem":456},"Drafts","\u002Freference\u002Fhttp-api\u002Fdrafts","5.reference\u002F08.http-api\u002F7.drafts",{"title":458,"path":459,"stem":460},"Ops for each draft area","\u002Freference\u002Fhttp-api\u002Fdraft-ops","5.reference\u002F08.http-api\u002F8.draft-ops",{"title":462,"path":463,"stem":464},"MCP tools","\u002Freference\u002Fmcp-tools","5.reference\u002F09.mcp-tools",{"title":466,"path":467,"stem":468},"Events","\u002Freference\u002Fevents","5.reference\u002F10.events",{"title":470,"path":471,"stem":472,"children":473,"page":-1},"Security and project","\u002Fproject","6.project",[474,476,480,484,488,492,496,500],{"title":10,"path":471,"stem":475},"6.project\u002Findex",{"title":477,"path":478,"stem":479},"Security","\u002Fproject\u002Fsecurity","6.project\u002F1.security",{"title":481,"path":482,"stem":483},"Data and privacy","\u002Fproject\u002Fdata-and-privacy","6.project\u002F2.data-and-privacy",{"title":485,"path":486,"stem":487},"What's new in 2.0","\u002Fproject\u002Fwhats-new","6.project\u002F3.whats-new",{"title":489,"path":490,"stem":491},"Status and support","\u002Fproject\u002Fstatus-and-support","6.project\u002F4.status-and-support",{"title":493,"path":494,"stem":495},"Architecture","\u002Fproject\u002Farchitecture","6.project\u002F5.architecture",{"title":497,"path":498,"stem":499},"Source map","\u002Fproject\u002Fsource-map","6.project\u002F6.source-map",{"title":501,"path":502,"stem":503},"Contributing","\u002Fproject\u002Fcontributing","6.project\u002F7.contributing",{"id":505,"title":168,"body":506,"description":1572,"extension":1573,"links":1574,"meta":1575,"navigation":1576,"path":169,"seo":1577,"stem":170,"__hash__":1578},"docs\u002F3.guides\u002F4.run\u002F08.upgrade-your-configuration.md",{"type":507,"value":508,"toc":1563},"minimark",[509,524,529,574,578,585,596,616,829,843,847,850,865,868,884,902,917,921,927,1007,1039,1049,1052,1149,1160,1184,1226,1230,1244,1289,1292,1318,1328,1342,1348,1394,1398,1483,1536,1540,1559],[510,511,512,513,517,518,523],"p",{},"See what a Kraft upgrade shipped that your config lacks, and take what you want\nwithout losing your edits. Kraft seeds ",[514,515,516],"code",{},"$KRAFT_HOME\u002Fconfig\u002F"," from its shipped\ndefaults on first run and never overwrites it after, so an upgrade cannot\nclobber your edits. It also never brings you new shipped nodes, tasks or ",[519,520,522],"a",{"href":521},"\u002Fconcepts\u002Fvocabulary#policy","policy","\nkeys.",[525,526,528],"h2",{"id":527},"before-you-start","Before you start",[530,531,532,543,568],"ul",{},[533,534,535,536,539,540,542],"li",{},"You have upgraded Kraft (",[514,537,538],{},"kraft admin update","). See\n",[519,541,164],{"href":165},".",[533,544,545,546,549,550,552,553,556,557,560,561,564,565,567],{},"Your config directory is ",[514,547,548],{},"~\u002F.kraft\u002Fconfig\u002F",", or ",[514,551,516],{}," if you set\n",[514,554,555],{},"KRAFT_HOME",". The directory ",[514,558,559],{},"KRAFT_CONFIG_DIR"," names wins over both, and so does\na 1.x ",[514,562,563],{},"KRAFT_TEMPLATES_DIR"," when ",[514,566,559],{}," is unset. The commands below\nfollow the same order.",[533,569,570,573],{},[514,571,572],{},"git"," is installed.",[525,575,577],{"id":576},"keep-your-config-in-git","Keep your config in git",[510,579,580,581,584],{},"Do this once. If you have not yet, do it now, before you merge anything, so that\n",[514,582,583],{},"git diff"," shows your merge. A git history lets you see your own edits apart from\nKraft's, and undo a bad merge.",[510,586,587,588,591,592,595],{},"Skip this block if the config directory is already in git: with ",[514,589,590],{},"config"," set as in\nits first line, ",[514,593,594],{},"git -C \"$config\" status"," answers instead of failing.",[510,597,598,599,601,602,605,606,608,609,611,612,615],{},"Each command runs only if the one before it worked, and every ",[514,600,572],{}," command names\nthe directory with ",[514,603,604],{},"-C",". So a config directory that does not exist stops the\nblock before it touches anything, and nothing runs in the folder you are in. The\nblock adds ",[514,607,322],{}," and ",[514,610,330],{}," to a ",[514,613,614],{},".gitignore"," that is already\nthere, and leaves its other lines alone:",[617,618,623],"pre",{"className":619,"code":620,"language":621,"meta":622,"style":622},"language-bash shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","config=\"${KRAFT_CONFIG_DIR:-${KRAFT_TEMPLATES_DIR:-${KRAFT_HOME:-$HOME\u002F.kraft}\u002Fconfig}}\"\ngit -C \"$config\" init &&\n  for f in access.yaml notify.yaml; do\n    grep -qxs \"$f\" \"$config\u002F.gitignore\" || printf '\\n%s\\n' \"$f\" >> \"$config\u002F.gitignore\"\n  done &&\n  git -C \"$config\" add -A &&\n  git -C \"$config\" commit -m \"My Kraft config\"\n","bash","",[514,624,625,680,705,729,777,785,807],{"__ignoreMap":622},[626,627,630,633,637,641,643,646,649,651,653,655,657,659,662,665,667,670,673,675,677],"span",{"class":628,"line":629},"line",1,[626,631,590],{"class":632},"s7iLA",[626,634,636],{"class":635},"sklAV","=",[626,638,640],{"class":639},"semJd","\"${",[626,642,559],{"class":632},[626,644,645],{"class":635},":-",[626,647,648],{"class":639},"${",[626,650,563],{"class":632},[626,652,645],{"class":635},[626,654,648],{"class":639},[626,656,555],{"class":632},[626,658,645],{"class":635},[626,660,661],{"class":632},"$HOME",[626,663,664],{"class":635},"\u002F",[626,666,542],{"class":639},[626,668,669],{"class":632},"kraft",[626,671,672],{"class":639},"}",[626,674,664],{"class":635},[626,676,590],{"class":632},[626,678,679],{"class":639},"}}\"\n",[626,681,683,686,690,693,696,699,702],{"class":628,"line":682},2,[626,684,572],{"class":685},"szw1H",[626,687,689],{"class":688},"ssYy9"," -C",[626,691,692],{"class":639}," \"",[626,694,695],{"class":632},"$config",[626,697,698],{"class":639},"\"",[626,700,701],{"class":639}," init",[626,703,704],{"class":632}," &&\n",[626,706,708,711,714,717,720,723,726],{"class":628,"line":707},3,[626,709,710],{"class":635},"  for",[626,712,713],{"class":632}," f ",[626,715,716],{"class":635},"in",[626,718,719],{"class":639}," access.yaml",[626,721,722],{"class":639}," notify.yaml",[626,724,725],{"class":632},"; ",[626,727,728],{"class":635},"do\n",[626,730,732,735,738,740,743,745,747,749,752,755,758,761,763,765,767,770,772,774],{"class":628,"line":731},4,[626,733,734],{"class":685},"    grep",[626,736,737],{"class":688}," -qxs",[626,739,692],{"class":639},[626,741,742],{"class":632},"$f",[626,744,698],{"class":639},[626,746,692],{"class":639},[626,748,695],{"class":632},[626,750,751],{"class":639},"\u002F.gitignore\"",[626,753,754],{"class":635}," ||",[626,756,757],{"class":688}," printf",[626,759,760],{"class":639}," '\\n%s\\n'",[626,762,692],{"class":639},[626,764,742],{"class":632},[626,766,698],{"class":639},[626,768,769],{"class":635}," >>",[626,771,692],{"class":639},[626,773,695],{"class":632},[626,775,776],{"class":639},"\u002F.gitignore\"\n",[626,778,780,783],{"class":628,"line":779},5,[626,781,782],{"class":635},"  done",[626,784,704],{"class":632},[626,786,788,791,793,795,797,799,802,805],{"class":628,"line":787},6,[626,789,790],{"class":685},"  git",[626,792,689],{"class":688},[626,794,692],{"class":639},[626,796,695],{"class":632},[626,798,698],{"class":639},[626,800,801],{"class":639}," add",[626,803,804],{"class":688}," -A",[626,806,704],{"class":632},[626,808,810,812,814,816,818,820,823,826],{"class":628,"line":809},7,[626,811,790],{"class":685},[626,813,689],{"class":688},[626,815,692],{"class":639},[626,817,695],{"class":632},[626,819,698],{"class":639},[626,821,822],{"class":639}," commit",[626,824,825],{"class":688}," -m",[626,827,828],{"class":639}," \"My Kraft config\"\n",[510,830,831,832,608,834,836,837,839,840,542],{},"Leave ",[514,833,322],{},[514,835,330],{}," out. One holds your password hash, the\nother a webhook URL that usually carries a token. Keep the repository on this\nmachine: ",[514,838,292],{}," can hold secrets in a repo's ",[514,841,842],{},"env:",[525,844,846],{"id":845},"see-what-is-new","See what is new",[510,848,849],{},"Run the checks that know what shipped:",[617,851,853],{"className":619,"code":852,"language":621,"meta":622,"style":622},"kraft admin doctor\n",[514,854,855],{"__ignoreMap":622},[626,856,857,859,862],{"class":628,"line":629},[626,858,669],{"class":685},[626,860,861],{"class":639}," admin",[626,863,864],{"class":639}," doctor\n",[510,866,867],{},"Two rows say whether your config has fallen behind. When it has not, they read:",[617,869,874],{"className":870,"code":872,"language":873,"meta":622},[871],"language-text","ok    capabilities     seeded at 2.0.0; up to date\nok    chain_templates  2 template(s), no missing nodes\n","text",[514,875,876,880],{"__ignoreMap":622},[626,877,879],{"className":878},[628],"ok    capabilities     seeded at 2.0.0; up to date\n",[626,881,883],{"className":882},[628],"ok    chain_templates  2 template(s), no missing nodes\n",[530,885,886,896],{},[533,887,888,889,892,893,542],{},"The ",[514,890,891],{},"capabilities"," row lists what this Kraft can do that your config, seeded\nearlier, does not use yet, each with the edit that adopts it. Your config\nrecords the version it was seeded from in ",[514,894,895],{},"config\u002F.seeded-version",[533,897,888,898,901],{},[514,899,900],{},"chain_templates"," row names nodes a shipped chain has that your copy lacks.\nIt compares node ids only, so a clean row does not prove the chains match.",[510,903,904,905,908,909,912,913,916],{},"With the Claude Code plugin, ",[514,906,907],{},"\u002Fkraft:check"," runs these checks and ",[514,910,911],{},"templates lint",", and explains each row. It also flags a ",[514,914,915],{},"plugin:skill"," in your chains that\nyour agent does not have. It only reports until you ask it to change something.",[525,918,920],{"id":919},"diff-against-the-shipped-defaults","Diff against the shipped defaults",[510,922,923,924,926],{},"The shipped defaults sit inside the installed Kraft. The next command finds them\nthrough the Python that runs your ",[514,925,669],{}," command. It works for a uv, script or\nHomebrew install:",[617,928,930],{"className":619,"code":929,"language":621,"meta":622,"style":622},"KRAFT_PY=\"$(head -1 \"$(command -v kraft)\" | cut -c3-)\"\nSHIPPED=\"$(\"$KRAFT_PY\" -c 'import kraft.paths; print(kraft.paths.BUNDLED \u002F \"config\")')\"\necho \"$SHIPPED\"\n",[514,931,932,972,994],{"__ignoreMap":622},[626,933,934,937,939,942,945,948,951,954,957,960,963,966,969],{"class":628,"line":629},[626,935,936],{"class":632},"KRAFT_PY",[626,938,636],{"class":635},[626,940,941],{"class":639},"\"$(",[626,943,944],{"class":685},"head",[626,946,947],{"class":688}," -1",[626,949,950],{"class":639}," \"$(",[626,952,953],{"class":688},"command",[626,955,956],{"class":688}," -v",[626,958,959],{"class":639}," kraft)\" ",[626,961,962],{"class":635},"|",[626,964,965],{"class":685}," cut",[626,967,968],{"class":688}," -c3-",[626,970,971],{"class":639},")\"\n",[626,973,974,977,979,981,983,986,988,991],{"class":628,"line":682},[626,975,976],{"class":632},"SHIPPED",[626,978,636],{"class":635},[626,980,941],{"class":639},[626,982,698],{"class":685},[626,984,985],{"class":632},"$KRAFT_PY",[626,987,698],{"class":685},[626,989,990],{"class":688}," -c",[626,992,993],{"class":639}," 'import kraft.paths; print(kraft.paths.BUNDLED \u002F \"config\")')\"\n",[626,995,996,999,1001,1004],{"class":628,"line":707},[626,997,998],{"class":688},"echo",[626,1000,692],{"class":639},[626,1002,1003],{"class":632},"$SHIPPED",[626,1005,1006],{"class":639},"\"\n",[510,1008,1009,1011,1012,1015,1016,1018,1019,1027,1028,1031,1032,1035,1036,542],{},[514,1010,998],{}," prints a path that ends in ",[514,1013,1014],{},"kraft\u002F_bundled\u002Fconfig",". If it prints an empty\nline, the line above it failed and the shell printed that error: the first line\nof your ",[514,1017,669],{}," command is not an interpreter path. Use the repo's copy instead: the\n",[519,1020,1024],{"href":1021,"rel":1022},"https:\u002F\u002Fgithub.com\u002FitsOmidKarami\u002Fkraft\u002Ftree\u002Fmain\u002Fconfig",[1023],"nofollow",[514,1025,1026],{},"config\u002F"," directory at\nthe tag for your version, such as ",[514,1029,1030],{},"v2.0.0",", not ",[514,1033,1034],{},"main",". For a tag before 2.0, the\ndirectory is ",[514,1037,1038],{},"templates\u002F",[510,1040,1041,1042,1044,1045,1048],{},"Download it, and set ",[514,1043,976],{}," to that folder with ",[514,1046,1047],{},"SHIPPED=\u002Fpath\u002Fto\u002Fconfig",". The\nnext two blocks stop with a message while it is unset.",[510,1050,1051],{},"Then compare it with yours:",[617,1053,1055],{"className":619,"code":1054,"language":621,"meta":622,"style":622},"config=\"${KRAFT_CONFIG_DIR:-${KRAFT_TEMPLATES_DIR:-${KRAFT_HOME:-$HOME\u002F.kraft}\u002Fconfig}}\"\ndiff -ru \"${SHIPPED:?set SHIPPED first, as the block above does}\" \"$config\"\n",[514,1056,1057,1097],{"__ignoreMap":622},[626,1058,1059,1061,1063,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095],{"class":628,"line":629},[626,1060,590],{"class":632},[626,1062,636],{"class":635},[626,1064,640],{"class":639},[626,1066,559],{"class":632},[626,1068,645],{"class":635},[626,1070,648],{"class":639},[626,1072,563],{"class":632},[626,1074,645],{"class":635},[626,1076,648],{"class":639},[626,1078,555],{"class":632},[626,1080,645],{"class":635},[626,1082,661],{"class":632},[626,1084,664],{"class":635},[626,1086,542],{"class":639},[626,1088,669],{"class":632},[626,1090,672],{"class":639},[626,1092,664],{"class":635},[626,1094,590],{"class":632},[626,1096,679],{"class":639},[626,1098,1099,1102,1105,1108,1110,1113,1116,1119,1122,1125,1128,1131,1134,1137,1140,1143,1145,1147],{"class":628,"line":682},[626,1100,1101],{"class":685},"diff",[626,1103,1104],{"class":688}," -ru",[626,1106,1107],{"class":639}," \"${",[626,1109,976],{"class":632},[626,1111,1112],{"class":635},":?",[626,1114,1115],{"class":632},"set",[626,1117,1118],{"class":632}," SHIPPED",[626,1120,1121],{"class":632}," first",[626,1123,1124],{"class":639},", ",[626,1126,1127],{"class":632},"as",[626,1129,1130],{"class":632}," the",[626,1132,1133],{"class":632}," block",[626,1135,1136],{"class":632}," above",[626,1138,1139],{"class":632}," does",[626,1141,1142],{"class":639},"}\"",[626,1144,692],{"class":639},[626,1146,695],{"class":632},[626,1148,1006],{"class":639},[510,1150,1151,1152,1155,1156,1159],{},"A line starting ",[514,1153,1154],{},"-"," is in the shipped file and not in yours. That is either\nsomething new or something you removed on purpose. Your git log tells the two\napart. ",[514,1157,1158],{},"Only in"," lines name whole files, such as a chain you added.",[510,1161,1162,1163,1166,1167,1170,1171,1173,1174,1177,1178,1180,1181,1183],{},"A task that ships and that your ",[514,1164,1165],{},"library.yaml"," lacks, such as ",[514,1168,1169],{},"mr_rebase",", shows\nlike the hunk below. A real ",[514,1172,1101],{}," also prints a file header, an ",[514,1175,1176],{},"@@"," line, the six\ncomment lines above ",[514,1179,1169],{}," in the shipped file (as ",[514,1182,1154],{}," lines), and a few\nlines of context on each side. They are left out here:",[617,1185,1188],{"className":1186,"code":1187,"language":1101,"meta":622,"style":622},"language-diff shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","-  mr_rebase:\n-    kind: builtin\n-    ref: kraft.mr_rebase\n-\n   open_draft_mr:\n     kind: forge\n     target: mr.open_draft\n",[514,1189,1190,1196,1201,1206,1211,1216,1221],{"__ignoreMap":622},[626,1191,1192],{"class":628,"line":629},[626,1193,1195],{"class":1194},"s5cpx","-  mr_rebase:\n",[626,1197,1198],{"class":628,"line":682},[626,1199,1200],{"class":1194},"-    kind: builtin\n",[626,1202,1203],{"class":628,"line":707},[626,1204,1205],{"class":1194},"-    ref: kraft.mr_rebase\n",[626,1207,1208],{"class":628,"line":731},[626,1209,1210],{"class":1194},"-\n",[626,1212,1213],{"class":628,"line":779},[626,1214,1215],{"class":632},"   open_draft_mr:\n",[626,1217,1218],{"class":628,"line":787},[626,1219,1220],{"class":632},"     kind: forge\n",[626,1222,1223],{"class":628,"line":809},[626,1224,1225],{"class":632},"     target: mr.open_draft\n",[525,1227,1229],{"id":1228},"merge-what-you-want","Merge what you want",[510,1231,1232,1233,1124,1236,608,1239,1243],{},"Copy changes into your files by hand. Do not copy the shipped files over yours:\nyour library holds your own ",[514,1234,1235],{},"model",[514,1237,1238],{},"effort",[519,1240,1242],{"href":1241},"\u002Fconcepts\u002Fvocabulary#harness","harness"," choices, and a copy\ndestroys them.",[530,1245,1246,1265,1278],{},[533,1247,1248,1252,1253,1255,1256,1258,1259,1261,1262,542],{},[1249,1250,1251],"strong",{},"A new library task or node."," Copy its entry into your ",[514,1254,1165],{},". For the\nhunk above, add the three ",[514,1257,1169],{}," lines, without the ",[514,1260,1154],{},", under ",[514,1263,1264],{},"tasks:",[533,1266,1267,1270,1271,1274,1275,1277],{},[1249,1268,1269],{},"A new node in a shipped chain."," Add it to your copy of that chain in\n",[514,1272,1273],{},"chains\u002F",". If your chain is a copy of a shipped one with your own nodes added,\nas in ",[519,1276,102],{"href":103},", add the\nnew node there too.",[533,1279,1280,1286,1287,542],{},[1249,1281,1282,1283,1285],{},"A new ",[514,1284,310],{}," key."," Add it only if you want to change its default. A\nkey your file leaves out takes the default. See\n",[519,1288,310],{"href":311},[510,1290,1291],{},"Then check and load the result:",[617,1293,1295],{"className":619,"code":1294,"language":621,"meta":622,"style":622},"kraft admin templates lint\nkraft admin reload\n",[514,1296,1297,1309],{"__ignoreMap":622},[626,1298,1299,1301,1303,1306],{"class":628,"line":629},[626,1300,669],{"class":685},[626,1302,861],{"class":639},[626,1304,1305],{"class":639}," templates",[626,1307,1308],{"class":639}," lint\n",[626,1310,1311,1313,1315],{"class":628,"line":682},[626,1312,669],{"class":685},[626,1314,861],{"class":639},[626,1316,1317],{"class":639}," reload\n",[510,1319,1320,1323,1324,1327],{},[514,1321,1322],{},"lint"," checks every chain against your library and exits 1 on any error. ",[514,1325,1326],{},"reload","\nmakes the running server read the files, with no restart. It exits 1 and names\nany chain that does not resolve. A pass prints these lines (the counts are your\nown):",[617,1329,1332],{"className":1330,"code":1331,"language":873,"meta":622},[871],"3 chain(s), no errors\nreloaded 3 template(s) and policy.yaml and intake.yaml\n",[514,1333,1334,1338],{"__ignoreMap":622},[626,1335,1337],{"className":1336},[628],"3 chain(s), no errors\n",[626,1339,1341],{"className":1340},[628],"reloaded 3 template(s) and policy.yaml and intake.yaml\n",[510,1343,1344,1345,1347],{},"To check the shipped set on its own, without a server, with ",[514,1346,976],{}," set as\nabove:",[617,1349,1351],{"className":619,"code":1350,"language":621,"meta":622,"style":622},"kraft admin templates lint --dir \"${SHIPPED:?set SHIPPED first, as the block above does}\"\n",[514,1352,1353],{"__ignoreMap":622},[626,1354,1355,1357,1359,1361,1364,1367,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391],{"class":628,"line":629},[626,1356,669],{"class":685},[626,1358,861],{"class":639},[626,1360,1305],{"class":639},[626,1362,1363],{"class":639}," lint",[626,1365,1366],{"class":688}," --dir",[626,1368,1107],{"class":639},[626,1370,976],{"class":632},[626,1372,1112],{"class":635},[626,1374,1115],{"class":632},[626,1376,1118],{"class":632},[626,1378,1121],{"class":632},[626,1380,1124],{"class":639},[626,1382,1127],{"class":632},[626,1384,1130],{"class":632},[626,1386,1133],{"class":632},[626,1388,1136],{"class":632},[626,1390,1139],{"class":632},[626,1392,1393],{"class":639},"}\"\n",[525,1395,1397],{"id":1396},"check-it-worked","Check it worked",[617,1399,1401],{"className":619,"code":1400,"language":621,"meta":622,"style":622},"config=\"${KRAFT_CONFIG_DIR:-${KRAFT_TEMPLATES_DIR:-${KRAFT_HOME:-$HOME\u002F.kraft}\u002Fconfig}}\"\nkraft admin templates show default --resolved\nkraft admin doctor\ngit -C \"$config\" diff\n",[514,1402,1403,1443,1460,1468],{"__ignoreMap":622},[626,1404,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441],{"class":628,"line":629},[626,1406,590],{"class":632},[626,1408,636],{"class":635},[626,1410,640],{"class":639},[626,1412,559],{"class":632},[626,1414,645],{"class":635},[626,1416,648],{"class":639},[626,1418,563],{"class":632},[626,1420,645],{"class":635},[626,1422,648],{"class":639},[626,1424,555],{"class":632},[626,1426,645],{"class":635},[626,1428,661],{"class":632},[626,1430,664],{"class":635},[626,1432,542],{"class":639},[626,1434,669],{"class":632},[626,1436,672],{"class":639},[626,1438,664],{"class":635},[626,1440,590],{"class":632},[626,1442,679],{"class":639},[626,1444,1445,1447,1449,1451,1454,1457],{"class":628,"line":682},[626,1446,669],{"class":685},[626,1448,861],{"class":639},[626,1450,1305],{"class":639},[626,1452,1453],{"class":639}," show",[626,1455,1456],{"class":639}," default",[626,1458,1459],{"class":688}," --resolved\n",[626,1461,1462,1464,1466],{"class":628,"line":707},[626,1463,669],{"class":685},[626,1465,861],{"class":639},[626,1467,864],{"class":639},[626,1469,1470,1472,1474,1476,1478,1480],{"class":628,"line":731},[626,1471,572],{"class":685},[626,1473,689],{"class":688},[626,1475,692],{"class":639},[626,1477,695],{"class":632},[626,1479,698],{"class":639},[626,1481,1482],{"class":639}," diff\n",[1484,1485,1486,1492,1531],"ol",{},[533,1487,1488,1491],{},[514,1489,1490],{},"show --resolved"," prints the chain as it will run, with each library entry\nexpanded. Check that the new node or task is there.",[533,1493,1494,1495,1498,1499,1501,1502,1506,1507,1510,1511,1513,1514,1517,1521,1522,1524,1525,1527,1528,1530],{},"In ",[514,1496,1497],{},"doctor",", the ",[514,1500,891],{}," row no longer lists a capability you adopted.\nThe row clears a capability once your files contain the key its edit adds:\nthe ",[519,1503,1505],{"href":1504},"\u002Fconcepts\u002Fvocabulary#agent-profile","agent profiles"," (",[514,1508,1509],{},"profiles:",") in\n",[514,1512,318],{},", or the ",[514,1515,1516],{},"never-signal-processes-you-didnt-start",[519,1518,1520],{"href":1519},"\u002Fconcepts\u002Fvocabulary#steering-profile","steering profile"," in ",[514,1523,1165],{},". It does not check that a chain uses it, so ",[514,1526,1169],{}," clears\nas soon as ",[514,1529,1165],{}," defines it.",[533,1532,1533,1535],{},[514,1534,583],{}," shows exactly what the merge changed. Commit it.",[525,1537,1539],{"id":1538},"next-steps","Next steps",[530,1541,1542,1549,1554],{},[533,1543,1544,1548],{},[519,1545,1547],{"href":1546},"\u002Fguides\u002Frun\u002Fupgrade-from-0-x-or-a-release-candidate#migrating-a-home-from-0x","Migrating a home from 0.x",": the one upgrade that replaces the config directory, with a backup.",[533,1550,1551,1553],{},[519,1552,314],{"href":315},": every field in the files you merged.",[533,1555,1556,1558],{},[519,1557,102],{"href":103},": a chain of your own, which this guide keeps up to date.",[1560,1561,1562],"style",{},"html pre.shiki code .s7iLA, html code.shiki .s7iLA{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html pre.shiki code .sklAV, html code.shiki .sklAV{--shiki-light:#A0111F;--shiki-default:#A0111F;--shiki-dark:#FF9492}html pre.shiki code .semJd, html code.shiki .semJd{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#ADDCFF}html pre.shiki code .szw1H, html code.shiki .szw1H{--shiki-light:#702C00;--shiki-default:#702C00;--shiki-dark:#FFB757}html pre.shiki code .ssYy9, html code.shiki .ssYy9{--shiki-light:#023B95;--shiki-default:#023B95;--shiki-dark:#91CBFF}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 .s5cpx, html code.shiki .s5cpx{--shiki-light:#6E011A;--shiki-default:#6E011A;--shiki-dark:#FFB1AF}",{"title":622,"searchDepth":682,"depth":682,"links":1564},[1565,1566,1567,1568,1569,1570,1571],{"id":527,"depth":682,"text":528},{"id":576,"depth":682,"text":577},{"id":845,"depth":682,"text":846},{"id":919,"depth":682,"text":920},{"id":1228,"depth":682,"text":1229},{"id":1396,"depth":682,"text":1397},{"id":1538,"depth":682,"text":1539},"Pick up new shipped chains, library tasks and policy after a Kraft upgrade, without losing your own edits.","md",null,{},true,{"title":168,"description":1572},"PlcS-6DJ-giRcKoROYeW6nXrlP_2KsBkDLwBm7QWqvE",[1580,1582],{"title":164,"path":165,"stem":166,"description":1581,"children":-1},"Back up, upgrade and check an installed Kraft, pin it to a version, and roll back to an earlier 2.x release, with pointers to the 1.4 upgrade and rollback.",{"title":172,"path":173,"stem":174,"description":1583,"children":-1},"What 2.0 changes from 1.4 and what to do about each change, and the steps to update from 1.4 without losing the database.",1791801239953]