@codyswann/lisa 4.55.1 → 4.55.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/all/copy-overwrite/scripts/check-orphaned-branches.mjs +49 -13
  2. package/all/copy-overwrite/scripts/lisa-enforcement-fallback.sh +9 -1
  3. package/all/copy-overwrite/scripts/lisa-hooks/block-blind-automerge.sh +10 -5
  4. package/all/copy-overwrite/scripts/lisa-hooks/block-direct-issue-create.sh +4 -0
  5. package/all/copy-overwrite/scripts/lisa-hooks/block-managed-file-edits.sh +73 -2
  6. package/all/copy-overwrite/scripts/lisa-hooks/guard-dedupe.bash +63 -29
  7. package/all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh +2 -1
  8. package/all/copy-overwrite/scripts/lisa-hooks/worktree-binding-guard.sh +2 -1
  9. package/all/copy-overwrite/scripts/lisa-run-gates.mjs +7 -2
  10. package/all/copy-overwrite/scripts/lisa-work-item.mjs +50 -14
  11. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  12. package/dist/core/lisa-owned-hash-ledger.js +36 -0
  13. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  14. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  15. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  16. package/dist/core/upstream-evidence-manifest.js +89 -139
  17. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  18. package/dist/opencode/plugin-templates/block-managed-file-edits.sh +76 -2
  19. package/dist/opencode/plugin-templates/block-no-verify.sh +3 -0
  20. package/dist/opencode/plugin-templates/guard-dedupe.bash +66 -29
  21. package/dist/opencode/plugin-templates/parity-safety-net-heredoc.py +3 -0
  22. package/dist/opencode/plugin-templates/parity-safety-net.sh +5 -1
  23. package/dist/opencode/support-file-resolver.d.ts.map +1 -1
  24. package/dist/opencode/support-file-resolver.js +3 -1
  25. package/dist/opencode/support-file-resolver.js.map +1 -1
  26. package/expo/copy-overwrite/plugins/withAndroidSplashNoClientExit.js +23 -21
  27. package/expo/create-only/.github/required-checks.json +1 -1
  28. package/nestjs/create-only/.github/required-checks.json +1 -1
  29. package/package.json +4 -4
  30. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  32. package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +18 -10
  33. package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +18 -9
  34. package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/SKILL.md +45 -7
  35. package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +18 -7
  36. package/plugins/lisa/.codex-plugin/skills/lisa-linear-prd-intake/SKILL.md +12 -2
  37. package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +1 -18
  38. package/plugins/lisa/.codex-plugin/skills/lisa-linear-verify/SKILL.md +0 -17
  39. package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +3 -34
  40. package/plugins/lisa/.codex-plugin/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
  41. package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +46 -6
  42. package/plugins/lisa/.codex-plugin/skills/lisa-rework-triage/SKILL.md +2 -1
  43. package/plugins/lisa/.codex-plugin/skills/lisa-secrets-access/scripts/providers.mjs +2 -1
  44. package/plugins/lisa/.codex-plugin/skills/lisa-setup-linear/SKILL.md +1 -1
  45. package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +7 -2
  46. package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +11 -4
  47. package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/toolchain.mjs +17 -5
  48. package/plugins/lisa/.codex-plugin/skills/lisa-track/SKILL.md +18 -4
  49. package/plugins/lisa/hooks/block-blind-automerge.sh +13 -5
  50. package/plugins/lisa/hooks/block-direct-issue-create.sh +7 -0
  51. package/plugins/lisa/hooks/block-instruction-file-edits.sh +3 -0
  52. package/plugins/lisa/hooks/block-managed-file-edits.sh +76 -2
  53. package/plugins/lisa/hooks/block-no-verify.sh +3 -0
  54. package/plugins/lisa/hooks/block-shell-json-parsing.sh +3 -0
  55. package/plugins/lisa/hooks/guard-dedupe.bash +66 -29
  56. package/plugins/lisa/hooks/parity-safety-net-heredoc.py +3 -0
  57. package/plugins/lisa/hooks/parity-safety-net.sh +5 -1
  58. package/plugins/lisa/hooks/worktree-binding-guard.mjs +3 -0
  59. package/plugins/lisa/hooks/worktree-binding-guard.sh +5 -1
  60. package/plugins/lisa/rules/eager/00-rule-index.md +1 -0
  61. package/plugins/lisa/rules/eager/base-rules.md +3 -1
  62. package/plugins/lisa/rules/eager/withdrawn-rulings.md +14 -3
  63. package/plugins/lisa/rules/reference/automation-runbook-contract.md +1 -1
  64. package/plugins/lisa/rules/reference/bdd-e2e-coverage.md +1 -1
  65. package/plugins/lisa/rules/reference/blocker-containment.md +3 -3
  66. package/plugins/lisa/rules/reference/claim-archaeology.md +1 -1
  67. package/plugins/lisa/rules/reference/claim-evidence-mapping.md +1 -1
  68. package/plugins/lisa/rules/reference/claim-time-guards.md +1 -1
  69. package/plugins/lisa/rules/reference/control-reachability.md +1 -1
  70. package/plugins/lisa/rules/reference/convergent-review.md +1 -1
  71. package/plugins/lisa/rules/reference/credential-substrate-precedence.md +1 -1
  72. package/plugins/lisa/rules/reference/dependency-decision-records.md +1 -1
  73. package/plugins/lisa/rules/reference/dependency-internalization-kit.md +1 -1
  74. package/plugins/lisa/rules/reference/dependency-trust-classes.md +1 -1
  75. package/plugins/lisa/rules/reference/deployed-state-readback.md +1 -1
  76. package/plugins/lisa/rules/reference/derived-branch-plan.md +1 -1
  77. package/plugins/lisa/rules/reference/design-source-of-truth.md +1 -1
  78. package/plugins/lisa/rules/reference/design-value-binding.md +1 -1
  79. package/plugins/lisa/rules/reference/documentation-source-paths.md +1 -1
  80. package/plugins/lisa/rules/reference/leaf-only-lifecycle.md +1 -1
  81. package/plugins/lisa/rules/reference/observability-audit.md +1 -1
  82. package/plugins/lisa/rules/reference/prd-definition-of-ready.md +1 -1
  83. package/plugins/lisa/rules/reference/prd-lifecycle-rollup.md +1 -1
  84. package/plugins/lisa/rules/reference/pre-flight-autofill.md +1 -1
  85. package/plugins/lisa/rules/reference/promotion-contract.md +1 -1
  86. package/plugins/lisa/rules/reference/readiness-rubric.md +1 -1
  87. package/plugins/lisa/rules/reference/ready-role-filing.md +1 -1
  88. package/plugins/lisa/rules/reference/rejection-detection.md +1 -1
  89. package/plugins/lisa/rules/reference/repo-scope-split.md +9 -10
  90. package/plugins/lisa/rules/reference/reset-seed-coverage.md +1 -1
  91. package/plugins/lisa/rules/reference/usage-accounting.md +1 -1
  92. package/plugins/lisa/rules/reference/work-item-definition-of-ready.md +1 -1
  93. package/plugins/lisa/scripts/linear-state-write-target.mjs +2 -2
  94. package/plugins/lisa/scripts/qa-signal-lifecycle.mjs +24 -11
  95. package/plugins/lisa/scripts/resolve-lifecycle-role.mjs +2 -7
  96. package/plugins/lisa/skills/lisa-github-build-intake/SKILL.md +18 -10
  97. package/plugins/lisa/skills/lisa-jira-build-intake/SKILL.md +18 -9
  98. package/plugins/lisa/skills/lisa-linear-access/SKILL.md +45 -7
  99. package/plugins/lisa/skills/lisa-linear-build-intake/SKILL.md +18 -7
  100. package/plugins/lisa/skills/lisa-linear-prd-intake/SKILL.md +12 -2
  101. package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +1 -18
  102. package/plugins/lisa/skills/lisa-linear-verify/SKILL.md +0 -17
  103. package/plugins/lisa/skills/lisa-linear-write-issue/SKILL.md +3 -34
  104. package/plugins/lisa/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
  105. package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +46 -6
  106. package/plugins/lisa/skills/lisa-rework-triage/SKILL.md +2 -1
  107. package/plugins/lisa/skills/lisa-secrets-access/scripts/providers.mjs +2 -1
  108. package/plugins/lisa/skills/lisa-setup-linear/SKILL.md +1 -1
  109. package/plugins/lisa/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +7 -2
  110. package/plugins/lisa/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +11 -4
  111. package/plugins/lisa/skills/lisa-setup-remote-env/scripts/toolchain.mjs +17 -5
  112. package/plugins/lisa/skills/lisa-track/SKILL.md +18 -4
  113. package/plugins/lisa-agy/hooks/block-blind-automerge.sh +13 -5
  114. package/plugins/lisa-agy/hooks/block-direct-issue-create.sh +7 -0
  115. package/plugins/lisa-agy/hooks/block-instruction-file-edits.sh +3 -0
  116. package/plugins/lisa-agy/hooks/block-managed-file-edits.sh +76 -2
  117. package/plugins/lisa-agy/hooks/block-shell-json-parsing.sh +3 -0
  118. package/plugins/lisa-agy/hooks/guard-dedupe.bash +66 -29
  119. package/plugins/lisa-agy/hooks/parity-safety-net-heredoc.py +3 -0
  120. package/plugins/lisa-agy/hooks/parity-safety-net.sh +5 -1
  121. package/plugins/lisa-agy/plugin.json +1 -1
  122. package/plugins/lisa-agy/scripts/linear-state-write-target.mjs +2 -2
  123. package/plugins/lisa-agy/scripts/qa-signal-lifecycle.mjs +24 -11
  124. package/plugins/lisa-agy/scripts/resolve-lifecycle-role.mjs +2 -7
  125. package/plugins/lisa-agy/skills/lisa-github-build-intake/SKILL.md +18 -10
  126. package/plugins/lisa-agy/skills/lisa-jira-build-intake/SKILL.md +18 -9
  127. package/plugins/lisa-agy/skills/lisa-linear-access/SKILL.md +45 -7
  128. package/plugins/lisa-agy/skills/lisa-linear-build-intake/SKILL.md +18 -7
  129. package/plugins/lisa-agy/skills/lisa-linear-prd-intake/SKILL.md +12 -2
  130. package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +1 -18
  131. package/plugins/lisa-agy/skills/lisa-linear-verify/SKILL.md +0 -17
  132. package/plugins/lisa-agy/skills/lisa-linear-write-issue/SKILL.md +3 -34
  133. package/plugins/lisa-agy/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
  134. package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +46 -6
  135. package/plugins/lisa-agy/skills/lisa-rework-triage/SKILL.md +2 -1
  136. package/plugins/lisa-agy/skills/lisa-secrets-access/scripts/providers.mjs +2 -1
  137. package/plugins/lisa-agy/skills/lisa-setup-linear/SKILL.md +1 -1
  138. package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +7 -2
  139. package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +11 -4
  140. package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/toolchain.mjs +17 -5
  141. package/plugins/lisa-agy/skills/lisa-track/SKILL.md +18 -4
  142. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  143. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  144. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  145. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  146. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  147. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  148. package/plugins/lisa-copilot/hooks/block-blind-automerge.sh +13 -5
  149. package/plugins/lisa-copilot/hooks/block-direct-issue-create.sh +7 -0
  150. package/plugins/lisa-copilot/hooks/block-instruction-file-edits.sh +3 -0
  151. package/plugins/lisa-copilot/hooks/block-managed-file-edits.sh +76 -2
  152. package/plugins/lisa-copilot/hooks/block-no-verify.sh +3 -0
  153. package/plugins/lisa-copilot/hooks/block-shell-json-parsing.sh +3 -0
  154. package/plugins/lisa-copilot/hooks/guard-dedupe.bash +66 -29
  155. package/plugins/lisa-copilot/hooks/parity-safety-net-heredoc.py +3 -0
  156. package/plugins/lisa-copilot/hooks/parity-safety-net.sh +5 -1
  157. package/plugins/lisa-copilot/hooks/worktree-binding-guard.mjs +3 -0
  158. package/plugins/lisa-copilot/hooks/worktree-binding-guard.sh +5 -1
  159. package/plugins/lisa-copilot/rules/eager/00-rule-index.md +1 -0
  160. package/plugins/lisa-copilot/rules/eager/base-rules.md +3 -1
  161. package/plugins/lisa-copilot/rules/eager/withdrawn-rulings.md +14 -3
  162. package/plugins/lisa-copilot/rules/reference/automation-runbook-contract.md +1 -1
  163. package/plugins/lisa-copilot/rules/reference/bdd-e2e-coverage.md +1 -1
  164. package/plugins/lisa-copilot/rules/reference/blocker-containment.md +3 -3
  165. package/plugins/lisa-copilot/rules/reference/claim-archaeology.md +1 -1
  166. package/plugins/lisa-copilot/rules/reference/claim-evidence-mapping.md +1 -1
  167. package/plugins/lisa-copilot/rules/reference/claim-time-guards.md +1 -1
  168. package/plugins/lisa-copilot/rules/reference/control-reachability.md +1 -1
  169. package/plugins/lisa-copilot/rules/reference/convergent-review.md +1 -1
  170. package/plugins/lisa-copilot/rules/reference/credential-substrate-precedence.md +1 -1
  171. package/plugins/lisa-copilot/rules/reference/dependency-decision-records.md +1 -1
  172. package/plugins/lisa-copilot/rules/reference/dependency-internalization-kit.md +1 -1
  173. package/plugins/lisa-copilot/rules/reference/dependency-trust-classes.md +1 -1
  174. package/plugins/lisa-copilot/rules/reference/deployed-state-readback.md +1 -1
  175. package/plugins/lisa-copilot/rules/reference/derived-branch-plan.md +1 -1
  176. package/plugins/lisa-copilot/rules/reference/design-source-of-truth.md +1 -1
  177. package/plugins/lisa-copilot/rules/reference/design-value-binding.md +1 -1
  178. package/plugins/lisa-copilot/rules/reference/documentation-source-paths.md +1 -1
  179. package/plugins/lisa-copilot/rules/reference/leaf-only-lifecycle.md +1 -1
  180. package/plugins/lisa-copilot/rules/reference/observability-audit.md +1 -1
  181. package/plugins/lisa-copilot/rules/reference/prd-definition-of-ready.md +1 -1
  182. package/plugins/lisa-copilot/rules/reference/prd-lifecycle-rollup.md +1 -1
  183. package/plugins/lisa-copilot/rules/reference/pre-flight-autofill.md +1 -1
  184. package/plugins/lisa-copilot/rules/reference/promotion-contract.md +1 -1
  185. package/plugins/lisa-copilot/rules/reference/readiness-rubric.md +1 -1
  186. package/plugins/lisa-copilot/rules/reference/ready-role-filing.md +1 -1
  187. package/plugins/lisa-copilot/rules/reference/rejection-detection.md +1 -1
  188. package/plugins/lisa-copilot/rules/reference/repo-scope-split.md +9 -10
  189. package/plugins/lisa-copilot/rules/reference/reset-seed-coverage.md +1 -1
  190. package/plugins/lisa-copilot/rules/reference/usage-accounting.md +1 -1
  191. package/plugins/lisa-copilot/rules/reference/work-item-definition-of-ready.md +1 -1
  192. package/plugins/lisa-copilot/scripts/linear-state-write-target.mjs +2 -2
  193. package/plugins/lisa-copilot/scripts/qa-signal-lifecycle.mjs +24 -11
  194. package/plugins/lisa-copilot/scripts/resolve-lifecycle-role.mjs +2 -7
  195. package/plugins/lisa-copilot/skills/lisa-github-build-intake/SKILL.md +18 -10
  196. package/plugins/lisa-copilot/skills/lisa-jira-build-intake/SKILL.md +18 -9
  197. package/plugins/lisa-copilot/skills/lisa-linear-access/SKILL.md +45 -7
  198. package/plugins/lisa-copilot/skills/lisa-linear-build-intake/SKILL.md +18 -7
  199. package/plugins/lisa-copilot/skills/lisa-linear-prd-intake/SKILL.md +12 -2
  200. package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +1 -18
  201. package/plugins/lisa-copilot/skills/lisa-linear-verify/SKILL.md +0 -17
  202. package/plugins/lisa-copilot/skills/lisa-linear-write-issue/SKILL.md +3 -34
  203. package/plugins/lisa-copilot/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
  204. package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +46 -6
  205. package/plugins/lisa-copilot/skills/lisa-rework-triage/SKILL.md +2 -1
  206. package/plugins/lisa-copilot/skills/lisa-secrets-access/scripts/providers.mjs +2 -1
  207. package/plugins/lisa-copilot/skills/lisa-setup-linear/SKILL.md +1 -1
  208. package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +7 -2
  209. package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +11 -4
  210. package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/toolchain.mjs +17 -5
  211. package/plugins/lisa-copilot/skills/lisa-track/SKILL.md +18 -4
  212. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  213. package/plugins/lisa-cursor/hooks/block-blind-automerge.sh +13 -5
  214. package/plugins/lisa-cursor/hooks/block-direct-issue-create.sh +7 -0
  215. package/plugins/lisa-cursor/hooks/block-instruction-file-edits.sh +3 -0
  216. package/plugins/lisa-cursor/hooks/block-managed-file-edits.sh +76 -2
  217. package/plugins/lisa-cursor/hooks/block-no-verify.sh +3 -0
  218. package/plugins/lisa-cursor/hooks/block-shell-json-parsing.sh +3 -0
  219. package/plugins/lisa-cursor/hooks/guard-dedupe.bash +66 -29
  220. package/plugins/lisa-cursor/hooks/parity-safety-net-heredoc.py +3 -0
  221. package/plugins/lisa-cursor/hooks/parity-safety-net.sh +5 -1
  222. package/plugins/lisa-cursor/hooks/worktree-binding-guard.mjs +3 -0
  223. package/plugins/lisa-cursor/hooks/worktree-binding-guard.sh +5 -1
  224. package/plugins/lisa-cursor/rules/00-rule-index.mdc +1 -0
  225. package/plugins/lisa-cursor/rules/automation-runbook-contract-reference.mdc +1 -1
  226. package/plugins/lisa-cursor/rules/base-rules.mdc +3 -1
  227. package/plugins/lisa-cursor/rules/bdd-e2e-coverage-reference.mdc +1 -1
  228. package/plugins/lisa-cursor/rules/blocker-containment-reference.mdc +3 -3
  229. package/plugins/lisa-cursor/rules/claim-archaeology-reference.mdc +1 -1
  230. package/plugins/lisa-cursor/rules/claim-evidence-mapping-reference.mdc +1 -1
  231. package/plugins/lisa-cursor/rules/claim-time-guards-reference.mdc +1 -1
  232. package/plugins/lisa-cursor/rules/control-reachability-reference.mdc +1 -1
  233. package/plugins/lisa-cursor/rules/convergent-review-reference.mdc +1 -1
  234. package/plugins/lisa-cursor/rules/credential-substrate-precedence-reference.mdc +1 -1
  235. package/plugins/lisa-cursor/rules/dependency-decision-records-reference.mdc +1 -1
  236. package/plugins/lisa-cursor/rules/dependency-internalization-kit-reference.mdc +1 -1
  237. package/plugins/lisa-cursor/rules/dependency-trust-classes-reference.mdc +1 -1
  238. package/plugins/lisa-cursor/rules/deployed-state-readback-reference.mdc +1 -1
  239. package/plugins/lisa-cursor/rules/derived-branch-plan-reference.mdc +1 -1
  240. package/plugins/lisa-cursor/rules/design-source-of-truth-reference.mdc +1 -1
  241. package/plugins/lisa-cursor/rules/design-value-binding-reference.mdc +1 -1
  242. package/plugins/lisa-cursor/rules/documentation-source-paths-reference.mdc +1 -1
  243. package/plugins/lisa-cursor/rules/leaf-only-lifecycle-reference.mdc +1 -1
  244. package/plugins/lisa-cursor/rules/observability-audit-reference.mdc +1 -1
  245. package/plugins/lisa-cursor/rules/prd-definition-of-ready-reference.mdc +1 -1
  246. package/plugins/lisa-cursor/rules/prd-lifecycle-rollup-reference.mdc +1 -1
  247. package/plugins/lisa-cursor/rules/pre-flight-autofill-reference.mdc +1 -1
  248. package/plugins/lisa-cursor/rules/promotion-contract-reference.mdc +1 -1
  249. package/plugins/lisa-cursor/rules/readiness-rubric-reference.mdc +1 -1
  250. package/plugins/lisa-cursor/rules/ready-role-filing-reference.mdc +1 -1
  251. package/plugins/lisa-cursor/rules/rejection-detection-reference.mdc +1 -1
  252. package/plugins/lisa-cursor/rules/repo-scope-split-reference.mdc +9 -10
  253. package/plugins/lisa-cursor/rules/reset-seed-coverage-reference.mdc +1 -1
  254. package/plugins/lisa-cursor/rules/usage-accounting-reference.mdc +1 -1
  255. package/plugins/lisa-cursor/rules/withdrawn-rulings.mdc +14 -3
  256. package/plugins/lisa-cursor/rules/work-item-definition-of-ready-reference.mdc +1 -1
  257. package/plugins/lisa-cursor/scripts/linear-state-write-target.mjs +2 -2
  258. package/plugins/lisa-cursor/scripts/qa-signal-lifecycle.mjs +24 -11
  259. package/plugins/lisa-cursor/scripts/resolve-lifecycle-role.mjs +2 -7
  260. package/plugins/lisa-cursor/skills/lisa-github-build-intake/SKILL.md +18 -10
  261. package/plugins/lisa-cursor/skills/lisa-jira-build-intake/SKILL.md +18 -9
  262. package/plugins/lisa-cursor/skills/lisa-linear-access/SKILL.md +45 -7
  263. package/plugins/lisa-cursor/skills/lisa-linear-build-intake/SKILL.md +18 -7
  264. package/plugins/lisa-cursor/skills/lisa-linear-prd-intake/SKILL.md +12 -2
  265. package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +1 -18
  266. package/plugins/lisa-cursor/skills/lisa-linear-verify/SKILL.md +0 -17
  267. package/plugins/lisa-cursor/skills/lisa-linear-write-issue/SKILL.md +3 -34
  268. package/plugins/lisa-cursor/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
  269. package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +46 -6
  270. package/plugins/lisa-cursor/skills/lisa-rework-triage/SKILL.md +2 -1
  271. package/plugins/lisa-cursor/skills/lisa-secrets-access/scripts/providers.mjs +2 -1
  272. package/plugins/lisa-cursor/skills/lisa-setup-linear/SKILL.md +1 -1
  273. package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +7 -2
  274. package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +11 -4
  275. package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/toolchain.mjs +17 -5
  276. package/plugins/lisa-cursor/skills/lisa-track/SKILL.md +18 -4
  277. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  278. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  279. package/plugins/lisa-expo-agy/plugin.json +1 -1
  280. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  281. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  282. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  283. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  284. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  285. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  286. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  287. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  288. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  289. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  290. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  291. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  292. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  293. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  294. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  295. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  296. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  297. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  298. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  299. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  300. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  301. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  302. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  303. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  304. package/plugins/lisa-rails-agy/plugin.json +1 -1
  305. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  306. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  307. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  308. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  309. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  310. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  311. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  312. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  313. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  314. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  315. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  316. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  317. package/plugins/materialized-artifacts.json +11 -0
  318. package/plugins/src/base/hooks/block-blind-automerge.sh +10 -5
  319. package/plugins/src/base/hooks/block-direct-issue-create.sh +4 -0
  320. package/plugins/src/base/hooks/block-managed-file-edits.sh +73 -2
  321. package/plugins/src/base/hooks/guard-dedupe.bash +63 -29
  322. package/plugins/src/base/hooks/parity-safety-net.sh +2 -1
  323. package/plugins/src/base/hooks/worktree-binding-guard.sh +2 -1
  324. package/plugins/src/base/rules/eager/00-rule-index.md +1 -0
  325. package/plugins/src/base/rules/eager/base-rules.md +3 -1
  326. package/plugins/src/base/rules/eager/withdrawn-rulings.md +14 -3
  327. package/plugins/src/base/rules/reference/automation-runbook-contract.md +1 -1
  328. package/plugins/src/base/rules/reference/bdd-e2e-coverage.md +1 -1
  329. package/plugins/src/base/rules/reference/blocker-containment.md +3 -3
  330. package/plugins/src/base/rules/reference/claim-archaeology.md +1 -1
  331. package/plugins/src/base/rules/reference/claim-evidence-mapping.md +1 -1
  332. package/plugins/src/base/rules/reference/claim-time-guards.md +1 -1
  333. package/plugins/src/base/rules/reference/control-reachability.md +1 -1
  334. package/plugins/src/base/rules/reference/convergent-review.md +1 -1
  335. package/plugins/src/base/rules/reference/credential-substrate-precedence.md +1 -1
  336. package/plugins/src/base/rules/reference/dependency-decision-records.md +1 -1
  337. package/plugins/src/base/rules/reference/dependency-internalization-kit.md +1 -1
  338. package/plugins/src/base/rules/reference/dependency-trust-classes.md +1 -1
  339. package/plugins/src/base/rules/reference/deployed-state-readback.md +1 -1
  340. package/plugins/src/base/rules/reference/derived-branch-plan.md +1 -1
  341. package/plugins/src/base/rules/reference/design-source-of-truth.md +1 -1
  342. package/plugins/src/base/rules/reference/design-value-binding.md +1 -1
  343. package/plugins/src/base/rules/reference/documentation-source-paths.md +1 -1
  344. package/plugins/src/base/rules/reference/leaf-only-lifecycle.md +1 -1
  345. package/plugins/src/base/rules/reference/observability-audit.md +1 -1
  346. package/plugins/src/base/rules/reference/prd-definition-of-ready.md +1 -1
  347. package/plugins/src/base/rules/reference/prd-lifecycle-rollup.md +1 -1
  348. package/plugins/src/base/rules/reference/pre-flight-autofill.md +1 -1
  349. package/plugins/src/base/rules/reference/promotion-contract.md +1 -1
  350. package/plugins/src/base/rules/reference/readiness-rubric.md +1 -1
  351. package/plugins/src/base/rules/reference/ready-role-filing.md +1 -1
  352. package/plugins/src/base/rules/reference/rejection-detection.md +1 -1
  353. package/plugins/src/base/rules/reference/repo-scope-split.md +9 -10
  354. package/plugins/src/base/rules/reference/reset-seed-coverage.md +1 -1
  355. package/plugins/src/base/rules/reference/usage-accounting.md +1 -1
  356. package/plugins/src/base/rules/reference/work-item-definition-of-ready.md +1 -1
  357. package/plugins/src/base/scripts/linear-state-write-target.mjs +2 -2
  358. package/plugins/src/base/scripts/qa-signal-lifecycle.mjs +24 -11
  359. package/plugins/src/base/scripts/resolve-lifecycle-role.mjs +2 -7
  360. package/plugins/src/base/skills/lisa-github-build-intake/SKILL.md +18 -10
  361. package/plugins/src/base/skills/lisa-jira-build-intake/SKILL.md +18 -9
  362. package/plugins/src/base/skills/lisa-linear-access/SKILL.md +45 -7
  363. package/plugins/src/base/skills/lisa-linear-build-intake/SKILL.md +18 -7
  364. package/plugins/src/base/skills/lisa-linear-prd-intake/SKILL.md +12 -2
  365. package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +1 -18
  366. package/plugins/src/base/skills/lisa-linear-verify/SKILL.md +0 -17
  367. package/plugins/src/base/skills/lisa-linear-write-issue/SKILL.md +3 -34
  368. package/plugins/src/base/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
  369. package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +46 -6
  370. package/plugins/src/base/skills/lisa-rework-triage/SKILL.md +2 -1
  371. package/plugins/src/base/skills/lisa-secrets-access/scripts/providers.mjs +2 -1
  372. package/plugins/src/base/skills/lisa-setup-linear/SKILL.md +1 -1
  373. package/plugins/src/base/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +7 -2
  374. package/plugins/src/base/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +11 -4
  375. package/plugins/src/base/skills/lisa-setup-remote-env/scripts/toolchain.mjs +17 -5
  376. package/plugins/src/base/skills/lisa-track/SKILL.md +18 -4
  377. package/scripts/build-plugins.sh +4 -0
  378. package/scripts/copy-opencode-plugin-templates.mjs +5 -1
  379. package/scripts/lisa-enforcement-fallback.sh +9 -1
  380. package/scripts/two-channel-couplings.json +5 -33
  381. package/typescript/copy-overwrite/scripts/check-skipped-required-checks.mjs +551 -13
  382. package/typescript/create-only/.github/required-checks.json +1 -1
  383. package/plugins/lisa/.codex-plugin/skills/lisa-qa-checklist/SKILL.md +0 -70
  384. package/plugins/lisa/.codex-plugin/skills/lisa-qa-checklist/agents/openai.yaml +0 -4
  385. package/plugins/lisa/.codex-plugin/skills/lisa-qa-clear/SKILL.md +0 -86
  386. package/plugins/lisa/.codex-plugin/skills/lisa-qa-clear/agents/openai.yaml +0 -4
  387. package/plugins/lisa/.codex-plugin/skills/lisa-qa-fail/SKILL.md +0 -119
  388. package/plugins/lisa/.codex-plugin/skills/lisa-qa-fail/agents/openai.yaml +0 -4
  389. package/plugins/lisa/.codex-plugin/skills/lisa-qa-queue/SKILL.md +0 -94
  390. package/plugins/lisa/.codex-plugin/skills/lisa-qa-queue/agents/openai.yaml +0 -4
  391. package/plugins/lisa/commands/qa-checklist.md +0 -6
  392. package/plugins/lisa/commands/qa-clear.md +0 -6
  393. package/plugins/lisa/commands/qa-fail.md +0 -6
  394. package/plugins/lisa/commands/qa-queue.md +0 -6
  395. package/plugins/lisa/skills/lisa-qa-checklist/SKILL.md +0 -70
  396. package/plugins/lisa/skills/lisa-qa-checklist/agents/openai.yaml +0 -4
  397. package/plugins/lisa/skills/lisa-qa-clear/SKILL.md +0 -86
  398. package/plugins/lisa/skills/lisa-qa-clear/agents/openai.yaml +0 -4
  399. package/plugins/lisa/skills/lisa-qa-fail/SKILL.md +0 -119
  400. package/plugins/lisa/skills/lisa-qa-fail/agents/openai.yaml +0 -4
  401. package/plugins/lisa/skills/lisa-qa-queue/SKILL.md +0 -94
  402. package/plugins/lisa/skills/lisa-qa-queue/agents/openai.yaml +0 -4
  403. package/plugins/lisa-agy/commands/lisa/qa-checklist.md +0 -6
  404. package/plugins/lisa-agy/commands/lisa/qa-clear.md +0 -6
  405. package/plugins/lisa-agy/commands/lisa/qa-fail.md +0 -6
  406. package/plugins/lisa-agy/commands/lisa/qa-queue.md +0 -6
  407. package/plugins/lisa-agy/skills/lisa-qa-checklist/SKILL.md +0 -70
  408. package/plugins/lisa-agy/skills/lisa-qa-clear/SKILL.md +0 -86
  409. package/plugins/lisa-agy/skills/lisa-qa-fail/SKILL.md +0 -119
  410. package/plugins/lisa-agy/skills/lisa-qa-queue/SKILL.md +0 -94
  411. package/plugins/lisa-copilot/commands/lisa/qa-checklist.md +0 -6
  412. package/plugins/lisa-copilot/commands/lisa/qa-clear.md +0 -6
  413. package/plugins/lisa-copilot/commands/lisa/qa-fail.md +0 -6
  414. package/plugins/lisa-copilot/commands/lisa/qa-queue.md +0 -6
  415. package/plugins/lisa-copilot/skills/lisa-qa-checklist/SKILL.md +0 -70
  416. package/plugins/lisa-copilot/skills/lisa-qa-clear/SKILL.md +0 -86
  417. package/plugins/lisa-copilot/skills/lisa-qa-fail/SKILL.md +0 -119
  418. package/plugins/lisa-copilot/skills/lisa-qa-queue/SKILL.md +0 -94
  419. package/plugins/lisa-cursor/commands/lisa/qa-checklist.md +0 -6
  420. package/plugins/lisa-cursor/commands/lisa/qa-clear.md +0 -6
  421. package/plugins/lisa-cursor/commands/lisa/qa-fail.md +0 -6
  422. package/plugins/lisa-cursor/commands/lisa/qa-queue.md +0 -6
  423. package/plugins/lisa-cursor/skills/lisa-qa-checklist/SKILL.md +0 -70
  424. package/plugins/lisa-cursor/skills/lisa-qa-clear/SKILL.md +0 -86
  425. package/plugins/lisa-cursor/skills/lisa-qa-fail/SKILL.md +0 -119
  426. package/plugins/lisa-cursor/skills/lisa-qa-queue/SKILL.md +0 -94
  427. package/plugins/src/base/commands/qa-checklist.md +0 -6
  428. package/plugins/src/base/commands/qa-clear.md +0 -6
  429. package/plugins/src/base/commands/qa-fail.md +0 -6
  430. package/plugins/src/base/commands/qa-queue.md +0 -6
  431. package/plugins/src/base/skills/lisa-qa-checklist/SKILL.md +0 -70
  432. package/plugins/src/base/skills/lisa-qa-clear/SKILL.md +0 -86
  433. package/plugins/src/base/skills/lisa-qa-fail/SKILL.md +0 -119
  434. package/plugins/src/base/skills/lisa-qa-queue/SKILL.md +0 -94
@@ -1,6 +0,0 @@
1
- ---
2
- description: "File a QA failure: find the right ticket (never a duplicate), write the structured failure report, diagnose the expectation gap, label qa-fail, and return the ticket to build-ready."
3
- argument-hint: "[ticket-key] <what you saw, in your own words>"
4
- ---
5
-
6
- Use the /lisa-qa-fail skill to file this QA failure. $ARGUMENTS
@@ -1,6 +0,0 @@
1
- ---
2
- description: "Serve the next ticket awaiting QA verdict as a plain-language acceptance brief; record pass (→ certified) or fail (→ structured report via lisa-qa-fail)."
3
- argument-hint: "[pass | fail <description> | next]"
4
- ---
5
-
6
- Use the /lisa-qa-queue skill to serve the QA acceptance queue. $ARGUMENTS
@@ -1,70 +0,0 @@
1
- ---
2
- name: lisa-qa-checklist
3
- description: "Serve the current manual regression checklist to a human QA tester. Reads the project's curated journey list, cross-references it against what the automated suites (Playwright web E2E, Maestro native E2E) actually cover by scanning the spec files, and serves only the journeys that still need human eyes — each as plain-language steps. Keeps a single source of truth so testers never work from a stale personal copy, and shrinks automatically as automated coverage grows."
4
- allowed-tools: ["Bash", "Read", "Glob", "Grep", "Write", "Edit"]
5
- ---
6
-
7
- # QA Checklist: $ARGUMENTS
8
-
9
- The manual regression sweep exists to catch what automation does not. Its checklist must
10
- therefore be computed, not remembered: curated journeys minus automated coverage, at the
11
- moment the tester asks.
12
-
13
- ## Sources
14
-
15
- 1. **Curated journey list** — `qa.checklistFile` in `.lisa.config.json`, default
16
- `.lisa/qa-checklist.md`. Format: one `## Journey: <name>` section per user journey,
17
- with plain-language steps and an optional `automation:` line naming the covering spec
18
- file(s) once one exists. If the file does not exist, offer to bootstrap it: derive
19
- candidate journeys from the app's route map and the existing E2E suites' describe
20
- blocks, write the draft, and ask the operator to curate it once. Never invent
21
- journeys silently.
22
- 2. **Automated coverage** — scan the repo's E2E suites (Playwright specs, Maestro flows;
23
- locate via the project's e2e/test directories). An `automation:` line must name BOTH
24
- the spec file and the specific test within it (the Playwright `describe`/`test` title
25
- or Maestro flow name): `automation: <spec-path> :: <test-or-flow-name>`. A journey
26
- counts as covered only when that spec file exists, the named test/flow is present in
27
- it, and it is not skipped (`test.skip`, commented-out flow, or excluded from CI). A
28
- file-only line, a named test that no longer matches, or any ambiguous mapping is
29
- treated as **uncovered** — a live filename proves nothing about what the spec
30
- exercises. A deleted, renamed, or skipped test silently un-covers its journey — the
31
- very regression this check exists to catch; call it out loudly.
32
-
33
- ## Serving the sweep
34
-
35
- Present two lists, human-first:
36
-
37
- ```text
38
- ## Manual sweep — <n> journeys need your eyes
39
- 1. <Journey name> — <plain-language steps>
40
- Why manual: <no automation | automation skipped/stale: <spec>>
41
- ...
42
-
43
- ## Covered by automation — <n> journeys (skim, don't re-test)
44
- - <Journey name> — <spec file> (<playwright|maestro>)
45
- ```
46
-
47
- Rules for the served text: steps an intern can follow, no spec-file jargon in the manual
48
- section beyond the "why manual" line, and stable journey ordering (file order) so testers
49
- can resume mid-sweep.
50
-
51
- ## Maintaining the list
52
-
53
- - Tester or operator adds/edits journeys in plain language → edit the checklist file
54
- (this skill may apply the edit on request; it is a repo file, so changes ride normal
55
- review).
56
- - When a journey gains automation (e.g. `lisa-codify-verification` lands a spec), add its
57
- `automation: <spec-path> :: <test-or-flow-name>` line — on request this skill locates
58
- the covering spec and test, confirms the named test actually drives the journey's
59
- steps, and writes the line itself.
60
- - Never maintain per-tester copies; the file is the single source of truth and the
61
- computed view is always derived fresh.
62
-
63
- ## Rules
64
-
65
- - Coverage claims must point at an existing, non-skipped spec — "there's a test somewhere"
66
- does not count.
67
- - Serving is read-only by default; file edits happen only on explicit request.
68
- - If the automated-coverage scan finds specs exercising a journey that is missing from
69
- the curated list entirely, surface it as a suggested addition — the human curates, the
70
- skill proposes.
@@ -1,86 +0,0 @@
1
- ---
2
- name: lisa-qa-clear
3
- description: "Bulk-clear tickets a human QA tester cannot verify. Finds tickets in the configured QA queue status that are scoped entirely to non-user-facing repos (API/backend services, infrastructure) — where QA has only end-user access and nothing observable to test — and transitions them to the configured certified status, reporting the moved list for the record. Runnable from any coding agent as a single instruction like 'move all backend- and infrastructure-only tickets from the QA queue to certified'."
4
- allowed-tools: ["Skill", "Bash", "Read", "Glob", "Grep"]
5
- ---
6
-
7
- # QA Clear: $ARGUMENTS
8
-
9
- Human QA can only judge what a user can see. Tickets whose entire scope is a
10
- non-user-facing repo were already verified by the automated lifecycle before reaching the
11
- QA queue; holding them for a human who cannot observe them is pure queue noise. Clear
12
- them in one auditable batch.
13
-
14
- ## Config resolution
15
-
16
- Read `.lisa.config.json`:
17
-
18
- - **QA queue status** — `jira.workflow.qa.queue`, falling back to
19
- `jira.workflow.done.staging`.
20
- - **Certified status** — `jira.workflow.qa.certified`. Required; if missing, stop and
21
- instruct the operator — never guess a terminal status.
22
- - **Tracker dispatch** — `tracker` decides the surface as everywhere; on GitHub or
23
- Linear the status names above map to the equivalent labels/states.
24
- - **Non-user-facing repos** — `qa.nonUserFacingRepos` (array of repo names, e.g.
25
- `["api", "infrastructure"]`). If the key is missing, derive a proposal from
26
- the project registry (repos with no UI framework signals — no expo/react/native/web
27
- app surface) and **present it for operator confirmation before moving anything**; never
28
- bulk-transition on an unconfirmed inference. Recommend persisting the confirmed list to
29
- the config.
30
-
31
- ## Procedure
32
-
33
- 1. Query all tickets in the QA queue status.
34
- 2. Classify each by repo scope, in order:
35
- - `repo:<name>` label or matching component → that repo.
36
- - Unlabeled → determine the repo from the ticket content (description, AC, technical
37
- approach) exactly as build-intake's repo-scope gate does, and stamp the
38
- `repo:<name>` label while you're there so the next sweep is cheap.
39
- - Undeterminable → leave in place; flag for the operator.
40
- 3. Partition:
41
- - **Every** touched repo is non-user-facing → eligible to clear.
42
- - Any user-facing repo in scope (including mixed-scope) → stays in the queue for the
43
- human pass via `lisa-qa-queue`.
44
- 4. For each eligible ticket, in this order — the pairing must be failure-safe:
45
- 1. Post the audit comment first:
46
- `[lisa-qa-clear] Certified without human QA: scope is <repo(s)>, not observable
47
- with end-user access. Verified by the automated lifecycle pre-promotion.`
48
- 2. Then transition to the certified status.
49
- 3. Then clear the QA-failure **signal**, because certifying is one of its two void
50
- conditions and this is the second path that reaches it:
51
-
52
- ```bash
53
- RESOLVER="${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-plugins/lisa}}/scripts/qa-signal-lifecycle.mjs"
54
- SIGNAL=$(node "$RESOLVER" --vendor "<jira|linear|github>" --print-label)
55
- ```
56
-
57
- Remove `$SIGNAL` through the same tracker surface that applied it. Removing a label
58
- the ticket does not carry is a no-op, so this runs unconditionally. The
59
- `[lisa-qa-fail]` comments are never touched — the history stays, the signal goes.
60
- 4. Verify all three landed before counting the ticket as moved. A comment without
61
- the transition, a transition without the comment, or a certified ticket still
62
- wearing the signal is a **partial** — report it as such, never as completed.
63
- 5. Report the batch:
64
-
65
- ```text
66
- ## QA Clear — <date>
67
- Moved to <certified>: <n> (<KEY-1>, <KEY-2>, …) — repo per ticket
68
- Left in queue (user-facing): <n>
69
- Left in queue (undeterminable repo — needs operator): <keys or none>
70
- ```
71
-
72
- The operator (or tester) reviews the moved list; anything that "sounds user-facing" can
73
- be pulled back with a single instruction — the transition is reversible and the comment
74
- marks exactly what was auto-cleared.
75
-
76
- ## Rules
77
-
78
- - Never clear a mixed-scope ticket — partial human-verifiability means human QA.
79
- - Never bulk-move on an inferred repo list without explicit operator confirmation.
80
- - Every cleared ticket carries the audit comment; a transition without the comment is a
81
- bug in this procedure.
82
- - Idempotent by repair, not by skip: a ticket is complete only when it has the
83
- `[lisa-qa-clear]` comment, the certified status, AND no QA-failure signal. Re-runs
84
- finish partials — comment present but not certified → transition it; certified but no
85
- comment → post the comment; certified but still signalled → clear the signal. Only
86
- fully-complete tickets are skipped silently.
@@ -1,119 +0,0 @@
1
- ---
2
- name: lisa-qa-fail
3
- description: "QA failure front door. Takes a human tester's plain-language failure description, finds the right ticket (the served ticket, or the original via duplicate-discovery when the report arrives untied), writes the structured failure report (repro / expected vs. actual / which acceptance criterion failed), diagnoses the EXPECTATION GAP — why the implementing agent's done-evidence said done when QA says it isn't — applies the qa-fail label that makes lisa-rework-triage detection deterministic, and transitions the ticket back to the build-ready status. QA never words a ticket again; agents never guess what QA meant."
4
- allowed-tools: ["Skill", "Bash", "Read", "Glob", "Grep"]
5
- ---
6
-
7
- # QA Fail: $ARGUMENTS
8
-
9
- Convert a human failure observation into the exact artifact the fixing agent needs. Two
10
- inputs arrive together or the report cannot be filed: a **target ticket** and the
11
- **tester's verbatim description** (what they did, what they expected, what happened,
12
- plus any screenshots).
13
-
14
- ## Phase 1 — Resolve the target ticket
15
-
16
- - **Tied report** (invoked from `lisa-qa-queue` with a key): use it.
17
- - **Untied report** ("I found something broken: …"): run duplicate-discovery BEFORE any
18
- write, reusing the mandatory relationship-discovery searches defined by the configured
19
- tracker's write skill (dispatched through `lisa-tracker-write`): search open and
20
- recently-closed tickets in the affected area, and the current QA-queue set. If an existing ticket
21
- covers it, that ticket is the target — update it, never file a twin. Only when the
22
- search documents no match, create a new Bug via `lisa-tracker-write` (which enforces
23
- the full quality gates) with explicit `build_ready: true` per the `ready-role-filing`
24
- rule — omitted is NOT build-ready on any tracker, and a rework Bug nothing claims is
25
- an incomplete handoff — and treat it as the target. Report which path was taken.
26
-
27
- ## Phase 2 — Structured failure report
28
-
29
- Fetch the bundle via `lisa-tracker-read`. Post one comment:
30
-
31
- ```text
32
- [lisa-qa-fail] QA failure — <one-line summary>
33
- Reported by: <tester> on <date>, against <environment>
34
- Steps to reproduce: <numbered, from the tester's words>
35
- Expected: <what the ticket/AC promised, quoted or paraphrased faithfully>
36
- Actual: <what the tester observed, verbatim where possible>
37
- Failed acceptance criterion: <AC number/text from the ticket — or "not covered by any AC" (see gap)>
38
- Attachments: <screenshots if provided>
39
- ```
40
-
41
- Preserve the tester's language in `Actual` — their words are the evidence; your job is
42
- structure, not rewording.
43
-
44
- ## Phase 3 — Expectation-gap diagnosis
45
-
46
- Answer explicitly: **why did the implementing agent believe this was done?** Locate the
47
- prior cycle's done-evidence — the build-evidence comment (`lisa-tracker-evidence` output),
48
- the merged PR's verification section, and any codified regression test — and compare it
49
- against the failure. Classify the gap (exactly one):
50
-
51
- | Gap | Meaning |
52
- |-----|---------|
53
- | `ac-mismatch` | The evidence verified a different reading of the AC than QA's — the criterion is ambiguous or the ticket distorted it. |
54
- | `verification-weakness` | The evidence never actually exercised the failing path (asserted adjacent behavior, mocked the surface, or skipped the step). |
55
- | `environment-difference` | Verified where it works (e.g. dev) but fails on the QA environment — config, data, or deployment drift. |
56
- | `data-difference` | Behavior depends on data present in one environment and absent in the other. |
57
- | `regression-since-merge` | The evidence was genuinely valid when produced; later merges broke it. |
58
- | `not-covered-by-ac` | QA's expectation is real but no AC promises it — a spec gap, not an implementation failure. |
59
-
60
- Append to the same comment:
61
-
62
- ```text
63
- Expectation gap: <classification>
64
- Why the agent thought it was done: <2-3 lines citing the specific evidence artifact>
65
- ```
66
-
67
- If no done-evidence exists at all, say so — `Expectation gap: no-evidence-found` is
68
- itself a serious finding (the verification lifecycle was skipped) and must be surfaced,
69
- not smoothed over.
70
-
71
- For `not-covered-by-ac`, do NOT transition the ticket — the spec question goes to the
72
- human product gate. Flag it in the response and stop after posting.
73
-
74
- ## Phase 4 — Signal and transition
75
-
76
- 1. Apply the QA-failure **signal** label. Resolve its name — never hardcode one:
77
-
78
- ```bash
79
- SIGNAL=$(node "${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-plugins/lisa}}/scripts/qa-signal-lifecycle.mjs" \
80
- --vendor "<jira|linear|github>" --print-label) # `qa.labels.fail`, default `qa-fail`
81
- ```
82
-
83
- This is the deterministic rework signal `lisa-rework-triage` keys on at next claim, and
84
- the gap classification above becomes its primary evidence.
85
-
86
- The signal is **transient, and it says so.** Two void conditions lift it, both with an
87
- executable predicate in `scripts/qa-signal-lifecycle.mjs`: a later QA pass verdict
88
- (`qa-pass-recorded`), or the item reaching the certified or a terminal role
89
- (`certified-role-reached`). `lisa-qa-queue` clears it on the pass path and `lisa-qa-clear`
90
- clears it when it certifies without a human, so the clear path is as reachable as this
91
- one. Record that in the comment so nobody has to infer it:
92
-
93
- ```text
94
- Signal: <label> — voided by a later QA pass, or by reaching the certified/terminal role.
95
- ```
96
-
97
- What is durable is the **history**: this `[lisa-qa-fail]` comment is never rewritten or
98
- removed, so "failed QA twice before shipping" stays readable after the label is gone.
99
- The label is the machine-read signal; the comment is the record.
100
- 2. Transition the ticket to the build-ready status (`jira.workflow.ready`, or the
101
- configured tracker's equivalent ready label/state when `tracker` is GitHub or
102
- Linear). The rework loop takes it from here: intake claims it, `lisa-ticket-triage` Phase 2.5 runs
103
- `lisa-rework-triage`, and the fix proceeds with full context.
104
- 3. Confirm to the tester in one plain sentence: what was recorded, and that the fix is
105
- queued — no further action needed from them.
106
-
107
- ## Rules
108
-
109
- - Never file a new ticket without the documented duplicate search (Phase 1).
110
- - Never paraphrase away the tester's observation; structure around it.
111
- - One `[lisa-qa-fail]` comment per failure event — if the same tester reports the same
112
- failure again before a fix ships, add a short "seen again <date>" line to the existing
113
- comment instead of a new block.
114
- - The expectation gap must cite a specific evidence artifact or say `no-evidence-found` —
115
- a gap classification without a citation is a guess, and guesses are worse than
116
- `no-evidence-found`.
117
- - Never apply a signal whose clear path you cannot name. A durable mark with no inverse is
118
- a defect class of its own (`state-changes-without-inverses`): it stays correct at the
119
- moment it fires and becomes wrong by outliving what it described.
@@ -1,94 +0,0 @@
1
- ---
2
- name: lisa-qa-queue
3
- description: "QA acceptance queue for human testers. Serves the next ticket awaiting QA verdict from the configured QA queue status as a plain-language acceptance brief — what the ticket promises, how to exercise it on the QA environment, in words a non-technical tester can follow. On 'pass', transitions the ticket to the configured certified status. On 'fail', delegates to lisa-qa-fail for the structured failure report, expectation-gap diagnosis, and return to the build-ready status. The conversational front door for human QA acceptance on any coding agent: testers say 'what's the next item?' / 'pass' / 'fail — here's what I saw'."
4
- allowed-tools: ["Skill", "Bash", "Read", "Glob", "Grep"]
5
- ---
6
-
7
- # QA Queue: $ARGUMENTS
8
-
9
- Serve one ticket at a time to a human QA tester and record their verdict. The tester is
10
- assumed **non-technical**: everything you present must be readable by an intern on their
11
- first day — no stack traces, no jargon, no internal identifiers without explanation.
12
-
13
- ## Config resolution
14
-
15
- Read `.lisa.config.json`:
16
-
17
- - **QA queue status** — `jira.workflow.qa.queue`, falling back to `jira.workflow.done.staging`
18
- (whatever status the project uses for "deployed to the environment QA tests against").
19
- If neither exists, stop and report the missing config.
20
- - **Certified status** — `jira.workflow.qa.certified` (the project's "passed QA, ships
21
- with the next release" status). Required for the pass path; if missing, stop and
22
- instruct the operator to add it — never guess a terminal status.
23
- - **Build-ready status** — `jira.workflow.ready` (fail path, via `lisa-qa-fail`).
24
- - **Tracker dispatch** — as everywhere: `tracker` decides JIRA / GitHub / Linear surfaces;
25
- status names above map to labels/states on non-JIRA trackers.
26
-
27
- ## Serving the next item
28
-
29
- 1. Query the QA queue: tickets in the queue status, oldest first, excluding tickets
30
- already carrying an unresolved `[lisa-qa-fail]` verdict from this sweep. Skip tickets
31
- whose repo is listed in `qa.nonUserFacingRepos` — those belong to `lisa-qa-clear`,
32
- not a human tester; note any encountered so the operator knows to run the clear.
33
- 2. Fetch the full context bundle via `lisa-tracker-read` (never serve from a bare summary).
34
- 3. Present ONE ticket as an **acceptance brief**:
35
- - **What changed, in user terms** — one or two sentences, translated from the ticket's
36
- stakeholder section.
37
- - **How to try it** — concrete steps on the QA environment (the `exploration` /
38
- Validation Journey config supplies the URL and test credentials): where to go, what
39
- to click or type, which account to use.
40
- - **What success looks like** — each acceptance criterion rewritten as an observable
41
- check ("you should see …"), numbered so the tester can cite one on failure.
42
- - **Worth poking at** — up to three edge probes drawn from the ticket's edge-case
43
- triage findings, phrased as actions ("try it with an empty search box").
44
- 4. End with: "Say **pass**, or describe what you saw if it failed."
45
-
46
- ## Recording the verdict
47
-
48
- - **Pass** — three writes, in this order, and the pairing must be failure-safe exactly as
49
- `lisa-qa-clear`'s is:
50
- 1. Post a brief `[lisa-qa-queue] QA pass` comment naming who verified and when. The
51
- literal marker matters: it is the `qa-pass-recorded` void condition's evidence.
52
- 2. Transition the ticket to the certified status via the tracker access layer.
53
- 3. **Clear the QA-failure signal.** A pass is the inverse of a fail, and until this runs
54
- an item that failed once reads as failing forever to `lisa-rework-triage`:
55
-
56
- ```bash
57
- RESOLVER="${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-plugins/lisa}}/scripts/qa-signal-lifecycle.mjs"
58
- SIGNAL=$(node "$RESOLVER" --vendor "<jira|linear|github>" --print-label)
59
- ```
60
-
61
- Remove `$SIGNAL` from the item through the same tracker surface that applied it —
62
- `gh issue edit <n> --remove-label "$SIGNAL"` on GitHub, the label-update mutation on
63
- Linear, the `update.labels[].remove` field on JIRA. Removing a label the item does not
64
- carry is a no-op on every tracker, so this is safe to run unconditionally.
65
-
66
- Verify all three landed before reporting the pass. A transition without the signal
67
- cleared is a **partial** — report it as such and finish it, never count it as complete.
68
-
69
- The failure **history** is untouched: the `[lisa-qa-fail]` comments stay exactly as
70
- written. Only the machine-read signal is voided, so "this failed QA twice before
71
- shipping" remains readable while "this is failing QA" stops being asserted.
72
-
73
- Then offer the next item.
74
- - **Fail** — invoke `lisa-qa-fail` with the ticket key and the tester's own words
75
- (verbatim — do not paraphrase away detail; attach any screenshots they provided). That
76
- skill owns the failure report, the expectation-gap diagnosis, the `qa-fail` label, and
77
- the transition back to build-ready. When it completes, confirm to the tester in one
78
- plain sentence what was recorded and offer the next item.
79
- - **Unclear / can't test** — if the tester cannot exercise the ticket (missing access,
80
- feature flag off, no test data), do NOT guess a verdict. Post a
81
- `[lisa-qa-queue] QA blocked: <reason>` comment, leave the status untouched, flag it in
82
- the session summary for the operator, and serve the next item.
83
-
84
- ## Rules
85
-
86
- - One ticket at a time — never dump the queue on the tester.
87
- - The tester's verbatim description is evidence; preserve it exactly in whatever is posted.
88
- - Never transition to certified without an explicit "pass" from the tester.
89
- - Never certify without clearing the QA-failure signal. The clear path must stay as
90
- reachable as the path that applied it (`state-changes-without-inverses`).
91
- - All tracker writes go through the access layer / `lisa-qa-fail` — this skill never
92
- hand-crafts tracker mutations beyond the pass transition and its comment.
93
- - Session summary on request ("how did we do?"): counts of passed / failed / blocked /
94
- remaining in queue.
@@ -1,6 +0,0 @@
1
- ---
2
- description: "Serve the current manual regression checklist: curated journeys minus live automated E2E coverage, in plain language."
3
- argument-hint: ""
4
- ---
5
-
6
- Use the /lisa-qa-checklist skill to serve the manual regression checklist. $ARGUMENTS
@@ -1,6 +0,0 @@
1
- ---
2
- description: "Bulk-move QA-queue tickets scoped entirely to non-user-facing repos to the configured certified status, with an auditable moved-list report."
3
- argument-hint: ""
4
- ---
5
-
6
- Use the /lisa-qa-clear skill to clear non-human-verifiable tickets from the QA queue. $ARGUMENTS
@@ -1,6 +0,0 @@
1
- ---
2
- description: "File a QA failure: find the right ticket (never a duplicate), write the structured failure report, diagnose the expectation gap, label qa-fail, and return the ticket to build-ready."
3
- argument-hint: "[ticket-key] <what you saw, in your own words>"
4
- ---
5
-
6
- Use the /lisa-qa-fail skill to file this QA failure. $ARGUMENTS
@@ -1,6 +0,0 @@
1
- ---
2
- description: "Serve the next ticket awaiting QA verdict as a plain-language acceptance brief; record pass (→ certified) or fail (→ structured report via lisa-qa-fail)."
3
- argument-hint: "[pass | fail <description> | next]"
4
- ---
5
-
6
- Use the /lisa-qa-queue skill to serve the QA acceptance queue. $ARGUMENTS
@@ -1,70 +0,0 @@
1
- ---
2
- name: lisa-qa-checklist
3
- description: "Serve the current manual regression checklist to a human QA tester. Reads the project's curated journey list, cross-references it against what the automated suites (Playwright web E2E, Maestro native E2E) actually cover by scanning the spec files, and serves only the journeys that still need human eyes — each as plain-language steps. Keeps a single source of truth so testers never work from a stale personal copy, and shrinks automatically as automated coverage grows."
4
- allowed-tools: ["Bash", "Read", "Glob", "Grep", "Write", "Edit"]
5
- ---
6
-
7
- # QA Checklist: $ARGUMENTS
8
-
9
- The manual regression sweep exists to catch what automation does not. Its checklist must
10
- therefore be computed, not remembered: curated journeys minus automated coverage, at the
11
- moment the tester asks.
12
-
13
- ## Sources
14
-
15
- 1. **Curated journey list** — `qa.checklistFile` in `.lisa.config.json`, default
16
- `.lisa/qa-checklist.md`. Format: one `## Journey: <name>` section per user journey,
17
- with plain-language steps and an optional `automation:` line naming the covering spec
18
- file(s) once one exists. If the file does not exist, offer to bootstrap it: derive
19
- candidate journeys from the app's route map and the existing E2E suites' describe
20
- blocks, write the draft, and ask the operator to curate it once. Never invent
21
- journeys silently.
22
- 2. **Automated coverage** — scan the repo's E2E suites (Playwright specs, Maestro flows;
23
- locate via the project's e2e/test directories). An `automation:` line must name BOTH
24
- the spec file and the specific test within it (the Playwright `describe`/`test` title
25
- or Maestro flow name): `automation: <spec-path> :: <test-or-flow-name>`. A journey
26
- counts as covered only when that spec file exists, the named test/flow is present in
27
- it, and it is not skipped (`test.skip`, commented-out flow, or excluded from CI). A
28
- file-only line, a named test that no longer matches, or any ambiguous mapping is
29
- treated as **uncovered** — a live filename proves nothing about what the spec
30
- exercises. A deleted, renamed, or skipped test silently un-covers its journey — the
31
- very regression this check exists to catch; call it out loudly.
32
-
33
- ## Serving the sweep
34
-
35
- Present two lists, human-first:
36
-
37
- ```text
38
- ## Manual sweep — <n> journeys need your eyes
39
- 1. <Journey name> — <plain-language steps>
40
- Why manual: <no automation | automation skipped/stale: <spec>>
41
- ...
42
-
43
- ## Covered by automation — <n> journeys (skim, don't re-test)
44
- - <Journey name> — <spec file> (<playwright|maestro>)
45
- ```
46
-
47
- Rules for the served text: steps an intern can follow, no spec-file jargon in the manual
48
- section beyond the "why manual" line, and stable journey ordering (file order) so testers
49
- can resume mid-sweep.
50
-
51
- ## Maintaining the list
52
-
53
- - Tester or operator adds/edits journeys in plain language → edit the checklist file
54
- (this skill may apply the edit on request; it is a repo file, so changes ride normal
55
- review).
56
- - When a journey gains automation (e.g. `lisa-codify-verification` lands a spec), add its
57
- `automation: <spec-path> :: <test-or-flow-name>` line — on request this skill locates
58
- the covering spec and test, confirms the named test actually drives the journey's
59
- steps, and writes the line itself.
60
- - Never maintain per-tester copies; the file is the single source of truth and the
61
- computed view is always derived fresh.
62
-
63
- ## Rules
64
-
65
- - Coverage claims must point at an existing, non-skipped spec — "there's a test somewhere"
66
- does not count.
67
- - Serving is read-only by default; file edits happen only on explicit request.
68
- - If the automated-coverage scan finds specs exercising a journey that is missing from
69
- the curated list entirely, surface it as a suggested addition — the human curates, the
70
- skill proposes.
@@ -1,86 +0,0 @@
1
- ---
2
- name: lisa-qa-clear
3
- description: "Bulk-clear tickets a human QA tester cannot verify. Finds tickets in the configured QA queue status that are scoped entirely to non-user-facing repos (API/backend services, infrastructure) — where QA has only end-user access and nothing observable to test — and transitions them to the configured certified status, reporting the moved list for the record. Runnable from any coding agent as a single instruction like 'move all backend- and infrastructure-only tickets from the QA queue to certified'."
4
- allowed-tools: ["Skill", "Bash", "Read", "Glob", "Grep"]
5
- ---
6
-
7
- # QA Clear: $ARGUMENTS
8
-
9
- Human QA can only judge what a user can see. Tickets whose entire scope is a
10
- non-user-facing repo were already verified by the automated lifecycle before reaching the
11
- QA queue; holding them for a human who cannot observe them is pure queue noise. Clear
12
- them in one auditable batch.
13
-
14
- ## Config resolution
15
-
16
- Read `.lisa.config.json`:
17
-
18
- - **QA queue status** — `jira.workflow.qa.queue`, falling back to
19
- `jira.workflow.done.staging`.
20
- - **Certified status** — `jira.workflow.qa.certified`. Required; if missing, stop and
21
- instruct the operator — never guess a terminal status.
22
- - **Tracker dispatch** — `tracker` decides the surface as everywhere; on GitHub or
23
- Linear the status names above map to the equivalent labels/states.
24
- - **Non-user-facing repos** — `qa.nonUserFacingRepos` (array of repo names, e.g.
25
- `["api", "infrastructure"]`). If the key is missing, derive a proposal from
26
- the project registry (repos with no UI framework signals — no expo/react/native/web
27
- app surface) and **present it for operator confirmation before moving anything**; never
28
- bulk-transition on an unconfirmed inference. Recommend persisting the confirmed list to
29
- the config.
30
-
31
- ## Procedure
32
-
33
- 1. Query all tickets in the QA queue status.
34
- 2. Classify each by repo scope, in order:
35
- - `repo:<name>` label or matching component → that repo.
36
- - Unlabeled → determine the repo from the ticket content (description, AC, technical
37
- approach) exactly as build-intake's repo-scope gate does, and stamp the
38
- `repo:<name>` label while you're there so the next sweep is cheap.
39
- - Undeterminable → leave in place; flag for the operator.
40
- 3. Partition:
41
- - **Every** touched repo is non-user-facing → eligible to clear.
42
- - Any user-facing repo in scope (including mixed-scope) → stays in the queue for the
43
- human pass via `lisa-qa-queue`.
44
- 4. For each eligible ticket, in this order — the pairing must be failure-safe:
45
- 1. Post the audit comment first:
46
- `[lisa-qa-clear] Certified without human QA: scope is <repo(s)>, not observable
47
- with end-user access. Verified by the automated lifecycle pre-promotion.`
48
- 2. Then transition to the certified status.
49
- 3. Then clear the QA-failure **signal**, because certifying is one of its two void
50
- conditions and this is the second path that reaches it:
51
-
52
- ```bash
53
- RESOLVER="${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-plugins/lisa}}/scripts/qa-signal-lifecycle.mjs"
54
- SIGNAL=$(node "$RESOLVER" --vendor "<jira|linear|github>" --print-label)
55
- ```
56
-
57
- Remove `$SIGNAL` through the same tracker surface that applied it. Removing a label
58
- the ticket does not carry is a no-op, so this runs unconditionally. The
59
- `[lisa-qa-fail]` comments are never touched — the history stays, the signal goes.
60
- 4. Verify all three landed before counting the ticket as moved. A comment without
61
- the transition, a transition without the comment, or a certified ticket still
62
- wearing the signal is a **partial** — report it as such, never as completed.
63
- 5. Report the batch:
64
-
65
- ```text
66
- ## QA Clear — <date>
67
- Moved to <certified>: <n> (<KEY-1>, <KEY-2>, …) — repo per ticket
68
- Left in queue (user-facing): <n>
69
- Left in queue (undeterminable repo — needs operator): <keys or none>
70
- ```
71
-
72
- The operator (or tester) reviews the moved list; anything that "sounds user-facing" can
73
- be pulled back with a single instruction — the transition is reversible and the comment
74
- marks exactly what was auto-cleared.
75
-
76
- ## Rules
77
-
78
- - Never clear a mixed-scope ticket — partial human-verifiability means human QA.
79
- - Never bulk-move on an inferred repo list without explicit operator confirmation.
80
- - Every cleared ticket carries the audit comment; a transition without the comment is a
81
- bug in this procedure.
82
- - Idempotent by repair, not by skip: a ticket is complete only when it has the
83
- `[lisa-qa-clear]` comment, the certified status, AND no QA-failure signal. Re-runs
84
- finish partials — comment present but not certified → transition it; certified but no
85
- comment → post the comment; certified but still signalled → clear the signal. Only
86
- fully-complete tickets are skipped silently.