@codyswann/lisa 2.195.4 → 2.195.7

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 (809) hide show
  1. package/README.md +17 -3
  2. package/all/copy-contents/gitignore +10 -4
  3. package/dist/cli/print-update-warning.d.ts +1 -1
  4. package/dist/cli/print-update-warning.js +2 -2
  5. package/dist/cli/print-update-warning.js.map +1 -1
  6. package/dist/cli/update-check.d.ts +6 -0
  7. package/dist/cli/update-check.d.ts.map +1 -1
  8. package/dist/cli/update-check.js +3 -3
  9. package/dist/cli/update-check.js.map +1 -1
  10. package/dist/cli/update-cmd.d.ts +1 -1
  11. package/dist/cli/update-cmd.d.ts.map +1 -1
  12. package/dist/cli/update-cmd.js +8 -7
  13. package/dist/cli/update-cmd.js.map +1 -1
  14. package/dist/codex/hooks-installer.d.ts +4 -1
  15. package/dist/codex/hooks-installer.d.ts.map +1 -1
  16. package/dist/codex/hooks-installer.js +109 -30
  17. package/dist/codex/hooks-installer.js.map +1 -1
  18. package/dist/codex/mcp-installer.d.ts +22 -0
  19. package/dist/codex/mcp-installer.d.ts.map +1 -0
  20. package/dist/codex/mcp-installer.js +135 -0
  21. package/dist/codex/mcp-installer.js.map +1 -0
  22. package/dist/codex/plugin-marketplace-installer.d.ts +19 -13
  23. package/dist/codex/plugin-marketplace-installer.d.ts.map +1 -1
  24. package/dist/codex/plugin-marketplace-installer.js +69 -72
  25. package/dist/codex/plugin-marketplace-installer.js.map +1 -1
  26. package/dist/codex/project-hooks-cleanup.d.ts +12 -0
  27. package/dist/codex/project-hooks-cleanup.d.ts.map +1 -0
  28. package/dist/codex/project-hooks-cleanup.js +31 -0
  29. package/dist/codex/project-hooks-cleanup.js.map +1 -0
  30. package/dist/codex/project-overlay.d.ts +23 -0
  31. package/dist/codex/project-overlay.d.ts.map +1 -0
  32. package/dist/codex/project-overlay.js +64 -0
  33. package/dist/codex/project-overlay.js.map +1 -0
  34. package/dist/codex/scripts/inject-rules.sh +4 -0
  35. package/dist/codex/scripts/install-pkgs.sh +4 -0
  36. package/dist/codex/scripts/setup-jira-cli.sh +5 -1
  37. package/dist/codex/settings-installer.d.ts.map +1 -1
  38. package/dist/codex/settings-installer.js +16 -3
  39. package/dist/codex/settings-installer.js.map +1 -1
  40. package/dist/codex/skills-installer.d.ts +15 -19
  41. package/dist/codex/skills-installer.d.ts.map +1 -1
  42. package/dist/codex/skills-installer.js +47 -140
  43. package/dist/codex/skills-installer.js.map +1 -1
  44. package/dist/core/lisa-plugin-selection.d.ts +16 -0
  45. package/dist/core/lisa-plugin-selection.d.ts.map +1 -0
  46. package/dist/core/lisa-plugin-selection.js +59 -0
  47. package/dist/core/lisa-plugin-selection.js.map +1 -0
  48. package/dist/core/lisa-rules-mirror.d.ts +2 -1
  49. package/dist/core/lisa-rules-mirror.d.ts.map +1 -1
  50. package/dist/core/lisa-rules-mirror.js +19 -3
  51. package/dist/core/lisa-rules-mirror.js.map +1 -1
  52. package/dist/core/lisa-skill-sources.d.ts.map +1 -1
  53. package/dist/core/lisa-skill-sources.js +16 -1
  54. package/dist/core/lisa-skill-sources.js.map +1 -1
  55. package/dist/core/lisa.d.ts +4 -6
  56. package/dist/core/lisa.d.ts.map +1 -1
  57. package/dist/core/lisa.js +12 -38
  58. package/dist/core/lisa.js.map +1 -1
  59. package/dist/migrations/ensure-lisa-postinstall.d.ts.map +1 -1
  60. package/dist/migrations/ensure-lisa-postinstall.js +4 -3
  61. package/dist/migrations/ensure-lisa-postinstall.js.map +1 -1
  62. package/dist/opencode/plugin-templates/lisa-session-bootstrap.ts +2 -3
  63. package/expo/create-only/.github/workflows/deploy.yml +6 -6
  64. package/npm-package/create-only/.github/workflows/publish-to-npm.yml +2 -1
  65. package/package.json +2 -3
  66. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa/.codex-plugin/plugin.json +2 -2
  68. package/plugins/lisa/.codex-plugin/skills/lisa-acceptance-criteria/SKILL.md +71 -0
  69. package/plugins/lisa/.codex-plugin/skills/lisa-acceptance-criteria/agents/openai.yaml +4 -0
  70. package/plugins/lisa/.codex-plugin/skills/lisa-agent-design-best-practices/SKILL.md +219 -0
  71. package/plugins/lisa/.codex-plugin/skills/lisa-agent-design-best-practices/agents/openai.yaml +4 -0
  72. package/plugins/lisa/.codex-plugin/skills/lisa-analyze-claude-remote/SKILL.md +429 -0
  73. package/plugins/lisa/.codex-plugin/skills/lisa-analyze-claude-remote/agents/openai.yaml +4 -0
  74. package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/SKILL.md +361 -0
  75. package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/agents/openai.yaml +4 -0
  76. package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/scripts/markdown-to-adf.mjs +214 -0
  77. package/plugins/lisa/.codex-plugin/skills/lisa-automation-status/SKILL.md +111 -0
  78. package/plugins/lisa/.codex-plugin/skills/lisa-automation-status/agents/openai.yaml +4 -0
  79. package/plugins/lisa/.codex-plugin/skills/lisa-bug-triage/SKILL.md +23 -0
  80. package/plugins/lisa/.codex-plugin/skills/lisa-bug-triage/agents/openai.yaml +4 -0
  81. package/plugins/lisa/.codex-plugin/skills/lisa-codebase-research/SKILL.md +87 -0
  82. package/plugins/lisa/.codex-plugin/skills/lisa-codebase-research/agents/openai.yaml +4 -0
  83. package/plugins/lisa/.codex-plugin/skills/lisa-codify-verification/SKILL.md +162 -0
  84. package/plugins/lisa/.codex-plugin/skills/lisa-codify-verification/agents/openai.yaml +4 -0
  85. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-prd-intake/SKILL.md +417 -0
  86. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-prd-intake/agents/openai.yaml +4 -0
  87. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-to-tracker/SKILL.md +356 -0
  88. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-to-tracker/agents/openai.yaml +4 -0
  89. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-write-prd/SKILL.md +109 -0
  90. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-write-prd/agents/openai.yaml +4 -0
  91. package/plugins/lisa/.codex-plugin/skills/lisa-cross-pollinate/SKILL.md +175 -0
  92. package/plugins/lisa/.codex-plugin/skills/lisa-cross-pollinate/agents/openai.yaml +4 -0
  93. package/plugins/lisa/.codex-plugin/skills/lisa-debrief/SKILL.md +94 -0
  94. package/plugins/lisa/.codex-plugin/skills/lisa-debrief/agents/openai.yaml +4 -0
  95. package/plugins/lisa/.codex-plugin/skills/lisa-debrief-apply/SKILL.md +63 -0
  96. package/plugins/lisa/.codex-plugin/skills/lisa-debrief-apply/agents/openai.yaml +4 -0
  97. package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +336 -0
  98. package/plugins/lisa/.codex-plugin/skills/lisa-doctor/agents/openai.yaml +4 -0
  99. package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +179 -0
  100. package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/agents/openai.yaml +4 -0
  101. package/plugins/lisa/.codex-plugin/skills/lisa-epic-triage/SKILL.md +28 -0
  102. package/plugins/lisa/.codex-plugin/skills/lisa-epic-triage/agents/openai.yaml +4 -0
  103. package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/SKILL.md +91 -0
  104. package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/agents/openai.yaml +4 -0
  105. package/plugins/lisa/.codex-plugin/skills/lisa-fix-linter-error/SKILL.md +45 -0
  106. package/plugins/lisa/.codex-plugin/skills/lisa-fix-linter-error/agents/openai.yaml +4 -0
  107. package/plugins/lisa/.codex-plugin/skills/lisa-generate-claude-remote-build-script/SKILL.md +224 -0
  108. package/plugins/lisa/.codex-plugin/skills/lisa-generate-claude-remote-build-script/agents/openai.yaml +4 -0
  109. package/plugins/lisa/.codex-plugin/skills/lisa-git-commit/SKILL.md +48 -0
  110. package/plugins/lisa/.codex-plugin/skills/lisa-git-commit/agents/openai.yaml +4 -0
  111. package/plugins/lisa/.codex-plugin/skills/lisa-git-prune/SKILL.md +35 -0
  112. package/plugins/lisa/.codex-plugin/skills/lisa-git-prune/agents/openai.yaml +4 -0
  113. package/plugins/lisa/.codex-plugin/skills/lisa-git-submit-pr/SKILL.md +113 -0
  114. package/plugins/lisa/.codex-plugin/skills/lisa-git-submit-pr/agents/openai.yaml +4 -0
  115. package/plugins/lisa/.codex-plugin/skills/lisa-github-add-journey/SKILL.md +115 -0
  116. package/plugins/lisa/.codex-plugin/skills/lisa-github-add-journey/agents/openai.yaml +4 -0
  117. package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +446 -0
  118. package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/agents/openai.yaml +4 -0
  119. package/plugins/lisa/.codex-plugin/skills/lisa-github-create/SKILL.md +101 -0
  120. package/plugins/lisa/.codex-plugin/skills/lisa-github-create/agents/openai.yaml +4 -0
  121. package/plugins/lisa/.codex-plugin/skills/lisa-github-evidence/SKILL.md +110 -0
  122. package/plugins/lisa/.codex-plugin/skills/lisa-github-evidence/agents/openai.yaml +4 -0
  123. package/plugins/lisa/.codex-plugin/skills/lisa-github-journey/SKILL.md +121 -0
  124. package/plugins/lisa/.codex-plugin/skills/lisa-github-journey/agents/openai.yaml +4 -0
  125. package/plugins/lisa/.codex-plugin/skills/lisa-github-prd-intake/SKILL.md +432 -0
  126. package/plugins/lisa/.codex-plugin/skills/lisa-github-prd-intake/agents/openai.yaml +4 -0
  127. package/plugins/lisa/.codex-plugin/skills/lisa-github-project-v2/SKILL.md +227 -0
  128. package/plugins/lisa/.codex-plugin/skills/lisa-github-project-v2/agents/openai.yaml +4 -0
  129. package/plugins/lisa/.codex-plugin/skills/lisa-github-read-issue/SKILL.md +248 -0
  130. package/plugins/lisa/.codex-plugin/skills/lisa-github-read-issue/agents/openai.yaml +4 -0
  131. package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/SKILL.md +132 -0
  132. package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/agents/openai.yaml +4 -0
  133. package/plugins/lisa/.codex-plugin/skills/lisa-github-to-tracker/SKILL.md +339 -0
  134. package/plugins/lisa/.codex-plugin/skills/lisa-github-to-tracker/agents/openai.yaml +4 -0
  135. package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +330 -0
  136. package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/agents/openai.yaml +4 -0
  137. package/plugins/lisa/.codex-plugin/skills/lisa-github-verify/SKILL.md +29 -0
  138. package/plugins/lisa/.codex-plugin/skills/lisa-github-verify/agents/openai.yaml +4 -0
  139. package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/SKILL.md +339 -0
  140. package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/agents/openai.yaml +4 -0
  141. package/plugins/lisa/.codex-plugin/skills/lisa-github-write-prd/SKILL.md +157 -0
  142. package/plugins/lisa/.codex-plugin/skills/lisa-github-write-prd/agents/openai.yaml +4 -0
  143. package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +202 -0
  144. package/plugins/lisa/.codex-plugin/skills/lisa-implement/agents/openai.yaml +4 -0
  145. package/plugins/lisa/.codex-plugin/skills/lisa-improve-code-complexity/SKILL.md +44 -0
  146. package/plugins/lisa/.codex-plugin/skills/lisa-improve-code-complexity/agents/openai.yaml +4 -0
  147. package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines/SKILL.md +45 -0
  148. package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines/agents/openai.yaml +4 -0
  149. package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines-per-function/SKILL.md +46 -0
  150. package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines-per-function/agents/openai.yaml +4 -0
  151. package/plugins/lisa/.codex-plugin/skills/lisa-improve-test-coverage/SKILL.md +44 -0
  152. package/plugins/lisa/.codex-plugin/skills/lisa-improve-test-coverage/agents/openai.yaml +4 -0
  153. package/plugins/lisa/.codex-plugin/skills/lisa-improve-tests/SKILL.md +47 -0
  154. package/plugins/lisa/.codex-plugin/skills/lisa-improve-tests/agents/openai.yaml +4 -0
  155. package/plugins/lisa/.codex-plugin/skills/lisa-intake/SKILL.md +133 -0
  156. package/plugins/lisa/.codex-plugin/skills/lisa-intake/agents/openai.yaml +4 -0
  157. package/plugins/lisa/.codex-plugin/skills/lisa-intake-explain/SKILL.md +279 -0
  158. package/plugins/lisa/.codex-plugin/skills/lisa-intake-explain/agents/openai.yaml +4 -0
  159. package/plugins/lisa/.codex-plugin/skills/lisa-jam-access/SKILL.md +52 -0
  160. package/plugins/lisa/.codex-plugin/skills/lisa-jam-access/agents/openai.yaml +4 -0
  161. package/plugins/lisa/.codex-plugin/skills/lisa-jira-add-journey/SKILL.md +121 -0
  162. package/plugins/lisa/.codex-plugin/skills/lisa-jira-add-journey/agents/openai.yaml +4 -0
  163. package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +368 -0
  164. package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/agents/openai.yaml +4 -0
  165. package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/SKILL.md +154 -0
  166. package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/agents/openai.yaml +4 -0
  167. package/plugins/lisa/.codex-plugin/skills/lisa-jira-evidence/SKILL.md +90 -0
  168. package/plugins/lisa/.codex-plugin/skills/lisa-jira-evidence/agents/openai.yaml +4 -0
  169. package/plugins/lisa/.codex-plugin/skills/lisa-jira-evidence/scripts/post-evidence.sh +180 -0
  170. package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/SKILL.md +127 -0
  171. package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/agents/openai.yaml +4 -0
  172. package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/generate-templates.py +233 -0
  173. package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/parse-plan.py +368 -0
  174. package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/SKILL.md +198 -0
  175. package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/agents/openai.yaml +4 -0
  176. package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/scripts/download-attachment.sh +110 -0
  177. package/plugins/lisa/.codex-plugin/skills/lisa-jira-sync/SKILL.md +108 -0
  178. package/plugins/lisa/.codex-plugin/skills/lisa-jira-sync/agents/openai.yaml +4 -0
  179. package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +317 -0
  180. package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/agents/openai.yaml +4 -0
  181. package/plugins/lisa/.codex-plugin/skills/lisa-jira-verify/SKILL.md +30 -0
  182. package/plugins/lisa/.codex-plugin/skills/lisa-jira-verify/agents/openai.yaml +4 -0
  183. package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/SKILL.md +267 -0
  184. package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/agents/openai.yaml +4 -0
  185. package/plugins/lisa/.codex-plugin/skills/lisa-jsdoc-best-practices/SKILL.md +432 -0
  186. package/plugins/lisa/.codex-plugin/skills/lisa-jsdoc-best-practices/agents/openai.yaml +4 -0
  187. package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/SKILL.md +90 -0
  188. package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/agents/openai.yaml +4 -0
  189. package/plugins/lisa/.codex-plugin/skills/lisa-linear-add-journey/SKILL.md +105 -0
  190. package/plugins/lisa/.codex-plugin/skills/lisa-linear-add-journey/agents/openai.yaml +4 -0
  191. package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +346 -0
  192. package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/agents/openai.yaml +4 -0
  193. package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/SKILL.md +146 -0
  194. package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/agents/openai.yaml +4 -0
  195. package/plugins/lisa/.codex-plugin/skills/lisa-linear-evidence/SKILL.md +103 -0
  196. package/plugins/lisa/.codex-plugin/skills/lisa-linear-evidence/agents/openai.yaml +4 -0
  197. package/plugins/lisa/.codex-plugin/skills/lisa-linear-journey/SKILL.md +134 -0
  198. package/plugins/lisa/.codex-plugin/skills/lisa-linear-journey/agents/openai.yaml +4 -0
  199. package/plugins/lisa/.codex-plugin/skills/lisa-linear-prd-intake/SKILL.md +383 -0
  200. package/plugins/lisa/.codex-plugin/skills/lisa-linear-prd-intake/agents/openai.yaml +4 -0
  201. package/plugins/lisa/.codex-plugin/skills/lisa-linear-read-issue/SKILL.md +200 -0
  202. package/plugins/lisa/.codex-plugin/skills/lisa-linear-read-issue/agents/openai.yaml +4 -0
  203. package/plugins/lisa/.codex-plugin/skills/lisa-linear-sync/SKILL.md +127 -0
  204. package/plugins/lisa/.codex-plugin/skills/lisa-linear-sync/agents/openai.yaml +4 -0
  205. package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/SKILL.md +339 -0
  206. package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/agents/openai.yaml +4 -0
  207. package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +314 -0
  208. package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/agents/openai.yaml +4 -0
  209. package/plugins/lisa/.codex-plugin/skills/lisa-linear-verify/SKILL.md +51 -0
  210. package/plugins/lisa/.codex-plugin/skills/lisa-linear-verify/agents/openai.yaml +4 -0
  211. package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +292 -0
  212. package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/agents/openai.yaml +4 -0
  213. package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-prd/SKILL.md +96 -0
  214. package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-prd/agents/openai.yaml +4 -0
  215. package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +69 -0
  216. package/plugins/lisa/.codex-plugin/skills/lisa-monitor/agents/openai.yaml +4 -0
  217. package/plugins/lisa/.codex-plugin/skills/lisa-nightly-add-test-coverage/SKILL.md +40 -0
  218. package/plugins/lisa/.codex-plugin/skills/lisa-nightly-add-test-coverage/agents/openai.yaml +4 -0
  219. package/plugins/lisa/.codex-plugin/skills/lisa-nightly-improve-tests/SKILL.md +29 -0
  220. package/plugins/lisa/.codex-plugin/skills/lisa-nightly-improve-tests/agents/openai.yaml +4 -0
  221. package/plugins/lisa/.codex-plugin/skills/lisa-nightly-lower-code-complexity/SKILL.md +28 -0
  222. package/plugins/lisa/.codex-plugin/skills/lisa-nightly-lower-code-complexity/agents/openai.yaml +4 -0
  223. package/plugins/lisa/.codex-plugin/skills/lisa-notion-access/SKILL.md +226 -0
  224. package/plugins/lisa/.codex-plugin/skills/lisa-notion-access/agents/openai.yaml +4 -0
  225. package/plugins/lisa/.codex-plugin/skills/lisa-notion-prd-intake/SKILL.md +360 -0
  226. package/plugins/lisa/.codex-plugin/skills/lisa-notion-prd-intake/agents/openai.yaml +4 -0
  227. package/plugins/lisa/.codex-plugin/skills/lisa-notion-to-tracker/SKILL.md +353 -0
  228. package/plugins/lisa/.codex-plugin/skills/lisa-notion-to-tracker/agents/openai.yaml +4 -0
  229. package/plugins/lisa/.codex-plugin/skills/lisa-notion-write-prd/SKILL.md +109 -0
  230. package/plugins/lisa/.codex-plugin/skills/lisa-notion-write-prd/agents/openai.yaml +4 -0
  231. package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-review/SKILL.md +83 -0
  232. package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-review/agents/openai.yaml +4 -0
  233. package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-simplifier/SKILL.md +76 -0
  234. package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-simplifier/agents/openai.yaml +4 -0
  235. package/plugins/lisa/.codex-plugin/skills/lisa-parity-coderabbit/SKILL.md +77 -0
  236. package/plugins/lisa/.codex-plugin/skills/lisa-parity-coderabbit/agents/openai.yaml +4 -0
  237. package/plugins/lisa/.codex-plugin/skills/lisa-parity-safety-net-rules/SKILL.md +144 -0
  238. package/plugins/lisa/.codex-plugin/skills/lisa-parity-safety-net-rules/agents/openai.yaml +4 -0
  239. package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-sdk-setup/SKILL.md +211 -0
  240. package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-sdk-setup/agents/openai.yaml +4 -0
  241. package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-seer/SKILL.md +135 -0
  242. package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-seer/agents/openai.yaml +4 -0
  243. package/plugins/lisa/.codex-plugin/skills/lisa-parity-skill-creator/SKILL.md +151 -0
  244. package/plugins/lisa/.codex-plugin/skills/lisa-parity-skill-creator/agents/openai.yaml +4 -0
  245. package/plugins/lisa/.codex-plugin/skills/lisa-performance-review/SKILL.md +94 -0
  246. package/plugins/lisa/.codex-plugin/skills/lisa-performance-review/agents/openai.yaml +4 -0
  247. package/plugins/lisa/.codex-plugin/skills/lisa-plan/SKILL.md +60 -0
  248. package/plugins/lisa/.codex-plugin/skills/lisa-plan/agents/openai.yaml +4 -0
  249. package/plugins/lisa/.codex-plugin/skills/lisa-plugin-sync-explain/SKILL.md +53 -0
  250. package/plugins/lisa/.codex-plugin/skills/lisa-plugin-sync-explain/agents/openai.yaml +4 -0
  251. package/plugins/lisa/.codex-plugin/skills/lisa-posthog-access/SKILL.md +60 -0
  252. package/plugins/lisa/.codex-plugin/skills/lisa-posthog-access/agents/openai.yaml +4 -0
  253. package/plugins/lisa/.codex-plugin/skills/lisa-prd-backlink/SKILL.md +265 -0
  254. package/plugins/lisa/.codex-plugin/skills/lisa-prd-backlink/agents/openai.yaml +4 -0
  255. package/plugins/lisa/.codex-plugin/skills/lisa-prd-source-write/SKILL.md +101 -0
  256. package/plugins/lisa/.codex-plugin/skills/lisa-prd-source-write/agents/openai.yaml +4 -0
  257. package/plugins/lisa/.codex-plugin/skills/lisa-prd-ticket-coverage/SKILL.md +170 -0
  258. package/plugins/lisa/.codex-plugin/skills/lisa-prd-ticket-coverage/agents/openai.yaml +4 -0
  259. package/plugins/lisa/.codex-plugin/skills/lisa-product-walkthrough/SKILL.md +104 -0
  260. package/plugins/lisa/.codex-plugin/skills/lisa-product-walkthrough/agents/openai.yaml +4 -0
  261. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/SKILL.md +315 -0
  262. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/agents/openai.yaml +4 -0
  263. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/evidence-card-format.md +21 -0
  264. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/host-project-only.md +22 -0
  265. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +57 -0
  266. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/public-external-inspiration.md +22 -0
  267. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/unavailable-data-rejection.md +22 -0
  268. package/plugins/lisa/.codex-plugin/skills/lisa-pull-request-review/SKILL.md +84 -0
  269. package/plugins/lisa/.codex-plugin/skills/lisa-pull-request-review/agents/openai.yaml +4 -0
  270. package/plugins/lisa/.codex-plugin/skills/lisa-quality-review/SKILL.md +54 -0
  271. package/plugins/lisa/.codex-plugin/skills/lisa-quality-review/agents/openai.yaml +4 -0
  272. package/plugins/lisa/.codex-plugin/skills/lisa-queue-status/SKILL.md +133 -0
  273. package/plugins/lisa/.codex-plugin/skills/lisa-queue-status/agents/openai.yaml +4 -0
  274. package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +1030 -0
  275. package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/agents/openai.yaml +4 -0
  276. package/plugins/lisa/.codex-plugin/skills/lisa-reproduce-bug/SKILL.md +96 -0
  277. package/plugins/lisa/.codex-plugin/skills/lisa-reproduce-bug/agents/openai.yaml +4 -0
  278. package/plugins/lisa/.codex-plugin/skills/lisa-research/SKILL.md +68 -0
  279. package/plugins/lisa/.codex-plugin/skills/lisa-research/agents/openai.yaml +4 -0
  280. package/plugins/lisa/.codex-plugin/skills/lisa-review-implementation/SKILL.md +209 -0
  281. package/plugins/lisa/.codex-plugin/skills/lisa-review-implementation/agents/openai.yaml +4 -0
  282. package/plugins/lisa/.codex-plugin/skills/lisa-review-local/SKILL.md +88 -0
  283. package/plugins/lisa/.codex-plugin/skills/lisa-review-local/agents/openai.yaml +4 -0
  284. package/plugins/lisa/.codex-plugin/skills/lisa-root-cause-analysis/SKILL.md +155 -0
  285. package/plugins/lisa/.codex-plugin/skills/lisa-root-cause-analysis/agents/openai.yaml +4 -0
  286. package/plugins/lisa/.codex-plugin/skills/lisa-security-review/SKILL.md +57 -0
  287. package/plugins/lisa/.codex-plugin/skills/lisa-security-review/agents/openai.yaml +4 -0
  288. package/plugins/lisa/.codex-plugin/skills/lisa-security-zap-scan/SKILL.md +33 -0
  289. package/plugins/lisa/.codex-plugin/skills/lisa-security-zap-scan/agents/openai.yaml +4 -0
  290. package/plugins/lisa/.codex-plugin/skills/lisa-sentry-access/SKILL.md +56 -0
  291. package/plugins/lisa/.codex-plugin/skills/lisa-sentry-access/agents/openai.yaml +4 -0
  292. package/plugins/lisa/.codex-plugin/skills/lisa-setup-atlassian/SKILL.md +347 -0
  293. package/plugins/lisa/.codex-plugin/skills/lisa-setup-atlassian/agents/openai.yaml +4 -0
  294. package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +103 -0
  295. package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/agents/openai.yaml +4 -0
  296. package/plugins/lisa/.codex-plugin/skills/lisa-setup-confluence/SKILL.md +254 -0
  297. package/plugins/lisa/.codex-plugin/skills/lisa-setup-confluence/agents/openai.yaml +4 -0
  298. package/plugins/lisa/.codex-plugin/skills/lisa-setup-github/SKILL.md +268 -0
  299. package/plugins/lisa/.codex-plugin/skills/lisa-setup-github/agents/openai.yaml +4 -0
  300. package/plugins/lisa/.codex-plugin/skills/lisa-setup-jira/SKILL.md +198 -0
  301. package/plugins/lisa/.codex-plugin/skills/lisa-setup-jira/agents/openai.yaml +4 -0
  302. package/plugins/lisa/.codex-plugin/skills/lisa-setup-linear/SKILL.md +251 -0
  303. package/plugins/lisa/.codex-plugin/skills/lisa-setup-linear/agents/openai.yaml +4 -0
  304. package/plugins/lisa/.codex-plugin/skills/lisa-setup-notion/SKILL.md +316 -0
  305. package/plugins/lisa/.codex-plugin/skills/lisa-setup-notion/agents/openai.yaml +4 -0
  306. package/plugins/lisa/.codex-plugin/skills/lisa-sonarcloud-access/SKILL.md +71 -0
  307. package/plugins/lisa/.codex-plugin/skills/lisa-sonarcloud-access/agents/openai.yaml +4 -0
  308. package/plugins/lisa/.codex-plugin/skills/lisa-spec-conformance/SKILL.md +159 -0
  309. package/plugins/lisa/.codex-plugin/skills/lisa-spec-conformance/agents/openai.yaml +4 -0
  310. package/plugins/lisa/.codex-plugin/skills/lisa-sync-down/SKILL.md +171 -0
  311. package/plugins/lisa/.codex-plugin/skills/lisa-sync-down/agents/openai.yaml +4 -0
  312. package/plugins/lisa/.codex-plugin/skills/lisa-task-decomposition/SKILL.md +127 -0
  313. package/plugins/lisa/.codex-plugin/skills/lisa-task-decomposition/agents/openai.yaml +4 -0
  314. package/plugins/lisa/.codex-plugin/skills/lisa-task-triage/SKILL.md +23 -0
  315. package/plugins/lisa/.codex-plugin/skills/lisa-task-triage/agents/openai.yaml +4 -0
  316. package/plugins/lisa/.codex-plugin/skills/lisa-tdd-implementation/SKILL.md +86 -0
  317. package/plugins/lisa/.codex-plugin/skills/lisa-tdd-implementation/agents/openai.yaml +4 -0
  318. package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/SKILL.md +34 -0
  319. package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/agents/openai.yaml +4 -0
  320. package/plugins/lisa/.codex-plugin/skills/lisa-test-strategy/SKILL.md +63 -0
  321. package/plugins/lisa/.codex-plugin/skills/lisa-test-strategy/agents/openai.yaml +4 -0
  322. package/plugins/lisa/.codex-plugin/skills/lisa-ticket-triage/SKILL.md +186 -0
  323. package/plugins/lisa/.codex-plugin/skills/lisa-ticket-triage/agents/openai.yaml +4 -0
  324. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-add-journey/SKILL.md +27 -0
  325. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-add-journey/agents/openai.yaml +4 -0
  326. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-build-intake/SKILL.md +86 -0
  327. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-build-intake/agents/openai.yaml +4 -0
  328. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-create/SKILL.md +27 -0
  329. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-create/agents/openai.yaml +4 -0
  330. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/SKILL.md +53 -0
  331. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/agents/openai.yaml +4 -0
  332. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-journey/SKILL.md +27 -0
  333. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-journey/agents/openai.yaml +4 -0
  334. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-read/SKILL.md +28 -0
  335. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-read/agents/openai.yaml +4 -0
  336. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-source-artifacts/SKILL.md +107 -0
  337. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-source-artifacts/agents/openai.yaml +4 -0
  338. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-sync/SKILL.md +65 -0
  339. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-sync/agents/openai.yaml +4 -0
  340. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-validate/SKILL.md +37 -0
  341. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-validate/agents/openai.yaml +4 -0
  342. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-verify/SKILL.md +29 -0
  343. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-verify/agents/openai.yaml +4 -0
  344. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-write/SKILL.md +54 -0
  345. package/plugins/lisa/.codex-plugin/skills/lisa-tracker-write/agents/openai.yaml +4 -0
  346. package/plugins/lisa/.codex-plugin/skills/lisa-usage-accounting/SKILL.md +170 -0
  347. package/plugins/lisa/.codex-plugin/skills/lisa-usage-accounting/agents/openai.yaml +4 -0
  348. package/plugins/lisa/.codex-plugin/skills/lisa-use-the-product/SKILL.md +86 -0
  349. package/plugins/lisa/.codex-plugin/skills/lisa-use-the-product/agents/openai.yaml +4 -0
  350. package/plugins/lisa/.codex-plugin/skills/lisa-validate-tracker-mapping/SKILL.md +195 -0
  351. package/plugins/lisa/.codex-plugin/skills/lisa-validate-tracker-mapping/agents/openai.yaml +4 -0
  352. package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/SKILL.md +365 -0
  353. package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/agents/openai.yaml +4 -0
  354. package/plugins/lisa/.codex-plugin/skills/lisa-verify/SKILL.md +52 -0
  355. package/plugins/lisa/.codex-plugin/skills/lisa-verify/agents/openai.yaml +4 -0
  356. package/plugins/lisa/.codex-plugin/skills/lisa-verify-prd/SKILL.md +392 -0
  357. package/plugins/lisa/.codex-plugin/skills/lisa-verify-prd/agents/openai.yaml +4 -0
  358. package/plugins/lisa/.codex-plugin/skills/lisa-wiki-install/SKILL.md +101 -0
  359. package/plugins/lisa/.codex-plugin/skills/lisa-wiki-install/agents/openai.yaml +4 -0
  360. package/plugins/lisa/hooks/inject-rules.sh +3 -2
  361. package/plugins/lisa/hooks/install-pkgs.sh +4 -45
  362. package/plugins/lisa/hooks/setup-jira-cli.sh +4 -12
  363. package/plugins/lisa/skills/lisa-setup-linear/SKILL.md +1 -1
  364. package/plugins/lisa-agy/plugin.json +1 -1
  365. package/plugins/lisa-agy/skills/lisa-setup-linear/SKILL.md +1 -1
  366. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  367. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  368. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  369. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  370. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  371. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  372. package/plugins/lisa-copilot/hooks/inject-rules.sh +3 -2
  373. package/plugins/lisa-copilot/hooks/install-pkgs.sh +4 -45
  374. package/plugins/lisa-copilot/hooks/setup-jira-cli.sh +4 -12
  375. package/plugins/lisa-copilot/skills/lisa-setup-linear/SKILL.md +1 -1
  376. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  377. package/plugins/lisa-cursor/hooks/install-pkgs.sh +4 -45
  378. package/plugins/lisa-cursor/hooks/setup-jira-cli.sh +4 -12
  379. package/plugins/lisa-cursor/skills/lisa-setup-linear/SKILL.md +1 -1
  380. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  381. package/plugins/lisa-expo/.codex-plugin/plugin.json +2 -2
  382. package/plugins/lisa-expo/.codex-plugin/skills/add-app-clip/SKILL.md +280 -0
  383. package/plugins/lisa-expo/.codex-plugin/skills/add-app-clip/agents/openai.yaml +4 -0
  384. package/plugins/lisa-expo/.codex-plugin/skills/add-app-clip/references/native-module.md +96 -0
  385. package/plugins/lisa-expo/.codex-plugin/skills/apollo-client/SKILL.md +238 -0
  386. package/plugins/lisa-expo/.codex-plugin/skills/apollo-client/agents/openai.yaml +4 -0
  387. package/plugins/lisa-expo/.codex-plugin/skills/apollo-client/references/mutation-patterns.md +360 -0
  388. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/SKILL.md +367 -0
  389. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/agents/openai.yaml +4 -0
  390. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
  391. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
  392. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
  393. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
  394. package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +438 -0
  395. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/SKILL.md +321 -0
  396. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/agents/openai.yaml +4 -0
  397. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/animations.md +220 -0
  398. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/controls.md +272 -0
  399. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/form-sheet.md +253 -0
  400. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/gradients.md +106 -0
  401. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/icons.md +213 -0
  402. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/media.md +198 -0
  403. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/route-structure.md +229 -0
  404. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/search.md +248 -0
  405. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/storage.md +121 -0
  406. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/tabs.md +433 -0
  407. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/toolbar-and-headers.md +284 -0
  408. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/visual-effects.md +197 -0
  409. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/webgpu-three.md +605 -0
  410. package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/zoom-transitions.md +158 -0
  411. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/SKILL.md +299 -0
  412. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/agents/openai.yaml +4 -0
  413. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/references/examples.md +749 -0
  414. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/references/patterns.md +318 -0
  415. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/scripts/create_component.py +200 -0
  416. package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/scripts/validate_component.py +209 -0
  417. package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/SKILL.md +268 -0
  418. package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/agents/openai.yaml +4 -0
  419. package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/references/common-issues.md +619 -0
  420. package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
  421. package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/references/platform-api.md +276 -0
  422. package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
  423. package/plugins/lisa-expo/.codex-plugin/skills/directory-structure/SKILL.md +214 -0
  424. package/plugins/lisa-expo/.codex-plugin/skills/directory-structure/agents/openai.yaml +4 -0
  425. package/plugins/lisa-expo/.codex-plugin/skills/directory-structure/scripts/validate_structure.py +454 -0
  426. package/plugins/lisa-expo/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +105 -0
  427. package/plugins/lisa-expo/.codex-plugin/skills/e2e-coverage-gaps/agents/openai.yaml +4 -0
  428. package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/SKILL.md +228 -0
  429. package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/agents/openai.yaml +4 -0
  430. package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
  431. package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/references/update-insights-schema.md +69 -0
  432. package/plugins/lisa-expo/.codex-plugin/skills/expo-api-routes/SKILL.md +369 -0
  433. package/plugins/lisa-expo/.codex-plugin/skills/expo-api-routes/agents/openai.yaml +4 -0
  434. package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/SKILL.md +54 -0
  435. package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/agents/openai.yaml +4 -0
  436. package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/brownfield-integrated.md +526 -0
  437. package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/brownfield-isolated.md +402 -0
  438. package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/comparison.md +63 -0
  439. package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/troubleshooting.md +88 -0
  440. package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/SKILL.md +92 -0
  441. package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/agents/openai.yaml +4 -0
  442. package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/scripts/fetch.js +113 -0
  443. package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/scripts/package.json +11 -0
  444. package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/scripts/validate.js +85 -0
  445. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/SKILL.md +193 -0
  446. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/agents/openai.yaml +4 -0
  447. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/app-store-metadata.md +479 -0
  448. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/ios-app-store.md +355 -0
  449. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/play-store.md +264 -0
  450. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/testflight.md +58 -0
  451. package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/workflows.md +200 -0
  452. package/plugins/lisa-expo/.codex-plugin/skills/expo-dev-client/SKILL.md +164 -0
  453. package/plugins/lisa-expo/.codex-plugin/skills/expo-dev-client/agents/openai.yaml +4 -0
  454. package/plugins/lisa-expo/.codex-plugin/skills/expo-env-config/SKILL.md +309 -0
  455. package/plugins/lisa-expo/.codex-plugin/skills/expo-env-config/agents/openai.yaml +4 -0
  456. package/plugins/lisa-expo/.codex-plugin/skills/expo-env-config/references/validation-patterns.md +417 -0
  457. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/SKILL.md +141 -0
  458. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/agents/openai.yaml +4 -0
  459. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/config-plugin.md +90 -0
  460. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/create-expo-module.md +206 -0
  461. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/lifecycle.md +127 -0
  462. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/module-config.md +48 -0
  463. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/native-module.md +286 -0
  464. package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/native-view.md +171 -0
  465. package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/SKILL.md +431 -0
  466. package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/agents/openai.yaml +4 -0
  467. package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/references/official-docs.md +290 -0
  468. package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
  469. package/plugins/lisa-expo/.codex-plugin/skills/expo-tailwind-setup/SKILL.md +480 -0
  470. package/plugins/lisa-expo/.codex-plugin/skills/expo-tailwind-setup/agents/openai.yaml +4 -0
  471. package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-jetpack-compose/SKILL.md +40 -0
  472. package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-jetpack-compose/agents/openai.yaml +4 -0
  473. package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-swift-ui/SKILL.md +39 -0
  474. package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-swift-ui/agents/openai.yaml +4 -0
  475. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/SKILL.md +419 -0
  476. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/agents/openai.yaml +4 -0
  477. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/references/color-tokens.md +343 -0
  478. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/references/component-mapping.md +307 -0
  479. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
  480. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
  481. package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/scripts/validate_styling.py +424 -0
  482. package/plugins/lisa-expo/.codex-plugin/skills/jira-add-journey/SKILL.md +126 -0
  483. package/plugins/lisa-expo/.codex-plugin/skills/jira-add-journey/agents/openai.yaml +4 -0
  484. package/plugins/lisa-expo/.codex-plugin/skills/jira-create/SKILL.md +161 -0
  485. package/plugins/lisa-expo/.codex-plugin/skills/jira-create/agents/openai.yaml +4 -0
  486. package/plugins/lisa-expo/.codex-plugin/skills/jira-evidence/SKILL.md +78 -0
  487. package/plugins/lisa-expo/.codex-plugin/skills/jira-evidence/agents/openai.yaml +4 -0
  488. package/plugins/lisa-expo/.codex-plugin/skills/jira-evidence/scripts/post-evidence.sh +180 -0
  489. package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/SKILL.md +190 -0
  490. package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/agents/openai.yaml +4 -0
  491. package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/scripts/generate-templates.py +281 -0
  492. package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/scripts/parse-plan.py +368 -0
  493. package/plugins/lisa-expo/.codex-plugin/skills/jira-verify/SKILL.md +27 -0
  494. package/plugins/lisa-expo/.codex-plugin/skills/jira-verify/agents/openai.yaml +4 -0
  495. package/plugins/lisa-expo/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +13 -0
  496. package/plugins/lisa-expo/.codex-plugin/skills/lisa-e2e-coverage-gaps/agents/openai.yaml +4 -0
  497. package/plugins/lisa-expo/.codex-plugin/skills/local-state/SKILL.md +362 -0
  498. package/plugins/lisa-expo/.codex-plugin/skills/local-state/agents/openai.yaml +4 -0
  499. package/plugins/lisa-expo/.codex-plugin/skills/local-state/references/async-storage.md +505 -0
  500. package/plugins/lisa-expo/.codex-plugin/skills/local-state/references/persistence-patterns.md +711 -0
  501. package/plugins/lisa-expo/.codex-plugin/skills/local-state/references/reactive-variables.md +446 -0
  502. package/plugins/lisa-expo/.codex-plugin/skills/native-data-fetching/SKILL.md +507 -0
  503. package/plugins/lisa-expo/.codex-plugin/skills/native-data-fetching/agents/openai.yaml +4 -0
  504. package/plugins/lisa-expo/.codex-plugin/skills/native-data-fetching/references/expo-router-loaders.md +344 -0
  505. package/plugins/lisa-expo/.codex-plugin/skills/ops-browser-uat/SKILL.md +124 -0
  506. package/plugins/lisa-expo/.codex-plugin/skills/ops-browser-uat/agents/openai.yaml +4 -0
  507. package/plugins/lisa-expo/.codex-plugin/skills/ops-check-logs/SKILL.md +217 -0
  508. package/plugins/lisa-expo/.codex-plugin/skills/ops-check-logs/agents/openai.yaml +4 -0
  509. package/plugins/lisa-expo/.codex-plugin/skills/ops-db-ops/SKILL.md +123 -0
  510. package/plugins/lisa-expo/.codex-plugin/skills/ops-db-ops/agents/openai.yaml +4 -0
  511. package/plugins/lisa-expo/.codex-plugin/skills/ops-deploy/SKILL.md +123 -0
  512. package/plugins/lisa-expo/.codex-plugin/skills/ops-deploy/agents/openai.yaml +4 -0
  513. package/plugins/lisa-expo/.codex-plugin/skills/ops-monitor-errors/SKILL.md +99 -0
  514. package/plugins/lisa-expo/.codex-plugin/skills/ops-monitor-errors/agents/openai.yaml +4 -0
  515. package/plugins/lisa-expo/.codex-plugin/skills/ops-performance/SKILL.md +165 -0
  516. package/plugins/lisa-expo/.codex-plugin/skills/ops-performance/agents/openai.yaml +4 -0
  517. package/plugins/lisa-expo/.codex-plugin/skills/ops-run-local/SKILL.md +169 -0
  518. package/plugins/lisa-expo/.codex-plugin/skills/ops-run-local/agents/openai.yaml +4 -0
  519. package/plugins/lisa-expo/.codex-plugin/skills/ops-verify-health/SKILL.md +101 -0
  520. package/plugins/lisa-expo/.codex-plugin/skills/ops-verify-health/agents/openai.yaml +4 -0
  521. package/plugins/lisa-expo/.codex-plugin/skills/owasp-zap/SKILL.md +61 -0
  522. package/plugins/lisa-expo/.codex-plugin/skills/owasp-zap/agents/openai.yaml +4 -0
  523. package/plugins/lisa-expo/.codex-plugin/skills/play-store-access/SKILL.md +226 -0
  524. package/plugins/lisa-expo/.codex-plugin/skills/play-store-access/agents/openai.yaml +4 -0
  525. package/plugins/lisa-expo/.codex-plugin/skills/playwright-ci-debugging/SKILL.md +140 -0
  526. package/plugins/lisa-expo/.codex-plugin/skills/playwright-ci-debugging/agents/openai.yaml +4 -0
  527. package/plugins/lisa-expo/.codex-plugin/skills/playwright-selectors/SKILL.md +455 -0
  528. package/plugins/lisa-expo/.codex-plugin/skills/playwright-selectors/agents/openai.yaml +4 -0
  529. package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/SKILL.md +251 -0
  530. package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/agents/openai.yaml +4 -0
  531. package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/references/extraction-strategies.md +456 -0
  532. package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/references/refactoring-patterns.md +557 -0
  533. package/plugins/lisa-expo/.codex-plugin/skills/testing-library/SKILL.md +314 -0
  534. package/plugins/lisa-expo/.codex-plugin/skills/testing-library/agents/openai.yaml +4 -0
  535. package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/async-patterns.md +420 -0
  536. package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/expo-router-testing.md +556 -0
  537. package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/mocking-patterns.md +590 -0
  538. package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/query-priority.md +291 -0
  539. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/SKILL.md +134 -0
  540. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/agents/openai.yaml +4 -0
  541. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
  542. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/expo-av-to-video.md +160 -0
  543. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/native-tabs.md +124 -0
  544. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/new-architecture.md +79 -0
  545. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/react-19.md +79 -0
  546. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/react-compiler.md +59 -0
  547. package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
  548. package/plugins/lisa-expo/.codex-plugin/skills/use-dom/SKILL.md +417 -0
  549. package/plugins/lisa-expo/.codex-plugin/skills/use-dom/agents/openai.yaml +4 -0
  550. package/plugins/lisa-expo/skills/building-native-ui/SKILL.md +1 -1
  551. package/plugins/lisa-expo-agy/plugin.json +1 -1
  552. package/plugins/lisa-expo-agy/skills/building-native-ui/SKILL.md +1 -1
  553. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  554. package/plugins/lisa-expo-copilot/skills/building-native-ui/SKILL.md +1 -1
  555. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  556. package/plugins/lisa-expo-cursor/skills/building-native-ui/SKILL.md +1 -1
  557. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  558. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +2 -2
  559. package/plugins/lisa-harper-fabric/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +105 -0
  560. package/plugins/lisa-harper-fabric/.codex-plugin/skills/e2e-coverage-gaps/agents/openai.yaml +4 -0
  561. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-auth/SKILL.md +368 -0
  562. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-auth/agents/openai.yaml +4 -0
  563. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-build-and-deploy/SKILL.md +198 -0
  564. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-build-and-deploy/agents/openai.yaml +4 -0
  565. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-caching/SKILL.md +265 -0
  566. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-caching/agents/openai.yaml +4 -0
  567. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-component-model/SKILL.md +87 -0
  568. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-component-model/agents/openai.yaml +4 -0
  569. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-config-yaml/SKILL.md +283 -0
  570. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-config-yaml/agents/openai.yaml +4 -0
  571. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-operations/SKILL.md +239 -0
  572. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-operations/agents/openai.yaml +4 -0
  573. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-realtime/SKILL.md +187 -0
  574. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-realtime/agents/openai.yaml +4 -0
  575. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-resources/SKILL.md +142 -0
  576. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-resources/agents/openai.yaml +4 -0
  577. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-rest-queries/SKILL.md +403 -0
  578. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-rest-queries/agents/openai.yaml +4 -0
  579. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-schema-graphql/SKILL.md +123 -0
  580. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-schema-graphql/agents/openai.yaml +4 -0
  581. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-testing/SKILL.md +254 -0
  582. package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-testing/agents/openai.yaml +4 -0
  583. package/plugins/lisa-harper-fabric/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +13 -0
  584. package/plugins/lisa-harper-fabric/.codex-plugin/skills/lisa-e2e-coverage-gaps/agents/openai.yaml +4 -0
  585. package/plugins/lisa-harper-fabric/hooks/block-generated-artifact-edits.sh +42 -24
  586. package/plugins/lisa-harper-fabric/hooks/enforce-config-extensions.mjs +12 -14
  587. package/plugins/lisa-harper-fabric/hooks/enforce-config-extensions.sh +30 -3
  588. package/plugins/lisa-harper-fabric/hooks/inject-rules.sh +1 -1
  589. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  590. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  591. package/plugins/lisa-harper-fabric-copilot/hooks/block-generated-artifact-edits.sh +42 -24
  592. package/plugins/lisa-harper-fabric-copilot/hooks/enforce-config-extensions.mjs +12 -14
  593. package/plugins/lisa-harper-fabric-copilot/hooks/enforce-config-extensions.sh +30 -3
  594. package/plugins/lisa-harper-fabric-copilot/hooks/inject-rules.sh +1 -1
  595. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  596. package/plugins/lisa-harper-fabric-cursor/hooks/block-generated-artifact-edits.sh +42 -24
  597. package/plugins/lisa-harper-fabric-cursor/hooks/enforce-config-extensions.mjs +12 -14
  598. package/plugins/lisa-harper-fabric-cursor/hooks/enforce-config-extensions.sh +30 -3
  599. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  600. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +2 -2
  601. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/SKILL.md +176 -0
  602. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/agents/openai.yaml +4 -0
  603. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/advanced-features.md +527 -0
  604. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/project-patterns.md +531 -0
  605. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/quick-start.md +257 -0
  606. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
  607. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/types-scalars.md +513 -0
  608. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-rules/SKILL.md +565 -0
  609. package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-rules/agents/openai.yaml +4 -0
  610. package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/SKILL.md +275 -0
  611. package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/agents/openai.yaml +4 -0
  612. package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
  613. package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/references/entity-patterns.md +450 -0
  614. package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/references/observability-patterns.md +536 -0
  615. package/plugins/lisa-nestjs/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
  616. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  617. package/plugins/lisa-nestjs-agy/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
  618. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  619. package/plugins/lisa-nestjs-copilot/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
  620. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  621. package/plugins/lisa-nestjs-cursor/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
  622. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  623. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +2 -2
  624. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-repo-topic/SKILL.md +13 -0
  625. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-repo-topic/agents/openai.yaml +4 -0
  626. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-slack/SKILL.md +13 -0
  627. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-slack/agents/openai.yaml +4 -0
  628. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-telegram/SKILL.md +13 -0
  629. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-telegram/agents/openai.yaml +4 -0
  630. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-repo-topic/SKILL.md +163 -0
  631. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-repo-topic/agents/openai.yaml +4 -0
  632. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +185 -0
  633. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/SKILL.md +175 -0
  634. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/agents/openai.yaml +4 -0
  635. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/references/platform-routing.md +123 -0
  636. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/references/prompts.md +78 -0
  637. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-setup/SKILL.md +141 -0
  638. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-setup/agents/openai.yaml +4 -0
  639. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-setup-openclaw/SKILL.md +13 -0
  640. package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-setup-openclaw/agents/openai.yaml +4 -0
  641. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  642. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  643. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  644. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  645. package/plugins/lisa-phaser/.codex-plugin/plugin.json +2 -2
  646. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-accessibility/SKILL.md +135 -0
  647. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-accessibility/agents/openai.yaml +4 -0
  648. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-pipeline/SKILL.md +222 -0
  649. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-pipeline/agents/openai.yaml +4 -0
  650. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-sourcing/SKILL.md +151 -0
  651. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-sourcing/agents/openai.yaml +4 -0
  652. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-build-deploy/SKILL.md +153 -0
  653. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-build-deploy/agents/openai.yaml +4 -0
  654. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-i18n/SKILL.md +122 -0
  655. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-i18n/agents/openai.yaml +4 -0
  656. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-project-structure/SKILL.md +89 -0
  657. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-project-structure/agents/openai.yaml +4 -0
  658. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-services/SKILL.md +208 -0
  659. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-services/agents/openai.yaml +4 -0
  660. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-testing/SKILL.md +192 -0
  661. package/plugins/lisa-phaser/.codex-plugin/skills/phaser-testing/agents/openai.yaml +4 -0
  662. package/plugins/lisa-phaser/hooks/inject-rules.sh +1 -1
  663. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  664. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  665. package/plugins/lisa-phaser-copilot/hooks/inject-rules.sh +1 -1
  666. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  667. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  668. package/plugins/lisa-rails/.codex-plugin/plugin.json +2 -2
  669. package/plugins/lisa-rails/.codex-plugin/skills/action-controller-best-practices/SKILL.md +374 -0
  670. package/plugins/lisa-rails/.codex-plugin/skills/action-controller-best-practices/agents/openai.yaml +4 -0
  671. package/plugins/lisa-rails/.codex-plugin/skills/action-view-best-practices/SKILL.md +335 -0
  672. package/plugins/lisa-rails/.codex-plugin/skills/action-view-best-practices/agents/openai.yaml +4 -0
  673. package/plugins/lisa-rails/.codex-plugin/skills/active-record-model-best-practices/SKILL.md +166 -0
  674. package/plugins/lisa-rails/.codex-plugin/skills/active-record-model-best-practices/agents/openai.yaml +4 -0
  675. package/plugins/lisa-rails/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +105 -0
  676. package/plugins/lisa-rails/.codex-plugin/skills/e2e-coverage-gaps/agents/openai.yaml +4 -0
  677. package/plugins/lisa-rails/.codex-plugin/skills/fix-linter-error/SKILL.md +45 -0
  678. package/plugins/lisa-rails/.codex-plugin/skills/fix-linter-error/agents/openai.yaml +4 -0
  679. package/plugins/lisa-rails/.codex-plugin/skills/improve-code-complexity/SKILL.md +48 -0
  680. package/plugins/lisa-rails/.codex-plugin/skills/improve-code-complexity/agents/openai.yaml +4 -0
  681. package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines/SKILL.md +46 -0
  682. package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines/agents/openai.yaml +4 -0
  683. package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines-per-function/SKILL.md +46 -0
  684. package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines-per-function/agents/openai.yaml +4 -0
  685. package/plugins/lisa-rails/.codex-plugin/skills/improve-test-coverage/SKILL.md +45 -0
  686. package/plugins/lisa-rails/.codex-plugin/skills/improve-test-coverage/agents/openai.yaml +4 -0
  687. package/plugins/lisa-rails/.codex-plugin/skills/jira-add-journey/SKILL.md +65 -0
  688. package/plugins/lisa-rails/.codex-plugin/skills/jira-add-journey/agents/openai.yaml +4 -0
  689. package/plugins/lisa-rails/.codex-plugin/skills/jira-create/SKILL.md +100 -0
  690. package/plugins/lisa-rails/.codex-plugin/skills/jira-create/agents/openai.yaml +4 -0
  691. package/plugins/lisa-rails/.codex-plugin/skills/jira-evidence/SKILL.md +70 -0
  692. package/plugins/lisa-rails/.codex-plugin/skills/jira-evidence/agents/openai.yaml +4 -0
  693. package/plugins/lisa-rails/.codex-plugin/skills/jira-evidence/scripts/post-evidence.sh +180 -0
  694. package/plugins/lisa-rails/.codex-plugin/skills/jira-journey/SKILL.md +64 -0
  695. package/plugins/lisa-rails/.codex-plugin/skills/jira-journey/agents/openai.yaml +4 -0
  696. package/plugins/lisa-rails/.codex-plugin/skills/jira-verify/SKILL.md +26 -0
  697. package/plugins/lisa-rails/.codex-plugin/skills/jira-verify/agents/openai.yaml +4 -0
  698. package/plugins/lisa-rails/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +13 -0
  699. package/plugins/lisa-rails/.codex-plugin/skills/lisa-e2e-coverage-gaps/agents/openai.yaml +4 -0
  700. package/plugins/lisa-rails/.codex-plugin/skills/ops-check-logs/SKILL.md +191 -0
  701. package/plugins/lisa-rails/.codex-plugin/skills/ops-check-logs/agents/openai.yaml +4 -0
  702. package/plugins/lisa-rails/.codex-plugin/skills/ops-deploy/SKILL.md +153 -0
  703. package/plugins/lisa-rails/.codex-plugin/skills/ops-deploy/agents/openai.yaml +4 -0
  704. package/plugins/lisa-rails/.codex-plugin/skills/ops-run-local/SKILL.md +169 -0
  705. package/plugins/lisa-rails/.codex-plugin/skills/ops-run-local/agents/openai.yaml +4 -0
  706. package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-jobs/SKILL.md +157 -0
  707. package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-jobs/agents/openai.yaml +4 -0
  708. package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-telemetry/SKILL.md +197 -0
  709. package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-telemetry/agents/openai.yaml +4 -0
  710. package/plugins/lisa-rails/hooks/inject-rules.sh +2 -1
  711. package/plugins/lisa-rails-agy/plugin.json +1 -1
  712. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  713. package/plugins/lisa-rails-copilot/hooks/inject-rules.sh +2 -1
  714. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  715. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  716. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  717. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  718. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  719. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  720. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  721. package/plugins/lisa-wiki/.codex-plugin/plugin.json +2 -2
  722. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-ingest/SKILL.md +12 -0
  723. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-ingest/agents/openai.yaml +4 -0
  724. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-role/SKILL.md +12 -0
  725. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-role/agents/openai.yaml +4 -0
  726. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-ingest/SKILL.md +12 -0
  727. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-ingest/agents/openai.yaml +4 -0
  728. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-lint/SKILL.md +11 -0
  729. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-lint/agents/openai.yaml +4 -0
  730. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-migrate/SKILL.md +12 -0
  731. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-migrate/agents/openai.yaml +4 -0
  732. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-onboard-me/SKILL.md +12 -0
  733. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-onboard-me/agents/openai.yaml +4 -0
  734. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-query/SKILL.md +12 -0
  735. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-query/agents/openai.yaml +4 -0
  736. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup/SKILL.md +12 -0
  737. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup/agents/openai.yaml +4 -0
  738. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup-wiki/SKILL.md +12 -0
  739. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup-wiki/agents/openai.yaml +4 -0
  740. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-status/SKILL.md +12 -0
  741. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-status/agents/openai.yaml +4 -0
  742. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
  743. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-ingest/agents/openai.yaml +4 -0
  744. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-role/SKILL.md +30 -0
  745. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-role/agents/openai.yaml +4 -0
  746. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
  747. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-confluence/agents/openai.yaml +4 -0
  748. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
  749. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-docs/agents/openai.yaml +4 -0
  750. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-git/SKILL.md +25 -0
  751. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-git/agents/openai.yaml +4 -0
  752. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
  753. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-jira/agents/openai.yaml +4 -0
  754. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
  755. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-memory/agents/openai.yaml +4 -0
  756. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
  757. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-notion/agents/openai.yaml +4 -0
  758. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
  759. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-roles/agents/openai.yaml +4 -0
  760. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
  761. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-slack/agents/openai.yaml +4 -0
  762. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-web/SKILL.md +23 -0
  763. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-web/agents/openai.yaml +4 -0
  764. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-doctor/SKILL.md +47 -0
  765. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-doctor/agents/openai.yaml +4 -0
  766. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-ingest/SKILL.md +99 -0
  767. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-ingest/agents/openai.yaml +4 -0
  768. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-lint/SKILL.md +32 -0
  769. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-lint/agents/openai.yaml +4 -0
  770. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-migrate/SKILL.md +43 -0
  771. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-migrate/agents/openai.yaml +4 -0
  772. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
  773. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-onboard-me/agents/openai.yaml +4 -0
  774. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-query/SKILL.md +36 -0
  775. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-query/agents/openai.yaml +4 -0
  776. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup/SKILL.md +75 -0
  777. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup/agents/openai.yaml +4 -0
  778. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup-automations/SKILL.md +83 -0
  779. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup-automations/agents/openai.yaml +4 -0
  780. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-status/SKILL.md +47 -0
  781. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-status/agents/openai.yaml +4 -0
  782. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-tear-down-automations/SKILL.md +34 -0
  783. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-tear-down-automations/agents/openai.yaml +4 -0
  784. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-usage/SKILL.md +50 -0
  785. package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-usage/agents/openai.yaml +4 -0
  786. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  787. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  788. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  789. package/plugins/src/base/hooks/inject-rules.sh +3 -2
  790. package/plugins/src/base/hooks/install-pkgs.sh +4 -45
  791. package/plugins/src/base/hooks/setup-jira-cli.sh +4 -12
  792. package/plugins/src/base/skills/lisa-setup-linear/SKILL.md +1 -1
  793. package/plugins/src/expo/skills/building-native-ui/SKILL.md +1 -1
  794. package/plugins/src/harper-fabric/hooks/block-generated-artifact-edits.sh +42 -24
  795. package/plugins/src/harper-fabric/hooks/enforce-config-extensions.mjs +12 -14
  796. package/plugins/src/harper-fabric/hooks/enforce-config-extensions.sh +30 -3
  797. package/plugins/src/harper-fabric/hooks/inject-rules.sh +1 -1
  798. package/plugins/src/nestjs/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
  799. package/plugins/src/phaser/hooks/inject-rules.sh +1 -1
  800. package/plugins/src/rails/hooks/inject-rules.sh +2 -1
  801. package/scripts/clean-dist.mjs +7 -0
  802. package/scripts/generate-codex-plugin-artifacts.mjs +311 -20
  803. package/scripts/install-claude-plugins.sh +53 -40
  804. package/typescript/package-lisa/package.lisa.json +1 -1
  805. package/.agents/plugins/marketplace.json +0 -128
  806. package/dist/codex/lisa-plugin-detection.d.ts +0 -68
  807. package/dist/codex/lisa-plugin-detection.d.ts.map +0 -1
  808. package/dist/codex/lisa-plugin-detection.js +0 -139
  809. package/dist/codex/lisa-plugin-detection.js.map +0 -1
@@ -0,0 +1,1030 @@
1
+ ---
2
+ name: lisa-repair-intake
3
+ description: "Vendor-agnostic repair scanner…"
4
+ allowed-tools: ["Skill", "Bash", "Read", "Write", "Edit"]
5
+ ---
6
+
7
+ # Repair Intake: $ARGUMENTS
8
+
9
+ Run one batch-**repair** cycle against the queue identified by `$ARGUMENTS`. Where `lisa-intake`
10
+ scans the `ready` role and moves work *forward*, repair-intake scans the **stuck and
11
+ close-out** roles and moves work *unstuck* or *fully closed*:
12
+
13
+ - **Stalled in-progress** — an item left in an in-progress role (build `claimed`, PRD
14
+ `in_review`) whose processing cycle died. It is technically "being worked" but nothing is
15
+ happening, so it sits ignored forever. (The vendor PRD intakes explicitly leave an errored PRD
16
+ in `in_review` "for the human to investigate from there" — that orphan is exactly what this
17
+ skill recovers.) For a stalled **build**, repair-intake first diagnoses *why* it stalled by
18
+ inspecting its PRs and deploys. A PR that **already merged** is recovered by applying the env
19
+ transition build-intake never got to (its merge gate left the item `claimed` when the merge landed
20
+ after its agent returned) — no re-dispatch. A PR that is merely **behind its base** (`BEHIND`, no
21
+ conflict) is **re-synced in place** with `gh pr update-branch` so the already-enabled auto-merge can
22
+ finally land — a clean rebase needs no human, and leaving it stranded is the exact gap that lets an
23
+ auto-merge PR sit unmerged forever. A **true merge conflict** is first given **one bounded in-place
24
+ re-dispatch** to the build agent — whose `drive-pr-to-merge` fix-mode loop resolves conflicts — because
25
+ a conflict, unlike a failing external check, is fixable by re-running the build; only a conflict that
26
+ survives that single attempt (or that the agent says needs design input) becomes a fix ticket. The
27
+ genuinely non-resolvable blockers — failing checks / unaddressed CodeRabbit or `CHANGES_REQUESTED`
28
+ review / a failed deploy — get a build-ready leaf fix ticket with the item moved to `blocked` (blocked
29
+ by that ticket) instead of blindly re-dispatching the agent, which would just churn against them.
30
+ - **Recoverable blocked** — an item in `blocked` whose blocker may now be gone. The blocker is
31
+ one of three classes, and repair re-checks **all** of them, not just dependencies: (a) an
32
+ `is blocked by` **dependency** has since closed; (b) a **validation / quality-gate self-block** —
33
+ the item was bounced to `blocked` by its own pre-flight `verify`/`validate` gate (missing
34
+ Validation Journey, Sign-in Required, Acceptance Criteria, etc.) with **no dependency at all**,
35
+ and a human has since edited the item to add what the gate demanded; or (c) **clarifying
36
+ questions answered** / an **ambiguity** research can now settle. A self-block (b) is the common
37
+ one missed by dependency-only re-checks: nothing else is blocking it, so re-running the same gate
38
+ against its current content is the only way to know it is now passable.
39
+ - **Terminal-open drift** — an item already carrying its true terminal lifecycle role (for
40
+ example GitHub `status:done`) but still open/active in the provider's native state.
41
+ - **Rollup drift** — a parent/container item (Epic, Story, PRD, Linear Project, or equivalent)
42
+ whose own lifecycle state does not match the roll-up of its children's states per
43
+ `leaf-only-lifecycle`. This covers the *completed* case (all children terminal → close the parent
44
+ out) **and** the *intermediate-env* case (all children shipped to an env like `On Stg`, but the
45
+ parent never advanced — including a parent left stranded in a status it should never carry).
46
+ - **Stale-`ready` container** — a parent/container (open child work, or a childless
47
+ **Epic**) wrongly carrying the build-ready role. This is a leaf-only-invariant violation
48
+ the build-intake claim gate deliberately leaves for a human; repair-intake reconciles it by
49
+ rolling the parent up from its children (with an audit note), so a container never sits in `ready`
50
+ indefinitely.
51
+ - **Missing official ready-label drift** — a GitHub issue that is missing every configured Lisa
52
+ lifecycle label. repair-intake classifies it as a PRD or build ticket and adds the configured
53
+ `ready` label (`prd-ready` for a PRD, build `status:ready` for a ticket) so normal intake can see
54
+ it; if the later intake/implement gate finds the item incomplete, it moves the item to `blocked`.
55
+ - **Missing native child link drift** — a GitHub parent (a `ticketed`/other open non-product-owned
56
+ PRD, **or a build Epic/Story container**) whose children are discoverable — from the generated-work
57
+ section/comment for a PRD, or from body parentage (`Parent: #<n>` / `Parent Epic: #<n>`) for a build
58
+ container resolved via the documented hierarchy fallback — but whose native sub-issue list is missing
59
+ one or more of those children. This is the common shape when children were created by an external
60
+ generator (e.g. Codex) or an older write path that recorded parentage only in prose and never called
61
+ `addSubIssue`. repair-intake replays the `prd-backlink` / `github-write-issue` native-linking contract
62
+ and attaches the missing same-repo children idempotently, so rollup and the GitHub UI can rely on the
63
+ native graph again.
64
+
65
+ This skill is the symmetric counterpart to `lisa-intake`. It reuses the same queue-detection,
66
+ the same agent-team orchestration, the same "don't ask, just run" confirmation policy, and the
67
+ same per-item surfaces the vendor intakes use (`lisa:<source>-to-tracker` dry-run for PRDs;
68
+ `lisa:<tracker>-agent` + the scanner's lifecycle transitions for build) — it differs in *which
69
+ roles it scans* and, for stalled/blocked work, *that it skips the claim step* (the item is already
70
+ claimed/blocked). Close-out candidates do not dispatch agents; they only reconcile terminal
71
+ lifecycle state with provider-native closure and rollup state.
72
+
73
+ ## Public contract
74
+
75
+ ```text
76
+ /lisa:repair-intake <queue> [intake_mode=prd|build|both] [stale_after=2h] [max_candidates=100] [force=true]
77
+ ```
78
+
79
+ | Token | Meaning | Default |
80
+ |-------|---------|---------|
81
+ | `<queue>` | Same queue identifier `lisa-intake` accepts (see Source dispatch). Required. | — |
82
+ | `intake_mode` | `prd` \| `build` \| `both`. Only meaningful for a GitHub `org/repo` (or bare `github`) that hosts both PRD and build label namespaces. `both` is unique to repair — a repair sweep usefully covers both lifecycles in one schedule. Absent → `both` when both namespaces exist, else whichever lifecycle exists. | `both` for dual GitHub queues; otherwise infer |
83
+ | `stale_after` | How long since the last state-changing transition into the in-progress role, or since the last human / PR-side forward-progress activity, before an in-progress item counts as stalled. Automation self-comments do not reset this clock. Accepts `24h`, `90m`, `2d`, or `0` (treat any in-progress item as stalled — manual recovery, also the only way to resume work on a provider that exposes no reliable timestamp). Overrides config. | `2h` |
84
+ | `max_candidates` | Cap on how many stuck/close-out candidates to enumerate and evaluate. Repair every materially actionable candidate within this bounded set, then stop. Overrides config. | `100` |
85
+ | `force` | `true` bypasses the loop-prevention backoff window (so a manual re-run re-attempts items even if their fingerprint is unchanged). It does **not** change the staleness rule — use `stale_after=0` for that. | `false` |
86
+
87
+ ## Confirmation policy
88
+
89
+ Do NOT ask the caller whether to proceed. Once invoked with a queue, run the cycle to
90
+ completion. The caller (a human at the CLI or a scheduled cron) has already authorized the run
91
+ by invoking the skill; re-prompting defeats the purpose of a background repair sweep.
92
+
93
+ Specifically forbidden:
94
+
95
+ - Previewing projected scope (number of stuck items, projected re-dispatch count, write counts)
96
+ and asking whether to continue.
97
+ - Offering A/B/C-style choices like "repair / skip / report-only" — the documented behavior IS
98
+ the default.
99
+ - Pausing because many items are stuck, an item looks complex, or a repair is likely to land
100
+ the item back in `blocked`. Returning an item to `blocked` with a current, accurate note is a
101
+ valid outcome of the repair lifecycle, not a failure.
102
+ - Pausing because a re-dispatch looks expensive. The cost of one cycle is bounded by
103
+ `max_candidates` and the actionable subset inside that cap; the cost of stalling a scheduled
104
+ cron waiting on a human is unbounded.
105
+
106
+ The only legitimate reasons to stop early:
107
+
108
+ - Missing required input (no queue argument, missing project configuration). Surface the
109
+ missing value and exit.
110
+ - The queue itself is misconfigured (Status property missing expected values, JIRA workflow
111
+ can't reach required transitions). Surface and exit.
112
+ - No stuck/close-out candidates, or none actionable this cycle. Exit cleanly with the idle-case
113
+ summary.
114
+
115
+ ## Orchestration: agent team
116
+
117
+ If you are NOT already operating inside an agent team (no prior successful team-creation or
118
+ subagent-delegation tool call in this session, not spawned into a team context), the very first
119
+ thing you do is establish team orchestration.
120
+
121
+ Use the team tool for the current runtime:
122
+
123
+ - Claude Code >= 2.1.178: there is no `TeamCreate` tool; the team forms automatically when you spawn
124
+ the first teammate with `Agent`. That first spawn should be the bounded specialist needed to start
125
+ this flow. On older Claude Code that still exposes `TeamCreate`, the explicit team-create path is
126
+ also acceptable.
127
+ - Codex: do not call `TeamCreate`; Codex does not expose that Claude tool. Use `tool_search`
128
+ with a query like `multi-agent tools` to load `multi_agent_v1`, then use
129
+ `multi_agent_v1.spawn_agent` for teammate delegation. Treat the first successful `spawn_agent`
130
+ call as establishing team orchestration.
131
+ - Other runtimes: use the current runtime's tool-discovery mechanism to discover and call the
132
+ appropriate multi-agent/team tool.
133
+
134
+ If no team creation or subagent delegation tool is available, explicitly state that team
135
+ orchestration is unavailable in this runtime, continue as the lead agent, and preserve the
136
+ workflow's review, verification, and task-tracking obligations locally.
137
+
138
+ Until the team is established, the first Codex teammate has been spawned, or the no-team
139
+ fallback has been declared, do NOT call any of: `TaskCreate`, `Skill`, MCP tools
140
+ (Atlassian / Linear / GitHub / Notion), `Read`, `Write`, `Edit`, `Bash`, `Grep`, `Glob`.
141
+ The initial Claude `Agent` spawn described above is the only pre-team exception because it
142
+ establishes the team.
143
+ Scanning the queue, evaluating staleness, and dispatching per-item repairs — all of those are
144
+ tasks for the team you are about to create, not for the lead session before orchestration
145
+ exists.
146
+
147
+ If you ARE already inside an agent team (e.g., a teammate invoked this skill via the Skill
148
+ tool), do NOT create a second team — many harnesses reject double-creates — and do NOT collapse the nested flow into a single inline worker. A nested team-first flow must still bring in the specialists it requires by adding them to the existing team, not by doing the work itself:
149
+
150
+ - **Claude:** teams are flat and only the lead can add named teammates, so do NOT call `Agent` with a `name` from a teammate (the harness rejects it: *"Teammates cannot spawn other teammates — the team roster is flat"*). Send the team lead a message naming the specialist teammate(s) this flow needs, their task assignments, and completion criteria, then coordinate through the shared task list until they finish. An anonymous subagent (`Agent` with `name` omitted) is permitted only for bounded one-shot work whose result returns directly to you — it is not a substitute for the required lifecycle specialists.
151
+ - **Codex:** do NOT call `TeamCreate`. If the lead/root agent is addressable (you were given its id/handle), send it a request to `multi_agent_v1.spawn_agent` the specialist agent(s), including each agent's prompt, ownership, and expected result. If no lead handle exists but `spawn_agent` is available to you, spawn only the bounded specialist agent(s) this flow needs, `wait_agent` for their results, and relay those results upward to the parent/lead.
152
+
153
+ Treat the first successful lead-spawn request (or, on the Codex fallback, the first specialist spawn) as preserving team orchestration. Never satisfy a team-first lifecycle flow by doing all the work inline. The cycle's outer team is created by repair-intake. Each per-item repair it runs
154
+ (`lisa:<source>-to-tracker` for a PRD, `lisa:<tracker>-agent` for a build item) executes within
155
+ the same team — those skills' orchestration preambles detect the existing team and skip creating
156
+ a second one. One team per cron cycle.
157
+
158
+ ## Source dispatch
159
+
160
+ Detect the queue type from `$ARGUMENTS` using the **exact same detection and disambiguation
161
+ rules as `lisa-intake`** — read that skill's "Source dispatch" section for the authoritative
162
+ table; the detection is identical and only the per-item action changes (repair instead of
163
+ claim-and-advance). The essentials, inlined here so this skill is self-complete:
164
+
165
+ | If `$ARGUMENTS` is... | Queue / lifecycle | Source/tracker key | Candidates repaired |
166
+ |------------------------|-------------------|--------------------|----------------------|
167
+ | Notion **database** URL/ID | PRD (Notion) | source=notion | `in_review`, `blocked`, terminal/open PRDs, all-terminal generated-work rollups |
168
+ | Confluence **space** URL/key | PRD (Confluence) | source=confluence | `in_review`, `blocked`, terminal/open PRDs, all-terminal generated-work rollups |
169
+ | Confluence **parent page** URL/ID | PRD (Confluence, narrowed) | source=confluence | `in_review`, `blocked`, terminal/open PRDs, all-terminal generated-work rollups |
170
+ | Linear **workspace** URL, **team** URL/key, or literal `linear` | PRD (Linear) | source=linear | `in_review`, `blocked`, terminal/open PRDs, all-terminal generated-work rollups |
171
+ | GitHub **repo** URL / `org/repo` (PRD namespace) | PRD (GitHub) | source=github | `in_review`, `blocked`, terminal/open PRDs, missing PRD child links, all-terminal generated-work rollups |
172
+ | GitHub **repo** URL / `org/repo` with `tracker = github` (build namespace) | Build (GitHub) | tracker=github | `claimed`, `blocked`, terminal/open issues, parent rollups (intermediate-env + all-terminal), stale-`ready` containers |
173
+ | GitHub **repo** URL / `org/repo` with an open issue missing configured lifecycle labels | GitHub label normalization | per classified lifecycle | add configured `prd.ready` or build `ready` |
174
+ | Literal `github` | GitHub; route by `intake_mode` (`prd` / `build` / `both`) | per lifecycle | per lifecycle above, plus GitHub ready-label normalization |
175
+ | JIRA project key or full JQL | Build (JIRA) | tracker=jira | `claimed`, `blocked`, terminal/closure verification, parent rollups (intermediate-env + all-terminal), stale-`ready` containers |
176
+
177
+ Disambiguation (same as `lisa-intake`): a `notion.so`/`notion.site` URL → Notion; an Atlassian
178
+ `/wiki/spaces/<KEY>` URL → Confluence (with `/pages/<id>` → parent-page narrowing); a
179
+ `linear.app` workspace/team URL or literal `linear` → Linear; a `github.com` URL / `<org>/<repo>`
180
+ token / literal `github` → GitHub; a bare token matching the JIRA project-key regex → JIRA
181
+ (else try Confluence space, then Linear team); a string with JQL operators → JQL. **A single-item
182
+ URL is out of scope** — this skill is batch-only; repair one item by hand via `lisa-implement`
183
+ (build) or by re-running `lisa:<source>-to-tracker` (PRD).
184
+
185
+ Role names for every vendor are resolved from `.lisa.config.json` per the `config-resolution`
186
+ rule — never hardcode status/label strings. The relevant repair roles:
187
+
188
+ | Lifecycle | Vendor | In-progress role key | Blocked role key | Terminal / rollup role key |
189
+ |-----------|--------|----------------------|------------------|----------------------------|
190
+ | Build | JIRA | `jira.workflow.claimed` (`In Progress`) | `jira.workflow.blocked` (`Blocked`) | env-resolved `jira.workflow.done` |
191
+ | Build | GitHub | `github.labels.build.claimed` (`status:in-progress`) | `github.labels.build.blocked` (`status:blocked`) | env-resolved `github.labels.build.done` (`status:done`) |
192
+ | Build | Linear | `linear.labels.build.claimed` (`status:in-progress`) | `linear.labels.build.blocked` (`status:blocked`) | env-resolved `linear.labels.build.done` (`status:done`) |
193
+ | PRD | Notion | `notion.values.in_review` (`In Review`) | `notion.values.blocked` (`Blocked`) | `notion.values.shipped` (`Shipped`) |
194
+ | PRD | GitHub | `github.labels.prd.in_review` (`prd-in-review`) | `github.labels.prd.blocked` (`prd-blocked`) | `github.labels.prd.shipped` (`prd-shipped`) |
195
+ | PRD | Linear | `linear.labels.prd.in_review` (`prd-in-review`) | `linear.labels.prd.blocked` (`prd-blocked`) | `linear.labels.prd.shipped` (`prd-shipped`) |
196
+ | PRD | Confluence | `confluence.parents.in_review` (page id) | `confluence.parents.blocked` (page id) | `confluence.parents.shipped` (page id) |
197
+
198
+ In addition to the lifecycle roles above, the build lifecycle defines the **`human_needed` marker** — an additive label (`jira.labels.human_needed` / `github.labels.build.human_needed` / `linear.labels.build.human_needed`, default `Human Needed` / `human-needed`) that rides alongside `blocked` when the block needs human-only input no agent or retry can supply (see `config-resolution` "Build markers"). repair-intake's interaction with the marker is asymmetric and is the whole point of the distinction below:
199
+
200
+ - The blocks repair-intake **itself writes** are the auto-recoverable kind — it files a build-ready fix ticket and moves the item `blocked` *blocked by that ticket*, expecting the next cycle to self-heal. Those are **not** `human_needed`; if such an item arrives already carrying a stale `human_needed` marker, repair-intake **clears** it (the block is no longer waiting on a human).
201
+ - The blocks the **vendor agent** writes when repair-intake re-dispatches it (its pre-flight gate) carry `human_needed` already — the agent owns that marker. repair-intake leaves it in place.
202
+
203
+ Resolve with the standard role-read pattern (local overrides global, default fallback):
204
+
205
+ ```bash
206
+ read_role() {
207
+ local path="$1" default="$2"
208
+ local local_v global_v
209
+ local_v=$(jq -r "${path} // empty" .lisa.config.local.json 2>/dev/null)
210
+ global_v=$(jq -r "${path} // empty" .lisa.config.json 2>/dev/null)
211
+ echo "${local_v:-${global_v:-$default}}"
212
+ }
213
+ # e.g. build/github:
214
+ CLAIMED=$(read_role '.github.labels.build.claimed' 'status:in-progress')
215
+ BLOCKED=$(read_role '.github.labels.build.blocked' 'status:blocked')
216
+ ```
217
+
218
+ ## Access layer (which surface does each write)
219
+
220
+ repair-intake stays vendor-neutral; concrete reads/writes go through the same layers the vendor
221
+ intakes use. Never call Atlassian MCP or `acli` directly — go through `lisa-atlassian-access`.
222
+
223
+ | Vendor | Reads (scan / comments / links) | Writes (transition / comment / close-out) | Re-dispatch / re-validate |
224
+ |--------|---------------------------------|-------------------------------|---------------------------|
225
+ | JIRA (build) | `lisa-atlassian-access` `search-issues` / `lisa-jira-read-ticket` | `lisa-atlassian-access` `transition` / `comment` | `lisa-jira-agent` |
226
+ | GitHub (build) | `gh issue list` / `gh issue view --json` / `gh pr list` / GraphQL sub-issues | `gh issue edit` (labels) / `gh issue comment` / `gh issue close --reason completed` | `lisa-github-agent` |
227
+ | Linear (build) | Linear MCP `list_issues` / `get_issue` / `list_comments` | Linear MCP `save_issue` (labels) / `save_comment` | `lisa-linear-agent` |
228
+ | Notion (PRD) | `lisa-notion-access` (`query`, page comments) | `lisa-notion-access` `write-page` (status) / page comment | `lisa-notion-to-tracker` (dry-run) |
229
+ | GitHub (PRD) | `gh issue list/view` (PRD labels) / GraphQL sub-issues / generated-work section | `gh issue edit` / `gh issue comment` / `gh issue close --reason completed` | `lisa-github-to-tracker` (dry-run) |
230
+ | Linear (PRD) | Linear MCP `list_projects` / `get_project` (+ sentinel feedback issue) | Linear MCP `save_project` (labels) / `save_comment` | `lisa-linear-to-tracker` (dry-run) |
231
+ | Confluence (PRD) | `lisa-atlassian-access` CQL | `lisa-atlassian-access` page `parentId` update / comment | `lisa-confluence-to-tracker` (dry-run) |
232
+
233
+ ## Staleness model
234
+
235
+ An in-progress item (build `claimed`, PRD `in_review`) is **stalled** when the last
236
+ state-changing transition into the in-progress role, or the last human / PR-side forward-progress
237
+ activity after that transition, is older than the `stale_after` threshold. `blocked` items are NOT
238
+ gated on staleness — their repairability is judged on current blocker/answer state, not elapsed
239
+ time.
240
+
241
+ Automation self-comments are not forward progress and must not reset the staleness clock. Status
242
+ comments like `[claude-build-intake] PR remains open...`, `[codex-build-intake] Follow-up pushed...`,
243
+ or `[lisa-repair-intake] ...` may be useful audit notes, but they cannot make a claimed item fresh
244
+ forever. If a provider exposes a changelog/history surface, prefer the timestamp of the last
245
+ transition into the claimed/In-Progress role over the item's generic `updated` timestamp. When the
246
+ history surface is unavailable, ignore comments whose author/marker clearly belongs to Lisa or its
247
+ automation agents, and use the newest human comment/edit or PR-side progress event instead.
248
+
249
+ A build `claimed` leaf whose linked PR has **already merged** (`state == MERGED`) is likewise NOT
250
+ gated on staleness. A merged PR is a settled terminal state, not in-flight work: the only thing
251
+ missing is the env transition build-intake never applied (its merge gate left the item `claimed`
252
+ because the merge landed after its agent returned). The recovery is judged on PR merge state, not
253
+ elapsed time — and crucially **post-merge activity does not defer it**. A freshly-merged PR keeps
254
+ producing activity that the signal below would otherwise read as keep-alive (a queued/in-progress
255
+ release or deploy check-run, a post-merge CodeRabbit summary comment), so gating merged-PR recovery
256
+ on staleness strands a *completed* leaf in `claimed` for as long as that activity keeps the clock
257
+ warm — exactly the failure that leaves a shipped Sub-task showing `status:in-progress` for a day
258
+ while its parents roll up against it. Recover it regardless of recent activity (Build `claimed`
259
+ decision tree step 0, and the dedicated high-confidence ordering bucket).
260
+
261
+ ### Threshold resolution
262
+
263
+ 1. `$ARGUMENTS` `stale_after=<dur>` (one-off override) — always wins. Parse `Nh` / `Nm` / `Nd` /
264
+ `0` into hours.
265
+ 2. `.lisa.config.json` `intake.repair.staleAfterHours` (durable project default).
266
+ 3. Built-in default: **2 hours**.
267
+
268
+ `stale_after=0` means "treat any in-progress item as stalled" — a manual full-recovery lever,
269
+ and the only way to resume work on a provider that exposes no reliable activity timestamp.
270
+
271
+ ### Activity signal (state-change first, portable across vendors)
272
+
273
+ Compute the item's newest eligible activity timestamp from the highest-priority signal the vendor
274
+ exposes, and compare it to `now - stale_after`:
275
+
276
+ 1. Provider-native status/label **transition** time into the in-progress role, when the provider
277
+ exposes it cleanly (JIRA changelog transition to `claimed` / In Progress, GitHub label event,
278
+ Linear state/label history, Notion/Confluence page move/status history).
279
+ 2. Latest human lifecycle/progress **comment** or edit on the item (and, for Linear PRDs, the
280
+ sentinel feedback issue). Exclude automation self-comments and Lisa audit markers such as
281
+ `[claude-build-intake]`, `[codex-build-intake]`, `[lisa-build-intake]`, and
282
+ `[lisa-repair-intake]`.
283
+ 3. For build items, latest **PR-side forward-progress activity** on the linked PR: newest commit,
284
+ review, check-run,
285
+ or PR comment.
286
+ 4. Provider-native item `updatedAt` / `last_edited_time` / `updated` only when the provider cannot
287
+ expose transition/comment authorship and the timestamp is not known to be driven by automation
288
+ self-comments.
289
+
290
+ If ANY of these is newer than the threshold, the item is **active** → record it as `active` and
291
+ skip it (read-only). For build `claimed`, an open PR with recent commits/checks is active. For
292
+ PRD `in_review`, a recent comment or page edit is active.
293
+
294
+ Count only **forward-progress** signals as keep-alive: new commits, a review that was just
295
+ requested or posted, an in-progress/queued check run, a fresh progress comment. A **settled
296
+ blocker state** — a failing/errored check run, `CONFLICTING` mergeability, a `CHANGES_REQUESTED`
297
+ review, an unaddressed CodeRabbit/reviewer change request, or a failed deployment — is NOT
298
+ keep-alive activity: it does not reset the staleness clock. The clock runs from the last genuine
299
+ progress event, so a PR that has been sitting failed/conflicted/awaiting-changes for longer than
300
+ `stale_after` counts as stalled and is diagnosed below.
301
+
302
+ A **merged** linked PR is the same kind of non-keep-alive signal, in the other direction: the work
303
+ is settled and complete, so its post-merge check-runs and summary comments must NOT count as
304
+ keep-alive either. A build `claimed` leaf with a merged PR is recovered regardless of the staleness
305
+ clock (see the Staleness model note above and the dedicated ordering bucket); it is never recorded
306
+ `active` and skipped on the strength of post-merge activity.
307
+
308
+ If a provider cannot expose any reliable timestamp, do **not** auto-resume its in-progress
309
+ items unless the caller passed `stale_after=0`. (Dependency-cleared `blocked` repair still
310
+ proceeds — it is judged on blocker state, not time.)
311
+
312
+ ## Repair decision tree
313
+
314
+ Apply per candidate. Continue through the ordered list until every candidate inside the
315
+ `max_candidates` cap has been evaluated. Each candidate may trigger a write (lifecycle transition,
316
+ native close/archive/complete, re-dispatch, or refreshed note), be recorded read-only, or be
317
+ recorded under Errors. Do not stop after the first write; the cap is the batch boundary.
318
+
319
+ ### Build `claimed` (stalled in-progress) → diagnose blocker, else resume in place
320
+
321
+ **First check for an already-merged PR — this check is NOT gated on staleness.** Read the item's
322
+ linked PR state before applying the staleness gate (see "Stuck-cause diagnosis" step 1–2 for
323
+ discovery). If `state == MERGED`, recover it immediately via step 0's merged-PR arm regardless of
324
+ elapsed time or recent post-merge activity (per the Staleness model's merged-PR exemption): a merged
325
+ PR is a completed leaf, and deferring it behind the staleness clock is what strands shipped work in
326
+ `claimed`.
327
+
328
+ Only if the PR is **not** merged does the staleness gate apply. Once it passes, **diagnose why it
329
+ stalled** by inspecting the item's PRs and deploys (see "Stuck-cause diagnosis" below). A stalled
330
+ build usually stalled for a concrete external reason, and re-dispatching the agent at it will not fix
331
+ a PR that cannot merge or a deploy that failed — it just churns.
332
+
333
+ 0. **Diagnose PR & deploy state.** Run "Stuck-cause diagnosis" below. It resolves, in order:
334
+ - **PR already merged** (checked first, staleness-exempt) → the build effectively completed; the
335
+ vendor build-intake's merge gate left the item `claimed` because the merge landed after its agent
336
+ returned. Do **not** re-dispatch or file anything — apply the scanner's post-agent env-resolved
337
+ `claimed → done` transition directly (step 2 below, env-resolved), and record it. This is the
338
+ recovery arm for build-intake leaving merged-but-unadvanced items in `claimed`.
339
+ - **PR only behind its base (a needed rebase)** → mechanically resolvable, **not** a human blocker.
340
+ Re-sync the branch in place so the already-enabled auto-merge can land (see diagnosis step 3).
341
+ Keep the item `claimed`; a later cycle confirms the merge and transitions. Do **not** file a fix
342
+ ticket for a clean rebase.
343
+ - **A true merge conflict** → **not** an immediate fix ticket. A conflict is fixable by re-running
344
+ the build, so attempt **one** in-place re-dispatch first (the resume sequence below; the vendor
345
+ agent re-enters `drive-pr-to-merge` fix mode, which resolves conflicts). Only a conflict that
346
+ survives that single attempt — the same conflicting head still `CONFLICTING` on a later cycle — or
347
+ that the agent reports needs design input, falls through to the fix-ticket path (diagnosis step 5).
348
+ - **A real external blocker re-running the build cannot fix** (failing checks / `CHANGES_REQUESTED` /
349
+ unaddressed CodeRabbit; or a failed deploy) → **do not dispatch the agent**. File a build-ready leaf
350
+ fix ticket for the blocker, move this item `claimed → blocked` with an `is blocked by` link to that
351
+ ticket, and record it. The existing "Build `blocked` → unblock if cleared" path resumes this item on
352
+ a later cycle once the fix ticket is terminal — a self-healing loop. Skip the resume steps below.
353
+
354
+ If the PR is healthy in-flight and no blocker is found, the work simply died mid-flight — run the **same per-item sequence
355
+ the vendor build-intake runs**, skipping the claim transition (the item is already `claimed`):
356
+
357
+ 1. Dispatch the item to the vendor agent — `lisa-jira-agent` / `lisa-github-agent` /
358
+ `lisa-linear-agent` (matching the queue's tracker) — with the item ref. If repair-intake is
359
+ running as a teammate rather than the lead/root agent, return a structured `delegation-request`
360
+ to the lead instead of spawning that named peer yourself; only the lead can add named teammates
361
+ in Claude's flat roster. This resumes the work in place, preserving its existing branch/PR and
362
+ prior comments.
363
+ 2. **On agent success**, apply the scanner's post-agent transition yourself: `claimed → done`,
364
+ where `done` is **env-resolved** exactly as `lisa:<tracker>-build-intake` resolves it (per
365
+ `config-resolution` env-keyed `done`: explicit `target_env` arg wins; else reverse-lookup the
366
+ env from the resulting PR's base branch via `deploy.branches`; if `done` is a map and env is
367
+ unresolvable, fail loudly — never guess). repair-intake owns this transition because it is
368
+ standing in for the scanner that never got to finish it.
369
+ 3. **On a surfaced blocker** (agent reports it cannot proceed), leave/move the item to `blocked`
370
+ with a `[lisa-repair-intake]` note (see Loop prevention). When the surfaced blocker is something
371
+ **only a human can supply** (credentials, access/permissions, a product or scoping decision), the
372
+ item also carries the `human_needed` marker — the vendor agent's pre-flight gate applies it; if
373
+ repair-intake makes the block transition itself for such a reason, it adds the marker too. (A
374
+ block that another tracked ticket or retry will clear is *not* human-needed — that is the
375
+ auto-recoverable fix-ticket path above.)
376
+
377
+ > Do **not** reset stalled in-progress items to `ready`. Reset throws away state, makes a
378
+ > partially-built item look freshly human-approved to the next `lisa-intake` claim, and forces a
379
+ > two-cycle recovery. Resume in place.
380
+
381
+ #### Stuck-cause diagnosis: PR & deploy blockers
382
+
383
+ Run this for every stalled `claimed` build item **before** considering an agent re-dispatch. The
384
+ goal is to distinguish "work died mid-flight, just resume it" from "work is blocked on a concrete
385
+ external state that resuming the agent cannot fix."
386
+
387
+ **1. Find the associated PR(s) and deploy(s).** From the item's linked PRs (GitHub: prefer the
388
+ native dev-link surface — `gh issue view <n> --json closedByPullRequestsReferences` — which lists
389
+ merged PRs that closed the issue, then `gh pr list --search <issue-ref> --state all`; JIRA:
390
+ dev-status / remote links; Linear: attachments and git-branch links) and the deploy(s) for the
391
+ resulting merge (the env-keyed `deploy.branches` mapping from `config-resolution`). The `--state all`
392
+ is load-bearing: `gh pr list --search` defaults to `--state open`, so a **merged** (closed) PR is
393
+ invisible on that surface — the exact state this recovery path exists to catch. A merged PR linked
394
+ only via search (no `Closes #` / native dev link) would otherwise never be discovered, and the leaf
395
+ would never recover. Read each PR with the vendor's native state, e.g. GitHub
396
+ `gh pr view <n> --json state,mergedAt,mergeable,mergeStateStatus,reviewDecision,statusCheckRollup,comments,reviews`.
397
+
398
+ **2. PR already merged → recover, don't re-dispatch.** If `state == MERGED`, the build is effectively
399
+ complete and the only thing missing is the env transition the build-intake never applied (its merge
400
+ gate left the item `claimed` because the merge landed after its agent returned). Do **not** re-dispatch
401
+ or file anything: apply the scanner's post-agent env-resolved `claimed → done` transition (the
402
+ resume-sequence step 2, env-resolved from the merged PR's base branch) and record it as a repair
403
+ write. Where the env deploy is observable, confirm it did not fail first; a failed post-merge deploy
404
+ falls through to the blocker path (step 4).
405
+
406
+ **3. PR only behind its base → re-sync in place (mechanical, not a blocker).** If the PR is clean but
407
+ behind its base — `mergeStateStatus == BEHIND` while `mergeable != CONFLICTING` and no required check
408
+ is failing — it does **not** need a human. This is exactly the case that strands a PR forever: GitHub
409
+ auto-merge will not advance a `BEHIND` branch on its own, so a PR opened with `--auto` sits unmerged
410
+ until something rebases it. Delegate this mechanical nudge + classification to the
411
+ `drive-pr-to-merge` skill in **report** mode — the single source of truth for the
412
+ "ensure auto-merge + re-sync a clean `BEHIND` branch" primitive — so this scanner does not
413
+ re-implement it:
414
+
415
+ ```text
416
+ drive-pr-to-merge pr=<n> on_blocker=report
417
+ ```
418
+
419
+ In report mode it ensures auto-merge is enabled and runs `gh pr update-branch <n>` only when the
420
+ PR is `BEHIND`-but-clean **and** the base branch's ruleset or classic branch protection requires
421
+ strict up-to-date status checks (`strict_required_status_checks_policy` / `required_status_checks.strict`).
422
+ If strict checks are off, it does not update the branch solely because the base moved; that avoids
423
+ CI cancellation storms in repos where updating the PR head restarts and cancels in-flight runs. It
424
+ never edits code, resolves threads, or dismisses reviews. It returns a classification (`merged` /
425
+ `will-merge-after-resync` / `blocked:<reason>`). On a `merged` / `will-merge-after-resync` result,
426
+ record this as a repair write (`resynced`), keep the item `claimed`, and move on — a later cycle sees
427
+ the now-`CLEAN` (or merged) PR and either lets auto-merge finish or applies the merged-PR recovery in
428
+ step 2. Only if `gh pr update-branch` itself reports a conflict it cannot apply does the PR become a
429
+ true conflict (step 4). Honor the backoff window so repeated cycles don't re-issue `update-branch` on
430
+ an unchanged head (Loop prevention). For JIRA/Linear items the PR is still the GitHub PR backing the
431
+ branch — operate on it the same way.
432
+
433
+ **4. Classify as a blocker.** Treat any of these as a real external blocker:
434
+
435
+ - **True merge conflict** — `mergeable = CONFLICTING` or `mergeStateStatus = DIRTY` (overlapping
436
+ changes a plain rebase cannot resolve), or `gh pr update-branch` (step 3) reported a conflict. A
437
+ merely `BEHIND` branch is **not** here — it was re-synced in step 3. Unlike the other classes below, a
438
+ conflict is **resolvable by re-running the build**, so step 5 gives it one in-place re-dispatch before
439
+ filing — see its conflict-first rule.
440
+ - **Failing required checks** — `statusCheckRollup` has a `FAILURE`/`ERROR`/`TIMED_OUT` conclusion,
441
+ or `mergeStateStatus = UNSTABLE`/`BLOCKED` due to checks.
442
+ - **Change requests outstanding** — `reviewDecision = CHANGES_REQUESTED`, or unresolved CodeRabbit
443
+ (or other reviewer) comments that request changes and have not been addressed by a newer commit.
444
+ - **Branch-protection / approvals blocked** — `mergeStateStatus = BLOCKED` for a reason other than
445
+ a transient check still running.
446
+ - **Failed deploy** — the deployment for the item's merge/branch reports a failed/errored status
447
+ (failed deploy workflow run, failed deployment status, or the project's deploy check is red).
448
+
449
+ A check that is still **queued/in progress**, or a `CLEAN`/`HAS_HOOKS` mergeable PR with no
450
+ outstanding change request, is **not** a blocker — that is normal in-flight state. (Such a PR with
451
+ recent check/commit activity would already have been caught as `active` by the staleness gate.)
452
+
453
+ **5. On a blocker found → file a leaf fix ticket + block the item.**
454
+
455
+ **Conflict-first exception (try to resolve before filing).** A *true merge conflict* — and only a
456
+ conflict, not failing checks, change requests, or a failed deploy — is fixable by re-running the build:
457
+ the vendor agent's `drive-pr-to-merge` fix-mode loop resolves conflicts. So before filing a fix ticket
458
+ for a conflict, give the item **one** in-place re-dispatch: run the resume-in-place sequence (steps 1–3
459
+ of the parent path above), which re-enters `drive-pr-to-merge` in fix mode against the existing PR.
460
+ Bound it to a single attempt per conflicting head — when you re-dispatch, post a `[lisa-repair-intake]
461
+ conflict-resolve-attempt: <item-ref>@<head-sha>` marker keyed on the PR head SHA. On a later cycle, if
462
+ that marker already exists for the **same** head SHA and the PR is still `CONFLICTING`, the attempt
463
+ failed: stop retrying and file the fix ticket below. File immediately (skip the attempt) if the agent
464
+ reports the conflict needs design input. Every other blocker class files the fix ticket with no
465
+ re-dispatch. Honor the backoff window / state fingerprint (Loop prevention) so the re-dispatch is never
466
+ re-issued against an unchanged conflicting head.
467
+
468
+ 1. **File one build-ready leaf fix ticket** per distinct blocker via `lisa-tracker-write` (the
469
+ vendor-neutral leaf writer + validation gate; never a vendor `*-write-*` skill directly),
470
+ `issue_type: Bug` for a failing-check/conflict/failed-deploy, `Task` for review-feedback
471
+ follow-up, `build_ready: true` so it auto-builds. The ticket MUST name: the blocked item + its
472
+ PR/deploy URL, the exact blocker (conflict / which checks failed with their logs link / which
473
+ change requests / which deploy run), three-audience description, and Gherkin acceptance criteria
474
+ for "PR is mergeable / deploy is green."
475
+ 2. **Transition the stalled item `claimed → blocked`** and add an **`is blocked by`** link to the
476
+ new fix ticket (vendor-native: JIRA issue link `is blocked by`; GitHub/Linear `Blocked by:` line
477
+ + label). Post a `[lisa-repair-intake]` note naming what it is blocked by and why. This block is
478
+ **auto-recoverable** — the fix ticket will build and close on its own — so do **not** add the
479
+ `human_needed` marker, and if the item already carries a stale `human_needed` label, remove it
480
+ here (it is no longer waiting on a human). The `human_needed` marker is reserved for blocks a
481
+ human must clear; this one a later cycle clears automatically.
482
+ 3. **Record it** as a repair write. Do **not** dispatch the vendor agent for this item this cycle.
483
+
484
+ The item now sits in `blocked`; once the fix ticket reaches a terminal state, the **Build
485
+ `blocked` → unblock if cleared** path (next section) detects the cleared `is blocked by`
486
+ dependency and resumes the original in place — a self-healing loop.
487
+
488
+ **Idempotency.** Before filing, check for an **open** fix ticket already carrying the marker
489
+ `[lisa-repair-intake] blocker:<item-ref>/<blocker-key>` (blocker-key is a stable slug of the
490
+ blocker, e.g. `pr-1234/merge-conflict` or `pr-1234/checks-failing`). If one exists, reference it
491
+ and ensure the `is blocked by` link is present rather than creating a duplicate. Honor the backoff
492
+ window and state fingerprint (Loop prevention) so re-runs over the same unchanged blocker are no-ops.
493
+
494
+ ### Build `blocked` → re-evaluate, unblock if cleared
495
+
496
+ 1. Read the block reason and classify the blocker (see Blocker classification & clearing). An item
497
+ may be held by a **dependency**, by a **validation / quality-gate self-block**, by a
498
+ **deployed / runtime verification failure**, by an **ambiguity**, or by more than one at once.
499
+ Re-check **every** class present — do not stop at "no `is blocked by` links, therefore nothing
500
+ to do." A self-block has zero dependencies by definition, yet is fully re-checkable.
501
+ 2. **Dependency cleared** — if every parsed `is blocked by` dependency is **cleared** → move
502
+ `blocked → claimed`, then run the same agent-dispatch + post-agent `claimed → done` sequence as
503
+ the stalled-`claimed` path above (one-cycle recovery). If the agent re-blocks, move back to
504
+ `blocked` — a valid outcome.
505
+ 3. **Validation / quality-gate self-block re-check** — if the block reason is a pre-flight
506
+ `verify`/`validate` gate failure (its `[lisa-*]` block note carries a gate marker + a "Missing
507
+ requirements" list and there is **no** open `is blocked by` dependency), re-run the **same gate**
508
+ against the item's **current** content via `lisa-tracker-validate` (read-only; the vendor-neutral
509
+ gate `lisa:<tracker>-build-intake` and `lisa:<tracker>-write-*` already use). This is the build
510
+ mirror of the PRD `blocked → re-validate` path below.
511
+ - **PASS now** (the human added what was missing) → move `blocked → claimed` and resume exactly
512
+ as in (2): agent-dispatch + post-agent `claimed → done`.
513
+ - **Still FAIL** → stay `blocked`, but refresh the note with the **current** (usually smaller)
514
+ missing-requirement set so the human sees what remains. Because the fingerprint includes the
515
+ gate verdict + missing-requirement set (Loop prevention), a partial human fix changes the
516
+ fingerprint and re-checks next cycle, while a truly-unchanged gate result stays in backoff.
517
+ 4. **Deployed / runtime verification blocker re-check** — if the block reason is a failed
518
+ *deployed* or *runtime* verification (a smoke/E2E/health check or manual probe against a live
519
+ environment that errored — e.g. an authenticated endpoint returning 500, a deploy health check
520
+ red, a seeded-data assertion failing), re-check by **reproducing the original failing check with
521
+ the same context it used**: the same auth identity/credentials, the same target environment, the
522
+ same route, and the same scope/parameters. A probe that does **not** exercise the failed path is
523
+ **not** evidence the blocker cleared — an *anonymous* request to an *auth-gated* resource, a
524
+ request against a different environment, or a narrower scope can all return a healthy status
525
+ while the originally-failing path is still broken. (This exact false-negative — an unauthenticated
526
+ `GET` to an auth-gated resource returning 200 without touching the failing table — wrongly unblocked
527
+ a build item whose authenticated path was still 500ing, sending it `ready → claimed → blocked` again.)
528
+ - **Reproduces clean now** (the *same* check that failed now passes) → move `blocked → claimed`
529
+ and resume as in (2).
530
+ - **Still failing** → stay `blocked`; refresh the note with the current observed result. Because
531
+ the root cause is external (a deployed defect, not item content), prefer filing/keeping a
532
+ build-ready fix ticket and an `is blocked by` link to it (the "real external blocker" path),
533
+ so a later cycle self-heals when that ticket goes terminal.
534
+ - **Cannot reproduce this cycle** (the agent lacks the credentials/env access to run the original
535
+ check) → stay `blocked`; do **not** unblock on the absence of a reproduction. If the missing
536
+ access is human-only, apply the `human_needed` marker. Never unblock a deployed-verification
537
+ blocker on a weaker signal than the one that set it.
538
+ 5. If the block was an **ambiguity** research can settle and no dependency remains → run the
539
+ research needed (`lisa-codebase-research` / `lisa-product-walkthrough`); if resolved, proceed
540
+ as in (2).
541
+ 6. Else → still blocked. Refresh the note with the current reason (Loop prevention) and leave it
542
+ `blocked`.
543
+
544
+ ### Build terminal-open → native close / complete / resolve
545
+
546
+ For each build item that already carries the env-resolved true terminal `done` role but is still
547
+ native-open / active / unresolved:
548
+
549
+ 1. Verify the item is a **leaf** or a **rollup parent whose all required children are terminal**.
550
+ If it is a parent with incomplete children, do not close it; refresh a `[lisa-repair-intake]`
551
+ note naming the incomplete child set.
552
+ 2. Verify the terminal `done` role is the true final value per `leaf-only-lifecycle` and
553
+ `config-resolution` env-keyed `done`. Intermediate env labels (for example `status:on-dev` or
554
+ `status:on-stg`) are not terminal and must stay open.
555
+ 3. Perform the provider-native terminal action idempotently:
556
+ - GitHub: `gh issue close <number> --repo <org>/<repo> --reason completed`.
557
+ - Linear: move the issue to the configured Done / Completed native workflow state if available;
558
+ otherwise record the missing native state as a setup error.
559
+ - JIRA: verify it is resolved / closed (`statusCategory = Done`, resolution set if required);
560
+ if not, transition through the configured terminal workflow path or report the missing setup.
561
+ 4. Post a compact `[lisa-repair-intake]` note only when the native close-out changed state or when
562
+ an actionable setup error must be surfaced. Do not spam already-closed terminal items.
563
+
564
+ ### Build parent rollup reconciliation (intermediate-env or terminal close-out)
565
+
566
+ For each parent/container item (an Epic, a Linear Project, or any item — of any type — with open child work),
567
+ reconcile its lifecycle state with the roll-up of its children — **including the intermediate-env
568
+ case**, not only fully-terminal close-out. This is the recovery-side complement to the forward
569
+ rollup the `*-sync --rollup` skills perform; it catches a parent that was never rolled up (or was
570
+ left in a status it should not carry, including a stale build-ready `ready`).
571
+
572
+ 1. Read the child set using the vendor-native hierarchy first (GitHub sub-issues, JIRA
573
+ Epic/parent/sub-task hierarchy, Linear project/parent/sub-issues), with the same fallbacks the
574
+ vendor read/sync skills document. **Record which children were resolved natively vs. only via the
575
+ prose/body-parentage fallback** — the gap between the two sets is repairable native-link drift.
576
+ 1a. **Heal native child links before rolling up (GitHub).** Whenever the resolved child set
577
+ contains same-repo children that are *not* in the parent's native `subIssues` graph — the typical
578
+ case when the children carry `Parent: #<n>` / `Parent Epic: #<n>` in prose but were never attached
579
+ (external generators like Codex, or an older write path) — attach each missing same-repo child as a
580
+ native sub-issue using the identical idempotent `addSubIssue` contract the "GitHub PRD missing child
581
+ links" path documents below: dedupe by `owner/repo#number`, treat "already linked" as success, keep
582
+ cross-repo/cross-vendor children documented-only with a warning, and on `subIssues`/`addSubIssue`
583
+ unavailability record a capability warning and continue. A build parent attaches the children
584
+ resolved by its hierarchy (its Stories/Sub-tasks), not only empty-parent-token top-level work — the
585
+ PRD top-level-only restriction is a PRD rule, not a build one. Record repaired refs in the rollup
586
+ state fingerprint so repeated cycles do not re-post. Do this even when step 2 derives `unchanged`:
587
+ the native graph is what the GitHub UI rollup and progress bar depend on, independently of the
588
+ parent's status.
589
+ 2. **Compute the derived parent state** bottom-up per the `leaf-only-lifecycle` **Parent status
590
+ rollup** state machine, evaluated over the env ladder `in-progress < dev < staging <
591
+ production` (the ordered keys of the env-keyed `done` map): any required child blocked →
592
+ `blocked`; else every required child shipped to some env → the **least-advanced** env among
593
+ them (e.g. all `On Stg` → `On Stg`); else any child started → `claimed`; else unchanged.
594
+ Optional / won't-do / not-planned children are terminal-but-dropped and do not hold the parent
595
+ open.
596
+ 3. **If the derived state differs from the parent's current state, apply it** via the vendor's
597
+ lifecycle write (JIRA transition, GitHub/Linear label swap keeping exactly one `status:*`),
598
+ removing any conflicting stale build lifecycle role — **including a stale `ready`** the parent
599
+ should never carry. Post an idempotent `[lisa-repair-intake]` rollup note naming the derived
600
+ state and the child tally (honor the backoff window + fingerprint).
601
+ 4. **Perform native closure only at the true terminal `done`.** When — and only when — the derived
602
+ env is the production/terminal value, finalize through the provider-native mechanism (GitHub
603
+ `gh issue close --reason completed`, Linear move to Done state, JIRA resolved/closed verified at
604
+ `statusCategory = Done`). An intermediate-env rollup (`On Dev`/`On Stg`) advances the parent's
605
+ status but **must not** close it — it is still open per `leaf-only-lifecycle`.
606
+ 5. If the derived state is `unchanged` (children exist but none started) or the required set is
607
+ ambiguous / inaccessible, leave the parent as-is and record it as `active` or `still_blocked`
608
+ with the current child tally; never guess a transition.
609
+
610
+ ### PRD `in_review` (stalled in-progress) → re-run validate→route
611
+
612
+ After the staleness gate passes, run the **same dry-run validate→route pipeline the vendor PRD
613
+ intake runs per item**, targeted at this single PRD and **skipping the claim** (it is already
614
+ `in_review`):
615
+
616
+ 1. Invoke `lisa:<source>-to-tracker` with `dry_run: true` and the PRD's URL (source = the queue's
617
+ PRD vendor: `notion-to-tracker` / `confluence-to-tracker` / `linear-to-tracker` /
618
+ `github-to-tracker`). This indirectly runs `lisa-tracker-source-artifacts`,
619
+ `lisa-product-walkthrough`, and the `lisa-tracker-validate` gate, returning a structured
620
+ PASS/FAIL report with `prd_anchor` snippets — the same report the PRD intake consumes.
621
+ 2. **On PASS** → re-invoke `lisa:<source>-to-tracker` with `dry_run: false` to write the tickets
622
+ (its full run already writes the PRD back-link via `lisa-prd-backlink`), run the
623
+ `lisa-prd-ticket-coverage` audit as the PRD intake does, then transition the PRD to its
624
+ `ticketed` role via the access layer.
625
+ 3. **On FAIL** → post the clarifying-question comments grouped by `prd_anchor` (page-level for
626
+ `prd_anchor: null`), tagged `[lisa-repair-intake]` (Loop prevention), and transition to
627
+ `blocked`.
628
+
629
+ ### PRD `blocked` → re-validate if new answers exist
630
+
631
+ 1. Determine whether **new clarifying answers** exist: any comment/update on the PRD newer than
632
+ the last `[lisa-repair-intake]` note or the original `blocked` note. For Linear include the
633
+ sentinel feedback issue and anchored sub-issue comments; for Confluence include inline/footer
634
+ comments where the access layer exposes them; for Notion include page comments and
635
+ `last_edited_time`.
636
+ 2. If new answers exist → run the `lisa:<source>-to-tracker` dry-run validate→route pipeline as
637
+ in PRD `in_review` above (skipping claim). PASS → `ticketed`; FAIL → refresh note, stay
638
+ `blocked`.
639
+ 3. If no new answers and no dependency change → leave `blocked` untouched (subject to the
640
+ backoff window — do not re-post an identical note).
641
+
642
+ ### PRD terminal-open → close / archive source artifact
643
+
644
+ For each PRD source artifact that already carries the configured terminal source role (`shipped`
645
+ for generated-work completion, or a source-specific terminal role that the configured PRD source
646
+ declares closed-out) but is still native-open / active:
647
+
648
+ 1. Verify the PRD's generated top-level work is terminal per `prd-lifecycle-rollup`, unless the
649
+ source artifact is already in a stronger product-owned terminal role that explicitly permits
650
+ closure. Do not move a PRD out of `draft` or `verified`.
651
+ 2. Close or archive through the source vendor's native mechanism where one exists:
652
+ - GitHub: close the PRD issue with `--reason completed`.
653
+ - Linear: archive/close the PRD project through Linear MCP when supported by the workspace.
654
+ - Confluence/Notion: archive the page only when the access layer exposes a supported archival
655
+ action; otherwise record a capability-aware no-op.
656
+ 3. Never set `verified`; `/lisa:verify-prd` remains the only automated writer of the verified
657
+ role. This path only reconciles an already-terminal PRD with native closure.
658
+
659
+ ### PRD rollup with all generated work terminal → ship and close out
660
+
661
+ For each PRD in `ticketed` or another non-product-owned open PRD role whose generated top-level
662
+ work is fully terminal:
663
+
664
+ 1. Read the generated top-level child set exactly as `prd-ticket-coverage` / the vendor PRD intake
665
+ does: native PRD children where supported, plus the durable generated-work section fallback.
666
+ 2. Evaluate terminal state using `prd-lifecycle-rollup`'s vendor predicate. A generated Epic or
667
+ Story is terminal only when it has itself rolled up and closed out; do not re-derive its leaf
668
+ descendants directly when its own state is still open.
669
+ 3. Transition the PRD to the configured `shipped` role.
670
+ 4. Close/archive the PRD source artifact through the vendor-native close-out mechanism where
671
+ supported. This repair path is the explicit close-out sweep for PRDs whose child work is done;
672
+ it does not set `verified` and does not run `/lisa:verify-prd`.
673
+ 5. If generated work is missing, ambiguous, or partially incomplete, leave the PRD open and report
674
+ the incomplete child set. Never close a PRD on partial completion.
675
+
676
+ ### GitHub PRD missing child links → native sub-issue repair
677
+
678
+ For each open GitHub PRD in `ticketed` or another non-product-owned PRD role, compare the durable
679
+ generated-work fallback against the PRD's native sub-issue graph and repair missing native links.
680
+ This is the recovery counterpart to `lisa-prd-backlink`'s GitHub native parent-linking section:
681
+ PRD intake/backlink should attach generated top-level work as native PRD children when possible,
682
+ but repair-intake must heal the graph when that write was skipped, failed, or later drifted.
683
+
684
+ 1. Read the generated work exactly as PRD rollup does:
685
+ - Prefer the machine-readable `## Tickets` / `## Generated Work` section (`lisa:gw` tokens).
686
+ - If the machine-readable section is absent but an older Lisa ticketing comment exists, parse only
687
+ its structured `Top-level work:` block as a compatibility fallback. Do not scrape arbitrary
688
+ prose.
689
+ 2. Select only generated **top-level** work:
690
+ - `lisa:gw` entries whose `parent` token is empty.
691
+ - Older ticketing-comment entries under `Top-level work:`.
692
+ Leaf Sub-tasks and descendant Stories are never direct PRD children.
693
+ 3. Restrict native repair to same-repo GitHub issues. Cross-repo or cross-vendor generated work stays
694
+ documented-only; record a warning instead of failing.
695
+ 4. Read the PRD's existing native sub-issues with the same GraphQL `subIssues` query documented by
696
+ `lisa-prd-backlink` / `lisa-github-read-issue`, and dedupe by child-ref
697
+ (`owner/repo#number`).
698
+ 5. For each missing same-repo top-level child, resolve node IDs and call the same GitHub GraphQL
699
+ mutation as `prd-backlink`:
700
+
701
+ ```graphql
702
+ mutation($parentId:ID!,$childId:ID!){
703
+ addSubIssue(input:{issueId:$parentId,subIssueId:$childId}){issue{number}subIssue{number}}
704
+ }
705
+ ```
706
+
707
+ Treat "already linked" duplicate rejections as success. If `subIssues` / `addSubIssue` is
708
+ unavailable, leave the documented generated-work fallback intact, record a capability warning, and
709
+ continue.
710
+ 6. Post one idempotent `[lisa-repair-intake]` note when a missing native PRD child link is repaired
711
+ or when the native-link capability is unavailable. Include the generated top-level child set, the
712
+ pre-existing native child set, and repaired child refs in the state fingerprint so repeated cycles
713
+ do not spam comments.
714
+ 7. Do not transition the PRD lifecycle merely because child links were repaired. Rollup/ship remains
715
+ governed by the PRD rollup path after the child graph is complete.
716
+
717
+ ### GitHub missing official ready-label normalization → configured ready
718
+
719
+ For GitHub queues, enumerate open issues that have **no configured Lisa lifecycle label** in the
720
+ active lifecycle namespace(s). This is the repair path for issues created by older tools or humans
721
+ with labels like `build-ready`, or with no Lisa status label at all, that are invisible to
722
+ `lisa-intake`, whose scanner only reads the configured `ready` labels.
723
+
724
+ 1. Resolve configured lifecycle labels from `.lisa.config.json` / `.lisa.config.local.json`:
725
+ - PRD lifecycle labels: `draft`, `ready`, `in_review`, `blocked`, `ticketed`, `shipped`,
726
+ `verified` when configured.
727
+ - Build lifecycle labels: `ready`, `claimed`, `blocked`, every env-resolved `done` value,
728
+ intermediate status labels where configured, and `human_needed`.
729
+ 2. Query open GitHub issues that are missing all configured lifecycle labels for the lifecycle(s)
730
+ selected by `intake_mode`. If `intake_mode=prd`, only PRD-classified issues are normalized. If
731
+ `intake_mode=build`, every non-PRD issue is normalized as a build ticket. If `intake_mode=both`,
732
+ classify PRDs first and normalize all remaining issues as build tickets.
733
+ 3. Classify the issue:
734
+ - **PRD** if it has PRD labels/markers (`prd`, `type:PRD`, `kind:prd`), PRD structure
735
+ (`## Problem`, `## Goals`, `## Validation Journey`, generated-work/backlink sections), or
736
+ body/comment text that explicitly says `prd-ready`.
737
+ - **Build ticket** if it has build work labels/types (`bug`, `type:Bug`, `task`, `type:Task`,
738
+ `sub-task`, `type:Sub-task`, `improvement`, `type:Improvement`, `story`, `spike`) or
739
+ body/comment text that explicitly says `build-ready`. When PRD signals are absent and the
740
+ selected lifecycle includes build, default to **Build ticket** even if no build type label is
741
+ present; build-intake/implement will validate the item and move it to `blocked` if required
742
+ sections are missing.
743
+ - **Ambiguous PRD/build** if strong PRD and build classifications both match. In `intake_mode=prd`
744
+ normalize as PRD; in `intake_mode=build` normalize as build; in `intake_mode=both`, prefer PRD
745
+ only when the body has PRD structure, otherwise build.
746
+ 4. Apply exactly one configured ready label for the classified lifecycle:
747
+ - PRD → add the configured PRD `ready` label (default `prd-ready`).
748
+ - Build ticket → add the configured build `ready` label (default `status:ready`).
749
+ Keep any unofficial labels for auditability unless the project has explicitly configured one as a
750
+ conflicting lifecycle label. Do not claim the item or dispatch an agent in the same repair cycle;
751
+ normalization makes the next normal `lisa-intake` run pick it up.
752
+ 5. Post one idempotent `[lisa-repair-intake]` note naming the classification and the configured label
753
+ applied. Include the normalization result in the loop-prevention fingerprint so repeated repair
754
+ cycles do not spam comments.
755
+
756
+ ## Blocker classification & clearing (conservative, vendor-specific extraction)
757
+
758
+ A `blocked` build item is held by one or more of three blocker classes. Identify which are present
759
+ from the item's block note(s) and links, then clear-check **each present class** — an item with no
760
+ dependency is not automatically un-actionable; it may be a self-block that now passes.
761
+
762
+ ### Class A — dependency blockers
763
+
764
+ `lisa-tracker-read` is a thin dispatcher that returns each vendor's bundle **verbatim** — there
765
+ is no normalized `is blocked by` field. Read the bundle, then extract blockers per vendor:
766
+
767
+ - **GitHub**: parse the durable forms `lisa-github-build-intake` documents — `Blocked by: #123`,
768
+ qualified cross-repo refs (`owner/repo#123`), issue URLs in the body/comments — plus timeline
769
+ cross-reference events.
770
+ - **JIRA**: inspect the native issue-link records `lisa-jira-read-ticket` returns and select the
771
+ `is blocked by` link type.
772
+ - **Linear**: inspect the native issue **relations** from Linear MCP `get_issue` and select
773
+ blocker relations.
774
+
775
+ Then classify each blocker:
776
+
777
+ - **Closed, or shipped to any environment** → **cleared**. A blocker is cleared at **any**
778
+ env-staged `done` role — not only the production terminal. The `done` role is configured
779
+ per-env as a `{dev, staging, production}` map (`config-resolution`), so `On Dev`, `On Stg`,
780
+ **and** production `Done` all mean the blocker's code is merged and deployed to ≥1 environment.
781
+ A post-build `review` role (e.g. `Code Review`) is likewise cleared — the change exists and is
782
+ in flight. An `is blocked by` link is a **development** dependency: it is satisfied once the
783
+ blocker's code is in trunk; it must NOT wait for the blocker to reach production. (This matches
784
+ the intake-path dependency-hold gate in `lisa-intake-explain`, which already treats
785
+ `code-review` / `on-dev` / `on-stg` / `done` as cleared — repair-intake must not be stricter.
786
+ In an env-staged workflow where `Done` means "in production", a strict production-terminal
787
+ check strands every dependent forever behind a blocker that is already merged and sitting at
788
+ `On Stg` / `On Dev`.)
789
+ - **Open** in a pre-merge role (`ready` / `claimed` / unknown — code not yet in trunk) → **still
790
+ blocking**.
791
+ - **Inaccessible** (deleted, cross-org, permission denied) → **still blocking**, unless the item
792
+ body or a newer human comment explicitly states the dependency is resolved.
793
+
794
+ Only re-dispatch when **every** parsed blocker is cleared. When in doubt, stay blocked — a
795
+ false-negative (left blocked) is cheap; a false-positive (re-dispatched into a real blocker)
796
+ wastes a build cycle.
797
+
798
+ ### Class B — validation / quality-gate self-block
799
+
800
+ A self-block has **no** `is blocked by` dependency: the build-intake/agent flow claimed the item,
801
+ its pre-flight `verify`/`validate` gate failed (missing Validation Journey, Sign-in Required,
802
+ Target Backend Environment, Repository, Out of Scope, Evidence manifest, weak Acceptance Criteria,
803
+ etc.), and the item was bounced to `blocked` carrying that gate's `[lisa-*]` note + "Missing
804
+ requirements" list. Detect it by: (1) the block note bears a known gate marker (e.g.
805
+ `Pre-flight verify gate: BLOCKED`, `jira-verify` / `*-validate-*`), **and** (2) there is no open
806
+ `is blocked by` dependency. (If both a dependency and a self-block are present, clear the
807
+ dependency via Class A first; the self-block re-check still gates the eventual re-dispatch.)
808
+
809
+ Clear-check by **re-running the same gate against current content** — `lisa-tracker-validate`
810
+ (read-only; never writes), which dispatches to `lisa:<tracker>-validate-*` exactly as the write
811
+ path and build-intake do, so the bar cannot drift:
812
+
813
+ - **PASS** → cleared. Proceed to re-dispatch (decision tree step 2).
814
+ - **FAIL** → still self-blocked. Refresh the note with the current missing set (Loop prevention).
815
+
816
+ Conservative, same as Class A: a still-failing gate is a real blocker — never re-dispatch a build
817
+ whose own gate has not yet passed. This is intentionally symmetric with the PRD `blocked →
818
+ re-validate` path: PRDs re-run their dry-run `validate→route` when source content changes; builds
819
+ re-run `tracker-validate` when item content changes. The asymmetry where build `blocked` checked
820
+ only dependencies — leaving verify-gate self-blocks stranded forever after a human filled in the
821
+ missing sections — is the gap this class closes.
822
+
823
+ ### Class C — ambiguity / clarifying answers
824
+
825
+ A block that research or a human answer can settle (no dependency, no failing gate). Re-check by
826
+ running the needed research (`lisa-codebase-research` / `lisa-product-walkthrough`) or detecting a
827
+ human comment/edit newer than the last `[lisa-repair-intake]` note. Resolved → proceed to
828
+ re-dispatch; else stay blocked.
829
+
830
+ ### Class D — deployed / runtime verification failure
831
+
832
+ A block set by a *deployed* or *runtime* check that failed against a live environment — a
833
+ smoke/E2E/health probe or manual reproduction that returned an error (an authenticated endpoint
834
+ 500ing, a deploy health check red, a seeded-data assertion failing). This is neither a dependency
835
+ nor a content gate: the item is correct but the environment it must verify against is broken.
836
+
837
+ Clear-check by **reproducing the original failing check with the same context that set it** — same
838
+ auth identity/credentials, same environment, same route, same scope. The cardinal rule: **never
839
+ unblock on a probe weaker than the one that set the block.** A signal that does not exercise the
840
+ failed path is not a clear:
841
+
842
+ - Anonymous/unauthenticated request to an **auth-gated** resource (it can short-circuit to a
843
+ healthy response without touching the failing code path).
844
+ - A request against a **different environment** than the one that failed.
845
+ - A **narrower scope** than the failing check (a subset that happens to pass).
846
+
847
+ Conservative, same as the other classes: reproduces-clean → cleared; still-failing or
848
+ not-reproducible-this-cycle → stay blocked. Because the cause is external (a deployed defect, not
849
+ item content), the durable handling is the **real external blocker** path — file/keep a build-ready
850
+ fix ticket for the deployed defect and `is blocked by`-link the item to it, so a later cycle
851
+ self-heals when that ticket is terminal. If reproducing the check needs human-only access the agent
852
+ lacks, apply `human_needed`.
853
+
854
+ ## Loop prevention
855
+
856
+ A `blocked` item with a permanently unresolved problem must not be "repaired" and re-noted every
857
+ cron tick.
858
+
859
+ - Every note this skill writes is prefixed `[lisa-repair-intake]` and carries a compact **state
860
+ fingerprint**: the lifecycle role, the set of blocker refs + their observed states, the
861
+ validation verdict (PASS/FAIL) **plus the current missing-requirement set for a Class-B
862
+ self-block** (so a human filling in one of several missing sections changes the fingerprint and
863
+ triggers a re-check next cycle, rather than being suppressed as a no-op), terminal/open state,
864
+ rollup child tally, and a timestamp.
865
+ - Before writing a note or re-attempting a `blocked` item, compute the current fingerprint. If
866
+ an identical fingerprint was already posted within the **backoff window**, skip the item
867
+ silently (record as `still_blocked` / `active`, no write).
868
+ - Backoff window default = `stale_after` (2h). `force=true` bypasses backoff for a manual run.
869
+ - A *changed* fingerprint (new blocker state, new answers, new verdict) always warrants a fresh
870
+ note + re-attempt — backoff suppresses only no-op repeats.
871
+
872
+ ## Lifecycle ownership guard
873
+
874
+ repair-intake owns the repair surfaces needed to recover stuck work and close-out drift:
875
+ build `claimed` / `blocked`, PRD `in_review` / `blocked`, terminal-labeled native-open items,
876
+ parent/container rollups (intermediate-env *and* fully-terminal), and stale-`ready` containers.
877
+ It MAY:
878
+
879
+ - Apply the build scanner's post-agent `claimed → done` on a successful resume (it is finishing
880
+ the scanner's interrupted job), and move a dependency-cleared build item `blocked → claimed`.
881
+ - Manage the `human_needed` marker on build blocks: leave it where the vendor agent set it (a
882
+ human-only pre-flight block), and **clear** it from an item it moves to an auto-recoverable
883
+ `blocked` (blocked by a build-ready fix ticket) — that block self-heals and is not waiting on a
884
+ human.
885
+ - Move a re-validated PRD `in_review`/`blocked → ticketed` (PASS) or `→ blocked` (FAIL), exactly
886
+ as the PRD intake does.
887
+ - Close / complete / resolve build items that already carry the true terminal `done` role but are
888
+ still natively open, per `leaf-only-lifecycle`.
889
+ - Roll up a parent/container to its derived state per the `leaf-only-lifecycle` state machine —
890
+ **including an intermediate env value** (`On Dev`/`On Stg`) when all required children have
891
+ reached that env — and close/complete/resolve it **only** when the derived env is the true
892
+ terminal `done`.
893
+ - Reconcile a **container** wrongly carrying the build-ready `ready` role (a leaf-only-invariant
894
+ violation) by rolling it up from its children and removing the `ready`, with a
895
+ `[lisa-repair-intake]` audit note. This is the one `ready`-touching exception (see MUST NOT) and
896
+ applies only to containers, never to leaves.
897
+ - Move a PRD with fully terminal generated work to `shipped` and close/archive the source artifact
898
+ where the source vendor supports native close-out, per `prd-lifecycle-rollup`.
899
+ - Repair missing native GitHub child links by replaying the same-repo, idempotent `addSubIssue`
900
+ contract — for a **PRD** from the generated-work fallback (top-level-only), and for a **build
901
+ Epic/Story container** from its hierarchy/body-parentage children — so rollup and the GitHub UI can
902
+ rely on the native graph. This repairs structure only; it does not ship, transition, or verify the
903
+ parent.
904
+ - Normalize a GitHub issue with no configured lifecycle label by adding the configured PRD or build
905
+ `ready` label after classifying the issue. This is a visibility repair, not a claim; the item
906
+ remains open and unclaimed for normal intake.
907
+
908
+ It MUST NOT:
909
+
910
+ - Move a PRD out of `draft` or `verified` (those are product-owned), or set `verified` itself.
911
+ - Link leaf Sub-tasks or descendant Stories directly under a PRD. Only generated top-level work
912
+ (empty parent token / `Top-level work:` entries) may become PRD children.
913
+ - Apply a build `done` value other than via the env-resolution rules, or close a native item at
914
+ any value other than the true terminal `done` (see `leaf-only-lifecycle`).
915
+ - Touch `ready` **leaves** (that is `lisa-intake`'s lane). A container carrying `ready` is the
916
+ documented exception above — repair-intake reconciles it because `ready` on a parent is an
917
+ invariant violation, not the human "claim this leaf" signal intake owns.
918
+ - Move a GitHub issue that already carries a configured lifecycle label back to `ready` merely
919
+ because some other label looks stale. Official lifecycle labels remain authoritative.
920
+
921
+ ## Cycle behavior
922
+
923
+ 1. **Resolve the queue** — detect vendor/lifecycle (Source dispatch); resolve stuck role names
924
+ from config. For JIRA, confirm the needed transitions are reachable; stop on misconfig.
925
+ 2. **Enumerate repair candidates** — query in-progress role(s), `blocked` role(s), terminal/open
926
+ items, GitHub parents (PRDs **and build Epic/Story containers**) whose discoverable children —
927
+ generated-work fallback for a PRD, hierarchy/body-parentage for a build container — are missing from
928
+ their native sub-issue graph, rollup parents/PRDs with child work, **containers carrying the `ready`
929
+ role** (a
930
+ leaf-only-invariant violation to reconcile), and GitHub issues with no configured lifecycle label,
931
+ for the detected lifecycle(s), up to `max_candidates`, via the Access layer reads.
932
+ 3. **Order deterministically**, highest repair-confidence first:
933
+ 1. terminal-labeled items that only need native close / complete / resolve,
934
+ 2. build `claimed` leaves whose linked PR is **already merged** — apply the env-resolved
935
+ `claimed → done` close-out (staleness-exempt; no re-dispatch). This MUST run before any rollup
936
+ bucket: a merged-PR leaf is a settled terminal state, and recovering it first means its parent
937
+ rolls up to its true derived state in the **same** cycle. If this ran after rollup (or last,
938
+ among generic stalled items), the parent would be reconciled against a not-yet-closed child and
939
+ the shipped leaf would linger another cron pass — the failure this ordering exists to prevent,
940
+ 3. GitHub parents (PRDs missing native links for generated top-level work, or build Epic/Story
941
+ containers missing native links for prose/hierarchy children) needing structure-only repair,
942
+ 4. rollup parents/PRDs whose child sets are all terminal (close-out),
943
+ 5. rollup parents whose children have advanced to an intermediate env, or stale-`ready`
944
+ containers, that need their derived state applied (status-only reconciliation, no native
945
+ close),
946
+ 6. `blocked` items whose dependencies are now **cleared** (safe, high-value, one-cycle wins),
947
+ 7. `blocked` items whose **validation / quality-gate self-block now re-validates PASS** —
948
+ a human filled in the missing sections (Class B; equally safe and high-value),
949
+ 8. `blocked` items with **new clarifying answers**,
950
+ 9. GitHub missing-official-label normalization candidates,
951
+ 10. **stalled** in-progress items (PR not merged), oldest activity first.
952
+ 4. **Walk the ordered list**, evaluating each candidate (terminal close-out, rollup child tally,
953
+ staleness, dependency, answer checks), and repair **every** candidate that is actionable inside
954
+ the `max_candidates` cap. Continue after successful writes and after per-item errors.
955
+ 5. **Empty / nothing actionable** → exit cleanly:
956
+ `"No stuck items actionable this cycle (examined N, all active or in backoff)."`
957
+ 6. **Failure isolation** — if evaluating one candidate errors, record it under Errors and
958
+ continue to the next; one bad item never aborts the cycle.
959
+
960
+ Process **all materially actionable repairs among the enumerated candidates** — scan up to
961
+ `max_candidates`, repair the actionable subset, then exit. This intentionally differs from
962
+ `lisa-intake`'s one-ready-item claim contract because repair work is bounded by an explicit cap and
963
+ often consists of cheap close-out reconciliation that should drain in one cron pass.
964
+
965
+ ## Summary report
966
+
967
+ Report outcomes in these buckets:
968
+
969
+ - `resumed` — stalled in-progress work re-dispatched in place.
970
+ - `resynced` — a stalled build whose PR was merely behind its base, re-synced via
971
+ `gh pr update-branch` so the already-enabled auto-merge can land; the item stays `claimed` for a
972
+ later cycle to confirm the merge and transition.
973
+ - `recovered` — a stalled build whose PR had already merged, advanced by applying the env-resolved
974
+ `claimed → done` transition build-intake never got to (no re-dispatch).
975
+ - `unblocked` — blocker cleared (or answers resolved); re-dispatched or transitioned to
976
+ `ticketed`.
977
+ - `closed_out` — terminal-labeled items whose native open/active state was closed, completed,
978
+ resolved, or archived.
979
+ - `rolled_up` — parent/container/PRD rollups advanced to their derived state: an intermediate env
980
+ (e.g. all children at `On Stg` → parent `On Stg`), a fully-terminal close-out, or a stale-`ready`
981
+ container reconciled from its children.
982
+ - `relinked` — GitHub parents (PRDs from the generated-work fallback, or build Epic/Story containers
983
+ from hierarchy/body-parentage) whose missing native sub-issue links were attached.
984
+ - `normalized_ready` — GitHub issues missing official lifecycle labels that were classified and
985
+ given the configured PRD/build `ready` label so normal intake can claim them.
986
+ - `still_blocked` — examined and intentionally left `blocked`, with the active reason.
987
+ - `active` — skipped because current work is not stale (or within backoff).
988
+ - `errors` — items that failed evaluation, with the error.
989
+
990
+ State every item repaired this cycle and the action taken. If the output would be long, group by
991
+ bucket and show compact refs plus counts.
992
+
993
+ ## Schedule examples
994
+
995
+ ```text
996
+ /schedule "every 2 hours" /lisa:repair-intake https://www.notion.so/<workspace>/<database-id>
997
+ /schedule "every 2 hours" /lisa:repair-intake https://linear.app/acme
998
+ /schedule "every 2 hours" /lisa:repair-intake acme/product-prds
999
+ /schedule "every 2 hours" /lisa:repair-intake acme/frontend-v2 intake_mode=build
1000
+ /schedule "every 2 hours" /lisa:repair-intake github intake_mode=both
1001
+ /schedule "every 4 hours" /lisa:repair-intake SE stale_after=12h
1002
+ /lisa:repair-intake SE stale_after=0 force=true # manual: treat all in-progress as stalled, ignore backoff
1003
+ ```
1004
+
1005
+ Run repair-intake **less frequently than** `lisa-intake` (the ready queue moves faster than
1006
+ stuck work accumulates), or interleaved on a longer cadence.
1007
+
1008
+ ## Rules
1009
+
1010
+ - Never run a cycle without an explicit queue. Side effects too high to default.
1011
+ - Never reset stalled in-progress items to `ready` — resume in place (decision tree).
1012
+ - Never mutate product-owned states (`draft`, `verified`) or set `verified`; PRD rollup close-out
1013
+ may move open generated-work PRDs to `shipped` and close/archive them only after all associated
1014
+ child work is terminal.
1015
+ - Apply build `done` ONLY via the env-resolution rules, and trigger native closure only at the
1016
+ true terminal `done` value (`leaf-only-lifecycle`).
1017
+ - A `blocked` build item's blocker may be a dependency, a validation/quality-gate self-block (no
1018
+ dependency — re-check by re-running `lisa-tracker-validate` against current content), or an
1019
+ ambiguity. Re-check every class present; do not treat "no `is blocked by` links" as "nothing to
1020
+ do."
1021
+ - Never re-dispatch a `blocked` build item unless every parsed blocker is cleared (conservative
1022
+ dependency clearing).
1023
+ - Repair every materially actionable candidate inside the `max_candidates` cap; default cap is 100.
1024
+ - Default GitHub `intake_mode` is `both` when both PRD and build namespaces exist.
1025
+ - Honor the backoff window — never re-post an identical `[lisa-repair-intake]` note within it
1026
+ (unless `force=true`).
1027
+ - Never run two repair cycles concurrently against overlapping queues, and never run
1028
+ repair-intake against a queue `lisa-intake` is concurrently draining — the scheduling layer is
1029
+ responsible for serialization.
1030
+ - Stop and surface failures rather than retry-loop.