@codyswann/lisa 2.222.3 → 2.223.1

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 (179) 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/.codex-plugin/skills/lisa-github-add-journey/SKILL.md +9 -7
  5. package/plugins/lisa/.codex-plugin/skills/lisa-github-create/SKILL.md +2 -0
  6. package/plugins/lisa/.codex-plugin/skills/lisa-github-journey/SKILL.md +2 -0
  7. package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +3 -1
  8. package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/SKILL.md +3 -1
  9. package/plugins/lisa/.codex-plugin/skills/lisa-jira-add-journey/SKILL.md +8 -5
  10. package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/SKILL.md +1 -0
  11. package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/SKILL.md +2 -0
  12. package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/generate-templates.py +8 -2
  13. package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/parse-plan.py +9 -3
  14. package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +3 -1
  15. package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/SKILL.md +3 -1
  16. package/plugins/lisa/.codex-plugin/skills/lisa-linear-add-journey/SKILL.md +7 -6
  17. package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/SKILL.md +2 -0
  18. package/plugins/lisa/.codex-plugin/skills/lisa-linear-journey/SKILL.md +2 -0
  19. package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +3 -1
  20. package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +3 -1
  21. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-add-journey/SKILL.md +2 -1
  22. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/SKILL.md +1 -0
  23. package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/SKILL.md +2 -0
  24. package/plugins/lisa/rules/eager/verification.md +1 -1
  25. package/plugins/lisa/rules/reference/verification.md +12 -0
  26. package/plugins/lisa/skills/lisa-github-add-journey/SKILL.md +9 -7
  27. package/plugins/lisa/skills/lisa-github-create/SKILL.md +2 -0
  28. package/plugins/lisa/skills/lisa-github-journey/SKILL.md +2 -0
  29. package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +3 -1
  30. package/plugins/lisa/skills/lisa-github-write-issue/SKILL.md +3 -1
  31. package/plugins/lisa/skills/lisa-jira-add-journey/SKILL.md +8 -5
  32. package/plugins/lisa/skills/lisa-jira-create/SKILL.md +1 -0
  33. package/plugins/lisa/skills/lisa-jira-journey/SKILL.md +2 -0
  34. package/plugins/lisa/skills/lisa-jira-journey/scripts/generate-templates.py +8 -2
  35. package/plugins/lisa/skills/lisa-jira-journey/scripts/parse-plan.py +9 -3
  36. package/plugins/lisa/skills/lisa-jira-validate-ticket/SKILL.md +3 -1
  37. package/plugins/lisa/skills/lisa-jira-write-ticket/SKILL.md +3 -1
  38. package/plugins/lisa/skills/lisa-linear-add-journey/SKILL.md +7 -6
  39. package/plugins/lisa/skills/lisa-linear-create/SKILL.md +2 -0
  40. package/plugins/lisa/skills/lisa-linear-journey/SKILL.md +2 -0
  41. package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +3 -1
  42. package/plugins/lisa/skills/lisa-linear-write-issue/SKILL.md +3 -1
  43. package/plugins/lisa/skills/lisa-tracker-add-journey/SKILL.md +2 -1
  44. package/plugins/lisa/skills/lisa-tracker-evidence/SKILL.md +1 -0
  45. package/plugins/lisa/skills/lisa-verification-lifecycle/SKILL.md +2 -0
  46. package/plugins/lisa-agy/plugin.json +1 -1
  47. package/plugins/lisa-agy/skills/lisa-github-add-journey/SKILL.md +9 -7
  48. package/plugins/lisa-agy/skills/lisa-github-create/SKILL.md +2 -0
  49. package/plugins/lisa-agy/skills/lisa-github-journey/SKILL.md +2 -0
  50. package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +3 -1
  51. package/plugins/lisa-agy/skills/lisa-github-write-issue/SKILL.md +3 -1
  52. package/plugins/lisa-agy/skills/lisa-jira-add-journey/SKILL.md +8 -5
  53. package/plugins/lisa-agy/skills/lisa-jira-create/SKILL.md +1 -0
  54. package/plugins/lisa-agy/skills/lisa-jira-journey/SKILL.md +2 -0
  55. package/plugins/lisa-agy/skills/lisa-jira-journey/scripts/generate-templates.py +8 -2
  56. package/plugins/lisa-agy/skills/lisa-jira-journey/scripts/parse-plan.py +9 -3
  57. package/plugins/lisa-agy/skills/lisa-jira-validate-ticket/SKILL.md +3 -1
  58. package/plugins/lisa-agy/skills/lisa-jira-write-ticket/SKILL.md +3 -1
  59. package/plugins/lisa-agy/skills/lisa-linear-add-journey/SKILL.md +7 -6
  60. package/plugins/lisa-agy/skills/lisa-linear-create/SKILL.md +2 -0
  61. package/plugins/lisa-agy/skills/lisa-linear-journey/SKILL.md +2 -0
  62. package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +3 -1
  63. package/plugins/lisa-agy/skills/lisa-linear-write-issue/SKILL.md +3 -1
  64. package/plugins/lisa-agy/skills/lisa-tracker-add-journey/SKILL.md +2 -1
  65. package/plugins/lisa-agy/skills/lisa-tracker-evidence/SKILL.md +1 -0
  66. package/plugins/lisa-agy/skills/lisa-verification-lifecycle/SKILL.md +2 -0
  67. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  69. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  70. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-copilot/rules/eager/verification.md +1 -1
  74. package/plugins/lisa-copilot/rules/reference/verification.md +12 -0
  75. package/plugins/lisa-copilot/skills/lisa-github-add-journey/SKILL.md +9 -7
  76. package/plugins/lisa-copilot/skills/lisa-github-create/SKILL.md +2 -0
  77. package/plugins/lisa-copilot/skills/lisa-github-journey/SKILL.md +2 -0
  78. package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +3 -1
  79. package/plugins/lisa-copilot/skills/lisa-github-write-issue/SKILL.md +3 -1
  80. package/plugins/lisa-copilot/skills/lisa-jira-add-journey/SKILL.md +8 -5
  81. package/plugins/lisa-copilot/skills/lisa-jira-create/SKILL.md +1 -0
  82. package/plugins/lisa-copilot/skills/lisa-jira-journey/SKILL.md +2 -0
  83. package/plugins/lisa-copilot/skills/lisa-jira-journey/scripts/generate-templates.py +8 -2
  84. package/plugins/lisa-copilot/skills/lisa-jira-journey/scripts/parse-plan.py +9 -3
  85. package/plugins/lisa-copilot/skills/lisa-jira-validate-ticket/SKILL.md +3 -1
  86. package/plugins/lisa-copilot/skills/lisa-jira-write-ticket/SKILL.md +3 -1
  87. package/plugins/lisa-copilot/skills/lisa-linear-add-journey/SKILL.md +7 -6
  88. package/plugins/lisa-copilot/skills/lisa-linear-create/SKILL.md +2 -0
  89. package/plugins/lisa-copilot/skills/lisa-linear-journey/SKILL.md +2 -0
  90. package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +3 -1
  91. package/plugins/lisa-copilot/skills/lisa-linear-write-issue/SKILL.md +3 -1
  92. package/plugins/lisa-copilot/skills/lisa-tracker-add-journey/SKILL.md +2 -1
  93. package/plugins/lisa-copilot/skills/lisa-tracker-evidence/SKILL.md +1 -0
  94. package/plugins/lisa-copilot/skills/lisa-verification-lifecycle/SKILL.md +2 -0
  95. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  96. package/plugins/lisa-cursor/rules/verification-reference.mdc +12 -0
  97. package/plugins/lisa-cursor/rules/verification.mdc +1 -1
  98. package/plugins/lisa-cursor/skills/lisa-github-add-journey/SKILL.md +9 -7
  99. package/plugins/lisa-cursor/skills/lisa-github-create/SKILL.md +2 -0
  100. package/plugins/lisa-cursor/skills/lisa-github-journey/SKILL.md +2 -0
  101. package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +3 -1
  102. package/plugins/lisa-cursor/skills/lisa-github-write-issue/SKILL.md +3 -1
  103. package/plugins/lisa-cursor/skills/lisa-jira-add-journey/SKILL.md +8 -5
  104. package/plugins/lisa-cursor/skills/lisa-jira-create/SKILL.md +1 -0
  105. package/plugins/lisa-cursor/skills/lisa-jira-journey/SKILL.md +2 -0
  106. package/plugins/lisa-cursor/skills/lisa-jira-journey/scripts/generate-templates.py +8 -2
  107. package/plugins/lisa-cursor/skills/lisa-jira-journey/scripts/parse-plan.py +9 -3
  108. package/plugins/lisa-cursor/skills/lisa-jira-validate-ticket/SKILL.md +3 -1
  109. package/plugins/lisa-cursor/skills/lisa-jira-write-ticket/SKILL.md +3 -1
  110. package/plugins/lisa-cursor/skills/lisa-linear-add-journey/SKILL.md +7 -6
  111. package/plugins/lisa-cursor/skills/lisa-linear-create/SKILL.md +2 -0
  112. package/plugins/lisa-cursor/skills/lisa-linear-journey/SKILL.md +2 -0
  113. package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +3 -1
  114. package/plugins/lisa-cursor/skills/lisa-linear-write-issue/SKILL.md +3 -1
  115. package/plugins/lisa-cursor/skills/lisa-tracker-add-journey/SKILL.md +2 -1
  116. package/plugins/lisa-cursor/skills/lisa-tracker-evidence/SKILL.md +1 -0
  117. package/plugins/lisa-cursor/skills/lisa-verification-lifecycle/SKILL.md +2 -0
  118. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  119. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  120. package/plugins/lisa-expo-agy/plugin.json +1 -1
  121. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  122. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  123. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  124. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  125. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  126. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  127. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  128. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  129. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  130. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  131. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  132. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  133. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  134. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  135. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  136. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  137. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  138. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  139. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  140. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  141. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  142. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  143. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  144. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  145. package/plugins/lisa-rails-agy/plugin.json +1 -1
  146. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  147. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  148. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  149. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  150. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  151. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  152. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  153. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  154. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  155. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  156. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  157. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  158. package/plugins/src/base/rules/eager/verification.md +1 -1
  159. package/plugins/src/base/rules/reference/verification.md +12 -0
  160. package/plugins/src/base/skills/lisa-github-add-journey/SKILL.md +9 -7
  161. package/plugins/src/base/skills/lisa-github-create/SKILL.md +2 -0
  162. package/plugins/src/base/skills/lisa-github-journey/SKILL.md +2 -0
  163. package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +3 -1
  164. package/plugins/src/base/skills/lisa-github-write-issue/SKILL.md +3 -1
  165. package/plugins/src/base/skills/lisa-jira-add-journey/SKILL.md +8 -5
  166. package/plugins/src/base/skills/lisa-jira-create/SKILL.md +1 -0
  167. package/plugins/src/base/skills/lisa-jira-journey/SKILL.md +2 -0
  168. package/plugins/src/base/skills/lisa-jira-journey/scripts/generate-templates.py +8 -2
  169. package/plugins/src/base/skills/lisa-jira-journey/scripts/parse-plan.py +9 -3
  170. package/plugins/src/base/skills/lisa-jira-validate-ticket/SKILL.md +3 -1
  171. package/plugins/src/base/skills/lisa-jira-write-ticket/SKILL.md +3 -1
  172. package/plugins/src/base/skills/lisa-linear-add-journey/SKILL.md +7 -6
  173. package/plugins/src/base/skills/lisa-linear-create/SKILL.md +2 -0
  174. package/plugins/src/base/skills/lisa-linear-journey/SKILL.md +2 -0
  175. package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +3 -1
  176. package/plugins/src/base/skills/lisa-linear-write-issue/SKILL.md +3 -1
  177. package/plugins/src/base/skills/lisa-tracker-add-journey/SKILL.md +2 -1
  178. package/plugins/src/base/skills/lisa-tracker-evidence/SKILL.md +1 -0
  179. package/plugins/src/base/skills/lisa-verification-lifecycle/SKILL.md +2 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.222.3",
3
+ "version": "2.223.1",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -15,7 +15,7 @@
15
15
  - **After verifying empirically, codify it as a regression test** via the `codify-verification` skill — Playwright for UI, integration test for API/DB/auth, benchmark for performance. Codification is mandatory for every verification type except PR/Documentation/Deploy and Investigate-Only spikes. For **frontend work**, codification is dual-runner: a Playwright spec in the project's Playwright test runner AND a Maestro flow in the Maestro test runner whenever the project supports Maestro (`.maestro/` directory, `maestro:test` script, or Maestro CI workflow) — both encoding the same verified journey, neither a substitute for the other.
16
16
  - **The codified proof re-runs in CI.** Codified runtime verification lives where the project's e2e/Playwright tests live (`tests/e2e/**`) and runs as a required CI check for types with verification enforced — so the proof re-runs on every PR, not once by hand.
17
17
  - **Commit the evidence.** Write a durable artifact to `evidence/<ticket>/` — the acceptance criteria with per-criterion pass/fail + note, the observed state, screenshots/recording, and a `verdict.json`. The transient `.lisa/verification-status.json` is the session gate; `evidence/<ticket>/` is the committed proof.
18
- - **Evidence markers are typed artifacts, not assertion labels.** A Validation Journey marker is `[EVIDENCE: <artifact-type>: <name>]` where the type (screenshot, recording, http-transcript, cli-output, log-snippet, db-query-output, perf-trace, test-run-log, deploy-log, state-dump) says HOW the proof is captured and the name says WHAT it proves. `[EVIDENCE: works-gracefully]` is a claim, not evidence — write `[EVIDENCE: screenshot: load-failure-error-state]`. Completion requires a captured artifact **of the declared type** per marker.
18
+ - **Evidence markers are typed artifacts, not assertion labels.** A Validation Journey marker is `[EVIDENCE: <artifact-type>: <name>]` where the type (screenshot, recording, http-transcript, cli-output, log-snippet, db-query-output, perf-trace, test-run-log, deploy-log, state-dump) says HOW the proof is captured and the name says WHAT it proves. `[EVIDENCE: works-gracefully]` is a claim, not evidence — write `[EVIDENCE: screenshot: load-failure-error-state]`. Completion requires a captured artifact **of the declared type** per marker. To cite another work item's artifact without claiming it, use `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]`. A reference never enters or satisfies the local S14 manifest; malformed references fail S14, and agents must not quote sibling `[EVIDENCE: ...]` markers directly.
19
19
  - **Per-change verification is mandatory.** Every `feat`/`fix` adds or extends a verification (e2e) spec mapped to its acceptance criteria. The only exception is a genuinely non-behavioral change explicitly marked with the **logged** `verification-exempt` label — never a silent skip.
20
20
  - **Drive the playthrough with `/lisa:product-walkthrough`** (it walks the live product through a real browser); each project type plugs in its own drive mechanism (e.g. a Phaser game is driven through Playwright + an in-game verification test bridge that seeds RNG, reads state, injects input, and steps frames).
21
21
  - **Every PR must include reviewer replay steps** — the exact human steps to use the software and confirm the change works. Not test commands. If a reviewer can't reproduce from the PR description alone, the PR is incomplete.
@@ -149,6 +149,18 @@ Do not invent types inline; if none fits, propose extending this table. The lega
149
149
 
150
150
  The manifest is the single source of truth for "what evidence is required": authored once in the Validation Journey, enforced at write time, replayed during `tracker-journey` (which captures each artifact **in its declared type**), and checked again before the ticket closes. There is no second list to keep in sync.
151
151
 
152
+ ### Cross-work-item evidence references are non-claiming
153
+
154
+ When prose needs to point at evidence declared by another work item, use the dedicated reference form:
155
+
156
+ ```text
157
+ [EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]
158
+ ```
159
+
160
+ For example, `[EVIDENCE-REF: CodySwannGT/lisa#1548 | test-run-log: plugin-parity]` or `[EVIDENCE-REF: ENG-123 | screenshot: empty-state]`. The work-item reference must be a native, unambiguous tracker reference; the artifact type and name use the same taxonomy and kebab-case grammar as a manifest marker.
161
+
162
+ `EVIDENCE-REF` is a pointer only. It never adds an artifact to the current work item's manifest, never satisfies S14, never participates in marker-name uniqueness or duplicate checks, and is never captured or checked by journey, evidence-posting, or completion flows. Only the exact claiming prefix `[EVIDENCE: ...]` declares an obligation on the current work item (with the legacy `[SCREENSHOT: name]` form still treated as a local screenshot obligation). A runtime-changing leaf whose journey contains references but no local claiming marker still fails S14. Writers must use `EVIDENCE-REF` rather than quoting a sibling's `[EVIDENCE: ...]` marker, because quoted or code-formatted claiming markers still belong to the current work item.
163
+
152
164
  ---
153
165
 
154
166
  ## Local vs Remote Verification
@@ -30,7 +30,7 @@ Extract: title, body, type (from `type:` label), components (from `component:` l
30
30
 
31
31
  ### Step 2: Check for Existing Journey
32
32
 
33
- Parse the body for an existing `## Validation Journey` heading. If present and the section contains at least one `[EVIDENCE: <name>]` marker, the issue already has a journey report this to the user and stop.
33
+ Parse the body for an existing `## Validation Journey` heading. It counts as complete only when the section contains at least one local typed `[EVIDENCE: <artifact-type>: <name>]` marker. An `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` is a non-claiming pointer and does not count; if references are present without a local claiming marker, continue drafting the missing local journey evidence instead of stopping.
34
34
 
35
35
  ### Step 3: Analyze the Change Type
36
36
 
@@ -82,30 +82,32 @@ Compose the journey with typed `[EVIDENCE: <artifact-type>: <name>]` markers at
82
82
  1. **2–5 evidence markers** — Focus on proving the change works and handles errors.
83
83
  2. **Concrete, runnable steps** — `Run \`curl -s localhost:3000/health | jq .status\`` not "Check the endpoint".
84
84
  3. **Include environment setup** — Database connection, running services, env vars.
85
- 4. **Markers are typed artifacts, not assertion labels** — `[EVIDENCE: <artifact-type>: <kebab-name>]`. `[EVIDENCE: load-failure-handled-gracefully]` names a claim with nothing to capture; write `[EVIDENCE: screenshot: load-failure-error-state]` or `[EVIDENCE: perf-trace: pipeline-load-tti]`. Names are kebab-case and unique within the ticket.
85
+ 4. **Markers are typed artifacts, not assertion labels** — `[EVIDENCE: <artifact-type>: <kebab-case-name>]`. `[EVIDENCE: load-failure-handled-gracefully]` names a claim with nothing to capture; write `[EVIDENCE: screenshot: load-failure-error-state]` or `[EVIDENCE: perf-trace: pipeline-load-tti]`. Names are kebab-case and unique within the ticket.
86
86
  5. **Assertions are measurable** — `Returns 200 with {status: ok}` not "API works correctly".
87
87
  6. **Cover happy path AND error path** — At minimum, one success and one failure marker.
88
88
  7. **On a leaf work unit, the markers are binding** — For a Bug / Task / Sub-task / Improvement, every typed `[EVIDENCE: <artifact-type>: <name>]` here is the issue's evidence manifest: validation gate S14 requires at least one, and the issue cannot be closed until each named artifact is captured **in its declared type** and attached (see the "Per-Work-Unit Evidence Contract" in the `verification` rule). Name only evidence you intend to capture — and name all of it.
89
+ 8. **Reference sibling evidence without claiming it** — Use only `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` when prose points to an artifact declared by another issue. Never paste, quote, or code-format the sibling's `[EVIDENCE: ...]` marker: that exact prefix creates a local obligation. `EVIDENCE-REF` never satisfies this issue's S14 minimum, uniqueness check, capture list, or completion gate; a runtime-changing leaf still needs at least one local `[EVIDENCE: ...]` marker.
89
90
 
90
91
  ### Step 6: Present to User for Approval
91
92
 
92
- Display the drafted Validation Journey and ask for confirmation before appending it to the issue body. (If invoked from a parent skill running unattended — e.g., `lisa-github-write-issue` Phase 6 step 5 — proceed without the prompt.)
93
+ Display the drafted Validation Journey change and ask for confirmation before updating the issue body. (If invoked from a parent skill running unattended — e.g., `lisa-github-write-issue` Phase 6 step 5 — proceed without the prompt.)
93
94
 
94
- ### Step 7: Append to Issue Body
95
+ ### Step 7: Merge into Issue Body
95
96
 
96
97
  After approval:
97
98
 
98
99
  ```bash
99
100
  current_body=$(gh issue view <number> --repo <org>/<repo> --json body --jq '.body')
100
- # Compose new body: existing + "\n\n## Validation Journey\n..." (or replace if present)
101
+ # If no journey exists, append one section. If one exists without a local marker,
102
+ # merge the missing local steps/markers inside that section.
101
103
  gh issue edit <number> --repo <org>/<repo> --body-file /tmp/updated-body.md
102
104
  ```
103
105
 
104
- Preserve every other section verbatim — never re-render the body from parsed fields, since the issue may carry `extra_sections` we don't recognize.
106
+ When repairing a reference-only journey, preserve all of its existing prose and `EVIDENCE-REF` pointers and append only the missing local steps/markers inside the existing section. Never create a second `## Validation Journey` heading. Preserve every other section verbatim — never re-render the body from parsed fields, since the issue may carry `extra_sections` we don't recognize.
105
107
 
106
108
  ### Step 8: Verify
107
109
 
108
- Re-read the issue and confirm the `## Validation Journey` section is present and includes at least one `[EVIDENCE: <name>]` marker.
110
+ Re-read the issue and confirm the `## Validation Journey` section is present and includes at least one local `[EVIDENCE: <artifact-type>: <name>]` marker. An `EVIDENCE-REF` alone does not count.
109
111
 
110
112
  ## When to Use This Skill
111
113
 
@@ -36,6 +36,8 @@ Analyze the provided file(s) and plan a GitHub Issue hierarchy. **This skill pla
36
36
 
37
37
  Issues that change runtime behavior should include a `## Validation Journey` section. This section is consumed by `lisa-github-journey` to automate verification. Use `lisa-github-add-journey` to draft + append the section after creation.
38
38
 
39
+ When the issue needs to point at evidence owned by another work item, pass the exact non-claiming form `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` to the writer. Never quote the sibling's `[EVIDENCE: ...]` marker. A reference is informational only and does not replace the runtime-changing leaf's own S14 evidence marker.
40
+
39
41
  ## Source Artifacts
40
42
 
41
43
  If `$ARGUMENTS` references any external artifact — PRD, design doc, Figma URL, Lovable prototype, Loom walkthrough, screenshot, example payload — those references MUST be preserved as `## Links` and `## Source Artifacts` sections on the created issues. Silent artifact loss is the single most common quality failure in this pipeline.
@@ -64,6 +64,8 @@ At each typed `[EVIDENCE: <artifact-type>: <name>]` marker, capture an artifact
64
64
 
65
65
  A prose claim ("the error state rendered gracefully") satisfies no marker. Legacy untyped markers: infer the type from the step's action, capture accordingly, and note the inference. Write each artifact to a numbered file:
66
66
 
67
+ Treat only exact `[EVIDENCE: ...]` markers (plus the legacy local `[SCREENSHOT: ...]` form) as capture instructions. `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` points to another work item's artifact: preserve it as explanatory text, but do not capture it, assign it a sequence number, include it in duplicate-name checks, or count it as a local manifest entry. If a runtime-changing leaf has references but no local claiming marker, stop because S14 is unsatisfied.
68
+
67
69
  #### Evidence Naming Convention
68
70
 
69
71
  `{NN}-{evidence-name}.txt` (or `.json` for structured data):
@@ -207,7 +207,9 @@ Each marker must satisfy ALL of:
207
207
 
208
208
  **A marker names an artifact, not an assertion.** An untyped marker (`[EVIDENCE: load-failure-handled-gracefully]`) is an assertion label with nothing to capture and must FAIL, with a remediation that shows the typed transformation (e.g. → `[EVIDENCE: screenshot: load-failure-error-state]`, `[EVIDENCE: perf-trace: pipeline-load-tti]`).
209
209
 
210
- FAIL when the Validation Journey is present but declares zero markers, when any marker is untyped or uses a type outside the taxonomy, or when any name is empty, duplicated, or not kebab-case. A behavior-changing work unit SHOULD declare both a success marker and an error/edge marker; a journey with only one marker passes but the remediation should recommend adding the error/edge case.
210
+ FAIL when the Validation Journey is present but declares zero binding `[EVIDENCE: ...]` markers, when any binding marker is untyped or uses a type outside the taxonomy, or when any binding name is empty, duplicated, or not kebab-case. A behavior-changing work unit SHOULD declare both a success marker and an error/edge marker; a journey with only one binding marker passes but the remediation should recommend adding the error/edge case.
211
+
212
+ Parse claiming markers by the exact `[EVIDENCE:` prefix. A cross-work-item pointer in the exact form `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` is non-claiming: exclude it from the manifest, S14's minimum-marker count, local marker type/name validation, and duplicate-name checks. Independently validate every `EVIDENCE-REF`: the native work-item reference must be non-empty and unambiguous, the artifact type must use the fixed taxonomy, and the name must be non-empty kebab-case. A malformed reference FAILs S14 as an invalid pointer but never becomes a local evidence obligation. A valid reference may point to a sibling's artifact, but it never satisfies S14 for this issue. Therefore a runtime-changing leaf whose journey contains only `EVIDENCE-REF` entries FAILs S14. Quoting or code-formatting another issue's `[EVIDENCE: ...]` marker does not make it a reference; writers must convert it to `EVIDENCE-REF`.
211
213
 
212
214
  This gate depends on S11. It is `N/A` for containers — an **Epic**, or any item with open child work (coordination containers, not work units) — and for leaf units with `runtime_behavior_change = false` (doc-only / config-only / type-only). If S11 fails because the Validation Journey is absent, S14 also FAILs (there is no manifest to bind) with remediation pointing back to `lisa-github-add-journey`.
213
215
 
@@ -126,7 +126,9 @@ Scenario: <name>
126
126
 
127
127
  ## Validation Journey
128
128
  [Delegate to /github-add-journey if the issue changes runtime behavior.
129
- Skip only for doc-only, config-only, or type-only issues.]
129
+ Skip only for doc-only, config-only, or type-only issues. Cross-work-item
130
+ evidence pointers use `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]`;
131
+ they never replace this issue's local S14 marker.]
130
132
  ```
131
133
 
132
134
  Rules:
@@ -38,7 +38,7 @@ Run the parser to see if a Validation Journey already exists:
38
38
  python3 .claude/skills/jira-journey/scripts/parse-plan.py <TICKET_ID> 2>&1
39
39
  ```
40
40
 
41
- If the parser succeeds and returns steps, the ticket already has a journey. Report this to the user and stop.
41
+ If the parser succeeds and returns steps, inspect the journey source for at least one local typed `[EVIDENCE: <artifact-type>: <name>]` marker. Stop only when that local marker exists. An `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` is a non-claiming pointer and does not count; if the journey has references but no local claiming marker, continue drafting the missing local journey evidence.
42
42
 
43
43
  ### Step 3: Analyze the Change Type
44
44
 
@@ -92,18 +92,19 @@ h3. Assertions
92
92
  1. **2-5 evidence markers** — Focus on proving the change works and handles errors
93
93
  2. **Concrete, runnable steps** — "Run `curl -s localhost:3000/health | jq .status`" not "Check the endpoint"
94
94
  3. **Include environment setup** — Database connection, running services, env vars
95
- 4. **Markers are typed artifacts, not assertion labels** — `[EVIDENCE: <artifact-type>: <kebab-name>]`. `[EVIDENCE: load-failure-handled-gracefully]` names a claim with nothing to capture; write `[EVIDENCE: screenshot: load-failure-error-state]` or `[EVIDENCE: perf-trace: pipeline-load-tti]`. Names are kebab-case and unique within the ticket.
95
+ 4. **Markers are typed artifacts, not assertion labels** — `[EVIDENCE: <artifact-type>: <kebab-case-name>]`. `[EVIDENCE: load-failure-handled-gracefully]` names a claim with nothing to capture; write `[EVIDENCE: screenshot: load-failure-error-state]` or `[EVIDENCE: perf-trace: pipeline-load-tti]`. Names are kebab-case and unique within the ticket.
96
96
  5. **Assertions are measurable** — "Returns 200 with `{status: ok}`" not "API works correctly"
97
97
  6. **Cover happy path and error path** — At minimum, one success and one failure evidence marker
98
98
  7. **On a leaf work unit, the markers are binding** — For a Bug / Task / Sub-task / Improvement, every typed `[EVIDENCE: <artifact-type>: <name>]` here is the ticket's evidence manifest: validation gate S14 requires at least one, and the ticket cannot be closed until each named artifact is captured **in its declared type** and attached (see the "Per-Work-Unit Evidence Contract" in the `verification` rule). Name only evidence you intend to capture — and name all of it.
99
+ 8. **Reference sibling evidence without claiming it** — Use only `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` when prose points to an artifact declared by another ticket. Never paste, quote, or code-format the sibling's `[EVIDENCE: ...]` marker: that exact prefix creates a local obligation. `EVIDENCE-REF` never satisfies this ticket's S14 minimum, uniqueness check, capture list, or completion gate; a runtime-changing leaf still needs at least one local `[EVIDENCE: ...]` marker.
99
100
 
100
101
  ### Step 6: Present to User for Approval
101
102
 
102
- Display the drafted Validation Journey to the user and ask for confirmation before appending it to the ticket.
103
+ Display the drafted Validation Journey change to the user and ask for confirmation before updating the ticket.
103
104
 
104
- ### Step 7: Append to Ticket Description
105
+ ### Step 7: Merge into Ticket Description
105
106
 
106
- After user approval, use the JIRA REST API to append the Validation Journey to the existing ticket description.
107
+ After user approval, use the JIRA REST API to update the ticket description. If no journey exists, append one section. If a reference-only journey exists, preserve all existing prose and `EVIDENCE-REF` pointers and append only the missing local steps/markers inside that existing section. Never create a second `Validation Journey` heading; the parser selects the existing section and duplicate headings make S14 evaluation ambiguous.
107
108
 
108
109
  ### Step 8: Verify
109
110
 
@@ -113,6 +114,8 @@ Run the parser again to confirm the journey was added correctly:
113
114
  python3 .claude/skills/jira-journey/scripts/parse-plan.py <TICKET_ID>
114
115
  ```
115
116
 
117
+ Confirm the journey has at least one local `[EVIDENCE: <artifact-type>: <name>]` marker. An `EVIDENCE-REF` alone does not count.
118
+
116
119
  ## When to Use This Skill
117
120
 
118
121
  - Ticket was created before the Validation Journey convention was established
@@ -83,6 +83,7 @@ h3. Assertions
83
83
 
84
84
  1. **Steps must be concrete and verifiable** — "Run `curl -s localhost:3000/health`" not "Check the API"
85
85
  2. **Evidence markers at verification points** — Place typed `[EVIDENCE: <artifact-type>: <name>]` at states that prove the change works. The type names HOW the proof is captured, the kebab-case name WHAT it proves (e.g., `[EVIDENCE: http-transcript: api-response-200]`, `[EVIDENCE: screenshot: error-state-rendered]`). An untyped assertion label like `[EVIDENCE: works-gracefully]` fails validation gate S14
86
+ - To point at evidence owned by another work item, use exactly `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]`. It is non-claiming and cannot satisfy S14; never paste or quote the sibling's `[EVIDENCE: ...]` marker into this ticket.
86
87
  3. **Include 2-5 evidence markers** — Enough to prove the change works across happy path and error cases
87
88
  4. **Assertions are testable statements** — "Health check returns 200 with status ok" not "API works"
88
89
  5. **Prerequisites include environment setup** — Database connection, env vars, running services
@@ -70,6 +70,8 @@ At each typed `[EVIDENCE: <artifact-type>: <name>]` marker, capture an artifact
70
70
 
71
71
  A prose claim ("the error state rendered gracefully") satisfies no marker. Legacy untyped markers: infer the type from the step's action, capture accordingly, and note the inference. Write each artifact to a numbered file:
72
72
 
73
+ Treat only exact `[EVIDENCE: ...]` markers (plus the legacy local `[SCREENSHOT: ...]` form) as capture instructions. `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` points to another work item's artifact: preserve it as explanatory text, but do not capture it, assign it a sequence number, include it in duplicate-name checks, or count it as a local manifest entry. If a runtime-changing leaf has references but no local claiming marker, stop because S14 is unsatisfied.
74
+
73
75
  #### Evidence Naming Convention
74
76
 
75
77
  Evidence files are named: `{NN}-{evidence-name}.{ext}` — extension matches the declared artifact type (`.png`/`.webm` for screenshot/recording, `.txt` for transcripts/logs/output, `.json` for structured state)
@@ -21,6 +21,12 @@ import sys
21
21
  from pathlib import Path
22
22
 
23
23
 
24
+ # Strip local capture claims from rendered step prose. EVIDENCE-REF is a
25
+ # cross-work-item pointer, so it must remain visible in both JIRA and GitHub
26
+ # evidence comments.
27
+ LOCAL_EVIDENCE_PATTERN = re.compile(r'\s*\[(SCREENSHOT|EVIDENCE):\s*[^\]]+\]')
28
+
29
+
24
30
  def get_jira_server():
25
31
  """Read JIRA server URL from jira-cli config."""
26
32
  config_path = Path.home() / ".config" / ".jira" / ".config.yml"
@@ -115,7 +121,7 @@ def generate_jira_wiki(ticket_id, pr_number, branch, evidence_files, journey, gh
115
121
  lines.append("")
116
122
  for step in journey["steps"]:
117
123
  text = step["text"]
118
- clean_text = re.sub(r'\s*\[(SCREENSHOT|EVIDENCE):\s*[^\]]+\]', '', text).strip()
124
+ clean_text = LOCAL_EVIDENCE_PATTERN.sub('', text).strip()
119
125
  lines.append(f"# {clean_text}")
120
126
  lines.append("")
121
127
 
@@ -175,7 +181,7 @@ def generate_github_md(ticket_id, pr_number, branch, evidence_files, journey, gh
175
181
  lines.append("")
176
182
  for step in journey["steps"]:
177
183
  text = step["text"]
178
- clean_text = re.sub(r'\s*\[(SCREENSHOT|EVIDENCE):\s*[^\]]+\]', '', text).strip()
184
+ clean_text = LOCAL_EVIDENCE_PATTERN.sub('', text).strip()
179
185
  lines.append(f"{step['number']}. {clean_text}")
180
186
  lines.append("")
181
187
 
@@ -35,6 +35,12 @@ from base64 import b64encode
35
35
  from pathlib import Path
36
36
 
37
37
 
38
+ # Intentionally matches the exact local-claim prefixes only. EVIDENCE-REF is a
39
+ # cross-work-item pointer and must remain visible in step prose without becoming
40
+ # a capture obligation.
41
+ LOCAL_EVIDENCE_PATTERN = re.compile(r'\[(SCREENSHOT|EVIDENCE):\s*([^\]]+)\]')
42
+
43
+
38
44
  def get_jira_config():
39
45
  """Read JIRA server and login from jira-cli config."""
40
46
  config_path = Path.home() / ".config" / ".jira" / ".config.yml"
@@ -153,7 +159,7 @@ def parse_prerequisites(nodes):
153
159
  def clean_step_text(text, screenshot_name):
154
160
  """Remove [SCREENSHOT: ...] or [EVIDENCE: ...] marker from step text and deduplicate."""
155
161
  # Remove the marker itself
156
- cleaned = re.sub(r'\[(SCREENSHOT|EVIDENCE):\s*[^\]]+\]\s*', '', text).strip()
162
+ cleaned = LOCAL_EVIDENCE_PATTERN.sub('', text).strip()
157
163
 
158
164
  # Deduplicate: if the same phrase appears twice consecutively, keep one
159
165
  # This handles ADF text node concatenation artifacts
@@ -177,7 +183,7 @@ def parse_steps(nodes):
177
183
  text = extract_text_from_adf(item).strip()
178
184
 
179
185
  screenshot = None
180
- match = re.search(r'\[(SCREENSHOT|EVIDENCE):\s*([^\]]+)\]', text)
186
+ match = LOCAL_EVIDENCE_PATTERN.search(text)
181
187
  if match:
182
188
  screenshot = match.group(2).strip()
183
189
 
@@ -193,7 +199,7 @@ def parse_steps(nodes):
193
199
  if text and re.match(r'^\d+\.?\s', text):
194
200
  step_number += 1
195
201
  screenshot = None
196
- match = re.search(r'\[(SCREENSHOT|EVIDENCE):\s*([^\]]+)\]', text)
202
+ match = LOCAL_EVIDENCE_PATTERN.search(text)
197
203
  if match:
198
204
  screenshot = match.group(2).strip()
199
205
 
@@ -208,7 +208,9 @@ Each marker must satisfy ALL of:
208
208
 
209
209
  **A marker names an artifact, not an assertion.** An untyped marker (`[EVIDENCE: load-failure-handled-gracefully]`) is an assertion label with nothing to capture and must FAIL, with a remediation that shows the typed transformation (e.g. → `[EVIDENCE: screenshot: load-failure-error-state]`, `[EVIDENCE: perf-trace: pipeline-load-tti]`).
210
210
 
211
- FAIL when the Validation Journey is present but declares zero markers, when any marker is untyped or uses a type outside the taxonomy, or when any name is empty, duplicated, or not kebab-case. A behavior-changing work unit SHOULD declare both a success marker and an error/edge marker; a journey with only one marker passes but the remediation should recommend adding the error/edge case.
211
+ FAIL when the Validation Journey is present but declares zero binding `[EVIDENCE: ...]` markers, when any binding marker is untyped or uses a type outside the taxonomy, or when any binding name is empty, duplicated, or not kebab-case. A behavior-changing work unit SHOULD declare both a success marker and an error/edge marker; a journey with only one binding marker passes but the remediation should recommend adding the error/edge case.
212
+
213
+ Parse claiming markers by the exact `[EVIDENCE:` prefix. A cross-work-item pointer in the exact form `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` is non-claiming: exclude it from the manifest, S14's minimum-marker count, local marker type/name validation, and duplicate-name checks. Independently validate every `EVIDENCE-REF`: the native work-item reference must be non-empty and unambiguous, the artifact type must use the fixed taxonomy, and the name must be non-empty kebab-case. A malformed reference FAILs S14 as an invalid pointer but never becomes a local evidence obligation. A valid reference may point to a sibling's artifact, but it never satisfies S14 for this ticket. Therefore a runtime-changing leaf whose journey contains only `EVIDENCE-REF` entries FAILs S14. Quoting or code-formatting another ticket's `[EVIDENCE: ...]` marker does not make it a reference; writers must convert it to `EVIDENCE-REF`.
212
214
 
213
215
  This gate depends on S11. It is `N/A` for containers — an **Epic**, or any item with open child work (coordination containers, not work units) — and for leaf units with `runtime_behavior_change = false` (doc-only / config-only / type-only). If S11 fails because the Validation Journey is absent, S14 also FAILs (there is no manifest to bind) with remediation pointing back to `lisa-jira-add-journey`.
214
216
 
@@ -104,7 +104,9 @@ list multiple repos.]
104
104
 
105
105
  h2. Validation Journey
106
106
  [Delegate to /jira-add-journey if the ticket changes runtime behavior.
107
- Skip only for doc-only, config-only, or type-only tickets.]
107
+ Skip only for doc-only, config-only, or type-only tickets. Cross-work-item
108
+ evidence pointers use `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]`;
109
+ they never replace this ticket's local S14 marker.]
108
110
  ```
109
111
 
110
112
  Rules:
@@ -26,7 +26,7 @@ Fetch via `lisa-linear-access operation: get-issue` and extract: title, descript
26
26
 
27
27
  ### Step 2: Check for Existing Journey
28
28
 
29
- If the description already contains a `## Validation Journey` section, report and stop never overwrite an existing journey without explicit instruction.
29
+ If the description contains a `## Validation Journey` section, inspect that section for at least one local typed `[EVIDENCE: <artifact-type>: <name>]` marker. Stop only when that local marker exists. An `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` is a non-claiming pointer and does not count; if the journey has references but no local claiming marker, continue drafting the missing local journey evidence. Preserve the existing journey prose and references when appending the local evidence rather than overwriting them.
30
30
 
31
31
  ### Step 3: Analyze the Change Type
32
32
 
@@ -82,22 +82,23 @@ Compose the journey with typed `[EVIDENCE: <artifact-type>: <name>]` markers at
82
82
  1. **2–5 evidence markers** — Focus on proving the change works and handles errors.
83
83
  2. **Concrete, runnable steps** — `Run \`curl -s localhost:3000/health | jq .status\`` not "Check the endpoint".
84
84
  3. **Include environment setup** — Database connection, running services, env vars.
85
- 4. **Markers are typed artifacts, not assertion labels** — `[EVIDENCE: <artifact-type>: <kebab-name>]`. `[EVIDENCE: load-failure-handled-gracefully]` names a claim with nothing to capture; write `[EVIDENCE: screenshot: load-failure-error-state]` or `[EVIDENCE: perf-trace: pipeline-load-tti]`. Names are kebab-case and unique within the ticket.
85
+ 4. **Markers are typed artifacts, not assertion labels** — `[EVIDENCE: <artifact-type>: <kebab-case-name>]`. `[EVIDENCE: load-failure-handled-gracefully]` names a claim with nothing to capture; write `[EVIDENCE: screenshot: load-failure-error-state]` or `[EVIDENCE: perf-trace: pipeline-load-tti]`. Names are kebab-case and unique within the ticket.
86
86
  5. **Assertions are measurable** — "Returns 200 with `{status: ok}`" not "API works correctly".
87
87
  6. **Cover happy path and error path** — At minimum, one success and one failure evidence marker.
88
88
  7. **On a leaf work unit, the markers are binding** — For a Bug / Task / Sub-task / Improvement, every typed `[EVIDENCE: <artifact-type>: <name>]` here is the item's evidence manifest: validation gate S14 requires at least one, and the item cannot be closed until each named artifact is captured **in its declared type** and attached (see the "Per-Work-Unit Evidence Contract" in the `verification` rule). Name only evidence you intend to capture — and name all of it.
89
+ 8. **Reference sibling evidence without claiming it** — Use only `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` when prose points to an artifact declared by another item. Never paste, quote, or code-format the sibling's `[EVIDENCE: ...]` marker: that exact prefix creates a local obligation. `EVIDENCE-REF` never satisfies this item's S14 minimum, uniqueness check, capture list, or completion gate; a runtime-changing leaf still needs at least one local `[EVIDENCE: ...]` marker.
89
90
 
90
91
  ### Step 6: Present to User for Approval
91
92
 
92
- Display the drafted journey and ask for confirmation before appending.
93
+ Display the drafted journey change and ask for confirmation before updating the issue.
93
94
 
94
- ### Step 7: Append to Issue Description
95
+ ### Step 7: Merge into Issue Description
95
96
 
96
- After approval, fetch the current description, append the new Validation Journey section, and update via `lisa-linear-access operation: save-issue({id, description: <new-description>})`. Preserve all existing description content — never overwrite.
97
+ After approval, fetch the current description and update via `lisa-linear-access operation: save-issue({id, description: <new-description>})`. If no journey exists, append one section. If a reference-only journey exists, preserve all existing prose and `EVIDENCE-REF` pointers and append only the missing local steps/markers inside that existing section. Never create a second `## Validation Journey` heading. Preserve all other description content — never overwrite or re-render it.
97
98
 
98
99
  ### Step 8: Verify
99
100
 
100
- Re-fetch the issue and confirm the section is present.
101
+ Re-fetch the issue and confirm the section is present with at least one local `[EVIDENCE: <artifact-type>: <name>]` marker. An `EVIDENCE-REF` alone does not count.
101
102
 
102
103
  ## When to Use This Skill
103
104
 
@@ -60,6 +60,8 @@ Items that change runtime behavior should include a `## Validation Journey` sect
60
60
 
61
61
  Design the journey based on the **change type**. Place typed `[EVIDENCE: <artifact-type>: <name>]` markers at key verification points (types: `screenshot`, `recording`, `http-transcript`, `cli-output`, `log-snippet`, `db-query-output`, `perf-trace`, `test-run-log`, `deploy-log`, `state-dump` — see the `verification` rule).
62
62
 
63
+ To point at evidence owned by another work item, use exactly `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]`. It is non-claiming and cannot satisfy S14; never paste or quote the sibling's `[EVIDENCE: ...]` marker into this item.
64
+
63
65
  ```markdown
64
66
  ## Validation Journey
65
67