[{"data":1,"prerenderedAt":1159},["ShallowReactive",2],{"navigation_docs":3,"-reference-configuration-repos-workspaces":520,"-reference-configuration-repos-workspaces-surround":1154},[4,28,51,191,222,485],{"title":5,"path":6,"stem":7,"children":8},"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},"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},"Guides","\u002Fguides","3.guides",[56,58,96,117,138,187],{"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,113],{"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},"Share chains with add-ons","\u002Fguides\u002Fcustomize\u002Fshare-chains-with-addons","3.guides\u002F2.customize\u002F4.share-chains-with-addons",{"title":118,"path":119,"stem":120,"children":121,"page":95},"Agents and harnesses","\u002Fguides\u002Fharnesses","3.guides\u002F3.harnesses",[122,126,130,134],{"title":123,"path":124,"stem":125},"Switch a task to another harness","\u002Fguides\u002Fharnesses\u002Fswitch-harness","3.guides\u002F3.harnesses\u002F1.switch-harness",{"title":127,"path":128,"stem":129},"Add or override a harness","\u002Fguides\u002Fharnesses\u002Fadding-a-harness","3.guides\u002F3.harnesses\u002F2.adding-a-harness",{"title":131,"path":132,"stem":133},"Build a worker Kit","\u002Fguides\u002Fharnesses\u002Fworker-kit","3.guides\u002F3.harnesses\u002F3.worker-kit",{"title":135,"path":136,"stem":137},"Give a worker its login","\u002Fguides\u002Fharnesses\u002Fgive-a-worker-its-login","3.guides\u002F3.harnesses\u002F4.give-a-worker-its-login",{"title":139,"path":140,"stem":141,"children":142,"page":95},"Run the server","\u002Fguides\u002Frun","3.guides\u002F4.run",[143,147,151,155,159,163,167,171,175,179,183],{"title":144,"path":145,"stem":146},"Remote access","\u002Fguides\u002Frun\u002Fremote-access","3.guides\u002F4.run\u002F01.remote-access",{"title":148,"path":149,"stem":150},"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":152,"path":153,"stem":154},"Restart Kraft without ending running agents","\u002Fguides\u002Frun\u002Frestart-kraft","3.guides\u002F4.run\u002F03.restart-kraft",{"title":156,"path":157,"stem":158},"Back up and restore the database","\u002Fguides\u002Frun\u002Fback-up-and-restore","3.guides\u002F4.run\u002F04.back-up-and-restore",{"title":160,"path":161,"stem":162},"Logs and disk space","\u002Fguides\u002Frun\u002Flogs-and-disk-space","3.guides\u002F4.run\u002F05.logs-and-disk-space",{"title":164,"path":165,"stem":166},"Run Kraft as a service","\u002Fguides\u002Frun\u002Frun-as-a-service","3.guides\u002F4.run\u002F06.run-as-a-service",{"title":168,"path":169,"stem":170},"Upgrade Kraft","\u002Fguides\u002Frun\u002Fupgrade-kraft","3.guides\u002F4.run\u002F07.upgrade-kraft",{"title":172,"path":173,"stem":174},"Upgrade your configuration","\u002Fguides\u002Frun\u002Fupgrade-your-configuration","3.guides\u002F4.run\u002F08.upgrade-your-configuration",{"title":176,"path":177,"stem":178},"Upgrade from 1.4","\u002Fguides\u002Frun\u002Fupgrade-from-1-4","3.guides\u002F4.run\u002F09.upgrade-from-1-4",{"title":180,"path":181,"stem":182},"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":184,"path":185,"stem":186},"Roll back to 1.4","\u002Fguides\u002Frun\u002Froll-back","3.guides\u002F4.run\u002F11.roll-back",{"title":188,"path":189,"stem":190},"Kraft Lite","\u002Fguides\u002Fkraft-lite","3.guides\u002F5.kraft-lite",{"title":192,"path":193,"stem":194,"children":195},"Troubleshooting","\u002Ftroubleshooting","4.troubleshooting",[196,198,202,206,210,214,218],{"title":10,"path":193,"stem":197},"4.troubleshooting\u002Findex",{"title":199,"path":200,"stem":201},"Why did my item stop?","\u002Ftroubleshooting\u002Fwhy-did-my-item-stop","4.troubleshooting\u002F1.why-did-my-item-stop",{"title":203,"path":204,"stem":205},"Stop reasons in detail","\u002Ftroubleshooting\u002Fstop-reasons-in-detail","4.troubleshooting\u002F2.stop-reasons-in-detail",{"title":207,"path":208,"stem":209},"Starting and reaching Kraft","\u002Ftroubleshooting\u002Fstarting-and-reaching-kraft","4.troubleshooting\u002F3.starting-and-reaching-kraft",{"title":211,"path":212,"stem":213},"Doctor failures","\u002Ftroubleshooting\u002Fdoctor-failures","4.troubleshooting\u002F4.doctor-failures",{"title":215,"path":216,"stem":217},"Sandbox and Kit stops","\u002Ftroubleshooting\u002Fsandbox-and-kit-stops","4.troubleshooting\u002F5.sandbox-and-kit-stops",{"title":219,"path":220,"stem":221},"Add-on problems","\u002Ftroubleshooting\u002Faddon-problems","4.troubleshooting\u002F6.addon-problems",{"title":223,"path":224,"stem":225,"children":226},"Reference","\u002Freference","5.reference",[227,229,267,289,293,391,409,435,439,443,477,481],{"title":10,"path":224,"stem":228},"5.reference\u002Findex",{"title":230,"path":231,"stem":232,"children":233},"Web UI","\u002Freference\u002Fweb-ui","5.reference\u002F00.web-ui\u002Findex",[234,235,239,243,247,251,255,259,263],{"title":10,"path":231,"stem":232},{"title":236,"path":237,"stem":238},"Sidebar, search, and keyboard","\u002Freference\u002Fweb-ui\u002Fsidebar-search-and-keyboard","5.reference\u002F00.web-ui\u002F0.sidebar-search-and-keyboard",{"title":240,"path":241,"stem":242},"The board","\u002Freference\u002Fweb-ui\u002Fboard","5.reference\u002F00.web-ui\u002F1.board",{"title":244,"path":245,"stem":246},"An item's page","\u002Freference\u002Fweb-ui\u002Fitem-page","5.reference\u002F00.web-ui\u002F2.item-page",{"title":248,"path":249,"stem":250},"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":252,"path":253,"stem":254},"Config before an item starts","\u002Freference\u002Fweb-ui\u002Fconfig-before-start","5.reference\u002F00.web-ui\u002F4.config-before-start",{"title":256,"path":257,"stem":258},"The review page","\u002Freference\u002Fweb-ui\u002Freview-page","5.reference\u002F00.web-ui\u002F5.review-page",{"title":260,"path":261,"stem":262},"Templates and Settings","\u002Freference\u002Fweb-ui\u002Ftemplates-and-settings","5.reference\u002F00.web-ui\u002F6.templates-and-settings",{"title":264,"path":265,"stem":266},"Analytics","\u002Freference\u002Fweb-ui\u002Fanalytics","5.reference\u002F00.web-ui\u002F7.analytics",{"title":268,"path":269,"stem":270,"children":271},"CLI","\u002Freference\u002Fcli","5.reference\u002F01.cli\u002Findex",[272,273,277,281,285],{"title":10,"path":269,"stem":270},{"title":274,"path":275,"stem":276},"Item verbs","\u002Freference\u002Fcli\u002Fitem","5.reference\u002F01.cli\u002F2.item",{"title":278,"path":279,"stem":280},"View verbs","\u002Freference\u002Fcli\u002Fview","5.reference\u002F01.cli\u002F3.view",{"title":282,"path":283,"stem":284},"Repo verbs","\u002Freference\u002Fcli\u002Frepo","5.reference\u002F01.cli\u002F4.repo",{"title":286,"path":287,"stem":288},"Admin verbs","\u002Freference\u002Fcli\u002Fadmin","5.reference\u002F01.cli\u002F5.admin",{"title":290,"path":291,"stem":292},"Work item statuses","\u002Freference\u002Fstatuses","5.reference\u002F02.statuses",{"title":294,"path":295,"stem":296,"children":297},"Configuration","\u002Freference\u002Fconfiguration","5.reference\u002F03.configuration\u002Findex",[298,299,317,321,325,329,333,337,341,345,379,383,387],{"title":10,"path":295,"stem":296},{"title":300,"path":301,"stem":302,"children":303},"repos.yaml","\u002Freference\u002Fconfiguration\u002Frepos","5.reference\u002F03.configuration\u002F02.repos\u002Findex",[304,305,309,313],{"title":10,"path":301,"stem":302},{"title":306,"path":307,"stem":308},"How connect proposes commands","\u002Freference\u002Fconfiguration\u002Frepos\u002Fconnect-proposals","5.reference\u002F03.configuration\u002F02.repos\u002F1.connect-proposals",{"title":310,"path":311,"stem":312},"detectors.yaml","\u002Freference\u002Fconfiguration\u002Frepos\u002Fdetectors","5.reference\u002F03.configuration\u002F02.repos\u002F2.detectors",{"title":314,"path":315,"stem":316},"Workspaces","\u002Freference\u002Fconfiguration\u002Frepos\u002Fworkspaces","5.reference\u002F03.configuration\u002F02.repos\u002F3.workspaces",{"title":318,"path":319,"stem":320},"policy.yaml","\u002Freference\u002Fconfiguration\u002Fpolicy","5.reference\u002F03.configuration\u002F03.policy",{"title":322,"path":323,"stem":324},"Library and chains","\u002Freference\u002Fconfiguration\u002Flibrary-and-chains","5.reference\u002F03.configuration\u002F04.library-and-chains",{"title":326,"path":327,"stem":328},"harnesses.yaml","\u002Freference\u002Fconfiguration\u002Fharnesses-file","5.reference\u002F03.configuration\u002F05.harnesses-file",{"title":330,"path":331,"stem":332},"access.yaml","\u002Freference\u002Fconfiguration\u002Faccess","5.reference\u002F03.configuration\u002F06.access",{"title":334,"path":335,"stem":336},"intake.yaml","\u002Freference\u002Fconfiguration\u002Fintake","5.reference\u002F03.configuration\u002F07.intake",{"title":338,"path":339,"stem":340},"notify.yaml","\u002Freference\u002Fconfiguration\u002Fnotify","5.reference\u002F03.configuration\u002F08.notify",{"title":342,"path":343,"stem":344},"theme.yaml","\u002Freference\u002Fconfiguration\u002Ftheme","5.reference\u002F03.configuration\u002F09.theme",{"title":346,"path":347,"stem":348,"children":349},"Sandboxed workers","\u002Freference\u002Fconfiguration\u002Fsandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002Findex",[350,351,355,359,363,367,371,375],{"title":10,"path":347,"stem":348},{"title":352,"path":353,"stem":354},"Resource limits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fresource-limits","5.reference\u002F03.configuration\u002F10.sandbox\u002F1.resource-limits",{"title":356,"path":357,"stem":358},"Callbacks from a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcallbacks","5.reference\u002F03.configuration\u002F10.sandbox\u002F2.callbacks",{"title":360,"path":361,"stem":362},"Network policy","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fnetwork-policy","5.reference\u002F03.configuration\u002F10.sandbox\u002F3.network-policy",{"title":364,"path":365,"stem":366},"Credentials","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fcredentials","5.reference\u002F03.configuration\u002F10.sandbox\u002F4.credentials",{"title":368,"path":369,"stem":370},"Kits","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fkits","5.reference\u002F03.configuration\u002F10.sandbox\u002F5.kits",{"title":372,"path":373,"stem":374},"sandbox.yaml","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fsandbox-yaml","5.reference\u002F03.configuration\u002F10.sandbox\u002F6.sandbox-yaml",{"title":376,"path":377,"stem":378},"Git in a sandbox","\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fgit-in-a-sandbox","5.reference\u002F03.configuration\u002F10.sandbox\u002F7.git-in-a-sandbox",{"title":380,"path":381,"stem":382},"Environment variables","\u002Freference\u002Fconfiguration\u002Fenvironment-variables","5.reference\u002F03.configuration\u002F11.environment-variables",{"title":384,"path":385,"stem":386},"Add-ons and collections","\u002Freference\u002Fconfiguration\u002Faddons","5.reference\u002F03.configuration\u002F12.addons",{"title":388,"path":389,"stem":390},"Repo libraries","\u002Freference\u002Fconfiguration\u002Frepo-libraries","5.reference\u002F03.configuration\u002F13.repo-libraries",{"title":392,"path":393,"stem":394,"children":395},"Chain file keys","\u002Freference\u002Fchain-nodes","5.reference\u002F04.chain-nodes\u002Findex",[396,397,401,405],{"title":10,"path":393,"stem":394},{"title":398,"path":399,"stem":400},"Subprocess tasks","\u002Freference\u002Fchain-nodes\u002Fsubprocess-tasks","5.reference\u002F04.chain-nodes\u002F2.subprocess-tasks",{"title":402,"path":403,"stem":404},"Fix loop and judge","\u002Freference\u002Fchain-nodes\u002Ffix-loop","5.reference\u002F04.chain-nodes\u002F3.fix-loop",{"title":406,"path":407,"stem":408},"Result file","\u002Freference\u002Fchain-nodes\u002Fresult-file","5.reference\u002F04.chain-nodes\u002F4.result-file",{"title":410,"path":411,"stem":412,"children":413},"Agent harnesses","\u002Freference\u002Fharnesses","5.reference\u002F05.harnesses\u002Findex",[414,415,419,423,427,431],{"title":10,"path":411,"stem":412},{"title":416,"path":417,"stem":418},"Unattended runs","\u002Freference\u002Fharnesses\u002Funattended-runs","5.reference\u002F05.harnesses\u002F2.unattended-runs",{"title":420,"path":421,"stem":422},"Agent profiles","\u002Freference\u002Fharnesses\u002Fagent-profiles","5.reference\u002F05.harnesses\u002F3.agent-profiles",{"title":424,"path":425,"stem":426},"Harness definition files","\u002Freference\u002Fharnesses\u002Fharness-files","5.reference\u002F05.harnesses\u002F4.harness-files",{"title":428,"path":429,"stem":430},"Fallback and escalation","\u002Freference\u002Fharnesses\u002Ffallback-and-escalation","5.reference\u002F05.harnesses\u002F5.fallback-and-escalation",{"title":432,"path":433,"stem":434},"Cost reporting","\u002Freference\u002Fharnesses\u002Fcost-reporting","5.reference\u002F05.harnesses\u002F6.cost-reporting",{"title":436,"path":437,"stem":438},"Permission gate","\u002Freference\u002Fpermissions","5.reference\u002F06.permissions",{"title":440,"path":441,"stem":442},"Inbound triggers","\u002Freference\u002Ftriggers","5.reference\u002F07.triggers",{"title":444,"path":445,"stem":446,"children":447},"HTTP API","\u002Freference\u002Fhttp-api","5.reference\u002F08.http-api\u002Findex",[448,449,453,457,461,465,469,473],{"title":10,"path":445,"stem":446},{"title":450,"path":451,"stem":452},"Filing, reading and changing work items","\u002Freference\u002Fhttp-api\u002Fwork-items","5.reference\u002F08.http-api\u002F2.work-items",{"title":454,"path":455,"stem":456},"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":458,"path":459,"stem":460},"The work item object","\u002Freference\u002Fhttp-api\u002Fwork-item-object","5.reference\u002F08.http-api\u002F4.work-item-object",{"title":462,"path":463,"stem":464},"Budget, events, diff and documents","\u002Freference\u002Fhttp-api\u002Fbudget-and-events","5.reference\u002F08.http-api\u002F5.budget-and-events",{"title":466,"path":467,"stem":468},"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":470,"path":471,"stem":472},"Drafts","\u002Freference\u002Fhttp-api\u002Fdrafts","5.reference\u002F08.http-api\u002F7.drafts",{"title":474,"path":475,"stem":476},"Ops for each draft area","\u002Freference\u002Fhttp-api\u002Fdraft-ops","5.reference\u002F08.http-api\u002F8.draft-ops",{"title":478,"path":479,"stem":480},"MCP tools","\u002Freference\u002Fmcp-tools","5.reference\u002F09.mcp-tools",{"title":482,"path":483,"stem":484},"Events","\u002Freference\u002Fevents","5.reference\u002F10.events",{"title":486,"path":487,"stem":488,"children":489},"Security and project","\u002Fproject","6.project",[490,492,496,500,504,508,512,516],{"title":10,"path":487,"stem":491},"6.project\u002Findex",{"title":493,"path":494,"stem":495},"Security","\u002Fproject\u002Fsecurity","6.project\u002F1.security",{"title":497,"path":498,"stem":499},"Data and privacy","\u002Fproject\u002Fdata-and-privacy","6.project\u002F2.data-and-privacy",{"title":501,"path":502,"stem":503},"What's new in 2.0","\u002Fproject\u002Fwhats-new","6.project\u002F3.whats-new",{"title":505,"path":506,"stem":507},"Status and support","\u002Fproject\u002Fstatus-and-support","6.project\u002F4.status-and-support",{"title":509,"path":510,"stem":511},"Architecture","\u002Fproject\u002Farchitecture","6.project\u002F5.architecture",{"title":513,"path":514,"stem":515},"Source map","\u002Fproject\u002Fsource-map","6.project\u002F6.source-map",{"title":517,"path":518,"stem":519},"Contributing","\u002Fproject\u002Fcontributing","6.project\u002F7.contributing",{"id":521,"title":314,"body":522,"description":1148,"extension":1149,"links":1150,"meta":1151,"navigation":660,"path":315,"seo":1152,"stem":316,"__hash__":1153},"docs\u002F5.reference\u002F03.configuration\u002F02.repos\u002F3.workspaces.md",{"type":523,"value":524,"toc":1138},"minimark",[525,543,741,759,908,917,922,925,928,932,935,949,963,967,985,988,994,1015,1021,1025,1028,1032,1045,1051,1054,1057,1068,1100,1104,1134],[526,527,528,529,534,535,539,540,542],"p",{},"A ",[530,531,533],"a",{"href":532},"\u002Fconcepts\u002Fvocabulary#workspace","workspace"," is a root repository with other repositories mounted in it as submodules, declared beside the ",[536,537,538],"code",{},"repos:"," list in ",[536,541,300],{},".",[544,545,551],"pre",{"className":546,"code":547,"filename":548,"language":549,"meta":550,"style":550},"language-yaml shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","repos:\n  - path: \u002Fhome\u002Fyou\u002Fcode\u002Fproduct\n    id: product\n    setup_command: \"make setup\"\n    test_command: \"make test\"\n  - path: \u002Fhome\u002Fyou\u002Fcode\u002Fapi\n    id: api\n    setup_command: \"make setup\"\n    test_command: \"make test\"\n\nworkspaces:\n  product:\n    root: product\n    root_pointer_default: ignore     # or bump\n    members:\n      api: { repository: api, path: services\u002Fapi }\n","config\u002Frepos.yaml","yaml","",[536,552,553,566,582,593,604,615,627,637,646,655,662,670,678,688,703,711],{"__ignoreMap":550},[554,555,558,562],"span",{"class":556,"line":557},"line",1,[554,559,561],{"class":560},"sb7M8","repos",[554,563,565],{"class":564},"s7iLA",":\n",[554,567,569,572,575,578],{"class":556,"line":568},2,[554,570,571],{"class":564},"  - ",[554,573,574],{"class":560},"path",[554,576,577],{"class":564},": ",[554,579,581],{"class":580},"semJd","\u002Fhome\u002Fyou\u002Fcode\u002Fproduct\n",[554,583,585,588,590],{"class":556,"line":584},3,[554,586,587],{"class":560},"    id",[554,589,577],{"class":564},[554,591,592],{"class":580},"product\n",[554,594,596,599,601],{"class":556,"line":595},4,[554,597,598],{"class":560},"    setup_command",[554,600,577],{"class":564},[554,602,603],{"class":580},"\"make setup\"\n",[554,605,607,610,612],{"class":556,"line":606},5,[554,608,609],{"class":560},"    test_command",[554,611,577],{"class":564},[554,613,614],{"class":580},"\"make test\"\n",[554,616,618,620,622,624],{"class":556,"line":617},6,[554,619,571],{"class":564},[554,621,574],{"class":560},[554,623,577],{"class":564},[554,625,626],{"class":580},"\u002Fhome\u002Fyou\u002Fcode\u002Fapi\n",[554,628,630,632,634],{"class":556,"line":629},7,[554,631,587],{"class":560},[554,633,577],{"class":564},[554,635,636],{"class":580},"api\n",[554,638,640,642,644],{"class":556,"line":639},8,[554,641,598],{"class":560},[554,643,577],{"class":564},[554,645,603],{"class":580},[554,647,649,651,653],{"class":556,"line":648},9,[554,650,609],{"class":560},[554,652,577],{"class":564},[554,654,614],{"class":580},[554,656,658],{"class":556,"line":657},10,[554,659,661],{"emptyLinePlaceholder":660},true,"\n",[554,663,665,668],{"class":556,"line":664},11,[554,666,667],{"class":560},"workspaces",[554,669,565],{"class":564},[554,671,673,676],{"class":556,"line":672},12,[554,674,675],{"class":560},"  product",[554,677,565],{"class":564},[554,679,681,684,686],{"class":556,"line":680},13,[554,682,683],{"class":560},"    root",[554,685,577],{"class":564},[554,687,592],{"class":580},[554,689,691,694,696,699],{"class":556,"line":690},14,[554,692,693],{"class":560},"    root_pointer_default",[554,695,577],{"class":564},[554,697,698],{"class":580},"ignore",[554,700,702],{"class":701},"sq92B","     # or bump\n",[554,704,706,709],{"class":556,"line":705},15,[554,707,708],{"class":560},"    members",[554,710,565],{"class":564},[554,712,714,717,720,723,725,728,731,733,735,738],{"class":556,"line":713},16,[554,715,716],{"class":560},"      api",[554,718,719],{"class":564},": { ",[554,721,722],{"class":560},"repository",[554,724,577],{"class":564},[554,726,727],{"class":580},"api",[554,729,730],{"class":564},", ",[554,732,574],{"class":560},[554,734,577],{"class":564},[554,736,737],{"class":580},"services\u002Fapi",[554,739,740],{"class":564}," }\n",[526,742,743,746,747,749,750,752,753,542],{},[536,744,745],{},"root"," and ",[536,748,722],{}," each name a ",[536,751,538],{}," entry by its ",[530,754,756],{"href":755},"\u002Freference\u002Fconfiguration\u002Frepos#identity",[536,757,758],{},"id",[760,761,762,781],"table",{},[763,764,765],"thead",{},[766,767,768,772,775,778],"tr",{},[769,770,771],"th",{},"Key",[769,773,774],{},"Type",[769,776,777],{},"Default",[769,779,780],{},"Meaning",[782,783,784,800,824,850,867,887],"tbody",{},[766,785,786,792,795,797],{},[787,788,789],"td",{},[536,790,791],{},"workspaces.\u003Cname>",[787,793,794],{},"mapping",[787,796],{},[787,798,799],{},"The workspace. Its name is the key.",[766,801,802,807,812,818],{},[787,803,804],{},[536,805,806],{},"workspaces.\u003Cname>.root",[787,808,809,810],{},"string, a repo ",[536,811,758],{},[787,813,814],{},[815,816,817],"em",{},"(required)",[787,819,820,821,823],{},"The root repository's ",[536,822,538],{}," entry.",[766,825,826,831,839,843],{},[787,827,828],{},[536,829,830],{},"workspaces.\u003Cname>.root_pointer_default",[787,832,833,835,836],{},[536,834,698],{}," or ",[536,837,838],{},"bump",[787,840,841],{},[536,842,698],{},[787,844,845,846,542],{},"What happens to the root's submodule pointers after members merge. See ",[530,847,849],{"href":848},"#publication","Publication",[766,851,852,857,859,864],{},[787,853,854],{},[536,855,856],{},"workspaces.\u003Cname>.members",[787,858,794],{},[787,860,861],{},[536,862,863],{},"{}",[787,865,866],{},"The members, each keyed by its own name.",[766,868,869,874,878,882],{},[787,870,871],{},[536,872,873],{},"workspaces.\u003Cname>.members.\u003Cname>.repository",[787,875,809,876],{},[536,877,758],{},[787,879,880],{},[815,881,817],{},[787,883,884,885,823],{},"The member's ",[536,886,538],{},[766,888,889,894,897,901],{},[787,890,891],{},[536,892,893],{},"workspaces.\u003Cname>.members.\u003Cname>.path",[787,895,896],{},"string",[787,898,899],{},[815,900,817],{},[787,902,903,904,542],{},"Where the member mounts in the root. See ",[530,905,907],{"href":906},"#member-paths","Member paths",[526,909,528,910,912,913,916],{},[536,911,300],{}," from before workspaces still loads, but an item with submodules needs a declared workspace. Declare it in ",[536,914,915],{},"workspaces:",", or reconnect the root, which loses its settings.",[918,919,921],"h2",{"id":920},"connecting-a-workspace","Connecting a workspace",[526,923,924],{},"Connecting a repo that has submodules declares its workspace for you, each submodule a member.",[526,926,927],{},"A submodule you already connected on its own (a clone elsewhere with the same origin) is that member, with its settings. Kraft adds an entry for the submodule's own checkout only when it finds none.",[918,929,931],{"id":930},"filing-a-work-item-against-the-root","Filing a work item against the root",[526,933,934],{},"When you file a work item against the root, you choose:",[936,937,938,942],"ul",{},[939,940,941],"li",{},"which members it changes",[939,943,944,945,948],{},"its root-pointer policy (the workspace's ",[536,946,947],{},"root_pointer_default"," unless you pick one)",[526,950,951,952,956,957,962],{},"Both are frozen into the item. The item's ",[530,953,955],{"href":954},"\u002Fconcepts\u002Fvocabulary#worktree","worktree"," holds exactly those members, each on the item's branch. A task with ",[530,958,959],{"href":393},[536,960,961],{},"scope: each_repository"," runs once per selected repository.",[918,964,966],{"id":965},"member-checkouts","Member checkouts",[936,968,969,972,975,978],{},[939,970,971],{},"Kraft checks each member out as a worktree of its connected repository, the same way it checks out the root. The item's branch exists in that repository too.",[939,973,974],{},"Abandoning or archiving the item deletes the member's worktree and branch there, as long as the member is still connected. If you disconnect or move it first, remove them by hand.",[939,976,977],{},"Archiving keeps a member's branch that has commits nowhere else.",[939,979,980,981,984],{},"A member whose repository is not connected any more is checked out with ",[536,982,983],{},"git submodule update"," instead.",[918,986,907],{"id":987},"member-paths",[526,989,990,991,993],{},"Every member mounts directly in the root. ",[536,992,300],{}," fails to load, and filing an item against that workspace is refused, when:",[936,995,996,1010],{},[939,997,998,999,1001,1002,1005,1006,1009],{},"one member's ",[536,1000,574],{}," is inside another member's (",[536,1003,1004],{},"libs\u002Fa\u002Fvendor\u002Fx"," inside ",[536,1007,1008],{},"libs\u002Fa",")",[939,1011,1012,1013],{},"two members share a ",[536,1014,574],{},[526,1016,1017,1018,542],{},"The error names both members. A submodule nested in a member is part of that member's repository, so leave it out of ",[536,1019,1020],{},"members:",[918,1022,1024],{"id":1023},"policy-layers","Policy layers",[526,1026,1027],{},"Each selected repository applies its own policy layer to the tasks that run in it. A task running in the assembled worktree, which holds every selected repository, gets the tightest combination of those layers: allowlists intersect, deny lists add up, and numbers take their minimum.",[918,1029,1031],{"id":1030},"sandboxing","Sandboxing",[526,1033,1034,1035,1039,1040,1044],{},"A workspace with members can be ",[530,1036,1038],{"href":1037},"\u002Fconcepts\u002Fvocabulary#sandbox","sandboxed"," like a single repository: a sandbox on the root or on any member, or one that comes from a chain, node or task, wraps the item's whole checkout. Each member's refs go through a ",[530,1041,1043],{"href":1042},"\u002Fconcepts\u002Fvocabulary#ref-store","ref store"," of its own, and a member that is not the checkout Kraft made, or not connected, stops the item.",[526,1046,1047,1050],{},[530,1048,376],{"href":1049},"\u002Freference\u002Fconfiguration\u002Fsandbox\u002Fgit-in-a-sandbox#workspace-members"," tells how members are mounted, and what Kraft's git does there, a nested repository Kraft did not create included.",[918,1052,849],{"id":1053},"publication",[526,1055,1056],{},"Publication goes members first: a member's merge request merges before the root moves.",[936,1058,1059,1062,1065],{},[939,1060,1061],{},"A member that fails to merge stops publication and leaves the root untouched.",[939,1063,1064],{},"A root with source changes of its own gets its own merge request. It stays a draft until every member has merged and the root names their merged revisions.",[939,1066,1067],{},"A root whose only change is the members' pointers follows the item's root-pointer policy:",[760,1069,1070,1080],{},[763,1071,1072],{},[766,1073,1074,1077],{},[769,1075,1076],{},"Policy",[769,1078,1079],{},"What happens to the root",[782,1081,1082,1091],{},[766,1083,1084,1088],{},[787,1085,1086],{},[536,1087,698],{},[787,1089,1090],{},"It is left alone.",[766,1092,1093,1097],{},[787,1094,1095],{},[536,1096,838],{},[787,1098,1099],{},"Kraft pushes the new pointers to its default branch. If that push is refused, it opens a merge request for them instead.",[918,1101,1103],{"id":1102},"related","Related",[936,1105,1106,1116,1121,1126],{},[939,1107,1108,1110,1111,1113,1114,823],{},[530,1109,300],{"href":301},": the ",[536,1112,758],{}," field and the rest of a ",[536,1115,538],{},[939,1117,1118,1120],{},[530,1119,346],{"href":347},": what reaches a sandboxed container.",[939,1122,1123,1125],{},[530,1124,376],{"href":377},": refs, members and the clean check under a sandbox.",[939,1127,1128,577,1130,1133],{},[530,1129,282],{"href":283},[536,1131,1132],{},"kraft repo connect",", which declares a workspace for a repo with submodules.",[1135,1136,1137],"style",{},"html pre.shiki code .sb7M8, html code.shiki .sb7M8{--shiki-light:#024C1A;--shiki-default:#024C1A;--shiki-dark:#72F088}html pre.shiki code .s7iLA, html code.shiki .s7iLA{--shiki-light:#0E1116;--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html pre.shiki code .semJd, html code.shiki .semJd{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#ADDCFF}html pre.shiki code .sq92B, html code.shiki .sq92B{--shiki-light:#66707B;--shiki-default:#66707B;--shiki-dark:#BDC4CC}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":550,"searchDepth":568,"depth":568,"links":1139},[1140,1141,1142,1143,1144,1145,1146,1147],{"id":920,"depth":568,"text":921},{"id":930,"depth":568,"text":931},{"id":965,"depth":568,"text":966},{"id":987,"depth":568,"text":907},{"id":1023,"depth":568,"text":1024},{"id":1030,"depth":568,"text":1031},{"id":1053,"depth":568,"text":849},{"id":1102,"depth":568,"text":1103},"Declare a root repository with member submodules in repos.yaml, and what it means for sandboxing and publication.","md",null,{},{"title":314,"description":1148},"BI-L60drFV8zdMAm41FOQC87LgjXcdCWX1g9eSqFC0E",[1155,1157],{"title":310,"path":311,"stem":312,"description":1156,"children":-1},"The keys of detectors.yaml, the file that teaches kraft repo connect your own setup and test conventions, and the toolchains Kraft ships.",{"title":318,"path":319,"stem":320,"description":1158,"children":-1},"Every field in policy.yaml: caps, budget, concurrency, archiving, defaults and maxima, and the policy fields a layer may set.",1791801179945]