@codyswann/lisa 1.93.0 → 1.95.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/agents/jira-agent.md +21 -8
- package/plugins/lisa/rules/base-rules.md +9 -1
- package/plugins/lisa/skills/jira-verify/SKILL.md +57 -1
- package/plugins/lisa/skills/jira-write-ticket/SKILL.md +52 -4
- package/plugins/lisa/skills/ticket-triage/SKILL.md +19 -2
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/agents/jira-agent.md +21 -8
- package/plugins/src/base/rules/base-rules.md +9 -1
- package/plugins/src/base/skills/jira-verify/SKILL.md +57 -1
- package/plugins/src/base/skills/jira-write-ticket/SKILL.md +52 -4
- package/plugins/src/base/skills/ticket-triage/SKILL.md +19 -2
package/package.json
CHANGED
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"lodash": ">=4.18.1"
|
|
79
79
|
},
|
|
80
80
|
"name": "@codyswann/lisa",
|
|
81
|
-
"version": "1.
|
|
81
|
+
"version": "1.95.0",
|
|
82
82
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
83
83
|
"main": "dist/index.js",
|
|
84
84
|
"exports": {
|
|
@@ -34,13 +34,26 @@ Pass the resulting context bundle verbatim to every downstream agent. Extract cr
|
|
|
34
34
|
|
|
35
35
|
**Never act on a ticket in isolation.** If the bundle shows open blockers, flag them and stop. If it shows an epic sibling in progress with a different assignee, surface that before proceeding so work isn't duplicated.
|
|
36
36
|
|
|
37
|
-
### 2. Validate Ticket Quality
|
|
37
|
+
### 2. Validate Ticket Quality (Pre-flight Gate)
|
|
38
38
|
|
|
39
|
-
Use the `jira-verify` skill to check:
|
|
40
|
-
- Epic relationship exists (
|
|
41
|
-
- Description
|
|
39
|
+
Use the `jira-verify` skill to check the ticket against organizational standards:
|
|
40
|
+
- Epic relationship exists (non-bug, non-epic tickets)
|
|
41
|
+
- Description quality (audience sections, Gherkin acceptance criteria)
|
|
42
|
+
- Validation Journey present (runtime-behavior tickets)
|
|
43
|
+
- Target backend environment named in description (runtime-behavior tickets)
|
|
44
|
+
- Sign-in credentials named in description (when ticket touches authenticated surfaces)
|
|
45
|
+
- Single-repo scope (Bug / Task / Sub-task)
|
|
46
|
+
- Relationship discovery (≥1 link or documented git+JQL search)
|
|
42
47
|
|
|
43
|
-
|
|
48
|
+
**Gating behavior — this is the one place auto-transitioning is allowed:**
|
|
49
|
+
|
|
50
|
+
If `jira-verify` returns `FAIL` on any of the above, do NOT continue:
|
|
51
|
+
1. Transition the ticket status to `Blocked` (use `mcp__atlassian__transitionJiraIssue` or equivalent).
|
|
52
|
+
2. Reassign the ticket to the **Reporter** (the human who filed it — not the Creator field, which may be a bot/integration).
|
|
53
|
+
3. Post a comment using `mcp__atlassian__addCommentToJiraIssue` listing each missing requirement with a one-line remediation. Prefix with `[{repo}]`.
|
|
54
|
+
4. Stop. Do not run triage, do not delegate to a flow, do not start work.
|
|
55
|
+
|
|
56
|
+
If `jira-verify` returns `PASS`, proceed to Step 3.
|
|
44
57
|
|
|
45
58
|
### 3. Analytical Triage Gate
|
|
46
59
|
|
|
@@ -105,8 +118,8 @@ Based on the milestone, suggest (but don't auto-transition):
|
|
|
105
118
|
|
|
106
119
|
## Rules
|
|
107
120
|
|
|
108
|
-
- Never auto-transition ticket status
|
|
121
|
+
- Never auto-transition ticket status, with one explicit exception: when `jira-verify` returns `FAIL` for the pre-flight gate (Step 2), transition to `Blocked` and reassign to the Reporter. Every other status change remains a suggestion the human confirms.
|
|
109
122
|
- Always read the full ticket graph via `jira-read-ticket` before determining intent — don't rely on ticket type alone
|
|
110
123
|
- Never create or materially edit a ticket by calling MCP write tools directly — always delegate to `jira-write-ticket` so relationships, Gherkin criteria, and metadata gates are enforced
|
|
111
|
-
- If sign-in credentials are in the ticket, extract and pass them to the flow
|
|
112
|
-
- If the ticket has a Validation Journey section, pass it to the verifier agent
|
|
124
|
+
- If sign-in credentials are in the ticket, extract and pass them to the flow. If the ticket touches an authenticated surface and credentials are missing, that is a Step 2 failure — block and reassign rather than guessing.
|
|
125
|
+
- If the ticket has a Validation Journey section, pass it to the verifier agent. The Validation Journey's local-verification step must point at the target backend environment named in the description (for FE work, that's the deployed backend QA reported against).
|
|
@@ -68,7 +68,15 @@ JIRA Discipline:
|
|
|
68
68
|
- If working on a JIRA issue, update the issue as you work through it. For example, if working on a Bug Triage, update the issue with your questions/feedback/suggestions.
|
|
69
69
|
- When reading a JIRA issue, always read ALL comments on the ticket — not just the description. Comments contain critical context: stakeholder decisions, scope changes, blockers, triage findings from other repos, and implementation notes. Use the Atlassian MCP or `jira issue view <TICKET_ID> --comments 100` to fetch them.
|
|
70
70
|
- When requesting clarification on a JIRA issue, post the question as a comment using ADF (Atlassian Document Format) and @mention the Reporter so they receive a notification.
|
|
71
|
-
- When creating JIRA tickets, establish issue link relationships (e.g. "is blocked by", "blocks", "relates to", "is duplicated by") between tickets that have dependencies or logical connections. Do not leave related tickets unlinked.
|
|
71
|
+
- When creating JIRA tickets, establish issue link relationships (e.g. "is blocked by", "blocks", "relates to", "is duplicated by") between tickets that have dependencies or logical connections. Do not leave related tickets unlinked. Relationship discovery is mandatory on every create and update — search BOTH the local git history (`git log --all --grep=<keyword>`, `git log -- <path>`) AND Jira (JQL by component, keyword, label, epic siblings) before declaring "no related work." Record the searches you ran and their outcomes in the description (or a comment) so a reviewer can see the search was real.
|
|
72
|
+
- Ticket scope by type: Bug, Task, and Sub-task tickets MUST be single-repo (one work unit, one repo). Epic, Spike, and Story tickets MAY span multiple repos. If a Bug/Task/Sub-task crosses repos, split it.
|
|
73
|
+
- Ticket descriptions MUST contain everything an implementer needs to start work without asking the reporter. In particular:
|
|
74
|
+
- **Target backend environment** (`dev` / `staging` / `prod`) when the ticket has runtime behavior. QA/product report against a deployed env; the implementer verifies locally first against that backend before CI/CD. Skip only for doc-only, config-only, type-only, or Epic tickets.
|
|
75
|
+
- **Sign-in account / credentials** when the work requires being signed in. Name the account (or the source — 1Password item, env var, seeded fixture) and the role. Omit entirely when sign-in is not required.
|
|
76
|
+
- **Gherkin acceptance criteria** (Given/When/Then) so the implementer can verify behavior without guessing.
|
|
77
|
+
- **Relationship discovery evidence** — either an issue link to a related ticket, or a documented search showing none was found (see Relationship Discovery in jira-verify).
|
|
78
|
+
- Ticket metadata MUST include an **epic parent** for non-bug, non-epic tickets so every Story/Task/Sub-task is traceable to a strategic goal.
|
|
79
|
+
- Pre-flight gate before starting work on any ticket: if the description is missing target backend environment (when applicable), sign-in credentials (when applicable), Gherkin acceptance criteria, epic parent (non-bug/non-epic), or relationship discovery evidence, transition the ticket to Blocked, reassign to the **Reporter**, and post a comment listing exactly what is missing. Do not start work. This is the one place where auto-transitioning status is allowed.
|
|
72
80
|
- When checking for associated pull requests on a JIRA issue, check the **Development panel** — not just comments or description text. The Development panel shows PRs, commits, branches, and builds linked via the GitHub-Jira integration. Query it via the dev-status API:
|
|
73
81
|
```bash
|
|
74
82
|
ISSUE_ID=$(curl -s -u "${JIRA_LOGIN}:${JIRA_API_TOKEN}" \
|
|
@@ -43,6 +43,62 @@ This check is skipped for:
|
|
|
43
43
|
- Type-definition-only tickets (no runtime effect)
|
|
44
44
|
- Epic-level tickets (journeys belong on child stories/tasks)
|
|
45
45
|
|
|
46
|
+
### 4. Target Backend Environment
|
|
47
|
+
|
|
48
|
+
**Rule**: Tickets that change runtime behavior MUST name a target backend environment in the description.
|
|
49
|
+
|
|
50
|
+
Look for an `h2. Target Backend Environment` section (or equivalent named callout) containing one of `dev`, `staging`, or `prod`. The check is skipped for the same exclusions as the Validation Journey (doc-only, config-only, type-only, Epic).
|
|
51
|
+
|
|
52
|
+
- If present and valid: PASS
|
|
53
|
+
- If missing or unparseable: FAIL — recommend adding the section. QA/product report against a deployed env; the implementer needs to know which backend to point local at before CI/CD.
|
|
54
|
+
|
|
55
|
+
### 5. Sign-in Credentials (Conditional)
|
|
56
|
+
|
|
57
|
+
**Rule**: If the ticket touches an authenticated surface, the description MUST name the account/role to sign in as and where to get credentials.
|
|
58
|
+
|
|
59
|
+
A surface is "authenticated" if any of these signals are present in the description, acceptance criteria, or Validation Journey:
|
|
60
|
+
- Verbs like "log in", "sign in", "as a {role} user", "authenticated"
|
|
61
|
+
- Routes/screens that require auth in this product
|
|
62
|
+
- Roles named (admin, customer, partner, etc.)
|
|
63
|
+
|
|
64
|
+
If those signals are present, look for an `h2. Sign-in Required` section naming an account or credential source.
|
|
65
|
+
|
|
66
|
+
- If signals absent: PASS (sign-in not required)
|
|
67
|
+
- If signals present and section present: PASS
|
|
68
|
+
- If signals present and section missing: FAIL — recommend adding it. Implementers must not have to guess which account to use.
|
|
69
|
+
|
|
70
|
+
### 6. Single-Repo Scope (Bug / Task / Sub-task)
|
|
71
|
+
|
|
72
|
+
**Rule**: Bug, Task, and Sub-task tickets MUST cover one repo. Epic, Spike, and Story may span multiple repos.
|
|
73
|
+
|
|
74
|
+
Check by inspecting the description's `h2. Repository` section (or equivalent) and any explicit cross-repo references in the description / acceptance criteria.
|
|
75
|
+
|
|
76
|
+
- Bug / Task / Sub-task that names exactly one repo: PASS
|
|
77
|
+
- Bug / Task / Sub-task that names multiple repos OR has acceptance criteria spanning repos: FAIL — recommend splitting into per-repo tickets under a parent Story/Epic.
|
|
78
|
+
- Other types: skipped.
|
|
79
|
+
|
|
80
|
+
### 7. Relationship Discovery
|
|
81
|
+
|
|
82
|
+
**Rule**: Every ticket MUST have either at least one issue link OR a documented relationship search showing none was found.
|
|
83
|
+
|
|
84
|
+
- If the ticket has any issue link (`blocks`, `is blocked by`, `relates to`, `duplicates`, `clones`): PASS
|
|
85
|
+
- If no links but the description (or a comment) contains a `## Relationship Search` block listing the git and JQL queries that were run with their outcomes: PASS
|
|
86
|
+
- If no links and no documented search: FAIL — recommend running `/jira-write-ticket` (or its discovery phase) to capture the search.
|
|
87
|
+
|
|
46
88
|
## Execute Verification
|
|
47
89
|
|
|
48
|
-
Retrieve ticket details, run all checks, and
|
|
90
|
+
Retrieve ticket details, run all checks, and produce a single output block. For each FAIL include the specific remediation. The caller (typically `jira-agent`) uses the FAIL list to decide whether to gate work — see the agent's pre-flight gate.
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
## jira-verify: <TICKET-KEY>
|
|
94
|
+
- Epic parent: PASS | FAIL — <reason>
|
|
95
|
+
- Description quality: PASS | FAIL — <reason>
|
|
96
|
+
- Validation Journey: PASS | FAIL | N/A — <reason>
|
|
97
|
+
- Target backend environment: PASS | FAIL | N/A — <reason>
|
|
98
|
+
- Sign-in credentials: PASS | FAIL | N/A — <reason>
|
|
99
|
+
- Single-repo scope: PASS | FAIL | N/A — <reason>
|
|
100
|
+
- Relationship discovery: PASS | FAIL — <reason>
|
|
101
|
+
|
|
102
|
+
## Verdict: PASS | FAIL
|
|
103
|
+
## Missing requirements: [list of FAILed checks, or "none"]
|
|
104
|
+
```
|
|
@@ -26,13 +26,16 @@ Required fields (stop and ask if missing — do not invent values):
|
|
|
26
26
|
| Field | Required For | Notes |
|
|
27
27
|
|-------|--------------|-------|
|
|
28
28
|
| Project key | CREATE | Call `getVisibleJiraProjects` if unknown |
|
|
29
|
-
| Issue type | CREATE | Story, Task, Bug, Epic, Spike, Improvement |
|
|
29
|
+
| Issue type | CREATE | Story, Task, Bug, Epic, Spike, Sub-task, Improvement |
|
|
30
30
|
| Summary | CREATE, UPDATE | One line, imperative voice, under 100 chars |
|
|
31
31
|
| Description | CREATE, UPDATE | Multi-section — see Phase 3 |
|
|
32
32
|
| Epic parent | Non-bug, non-epic | Enforced by `jira-verify` |
|
|
33
33
|
| Priority | CREATE | Default to project default if unstated |
|
|
34
|
-
| Acceptance criteria | Story, Task, Bug, Improvement | Gherkin — see Phase 3 |
|
|
34
|
+
| Acceptance criteria | Story, Task, Bug, Sub-task, Improvement | Gherkin — see Phase 3 |
|
|
35
35
|
| Validation Journey | Runtime-behavior changes | Delegate to `/jira-add-journey` |
|
|
36
|
+
| Target backend environment | Runtime-behavior changes | `dev` / `staging` / `prod`; recorded in description (Phase 3). Skip only for doc/config/type-only tickets. |
|
|
37
|
+
| Sign-in account / credentials | Tickets that touch authenticated surfaces | Name the account (or source — 1Password item, env var, seeded fixture) and role; recorded in description (Phase 3). Omit when sign-in is not required. |
|
|
38
|
+
| Single-repo scope | Bug, Task, Sub-task | These types MUST cover one repo only. If the work crosses repos, split it before creating. Epic / Spike / Story may span repos. |
|
|
36
39
|
|
|
37
40
|
Optional but recommended: assignee, components, fix versions, labels, sprint, story points, reporter.
|
|
38
41
|
|
|
@@ -62,6 +65,26 @@ h2. Acceptance Criteria
|
|
|
62
65
|
h2. Out of Scope
|
|
63
66
|
[Explicit list of what this ticket does NOT cover. Forces scope discipline.]
|
|
64
67
|
|
|
68
|
+
h2. Target Backend Environment
|
|
69
|
+
[Required when the ticket changes runtime behavior. One of: dev / staging / prod.
|
|
70
|
+
This is the environment QA/product reported against and the backend the
|
|
71
|
+
implementer points their local stack at during verification before CI/CD.
|
|
72
|
+
Backend-only tickets state the deployed env they target. Skip section
|
|
73
|
+
entirely for doc-only, config-only, or type-only tickets.]
|
|
74
|
+
|
|
75
|
+
h2. Sign-in Required
|
|
76
|
+
[Include this section ONLY if the work touches authenticated surfaces.
|
|
77
|
+
Specify: the account/role to sign in as, where to get the credentials
|
|
78
|
+
(1Password item name, env var, seeded fixture), and any MFA/SSO notes.
|
|
79
|
+
Omit the section entirely when sign-in is not required — its absence
|
|
80
|
+
means "no sign-in needed for this ticket."]
|
|
81
|
+
|
|
82
|
+
h2. Repository
|
|
83
|
+
[Required for Bug / Task / Sub-task. Name the single repo this ticket covers.
|
|
84
|
+
If the work spans repos, this ticket type is wrong — split into per-repo
|
|
85
|
+
Tasks/Subtasks under a parent Story or Epic. Epic / Spike / Story may
|
|
86
|
+
list multiple repos.]
|
|
87
|
+
|
|
65
88
|
h2. Validation Journey
|
|
66
89
|
[Delegate to /jira-add-journey if the ticket changes runtime behavior.
|
|
67
90
|
Skip only for doc-only, config-only, or type-only tickets.]
|
|
@@ -72,6 +95,7 @@ Rules:
|
|
|
72
95
|
- Every criterion is independently verifiable (UI, API, data, or performance check).
|
|
73
96
|
- If the ticket is a Bug, include reproduction steps, expected vs. actual behavior, and environment.
|
|
74
97
|
- If the ticket is a Spike, include the question being answered and the definition of done (decision doc, prototype, or findings).
|
|
98
|
+
- If sign-in is required, the implementer must be able to sign in from the description alone — never assume they will guess the account or hunt for credentials.
|
|
75
99
|
|
|
76
100
|
## Phase 4 — Relationship Discovery (Mandatory)
|
|
77
101
|
|
|
@@ -91,7 +115,24 @@ If the ticket is not a Bug and not an Epic, it MUST have an epic parent:
|
|
|
91
115
|
|
|
92
116
|
### 4b. Related Tickets
|
|
93
117
|
|
|
94
|
-
|
|
118
|
+
Relationship discovery is **mandatory** on every create and every update — never declare "no related work" without doing both searches below and recording their outcomes on the ticket.
|
|
119
|
+
|
|
120
|
+
**Search 1: local git history** (catches PRs/commits that touched the same area but were never linked to a ticket):
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# Commits mentioning the keyword
|
|
124
|
+
git log --all --oneline --grep="<keyword>"
|
|
125
|
+
|
|
126
|
+
# Commits that touched the relevant paths
|
|
127
|
+
git log --all --oneline -- <path-or-glob>
|
|
128
|
+
|
|
129
|
+
# Recent activity in this area (last 90 days)
|
|
130
|
+
git log --since=90.days --oneline -- <path-or-glob>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
If the git search surfaces a PR or commit that relates to this work, capture the PR URL — it becomes a remote link (Phase 4c) and may also point to a sibling ticket worth linking.
|
|
134
|
+
|
|
135
|
+
**Search 2: Jira JQL** (catches open and recently-closed tickets):
|
|
95
136
|
|
|
96
137
|
```jql
|
|
97
138
|
# Open tickets touching the same component
|
|
@@ -105,8 +146,13 @@ project = <PROJECT> AND (summary ~ "<keyword>" OR description ~ "<keyword>") AND
|
|
|
105
146
|
|
|
106
147
|
# Recent tickets touching the same labels
|
|
107
148
|
project = <PROJECT> AND labels in (<labels>) AND updated >= -30d
|
|
149
|
+
|
|
150
|
+
# Recently closed tickets in the same area (catches duplicates of work just shipped)
|
|
151
|
+
project = <PROJECT> AND component = "<component>" AND status = Done AND updated >= -30d
|
|
108
152
|
```
|
|
109
153
|
|
|
154
|
+
**Record the outcome.** Add a `## Relationship Search` subsection (or a comment if updating an existing ticket) listing the queries you ran and what they returned. If the searches yielded nothing, write that explicitly — "Searched git history for `<keywords>` and JQL for component=`X`, label=`Y`, epic siblings; no related work found." A ticket with zero links and no documented search is rejected.
|
|
155
|
+
|
|
110
156
|
For each candidate, classify the relationship:
|
|
111
157
|
|
|
112
158
|
| Link Type | When to Use |
|
|
@@ -194,7 +240,9 @@ Skip this step only on UPDATE when no material change was made.
|
|
|
194
240
|
## Rules
|
|
195
241
|
|
|
196
242
|
- Never create a non-bug ticket without an epic parent.
|
|
197
|
-
- Never skip relationship discovery —
|
|
243
|
+
- Never skip relationship discovery — both the git history search AND the JQL search must run, and their outcomes must be recorded on the ticket. "None found" is acceptable only when it's documented.
|
|
244
|
+
- Never create a Bug, Task, or Sub-task that spans multiple repos. Split it before creating.
|
|
245
|
+
- Never include a runtime-behavior ticket without a target backend environment, and never include an authenticated-surface ticket without sign-in credentials in the description.
|
|
198
246
|
- Never invent custom field values. If the project requires a field you don't have, stop and ask.
|
|
199
247
|
- Never overwrite a description without reading the current version first.
|
|
200
248
|
- All writes go through this skill so best practices are enforced uniformly. Downstream skills (e.g. `jira-create`) should delegate here rather than calling the MCP write tools directly.
|
|
@@ -10,6 +10,22 @@ Perform analytical triage on the JIRA ticket. The caller MUST have run `jira-rea
|
|
|
10
10
|
|
|
11
11
|
Repository name for scoped labels and comment headers: determine via `basename $(git rev-parse --show-toplevel)`.
|
|
12
12
|
|
|
13
|
+
## Phase 0 -- Pre-flight Description Gate
|
|
14
|
+
|
|
15
|
+
Before any analytical work, confirm the ticket carries the content an implementer needs to start. The caller should already have run `jira-verify`; this phase consumes its output. If `jira-verify` returned `FAIL` for any of the following, emit `BLOCKED` immediately with the missing-requirements list and skip to Phase 6:
|
|
16
|
+
|
|
17
|
+
- Epic parent missing (non-bug, non-epic)
|
|
18
|
+
- Description quality failures (no Gherkin acceptance criteria, missing audience sections)
|
|
19
|
+
- Validation Journey missing on a runtime-behavior ticket
|
|
20
|
+
- Target backend environment missing on a runtime-behavior ticket
|
|
21
|
+
- Sign-in credentials missing on a ticket that touches authenticated surfaces
|
|
22
|
+
- Single-repo scope violated (Bug / Task / Sub-task spanning repos)
|
|
23
|
+
- Relationship discovery missing (no links AND no documented git+JQL search)
|
|
24
|
+
|
|
25
|
+
The caller (jira-agent) is responsible for transitioning the ticket to `Blocked`, reassigning to the **Reporter**, and posting a comment listing the missing requirements. This skill only emits the verdict and the missing-requirements list.
|
|
26
|
+
|
|
27
|
+
If `jira-verify` returned `PASS` for all the above, proceed to Phase 1.
|
|
28
|
+
|
|
13
29
|
## Phase 1 -- Relevance Check
|
|
14
30
|
|
|
15
31
|
Search the local codebase using Glob and Grep for code related to the ticket's subject matter:
|
|
@@ -123,7 +139,7 @@ Every verification method must be specific enough that an automated agent could
|
|
|
123
139
|
Evaluate the findings and produce exactly one verdict:
|
|
124
140
|
|
|
125
141
|
- **`NOT_RELEVANT`** -- No relevant code was found in this repository (Phase 1). The caller should add the triage label and skip implementation in this repo.
|
|
126
|
-
- **`BLOCKED`** -- Blocking conditions were found in Phase 1.5 (open blockers, duplicate-of-open) and/or
|
|
142
|
+
- **`BLOCKED`** -- Blocking conditions were found in Phase 0 (missing required description content), Phase 1.5 (open blockers, duplicate-of-open), and/or Phase 3 (ambiguities). Work MUST NOT proceed until resolved by a human. When the block is from Phase 0, the caller (jira-agent) MUST transition the ticket to `Blocked` and reassign to the Reporter — not just leave it in place. For Phase 1.5 / Phase 3 blocks, post findings, add the triage label, and STOP.
|
|
127
143
|
- **`PASSED_WITH_FINDINGS`** -- No ambiguities, but edge cases or verification findings were identified. Work can proceed. The caller should post findings and add the triage label.
|
|
128
144
|
- **`PASSED`** -- No ambiguities, edge cases, or verification gaps found. Work can proceed. The caller should add the triage label.
|
|
129
145
|
|
|
@@ -159,4 +175,5 @@ Structure all output with clear section headers so the caller can parse and post
|
|
|
159
175
|
The caller is responsible for:
|
|
160
176
|
1. Posting the findings as comments on the ticket (using whatever Jira mechanism is available)
|
|
161
177
|
2. Adding the `claude-triaged-{repo}` label to the ticket
|
|
162
|
-
3. If `BLOCKED
|
|
178
|
+
3. If `BLOCKED` due to Phase 0 (missing required description content): transitioning the ticket to `Blocked`, reassigning to the **Reporter**, posting a comment listing the missing requirements, and stopping all work.
|
|
179
|
+
4. If `BLOCKED` due to Phase 1.5 (open blockers, duplicate-of-open) or Phase 3 (ambiguities): stopping all work and reporting to the human; do NOT auto-transition status in these cases.
|
|
@@ -34,13 +34,26 @@ Pass the resulting context bundle verbatim to every downstream agent. Extract cr
|
|
|
34
34
|
|
|
35
35
|
**Never act on a ticket in isolation.** If the bundle shows open blockers, flag them and stop. If it shows an epic sibling in progress with a different assignee, surface that before proceeding so work isn't duplicated.
|
|
36
36
|
|
|
37
|
-
### 2. Validate Ticket Quality
|
|
37
|
+
### 2. Validate Ticket Quality (Pre-flight Gate)
|
|
38
38
|
|
|
39
|
-
Use the `jira-verify` skill to check:
|
|
40
|
-
- Epic relationship exists (
|
|
41
|
-
- Description
|
|
39
|
+
Use the `jira-verify` skill to check the ticket against organizational standards:
|
|
40
|
+
- Epic relationship exists (non-bug, non-epic tickets)
|
|
41
|
+
- Description quality (audience sections, Gherkin acceptance criteria)
|
|
42
|
+
- Validation Journey present (runtime-behavior tickets)
|
|
43
|
+
- Target backend environment named in description (runtime-behavior tickets)
|
|
44
|
+
- Sign-in credentials named in description (when ticket touches authenticated surfaces)
|
|
45
|
+
- Single-repo scope (Bug / Task / Sub-task)
|
|
46
|
+
- Relationship discovery (≥1 link or documented git+JQL search)
|
|
42
47
|
|
|
43
|
-
|
|
48
|
+
**Gating behavior — this is the one place auto-transitioning is allowed:**
|
|
49
|
+
|
|
50
|
+
If `jira-verify` returns `FAIL` on any of the above, do NOT continue:
|
|
51
|
+
1. Transition the ticket status to `Blocked` (use `mcp__atlassian__transitionJiraIssue` or equivalent).
|
|
52
|
+
2. Reassign the ticket to the **Reporter** (the human who filed it — not the Creator field, which may be a bot/integration).
|
|
53
|
+
3. Post a comment using `mcp__atlassian__addCommentToJiraIssue` listing each missing requirement with a one-line remediation. Prefix with `[{repo}]`.
|
|
54
|
+
4. Stop. Do not run triage, do not delegate to a flow, do not start work.
|
|
55
|
+
|
|
56
|
+
If `jira-verify` returns `PASS`, proceed to Step 3.
|
|
44
57
|
|
|
45
58
|
### 3. Analytical Triage Gate
|
|
46
59
|
|
|
@@ -105,8 +118,8 @@ Based on the milestone, suggest (but don't auto-transition):
|
|
|
105
118
|
|
|
106
119
|
## Rules
|
|
107
120
|
|
|
108
|
-
- Never auto-transition ticket status
|
|
121
|
+
- Never auto-transition ticket status, with one explicit exception: when `jira-verify` returns `FAIL` for the pre-flight gate (Step 2), transition to `Blocked` and reassign to the Reporter. Every other status change remains a suggestion the human confirms.
|
|
109
122
|
- Always read the full ticket graph via `jira-read-ticket` before determining intent — don't rely on ticket type alone
|
|
110
123
|
- Never create or materially edit a ticket by calling MCP write tools directly — always delegate to `jira-write-ticket` so relationships, Gherkin criteria, and metadata gates are enforced
|
|
111
|
-
- If sign-in credentials are in the ticket, extract and pass them to the flow
|
|
112
|
-
- If the ticket has a Validation Journey section, pass it to the verifier agent
|
|
124
|
+
- If sign-in credentials are in the ticket, extract and pass them to the flow. If the ticket touches an authenticated surface and credentials are missing, that is a Step 2 failure — block and reassign rather than guessing.
|
|
125
|
+
- If the ticket has a Validation Journey section, pass it to the verifier agent. The Validation Journey's local-verification step must point at the target backend environment named in the description (for FE work, that's the deployed backend QA reported against).
|
|
@@ -68,7 +68,15 @@ JIRA Discipline:
|
|
|
68
68
|
- If working on a JIRA issue, update the issue as you work through it. For example, if working on a Bug Triage, update the issue with your questions/feedback/suggestions.
|
|
69
69
|
- When reading a JIRA issue, always read ALL comments on the ticket — not just the description. Comments contain critical context: stakeholder decisions, scope changes, blockers, triage findings from other repos, and implementation notes. Use the Atlassian MCP or `jira issue view <TICKET_ID> --comments 100` to fetch them.
|
|
70
70
|
- When requesting clarification on a JIRA issue, post the question as a comment using ADF (Atlassian Document Format) and @mention the Reporter so they receive a notification.
|
|
71
|
-
- When creating JIRA tickets, establish issue link relationships (e.g. "is blocked by", "blocks", "relates to", "is duplicated by") between tickets that have dependencies or logical connections. Do not leave related tickets unlinked.
|
|
71
|
+
- When creating JIRA tickets, establish issue link relationships (e.g. "is blocked by", "blocks", "relates to", "is duplicated by") between tickets that have dependencies or logical connections. Do not leave related tickets unlinked. Relationship discovery is mandatory on every create and update — search BOTH the local git history (`git log --all --grep=<keyword>`, `git log -- <path>`) AND Jira (JQL by component, keyword, label, epic siblings) before declaring "no related work." Record the searches you ran and their outcomes in the description (or a comment) so a reviewer can see the search was real.
|
|
72
|
+
- Ticket scope by type: Bug, Task, and Sub-task tickets MUST be single-repo (one work unit, one repo). Epic, Spike, and Story tickets MAY span multiple repos. If a Bug/Task/Sub-task crosses repos, split it.
|
|
73
|
+
- Ticket descriptions MUST contain everything an implementer needs to start work without asking the reporter. In particular:
|
|
74
|
+
- **Target backend environment** (`dev` / `staging` / `prod`) when the ticket has runtime behavior. QA/product report against a deployed env; the implementer verifies locally first against that backend before CI/CD. Skip only for doc-only, config-only, type-only, or Epic tickets.
|
|
75
|
+
- **Sign-in account / credentials** when the work requires being signed in. Name the account (or the source — 1Password item, env var, seeded fixture) and the role. Omit entirely when sign-in is not required.
|
|
76
|
+
- **Gherkin acceptance criteria** (Given/When/Then) so the implementer can verify behavior without guessing.
|
|
77
|
+
- **Relationship discovery evidence** — either an issue link to a related ticket, or a documented search showing none was found (see Relationship Discovery in jira-verify).
|
|
78
|
+
- Ticket metadata MUST include an **epic parent** for non-bug, non-epic tickets so every Story/Task/Sub-task is traceable to a strategic goal.
|
|
79
|
+
- Pre-flight gate before starting work on any ticket: if the description is missing target backend environment (when applicable), sign-in credentials (when applicable), Gherkin acceptance criteria, epic parent (non-bug/non-epic), or relationship discovery evidence, transition the ticket to Blocked, reassign to the **Reporter**, and post a comment listing exactly what is missing. Do not start work. This is the one place where auto-transitioning status is allowed.
|
|
72
80
|
- When checking for associated pull requests on a JIRA issue, check the **Development panel** — not just comments or description text. The Development panel shows PRs, commits, branches, and builds linked via the GitHub-Jira integration. Query it via the dev-status API:
|
|
73
81
|
```bash
|
|
74
82
|
ISSUE_ID=$(curl -s -u "${JIRA_LOGIN}:${JIRA_API_TOKEN}" \
|
|
@@ -43,6 +43,62 @@ This check is skipped for:
|
|
|
43
43
|
- Type-definition-only tickets (no runtime effect)
|
|
44
44
|
- Epic-level tickets (journeys belong on child stories/tasks)
|
|
45
45
|
|
|
46
|
+
### 4. Target Backend Environment
|
|
47
|
+
|
|
48
|
+
**Rule**: Tickets that change runtime behavior MUST name a target backend environment in the description.
|
|
49
|
+
|
|
50
|
+
Look for an `h2. Target Backend Environment` section (or equivalent named callout) containing one of `dev`, `staging`, or `prod`. The check is skipped for the same exclusions as the Validation Journey (doc-only, config-only, type-only, Epic).
|
|
51
|
+
|
|
52
|
+
- If present and valid: PASS
|
|
53
|
+
- If missing or unparseable: FAIL — recommend adding the section. QA/product report against a deployed env; the implementer needs to know which backend to point local at before CI/CD.
|
|
54
|
+
|
|
55
|
+
### 5. Sign-in Credentials (Conditional)
|
|
56
|
+
|
|
57
|
+
**Rule**: If the ticket touches an authenticated surface, the description MUST name the account/role to sign in as and where to get credentials.
|
|
58
|
+
|
|
59
|
+
A surface is "authenticated" if any of these signals are present in the description, acceptance criteria, or Validation Journey:
|
|
60
|
+
- Verbs like "log in", "sign in", "as a {role} user", "authenticated"
|
|
61
|
+
- Routes/screens that require auth in this product
|
|
62
|
+
- Roles named (admin, customer, partner, etc.)
|
|
63
|
+
|
|
64
|
+
If those signals are present, look for an `h2. Sign-in Required` section naming an account or credential source.
|
|
65
|
+
|
|
66
|
+
- If signals absent: PASS (sign-in not required)
|
|
67
|
+
- If signals present and section present: PASS
|
|
68
|
+
- If signals present and section missing: FAIL — recommend adding it. Implementers must not have to guess which account to use.
|
|
69
|
+
|
|
70
|
+
### 6. Single-Repo Scope (Bug / Task / Sub-task)
|
|
71
|
+
|
|
72
|
+
**Rule**: Bug, Task, and Sub-task tickets MUST cover one repo. Epic, Spike, and Story may span multiple repos.
|
|
73
|
+
|
|
74
|
+
Check by inspecting the description's `h2. Repository` section (or equivalent) and any explicit cross-repo references in the description / acceptance criteria.
|
|
75
|
+
|
|
76
|
+
- Bug / Task / Sub-task that names exactly one repo: PASS
|
|
77
|
+
- Bug / Task / Sub-task that names multiple repos OR has acceptance criteria spanning repos: FAIL — recommend splitting into per-repo tickets under a parent Story/Epic.
|
|
78
|
+
- Other types: skipped.
|
|
79
|
+
|
|
80
|
+
### 7. Relationship Discovery
|
|
81
|
+
|
|
82
|
+
**Rule**: Every ticket MUST have either at least one issue link OR a documented relationship search showing none was found.
|
|
83
|
+
|
|
84
|
+
- If the ticket has any issue link (`blocks`, `is blocked by`, `relates to`, `duplicates`, `clones`): PASS
|
|
85
|
+
- If no links but the description (or a comment) contains a `## Relationship Search` block listing the git and JQL queries that were run with their outcomes: PASS
|
|
86
|
+
- If no links and no documented search: FAIL — recommend running `/jira-write-ticket` (or its discovery phase) to capture the search.
|
|
87
|
+
|
|
46
88
|
## Execute Verification
|
|
47
89
|
|
|
48
|
-
Retrieve ticket details, run all checks, and
|
|
90
|
+
Retrieve ticket details, run all checks, and produce a single output block. For each FAIL include the specific remediation. The caller (typically `jira-agent`) uses the FAIL list to decide whether to gate work — see the agent's pre-flight gate.
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
## jira-verify: <TICKET-KEY>
|
|
94
|
+
- Epic parent: PASS | FAIL — <reason>
|
|
95
|
+
- Description quality: PASS | FAIL — <reason>
|
|
96
|
+
- Validation Journey: PASS | FAIL | N/A — <reason>
|
|
97
|
+
- Target backend environment: PASS | FAIL | N/A — <reason>
|
|
98
|
+
- Sign-in credentials: PASS | FAIL | N/A — <reason>
|
|
99
|
+
- Single-repo scope: PASS | FAIL | N/A — <reason>
|
|
100
|
+
- Relationship discovery: PASS | FAIL — <reason>
|
|
101
|
+
|
|
102
|
+
## Verdict: PASS | FAIL
|
|
103
|
+
## Missing requirements: [list of FAILed checks, or "none"]
|
|
104
|
+
```
|
|
@@ -26,13 +26,16 @@ Required fields (stop and ask if missing — do not invent values):
|
|
|
26
26
|
| Field | Required For | Notes |
|
|
27
27
|
|-------|--------------|-------|
|
|
28
28
|
| Project key | CREATE | Call `getVisibleJiraProjects` if unknown |
|
|
29
|
-
| Issue type | CREATE | Story, Task, Bug, Epic, Spike, Improvement |
|
|
29
|
+
| Issue type | CREATE | Story, Task, Bug, Epic, Spike, Sub-task, Improvement |
|
|
30
30
|
| Summary | CREATE, UPDATE | One line, imperative voice, under 100 chars |
|
|
31
31
|
| Description | CREATE, UPDATE | Multi-section — see Phase 3 |
|
|
32
32
|
| Epic parent | Non-bug, non-epic | Enforced by `jira-verify` |
|
|
33
33
|
| Priority | CREATE | Default to project default if unstated |
|
|
34
|
-
| Acceptance criteria | Story, Task, Bug, Improvement | Gherkin — see Phase 3 |
|
|
34
|
+
| Acceptance criteria | Story, Task, Bug, Sub-task, Improvement | Gherkin — see Phase 3 |
|
|
35
35
|
| Validation Journey | Runtime-behavior changes | Delegate to `/jira-add-journey` |
|
|
36
|
+
| Target backend environment | Runtime-behavior changes | `dev` / `staging` / `prod`; recorded in description (Phase 3). Skip only for doc/config/type-only tickets. |
|
|
37
|
+
| Sign-in account / credentials | Tickets that touch authenticated surfaces | Name the account (or source — 1Password item, env var, seeded fixture) and role; recorded in description (Phase 3). Omit when sign-in is not required. |
|
|
38
|
+
| Single-repo scope | Bug, Task, Sub-task | These types MUST cover one repo only. If the work crosses repos, split it before creating. Epic / Spike / Story may span repos. |
|
|
36
39
|
|
|
37
40
|
Optional but recommended: assignee, components, fix versions, labels, sprint, story points, reporter.
|
|
38
41
|
|
|
@@ -62,6 +65,26 @@ h2. Acceptance Criteria
|
|
|
62
65
|
h2. Out of Scope
|
|
63
66
|
[Explicit list of what this ticket does NOT cover. Forces scope discipline.]
|
|
64
67
|
|
|
68
|
+
h2. Target Backend Environment
|
|
69
|
+
[Required when the ticket changes runtime behavior. One of: dev / staging / prod.
|
|
70
|
+
This is the environment QA/product reported against and the backend the
|
|
71
|
+
implementer points their local stack at during verification before CI/CD.
|
|
72
|
+
Backend-only tickets state the deployed env they target. Skip section
|
|
73
|
+
entirely for doc-only, config-only, or type-only tickets.]
|
|
74
|
+
|
|
75
|
+
h2. Sign-in Required
|
|
76
|
+
[Include this section ONLY if the work touches authenticated surfaces.
|
|
77
|
+
Specify: the account/role to sign in as, where to get the credentials
|
|
78
|
+
(1Password item name, env var, seeded fixture), and any MFA/SSO notes.
|
|
79
|
+
Omit the section entirely when sign-in is not required — its absence
|
|
80
|
+
means "no sign-in needed for this ticket."]
|
|
81
|
+
|
|
82
|
+
h2. Repository
|
|
83
|
+
[Required for Bug / Task / Sub-task. Name the single repo this ticket covers.
|
|
84
|
+
If the work spans repos, this ticket type is wrong — split into per-repo
|
|
85
|
+
Tasks/Subtasks under a parent Story or Epic. Epic / Spike / Story may
|
|
86
|
+
list multiple repos.]
|
|
87
|
+
|
|
65
88
|
h2. Validation Journey
|
|
66
89
|
[Delegate to /jira-add-journey if the ticket changes runtime behavior.
|
|
67
90
|
Skip only for doc-only, config-only, or type-only tickets.]
|
|
@@ -72,6 +95,7 @@ Rules:
|
|
|
72
95
|
- Every criterion is independently verifiable (UI, API, data, or performance check).
|
|
73
96
|
- If the ticket is a Bug, include reproduction steps, expected vs. actual behavior, and environment.
|
|
74
97
|
- If the ticket is a Spike, include the question being answered and the definition of done (decision doc, prototype, or findings).
|
|
98
|
+
- If sign-in is required, the implementer must be able to sign in from the description alone — never assume they will guess the account or hunt for credentials.
|
|
75
99
|
|
|
76
100
|
## Phase 4 — Relationship Discovery (Mandatory)
|
|
77
101
|
|
|
@@ -91,7 +115,24 @@ If the ticket is not a Bug and not an Epic, it MUST have an epic parent:
|
|
|
91
115
|
|
|
92
116
|
### 4b. Related Tickets
|
|
93
117
|
|
|
94
|
-
|
|
118
|
+
Relationship discovery is **mandatory** on every create and every update — never declare "no related work" without doing both searches below and recording their outcomes on the ticket.
|
|
119
|
+
|
|
120
|
+
**Search 1: local git history** (catches PRs/commits that touched the same area but were never linked to a ticket):
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# Commits mentioning the keyword
|
|
124
|
+
git log --all --oneline --grep="<keyword>"
|
|
125
|
+
|
|
126
|
+
# Commits that touched the relevant paths
|
|
127
|
+
git log --all --oneline -- <path-or-glob>
|
|
128
|
+
|
|
129
|
+
# Recent activity in this area (last 90 days)
|
|
130
|
+
git log --since=90.days --oneline -- <path-or-glob>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
If the git search surfaces a PR or commit that relates to this work, capture the PR URL — it becomes a remote link (Phase 4c) and may also point to a sibling ticket worth linking.
|
|
134
|
+
|
|
135
|
+
**Search 2: Jira JQL** (catches open and recently-closed tickets):
|
|
95
136
|
|
|
96
137
|
```jql
|
|
97
138
|
# Open tickets touching the same component
|
|
@@ -105,8 +146,13 @@ project = <PROJECT> AND (summary ~ "<keyword>" OR description ~ "<keyword>") AND
|
|
|
105
146
|
|
|
106
147
|
# Recent tickets touching the same labels
|
|
107
148
|
project = <PROJECT> AND labels in (<labels>) AND updated >= -30d
|
|
149
|
+
|
|
150
|
+
# Recently closed tickets in the same area (catches duplicates of work just shipped)
|
|
151
|
+
project = <PROJECT> AND component = "<component>" AND status = Done AND updated >= -30d
|
|
108
152
|
```
|
|
109
153
|
|
|
154
|
+
**Record the outcome.** Add a `## Relationship Search` subsection (or a comment if updating an existing ticket) listing the queries you ran and what they returned. If the searches yielded nothing, write that explicitly — "Searched git history for `<keywords>` and JQL for component=`X`, label=`Y`, epic siblings; no related work found." A ticket with zero links and no documented search is rejected.
|
|
155
|
+
|
|
110
156
|
For each candidate, classify the relationship:
|
|
111
157
|
|
|
112
158
|
| Link Type | When to Use |
|
|
@@ -194,7 +240,9 @@ Skip this step only on UPDATE when no material change was made.
|
|
|
194
240
|
## Rules
|
|
195
241
|
|
|
196
242
|
- Never create a non-bug ticket without an epic parent.
|
|
197
|
-
- Never skip relationship discovery —
|
|
243
|
+
- Never skip relationship discovery — both the git history search AND the JQL search must run, and their outcomes must be recorded on the ticket. "None found" is acceptable only when it's documented.
|
|
244
|
+
- Never create a Bug, Task, or Sub-task that spans multiple repos. Split it before creating.
|
|
245
|
+
- Never include a runtime-behavior ticket without a target backend environment, and never include an authenticated-surface ticket without sign-in credentials in the description.
|
|
198
246
|
- Never invent custom field values. If the project requires a field you don't have, stop and ask.
|
|
199
247
|
- Never overwrite a description without reading the current version first.
|
|
200
248
|
- All writes go through this skill so best practices are enforced uniformly. Downstream skills (e.g. `jira-create`) should delegate here rather than calling the MCP write tools directly.
|
|
@@ -10,6 +10,22 @@ Perform analytical triage on the JIRA ticket. The caller MUST have run `jira-rea
|
|
|
10
10
|
|
|
11
11
|
Repository name for scoped labels and comment headers: determine via `basename $(git rev-parse --show-toplevel)`.
|
|
12
12
|
|
|
13
|
+
## Phase 0 -- Pre-flight Description Gate
|
|
14
|
+
|
|
15
|
+
Before any analytical work, confirm the ticket carries the content an implementer needs to start. The caller should already have run `jira-verify`; this phase consumes its output. If `jira-verify` returned `FAIL` for any of the following, emit `BLOCKED` immediately with the missing-requirements list and skip to Phase 6:
|
|
16
|
+
|
|
17
|
+
- Epic parent missing (non-bug, non-epic)
|
|
18
|
+
- Description quality failures (no Gherkin acceptance criteria, missing audience sections)
|
|
19
|
+
- Validation Journey missing on a runtime-behavior ticket
|
|
20
|
+
- Target backend environment missing on a runtime-behavior ticket
|
|
21
|
+
- Sign-in credentials missing on a ticket that touches authenticated surfaces
|
|
22
|
+
- Single-repo scope violated (Bug / Task / Sub-task spanning repos)
|
|
23
|
+
- Relationship discovery missing (no links AND no documented git+JQL search)
|
|
24
|
+
|
|
25
|
+
The caller (jira-agent) is responsible for transitioning the ticket to `Blocked`, reassigning to the **Reporter**, and posting a comment listing the missing requirements. This skill only emits the verdict and the missing-requirements list.
|
|
26
|
+
|
|
27
|
+
If `jira-verify` returned `PASS` for all the above, proceed to Phase 1.
|
|
28
|
+
|
|
13
29
|
## Phase 1 -- Relevance Check
|
|
14
30
|
|
|
15
31
|
Search the local codebase using Glob and Grep for code related to the ticket's subject matter:
|
|
@@ -123,7 +139,7 @@ Every verification method must be specific enough that an automated agent could
|
|
|
123
139
|
Evaluate the findings and produce exactly one verdict:
|
|
124
140
|
|
|
125
141
|
- **`NOT_RELEVANT`** -- No relevant code was found in this repository (Phase 1). The caller should add the triage label and skip implementation in this repo.
|
|
126
|
-
- **`BLOCKED`** -- Blocking conditions were found in Phase 1.5 (open blockers, duplicate-of-open) and/or
|
|
142
|
+
- **`BLOCKED`** -- Blocking conditions were found in Phase 0 (missing required description content), Phase 1.5 (open blockers, duplicate-of-open), and/or Phase 3 (ambiguities). Work MUST NOT proceed until resolved by a human. When the block is from Phase 0, the caller (jira-agent) MUST transition the ticket to `Blocked` and reassign to the Reporter — not just leave it in place. For Phase 1.5 / Phase 3 blocks, post findings, add the triage label, and STOP.
|
|
127
143
|
- **`PASSED_WITH_FINDINGS`** -- No ambiguities, but edge cases or verification findings were identified. Work can proceed. The caller should post findings and add the triage label.
|
|
128
144
|
- **`PASSED`** -- No ambiguities, edge cases, or verification gaps found. Work can proceed. The caller should add the triage label.
|
|
129
145
|
|
|
@@ -159,4 +175,5 @@ Structure all output with clear section headers so the caller can parse and post
|
|
|
159
175
|
The caller is responsible for:
|
|
160
176
|
1. Posting the findings as comments on the ticket (using whatever Jira mechanism is available)
|
|
161
177
|
2. Adding the `claude-triaged-{repo}` label to the ticket
|
|
162
|
-
3. If `BLOCKED
|
|
178
|
+
3. If `BLOCKED` due to Phase 0 (missing required description content): transitioning the ticket to `Blocked`, reassigning to the **Reporter**, posting a comment listing the missing requirements, and stopping all work.
|
|
179
|
+
4. If `BLOCKED` due to Phase 1.5 (open blockers, duplicate-of-open) or Phase 3 (ambiguities): stopping all work and reporting to the human; do NOT auto-transition status in these cases.
|