@codyswann/lisa 4.74.9 → 4.75.1

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 (805) hide show
  1. package/.claude-plugin/marketplace.json +60 -0
  2. package/all/copy-overwrite/scripts/lib/npm-update-github.mjs +73 -40
  3. package/all/copy-overwrite/scripts/lib/npm-update-invariants.mjs +54 -0
  4. package/all/copy-overwrite/scripts/npm-updater-helper-graph.json +3 -2
  5. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  6. package/dist/core/lisa-owned-hash-ledger.js +6 -0
  7. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  8. package/dist/core/lisa-skill-sources.d.ts +3 -3
  9. package/dist/core/lisa-skill-sources.d.ts.map +1 -1
  10. package/dist/core/lisa-skill-sources.js +3 -2
  11. package/dist/core/lisa-skill-sources.js.map +1 -1
  12. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  13. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  14. package/dist/core/upstream-evidence-manifest.js +735 -8
  15. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  16. package/package.json +4 -4
  17. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa-agy/plugin.json +1 -1
  20. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  22. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  23. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-cdk-devin/.claude-plugin/plugin.json +11 -0
  26. package/plugins/lisa-cdk-devin/.devin-plugin/plugin.json +8 -0
  27. package/plugins/lisa-cdk-devin/skills/setup-aws-accounts/SKILL.md +292 -0
  28. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-devin/.claude-plugin/plugin.json +8 -0
  31. package/plugins/lisa-devin/.devin-plugin/plugin.json +8 -0
  32. package/plugins/lisa-devin/.mcp.json +8 -0
  33. package/plugins/lisa-devin/agents/architecture-specialist.md +32 -0
  34. package/plugins/lisa-devin/agents/bug-fixer.md +43 -0
  35. package/plugins/lisa-devin/agents/builder.md +44 -0
  36. package/plugins/lisa-devin/agents/confluence-prd-intake.md +65 -0
  37. package/plugins/lisa-devin/agents/debug-specialist.md +34 -0
  38. package/plugins/lisa-devin/agents/eval-specialist.md +33 -0
  39. package/plugins/lisa-devin/agents/git-history-analyzer.md +183 -0
  40. package/plugins/lisa-devin/agents/github-agent.md +155 -0
  41. package/plugins/lisa-devin/agents/github-build-intake.md +64 -0
  42. package/plugins/lisa-devin/agents/github-prd-intake.md +66 -0
  43. package/plugins/lisa-devin/agents/jira-agent.md +135 -0
  44. package/plugins/lisa-devin/agents/jira-build-intake.md +64 -0
  45. package/plugins/lisa-devin/agents/learner.md +85 -0
  46. package/plugins/lisa-devin/agents/learning-judge.md +119 -0
  47. package/plugins/lisa-devin/agents/learnings-synthesizer.md +155 -0
  48. package/plugins/lisa-devin/agents/linear-agent.md +138 -0
  49. package/plugins/lisa-devin/agents/linear-build-intake.md +64 -0
  50. package/plugins/lisa-devin/agents/linear-prd-intake.md +66 -0
  51. package/plugins/lisa-devin/agents/notion-prd-intake.md +63 -0
  52. package/plugins/lisa-devin/agents/performance-specialist.md +26 -0
  53. package/plugins/lisa-devin/agents/pr-mining-specialist.md +85 -0
  54. package/plugins/lisa-devin/agents/product-specialist.md +30 -0
  55. package/plugins/lisa-devin/agents/quality-specialist.md +30 -0
  56. package/plugins/lisa-devin/agents/security-specialist.md +43 -0
  57. package/plugins/lisa-devin/agents/skill-evaluator.md +205 -0
  58. package/plugins/lisa-devin/agents/spec-conformance-specialist.md +56 -0
  59. package/plugins/lisa-devin/agents/test-specialist.md +32 -0
  60. package/plugins/lisa-devin/agents/tracker-mining-specialist.md +85 -0
  61. package/plugins/lisa-devin/agents/verification-specialist.md +145 -0
  62. package/plugins/lisa-devin/hooks/auto-update.mjs +824 -0
  63. package/plugins/lisa-devin/hooks/auto-update.sh +31 -0
  64. package/plugins/lisa-devin/hooks/block-blind-automerge.sh +1242 -0
  65. package/plugins/lisa-devin/hooks/block-direct-issue-create.sh +2603 -0
  66. package/plugins/lisa-devin/hooks/block-host-name-leak.mjs +412 -0
  67. package/plugins/lisa-devin/hooks/block-host-name-leak.sh +61 -0
  68. package/plugins/lisa-devin/hooks/block-instruction-file-edits.sh +207 -0
  69. package/plugins/lisa-devin/hooks/block-managed-file-edits.sh +1175 -0
  70. package/plugins/lisa-devin/hooks/block-no-verify.sh +2288 -0
  71. package/plugins/lisa-devin/hooks/block-shell-json-parsing.sh +263 -0
  72. package/plugins/lisa-devin/hooks/cleanup-stale-worktrees.sh +122 -0
  73. package/plugins/lisa-devin/hooks/devin-tool-name-shim.sh +30 -0
  74. package/plugins/lisa-devin/hooks/discharge-work-item-gates.sh +90 -0
  75. package/plugins/lisa-devin/hooks/enforce-verification-gate.sh +506 -0
  76. package/plugins/lisa-devin/hooks/enforcement-vintage-npm.mjs +320 -0
  77. package/plugins/lisa-devin/hooks/enforcement-vintage.mjs +472 -0
  78. package/plugins/lisa-devin/hooks/enforcement-vintage.sh +48 -0
  79. package/plugins/lisa-devin/hooks/failure-signature-index.mjs +717 -0
  80. package/plugins/lisa-devin/hooks/failure-signature-index.sh +26 -0
  81. package/plugins/lisa-devin/hooks/guard-dedupe.bash +374 -0
  82. package/plugins/lisa-devin/hooks/inject-resolved-config.mjs +903 -0
  83. package/plugins/lisa-devin/hooks/inject-resolved-config.sh +107 -0
  84. package/plugins/lisa-devin/hooks/inject-rules.sh +49 -0
  85. package/plugins/lisa-devin/hooks/install-pkgs.sh +84 -0
  86. package/plugins/lisa-devin/hooks/operational-hazards.mjs +736 -0
  87. package/plugins/lisa-devin/hooks/operational-hazards.sh +28 -0
  88. package/plugins/lisa-devin/hooks/parity-safety-net-heredoc.py +1004 -0
  89. package/plugins/lisa-devin/hooks/parity-safety-net.sh +3275 -0
  90. package/plugins/lisa-devin/hooks/secrets-preflight.sh +72 -0
  91. package/plugins/lisa-devin/hooks/setup-jira-cli.sh +205 -0
  92. package/plugins/lisa-devin/hooks/shell-write-nudge.sh +86 -0
  93. package/plugins/lisa-devin/hooks/sonar-secrets.sh +205 -0
  94. package/plugins/lisa-devin/hooks/threshold-ratchet-compare.mjs +518 -0
  95. package/plugins/lisa-devin/hooks/threshold-ratchet-families.mjs +543 -0
  96. package/plugins/lisa-devin/hooks/threshold-ratchet.mjs +568 -0
  97. package/plugins/lisa-devin/hooks/threshold-ratchet.sh +22 -0
  98. package/plugins/lisa-devin/hooks/withdrawn-rulings.mjs +600 -0
  99. package/plugins/lisa-devin/hooks/withdrawn-rulings.sh +24 -0
  100. package/plugins/lisa-devin/hooks/worktree-binding-guard.mjs +1383 -0
  101. package/plugins/lisa-devin/hooks/worktree-binding-guard.sh +79 -0
  102. package/plugins/lisa-devin/hooks.json +247 -0
  103. package/plugins/lisa-devin/rules/eager/00-rule-index.md +82 -0
  104. package/plugins/lisa-devin/rules/eager/base-rules.md +85 -0
  105. package/plugins/lisa-devin/rules/eager/coding-philosophy.md +27 -0
  106. package/plugins/lisa-devin/rules/eager/config-resolution.md +37 -0
  107. package/plugins/lisa-devin/rules/eager/do-it-now.md +11 -0
  108. package/plugins/lisa-devin/rules/eager/empirical-inquiry.md +24 -0
  109. package/plugins/lisa-devin/rules/eager/falsifiable-checks.md +48 -0
  110. package/plugins/lisa-devin/rules/eager/history-audit.md +27 -0
  111. package/plugins/lisa-devin/rules/eager/integration-access-layer.md +19 -0
  112. package/plugins/lisa-devin/rules/eager/intent-routing.md +18 -0
  113. package/plugins/lisa-devin/rules/eager/learnings-ladder.md +18 -0
  114. package/plugins/lisa-devin/rules/eager/local-ci-first.md +15 -0
  115. package/plugins/lisa-devin/rules/eager/measurement-integrity.md +18 -0
  116. package/plugins/lisa-devin/rules/eager/never-name-a-downstream-project.md +9 -0
  117. package/plugins/lisa-devin/rules/eager/not-blocked-just-waiting.md +13 -0
  118. package/plugins/lisa-devin/rules/eager/operational-hazards.md +50 -0
  119. package/plugins/lisa-devin/rules/eager/report-actionability.md +26 -0
  120. package/plugins/lisa-devin/rules/eager/security-audit-handling.md +40 -0
  121. package/plugins/lisa-devin/rules/eager/session-status-updates.md +20 -0
  122. package/plugins/lisa-devin/rules/eager/settled-decisions.md +75 -0
  123. package/plugins/lisa-devin/rules/eager/stale-state-claims.md +26 -0
  124. package/plugins/lisa-devin/rules/eager/tool-access-gate.md +23 -0
  125. package/plugins/lisa-devin/rules/eager/tracked-work.md +9 -0
  126. package/plugins/lisa-devin/rules/eager/upstream-to-lisa.md +14 -0
  127. package/plugins/lisa-devin/rules/eager/verification.md +33 -0
  128. package/plugins/lisa-devin/rules/eager/wiki-knowledge-source.md +13 -0
  129. package/plugins/lisa-devin/rules/eager/withdrawn-rulings.md +102 -0
  130. package/plugins/lisa-devin/rules/reference/automation-runbook-contract.md +355 -0
  131. package/plugins/lisa-devin/rules/reference/base-rules.md +136 -0
  132. package/plugins/lisa-devin/rules/reference/bdd-e2e-coverage.md +301 -0
  133. package/plugins/lisa-devin/rules/reference/blocker-containment.md +165 -0
  134. package/plugins/lisa-devin/rules/reference/claim-archaeology.md +184 -0
  135. package/plugins/lisa-devin/rules/reference/claim-evidence-mapping.md +362 -0
  136. package/plugins/lisa-devin/rules/reference/claim-time-guards.md +135 -0
  137. package/plugins/lisa-devin/rules/reference/coding-philosophy.md +428 -0
  138. package/plugins/lisa-devin/rules/reference/config-resolution.md +1225 -0
  139. package/plugins/lisa-devin/rules/reference/control-reachability.md +166 -0
  140. package/plugins/lisa-devin/rules/reference/convergent-review.md +145 -0
  141. package/plugins/lisa-devin/rules/reference/credential-substrate-precedence.md +249 -0
  142. package/plugins/lisa-devin/rules/reference/dependency-decision-records.md +177 -0
  143. package/plugins/lisa-devin/rules/reference/dependency-internalization-kit.md +244 -0
  144. package/plugins/lisa-devin/rules/reference/dependency-trust-classes.md +291 -0
  145. package/plugins/lisa-devin/rules/reference/deployed-state-readback.md +142 -0
  146. package/plugins/lisa-devin/rules/reference/derived-branch-plan.md +214 -0
  147. package/plugins/lisa-devin/rules/reference/design-source-of-truth.md +260 -0
  148. package/plugins/lisa-devin/rules/reference/design-value-binding.md +311 -0
  149. package/plugins/lisa-devin/rules/reference/do-it-now.md +19 -0
  150. package/plugins/lisa-devin/rules/reference/documentation-source-paths.md +31 -0
  151. package/plugins/lisa-devin/rules/reference/empirical-inquiry.md +28 -0
  152. package/plugins/lisa-devin/rules/reference/factory-model.md +111 -0
  153. package/plugins/lisa-devin/rules/reference/falsifiable-checks.md +275 -0
  154. package/plugins/lisa-devin/rules/reference/history-audit.md +42 -0
  155. package/plugins/lisa-devin/rules/reference/integration-access-layer.md +89 -0
  156. package/plugins/lisa-devin/rules/reference/intent-routing.md +428 -0
  157. package/plugins/lisa-devin/rules/reference/leaf-only-lifecycle.md +227 -0
  158. package/plugins/lisa-devin/rules/reference/learnings-ladder.md +41 -0
  159. package/plugins/lisa-devin/rules/reference/local-ci-first.md +34 -0
  160. package/plugins/lisa-devin/rules/reference/measurement-integrity.md +119 -0
  161. package/plugins/lisa-devin/rules/reference/never-name-a-downstream-project.md +37 -0
  162. package/plugins/lisa-devin/rules/reference/not-blocked-just-waiting.md +41 -0
  163. package/plugins/lisa-devin/rules/reference/observability-audit.md +146 -0
  164. package/plugins/lisa-devin/rules/reference/operational-hazards.md +115 -0
  165. package/plugins/lisa-devin/rules/reference/prd-definition-of-ready.md +118 -0
  166. package/plugins/lisa-devin/rules/reference/prd-lifecycle-rollup.md +192 -0
  167. package/plugins/lisa-devin/rules/reference/pre-flight-autofill.md +250 -0
  168. package/plugins/lisa-devin/rules/reference/project-learnings.md +159 -0
  169. package/plugins/lisa-devin/rules/reference/promotion-contract.md +148 -0
  170. package/plugins/lisa-devin/rules/reference/readiness-rubric.md +242 -0
  171. package/plugins/lisa-devin/rules/reference/ready-role-filing.md +212 -0
  172. package/plugins/lisa-devin/rules/reference/rejection-detection.md +308 -0
  173. package/plugins/lisa-devin/rules/reference/repo-scope-split.md +119 -0
  174. package/plugins/lisa-devin/rules/reference/report-actionability.md +61 -0
  175. package/plugins/lisa-devin/rules/reference/reset-seed-coverage.md +286 -0
  176. package/plugins/lisa-devin/rules/reference/security-audit-handling.md +55 -0
  177. package/plugins/lisa-devin/rules/reference/session-status-updates.md +111 -0
  178. package/plugins/lisa-devin/rules/reference/settled-decisions.md +39 -0
  179. package/plugins/lisa-devin/rules/reference/stale-state-claims.md +88 -0
  180. package/plugins/lisa-devin/rules/reference/tool-access-gate.md +114 -0
  181. package/plugins/lisa-devin/rules/reference/tracked-work.md +49 -0
  182. package/plugins/lisa-devin/rules/reference/upstream-to-lisa.md +26 -0
  183. package/plugins/lisa-devin/rules/reference/usage-accounting.md +261 -0
  184. package/plugins/lisa-devin/rules/reference/verification.md +278 -0
  185. package/plugins/lisa-devin/rules/reference/wiki-knowledge-source.md +37 -0
  186. package/plugins/lisa-devin/rules/reference/withdrawn-rulings.md +148 -0
  187. package/plugins/lisa-devin/rules/reference/work-item-definition-of-ready.md +177 -0
  188. package/plugins/lisa-devin/rules/reference/work-item-trailer-definition.md +129 -0
  189. package/plugins/lisa-devin/scripts/automation-run-record.mjs +678 -0
  190. package/plugins/lisa-devin/scripts/automation-status-claude-adapter.mjs +804 -0
  191. package/plugins/lisa-devin/scripts/automation-status-codex-adapter.mjs +1081 -0
  192. package/plugins/lisa-devin/scripts/automation-status-contract-drift.mjs +392 -0
  193. package/plugins/lisa-devin/scripts/automation-status-expected-fleet.mjs +508 -0
  194. package/plugins/lisa-devin/scripts/automation-status-report.mjs +200 -0
  195. package/plugins/lisa-devin/scripts/automation-status-run-history.mjs +216 -0
  196. package/plugins/lisa-devin/scripts/automation-status-unrecorded-runs.mjs +127 -0
  197. package/plugins/lisa-devin/scripts/blocker-edge-resolution.mjs +150 -0
  198. package/plugins/lisa-devin/scripts/cross-pollinate.mjs +763 -0
  199. package/plugins/lisa-devin/scripts/design-bindings-probe.mjs +713 -0
  200. package/plugins/lisa-devin/scripts/design-intake-gate.mjs +470 -0
  201. package/plugins/lisa-devin/scripts/design-source-gate.mjs +610 -0
  202. package/plugins/lisa-devin/scripts/design-variable-ids.mjs +567 -0
  203. package/plugins/lisa-devin/scripts/doctor-report.mjs +635 -0
  204. package/plugins/lisa-devin/scripts/install-remote-agent-aws.mjs +443 -0
  205. package/plugins/lisa-devin/scripts/intake-blocker-reprobe.mjs +1065 -0
  206. package/plugins/lisa-devin/scripts/intake-prework-denominator.mjs +249 -0
  207. package/plugins/lisa-devin/scripts/lifecycle-label-trust.mjs +593 -0
  208. package/plugins/lisa-devin/scripts/linear-state-write-target.mjs +362 -0
  209. package/plugins/lisa-devin/scripts/plugin-sync-explain.mjs +654 -0
  210. package/plugins/lisa-devin/scripts/pr-arming-sweep.mjs +561 -0
  211. package/plugins/lisa-devin/scripts/project-ideation-idempotency-harness.mjs +338 -0
  212. package/plugins/lisa-devin/scripts/qa-signal-lifecycle.mjs +523 -0
  213. package/plugins/lisa-devin/scripts/queue-contract-resolution.mjs +583 -0
  214. package/plugins/lisa-devin/scripts/queue-health-classification.mjs +157 -0
  215. package/plugins/lisa-devin/scripts/queue-status-build-readers.mjs +561 -0
  216. package/plugins/lisa-devin/scripts/queue-status-prd-readers.mjs +452 -0
  217. package/plugins/lisa-devin/scripts/remote-agent-aws-setup.sh +677 -0
  218. package/plugins/lisa-devin/scripts/repo-scope-vocabulary-audit.mjs +458 -0
  219. package/plugins/lisa-devin/scripts/resolve-lifecycle-role.mjs +347 -0
  220. package/plugins/lisa-devin/scripts/rollup-blocker-classification.mjs +616 -0
  221. package/plugins/lisa-devin/scripts/scoping-label-audit.mjs +474 -0
  222. package/plugins/lisa-devin/skills/lisa-acceptance-criteria/SKILL.md +73 -0
  223. package/plugins/lisa-devin/skills/lisa-agent-design-best-practices/SKILL.md +242 -0
  224. package/plugins/lisa-devin/skills/lisa-agent-ready/SKILL.md +271 -0
  225. package/plugins/lisa-devin/skills/lisa-analyze-claude-remote/SKILL.md +434 -0
  226. package/plugins/lisa-devin/skills/lisa-atlassian-access/SKILL.md +469 -0
  227. package/plugins/lisa-devin/skills/lisa-atlassian-access/scripts/markdown-to-adf.mjs +236 -0
  228. package/plugins/lisa-devin/skills/lisa-attribute-failure/SKILL.md +142 -0
  229. package/plugins/lisa-devin/skills/lisa-automation-status/SKILL.md +149 -0
  230. package/plugins/lisa-devin/skills/lisa-bug-triage/SKILL.md +23 -0
  231. package/plugins/lisa-devin/skills/lisa-capability-drift/SKILL.md +71 -0
  232. package/plugins/lisa-devin/skills/lisa-codebase-research/SKILL.md +87 -0
  233. package/plugins/lisa-devin/skills/lisa-codify-verification/SKILL.md +213 -0
  234. package/plugins/lisa-devin/skills/lisa-confluence-prd-intake/SKILL.md +417 -0
  235. package/plugins/lisa-devin/skills/lisa-confluence-to-tracker/SKILL.md +469 -0
  236. package/plugins/lisa-devin/skills/lisa-confluence-write-prd/SKILL.md +111 -0
  237. package/plugins/lisa-devin/skills/lisa-cross-pollinate/SKILL.md +175 -0
  238. package/plugins/lisa-devin/skills/lisa-debrief/SKILL.md +96 -0
  239. package/plugins/lisa-devin/skills/lisa-debrief-apply/SKILL.md +106 -0
  240. package/plugins/lisa-devin/skills/lisa-delivery-effectiveness/SKILL.md +62 -0
  241. package/plugins/lisa-devin/skills/lisa-design-intake/SKILL.md +198 -0
  242. package/plugins/lisa-devin/skills/lisa-detect-tooling/SKILL.md +110 -0
  243. package/plugins/lisa-devin/skills/lisa-detect-tooling/scripts/commands.mjs +479 -0
  244. package/plugins/lisa-devin/skills/lisa-detect-tooling/scripts/detect-tooling.mjs +658 -0
  245. package/plugins/lisa-devin/skills/lisa-doctor/SKILL.md +743 -0
  246. package/plugins/lisa-devin/skills/lisa-drive-pr-to-merge/SKILL.md +1587 -0
  247. package/plugins/lisa-devin/skills/lisa-epic-triage/SKILL.md +28 -0
  248. package/plugins/lisa-devin/skills/lisa-evaluation-suite/SKILL.md +63 -0
  249. package/plugins/lisa-devin/skills/lisa-exploratory-qa/SKILL.md +185 -0
  250. package/plugins/lisa-devin/skills/lisa-fix-linter-error/SKILL.md +45 -0
  251. package/plugins/lisa-devin/skills/lisa-generate-claude-remote-build-script/SKILL.md +235 -0
  252. package/plugins/lisa-devin/skills/lisa-git-commit/SKILL.md +53 -0
  253. package/plugins/lisa-devin/skills/lisa-git-prune/SKILL.md +35 -0
  254. package/plugins/lisa-devin/skills/lisa-git-submit-pr/SKILL.md +170 -0
  255. package/plugins/lisa-devin/skills/lisa-github-add-journey/SKILL.md +118 -0
  256. package/plugins/lisa-devin/skills/lisa-github-build-intake/SKILL.md +745 -0
  257. package/plugins/lisa-devin/skills/lisa-github-claim/SKILL.md +27 -0
  258. package/plugins/lisa-devin/skills/lisa-github-create/SKILL.md +105 -0
  259. package/plugins/lisa-devin/skills/lisa-github-evidence/SKILL.md +120 -0
  260. package/plugins/lisa-devin/skills/lisa-github-journey/SKILL.md +134 -0
  261. package/plugins/lisa-devin/skills/lisa-github-prd-intake/SKILL.md +424 -0
  262. package/plugins/lisa-devin/skills/lisa-github-project-v2/SKILL.md +227 -0
  263. package/plugins/lisa-devin/skills/lisa-github-read-issue/SKILL.md +305 -0
  264. package/plugins/lisa-devin/skills/lisa-github-sync/SKILL.md +201 -0
  265. package/plugins/lisa-devin/skills/lisa-github-to-tracker/SKILL.md +456 -0
  266. package/plugins/lisa-devin/skills/lisa-github-validate-issue/SKILL.md +598 -0
  267. package/plugins/lisa-devin/skills/lisa-github-verify/SKILL.md +60 -0
  268. package/plugins/lisa-devin/skills/lisa-github-write-issue/SKILL.md +531 -0
  269. package/plugins/lisa-devin/skills/lisa-github-write-prd/SKILL.md +156 -0
  270. package/plugins/lisa-devin/skills/lisa-health/SKILL.md +142 -0
  271. package/plugins/lisa-devin/skills/lisa-health-drift-cron/SKILL.md +80 -0
  272. package/plugins/lisa-devin/skills/lisa-implement/SKILL.md +372 -0
  273. package/plugins/lisa-devin/skills/lisa-improve-code-complexity/SKILL.md +44 -0
  274. package/plugins/lisa-devin/skills/lisa-improve-harness/SKILL.md +487 -0
  275. package/plugins/lisa-devin/skills/lisa-improve-max-lines/SKILL.md +45 -0
  276. package/plugins/lisa-devin/skills/lisa-improve-max-lines-per-function/SKILL.md +46 -0
  277. package/plugins/lisa-devin/skills/lisa-improve-test-coverage/SKILL.md +47 -0
  278. package/plugins/lisa-devin/skills/lisa-improve-tests/SKILL.md +50 -0
  279. package/plugins/lisa-devin/skills/lisa-intake/SKILL.md +208 -0
  280. package/plugins/lisa-devin/skills/lisa-intake-explain/SKILL.md +279 -0
  281. package/plugins/lisa-devin/skills/lisa-jam-access/SKILL.md +128 -0
  282. package/plugins/lisa-devin/skills/lisa-jira-add-journey/SKILL.md +139 -0
  283. package/plugins/lisa-devin/skills/lisa-jira-build-intake/SKILL.md +556 -0
  284. package/plugins/lisa-devin/skills/lisa-jira-claim/SKILL.md +27 -0
  285. package/plugins/lisa-devin/skills/lisa-jira-create/SKILL.md +157 -0
  286. package/plugins/lisa-devin/skills/lisa-jira-evidence/SKILL.md +106 -0
  287. package/plugins/lisa-devin/skills/lisa-jira-evidence/scripts/post-evidence.sh +262 -0
  288. package/plugins/lisa-devin/skills/lisa-jira-journey/SKILL.md +168 -0
  289. package/plugins/lisa-devin/skills/lisa-jira-journey/scripts/generate-templates.py +239 -0
  290. package/plugins/lisa-devin/skills/lisa-jira-journey/scripts/parse-plan.py +570 -0
  291. package/plugins/lisa-devin/skills/lisa-jira-read-ticket/SKILL.md +199 -0
  292. package/plugins/lisa-devin/skills/lisa-jira-read-ticket/scripts/download-attachment.sh +211 -0
  293. package/plugins/lisa-devin/skills/lisa-jira-sync/SKILL.md +117 -0
  294. package/plugins/lisa-devin/skills/lisa-jira-validate-ticket/SKILL.md +525 -0
  295. package/plugins/lisa-devin/skills/lisa-jira-verify/SKILL.md +61 -0
  296. package/plugins/lisa-devin/skills/lisa-jira-write-ticket/SKILL.md +440 -0
  297. package/plugins/lisa-devin/skills/lisa-jsdoc-best-practices/SKILL.md +491 -0
  298. package/plugins/lisa-devin/skills/lisa-kane-browser/SKILL.md +80 -0
  299. package/plugins/lisa-devin/skills/lisa-learnings-audit/SKILL.md +490 -0
  300. package/plugins/lisa-devin/skills/lisa-linear-access/SKILL.md +483 -0
  301. package/plugins/lisa-devin/skills/lisa-linear-add-journey/SKILL.md +109 -0
  302. package/plugins/lisa-devin/skills/lisa-linear-build-intake/SKILL.md +548 -0
  303. package/plugins/lisa-devin/skills/lisa-linear-claim/SKILL.md +28 -0
  304. package/plugins/lisa-devin/skills/lisa-linear-create/SKILL.md +150 -0
  305. package/plugins/lisa-devin/skills/lisa-linear-evidence/SKILL.md +124 -0
  306. package/plugins/lisa-devin/skills/lisa-linear-journey/SKILL.md +147 -0
  307. package/plugins/lisa-devin/skills/lisa-linear-prd-intake/SKILL.md +411 -0
  308. package/plugins/lisa-devin/skills/lisa-linear-read-issue/SKILL.md +201 -0
  309. package/plugins/lisa-devin/skills/lisa-linear-sync/SKILL.md +164 -0
  310. package/plugins/lisa-devin/skills/lisa-linear-to-tracker/SKILL.md +454 -0
  311. package/plugins/lisa-devin/skills/lisa-linear-validate-issue/SKILL.md +504 -0
  312. package/plugins/lisa-devin/skills/lisa-linear-verify/SKILL.md +65 -0
  313. package/plugins/lisa-devin/skills/lisa-linear-write-issue/SKILL.md +448 -0
  314. package/plugins/lisa-devin/skills/lisa-linear-write-prd/SKILL.md +98 -0
  315. package/plugins/lisa-devin/skills/lisa-monitor/SKILL.md +224 -0
  316. package/plugins/lisa-devin/skills/lisa-nightly-add-test-coverage/SKILL.md +40 -0
  317. package/plugins/lisa-devin/skills/lisa-nightly-improve-tests/SKILL.md +29 -0
  318. package/plugins/lisa-devin/skills/lisa-nightly-lower-code-complexity/SKILL.md +42 -0
  319. package/plugins/lisa-devin/skills/lisa-notion-access/SKILL.md +301 -0
  320. package/plugins/lisa-devin/skills/lisa-notion-prd-intake/SKILL.md +360 -0
  321. package/plugins/lisa-devin/skills/lisa-notion-to-tracker/SKILL.md +467 -0
  322. package/plugins/lisa-devin/skills/lisa-notion-write-prd/SKILL.md +111 -0
  323. package/plugins/lisa-devin/skills/lisa-parity-code-review/SKILL.md +83 -0
  324. package/plugins/lisa-devin/skills/lisa-parity-code-simplifier/SKILL.md +76 -0
  325. package/plugins/lisa-devin/skills/lisa-parity-coderabbit/SKILL.md +87 -0
  326. package/plugins/lisa-devin/skills/lisa-parity-sentry-sdk-setup/SKILL.md +375 -0
  327. package/plugins/lisa-devin/skills/lisa-parity-sentry-seer/SKILL.md +168 -0
  328. package/plugins/lisa-devin/skills/lisa-parity-skill-creator/SKILL.md +155 -0
  329. package/plugins/lisa-devin/skills/lisa-performance-review/SKILL.md +94 -0
  330. package/plugins/lisa-devin/skills/lisa-persist-learning/SKILL.md +247 -0
  331. package/plugins/lisa-devin/skills/lisa-plan/SKILL.md +64 -0
  332. package/plugins/lisa-devin/skills/lisa-plugin-sync-explain/SKILL.md +53 -0
  333. package/plugins/lisa-devin/skills/lisa-posthog-access/SKILL.md +140 -0
  334. package/plugins/lisa-devin/skills/lisa-prd-backlink/SKILL.md +274 -0
  335. package/plugins/lisa-devin/skills/lisa-prd-source-write/SKILL.md +104 -0
  336. package/plugins/lisa-devin/skills/lisa-prd-ticket-coverage/SKILL.md +187 -0
  337. package/plugins/lisa-devin/skills/lisa-product-walkthrough/SKILL.md +106 -0
  338. package/plugins/lisa-devin/skills/lisa-project-ideation/SKILL.md +417 -0
  339. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/evidence-card-format.md +21 -0
  340. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/host-project-only.md +22 -0
  341. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +57 -0
  342. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/public-external-inspiration.md +22 -0
  343. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/unavailable-data-rejection.md +22 -0
  344. package/plugins/lisa-devin/skills/lisa-pull-request-review/SKILL.md +132 -0
  345. package/plugins/lisa-devin/skills/lisa-quality-review/SKILL.md +63 -0
  346. package/plugins/lisa-devin/skills/lisa-queue-status/SKILL.md +215 -0
  347. package/plugins/lisa-devin/skills/lisa-remote-dispatch/SKILL.md +109 -0
  348. package/plugins/lisa-devin/skills/lisa-remote-dispatch/scripts/dispatch.mjs +535 -0
  349. package/plugins/lisa-devin/skills/lisa-repair-intake/SKILL.md +1621 -0
  350. package/plugins/lisa-devin/skills/lisa-reproduce-bug/SKILL.md +75 -0
  351. package/plugins/lisa-devin/skills/lisa-research/SKILL.md +92 -0
  352. package/plugins/lisa-devin/skills/lisa-review-implementation/SKILL.md +209 -0
  353. package/plugins/lisa-devin/skills/lisa-review-local/SKILL.md +141 -0
  354. package/plugins/lisa-devin/skills/lisa-rework-triage/SKILL.md +206 -0
  355. package/plugins/lisa-devin/skills/lisa-root-cause-analysis/SKILL.md +135 -0
  356. package/plugins/lisa-devin/skills/lisa-secrets-access/SKILL.md +430 -0
  357. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/aws-bootstrap.mjs +433 -0
  358. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/bootstrap-store.mjs +288 -0
  359. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/doctor-secrets.mjs +273 -0
  360. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/envfile.mjs +80 -0
  361. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/inspect-vault.mjs +142 -0
  362. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/materialize-secrets.mjs +1085 -0
  363. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/note-format.mjs +179 -0
  364. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/owner.mjs +96 -0
  365. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/preflight-secrets.mjs +342 -0
  366. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/prompt-secret.mjs +79 -0
  367. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/providers.mjs +805 -0
  368. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/publish-aws-bootstrap.mjs +680 -0
  369. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/read-secret-note.mjs +105 -0
  370. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/resolve-expo-token.mjs +90 -0
  371. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/resolve-secret.mjs +285 -0
  372. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/rotate-secret.mjs +297 -0
  373. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/routing-floor.mjs +153 -0
  374. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/surfaces.mjs +480 -0
  375. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/sync-secret-to-ci.mjs +510 -0
  376. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/tools-from-notes.mjs +63 -0
  377. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/validate-config.mjs +550 -0
  378. package/plugins/lisa-devin/skills/lisa-security-review/SKILL.md +124 -0
  379. package/plugins/lisa-devin/skills/lisa-security-zap-scan/SKILL.md +53 -0
  380. package/plugins/lisa-devin/skills/lisa-sentry-access/SKILL.md +140 -0
  381. package/plugins/lisa-devin/skills/lisa-setup-atlassian/SKILL.md +407 -0
  382. package/plugins/lisa-devin/skills/lisa-setup-automations/SKILL.md +430 -0
  383. package/plugins/lisa-devin/skills/lisa-setup-automations/scripts/generate-workflow.mjs +288 -0
  384. package/plugins/lisa-devin/skills/lisa-setup-confluence/SKILL.md +254 -0
  385. package/plugins/lisa-devin/skills/lisa-setup-github/SKILL.md +319 -0
  386. package/plugins/lisa-devin/skills/lisa-setup-github-repo/SKILL.md +128 -0
  387. package/plugins/lisa-devin/skills/lisa-setup-jira/SKILL.md +198 -0
  388. package/plugins/lisa-devin/skills/lisa-setup-kane/SKILL.md +96 -0
  389. package/plugins/lisa-devin/skills/lisa-setup-linear/SKILL.md +375 -0
  390. package/plugins/lisa-devin/skills/lisa-setup-local-env/SKILL.md +95 -0
  391. package/plugins/lisa-devin/skills/lisa-setup-local-env/scripts/local-env.mjs +196 -0
  392. package/plugins/lisa-devin/skills/lisa-setup-notion/SKILL.md +376 -0
  393. package/plugins/lisa-devin/skills/lisa-setup-remote-aws/SKILL.md +149 -0
  394. package/plugins/lisa-devin/skills/lisa-setup-remote-env/SKILL.md +382 -0
  395. package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/materialized-env-authority.mjs +262 -0
  396. package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/session-start.sh +87 -0
  397. package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/setup.sh +216 -0
  398. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/environment.mjs +227 -0
  399. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +378 -0
  400. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +1632 -0
  401. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/tool-floor.mjs +94 -0
  402. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/toolchain.mjs +448 -0
  403. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/verify-remote-env.mjs +250 -0
  404. package/plugins/lisa-devin/skills/lisa-setup-sonar/SKILL.md +153 -0
  405. package/plugins/lisa-devin/skills/lisa-setup-workstation/SKILL.md +143 -0
  406. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/bounded-child.mjs +168 -0
  407. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/catalogue.mjs +293 -0
  408. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/cli.mjs +333 -0
  409. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/workstation.mjs +511 -0
  410. package/plugins/lisa-devin/skills/lisa-sonarcloud-access/SKILL.md +202 -0
  411. package/plugins/lisa-devin/skills/lisa-spec-conformance/SKILL.md +205 -0
  412. package/plugins/lisa-devin/skills/lisa-starter-sync/SKILL.md +35 -0
  413. package/plugins/lisa-devin/skills/lisa-sync-down/SKILL.md +209 -0
  414. package/plugins/lisa-devin/skills/lisa-task-decomposition/SKILL.md +195 -0
  415. package/plugins/lisa-devin/skills/lisa-task-triage/SKILL.md +23 -0
  416. package/plugins/lisa-devin/skills/lisa-tdd-implementation/SKILL.md +91 -0
  417. package/plugins/lisa-devin/skills/lisa-tear-down-automations/SKILL.md +85 -0
  418. package/plugins/lisa-devin/skills/lisa-test-strategy/SKILL.md +66 -0
  419. package/plugins/lisa-devin/skills/lisa-ticket-triage/SKILL.md +214 -0
  420. package/plugins/lisa-devin/skills/lisa-track/SKILL.md +129 -0
  421. package/plugins/lisa-devin/skills/lisa-tracker-add-journey/SKILL.md +28 -0
  422. package/plugins/lisa-devin/skills/lisa-tracker-build-intake/SKILL.md +134 -0
  423. package/plugins/lisa-devin/skills/lisa-tracker-claim/SKILL.md +35 -0
  424. package/plugins/lisa-devin/skills/lisa-tracker-create/SKILL.md +28 -0
  425. package/plugins/lisa-devin/skills/lisa-tracker-evidence/SKILL.md +63 -0
  426. package/plugins/lisa-devin/skills/lisa-tracker-journey/SKILL.md +27 -0
  427. package/plugins/lisa-devin/skills/lisa-tracker-read/SKILL.md +28 -0
  428. package/plugins/lisa-devin/skills/lisa-tracker-source-artifacts/SKILL.md +111 -0
  429. package/plugins/lisa-devin/skills/lisa-tracker-sync/SKILL.md +150 -0
  430. package/plugins/lisa-devin/skills/lisa-tracker-validate/SKILL.md +37 -0
  431. package/plugins/lisa-devin/skills/lisa-tracker-verify/SKILL.md +29 -0
  432. package/plugins/lisa-devin/skills/lisa-tracker-write/SKILL.md +55 -0
  433. package/plugins/lisa-devin/skills/lisa-usage-accounting/SKILL.md +205 -0
  434. package/plugins/lisa-devin/skills/lisa-usage-accounting/references/effectiveness.md +63 -0
  435. package/plugins/lisa-devin/skills/lisa-use-the-product/SKILL.md +86 -0
  436. package/plugins/lisa-devin/skills/lisa-validate-tracker-mapping/SKILL.md +467 -0
  437. package/plugins/lisa-devin/skills/lisa-verification-lifecycle/SKILL.md +384 -0
  438. package/plugins/lisa-devin/skills/lisa-verify/SKILL.md +55 -0
  439. package/plugins/lisa-devin/skills/lisa-verify-prd/SKILL.md +394 -0
  440. package/plugins/lisa-devin/skills/lisa-verify-workflow-change/SKILL.md +154 -0
  441. package/plugins/lisa-devin/skills/lisa-wiki-install/SKILL.md +101 -0
  442. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  443. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  444. package/plugins/lisa-expo-agy/plugin.json +1 -1
  445. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  446. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  447. package/plugins/lisa-expo-devin/.claude-plugin/plugin.json +11 -0
  448. package/plugins/lisa-expo-devin/.devin-plugin/plugin.json +8 -0
  449. package/plugins/lisa-expo-devin/.mcp.json +8 -0
  450. package/plugins/lisa-expo-devin/THIRD-PARTY-NOTICES.md +84 -0
  451. package/plugins/lisa-expo-devin/agents/ops-specialist.md +124 -0
  452. package/plugins/lisa-expo-devin/hooks/devin-tool-name-shim.sh +30 -0
  453. package/plugins/lisa-expo-devin/hooks/register-maestro-mcp.sh +84 -0
  454. package/plugins/lisa-expo-devin/hooks.json +14 -0
  455. package/plugins/lisa-expo-devin/skills/add-app-clip/SKILL.md +280 -0
  456. package/plugins/lisa-expo-devin/skills/add-app-clip/references/native-module.md +96 -0
  457. package/plugins/lisa-expo-devin/skills/apollo-client/SKILL.md +238 -0
  458. package/plugins/lisa-expo-devin/skills/apollo-client/references/mutation-patterns.md +360 -0
  459. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/SKILL.md +369 -0
  460. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
  461. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
  462. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
  463. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
  464. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +438 -0
  465. package/plugins/lisa-expo-devin/skills/building-native-ui/SKILL.md +321 -0
  466. package/plugins/lisa-expo-devin/skills/building-native-ui/references/animations.md +220 -0
  467. package/plugins/lisa-expo-devin/skills/building-native-ui/references/controls.md +272 -0
  468. package/plugins/lisa-expo-devin/skills/building-native-ui/references/form-sheet.md +253 -0
  469. package/plugins/lisa-expo-devin/skills/building-native-ui/references/gradients.md +106 -0
  470. package/plugins/lisa-expo-devin/skills/building-native-ui/references/icons.md +213 -0
  471. package/plugins/lisa-expo-devin/skills/building-native-ui/references/media.md +198 -0
  472. package/plugins/lisa-expo-devin/skills/building-native-ui/references/route-structure.md +229 -0
  473. package/plugins/lisa-expo-devin/skills/building-native-ui/references/search.md +248 -0
  474. package/plugins/lisa-expo-devin/skills/building-native-ui/references/storage.md +121 -0
  475. package/plugins/lisa-expo-devin/skills/building-native-ui/references/tabs.md +433 -0
  476. package/plugins/lisa-expo-devin/skills/building-native-ui/references/toolbar-and-headers.md +284 -0
  477. package/plugins/lisa-expo-devin/skills/building-native-ui/references/visual-effects.md +197 -0
  478. package/plugins/lisa-expo-devin/skills/building-native-ui/references/webgpu-three.md +605 -0
  479. package/plugins/lisa-expo-devin/skills/building-native-ui/references/zoom-transitions.md +158 -0
  480. package/plugins/lisa-expo-devin/skills/container-view-pattern/SKILL.md +355 -0
  481. package/plugins/lisa-expo-devin/skills/container-view-pattern/references/examples.md +749 -0
  482. package/plugins/lisa-expo-devin/skills/container-view-pattern/references/patterns.md +318 -0
  483. package/plugins/lisa-expo-devin/skills/container-view-pattern/scripts/create_component.py +200 -0
  484. package/plugins/lisa-expo-devin/skills/container-view-pattern/scripts/validate_component.py +332 -0
  485. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/SKILL.md +268 -0
  486. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/common-issues.md +619 -0
  487. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
  488. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/platform-api.md +276 -0
  489. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
  490. package/plugins/lisa-expo-devin/skills/directory-structure/SKILL.md +214 -0
  491. package/plugins/lisa-expo-devin/skills/directory-structure/scripts/validate_structure.py +454 -0
  492. package/plugins/lisa-expo-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
  493. package/plugins/lisa-expo-devin/skills/eas-update-insights/SKILL.md +228 -0
  494. package/plugins/lisa-expo-devin/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
  495. package/plugins/lisa-expo-devin/skills/eas-update-insights/references/update-insights-schema.md +69 -0
  496. package/plugins/lisa-expo-devin/skills/expo-api-routes/SKILL.md +369 -0
  497. package/plugins/lisa-expo-devin/skills/expo-brownfield/SKILL.md +54 -0
  498. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/brownfield-integrated.md +526 -0
  499. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/brownfield-isolated.md +402 -0
  500. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/comparison.md +63 -0
  501. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/troubleshooting.md +88 -0
  502. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/SKILL.md +92 -0
  503. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/fetch.js +113 -0
  504. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/package.json +11 -0
  505. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/validate.js +85 -0
  506. package/plugins/lisa-expo-devin/skills/expo-deployment/SKILL.md +193 -0
  507. package/plugins/lisa-expo-devin/skills/expo-deployment/references/app-store-metadata.md +479 -0
  508. package/plugins/lisa-expo-devin/skills/expo-deployment/references/ios-app-store.md +355 -0
  509. package/plugins/lisa-expo-devin/skills/expo-deployment/references/play-store.md +264 -0
  510. package/plugins/lisa-expo-devin/skills/expo-deployment/references/testflight.md +58 -0
  511. package/plugins/lisa-expo-devin/skills/expo-deployment/references/workflows.md +200 -0
  512. package/plugins/lisa-expo-devin/skills/expo-dev-client/SKILL.md +164 -0
  513. package/plugins/lisa-expo-devin/skills/expo-env-config/SKILL.md +309 -0
  514. package/plugins/lisa-expo-devin/skills/expo-env-config/references/validation-patterns.md +417 -0
  515. package/plugins/lisa-expo-devin/skills/expo-module/SKILL.md +141 -0
  516. package/plugins/lisa-expo-devin/skills/expo-module/references/config-plugin.md +90 -0
  517. package/plugins/lisa-expo-devin/skills/expo-module/references/create-expo-module.md +206 -0
  518. package/plugins/lisa-expo-devin/skills/expo-module/references/lifecycle.md +127 -0
  519. package/plugins/lisa-expo-devin/skills/expo-module/references/module-config.md +48 -0
  520. package/plugins/lisa-expo-devin/skills/expo-module/references/native-module.md +286 -0
  521. package/plugins/lisa-expo-devin/skills/expo-module/references/native-view.md +171 -0
  522. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/SKILL.md +432 -0
  523. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/references/official-docs.md +290 -0
  524. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/references/static-export-verification.md +54 -0
  525. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
  526. package/plugins/lisa-expo-devin/skills/expo-tailwind-setup/SKILL.md +487 -0
  527. package/plugins/lisa-expo-devin/skills/expo-ui-jetpack-compose/SKILL.md +40 -0
  528. package/plugins/lisa-expo-devin/skills/expo-ui-swift-ui/SKILL.md +39 -0
  529. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/SKILL.md +419 -0
  530. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/color-tokens.md +343 -0
  531. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/component-mapping.md +307 -0
  532. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
  533. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
  534. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/scripts/validate_styling.py +424 -0
  535. package/plugins/lisa-expo-devin/skills/jira-add-journey/SKILL.md +140 -0
  536. package/plugins/lisa-expo-devin/skills/jira-create/SKILL.md +161 -0
  537. package/plugins/lisa-expo-devin/skills/jira-evidence/SKILL.md +84 -0
  538. package/plugins/lisa-expo-devin/skills/jira-evidence/scripts/post-evidence.sh +262 -0
  539. package/plugins/lisa-expo-devin/skills/jira-journey/SKILL.md +196 -0
  540. package/plugins/lisa-expo-devin/skills/jira-journey/scripts/generate-templates.py +281 -0
  541. package/plugins/lisa-expo-devin/skills/jira-journey/scripts/parse-plan.py +400 -0
  542. package/plugins/lisa-expo-devin/skills/jira-verify/SKILL.md +27 -0
  543. package/plugins/lisa-expo-devin/skills/local-state/SKILL.md +362 -0
  544. package/plugins/lisa-expo-devin/skills/local-state/references/async-storage.md +505 -0
  545. package/plugins/lisa-expo-devin/skills/local-state/references/persistence-patterns.md +711 -0
  546. package/plugins/lisa-expo-devin/skills/local-state/references/reactive-variables.md +446 -0
  547. package/plugins/lisa-expo-devin/skills/maestro-mcp-setup/SKILL.md +144 -0
  548. package/plugins/lisa-expo-devin/skills/native-data-fetching/SKILL.md +507 -0
  549. package/plugins/lisa-expo-devin/skills/native-data-fetching/references/expo-router-loaders.md +344 -0
  550. package/plugins/lisa-expo-devin/skills/ops-browser-uat/SKILL.md +124 -0
  551. package/plugins/lisa-expo-devin/skills/ops-check-logs/SKILL.md +217 -0
  552. package/plugins/lisa-expo-devin/skills/ops-db-ops/SKILL.md +214 -0
  553. package/plugins/lisa-expo-devin/skills/ops-deploy/SKILL.md +123 -0
  554. package/plugins/lisa-expo-devin/skills/ops-monitor-errors/SKILL.md +99 -0
  555. package/plugins/lisa-expo-devin/skills/ops-performance/SKILL.md +165 -0
  556. package/plugins/lisa-expo-devin/skills/ops-run-local/SKILL.md +169 -0
  557. package/plugins/lisa-expo-devin/skills/ops-verify-health/SKILL.md +101 -0
  558. package/plugins/lisa-expo-devin/skills/owasp-zap/SKILL.md +61 -0
  559. package/plugins/lisa-expo-devin/skills/play-store-access/SKILL.md +226 -0
  560. package/plugins/lisa-expo-devin/skills/playwright-ci-debugging/SKILL.md +140 -0
  561. package/plugins/lisa-expo-devin/skills/playwright-selectors/SKILL.md +496 -0
  562. package/plugins/lisa-expo-devin/skills/reduce-complexity/SKILL.md +251 -0
  563. package/plugins/lisa-expo-devin/skills/reduce-complexity/references/extraction-strategies.md +456 -0
  564. package/plugins/lisa-expo-devin/skills/reduce-complexity/references/refactoring-patterns.md +557 -0
  565. package/plugins/lisa-expo-devin/skills/testing-library/SKILL.md +314 -0
  566. package/plugins/lisa-expo-devin/skills/testing-library/references/async-patterns.md +420 -0
  567. package/plugins/lisa-expo-devin/skills/testing-library/references/expo-router-testing.md +556 -0
  568. package/plugins/lisa-expo-devin/skills/testing-library/references/mocking-patterns.md +612 -0
  569. package/plugins/lisa-expo-devin/skills/testing-library/references/query-priority.md +291 -0
  570. package/plugins/lisa-expo-devin/skills/upgrading-expo/SKILL.md +134 -0
  571. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
  572. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/expo-av-to-video.md +160 -0
  573. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/native-tabs.md +124 -0
  574. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/new-architecture.md +79 -0
  575. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-19.md +79 -0
  576. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-compiler.md +59 -0
  577. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
  578. package/plugins/lisa-expo-devin/skills/use-dom/SKILL.md +417 -0
  579. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  580. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  581. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  582. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  583. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  584. package/plugins/lisa-harper-fabric-devin/.claude-plugin/plugin.json +11 -0
  585. package/plugins/lisa-harper-fabric-devin/.devin-plugin/plugin.json +8 -0
  586. package/plugins/lisa-harper-fabric-devin/generated-artifact-globs.txt +5 -0
  587. package/plugins/lisa-harper-fabric-devin/hooks/block-generated-artifact-edits.sh +141 -0
  588. package/plugins/lisa-harper-fabric-devin/hooks/devin-tool-name-shim.sh +30 -0
  589. package/plugins/lisa-harper-fabric-devin/hooks/enforce-config-extensions.mjs +196 -0
  590. package/plugins/lisa-harper-fabric-devin/hooks/enforce-config-extensions.sh +46 -0
  591. package/plugins/lisa-harper-fabric-devin/hooks/inject-rules.sh +27 -0
  592. package/plugins/lisa-harper-fabric-devin/hooks.json +36 -0
  593. package/plugins/lisa-harper-fabric-devin/rules/eager/harper-fabric.md +31 -0
  594. package/plugins/lisa-harper-fabric-devin/rules/reference/harper-fabric.md +52 -0
  595. package/plugins/lisa-harper-fabric-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
  596. package/plugins/lisa-harper-fabric-devin/skills/harper-auth/SKILL.md +368 -0
  597. package/plugins/lisa-harper-fabric-devin/skills/harper-build-and-deploy/SKILL.md +198 -0
  598. package/plugins/lisa-harper-fabric-devin/skills/harper-caching/SKILL.md +265 -0
  599. package/plugins/lisa-harper-fabric-devin/skills/harper-component-model/SKILL.md +87 -0
  600. package/plugins/lisa-harper-fabric-devin/skills/harper-config-yaml/SKILL.md +283 -0
  601. package/plugins/lisa-harper-fabric-devin/skills/harper-operations/SKILL.md +239 -0
  602. package/plugins/lisa-harper-fabric-devin/skills/harper-realtime/SKILL.md +187 -0
  603. package/plugins/lisa-harper-fabric-devin/skills/harper-resources/SKILL.md +142 -0
  604. package/plugins/lisa-harper-fabric-devin/skills/harper-rest-queries/SKILL.md +403 -0
  605. package/plugins/lisa-harper-fabric-devin/skills/harper-schema-graphql/SKILL.md +123 -0
  606. package/plugins/lisa-harper-fabric-devin/skills/harper-testing/SKILL.md +254 -0
  607. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  608. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  609. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  610. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  611. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  612. package/plugins/lisa-nestjs-devin/.claude-plugin/plugin.json +11 -0
  613. package/plugins/lisa-nestjs-devin/.devin-plugin/plugin.json +8 -0
  614. package/plugins/lisa-nestjs-devin/hooks/block-migration-edits.sh +125 -0
  615. package/plugins/lisa-nestjs-devin/hooks/devin-tool-name-shim.sh +30 -0
  616. package/plugins/lisa-nestjs-devin/hooks/lisa-edit-gate.sh +152 -0
  617. package/plugins/lisa-nestjs-devin/hooks.json +15 -0
  618. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/SKILL.md +176 -0
  619. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/advanced-features.md +527 -0
  620. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/project-patterns.md +531 -0
  621. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/quick-start.md +257 -0
  622. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
  623. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/types-scalars.md +513 -0
  624. package/plugins/lisa-nestjs-devin/skills/nestjs-rules/SKILL.md +560 -0
  625. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/SKILL.md +275 -0
  626. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
  627. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/entity-patterns.md +450 -0
  628. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/observability-patterns.md +536 -0
  629. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  630. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  631. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  632. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  633. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  634. package/plugins/lisa-openclaw-devin/.claude-plugin/plugin.json +8 -0
  635. package/plugins/lisa-openclaw-devin/.devin-plugin/plugin.json +8 -0
  636. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-repo-topic/SKILL.md +163 -0
  637. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +185 -0
  638. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/SKILL.md +175 -0
  639. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/references/platform-routing.md +123 -0
  640. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/references/prompts.md +78 -0
  641. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-setup/SKILL.md +141 -0
  642. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  643. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  644. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  645. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  646. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  647. package/plugins/lisa-phaser-devin/.claude-plugin/plugin.json +11 -0
  648. package/plugins/lisa-phaser-devin/.devin-plugin/plugin.json +8 -0
  649. package/plugins/lisa-phaser-devin/agents/accessibility-advocate.md +55 -0
  650. package/plugins/lisa-phaser-devin/agents/art-director.md +90 -0
  651. package/plugins/lisa-phaser-devin/agents/audio-director.md +65 -0
  652. package/plugins/lisa-phaser-devin/agents/combat-designer.md +61 -0
  653. package/plugins/lisa-phaser-devin/agents/economy-designer.md +59 -0
  654. package/plugins/lisa-phaser-devin/agents/game-designer.md +62 -0
  655. package/plugins/lisa-phaser-devin/agents/game-feel-specialist.md +56 -0
  656. package/plugins/lisa-phaser-devin/agents/level-designer.md +59 -0
  657. package/plugins/lisa-phaser-devin/agents/localization-manager.md +61 -0
  658. package/plugins/lisa-phaser-devin/agents/marketing-strategist.md +59 -0
  659. package/plugins/lisa-phaser-devin/agents/monetization-designer.md +59 -0
  660. package/plugins/lisa-phaser-devin/agents/narrative-designer.md +56 -0
  661. package/plugins/lisa-phaser-devin/agents/onboarding-advocate.md +59 -0
  662. package/plugins/lisa-phaser-devin/agents/player-advocate.md +57 -0
  663. package/plugins/lisa-phaser-devin/agents/producer.md +61 -0
  664. package/plugins/lisa-phaser-devin/agents/product-analyst.md +62 -0
  665. package/plugins/lisa-phaser-devin/agents/publisher.md +59 -0
  666. package/plugins/lisa-phaser-devin/agents/qa-playtester.md +57 -0
  667. package/plugins/lisa-phaser-devin/agents/target-player.md +52 -0
  668. package/plugins/lisa-phaser-devin/agents/ux-ui-designer.md +60 -0
  669. package/plugins/lisa-phaser-devin/hooks/devin-tool-name-shim.sh +30 -0
  670. package/plugins/lisa-phaser-devin/hooks/inject-rules.sh +27 -0
  671. package/plugins/lisa-phaser-devin/hooks.json +14 -0
  672. package/plugins/lisa-phaser-devin/rules/eager/phaser.md +44 -0
  673. package/plugins/lisa-phaser-devin/rules/reference/phaser.md +184 -0
  674. package/plugins/lisa-phaser-devin/skills/phaser-accessibility/SKILL.md +135 -0
  675. package/plugins/lisa-phaser-devin/skills/phaser-asset-pipeline/SKILL.md +222 -0
  676. package/plugins/lisa-phaser-devin/skills/phaser-asset-sourcing/SKILL.md +151 -0
  677. package/plugins/lisa-phaser-devin/skills/phaser-build-deploy/SKILL.md +153 -0
  678. package/plugins/lisa-phaser-devin/skills/phaser-i18n/SKILL.md +122 -0
  679. package/plugins/lisa-phaser-devin/skills/phaser-project-structure/SKILL.md +89 -0
  680. package/plugins/lisa-phaser-devin/skills/phaser-services/SKILL.md +208 -0
  681. package/plugins/lisa-phaser-devin/skills/phaser-testing/SKILL.md +192 -0
  682. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  683. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  684. package/plugins/lisa-rails-agy/plugin.json +1 -1
  685. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  686. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  687. package/plugins/lisa-rails-devin/.claude-plugin/plugin.json +11 -0
  688. package/plugins/lisa-rails-devin/.devin-plugin/plugin.json +8 -0
  689. package/plugins/lisa-rails-devin/agents/ops-specialist.md +226 -0
  690. package/plugins/lisa-rails-devin/hooks/devin-tool-name-shim.sh +30 -0
  691. package/plugins/lisa-rails-devin/hooks/inject-rules.sh +40 -0
  692. package/plugins/lisa-rails-devin/hooks/lisa-edit-gate.sh +152 -0
  693. package/plugins/lisa-rails-devin/hooks/rubocop-on-edit.sh +101 -0
  694. package/plugins/lisa-rails-devin/hooks/sg-scan-on-edit.sh +97 -0
  695. package/plugins/lisa-rails-devin/hooks.json +29 -0
  696. package/plugins/lisa-rails-devin/rules/eager/rails-conventions.md +23 -0
  697. package/plugins/lisa-rails-devin/rules/reference/rails-conventions.md +176 -0
  698. package/plugins/lisa-rails-devin/skills/action-controller-best-practices/SKILL.md +374 -0
  699. package/plugins/lisa-rails-devin/skills/action-view-best-practices/SKILL.md +335 -0
  700. package/plugins/lisa-rails-devin/skills/active-record-model-best-practices/SKILL.md +166 -0
  701. package/plugins/lisa-rails-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
  702. package/plugins/lisa-rails-devin/skills/fix-linter-error/SKILL.md +45 -0
  703. package/plugins/lisa-rails-devin/skills/improve-code-complexity/SKILL.md +51 -0
  704. package/plugins/lisa-rails-devin/skills/improve-max-lines/SKILL.md +46 -0
  705. package/plugins/lisa-rails-devin/skills/improve-max-lines-per-function/SKILL.md +46 -0
  706. package/plugins/lisa-rails-devin/skills/improve-test-coverage/SKILL.md +48 -0
  707. package/plugins/lisa-rails-devin/skills/jira-add-journey/SKILL.md +79 -0
  708. package/plugins/lisa-rails-devin/skills/jira-create/SKILL.md +100 -0
  709. package/plugins/lisa-rails-devin/skills/jira-evidence/SKILL.md +76 -0
  710. package/plugins/lisa-rails-devin/skills/jira-evidence/scripts/post-evidence.sh +262 -0
  711. package/plugins/lisa-rails-devin/skills/jira-journey/SKILL.md +65 -0
  712. package/plugins/lisa-rails-devin/skills/jira-verify/SKILL.md +26 -0
  713. package/plugins/lisa-rails-devin/skills/ops-check-logs/SKILL.md +191 -0
  714. package/plugins/lisa-rails-devin/skills/ops-deploy/SKILL.md +153 -0
  715. package/plugins/lisa-rails-devin/skills/ops-run-local/SKILL.md +169 -0
  716. package/plugins/lisa-rails-devin/skills/ops-verify-jobs/SKILL.md +157 -0
  717. package/plugins/lisa-rails-devin/skills/ops-verify-telemetry/SKILL.md +226 -0
  718. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  719. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  720. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  721. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  722. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  723. package/plugins/lisa-typescript-devin/.claude-plugin/plugin.json +11 -0
  724. package/plugins/lisa-typescript-devin/.devin-plugin/plugin.json +8 -0
  725. package/plugins/lisa-typescript-devin/hooks/block-suppress-directives.sh +141 -0
  726. package/plugins/lisa-typescript-devin/hooks/devin-tool-name-shim.sh +30 -0
  727. package/plugins/lisa-typescript-devin/hooks/format-on-edit.sh +102 -0
  728. package/plugins/lisa-typescript-devin/hooks/lint-on-edit.sh +117 -0
  729. package/plugins/lisa-typescript-devin/hooks/lisa-edit-gate.sh +152 -0
  730. package/plugins/lisa-typescript-devin/hooks/sg-scan-on-edit.sh +94 -0
  731. package/plugins/lisa-typescript-devin/hooks.json +34 -0
  732. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  733. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  734. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  735. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  736. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  737. package/plugins/lisa-wiki-devin/.claude-plugin/plugin.json +8 -0
  738. package/plugins/lisa-wiki-devin/.devin-plugin/plugin.json +8 -0
  739. package/plugins/lisa-wiki-devin/ci/lisa-wiki-validate.yml +33 -0
  740. package/plugins/lisa-wiki-devin/schema/lisa-wiki-config.schema.json +162 -0
  741. package/plugins/lisa-wiki-devin/schema/wiki-structure.schema.json +51 -0
  742. package/plugins/lisa-wiki-devin/scripts/_wiki-lib.mjs +204 -0
  743. package/plugins/lisa-wiki-devin/scripts/diff-guard.mjs +117 -0
  744. package/plugins/lisa-wiki-devin/scripts/ensure-gitignore.mjs +131 -0
  745. package/plugins/lisa-wiki-devin/scripts/ensure-wiki.mjs +268 -0
  746. package/plugins/lisa-wiki-devin/scripts/ingest-git.mjs +198 -0
  747. package/plugins/lisa-wiki-devin/scripts/ingest-memory.mjs +135 -0
  748. package/plugins/lisa-wiki-devin/scripts/ingest-roles.mjs +95 -0
  749. package/plugins/lisa-wiki-devin/scripts/ingest_slack_channel.py +361 -0
  750. package/plugins/lisa-wiki-devin/scripts/lib/bounded-child.mjs +159 -0
  751. package/plugins/lisa-wiki-devin/scripts/lint-wiki.mjs +513 -0
  752. package/plugins/lisa-wiki-devin/scripts/mcp-doctor.mjs +72 -0
  753. package/plugins/lisa-wiki-devin/scripts/render-contract.mjs +107 -0
  754. package/plugins/lisa-wiki-devin/scripts/rewrite-refs.mjs +144 -0
  755. package/plugins/lisa-wiki-devin/scripts/slack_oauth_user.py +179 -0
  756. package/plugins/lisa-wiki-devin/scripts/validate-config.mjs +321 -0
  757. package/plugins/lisa-wiki-devin/scripts/verify-migration.mjs +203 -0
  758. package/plugins/lisa-wiki-devin/scripts/verify-wiki-safety.mjs +126 -0
  759. package/plugins/lisa-wiki-devin/scripts/wiki-safety.mjs +378 -0
  760. package/plugins/lisa-wiki-devin/scripts/wiki-status.mjs +345 -0
  761. package/plugins/lisa-wiki-devin/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
  762. package/plugins/lisa-wiki-devin/skills/lisa-wiki-add-role/SKILL.md +35 -0
  763. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
  764. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
  765. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-git/SKILL.md +25 -0
  766. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
  767. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
  768. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
  769. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
  770. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
  771. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-web/SKILL.md +23 -0
  772. package/plugins/lisa-wiki-devin/skills/lisa-wiki-doctor/SKILL.md +47 -0
  773. package/plugins/lisa-wiki-devin/skills/lisa-wiki-ingest/SKILL.md +106 -0
  774. package/plugins/lisa-wiki-devin/skills/lisa-wiki-lint/SKILL.md +32 -0
  775. package/plugins/lisa-wiki-devin/skills/lisa-wiki-migrate/SKILL.md +43 -0
  776. package/plugins/lisa-wiki-devin/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
  777. package/plugins/lisa-wiki-devin/skills/lisa-wiki-query/SKILL.md +40 -0
  778. package/plugins/lisa-wiki-devin/skills/lisa-wiki-setup/SKILL.md +75 -0
  779. package/plugins/lisa-wiki-devin/skills/lisa-wiki-setup-automations/SKILL.md +83 -0
  780. package/plugins/lisa-wiki-devin/skills/lisa-wiki-status/SKILL.md +47 -0
  781. package/plugins/lisa-wiki-devin/skills/lisa-wiki-tear-down-automations/SKILL.md +34 -0
  782. package/plugins/lisa-wiki-devin/skills/lisa-wiki-usage/SKILL.md +50 -0
  783. package/plugins/lisa-wiki-devin/templates/agents/role-agent.claude.md +16 -0
  784. package/plugins/lisa-wiki-devin/templates/agents/role-agent.codex.toml +15 -0
  785. package/plugins/lisa-wiki-devin/templates/index.md +17 -0
  786. package/plugins/lisa-wiki-devin/templates/llm-wiki-contract.md +72 -0
  787. package/plugins/lisa-wiki-devin/templates/log.md +8 -0
  788. package/plugins/lisa-wiki-devin/templates/page-types/architecture.md +18 -0
  789. package/plugins/lisa-wiki-devin/templates/page-types/concept.md +18 -0
  790. package/plugins/lisa-wiki-devin/templates/page-types/decision.md +18 -0
  791. package/plugins/lisa-wiki-devin/templates/page-types/entity.md +19 -0
  792. package/plugins/lisa-wiki-devin/templates/page-types/open-question.md +18 -0
  793. package/plugins/lisa-wiki-devin/templates/page-types/playbook.md +18 -0
  794. package/plugins/lisa-wiki-devin/templates/page-types/project.md +19 -0
  795. package/plugins/lisa-wiki-devin/templates/page-types/requirement.md +19 -0
  796. package/plugins/lisa-wiki-devin/templates/page-types/staff.md +26 -0
  797. package/plugins/lisa-wiki-devin/templates/start-here.md +24 -0
  798. package/plugins/lisa-wiki-devin/templates/state-readme.md +20 -0
  799. package/plugins/lisa-wiki-devin/templates/wrapper-gitignore.txt +19 -0
  800. package/scripts/build-plugins.sh +2 -2
  801. package/scripts/deployed-guard-advice.mjs +1 -0
  802. package/scripts/generate-devin-plugin-artifacts.mjs +263 -0
  803. package/scripts/lib/hook-registration-audit.mjs +3 -1
  804. package/scripts/lib/per-agent-hook-filter.mjs +174 -5
  805. package/scripts/lib/plugin-rule-citations.mjs +2 -2
@@ -0,0 +1,216 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Shared read-only run-history projection for `/lisa:automation-status`.
4
+ *
5
+ * The durable run-outcome substrate (RBC-3, `automation-run-record.mjs`) stores
6
+ * one bounded JSONL file per registered loop under `.lisa/automations/runs/`.
7
+ * This module turns that substrate — plus the checked-in per-loop runbook
8
+ * (`automation-runbook-contract`) — into the per-item display fields both
9
+ * runtime adapters attach to their status rows, so the Codex and Claude
10
+ * adapters never diverge on how the contract, last outcome, and bounded history
11
+ * are rendered.
12
+ *
13
+ * STRICTLY READ-ONLY: it stats the runbook and reads the run-record file. It
14
+ * never creates the runs directory, a runbook, or a run record — a status read
15
+ * must leave the fleet byte-identical.
16
+ */
17
+
18
+ import fs from "node:fs/promises";
19
+ import path from "node:path";
20
+
21
+ import {
22
+ automationRunQuarantinePath,
23
+ automationRunRecordPath,
24
+ readAutomationRunRecords,
25
+ } from "./automation-run-record.mjs";
26
+
27
+ /**
28
+ * Inline history cap: the newest N outcomes are listed, the remainder is only
29
+ * counted. A bounded view of an already-bounded file, with the trim stated in
30
+ * the output rather than applied silently.
31
+ */
32
+ export const AUTOMATION_RUN_HISTORY_DISPLAY_LIMIT = 5;
33
+
34
+ /** The recorded outcome that signals a loop could not finish its own work. */
35
+ export const RECOVERY_REQUIRED_OUTCOME = "recovery-required";
36
+
37
+ /**
38
+ * How many trailing `recovery-required` runs in a row flip a loop to `FAILING`.
39
+ * The RBC-5 acceptance criteria pin "last three runs" as the escalation
40
+ * trigger; that wins over the ticket prose's looser "five in a row" pattern.
41
+ */
42
+ export const RECOVERY_REQUIRED_ESCALATION_THRESHOLD = 3;
43
+
44
+ const RUNBOOK_NOT_SCAFFOLDED_LINE =
45
+ "not scaffolded — run /lisa:setup-automations";
46
+ const NO_RECORDED_RUNS_LINE = "no recorded runs yet";
47
+
48
+ /**
49
+ * @typedef {{
50
+ * readonly ts: string
51
+ * readonly outcome: string
52
+ * readonly summary: string
53
+ * }} AutomationLastOutcome
54
+ *
55
+ * @typedef {{
56
+ * readonly runbook: string
57
+ * readonly lastOutcome?: AutomationLastOutcome
58
+ * readonly outcomeHistory: readonly string[]
59
+ * readonly olderRecordCount: number
60
+ * readonly recoveryRequiredStreak: number
61
+ * readonly recoverySummaries: readonly string[]
62
+ * readonly skippedCorruptLines: number
63
+ * readonly recordsPath: string
64
+ * readonly quarantinePath: string
65
+ * }} AutomationRunDisplay
66
+ */
67
+
68
+ /**
69
+ * Resolve the read-only run-history display fields for one registered loop.
70
+ *
71
+ * @param {{
72
+ * readonly projectRoot?: string
73
+ * readonly loopId: string
74
+ * readonly runbookPath?: string
75
+ * }} input
76
+ * @returns {Promise<AutomationRunDisplay>}
77
+ */
78
+ export async function resolveAutomationRunDisplay(input) {
79
+ const projectRoot = path.resolve(input.projectRoot ?? process.cwd());
80
+ const runbook = await resolveRunbookLine(projectRoot, input.runbookPath);
81
+ const recordsPath = automationRunRecordPath(projectRoot, input.loopId);
82
+ const { records, skippedCorruptLines } =
83
+ await readAutomationRunRecords(recordsPath);
84
+
85
+ const newestFirst = records.toReversed();
86
+ const latest = records.at(-1);
87
+ const lastOutcome = latest
88
+ ? { ts: latest.ts, outcome: latest.outcome, summary: latest.summary }
89
+ : undefined;
90
+ const outcomeHistory = newestFirst
91
+ .slice(0, AUTOMATION_RUN_HISTORY_DISPLAY_LIMIT)
92
+ .map(record => record.outcome);
93
+ const olderRecordCount = Math.max(
94
+ 0,
95
+ records.length - AUTOMATION_RUN_HISTORY_DISPLAY_LIMIT
96
+ );
97
+ const trailingRecovery = collectTrailingRecoveryRuns(records);
98
+
99
+ return {
100
+ runbook,
101
+ lastOutcome,
102
+ outcomeHistory,
103
+ olderRecordCount,
104
+ recoveryRequiredStreak: trailingRecovery.length,
105
+ recoverySummaries: trailingRecovery.map(record => record.summary),
106
+ skippedCorruptLines,
107
+ recordsPath,
108
+ quarantinePath: automationRunQuarantinePath(projectRoot, input.loopId),
109
+ };
110
+ }
111
+
112
+ /**
113
+ * Report a ledger holding rows this module cannot read as drift.
114
+ *
115
+ * `skippedCorruptLines` was computed on every read, returned by both the read
116
+ * and the write path, and destructured by every caller — and printed by none
117
+ * of them. A counter nobody reads is not a control, and this one guarded the
118
+ * only evidence that a loop's own history had been damaged (#2578).
119
+ *
120
+ * `DRIFTED`, not `FAILING`: the ledger is local scheduler state, and rows it
121
+ * cannot read say nothing about whether the loop is doing its job. Escalating
122
+ * it to a loop failure would misattribute a storage problem to the automation
123
+ * and bury the real health signal underneath it.
124
+ * @param {AutomationRunDisplay | undefined} runDisplay
125
+ * @returns {{ readonly status: "DRIFTED", readonly summary: string, readonly remediation: string } | null}
126
+ */
127
+ export function resolveLedgerIntegrityFinding(runDisplay) {
128
+ if (!runDisplay || runDisplay.skippedCorruptLines < 1) {
129
+ return null;
130
+ }
131
+ return {
132
+ status: "DRIFTED",
133
+ summary: `${runDisplay.skippedCorruptLines} stored run record(s) in this loop's history cannot be read`,
134
+ remediation: `Open ${runDisplay.recordsPath} and look at the lines that are not valid run records. They are left exactly as written and are left out of the history above, so the outcomes shown are an incomplete picture. Nothing deletes them: each is copied to ${runDisplay.quarantinePath} before the history bound would evict it. Fix or remove those lines and this stops being reported.`,
135
+ };
136
+ }
137
+
138
+ /**
139
+ * Force a `FAILING` verdict when a loop has recorded three or more consecutive
140
+ * `recovery-required` runs — the fleet-health signal the scheduler surface
141
+ * cannot see on its own. Returns a run-signal-shaped escalation, or null when
142
+ * the streak is below the threshold.
143
+ *
144
+ * @param {AutomationRunDisplay | undefined} runDisplay
145
+ * @returns {{ readonly status: "FAILING", readonly summary: string, readonly remediation: string } | null}
146
+ */
147
+ export function resolveRecoveryEscalation(runDisplay) {
148
+ if (
149
+ !runDisplay ||
150
+ runDisplay.recoveryRequiredStreak < RECOVERY_REQUIRED_ESCALATION_THRESHOLD
151
+ ) {
152
+ return null;
153
+ }
154
+
155
+ // Number the citations rather than joining on a delimiter: recorded summaries
156
+ // carry their own `;` and `.`, so a `; `-separated list is ambiguous. `(1) …
157
+ // (2) …` stays legible no matter what punctuation a summary contains.
158
+ const citations = runDisplay.recoverySummaries
159
+ .map((summary, index) => `(${index + 1}) ${summary}`)
160
+ .join(" ");
161
+ return {
162
+ status: "FAILING",
163
+ summary: `the last ${runDisplay.recoveryRequiredStreak} recorded runs all required recovery`,
164
+ remediation: `Repeated recovery-required runs — ${citations} Inspect the loop's runbook and the cited runs, fix the recurring failure, then let the next scheduled run confirm recovery.`,
165
+ };
166
+ }
167
+
168
+ /**
169
+ * @param {string} projectRoot
170
+ * @param {string | undefined} runbookPath
171
+ * @returns {Promise<string>}
172
+ */
173
+ async function resolveRunbookLine(projectRoot, runbookPath) {
174
+ if (!runbookPath) {
175
+ return RUNBOOK_NOT_SCAFFOLDED_LINE;
176
+ }
177
+ const scaffolded = await runbookIsScaffolded(
178
+ path.join(projectRoot, runbookPath)
179
+ );
180
+ return scaffolded ? runbookPath : RUNBOOK_NOT_SCAFFOLDED_LINE;
181
+ }
182
+
183
+ /**
184
+ * Read-only existence check for a checked-in runbook. Any stat failure — the
185
+ * file is absent, unreadable, or not a regular file — degrades to "not
186
+ * scaffolded" so the status read never implies health it could not confirm and
187
+ * never throws mid-report.
188
+ *
189
+ * @param {string} runbookAbsolutePath
190
+ * @returns {Promise<boolean>}
191
+ */
192
+ async function runbookIsScaffolded(runbookAbsolutePath) {
193
+ try {
194
+ const stat = await fs.stat(runbookAbsolutePath);
195
+ return stat.isFile();
196
+ } catch {
197
+ return false;
198
+ }
199
+ }
200
+
201
+ /**
202
+ * @param {readonly import("./automation-run-record.mjs").AutomationRunRecord[]} records
203
+ * @returns {readonly import("./automation-run-record.mjs").AutomationRunRecord[]} trailing recovery-required runs, newest first
204
+ */
205
+ function collectTrailingRecoveryRuns(records) {
206
+ const trailing = [];
207
+ for (let index = records.length - 1; index >= 0; index -= 1) {
208
+ if (records[index].outcome !== RECOVERY_REQUIRED_OUTCOME) {
209
+ break;
210
+ }
211
+ trailing.push(records[index]);
212
+ }
213
+ return trailing;
214
+ }
215
+
216
+ export { RUNBOOK_NOT_SCAFFOLDED_LINE, NO_RECORDED_RUNS_LINE };
@@ -0,0 +1,127 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Detect registered-loop cycles that ran and recorded nothing.
4
+ *
5
+ * The Automation Runbook Contract requires every run of a registered loop to
6
+ * end in exactly one of six recorded outcomes, but the recorder is invoked only
7
+ * by prose instruction inside each loop's `SKILL.md`. A cycle that finishes
8
+ * without running it appends no row, and an absent row is ambiguous in the one
9
+ * way that matters: it looks identical to a cycle that never ran.
10
+ *
11
+ * That ambiguity is not merely an audit gap. Cycles read the ledger tail to
12
+ * decide whether the lane was already worked, so a missing row feeds back into
13
+ * selection — the next cycle sees stale activity, concludes the lane is
14
+ * unworked, and re-picks the rung a peer is already holding.
15
+ *
16
+ * This module resolves the ambiguity with a signal the loop does not control:
17
+ * the scheduler's own last-run time. A row written by a cycle necessarily
18
+ * postdates that cycle's start, so a newest row older than the last scheduler
19
+ * run means the run in between recorded nothing. Neither side can fake it —
20
+ * the scheduler timestamp is written by the runtime, and the ledger timestamp
21
+ * by the recorder.
22
+ *
23
+ * Reporting only, never blocking, per the contract's own escape: "If recording
24
+ * still fails, degrade, never abort." Every unreadable input degrades to `null`
25
+ * rather than to a finding, because a detector that guesses would poison the
26
+ * same selection loop it exists to protect.
27
+ */
28
+
29
+ /**
30
+ * @typedef {{
31
+ * readonly missedCycles: number
32
+ * readonly schedulerLastRunAt: string
33
+ * readonly ledgerLastRecordAt: string | null
34
+ * readonly summary: string
35
+ * readonly remediation: string
36
+ * }} UnrecordedRunFinding
37
+ */
38
+
39
+ /**
40
+ * Remediation text shared by both finding shapes.
41
+ *
42
+ * It names the contract rather than the script because the omission is a
43
+ * skipped step in the loop, not a broken recorder — a broken recorder reports
44
+ * itself through the degradation path this module deliberately leaves alone.
45
+ */
46
+ const UNRECORDED_RUN_REMEDIATION =
47
+ "The loop ran without recording an outcome. Confirm the loop's SKILL.md " +
48
+ "still ends every path by invoking `automation-run-record.mjs`, including " +
49
+ "the paths that find no work, per the automation-runbook-contract rule.";
50
+
51
+ /**
52
+ * Whether a scheduled run finished without appending a run record.
53
+ *
54
+ * Tolerance is one full cadence, not a fixed grace period. The scheduler's
55
+ * `lastRunAt` may be stamped at either end of a cycle depending on runtime, and
56
+ * a cycle can legitimately run for many minutes, so anything tighter would
57
+ * report a slow-but-honest loop as a silent one. A full cadence cannot be
58
+ * crossed by a single well-behaved run: it means an entire scheduled cycle came
59
+ * and went between the newest row and the newest run.
60
+ *
61
+ * @param {{
62
+ * readonly schedulerLastRunAt?: string | null
63
+ * readonly ledgerLastRecordAt?: string | null
64
+ * readonly hasRunbook?: boolean
65
+ * readonly cadenceMs?: number | null
66
+ * }} input - Scheduler-side run time, ledger-side newest record, and cadence.
67
+ * @returns {UnrecordedRunFinding | null} The finding, or `null` when the
68
+ * comparison cannot be made from trustworthy inputs.
69
+ */
70
+ export function resolveUnrecordedRunFinding(input) {
71
+ const cadenceMs = input.cadenceMs;
72
+ if (!cadenceMs || !Number.isFinite(cadenceMs) || cadenceMs <= 0) {
73
+ return null;
74
+ }
75
+
76
+ // No scheduler timestamp means the runtime never reported a run, which is
77
+ // indistinguishable from a loop registered moments ago. Silence here is the
78
+ // honest answer, and `classifyAutomationRunSignal` already reports the
79
+ // missing metadata separately.
80
+ if (!input.schedulerLastRunAt) {
81
+ return null;
82
+ }
83
+ const schedulerLastRun = Date.parse(input.schedulerLastRunAt);
84
+ if (Number.isNaN(schedulerLastRun)) {
85
+ return null;
86
+ }
87
+
88
+ // A loop with no runbook is not yet under the contract; `automation-status`
89
+ // reports the un-scaffolded runbook itself, and stacking a second finding on
90
+ // it would blame the loop for a setup step it never took.
91
+ if (input.hasRunbook === false) {
92
+ return null;
93
+ }
94
+
95
+ if (!input.ledgerLastRecordAt) {
96
+ return {
97
+ missedCycles: 1,
98
+ schedulerLastRunAt: input.schedulerLastRunAt,
99
+ ledgerLastRecordAt: null,
100
+ summary: `scheduler reports a run at ${input.schedulerLastRunAt} but the ledger holds no record at all`,
101
+ remediation: UNRECORDED_RUN_REMEDIATION,
102
+ };
103
+ }
104
+
105
+ const ledgerLastRecord = Date.parse(input.ledgerLastRecordAt);
106
+ if (Number.isNaN(ledgerLastRecord)) {
107
+ return null;
108
+ }
109
+
110
+ const gapMs = schedulerLastRun - ledgerLastRecord;
111
+ if (gapMs <= cadenceMs) {
112
+ return null;
113
+ }
114
+
115
+ const missedCycles = Math.floor(gapMs / cadenceMs);
116
+ return {
117
+ missedCycles,
118
+ schedulerLastRunAt: input.schedulerLastRunAt,
119
+ ledgerLastRecordAt: input.ledgerLastRecordAt,
120
+ summary: `${missedCycles} scheduled ${
121
+ missedCycles === 1 ? "run" : "runs"
122
+ } recorded no outcome (newest record ${input.ledgerLastRecordAt}, last run ${input.schedulerLastRunAt})`,
123
+ remediation: UNRECORDED_RUN_REMEDIATION,
124
+ };
125
+ }
126
+
127
+ export { UNRECORDED_RUN_REMEDIATION };
@@ -0,0 +1,150 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * What to do with a dependency edge once its blocker has been judged.
4
+ *
5
+ * ## The gap this fills
6
+ *
7
+ * `blocker-containment` decides ONE question — given an edge, is it satisfied —
8
+ * and says so in its own words: it "does not decide when a dependency edge
9
+ * should exist, dissolve an edge once satisfied, or govern what a surface does
10
+ * after clearing". Nothing else claimed that job. So a repair pass that ruled a
11
+ * dependency satisfied moved the STATE and left the EDGE, recording the ruling
12
+ * as a comment; the next reader parses relations, not prose, and blocks again
13
+ * (CodySwannGT/lisa#3472). The durable artifact of "this is satisfied" had no
14
+ * mechanical effect.
15
+ *
16
+ * Measured on this repository while writing this: of 11 open `status:blocked`
17
+ * items carrying a parsable `Blocked by #N`, 5 were held behind blockers that
18
+ * were all closed.
19
+ *
20
+ * ## Why closure is not the test, and neither is "it is finished"
21
+ *
22
+ * Two different mistakes converge on the same wrong answer.
23
+ *
24
+ * The first is testing a state NAME. That half is already fixed: the triage
25
+ * gate now clear-checks by containment, because a promotion workflow types its
26
+ * merged-and-deployed rungs `started`, so `Done` strands every dependent behind
27
+ * work already merged where the dependent needs it.
28
+ *
29
+ * The second is treating CLOSED as satisfied. An `is blocked by` edge is a
30
+ * DEVELOPMENT dependency: it is satisfied when the blocker's code is on the
31
+ * branch this work builds from. A blocker can be closed with no code — and a
32
+ * blocker closed `NOT_PLANNED` is the sharp case, because it means the thing
33
+ * depended on will never be built. Dissolving that edge silently converts "what
34
+ * we needed is cancelled" into "we are unblocked", which is the same wrong-write
35
+ * family as CodySwannGT/lisa#3479, where a reason-blind repair would have
36
+ * stamped a production terminal on abandoned work. So an abandoned blocker
37
+ * ESCALATES to a human rather than dissolving or silently holding forever:
38
+ * somebody has to decide whether the dependent still makes sense.
39
+ *
40
+ * ## What this module does not decide
41
+ *
42
+ * How an edge is dissolved on a given tracker. That is vendor work with its own
43
+ * hazard: on Linear, `issueRelationCreate` CONVERTS an existing relation rather
44
+ * than adding one (CodySwannGT/lisa#3605), so a writer that "updates" an edge
45
+ * can destroy a different one. This module returns a decision; the vendor
46
+ * surface performs it and reads it back.
47
+ * @module blocker-edge-resolution
48
+ */
49
+
50
+ /** Every action a surface may take on a judged edge. */
51
+ export const EDGE_ACTIONS = Object.freeze(["dissolve", "keep", "escalate"]);
52
+
53
+ /** GitHub's closure reason for work that will deliberately not be done. */
54
+ const NOT_PLANNED = "not_planned";
55
+
56
+ /**
57
+ * Decide what happens to one `is blocked by` edge.
58
+ *
59
+ * `contained` is the containment verdict — the blocker's merged code is an
60
+ * ancestor of the branch this work builds from — and it is deliberately the
61
+ * ONLY positive signal. Everything else here exists to keep a non-containment
62
+ * signal from being mistaken for one.
63
+ * @param {{
64
+ * contained?: boolean | null,
65
+ * blockerState?: string,
66
+ * blockerReason?: string,
67
+ * }} input The containment verdict and the blocker's tracker state.
68
+ * @returns {{action: string, reason: string}} What to do, and why.
69
+ */
70
+ export function resolveBlockerEdge(input = {}) {
71
+ const state = String(input.blockerState ?? "")
72
+ .trim()
73
+ .toLowerCase();
74
+ const reason = String(input.blockerReason ?? "")
75
+ .trim()
76
+ .toLowerCase();
77
+
78
+ // Checked BEFORE containment, because an abandoned blocker whose branch
79
+ // happens to contain some earlier commit of its own is still abandoned. The
80
+ // question a human has to answer is whether the dependent still makes sense,
81
+ // and a containment true would silently answer it for them.
82
+ if (state === "closed" && reason === NOT_PLANNED) {
83
+ return {
84
+ action: "escalate",
85
+ reason:
86
+ "the blocker was closed as NOT PLANNED, so the work this item depends on will never be " +
87
+ "delivered. Dissolving the edge would read as 'unblocked' when nothing was built, and " +
88
+ "holding it forever hides a decision somebody has to make: does this item still make sense " +
89
+ "without its blocker? That is a human call, not a sweep's.",
90
+ };
91
+ }
92
+
93
+ if (input.contained === true) {
94
+ return {
95
+ action: "dissolve",
96
+ reason:
97
+ "the blocker's merged code is present on the branch this item builds from, so the " +
98
+ "development dependency is satisfied. Remove the edge in the same write that records the " +
99
+ "ruling, and read it back — a state move plus a comment is a claim about a clearance, not " +
100
+ "a clearance, and the next reader parses relations rather than prose.",
101
+ };
102
+ }
103
+
104
+ if (input.contained === null || input.contained === undefined) {
105
+ return {
106
+ action: "escalate",
107
+ reason:
108
+ "containment could not be computed for this blocker, so whether the dependency is satisfied " +
109
+ "is unknown. An unknown is not a clearance: dissolving here would be a guess in the " +
110
+ "direction that releases work, which is the direction nothing downstream re-checks.",
111
+ };
112
+ }
113
+
114
+ return {
115
+ action: "keep",
116
+ reason:
117
+ state === "closed"
118
+ ? "the blocker is closed but its code is not on the branch this item builds from. Closing an " +
119
+ "item is not the same as shipping it, and an `is blocked by` edge is a development " +
120
+ "dependency, not a bookkeeping one."
121
+ : "the blocker's code is not yet on the branch this item builds from, so the dependency " +
122
+ "still holds.",
123
+ };
124
+ }
125
+
126
+ /**
127
+ * Decide a whole set of edges, and say whether the item can proceed.
128
+ *
129
+ * An item proceeds only when every edge dissolves. One escalation holds the
130
+ * item — reporting it, rather than proceeding on the majority verdict, is what
131
+ * keeps a single unanswerable edge from being rounded away.
132
+ * @param {readonly object[]} edges Per-edge inputs, in the item's own order.
133
+ * @returns {{
134
+ * proceed: boolean,
135
+ * decisions: {action: string, reason: string}[],
136
+ * escalations: number,
137
+ * }} The per-edge decisions and whether the item is free to move.
138
+ */
139
+ export function resolveBlockerEdges(edges = []) {
140
+ const decisions = (edges ?? []).map(edge => ({
141
+ ...edge,
142
+ ...resolveBlockerEdge(edge),
143
+ }));
144
+ return {
145
+ proceed:
146
+ decisions.length > 0 && decisions.every(one => one.action === "dissolve"),
147
+ decisions,
148
+ escalations: decisions.filter(one => one.action === "escalate").length,
149
+ };
150
+ }