@codyswann/lisa 4.74.8 → 4.75.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (809) hide show
  1. package/.claude-plugin/marketplace.json +60 -0
  2. package/all/copy-overwrite/scripts/lib/npm-update-cancel-origin.mjs +4 -2
  3. package/all/copy-overwrite/scripts/lib/npm-update-checkpoint-codec.mjs +141 -0
  4. package/all/copy-overwrite/scripts/lib/npm-update-checkpoint.mjs +162 -116
  5. package/all/copy-overwrite/scripts/lib/npm-update-helper-inventory.mjs +1 -0
  6. package/all/copy-overwrite/scripts/lib/npm-update-recovery.mjs +9 -60
  7. package/all/copy-overwrite/scripts/npm-updater-helper-graph.json +18 -6
  8. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  9. package/dist/core/lisa-owned-hash-ledger.js +20 -0
  10. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  11. package/dist/core/lisa-skill-sources.d.ts +3 -3
  12. package/dist/core/lisa-skill-sources.d.ts.map +1 -1
  13. package/dist/core/lisa-skill-sources.js +3 -2
  14. package/dist/core/lisa-skill-sources.js.map +1 -1
  15. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  16. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  17. package/dist/core/upstream-evidence-manifest.js +739 -11
  18. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  19. package/package.json +4 -4
  20. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  22. package/plugins/lisa-agy/plugin.json +1 -1
  23. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  25. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  26. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-cdk-devin/.claude-plugin/plugin.json +11 -0
  29. package/plugins/lisa-cdk-devin/.devin-plugin/plugin.json +8 -0
  30. package/plugins/lisa-cdk-devin/skills/setup-aws-accounts/SKILL.md +292 -0
  31. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-devin/.claude-plugin/plugin.json +8 -0
  34. package/plugins/lisa-devin/.devin-plugin/plugin.json +8 -0
  35. package/plugins/lisa-devin/.mcp.json +8 -0
  36. package/plugins/lisa-devin/agents/architecture-specialist.md +32 -0
  37. package/plugins/lisa-devin/agents/bug-fixer.md +43 -0
  38. package/plugins/lisa-devin/agents/builder.md +44 -0
  39. package/plugins/lisa-devin/agents/confluence-prd-intake.md +65 -0
  40. package/plugins/lisa-devin/agents/debug-specialist.md +34 -0
  41. package/plugins/lisa-devin/agents/eval-specialist.md +33 -0
  42. package/plugins/lisa-devin/agents/git-history-analyzer.md +183 -0
  43. package/plugins/lisa-devin/agents/github-agent.md +155 -0
  44. package/plugins/lisa-devin/agents/github-build-intake.md +64 -0
  45. package/plugins/lisa-devin/agents/github-prd-intake.md +66 -0
  46. package/plugins/lisa-devin/agents/jira-agent.md +135 -0
  47. package/plugins/lisa-devin/agents/jira-build-intake.md +64 -0
  48. package/plugins/lisa-devin/agents/learner.md +85 -0
  49. package/plugins/lisa-devin/agents/learning-judge.md +119 -0
  50. package/plugins/lisa-devin/agents/learnings-synthesizer.md +155 -0
  51. package/plugins/lisa-devin/agents/linear-agent.md +138 -0
  52. package/plugins/lisa-devin/agents/linear-build-intake.md +64 -0
  53. package/plugins/lisa-devin/agents/linear-prd-intake.md +66 -0
  54. package/plugins/lisa-devin/agents/notion-prd-intake.md +63 -0
  55. package/plugins/lisa-devin/agents/performance-specialist.md +26 -0
  56. package/plugins/lisa-devin/agents/pr-mining-specialist.md +85 -0
  57. package/plugins/lisa-devin/agents/product-specialist.md +30 -0
  58. package/plugins/lisa-devin/agents/quality-specialist.md +30 -0
  59. package/plugins/lisa-devin/agents/security-specialist.md +43 -0
  60. package/plugins/lisa-devin/agents/skill-evaluator.md +205 -0
  61. package/plugins/lisa-devin/agents/spec-conformance-specialist.md +56 -0
  62. package/plugins/lisa-devin/agents/test-specialist.md +32 -0
  63. package/plugins/lisa-devin/agents/tracker-mining-specialist.md +85 -0
  64. package/plugins/lisa-devin/agents/verification-specialist.md +145 -0
  65. package/plugins/lisa-devin/hooks/auto-update.mjs +824 -0
  66. package/plugins/lisa-devin/hooks/auto-update.sh +31 -0
  67. package/plugins/lisa-devin/hooks/block-blind-automerge.sh +1242 -0
  68. package/plugins/lisa-devin/hooks/block-direct-issue-create.sh +2603 -0
  69. package/plugins/lisa-devin/hooks/block-host-name-leak.mjs +412 -0
  70. package/plugins/lisa-devin/hooks/block-host-name-leak.sh +61 -0
  71. package/plugins/lisa-devin/hooks/block-instruction-file-edits.sh +207 -0
  72. package/plugins/lisa-devin/hooks/block-managed-file-edits.sh +1175 -0
  73. package/plugins/lisa-devin/hooks/block-no-verify.sh +2288 -0
  74. package/plugins/lisa-devin/hooks/block-shell-json-parsing.sh +263 -0
  75. package/plugins/lisa-devin/hooks/cleanup-stale-worktrees.sh +122 -0
  76. package/plugins/lisa-devin/hooks/devin-tool-name-shim.sh +30 -0
  77. package/plugins/lisa-devin/hooks/discharge-work-item-gates.sh +90 -0
  78. package/plugins/lisa-devin/hooks/enforce-verification-gate.sh +506 -0
  79. package/plugins/lisa-devin/hooks/enforcement-vintage-npm.mjs +320 -0
  80. package/plugins/lisa-devin/hooks/enforcement-vintage.mjs +472 -0
  81. package/plugins/lisa-devin/hooks/enforcement-vintage.sh +48 -0
  82. package/plugins/lisa-devin/hooks/failure-signature-index.mjs +717 -0
  83. package/plugins/lisa-devin/hooks/failure-signature-index.sh +26 -0
  84. package/plugins/lisa-devin/hooks/guard-dedupe.bash +374 -0
  85. package/plugins/lisa-devin/hooks/inject-resolved-config.mjs +903 -0
  86. package/plugins/lisa-devin/hooks/inject-resolved-config.sh +107 -0
  87. package/plugins/lisa-devin/hooks/inject-rules.sh +49 -0
  88. package/plugins/lisa-devin/hooks/install-pkgs.sh +84 -0
  89. package/plugins/lisa-devin/hooks/operational-hazards.mjs +736 -0
  90. package/plugins/lisa-devin/hooks/operational-hazards.sh +28 -0
  91. package/plugins/lisa-devin/hooks/parity-safety-net-heredoc.py +1004 -0
  92. package/plugins/lisa-devin/hooks/parity-safety-net.sh +3275 -0
  93. package/plugins/lisa-devin/hooks/secrets-preflight.sh +72 -0
  94. package/plugins/lisa-devin/hooks/setup-jira-cli.sh +205 -0
  95. package/plugins/lisa-devin/hooks/shell-write-nudge.sh +86 -0
  96. package/plugins/lisa-devin/hooks/sonar-secrets.sh +205 -0
  97. package/plugins/lisa-devin/hooks/threshold-ratchet-compare.mjs +518 -0
  98. package/plugins/lisa-devin/hooks/threshold-ratchet-families.mjs +543 -0
  99. package/plugins/lisa-devin/hooks/threshold-ratchet.mjs +568 -0
  100. package/plugins/lisa-devin/hooks/threshold-ratchet.sh +22 -0
  101. package/plugins/lisa-devin/hooks/withdrawn-rulings.mjs +600 -0
  102. package/plugins/lisa-devin/hooks/withdrawn-rulings.sh +24 -0
  103. package/plugins/lisa-devin/hooks/worktree-binding-guard.mjs +1383 -0
  104. package/plugins/lisa-devin/hooks/worktree-binding-guard.sh +79 -0
  105. package/plugins/lisa-devin/hooks.json +247 -0
  106. package/plugins/lisa-devin/rules/eager/00-rule-index.md +82 -0
  107. package/plugins/lisa-devin/rules/eager/base-rules.md +85 -0
  108. package/plugins/lisa-devin/rules/eager/coding-philosophy.md +27 -0
  109. package/plugins/lisa-devin/rules/eager/config-resolution.md +37 -0
  110. package/plugins/lisa-devin/rules/eager/do-it-now.md +11 -0
  111. package/plugins/lisa-devin/rules/eager/empirical-inquiry.md +24 -0
  112. package/plugins/lisa-devin/rules/eager/falsifiable-checks.md +48 -0
  113. package/plugins/lisa-devin/rules/eager/history-audit.md +27 -0
  114. package/plugins/lisa-devin/rules/eager/integration-access-layer.md +19 -0
  115. package/plugins/lisa-devin/rules/eager/intent-routing.md +18 -0
  116. package/plugins/lisa-devin/rules/eager/learnings-ladder.md +18 -0
  117. package/plugins/lisa-devin/rules/eager/local-ci-first.md +15 -0
  118. package/plugins/lisa-devin/rules/eager/measurement-integrity.md +18 -0
  119. package/plugins/lisa-devin/rules/eager/never-name-a-downstream-project.md +9 -0
  120. package/plugins/lisa-devin/rules/eager/not-blocked-just-waiting.md +13 -0
  121. package/plugins/lisa-devin/rules/eager/operational-hazards.md +50 -0
  122. package/plugins/lisa-devin/rules/eager/report-actionability.md +26 -0
  123. package/plugins/lisa-devin/rules/eager/security-audit-handling.md +40 -0
  124. package/plugins/lisa-devin/rules/eager/session-status-updates.md +20 -0
  125. package/plugins/lisa-devin/rules/eager/settled-decisions.md +75 -0
  126. package/plugins/lisa-devin/rules/eager/stale-state-claims.md +26 -0
  127. package/plugins/lisa-devin/rules/eager/tool-access-gate.md +23 -0
  128. package/plugins/lisa-devin/rules/eager/tracked-work.md +9 -0
  129. package/plugins/lisa-devin/rules/eager/upstream-to-lisa.md +14 -0
  130. package/plugins/lisa-devin/rules/eager/verification.md +33 -0
  131. package/plugins/lisa-devin/rules/eager/wiki-knowledge-source.md +13 -0
  132. package/plugins/lisa-devin/rules/eager/withdrawn-rulings.md +102 -0
  133. package/plugins/lisa-devin/rules/reference/automation-runbook-contract.md +355 -0
  134. package/plugins/lisa-devin/rules/reference/base-rules.md +136 -0
  135. package/plugins/lisa-devin/rules/reference/bdd-e2e-coverage.md +301 -0
  136. package/plugins/lisa-devin/rules/reference/blocker-containment.md +165 -0
  137. package/plugins/lisa-devin/rules/reference/claim-archaeology.md +184 -0
  138. package/plugins/lisa-devin/rules/reference/claim-evidence-mapping.md +362 -0
  139. package/plugins/lisa-devin/rules/reference/claim-time-guards.md +135 -0
  140. package/plugins/lisa-devin/rules/reference/coding-philosophy.md +428 -0
  141. package/plugins/lisa-devin/rules/reference/config-resolution.md +1225 -0
  142. package/plugins/lisa-devin/rules/reference/control-reachability.md +166 -0
  143. package/plugins/lisa-devin/rules/reference/convergent-review.md +145 -0
  144. package/plugins/lisa-devin/rules/reference/credential-substrate-precedence.md +249 -0
  145. package/plugins/lisa-devin/rules/reference/dependency-decision-records.md +177 -0
  146. package/plugins/lisa-devin/rules/reference/dependency-internalization-kit.md +244 -0
  147. package/plugins/lisa-devin/rules/reference/dependency-trust-classes.md +291 -0
  148. package/plugins/lisa-devin/rules/reference/deployed-state-readback.md +142 -0
  149. package/plugins/lisa-devin/rules/reference/derived-branch-plan.md +214 -0
  150. package/plugins/lisa-devin/rules/reference/design-source-of-truth.md +260 -0
  151. package/plugins/lisa-devin/rules/reference/design-value-binding.md +311 -0
  152. package/plugins/lisa-devin/rules/reference/do-it-now.md +19 -0
  153. package/plugins/lisa-devin/rules/reference/documentation-source-paths.md +31 -0
  154. package/plugins/lisa-devin/rules/reference/empirical-inquiry.md +28 -0
  155. package/plugins/lisa-devin/rules/reference/factory-model.md +111 -0
  156. package/plugins/lisa-devin/rules/reference/falsifiable-checks.md +275 -0
  157. package/plugins/lisa-devin/rules/reference/history-audit.md +42 -0
  158. package/plugins/lisa-devin/rules/reference/integration-access-layer.md +89 -0
  159. package/plugins/lisa-devin/rules/reference/intent-routing.md +428 -0
  160. package/plugins/lisa-devin/rules/reference/leaf-only-lifecycle.md +227 -0
  161. package/plugins/lisa-devin/rules/reference/learnings-ladder.md +41 -0
  162. package/plugins/lisa-devin/rules/reference/local-ci-first.md +34 -0
  163. package/plugins/lisa-devin/rules/reference/measurement-integrity.md +119 -0
  164. package/plugins/lisa-devin/rules/reference/never-name-a-downstream-project.md +37 -0
  165. package/plugins/lisa-devin/rules/reference/not-blocked-just-waiting.md +41 -0
  166. package/plugins/lisa-devin/rules/reference/observability-audit.md +146 -0
  167. package/plugins/lisa-devin/rules/reference/operational-hazards.md +115 -0
  168. package/plugins/lisa-devin/rules/reference/prd-definition-of-ready.md +118 -0
  169. package/plugins/lisa-devin/rules/reference/prd-lifecycle-rollup.md +192 -0
  170. package/plugins/lisa-devin/rules/reference/pre-flight-autofill.md +250 -0
  171. package/plugins/lisa-devin/rules/reference/project-learnings.md +159 -0
  172. package/plugins/lisa-devin/rules/reference/promotion-contract.md +148 -0
  173. package/plugins/lisa-devin/rules/reference/readiness-rubric.md +242 -0
  174. package/plugins/lisa-devin/rules/reference/ready-role-filing.md +212 -0
  175. package/plugins/lisa-devin/rules/reference/rejection-detection.md +308 -0
  176. package/plugins/lisa-devin/rules/reference/repo-scope-split.md +119 -0
  177. package/plugins/lisa-devin/rules/reference/report-actionability.md +61 -0
  178. package/plugins/lisa-devin/rules/reference/reset-seed-coverage.md +286 -0
  179. package/plugins/lisa-devin/rules/reference/security-audit-handling.md +55 -0
  180. package/plugins/lisa-devin/rules/reference/session-status-updates.md +111 -0
  181. package/plugins/lisa-devin/rules/reference/settled-decisions.md +39 -0
  182. package/plugins/lisa-devin/rules/reference/stale-state-claims.md +88 -0
  183. package/plugins/lisa-devin/rules/reference/tool-access-gate.md +114 -0
  184. package/plugins/lisa-devin/rules/reference/tracked-work.md +49 -0
  185. package/plugins/lisa-devin/rules/reference/upstream-to-lisa.md +26 -0
  186. package/plugins/lisa-devin/rules/reference/usage-accounting.md +261 -0
  187. package/plugins/lisa-devin/rules/reference/verification.md +278 -0
  188. package/plugins/lisa-devin/rules/reference/wiki-knowledge-source.md +37 -0
  189. package/plugins/lisa-devin/rules/reference/withdrawn-rulings.md +148 -0
  190. package/plugins/lisa-devin/rules/reference/work-item-definition-of-ready.md +177 -0
  191. package/plugins/lisa-devin/rules/reference/work-item-trailer-definition.md +129 -0
  192. package/plugins/lisa-devin/scripts/automation-run-record.mjs +678 -0
  193. package/plugins/lisa-devin/scripts/automation-status-claude-adapter.mjs +804 -0
  194. package/plugins/lisa-devin/scripts/automation-status-codex-adapter.mjs +1081 -0
  195. package/plugins/lisa-devin/scripts/automation-status-contract-drift.mjs +392 -0
  196. package/plugins/lisa-devin/scripts/automation-status-expected-fleet.mjs +508 -0
  197. package/plugins/lisa-devin/scripts/automation-status-report.mjs +200 -0
  198. package/plugins/lisa-devin/scripts/automation-status-run-history.mjs +216 -0
  199. package/plugins/lisa-devin/scripts/automation-status-unrecorded-runs.mjs +127 -0
  200. package/plugins/lisa-devin/scripts/blocker-edge-resolution.mjs +150 -0
  201. package/plugins/lisa-devin/scripts/cross-pollinate.mjs +763 -0
  202. package/plugins/lisa-devin/scripts/design-bindings-probe.mjs +713 -0
  203. package/plugins/lisa-devin/scripts/design-intake-gate.mjs +470 -0
  204. package/plugins/lisa-devin/scripts/design-source-gate.mjs +610 -0
  205. package/plugins/lisa-devin/scripts/design-variable-ids.mjs +567 -0
  206. package/plugins/lisa-devin/scripts/doctor-report.mjs +635 -0
  207. package/plugins/lisa-devin/scripts/install-remote-agent-aws.mjs +443 -0
  208. package/plugins/lisa-devin/scripts/intake-blocker-reprobe.mjs +1065 -0
  209. package/plugins/lisa-devin/scripts/intake-prework-denominator.mjs +249 -0
  210. package/plugins/lisa-devin/scripts/lifecycle-label-trust.mjs +593 -0
  211. package/plugins/lisa-devin/scripts/linear-state-write-target.mjs +362 -0
  212. package/plugins/lisa-devin/scripts/plugin-sync-explain.mjs +654 -0
  213. package/plugins/lisa-devin/scripts/pr-arming-sweep.mjs +561 -0
  214. package/plugins/lisa-devin/scripts/project-ideation-idempotency-harness.mjs +338 -0
  215. package/plugins/lisa-devin/scripts/qa-signal-lifecycle.mjs +523 -0
  216. package/plugins/lisa-devin/scripts/queue-contract-resolution.mjs +583 -0
  217. package/plugins/lisa-devin/scripts/queue-health-classification.mjs +157 -0
  218. package/plugins/lisa-devin/scripts/queue-status-build-readers.mjs +561 -0
  219. package/plugins/lisa-devin/scripts/queue-status-prd-readers.mjs +452 -0
  220. package/plugins/lisa-devin/scripts/remote-agent-aws-setup.sh +677 -0
  221. package/plugins/lisa-devin/scripts/repo-scope-vocabulary-audit.mjs +458 -0
  222. package/plugins/lisa-devin/scripts/resolve-lifecycle-role.mjs +347 -0
  223. package/plugins/lisa-devin/scripts/rollup-blocker-classification.mjs +616 -0
  224. package/plugins/lisa-devin/scripts/scoping-label-audit.mjs +474 -0
  225. package/plugins/lisa-devin/skills/lisa-acceptance-criteria/SKILL.md +73 -0
  226. package/plugins/lisa-devin/skills/lisa-agent-design-best-practices/SKILL.md +242 -0
  227. package/plugins/lisa-devin/skills/lisa-agent-ready/SKILL.md +271 -0
  228. package/plugins/lisa-devin/skills/lisa-analyze-claude-remote/SKILL.md +434 -0
  229. package/plugins/lisa-devin/skills/lisa-atlassian-access/SKILL.md +469 -0
  230. package/plugins/lisa-devin/skills/lisa-atlassian-access/scripts/markdown-to-adf.mjs +236 -0
  231. package/plugins/lisa-devin/skills/lisa-attribute-failure/SKILL.md +142 -0
  232. package/plugins/lisa-devin/skills/lisa-automation-status/SKILL.md +149 -0
  233. package/plugins/lisa-devin/skills/lisa-bug-triage/SKILL.md +23 -0
  234. package/plugins/lisa-devin/skills/lisa-capability-drift/SKILL.md +71 -0
  235. package/plugins/lisa-devin/skills/lisa-codebase-research/SKILL.md +87 -0
  236. package/plugins/lisa-devin/skills/lisa-codify-verification/SKILL.md +213 -0
  237. package/plugins/lisa-devin/skills/lisa-confluence-prd-intake/SKILL.md +417 -0
  238. package/plugins/lisa-devin/skills/lisa-confluence-to-tracker/SKILL.md +469 -0
  239. package/plugins/lisa-devin/skills/lisa-confluence-write-prd/SKILL.md +111 -0
  240. package/plugins/lisa-devin/skills/lisa-cross-pollinate/SKILL.md +175 -0
  241. package/plugins/lisa-devin/skills/lisa-debrief/SKILL.md +96 -0
  242. package/plugins/lisa-devin/skills/lisa-debrief-apply/SKILL.md +106 -0
  243. package/plugins/lisa-devin/skills/lisa-delivery-effectiveness/SKILL.md +62 -0
  244. package/plugins/lisa-devin/skills/lisa-design-intake/SKILL.md +198 -0
  245. package/plugins/lisa-devin/skills/lisa-detect-tooling/SKILL.md +110 -0
  246. package/plugins/lisa-devin/skills/lisa-detect-tooling/scripts/commands.mjs +479 -0
  247. package/plugins/lisa-devin/skills/lisa-detect-tooling/scripts/detect-tooling.mjs +658 -0
  248. package/plugins/lisa-devin/skills/lisa-doctor/SKILL.md +743 -0
  249. package/plugins/lisa-devin/skills/lisa-drive-pr-to-merge/SKILL.md +1587 -0
  250. package/plugins/lisa-devin/skills/lisa-epic-triage/SKILL.md +28 -0
  251. package/plugins/lisa-devin/skills/lisa-evaluation-suite/SKILL.md +63 -0
  252. package/plugins/lisa-devin/skills/lisa-exploratory-qa/SKILL.md +185 -0
  253. package/plugins/lisa-devin/skills/lisa-fix-linter-error/SKILL.md +45 -0
  254. package/plugins/lisa-devin/skills/lisa-generate-claude-remote-build-script/SKILL.md +235 -0
  255. package/plugins/lisa-devin/skills/lisa-git-commit/SKILL.md +53 -0
  256. package/plugins/lisa-devin/skills/lisa-git-prune/SKILL.md +35 -0
  257. package/plugins/lisa-devin/skills/lisa-git-submit-pr/SKILL.md +170 -0
  258. package/plugins/lisa-devin/skills/lisa-github-add-journey/SKILL.md +118 -0
  259. package/plugins/lisa-devin/skills/lisa-github-build-intake/SKILL.md +745 -0
  260. package/plugins/lisa-devin/skills/lisa-github-claim/SKILL.md +27 -0
  261. package/plugins/lisa-devin/skills/lisa-github-create/SKILL.md +105 -0
  262. package/plugins/lisa-devin/skills/lisa-github-evidence/SKILL.md +120 -0
  263. package/plugins/lisa-devin/skills/lisa-github-journey/SKILL.md +134 -0
  264. package/plugins/lisa-devin/skills/lisa-github-prd-intake/SKILL.md +424 -0
  265. package/plugins/lisa-devin/skills/lisa-github-project-v2/SKILL.md +227 -0
  266. package/plugins/lisa-devin/skills/lisa-github-read-issue/SKILL.md +305 -0
  267. package/plugins/lisa-devin/skills/lisa-github-sync/SKILL.md +201 -0
  268. package/plugins/lisa-devin/skills/lisa-github-to-tracker/SKILL.md +456 -0
  269. package/plugins/lisa-devin/skills/lisa-github-validate-issue/SKILL.md +598 -0
  270. package/plugins/lisa-devin/skills/lisa-github-verify/SKILL.md +60 -0
  271. package/plugins/lisa-devin/skills/lisa-github-write-issue/SKILL.md +531 -0
  272. package/plugins/lisa-devin/skills/lisa-github-write-prd/SKILL.md +156 -0
  273. package/plugins/lisa-devin/skills/lisa-health/SKILL.md +142 -0
  274. package/plugins/lisa-devin/skills/lisa-health-drift-cron/SKILL.md +80 -0
  275. package/plugins/lisa-devin/skills/lisa-implement/SKILL.md +372 -0
  276. package/plugins/lisa-devin/skills/lisa-improve-code-complexity/SKILL.md +44 -0
  277. package/plugins/lisa-devin/skills/lisa-improve-harness/SKILL.md +487 -0
  278. package/plugins/lisa-devin/skills/lisa-improve-max-lines/SKILL.md +45 -0
  279. package/plugins/lisa-devin/skills/lisa-improve-max-lines-per-function/SKILL.md +46 -0
  280. package/plugins/lisa-devin/skills/lisa-improve-test-coverage/SKILL.md +47 -0
  281. package/plugins/lisa-devin/skills/lisa-improve-tests/SKILL.md +50 -0
  282. package/plugins/lisa-devin/skills/lisa-intake/SKILL.md +208 -0
  283. package/plugins/lisa-devin/skills/lisa-intake-explain/SKILL.md +279 -0
  284. package/plugins/lisa-devin/skills/lisa-jam-access/SKILL.md +128 -0
  285. package/plugins/lisa-devin/skills/lisa-jira-add-journey/SKILL.md +139 -0
  286. package/plugins/lisa-devin/skills/lisa-jira-build-intake/SKILL.md +556 -0
  287. package/plugins/lisa-devin/skills/lisa-jira-claim/SKILL.md +27 -0
  288. package/plugins/lisa-devin/skills/lisa-jira-create/SKILL.md +157 -0
  289. package/plugins/lisa-devin/skills/lisa-jira-evidence/SKILL.md +106 -0
  290. package/plugins/lisa-devin/skills/lisa-jira-evidence/scripts/post-evidence.sh +262 -0
  291. package/plugins/lisa-devin/skills/lisa-jira-journey/SKILL.md +168 -0
  292. package/plugins/lisa-devin/skills/lisa-jira-journey/scripts/generate-templates.py +239 -0
  293. package/plugins/lisa-devin/skills/lisa-jira-journey/scripts/parse-plan.py +570 -0
  294. package/plugins/lisa-devin/skills/lisa-jira-read-ticket/SKILL.md +199 -0
  295. package/plugins/lisa-devin/skills/lisa-jira-read-ticket/scripts/download-attachment.sh +211 -0
  296. package/plugins/lisa-devin/skills/lisa-jira-sync/SKILL.md +117 -0
  297. package/plugins/lisa-devin/skills/lisa-jira-validate-ticket/SKILL.md +525 -0
  298. package/plugins/lisa-devin/skills/lisa-jira-verify/SKILL.md +61 -0
  299. package/plugins/lisa-devin/skills/lisa-jira-write-ticket/SKILL.md +440 -0
  300. package/plugins/lisa-devin/skills/lisa-jsdoc-best-practices/SKILL.md +491 -0
  301. package/plugins/lisa-devin/skills/lisa-kane-browser/SKILL.md +80 -0
  302. package/plugins/lisa-devin/skills/lisa-learnings-audit/SKILL.md +490 -0
  303. package/plugins/lisa-devin/skills/lisa-linear-access/SKILL.md +483 -0
  304. package/plugins/lisa-devin/skills/lisa-linear-add-journey/SKILL.md +109 -0
  305. package/plugins/lisa-devin/skills/lisa-linear-build-intake/SKILL.md +548 -0
  306. package/plugins/lisa-devin/skills/lisa-linear-claim/SKILL.md +28 -0
  307. package/plugins/lisa-devin/skills/lisa-linear-create/SKILL.md +150 -0
  308. package/plugins/lisa-devin/skills/lisa-linear-evidence/SKILL.md +124 -0
  309. package/plugins/lisa-devin/skills/lisa-linear-journey/SKILL.md +147 -0
  310. package/plugins/lisa-devin/skills/lisa-linear-prd-intake/SKILL.md +411 -0
  311. package/plugins/lisa-devin/skills/lisa-linear-read-issue/SKILL.md +201 -0
  312. package/plugins/lisa-devin/skills/lisa-linear-sync/SKILL.md +164 -0
  313. package/plugins/lisa-devin/skills/lisa-linear-to-tracker/SKILL.md +454 -0
  314. package/plugins/lisa-devin/skills/lisa-linear-validate-issue/SKILL.md +504 -0
  315. package/plugins/lisa-devin/skills/lisa-linear-verify/SKILL.md +65 -0
  316. package/plugins/lisa-devin/skills/lisa-linear-write-issue/SKILL.md +448 -0
  317. package/plugins/lisa-devin/skills/lisa-linear-write-prd/SKILL.md +98 -0
  318. package/plugins/lisa-devin/skills/lisa-monitor/SKILL.md +224 -0
  319. package/plugins/lisa-devin/skills/lisa-nightly-add-test-coverage/SKILL.md +40 -0
  320. package/plugins/lisa-devin/skills/lisa-nightly-improve-tests/SKILL.md +29 -0
  321. package/plugins/lisa-devin/skills/lisa-nightly-lower-code-complexity/SKILL.md +42 -0
  322. package/plugins/lisa-devin/skills/lisa-notion-access/SKILL.md +301 -0
  323. package/plugins/lisa-devin/skills/lisa-notion-prd-intake/SKILL.md +360 -0
  324. package/plugins/lisa-devin/skills/lisa-notion-to-tracker/SKILL.md +467 -0
  325. package/plugins/lisa-devin/skills/lisa-notion-write-prd/SKILL.md +111 -0
  326. package/plugins/lisa-devin/skills/lisa-parity-code-review/SKILL.md +83 -0
  327. package/plugins/lisa-devin/skills/lisa-parity-code-simplifier/SKILL.md +76 -0
  328. package/plugins/lisa-devin/skills/lisa-parity-coderabbit/SKILL.md +87 -0
  329. package/plugins/lisa-devin/skills/lisa-parity-sentry-sdk-setup/SKILL.md +375 -0
  330. package/plugins/lisa-devin/skills/lisa-parity-sentry-seer/SKILL.md +168 -0
  331. package/plugins/lisa-devin/skills/lisa-parity-skill-creator/SKILL.md +155 -0
  332. package/plugins/lisa-devin/skills/lisa-performance-review/SKILL.md +94 -0
  333. package/plugins/lisa-devin/skills/lisa-persist-learning/SKILL.md +247 -0
  334. package/plugins/lisa-devin/skills/lisa-plan/SKILL.md +64 -0
  335. package/plugins/lisa-devin/skills/lisa-plugin-sync-explain/SKILL.md +53 -0
  336. package/plugins/lisa-devin/skills/lisa-posthog-access/SKILL.md +140 -0
  337. package/plugins/lisa-devin/skills/lisa-prd-backlink/SKILL.md +274 -0
  338. package/plugins/lisa-devin/skills/lisa-prd-source-write/SKILL.md +104 -0
  339. package/plugins/lisa-devin/skills/lisa-prd-ticket-coverage/SKILL.md +187 -0
  340. package/plugins/lisa-devin/skills/lisa-product-walkthrough/SKILL.md +106 -0
  341. package/plugins/lisa-devin/skills/lisa-project-ideation/SKILL.md +417 -0
  342. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/evidence-card-format.md +21 -0
  343. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/host-project-only.md +22 -0
  344. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +57 -0
  345. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/public-external-inspiration.md +22 -0
  346. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/unavailable-data-rejection.md +22 -0
  347. package/plugins/lisa-devin/skills/lisa-pull-request-review/SKILL.md +132 -0
  348. package/plugins/lisa-devin/skills/lisa-quality-review/SKILL.md +63 -0
  349. package/plugins/lisa-devin/skills/lisa-queue-status/SKILL.md +215 -0
  350. package/plugins/lisa-devin/skills/lisa-remote-dispatch/SKILL.md +109 -0
  351. package/plugins/lisa-devin/skills/lisa-remote-dispatch/scripts/dispatch.mjs +535 -0
  352. package/plugins/lisa-devin/skills/lisa-repair-intake/SKILL.md +1621 -0
  353. package/plugins/lisa-devin/skills/lisa-reproduce-bug/SKILL.md +75 -0
  354. package/plugins/lisa-devin/skills/lisa-research/SKILL.md +92 -0
  355. package/plugins/lisa-devin/skills/lisa-review-implementation/SKILL.md +209 -0
  356. package/plugins/lisa-devin/skills/lisa-review-local/SKILL.md +141 -0
  357. package/plugins/lisa-devin/skills/lisa-rework-triage/SKILL.md +206 -0
  358. package/plugins/lisa-devin/skills/lisa-root-cause-analysis/SKILL.md +135 -0
  359. package/plugins/lisa-devin/skills/lisa-secrets-access/SKILL.md +430 -0
  360. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/aws-bootstrap.mjs +433 -0
  361. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/bootstrap-store.mjs +288 -0
  362. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/doctor-secrets.mjs +273 -0
  363. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/envfile.mjs +80 -0
  364. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/inspect-vault.mjs +142 -0
  365. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/materialize-secrets.mjs +1085 -0
  366. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/note-format.mjs +179 -0
  367. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/owner.mjs +96 -0
  368. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/preflight-secrets.mjs +342 -0
  369. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/prompt-secret.mjs +79 -0
  370. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/providers.mjs +805 -0
  371. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/publish-aws-bootstrap.mjs +680 -0
  372. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/read-secret-note.mjs +105 -0
  373. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/resolve-expo-token.mjs +90 -0
  374. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/resolve-secret.mjs +285 -0
  375. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/rotate-secret.mjs +297 -0
  376. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/routing-floor.mjs +153 -0
  377. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/surfaces.mjs +480 -0
  378. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/sync-secret-to-ci.mjs +510 -0
  379. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/tools-from-notes.mjs +63 -0
  380. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/validate-config.mjs +550 -0
  381. package/plugins/lisa-devin/skills/lisa-security-review/SKILL.md +124 -0
  382. package/plugins/lisa-devin/skills/lisa-security-zap-scan/SKILL.md +53 -0
  383. package/plugins/lisa-devin/skills/lisa-sentry-access/SKILL.md +140 -0
  384. package/plugins/lisa-devin/skills/lisa-setup-atlassian/SKILL.md +407 -0
  385. package/plugins/lisa-devin/skills/lisa-setup-automations/SKILL.md +430 -0
  386. package/plugins/lisa-devin/skills/lisa-setup-automations/scripts/generate-workflow.mjs +288 -0
  387. package/plugins/lisa-devin/skills/lisa-setup-confluence/SKILL.md +254 -0
  388. package/plugins/lisa-devin/skills/lisa-setup-github/SKILL.md +319 -0
  389. package/plugins/lisa-devin/skills/lisa-setup-github-repo/SKILL.md +128 -0
  390. package/plugins/lisa-devin/skills/lisa-setup-jira/SKILL.md +198 -0
  391. package/plugins/lisa-devin/skills/lisa-setup-kane/SKILL.md +96 -0
  392. package/plugins/lisa-devin/skills/lisa-setup-linear/SKILL.md +375 -0
  393. package/plugins/lisa-devin/skills/lisa-setup-local-env/SKILL.md +95 -0
  394. package/plugins/lisa-devin/skills/lisa-setup-local-env/scripts/local-env.mjs +196 -0
  395. package/plugins/lisa-devin/skills/lisa-setup-notion/SKILL.md +376 -0
  396. package/plugins/lisa-devin/skills/lisa-setup-remote-aws/SKILL.md +149 -0
  397. package/plugins/lisa-devin/skills/lisa-setup-remote-env/SKILL.md +382 -0
  398. package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/materialized-env-authority.mjs +262 -0
  399. package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/session-start.sh +87 -0
  400. package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/setup.sh +216 -0
  401. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/environment.mjs +227 -0
  402. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +378 -0
  403. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +1632 -0
  404. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/tool-floor.mjs +94 -0
  405. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/toolchain.mjs +448 -0
  406. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/verify-remote-env.mjs +250 -0
  407. package/plugins/lisa-devin/skills/lisa-setup-sonar/SKILL.md +153 -0
  408. package/plugins/lisa-devin/skills/lisa-setup-workstation/SKILL.md +143 -0
  409. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/bounded-child.mjs +168 -0
  410. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/catalogue.mjs +293 -0
  411. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/cli.mjs +333 -0
  412. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/workstation.mjs +511 -0
  413. package/plugins/lisa-devin/skills/lisa-sonarcloud-access/SKILL.md +202 -0
  414. package/plugins/lisa-devin/skills/lisa-spec-conformance/SKILL.md +205 -0
  415. package/plugins/lisa-devin/skills/lisa-starter-sync/SKILL.md +35 -0
  416. package/plugins/lisa-devin/skills/lisa-sync-down/SKILL.md +209 -0
  417. package/plugins/lisa-devin/skills/lisa-task-decomposition/SKILL.md +195 -0
  418. package/plugins/lisa-devin/skills/lisa-task-triage/SKILL.md +23 -0
  419. package/plugins/lisa-devin/skills/lisa-tdd-implementation/SKILL.md +91 -0
  420. package/plugins/lisa-devin/skills/lisa-tear-down-automations/SKILL.md +85 -0
  421. package/plugins/lisa-devin/skills/lisa-test-strategy/SKILL.md +66 -0
  422. package/plugins/lisa-devin/skills/lisa-ticket-triage/SKILL.md +214 -0
  423. package/plugins/lisa-devin/skills/lisa-track/SKILL.md +129 -0
  424. package/plugins/lisa-devin/skills/lisa-tracker-add-journey/SKILL.md +28 -0
  425. package/plugins/lisa-devin/skills/lisa-tracker-build-intake/SKILL.md +134 -0
  426. package/plugins/lisa-devin/skills/lisa-tracker-claim/SKILL.md +35 -0
  427. package/plugins/lisa-devin/skills/lisa-tracker-create/SKILL.md +28 -0
  428. package/plugins/lisa-devin/skills/lisa-tracker-evidence/SKILL.md +63 -0
  429. package/plugins/lisa-devin/skills/lisa-tracker-journey/SKILL.md +27 -0
  430. package/plugins/lisa-devin/skills/lisa-tracker-read/SKILL.md +28 -0
  431. package/plugins/lisa-devin/skills/lisa-tracker-source-artifacts/SKILL.md +111 -0
  432. package/plugins/lisa-devin/skills/lisa-tracker-sync/SKILL.md +150 -0
  433. package/plugins/lisa-devin/skills/lisa-tracker-validate/SKILL.md +37 -0
  434. package/plugins/lisa-devin/skills/lisa-tracker-verify/SKILL.md +29 -0
  435. package/plugins/lisa-devin/skills/lisa-tracker-write/SKILL.md +55 -0
  436. package/plugins/lisa-devin/skills/lisa-usage-accounting/SKILL.md +205 -0
  437. package/plugins/lisa-devin/skills/lisa-usage-accounting/references/effectiveness.md +63 -0
  438. package/plugins/lisa-devin/skills/lisa-use-the-product/SKILL.md +86 -0
  439. package/plugins/lisa-devin/skills/lisa-validate-tracker-mapping/SKILL.md +467 -0
  440. package/plugins/lisa-devin/skills/lisa-verification-lifecycle/SKILL.md +384 -0
  441. package/plugins/lisa-devin/skills/lisa-verify/SKILL.md +55 -0
  442. package/plugins/lisa-devin/skills/lisa-verify-prd/SKILL.md +394 -0
  443. package/plugins/lisa-devin/skills/lisa-verify-workflow-change/SKILL.md +154 -0
  444. package/plugins/lisa-devin/skills/lisa-wiki-install/SKILL.md +101 -0
  445. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  446. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  447. package/plugins/lisa-expo-agy/plugin.json +1 -1
  448. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  449. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  450. package/plugins/lisa-expo-devin/.claude-plugin/plugin.json +11 -0
  451. package/plugins/lisa-expo-devin/.devin-plugin/plugin.json +8 -0
  452. package/plugins/lisa-expo-devin/.mcp.json +8 -0
  453. package/plugins/lisa-expo-devin/THIRD-PARTY-NOTICES.md +84 -0
  454. package/plugins/lisa-expo-devin/agents/ops-specialist.md +124 -0
  455. package/plugins/lisa-expo-devin/hooks/devin-tool-name-shim.sh +30 -0
  456. package/plugins/lisa-expo-devin/hooks/register-maestro-mcp.sh +84 -0
  457. package/plugins/lisa-expo-devin/hooks.json +14 -0
  458. package/plugins/lisa-expo-devin/skills/add-app-clip/SKILL.md +280 -0
  459. package/plugins/lisa-expo-devin/skills/add-app-clip/references/native-module.md +96 -0
  460. package/plugins/lisa-expo-devin/skills/apollo-client/SKILL.md +238 -0
  461. package/plugins/lisa-expo-devin/skills/apollo-client/references/mutation-patterns.md +360 -0
  462. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/SKILL.md +369 -0
  463. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
  464. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
  465. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
  466. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
  467. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +438 -0
  468. package/plugins/lisa-expo-devin/skills/building-native-ui/SKILL.md +321 -0
  469. package/plugins/lisa-expo-devin/skills/building-native-ui/references/animations.md +220 -0
  470. package/plugins/lisa-expo-devin/skills/building-native-ui/references/controls.md +272 -0
  471. package/plugins/lisa-expo-devin/skills/building-native-ui/references/form-sheet.md +253 -0
  472. package/plugins/lisa-expo-devin/skills/building-native-ui/references/gradients.md +106 -0
  473. package/plugins/lisa-expo-devin/skills/building-native-ui/references/icons.md +213 -0
  474. package/plugins/lisa-expo-devin/skills/building-native-ui/references/media.md +198 -0
  475. package/plugins/lisa-expo-devin/skills/building-native-ui/references/route-structure.md +229 -0
  476. package/plugins/lisa-expo-devin/skills/building-native-ui/references/search.md +248 -0
  477. package/plugins/lisa-expo-devin/skills/building-native-ui/references/storage.md +121 -0
  478. package/plugins/lisa-expo-devin/skills/building-native-ui/references/tabs.md +433 -0
  479. package/plugins/lisa-expo-devin/skills/building-native-ui/references/toolbar-and-headers.md +284 -0
  480. package/plugins/lisa-expo-devin/skills/building-native-ui/references/visual-effects.md +197 -0
  481. package/plugins/lisa-expo-devin/skills/building-native-ui/references/webgpu-three.md +605 -0
  482. package/plugins/lisa-expo-devin/skills/building-native-ui/references/zoom-transitions.md +158 -0
  483. package/plugins/lisa-expo-devin/skills/container-view-pattern/SKILL.md +355 -0
  484. package/plugins/lisa-expo-devin/skills/container-view-pattern/references/examples.md +749 -0
  485. package/plugins/lisa-expo-devin/skills/container-view-pattern/references/patterns.md +318 -0
  486. package/plugins/lisa-expo-devin/skills/container-view-pattern/scripts/create_component.py +200 -0
  487. package/plugins/lisa-expo-devin/skills/container-view-pattern/scripts/validate_component.py +332 -0
  488. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/SKILL.md +268 -0
  489. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/common-issues.md +619 -0
  490. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
  491. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/platform-api.md +276 -0
  492. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
  493. package/plugins/lisa-expo-devin/skills/directory-structure/SKILL.md +214 -0
  494. package/plugins/lisa-expo-devin/skills/directory-structure/scripts/validate_structure.py +454 -0
  495. package/plugins/lisa-expo-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
  496. package/plugins/lisa-expo-devin/skills/eas-update-insights/SKILL.md +228 -0
  497. package/plugins/lisa-expo-devin/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
  498. package/plugins/lisa-expo-devin/skills/eas-update-insights/references/update-insights-schema.md +69 -0
  499. package/plugins/lisa-expo-devin/skills/expo-api-routes/SKILL.md +369 -0
  500. package/plugins/lisa-expo-devin/skills/expo-brownfield/SKILL.md +54 -0
  501. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/brownfield-integrated.md +526 -0
  502. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/brownfield-isolated.md +402 -0
  503. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/comparison.md +63 -0
  504. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/troubleshooting.md +88 -0
  505. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/SKILL.md +92 -0
  506. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/fetch.js +113 -0
  507. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/package.json +11 -0
  508. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/validate.js +85 -0
  509. package/plugins/lisa-expo-devin/skills/expo-deployment/SKILL.md +193 -0
  510. package/plugins/lisa-expo-devin/skills/expo-deployment/references/app-store-metadata.md +479 -0
  511. package/plugins/lisa-expo-devin/skills/expo-deployment/references/ios-app-store.md +355 -0
  512. package/plugins/lisa-expo-devin/skills/expo-deployment/references/play-store.md +264 -0
  513. package/plugins/lisa-expo-devin/skills/expo-deployment/references/testflight.md +58 -0
  514. package/plugins/lisa-expo-devin/skills/expo-deployment/references/workflows.md +200 -0
  515. package/plugins/lisa-expo-devin/skills/expo-dev-client/SKILL.md +164 -0
  516. package/plugins/lisa-expo-devin/skills/expo-env-config/SKILL.md +309 -0
  517. package/plugins/lisa-expo-devin/skills/expo-env-config/references/validation-patterns.md +417 -0
  518. package/plugins/lisa-expo-devin/skills/expo-module/SKILL.md +141 -0
  519. package/plugins/lisa-expo-devin/skills/expo-module/references/config-plugin.md +90 -0
  520. package/plugins/lisa-expo-devin/skills/expo-module/references/create-expo-module.md +206 -0
  521. package/plugins/lisa-expo-devin/skills/expo-module/references/lifecycle.md +127 -0
  522. package/plugins/lisa-expo-devin/skills/expo-module/references/module-config.md +48 -0
  523. package/plugins/lisa-expo-devin/skills/expo-module/references/native-module.md +286 -0
  524. package/plugins/lisa-expo-devin/skills/expo-module/references/native-view.md +171 -0
  525. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/SKILL.md +432 -0
  526. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/references/official-docs.md +290 -0
  527. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/references/static-export-verification.md +54 -0
  528. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
  529. package/plugins/lisa-expo-devin/skills/expo-tailwind-setup/SKILL.md +487 -0
  530. package/plugins/lisa-expo-devin/skills/expo-ui-jetpack-compose/SKILL.md +40 -0
  531. package/plugins/lisa-expo-devin/skills/expo-ui-swift-ui/SKILL.md +39 -0
  532. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/SKILL.md +419 -0
  533. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/color-tokens.md +343 -0
  534. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/component-mapping.md +307 -0
  535. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
  536. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
  537. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/scripts/validate_styling.py +424 -0
  538. package/plugins/lisa-expo-devin/skills/jira-add-journey/SKILL.md +140 -0
  539. package/plugins/lisa-expo-devin/skills/jira-create/SKILL.md +161 -0
  540. package/plugins/lisa-expo-devin/skills/jira-evidence/SKILL.md +84 -0
  541. package/plugins/lisa-expo-devin/skills/jira-evidence/scripts/post-evidence.sh +262 -0
  542. package/plugins/lisa-expo-devin/skills/jira-journey/SKILL.md +196 -0
  543. package/plugins/lisa-expo-devin/skills/jira-journey/scripts/generate-templates.py +281 -0
  544. package/plugins/lisa-expo-devin/skills/jira-journey/scripts/parse-plan.py +400 -0
  545. package/plugins/lisa-expo-devin/skills/jira-verify/SKILL.md +27 -0
  546. package/plugins/lisa-expo-devin/skills/local-state/SKILL.md +362 -0
  547. package/plugins/lisa-expo-devin/skills/local-state/references/async-storage.md +505 -0
  548. package/plugins/lisa-expo-devin/skills/local-state/references/persistence-patterns.md +711 -0
  549. package/plugins/lisa-expo-devin/skills/local-state/references/reactive-variables.md +446 -0
  550. package/plugins/lisa-expo-devin/skills/maestro-mcp-setup/SKILL.md +144 -0
  551. package/plugins/lisa-expo-devin/skills/native-data-fetching/SKILL.md +507 -0
  552. package/plugins/lisa-expo-devin/skills/native-data-fetching/references/expo-router-loaders.md +344 -0
  553. package/plugins/lisa-expo-devin/skills/ops-browser-uat/SKILL.md +124 -0
  554. package/plugins/lisa-expo-devin/skills/ops-check-logs/SKILL.md +217 -0
  555. package/plugins/lisa-expo-devin/skills/ops-db-ops/SKILL.md +214 -0
  556. package/plugins/lisa-expo-devin/skills/ops-deploy/SKILL.md +123 -0
  557. package/plugins/lisa-expo-devin/skills/ops-monitor-errors/SKILL.md +99 -0
  558. package/plugins/lisa-expo-devin/skills/ops-performance/SKILL.md +165 -0
  559. package/plugins/lisa-expo-devin/skills/ops-run-local/SKILL.md +169 -0
  560. package/plugins/lisa-expo-devin/skills/ops-verify-health/SKILL.md +101 -0
  561. package/plugins/lisa-expo-devin/skills/owasp-zap/SKILL.md +61 -0
  562. package/plugins/lisa-expo-devin/skills/play-store-access/SKILL.md +226 -0
  563. package/plugins/lisa-expo-devin/skills/playwright-ci-debugging/SKILL.md +140 -0
  564. package/plugins/lisa-expo-devin/skills/playwright-selectors/SKILL.md +496 -0
  565. package/plugins/lisa-expo-devin/skills/reduce-complexity/SKILL.md +251 -0
  566. package/plugins/lisa-expo-devin/skills/reduce-complexity/references/extraction-strategies.md +456 -0
  567. package/plugins/lisa-expo-devin/skills/reduce-complexity/references/refactoring-patterns.md +557 -0
  568. package/plugins/lisa-expo-devin/skills/testing-library/SKILL.md +314 -0
  569. package/plugins/lisa-expo-devin/skills/testing-library/references/async-patterns.md +420 -0
  570. package/plugins/lisa-expo-devin/skills/testing-library/references/expo-router-testing.md +556 -0
  571. package/plugins/lisa-expo-devin/skills/testing-library/references/mocking-patterns.md +612 -0
  572. package/plugins/lisa-expo-devin/skills/testing-library/references/query-priority.md +291 -0
  573. package/plugins/lisa-expo-devin/skills/upgrading-expo/SKILL.md +134 -0
  574. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
  575. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/expo-av-to-video.md +160 -0
  576. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/native-tabs.md +124 -0
  577. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/new-architecture.md +79 -0
  578. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-19.md +79 -0
  579. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-compiler.md +59 -0
  580. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
  581. package/plugins/lisa-expo-devin/skills/use-dom/SKILL.md +417 -0
  582. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  583. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  584. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  585. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  586. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  587. package/plugins/lisa-harper-fabric-devin/.claude-plugin/plugin.json +11 -0
  588. package/plugins/lisa-harper-fabric-devin/.devin-plugin/plugin.json +8 -0
  589. package/plugins/lisa-harper-fabric-devin/generated-artifact-globs.txt +5 -0
  590. package/plugins/lisa-harper-fabric-devin/hooks/block-generated-artifact-edits.sh +141 -0
  591. package/plugins/lisa-harper-fabric-devin/hooks/devin-tool-name-shim.sh +30 -0
  592. package/plugins/lisa-harper-fabric-devin/hooks/enforce-config-extensions.mjs +196 -0
  593. package/plugins/lisa-harper-fabric-devin/hooks/enforce-config-extensions.sh +46 -0
  594. package/plugins/lisa-harper-fabric-devin/hooks/inject-rules.sh +27 -0
  595. package/plugins/lisa-harper-fabric-devin/hooks.json +36 -0
  596. package/plugins/lisa-harper-fabric-devin/rules/eager/harper-fabric.md +31 -0
  597. package/plugins/lisa-harper-fabric-devin/rules/reference/harper-fabric.md +52 -0
  598. package/plugins/lisa-harper-fabric-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
  599. package/plugins/lisa-harper-fabric-devin/skills/harper-auth/SKILL.md +368 -0
  600. package/plugins/lisa-harper-fabric-devin/skills/harper-build-and-deploy/SKILL.md +198 -0
  601. package/plugins/lisa-harper-fabric-devin/skills/harper-caching/SKILL.md +265 -0
  602. package/plugins/lisa-harper-fabric-devin/skills/harper-component-model/SKILL.md +87 -0
  603. package/plugins/lisa-harper-fabric-devin/skills/harper-config-yaml/SKILL.md +283 -0
  604. package/plugins/lisa-harper-fabric-devin/skills/harper-operations/SKILL.md +239 -0
  605. package/plugins/lisa-harper-fabric-devin/skills/harper-realtime/SKILL.md +187 -0
  606. package/plugins/lisa-harper-fabric-devin/skills/harper-resources/SKILL.md +142 -0
  607. package/plugins/lisa-harper-fabric-devin/skills/harper-rest-queries/SKILL.md +403 -0
  608. package/plugins/lisa-harper-fabric-devin/skills/harper-schema-graphql/SKILL.md +123 -0
  609. package/plugins/lisa-harper-fabric-devin/skills/harper-testing/SKILL.md +254 -0
  610. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  611. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  612. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  613. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  614. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  615. package/plugins/lisa-nestjs-devin/.claude-plugin/plugin.json +11 -0
  616. package/plugins/lisa-nestjs-devin/.devin-plugin/plugin.json +8 -0
  617. package/plugins/lisa-nestjs-devin/hooks/block-migration-edits.sh +125 -0
  618. package/plugins/lisa-nestjs-devin/hooks/devin-tool-name-shim.sh +30 -0
  619. package/plugins/lisa-nestjs-devin/hooks/lisa-edit-gate.sh +152 -0
  620. package/plugins/lisa-nestjs-devin/hooks.json +15 -0
  621. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/SKILL.md +176 -0
  622. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/advanced-features.md +527 -0
  623. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/project-patterns.md +531 -0
  624. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/quick-start.md +257 -0
  625. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
  626. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/types-scalars.md +513 -0
  627. package/plugins/lisa-nestjs-devin/skills/nestjs-rules/SKILL.md +560 -0
  628. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/SKILL.md +275 -0
  629. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
  630. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/entity-patterns.md +450 -0
  631. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/observability-patterns.md +536 -0
  632. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  633. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  634. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  635. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  636. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  637. package/plugins/lisa-openclaw-devin/.claude-plugin/plugin.json +8 -0
  638. package/plugins/lisa-openclaw-devin/.devin-plugin/plugin.json +8 -0
  639. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-repo-topic/SKILL.md +163 -0
  640. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +185 -0
  641. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/SKILL.md +175 -0
  642. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/references/platform-routing.md +123 -0
  643. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/references/prompts.md +78 -0
  644. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-setup/SKILL.md +141 -0
  645. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  646. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  647. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  648. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  649. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  650. package/plugins/lisa-phaser-devin/.claude-plugin/plugin.json +11 -0
  651. package/plugins/lisa-phaser-devin/.devin-plugin/plugin.json +8 -0
  652. package/plugins/lisa-phaser-devin/agents/accessibility-advocate.md +55 -0
  653. package/plugins/lisa-phaser-devin/agents/art-director.md +90 -0
  654. package/plugins/lisa-phaser-devin/agents/audio-director.md +65 -0
  655. package/plugins/lisa-phaser-devin/agents/combat-designer.md +61 -0
  656. package/plugins/lisa-phaser-devin/agents/economy-designer.md +59 -0
  657. package/plugins/lisa-phaser-devin/agents/game-designer.md +62 -0
  658. package/plugins/lisa-phaser-devin/agents/game-feel-specialist.md +56 -0
  659. package/plugins/lisa-phaser-devin/agents/level-designer.md +59 -0
  660. package/plugins/lisa-phaser-devin/agents/localization-manager.md +61 -0
  661. package/plugins/lisa-phaser-devin/agents/marketing-strategist.md +59 -0
  662. package/plugins/lisa-phaser-devin/agents/monetization-designer.md +59 -0
  663. package/plugins/lisa-phaser-devin/agents/narrative-designer.md +56 -0
  664. package/plugins/lisa-phaser-devin/agents/onboarding-advocate.md +59 -0
  665. package/plugins/lisa-phaser-devin/agents/player-advocate.md +57 -0
  666. package/plugins/lisa-phaser-devin/agents/producer.md +61 -0
  667. package/plugins/lisa-phaser-devin/agents/product-analyst.md +62 -0
  668. package/plugins/lisa-phaser-devin/agents/publisher.md +59 -0
  669. package/plugins/lisa-phaser-devin/agents/qa-playtester.md +57 -0
  670. package/plugins/lisa-phaser-devin/agents/target-player.md +52 -0
  671. package/plugins/lisa-phaser-devin/agents/ux-ui-designer.md +60 -0
  672. package/plugins/lisa-phaser-devin/hooks/devin-tool-name-shim.sh +30 -0
  673. package/plugins/lisa-phaser-devin/hooks/inject-rules.sh +27 -0
  674. package/plugins/lisa-phaser-devin/hooks.json +14 -0
  675. package/plugins/lisa-phaser-devin/rules/eager/phaser.md +44 -0
  676. package/plugins/lisa-phaser-devin/rules/reference/phaser.md +184 -0
  677. package/plugins/lisa-phaser-devin/skills/phaser-accessibility/SKILL.md +135 -0
  678. package/plugins/lisa-phaser-devin/skills/phaser-asset-pipeline/SKILL.md +222 -0
  679. package/plugins/lisa-phaser-devin/skills/phaser-asset-sourcing/SKILL.md +151 -0
  680. package/plugins/lisa-phaser-devin/skills/phaser-build-deploy/SKILL.md +153 -0
  681. package/plugins/lisa-phaser-devin/skills/phaser-i18n/SKILL.md +122 -0
  682. package/plugins/lisa-phaser-devin/skills/phaser-project-structure/SKILL.md +89 -0
  683. package/plugins/lisa-phaser-devin/skills/phaser-services/SKILL.md +208 -0
  684. package/plugins/lisa-phaser-devin/skills/phaser-testing/SKILL.md +192 -0
  685. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  686. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  687. package/plugins/lisa-rails-agy/plugin.json +1 -1
  688. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  689. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  690. package/plugins/lisa-rails-devin/.claude-plugin/plugin.json +11 -0
  691. package/plugins/lisa-rails-devin/.devin-plugin/plugin.json +8 -0
  692. package/plugins/lisa-rails-devin/agents/ops-specialist.md +226 -0
  693. package/plugins/lisa-rails-devin/hooks/devin-tool-name-shim.sh +30 -0
  694. package/plugins/lisa-rails-devin/hooks/inject-rules.sh +40 -0
  695. package/plugins/lisa-rails-devin/hooks/lisa-edit-gate.sh +152 -0
  696. package/plugins/lisa-rails-devin/hooks/rubocop-on-edit.sh +101 -0
  697. package/plugins/lisa-rails-devin/hooks/sg-scan-on-edit.sh +97 -0
  698. package/plugins/lisa-rails-devin/hooks.json +29 -0
  699. package/plugins/lisa-rails-devin/rules/eager/rails-conventions.md +23 -0
  700. package/plugins/lisa-rails-devin/rules/reference/rails-conventions.md +176 -0
  701. package/plugins/lisa-rails-devin/skills/action-controller-best-practices/SKILL.md +374 -0
  702. package/plugins/lisa-rails-devin/skills/action-view-best-practices/SKILL.md +335 -0
  703. package/plugins/lisa-rails-devin/skills/active-record-model-best-practices/SKILL.md +166 -0
  704. package/plugins/lisa-rails-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
  705. package/plugins/lisa-rails-devin/skills/fix-linter-error/SKILL.md +45 -0
  706. package/plugins/lisa-rails-devin/skills/improve-code-complexity/SKILL.md +51 -0
  707. package/plugins/lisa-rails-devin/skills/improve-max-lines/SKILL.md +46 -0
  708. package/plugins/lisa-rails-devin/skills/improve-max-lines-per-function/SKILL.md +46 -0
  709. package/plugins/lisa-rails-devin/skills/improve-test-coverage/SKILL.md +48 -0
  710. package/plugins/lisa-rails-devin/skills/jira-add-journey/SKILL.md +79 -0
  711. package/plugins/lisa-rails-devin/skills/jira-create/SKILL.md +100 -0
  712. package/plugins/lisa-rails-devin/skills/jira-evidence/SKILL.md +76 -0
  713. package/plugins/lisa-rails-devin/skills/jira-evidence/scripts/post-evidence.sh +262 -0
  714. package/plugins/lisa-rails-devin/skills/jira-journey/SKILL.md +65 -0
  715. package/plugins/lisa-rails-devin/skills/jira-verify/SKILL.md +26 -0
  716. package/plugins/lisa-rails-devin/skills/ops-check-logs/SKILL.md +191 -0
  717. package/plugins/lisa-rails-devin/skills/ops-deploy/SKILL.md +153 -0
  718. package/plugins/lisa-rails-devin/skills/ops-run-local/SKILL.md +169 -0
  719. package/plugins/lisa-rails-devin/skills/ops-verify-jobs/SKILL.md +157 -0
  720. package/plugins/lisa-rails-devin/skills/ops-verify-telemetry/SKILL.md +226 -0
  721. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  722. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  723. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  724. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  725. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  726. package/plugins/lisa-typescript-devin/.claude-plugin/plugin.json +11 -0
  727. package/plugins/lisa-typescript-devin/.devin-plugin/plugin.json +8 -0
  728. package/plugins/lisa-typescript-devin/hooks/block-suppress-directives.sh +141 -0
  729. package/plugins/lisa-typescript-devin/hooks/devin-tool-name-shim.sh +30 -0
  730. package/plugins/lisa-typescript-devin/hooks/format-on-edit.sh +102 -0
  731. package/plugins/lisa-typescript-devin/hooks/lint-on-edit.sh +117 -0
  732. package/plugins/lisa-typescript-devin/hooks/lisa-edit-gate.sh +152 -0
  733. package/plugins/lisa-typescript-devin/hooks/sg-scan-on-edit.sh +94 -0
  734. package/plugins/lisa-typescript-devin/hooks.json +34 -0
  735. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  736. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  737. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  738. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  739. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  740. package/plugins/lisa-wiki-devin/.claude-plugin/plugin.json +8 -0
  741. package/plugins/lisa-wiki-devin/.devin-plugin/plugin.json +8 -0
  742. package/plugins/lisa-wiki-devin/ci/lisa-wiki-validate.yml +33 -0
  743. package/plugins/lisa-wiki-devin/schema/lisa-wiki-config.schema.json +162 -0
  744. package/plugins/lisa-wiki-devin/schema/wiki-structure.schema.json +51 -0
  745. package/plugins/lisa-wiki-devin/scripts/_wiki-lib.mjs +204 -0
  746. package/plugins/lisa-wiki-devin/scripts/diff-guard.mjs +117 -0
  747. package/plugins/lisa-wiki-devin/scripts/ensure-gitignore.mjs +131 -0
  748. package/plugins/lisa-wiki-devin/scripts/ensure-wiki.mjs +268 -0
  749. package/plugins/lisa-wiki-devin/scripts/ingest-git.mjs +198 -0
  750. package/plugins/lisa-wiki-devin/scripts/ingest-memory.mjs +135 -0
  751. package/plugins/lisa-wiki-devin/scripts/ingest-roles.mjs +95 -0
  752. package/plugins/lisa-wiki-devin/scripts/ingest_slack_channel.py +361 -0
  753. package/plugins/lisa-wiki-devin/scripts/lib/bounded-child.mjs +159 -0
  754. package/plugins/lisa-wiki-devin/scripts/lint-wiki.mjs +513 -0
  755. package/plugins/lisa-wiki-devin/scripts/mcp-doctor.mjs +72 -0
  756. package/plugins/lisa-wiki-devin/scripts/render-contract.mjs +107 -0
  757. package/plugins/lisa-wiki-devin/scripts/rewrite-refs.mjs +144 -0
  758. package/plugins/lisa-wiki-devin/scripts/slack_oauth_user.py +179 -0
  759. package/plugins/lisa-wiki-devin/scripts/validate-config.mjs +321 -0
  760. package/plugins/lisa-wiki-devin/scripts/verify-migration.mjs +203 -0
  761. package/plugins/lisa-wiki-devin/scripts/verify-wiki-safety.mjs +126 -0
  762. package/plugins/lisa-wiki-devin/scripts/wiki-safety.mjs +378 -0
  763. package/plugins/lisa-wiki-devin/scripts/wiki-status.mjs +345 -0
  764. package/plugins/lisa-wiki-devin/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
  765. package/plugins/lisa-wiki-devin/skills/lisa-wiki-add-role/SKILL.md +35 -0
  766. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
  767. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
  768. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-git/SKILL.md +25 -0
  769. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
  770. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
  771. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
  772. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
  773. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
  774. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-web/SKILL.md +23 -0
  775. package/plugins/lisa-wiki-devin/skills/lisa-wiki-doctor/SKILL.md +47 -0
  776. package/plugins/lisa-wiki-devin/skills/lisa-wiki-ingest/SKILL.md +106 -0
  777. package/plugins/lisa-wiki-devin/skills/lisa-wiki-lint/SKILL.md +32 -0
  778. package/plugins/lisa-wiki-devin/skills/lisa-wiki-migrate/SKILL.md +43 -0
  779. package/plugins/lisa-wiki-devin/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
  780. package/plugins/lisa-wiki-devin/skills/lisa-wiki-query/SKILL.md +40 -0
  781. package/plugins/lisa-wiki-devin/skills/lisa-wiki-setup/SKILL.md +75 -0
  782. package/plugins/lisa-wiki-devin/skills/lisa-wiki-setup-automations/SKILL.md +83 -0
  783. package/plugins/lisa-wiki-devin/skills/lisa-wiki-status/SKILL.md +47 -0
  784. package/plugins/lisa-wiki-devin/skills/lisa-wiki-tear-down-automations/SKILL.md +34 -0
  785. package/plugins/lisa-wiki-devin/skills/lisa-wiki-usage/SKILL.md +50 -0
  786. package/plugins/lisa-wiki-devin/templates/agents/role-agent.claude.md +16 -0
  787. package/plugins/lisa-wiki-devin/templates/agents/role-agent.codex.toml +15 -0
  788. package/plugins/lisa-wiki-devin/templates/index.md +17 -0
  789. package/plugins/lisa-wiki-devin/templates/llm-wiki-contract.md +72 -0
  790. package/plugins/lisa-wiki-devin/templates/log.md +8 -0
  791. package/plugins/lisa-wiki-devin/templates/page-types/architecture.md +18 -0
  792. package/plugins/lisa-wiki-devin/templates/page-types/concept.md +18 -0
  793. package/plugins/lisa-wiki-devin/templates/page-types/decision.md +18 -0
  794. package/plugins/lisa-wiki-devin/templates/page-types/entity.md +19 -0
  795. package/plugins/lisa-wiki-devin/templates/page-types/open-question.md +18 -0
  796. package/plugins/lisa-wiki-devin/templates/page-types/playbook.md +18 -0
  797. package/plugins/lisa-wiki-devin/templates/page-types/project.md +19 -0
  798. package/plugins/lisa-wiki-devin/templates/page-types/requirement.md +19 -0
  799. package/plugins/lisa-wiki-devin/templates/page-types/staff.md +26 -0
  800. package/plugins/lisa-wiki-devin/templates/start-here.md +24 -0
  801. package/plugins/lisa-wiki-devin/templates/state-readme.md +20 -0
  802. package/plugins/lisa-wiki-devin/templates/wrapper-gitignore.txt +19 -0
  803. package/scripts/build-plugins.sh +2 -2
  804. package/scripts/deployed-guard-advice.mjs +1 -0
  805. package/scripts/generate-devin-plugin-artifacts.mjs +263 -0
  806. package/scripts/lib/hook-registration-audit.mjs +3 -1
  807. package/scripts/lib/per-agent-hook-filter.mjs +174 -5
  808. package/scripts/lib/plugin-rule-citations.mjs +2 -2
  809. package/scripts/two-channel-couplings.json +1 -1
@@ -0,0 +1,598 @@
1
+ ---
2
+ name: lisa-github-validate-issue
3
+ description: "Validates a proposed GitHub Issue spec (or an existing issue) against the organizational quality gates without writing anything. Returns a structured PASS/FAIL report per gate with concrete remediation. The GitHub counterpart of lisa-jira-validate-ticket — same gate definitions, translated to the GitHub Issues data model. Single source of truth for what makes a valid GitHub Issue. Both the write path (github-write-issue runs it pre-write) and the dry-run path (github-to-tracker runs it during PRD intake) call this skill."
4
+ allowed-tools: ["Bash", "Read"]
5
+ ---
6
+
7
+ # Validate GitHub Issue: $ARGUMENTS
8
+
9
+ Run all organizational quality gates against an issue spec OR an existing issue. **This skill is read-only — it never writes to GitHub.** The output is a structured report consumed by callers (`lisa-github-write-issue` for pre-write gating, `lisa-github-to-tracker` for PRD dry-run, `lisa-github-verify` for post-write checks).
10
+
11
+ ## Input
12
+
13
+ `$ARGUMENTS` is one of:
14
+
15
+ 1. **An existing issue ref** (`org/repo#<number>` or `https://github.com/<org>/<repo>/issues/<number>`): fetch it and validate the live state. Use this for post-write checks.
16
+ 2. **A proposed issue spec** (YAML block, see schema below): validate as-is without touching GitHub. Use this for pre-write and dry-run checks.
17
+
18
+ ### Standalone entry point — validating an item written by another path
19
+
20
+ Input form 1 is a **supported entry point in its own right**, not only an internal step of a
21
+ caller flow. Point this skill at any existing item — however it was written, including by a
22
+ bespoke script, a direct API or GraphQL call, or the vendor's own web UI — and it fetches the
23
+ live state and runs the full gate set against it.
24
+
25
+ Copy-pasteable, via the Skill tool:
26
+
27
+ ```text
28
+ Skill(skill: "lisa-github-validate-issue", args: "CodySwannGT/lisa#3663")
29
+ ```
30
+
31
+ where the argument is an issue ref such as `CodySwannGT/lisa#3663`, or the full issue URL. The report it returns is the same structured PASS/FAIL
32
+ report the write path consumes, so a bespoke write path can discharge both the pre-write
33
+ validate and the post-write verify obligation with it (see the bespoke-path section of
34
+ `lisa-github-write-issue`).
35
+
36
+ This skill is plugin-resident. It is invoked through the Skill tool and is **not** expected to
37
+ appear in any repository's `scripts/` directory; not finding a shell script by this name is
38
+ not evidence that the capability is absent.
39
+
40
+ ### Spec schema
41
+
42
+ Specs are passed as a fenced YAML block. Required keys depend on `issue_type`.
43
+
44
+ ```yaml
45
+ issue_type: Story # Story | Task | Bug | Epic | Spike | Sub-task | Improvement
46
+ org: my-org
47
+ repo: my-repo
48
+ summary: "[CU-1.2] Upload contract PDF from settings"
49
+ priority: medium
50
+ parent_ref: "my-org/my-repo#1234" # Parent Epic for ordinary children; PRD for an Epic only in the same-repo GitHub self-host shape; Story/etc. for Sub-task
51
+ body: |
52
+ ## Context / Business Value
53
+ ...
54
+
55
+ ## Technical Approach
56
+ ...
57
+
58
+ ## Acceptance Criteria
59
+ ```gherkin
60
+ Scenario: <name>
61
+ Given <precondition>
62
+ When <action>
63
+ Then <observable outcome>
64
+ ```
65
+
66
+ ## Out of Scope
67
+ ...
68
+
69
+ ## Target Backend Environment
70
+ dev
71
+
72
+ ## Sign-in Required
73
+ Account: ...
74
+
75
+ ## Repository
76
+ backend-api
77
+
78
+ ## Validation Journey
79
+ ...
80
+
81
+ # Behavioral flags — caller asserts these so the validator can pick the right gates
82
+ # (on a LIVE item `runtime_behavior_change` is DERIVED from the stored declaration, not taken on assertion — S8)
83
+ runtime_behavior_change: true # → requires Target Backend Environment + Validation Journey; LIVE items derive it from the stored declaration instead (S8)
84
+ authenticated_surface: true # → requires Sign-in Required
85
+ artifacts_attached: true # → requires Source Precedence section
86
+ links: [{ ref: "my-org/my-repo#99", type: "is blocked by" }] # known issue links (may be empty)
87
+ remote_links: [{ url: "https://github.com/.../pull/42", title: "PR #42" }]
88
+ journey_followup: auto # auto | none — see S11
89
+ build_ready: true # caller asserts the configured build-ready role (github.labels.build.ready, default status:ready) is/would be applied — see S15
90
+ child_refs: ["my-org/my-repo#601", "my-org/my-repo#602"] # known child work (sub-issues / task-list / "Blocked by" parentage) — see S15
91
+ prd_source: "https://notion.so/..." # set when the issue was generated from a PRD — requires the Source Requirement section, see S16
92
+ ```
93
+
94
+ If the caller passes only an issue ref, fetch via `gh issue view <number> --repo <org>/<repo> --json number,title,body,labels,state,milestone,assignees`, parse the body sections, derive the spec fields — including `runtime_behavior_change`, derived from the `## Target Backend Environment` declaration per `derived-branch-plan` and authoritative over any caller assertion — then run gates. The parser lives in `lisa-github-read-issue` (composition).
95
+
96
+ ## Standalone use, against an item that already exists
97
+
98
+ This is a supported entry point, not only an internal step of a caller flow.
99
+ Point it at a live issue and it fetches and validates the stored state:
100
+
101
+ ```text
102
+ Skill(lisa-github-validate-issue) with owner/repo#1234
103
+ ```
104
+
105
+ Use it whenever the issue reached the tracker by some path other than
106
+ `lisa-github-write-issue` — a team's own script, a workflow step, a cron, anything holding the
107
+ credentials but no skill runtime. Those paths get neither the pre-write nor the
108
+ post-write gate, and their own read-back substitutes for neither: a read-back
109
+ proves the tracker stored what was sent, never that what was sent was any good.
110
+
111
+ The gate definitions live here on purpose, so every caller picks up a change
112
+ automatically. Running this skill by hand is the same gate the write path runs,
113
+ not an approximation of it.
114
+
115
+ ## Gates
116
+
117
+ Gates are grouped into **Specification** (spec-only checks, no GitHub lookups) and **Feasibility** (requires GitHub lookups). The dry-run path may opt to run Specification gates only via `--spec-only`; the write path runs both.
118
+
119
+ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Categories are the same fixed set used by `lisa-jira-validate-ticket` so downstream PRD-intake comment-formatting policy is shared across vendors.
120
+
121
+ Per-type content requirements are defined once in the vendor-neutral `work-item-definition-of-ready` rule (eager + reference); gates S4–S6 and S17 enforce them, and S18 enforces the stateless-pickup property directly.
122
+
123
+ | Gate | Category | Product-relevant |
124
+ |------|----------|------------------|
125
+ | S1 Required core fields | `structural` | false |
126
+ | S2 Summary format | `structural` | false |
127
+ | S3 Description three audiences | `product-clarity` | true |
128
+ | S4 Acceptance criteria in Gherkin | `acceptance-criteria` | true |
129
+ | S5 Bug-specific content | `product-clarity` | true |
130
+ | S6 Spike-specific content | `scope` | true |
131
+ | S7 Parent sub-issue declared | `structural` | false |
132
+ | S8 Target Backend Environment | `technical` | false |
133
+ | S9 Sign-in Required | `technical` | false |
134
+ | S10 Single-repo scope | `scope` | false |
135
+ | S11 Validation Journey | `acceptance-criteria` | true |
136
+ | S12 Source Precedence | `design-ux` | true |
137
+ | S13 Relationship Search | `dependency` | true |
138
+ | S14 Evidence manifest binding (leaf work units) | `acceptance-criteria` | true |
139
+ | S15 Leaf-only build-ready | `structural` | false |
140
+ | S16 Source Requirement traceability | `product-clarity` | true |
141
+ | S17 Improvement measurability | `acceptance-criteria` | true |
142
+ | S18 Stateless-pickup dry-run | `product-clarity` | true |
143
+ | S19 Branch Plan derivation | `technical` | false |
144
+ | S20 Named-control reachability | `acceptance-criteria` | true |
145
+ | F1 Issue type label exists in repo | `structural` | false |
146
+ | F2 Parent sub-issue exists and is the right type | `structural` | false |
147
+ | F3 Linked issues exist | `structural` | false |
148
+ | F4 Required labels populated | `structural` | false |
149
+ | F5 Required external access provable | `technical` | true |
150
+
151
+ Category values are the same fixed set as `lisa-jira-validate-ticket`:
152
+
153
+ - `product-clarity`, `acceptance-criteria`, `design-ux`, `scope`, `dependency`, `data`, `technical`, `structural`.
154
+
155
+ ### Specification Gates
156
+
157
+ #### S1 — Required core fields
158
+
159
+ `org`, `repo`, `issue_type`, `summary`, `priority`, `body` must all be present and non-empty.
160
+
161
+ #### S2 — Summary format
162
+
163
+ - Single line, ≤ 100 characters.
164
+ - Imperative voice ("Add X", "Fix Y", not "Adding X" or "X is broken").
165
+ - Bug / Task / Sub-task summaries SHOULD start with a `[repo-name]` prefix when the project convention uses one.
166
+
167
+ #### S3 — Description has all three audiences
168
+
169
+ Body must include all of these sections (case-insensitive `## ` headings):
170
+
171
+ - `Context / Business Value` — stakeholder-facing
172
+ - `Technical Approach` — developer-facing
173
+ - `Acceptance Criteria` — coding-assistant-facing
174
+ - `Out of Scope` — explicit non-coverage list
175
+
176
+ Missing any → FAIL with name of missing section.
177
+
178
+ #### S4 — Acceptance criteria in Gherkin
179
+
180
+ Applies when `issue_type ∈ {Story, Task, Bug, Sub-task, Improvement}`.
181
+
182
+ The `## Acceptance Criteria` section must contain at least one `Scenario:` block with `Given / When / Then` form, ideally inside a ` ```gherkin ` code fence. Reject prose-only criteria, "should work" language, or numbered lists without Given/When/Then verbs.
183
+
184
+ #### S5 — Bug-specific content
185
+
186
+ When `issue_type = Bug`, body must additionally include the full bug anatomy from the `work-item-definition-of-ready` rule:
187
+
188
+ - **Agent-executable reproduction** — numbered steps a stateless agent can run mechanically: exact entry point, named account/role (consistent with Sign-in Required when authenticated), concrete data state, exact actions. Human-followable-only prose ("click around until it breaks") FAILs. A linked failing test satisfies this outright and is the preferred form.
189
+ - **Expected vs. actual behavior**, naming or linking the *source* of "expected" (spec, PRD requirement, prior release behavior) — a fix target is a fact, not an opinion.
190
+ - **Environment + version** — where reproduced and the build/commit observed; last-known-good when known (`unknown` must be stated, not omitted).
191
+ - **Reproducibility rate** — always, or intermittent with observed frequency; intermittent invalidates run-once verification.
192
+ - **Occurrence evidence** — at least one link/attachment: error-tracker issue, log excerpt, stack trace, screenshot/recording.
193
+
194
+ A Bug's terminal state is its reproduction: the same steps (or test) fail before the fix and pass after — capture both as evidence: under the S14 manifest when `runtime_behavior_change = true`, or attached directly to the item for non-runtime Bugs (doc/config fixes), where S14 is N/A.
195
+
196
+ #### S6 — Spike-specific content
197
+
198
+ When `issue_type = Spike`, body must include:
199
+
200
+ - The **question** being answered
201
+ - The **decision** the answer enables, and the options being weighed
202
+ - A **timebox**
203
+ - **Deliverable format and location** — decision doc / prototype / findings page, and where it will live, so the terminal state — a deliverable at that location that actually answers the question, with findings, decision and options — is checkable
204
+
205
+ Gherkin AC is intentionally N/A for Spikes (S4).
206
+
207
+ #### S7 — Parent sub-issue declared
208
+
209
+ When `issue_type ∉ {Bug, Epic}`, `parent_ref` must be set — **except for a build-ready leaf work unit**, which may stand alone. A flat `Task` / `Improvement`, or a childless `Story` / `Spike` (no open child work) with `build_ready = true`, is an independently claimable leaf per `leaf-only-lifecycle`, which states such leaves "must not be stranded"; for these a missing parent is `N/A`, not a FAIL. This mirrors the leaf carve-out already in S10/S15. A `Sub-task` is exempt from this exception — it always requires a parent. When a parent IS declared, the native sub-issue link is set by `lisa-github-write-issue` Phase 6 step 3. (Validity of a declared parent is checked in feasibility gate F2.)
210
+
211
+ #### S8 — Target Backend Environment
212
+
213
+ Every leaf work unit carries `## Target Backend Environment` in the body. The section is where `runtime_behavior_change` is persisted, so it is rendered for exempt work too — see the declaration grammar at the end of this gate. Read accepted environments from the exact configured keys of `.lisa.config.json` `deploy.branches`, never from a hardcoded list. Accept a human-confirmed bare exact configured key or `Confirmed: <env>`, automated `Inferred: <env> — evidence: <title|body|reproduction|hostname>`, automated `Assumption: <env> — remote default branch <branch>` for a unique reverse-map, or `Assumption: remote default branch <branch>` when no unique reverse-map exists. Human confirmation replaces an automated annotation with the bare key or `Confirmed: <env>`. For legacy bare values, use managed draft markers and current ticket content only; provider edit history is not required. A marker proves automation and requires re-annotation; otherwise unknown provenance plus conflicting evidence fails for confirmation. Validate the annotation shape/source and remote-default branch; validate `<env>` as an exact configured key whenever present. A valid branch-only assumption must not fail solely because its reverse-map is absent or ambiguous. Normalize built-in `prod` ↔ `production` only when exactly one of those keys is configured. No other aliases are valid.
214
+
215
+ **The section persists `runtime_behavior_change`, so it is never simply skipped.** Work that changes no runtime behavior declares the exemption in place of an environment: `None — no runtime behavior change: doc-only` (or `config-only` / `type-only`). A container (an Epic, or any issue holding child work) declares `None — container: state rolls up from children`. The `None —` prefix is the machine discriminator; the words after it are for the human reading the issue.
216
+
217
+ Derive the flag from the stored content, never from a caller's word about a live issue: an exact configured environment key means `true`, a `None —` declaration means `false`, and an **absent section means underivable** — never `false`. On a live issue the stored declaration is authoritative, so a caller asserting a `runtime_behavior_change` that contradicts it **FAILs** this gate naming both values rather than silently preferring either; one of the two is wrong, and picking one quietly is how an unauditable gate gets built. A **proposed spec** with no section **FAILs** — `lisa-github-write-issue` must render it before the write. A **live legacy issue** with no section is `N/A` with a repair note routed to claim time: the same asymmetry S19 uses, for the same reason, because failing every existing issue would turn a legacy queue red for a section no human had a way to add.
218
+
219
+ #### S9 — Sign-in Required
220
+
221
+ When `authenticated_surface = true`, body must contain `## Sign-in Required` naming the account/role and credential source.
222
+
223
+ If the spec doesn't set `authenticated_surface`, infer it: scan the body and AC for sign-in / login / "as a {role} user" / authenticated route signals. If signals present and no `Sign-in Required` section: FAIL.
224
+
225
+ #### S10 — Repository section, single-repo scope
226
+
227
+ When `issue_type ∈ {Bug, Task, Sub-task, Improvement}` — or a **build-ready childless Story/Spike** (a claimable leaf per `leaf-only-lifecycle`) — body must contain `## Repository` naming exactly one repo. Multiple repos OR cross-repo references in AC: FAIL with recommendation `"Split into per-repo work units under a shared parent Story (see lisa-task-decomposition step 1.5)"`.
228
+
229
+ (GitHub Issues live in one repo by definition, so the `## Repository` section is technically redundant — keep it for parity with the JIRA path so downstream tooling sees the same shape. Cross-repo references in AC are still possible and still fail this gate.)
230
+
231
+ An **Epic**, or a **Story/Spike that still holds child work** (or is not build-ready): skipped (may span repos — coordination containers, not claimable leaf work units).
232
+
233
+ This gate is `product_relevant: false` because cross-repo work units are not a product question — they are a decomposition error. Callers (`lisa-github-to-tracker`, `lisa-notion-to-tracker`, etc.) MUST pre-split cross-repo work into per-repo work units during the decomposition phase per `lisa-task-decomposition` step 1.5; an S10 failure here indicates the agent skipped that step and must auto-split + revalidate before writing, not surface a clarifying comment to product.
234
+
235
+ #### S11 — Validation Journey present
236
+
237
+ When `runtime_behavior_change = true`, body must contain `## Validation Journey`. Skipped for doc-only / config-only / type-only / Epic. When `runtime_behavior_change` is **underivable** — a live legacy issue whose body carries no Target Backend Environment declaration (S8) — this gate is `N/A` with the same repair note rather than `PASS`, because a requirement conditioned on a flag nobody recorded cannot be asserted either way.
238
+
239
+ The caller controls strictness via `journey_followup`:
240
+ - `auto` (default): missing section is FAIL with remediation `"Invoke lisa-github-add-journey to append the section after create"`. Callers like `lisa-github-write-issue` know to chain the followup automatically.
241
+ - `none`: missing section is FAIL the caller will not auto-fix (used by dry-run paths).
242
+
243
+ #### S12 — Source Precedence (when artifacts attached)
244
+
245
+ When `artifacts_attached = true`, body must include source-precedence guidance covering: business rules → PRD body, visual treatment → mocks, flow → prototypes, API/data → data artifacts. Cross-axis conflicts surfaced under `## Open Questions`.
246
+
247
+ Accept either placement:
248
+ - A dedicated `## Source Precedence` subsection, OR
249
+ - A "Source Precedence" / "authoritative source" paragraph under `## Technical Approach`.
250
+
251
+ Detect by scanning for the phrase `Source Precedence` (case-insensitive) AND verifying the four axes (business rules, visual, flow, data) are each named.
252
+
253
+ If the spec doesn't set `artifacts_attached`, infer it the same way S9 infers sign-in: scan the body for design/mock/prototype/data-artifact references (design-tool links, "mock", "prototype", spreadsheet or API artifacts). If such artifacts are referenced and no source-precedence guidance exists: FAIL.
254
+
255
+ #### S13 — Relationship Search documented
256
+
257
+ The issue must EITHER have at least one entry in `links`, OR the body must contain a `## Relationship Search` block listing the git history queries and `gh issue list` queries that were run with their outcomes. ("Searched git history for `<keywords>` and `gh issue list` for label `component:X`; no related work found.")
258
+
259
+ An issue with zero links and no documented search: FAIL.
260
+
261
+ #### S14 — Evidence manifest binding (leaf work units)
262
+
263
+ When `issue_type ∈ {Bug, Task, Sub-task, Improvement}` AND `runtime_behavior_change = true`, the `## Validation Journey` must declare at least one **typed** `[EVIDENCE: <artifact-type>: <name>]` marker. These markers are the work unit's **evidence manifest** — the exact, enumerated set of artifacts that must be captured and attached before the issue may be closed (see the "Per-Work-Unit Evidence Contract" section of the `verification` rule, the Definition of Done in `verification-lifecycle`, and the evidence-manifest gate in `tracker-evidence`).
264
+
265
+ Each marker must satisfy ALL of:
266
+
267
+ - `<artifact-type>` is one of the fixed taxonomy: `screenshot`, `recording`, `http-transcript`, `cli-output`, `log-snippet`, `db-query-output`, `perf-trace`, `test-run-log`, `deploy-log`, `state-dump`. (The legacy `[SCREENSHOT: name]` form is accepted as `screenshot`.)
268
+ - `<name>` is kebab-case and unique within the issue.
269
+
270
+ **A marker names an artifact, not an assertion.** An untyped marker (`[EVIDENCE: load-failure-handled-gracefully]`) is an assertion label with nothing to capture and must FAIL, with a remediation that shows the typed transformation (e.g. → `[EVIDENCE: screenshot: load-failure-error-state]`, `[EVIDENCE: perf-trace: pipeline-load-tti]`).
271
+
272
+ FAIL when the Validation Journey is present but declares zero binding `[EVIDENCE: ...]` markers, when any binding marker is untyped or uses a type outside the taxonomy, or when any binding name is empty, duplicated, or not kebab-case. A behavior-changing work unit SHOULD declare both a success marker and an error/edge marker; a journey with only one binding marker passes but the remediation should recommend adding the error/edge case.
273
+
274
+ Parse claiming markers by the exact `[EVIDENCE:` prefix. A cross-work-item pointer in the canonical form `[EVIDENCE-REF: <work-item-ref> | <artifact-type>: <kebab-case-name>]` is non-claiming. The Lisa 2.223.0 form `[EVIDENCE-REF: <tracker-ref>: <artifact-type>: <kebab-case-name>]` is also accepted as a legacy non-claiming alias; parse it from the right so the final two fields are type/name and a tracker URL may contain `:`. Exclude both forms from the manifest, S14's minimum-marker count, local marker type/name validation, and duplicate-name checks. Independently validate every `EVIDENCE-REF`: the native work-item reference must be non-empty and unambiguous, the artifact type must use the fixed taxonomy, and the name must be non-empty kebab-case. A malformed reference FAILs S14 as an invalid pointer but never becomes a local evidence obligation. A valid canonical or legacy reference may point to a sibling's artifact, but it never satisfies S14 for this issue. Therefore a runtime-changing leaf whose journey contains only `EVIDENCE-REF` entries FAILs S14 for zero local claiming markers, not because a valid legacy reference is malformed. Quoting or code-formatting another issue's `[EVIDENCE: ...]` marker does not make it a reference; writers must convert it to the canonical pipe form.
275
+
276
+ This gate depends on S11. It is `N/A` for containers — an **Epic**, or any item with open child work (coordination containers, not work units) — and for leaf units with `runtime_behavior_change = false` (doc-only / config-only / type-only). If S11 fails because the Validation Journey is absent, S14 also FAILs (there is no manifest to bind) with remediation pointing back to `lisa-github-add-journey`. It is likewise `N/A` with a repair note when `runtime_behavior_change` is **underivable** under S8 — reading an absent declaration as `false` is exactly the silent assumption that made this gate unauditable on a live issue.
277
+
278
+ #### S15 — Leaf-only build-ready
279
+
280
+ Enforces the build-side of the vendor-neutral `leaf-only-lifecycle` rule: **only a leaf work unit may carry the build-ready role.** Before evaluating this gate, resolve `READY_ROLE` from merged project config (`.lisa.config.local.json` over `.lisa.config.json`) at `github.labels.build.ready`, defaulting to `status:ready` per `config-resolution`. Use that resolved value everywhere this validator interprets build readiness; a project-specific label is not an alias for the literal default.
281
+
282
+ This is the symmetric write-side guard for the GitHub validator — a stale or hand-applied `READY_ROLE` on a container is a lifecycle error and must FAIL here, regardless of how the issue was produced. (Mirrors the "Build-ready label is leaf-only" rule that `lisa-github-write-issue` applies at write time.)
283
+
284
+ **When the gate applies.** Run S15 whenever the issue is build-ready — i.e. `build_ready = true`, or the spec/live labels include the resolved `READY_ROLE`. If the issue is not build-ready, S15 is `N/A` (nothing claims a non-ready issue, so the invariant is vacuous). For example, if `github.labels.build.ready = "queue:approved"`, a container carrying `queue:approved` FAILs S15 even when it does not carry the literal `status:ready` default.
285
+
286
+ **Resolve container vs. leaf — structural first, then nominal.** Per `leaf-only-lifecycle` the classification is structural: an item is a **container** if it has child work, whatever its declared type; otherwise the **type label** decides. Determine child work from (in order) `child_refs`, native sub-issues, body task-list checkboxes, and `Blocked by #<n>` / parent references — the same hierarchy resolution `lisa-github-read-issue` uses. When validating a live ref, query sub-issues alongside the issue fetch.
287
+
288
+ Apply this decision and FAIL the two invariant-violating cases:
289
+
290
+ 1. **Container with child work + build-ready** — child work is present (any type that has open children), AND build-ready. FAIL. A parent organizes work; it is never claimed and implemented directly. Its lifecycle state rolls up from its children.
291
+ 2. **Childless Epic + build-ready** — `issue_type = Epic` with **no** child work, AND build-ready. Still FAIL: an Epic is a pure rollup container by design, and a childless one is an incomplete decomposition or a mis-applied role, not an implementable unit. (A childless Story or Spike is **not** failed here — the childless-parent exception in `leaf-only-lifecycle` promotes every childless non-Epic type to a build-ready leaf.)
292
+
293
+ PASS (the childless-parent exception) when the issue is build-ready and is a **leaf work unit**: it has **no** open child work and `issue_type ≠ Epic` (i.e. `Bug, Task, Sub-task, Improvement`, or a childless `Story` / `Spike`). A flat Task/Bug, or a childless Story/Spike with no sub-issues, is a valid build-ready leaf and must not be stranded.
294
+
295
+ | issue_type | has child work | build-ready | S15 |
296
+ |---|---|---|---|
297
+ | Bug / Task / Sub-task / Improvement / Story / Spike | no | yes | **PASS** (leaf) |
298
+ | any type | yes | yes | **FAIL** (structurally a container) |
299
+ | Epic | no | yes | **FAIL** (childless Epic — pure rollup container, exception does not apply) |
300
+ | any | any | no | **N/A** (not build-ready) |
301
+
302
+ Remediation (render `<READY_ROLE>` as the resolved configured label, never as a hard-coded default): `"Build-ready is leaf-only per leaf-only-lifecycle. Move <READY_ROLE> off this container onto its leaf children (or, for a childless Epic, decompose it into leaf children or reclassify it to a leaf type); a parent's lifecycle state rolls up from its children and is never set to ready directly."`
303
+
304
+ `product_relevant: false` — a build-ready container is a lifecycle/decomposition error for the caller to repair, not a product question.
305
+
306
+ #### S16 — Source Requirement traceability (PRD-sourced issues)
307
+
308
+ Answers "why was this done?": every issue generated from a PRD must carry
309
+ the requirement it exists to satisfy, quoted verbatim, at every level of
310
+ the hierarchy — sub-issues included, so a leaf claimed by build-intake in
311
+ isolation is self-explanatory.
312
+
313
+ **When the gate applies.** Run S16 whenever the spec declares `prd_source`
314
+ (all `*-to-tracker` decomposition paths set it). Without `prd_source`
315
+ (ad-hoc issues with no PRD lineage) the gate is `N/A` — but if a
316
+ `Source Requirement` section is present anyway, still validate its shape
317
+ so a malformed section never passes silently.
318
+
319
+ **What must be present.** a `Source Requirement` section (`##` markdown heading) containing:
320
+
321
+ 1. A link to the source PRD (the `**PRD**:` line), and
322
+ 2. At least one `**Requirement` line with **verbatim quoted text**, or the
323
+ explicit derived-work form (`Derived work supporting R3, R7 — no single
324
+ PRD section.`).
325
+
326
+ Missing section, missing PRD link, empty/paraphrased requirement text
327
+ (quotes shorter than a few words, or prose with no quotation), or a bare
328
+ R-id with no quote: FAIL with remediation
329
+ `"Add a Source Requirement section citing the PRD link and quoting the requirement(s) this issue satisfies verbatim (see the Source Requirement shared format in the *-to-tracker skills). Derived work must name the requirements it supports."`
330
+
331
+ `product_relevant: true` — a issue whose requirement cannot be traced is
332
+ a product-clarity problem: nobody can tell why the work exists.
333
+
334
+ #### S17 — Improvement measurability
335
+
336
+ When `issue_type = Improvement`, the body must define the improvement as a measured delta per `work-item-definition-of-ready`:
337
+
338
+ - **Metric + measurement method** the agent can run (command, query, dashboard export)
339
+ - **Baseline** — the current measured value (a number, not an adjective)
340
+ - **Target** — the numeric value or bound that defines done
341
+
342
+ Without a baseline and a target an Improvement has no verifiable terminal state and can never be autonomously closed. FAIL names the missing pieces; when no baseline exists yet, the remediation is to file measuring it as the first step. `N/A` for every other type.
343
+
344
+ #### S18 — Stateless-pickup dry-run
345
+
346
+ The autonomy gate, run last, on every build-ready leaf (use the S15 classification; `N/A` for containers and non-build-ready items). Simulate a stateless agent reading only this item and the links it can resolve — session knowledge about the codebase does not count, because the next claimant will not have it. List every question that agent would have to ask a human before starting work, before choosing between materially different implementations, or before declaring the work done.
347
+
348
+ Zero questions → PASS. Any question → FAIL, with each question listed verbatim as its own remediation line — these are exactly the clarifying comments the caller posts to the source. The structure gates are proxies; this gate checks the readiness property itself: `ready` means a stateless agent can drive this item to its terminal state with zero human clarification (see `work-item-definition-of-ready`).
349
+
350
+ #### S19 — Branch Plan derivation
351
+
352
+ Enforces the `derived-branch-plan` rule: the `## Branch Plan` section is **derived only** — recompute it from current config and compare; never trust the rendered branches or read them as input. Resolve the environment under the S8 grammar, map that exact configured key forward through `.lisa.config.json` `deploy.branches`, and require the mapped branch on the remote.
353
+
354
+ | Case | Verdict |
355
+ |---|---|
356
+ | `runtime_behavior_change = false` (doc-only / config-only / type-only) or an Epic/container, with no plan | `N/A` — absence is correct; never demand one |
357
+ | Exempt work **carrying** a `## Branch Plan` | **FAIL** — hand-authored branches on work that declared no runtime target |
358
+ | `runtime_behavior_change` **underivable** (live legacy item, no Target Backend Environment declaration) | `N/A` with a repair note — absence is never read as `false` |
359
+ | Plan matches the recomputed plan | PASS |
360
+ | Plan conflicts with the recomputed plan | **FAIL** |
361
+ | Plan missing the `Derived from:` provenance line and disagreeing | **FAIL** — treated as hand-authored |
362
+ | `Branch from` and `PR into` name two different branches | **FAIL** — malformed; they are the same branch by construction |
363
+ | Derivation hits a stop condition (env absent from `deploy.branches`, ambiguous / non-unique mapping, branch missing on the remote) | **FAIL** — the same stop `lisa-implement` takes; never default to `main` or the remote default |
364
+ | Proposed spec (pre-write) for applicable work with no plan | **FAIL** — `lisa-github-write-issue` must render it before the write |
365
+ | Live **legacy** issue for applicable work with no plan | `N/A` with a repair note — routed to claim time, where `lisa-implement` writes the derived assumption as a comment and proceeds |
366
+
367
+ Failing a proposed spec is free; failing every existing issue would turn a legacy queue red for a section no human had a way to add, so legacy absence is repaired at claim time instead.
368
+
369
+ FAIL names both plans (rendered and recomputed) and points the remediation at **the environment, never the branch** — e.g. `"Branch Plan conflicts with the environment mapping. Rendered 'Branch from: release/staging'; recomputed from Target Backend Environment 'production' via deploy.branches → 'main'. Correct the environment, not the branch — the branches are derived. Then re-render."` Never silently choose between the two plans.
370
+
371
+ #### S20 — Named-control reachability
372
+
373
+ Enforces the vendor-neutral `control-reachability` rule: **a work item that names an existing test as a red-before-green control must say what makes that test reach the code the change touches.** A control whose reachability cannot be stated is not a control — its green tells the implementer nothing, and the issue's own stopping rule then instructs a revert of a correct fix.
374
+
375
+ **When the gate applies.** Run S20 when the body — `Acceptance Criteria`, `Technical Approach`, or `Validation Journey` — names an **existing** test AND predicts a state change for it when the work lands. Signals: "must go red", "currently passes and must fail", "fails before the fix and passes after", "if it still passes the fix did nothing", or any equivalent stopping rule.
376
+
377
+ **When it must stay silent.** `N/A` otherwise. A issue that introduces a **new** test rather than pinning an existing one carries no reachability obligation and must never be reported as incomplete on this basis. This half is load-bearing: a gate that fires on every work item is one callers learn to route around.
378
+
379
+ **What must be present.** One marker per named control, inside `## Validation Journey`:
380
+
381
+ ```text
382
+ [CONTROL: <test-identifier> | reaches: <input-or-field>]
383
+ ```
384
+
385
+ Parse by the exact `[CONTROL:` prefix and split on the single `|`.
386
+
387
+ - `<test-identifier>` — non-empty; the test file path, the test name, or both. It must be enough to run the test.
388
+ - `reaches:` — the literal key, then a non-empty description of the **input, field, fixture key, argument, or state** that carries execution into the changed code.
389
+
390
+ FAIL when a named existing-test control has no marker, when a marker is malformed (missing the `|`, an empty identifier, a missing or empty `reaches:` half), or when the `reaches:` half restates the assertion instead of naming an input (`reaches: the fix`, `reaches: the changed code path`). Naming the code is not enough; the marker answers "what in this fixture gets execution there".
391
+
392
+ Remediation: `"Name the input or field that makes <test> reach the code this work changes, as [CONTROL: <test> | reaches: <field>]. If the fixture does not reach it, the test cannot observe this change — extend the fixture or specify a new test instead."`
393
+
394
+ `product_relevant: true` — an unfalsifiable stopping rule is a specification defect, and whoever wrote the issue is who can repair it. `lisa-github-write-issue` renders the marker; `control-reachability` carries the implementer-side counterpart, which forbids acting on the stopping rule before the cause of an unmoved control is established.
395
+
396
+ ### Feasibility Gates (require GitHub lookups; skip in `--spec-only`)
397
+
398
+ #### F1 — Issue type label exists in repo
399
+
400
+ ```bash
401
+ gh label list --repo <org>/<repo> --json name --jq '.[].name'
402
+ ```
403
+
404
+ Confirm `type:<issue_type>` exists. Missing labels can be auto-created by `lisa-github-write-issue` Phase 5 — flag the absence as a structural FAIL with remediation "Run `gh label create type:<issue_type>` or let the write path auto-create."
405
+
406
+ #### F2 — Parent sub-issue exists and is the right type
407
+
408
+ When `parent_ref` is set:
409
+
410
+ ```bash
411
+ gh issue view <number> --repo <org>/<repo> --json number,labels,state
412
+ ```
413
+
414
+ Confirm the parent issue exists and:
415
+
416
+ - For an `Epic` child, first resolve whether the validator can prove the native PRD-parent shape
417
+ allowed by `prd-lifecycle-rollup`: merged project config has `source = github` and
418
+ `tracker = github`; the spec/live child's `org` and `repo` match configured `github.org` and
419
+ `github.repo`; and `parent_ref` names that same `org/repo`. These facts are available from the
420
+ existing spec/live ref plus project config; do not infer the exception from label spelling alone.
421
+ Only in that proven same-repository GitHub self-host shape may the parent qualify by having one of
422
+ the configured PRD lifecycle labels from
423
+ `github.labels.prd` (`draft`, `ready`, `in_review`, `blocked`, `ticketed`, `shipped`, or
424
+ `verified`; defaults use the `prd-*` namespace). Resolve the configured values from
425
+ `.lisa.config.local.json` over `.lisa.config.json`, using the defaults from `config-resolution`.
426
+ The `sentinel` label is not a lifecycle role and does not qualify. This is the native
427
+ PRD→generated-Epic hierarchy used when GitHub is both source and tracker in one repository; the
428
+ PRD parent does **not** need `type:Epic`. If any self-host/same-repository predicate is false, a
429
+ PRD label does not grant the exception: native hierarchy cannot cross repositories or source
430
+ systems, so a PRD-labelled parent alone FAILs F2.
431
+ - For a `Sub-task` child: the parent has `type:Story`, `type:Task`, `type:Bug`, or
432
+ `type:Improvement` (anything that can host sub-tasks). This allowlist is unchanged; a PRD
433
+ lifecycle label or `type:Epic` alone does not qualify.
434
+ - For every other non-Sub-task child: the parent has `type:Epic`. A PRD lifecycle label alone does
435
+ not qualify, so the Epic→Story (and Epic→ordinary-leaf) hierarchy remains enforced.
436
+
437
+ | child type | relationship shape | qualifying parent label | F2 |
438
+ |---|---|---|---|
439
+ | `Epic` | source GitHub + tracker GitHub + configured child repo = parent repo | configured PRD lifecycle label | **PASS** |
440
+ | `Epic` | cross-repository or source/tracker is not same-repo GitHub | PRD lifecycle label only | **FAIL** |
441
+ | `Epic` | permitted self-host shape | unconfigured `prd-*` lookalike or `prd-intake-feedback` sentinel only | **FAIL** |
442
+ | `Sub-task` | any | `type:Story`, `type:Task`, `type:Bug`, or `type:Improvement` | **PASS** |
443
+ | `Sub-task` | any | PRD lifecycle label or `type:Epic` only | **FAIL** |
444
+ | any other non-Sub-task | any | `type:Epic` | **PASS** |
445
+ | any other non-Sub-task | any | PRD lifecycle label only | **FAIL** |
446
+
447
+ #### F3 — Linked issues exist
448
+
449
+ For each entry in `links`, run `gh issue view <number> --repo <link-org>/<link-repo>` to confirm the ref resolves. Flag broken refs.
450
+
451
+ #### F4 — Required labels populated
452
+
453
+ Per `Phase 5` of `lisa-github-write-issue`, every issue MUST carry
454
+ `type:<issue_type>` and `priority:<priority>`. These two labels are unconditional: if either is
455
+ missing from the proposed spec or live issue, FAIL with the missing label name.
456
+
457
+ The `status:*` requirement uses this validator's S15 leaf/container classification while preserving
458
+ the writer's documented `build_ready` control-input defaults, which the `ready-role-filing` rule
459
+ fixes at "omitted is NOT build-ready" for every vendor:
460
+
461
+ 1. Classify the issue structurally using the S15 child-resolution rules. A container (any issue
462
+ with child work, plus a childless `Epic`) may omit `status:*`; its state rolls up rather than
463
+ being assigned directly.
464
+ 2. For a proposed leaf spec, normalize omitted `build_ready` to `false`, per `ready-role-filing`:
465
+ ready is an explicit claim, so only `build_ready: true` asserts it. Explicit `build_ready: false`
466
+ means the same backlog mode. (This validator previously normalized omitted → `true` to mirror
467
+ GitHub's implicit-ready writer default; both were removed together, and re-introducing either
468
+ here would just move the leak.)
469
+ 3. For a live issue ref, derive `build_ready` from the labels (`true` exactly when the S15-resolved
470
+ `READY_ROLE` from `github.labels.build.ready`, default `status:ready`, is present). A live backlog leaf without a status label
471
+ therefore validates as `build_ready: false`; live data cannot distinguish an explicit false from
472
+ a historical write that omitted the label.
473
+ 4. A leaf with normalized `build_ready: true` MUST carry that same resolved `READY_ROLE`. A leaf with `build_ready: false` may omit
474
+ `status:*`.
475
+
476
+ | classification | normalized build_ready | status label | F4 |
477
+ |---|---:|---|---|
478
+ | container | any | omitted | **PASS** |
479
+ | leaf | `false` | omitted | **PASS** |
480
+ | leaf | `true` | configured build-ready role (`status:ready` by default) | **PASS** |
481
+ | leaf | `true` | omitted or a different `status:*` label | **FAIL** |
482
+
483
+ F4 does not make a container build-ready. S15 remains the independent lifecycle prohibition: any
484
+ container carrying the build-ready role still FAILs S15, even though F4's status-presence check is
485
+ not applicable to containers.
486
+
487
+ #### F5 — Required external access provable
488
+
489
+ The factory-gate rule: an input must not enter the pipeline unless the current runtime can actually
490
+ reach every external surface the work requires. Enumerate the surfaces this issue depends on:
491
+
492
+ - artifact links in the body (documents, designs, dashboards, spreadsheets, recordings),
493
+ - systems named by the description, acceptance criteria, or Validation Journey ("read the CloudWatch
494
+ alarms", "pull the copy from the Google Doc", "check the Sentry issues"),
495
+ - tooling the work plainly implies (a deploy target, a database, a third-party API).
496
+
497
+ For each surface, prove **read** access from the current runtime with a target-resource-specific,
498
+ read-only probe through its sanctioned access layer: the matching MCP tool or `lisa-*-access` skill,
499
+ or an authenticated fetch using environment-injected authentication. Identity-only commands such as
500
+ `aws sts get-caller-identity`, `gh auth status`, and vendor equivalents are preflight checks only;
501
+ they never satisfy F5 by themselves. A successful probe for one surface does not cover another:
502
+ reading the named GitHub repository, CloudWatch log group, Sentry project, or linked document must
503
+ each succeed separately when that surface is required.
504
+
505
+ Attempt to resolve a gap before failing, but only through another configured brokered access layer
506
+ or environment-injected authentication. A sanctioned broker may use its own credential store
507
+ internally; the validator must never autonomously inspect, read, copy, print, or export raw
508
+ credentials, keychains, credential files, or token stores, and must never invoke low-level secret
509
+ tools to recover them. This preserves the intake agent's discover-first duty without exposing
510
+ credential material.
511
+
512
+ - `PASS` — every required surface has its own successful target-resource read probe or authenticated
513
+ fetch through the sanctioned access layer.
514
+ - `N/A` — the issue needs nothing beyond the repository and the tracker itself.
515
+ - `FAIL` — a required surface is unreachable after the resolution attempt. Name the exact surface
516
+ and what was probed. Intake callers must route this to `blocked` + human escalation with the
517
+ missing access spelled out — an input the factory cannot execute never enters the factory.
518
+
519
+ Probes are read-only and bounded (seconds, not minutes, per surface); never mutate the external
520
+ system, and never invent or ask for credentials inline.
521
+
522
+ ## Execution
523
+
524
+ 1. Parse `$ARGUMENTS`. Resolve `READY_ROLE` from merged `github.labels.build.ready` config (default `status:ready`). If the input is an issue ref, fetch via `gh issue view --json` and derive the spec fields — including `runtime_behavior_change` (from the `## Target Backend Environment` declaration: an exact configured environment key → `true`, a `None —` declaration → `false`, an absent section → **underivable**, never `false`), `build_ready` (label set contains the resolved `READY_ROLE`, not a hard-coded label) and `child_refs` (native sub-issues plus body task-list / `Blocked by #<n>` parentage, resolved as in `lisa-github-read-issue`) so S15 can classify the issue. Otherwise parse the YAML spec and preserve the proposed `build_ready` value for S15/F4 normalization.
525
+ 2. Confirm `gh auth status` succeeds before any feasibility gate runs.
526
+ 3. Run every Specification gate in order. Collect PASS / FAIL / N/A with a one-line reason.
527
+ 4. Unless the caller passed `--spec-only`, run every Feasibility gate.
528
+ 5. Emit the report below.
529
+
530
+ ## Output
531
+
532
+ Output is a single fenced text block. Callers parse it; do not add free-form prose around it.
533
+
534
+ ```text
535
+ ## github-validate-issue: <ISSUE-REF-or-SUMMARY>
536
+
537
+ ### Specification Gates
538
+ - [PASS|FAIL|N/A] S1 Required core fields — <one-line reason>
539
+ - [PASS|FAIL|N/A] S2 Summary format — <one-line reason>
540
+ - [PASS|FAIL|N/A] S3 Description three audiences — <one-line reason>
541
+ - [PASS|FAIL|N/A] S4 Acceptance criteria in Gherkin — <one-line reason>
542
+ - [PASS|FAIL|N/A] S5 Bug-specific content — <one-line reason>
543
+ - [PASS|FAIL|N/A] S6 Spike-specific content — <one-line reason>
544
+ - [PASS|FAIL|N/A] S7 Parent sub-issue declared — <one-line reason>
545
+ - [PASS|FAIL|N/A] S8 Target Backend Environment — <one-line reason>
546
+ - [PASS|FAIL|N/A] S9 Sign-in Required — <one-line reason>
547
+ - [PASS|FAIL|N/A] S10 Single-repo scope — <one-line reason>
548
+ - [PASS|FAIL|N/A] S11 Validation Journey — <one-line reason>
549
+ - [PASS|FAIL|N/A] S12 Source Precedence — <one-line reason>
550
+ - [PASS|FAIL|N/A] S13 Relationship Search — <one-line reason>
551
+ - [PASS|FAIL|N/A] S14 Evidence manifest binding — <one-line reason>
552
+ - [PASS|FAIL|N/A] S15 Leaf-only build-ready — <one-line reason>
553
+ - [PASS|FAIL|N/A] S16 Source Requirement traceability — <one-line reason>
554
+ - [PASS|FAIL|N/A] S17 Improvement measurability — <one-line reason>
555
+ - [PASS|FAIL|N/A] S18 Stateless-pickup dry-run — <one-line reason>
556
+ - [PASS|FAIL|N/A] S19 Branch Plan derivation — <one-line reason>
557
+ - [PASS|FAIL|N/A] S20 Named-control reachability — <one-line reason>
558
+
559
+ ### Feasibility Gates (omit this section when --spec-only)
560
+ - [PASS|FAIL|N/A] F1 Issue type label exists in repo — <one-line reason>
561
+ - [PASS|FAIL|N/A] F2 Parent sub-issue exists and is the right type — <one-line reason>
562
+ - [PASS|FAIL|N/A] F3 Linked issues exist — <one-line reason>
563
+ - [PASS|FAIL|N/A] F4 Required labels populated — <one-line reason>
564
+ - [PASS|FAIL|N/A] F5 Required external access provable — <one-line reason>
565
+
566
+ ### Verdict: PASS | FAIL
567
+ ### Failures: <count>
568
+ ### Failure details
569
+ - gate: <gate-id>
570
+ category: <product-clarity|acceptance-criteria|design-ux|scope|dependency|data|technical|structural>
571
+ product_relevant: <true|false>
572
+ what: <plain-language description, no gate IDs, no GitHub jargon — written for a non-engineer product owner>
573
+ recommendation: <1–3 concrete options the caller (or downstream product team) can pick from. Never "clarify this".>
574
+ - gate: <gate-id>
575
+ ...
576
+ ```
577
+
578
+ The verdict is `PASS` if every applicable gate is `PASS`. Any `FAIL` makes the verdict `FAIL`. `N/A` does not affect the verdict.
579
+
580
+ ### Failure-detail fields
581
+
582
+ Same shape and meaning as `lisa-jira-validate-ticket` so downstream PRD-intake skills (Notion, Confluence, Linear, GitHub) can format comments uniformly:
583
+
584
+ - **gate**: the gate ID (`S1`–`S20`, `F1`–`F5`).
585
+ - **category**: the gate's fixed category from the table.
586
+ - **product_relevant**: matches the gate's table entry. `false` means the failure is an internal data-quality problem the caller should fix without bothering product.
587
+ - **what**: plain-language, product-readable.
588
+ - **recommendation**: 1–3 concrete options.
589
+
590
+ ## Rules
591
+
592
+ - Never write to GitHub. The `allowed-tools` list intentionally excludes any `gh issue create / edit / comment / close` invocation.
593
+ - Never auto-fix the spec. This skill reports gaps; callers decide what to do.
594
+ - Never silently skip a gate. Return `N/A` with the reason if a gate genuinely doesn't apply; never omit it.
595
+ - The `what` and `recommendation` must be concrete and product-readable — vague guidance ("clarify this") is useless.
596
+ - Never emit a category outside the fixed set.
597
+ - `product_relevant` is determined by the gate, not by the failure context.
598
+ - When validating an existing issue ref, parse the body via the same logic as `lisa-github-read-issue` so the two skills agree on what they see.