@codyswann/lisa 4.74.9 → 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 (799) hide show
  1. package/.claude-plugin/marketplace.json +60 -0
  2. package/dist/core/lisa-skill-sources.d.ts +3 -3
  3. package/dist/core/lisa-skill-sources.d.ts.map +1 -1
  4. package/dist/core/lisa-skill-sources.js +3 -2
  5. package/dist/core/lisa-skill-sources.js.map +1 -1
  6. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  7. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  8. package/dist/core/upstream-evidence-manifest.js +730 -5
  9. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  10. package/package.json +4 -4
  11. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  13. package/plugins/lisa-agy/plugin.json +1 -1
  14. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  15. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  16. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  17. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa-cdk-devin/.claude-plugin/plugin.json +11 -0
  20. package/plugins/lisa-cdk-devin/.devin-plugin/plugin.json +8 -0
  21. package/plugins/lisa-cdk-devin/skills/setup-aws-accounts/SKILL.md +292 -0
  22. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-devin/.claude-plugin/plugin.json +8 -0
  25. package/plugins/lisa-devin/.devin-plugin/plugin.json +8 -0
  26. package/plugins/lisa-devin/.mcp.json +8 -0
  27. package/plugins/lisa-devin/agents/architecture-specialist.md +32 -0
  28. package/plugins/lisa-devin/agents/bug-fixer.md +43 -0
  29. package/plugins/lisa-devin/agents/builder.md +44 -0
  30. package/plugins/lisa-devin/agents/confluence-prd-intake.md +65 -0
  31. package/plugins/lisa-devin/agents/debug-specialist.md +34 -0
  32. package/plugins/lisa-devin/agents/eval-specialist.md +33 -0
  33. package/plugins/lisa-devin/agents/git-history-analyzer.md +183 -0
  34. package/plugins/lisa-devin/agents/github-agent.md +155 -0
  35. package/plugins/lisa-devin/agents/github-build-intake.md +64 -0
  36. package/plugins/lisa-devin/agents/github-prd-intake.md +66 -0
  37. package/plugins/lisa-devin/agents/jira-agent.md +135 -0
  38. package/plugins/lisa-devin/agents/jira-build-intake.md +64 -0
  39. package/plugins/lisa-devin/agents/learner.md +85 -0
  40. package/plugins/lisa-devin/agents/learning-judge.md +119 -0
  41. package/plugins/lisa-devin/agents/learnings-synthesizer.md +155 -0
  42. package/plugins/lisa-devin/agents/linear-agent.md +138 -0
  43. package/plugins/lisa-devin/agents/linear-build-intake.md +64 -0
  44. package/plugins/lisa-devin/agents/linear-prd-intake.md +66 -0
  45. package/plugins/lisa-devin/agents/notion-prd-intake.md +63 -0
  46. package/plugins/lisa-devin/agents/performance-specialist.md +26 -0
  47. package/plugins/lisa-devin/agents/pr-mining-specialist.md +85 -0
  48. package/plugins/lisa-devin/agents/product-specialist.md +30 -0
  49. package/plugins/lisa-devin/agents/quality-specialist.md +30 -0
  50. package/plugins/lisa-devin/agents/security-specialist.md +43 -0
  51. package/plugins/lisa-devin/agents/skill-evaluator.md +205 -0
  52. package/plugins/lisa-devin/agents/spec-conformance-specialist.md +56 -0
  53. package/plugins/lisa-devin/agents/test-specialist.md +32 -0
  54. package/plugins/lisa-devin/agents/tracker-mining-specialist.md +85 -0
  55. package/plugins/lisa-devin/agents/verification-specialist.md +145 -0
  56. package/plugins/lisa-devin/hooks/auto-update.mjs +824 -0
  57. package/plugins/lisa-devin/hooks/auto-update.sh +31 -0
  58. package/plugins/lisa-devin/hooks/block-blind-automerge.sh +1242 -0
  59. package/plugins/lisa-devin/hooks/block-direct-issue-create.sh +2603 -0
  60. package/plugins/lisa-devin/hooks/block-host-name-leak.mjs +412 -0
  61. package/plugins/lisa-devin/hooks/block-host-name-leak.sh +61 -0
  62. package/plugins/lisa-devin/hooks/block-instruction-file-edits.sh +207 -0
  63. package/plugins/lisa-devin/hooks/block-managed-file-edits.sh +1175 -0
  64. package/plugins/lisa-devin/hooks/block-no-verify.sh +2288 -0
  65. package/plugins/lisa-devin/hooks/block-shell-json-parsing.sh +263 -0
  66. package/plugins/lisa-devin/hooks/cleanup-stale-worktrees.sh +122 -0
  67. package/plugins/lisa-devin/hooks/devin-tool-name-shim.sh +30 -0
  68. package/plugins/lisa-devin/hooks/discharge-work-item-gates.sh +90 -0
  69. package/plugins/lisa-devin/hooks/enforce-verification-gate.sh +506 -0
  70. package/plugins/lisa-devin/hooks/enforcement-vintage-npm.mjs +320 -0
  71. package/plugins/lisa-devin/hooks/enforcement-vintage.mjs +472 -0
  72. package/plugins/lisa-devin/hooks/enforcement-vintage.sh +48 -0
  73. package/plugins/lisa-devin/hooks/failure-signature-index.mjs +717 -0
  74. package/plugins/lisa-devin/hooks/failure-signature-index.sh +26 -0
  75. package/plugins/lisa-devin/hooks/guard-dedupe.bash +374 -0
  76. package/plugins/lisa-devin/hooks/inject-resolved-config.mjs +903 -0
  77. package/plugins/lisa-devin/hooks/inject-resolved-config.sh +107 -0
  78. package/plugins/lisa-devin/hooks/inject-rules.sh +49 -0
  79. package/plugins/lisa-devin/hooks/install-pkgs.sh +84 -0
  80. package/plugins/lisa-devin/hooks/operational-hazards.mjs +736 -0
  81. package/plugins/lisa-devin/hooks/operational-hazards.sh +28 -0
  82. package/plugins/lisa-devin/hooks/parity-safety-net-heredoc.py +1004 -0
  83. package/plugins/lisa-devin/hooks/parity-safety-net.sh +3275 -0
  84. package/plugins/lisa-devin/hooks/secrets-preflight.sh +72 -0
  85. package/plugins/lisa-devin/hooks/setup-jira-cli.sh +205 -0
  86. package/plugins/lisa-devin/hooks/shell-write-nudge.sh +86 -0
  87. package/plugins/lisa-devin/hooks/sonar-secrets.sh +205 -0
  88. package/plugins/lisa-devin/hooks/threshold-ratchet-compare.mjs +518 -0
  89. package/plugins/lisa-devin/hooks/threshold-ratchet-families.mjs +543 -0
  90. package/plugins/lisa-devin/hooks/threshold-ratchet.mjs +568 -0
  91. package/plugins/lisa-devin/hooks/threshold-ratchet.sh +22 -0
  92. package/plugins/lisa-devin/hooks/withdrawn-rulings.mjs +600 -0
  93. package/plugins/lisa-devin/hooks/withdrawn-rulings.sh +24 -0
  94. package/plugins/lisa-devin/hooks/worktree-binding-guard.mjs +1383 -0
  95. package/plugins/lisa-devin/hooks/worktree-binding-guard.sh +79 -0
  96. package/plugins/lisa-devin/hooks.json +247 -0
  97. package/plugins/lisa-devin/rules/eager/00-rule-index.md +82 -0
  98. package/plugins/lisa-devin/rules/eager/base-rules.md +85 -0
  99. package/plugins/lisa-devin/rules/eager/coding-philosophy.md +27 -0
  100. package/plugins/lisa-devin/rules/eager/config-resolution.md +37 -0
  101. package/plugins/lisa-devin/rules/eager/do-it-now.md +11 -0
  102. package/plugins/lisa-devin/rules/eager/empirical-inquiry.md +24 -0
  103. package/plugins/lisa-devin/rules/eager/falsifiable-checks.md +48 -0
  104. package/plugins/lisa-devin/rules/eager/history-audit.md +27 -0
  105. package/plugins/lisa-devin/rules/eager/integration-access-layer.md +19 -0
  106. package/plugins/lisa-devin/rules/eager/intent-routing.md +18 -0
  107. package/plugins/lisa-devin/rules/eager/learnings-ladder.md +18 -0
  108. package/plugins/lisa-devin/rules/eager/local-ci-first.md +15 -0
  109. package/plugins/lisa-devin/rules/eager/measurement-integrity.md +18 -0
  110. package/plugins/lisa-devin/rules/eager/never-name-a-downstream-project.md +9 -0
  111. package/plugins/lisa-devin/rules/eager/not-blocked-just-waiting.md +13 -0
  112. package/plugins/lisa-devin/rules/eager/operational-hazards.md +50 -0
  113. package/plugins/lisa-devin/rules/eager/report-actionability.md +26 -0
  114. package/plugins/lisa-devin/rules/eager/security-audit-handling.md +40 -0
  115. package/plugins/lisa-devin/rules/eager/session-status-updates.md +20 -0
  116. package/plugins/lisa-devin/rules/eager/settled-decisions.md +75 -0
  117. package/plugins/lisa-devin/rules/eager/stale-state-claims.md +26 -0
  118. package/plugins/lisa-devin/rules/eager/tool-access-gate.md +23 -0
  119. package/plugins/lisa-devin/rules/eager/tracked-work.md +9 -0
  120. package/plugins/lisa-devin/rules/eager/upstream-to-lisa.md +14 -0
  121. package/plugins/lisa-devin/rules/eager/verification.md +33 -0
  122. package/plugins/lisa-devin/rules/eager/wiki-knowledge-source.md +13 -0
  123. package/plugins/lisa-devin/rules/eager/withdrawn-rulings.md +102 -0
  124. package/plugins/lisa-devin/rules/reference/automation-runbook-contract.md +355 -0
  125. package/plugins/lisa-devin/rules/reference/base-rules.md +136 -0
  126. package/plugins/lisa-devin/rules/reference/bdd-e2e-coverage.md +301 -0
  127. package/plugins/lisa-devin/rules/reference/blocker-containment.md +165 -0
  128. package/plugins/lisa-devin/rules/reference/claim-archaeology.md +184 -0
  129. package/plugins/lisa-devin/rules/reference/claim-evidence-mapping.md +362 -0
  130. package/plugins/lisa-devin/rules/reference/claim-time-guards.md +135 -0
  131. package/plugins/lisa-devin/rules/reference/coding-philosophy.md +428 -0
  132. package/plugins/lisa-devin/rules/reference/config-resolution.md +1225 -0
  133. package/plugins/lisa-devin/rules/reference/control-reachability.md +166 -0
  134. package/plugins/lisa-devin/rules/reference/convergent-review.md +145 -0
  135. package/plugins/lisa-devin/rules/reference/credential-substrate-precedence.md +249 -0
  136. package/plugins/lisa-devin/rules/reference/dependency-decision-records.md +177 -0
  137. package/plugins/lisa-devin/rules/reference/dependency-internalization-kit.md +244 -0
  138. package/plugins/lisa-devin/rules/reference/dependency-trust-classes.md +291 -0
  139. package/plugins/lisa-devin/rules/reference/deployed-state-readback.md +142 -0
  140. package/plugins/lisa-devin/rules/reference/derived-branch-plan.md +214 -0
  141. package/plugins/lisa-devin/rules/reference/design-source-of-truth.md +260 -0
  142. package/plugins/lisa-devin/rules/reference/design-value-binding.md +311 -0
  143. package/plugins/lisa-devin/rules/reference/do-it-now.md +19 -0
  144. package/plugins/lisa-devin/rules/reference/documentation-source-paths.md +31 -0
  145. package/plugins/lisa-devin/rules/reference/empirical-inquiry.md +28 -0
  146. package/plugins/lisa-devin/rules/reference/factory-model.md +111 -0
  147. package/plugins/lisa-devin/rules/reference/falsifiable-checks.md +275 -0
  148. package/plugins/lisa-devin/rules/reference/history-audit.md +42 -0
  149. package/plugins/lisa-devin/rules/reference/integration-access-layer.md +89 -0
  150. package/plugins/lisa-devin/rules/reference/intent-routing.md +428 -0
  151. package/plugins/lisa-devin/rules/reference/leaf-only-lifecycle.md +227 -0
  152. package/plugins/lisa-devin/rules/reference/learnings-ladder.md +41 -0
  153. package/plugins/lisa-devin/rules/reference/local-ci-first.md +34 -0
  154. package/plugins/lisa-devin/rules/reference/measurement-integrity.md +119 -0
  155. package/plugins/lisa-devin/rules/reference/never-name-a-downstream-project.md +37 -0
  156. package/plugins/lisa-devin/rules/reference/not-blocked-just-waiting.md +41 -0
  157. package/plugins/lisa-devin/rules/reference/observability-audit.md +146 -0
  158. package/plugins/lisa-devin/rules/reference/operational-hazards.md +115 -0
  159. package/plugins/lisa-devin/rules/reference/prd-definition-of-ready.md +118 -0
  160. package/plugins/lisa-devin/rules/reference/prd-lifecycle-rollup.md +192 -0
  161. package/plugins/lisa-devin/rules/reference/pre-flight-autofill.md +250 -0
  162. package/plugins/lisa-devin/rules/reference/project-learnings.md +159 -0
  163. package/plugins/lisa-devin/rules/reference/promotion-contract.md +148 -0
  164. package/plugins/lisa-devin/rules/reference/readiness-rubric.md +242 -0
  165. package/plugins/lisa-devin/rules/reference/ready-role-filing.md +212 -0
  166. package/plugins/lisa-devin/rules/reference/rejection-detection.md +308 -0
  167. package/plugins/lisa-devin/rules/reference/repo-scope-split.md +119 -0
  168. package/plugins/lisa-devin/rules/reference/report-actionability.md +61 -0
  169. package/plugins/lisa-devin/rules/reference/reset-seed-coverage.md +286 -0
  170. package/plugins/lisa-devin/rules/reference/security-audit-handling.md +55 -0
  171. package/plugins/lisa-devin/rules/reference/session-status-updates.md +111 -0
  172. package/plugins/lisa-devin/rules/reference/settled-decisions.md +39 -0
  173. package/plugins/lisa-devin/rules/reference/stale-state-claims.md +88 -0
  174. package/plugins/lisa-devin/rules/reference/tool-access-gate.md +114 -0
  175. package/plugins/lisa-devin/rules/reference/tracked-work.md +49 -0
  176. package/plugins/lisa-devin/rules/reference/upstream-to-lisa.md +26 -0
  177. package/plugins/lisa-devin/rules/reference/usage-accounting.md +261 -0
  178. package/plugins/lisa-devin/rules/reference/verification.md +278 -0
  179. package/plugins/lisa-devin/rules/reference/wiki-knowledge-source.md +37 -0
  180. package/plugins/lisa-devin/rules/reference/withdrawn-rulings.md +148 -0
  181. package/plugins/lisa-devin/rules/reference/work-item-definition-of-ready.md +177 -0
  182. package/plugins/lisa-devin/rules/reference/work-item-trailer-definition.md +129 -0
  183. package/plugins/lisa-devin/scripts/automation-run-record.mjs +678 -0
  184. package/plugins/lisa-devin/scripts/automation-status-claude-adapter.mjs +804 -0
  185. package/plugins/lisa-devin/scripts/automation-status-codex-adapter.mjs +1081 -0
  186. package/plugins/lisa-devin/scripts/automation-status-contract-drift.mjs +392 -0
  187. package/plugins/lisa-devin/scripts/automation-status-expected-fleet.mjs +508 -0
  188. package/plugins/lisa-devin/scripts/automation-status-report.mjs +200 -0
  189. package/plugins/lisa-devin/scripts/automation-status-run-history.mjs +216 -0
  190. package/plugins/lisa-devin/scripts/automation-status-unrecorded-runs.mjs +127 -0
  191. package/plugins/lisa-devin/scripts/blocker-edge-resolution.mjs +150 -0
  192. package/plugins/lisa-devin/scripts/cross-pollinate.mjs +763 -0
  193. package/plugins/lisa-devin/scripts/design-bindings-probe.mjs +713 -0
  194. package/plugins/lisa-devin/scripts/design-intake-gate.mjs +470 -0
  195. package/plugins/lisa-devin/scripts/design-source-gate.mjs +610 -0
  196. package/plugins/lisa-devin/scripts/design-variable-ids.mjs +567 -0
  197. package/plugins/lisa-devin/scripts/doctor-report.mjs +635 -0
  198. package/plugins/lisa-devin/scripts/install-remote-agent-aws.mjs +443 -0
  199. package/plugins/lisa-devin/scripts/intake-blocker-reprobe.mjs +1065 -0
  200. package/plugins/lisa-devin/scripts/intake-prework-denominator.mjs +249 -0
  201. package/plugins/lisa-devin/scripts/lifecycle-label-trust.mjs +593 -0
  202. package/plugins/lisa-devin/scripts/linear-state-write-target.mjs +362 -0
  203. package/plugins/lisa-devin/scripts/plugin-sync-explain.mjs +654 -0
  204. package/plugins/lisa-devin/scripts/pr-arming-sweep.mjs +561 -0
  205. package/plugins/lisa-devin/scripts/project-ideation-idempotency-harness.mjs +338 -0
  206. package/plugins/lisa-devin/scripts/qa-signal-lifecycle.mjs +523 -0
  207. package/plugins/lisa-devin/scripts/queue-contract-resolution.mjs +583 -0
  208. package/plugins/lisa-devin/scripts/queue-health-classification.mjs +157 -0
  209. package/plugins/lisa-devin/scripts/queue-status-build-readers.mjs +561 -0
  210. package/plugins/lisa-devin/scripts/queue-status-prd-readers.mjs +452 -0
  211. package/plugins/lisa-devin/scripts/remote-agent-aws-setup.sh +677 -0
  212. package/plugins/lisa-devin/scripts/repo-scope-vocabulary-audit.mjs +458 -0
  213. package/plugins/lisa-devin/scripts/resolve-lifecycle-role.mjs +347 -0
  214. package/plugins/lisa-devin/scripts/rollup-blocker-classification.mjs +616 -0
  215. package/plugins/lisa-devin/scripts/scoping-label-audit.mjs +474 -0
  216. package/plugins/lisa-devin/skills/lisa-acceptance-criteria/SKILL.md +73 -0
  217. package/plugins/lisa-devin/skills/lisa-agent-design-best-practices/SKILL.md +242 -0
  218. package/plugins/lisa-devin/skills/lisa-agent-ready/SKILL.md +271 -0
  219. package/plugins/lisa-devin/skills/lisa-analyze-claude-remote/SKILL.md +434 -0
  220. package/plugins/lisa-devin/skills/lisa-atlassian-access/SKILL.md +469 -0
  221. package/plugins/lisa-devin/skills/lisa-atlassian-access/scripts/markdown-to-adf.mjs +236 -0
  222. package/plugins/lisa-devin/skills/lisa-attribute-failure/SKILL.md +142 -0
  223. package/plugins/lisa-devin/skills/lisa-automation-status/SKILL.md +149 -0
  224. package/plugins/lisa-devin/skills/lisa-bug-triage/SKILL.md +23 -0
  225. package/plugins/lisa-devin/skills/lisa-capability-drift/SKILL.md +71 -0
  226. package/plugins/lisa-devin/skills/lisa-codebase-research/SKILL.md +87 -0
  227. package/plugins/lisa-devin/skills/lisa-codify-verification/SKILL.md +213 -0
  228. package/plugins/lisa-devin/skills/lisa-confluence-prd-intake/SKILL.md +417 -0
  229. package/plugins/lisa-devin/skills/lisa-confluence-to-tracker/SKILL.md +469 -0
  230. package/plugins/lisa-devin/skills/lisa-confluence-write-prd/SKILL.md +111 -0
  231. package/plugins/lisa-devin/skills/lisa-cross-pollinate/SKILL.md +175 -0
  232. package/plugins/lisa-devin/skills/lisa-debrief/SKILL.md +96 -0
  233. package/plugins/lisa-devin/skills/lisa-debrief-apply/SKILL.md +106 -0
  234. package/plugins/lisa-devin/skills/lisa-delivery-effectiveness/SKILL.md +62 -0
  235. package/plugins/lisa-devin/skills/lisa-design-intake/SKILL.md +198 -0
  236. package/plugins/lisa-devin/skills/lisa-detect-tooling/SKILL.md +110 -0
  237. package/plugins/lisa-devin/skills/lisa-detect-tooling/scripts/commands.mjs +479 -0
  238. package/plugins/lisa-devin/skills/lisa-detect-tooling/scripts/detect-tooling.mjs +658 -0
  239. package/plugins/lisa-devin/skills/lisa-doctor/SKILL.md +743 -0
  240. package/plugins/lisa-devin/skills/lisa-drive-pr-to-merge/SKILL.md +1587 -0
  241. package/plugins/lisa-devin/skills/lisa-epic-triage/SKILL.md +28 -0
  242. package/plugins/lisa-devin/skills/lisa-evaluation-suite/SKILL.md +63 -0
  243. package/plugins/lisa-devin/skills/lisa-exploratory-qa/SKILL.md +185 -0
  244. package/plugins/lisa-devin/skills/lisa-fix-linter-error/SKILL.md +45 -0
  245. package/plugins/lisa-devin/skills/lisa-generate-claude-remote-build-script/SKILL.md +235 -0
  246. package/plugins/lisa-devin/skills/lisa-git-commit/SKILL.md +53 -0
  247. package/plugins/lisa-devin/skills/lisa-git-prune/SKILL.md +35 -0
  248. package/plugins/lisa-devin/skills/lisa-git-submit-pr/SKILL.md +170 -0
  249. package/plugins/lisa-devin/skills/lisa-github-add-journey/SKILL.md +118 -0
  250. package/plugins/lisa-devin/skills/lisa-github-build-intake/SKILL.md +745 -0
  251. package/plugins/lisa-devin/skills/lisa-github-claim/SKILL.md +27 -0
  252. package/plugins/lisa-devin/skills/lisa-github-create/SKILL.md +105 -0
  253. package/plugins/lisa-devin/skills/lisa-github-evidence/SKILL.md +120 -0
  254. package/plugins/lisa-devin/skills/lisa-github-journey/SKILL.md +134 -0
  255. package/plugins/lisa-devin/skills/lisa-github-prd-intake/SKILL.md +424 -0
  256. package/plugins/lisa-devin/skills/lisa-github-project-v2/SKILL.md +227 -0
  257. package/plugins/lisa-devin/skills/lisa-github-read-issue/SKILL.md +305 -0
  258. package/plugins/lisa-devin/skills/lisa-github-sync/SKILL.md +201 -0
  259. package/plugins/lisa-devin/skills/lisa-github-to-tracker/SKILL.md +456 -0
  260. package/plugins/lisa-devin/skills/lisa-github-validate-issue/SKILL.md +598 -0
  261. package/plugins/lisa-devin/skills/lisa-github-verify/SKILL.md +60 -0
  262. package/plugins/lisa-devin/skills/lisa-github-write-issue/SKILL.md +531 -0
  263. package/plugins/lisa-devin/skills/lisa-github-write-prd/SKILL.md +156 -0
  264. package/plugins/lisa-devin/skills/lisa-health/SKILL.md +142 -0
  265. package/plugins/lisa-devin/skills/lisa-health-drift-cron/SKILL.md +80 -0
  266. package/plugins/lisa-devin/skills/lisa-implement/SKILL.md +372 -0
  267. package/plugins/lisa-devin/skills/lisa-improve-code-complexity/SKILL.md +44 -0
  268. package/plugins/lisa-devin/skills/lisa-improve-harness/SKILL.md +487 -0
  269. package/plugins/lisa-devin/skills/lisa-improve-max-lines/SKILL.md +45 -0
  270. package/plugins/lisa-devin/skills/lisa-improve-max-lines-per-function/SKILL.md +46 -0
  271. package/plugins/lisa-devin/skills/lisa-improve-test-coverage/SKILL.md +47 -0
  272. package/plugins/lisa-devin/skills/lisa-improve-tests/SKILL.md +50 -0
  273. package/plugins/lisa-devin/skills/lisa-intake/SKILL.md +208 -0
  274. package/plugins/lisa-devin/skills/lisa-intake-explain/SKILL.md +279 -0
  275. package/plugins/lisa-devin/skills/lisa-jam-access/SKILL.md +128 -0
  276. package/plugins/lisa-devin/skills/lisa-jira-add-journey/SKILL.md +139 -0
  277. package/plugins/lisa-devin/skills/lisa-jira-build-intake/SKILL.md +556 -0
  278. package/plugins/lisa-devin/skills/lisa-jira-claim/SKILL.md +27 -0
  279. package/plugins/lisa-devin/skills/lisa-jira-create/SKILL.md +157 -0
  280. package/plugins/lisa-devin/skills/lisa-jira-evidence/SKILL.md +106 -0
  281. package/plugins/lisa-devin/skills/lisa-jira-evidence/scripts/post-evidence.sh +262 -0
  282. package/plugins/lisa-devin/skills/lisa-jira-journey/SKILL.md +168 -0
  283. package/plugins/lisa-devin/skills/lisa-jira-journey/scripts/generate-templates.py +239 -0
  284. package/plugins/lisa-devin/skills/lisa-jira-journey/scripts/parse-plan.py +570 -0
  285. package/plugins/lisa-devin/skills/lisa-jira-read-ticket/SKILL.md +199 -0
  286. package/plugins/lisa-devin/skills/lisa-jira-read-ticket/scripts/download-attachment.sh +211 -0
  287. package/plugins/lisa-devin/skills/lisa-jira-sync/SKILL.md +117 -0
  288. package/plugins/lisa-devin/skills/lisa-jira-validate-ticket/SKILL.md +525 -0
  289. package/plugins/lisa-devin/skills/lisa-jira-verify/SKILL.md +61 -0
  290. package/plugins/lisa-devin/skills/lisa-jira-write-ticket/SKILL.md +440 -0
  291. package/plugins/lisa-devin/skills/lisa-jsdoc-best-practices/SKILL.md +491 -0
  292. package/plugins/lisa-devin/skills/lisa-kane-browser/SKILL.md +80 -0
  293. package/plugins/lisa-devin/skills/lisa-learnings-audit/SKILL.md +490 -0
  294. package/plugins/lisa-devin/skills/lisa-linear-access/SKILL.md +483 -0
  295. package/plugins/lisa-devin/skills/lisa-linear-add-journey/SKILL.md +109 -0
  296. package/plugins/lisa-devin/skills/lisa-linear-build-intake/SKILL.md +548 -0
  297. package/plugins/lisa-devin/skills/lisa-linear-claim/SKILL.md +28 -0
  298. package/plugins/lisa-devin/skills/lisa-linear-create/SKILL.md +150 -0
  299. package/plugins/lisa-devin/skills/lisa-linear-evidence/SKILL.md +124 -0
  300. package/plugins/lisa-devin/skills/lisa-linear-journey/SKILL.md +147 -0
  301. package/plugins/lisa-devin/skills/lisa-linear-prd-intake/SKILL.md +411 -0
  302. package/plugins/lisa-devin/skills/lisa-linear-read-issue/SKILL.md +201 -0
  303. package/plugins/lisa-devin/skills/lisa-linear-sync/SKILL.md +164 -0
  304. package/plugins/lisa-devin/skills/lisa-linear-to-tracker/SKILL.md +454 -0
  305. package/plugins/lisa-devin/skills/lisa-linear-validate-issue/SKILL.md +504 -0
  306. package/plugins/lisa-devin/skills/lisa-linear-verify/SKILL.md +65 -0
  307. package/plugins/lisa-devin/skills/lisa-linear-write-issue/SKILL.md +448 -0
  308. package/plugins/lisa-devin/skills/lisa-linear-write-prd/SKILL.md +98 -0
  309. package/plugins/lisa-devin/skills/lisa-monitor/SKILL.md +224 -0
  310. package/plugins/lisa-devin/skills/lisa-nightly-add-test-coverage/SKILL.md +40 -0
  311. package/plugins/lisa-devin/skills/lisa-nightly-improve-tests/SKILL.md +29 -0
  312. package/plugins/lisa-devin/skills/lisa-nightly-lower-code-complexity/SKILL.md +42 -0
  313. package/plugins/lisa-devin/skills/lisa-notion-access/SKILL.md +301 -0
  314. package/plugins/lisa-devin/skills/lisa-notion-prd-intake/SKILL.md +360 -0
  315. package/plugins/lisa-devin/skills/lisa-notion-to-tracker/SKILL.md +467 -0
  316. package/plugins/lisa-devin/skills/lisa-notion-write-prd/SKILL.md +111 -0
  317. package/plugins/lisa-devin/skills/lisa-parity-code-review/SKILL.md +83 -0
  318. package/plugins/lisa-devin/skills/lisa-parity-code-simplifier/SKILL.md +76 -0
  319. package/plugins/lisa-devin/skills/lisa-parity-coderabbit/SKILL.md +87 -0
  320. package/plugins/lisa-devin/skills/lisa-parity-sentry-sdk-setup/SKILL.md +375 -0
  321. package/plugins/lisa-devin/skills/lisa-parity-sentry-seer/SKILL.md +168 -0
  322. package/plugins/lisa-devin/skills/lisa-parity-skill-creator/SKILL.md +155 -0
  323. package/plugins/lisa-devin/skills/lisa-performance-review/SKILL.md +94 -0
  324. package/plugins/lisa-devin/skills/lisa-persist-learning/SKILL.md +247 -0
  325. package/plugins/lisa-devin/skills/lisa-plan/SKILL.md +64 -0
  326. package/plugins/lisa-devin/skills/lisa-plugin-sync-explain/SKILL.md +53 -0
  327. package/plugins/lisa-devin/skills/lisa-posthog-access/SKILL.md +140 -0
  328. package/plugins/lisa-devin/skills/lisa-prd-backlink/SKILL.md +274 -0
  329. package/plugins/lisa-devin/skills/lisa-prd-source-write/SKILL.md +104 -0
  330. package/plugins/lisa-devin/skills/lisa-prd-ticket-coverage/SKILL.md +187 -0
  331. package/plugins/lisa-devin/skills/lisa-product-walkthrough/SKILL.md +106 -0
  332. package/plugins/lisa-devin/skills/lisa-project-ideation/SKILL.md +417 -0
  333. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/evidence-card-format.md +21 -0
  334. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/host-project-only.md +22 -0
  335. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +57 -0
  336. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/public-external-inspiration.md +22 -0
  337. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/unavailable-data-rejection.md +22 -0
  338. package/plugins/lisa-devin/skills/lisa-pull-request-review/SKILL.md +132 -0
  339. package/plugins/lisa-devin/skills/lisa-quality-review/SKILL.md +63 -0
  340. package/plugins/lisa-devin/skills/lisa-queue-status/SKILL.md +215 -0
  341. package/plugins/lisa-devin/skills/lisa-remote-dispatch/SKILL.md +109 -0
  342. package/plugins/lisa-devin/skills/lisa-remote-dispatch/scripts/dispatch.mjs +535 -0
  343. package/plugins/lisa-devin/skills/lisa-repair-intake/SKILL.md +1621 -0
  344. package/plugins/lisa-devin/skills/lisa-reproduce-bug/SKILL.md +75 -0
  345. package/plugins/lisa-devin/skills/lisa-research/SKILL.md +92 -0
  346. package/plugins/lisa-devin/skills/lisa-review-implementation/SKILL.md +209 -0
  347. package/plugins/lisa-devin/skills/lisa-review-local/SKILL.md +141 -0
  348. package/plugins/lisa-devin/skills/lisa-rework-triage/SKILL.md +206 -0
  349. package/plugins/lisa-devin/skills/lisa-root-cause-analysis/SKILL.md +135 -0
  350. package/plugins/lisa-devin/skills/lisa-secrets-access/SKILL.md +430 -0
  351. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/aws-bootstrap.mjs +433 -0
  352. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/bootstrap-store.mjs +288 -0
  353. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/doctor-secrets.mjs +273 -0
  354. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/envfile.mjs +80 -0
  355. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/inspect-vault.mjs +142 -0
  356. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/materialize-secrets.mjs +1085 -0
  357. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/note-format.mjs +179 -0
  358. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/owner.mjs +96 -0
  359. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/preflight-secrets.mjs +342 -0
  360. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/prompt-secret.mjs +79 -0
  361. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/providers.mjs +805 -0
  362. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/publish-aws-bootstrap.mjs +680 -0
  363. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/read-secret-note.mjs +105 -0
  364. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/resolve-expo-token.mjs +90 -0
  365. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/resolve-secret.mjs +285 -0
  366. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/rotate-secret.mjs +297 -0
  367. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/routing-floor.mjs +153 -0
  368. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/surfaces.mjs +480 -0
  369. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/sync-secret-to-ci.mjs +510 -0
  370. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/tools-from-notes.mjs +63 -0
  371. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/validate-config.mjs +550 -0
  372. package/plugins/lisa-devin/skills/lisa-security-review/SKILL.md +124 -0
  373. package/plugins/lisa-devin/skills/lisa-security-zap-scan/SKILL.md +53 -0
  374. package/plugins/lisa-devin/skills/lisa-sentry-access/SKILL.md +140 -0
  375. package/plugins/lisa-devin/skills/lisa-setup-atlassian/SKILL.md +407 -0
  376. package/plugins/lisa-devin/skills/lisa-setup-automations/SKILL.md +430 -0
  377. package/plugins/lisa-devin/skills/lisa-setup-automations/scripts/generate-workflow.mjs +288 -0
  378. package/plugins/lisa-devin/skills/lisa-setup-confluence/SKILL.md +254 -0
  379. package/plugins/lisa-devin/skills/lisa-setup-github/SKILL.md +319 -0
  380. package/plugins/lisa-devin/skills/lisa-setup-github-repo/SKILL.md +128 -0
  381. package/plugins/lisa-devin/skills/lisa-setup-jira/SKILL.md +198 -0
  382. package/plugins/lisa-devin/skills/lisa-setup-kane/SKILL.md +96 -0
  383. package/plugins/lisa-devin/skills/lisa-setup-linear/SKILL.md +375 -0
  384. package/plugins/lisa-devin/skills/lisa-setup-local-env/SKILL.md +95 -0
  385. package/plugins/lisa-devin/skills/lisa-setup-local-env/scripts/local-env.mjs +196 -0
  386. package/plugins/lisa-devin/skills/lisa-setup-notion/SKILL.md +376 -0
  387. package/plugins/lisa-devin/skills/lisa-setup-remote-aws/SKILL.md +149 -0
  388. package/plugins/lisa-devin/skills/lisa-setup-remote-env/SKILL.md +382 -0
  389. package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/materialized-env-authority.mjs +262 -0
  390. package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/session-start.sh +87 -0
  391. package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/setup.sh +216 -0
  392. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/environment.mjs +227 -0
  393. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +378 -0
  394. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +1632 -0
  395. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/tool-floor.mjs +94 -0
  396. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/toolchain.mjs +448 -0
  397. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/verify-remote-env.mjs +250 -0
  398. package/plugins/lisa-devin/skills/lisa-setup-sonar/SKILL.md +153 -0
  399. package/plugins/lisa-devin/skills/lisa-setup-workstation/SKILL.md +143 -0
  400. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/bounded-child.mjs +168 -0
  401. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/catalogue.mjs +293 -0
  402. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/cli.mjs +333 -0
  403. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/workstation.mjs +511 -0
  404. package/plugins/lisa-devin/skills/lisa-sonarcloud-access/SKILL.md +202 -0
  405. package/plugins/lisa-devin/skills/lisa-spec-conformance/SKILL.md +205 -0
  406. package/plugins/lisa-devin/skills/lisa-starter-sync/SKILL.md +35 -0
  407. package/plugins/lisa-devin/skills/lisa-sync-down/SKILL.md +209 -0
  408. package/plugins/lisa-devin/skills/lisa-task-decomposition/SKILL.md +195 -0
  409. package/plugins/lisa-devin/skills/lisa-task-triage/SKILL.md +23 -0
  410. package/plugins/lisa-devin/skills/lisa-tdd-implementation/SKILL.md +91 -0
  411. package/plugins/lisa-devin/skills/lisa-tear-down-automations/SKILL.md +85 -0
  412. package/plugins/lisa-devin/skills/lisa-test-strategy/SKILL.md +66 -0
  413. package/plugins/lisa-devin/skills/lisa-ticket-triage/SKILL.md +214 -0
  414. package/plugins/lisa-devin/skills/lisa-track/SKILL.md +129 -0
  415. package/plugins/lisa-devin/skills/lisa-tracker-add-journey/SKILL.md +28 -0
  416. package/plugins/lisa-devin/skills/lisa-tracker-build-intake/SKILL.md +134 -0
  417. package/plugins/lisa-devin/skills/lisa-tracker-claim/SKILL.md +35 -0
  418. package/plugins/lisa-devin/skills/lisa-tracker-create/SKILL.md +28 -0
  419. package/plugins/lisa-devin/skills/lisa-tracker-evidence/SKILL.md +63 -0
  420. package/plugins/lisa-devin/skills/lisa-tracker-journey/SKILL.md +27 -0
  421. package/plugins/lisa-devin/skills/lisa-tracker-read/SKILL.md +28 -0
  422. package/plugins/lisa-devin/skills/lisa-tracker-source-artifacts/SKILL.md +111 -0
  423. package/plugins/lisa-devin/skills/lisa-tracker-sync/SKILL.md +150 -0
  424. package/plugins/lisa-devin/skills/lisa-tracker-validate/SKILL.md +37 -0
  425. package/plugins/lisa-devin/skills/lisa-tracker-verify/SKILL.md +29 -0
  426. package/plugins/lisa-devin/skills/lisa-tracker-write/SKILL.md +55 -0
  427. package/plugins/lisa-devin/skills/lisa-usage-accounting/SKILL.md +205 -0
  428. package/plugins/lisa-devin/skills/lisa-usage-accounting/references/effectiveness.md +63 -0
  429. package/plugins/lisa-devin/skills/lisa-use-the-product/SKILL.md +86 -0
  430. package/plugins/lisa-devin/skills/lisa-validate-tracker-mapping/SKILL.md +467 -0
  431. package/plugins/lisa-devin/skills/lisa-verification-lifecycle/SKILL.md +384 -0
  432. package/plugins/lisa-devin/skills/lisa-verify/SKILL.md +55 -0
  433. package/plugins/lisa-devin/skills/lisa-verify-prd/SKILL.md +394 -0
  434. package/plugins/lisa-devin/skills/lisa-verify-workflow-change/SKILL.md +154 -0
  435. package/plugins/lisa-devin/skills/lisa-wiki-install/SKILL.md +101 -0
  436. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  437. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  438. package/plugins/lisa-expo-agy/plugin.json +1 -1
  439. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  440. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  441. package/plugins/lisa-expo-devin/.claude-plugin/plugin.json +11 -0
  442. package/plugins/lisa-expo-devin/.devin-plugin/plugin.json +8 -0
  443. package/plugins/lisa-expo-devin/.mcp.json +8 -0
  444. package/plugins/lisa-expo-devin/THIRD-PARTY-NOTICES.md +84 -0
  445. package/plugins/lisa-expo-devin/agents/ops-specialist.md +124 -0
  446. package/plugins/lisa-expo-devin/hooks/devin-tool-name-shim.sh +30 -0
  447. package/plugins/lisa-expo-devin/hooks/register-maestro-mcp.sh +84 -0
  448. package/plugins/lisa-expo-devin/hooks.json +14 -0
  449. package/plugins/lisa-expo-devin/skills/add-app-clip/SKILL.md +280 -0
  450. package/plugins/lisa-expo-devin/skills/add-app-clip/references/native-module.md +96 -0
  451. package/plugins/lisa-expo-devin/skills/apollo-client/SKILL.md +238 -0
  452. package/plugins/lisa-expo-devin/skills/apollo-client/references/mutation-patterns.md +360 -0
  453. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/SKILL.md +369 -0
  454. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
  455. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
  456. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
  457. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
  458. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +438 -0
  459. package/plugins/lisa-expo-devin/skills/building-native-ui/SKILL.md +321 -0
  460. package/plugins/lisa-expo-devin/skills/building-native-ui/references/animations.md +220 -0
  461. package/plugins/lisa-expo-devin/skills/building-native-ui/references/controls.md +272 -0
  462. package/plugins/lisa-expo-devin/skills/building-native-ui/references/form-sheet.md +253 -0
  463. package/plugins/lisa-expo-devin/skills/building-native-ui/references/gradients.md +106 -0
  464. package/plugins/lisa-expo-devin/skills/building-native-ui/references/icons.md +213 -0
  465. package/plugins/lisa-expo-devin/skills/building-native-ui/references/media.md +198 -0
  466. package/plugins/lisa-expo-devin/skills/building-native-ui/references/route-structure.md +229 -0
  467. package/plugins/lisa-expo-devin/skills/building-native-ui/references/search.md +248 -0
  468. package/plugins/lisa-expo-devin/skills/building-native-ui/references/storage.md +121 -0
  469. package/plugins/lisa-expo-devin/skills/building-native-ui/references/tabs.md +433 -0
  470. package/plugins/lisa-expo-devin/skills/building-native-ui/references/toolbar-and-headers.md +284 -0
  471. package/plugins/lisa-expo-devin/skills/building-native-ui/references/visual-effects.md +197 -0
  472. package/plugins/lisa-expo-devin/skills/building-native-ui/references/webgpu-three.md +605 -0
  473. package/plugins/lisa-expo-devin/skills/building-native-ui/references/zoom-transitions.md +158 -0
  474. package/plugins/lisa-expo-devin/skills/container-view-pattern/SKILL.md +355 -0
  475. package/plugins/lisa-expo-devin/skills/container-view-pattern/references/examples.md +749 -0
  476. package/plugins/lisa-expo-devin/skills/container-view-pattern/references/patterns.md +318 -0
  477. package/plugins/lisa-expo-devin/skills/container-view-pattern/scripts/create_component.py +200 -0
  478. package/plugins/lisa-expo-devin/skills/container-view-pattern/scripts/validate_component.py +332 -0
  479. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/SKILL.md +268 -0
  480. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/common-issues.md +619 -0
  481. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
  482. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/platform-api.md +276 -0
  483. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
  484. package/plugins/lisa-expo-devin/skills/directory-structure/SKILL.md +214 -0
  485. package/plugins/lisa-expo-devin/skills/directory-structure/scripts/validate_structure.py +454 -0
  486. package/plugins/lisa-expo-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
  487. package/plugins/lisa-expo-devin/skills/eas-update-insights/SKILL.md +228 -0
  488. package/plugins/lisa-expo-devin/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
  489. package/plugins/lisa-expo-devin/skills/eas-update-insights/references/update-insights-schema.md +69 -0
  490. package/plugins/lisa-expo-devin/skills/expo-api-routes/SKILL.md +369 -0
  491. package/plugins/lisa-expo-devin/skills/expo-brownfield/SKILL.md +54 -0
  492. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/brownfield-integrated.md +526 -0
  493. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/brownfield-isolated.md +402 -0
  494. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/comparison.md +63 -0
  495. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/troubleshooting.md +88 -0
  496. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/SKILL.md +92 -0
  497. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/fetch.js +113 -0
  498. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/package.json +11 -0
  499. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/validate.js +85 -0
  500. package/plugins/lisa-expo-devin/skills/expo-deployment/SKILL.md +193 -0
  501. package/plugins/lisa-expo-devin/skills/expo-deployment/references/app-store-metadata.md +479 -0
  502. package/plugins/lisa-expo-devin/skills/expo-deployment/references/ios-app-store.md +355 -0
  503. package/plugins/lisa-expo-devin/skills/expo-deployment/references/play-store.md +264 -0
  504. package/plugins/lisa-expo-devin/skills/expo-deployment/references/testflight.md +58 -0
  505. package/plugins/lisa-expo-devin/skills/expo-deployment/references/workflows.md +200 -0
  506. package/plugins/lisa-expo-devin/skills/expo-dev-client/SKILL.md +164 -0
  507. package/plugins/lisa-expo-devin/skills/expo-env-config/SKILL.md +309 -0
  508. package/plugins/lisa-expo-devin/skills/expo-env-config/references/validation-patterns.md +417 -0
  509. package/plugins/lisa-expo-devin/skills/expo-module/SKILL.md +141 -0
  510. package/plugins/lisa-expo-devin/skills/expo-module/references/config-plugin.md +90 -0
  511. package/plugins/lisa-expo-devin/skills/expo-module/references/create-expo-module.md +206 -0
  512. package/plugins/lisa-expo-devin/skills/expo-module/references/lifecycle.md +127 -0
  513. package/plugins/lisa-expo-devin/skills/expo-module/references/module-config.md +48 -0
  514. package/plugins/lisa-expo-devin/skills/expo-module/references/native-module.md +286 -0
  515. package/plugins/lisa-expo-devin/skills/expo-module/references/native-view.md +171 -0
  516. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/SKILL.md +432 -0
  517. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/references/official-docs.md +290 -0
  518. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/references/static-export-verification.md +54 -0
  519. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
  520. package/plugins/lisa-expo-devin/skills/expo-tailwind-setup/SKILL.md +487 -0
  521. package/plugins/lisa-expo-devin/skills/expo-ui-jetpack-compose/SKILL.md +40 -0
  522. package/plugins/lisa-expo-devin/skills/expo-ui-swift-ui/SKILL.md +39 -0
  523. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/SKILL.md +419 -0
  524. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/color-tokens.md +343 -0
  525. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/component-mapping.md +307 -0
  526. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
  527. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
  528. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/scripts/validate_styling.py +424 -0
  529. package/plugins/lisa-expo-devin/skills/jira-add-journey/SKILL.md +140 -0
  530. package/plugins/lisa-expo-devin/skills/jira-create/SKILL.md +161 -0
  531. package/plugins/lisa-expo-devin/skills/jira-evidence/SKILL.md +84 -0
  532. package/plugins/lisa-expo-devin/skills/jira-evidence/scripts/post-evidence.sh +262 -0
  533. package/plugins/lisa-expo-devin/skills/jira-journey/SKILL.md +196 -0
  534. package/plugins/lisa-expo-devin/skills/jira-journey/scripts/generate-templates.py +281 -0
  535. package/plugins/lisa-expo-devin/skills/jira-journey/scripts/parse-plan.py +400 -0
  536. package/plugins/lisa-expo-devin/skills/jira-verify/SKILL.md +27 -0
  537. package/plugins/lisa-expo-devin/skills/local-state/SKILL.md +362 -0
  538. package/plugins/lisa-expo-devin/skills/local-state/references/async-storage.md +505 -0
  539. package/plugins/lisa-expo-devin/skills/local-state/references/persistence-patterns.md +711 -0
  540. package/plugins/lisa-expo-devin/skills/local-state/references/reactive-variables.md +446 -0
  541. package/plugins/lisa-expo-devin/skills/maestro-mcp-setup/SKILL.md +144 -0
  542. package/plugins/lisa-expo-devin/skills/native-data-fetching/SKILL.md +507 -0
  543. package/plugins/lisa-expo-devin/skills/native-data-fetching/references/expo-router-loaders.md +344 -0
  544. package/plugins/lisa-expo-devin/skills/ops-browser-uat/SKILL.md +124 -0
  545. package/plugins/lisa-expo-devin/skills/ops-check-logs/SKILL.md +217 -0
  546. package/plugins/lisa-expo-devin/skills/ops-db-ops/SKILL.md +214 -0
  547. package/plugins/lisa-expo-devin/skills/ops-deploy/SKILL.md +123 -0
  548. package/plugins/lisa-expo-devin/skills/ops-monitor-errors/SKILL.md +99 -0
  549. package/plugins/lisa-expo-devin/skills/ops-performance/SKILL.md +165 -0
  550. package/plugins/lisa-expo-devin/skills/ops-run-local/SKILL.md +169 -0
  551. package/plugins/lisa-expo-devin/skills/ops-verify-health/SKILL.md +101 -0
  552. package/plugins/lisa-expo-devin/skills/owasp-zap/SKILL.md +61 -0
  553. package/plugins/lisa-expo-devin/skills/play-store-access/SKILL.md +226 -0
  554. package/plugins/lisa-expo-devin/skills/playwright-ci-debugging/SKILL.md +140 -0
  555. package/plugins/lisa-expo-devin/skills/playwright-selectors/SKILL.md +496 -0
  556. package/plugins/lisa-expo-devin/skills/reduce-complexity/SKILL.md +251 -0
  557. package/plugins/lisa-expo-devin/skills/reduce-complexity/references/extraction-strategies.md +456 -0
  558. package/plugins/lisa-expo-devin/skills/reduce-complexity/references/refactoring-patterns.md +557 -0
  559. package/plugins/lisa-expo-devin/skills/testing-library/SKILL.md +314 -0
  560. package/plugins/lisa-expo-devin/skills/testing-library/references/async-patterns.md +420 -0
  561. package/plugins/lisa-expo-devin/skills/testing-library/references/expo-router-testing.md +556 -0
  562. package/plugins/lisa-expo-devin/skills/testing-library/references/mocking-patterns.md +612 -0
  563. package/plugins/lisa-expo-devin/skills/testing-library/references/query-priority.md +291 -0
  564. package/plugins/lisa-expo-devin/skills/upgrading-expo/SKILL.md +134 -0
  565. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
  566. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/expo-av-to-video.md +160 -0
  567. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/native-tabs.md +124 -0
  568. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/new-architecture.md +79 -0
  569. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-19.md +79 -0
  570. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-compiler.md +59 -0
  571. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
  572. package/plugins/lisa-expo-devin/skills/use-dom/SKILL.md +417 -0
  573. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  574. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  575. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  576. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  577. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  578. package/plugins/lisa-harper-fabric-devin/.claude-plugin/plugin.json +11 -0
  579. package/plugins/lisa-harper-fabric-devin/.devin-plugin/plugin.json +8 -0
  580. package/plugins/lisa-harper-fabric-devin/generated-artifact-globs.txt +5 -0
  581. package/plugins/lisa-harper-fabric-devin/hooks/block-generated-artifact-edits.sh +141 -0
  582. package/plugins/lisa-harper-fabric-devin/hooks/devin-tool-name-shim.sh +30 -0
  583. package/plugins/lisa-harper-fabric-devin/hooks/enforce-config-extensions.mjs +196 -0
  584. package/plugins/lisa-harper-fabric-devin/hooks/enforce-config-extensions.sh +46 -0
  585. package/plugins/lisa-harper-fabric-devin/hooks/inject-rules.sh +27 -0
  586. package/plugins/lisa-harper-fabric-devin/hooks.json +36 -0
  587. package/plugins/lisa-harper-fabric-devin/rules/eager/harper-fabric.md +31 -0
  588. package/plugins/lisa-harper-fabric-devin/rules/reference/harper-fabric.md +52 -0
  589. package/plugins/lisa-harper-fabric-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
  590. package/plugins/lisa-harper-fabric-devin/skills/harper-auth/SKILL.md +368 -0
  591. package/plugins/lisa-harper-fabric-devin/skills/harper-build-and-deploy/SKILL.md +198 -0
  592. package/plugins/lisa-harper-fabric-devin/skills/harper-caching/SKILL.md +265 -0
  593. package/plugins/lisa-harper-fabric-devin/skills/harper-component-model/SKILL.md +87 -0
  594. package/plugins/lisa-harper-fabric-devin/skills/harper-config-yaml/SKILL.md +283 -0
  595. package/plugins/lisa-harper-fabric-devin/skills/harper-operations/SKILL.md +239 -0
  596. package/plugins/lisa-harper-fabric-devin/skills/harper-realtime/SKILL.md +187 -0
  597. package/plugins/lisa-harper-fabric-devin/skills/harper-resources/SKILL.md +142 -0
  598. package/plugins/lisa-harper-fabric-devin/skills/harper-rest-queries/SKILL.md +403 -0
  599. package/plugins/lisa-harper-fabric-devin/skills/harper-schema-graphql/SKILL.md +123 -0
  600. package/plugins/lisa-harper-fabric-devin/skills/harper-testing/SKILL.md +254 -0
  601. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  602. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  603. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  604. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  605. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  606. package/plugins/lisa-nestjs-devin/.claude-plugin/plugin.json +11 -0
  607. package/plugins/lisa-nestjs-devin/.devin-plugin/plugin.json +8 -0
  608. package/plugins/lisa-nestjs-devin/hooks/block-migration-edits.sh +125 -0
  609. package/plugins/lisa-nestjs-devin/hooks/devin-tool-name-shim.sh +30 -0
  610. package/plugins/lisa-nestjs-devin/hooks/lisa-edit-gate.sh +152 -0
  611. package/plugins/lisa-nestjs-devin/hooks.json +15 -0
  612. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/SKILL.md +176 -0
  613. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/advanced-features.md +527 -0
  614. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/project-patterns.md +531 -0
  615. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/quick-start.md +257 -0
  616. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
  617. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/types-scalars.md +513 -0
  618. package/plugins/lisa-nestjs-devin/skills/nestjs-rules/SKILL.md +560 -0
  619. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/SKILL.md +275 -0
  620. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
  621. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/entity-patterns.md +450 -0
  622. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/observability-patterns.md +536 -0
  623. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  624. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  625. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  626. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  627. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  628. package/plugins/lisa-openclaw-devin/.claude-plugin/plugin.json +8 -0
  629. package/plugins/lisa-openclaw-devin/.devin-plugin/plugin.json +8 -0
  630. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-repo-topic/SKILL.md +163 -0
  631. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +185 -0
  632. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/SKILL.md +175 -0
  633. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/references/platform-routing.md +123 -0
  634. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/references/prompts.md +78 -0
  635. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-setup/SKILL.md +141 -0
  636. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  637. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  638. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  639. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  640. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  641. package/plugins/lisa-phaser-devin/.claude-plugin/plugin.json +11 -0
  642. package/plugins/lisa-phaser-devin/.devin-plugin/plugin.json +8 -0
  643. package/plugins/lisa-phaser-devin/agents/accessibility-advocate.md +55 -0
  644. package/plugins/lisa-phaser-devin/agents/art-director.md +90 -0
  645. package/plugins/lisa-phaser-devin/agents/audio-director.md +65 -0
  646. package/plugins/lisa-phaser-devin/agents/combat-designer.md +61 -0
  647. package/plugins/lisa-phaser-devin/agents/economy-designer.md +59 -0
  648. package/plugins/lisa-phaser-devin/agents/game-designer.md +62 -0
  649. package/plugins/lisa-phaser-devin/agents/game-feel-specialist.md +56 -0
  650. package/plugins/lisa-phaser-devin/agents/level-designer.md +59 -0
  651. package/plugins/lisa-phaser-devin/agents/localization-manager.md +61 -0
  652. package/plugins/lisa-phaser-devin/agents/marketing-strategist.md +59 -0
  653. package/plugins/lisa-phaser-devin/agents/monetization-designer.md +59 -0
  654. package/plugins/lisa-phaser-devin/agents/narrative-designer.md +56 -0
  655. package/plugins/lisa-phaser-devin/agents/onboarding-advocate.md +59 -0
  656. package/plugins/lisa-phaser-devin/agents/player-advocate.md +57 -0
  657. package/plugins/lisa-phaser-devin/agents/producer.md +61 -0
  658. package/plugins/lisa-phaser-devin/agents/product-analyst.md +62 -0
  659. package/plugins/lisa-phaser-devin/agents/publisher.md +59 -0
  660. package/plugins/lisa-phaser-devin/agents/qa-playtester.md +57 -0
  661. package/plugins/lisa-phaser-devin/agents/target-player.md +52 -0
  662. package/plugins/lisa-phaser-devin/agents/ux-ui-designer.md +60 -0
  663. package/plugins/lisa-phaser-devin/hooks/devin-tool-name-shim.sh +30 -0
  664. package/plugins/lisa-phaser-devin/hooks/inject-rules.sh +27 -0
  665. package/plugins/lisa-phaser-devin/hooks.json +14 -0
  666. package/plugins/lisa-phaser-devin/rules/eager/phaser.md +44 -0
  667. package/plugins/lisa-phaser-devin/rules/reference/phaser.md +184 -0
  668. package/plugins/lisa-phaser-devin/skills/phaser-accessibility/SKILL.md +135 -0
  669. package/plugins/lisa-phaser-devin/skills/phaser-asset-pipeline/SKILL.md +222 -0
  670. package/plugins/lisa-phaser-devin/skills/phaser-asset-sourcing/SKILL.md +151 -0
  671. package/plugins/lisa-phaser-devin/skills/phaser-build-deploy/SKILL.md +153 -0
  672. package/plugins/lisa-phaser-devin/skills/phaser-i18n/SKILL.md +122 -0
  673. package/plugins/lisa-phaser-devin/skills/phaser-project-structure/SKILL.md +89 -0
  674. package/plugins/lisa-phaser-devin/skills/phaser-services/SKILL.md +208 -0
  675. package/plugins/lisa-phaser-devin/skills/phaser-testing/SKILL.md +192 -0
  676. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  677. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  678. package/plugins/lisa-rails-agy/plugin.json +1 -1
  679. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  680. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  681. package/plugins/lisa-rails-devin/.claude-plugin/plugin.json +11 -0
  682. package/plugins/lisa-rails-devin/.devin-plugin/plugin.json +8 -0
  683. package/plugins/lisa-rails-devin/agents/ops-specialist.md +226 -0
  684. package/plugins/lisa-rails-devin/hooks/devin-tool-name-shim.sh +30 -0
  685. package/plugins/lisa-rails-devin/hooks/inject-rules.sh +40 -0
  686. package/plugins/lisa-rails-devin/hooks/lisa-edit-gate.sh +152 -0
  687. package/plugins/lisa-rails-devin/hooks/rubocop-on-edit.sh +101 -0
  688. package/plugins/lisa-rails-devin/hooks/sg-scan-on-edit.sh +97 -0
  689. package/plugins/lisa-rails-devin/hooks.json +29 -0
  690. package/plugins/lisa-rails-devin/rules/eager/rails-conventions.md +23 -0
  691. package/plugins/lisa-rails-devin/rules/reference/rails-conventions.md +176 -0
  692. package/plugins/lisa-rails-devin/skills/action-controller-best-practices/SKILL.md +374 -0
  693. package/plugins/lisa-rails-devin/skills/action-view-best-practices/SKILL.md +335 -0
  694. package/plugins/lisa-rails-devin/skills/active-record-model-best-practices/SKILL.md +166 -0
  695. package/plugins/lisa-rails-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
  696. package/plugins/lisa-rails-devin/skills/fix-linter-error/SKILL.md +45 -0
  697. package/plugins/lisa-rails-devin/skills/improve-code-complexity/SKILL.md +51 -0
  698. package/plugins/lisa-rails-devin/skills/improve-max-lines/SKILL.md +46 -0
  699. package/plugins/lisa-rails-devin/skills/improve-max-lines-per-function/SKILL.md +46 -0
  700. package/plugins/lisa-rails-devin/skills/improve-test-coverage/SKILL.md +48 -0
  701. package/plugins/lisa-rails-devin/skills/jira-add-journey/SKILL.md +79 -0
  702. package/plugins/lisa-rails-devin/skills/jira-create/SKILL.md +100 -0
  703. package/plugins/lisa-rails-devin/skills/jira-evidence/SKILL.md +76 -0
  704. package/plugins/lisa-rails-devin/skills/jira-evidence/scripts/post-evidence.sh +262 -0
  705. package/plugins/lisa-rails-devin/skills/jira-journey/SKILL.md +65 -0
  706. package/plugins/lisa-rails-devin/skills/jira-verify/SKILL.md +26 -0
  707. package/plugins/lisa-rails-devin/skills/ops-check-logs/SKILL.md +191 -0
  708. package/plugins/lisa-rails-devin/skills/ops-deploy/SKILL.md +153 -0
  709. package/plugins/lisa-rails-devin/skills/ops-run-local/SKILL.md +169 -0
  710. package/plugins/lisa-rails-devin/skills/ops-verify-jobs/SKILL.md +157 -0
  711. package/plugins/lisa-rails-devin/skills/ops-verify-telemetry/SKILL.md +226 -0
  712. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  713. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  714. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  715. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  716. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  717. package/plugins/lisa-typescript-devin/.claude-plugin/plugin.json +11 -0
  718. package/plugins/lisa-typescript-devin/.devin-plugin/plugin.json +8 -0
  719. package/plugins/lisa-typescript-devin/hooks/block-suppress-directives.sh +141 -0
  720. package/plugins/lisa-typescript-devin/hooks/devin-tool-name-shim.sh +30 -0
  721. package/plugins/lisa-typescript-devin/hooks/format-on-edit.sh +102 -0
  722. package/plugins/lisa-typescript-devin/hooks/lint-on-edit.sh +117 -0
  723. package/plugins/lisa-typescript-devin/hooks/lisa-edit-gate.sh +152 -0
  724. package/plugins/lisa-typescript-devin/hooks/sg-scan-on-edit.sh +94 -0
  725. package/plugins/lisa-typescript-devin/hooks.json +34 -0
  726. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  727. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  728. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  729. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  730. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  731. package/plugins/lisa-wiki-devin/.claude-plugin/plugin.json +8 -0
  732. package/plugins/lisa-wiki-devin/.devin-plugin/plugin.json +8 -0
  733. package/plugins/lisa-wiki-devin/ci/lisa-wiki-validate.yml +33 -0
  734. package/plugins/lisa-wiki-devin/schema/lisa-wiki-config.schema.json +162 -0
  735. package/plugins/lisa-wiki-devin/schema/wiki-structure.schema.json +51 -0
  736. package/plugins/lisa-wiki-devin/scripts/_wiki-lib.mjs +204 -0
  737. package/plugins/lisa-wiki-devin/scripts/diff-guard.mjs +117 -0
  738. package/plugins/lisa-wiki-devin/scripts/ensure-gitignore.mjs +131 -0
  739. package/plugins/lisa-wiki-devin/scripts/ensure-wiki.mjs +268 -0
  740. package/plugins/lisa-wiki-devin/scripts/ingest-git.mjs +198 -0
  741. package/plugins/lisa-wiki-devin/scripts/ingest-memory.mjs +135 -0
  742. package/plugins/lisa-wiki-devin/scripts/ingest-roles.mjs +95 -0
  743. package/plugins/lisa-wiki-devin/scripts/ingest_slack_channel.py +361 -0
  744. package/plugins/lisa-wiki-devin/scripts/lib/bounded-child.mjs +159 -0
  745. package/plugins/lisa-wiki-devin/scripts/lint-wiki.mjs +513 -0
  746. package/plugins/lisa-wiki-devin/scripts/mcp-doctor.mjs +72 -0
  747. package/plugins/lisa-wiki-devin/scripts/render-contract.mjs +107 -0
  748. package/plugins/lisa-wiki-devin/scripts/rewrite-refs.mjs +144 -0
  749. package/plugins/lisa-wiki-devin/scripts/slack_oauth_user.py +179 -0
  750. package/plugins/lisa-wiki-devin/scripts/validate-config.mjs +321 -0
  751. package/plugins/lisa-wiki-devin/scripts/verify-migration.mjs +203 -0
  752. package/plugins/lisa-wiki-devin/scripts/verify-wiki-safety.mjs +126 -0
  753. package/plugins/lisa-wiki-devin/scripts/wiki-safety.mjs +378 -0
  754. package/plugins/lisa-wiki-devin/scripts/wiki-status.mjs +345 -0
  755. package/plugins/lisa-wiki-devin/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
  756. package/plugins/lisa-wiki-devin/skills/lisa-wiki-add-role/SKILL.md +35 -0
  757. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
  758. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
  759. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-git/SKILL.md +25 -0
  760. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
  761. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
  762. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
  763. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
  764. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
  765. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-web/SKILL.md +23 -0
  766. package/plugins/lisa-wiki-devin/skills/lisa-wiki-doctor/SKILL.md +47 -0
  767. package/plugins/lisa-wiki-devin/skills/lisa-wiki-ingest/SKILL.md +106 -0
  768. package/plugins/lisa-wiki-devin/skills/lisa-wiki-lint/SKILL.md +32 -0
  769. package/plugins/lisa-wiki-devin/skills/lisa-wiki-migrate/SKILL.md +43 -0
  770. package/plugins/lisa-wiki-devin/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
  771. package/plugins/lisa-wiki-devin/skills/lisa-wiki-query/SKILL.md +40 -0
  772. package/plugins/lisa-wiki-devin/skills/lisa-wiki-setup/SKILL.md +75 -0
  773. package/plugins/lisa-wiki-devin/skills/lisa-wiki-setup-automations/SKILL.md +83 -0
  774. package/plugins/lisa-wiki-devin/skills/lisa-wiki-status/SKILL.md +47 -0
  775. package/plugins/lisa-wiki-devin/skills/lisa-wiki-tear-down-automations/SKILL.md +34 -0
  776. package/plugins/lisa-wiki-devin/skills/lisa-wiki-usage/SKILL.md +50 -0
  777. package/plugins/lisa-wiki-devin/templates/agents/role-agent.claude.md +16 -0
  778. package/plugins/lisa-wiki-devin/templates/agents/role-agent.codex.toml +15 -0
  779. package/plugins/lisa-wiki-devin/templates/index.md +17 -0
  780. package/plugins/lisa-wiki-devin/templates/llm-wiki-contract.md +72 -0
  781. package/plugins/lisa-wiki-devin/templates/log.md +8 -0
  782. package/plugins/lisa-wiki-devin/templates/page-types/architecture.md +18 -0
  783. package/plugins/lisa-wiki-devin/templates/page-types/concept.md +18 -0
  784. package/plugins/lisa-wiki-devin/templates/page-types/decision.md +18 -0
  785. package/plugins/lisa-wiki-devin/templates/page-types/entity.md +19 -0
  786. package/plugins/lisa-wiki-devin/templates/page-types/open-question.md +18 -0
  787. package/plugins/lisa-wiki-devin/templates/page-types/playbook.md +18 -0
  788. package/plugins/lisa-wiki-devin/templates/page-types/project.md +19 -0
  789. package/plugins/lisa-wiki-devin/templates/page-types/requirement.md +19 -0
  790. package/plugins/lisa-wiki-devin/templates/page-types/staff.md +26 -0
  791. package/plugins/lisa-wiki-devin/templates/start-here.md +24 -0
  792. package/plugins/lisa-wiki-devin/templates/state-readme.md +20 -0
  793. package/plugins/lisa-wiki-devin/templates/wrapper-gitignore.txt +19 -0
  794. package/scripts/build-plugins.sh +2 -2
  795. package/scripts/deployed-guard-advice.mjs +1 -0
  796. package/scripts/generate-devin-plugin-artifacts.mjs +263 -0
  797. package/scripts/lib/hook-registration-audit.mjs +3 -1
  798. package/scripts/lib/per-agent-hook-filter.mjs +174 -5
  799. package/scripts/lib/plugin-rule-citations.mjs +2 -2
@@ -0,0 +1,469 @@
1
+ ---
2
+ name: lisa-atlassian-access
3
+ description: "Vendor-neutral access layer for Atlassian (JIRA + Confluence). Every jira-* and confluence-* skill MUST delegate through this skill rather than calling Atlassian directly. Per the credential-substrate-precedence contract, resolves a substrate per operation with the ATLASSIAN_API_TOKEN curl path first for reads and writes alike whenever the token is present and identity-matched — binding JIRA writes to the configured cloudId — then acli, then the Atlassian MCP as fallbacks. acli is used when installed and switchable to a profile matching the configured site; mismatched active profiles are skipped only after switch plus re-verification fails, and acli writes are a guarded fallback with post-write tenant assertions."
4
+ allowed-tools: ["Bash", "Read", "Skill"]
5
+ ---
6
+
7
+ # Atlassian Access: $ARGUMENTS
8
+
9
+ Single chokepoint for all Atlassian operations. Routes each op to a substrate, enforces connection match, returns structured result. Caller skills (`jira-*`, `confluence-*`) MUST go through this — they MUST NOT invoke `acli` directly, call Atlassian MCP tools directly, or curl the Atlassian REST API themselves.
10
+
11
+ ## Invocation contract
12
+
13
+ The caller passes one operation plus its arguments. Operations are listed in the dispatch table below. The skill returns either the structured operation result (JSON when the substrate provides it) or a clear error.
14
+
15
+ For agent-composed JIRA or Confluence comments, apply `lisa-tracker-sync` — **Agent attribution** before posting. Preserve an existing disclosure and the exact format of machine-managed comments.
16
+
17
+ ```text
18
+ operation: read-ticket key: PROJ-123
19
+ operation: write-ticket payload: {...}
20
+ operation: transition key: PROJ-123 to: "In Review"
21
+ operation: comment key: PROJ-123 body: "..."
22
+ operation: search-issues jql: "project = SE AND status = Open"
23
+ operation: read-page id: 12345
24
+ operation: write-page payload: {...}
25
+ ```
26
+
27
+ ## Workflow
28
+
29
+ ### Step 1 — Substrate selection (per operation)
30
+
31
+ Read config:
32
+
33
+ ```bash
34
+ SITE=$(jq -r '.atlassian.site // empty' .lisa.config.json)
35
+ CLOUDID=$(jq -r '.atlassian.cloudId // empty' .lisa.config.json)
36
+ EMAIL=$(jq -r '.atlassian.email // empty' .lisa.config.local.json 2>/dev/null)
37
+ [ -z "$CLOUDID" ] && { echo "Error: atlassian.cloudId not set. Run /lisa:setup:atlassian." >&2; exit 1; }
38
+ ```
39
+
40
+ Probe each tier in order; the first that's ready AND identity-matches is the substrate for this operation. The ordering is the shared `credential-substrate-precedence` contract — the configured-provider token substrate leads for **reads and writes alike**, with acli and the MCP as identity-matched fallbacks — not an Atlassian-local choice. Identity-match is verified before any operation; substrates authenticated as a different Atlassian account are switched to the configured profile when one exists, then skipped only if the switch fails or re-verification still mismatches.
41
+
42
+ ```bash
43
+ substrate=""
44
+
45
+ # Tier 1: curl + API token — the configured-provider substrate, resolved through
46
+ # lisa-secrets-access. Leads for every operation because it is per-invocation-bound:
47
+ # the cloudId-scoped gateway URL and the token's own account carry the tenant inside
48
+ # the request, so no ambient machine-global state can redirect it. acli (one global
49
+ # active account) and the MCP (browser OAuth session) are ambient-bound and therefore
50
+ # TOCTOU-exposed — see credential-substrate-precedence, "tenant safety".
51
+ read_atlassian_token() {
52
+ local email="$1"
53
+ [ -n "$ATLASSIAN_API_TOKEN" ] && { echo "$ATLASSIAN_API_TOKEN"; return; }
54
+ local slug=$(echo "$email" | tr '[:upper:]@.' '[:lower:]__')
55
+ local varname="ATLASSIAN_API_TOKEN_${slug}"
56
+ [ -n "${!varname}" ] && { echo "${!varname}"; return; }
57
+ # Preferred path: the single secrets chokepoint. It owns the one-store rule
58
+ # and the surface ladder, so anything it can answer must not be read out of an
59
+ # OS keychain here — a second reader is how the same credential ends up living
60
+ # in two places and drifting.
61
+ #
62
+ # Ordered across trusted machine-managed substrates, ending at the installed
63
+ # package. Checkout-local paths are deliberately absent: a familiar generated
64
+ # destination is still repository-controlled executable code. The plugin
65
+ # rungs are the floor: `resolve-secret.mjs` ships beside this skill, so a rung
66
+ # pointing at it is reachable from anywhere the plugin itself is installed.
67
+ # Without one, a consumer repository that vendors none of the leading paths
68
+ # never reaches a resolver at all — the ladder exits without having asked
69
+ # anything, which is what pushed agents into improvising their own credential
70
+ # lookups. This LADDER is identical in every skill that resolves a credential
71
+ # and `credential-resolver-ladder` fails if any copy diverges. Only what
72
+ # happens AFTER the ladder may differ between them.
73
+ # Executable resolvers are a code boundary. Checkout-local copies are mutable
74
+ # repository content, so use only machine-managed plugin/package locations.
75
+ local candidates=()
76
+ if [ -n "${CLAUDE_PLUGIN_ROOT:-}" ]; then
77
+ candidates+=("$CLAUDE_PLUGIN_ROOT/skills/lisa-secrets-access/scripts/resolve-secret.mjs")
78
+ fi
79
+ if [ -n "${PLUGIN_ROOT:-}" ]; then
80
+ candidates+=("$PLUGIN_ROOT/skills/lisa-secrets-access/scripts/resolve-secret.mjs")
81
+ fi
82
+ # Last rung deliberately needs no environment variable: an agent that was
83
+ # never handed a plugin root still has the installed package to fall back on.
84
+ candidates+=(node_modules/@codyswann/lisa/plugins/lisa/skills/lisa-secrets-access/scripts/resolve-secret.mjs)
85
+
86
+ local resolver
87
+ local tried=()
88
+ for resolver in "${candidates[@]}"; do
89
+ tried+=("$resolver")
90
+ if [ -f "$resolver" ]; then
91
+ local via_lisa
92
+ via_lisa=$(node "$resolver" get ATLASSIAN_API_TOKEN 2>/dev/null) \
93
+ && [ -n "$via_lisa" ] && { echo "$via_lisa"; return; }
94
+ # Empty/error means this substrate had no answer; try the next trusted one.
95
+ fi
96
+ done
97
+ # Legacy fallback: the OS keychain written by the guided /lisa:setup:atlassian
98
+ # flow, for projects that have not adopted a credentials provider. Reached only
99
+ # when the chokepoint is absent or has no entry.
100
+ #
101
+ # This rung is REMOVED ON 2026-11-01 — a dated migration ramp, not a standing
102
+ # exemption (see credential-substrate-precedence, "Legacy OS-keychain fallback
103
+ # — removal date"). A keychain entry is machine-local ambient state no headless
104
+ # surface can reach, so a project resting on it has no working tier 1 in cron,
105
+ # CI, or a cloud session. Re-run /lisa:setup:atlassian before that date to
106
+ # store ATLASSIAN_API_TOKEN through the chokepoint instead.
107
+ local from_keychain=""
108
+ case "$(uname -s)" in
109
+ Darwin) from_keychain=$(security find-generic-password -s lisa-atlassian -a "$email" -w 2>/dev/null) ;;
110
+ Linux) command -v secret-tool >/dev/null && \
111
+ from_keychain=$(secret-tool lookup service lisa-atlassian account "$email" 2>/dev/null) ;;
112
+ MINGW*|MSYS*|CYGWIN*)
113
+ # `cmdkey /generic ... /pass:` stores the secret in Windows Credential Manager, but
114
+ # `cmdkey /list` never prints stored passwords (by design). Read the CredentialBlob
115
+ # back via the Win32 CredRead API through PowerShell; pass the target name via an env
116
+ # var to dodge nested quoting, and strip the CRLF powershell.exe appends.
117
+ from_keychain=$(LISA_CRED_TARGET="lisa-atlassian-${email}" powershell.exe -NoProfile -NonInteractive -Command '
118
+ Add-Type -TypeDefinition @"
119
+ using System;
120
+ using System.Runtime.InteropServices;
121
+ public static class LisaCred {
122
+ [StructLayout(LayoutKind.Sequential)]
123
+ private struct CREDENTIAL {
124
+ public int Flags; public int Type; public IntPtr TargetName; public IntPtr Comment;
125
+ public System.Runtime.InteropServices.ComTypes.FILETIME LastWritten;
126
+ public int CredentialBlobSize; public IntPtr CredentialBlob; public int Persist;
127
+ public int AttributeCount; public IntPtr Attributes; public IntPtr TargetAlias; public IntPtr UserName;
128
+ }
129
+ [DllImport("advapi32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
130
+ private static extern bool CredRead(string target, int type, int flags, out IntPtr credential);
131
+ [DllImport("advapi32.dll")] private static extern void CredFree(IntPtr cred);
132
+ public static string Read(string target) {
133
+ IntPtr p;
134
+ if (!CredRead(target, 1, 0, out p)) { return null; }
135
+ try {
136
+ CREDENTIAL c = (CREDENTIAL)Marshal.PtrToStructure(p, typeof(CREDENTIAL));
137
+ if (c.CredentialBlobSize == 0) { return String.Empty; }
138
+ return Marshal.PtrToStringUni(c.CredentialBlob, c.CredentialBlobSize / 2);
139
+ } finally { CredFree(p); }
140
+ }
141
+ }
142
+ "@
143
+ [LisaCred]::Read($env:LISA_CRED_TARGET)' 2>/dev/null | tr -d '\r') ;;
144
+ esac
145
+ [ -n "$from_keychain" ] && { echo "$from_keychain"; return; }
146
+
147
+ # Name every path. A bare `return 1` sends the next reader hunting for a
148
+ # resolver they cannot see the absence of; the enumeration turns that into a
149
+ # seconds-long diagnosis. Paths and store coordinates only — never any
150
+ # resolved value, on any path.
151
+ echo "Error: could not resolve ATLASSIAN_API_TOKEN through lisa-secrets-access or the legacy keychain." >&2
152
+ echo "Tried, in order (relative paths are from $PWD):" >&2
153
+ printf ' %s\n' "${tried[@]}" >&2
154
+ echo " <OS keychain> service=lisa-atlassian account=<configured>" >&2
155
+ return 1
156
+ }
157
+ TOKEN=$(read_atlassian_token "$EMAIL")
158
+ if [ -n "$TOKEN" ]; then
159
+ # Identity-match before use: /rest/api/3/myself must report the configured account
160
+ # (Step 2). A present-but-wrong token fails the gate loudly instead of quietly
161
+ # deferring to an acli profile or MCP session authenticated somewhere else — that
162
+ # silent success is the bug class the precedence contract exists to surface.
163
+ if atlassian_token_matches_config "$TOKEN" "$EMAIL" "$CLOUDID"; then
164
+ curl_available=true
165
+ substrate="curl"
166
+ else
167
+ echo "Warning: ATLASSIAN_API_TOKEN does not match the configured account/site. Skipping curl tier." >&2
168
+ fi
169
+ fi
170
+
171
+ # Tier 2: acli — identity-matched fallback. Used when no token is available, or for
172
+ # operations with no curl adapter. Never the primary path for JIRA writes when token
173
+ # auth is available: acli stores one machine-global active account and workitem writes
174
+ # cannot pin a cloudId per invocation, so switch-then-write is a TOCTOU risk in
175
+ # multi-account or concurrent sessions. When a write does land here it is the *guarded*
176
+ # fallback documented in the dispatch table (assert, write, re-read, assert, roll back).
177
+ if command -v acli >/dev/null 2>&1 && acli auth status >/dev/null 2>&1; then
178
+ current_site=$(acli auth status 2>/dev/null | awk '/^ Site:/{print $2}')
179
+ if [ "$current_site" != "$SITE" ]; then
180
+ # acli installed but pointing at a different site. Try switching profiles.
181
+ acli auth switch --site "$SITE" ${EMAIL:+--email "$EMAIL"} >/dev/null 2>&1 || true
182
+ current_site=$(acli auth status 2>/dev/null | awk '/^ Site:/{print $2}')
183
+ fi
184
+ if [ "$current_site" = "$SITE" ]; then
185
+ acli_available=true
186
+ # Mark acli available even if curl already won tier 1 — used for ops curl can't do.
187
+ : ${substrate:=acli}
188
+ fi
189
+ fi
190
+
191
+ # Tier 3: Atlassian MCP — first-class interactive fallback, for when neither tier above
192
+ # is available or covers the operation (e.g. an op with no curl and no acli adapter).
193
+ # Probe via mcp__plugin_atlassian_atlassian__getAccessibleAtlassianResources.
194
+ # (Pseudo-code; actual call is the MCP tool invocation, not a bash command.)
195
+ # If the MCP returns a list and $CLOUDID is in it, MCP is identity-matched.
196
+ # If the MCP is unauthenticated or $CLOUDID is NOT in the list, MCP is skipped.
197
+ if mcp_atlassian_authenticated_and_matches_cloudid "$CLOUDID"; then
198
+ : ${substrate:=mcp}
199
+ # Mark MCP as available even if an earlier tier won — used for ops they can't do.
200
+ mcp_available=true
201
+ fi
202
+
203
+ # Fail loudly with actionable remediation if nothing works.
204
+ if [ -z "$substrate" ]; then
205
+ # Detect plugin enablement state for the suggestion.
206
+ plugin_enabled_global=$(jq -r '.enabledPlugins["atlassian@claude-plugins-official"] // false' ~/.claude/settings.json 2>/dev/null || echo "false")
207
+ plugin_enabled_project=$(jq -r '.enabledPlugins["atlassian@claude-plugins-official"] // false' .claude/settings.json 2>/dev/null || echo "false")
208
+ plugin_enabled_local=$(jq -r '.enabledPlugins["atlassian@claude-plugins-official"] // false' .claude/settings.local.json 2>/dev/null || echo "false")
209
+
210
+ cat >&2 <<EOF
211
+ Error: no Atlassian access substrate available for site $SITE.
212
+
213
+ Attempted (in credential-substrate-precedence order):
214
+ curl — no ATLASSIAN_API_TOKEN found for $EMAIL (env, slug-suffixed env, or keychain) OR the token does not match the configured account/site
215
+ acli — $(command -v acli >/dev/null && echo "installed but identity mismatch or unauthenticated" || echo "not installed")
216
+ MCP — $([ "$plugin_enabled_global" = "true" ] || [ "$plugin_enabled_project" = "true" ] || [ "$plugin_enabled_local" = "true" ] && echo "plugin enabled but not authenticated or cloudId $CLOUDID not in accessible resources" || echo "plugin not enabled in any settings.json scope")
217
+
218
+ Remediation paths (the first is the contract's primary path):
219
+
220
+ 1. Provision an API token — works headless, in CI, in subagents, and in
221
+ multi-account setups, and is the substrate this project resolves first.
222
+
223
+ Run /lisa:setup:atlassian — guided flow with clipboard-piped keychain store.
224
+
225
+ 2. Install acli and authenticate (identity-matched fallback for multi-account developers).
226
+
227
+ brew tap atlassian/homebrew-acli && brew install acli
228
+ acli auth login # OAuth as the account matching $EMAIL
229
+
230
+ 3. Install the Atlassian MCP plugin (local scope — per-developer, gitignored).
231
+ The supported fallback when no credentials provider is configured.
232
+
233
+ Run in your terminal:
234
+
235
+ jq '.enabledPlugins["atlassian@claude-plugins-official"] = true' \\
236
+ .claude/settings.local.json 2>/dev/null > /tmp/s && \\
237
+ mv /tmp/s .claude/settings.local.json || \\
238
+ echo '{"enabledPlugins":{"atlassian@claude-plugins-official":true}}' > .claude/settings.local.json
239
+
240
+ Then restart Claude Code (or run /restart-mcp) to load the plugin, and
241
+ invoke 'mcp__plugin_atlassian_atlassian__authenticate' to complete OAuth.
242
+
243
+ EOF
244
+ exit 1
245
+ fi
246
+ ```
247
+
248
+ Operation dispatch then uses `$substrate` for the primary route. If the operation has no adapter for the selected substrate, fall through in contract order — `$curl_available`, then `$acli_available`, then `$mcp_available` — skipping the tier already tried. The fall-through stops at the first available tier that can perform the operation. A tier that failed identity-match is never in the fall-through set.
249
+
250
+ ### Step 2 — Connection-match check
251
+
252
+ The active connection MUST point at the cloudId/site declared in `.lisa.config.json`. Identity-match is mandatory on **every** substrate, tier 1 included (`credential-substrate-precedence`); the "curl mode check" below *is* the tier-1 gate referenced as `atlassian_token_matches_config` in Step 1. Step 1's substrate selection already validates the token account and tries to switch mismatched acli profiles before selection. This step repeats the assertion before any operation runs — defensive in case the substrate state changed since selection.
253
+
254
+ Read configured site:
255
+
256
+ ```bash
257
+ cloudid=$(jq -r '.atlassian.cloudId // empty' .lisa.config.json)
258
+ site=$(jq -r '.atlassian.site // empty' .lisa.config.json) # optional human-readable site URL
259
+ email=$(jq -r '.atlassian.email // empty' .lisa.config.json) # optional, for multi-account disambiguation
260
+
261
+ if [ -z "$cloudid" ]; then
262
+ echo "Error: atlassian.cloudId not set in .lisa.config.json. Run /lisa:setup:atlassian." >&2
263
+ exit 1
264
+ fi
265
+ ```
266
+
267
+ **CLI mode check**:
268
+
269
+ ```bash
270
+ # Compare active acli profile against config.
271
+ current=$(acli auth status --json 2>/dev/null)
272
+ current_site=$(echo "$current" | jq -r '.site // empty')
273
+ current_email=$(echo "$current" | jq -r '.email // empty')
274
+
275
+ if [ -n "$site" ] && [ "$current_site" != "$site" ]; then
276
+ # Profile mismatch — switch, then re-verify. Do not trust the switch exit
277
+ # status alone because acli's active account is machine-global state.
278
+ acli auth switch --site "$site" ${email:+--email "$email"}
279
+ current=$(acli auth status --json 2>/dev/null)
280
+ current_site=$(echo "$current" | jq -r '.site // empty')
281
+ current_email=$(echo "$current" | jq -r '.email // empty')
282
+ fi
283
+
284
+ if [ -n "$site" ] && [ "$current_site" != "$site" ]; then
285
+ echo "Error: acli active site is '$current_site', but .lisa.config.json requires '$site'. Run /lisa:setup:atlassian to add or repair the matching profile." >&2
286
+ exit 1
287
+ fi
288
+
289
+ if [ -n "$email" ] && [ -n "$current_email" ] && [ "$current_email" != "$email" ]; then
290
+ echo "Error: acli active account does not match the configured Atlassian account. Run /lisa:setup:atlassian to add or repair the matching profile." >&2
291
+ exit 1
292
+ fi
293
+ ```
294
+
295
+ If `acli auth switch` fails because no matching profile exists, surface the error verbatim and instruct the caller to run `/lisa:setup:atlassian` to add the profile.
296
+
297
+ **curl mode check** (when the chosen op routes to curl):
298
+
299
+ ```bash
300
+ # Validate the active ATLASSIAN_API_TOKEN points at the configured account by
301
+ # hitting /rest/api/3/myself and comparing emailAddress.
302
+ AUTH=$(printf '%s:%s' "$email" "$ATLASSIAN_API_TOKEN" | base64)
303
+ myself=$(curl -s -H "Authorization: Basic $AUTH" \
304
+ "https://${site}/rest/api/3/myself")
305
+ me_email=$(echo "$myself" | jq -r '.emailAddress // empty')
306
+
307
+ if [ -z "$me_email" ]; then
308
+ echo "Error: ATLASSIAN_API_TOKEN failed authentication against $site. Run /lisa:setup:atlassian to re-issue." >&2
309
+ exit 1
310
+ fi
311
+ if [ "$me_email" != "$email" ]; then
312
+ echo "Error: ATLASSIAN_API_TOKEN identity does not match the configured Atlassian account. Multi-account misconfiguration; re-run /lisa:setup:atlassian." >&2
313
+ exit 1
314
+ fi
315
+ ```
316
+
317
+ If validation fails, never silently proceed — abort and instruct the user to fix env.
318
+
319
+ ### Step 2.5 — JIRA description normalization
320
+
321
+ For `write-ticket` create/edit operations, normalize any Lisa-authored JIRA description before dispatching to a substrate. JIRA Cloud stores descriptions as Atlassian Document Format (ADF). `acli` does not convert Markdown or JIRA wiki markup to ADF; if plain text is passed to `--description` / `--description-file`, JIRA stores one literal paragraph containing strings like `## Repository` or `h2. Repository`. That breaks `jira-validate-ticket` heading checks and renders poorly for humans.
322
+
323
+ Use the shared converter at `scripts/markdown-to-adf.mjs` from this skill for every write path that carries a string description:
324
+
325
+ ```bash
326
+ normalize_jira_description_payload() {
327
+ local payload_file="$1"
328
+ local converter="$(dirname "$0")/scripts/markdown-to-adf.mjs"
329
+
330
+ jq -e '.fields.description | type == "string"' "$payload_file" >/dev/null 2>&1 || return 0
331
+
332
+ local markdown_file adf_file
333
+ markdown_file=$(mktemp)
334
+ adf_file=$(mktemp)
335
+ jq -r '.fields.description' "$payload_file" > "$markdown_file"
336
+ node "$converter" < "$markdown_file" > "$adf_file"
337
+ jq --slurpfile adf "$adf_file" '.fields.description = $adf[0]' "$payload_file" > "$payload_file.tmp"
338
+ mv "$payload_file.tmp" "$payload_file"
339
+ }
340
+ ```
341
+
342
+ Rules:
343
+
344
+ - Convert Markdown headings (`#` / `##` / `###`) and JIRA wiki headings (`h1.` / `h2.` / `h3.`) to ADF `heading` nodes.
345
+ - Convert fenced code blocks, bullet lists, numbered lists, paragraphs, inline code, and bold text to their ADF equivalents.
346
+ - Run this for acli, curl, and MCP writes unless the caller already supplied an ADF object (`description.type == "doc"`). Do not double-convert existing ADF.
347
+ - For acli, pass the normalized JSON through `--from-json`; do not use `--description` or `--description-file` with raw Markdown/wiki text.
348
+
349
+ ### Step 3 — Operation dispatch
350
+
351
+ Substrate column meanings (ordering per `credential-substrate-precedence`):
352
+
353
+ - **`curl`**: routes through curl + Basic auth + `ATLASSIAN_API_TOKEN` — the configured-provider substrate. Preferred for every operation, read or write, whenever the token is present and identity-matched.
354
+ - **`acli`**: routes through `acli`. Identity-matched fallback — used when no token is available or the op has no curl adapter. For JIRA writes it is the *guarded* fallback (see the tenant-safety rule below).
355
+ - **`MCP`**: routes through the Atlassian MCP. First-class fallback for ops neither tier above covers, when identity-matched (cloudId in `getAccessibleAtlassianResources`).
356
+ - Multiple cells filled means tier ordering applies — try curl, then acli, then MCP, taking the first that has an adapter for the op AND is identity-matched.
357
+ - One cell means only that substrate can perform the op.
358
+
359
+ `<SITE>` = `.atlassian.site` (e.g. `acme.atlassian.net`). `<CLOUDID>` = `.atlassian.cloudId`. `<AUTH>` = `Basic $(printf '%s:%s' "$email" "$ATLASSIAN_API_TOKEN" | base64)`. JIRA curl writes use the cloudId-bound Atlassian gateway `https://api.atlassian.com/ex/jira/<CLOUDID>/rest/api/3/...`; JIRA curl reads may use either that gateway or `https://<SITE>/rest/api/3/...` after the token account check. Confluence uses `/wiki/rest/api/...` (v1) or `/api/v2/...` (v2).
360
+
361
+ | Operation | acli adapter | MCP adapter | curl adapter |
362
+ |---|---|---|---|
363
+ | **JIRA ops** | | | |
364
+ | `read-ticket key:<K>` | `acli jira workitem view <K> --fields '*all' --json` | `mcp__plugin_atlassian_atlassian__getJiraIssue` | `GET https://<SITE>/rest/api/3/issue/<K>?fields=*all` |
365
+ | `write-ticket payload:<P>` (create) | guarded fallback only: `acli jira workitem create --from-json <P>` + response tenant assertion | `mcp__plugin_atlassian_atlassian__createJiraIssue` | `POST https://api.atlassian.com/ex/jira/<CLOUDID>/rest/api/3/issue` body=`<P>` |
366
+ | `write-ticket payload:<P>` (edit) | guarded fallback only: `acli jira workitem edit <K> --from-json <P>` + response tenant assertion | `mcp__plugin_atlassian_atlassian__editJiraIssue` | `PUT https://api.atlassian.com/ex/jira/<CLOUDID>/rest/api/3/issue/<K>` body=`<P>` |
367
+ | `transition key:<K> to:<S>` | guarded fallback only: `acli jira workitem transition --key <K> --status "<S>" --yes` + post-read tenant assertion | `mcp__plugin_atlassian_atlassian__transitionJiraIssue` | resolve transition id then `POST https://api.atlassian.com/ex/jira/<CLOUDID>/rest/api/3/issue/<K>/transitions` |
368
+ | `transitions key:<K>` — **false friend:** available transitions from current status, **NOT** past history; for history use `changelog` | (not exposed) | `mcp__plugin_atlassian_atlassian__getTransitionsForJiraIssue` | `GET https://<SITE>/rest/api/3/issue/<K>/transitions` |
369
+ | `changelog key:<K>` (read; ordered past status transitions) | (not exposed) | (not exposed) | `GET https://<SITE>/rest/api/3/issue/<K>?expand=changelog` |
370
+ | `comments key:<K>` (read; all comments, paginated) — **not** `comment`, which is the write | (not exposed) | `mcp__plugin_atlassian_atlassian__getJiraIssue` (comment field only; may be capped — page via curl when `total` exceeds what it returned) | `GET https://<SITE>/rest/api/3/issue/<K>/comment?startAt=<n>&maxResults=100&orderBy=created` |
371
+ | `comment key:<K> body:<B>` | guarded fallback only: `acli jira workitem comment add --key <K> --body "<B>"` + post-read tenant assertion | `mcp__plugin_atlassian_atlassian__addCommentToJiraIssue` | `POST https://api.atlassian.com/ex/jira/<CLOUDID>/rest/api/3/issue/<K>/comment` |
372
+ | `link from:<K> to:<K2> type:<T>` | guarded fallback only: `acli jira workitem link create --in <K> --out <K2> --type "<T>" --yes` + direction and tenant assertion (see direction note) | `mcp__plugin_atlassian_atlassian__createJiraIssueLink` | `POST https://api.atlassian.com/ex/jira/<CLOUDID>/rest/api/3/issueLink` |
373
+ | `remote-links key:<K>` | (not exposed) | `mcp__plugin_atlassian_atlassian__getJiraIssueRemoteIssueLinks` | `GET https://<SITE>/rest/api/3/issue/<K>/remotelink` |
374
+ | `search-issues jql:<J>` | `acli jira workitem search --jql "<J>" --json` | `mcp__plugin_atlassian_atlassian__searchJiraIssuesUsingJql` | `POST https://<SITE>/rest/api/3/search/jql` |
375
+ | `list-projects` | `acli jira project list --paginate --json` | `mcp__plugin_atlassian_atlassian__getVisibleJiraProjects` | `GET https://<SITE>/rest/api/3/project/search` |
376
+ | `issue-type-metadata project:<K>` | `acli jira project view --key <K> --include-all --json` | `mcp__plugin_atlassian_atlassian__getJiraProjectIssueTypesMetadata` | `GET https://<SITE>/rest/api/3/issuetype/project?projectId=<id>` |
377
+ | **Confluence ops** | | | |
378
+ | `read-page id:<I>` | `acli confluence page view --id <I> --json` | `mcp__plugin_atlassian_atlassian__getConfluencePage` | `GET https://api.atlassian.com/ex/confluence/<CLOUDID>/wiki/rest/api/content/<I>` |
379
+ | `read-page-descendants id:<I>` | — | `mcp__plugin_atlassian_atlassian__getConfluencePageDescendants` | `GET .../content/<I>/descendant/page` |
380
+ | `read-page-comments id:<I> kind:<footer\|inline>` | — | `mcp__plugin_atlassian_atlassian__getConfluencePageFooterComments` / `getConfluencePageInlineComments` | `GET .../content/<I>/child/comment?location=<kind>` |
381
+ | `read-comment-children id:<C>` | — | `mcp__plugin_atlassian_atlassian__getConfluenceCommentChildren` | `GET .../content/<C>/child/comment` |
382
+ | `write-page payload:<P>` (create) | — | `mcp__plugin_atlassian_atlassian__createConfluencePage` | `POST .../wiki/rest/api/content` body=`<P>` |
383
+ | `write-page payload:<P>` (edit) | — | `mcp__plugin_atlassian_atlassian__updateConfluencePage` | `PUT .../content/<I>` body must include `version.number` bumped |
384
+ | `label-page id:<I> add:<L1,L2> remove:<L3,L4>` | — | (no v2 label-write endpoint on MCP) | (Atlassian gap; not used by lisa — see "Confluence PRD lifecycle" rule) |
385
+ | `comment-page id:<I> kind:<footer\|inline> body:<B>` | — | `mcp__plugin_atlassian_atlassian__createConfluenceFooterComment` / `createConfluenceInlineComment` | `POST .../content` body has `type=comment` |
386
+ | `search-pages cql:<Q>` | — | `mcp__plugin_atlassian_atlassian__searchConfluenceUsingCql` | `GET .../content/search?cql=<Q>` |
387
+ | `list-spaces` | `acli confluence space list --type global --json` | `mcp__plugin_atlassian_atlassian__getConfluenceSpaces` | `GET .../wiki/rest/api/space` |
388
+ | **Common ops** | | | |
389
+ | `list-sites` | `acli auth status --json` | `mcp__plugin_atlassian_atlassian__getAccessibleAtlassianResources` | `GET https://api.atlassian.com/oauth/token/accessible-resources` |
390
+
391
+ **Confluence v1 vs v2:** every Confluence curl path above uses **v1** (`/wiki/rest/api/...`). v1 is deprecated by Atlassian but as of writing remains functional for API-token Basic auth. The v2 API (`/api/v2/...`) requires *granular* OAuth scopes that aren't issued to Basic-auth API tokens consistently — so v1 is the safer path for now. When Atlassian fully retires v1, this table must move to v2 (the dispatch is the only thing that changes; the substrate-selection logic is unaffected).
392
+
393
+ **acli flag note:** acli's `--output` flag does not exist; the correct flag is `--json`. List commands require `--paginate` or `--limit` (no implicit fetch-all). `acli jira workitem view` defaults to a restricted field set (`key,issuetype,summary,status,assignee,description`), so `read-ticket` MUST pass `--fields '*all'` or an explicit equivalent that includes every downstream dependency: parent, subtasks, issue links, components, labels, priority, status, issue type, summary, description, fix versions, affected versions, attachments, comments, estimates, sprint/story-point fields, and project-required custom fields. Never rely on the default view fields; they hide parent/components/labels and corrupt leaf-only, relationship-search, build-ready, and required-custom-field gates. Several documented adapters are nominal — verify against `acli <subcmd> --help` before relying on them. When acli's adapter is broken or missing for a specific op, fall through to MCP (if identity-matched) then curl per the tier ordering.
394
+
395
+ **JIRA write tenant-safety rule** — the Atlassian instance of the shared guarded-fallback protocol in `credential-substrate-precedence` (which states the general rule: prefer the per-invocation-bound substrate over the ambient-bound one, for reads and writes alike; the rationale is not restated here). Create, edit, transition, comment, and link are write operations. They MUST use the curl adapter whenever token auth is available because the URL includes `<CLOUDID>` and cannot be redirected by the user-global acli active account. If the flow must fall back to acli for a write, it is a guarded fallback, not the normal path:
396
+
397
+ 1. Switch and assert the active `acli auth status` site/email matches config immediately before the write.
398
+ 2. Execute the write.
399
+ 3. Read the affected issue(s) immediately after the write.
400
+ 4. Assert each response belongs to the configured tenant by checking one of: response `self` URL host equals `<SITE>`, response `self` URL path includes `/ex/jira/<CLOUDID>/`, or response metadata reports `<CLOUDID>`.
401
+ 5. If the assertion fails, stop, report a cross-tenant write hazard, and best-effort roll back the write when there is a safe reversal: delete a newly created issue, remove a newly created comment/link, or revert a reversible field edit. Never continue as if the write succeeded.
402
+
403
+ Do not treat a successful `acli auth switch` or pre-write `auth status` as sufficient for tenant safety. Another process can mutate the global acli active account between the check and the write.
404
+
405
+ **acli link-create direction is invertible — flags and verification:** acli has no `--inward`/`--outward` flags; the real flags are `--in` and `--out` (confirm with `acli jira workitem link create --help`). For a `Blocks` link, **`--in` is the blocker and `--out` is the blocked** issue, i.e. `--in <X> --out <Y> --type Blocks` resolves to "X blocks Y" (Y `is blocked by` X). The lisa op `link from:<K> to:<K2> type:<T>` means "K ⟨T⟩ K2", so the blocker `from` maps to `--in` and the blocked `to` maps to `--out` (as in the adapter above). The acli success banner only echoes the `--in`/`--out` values you passed — it does NOT confirm the resolved semantic direction, so a reversed link reports success and looks fine. **After every `link` write, re-read the affected issues via `read-ticket` (which already requests `--fields '*all'`) and confirm `issuelinks[].type` + `inwardIssue`/`outwardIssue` resolve to the intended `blocks` / `is blocked by` direction.** Skipping this can silently reverse an entire epic's dependency graph — e.g. cutover tickets recorded as *blocking* the prerequisites that should block them.
406
+
407
+ **JIRA terminal-resolution note:** when a caller marks a transition as terminal per `leaf-only-lifecycle`, the substrate must not treat a Done-named status as sufficient by name alone. After `transition key:<K> to:<S>`, re-read the issue and verify `statusCategory = Done`; if the workflow requires a resolution, verify `resolution` is set. If the transition screen requires a resolution value, pass the configured default resolution when available; otherwise return a setup error so the build-intake skill can report the workflow gap instead of silently leaving an unresolved ticket in a Done-looking status.
408
+
409
+ Operations not in this table are unsupported — add an adapter row before using them. Adapters MUST return a structured response (parse `acli`'s `--json`; jq-process curl's raw JSON).
410
+
411
+ ### Payload conventions
412
+
413
+ - `write-ticket` payload: full JSON spec when creating; partial JSON (only changed fields, with `key` to identify) when editing. Adapters detect create vs edit by presence of `key`.
414
+ - `write-page` payload: supports a label-only mutation form — `{ "id": "<I>", "labels": { "add": [...], "remove": [...] } }` — so callers transitioning PRD lifecycle labels do not need to resend the page body. Full create/update payloads also accepted.
415
+ - `comment-page` `kind: inline` requires `anchor` (the highlighted text the comment attaches to). `kind: footer` ignores `anchor`.
416
+
417
+ ### `changelog` — transition history (read-only)
418
+
419
+ `changelog key:<K>` returns the ordered past status transitions of a JIRA issue — the raw material for rejection detection (an issue that reached `review`/`done`-ward and is now back in `ready`). It is distinct from `transitions`, which is a false friend: `transitions` lists the *available* next transitions from the current status, never past ones. `read-ticket` uses `fields=*all`, which does **not** include the changelog — the expansion must be requested explicitly with `?expand=changelog`.
420
+
421
+ - **Substrate.** The only substrate that exposes the changelog is JIRA REST via the `?expand=changelog` query parameter (a read, so the `<SITE>` gateway is allowed after the token account check). Neither `acli jira workitem view` (a field-projection tool; the changelog is an `expand`, not a field) nor the Atlassian MCP surfaces a changelog expansion, so both are marked `(not exposed)` — do not invent a separate transport, and do not try to reconstruct history from `transitions`.
422
+ - **Shape.** Walk `changelog.histories[].items[]` and keep entries where `field == "status"`; for each emit `{ from, to, when, author }` — `items[].fromString` → `items[].toString`, `histories[].created` (ISO timestamp), `histories[].author.displayName`/`accountId`. Preserve JIRA's oldest→newest ordering.
423
+ - **Empty is valid.** An issue that never transitioned returns an **empty** history — an empty history is a valid result, not an error. Callers treat empty as "never left its initial status".
424
+ - **Pagination / truncation.** The issue-resource changelog (`?expand=changelog`) truncates busy issues (`changelog.maxResults`/`total`/`startAt`). When `total` exceeds what the issue resource returned, page the dedicated endpoint `GET https://<SITE>/rest/api/3/issue/<K>/changelog?startAt=<n>` until `startAt + maxResults >= total`, preserving order across pages. A silently truncated history is a correctness bug for detection.
425
+ - **Graceful degrade — never block the build.** A failed changelog fetch (network, auth, missing substrate) returns the substrate contract's `Error:` result. Callers MUST treat that as **unknown** history and proceed — a history read failure never blocks the build.
426
+
427
+ ### `comments` — every comment on one issue
428
+
429
+ `comments key:<K>` returns every comment on a JIRA issue, oldest first. `read-ticket` embeds only the first page of comments in the issue resource (`fields.comment` carries its own `startAt`/`maxResults`/`total`), so a busy ticket's later comments — often the decisions and constraints — are missing from it.
430
+
431
+ - **Substrate.** JIRA REST `GET https://<SITE>/rest/api/3/issue/<K>/comment?startAt=<n>&maxResults=100&orderBy=created` (a read, so the `<SITE>` gateway is allowed after the token account check). acli exposes no paginated comment list; the MCP `getJiraIssue` comment field is used only when no token is available and is subject to the same first-page cap.
432
+ - **Shape.** For each entry in `comments[]` emit `{ id, author, created, body }` — `author.displayName`/`accountId`, `created` (ISO timestamp), and `body` converted from ADF to plain text with headings, lists, code, and links preserved.
433
+ - **Pagination.** Start at `startAt=0` and request the next page until `startAt + maxResults >= total`, preserving order across pages. Never stop at the first page.
434
+ - **Empty is valid.** An issue with no comments returns `total: 0`; that is a result, not an error.
435
+ - **Completeness fields.** Every result carries `comments_complete`, `comments_fetched`, and `comments_total`; `comments_complete: true` only when `comments_fetched == comments_total`. When only the MCP substrate is available and it cannot page past its first batch, return what it gave with `comments_complete: false` and the fetched-versus-total counts — never present a capped set as the whole.
436
+ - **Graceful degrade.** A failed page (network, auth, missing substrate) returns the substrate contract's `Error:` result for that page. Callers record the issue's comments as **incomplete** — naming how many of `total` were read — so a partial set is never silently truncated into looking complete.
437
+
438
+ ### Step 4 — Return result
439
+
440
+ Emit either:
441
+
442
+ - The structured operation result (JSON object), wrapped in a `<result>` block for caller parsing, OR
443
+ - An error message prefixed with `Error:` and a remediation hint. Exit non-zero. Include the HTTP status code (curl) or acli exit code so callers can route on it.
444
+
445
+ Do not paraphrase substrate output beyond JSON normalization.
446
+
447
+ ## Invariants
448
+
449
+ - Caller skills never invoke `acli` or `curl` against Atlassian directly. They only invoke this skill.
450
+ - Tier order is the shared `credential-substrate-precedence` contract — token curl first (reads **and** writes), then acli, then the Atlassian MCP. Do not restate or locally override the ordering here.
451
+ - acli and the Atlassian MCP remain first-class **fallbacks**, not removed tiers: every adapter stays in the dispatch table, and a project with no credentials provider is fully functional on them.
452
+ - Substrate is decided once per skill invocation and never switches mid-operation.
453
+ - Connection match is mandatory on every tier, including the token tier. Operations that bypass it (because "the user obviously meant the configured site") are forbidden. A present-but-wrong token fails the gate rather than deferring to another substrate.
454
+ - Profile mutations (`acli auth switch`) are allowed when acli is the active substrate. The curl substrate never mutates the token — if `ATLASSIAN_API_TOKEN` doesn't match the configured account, fail loud rather than silently substituting.
455
+ - JIRA writes are cloudId-bound by default. `acli` write adapters are fallback-only and must perform post-write tenant assertions plus safe rollback on mismatch.
456
+ - `.lisa.config.local.json` overrides `.lisa.config.json` per-key — the same precedence rule as every other consumer of project config.
457
+
458
+ ## Headless behavior
459
+
460
+ In a headless / non-interactive context, the MCP tier is unavailable (its OAuth flow needs a browser). The ladder collapses to: curl + `ATLASSIAN_API_TOKEN` → acli (if pre-authenticated, e.g., a CI image baked with a service-account token). Because curl is already tier 1 interactively, headless and interactive sessions take the **same primary path** — that is the "headless parity" arm of `credential-substrate-precedence`, and it is why a credential problem reproduces on a laptop instead of only in cron. Never block on interactive prompts. If both fail readiness checks, exit non-zero with a deterministic error.
461
+
462
+ Treat all four of these as headless:
463
+
464
+ - no TTY
465
+ - `CI=true`
466
+ - `-p` mode
467
+ - **a subagent / teammate session** — measured (#2148): a subagent sees only the OAuth bootstrap stubs (`…__authenticate`, `…__complete_authentication`), never the data tools, and a direct call returns `No such tool available` rather than an auth error. The request never leaves the harness. This is not a general MCP block — other MCP servers work fine from a subagent — it is specific to servers whose OAuth completed in the lead. Crucially **acli works normally in a subagent**, so the ladder already has a working tier; it just has to skip MCP to reach it.
468
+
469
+ Detecting the subagent case: Lisa's Claude hooks already mark it — `SubagentStart` writes `"${STATE_DIR}/${SESSION_ID}.subagent"`, consumed by `enforce-verification-gate.sh` and `enforce-team-first.sh`. Where that flag is unavailable, probing the MCP tier and finding only `authenticate`-shaped tools is the same signal: treat it as unavailable and fall through rather than attempting a call that cannot succeed.