@codyswann/lisa 2.352.0 → 3.0.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 (280) hide show
  1. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  2. package/dist/core/upstream-evidence-manifest.js +70 -43
  3. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  4. package/expo/copy-overwrite/scripts/bdd/discover.mjs +502 -0
  5. package/expo/copy-overwrite/scripts/bdd/envelope.mjs +10 -1
  6. package/expo/copy-overwrite/scripts/bdd/render.mjs +53 -0
  7. package/expo/copy-overwrite/scripts/bdd/report.mjs +46 -0
  8. package/expo/copy-overwrite/scripts/check-bdd-coverage.mjs +39 -4
  9. package/expo/create-only/.github/workflows/maestro-e2e.yml +10 -1
  10. package/expo/create-only/.github/workflows/nightly-e2e-health.yml +5 -0
  11. package/expo/create-only/bdd/coverage-map.json +16 -0
  12. package/package.json +1 -1
  13. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  15. package/plugins/lisa/.codex-plugin/skills/lisa-agent-ready/SKILL.md +5 -3
  16. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-to-tracker/SKILL.md +2 -1
  17. package/plugins/lisa/.codex-plugin/skills/lisa-debrief-apply/SKILL.md +2 -2
  18. package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/SKILL.md +7 -1
  19. package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +5 -0
  20. package/plugins/lisa/.codex-plugin/skills/lisa-github-create/SKILL.md +3 -1
  21. package/plugins/lisa/.codex-plugin/skills/lisa-github-to-tracker/SKILL.md +2 -1
  22. package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +7 -3
  23. package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/SKILL.md +16 -6
  24. package/plugins/lisa/.codex-plugin/skills/lisa-improve-harness/SKILL.md +1 -1
  25. package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +5 -0
  26. package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/SKILL.md +2 -0
  27. package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/SKILL.md +12 -2
  28. package/plugins/lisa/.codex-plugin/skills/lisa-learnings-audit/SKILL.md +6 -1
  29. package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/SKILL.md +34 -0
  30. package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +5 -0
  31. package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/SKILL.md +3 -1
  32. package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/SKILL.md +2 -1
  33. package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +13 -4
  34. package/plugins/lisa/.codex-plugin/skills/lisa-notion-to-tracker/SKILL.md +2 -1
  35. package/plugins/lisa/.codex-plugin/skills/lisa-persist-learning/SKILL.md +1 -1
  36. package/plugins/lisa/.codex-plugin/skills/lisa-prd-source-write/SKILL.md +4 -2
  37. package/plugins/lisa/.codex-plugin/skills/lisa-qa-fail/SKILL.md +3 -1
  38. package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +28 -0
  39. package/plugins/lisa/.codex-plugin/skills/lisa-rework-triage/SKILL.md +2 -2
  40. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-build-intake/SKILL.md +1 -0
  41. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-create/SKILL.md +1 -0
  42. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-write/SKILL.md +1 -0
  43. package/plugins/lisa/.codex-plugin/skills/lisa-validate-tracker-mapping/SKILL.md +33 -4
  44. package/plugins/lisa/.codex-plugin/skills/lisa-verify/SKILL.md +1 -1
  45. package/plugins/lisa/rules/eager/bdd-e2e-coverage.md +3 -1
  46. package/plugins/lisa/rules/eager/claim-time-guards.md +30 -0
  47. package/plugins/lisa/rules/eager/ready-role-filing.md +22 -0
  48. package/plugins/lisa/rules/reference/automation-runbook-contract.md +8 -1
  49. package/plugins/lisa/rules/reference/bdd-e2e-coverage.md +42 -6
  50. package/plugins/lisa/rules/reference/claim-time-guards.md +69 -0
  51. package/plugins/lisa/rules/reference/config-resolution.md +7 -0
  52. package/plugins/lisa/rules/reference/ready-role-filing.md +66 -0
  53. package/plugins/lisa/scripts/queue-contract-resolution.mjs +50 -1
  54. package/plugins/lisa/skills/lisa-agent-ready/SKILL.md +5 -3
  55. package/plugins/lisa/skills/lisa-confluence-to-tracker/SKILL.md +2 -1
  56. package/plugins/lisa/skills/lisa-debrief-apply/SKILL.md +2 -2
  57. package/plugins/lisa/skills/lisa-exploratory-qa/SKILL.md +7 -1
  58. package/plugins/lisa/skills/lisa-github-build-intake/SKILL.md +5 -0
  59. package/plugins/lisa/skills/lisa-github-create/SKILL.md +3 -1
  60. package/plugins/lisa/skills/lisa-github-to-tracker/SKILL.md +2 -1
  61. package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +7 -3
  62. package/plugins/lisa/skills/lisa-github-write-issue/SKILL.md +16 -6
  63. package/plugins/lisa/skills/lisa-improve-harness/SKILL.md +1 -1
  64. package/plugins/lisa/skills/lisa-jira-build-intake/SKILL.md +5 -0
  65. package/plugins/lisa/skills/lisa-jira-create/SKILL.md +2 -0
  66. package/plugins/lisa/skills/lisa-jira-write-ticket/SKILL.md +12 -2
  67. package/plugins/lisa/skills/lisa-learnings-audit/SKILL.md +6 -1
  68. package/plugins/lisa/skills/lisa-linear-access/SKILL.md +34 -0
  69. package/plugins/lisa/skills/lisa-linear-build-intake/SKILL.md +5 -0
  70. package/plugins/lisa/skills/lisa-linear-create/SKILL.md +3 -1
  71. package/plugins/lisa/skills/lisa-linear-to-tracker/SKILL.md +2 -1
  72. package/plugins/lisa/skills/lisa-linear-write-issue/SKILL.md +13 -4
  73. package/plugins/lisa/skills/lisa-notion-to-tracker/SKILL.md +2 -1
  74. package/plugins/lisa/skills/lisa-persist-learning/SKILL.md +1 -1
  75. package/plugins/lisa/skills/lisa-prd-source-write/SKILL.md +4 -2
  76. package/plugins/lisa/skills/lisa-qa-fail/SKILL.md +3 -1
  77. package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +28 -0
  78. package/plugins/lisa/skills/lisa-rework-triage/SKILL.md +2 -2
  79. package/plugins/lisa/skills/lisa-tracker-build-intake/SKILL.md +1 -0
  80. package/plugins/lisa/skills/lisa-tracker-create/SKILL.md +1 -0
  81. package/plugins/lisa/skills/lisa-tracker-write/SKILL.md +1 -0
  82. package/plugins/lisa/skills/lisa-validate-tracker-mapping/SKILL.md +33 -4
  83. package/plugins/lisa/skills/lisa-verify/SKILL.md +1 -1
  84. package/plugins/lisa-agy/plugin.json +1 -1
  85. package/plugins/lisa-agy/scripts/queue-contract-resolution.mjs +50 -1
  86. package/plugins/lisa-agy/skills/lisa-agent-ready/SKILL.md +5 -3
  87. package/plugins/lisa-agy/skills/lisa-confluence-to-tracker/SKILL.md +2 -1
  88. package/plugins/lisa-agy/skills/lisa-debrief-apply/SKILL.md +2 -2
  89. package/plugins/lisa-agy/skills/lisa-exploratory-qa/SKILL.md +7 -1
  90. package/plugins/lisa-agy/skills/lisa-github-build-intake/SKILL.md +5 -0
  91. package/plugins/lisa-agy/skills/lisa-github-create/SKILL.md +3 -1
  92. package/plugins/lisa-agy/skills/lisa-github-to-tracker/SKILL.md +2 -1
  93. package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +7 -3
  94. package/plugins/lisa-agy/skills/lisa-github-write-issue/SKILL.md +16 -6
  95. package/plugins/lisa-agy/skills/lisa-improve-harness/SKILL.md +1 -1
  96. package/plugins/lisa-agy/skills/lisa-jira-build-intake/SKILL.md +5 -0
  97. package/plugins/lisa-agy/skills/lisa-jira-create/SKILL.md +2 -0
  98. package/plugins/lisa-agy/skills/lisa-jira-write-ticket/SKILL.md +12 -2
  99. package/plugins/lisa-agy/skills/lisa-learnings-audit/SKILL.md +6 -1
  100. package/plugins/lisa-agy/skills/lisa-linear-access/SKILL.md +34 -0
  101. package/plugins/lisa-agy/skills/lisa-linear-build-intake/SKILL.md +5 -0
  102. package/plugins/lisa-agy/skills/lisa-linear-create/SKILL.md +3 -1
  103. package/plugins/lisa-agy/skills/lisa-linear-to-tracker/SKILL.md +2 -1
  104. package/plugins/lisa-agy/skills/lisa-linear-write-issue/SKILL.md +13 -4
  105. package/plugins/lisa-agy/skills/lisa-notion-to-tracker/SKILL.md +2 -1
  106. package/plugins/lisa-agy/skills/lisa-persist-learning/SKILL.md +1 -1
  107. package/plugins/lisa-agy/skills/lisa-prd-source-write/SKILL.md +4 -2
  108. package/plugins/lisa-agy/skills/lisa-qa-fail/SKILL.md +3 -1
  109. package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +28 -0
  110. package/plugins/lisa-agy/skills/lisa-rework-triage/SKILL.md +2 -2
  111. package/plugins/lisa-agy/skills/lisa-tracker-build-intake/SKILL.md +1 -0
  112. package/plugins/lisa-agy/skills/lisa-tracker-create/SKILL.md +1 -0
  113. package/plugins/lisa-agy/skills/lisa-tracker-write/SKILL.md +1 -0
  114. package/plugins/lisa-agy/skills/lisa-validate-tracker-mapping/SKILL.md +33 -4
  115. package/plugins/lisa-agy/skills/lisa-verify/SKILL.md +1 -1
  116. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  117. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  118. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  119. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  120. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  121. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  122. package/plugins/lisa-copilot/rules/eager/bdd-e2e-coverage.md +3 -1
  123. package/plugins/lisa-copilot/rules/eager/claim-time-guards.md +30 -0
  124. package/plugins/lisa-copilot/rules/eager/ready-role-filing.md +22 -0
  125. package/plugins/lisa-copilot/rules/reference/automation-runbook-contract.md +8 -1
  126. package/plugins/lisa-copilot/rules/reference/bdd-e2e-coverage.md +42 -6
  127. package/plugins/lisa-copilot/rules/reference/claim-time-guards.md +69 -0
  128. package/plugins/lisa-copilot/rules/reference/config-resolution.md +7 -0
  129. package/plugins/lisa-copilot/rules/reference/ready-role-filing.md +66 -0
  130. package/plugins/lisa-copilot/scripts/queue-contract-resolution.mjs +50 -1
  131. package/plugins/lisa-copilot/skills/lisa-agent-ready/SKILL.md +5 -3
  132. package/plugins/lisa-copilot/skills/lisa-confluence-to-tracker/SKILL.md +2 -1
  133. package/plugins/lisa-copilot/skills/lisa-debrief-apply/SKILL.md +2 -2
  134. package/plugins/lisa-copilot/skills/lisa-exploratory-qa/SKILL.md +7 -1
  135. package/plugins/lisa-copilot/skills/lisa-github-build-intake/SKILL.md +5 -0
  136. package/plugins/lisa-copilot/skills/lisa-github-create/SKILL.md +3 -1
  137. package/plugins/lisa-copilot/skills/lisa-github-to-tracker/SKILL.md +2 -1
  138. package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +7 -3
  139. package/plugins/lisa-copilot/skills/lisa-github-write-issue/SKILL.md +16 -6
  140. package/plugins/lisa-copilot/skills/lisa-improve-harness/SKILL.md +1 -1
  141. package/plugins/lisa-copilot/skills/lisa-jira-build-intake/SKILL.md +5 -0
  142. package/plugins/lisa-copilot/skills/lisa-jira-create/SKILL.md +2 -0
  143. package/plugins/lisa-copilot/skills/lisa-jira-write-ticket/SKILL.md +12 -2
  144. package/plugins/lisa-copilot/skills/lisa-learnings-audit/SKILL.md +6 -1
  145. package/plugins/lisa-copilot/skills/lisa-linear-access/SKILL.md +34 -0
  146. package/plugins/lisa-copilot/skills/lisa-linear-build-intake/SKILL.md +5 -0
  147. package/plugins/lisa-copilot/skills/lisa-linear-create/SKILL.md +3 -1
  148. package/plugins/lisa-copilot/skills/lisa-linear-to-tracker/SKILL.md +2 -1
  149. package/plugins/lisa-copilot/skills/lisa-linear-write-issue/SKILL.md +13 -4
  150. package/plugins/lisa-copilot/skills/lisa-notion-to-tracker/SKILL.md +2 -1
  151. package/plugins/lisa-copilot/skills/lisa-persist-learning/SKILL.md +1 -1
  152. package/plugins/lisa-copilot/skills/lisa-prd-source-write/SKILL.md +4 -2
  153. package/plugins/lisa-copilot/skills/lisa-qa-fail/SKILL.md +3 -1
  154. package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +28 -0
  155. package/plugins/lisa-copilot/skills/lisa-rework-triage/SKILL.md +2 -2
  156. package/plugins/lisa-copilot/skills/lisa-tracker-build-intake/SKILL.md +1 -0
  157. package/plugins/lisa-copilot/skills/lisa-tracker-create/SKILL.md +1 -0
  158. package/plugins/lisa-copilot/skills/lisa-tracker-write/SKILL.md +1 -0
  159. package/plugins/lisa-copilot/skills/lisa-validate-tracker-mapping/SKILL.md +33 -4
  160. package/plugins/lisa-copilot/skills/lisa-verify/SKILL.md +1 -1
  161. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  162. package/plugins/lisa-cursor/rules/automation-runbook-contract-reference.mdc +8 -1
  163. package/plugins/lisa-cursor/rules/bdd-e2e-coverage-reference.mdc +42 -6
  164. package/plugins/lisa-cursor/rules/bdd-e2e-coverage.mdc +3 -1
  165. package/plugins/lisa-cursor/rules/claim-time-guards-reference.mdc +74 -0
  166. package/plugins/lisa-cursor/rules/claim-time-guards.mdc +35 -0
  167. package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +7 -0
  168. package/plugins/lisa-cursor/rules/ready-role-filing-reference.mdc +71 -0
  169. package/plugins/lisa-cursor/rules/ready-role-filing.mdc +27 -0
  170. package/plugins/lisa-cursor/scripts/queue-contract-resolution.mjs +50 -1
  171. package/plugins/lisa-cursor/skills/lisa-agent-ready/SKILL.md +5 -3
  172. package/plugins/lisa-cursor/skills/lisa-confluence-to-tracker/SKILL.md +2 -1
  173. package/plugins/lisa-cursor/skills/lisa-debrief-apply/SKILL.md +2 -2
  174. package/plugins/lisa-cursor/skills/lisa-exploratory-qa/SKILL.md +7 -1
  175. package/plugins/lisa-cursor/skills/lisa-github-build-intake/SKILL.md +5 -0
  176. package/plugins/lisa-cursor/skills/lisa-github-create/SKILL.md +3 -1
  177. package/plugins/lisa-cursor/skills/lisa-github-to-tracker/SKILL.md +2 -1
  178. package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +7 -3
  179. package/plugins/lisa-cursor/skills/lisa-github-write-issue/SKILL.md +16 -6
  180. package/plugins/lisa-cursor/skills/lisa-improve-harness/SKILL.md +1 -1
  181. package/plugins/lisa-cursor/skills/lisa-jira-build-intake/SKILL.md +5 -0
  182. package/plugins/lisa-cursor/skills/lisa-jira-create/SKILL.md +2 -0
  183. package/plugins/lisa-cursor/skills/lisa-jira-write-ticket/SKILL.md +12 -2
  184. package/plugins/lisa-cursor/skills/lisa-learnings-audit/SKILL.md +6 -1
  185. package/plugins/lisa-cursor/skills/lisa-linear-access/SKILL.md +34 -0
  186. package/plugins/lisa-cursor/skills/lisa-linear-build-intake/SKILL.md +5 -0
  187. package/plugins/lisa-cursor/skills/lisa-linear-create/SKILL.md +3 -1
  188. package/plugins/lisa-cursor/skills/lisa-linear-to-tracker/SKILL.md +2 -1
  189. package/plugins/lisa-cursor/skills/lisa-linear-write-issue/SKILL.md +13 -4
  190. package/plugins/lisa-cursor/skills/lisa-notion-to-tracker/SKILL.md +2 -1
  191. package/plugins/lisa-cursor/skills/lisa-persist-learning/SKILL.md +1 -1
  192. package/plugins/lisa-cursor/skills/lisa-prd-source-write/SKILL.md +4 -2
  193. package/plugins/lisa-cursor/skills/lisa-qa-fail/SKILL.md +3 -1
  194. package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +28 -0
  195. package/plugins/lisa-cursor/skills/lisa-rework-triage/SKILL.md +2 -2
  196. package/plugins/lisa-cursor/skills/lisa-tracker-build-intake/SKILL.md +1 -0
  197. package/plugins/lisa-cursor/skills/lisa-tracker-create/SKILL.md +1 -0
  198. package/plugins/lisa-cursor/skills/lisa-tracker-write/SKILL.md +1 -0
  199. package/plugins/lisa-cursor/skills/lisa-validate-tracker-mapping/SKILL.md +33 -4
  200. package/plugins/lisa-cursor/skills/lisa-verify/SKILL.md +1 -1
  201. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  202. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  203. package/plugins/lisa-expo-agy/plugin.json +1 -1
  204. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  205. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  206. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  207. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  208. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  209. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  210. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  211. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  212. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  213. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  214. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  215. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  216. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  217. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  218. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  219. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  220. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  221. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  222. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  223. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  224. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  225. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  226. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  227. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  228. package/plugins/lisa-rails-agy/plugin.json +1 -1
  229. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  230. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  231. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  232. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  233. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  234. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  235. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  236. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  237. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  238. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  239. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  240. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  241. package/plugins/src/base/rules/eager/bdd-e2e-coverage.md +3 -1
  242. package/plugins/src/base/rules/eager/claim-time-guards.md +30 -0
  243. package/plugins/src/base/rules/eager/ready-role-filing.md +22 -0
  244. package/plugins/src/base/rules/reference/automation-runbook-contract.md +8 -1
  245. package/plugins/src/base/rules/reference/bdd-e2e-coverage.md +42 -6
  246. package/plugins/src/base/rules/reference/claim-time-guards.md +69 -0
  247. package/plugins/src/base/rules/reference/config-resolution.md +7 -0
  248. package/plugins/src/base/rules/reference/ready-role-filing.md +66 -0
  249. package/plugins/src/base/scripts/queue-contract-resolution.mjs +50 -1
  250. package/plugins/src/base/skills/lisa-agent-ready/SKILL.md +5 -3
  251. package/plugins/src/base/skills/lisa-confluence-to-tracker/SKILL.md +2 -1
  252. package/plugins/src/base/skills/lisa-debrief-apply/SKILL.md +2 -2
  253. package/plugins/src/base/skills/lisa-exploratory-qa/SKILL.md +7 -1
  254. package/plugins/src/base/skills/lisa-github-build-intake/SKILL.md +5 -0
  255. package/plugins/src/base/skills/lisa-github-create/SKILL.md +3 -1
  256. package/plugins/src/base/skills/lisa-github-to-tracker/SKILL.md +2 -1
  257. package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +7 -3
  258. package/plugins/src/base/skills/lisa-github-write-issue/SKILL.md +16 -6
  259. package/plugins/src/base/skills/lisa-improve-harness/SKILL.md +1 -1
  260. package/plugins/src/base/skills/lisa-jira-build-intake/SKILL.md +5 -0
  261. package/plugins/src/base/skills/lisa-jira-create/SKILL.md +2 -0
  262. package/plugins/src/base/skills/lisa-jira-write-ticket/SKILL.md +12 -2
  263. package/plugins/src/base/skills/lisa-learnings-audit/SKILL.md +6 -1
  264. package/plugins/src/base/skills/lisa-linear-access/SKILL.md +34 -0
  265. package/plugins/src/base/skills/lisa-linear-build-intake/SKILL.md +5 -0
  266. package/plugins/src/base/skills/lisa-linear-create/SKILL.md +3 -1
  267. package/plugins/src/base/skills/lisa-linear-to-tracker/SKILL.md +2 -1
  268. package/plugins/src/base/skills/lisa-linear-write-issue/SKILL.md +13 -4
  269. package/plugins/src/base/skills/lisa-notion-to-tracker/SKILL.md +2 -1
  270. package/plugins/src/base/skills/lisa-persist-learning/SKILL.md +1 -1
  271. package/plugins/src/base/skills/lisa-prd-source-write/SKILL.md +4 -2
  272. package/plugins/src/base/skills/lisa-qa-fail/SKILL.md +3 -1
  273. package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +28 -0
  274. package/plugins/src/base/skills/lisa-rework-triage/SKILL.md +2 -2
  275. package/plugins/src/base/skills/lisa-tracker-build-intake/SKILL.md +1 -0
  276. package/plugins/src/base/skills/lisa-tracker-create/SKILL.md +1 -0
  277. package/plugins/src/base/skills/lisa-tracker-write/SKILL.md +1 -0
  278. package/plugins/src/base/skills/lisa-validate-tracker-mapping/SKILL.md +33 -4
  279. package/plugins/src/base/skills/lisa-verify/SKILL.md +1 -1
  280. package/typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs +76 -10
@@ -342,7 +342,7 @@ Each sub-task MUST:
342
342
  2. **Include an Empirical Verification Plan** — real user-like verification, NOT unit tests, linting, or typechecking
343
343
  3. **Carry its own `## Source Requirement` section** (shared format above) with the full verbatim quote(s) from the Phase 1.4 register — a leaf claimed by build-intake in isolation must be self-explanatory. When a sub-task is split per-repo, every split child inherits the same requirement quote(s).
344
344
 
345
- **Leaf-only build-ready (`leaf-only-lifecycle`)**: Sub-tasks are the **leaf work units** of the decomposition — they are the ONLY items in the hierarchy that receive the build-ready role. `lisa-tracker-write` applies the build-ready role here so downstream build intake (`lisa-tracker-build-intake`) claims the leaves and never the Epic or Stories. Apply the build-ready role to each Sub-task; never to its parent Story or Epic (Phases 3–4). `lisa-tracker-write` enforces the same invariant on the write side, so a Sub-task split into per-repo children (the cross-repo case above) carries build-ready on the children, not on any intermediate parent that gains child work.
345
+ **Leaf-only build-ready (`leaf-only-lifecycle`)**: Sub-tasks are the **leaf work units** of the decomposition — they are the ONLY items in the hierarchy that receive the build-ready role. `lisa-tracker-write` applies the build-ready role here so downstream build intake (`lisa-tracker-build-intake`) claims the leaves and never the Epic or Stories. **Pass `build_ready: true` explicitly on every Sub-task create** — per the `ready-role-filing` rule an omitted `build_ready` is NOT build-ready on any tracker, so a decomposition that relies on a vendor default silently produces a queue nothing ever claims. Apply the build-ready role to each Sub-task; never to its parent Story or Epic (Phases 3–4). `lisa-tracker-write` enforces the same invariant on the write side, so a Sub-task split into per-repo children (the cross-repo case above) carries build-ready on the children, not on any intermediate parent that gains child work.
346
346
 
347
347
  **Verification plan examples by stack:**
348
348
  - **Backend APIs**: curl GraphQL/REST calls with auth token, database queries, checking audit entries
@@ -426,6 +426,7 @@ produces broken tickets that downstream skills (triage, journey, evidence) canno
426
426
 
427
427
  For each sub-task, invoke `lisa-tracker-write` with:
428
428
  - issue_type: "Sub-task"
429
+ - build_ready: true # explicit per `ready-role-filing`; omitted is NOT build-ready on any tracker
429
430
  - parent: the parent story key
430
431
  - project_key: [PROJECT]
431
432
  - prd_source: [the originating PRD URL — mandatory; arms the S16 traceability gate]
@@ -112,7 +112,7 @@ This disposition completes the SLL-5 loop (#1583): on a Lisa-attributed failure
112
112
 
113
113
  Resolve the upstream repo from `.lisa.config.json` `hardening.upstreamRepo` (default `CodySwannGT/lisa`). Search **all issue states** for an existing issue carrying the marker — a closed marker-bearing ticket still owns this root cause, and searching only open issues would mint a duplicate the moment the original closes. Match on the **MARKER, never the title** — with the same eventual-consistency guard as above (`gh issue list -R <upstream> --state all --search '"<marker>" in:body' --json number,state,url`, and when the search index returns nothing, also `gh issue list -R <upstream> --state all --json number,state,body` and grep the bodies for the marker before concluding no ticket exists).
114
114
 
115
- - **No existing ticket** → compose the body EXCLUSIVELY through the executable builder, then file its stdout verbatim via `lisa-github-write-issue` targeting the upstream repo with the `self-hardening` label:
115
+ - **No existing ticket** → compose the body EXCLUSIVELY through the executable builder, then file its stdout verbatim via `lisa-github-write-issue` targeting the upstream repo with the `self-hardening` label and explicit `build_ready: true` (per `ready-role-filing`; the upstream repo runs its own build queue off the ready role, and an omitted flag would strand the hardening ticket there):
116
116
 
117
117
  ```bash
118
118
  bunx @codyswann/lisa file-upstream --input filing-event.json # or pipe the JSON on stdin
@@ -48,8 +48,10 @@ ideation_ledger_payload: # optional; forwarded unchanged to the ven
48
48
  - **`ready`** → the PRD is created in the source's `ready` PRD role (`prd-ready`), so the PRD-side of
49
49
  `lisa-intake` / the `*-prd-intake` scanner auto-claims it on the next cycle.
50
50
 
51
- There is no "omitted = legacy behavior" mode (unlike the ticket-side `build_ready`): there was no
52
- prior PRD-source-write behavior to preserve, so omitted means `draft`.
51
+ Omitted means `draft` the not-ready default. This matches the ticket-side `build_ready` contract
52
+ in `ready-role-filing`: on both sides of the pipeline, entering a queue is an **explicit claim** and
53
+ omission is the safe direction. (The ticket side reached that position by removing a per-vendor
54
+ legacy default; the PRD side never had one to remove.)
53
55
 
54
56
  ## Workflow
55
57
 
@@ -20,7 +20,9 @@ plus any screenshots).
20
20
  recently-closed tickets in the affected area, and the current QA-queue set. If an existing ticket
21
21
  covers it, that ticket is the target — update it, never file a twin. Only when the
22
22
  search documents no match, create a new Bug via `lisa-tracker-write` (which enforces
23
- the full quality gates) and treat it as the target. Report which path was taken.
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.
24
26
 
25
27
  ## Phase 2 — Structured failure report
26
28
 
@@ -752,6 +752,34 @@ with labels like `build-ready`, or with no Lisa status label at all, that are in
752
752
  applied. Include the normalization result in the loop-prevention fingerprint so repeated repair
753
753
  cycles do not spam comments.
754
754
 
755
+ ### Ungated non-ready filing → surface as an incomplete handoff (read-only)
756
+
757
+ The recovery net for the failure `ready-role-filing` prevents: an agent files a real defect it found
758
+ during other work, never gives it the ready role, and the ticket sits forever because build-intake
759
+ scans the ready lane and nothing else. Under that rule every filing declares either
760
+ `build_ready: true` or a `human_gate` reason; an item carrying neither is an **incomplete handoff**.
761
+
762
+ 1. Enumerate open items filed recently (within the configured staleness window — same resolution as
763
+ every other candidate class) that are **not** in the configured `ready` role for their lifecycle
764
+ and are not in a claimed / blocked / terminal role either. On GitHub that is the absence of the
765
+ configured build `ready` label; on JIRA and Linear it is a status/state outside the configured
766
+ `ready` role. Items whose role is simply "the tracker's default created lane" are the target.
767
+ 2. Exclude anything carrying the `[lisa-human-gate]` marker — those are deliberate holds and the rule
768
+ ratifies them. Exclude containers (their state rolls up per `leaf-only-lifecycle`), and exclude
769
+ `[lisa-exploratory-qa]`-marked findings, which are the rule's **named** human-gate exception even
770
+ on an older item written before the marker existed.
771
+ 3. **Report each survivor read-only; never promote it.** Name the item, when it was filed, and what
772
+ filed it, and state the two ways to resolve it — flip it to the configured `ready` role, or mark
773
+ it as a deliberate human gate. A filing whose readiness nobody declared is exactly the input the
774
+ gate model says a human should see, so guessing "it was probably meant to be ready" would
775
+ re-introduce the accidental-queue-entry failure this rule exists to eliminate.
776
+ 4. Post at most one idempotent `[lisa-repair-intake]` note per item and include the finding in the
777
+ loop-prevention fingerprint so repeated cycles do not spam.
778
+
779
+ This is distinct from the GitHub label-normalization repair above, which targets items carrying **no
780
+ Lisa lifecycle label at all** (created by older tools or by hand) and does normalize them. This sweep
781
+ targets items inside the Lisa lifecycle whose readiness was never declared.
782
+
755
783
  ## Blocker classification & clearing (conservative, vendor-specific extraction)
756
784
 
757
785
  A `blocked` build item is held by one or more of three blocker classes. Identify which are present
@@ -96,8 +96,8 @@ Lisa work item.
96
96
  |---------------|-------------|--------|
97
97
  | `decomposition-infidelity` | **Upstream Lisa issue** | The decomposition pipeline produced an unfaithful ticket and every gate passed it — that is a harness defect. File per "Filing upstream" below, citing the PRD text, the distorted ticket AC, and which gate should have caught it. |
98
98
  | `verification-gap` | **Upstream Lisa issue** | The verification lifecycle passed work it should have failed. File per "Filing upstream", citing the missed failure class and the weak/missing codified test. |
99
- | `missing-tool-access` | Project tracker | Create a provisioning ticket via `lisa-tracker-write` (`issue_type: Task`, labeled `type:tooling`) describing the missing tool/credential/environment and which flow needs it. Link it `blocks` the rework ticket. |
100
- | `environment-data` | Project tracker | Create an environment-hardening ticket via `lisa-tracker-write` citing the drift/fixture/shared-state evidence. Link `relates to` the rework ticket. |
99
+ | `missing-tool-access` | Project tracker | Create a provisioning ticket via `lisa-tracker-write` (`issue_type: Task`, labeled `type:tooling`) describing the missing tool/credential/environment and which flow needs it. Link it `blocks` the rework ticket. Pass `human_gate: "a human must grant the missing access"` per `ready-role-filing` — the factory cannot provision its own credentials, so this is a declared gate rather than an unclaimed filing. |
100
+ | `environment-data` | Project tracker | Create an environment-hardening ticket via `lisa-tracker-write` citing the drift/fixture/shared-state evidence. Link `relates to` the rework ticket. Pass `build_ready: true` when the hardening is a code/fixture change the factory can make, or `human_gate: "<the shared-environment decision a human owns>"` when it is not — per `ready-role-filing`, never neither. |
101
101
  | `prd-defect` | Source PRD | Comment on the PRD (via the `lisa-prd-backlink` lineage) quoting the defective requirement and the QA failure; flag for product review. Do NOT silently edit the PRD — spec changes are a human gate. |
102
102
  | `implementation-defect` (no secondary) | None | Normal fix path; the classification comment is the record. Pass the pattern to the `learner` phase — repeated implementation defects of the same shape escalate to `verification-gap`. |
103
103
 
@@ -83,4 +83,5 @@ If the canonical fix is merged but not yet on the production branch, the close c
83
83
  - **Leaf-only dispatch, every vendor.** Per the `leaf-only-lifecycle` rule, each vendor scanner dispatches leaf work units only and moves or safe-blocks a container (open child work, or a childless Epic) carrying a stale build-ready role according to its lifecycle semantics. This shim does not re-implement the gate — it relies on the vendor scanner's Phase 3a — but the contract is uniform across `jira`, `github`, and `linear` so behavior never drifts by tracker.
84
84
  - **Terminal native closure, every capable vendor.** Per the same rule, each vendor scanner finalizes native open/closed state only at the true terminal `done` value. This shim never performs native closure itself, but callers can rely on the dispatched vendor scanner to apply the contract.
85
85
  - **Duplicate already fixed, every vendor.** Auto-close without a PR is allowed only for `DUPLICATE_ALREADY_FIXED` with canonical reference and empirical base-branch evidence. Do not conflate this with `BLOCKED`.
86
+ - **Claim-time guards, every vendor.** Per the `claim-time-guards` rule, each vendor scanner runs both guards inside its Phase 3b before the claim transition: an item whose own key already appears in git history or an open/merged PR routes to **verify-and-close** rather than being built twice, and the **`two-failed-attempts`** valve moves an item with two `[lisa-build-attempt]` markers to the configured blocked role and stops the cycle. This shim does not re-implement either guard; it forwards the contract so behavior never drifts by tracker.
86
87
  - Never run two intake cycles concurrently against overlapping queues — the scheduling layer is responsible for serialization.
@@ -24,4 +24,5 @@ See the `config-resolution` rule for configuration and dispatch table.
24
24
  ## Rules
25
25
 
26
26
  - All vendor skills delegate every individual ticket write through `lisa-tracker-write`. They never call vendor-specific write tools directly.
27
+ - **Declare readiness on every leaf write.** Per the `ready-role-filing` rule an omitted `build_ready` is **not build-ready** on any tracker, so pass `build_ready: true` on each Sub-task (the leaf work units this skill plans) and never on the Epic or Stories, which are containers per `leaf-only-lifecycle`. A leaf that is deliberately held instead passes `human_gate: "<why a human must judge this first>"`. Filing a leaf with neither is an incomplete handoff and `lisa-tracker-write` rejects it.
27
28
  - This shim is for ad-hoc creation from code files / descriptions. PRD-driven creation goes through the `*-to-tracker` skills (notion / confluence / linear / github).
@@ -52,3 +52,4 @@ See the `config-resolution` rule for the full configuration schema and skill-map
52
52
  - Never accept a tracker value outside `{jira, github, linear}`.
53
53
  - Never mutate `$ARGUMENTS` between layers. The vendor skills define their own input contract.
54
54
  - Never inline gate logic here. All validation rules live in the vendor skills (`lisa-jira-validate-ticket` / `lisa-github-validate-issue` / `lisa-linear-validate-issue`); this skill only routes.
55
+ - **Readiness is the caller's explicit claim, not this shim's default.** Per the `ready-role-filing` rule, an omitted `build_ready` is **not build-ready** on every vendor, so a caller filing work it expects build-intake to pick up must pass `build_ready: true`, and a caller deliberately holding work outside the queue must pass a `human_gate` reason. This shim normalizes nothing — it forwards `$ARGUMENTS` verbatim and the vendor writers enforce the contract — which is exactly why the caller cannot rely on a vendor default here.
@@ -71,7 +71,8 @@ Resolve the **effective** role → name mapping using the same defaults `/lisa:i
71
71
  - **Missing / empty tracker**: report `UNRESOLVABLE` with setup guidance (`/lisa:setup:jira`, `/lisa:setup:github`, or `/lisa:setup:linear`). Do not default to JIRA.
72
72
  - **JIRA build workflow** (`jira.workflow`): `ready`, `claimed`, optional `review`, `blocked`, and each `done.<env>` (`dev` / `staging` / `production`). Defaults: `Ready`, `In Progress`, `Code Review`, `Blocked`, `{dev: "On Dev", staging: "On Stg", production: "Done"}`.
73
73
  - **GitHub build/prd labels** (`github.labels.build`, `github.labels.prd`): each configured label string.
74
- - **Linear build/prd labels** (`linear.labels.build`, `linear.labels.prd`): each configured label/state string.
74
+ - **Linear build workflow** (`linear.workflow`): `ready`, `claimed`, `review`, `blocked`, and each `done.<env>` — native workflow **states**, the Linear analogue of `jira.workflow`, not of `github.labels`. Defaults: `Ready`, `In Progress`, `In Review`, `Blocked`, `{dev: "On Dev", staging: "On Stg", production: "Done"}`.
75
+ - **Linear labels** (`linear.labels`): the `prd.*` map plus the one surviving build-lane key, the `human_needed` marker (`linear.labels.build.human_needed`). A config that predates the state model may still carry `ready` / `claimed` / `blocked` / `done` under `linear.labels.build`; those are **inert** — nothing reads them. Do not audit them against the live label set, and do not report them as drift. Report them once as a migration note pointing at `/lisa:setup:linear`, which removes them.
75
76
  - **Notion PRD values** (`notion.values`): each configured select-option value, validated against the `notion.statusProperty` property's options.
76
77
  - **Confluence PRD parents** (`confluence.parents`): each configured parent page id, validated by existence.
77
78
 
@@ -103,7 +104,9 @@ gh label list --repo "$REPO" --limit 200 --json name -q '.[].name'
103
104
 
104
105
  ### Linear / Notion / Confluence
105
106
 
106
- Enumerate via the corresponding access surface (Linear MCP workflow states + labels; Notion data-source select options for `notion.statusProperty`; Confluence page-exists check per parent id). Same compare-exact-case contract as JIRA.
107
+ Enumerate via the corresponding access surface (`lisa-linear-access` workflow states + labels; Notion data-source select options for `notion.statusProperty`; Confluence page-exists check per parent id). Same compare-exact-case contract as JIRA.
108
+
109
+ For Linear, `lisa-linear-access operation: list-workflow-states` returns each state's `name`, `type`, `position` and `isTeamDefault` (the access layer sets it from the team's `defaultIssueState`). **Keep `isTeamDefault`** — Step 4 needs it, and it is the only authoritative answer to "which state does this team create Issues into". Do not approximate it with a name guess: `Todo` is merely the stock name, and a team that renamed its `defaultIssueState` is exactly the case a name guess misses.
107
110
 
108
111
  ## Step 4 — Compare (exact case)
109
112
 
@@ -113,10 +116,14 @@ For each `(role, configured-name)` pair, classify against the live name set:
113
116
  - **CASE_DRIFT** — a case-insensitive match exists but no exact-case match (e.g. config `"On Stg"` vs live `"ON STG"`). Canonical = the live exact name.
114
117
  - **MISSING** — no case-insensitive match exists. The name was renamed beyond recognition or deleted.
115
118
 
119
+ One role carries a further check that name-existence cannot express:
120
+
121
+ - **INVERTED** — Linear only, `ready` only: the configured state exists, but it is the team's **default created state** (`isTeamDefault`). This is worse than a name that does not resolve. The name resolves perfectly, so every existence check passes while the gate runs backwards: `ready` is supposed to mean "a human moved this Issue here", and the team's default means "nobody has touched this". Build-intake claims from that lane, so an INVERTED mapping dispatches work no human ever approved. Measured on the first team it hit: 20 Issues in the claimable lane, 12 never marked ready — including decision tickets shaped like leaves, which the leaf-only gate cannot catch either. Report it even when every other role is VALID.
122
+
116
123
  A project's verdict:
117
124
 
118
125
  - **VALID** — every role is VALID.
119
- - **DRIFTED** — at least one CASE_DRIFT or MISSING role, none of which is UNRESOLVABLE.
126
+ - **DRIFTED** — at least one CASE_DRIFT, MISSING, or INVERTED role, none of which is UNRESOLVABLE. An INVERTED `ready` is never VALID, no matter how cleanly it resolves.
120
127
  - **UNRESOLVABLE** — the live set couldn't be enumerated (auth mismatch, missing tracker config, access failure). Distinguish this loudly from VALID — an unresolved audit is not a passing audit.
121
128
 
122
129
  ## Step 5 — Report
@@ -134,7 +141,17 @@ Per project, print a terminal-first section:
134
141
  done.production Done Done VALID
135
142
  ```
136
143
 
137
- End with a roll-up: counts of VALID / DRIFTED / UNRESOLVABLE projects and the exact next command (`… repair=true` when drift is auto-repairable; an admin note when a status is genuinely MISSING).
144
+ An INVERTED `ready` gets a full line rather than a one-word status, because the operator reading it is not necessarily an engineer and the word alone does not convey the stakes:
145
+
146
+ ```
147
+ ready Todo Todo INVERTED
148
+ "Todo" is the state this Linear team puts every NEW issue into, so the
149
+ build queue is currently claiming issues nobody marked ready. Pick or
150
+ create a state a person moves an issue into (Lisa's default is "Ready")
151
+ via /lisa:setup:linear, then set linear.workflow.ready to it.
152
+ ```
153
+
154
+ End with a roll-up: counts of VALID / DRIFTED / UNRESOLVABLE projects and the exact next command (`… repair=true` when drift is auto-repairable; an admin note when a status is genuinely MISSING; `/lisa:setup:linear` when a `ready` is INVERTED).
138
155
 
139
156
  ## Step 6 — Repair (only when `repair=true`)
140
157
 
@@ -166,6 +183,18 @@ Compute the closest live candidates (case-insensitive token/substring overlap, t
166
183
 
167
184
  Only write on an explicit pick. Never auto-select. If the user leaves it unchanged, keep the project `DRIFTED` and surface the admin remediation (add the status back, or fix it in the tracker).
168
185
 
186
+ ### INVERTED — never auto-repair
187
+
188
+ **Never auto-repair an INVERTED `ready`, even with `repair=true`.** Every other classification has one correct answer that the live tracker already knows: CASE_DRIFT has the canonical casing, MISSING has a shortlist of near-matches. INVERTED has neither. The configured name is live and correctly cased; what is wrong is which lane the project chose to mean "build-ready", and nothing in the config or the tracker records what the human intended instead. Guessing would silently repoint the queue at a lane that may hold nothing, or worse, at another lane the team fills automatically — swapping one wrong answer for a quieter one.
189
+
190
+ The team may also genuinely not have a dedicated ready lane yet, in which case the repair is to **create a state**, not to rewrite a string — `/lisa:validate-tracker-mapping` audits config, it does not mutate the tracker.
191
+
192
+ So: present the team's non-default states via `AskUserQuestion`, and write `linear.workflow.ready` only on an explicit pick. If none fits, or the user declines, leave the config untouched, keep the project `DRIFTED`, and hand off:
193
+
194
+ > Linear has no dedicated build-ready state on this team. Run `/lisa:setup:linear` — it offers to create `Ready` and records the mapping.
195
+
196
+ Until then, say plainly that the build queue is claiming unapproved work and that pausing build intake is the safe interim.
197
+
169
198
  ### Invalidate the verification cache
170
199
 
171
200
  After any JIRA repair, clear the `setup-jira` reachability cache so it re-verifies the new mapping:
@@ -35,7 +35,7 @@ Treat the first successful lead-spawn request (or, on the Codex fallback, the fi
35
35
 
36
36
  Execute the **Verify** flow as defined in the `intent-routing` rule (loaded via the lisa plugin). The flow includes:
37
37
 
38
- 1. **Pre-flight: codification gate** — confirm that every passing local empirical verification on this branch was codified as a regression test (the Implement flow's codify step). If any verification has no committed test and no allowed skip reason (PR / Documentation / Deploy / Investigate-Only), invoke `codify-verification` now and amend the PR before shipping. For frontend work the gate additionally enforces the `bdd-e2e-coverage` rule: the shipped behavior exists as a Gherkin scenario with a stable ID, every required scenario-platform obligation has aligned automation in the project's configured runner for that platform or a dated waiver, and the project's coverage gate passes with the matrix regenerated. A missing runner is never a bare recorded absence — it needs a dated `platformWaivers` entry (per the rule) and, where the runner could reasonably be added, a linked build-ready follow-up ticket referenced from it; never a silent skip. Missing BDD coverage is a verification failure that blocks the ship, not a warning. A change cannot ship until its verifications are guarded. For work that adds or changes persistent state the gate additionally enforces the `reset-seed-coverage` rule: every entity the work introduces or changes is classified in the project's state contract, anything `fixture-owned` has an ownership predicate and a sweep, and the state-classification check passes — an unclassified entity fails closed and blocks the ship exactly as missing BDD coverage does.
38
+ 1. **Pre-flight: codification gate** — confirm that every passing local empirical verification on this branch was codified as a regression test (the Implement flow's codify step). If any verification has no committed test and no allowed skip reason (PR / Documentation / Deploy / Investigate-Only), invoke `codify-verification` now and amend the PR before shipping. For frontend work the gate additionally enforces the `bdd-e2e-coverage` rule: the shipped behavior exists as a Gherkin scenario with a stable ID, every required scenario-platform obligation has aligned automation in the project's configured runner for that platform or a dated waiver, and the project's coverage gate passes with the matrix regenerated. A missing runner is never a bare recorded absence — it needs a dated `platformWaivers` entry (per the rule) and, where the runner could reasonably be added, a linked build-ready follow-up ticket referenced from it — filed through `lisa-tracker-write` with explicit `build_ready: true` per `ready-role-filing`, since an omitted flag is NOT build-ready on any tracker and the waiver would then point at work nothing claims; never a silent skip. Missing BDD coverage is a verification failure that blocks the ship, not a warning. A change cannot ship until its verifications are guarded. For work that adds or changes persistent state the gate additionally enforces the `reset-seed-coverage` rule: every entity the work introduces or changes is classified in the project's state contract, anything `fixture-owned` has an ownership predicate and a sweep, and the state-classification check passes — an unclassified entity fails closed and blocks the ship exactly as missing BDD coverage does.
39
39
  2. **Commit** any pending changes via `lisa-git-commit`
40
40
  3. **Push and PR** via `lisa-git-submit-pr`
41
41
  4. **PR Watch Loop** — drive the PR to MERGED via `lisa-drive-pr-to-merge`, the single source of truth for clearing every blocker: auto-merge with direct-merge fallback, `BEHIND` re-sync, conflict resolution, failing-check fixes, human + bot review-comment handling with thread resolution (it invokes `lisa-pull-request-review` itself), stale `CHANGES_REQUESTED` dismissal, and post-merge ancestry verification. Do not re-implement the loop or its terminal conditions.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.352.0",
3
+ "version": "3.0.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-expo",
3
- "version": "2.352.0",
3
+ "version": "3.0.0",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.352.0",
3
+ "version": "3.0.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-expo",
3
- "version": "2.352.0",
3
+ "version": "3.0.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-expo",
3
- "version": "2.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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-typescript",
3
- "version": "2.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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.352.0",
3
+ "version": "3.0.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"