@codyswann/lisa 2.213.0 → 2.215.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) 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-codify-verification/SKILL.md +17 -0
  5. package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +54 -1
  6. package/plugins/lisa/.codex-plugin/skills/lisa-github-add-journey/SKILL.md +6 -6
  7. package/plugins/lisa/.codex-plugin/skills/lisa-github-journey/SKILL.md +13 -2
  8. package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +9 -2
  9. package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +2 -2
  10. package/plugins/lisa/.codex-plugin/skills/lisa-jira-add-journey/SKILL.md +6 -6
  11. package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/SKILL.md +5 -5
  12. package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/SKILL.md +15 -4
  13. package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +9 -2
  14. package/plugins/lisa/.codex-plugin/skills/lisa-linear-add-journey/SKILL.md +7 -5
  15. package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/SKILL.md +4 -4
  16. package/plugins/lisa/.codex-plugin/skills/lisa-linear-journey/SKILL.md +15 -4
  17. package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +9 -2
  18. package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +1 -1
  19. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +2 -2
  20. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-add-journey/SKILL.md +1 -1
  21. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/SKILL.md +1 -1
  22. package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/SKILL.md +4 -4
  23. package/plugins/lisa/.codex-plugin/skills/lisa-verify/SKILL.md +1 -1
  24. package/plugins/lisa/rules/eager/observability-audit.md +1 -1
  25. package/plugins/lisa/rules/eager/verification.md +2 -1
  26. package/plugins/lisa/rules/reference/observability-audit.md +1 -1
  27. package/plugins/lisa/rules/reference/verification.md +43 -5
  28. package/plugins/lisa/skills/lisa-codify-verification/SKILL.md +17 -0
  29. package/plugins/lisa/skills/lisa-drive-pr-to-merge/SKILL.md +54 -1
  30. package/plugins/lisa/skills/lisa-github-add-journey/SKILL.md +6 -6
  31. package/plugins/lisa/skills/lisa-github-journey/SKILL.md +13 -2
  32. package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +9 -2
  33. package/plugins/lisa/skills/lisa-implement/SKILL.md +2 -2
  34. package/plugins/lisa/skills/lisa-jira-add-journey/SKILL.md +6 -6
  35. package/plugins/lisa/skills/lisa-jira-create/SKILL.md +5 -5
  36. package/plugins/lisa/skills/lisa-jira-journey/SKILL.md +15 -4
  37. package/plugins/lisa/skills/lisa-jira-validate-ticket/SKILL.md +9 -2
  38. package/plugins/lisa/skills/lisa-linear-add-journey/SKILL.md +7 -5
  39. package/plugins/lisa/skills/lisa-linear-create/SKILL.md +4 -4
  40. package/plugins/lisa/skills/lisa-linear-journey/SKILL.md +16 -5
  41. package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +9 -2
  42. package/plugins/lisa/skills/lisa-monitor/SKILL.md +1 -1
  43. package/plugins/lisa/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +2 -2
  44. package/plugins/lisa/skills/lisa-tracker-add-journey/SKILL.md +1 -1
  45. package/plugins/lisa/skills/lisa-tracker-evidence/SKILL.md +1 -1
  46. package/plugins/lisa/skills/lisa-verification-lifecycle/SKILL.md +4 -4
  47. package/plugins/lisa/skills/lisa-verify/SKILL.md +1 -1
  48. package/plugins/lisa-agy/plugin.json +1 -1
  49. package/plugins/lisa-agy/skills/lisa-codify-verification/SKILL.md +17 -0
  50. package/plugins/lisa-agy/skills/lisa-drive-pr-to-merge/SKILL.md +54 -1
  51. package/plugins/lisa-agy/skills/lisa-github-add-journey/SKILL.md +6 -6
  52. package/plugins/lisa-agy/skills/lisa-github-journey/SKILL.md +13 -2
  53. package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +9 -2
  54. package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +2 -2
  55. package/plugins/lisa-agy/skills/lisa-jira-add-journey/SKILL.md +6 -6
  56. package/plugins/lisa-agy/skills/lisa-jira-create/SKILL.md +5 -5
  57. package/plugins/lisa-agy/skills/lisa-jira-journey/SKILL.md +15 -4
  58. package/plugins/lisa-agy/skills/lisa-jira-validate-ticket/SKILL.md +9 -2
  59. package/plugins/lisa-agy/skills/lisa-linear-add-journey/SKILL.md +7 -5
  60. package/plugins/lisa-agy/skills/lisa-linear-create/SKILL.md +4 -4
  61. package/plugins/lisa-agy/skills/lisa-linear-journey/SKILL.md +16 -5
  62. package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +9 -2
  63. package/plugins/lisa-agy/skills/lisa-monitor/SKILL.md +1 -1
  64. package/plugins/lisa-agy/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +2 -2
  65. package/plugins/lisa-agy/skills/lisa-tracker-add-journey/SKILL.md +1 -1
  66. package/plugins/lisa-agy/skills/lisa-tracker-evidence/SKILL.md +1 -1
  67. package/plugins/lisa-agy/skills/lisa-verification-lifecycle/SKILL.md +4 -4
  68. package/plugins/lisa-agy/skills/lisa-verify/SKILL.md +1 -1
  69. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  71. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  72. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-copilot/rules/eager/observability-audit.md +1 -1
  76. package/plugins/lisa-copilot/rules/eager/verification.md +2 -1
  77. package/plugins/lisa-copilot/rules/reference/observability-audit.md +1 -1
  78. package/plugins/lisa-copilot/rules/reference/verification.md +43 -5
  79. package/plugins/lisa-copilot/skills/lisa-codify-verification/SKILL.md +17 -0
  80. package/plugins/lisa-copilot/skills/lisa-drive-pr-to-merge/SKILL.md +54 -1
  81. package/plugins/lisa-copilot/skills/lisa-github-add-journey/SKILL.md +6 -6
  82. package/plugins/lisa-copilot/skills/lisa-github-journey/SKILL.md +13 -2
  83. package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +9 -2
  84. package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +2 -2
  85. package/plugins/lisa-copilot/skills/lisa-jira-add-journey/SKILL.md +6 -6
  86. package/plugins/lisa-copilot/skills/lisa-jira-create/SKILL.md +5 -5
  87. package/plugins/lisa-copilot/skills/lisa-jira-journey/SKILL.md +15 -4
  88. package/plugins/lisa-copilot/skills/lisa-jira-validate-ticket/SKILL.md +9 -2
  89. package/plugins/lisa-copilot/skills/lisa-linear-add-journey/SKILL.md +7 -5
  90. package/plugins/lisa-copilot/skills/lisa-linear-create/SKILL.md +4 -4
  91. package/plugins/lisa-copilot/skills/lisa-linear-journey/SKILL.md +16 -5
  92. package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +9 -2
  93. package/plugins/lisa-copilot/skills/lisa-monitor/SKILL.md +1 -1
  94. package/plugins/lisa-copilot/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +2 -2
  95. package/plugins/lisa-copilot/skills/lisa-tracker-add-journey/SKILL.md +1 -1
  96. package/plugins/lisa-copilot/skills/lisa-tracker-evidence/SKILL.md +1 -1
  97. package/plugins/lisa-copilot/skills/lisa-verification-lifecycle/SKILL.md +4 -4
  98. package/plugins/lisa-copilot/skills/lisa-verify/SKILL.md +1 -1
  99. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  100. package/plugins/lisa-cursor/rules/observability-audit-reference.mdc +1 -1
  101. package/plugins/lisa-cursor/rules/observability-audit.mdc +1 -1
  102. package/plugins/lisa-cursor/rules/verification-reference.mdc +43 -5
  103. package/plugins/lisa-cursor/rules/verification.mdc +2 -1
  104. package/plugins/lisa-cursor/skills/lisa-codify-verification/SKILL.md +17 -0
  105. package/plugins/lisa-cursor/skills/lisa-drive-pr-to-merge/SKILL.md +54 -1
  106. package/plugins/lisa-cursor/skills/lisa-github-add-journey/SKILL.md +6 -6
  107. package/plugins/lisa-cursor/skills/lisa-github-journey/SKILL.md +13 -2
  108. package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +9 -2
  109. package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +2 -2
  110. package/plugins/lisa-cursor/skills/lisa-jira-add-journey/SKILL.md +6 -6
  111. package/plugins/lisa-cursor/skills/lisa-jira-create/SKILL.md +5 -5
  112. package/plugins/lisa-cursor/skills/lisa-jira-journey/SKILL.md +15 -4
  113. package/plugins/lisa-cursor/skills/lisa-jira-validate-ticket/SKILL.md +9 -2
  114. package/plugins/lisa-cursor/skills/lisa-linear-add-journey/SKILL.md +7 -5
  115. package/plugins/lisa-cursor/skills/lisa-linear-create/SKILL.md +4 -4
  116. package/plugins/lisa-cursor/skills/lisa-linear-journey/SKILL.md +16 -5
  117. package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +9 -2
  118. package/plugins/lisa-cursor/skills/lisa-monitor/SKILL.md +1 -1
  119. package/plugins/lisa-cursor/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +2 -2
  120. package/plugins/lisa-cursor/skills/lisa-tracker-add-journey/SKILL.md +1 -1
  121. package/plugins/lisa-cursor/skills/lisa-tracker-evidence/SKILL.md +1 -1
  122. package/plugins/lisa-cursor/skills/lisa-verification-lifecycle/SKILL.md +4 -4
  123. package/plugins/lisa-cursor/skills/lisa-verify/SKILL.md +1 -1
  124. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  125. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  126. package/plugins/lisa-expo-agy/plugin.json +1 -1
  127. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  128. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  129. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  130. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  131. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  132. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  133. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  134. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  135. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  136. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  137. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  138. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  139. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  140. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  141. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  142. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  143. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  144. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  145. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  146. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  147. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  148. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  149. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  150. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  151. package/plugins/lisa-rails/.codex-plugin/skills/jira-journey/SKILL.md +1 -1
  152. package/plugins/lisa-rails/skills/jira-journey/SKILL.md +1 -1
  153. package/plugins/lisa-rails-agy/plugin.json +1 -1
  154. package/plugins/lisa-rails-agy/skills/jira-journey/SKILL.md +1 -1
  155. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  156. package/plugins/lisa-rails-copilot/skills/jira-journey/SKILL.md +1 -1
  157. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  158. package/plugins/lisa-rails-cursor/skills/jira-journey/SKILL.md +1 -1
  159. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  160. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  161. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  162. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  163. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  164. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  165. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  166. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  167. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  168. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  169. package/plugins/src/base/rules/eager/observability-audit.md +1 -1
  170. package/plugins/src/base/rules/eager/verification.md +2 -1
  171. package/plugins/src/base/rules/reference/observability-audit.md +1 -1
  172. package/plugins/src/base/rules/reference/verification.md +43 -5
  173. package/plugins/src/base/skills/lisa-codify-verification/SKILL.md +17 -0
  174. package/plugins/src/base/skills/lisa-drive-pr-to-merge/SKILL.md +54 -1
  175. package/plugins/src/base/skills/lisa-github-add-journey/SKILL.md +6 -6
  176. package/plugins/src/base/skills/lisa-github-journey/SKILL.md +13 -2
  177. package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +9 -2
  178. package/plugins/src/base/skills/lisa-implement/SKILL.md +2 -2
  179. package/plugins/src/base/skills/lisa-jira-add-journey/SKILL.md +6 -6
  180. package/plugins/src/base/skills/lisa-jira-create/SKILL.md +5 -5
  181. package/plugins/src/base/skills/lisa-jira-journey/SKILL.md +15 -4
  182. package/plugins/src/base/skills/lisa-jira-validate-ticket/SKILL.md +9 -2
  183. package/plugins/src/base/skills/lisa-linear-add-journey/SKILL.md +7 -5
  184. package/plugins/src/base/skills/lisa-linear-create/SKILL.md +4 -4
  185. package/plugins/src/base/skills/lisa-linear-journey/SKILL.md +16 -5
  186. package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +9 -2
  187. package/plugins/src/base/skills/lisa-monitor/SKILL.md +1 -1
  188. package/plugins/src/base/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +2 -2
  189. package/plugins/src/base/skills/lisa-tracker-add-journey/SKILL.md +1 -1
  190. package/plugins/src/base/skills/lisa-tracker-evidence/SKILL.md +1 -1
  191. package/plugins/src/base/skills/lisa-verification-lifecycle/SKILL.md +4 -4
  192. package/plugins/src/base/skills/lisa-verify/SKILL.md +1 -1
  193. package/plugins/src/rails/skills/jira-journey/SKILL.md +1 -1
  194. package/typescript/copy-overwrite/.github/GITHUB_ACTIONS.md +7 -3
  195. package/typescript/create-only/.github/workflows/claude-ci-auto-fix.yml +6 -2
  196. package/typescript/create-only/.github/workflows/claude-deploy-auto-fix.yml +4 -2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.213.0",
3
+ "version": "2.215.0",
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-harper-fabric",
3
- "version": "2.213.0",
3
+ "version": "2.215.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.213.0",
3
+ "version": "2.215.0",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.213.0",
3
+ "version": "2.215.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.213.0",
3
+ "version": "2.215.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.213.0",
3
+ "version": "2.215.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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"
@@ -38,7 +38,7 @@ Before starting the journey, verify each prerequisite listed in the parsed outpu
38
38
 
39
39
  ### Step 3: Execute Steps
40
40
 
41
- Execute each step sequentially. At each step with an evidence marker (`[SCREENSHOT: name]` or `[EVIDENCE: name]`), capture the appropriate evidence.
41
+ Execute each step sequentially. At each step with an evidence marker (`[SCREENSHOT: name]`, or typed `[EVIDENCE: <artifact-type>: <name>]` per the `verification` rule — `[SCREENSHOT: name]` is shorthand for `[EVIDENCE: screenshot: name]`), capture an artifact of the declared type.
42
42
 
43
43
  The execution method depends on the project type:
44
44
  - **UI projects**: Use Playwright MCP browser tools, capture screenshots at each viewport
@@ -38,7 +38,7 @@ Before starting the journey, verify each prerequisite listed in the parsed outpu
38
38
 
39
39
  ### Step 3: Execute Steps
40
40
 
41
- Execute each step sequentially. At each step with an evidence marker (`[SCREENSHOT: name]` or `[EVIDENCE: name]`), capture the appropriate evidence.
41
+ Execute each step sequentially. At each step with an evidence marker (`[SCREENSHOT: name]`, or typed `[EVIDENCE: <artifact-type>: <name>]` per the `verification` rule — `[SCREENSHOT: name]` is shorthand for `[EVIDENCE: screenshot: name]`), capture an artifact of the declared type.
42
42
 
43
43
  The execution method depends on the project type:
44
44
  - **UI projects**: Use Playwright MCP browser tools, capture screenshots at each viewport
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.213.0",
3
+ "version": "2.215.0",
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"
@@ -38,7 +38,7 @@ Before starting the journey, verify each prerequisite listed in the parsed outpu
38
38
 
39
39
  ### Step 3: Execute Steps
40
40
 
41
- Execute each step sequentially. At each step with an evidence marker (`[SCREENSHOT: name]` or `[EVIDENCE: name]`), capture the appropriate evidence.
41
+ Execute each step sequentially. At each step with an evidence marker (`[SCREENSHOT: name]`, or typed `[EVIDENCE: <artifact-type>: <name>]` per the `verification` rule — `[SCREENSHOT: name]` is shorthand for `[EVIDENCE: screenshot: name]`), capture an artifact of the declared type.
42
42
 
43
43
  The execution method depends on the project type:
44
44
  - **UI projects**: Use Playwright MCP browser tools, capture screenshots at each viewport
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.213.0",
3
+ "version": "2.215.0",
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"
@@ -38,7 +38,7 @@ Before starting the journey, verify each prerequisite listed in the parsed outpu
38
38
 
39
39
  ### Step 3: Execute Steps
40
40
 
41
- Execute each step sequentially. At each step with an evidence marker (`[SCREENSHOT: name]` or `[EVIDENCE: name]`), capture the appropriate evidence.
41
+ Execute each step sequentially. At each step with an evidence marker (`[SCREENSHOT: name]`, or typed `[EVIDENCE: <artifact-type>: <name>]` per the `verification` rule — `[SCREENSHOT: name]` is shorthand for `[EVIDENCE: screenshot: name]`), capture an artifact of the declared type.
42
42
 
43
43
  The execution method depends on the project type:
44
44
  - **UI projects**: Use Playwright MCP browser tools, capture screenshots at each viewport
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.213.0",
3
+ "version": "2.215.0",
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"
@@ -38,7 +38,7 @@ Before starting the journey, verify each prerequisite listed in the parsed outpu
38
38
 
39
39
  ### Step 3: Execute Steps
40
40
 
41
- Execute each step sequentially. At each step with an evidence marker (`[SCREENSHOT: name]` or `[EVIDENCE: name]`), capture the appropriate evidence.
41
+ Execute each step sequentially. At each step with an evidence marker (`[SCREENSHOT: name]`, or typed `[EVIDENCE: <artifact-type>: <name>]` per the `verification` rule — `[SCREENSHOT: name]` is shorthand for `[EVIDENCE: screenshot: name]`), capture an artifact of the declared type.
42
42
 
43
43
  The execution method depends on the project type:
44
44
  - **UI projects**: Use Playwright MCP browser tools, capture screenshots at each viewport
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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.213.0",
3
+ "version": "2.215.0",
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"
@@ -9,7 +9,7 @@ The **audit + file** arm of `lisa-monitor`. On top of its existing live-signal s
9
9
  - **Conservative by default.** Only high-signal anomalies (over the documented thresholds) and `core` missing dimensions are filed. `--all-gaps` widens gap filing to `recommended` tiers; nothing lowers the anomaly bar.
10
10
  - **Idempotent.** Every ticket carries a `<!-- lisa:monitor-finding: <fingerprint> -->` sentinel; search-before-create (including closed tickets) means a re-run never duplicates a live or just-resolved finding.
11
11
  - **Capped.** At most `monitor.maxCandidates` tickets per run (default 20), highest-severity first; report filed-vs-dropped (and list the dropped) — never silently truncate.
12
- - **Gate-passing.** Each ticket is a real authored artifact: three-audience description, Gherkin AC, single-repo, Target Backend Environment, and a Validation Journey with a unique kebab-case `[EVIDENCE: <name>]` marker — so `tracker-validate` (S1–S15) accepts it. A finding that cannot be made into a credible ticket is reported, not filed.
12
+ - **Gate-passing.** Each ticket is a real authored artifact: three-audience description, Gherkin AC, single-repo, Target Backend Environment, and a Validation Journey with a typed `[EVIDENCE: <artifact-type>: <name>]` marker (unique kebab-case name) — so `tracker-validate` (S1–S15) accepts it. A finding that cannot be made into a credible ticket is reported, not filed.
13
13
  - **Verify guard.** When `monitor` is the post-deploy step of `lisa-verify` it runs **report-only** — Verify invokes it as `lisa-monitor <env> --report-only`, so it never files there. Filing is a standalone-only action.
14
14
 
15
15
  Full reference (profile detection, the rubric table, anomaly thresholds, ticket templates, idempotency contract, the cap, dry-run/report-only semantics): [reference/observability-audit.md](../reference/observability-audit.md).
@@ -11,9 +11,10 @@
11
11
  - **Never claim success without runtime evidence.** "The code looks correct" is not evidence.
12
12
  - **If all you did was run tests, typecheck, and lint — you have NOT verified.**
13
13
  - **Before starting implementation, state your verification plan** — how you will USE the resulting software to prove it works. A plan that only lists `test`/`typecheck`/`lint` commands is not a plan. Do not begin until confirmed.
14
- - **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.
14
+ - **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.
15
15
  - **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.
16
16
  - **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.
17
+ - **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.
17
18
  - **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.
18
19
  - **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).
19
20
  - **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.
@@ -73,7 +73,7 @@ Both finding types are filed through the vendor-neutral `lisa-tracker-write` shi
73
73
  - **Three-audience description** (S3): coding-assistant (technical: stack trace / Sentry link / occurrence count / the missing dimension and how to wire it), developer (where it surfaces, suspected cause/affected files, the fix skill to reach for), stakeholder (user/SLO impact).
74
74
  - **Gherkin acceptance criteria** (S4).
75
75
  - **Single repo** (S10): stamped `repo:<CURRENT_REPO>`; scope the description to this repo only.
76
- - **Target Backend Environment** (S8) + **Validation Journey** carrying at least one unique kebab-case `[EVIDENCE: <name>]` marker (S11/S14) — both anomaly fixes and gap wiring are runtime changes, so both need an env and a journey that proves the fix. The bracketed `[EVIDENCE: <name>]` form is what the validator scans for; a bare `EVIDENCE:` line fails S14. Prefer two markers (a success and an error/edge case).
76
+ - **Target Backend Environment** (S8) + **Validation Journey** carrying at least one typed `[EVIDENCE: <artifact-type>: <name>]` marker (S11/S14) — both anomaly fixes and gap wiring are runtime changes, so both need an env and a journey that proves the fix. The bracketed typed form is what the validator scans for; a bare `EVIDENCE:` line or an untyped assertion label (`[EVIDENCE: alert-fixed]`) fails S14 — for observability work the natural types are `log-snippet` and `state-dump`. Prefer two markers (a success and an error/edge case).
77
77
  - **Relationship search before write** (S13) — doubles as the dedup guard (next section).
78
78
  - **No parent/Epic required.** These are build-ready standalone leaves; S7's parent requirement is waived for a `build_ready: true` leaf (the leaf carve-out in `leaf-only-lifecycle` / `tracker-validate`). Do not fabricate an Epic parent.
79
79
  - A **priority** ordered by tier and severity: `core` gap / high-event anomaly → higher; `recommended` gap → lower.
@@ -100,12 +100,48 @@ Every change requires one or more verification types. Classify the change first,
100
100
 
101
101
  Every **leaf work unit** — an individually implementable ticket with no child tickets (issue types Bug, Task, Sub-task, Improvement) — that changes runtime behavior must declare, at creation time, the exact evidence that proves it is done. Epics, Stories, and Spikes are coordination containers, not work units: their evidence is the rollup of their children, so this contract does not apply to them.
102
102
 
103
- The declaration is not a separate field — it is the set of `[EVIDENCE: name]` markers in the work unit's **Validation Journey**. Those markers are the work unit's **evidence manifest**: an enumerated, named list of the artifacts a verifier must capture. The manifest binds both ends of the ticket lifecycle:
103
+ The declaration is not a separate field — it is the set of `[EVIDENCE: <artifact-type>: <name>]` markers in the work unit's **Validation Journey**. Those markers are the work unit's **evidence manifest**: an enumerated, typed list of the artifacts a verifier must capture. The manifest binds both ends of the ticket lifecycle:
104
104
 
105
- - **At creation** — the work unit cannot be written without a Validation Journey that names at least one `[EVIDENCE: name]` artifact (enforced by gate S14 in `tracker-validate` and the vendor `*-validate-*` skills). A behavior-changing unit should name both a success artifact and an error/edge artifact.
106
- - **At completion** — the work unit cannot be marked complete, nor transitioned to its review/Done state, until every `[EVIDENCE: name]` marker in its manifest has a captured, non-empty artifact attached to the ticket (enforced by the Task Completion Rules and Definition of Done in `verification-lifecycle`, and by the evidence-manifest gate in `tracker-evidence`). A manifest with a missing or empty artifact blocks completion exactly like a failed verification.
105
+ - **At creation** — the work unit cannot be written without a Validation Journey that declares at least one typed `[EVIDENCE: <artifact-type>: <name>]` artifact (enforced by gate S14 in `tracker-validate` and the vendor `*-validate-*` skills). A behavior-changing unit should declare both a success artifact and an error/edge artifact.
106
+ - **At completion** — the work unit cannot be marked complete, nor transitioned to its review/Done state, until every marker in its manifest has a captured, non-empty artifact **of the declared type** attached to the ticket (enforced by the Task Completion Rules and Definition of Done in `verification-lifecycle`, and by the evidence-manifest gate in `tracker-evidence`). A manifest with a missing, empty, or wrong-type artifact blocks completion exactly like a failed verification.
107
107
 
108
- 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`, and checked again before the ticket closes. There is no second list to keep in sync.
108
+ ### Marker grammar: the type is the evidence
109
+
110
+ **A marker names an artifact, not an assertion.** `[EVIDENCE: load-failure-handled-gracefully]` is a claim — there is nothing to capture, so it degenerates into a checkbox someone ticks. Evidence is empirical: a screenshot, a curl transcript, a log snippet, a frame-timing trace. The marker therefore carries two parts:
111
+
112
+ ```text
113
+ [EVIDENCE: <artifact-type>: <kebab-case-name>]
114
+ ```
115
+
116
+ - `<artifact-type>` — HOW the proof is captured, from the fixed taxonomy below.
117
+ - `<kebab-case-name>` — WHAT it proves, unique within the ticket.
118
+
119
+ Example transformation (the failure mode this grammar exists to prevent):
120
+
121
+ | Assertion label (invalid) | Typed artifact (valid) |
122
+ |---|---|
123
+ | `[EVIDENCE: pipeline-load-under-3s]` | `[EVIDENCE: perf-trace: pipeline-load-tti]` |
124
+ | `[EVIDENCE: long-column-virtualized]` | `[EVIDENCE: perf-trace: long-column-frame-timing]` |
125
+ | `[EVIDENCE: load-failure-handled-gracefully]` | `[EVIDENCE: screenshot: load-failure-error-state]` |
126
+
127
+ ### Artifact-type taxonomy (fixed set)
128
+
129
+ | Type | The captured artifact is |
130
+ |---|---|
131
+ | `screenshot` | an image of the observed UI/state (Playwright, simulator, device) |
132
+ | `recording` | a video of the playthrough |
133
+ | `http-transcript` | the exact request (curl command or client call) plus the full response — status, headers of interest, body |
134
+ | `cli-output` | the command plus its stdout/stderr and exit code |
135
+ | `log-snippet` | correlated log lines captured from the running system |
136
+ | `db-query-output` | the query plus the returned rows |
137
+ | `perf-trace` | benchmark / frame-timing / profiler output, with the methodology (device profile, dataset size) noted |
138
+ | `test-run-log` | reporter output naming the spec and showing it ran and passed |
139
+ | `deploy-log` | deployment output or a health-check response from the target environment |
140
+ | `state-dump` | machine-readable observed state (e.g. the `state.json` asserted against) |
141
+
142
+ Do not invent types inline; if none fits, propose extending this table. The legacy `[SCREENSHOT: name]` marker is equivalent to `[EVIDENCE: screenshot: name]`.
143
+
144
+ 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.
109
145
 
110
146
  ---
111
147
 
@@ -141,7 +177,7 @@ Verification **is** UAT — one gate, not two. This section makes the single
141
177
  verification process concrete so "an agent actually exercised the running
142
178
  software against the acceptance criteria" is durable and re-checkable, not a
143
179
  one-off claim. It builds on the **Per-Work-Unit Evidence Contract** above (the
144
- `[EVIDENCE: name]` manifest), adding three concrete requirements:
180
+ typed `[EVIDENCE: <artifact-type>: <name>]` manifest), adding three concrete requirements:
145
181
 
146
182
  **1. The codified proof re-runs in CI.** After local verification passes,
147
183
  `codify-verification` encodes it where the project's e2e/Playwright tests live
@@ -149,6 +185,8 @@ one-off claim. It builds on the **Per-Work-Unit Evidence Contract** above (the
149
185
  project type with verification **enforced**, it is a required check — so the proof
150
186
  re-runs on every PR instead of being proven once by hand.
151
187
 
188
+ 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. The dual-runner requirement is non-demotable: a missing runner is either a recorded absence (the project genuinely has no such harness) or a linked build-ready follow-up ticket — never a silent skip (see "Frontend dual-runner codification" in `codify-verification`).
189
+
152
190
  **2. Evidence is committed to the repo.** The named artifacts from the work
153
191
  unit's evidence manifest are committed under `evidence/<ticket>/` (in addition to
154
192
  any tracker attachment), so the proof lives with the code and is reviewable in the
@@ -57,6 +57,7 @@ Do NOT install a new framework if one already exists for the verification type.
57
57
  |---|---|
58
58
  | UI (web) | Playwright > Cypress > Selenium |
59
59
  | UI (mobile) | Maestro > Detox > Playwright (mobile emulation) |
60
+ | UI (frontend, project supports multiple runners) | **ALL supported UI runners** — see "Frontend dual-runner codification" below |
60
61
  | API | project's integration test runner (Vitest / Jest / RSpec / pytest) with HTTP client (supertest / fetch / faraday) |
61
62
  | Database | integration test with real DB + migrations applied |
62
63
  | Auth | API or UI test asserting role-gated access (multi-role coverage) |
@@ -71,6 +72,20 @@ Do NOT install a new framework if one already exists for the verification type.
71
72
 
72
73
  If the project lacks the preferred framework AND no acceptable substitute exists, escalate.
73
74
 
75
+ ### 2a. Frontend dual-runner codification (non-demotable)
76
+
77
+ For **frontend work** — any verification whose validation journey exercised a user-facing UI surface — codification is not one-runner-or-the-other. After the validation journey is complete and verified, the verified behavior MUST be codified in **every UI runner the project supports**:
78
+
79
+ 1. **A Playwright spec in the project's Playwright test runner** (where its web e2e tests live, e.g. `tests/e2e/**` / `e2e/**`) — required whenever the project has a Playwright (or equivalent web e2e) harness.
80
+ 2. **A Maestro flow in the project's Maestro test runner** — required whenever the project supports Maestro. Detect support by any of: a `.maestro/` directory (flows live in `.maestro/flows/`), a `maestro:test` script in `package.json`, or a Maestro CI workflow (e.g. `maestro-native-e2e`). Wire the new flow where the runner picks it up (`maestro test .maestro/flows`), tagging per the project's tier convention (e.g. `smoke`) when one exists.
81
+
82
+ Both artifacts encode the SAME verified journey — the Playwright spec drives the web surface, the Maestro flow drives the native surface. One is not a substitute for the other: they guard different platforms of the same behavior.
83
+
84
+ Permitted exits, mirroring the regression-spec rule in `lisa-implement` (never a silent skip, never "optional"):
85
+
86
+ - The project genuinely has no runner of that kind (no web e2e harness, or no Maestro support by the detection above) → record the checked locations and the absence in the codification evidence; that runner is N/A.
87
+ - A runner is supported but the flow/spec cannot be added or executed in this PR (genuine technical blocker) → create a linked build-ready follow-up ticket before merge, reference it from the PR and work item, and record the blocker — the same follow-up path as the regression-spec blocker.
88
+
74
89
  ### 3. Generate the test
75
90
 
76
91
  The generated test must:
@@ -103,6 +118,7 @@ requires a verification-spec delta on every behavioral change. See the
103
118
  Run only the new test, using whatever per-test invocation the project supports:
104
119
 
105
120
  - Playwright: `npx playwright test path/to/new.spec.ts`
121
+ - Maestro: `maestro test .maestro/flows/new-flow.yaml`
106
122
  - Vitest: `npx vitest run path/to/new.spec.ts`
107
123
  - Jest: `npx jest path/to/new.test.ts`
108
124
  - RSpec: `bundle exec rspec path/to/new_spec.rb`
@@ -139,6 +155,7 @@ Append to the verification report (or PR description):
139
155
  | # | Verification | Framework | Test file | Status |
140
156
  |---|--------------|-----------|-----------|--------|
141
157
  | 1 | <description> | Playwright | `e2e/checkout.spec.ts::displays order confirmation after checkout` | PASS |
158
+ | 2 | <same journey, native surface> | Maestro | `.maestro/flows/checkout-confirmation.yaml` | PASS |
142
159
  ```
143
160
 
144
161
  This evidence shows the verification is now guarded.