From 98a22a2d90a5b42ed5c5965e2df2d7b8ed4bae52 Mon Sep 17 00:00:00 2001 From: VinPropane Date: Sat, 11 Apr 2026 00:06:23 -0400 Subject: [PATCH] docs: Require explicit Jira status before story-end transition - story-end.md: do not call transitionJiraIssue until user chooses In Test/Done (or states it in the same message); note MCP server plugin-atlassian-atlassian. - AGENTS.md: story lifecycle line matches. --- .cursor/rules/story-end.md | 8 +++++--- AGENTS.md | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.cursor/rules/story-end.md b/.cursor/rules/story-end.md index 55683f5..4a657a9 100644 --- a/.cursor/rules/story-end.md +++ b/.cursor/rules/story-end.md @@ -29,9 +29,11 @@ If the user asks to **push** changes that sit on **`main`** and **`git push orig ## 4. Jira transition -- Before finishing the story-end workflow, ask the user where the Jira story should move next: **`In Test`** or **`Done`**. -- After the user chooses one of those two states, perform the Jira transition with Atlassian MCP when available. -- If Atlassian MCP is unavailable or cannot complete the transition, tell the user and ask them to update the board manually. +- **Do not** call Jira transition APIs (e.g. Atlassian MCP `transitionJiraIssue`) until the user has **explicitly** chosen the next status. Typical options here are **`In Test`** or **`Done`**; use `getTransitionsForJiraIssue` if names differ. +- If the user only says “end story” / “merge cleanup” / similar **without** naming a target status: run the **git** steps in §2, then **ask** “**In Test** or **Done**?” and **wait for their answer** before transitioning. **Never assume Done** (or any status) without that confirmation. +- **Exception:** If the **same user message** already names the status (e.g. “end story, move NEON-28 to **Done**”), you may transition after git cleanup without a second ask. +- Perform the transition with Atlassian MCP when available (**MCP server id `plugin-atlassian-atlassian`**, not `atlassian`). +- If MCP is unavailable or the transition fails, tell the user and ask them to update the board manually. ## Related diff --git a/AGENTS.md b/AGENTS.md index 483e291..91767a0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -7,6 +7,6 @@ Optional **personas** for Cursor. Enable by **@ mentioning** the rule in chat or | **Code review** | [`.cursor/rules/code-review-agent.md`](.cursor/rules/code-review-agent.md) | PR / diff / pre-merge review; **always writes** `docs/reviews/YYYY-MM-DD-{slug}.md` with **Documentation checked** vs `docs/plans/` and `docs/decomposition/modules/`; **when suggestions are fixed, strike through those bullets + `Done.` in that file** ([planning-implementation-docs](.cursor/rules/planning-implementation-docs.md)); short chat pointer | | **Docs review** | [`.cursor/rules/docs-review-agent.md`](.cursor/rules/docs-review-agent.md) | Coherence / links / dev-guide fitness for `docs/` (especially `docs/game-design/` + decomposition); **writes** `docs/reviews/YYYY-MM-DD-{slug}.md`; **when suggestions are fixed, strike through + `Done.` in that file** ([planning-implementation-docs](.cursor/rules/planning-implementation-docs.md)); use when working in **documents** or @ mention | -Project-wide conventions live under [`.cursor/rules/`](.cursor/rules/) (many are `alwaysApply`). **Planning / implementation decisions** must be written into `docs/plans/` (and related docs)—[`.cursor/rules/planning-implementation-docs.md`](.cursor/rules/planning-implementation-docs.md). **Godot client layout** (thin `main.gd`, split by concern): [`.cursor/rules/godot-client-script-organization.md`](.cursor/rules/godot-client-script-organization.md). **Git:** agents may **commit** at discretion on story/ticket work; **never** `git push` unless the user asks — [`.cursor/rules/commit-and-review.md`](.cursor/rules/commit-and-review.md). **Story lifecycle:** kickoff [`.cursor/rules/story-kickoff.md`](.cursor/rules/story-kickoff.md); after merge / end of story — `checkout main`, `pull`, delete local story branch — [`.cursor/rules/story-end.md`](.cursor/rules/story-end.md). **PR / push text:** no “Made-with: Cursor” boilerplate (same file). +Project-wide conventions live under [`.cursor/rules/`](.cursor/rules/) (many are `alwaysApply`). **Planning / implementation decisions** must be written into `docs/plans/` (and related docs)—[`.cursor/rules/planning-implementation-docs.md`](.cursor/rules/planning-implementation-docs.md). **Godot client layout** (thin `main.gd`, split by concern): [`.cursor/rules/godot-client-script-organization.md`](.cursor/rules/godot-client-script-organization.md). **Git:** agents may **commit** at discretion on story/ticket work; **never** `git push` unless the user asks — [`.cursor/rules/commit-and-review.md`](.cursor/rules/commit-and-review.md). **Story lifecycle:** kickoff [`.cursor/rules/story-kickoff.md`](.cursor/rules/story-kickoff.md); after merge / end of story — `checkout main`, `pull`, delete local story branch — [`.cursor/rules/story-end.md`](.cursor/rules/story-end.md). **Jira:** ask **In Test** vs **Done** (or wait for the user to say which in the same message) **before** transitioning the issue; do not guess. **PR / push text:** no “Made-with: Cursor” boilerplate (same file). **Commits tied to a Jira issue** must start the subject with the **issue key** and a colon (e.g. `NEON-5: …`). Branch naming and exceptions (`chore:` when there is no ticket) — [`.cursor/rules/jira-git-naming.md`](.cursor/rules/jira-git-naming.md).