[{"data":1,"prerenderedAt":1743},["ShallowReactive",2],{"navigation_docs":3,"-guides-day-to-day-review-a-change":520,"-guides-day-to-day-review-a-change-surround":1738},[4,28,51,191,222,485],{"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,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,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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,"page":-1},"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":76,"body":522,"description":1731,"extension":1732,"links":1733,"meta":1734,"navigation":1735,"path":77,"seo":1736,"stem":78,"__hash__":1737},"docs\u002F3.guides\u002F1.day-to-day\u002F5.review-a-change.md",{"type":523,"value":524,"toc":1714},"minimark",[525,545,548,614,619,624,653,656,767,777,781,791,991,1002,1005,1053,1056,1067,1092,1110,1114,1331,1335,1347,1351,1354,1365,1368,1370,1416,1429,1432,1506,1512,1516,1523,1529,1533,1584,1612,1616,1628,1632,1662,1666,1710],[526,527,528,529,534,535,539,540,544],"p",{},"Approve or reject the ",[530,531,533],"a",{"href":532},"\u002Fconcepts\u002Fvocabulary#gate","gate"," a Kraft ",[530,536,538],{"href":537},"\u002Fconcepts\u002Fvocabulary#work-item","work item"," waits at, and comment on its change, in the web UI or from the CLI. You can comment while the item runs, while it is stopped and waits for you, or at a pending gate, and your comments reach the next agent. Comments never interrupt an agent by themselves. Only ",[541,542,543],"code",{},"request-changes"," does, and only the node it targets.",[526,546,547],{},"To approve or reject a gate:",[549,550,551,564],"table",{},[552,553,554],"thead",{},[555,556,557,561],"tr",{},[558,559,560],"th",{},"Where",[558,562,563],{},"What to do",[565,566,567,596],"tbody",{},[555,568,569,572],{},[570,571,230],"td",{},[570,573,574,575,579,580,583,584,587,588,590,591,595],{},"Click ",[576,577,578],"strong",{},"Review to approve"," on the board, then ",[576,581,582],{},"Approve"," (with no gate document: ",[576,585,586],{},"Finish review",", then ",[576,589,582],{},"). Or use the gate's panel. See ",[530,592,594],{"href":593},"#approve-or-reject-in-the-web-ui","Approve or reject in the web UI",".",[555,597,598,600],{},[570,599,268],{},[570,601,602,605,606,609,610,595],{},[541,603,604],{},"kraft item approve ID",", or ",[541,607,608],{},"kraft item reject ID --note \"why\"",". See ",[530,611,613],{"href":612},"#approve-or-reject-from-the-cli","Approve or reject from the CLI",[526,615,616,617,595],{},"For the screen's own parts, see ",[530,618,256],{"href":257},[620,621,623],"h2",{"id":622},"before-you-start","Before you start",[625,626,627,634,645],"ul",{},[628,629,630,631,595],"li",{},"A work item to review. To approve or reject, it waits at a gate: the board\nshows it under ",[576,632,633],{},"Needs you",[628,635,636,637,640,641,644],{},"For the CLI, the ID of the work item. ",[541,638,639],{},"kraft view list"," shows it (add ",[541,642,643],{},"--all","\noutside the repo's directory).",[628,646,647,648,652],{},"For the CLI, to pass that ID to every verb below. Left out, a verb defaults to\nthe work item whose ",[530,649,651],{"href":650},"\u002Fconcepts\u002Fvocabulary#worktree","worktree"," you are standing\nin, which a reviewer rarely is.",[620,654,594],{"id":655},"approve-or-reject-in-the-web-ui",[657,658,659,683,686],"ol",{},[628,660,661,662,664,665,672,673,676,677,679,680,595],{},"On the board, click ",[576,663,578],{}," on the item's row. It opens the\nreview page at the waiting gate: on the gate's document when the gate has\none, and on the diff when it has none. Or open the item and select the\nwaiting gate in its chain: the gate's panel has ",[576,666,667,668],{},"Read ",[669,670,671],"em",{},"filename"," (the\ndocument, only when the gate has one), ",[576,674,675],{},"Review changes"," (the same review\npage), ",[576,678,582],{}," and ",[576,681,682],{},"Reject…",[628,684,685],{},"Read the document and the diff.",[628,687,688,689],{},"Decide:\n",[625,690,691,700,705,724,747],{},[628,692,693,695,696,699],{},[576,694,582],{}," on the gate's panel passes the gate at once. With a must-fix\nthread open it is not greyed out, but the click is refused with\n",[541,697,698],{},"must-fix review threads are not resolved",", shown beside the buttons.",[628,701,702,704],{},[576,703,582],{}," at the top of the review page, which a gate with a document\nhas, also submits at once, and is greyed out while a must-fix thread is open.",[628,706,707,708,710,711,713,714,717,718,720,721,723],{},"At a gate with no document, the bottom bar offers ",[576,709,586],{},", and\n",[576,712,582],{}," is an outcome in ",[576,715,716],{},"Finish your review",". Once a review has been\nsent, the bar offers ",[576,719,582],{}," directly, and with drafts pending it\nopens ",[576,722,716],{}," first, so a new comment is never sent with an\napproval unseen.",[628,725,726,728,729,738,739,742,743,746],{},[576,727,682],{}," on the gate's panel opens a note box under ",[576,730,731,732,734,735],{},"Reject ",[669,733,533],{}," ·\ngoes back to ",[669,736,737],{},"node",". Write what is wrong, because the next agent reads it\nand ",[576,740,741],{},"Reject"," stays off until there is a note. ",[576,744,745],{},"Cancel"," closes the box.",[628,748,749,752,753,760,761,766],{},[576,750,751],{},"Request changes"," on the review page is a rejection too: the\ndialog reads ",[576,754,731,755,757,758],{},[669,756,533],{}," · goes back to ",[669,759,737],{},", and its button reads\n",[576,762,763,764],{},"Reject to ",[669,765,737],{},". Your threads and summary are the note.",[526,768,769,770,776],{},"Approving on the review page shows ",[576,771,772,773,775],{},"Approved · ",[669,774,533],{}," passed"," and returns you\nto the item's page.",[620,778,780],{"id":779},"comment-and-finish-a-review-in-the-web-ui","Comment and finish a review in the web UI",[526,782,783,784,786,787,790],{},"The item's review page does everything the comment verbs below do: click\n",[576,785,675],{}," on the item's page, or open ",[541,788,789],{},"\u002Fwork-items\u002F\u003Cid>\u002Freview",". Each\npart of the page does what one CLI verb does:",[549,792,793,803],{},[552,794,795],{},[555,796,797,800],{},[558,798,799],{},"On the review page",[558,801,802],{},"From the CLI",[565,804,805,831,856,869,896,908,921,939,953,966,979],{},[555,806,807,826],{},[570,808,809,812,813,812,816,812,819,822,823],{},[576,810,811],{},"Compare"," ",[669,814,815],{},"from",[576,817,818],{},"and",[669,820,821],{},"to",", and ",[576,824,825],{},"All nodes ▾",[570,827,828],{},[541,829,830],{},"kraft view compare --from T --to T [--nodes a,b]",[555,832,833,842],{},[570,834,835,838,839],{},[576,836,837],{},"+"," on a line, or dragged down a range, write, ",[576,840,841],{},"Add to review",[570,843,844,847,848,851,852,855],{},[541,845,846],{},"kraft item comment --body \"...\" --file P --lines A-B [--side old|new]","; across sides, ",[541,849,850],{},"--start-side"," names line A's side (",[541,853,854],{},"--lines 3-2 --start-side old --side new",")",[555,857,858,864],{},[570,859,860,863],{},[576,861,862],{},"Comment on this file",", in a file's header",[570,865,866],{},[541,867,868],{},"kraft item comment --body \"...\" --file P",[555,870,871,885],{},[570,872,873,874,877,878,679,881,884],{},"The ",[576,875,876],{},"Must fix",", ",[576,879,880],{},"Question",[576,882,883],{},"Nit"," labels",[570,886,887,877,890,877,893],{},[541,888,889],{},"--label must-fix",[541,891,892],{},"--label question",[541,894,895],{},"--label nit",[555,897,898,903],{},[570,899,900],{},[576,901,902],{},"± Suggest change",[570,904,905],{},[541,906,907],{},"--suggest \"...\"",[555,909,910,916],{},[570,911,912,915],{},[576,913,914],{},"Reply"," on a thread",[570,917,918],{},[541,919,920],{},"kraft item comment --reply THREAD --body \"...\"",[555,922,923,931],{},[570,924,925,679,928,915],{},[576,926,927],{},"Resolve",[576,929,930],{},"Reopen",[570,932,933,877,936],{},[541,934,935],{},"kraft item resolve THREAD",[541,937,938],{},"kraft item reopen THREAD",[555,940,941,948],{},[570,942,943,587,945],{},[576,944,586],{},[576,946,947],{},"Comment only",[570,949,950],{},[541,951,952],{},"kraft item review comment",[555,954,955,961],{},[570,956,957,587,959],{},[576,958,586],{},[576,960,751],{},[570,962,963],{},[541,964,965],{},"kraft item review request-changes",[555,967,968,974],{},[570,969,970,587,972],{},[576,971,586],{},[576,973,582],{},[570,975,976],{},[541,977,978],{},"kraft item review approve",[555,980,981,986],{},[570,982,983,984],{},"The overall note in ",[576,985,716],{},[570,987,988],{},[541,989,990],{},"--summary \"...\"",[526,992,993,994,997,998,1001],{},"A comment you add on the page is a draft, as with ",[541,995,996],{},"kraft item comment",", until\nyou finish the review. ",[576,999,1000],{},"Viewed",", which marks a file as read, has no CLI\nequivalent: it only tracks your own progress through the diff.",[620,1003,613],{"id":1004},"approve-or-reject-from-the-cli",[1006,1007,1012],"pre",{"className":1008,"code":1009,"language":1010,"meta":1011,"style":1011},"language-bash shiki shiki-themes github-light-high-contrast github-light-high-contrast github-dark-high-contrast","kraft item approve ID\nkraft item reject ID --note \"the plan skips migrations\"\n","bash","",[541,1013,1014,1033],{"__ignoreMap":1011},[1015,1016,1019,1023,1027,1030],"span",{"class":1017,"line":1018},"line",1,[1015,1020,1022],{"class":1021},"szw1H","kraft",[1015,1024,1026],{"class":1025},"semJd"," item",[1015,1028,1029],{"class":1025}," approve",[1015,1031,1032],{"class":1025}," ID\n",[1015,1034,1036,1038,1040,1043,1046,1050],{"class":1017,"line":1035},2,[1015,1037,1022],{"class":1021},[1015,1039,1026],{"class":1025},[1015,1041,1042],{"class":1025}," reject",[1015,1044,1045],{"class":1025}," ID",[1015,1047,1049],{"class":1048},"ssYy9"," --note",[1015,1051,1052],{"class":1025}," \"the plan skips migrations\"\n",[526,1054,1055],{},"Each acts on the gate the item waits at, and prints what it did and where the\nitem stands:",[1006,1057,1062],{"className":1058,"code":1060,"language":1061,"meta":1011},[1059],"language-text","approved spec_approval on \u003Cid>; the item is now running\n","text",[541,1063,1064],{"__ignoreMap":1011},[1015,1065,1060],{"className":1066},[1017],[526,1068,1069,1072,1073,1076,1077,1080,1081,1084,1085,1087,1088,1091],{},[541,1070,1071],{},"reject"," prints ",[541,1074,1075],{},"rejected \u003Cgate> on \u003Cid>"," in the same form. ",[541,1078,1079],{},"--gate"," names the\ngate you mean to decide, and is refused with ",[541,1082,1083],{},"409"," when that gate is not the one\npending. ",[541,1086,1071],{}," needs a note, which the next\nagent reads, and ",[541,1089,1090],{},"--node"," sends the work back to a node other than the gate's\ndefault.",[526,1093,1094,1097,1098,1100,1101,1104,1105,1109],{},[541,1095,1096],{},"approve"," is refused while a must-fix thread is open, and when the gate is not\nthe one pending. ",[530,1099,274],{"href":275}," has every flag.\n",[541,1102,1103],{},"kraft item review"," makes the same decisions together with your drafted\ncomments, as ",[530,1106,1108],{"href":1107},"#comment-and-send-a-review-from-the-cli","Comment and send a review","\nshows.",[620,1111,1113],{"id":1112},"comment-and-send-a-review-from-the-cli","Comment and send a review from the CLI",[657,1115,1116,1181,1225],{},[628,1117,1118,1119,1159,1162,1163],{},"Comment on the lines you mean:",[1006,1120,1122],{"className":1008,"code":1121,"language":1010,"meta":1011,"style":1011},"kraft item comment ID --body \"this leaks the connection\" --file src\u002Fdb.py --lines 40-46 --label must-fix\n",[541,1123,1124],{"__ignoreMap":1011},[1015,1125,1126,1128,1130,1133,1135,1138,1141,1144,1147,1150,1153,1156],{"class":1017,"line":1018},[1015,1127,1022],{"class":1021},[1015,1129,1026],{"class":1025},[1015,1131,1132],{"class":1025}," comment",[1015,1134,1045],{"class":1025},[1015,1136,1137],{"class":1048}," --body",[1015,1139,1140],{"class":1025}," \"this leaks the connection\"",[1015,1142,1143],{"class":1048}," --file",[1015,1145,1146],{"class":1025}," src\u002Fdb.py",[1015,1148,1149],{"class":1048}," --lines",[1015,1151,1152],{"class":1025}," 40-46",[1015,1154,1155],{"class":1048}," --label",[1015,1157,1158],{"class":1025}," must-fix\n",[1160,1161],"br",{},"It files a draft and prints where the thread sits, the lines it quotes, and\nwhat happens next:",[1006,1164,1167],{"className":1165,"code":1166,"language":1061,"meta":1011},[1059],"drafted thread \u003Cthread-id> on src\u002Fdb.py:+40 to +46\n    | \u003Cthe quoted lines>\nit goes out with your next kraft item review\n",[541,1168,1169,1173,1177],{"__ignoreMap":1011},[1015,1170,1172],{"className":1171},[1017],"drafted thread \u003Cthread-id> on src\u002Fdb.py:+40 to +46\n",[1015,1174,1176],{"className":1175},[1017],"    | \u003Cthe quoted lines>\n",[1015,1178,1180],{"className":1179},[1017],"it goes out with your next kraft item review\n",[628,1182,1183,1184,1201,1203,1204,679,1207,1210,1211],{},"Read your drafts:",[1006,1185,1187],{"className":1008,"code":1186,"language":1010,"meta":1011,"style":1011},"kraft view threads ID\n",[541,1188,1189],{"__ignoreMap":1011},[1015,1190,1191,1193,1196,1199],{"class":1017,"line":1018},[1015,1192,1022],{"class":1021},[1015,1194,1195],{"class":1025}," view",[1015,1197,1198],{"class":1025}," threads",[1015,1200,1032],{"class":1025},[1160,1202],{},"Each thread is a line with its ID, where it sits and its tags, then its\ncomments. A draft carries the tag ",[541,1205,1206],{},"draft",[541,1208,1209],{},"(draft)"," after its author:",[1006,1212,1215],{"className":1213,"code":1214,"language":1061,"meta":1011},[1059],"\u003Cthread-id>  src\u002Fdb.py:+40 to +46  [must_fix open draft]\n  you (draft): this leaks the connection\n",[541,1216,1217,1221],{"__ignoreMap":1011},[1015,1218,1220],{"className":1219},[1017],"\u003Cthread-id>  src\u002Fdb.py:+40 to +46  [must_fix open draft]\n",[1015,1222,1224],{"className":1223},[1017],"  you (draft): this leaks the connection\n",[628,1226,1227,1228,1252,1254,1255,1303,1305,1306,1308,1309],{},"Send them with one outcome:",[1006,1229,1231],{"className":1008,"code":1230,"language":1010,"meta":1011,"style":1011},"kraft item review ID comment --summary \"a few notes, nothing blocking\"\n",[541,1232,1233],{"__ignoreMap":1011},[1015,1234,1235,1237,1239,1242,1244,1246,1249],{"class":1017,"line":1018},[1015,1236,1022],{"class":1021},[1015,1238,1026],{"class":1025},[1015,1240,1241],{"class":1025}," review",[1015,1243,1045],{"class":1025},[1015,1245,1132],{"class":1025},[1015,1247,1248],{"class":1048}," --summary",[1015,1250,1251],{"class":1025}," \"a few notes, nothing blocking\"\n",[1160,1253],{},"No agent sees a draft until you send it. The outcome is one of three:",[549,1256,1257,1267],{},[552,1258,1259],{},[555,1260,1261,1264],{},[558,1262,1263],{},"Outcome",[558,1265,1266],{},"What it does",[565,1268,1269,1279,1291],{},[555,1270,1271,1276],{},[570,1272,1273],{},[541,1274,1275],{},"comment",[570,1277,1278],{},"Queues your drafts for the next agent that runs. It never stops anything, and it works whether or not a gate is pending. Agents answer questions in the thread, and at a gate the gate stays open.",[555,1280,1281,1285],{},[570,1282,1283],{},[541,1284,1096],{},[570,1286,1287,1288,595],{},"Needs a pending gate: it clears it, the same as ",[541,1289,1290],{},"kraft item approve",[555,1292,1293,1297],{},[570,1294,1295],{},[541,1296,543],{},[570,1298,1299,1300,595],{},"Redoes work now. See ",[530,1301,751],{"href":1302},"#request-changes",[1160,1304],{},"For ",[541,1307,1275],{}," with no gate pending, the CLI prints the review's ID and\noutcome:",[1006,1310,1313],{"className":1311,"code":1312,"language":1061,"meta":1011},[1059],"review_id    \u003Creview-id>\noutcome      comment\ngate         -\nreply_agent  False\n",[541,1314,1315,1319,1323,1327],{"__ignoreMap":1011},[1015,1316,1318],{"className":1317},[1017],"review_id    \u003Creview-id>\n",[1015,1320,1322],{"className":1321},[1017],"outcome      comment\n",[1015,1324,1326],{"className":1325},[1017],"gate         -\n",[1015,1328,1330],{"className":1329},[1017],"reply_agent  False\n",[620,1332,1334],{"id":1333},"block-approval-with-a-must-fix","Block approval with a must-fix",[526,1336,1337,1338,1340,1341,1343,1344,1346],{},"A comment labeled ",[541,1339,889],{}," blocks every gate approval on the item\nuntil it is resolved, no matter which gate it was filed at or whether one was\npending at all. ",[541,1342,935],{}," clears it. ",[541,1345,938],{}," puts it back if the fix did not hold up.",[620,1348,1350],{"id":1349},"comment-while-it-runs","Comment while it runs",[526,1352,1353],{},"Every agent dispatch carries the item's unanswered threads: the next\nimplementation run, every verify reviewer, every fix-loop round.",[625,1355,1356,1362],{},[628,1357,1358,1359,595],{},"A working agent (no review skill) is told to address each thread and reply\nwith ",[541,1360,1361],{},"kraft item reply",[628,1363,1364],{},"A reviewer agent is told to judge the change against the threads, and reports\nan unaddressed must-fix as a finding.",[526,1366,1367],{},"A thread drops off that list the moment an agent replies or you resolve it.",[620,1369,751],{"id":543},[1006,1371,1373],{"className":1008,"code":1372,"language":1010,"meta":1011,"style":1011},"kraft item review ID request-changes --summary \"please address the must-fix\"\nkraft item review ID request-changes --node implementation --summary \"redo this part\"\n",[541,1374,1375,1393],{"__ignoreMap":1011},[1015,1376,1377,1379,1381,1383,1385,1388,1390],{"class":1017,"line":1018},[1015,1378,1022],{"class":1021},[1015,1380,1026],{"class":1025},[1015,1382,1241],{"class":1025},[1015,1384,1045],{"class":1025},[1015,1386,1387],{"class":1025}," request-changes",[1015,1389,1248],{"class":1048},[1015,1391,1392],{"class":1025}," \"please address the must-fix\"\n",[1015,1394,1395,1397,1399,1401,1403,1405,1408,1411,1413],{"class":1017,"line":1035},[1015,1396,1022],{"class":1021},[1015,1398,1026],{"class":1025},[1015,1400,1241],{"class":1025},[1015,1402,1045],{"class":1025},[1015,1404,1387],{"class":1025},[1015,1406,1407],{"class":1048}," --node",[1015,1409,1410],{"class":1025}," implementation",[1015,1412,1248],{"class":1048},[1015,1414,1415],{"class":1025}," \"redo this part\"\n",[526,1417,1418,1419,1421,1422,1424,1425,1428],{},"Where the work restarts is ",[541,1420,1090],{}," when you give it. Without ",[541,1423,1090],{},", at a\npending gate it is the gate's reject target. With no gate pending, Kraft derives\nit from your threads: the earliest node, at or before the one now running, that\nwrote what a thread is about (a thread's own ",[541,1426,1427],{},"file_path",", or the node it\nnames). A whole-change comment falls back to the current working node.",[526,1430,1431],{},"What happens next depends on the item:",[549,1433,1434,1444],{},[552,1435,1436],{},[555,1437,1438,1441],{},[558,1439,1440],{},"The item",[558,1442,1443],{},"What happens",[565,1445,1446,1461,1469,1483,1495],{},[555,1447,1448,1451],{},[570,1449,1450],{},"At a pending gate",[570,1452,1453,1454,1457,1458,1460],{},"Rejects that gate, the same decision as ",[541,1455,1456],{},"kraft item reject"," or ",[576,1459,682],{}," on the item's page, with your summary and threads as the note instead of a note you type. The chain re-enters at the target.",[555,1462,1463,1466],{},[570,1464,1465],{},"Running, target is the running node",[570,1467,1468],{},"The node stops and re-runs now, with your review as its note.",[555,1470,1471,1474],{},[570,1472,1473],{},"Running, target is an earlier node",[570,1475,1476,1477,1457,1480,595],{},"Nothing running is touched. The rewind is queued and takes effect the moment the running node finishes, or on your next ",[541,1478,1479],{},"kraft item resume",[541,1481,1482],{},"kraft item retry",[555,1484,1485,1492],{},[570,1486,1487,1488,1491],{},"Stopped and waiting for you (",[541,1489,1490],{},"needs_human","), nothing else running",[570,1493,1494],{},"Retries at the target immediately.",[555,1496,1497,1500],{},[570,1498,1499],{},"Paused",[570,1501,1502,1503,1505],{},"Only the rewind is queued. Resuming a paused item is your call, so ",[541,1504,543],{}," does not do it for you.",[526,1507,1508,1509,595],{},"The response says which of these happened, and the CLI prints it:\n",[541,1510,1511],{},"request-changes -> implementation (threads on src\u002Fdb.py), rerun",[620,1513,1515],{"id":1514},"a-gate-with-a-must-fix-does-not-open","A gate with a must-fix does not open",[526,1517,1518,1519,1522],{},"Reaching a gate with an unanswered ",[541,1520,1521],{},"must-fix"," bounces it back to the reject\ntarget instead of opening, the same as if you had rejected it yourself. The\ngate's own reject-loop limit caps the bounces, so an agent that never answers\ncannot loop forever.",[526,1524,1525,1526,1528],{},"When one more bounce would pass that limit, the gate opens for you, and\napproving it still answers ",[541,1527,1083],{}," until you resolve the must-fix. A gate with only unanswered questions or nits opens as\nusual, with the reply agent already launched to answer them.",[620,1530,1532],{"id":1531},"compare-attempts","Compare attempts",[1006,1534,1536],{"className":1008,"code":1535,"language":1010,"meta":1011,"style":1011},"kraft view compare ID --from base --to latest\nkraft view compare ID --from attempt:1 --to attempt:2 --stat\n",[541,1537,1538,1561],{"__ignoreMap":1011},[1015,1539,1540,1542,1544,1547,1549,1552,1555,1558],{"class":1017,"line":1018},[1015,1541,1022],{"class":1021},[1015,1543,1195],{"class":1025},[1015,1545,1546],{"class":1025}," compare",[1015,1548,1045],{"class":1025},[1015,1550,1551],{"class":1048}," --from",[1015,1553,1554],{"class":1025}," base",[1015,1556,1557],{"class":1048}," --to",[1015,1559,1560],{"class":1025}," latest\n",[1015,1562,1563,1565,1567,1569,1571,1573,1576,1578,1581],{"class":1017,"line":1035},[1015,1564,1022],{"class":1021},[1015,1566,1195],{"class":1025},[1015,1568,1546],{"class":1025},[1015,1570,1045],{"class":1025},[1015,1572,1551],{"class":1048},[1015,1574,1575],{"class":1025}," attempt:1",[1015,1577,1557],{"class":1048},[1015,1579,1580],{"class":1025}," attempt:2",[1015,1582,1583],{"class":1048}," --stat\n",[526,1585,1586,679,1589,1592,1593,1596,1597,1600,1601,1603,1604,1607,1608,1611],{},[541,1587,1588],{},"base",[541,1590,1591],{},"latest"," (the working tree) resolve at any time. ",[541,1594,1595],{},"last_review"," needs\na review you have already submitted, and ",[541,1598,1599],{},"attempt:N"," needs a pending gate.\n",[541,1602,1591],{}," can only be the ",[541,1605,1606],{},"--to"," end. ",[541,1609,1610],{},"--nodes a,b"," limits the diff to files those\nnodes touched.",[620,1613,1615],{"id":1614},"for-agents","For agents",[526,1617,1618,1619,1623,1624,1627],{},"A ",[530,1620,1622],{"href":1621},"\u002Fconcepts\u002Fvocabulary#worker","worker"," replies to a thread it was handed with ",[541,1625,1626],{},"kraft item reply \u003Cthread-id> --body \"...\" --claim fixed|answered|should_fix",". Every other review verb\nabove is refused from inside a worker's own worktree. Reviewing is a person's\njob, or an assistant acting on a person's behalf from outside the item.",[620,1629,1631],{"id":1630},"check-it-worked","Check it worked",[625,1633,1634,1649],{},[628,1635,1636,1637,1640,1641,1645,1646,1648],{},"After an approval, the CLI prints ",[541,1638,1639],{},"approved \u003Cgate> on \u003Cid>",". On the review\npage, ",[576,1642,772,1643,775],{},[669,1644,533],{}," shows. The item leaves ",[576,1647,633],{}," and\nruns on, until it reaches the next gate or stops.",[628,1650,1651,1652,1655,1656,1658,1659,595],{},"After you send a review, run ",[541,1653,1654],{},"kraft view threads ID"," again. The sent threads no\nlonger carry ",[541,1657,1206],{},": ",[541,1660,1661],{},"[must_fix open]",[620,1663,1665],{"id":1664},"next-steps","Next steps",[625,1667,1668,1673,1694,1705],{},[628,1669,1670,1672],{},[530,1671,256],{"href":257},": the toolbar, the comment box and the bar along the bottom, part by part.",[628,1674,1675,1677,1678,1681,1682,877,1684,877,1686,877,1689,679,1691,595],{},[530,1676,274],{"href":275},": every ",[541,1679,1680],{},"kraft item"," verb, including ",[541,1683,1096],{},[541,1685,1071],{},[541,1687,1688],{},"review",[541,1690,1275],{},[541,1692,1693],{},"reply",[628,1695,1696,1658,1698,679,1701,1704],{},[530,1697,278],{"href":279},[541,1699,1700],{},"view threads",[541,1702,1703],{},"view compare"," in full.",[628,1706,1707,1709],{},[530,1708,482],{"href":483},": the events a review writes on the item's timeline.",[1711,1712,1713],"style",{},"html pre.shiki code .szw1H, html code.shiki .szw1H{--shiki-light:#702C00;--shiki-default:#702C00;--shiki-dark:#FFB757}html pre.shiki code .semJd, html code.shiki .semJd{--shiki-light:#032563;--shiki-default:#032563;--shiki-dark:#ADDCFF}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);}",{"title":1011,"searchDepth":1035,"depth":1035,"links":1715},[1716,1717,1718,1719,1720,1721,1723,1724,1725,1727,1728,1729,1730],{"id":622,"depth":1035,"text":623},{"id":655,"depth":1035,"text":594},{"id":779,"depth":1035,"text":780},{"id":1004,"depth":1035,"text":613},{"id":1112,"depth":1035,"text":1113},{"id":1333,"depth":1035,"text":1722},"Block approval with a must-​fix",{"id":1349,"depth":1035,"text":1350},{"id":543,"depth":1035,"text":751},{"id":1514,"depth":1035,"text":1726},"A gate with a must-​fix does not open",{"id":1531,"depth":1035,"text":1532},{"id":1614,"depth":1035,"text":1615},{"id":1630,"depth":1035,"text":1631},{"id":1664,"depth":1035,"text":1665},"Approve or reject the gate a Kraft work item waits at, or comment on the change at any point in its life, in the web UI or from the CLI.","md",null,{},true,{"title":76,"description":1731},"6GhbN6wHbokT4-asNNaXYiDIfnMWPisnum0sSyZh9L8",[1739,1741],{"title":72,"path":73,"stem":74,"description":1740,"children":-1},"Register Kraft with Claude Code, Codex, Cursor, OpenCode, Amp, Antigravity or Gemini CLI, then drive it from that agent.",{"title":80,"path":81,"stem":82,"description":1742,"children":-1},"Raise the cap that stopped a work item, from the interface or the command line, and retry it from the same place.",1791801160263]