@codyswann/lisa 2.173.1 → 2.173.3

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.
Files changed (127) hide show
  1. package/package.json +1 -1
  2. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  3. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  4. package/plugins/lisa/agents/jira-agent.md +3 -2
  5. package/plugins/lisa/skills/jira-evidence/SKILL.md +3 -3
  6. package/plugins/lisa/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  7. package/plugins/lisa/skills/jira-sync/SKILL.md +1 -1
  8. package/plugins/lisa/skills/tracker-evidence/SKILL.md +1 -1
  9. package/plugins/lisa-agy/agents/jira-agent.md +3 -2
  10. package/plugins/lisa-agy/plugin.json +1 -1
  11. package/plugins/lisa-agy/skills/jira-evidence/SKILL.md +3 -3
  12. package/plugins/lisa-agy/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  13. package/plugins/lisa-agy/skills/jira-sync/SKILL.md +1 -1
  14. package/plugins/lisa-agy/skills/tracker-evidence/SKILL.md +1 -1
  15. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  17. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  18. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-copilot/agents/jira-agent.agent.md +3 -2
  22. package/plugins/lisa-copilot/skills/jira-evidence/SKILL.md +3 -3
  23. package/plugins/lisa-copilot/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  24. package/plugins/lisa-copilot/skills/jira-sync/SKILL.md +1 -1
  25. package/plugins/lisa-copilot/skills/tracker-evidence/SKILL.md +1 -1
  26. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-cursor/agents/jira-agent.md +3 -2
  28. package/plugins/lisa-cursor/skills/jira-evidence/SKILL.md +3 -3
  29. package/plugins/lisa-cursor/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  30. package/plugins/lisa-cursor/skills/jira-sync/SKILL.md +1 -1
  31. package/plugins/lisa-cursor/skills/tracker-evidence/SKILL.md +1 -1
  32. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  34. package/plugins/lisa-expo/commands/exploratory-qa.md +2 -2
  35. package/plugins/lisa-expo/skills/exploratory-qa/SKILL.md +16 -7
  36. package/plugins/lisa-expo/skills/jira-evidence/SKILL.md +2 -2
  37. package/plugins/lisa-expo/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  38. package/plugins/lisa-expo-agy/commands/exploratory-qa.md +2 -2
  39. package/plugins/lisa-expo-agy/plugin.json +1 -1
  40. package/plugins/lisa-expo-agy/skills/exploratory-qa/SKILL.md +16 -7
  41. package/plugins/lisa-expo-agy/skills/jira-evidence/SKILL.md +2 -2
  42. package/plugins/lisa-expo-agy/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  43. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-expo-copilot/commands/exploratory-qa.md +2 -2
  45. package/plugins/lisa-expo-copilot/skills/exploratory-qa/SKILL.md +16 -7
  46. package/plugins/lisa-expo-copilot/skills/jira-evidence/SKILL.md +2 -2
  47. package/plugins/lisa-expo-copilot/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  48. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-expo-cursor/commands/exploratory-qa.md +2 -2
  50. package/plugins/lisa-expo-cursor/skills/exploratory-qa/SKILL.md +16 -7
  51. package/plugins/lisa-expo-cursor/skills/jira-evidence/SKILL.md +2 -2
  52. package/plugins/lisa-expo-cursor/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  53. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  55. package/plugins/lisa-harper-fabric/commands/exploratory-qa.md +2 -2
  56. package/plugins/lisa-harper-fabric/skills/exploratory-qa/SKILL.md +16 -7
  57. package/plugins/lisa-harper-fabric-agy/commands/exploratory-qa.md +2 -2
  58. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  59. package/plugins/lisa-harper-fabric-agy/skills/exploratory-qa/SKILL.md +16 -7
  60. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-harper-fabric-copilot/commands/exploratory-qa.md +2 -2
  62. package/plugins/lisa-harper-fabric-copilot/skills/exploratory-qa/SKILL.md +16 -7
  63. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-harper-fabric-cursor/commands/exploratory-qa.md +2 -2
  65. package/plugins/lisa-harper-fabric-cursor/skills/exploratory-qa/SKILL.md +16 -7
  66. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  68. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  69. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  73. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  74. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  78. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  79. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  83. package/plugins/lisa-rails/commands/exploratory-qa.md +2 -2
  84. package/plugins/lisa-rails/skills/exploratory-qa/SKILL.md +16 -7
  85. package/plugins/lisa-rails/skills/jira-evidence/SKILL.md +2 -2
  86. package/plugins/lisa-rails/skills/jira-evidence/agents/openai.yaml +2 -2
  87. package/plugins/lisa-rails/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  88. package/plugins/lisa-rails-agy/commands/exploratory-qa.md +2 -2
  89. package/plugins/lisa-rails-agy/plugin.json +1 -1
  90. package/plugins/lisa-rails-agy/skills/exploratory-qa/SKILL.md +16 -7
  91. package/plugins/lisa-rails-agy/skills/jira-evidence/SKILL.md +2 -2
  92. package/plugins/lisa-rails-agy/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  93. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-rails-copilot/commands/exploratory-qa.md +2 -2
  95. package/plugins/lisa-rails-copilot/skills/exploratory-qa/SKILL.md +16 -7
  96. package/plugins/lisa-rails-copilot/skills/jira-evidence/SKILL.md +2 -2
  97. package/plugins/lisa-rails-copilot/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  98. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-rails-cursor/commands/exploratory-qa.md +2 -2
  100. package/plugins/lisa-rails-cursor/skills/exploratory-qa/SKILL.md +16 -7
  101. package/plugins/lisa-rails-cursor/skills/jira-evidence/SKILL.md +2 -2
  102. package/plugins/lisa-rails-cursor/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  103. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  104. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  105. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  106. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  107. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  108. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  109. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  110. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  111. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  112. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  113. package/plugins/src/base/agents/jira-agent.md +3 -2
  114. package/plugins/src/base/skills/jira-evidence/SKILL.md +3 -3
  115. package/plugins/src/base/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  116. package/plugins/src/base/skills/jira-sync/SKILL.md +1 -1
  117. package/plugins/src/base/skills/tracker-evidence/SKILL.md +1 -1
  118. package/plugins/src/expo/commands/exploratory-qa.md +2 -2
  119. package/plugins/src/expo/skills/exploratory-qa/SKILL.md +16 -7
  120. package/plugins/src/expo/skills/jira-evidence/SKILL.md +2 -2
  121. package/plugins/src/expo/skills/jira-evidence/scripts/post-evidence.sh +21 -4
  122. package/plugins/src/harper-fabric/commands/exploratory-qa.md +2 -2
  123. package/plugins/src/harper-fabric/skills/exploratory-qa/SKILL.md +16 -7
  124. package/plugins/src/rails/commands/exploratory-qa.md +2 -2
  125. package/plugins/src/rails/skills/exploratory-qa/SKILL.md +16 -7
  126. package/plugins/src/rails/skills/jira-evidence/SKILL.md +2 -2
  127. package/plugins/src/rails/skills/jira-evidence/scripts/post-evidence.sh +21 -4
package/package.json CHANGED
@@ -91,7 +91,7 @@
91
91
  "ws": ">=8.20.1"
92
92
  },
93
93
  "name": "@codyswann/lisa",
94
- "version": "2.173.1",
94
+ "version": "2.173.3",
95
95
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
96
96
  "main": "dist/index.js",
97
97
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.173.1",
3
+ "version": "2.173.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.173.1",
3
+ "version": "2.173.3",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -107,7 +107,7 @@ Use the `jira-sync` skill to update the ticket at these milestones:
107
107
  Use the `jira-evidence` skill to:
108
108
  - Upload verification evidence to the GitHub PR
109
109
  - Post evidence summary as a JIRA comment
110
- - Transition the ticket to Code Review
110
+ - Transition the ticket to the configured `jira.workflow.review` status **only if it is set**; if `review` is unconfigured, leave the ticket in `claimed` (do not transition).
111
111
 
112
112
  ### 8. Suggest Status Transition
113
113
 
@@ -116,7 +116,7 @@ Based on the milestone, suggest (but don't auto-transition). Status role names a
116
116
  | Milestone | Suggested role | Default status |
117
117
  |-----------|----------------|----------------|
118
118
  | Plan created | `claimed` | `In Progress` |
119
- | PR ready | (review-equivalent — project's code-review status) | `In Review` |
119
+ | PR ready | (review-equivalent — project's review status) | the configured `jira.workflow.review` status, or **no transition** when `review` is unconfigured |
120
120
  | PR merged | `done` (env-aware) | `Done` (or env-keyed variant per `jira.workflow.done`) |
121
121
 
122
122
  Note: `done` may be a string or an env-keyed map (`{ dev, staging, production }`). When suggesting the PR-merged transition, the env is implied by the PR's base branch via `deploy.branches` — surface the resolved status name to the human; do not auto-transition.
@@ -124,6 +124,7 @@ Note: `done` may be a string or an env-keyed map (`{ dev, staging, production }`
124
124
  ## Rules
125
125
 
126
126
  - Never auto-transition ticket status, with one explicit exception: when `jira-verify` returns `FAIL` for the pre-flight gate (Step 2), transition to the configured `blocked` status, add the configured `human_needed` marker label (`jira.labels.human_needed`, default `Human Needed`), and reassign to the Reporter. Every other status change remains a suggestion the human confirms.
127
+ - Any transition is config-bound: never invent transitions; a transition may target only a status named in `config.jira.workflow`. Don't guess from the live workflow. The evidence-time review hop (Step 7) follows this rule too — it is config-bound, optional, and skipped when `jira.workflow.review` is absent (the ticket stays in `claimed`).
127
128
  - Always read the full ticket graph via `jira-read-ticket` before determining intent — don't rely on ticket type alone
128
129
  - 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
129
130
  - 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.
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  name: jira-evidence
3
- description: "Upload text evidence to GitHub pr-assets release, update PR description, post JIRA comment with code blocks, and move ticket to the configured code-review status. Reusable by any skill that captures evidence and generates evidence/comment.txt + evidence/comment.md."
3
+ description: "Upload text evidence to GitHub pr-assets release, update PR description, post JIRA comment with code blocks, and move ticket to the configured review status only when `jira.workflow.review` is set (otherwise leave it in `claimed`). Reusable by any skill that captures evidence and generates evidence/comment.txt + evidence/comment.md."
4
4
  ---
5
5
 
6
6
  # JIRA Evidence Posting
7
7
 
8
8
  ## Workflow resolution
9
9
 
10
- The post-build review status is read from `.lisa.config.json` `jira.workflow.review` (or `jira.workflow.code_review`), falling back to `Code Review`. JIRA does not have a separate `review` role in the canonical config schema (the build lifecycle stays in `claimed` until `done`); this skill uses the project's actual post-build review status when one exists. If the configured status is not a valid transition from the ticket's current state, log a warning and skip the transition — the human will handle it.
10
+ The post-build review status is read from `.lisa.config.json` `jira.workflow.review` (or `jira.workflow.code_review`). `review` is optional; when unset, the ticket stays in `claimed` until `done` and this skill skips the transition. Never transition to a status that is not named in `config.jira.workflow`. If the configured status is not a valid transition from the current state, log a warning and skip.
11
11
 
12
12
  ```bash
13
- REVIEW="Code Review"
13
+ REVIEW=""
14
14
  if [ -f .lisa.config.json ]; then
15
15
  _cfg=$(jq -r '.jira.workflow.review // .jira.workflow.code_review // empty' .lisa.config.json 2>/dev/null)
16
16
  [ -n "$_cfg" ] && REVIEW="$_cfg"
@@ -14,7 +14,8 @@
14
14
  # 2. Updates the GitHub PR description with evidence/comment.md
15
15
  # 3. Uploads image evidence as JIRA attachments
16
16
  # 4. Posts/updates the JIRA comment with evidence/comment.txt
17
- # 5. Moves the JIRA ticket to "Code Review"
17
+ # 5. Moves the JIRA ticket to the configured jira.workflow.review status
18
+ # (skipped entirely when review is unconfigured — stays in claimed)
18
19
 
19
20
  set -euo pipefail
20
21
 
@@ -152,10 +153,26 @@ else
152
153
  echo "$RESP" | grep -v "HTTP_CODE:" | head -3
153
154
  fi
154
155
 
155
- # ── Step 5: Move ticket to Code Review ──────────────────────────────────────
156
+ # ── Step 5: Move ticket to the configured review status (if any) ────────────
157
+ # A transition may target only a status named in .lisa.config.json jira.workflow.
158
+ # `review` is OPTIONAL: when it is not configured, the build lifecycle stays in
159
+ # `claimed` until `done` — do NOT invent a transition. (See config-resolution.md.)
160
+ REVIEW=""
161
+ if [ -f .lisa.config.json ]; then
162
+ _cfg=$(jq -r '.jira.workflow.review // .jira.workflow.code_review // empty' .lisa.config.json 2>/dev/null)
163
+ [ -n "$_cfg" ] && REVIEW="$_cfg"
164
+ fi
165
+ if [ -f .lisa.config.local.json ]; then
166
+ _local=$(jq -r '.jira.workflow.review // .jira.workflow.code_review // empty' .lisa.config.local.json 2>/dev/null)
167
+ [ -n "$_local" ] && REVIEW="$_local"
168
+ fi
156
169
  echo ""
157
- echo "==> Moving $TICKET_ID to Code Review..."
158
- jira issue move "$TICKET_ID" "Code Review" 2>&1 && echo " ✓ Ticket moved to Code Review" || echo " WARNING: Could not move ticket" >&2
170
+ if [ -n "$REVIEW" ]; then
171
+ echo "==> Moving $TICKET_ID to $REVIEW..."
172
+ jira issue move "$TICKET_ID" "$REVIEW" 2>&1 && echo " ✓ Ticket moved to $REVIEW" || echo " WARNING: Could not move ticket to $REVIEW (not a valid transition?); leaving in current status" >&2
173
+ else
174
+ echo "==> No jira.workflow.review configured; leaving $TICKET_ID in its current (claimed) status per config-resolution."
175
+ fi
159
176
 
160
177
  echo ""
161
178
  echo "==> Done!"
@@ -67,7 +67,7 @@ Based on the milestone, suggest (but don't automatically perform) a status trans
67
67
  | Milestone | Suggested Status |
68
68
  |-----------|-----------------|
69
69
  | Plan created | "In Progress" |
70
- | PR ready | "In Review" |
70
+ | PR ready | configured `jira.workflow.review` status, or no transition when unconfigured |
71
71
  | PR merged | "Done" |
72
72
 
73
73
  ### Step 5: Parent Status Rollup (`--rollup`)
@@ -47,6 +47,6 @@ The checklist is tracker-agnostic — the same shape works on JIRA, GitHub Issue
47
47
  - **Feature/UX completion:** state plainly which acceptance criteria each screenshot covers, and call out any deferred or out-of-scope surface explicitly so QA/PM doesn't have to infer.
48
48
  6. **"What would help me confirm" (bug) / "How to QA" (feature) section.** Concrete actionable retest steps with the exact selection criteria (e.g., "pick a record whose Status column shows `—`, not `Processing` or `Pending Review`").
49
49
  7. **Explicit invitation to be corrected.** End with a line like *"If any of the steps I listed are different from what you expected / actually did, please tell me explicitly which step I got wrong."* Non-optional — small differences (which record, which device, exact tap order, expected behavior) change everything, and naming the door open short-circuits ticket bounce-loops.
50
- 8. **Workflow transition** is the vendor skill's job, not yours — it'll move the ticket per the configured tracker (JIRA: Reassign to reporter for bug repro / move to Awaiting QA for feature; GitHub: direct `claimed` → configured `done` after a successful build; Linear: equivalent state). You don't transition manually.
50
+ 8. **Workflow transition** is the vendor skill's job, not yours — it'll move the ticket per the configured tracker (JIRA: Reassign to reporter for bug repro / move to the configured review status when one exists, otherwise leave it in `claimed`; GitHub: direct `claimed` → configured `done` after a successful build; Linear: equivalent state). You don't transition manually.
51
51
 
52
52
  **Why this format:** It (a) gives the reporter a frame-by-frame they can compare against, (b) avoids the JIRA image-collapse failure mode while still working everywhere else, (c) names the most plausible discrepancies up front so the loop short-circuits, (d) explicitly opens the door to being corrected so tickets don't bounce on assumed alignment. The same mechanics that resolve a stuck bug ticket also give QA an unambiguous handoff for a freshly-built feature.
@@ -107,7 +107,7 @@ Use the `jira-sync` skill to update the ticket at these milestones:
107
107
  Use the `jira-evidence` skill to:
108
108
  - Upload verification evidence to the GitHub PR
109
109
  - Post evidence summary as a JIRA comment
110
- - Transition the ticket to Code Review
110
+ - Transition the ticket to the configured `jira.workflow.review` status **only if it is set**; if `review` is unconfigured, leave the ticket in `claimed` (do not transition).
111
111
 
112
112
  ### 8. Suggest Status Transition
113
113
 
@@ -116,7 +116,7 @@ Based on the milestone, suggest (but don't auto-transition). Status role names a
116
116
  | Milestone | Suggested role | Default status |
117
117
  |-----------|----------------|----------------|
118
118
  | Plan created | `claimed` | `In Progress` |
119
- | PR ready | (review-equivalent — project's code-review status) | `In Review` |
119
+ | PR ready | (review-equivalent — project's review status) | the configured `jira.workflow.review` status, or **no transition** when `review` is unconfigured |
120
120
  | PR merged | `done` (env-aware) | `Done` (or env-keyed variant per `jira.workflow.done`) |
121
121
 
122
122
  Note: `done` may be a string or an env-keyed map (`{ dev, staging, production }`). When suggesting the PR-merged transition, the env is implied by the PR's base branch via `deploy.branches` — surface the resolved status name to the human; do not auto-transition.
@@ -124,6 +124,7 @@ Note: `done` may be a string or an env-keyed map (`{ dev, staging, production }`
124
124
  ## Rules
125
125
 
126
126
  - Never auto-transition ticket status, with one explicit exception: when `jira-verify` returns `FAIL` for the pre-flight gate (Step 2), transition to the configured `blocked` status, add the configured `human_needed` marker label (`jira.labels.human_needed`, default `Human Needed`), and reassign to the Reporter. Every other status change remains a suggestion the human confirms.
127
+ - Any transition is config-bound: never invent transitions; a transition may target only a status named in `config.jira.workflow`. Don't guess from the live workflow. The evidence-time review hop (Step 7) follows this rule too — it is config-bound, optional, and skipped when `jira.workflow.review` is absent (the ticket stays in `claimed`).
127
128
  - Always read the full ticket graph via `jira-read-ticket` before determining intent — don't rely on ticket type alone
128
129
  - 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
129
130
  - 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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.173.1",
3
+ "version": "2.173.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  name: jira-evidence
3
- description: "Upload text evidence to GitHub pr-assets release, update PR description, post JIRA comment with code blocks, and move ticket to the configured code-review status. Reusable by any skill that captures evidence and generates evidence/comment.txt + evidence/comment.md."
3
+ description: "Upload text evidence to GitHub pr-assets release, update PR description, post JIRA comment with code blocks, and move ticket to the configured review status only when `jira.workflow.review` is set (otherwise leave it in `claimed`). Reusable by any skill that captures evidence and generates evidence/comment.txt + evidence/comment.md."
4
4
  ---
5
5
 
6
6
  # JIRA Evidence Posting
7
7
 
8
8
  ## Workflow resolution
9
9
 
10
- The post-build review status is read from `.lisa.config.json` `jira.workflow.review` (or `jira.workflow.code_review`), falling back to `Code Review`. JIRA does not have a separate `review` role in the canonical config schema (the build lifecycle stays in `claimed` until `done`); this skill uses the project's actual post-build review status when one exists. If the configured status is not a valid transition from the ticket's current state, log a warning and skip the transition — the human will handle it.
10
+ The post-build review status is read from `.lisa.config.json` `jira.workflow.review` (or `jira.workflow.code_review`). `review` is optional; when unset, the ticket stays in `claimed` until `done` and this skill skips the transition. Never transition to a status that is not named in `config.jira.workflow`. If the configured status is not a valid transition from the current state, log a warning and skip.
11
11
 
12
12
  ```bash
13
- REVIEW="Code Review"
13
+ REVIEW=""
14
14
  if [ -f .lisa.config.json ]; then
15
15
  _cfg=$(jq -r '.jira.workflow.review // .jira.workflow.code_review // empty' .lisa.config.json 2>/dev/null)
16
16
  [ -n "$_cfg" ] && REVIEW="$_cfg"
@@ -14,7 +14,8 @@
14
14
  # 2. Updates the GitHub PR description with evidence/comment.md
15
15
  # 3. Uploads image evidence as JIRA attachments
16
16
  # 4. Posts/updates the JIRA comment with evidence/comment.txt
17
- # 5. Moves the JIRA ticket to "Code Review"
17
+ # 5. Moves the JIRA ticket to the configured jira.workflow.review status
18
+ # (skipped entirely when review is unconfigured — stays in claimed)
18
19
 
19
20
  set -euo pipefail
20
21
 
@@ -152,10 +153,26 @@ else
152
153
  echo "$RESP" | grep -v "HTTP_CODE:" | head -3
153
154
  fi
154
155
 
155
- # ── Step 5: Move ticket to Code Review ──────────────────────────────────────
156
+ # ── Step 5: Move ticket to the configured review status (if any) ────────────
157
+ # A transition may target only a status named in .lisa.config.json jira.workflow.
158
+ # `review` is OPTIONAL: when it is not configured, the build lifecycle stays in
159
+ # `claimed` until `done` — do NOT invent a transition. (See config-resolution.md.)
160
+ REVIEW=""
161
+ if [ -f .lisa.config.json ]; then
162
+ _cfg=$(jq -r '.jira.workflow.review // .jira.workflow.code_review // empty' .lisa.config.json 2>/dev/null)
163
+ [ -n "$_cfg" ] && REVIEW="$_cfg"
164
+ fi
165
+ if [ -f .lisa.config.local.json ]; then
166
+ _local=$(jq -r '.jira.workflow.review // .jira.workflow.code_review // empty' .lisa.config.local.json 2>/dev/null)
167
+ [ -n "$_local" ] && REVIEW="$_local"
168
+ fi
156
169
  echo ""
157
- echo "==> Moving $TICKET_ID to Code Review..."
158
- jira issue move "$TICKET_ID" "Code Review" 2>&1 && echo " ✓ Ticket moved to Code Review" || echo " WARNING: Could not move ticket" >&2
170
+ if [ -n "$REVIEW" ]; then
171
+ echo "==> Moving $TICKET_ID to $REVIEW..."
172
+ jira issue move "$TICKET_ID" "$REVIEW" 2>&1 && echo " ✓ Ticket moved to $REVIEW" || echo " WARNING: Could not move ticket to $REVIEW (not a valid transition?); leaving in current status" >&2
173
+ else
174
+ echo "==> No jira.workflow.review configured; leaving $TICKET_ID in its current (claimed) status per config-resolution."
175
+ fi
159
176
 
160
177
  echo ""
161
178
  echo "==> Done!"
@@ -67,7 +67,7 @@ Based on the milestone, suggest (but don't automatically perform) a status trans
67
67
  | Milestone | Suggested Status |
68
68
  |-----------|-----------------|
69
69
  | Plan created | "In Progress" |
70
- | PR ready | "In Review" |
70
+ | PR ready | configured `jira.workflow.review` status, or no transition when unconfigured |
71
71
  | PR merged | "Done" |
72
72
 
73
73
  ### Step 5: Parent Status Rollup (`--rollup`)
@@ -47,6 +47,6 @@ The checklist is tracker-agnostic — the same shape works on JIRA, GitHub Issue
47
47
  - **Feature/UX completion:** state plainly which acceptance criteria each screenshot covers, and call out any deferred or out-of-scope surface explicitly so QA/PM doesn't have to infer.
48
48
  6. **"What would help me confirm" (bug) / "How to QA" (feature) section.** Concrete actionable retest steps with the exact selection criteria (e.g., "pick a record whose Status column shows `—`, not `Processing` or `Pending Review`").
49
49
  7. **Explicit invitation to be corrected.** End with a line like *"If any of the steps I listed are different from what you expected / actually did, please tell me explicitly which step I got wrong."* Non-optional — small differences (which record, which device, exact tap order, expected behavior) change everything, and naming the door open short-circuits ticket bounce-loops.
50
- 8. **Workflow transition** is the vendor skill's job, not yours — it'll move the ticket per the configured tracker (JIRA: Reassign to reporter for bug repro / move to Awaiting QA for feature; GitHub: direct `claimed` → configured `done` after a successful build; Linear: equivalent state). You don't transition manually.
50
+ 8. **Workflow transition** is the vendor skill's job, not yours — it'll move the ticket per the configured tracker (JIRA: Reassign to reporter for bug repro / move to the configured review status when one exists, otherwise leave it in `claimed`; GitHub: direct `claimed` → configured `done` after a successful build; Linear: equivalent state). You don't transition manually.
51
51
 
52
52
  **Why this format:** It (a) gives the reporter a frame-by-frame they can compare against, (b) avoids the JIRA image-collapse failure mode while still working everywhere else, (c) names the most plausible discrepancies up front so the loop short-circuits, (d) explicitly opens the door to being corrected so tickets don't bounce on assumed alignment. The same mechanics that resolve a stuck bug ticket also give QA an unambiguous handoff for a freshly-built feature.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.173.1",
3
+ "version": "2.173.3",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.173.1",
3
+ "version": "2.173.3",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.173.1",
3
+ "version": "2.173.3",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.173.1",
3
+ "version": "2.173.3",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.173.1",
3
+ "version": "2.173.3",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.173.1",
3
+ "version": "2.173.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -107,7 +107,7 @@ Use the `jira-sync` skill to update the ticket at these milestones:
107
107
  Use the `jira-evidence` skill to:
108
108
  - Upload verification evidence to the GitHub PR
109
109
  - Post evidence summary as a JIRA comment
110
- - Transition the ticket to Code Review
110
+ - Transition the ticket to the configured `jira.workflow.review` status **only if it is set**; if `review` is unconfigured, leave the ticket in `claimed` (do not transition).
111
111
 
112
112
  ### 8. Suggest Status Transition
113
113
 
@@ -116,7 +116,7 @@ Based on the milestone, suggest (but don't auto-transition). Status role names a
116
116
  | Milestone | Suggested role | Default status |
117
117
  |-----------|----------------|----------------|
118
118
  | Plan created | `claimed` | `In Progress` |
119
- | PR ready | (review-equivalent — project's code-review status) | `In Review` |
119
+ | PR ready | (review-equivalent — project's review status) | the configured `jira.workflow.review` status, or **no transition** when `review` is unconfigured |
120
120
  | PR merged | `done` (env-aware) | `Done` (or env-keyed variant per `jira.workflow.done`) |
121
121
 
122
122
  Note: `done` may be a string or an env-keyed map (`{ dev, staging, production }`). When suggesting the PR-merged transition, the env is implied by the PR's base branch via `deploy.branches` — surface the resolved status name to the human; do not auto-transition.
@@ -124,6 +124,7 @@ Note: `done` may be a string or an env-keyed map (`{ dev, staging, production }`
124
124
  ## Rules
125
125
 
126
126
  - Never auto-transition ticket status, with one explicit exception: when `jira-verify` returns `FAIL` for the pre-flight gate (Step 2), transition to the configured `blocked` status, add the configured `human_needed` marker label (`jira.labels.human_needed`, default `Human Needed`), and reassign to the Reporter. Every other status change remains a suggestion the human confirms.
127
+ - Any transition is config-bound: never invent transitions; a transition may target only a status named in `config.jira.workflow`. Don't guess from the live workflow. The evidence-time review hop (Step 7) follows this rule too — it is config-bound, optional, and skipped when `jira.workflow.review` is absent (the ticket stays in `claimed`).
127
128
  - Always read the full ticket graph via `jira-read-ticket` before determining intent — don't rely on ticket type alone
128
129
  - 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
129
130
  - 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.
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  name: jira-evidence
3
- description: "Upload text evidence to GitHub pr-assets release, update PR description, post JIRA comment with code blocks, and move ticket to the configured code-review status. Reusable by any skill that captures evidence and generates evidence/comment.txt + evidence/comment.md."
3
+ description: "Upload text evidence to GitHub pr-assets release, update PR description, post JIRA comment with code blocks, and move ticket to the configured review status only when `jira.workflow.review` is set (otherwise leave it in `claimed`). Reusable by any skill that captures evidence and generates evidence/comment.txt + evidence/comment.md."
4
4
  ---
5
5
 
6
6
  # JIRA Evidence Posting
7
7
 
8
8
  ## Workflow resolution
9
9
 
10
- The post-build review status is read from `.lisa.config.json` `jira.workflow.review` (or `jira.workflow.code_review`), falling back to `Code Review`. JIRA does not have a separate `review` role in the canonical config schema (the build lifecycle stays in `claimed` until `done`); this skill uses the project's actual post-build review status when one exists. If the configured status is not a valid transition from the ticket's current state, log a warning and skip the transition — the human will handle it.
10
+ The post-build review status is read from `.lisa.config.json` `jira.workflow.review` (or `jira.workflow.code_review`). `review` is optional; when unset, the ticket stays in `claimed` until `done` and this skill skips the transition. Never transition to a status that is not named in `config.jira.workflow`. If the configured status is not a valid transition from the current state, log a warning and skip.
11
11
 
12
12
  ```bash
13
- REVIEW="Code Review"
13
+ REVIEW=""
14
14
  if [ -f .lisa.config.json ]; then
15
15
  _cfg=$(jq -r '.jira.workflow.review // .jira.workflow.code_review // empty' .lisa.config.json 2>/dev/null)
16
16
  [ -n "$_cfg" ] && REVIEW="$_cfg"
@@ -14,7 +14,8 @@
14
14
  # 2. Updates the GitHub PR description with evidence/comment.md
15
15
  # 3. Uploads image evidence as JIRA attachments
16
16
  # 4. Posts/updates the JIRA comment with evidence/comment.txt
17
- # 5. Moves the JIRA ticket to "Code Review"
17
+ # 5. Moves the JIRA ticket to the configured jira.workflow.review status
18
+ # (skipped entirely when review is unconfigured — stays in claimed)
18
19
 
19
20
  set -euo pipefail
20
21
 
@@ -152,10 +153,26 @@ else
152
153
  echo "$RESP" | grep -v "HTTP_CODE:" | head -3
153
154
  fi
154
155
 
155
- # ── Step 5: Move ticket to Code Review ──────────────────────────────────────
156
+ # ── Step 5: Move ticket to the configured review status (if any) ────────────
157
+ # A transition may target only a status named in .lisa.config.json jira.workflow.
158
+ # `review` is OPTIONAL: when it is not configured, the build lifecycle stays in
159
+ # `claimed` until `done` — do NOT invent a transition. (See config-resolution.md.)
160
+ REVIEW=""
161
+ if [ -f .lisa.config.json ]; then
162
+ _cfg=$(jq -r '.jira.workflow.review // .jira.workflow.code_review // empty' .lisa.config.json 2>/dev/null)
163
+ [ -n "$_cfg" ] && REVIEW="$_cfg"
164
+ fi
165
+ if [ -f .lisa.config.local.json ]; then
166
+ _local=$(jq -r '.jira.workflow.review // .jira.workflow.code_review // empty' .lisa.config.local.json 2>/dev/null)
167
+ [ -n "$_local" ] && REVIEW="$_local"
168
+ fi
156
169
  echo ""
157
- echo "==> Moving $TICKET_ID to Code Review..."
158
- jira issue move "$TICKET_ID" "Code Review" 2>&1 && echo " ✓ Ticket moved to Code Review" || echo " WARNING: Could not move ticket" >&2
170
+ if [ -n "$REVIEW" ]; then
171
+ echo "==> Moving $TICKET_ID to $REVIEW..."
172
+ jira issue move "$TICKET_ID" "$REVIEW" 2>&1 && echo " ✓ Ticket moved to $REVIEW" || echo " WARNING: Could not move ticket to $REVIEW (not a valid transition?); leaving in current status" >&2
173
+ else
174
+ echo "==> No jira.workflow.review configured; leaving $TICKET_ID in its current (claimed) status per config-resolution."
175
+ fi
159
176
 
160
177
  echo ""
161
178
  echo "==> Done!"
@@ -67,7 +67,7 @@ Based on the milestone, suggest (but don't automatically perform) a status trans
67
67
  | Milestone | Suggested Status |
68
68
  |-----------|-----------------|
69
69
  | Plan created | "In Progress" |
70
- | PR ready | "In Review" |
70
+ | PR ready | configured `jira.workflow.review` status, or no transition when unconfigured |
71
71
  | PR merged | "Done" |
72
72
 
73
73
  ### Step 5: Parent Status Rollup (`--rollup`)
@@ -47,6 +47,6 @@ The checklist is tracker-agnostic — the same shape works on JIRA, GitHub Issue
47
47
  - **Feature/UX completion:** state plainly which acceptance criteria each screenshot covers, and call out any deferred or out-of-scope surface explicitly so QA/PM doesn't have to infer.
48
48
  6. **"What would help me confirm" (bug) / "How to QA" (feature) section.** Concrete actionable retest steps with the exact selection criteria (e.g., "pick a record whose Status column shows `—`, not `Processing` or `Pending Review`").
49
49
  7. **Explicit invitation to be corrected.** End with a line like *"If any of the steps I listed are different from what you expected / actually did, please tell me explicitly which step I got wrong."* Non-optional — small differences (which record, which device, exact tap order, expected behavior) change everything, and naming the door open short-circuits ticket bounce-loops.
50
- 8. **Workflow transition** is the vendor skill's job, not yours — it'll move the ticket per the configured tracker (JIRA: Reassign to reporter for bug repro / move to Awaiting QA for feature; GitHub: direct `claimed` → configured `done` after a successful build; Linear: equivalent state). You don't transition manually.
50
+ 8. **Workflow transition** is the vendor skill's job, not yours — it'll move the ticket per the configured tracker (JIRA: Reassign to reporter for bug repro / move to the configured review status when one exists, otherwise leave it in `claimed`; GitHub: direct `claimed` → configured `done` after a successful build; Linear: equivalent state). You don't transition manually.
51
51
 
52
52
  **Why this format:** It (a) gives the reporter a frame-by-frame they can compare against, (b) avoids the JIRA image-collapse failure mode while still working everywhere else, (c) names the most plausible discrepancies up front so the loop short-circuits, (d) explicitly opens the door to being corrected so tickets don't bounce on assumed alignment. The same mechanics that resolve a stuck bug ticket also give QA an unambiguous handoff for a freshly-built feature.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.173.1",
3
+ "version": "2.173.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -107,7 +107,7 @@ Use the `jira-sync` skill to update the ticket at these milestones:
107
107
  Use the `jira-evidence` skill to:
108
108
  - Upload verification evidence to the GitHub PR
109
109
  - Post evidence summary as a JIRA comment
110
- - Transition the ticket to Code Review
110
+ - Transition the ticket to the configured `jira.workflow.review` status **only if it is set**; if `review` is unconfigured, leave the ticket in `claimed` (do not transition).
111
111
 
112
112
  ### 8. Suggest Status Transition
113
113
 
@@ -116,7 +116,7 @@ Based on the milestone, suggest (but don't auto-transition). Status role names a
116
116
  | Milestone | Suggested role | Default status |
117
117
  |-----------|----------------|----------------|
118
118
  | Plan created | `claimed` | `In Progress` |
119
- | PR ready | (review-equivalent — project's code-review status) | `In Review` |
119
+ | PR ready | (review-equivalent — project's review status) | the configured `jira.workflow.review` status, or **no transition** when `review` is unconfigured |
120
120
  | PR merged | `done` (env-aware) | `Done` (or env-keyed variant per `jira.workflow.done`) |
121
121
 
122
122
  Note: `done` may be a string or an env-keyed map (`{ dev, staging, production }`). When suggesting the PR-merged transition, the env is implied by the PR's base branch via `deploy.branches` — surface the resolved status name to the human; do not auto-transition.
@@ -124,6 +124,7 @@ Note: `done` may be a string or an env-keyed map (`{ dev, staging, production }`
124
124
  ## Rules
125
125
 
126
126
  - Never auto-transition ticket status, with one explicit exception: when `jira-verify` returns `FAIL` for the pre-flight gate (Step 2), transition to the configured `blocked` status, add the configured `human_needed` marker label (`jira.labels.human_needed`, default `Human Needed`), and reassign to the Reporter. Every other status change remains a suggestion the human confirms.
127
+ - Any transition is config-bound: never invent transitions; a transition may target only a status named in `config.jira.workflow`. Don't guess from the live workflow. The evidence-time review hop (Step 7) follows this rule too — it is config-bound, optional, and skipped when `jira.workflow.review` is absent (the ticket stays in `claimed`).
127
128
  - Always read the full ticket graph via `jira-read-ticket` before determining intent — don't rely on ticket type alone
128
129
  - 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
129
130
  - 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.
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  name: jira-evidence
3
- description: "Upload text evidence to GitHub pr-assets release, update PR description, post JIRA comment with code blocks, and move ticket to the configured code-review status. Reusable by any skill that captures evidence and generates evidence/comment.txt + evidence/comment.md."
3
+ description: "Upload text evidence to GitHub pr-assets release, update PR description, post JIRA comment with code blocks, and move ticket to the configured review status only when `jira.workflow.review` is set (otherwise leave it in `claimed`). Reusable by any skill that captures evidence and generates evidence/comment.txt + evidence/comment.md."
4
4
  ---
5
5
 
6
6
  # JIRA Evidence Posting
7
7
 
8
8
  ## Workflow resolution
9
9
 
10
- The post-build review status is read from `.lisa.config.json` `jira.workflow.review` (or `jira.workflow.code_review`), falling back to `Code Review`. JIRA does not have a separate `review` role in the canonical config schema (the build lifecycle stays in `claimed` until `done`); this skill uses the project's actual post-build review status when one exists. If the configured status is not a valid transition from the ticket's current state, log a warning and skip the transition — the human will handle it.
10
+ The post-build review status is read from `.lisa.config.json` `jira.workflow.review` (or `jira.workflow.code_review`). `review` is optional; when unset, the ticket stays in `claimed` until `done` and this skill skips the transition. Never transition to a status that is not named in `config.jira.workflow`. If the configured status is not a valid transition from the current state, log a warning and skip.
11
11
 
12
12
  ```bash
13
- REVIEW="Code Review"
13
+ REVIEW=""
14
14
  if [ -f .lisa.config.json ]; then
15
15
  _cfg=$(jq -r '.jira.workflow.review // .jira.workflow.code_review // empty' .lisa.config.json 2>/dev/null)
16
16
  [ -n "$_cfg" ] && REVIEW="$_cfg"
@@ -14,7 +14,8 @@
14
14
  # 2. Updates the GitHub PR description with evidence/comment.md
15
15
  # 3. Uploads image evidence as JIRA attachments
16
16
  # 4. Posts/updates the JIRA comment with evidence/comment.txt
17
- # 5. Moves the JIRA ticket to "Code Review"
17
+ # 5. Moves the JIRA ticket to the configured jira.workflow.review status
18
+ # (skipped entirely when review is unconfigured — stays in claimed)
18
19
 
19
20
  set -euo pipefail
20
21
 
@@ -152,10 +153,26 @@ else
152
153
  echo "$RESP" | grep -v "HTTP_CODE:" | head -3
153
154
  fi
154
155
 
155
- # ── Step 5: Move ticket to Code Review ──────────────────────────────────────
156
+ # ── Step 5: Move ticket to the configured review status (if any) ────────────
157
+ # A transition may target only a status named in .lisa.config.json jira.workflow.
158
+ # `review` is OPTIONAL: when it is not configured, the build lifecycle stays in
159
+ # `claimed` until `done` — do NOT invent a transition. (See config-resolution.md.)
160
+ REVIEW=""
161
+ if [ -f .lisa.config.json ]; then
162
+ _cfg=$(jq -r '.jira.workflow.review // .jira.workflow.code_review // empty' .lisa.config.json 2>/dev/null)
163
+ [ -n "$_cfg" ] && REVIEW="$_cfg"
164
+ fi
165
+ if [ -f .lisa.config.local.json ]; then
166
+ _local=$(jq -r '.jira.workflow.review // .jira.workflow.code_review // empty' .lisa.config.local.json 2>/dev/null)
167
+ [ -n "$_local" ] && REVIEW="$_local"
168
+ fi
156
169
  echo ""
157
- echo "==> Moving $TICKET_ID to Code Review..."
158
- jira issue move "$TICKET_ID" "Code Review" 2>&1 && echo " ✓ Ticket moved to Code Review" || echo " WARNING: Could not move ticket" >&2
170
+ if [ -n "$REVIEW" ]; then
171
+ echo "==> Moving $TICKET_ID to $REVIEW..."
172
+ jira issue move "$TICKET_ID" "$REVIEW" 2>&1 && echo " ✓ Ticket moved to $REVIEW" || echo " WARNING: Could not move ticket to $REVIEW (not a valid transition?); leaving in current status" >&2
173
+ else
174
+ echo "==> No jira.workflow.review configured; leaving $TICKET_ID in its current (claimed) status per config-resolution."
175
+ fi
159
176
 
160
177
  echo ""
161
178
  echo "==> Done!"
@@ -67,7 +67,7 @@ Based on the milestone, suggest (but don't automatically perform) a status trans
67
67
  | Milestone | Suggested Status |
68
68
  |-----------|-----------------|
69
69
  | Plan created | "In Progress" |
70
- | PR ready | "In Review" |
70
+ | PR ready | configured `jira.workflow.review` status, or no transition when unconfigured |
71
71
  | PR merged | "Done" |
72
72
 
73
73
  ### Step 5: Parent Status Rollup (`--rollup`)
@@ -47,6 +47,6 @@ The checklist is tracker-agnostic — the same shape works on JIRA, GitHub Issue
47
47
  - **Feature/UX completion:** state plainly which acceptance criteria each screenshot covers, and call out any deferred or out-of-scope surface explicitly so QA/PM doesn't have to infer.
48
48
  6. **"What would help me confirm" (bug) / "How to QA" (feature) section.** Concrete actionable retest steps with the exact selection criteria (e.g., "pick a record whose Status column shows `—`, not `Processing` or `Pending Review`").
49
49
  7. **Explicit invitation to be corrected.** End with a line like *"If any of the steps I listed are different from what you expected / actually did, please tell me explicitly which step I got wrong."* Non-optional — small differences (which record, which device, exact tap order, expected behavior) change everything, and naming the door open short-circuits ticket bounce-loops.
50
- 8. **Workflow transition** is the vendor skill's job, not yours — it'll move the ticket per the configured tracker (JIRA: Reassign to reporter for bug repro / move to Awaiting QA for feature; GitHub: direct `claimed` → configured `done` after a successful build; Linear: equivalent state). You don't transition manually.
50
+ 8. **Workflow transition** is the vendor skill's job, not yours — it'll move the ticket per the configured tracker (JIRA: Reassign to reporter for bug repro / move to the configured review status when one exists, otherwise leave it in `claimed`; GitHub: direct `claimed` → configured `done` after a successful build; Linear: equivalent state). You don't transition manually.
51
51
 
52
52
  **Why this format:** It (a) gives the reporter a frame-by-frame they can compare against, (b) avoids the JIRA image-collapse failure mode while still working everywhere else, (c) names the most plausible discrepancies up front so the loop short-circuits, (d) explicitly opens the door to being corrected so tickets don't bounce on assumed alignment. The same mechanics that resolve a stuck bug ticket also give QA an unambiguous handoff for a freshly-built feature.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.173.1",
3
+ "version": "2.173.3",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.173.1",
3
+ "version": "2.173.3",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,7 +1,7 @@
1
1
  ---
2
- description: "Run a first-time-user exploratory QA walkthrough: experience the app like a brand-new human user, clicking through to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent UX, awkward scroll behavior) across all breakpoints, and file each finding (bug or usability issue) as a tracked work item via lisa:tracker-write. The optional ready flag marks tickets build-ready (auto-picked-up by lisa:intake) or leaves them in the backlog for human triage (default). For gaps in the automated Playwright suite, use e2e-coverage-gaps instead."
2
+ description: "Run a first-time-user exploratory QA walkthrough: experience the app like a brand-new human user in a real browser or browser automation session, clicking/typing/selecting through visible controls to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent UX, awkward scroll behavior) across all breakpoints, and file each finding (bug or usability issue) as a tracked work item via lisa:tracker-write. Static scans, HTTP fetches, screenshots alone, or console/network checks alone are not sufficient. The optional ready flag marks tickets build-ready (auto-picked-up by lisa:intake) or leaves them in the backlog for human triage (default). For gaps in the automated Playwright suite, use e2e-coverage-gaps instead."
3
3
  allowed-tools: ["Skill"]
4
4
  argument-hint: "[target-url | env] [ready=true|false]"
5
5
  ---
6
6
 
7
- Use the /lisa-expo:exploratory-qa skill to experience the app like a brand-new first-time user — landing cold on the home page and clicking through to find anything confusing, broken, or hard to understand across all breakpoints — and file each finding (bugs, usability/clarity issues) as a tracked work item via lisa:tracker-write, build-ready or in triage per the ready flag (default: triage). For automated Playwright coverage gaps, use /lisa-expo:e2e-coverage-gaps. $ARGUMENTS
7
+ Use the /lisa-expo:exploratory-qa skill to experience the app like a brand-new first-time user in a real browser or browser automation session — landing cold on the home page, clicking/typing/selecting through visible controls, and verifying resulting UI state across all breakpoints — and file each finding (bugs, usability/clarity issues) as a tracked work item via lisa:tracker-write, build-ready or in triage per the ready flag (default: triage). Static scans, HTTP fetches, screenshots alone, or console/network checks alone are not enough. For automated Playwright coverage gaps, use /lisa-expo:e2e-coverage-gaps. $ARGUMENTS