[{"data":1,"prerenderedAt":1521},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Fintegrations\u002Fjira":90,"docs-surround-\u002Fdocs\u002Fintegrations\u002Fjira":1516},[4],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Docs","\u002Fdocs","docs",[9,35,56,77],{"title":10,"path":11,"stem":12,"children":13,"page":34},"Get Started","\u002Fdocs\u002Fget-started","docs\u002F1.get-started",[14,18,22,26,30],{"title":15,"path":16,"stem":17},"Introduction","\u002Fdocs\u002Fget-started\u002Fintroduction","docs\u002F1.get-started\u002F1.introduction",{"title":19,"path":20,"stem":21},"Concepts","\u002Fdocs\u002Fget-started\u002Fconcepts","docs\u002F1.get-started\u002F2.concepts",{"title":23,"path":24,"stem":25},"Installation","\u002Fdocs\u002Fget-started\u002Finstallation","docs\u002F1.get-started\u002F3.installation",{"title":27,"path":28,"stem":29},"Setup","\u002Fdocs\u002Fget-started\u002Fsetup","docs\u002F1.get-started\u002F4.setup",{"title":31,"path":32,"stem":33},"Maintenance","\u002Fdocs\u002Fget-started\u002Fmaintenance","docs\u002F1.get-started\u002F5.maintenance",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Usage","\u002Fdocs\u002Fusage","docs\u002F2.usage",[40,44,48,52],{"title":41,"path":42,"stem":43},"Projects","\u002Fdocs\u002Fusage\u002Fprojects","docs\u002F2.usage\u002F1.projects",{"title":45,"path":46,"stem":47},"Workflows","\u002Fdocs\u002Fusage\u002Fworkflows","docs\u002F2.usage\u002F2.workflows",{"title":49,"path":50,"stem":51},"Triggers","\u002Fdocs\u002Fusage\u002Ftriggers","docs\u002F2.usage\u002F3.triggers",{"title":53,"path":54,"stem":55},"AI Agent","\u002Fdocs\u002Fusage\u002Fagent","docs\u002F2.usage\u002F4.agent",{"title":57,"path":58,"stem":59,"children":60,"page":34},"Integrations","\u002Fdocs\u002Fintegrations","docs\u002F3.integrations",[61,65,69,73],{"title":62,"path":63,"stem":64},"GitHub","\u002Fdocs\u002Fintegrations\u002Fgithub","docs\u002F3.integrations\u002F1.github",{"title":66,"path":67,"stem":68},"Jira","\u002Fdocs\u002Fintegrations\u002Fjira","docs\u002F3.integrations\u002F2.jira",{"title":70,"path":71,"stem":72},"Plane","\u002Fdocs\u002Fintegrations\u002Fplane","docs\u002F3.integrations\u002F3.plane",{"title":74,"path":75,"stem":76},"Linear","\u002Fdocs\u002Fintegrations\u002Flinear","docs\u002F3.integrations\u002F4.linear",{"title":78,"path":79,"stem":80,"children":81,"page":34},"Resources","\u002Fdocs\u002Fresources","docs\u002F4.resources",[82,86],{"title":83,"path":84,"stem":85},"Beta Testers","\u002Fdocs\u002Fresources\u002Fbeta-testers","docs\u002F4.resources\u002F1.beta-testers",{"title":87,"path":88,"stem":89},"Troubleshooting","\u002Fdocs\u002Fresources\u002Ftroubleshooting","docs\u002F4.resources\u002F2.troubleshooting",{"id":91,"title":66,"body":92,"description":1511,"extension":1512,"meta":1513,"navigation":873,"path":67,"seo":1514,"stem":68,"__hash__":1515},"docs_en\u002Fdocs\u002F3.integrations\u002F2.jira.md",{"type":93,"value":94,"toc":1491},"minimark",[95,99,103,106,335,339,342,352,358,363,426,430,433,447,457,463,467,513,518,522,571,575,583,587,594,624,630,634,637,647,653,656,662,666,669,673,684,691,702,706,732,908,912,941,1053,1057,1083,1194,1197,1202,1206,1209,1235,1354,1358,1361,1384,1487],[96,97,98],"p",{},"The Jira integration connects a Jira Cloud site to your instance. Tickets start workflows, the agent reads and answers on them, moves them through the board, and Knecht reports the finished pull request back on the ticket.",[100,101,27],"h2",{"id":102},"setup",[96,104,105],{},"You need a Jira Cloud site and an account Knecht acts as. A dedicated account named \"Knecht\" is worth the extra seat: comments show up under its name, \"assign it to Knecht\" becomes a normal assignment in Jira, and the account's permissions limit what Knecht can see. Registering the webhook in step three needs Jira administrator rights, once.",[107,108,110,115,131,135,138,169,172,179,183,186,192,195,236,242,254,257,263,267,270,276,280,283],"steps",{"level":109},"3",[111,112,114],"h3",{"id":113},"create-an-api-token","Create an API Token",[96,116,117,118,125,126,130],{},"Sign in to Atlassian as the account Knecht should use and open ",[119,120,124],"a",{"href":121,"rel":122},"https:\u002F\u002Fid.atlassian.com\u002Fmanage-profile\u002Fsecurity\u002Fapi-tokens",[123],"nofollow","API tokens",". \"Create API token\", give it a name such as \"Knecht\", and copy the token. It starts with ",[127,128,129],"code",{},"ATATT"," and is shown only once.",[111,132,134],{"id":133},"connect-the-account","Connect the Account",[96,136,137],{},"In your instance, open Settings, Integrations. The Jira panel has three fields:",[139,140,141,157,163],"ul",{},[142,143,144,148,149,152,153,156],"li",{},[145,146,147],"strong",{},"Site URL."," The Atlassian site, for example ",[127,150,151],{},"https:\u002F\u002Facme.atlassian.net",". It has to start with ",[127,154,155],{},"https:\u002F\u002F",".",[142,158,159,162],{},[145,160,161],{},"Email."," The email of the account from step one.",[142,164,165,168],{},[145,166,167],{},"API token."," The token from step one.",[96,170,171],{},"\"Connect\" checks the credentials against Jira before anything is stored and shows \"Connected as\" with the account's name on success. The token is stored encrypted and not shown again. \"Reconnect\" replaces the token later, \"Disconnect\" removes the connection.",[96,173,174],{},[175,176],"img",{"alt":177,"src":178},"The Jira panel under Settings, Integrations, connected to an account, with the site URL, email, and API token fields, and the webhook URL and secret below","\u002Fassets\u002Fknecht-integration-settings-jira.png",[111,180,182],{"id":181},"register-the-webhook-in-jira","Register the Webhook in Jira",[96,184,185],{},"Jira does not call Knecht until you tell it to. After connecting, the panel shows \"Waiting for Jira\" with the webhook URL and a secret Knecht generated for you, both with copy buttons. \"Set up in Jira\" opens the webhook page of your site. By hand it is the gear icon, System, and \"WebHooks\" under Advanced in the sidebar.",[187,188,189],"warning",{},[96,190,191],{},"The button that adds a webhook sits at the far right of the WebHooks page and is often outside the visible area. If you only see the search field and the list, scroll the page horizontally all the way to the right.",[96,193,194],{},"Fill in the form:",[139,196,197,203,209,218,224,230],{},[142,198,199,202],{},[145,200,201],{},"Name."," Anything, for example \"Knecht\".",[142,204,205,208],{},[145,206,207],{},"Status."," Enabled.",[142,210,211,214,215,156],{},[145,212,213],{},"URL."," The webhook URL from the panel, it ends in ",[127,216,217],{},"\u002Fapi\u002Fjira\u002Fwebhook",[142,219,220,223],{},[145,221,222],{},"Secret."," Paste the secret from the panel. Do not use \"Generate secret\", Knecht has to know the value, and Jira does not show it again after saving.",[142,225,226,229],{},[145,227,228],{},"Issue related events."," In the column Issue tick \"created\", \"updated\", and \"deleted\". In the column Comment tick \"created\". Everything else stays empty.",[142,231,232,235],{},[145,233,234],{},"Exclude body."," Leave it unchecked. Knecht needs the ticket data in the delivery.",[96,237,238],{},[175,239],{"alt":240,"src":241},"The events section of the Jira webhook form, with created, updated, and deleted ticked under Issue and created ticked under Comment","\u002Fassets\u002Fjira-webhook-events.png",[96,243,244,245,248,249,156],{},"The JQL field above the checkboxes is optional. Left empty, Jira warns that the query matches all issues in all projects. That works, Knecht drops events of projects that are not linked. A query such as ",[127,246,247],{},"project in (KAN, WEB)"," limits the deliveries to the projects you link in the next step. Atlassian describes the form under ",[119,250,253],{"href":251,"rel":252},"https:\u002F\u002Fsupport.atlassian.com\u002Fjira-cloud-administration\u002Fdocs\u002Fmanage-webhooks\u002F",[123],"Manage webhooks",[96,255,256],{},"Save the webhook at the bottom of the form. The summary should list the issue events created, updated, and deleted, the comment event created, and \"Exclude body: No\".",[96,258,259],{},[175,260],{"alt":261,"src":262},"The saved webhook in Jira, enabled, with the Knecht URL, the secret set, the issue and comment events, and exclude body set to no","\u002Fassets\u002Fjira-webhook-created.png",[111,264,266],{"id":265},"link-a-project-to-its-jira-project","Link a Project to Its Jira Project",[96,268,269],{},"Open the settings of a project in Knecht. The Jira panel has one field, \"Jira project\", listing the projects the account can see. Pick the one whose tickets belong to this repository. One Jira project links to one repository and the other way round. Only linked projects can have Jira triggers.",[96,271,272],{},[175,273],{"alt":274,"src":275},"The Jira panel in the project settings, with the Jira project field set to a project","\u002Fassets\u002Fknecht-project-settings-jira.png",[111,277,279],{"id":278},"check-that-events-arrive","Check That Events Arrive",[96,281,282],{},"Edit any ticket in the linked Jira project. The status line in the Jira panel under Settings, Integrations switches to \"Receiving events\" with the last event and ticket key. If it does not:",[284,285,286,299],"table",{},[287,288,289],"thead",{},[290,291,292,296],"tr",{},[293,294,295],"th",{},"Status line says",[293,297,298],{},"What to do",[300,301,302,311,319,327],"tbody",{},[290,303,304,308],{},[305,306,307],"td",{},"Wrong secret",[305,309,310],{},"Paste the secret from the panel into the webhook again.",[290,312,313,316],{},[305,314,315],{},"Without a body",[305,317,318],{},"Uncheck \"Exclude body\" in the webhook.",[290,320,321,324],{},[305,322,323],{},"No project is linked",[305,325,326],{},"Link the Jira project in the project settings, see step four.",[290,328,329,332],{},[305,330,331],{},"Still \"Waiting for Jira\"",[305,333,334],{},"Check that the webhook URL is reachable from the internet and that the events are ticked.",[100,336,338],{"id":337},"capabilities","Capabilities",[111,340,49],{"id":341},"triggers",[96,343,344,345,348,349,156],{},"A Jira trigger watches the Jira projects linked to the selected projects and starts one run for the project whose Jira project the ticket belongs to. The project field only lists projects that are linked. In the form, \"Fires when any of these happens\" lists the events and \"But only if\" the conditions. Any ticked event fires the trigger, and one group of conditions has to hold. How the two sections work in general is on ",[119,346,49],{"href":347},"\u002Fdocs\u002Fusage\u002Ftriggers#events-and-conditions",". What all issue trackers share, such as issues that are created with the label already set, is on ",[119,350,49],{"href":351},"\u002Fdocs\u002Fusage\u002Ftriggers#issue-trackers",[96,353,354],{},[175,355],{"alt":356,"src":357},"The trigger dialog with Jira selected as source, two linked projects as chips, the events Assigned to Knecht and Label added with the label knecht ticked, and the conditions Issue type is Bug and Status is not Any Done","\u002Fassets\u002Fknecht-trigger-jira.png",[359,360,362],"h4",{"id":361},"events","Events",[284,364,365,378],{},[287,366,367],{},[290,368,369,372,375],{},[293,370,371],{},"Event",[293,373,374],{},"Fires when",[293,376,377],{},"Notes",[300,379,380,390,404,415],{},[290,381,382,385,388],{},[305,383,384],{},"Created",[305,386,387],{},"A new ticket appears in the project.",[305,389],{},[290,391,392,395,398],{},[305,393,394],{},"Assigned to Knecht",[305,396,397],{},"The ticket is assigned to the account behind the connection.",[305,399,400,401,156],{},"Ticked by default. Makes \"give it to Knecht\" a normal assignment in Jira. Knecht taking the ticket itself does not fire, see ",[119,402,49],{"href":403},"\u002Fdocs\u002Fusage\u002Ftriggers#knecht-holds-the-issue",[290,405,406,409,412],{},[305,407,408],{},"Label added",[305,410,411],{},"One of the picked labels is added to a ticket.",[305,413,414],{},"The labels are picked from the labels of the Jira site.",[290,416,417,420,423],{},[305,418,419],{},"Status reached",[305,421,422],{},"A ticket moves into one of the picked statuses or status categories.",[305,424,425],{},"The default is \"Any Done\". A ticket created in a status does not fire.",[359,427,429],{"id":428},"status-reached","Status Reached",[96,431,432],{},"The status list has two groups.",[139,434,435,441],{},[142,436,437,440],{},[145,438,439],{},"Category."," \"Any To Do\", \"Any In Progress\", and \"Any Done\" stand for Jira's three status categories, whatever the columns of a board are called.",[142,442,443,446],{},[145,444,445],{},"Exact status."," The statuses on the boards of the selected projects.",[96,448,449,451,452,456],{},[119,450,49],{"href":351}," explains when a category and when an exact status fires, ",[119,453,455],{"href":454},"\u002Fdocs\u002Fusage\u002Ftriggers#matching","Matching"," what happens with several projects. If the form warns about a missing status, pick a category, a status all projects share, or create a second trigger.",[96,458,459],{},[175,460],{"alt":461,"src":462},"The trigger dialog with two projects selected, Status reached set to In Planning, and a warning that this status does not exist in the Jira project KAN","\u002Fassets\u002Fknecht-trigger-jira-status-error.png",[359,464,466],{"id":465},"conditions","Conditions",[284,468,469,479],{},[287,470,471],{},[290,472,473,476],{},[293,474,475],{},"Field",[293,477,478],{},"Compares against",[300,480,481,489,497,505],{},[290,482,483,486],{},[305,484,485],{},"Status",[305,487,488],{},"The status the ticket is in, as a category such as \"Any Done\" or an exact status.",[290,490,491,494],{},[305,492,493],{},"Assignee",[305,495,496],{},"\"Knecht\", the account behind the connection.",[290,498,499,502],{},[305,500,501],{},"Issue type",[305,503,504],{},"The type of the ticket, for example Bug or Task. The types are read from the linked Jira projects.",[290,506,507,510],{},[305,508,509],{},"Label",[305,511,512],{},"The labels on the ticket, read from the Jira site.",[96,514,515,516,156],{},"Each condition takes \"is\" or \"is not\". Every value is picked from a list and compared exactly, upper and lower case included. The rules are the same for every source, see ",[119,517,455],{"href":454},[359,519,521],{"id":520},"inputs","Inputs",[96,523,524,525,528,529,532,533,536,537,540,541,544,545,548,549,552,553,556,557,560,561,564,565,568,569,156],{},"The ticket fills the run inputs: ",[127,526,527],{},"identifier"," is the key such as ",[127,530,531],{},"PROJ-123",", ",[127,534,535],{},"title"," the summary, ",[127,538,539],{},"body"," the description converted to Markdown, ",[127,542,543],{},"url"," the ticket link, ",[127,546,547],{},"status"," the status name, ",[127,550,551],{},"labels"," the labels, ",[127,554,555],{},"assignee"," and ",[127,558,559],{},"author"," the display names of the assignee and reporter. ",[127,562,563],{},"event"," is ",[127,566,567],{},"issue",". Pausing, versioning, and shared behavior are on ",[119,570,49],{"href":50},[111,572,574],{"id":573},"sessions-on-tickets","Sessions on Tickets",[96,576,577,578,582],{},"A run started by a ticket joins the ",[119,579,581],{"href":580},"\u002Fdocs\u002Fget-started\u002Fconcepts#sessions","session"," of that ticket, like a run on a GitHub issue. The session keeps the checkout, the environment, and the agent conversation, so a second trigger on the same ticket or a mention continues the work. The session closes when the ticket reaches a status in the Done category or is deleted, its environment stops once no run needs it any more, and it opens again when the ticket is moved back.",[111,584,586],{"id":585},"the-agent-on-tickets","The Agent on Tickets",[96,588,589,590,593],{},"When the run's session belongs to a ticket, the ",[119,591,592],{"href":54},"agent"," gets four commands inside the environment. The prompt of an AI step only has to name what to do with them.",[139,595,596,602,612,618],{},[142,597,598,601],{},[145,599,600],{},"Read the ticket."," Type, status, reporter, assignee, labels, the description, and the last ten comments, live from Jira.",[142,603,604,607,608,611],{},[145,605,606],{},"Reply."," Posts a comment on the ticket. The agent writes Markdown, Knecht converts it to Jira's format and appends the preview link and, when one exists, the pull request link. An ",[127,609,610],{},"@Name"," of the reporter, the assignee, or a commenter becomes a real mention that notifies that person.",[142,613,614,617],{},[145,615,616],{},"Set labels."," Adds or removes labels of the Jira site. Knecht never creates labels. If a name does not exist, the agent gets the list of existing labels instead.",[142,619,620,623],{},[145,621,622],{},"Move the ticket."," Transitions the ticket to a status by name, for example \"In Review\". If no transition from the current status leads there, the agent gets the list of reachable statuses instead.",[96,625,626,627,156],{},"Opening a pull request works through the git steps or the agent's own command, see ",[119,628,62],{"href":629},"\u002Fdocs\u002Fintegrations\u002Fgithub#workflow-steps",[111,631,633],{"id":632},"mentions","Mentions",[96,635,636],{},"Write a comment on a ticket of a linked Jira project, mention the Knecht account the way you mention a colleague, and add the instruction:",[638,639,644],"pre",{"className":640,"code":642,"language":643},[641],"language-text","@Knecht fix the broken footer link\n","text",[127,645,642],{"__ignoreMap":646},"",[96,648,649,652],{},[127,650,651],{},"@knecht"," typed as plain text works as well. Knecht runs the comment as a follow-up and posts the answer as a comment.",[96,654,655],{},"Whoever can comment on the ticket can mention Knecht, the Jira site is the gate.",[96,657,658,659,156],{},"The one-time setup, what happens step by step, and what to check when Knecht stays silent is on ",[119,660,633],{"href":661},"\u002Fdocs\u002Fusage\u002Fagent#mentions",[100,663,665],{"id":664},"examples","Examples",[96,667,668],{},"The workflows below can be built in the editor or imported from YAML under Workflows, \"Import\". Triggers are added in the editor after the import. All of them assume the project is linked to its Jira project.",[111,670,672],{"id":671},"software-factory","Software Factory",[96,674,675,676,679,680,683],{},"Three workflows that hand a ticket from one to the next. The triage checks every new ticket, sets the label ",[127,677,678],{},"bug"," or ",[127,681,682],{},"enhancement",", and moves it to \"To Do\". That move fires the trigger of the workflow whose label condition matches. A bug comes back with a pull request and a ticket in review, an enhancement with a plan that a mention in the comments turns into a pull request.",[96,685,686,687,690],{},"All of it runs in the ",[119,688,581],{"href":689},"#sessions-on-tickets"," of the ticket. The triage boots the site once and every later run finds it running, so only the triage has a boot step. The prompts do not repeat summary or description, because the agent reads the ticket of its session itself.",[692,693,694],"note",{},[96,695,696,697,556,699,701],{},"Make sure the labels ",[127,698,678],{},[127,700,682],{}," exist in Jira first. Jira has no label settings, a label exists once any ticket carries it. Knecht only applies labels that exist, and a trigger only offers labels that exist.",[359,703,705],{"id":704},"triage","Triage",[284,707,708,721],{},[287,709,710],{},[290,711,712,715,718],{},[293,713,714],{},"Source",[293,716,717],{},"Fires When",[293,719,720],{},"But Only If",[300,722,723],{},[290,724,725,727,729],{},[305,726,66],{},[305,728,384],{},[305,730,731],{},"No conditions",[733,734,736],"docs-workflow-yaml",{"filename":735},"jira-issue-triage.yaml",[638,737,741],{"className":738,"code":739,"language":740,"meta":646,"style":646},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","version: 1\nname: Jira Issue Triage\ndescription: Check every new ticket and label it as bug or enhancement.\nsteps:\n  - type: ddev-start\n    id: boot_project\n  - type: ai\n    prompt: >-\n      Read the ticket of this session. Try to reproduce it in the preview and in\n      the code. Do not fix anything. Then apply exactly one label: \"bug\" if\n      something is broken, \"enhancement\" if it was never built and then move it\n      to \"To Do\".\n\n      If the ticket lacks the details to decide, apply no label and ask the\n      reporter in a comment for clarification. \n    id: triage\n    label: Triage\n","yaml",[127,742,743,760,772,783,791,805,816,828,844,850,856,862,868,875,881,887,897],{"__ignoreMap":646},[744,745,748,752,756],"span",{"class":746,"line":747},"line",1,[744,749,751],{"class":750},"swJcz","version",[744,753,755],{"class":754},"sMK4o",":",[744,757,759],{"class":758},"sbssI"," 1\n",[744,761,763,766,768],{"class":746,"line":762},2,[744,764,765],{"class":750},"name",[744,767,755],{"class":754},[744,769,771],{"class":770},"sfazB"," Jira Issue Triage\n",[744,773,775,778,780],{"class":746,"line":774},3,[744,776,777],{"class":750},"description",[744,779,755],{"class":754},[744,781,782],{"class":770}," Check every new ticket and label it as bug or enhancement.\n",[744,784,786,788],{"class":746,"line":785},4,[744,787,107],{"class":750},[744,789,790],{"class":754},":\n",[744,792,794,797,800,802],{"class":746,"line":793},5,[744,795,796],{"class":754},"  -",[744,798,799],{"class":750}," type",[744,801,755],{"class":754},[744,803,804],{"class":770}," ddev-start\n",[744,806,808,811,813],{"class":746,"line":807},6,[744,809,810],{"class":750},"    id",[744,812,755],{"class":754},[744,814,815],{"class":770}," boot_project\n",[744,817,819,821,823,825],{"class":746,"line":818},7,[744,820,796],{"class":754},[744,822,799],{"class":750},[744,824,755],{"class":754},[744,826,827],{"class":770}," ai\n",[744,829,831,834,836,840],{"class":746,"line":830},8,[744,832,833],{"class":750},"    prompt",[744,835,755],{"class":754},[744,837,839],{"class":838},"s7zQu"," >",[744,841,843],{"class":842},"spNyl","-\n",[744,845,847],{"class":746,"line":846},9,[744,848,849],{"class":770},"      Read the ticket of this session. Try to reproduce it in the preview and in\n",[744,851,853],{"class":746,"line":852},10,[744,854,855],{"class":770},"      the code. Do not fix anything. Then apply exactly one label: \"bug\" if\n",[744,857,859],{"class":746,"line":858},11,[744,860,861],{"class":770},"      something is broken, \"enhancement\" if it was never built and then move it\n",[744,863,865],{"class":746,"line":864},12,[744,866,867],{"class":770},"      to \"To Do\".\n",[744,869,871],{"class":746,"line":870},13,[744,872,874],{"emptyLinePlaceholder":873},true,"\n",[744,876,878],{"class":746,"line":877},14,[744,879,880],{"class":770},"      If the ticket lacks the details to decide, apply no label and ask the\n",[744,882,884],{"class":746,"line":883},15,[744,885,886],{"class":770},"      reporter in a comment for clarification. \n",[744,888,890,892,894],{"class":746,"line":889},16,[744,891,810],{"class":750},[744,893,755],{"class":754},[744,895,896],{"class":770}," triage\n",[744,898,900,903,905],{"class":746,"line":899},17,[744,901,902],{"class":750},"    label",[744,904,755],{"class":754},[744,906,907],{"class":770}," Triage\n",[359,909,911],{"id":910},"bug-fix","Bug Fix",[284,913,914,924],{},[287,915,916],{},[290,917,918,920,922],{},[293,919,714],{},[293,921,717],{},[293,923,720],{},[300,925,926],{},[290,927,928,930,936],{},[305,929,66],{},[305,931,932,933],{},"Status reached: ",[127,934,935],{},"To Do",[305,937,938,939],{},"Label is ",[127,940,678],{},[733,942,944],{"filename":943},"jira-bug-fix.yaml",[638,945,947],{"className":738,"code":946,"language":740,"meta":646,"style":646},"version: 1\nname: Jira Bug Fix\ndescription: Fix a ticket labeled as bug and open a pull request.\nsteps:\n  - type: ai\n    prompt: >-\n      The ticket of this session was confirmed as a bug. When you are beginning\n      your work move the Ticket to \"In Progress\". Then fix it on a work branch,\n      verify the fix on the preview, commit in logical batches, and open a pull\n      request. \n\n      Comment a short summary of the change on the ticket and move it to \"In\n      Review\".\n    id: bug_fix\n    label: Bug Fix\n\n",[127,948,949,957,966,975,981,991,1001,1006,1011,1016,1021,1025,1030,1035,1044],{"__ignoreMap":646},[744,950,951,953,955],{"class":746,"line":747},[744,952,751],{"class":750},[744,954,755],{"class":754},[744,956,759],{"class":758},[744,958,959,961,963],{"class":746,"line":762},[744,960,765],{"class":750},[744,962,755],{"class":754},[744,964,965],{"class":770}," Jira Bug Fix\n",[744,967,968,970,972],{"class":746,"line":774},[744,969,777],{"class":750},[744,971,755],{"class":754},[744,973,974],{"class":770}," Fix a ticket labeled as bug and open a pull request.\n",[744,976,977,979],{"class":746,"line":785},[744,978,107],{"class":750},[744,980,790],{"class":754},[744,982,983,985,987,989],{"class":746,"line":793},[744,984,796],{"class":754},[744,986,799],{"class":750},[744,988,755],{"class":754},[744,990,827],{"class":770},[744,992,993,995,997,999],{"class":746,"line":807},[744,994,833],{"class":750},[744,996,755],{"class":754},[744,998,839],{"class":838},[744,1000,843],{"class":842},[744,1002,1003],{"class":746,"line":818},[744,1004,1005],{"class":770},"      The ticket of this session was confirmed as a bug. When you are beginning\n",[744,1007,1008],{"class":746,"line":830},[744,1009,1010],{"class":770},"      your work move the Ticket to \"In Progress\". Then fix it on a work branch,\n",[744,1012,1013],{"class":746,"line":846},[744,1014,1015],{"class":770},"      verify the fix on the preview, commit in logical batches, and open a pull\n",[744,1017,1018],{"class":746,"line":852},[744,1019,1020],{"class":770},"      request. \n",[744,1022,1023],{"class":746,"line":858},[744,1024,874],{"emptyLinePlaceholder":873},[744,1026,1027],{"class":746,"line":864},[744,1028,1029],{"class":770},"      Comment a short summary of the change on the ticket and move it to \"In\n",[744,1031,1032],{"class":746,"line":870},[744,1033,1034],{"class":770},"      Review\".\n",[744,1036,1037,1039,1041],{"class":746,"line":877},[744,1038,810],{"class":750},[744,1040,755],{"class":754},[744,1042,1043],{"class":770}," bug_fix\n",[744,1045,1046,1048,1050],{"class":746,"line":883},[744,1047,902],{"class":750},[744,1049,755],{"class":754},[744,1051,1052],{"class":770}," Bug Fix\n",[359,1054,1056],{"id":1055},"add-enhancement","Add Enhancement",[284,1058,1059,1069],{},[287,1060,1061],{},[290,1062,1063,1065,1067],{},[293,1064,714],{},[293,1066,717],{},[293,1068,720],{},[300,1070,1071],{},[290,1072,1073,1075,1079],{},[305,1074,66],{},[305,1076,932,1077],{},[127,1078,935],{},[305,1080,938,1081],{},[127,1082,682],{},[733,1084,1086],{"filename":1085},"jira-add-enhancement.yaml",[638,1087,1089],{"className":738,"code":1088,"language":740,"meta":646,"style":646},"version: 1\nname: Jira Add Enhancement\ndescription: Plan a ticket labeled as enhancement and post the plan.\nsteps:\n  - type: ai\n    prompt: >-\n      The ticket of this session is an enhancement. \n\n      Work out how it would be built in this project: the files to touch, the\n      steps in order, and what is open. \n\n      Do not change any files or the status. Just post the plan as a comment,\n      written for the person who reported the ticket.\n    id: plan_enhancement\n    label: Plan Enhancement\n",[127,1090,1091,1099,1108,1117,1123,1133,1143,1148,1152,1157,1162,1166,1171,1176,1185],{"__ignoreMap":646},[744,1092,1093,1095,1097],{"class":746,"line":747},[744,1094,751],{"class":750},[744,1096,755],{"class":754},[744,1098,759],{"class":758},[744,1100,1101,1103,1105],{"class":746,"line":762},[744,1102,765],{"class":750},[744,1104,755],{"class":754},[744,1106,1107],{"class":770}," Jira Add Enhancement\n",[744,1109,1110,1112,1114],{"class":746,"line":774},[744,1111,777],{"class":750},[744,1113,755],{"class":754},[744,1115,1116],{"class":770}," Plan a ticket labeled as enhancement and post the plan.\n",[744,1118,1119,1121],{"class":746,"line":785},[744,1120,107],{"class":750},[744,1122,790],{"class":754},[744,1124,1125,1127,1129,1131],{"class":746,"line":793},[744,1126,796],{"class":754},[744,1128,799],{"class":750},[744,1130,755],{"class":754},[744,1132,827],{"class":770},[744,1134,1135,1137,1139,1141],{"class":746,"line":807},[744,1136,833],{"class":750},[744,1138,755],{"class":754},[744,1140,839],{"class":838},[744,1142,843],{"class":842},[744,1144,1145],{"class":746,"line":818},[744,1146,1147],{"class":770},"      The ticket of this session is an enhancement. \n",[744,1149,1150],{"class":746,"line":830},[744,1151,874],{"emptyLinePlaceholder":873},[744,1153,1154],{"class":746,"line":846},[744,1155,1156],{"class":770},"      Work out how it would be built in this project: the files to touch, the\n",[744,1158,1159],{"class":746,"line":852},[744,1160,1161],{"class":770},"      steps in order, and what is open. \n",[744,1163,1164],{"class":746,"line":858},[744,1165,874],{"emptyLinePlaceholder":873},[744,1167,1168],{"class":746,"line":864},[744,1169,1170],{"class":770},"      Do not change any files or the status. Just post the plan as a comment,\n",[744,1172,1173],{"class":746,"line":870},[744,1174,1175],{"class":770},"      written for the person who reported the ticket.\n",[744,1177,1178,1180,1182],{"class":746,"line":877},[744,1179,810],{"class":750},[744,1181,755],{"class":754},[744,1183,1184],{"class":770}," plan_enhancement\n",[744,1186,1187,1189,1191],{"class":746,"line":883},[744,1188,902],{"class":750},[744,1190,755],{"class":754},[744,1192,1193],{"class":770}," Plan Enhancement\n",[96,1195,1196],{},"When the team agrees with the plan, a comment that mentions the Knecht account, such as \"implement it and open a PR\", is enough. Knecht continues in the same session and answers with the pull request.",[692,1198,1199],{},[96,1200,1201],{},"A ticket that a person labels and moves to \"To Do\" without the triage having seen it starts these workflows without a booted site. Add a boot step to them if that happens in your team.",[111,1203,1205],{"id":1204},"assign-to-knecht","Assign to Knecht",[96,1207,1208],{},"No label and no triage: the team assigns a ticket to the Knecht account like to any colleague, and Knecht implements it. This workflow stands on its own, so it boots the site itself.",[284,1210,1211,1221],{},[287,1212,1213],{},[290,1214,1215,1217,1219],{},[293,1216,714],{},[293,1218,717],{},[293,1220,720],{},[300,1222,1223],{},[290,1224,1225,1227,1229],{},[305,1226,66],{},[305,1228,394],{},[305,1230,1231,1232],{},"Issue type is ",[127,1233,1234],{},"Bug, Task",[733,1236,1238],{"filename":1237},"jira-assigned-ticket.yaml",[638,1239,1241],{"className":738,"code":1240,"language":740,"meta":646,"style":646},"version: 1\nname: Jira Assigned Ticket\ndescription: Implement a ticket that was assigned to Knecht.\nsteps:\n  - type: ddev-start\n    id: boot_project\n    label: Boot the Site\n  - type: ai\n    prompt: The ticket of this session was assigned to you. Read it with its\n      comments, implement it on a work branch, verify it on the preview, commit,\n      and open a pull request. Comment a short summary on the ticket and move it\n      to \"In Review\".\n    id: implement\n    label: Implement\n",[127,1242,1243,1251,1260,1269,1275,1285,1293,1302,1312,1321,1326,1331,1336,1345],{"__ignoreMap":646},[744,1244,1245,1247,1249],{"class":746,"line":747},[744,1246,751],{"class":750},[744,1248,755],{"class":754},[744,1250,759],{"class":758},[744,1252,1253,1255,1257],{"class":746,"line":762},[744,1254,765],{"class":750},[744,1256,755],{"class":754},[744,1258,1259],{"class":770}," Jira Assigned Ticket\n",[744,1261,1262,1264,1266],{"class":746,"line":774},[744,1263,777],{"class":750},[744,1265,755],{"class":754},[744,1267,1268],{"class":770}," Implement a ticket that was assigned to Knecht.\n",[744,1270,1271,1273],{"class":746,"line":785},[744,1272,107],{"class":750},[744,1274,790],{"class":754},[744,1276,1277,1279,1281,1283],{"class":746,"line":793},[744,1278,796],{"class":754},[744,1280,799],{"class":750},[744,1282,755],{"class":754},[744,1284,804],{"class":770},[744,1286,1287,1289,1291],{"class":746,"line":807},[744,1288,810],{"class":750},[744,1290,755],{"class":754},[744,1292,815],{"class":770},[744,1294,1295,1297,1299],{"class":746,"line":818},[744,1296,902],{"class":750},[744,1298,755],{"class":754},[744,1300,1301],{"class":770}," Boot the Site\n",[744,1303,1304,1306,1308,1310],{"class":746,"line":830},[744,1305,796],{"class":754},[744,1307,799],{"class":750},[744,1309,755],{"class":754},[744,1311,827],{"class":770},[744,1313,1314,1316,1318],{"class":746,"line":846},[744,1315,833],{"class":750},[744,1317,755],{"class":754},[744,1319,1320],{"class":770}," The ticket of this session was assigned to you. Read it with its\n",[744,1322,1323],{"class":746,"line":852},[744,1324,1325],{"class":770},"      comments, implement it on a work branch, verify it on the preview, commit,\n",[744,1327,1328],{"class":746,"line":858},[744,1329,1330],{"class":770},"      and open a pull request. Comment a short summary on the ticket and move it\n",[744,1332,1333],{"class":746,"line":864},[744,1334,1335],{"class":770},"      to \"In Review\".\n",[744,1337,1338,1340,1342],{"class":746,"line":870},[744,1339,810],{"class":750},[744,1341,755],{"class":754},[744,1343,1344],{"class":770}," implement\n",[744,1346,1347,1349,1351],{"class":746,"line":877},[744,1348,902],{"class":750},[744,1350,755],{"class":754},[744,1352,1353],{"class":770}," Implement\n",[111,1355,1357],{"id":1356},"estimate-tickets","Estimate Tickets",[96,1359,1360],{},"A ticket that is moved to \"In Planning\" gets an estimate and lands in \"To Do\". The agent reads the ticket, looks up the code it touches, and comments how big the work is and why. An estimate needs the code, not the running site, so there is no boot step. Pick the exact status of your board in the trigger, the names here are examples.",[284,1362,1363,1373],{},[287,1364,1365],{},[290,1366,1367,1369,1371],{},[293,1368,714],{},[293,1370,717],{},[293,1372,720],{},[300,1374,1375],{},[290,1376,1377,1379,1382],{},[305,1378,66],{},[305,1380,1381],{},"Status reached: In Planning",[305,1383,731],{},[733,1385,1387],{"filename":1386},"jira-estimate-ticket.yaml",[638,1388,1390],{"className":738,"code":1389,"language":740,"meta":646,"style":646},"version: 1\nname: Jira Estimate Ticket\ndescription: Estimate a ticket in planning and move it to To Do.\nsteps:\n  - type: ai\n    prompt: 'Estimate the ticket of this session. Find the code it touches and judge\n      the effort. Do not change any files. Comment the estimate on the ticket: a\n      size (S, M, L, or XL), the hours you expect, what drives the effort, and\n      what is unclear. Then move the ticket to \"To Do\". If it is too vague to\n      estimate, comment your questions and leave it where it is.'\n    id: estimate\n    label: Estimate\n",[127,1391,1392,1400,1409,1418,1424,1434,1446,1451,1456,1461,1469,1478],{"__ignoreMap":646},[744,1393,1394,1396,1398],{"class":746,"line":747},[744,1395,751],{"class":750},[744,1397,755],{"class":754},[744,1399,759],{"class":758},[744,1401,1402,1404,1406],{"class":746,"line":762},[744,1403,765],{"class":750},[744,1405,755],{"class":754},[744,1407,1408],{"class":770}," Jira Estimate Ticket\n",[744,1410,1411,1413,1415],{"class":746,"line":774},[744,1412,777],{"class":750},[744,1414,755],{"class":754},[744,1416,1417],{"class":770}," Estimate a ticket in planning and move it to To Do.\n",[744,1419,1420,1422],{"class":746,"line":785},[744,1421,107],{"class":750},[744,1423,790],{"class":754},[744,1425,1426,1428,1430,1432],{"class":746,"line":793},[744,1427,796],{"class":754},[744,1429,799],{"class":750},[744,1431,755],{"class":754},[744,1433,827],{"class":770},[744,1435,1436,1438,1440,1443],{"class":746,"line":807},[744,1437,833],{"class":750},[744,1439,755],{"class":754},[744,1441,1442],{"class":754}," '",[744,1444,1445],{"class":770},"Estimate the ticket of this session. Find the code it touches and judge\n",[744,1447,1448],{"class":746,"line":818},[744,1449,1450],{"class":770},"      the effort. Do not change any files. Comment the estimate on the ticket: a\n",[744,1452,1453],{"class":746,"line":830},[744,1454,1455],{"class":770},"      size (S, M, L, or XL), the hours you expect, what drives the effort, and\n",[744,1457,1458],{"class":746,"line":846},[744,1459,1460],{"class":770},"      what is unclear. Then move the ticket to \"To Do\". If it is too vague to\n",[744,1462,1463,1466],{"class":746,"line":852},[744,1464,1465],{"class":770},"      estimate, comment your questions and leave it where it is.",[744,1467,1468],{"class":754},"'\n",[744,1470,1471,1473,1475],{"class":746,"line":858},[744,1472,810],{"class":750},[744,1474,755],{"class":754},[744,1476,1477],{"class":770}," estimate\n",[744,1479,1480,1482,1484],{"class":746,"line":864},[744,1481,902],{"class":750},[744,1483,755],{"class":754},[744,1485,1486],{"class":770}," Estimate\n",[1488,1489,1490],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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":646,"searchDepth":762,"depth":762,"links":1492},[1493,1500,1506],{"id":102,"depth":762,"text":27,"children":1494},[1495,1496,1497,1498,1499],{"id":113,"depth":774,"text":114},{"id":133,"depth":774,"text":134},{"id":181,"depth":774,"text":182},{"id":265,"depth":774,"text":266},{"id":278,"depth":774,"text":279},{"id":337,"depth":762,"text":338,"children":1501},[1502,1503,1504,1505],{"id":341,"depth":774,"text":49},{"id":573,"depth":774,"text":574},{"id":585,"depth":774,"text":586},{"id":632,"depth":774,"text":633},{"id":664,"depth":762,"text":665,"children":1507},[1508,1509,1510],{"id":671,"depth":774,"text":672},{"id":1204,"depth":774,"text":1205},{"id":1356,"depth":774,"text":1357},"Everything you need to know about the Jira integration. What it can do and how to set it up.","md",{},{"title":66,"description":1511},"5x7f2pN9zLN_Yf9AHsnDgKGsBp5q4B_Xl33uLTL13Hg",[1517,1519],{"title":62,"path":63,"stem":64,"description":1518,"children":-1},"Everything you need to know about the GitHub integration. What it can do and how to set it up.",{"title":70,"path":71,"stem":72,"description":1520,"children":-1},"Everything you need to know about the Plane integration. What it can do and how to set it up.",1790265016286]