ticket-updates
Skill0 starsChanged 24 days agoMITView on GitHub
Jira status transitions + assignee, and the Slack notification, for the autopilot pipeline. Moves the ticket to its in-progress status at the start and its in-review status after PRs, assigns it to whoever is running the pipeline, and posts the PR link to the configured Slack channel. Used by the autopilot orchestrator.
In this repository9 other files it gives its agents.
- engageSkill
- gate-runnerSkill
- preflightSkill
- pr-formatSkill
- provision-repoSkill
- reportingSkill
- review-rubricSkill
- state-protocolSkill
- tdd-procedureSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 0 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 28
If config.jira_transitions.<PROJECT> already records a target status name for this step, find the offered transition whose to.name matches …
- Very specific: line 33
No hit → ask the user once, listing the offered status names, then write their answer to config.jira_transitions.<PROJECT>.<step> so later …
- Very specific: line 38
Do not resolve a status by its statusCategory.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Ticket updates (Jira + Slack)
These are ticket-level actions — once per run, not per repo. If the relevant MCP isn't connected (see preflight), skip gracefully: log the skip in log.md, note it in the final block, continue the run.
Jira (Atlassian MCP)
cloudId comes from config.jira_site (e.g. yourcompany.atlassian.net). If it's unset or a call fails with a cloudId or permission error, resolve it with getAccessibleAtlassianResources and use that.
At run start (before requirements):
- Resolve the runner dynamically:
atlassianUserInfo→account_id. - Assign the ticket to that account:
editJiraIssuewithfields.assignee.accountId. - Move it to the project's in-progress status (see Resolving a status below). If it's already there, skip.
After all PRs are open (before cleanup):
- Move it to the project's in-review status, resolved the same way.
Resolving a status
Status names differ per project, so never assume them. Call getTransitionsForJiraIssue and pick from what it actually offers:
- If
config.jira_transitions.<PROJECT>already records a target status name for this step, find the offered transition whoseto.namematches it case-insensitively and take it. - Otherwise match
to.namecase-insensitively against the candidates for the step, in order, and take the first hit:- start →
In Progress,In Development,Doing,Start Progress - review →
In Review,Code Review,Review,Ready for review,Peer review
- start →
- Exactly one hit → use it and log a
Decision:block naming the transition and why. - No hit → ask the user once, listing the offered status names, then write their answer to
config.jira_transitions.<PROJECT>.<step>so later runs are silent. - Nobody to ask (running unattended) → skip the transition and log it. Never guess a status on someone else's board, and never force a transition the API didn't offer.
Cache the target status name, not the transition id: which transitions exist depends on where the ticket currently sits, so a stored id goes stale while a stored name can be re-resolved.
Do not resolve a status by its statusCategory. Categories are coarse (To Do / In Progress / Done) and workflows routinely put several statuses in one — a board can offer In Progress, In Review, Ready for test and Blocked all under the In Progress category, and land Ready for release under Done.
Slack (Slack MCP)
Channel: config.slack_channel — a channel id (e.g. C0…). If it's unset, skip the post and log it rather than guessing a channel. Post with slack_send_message once, after the PR(s) are open.
Format — a header line, then each PR URL on its own line (so Slack doesn't fold the link), with contributors / @-mentions excluded. Do not start the message with the ticket KEY — it's already in the PR title.
Single repo:
Ready for technical review — <PR title>
<PR URL>Multi-repo (one header, one URL per line):
Ready for technical review — <short ticket summary>
<PR URL — repo A>
<PR URL — repo B>Record the ticket's new status and the posted message link in state.json.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

