@codyswann/lisa 4.74.8 → 4.75.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (809) hide show
  1. package/.claude-plugin/marketplace.json +60 -0
  2. package/all/copy-overwrite/scripts/lib/npm-update-cancel-origin.mjs +4 -2
  3. package/all/copy-overwrite/scripts/lib/npm-update-checkpoint-codec.mjs +141 -0
  4. package/all/copy-overwrite/scripts/lib/npm-update-checkpoint.mjs +162 -116
  5. package/all/copy-overwrite/scripts/lib/npm-update-helper-inventory.mjs +1 -0
  6. package/all/copy-overwrite/scripts/lib/npm-update-recovery.mjs +9 -60
  7. package/all/copy-overwrite/scripts/npm-updater-helper-graph.json +18 -6
  8. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  9. package/dist/core/lisa-owned-hash-ledger.js +20 -0
  10. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  11. package/dist/core/lisa-skill-sources.d.ts +3 -3
  12. package/dist/core/lisa-skill-sources.d.ts.map +1 -1
  13. package/dist/core/lisa-skill-sources.js +3 -2
  14. package/dist/core/lisa-skill-sources.js.map +1 -1
  15. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  16. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  17. package/dist/core/upstream-evidence-manifest.js +739 -11
  18. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  19. package/package.json +4 -4
  20. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  22. package/plugins/lisa-agy/plugin.json +1 -1
  23. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  25. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  26. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-cdk-devin/.claude-plugin/plugin.json +11 -0
  29. package/plugins/lisa-cdk-devin/.devin-plugin/plugin.json +8 -0
  30. package/plugins/lisa-cdk-devin/skills/setup-aws-accounts/SKILL.md +292 -0
  31. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-devin/.claude-plugin/plugin.json +8 -0
  34. package/plugins/lisa-devin/.devin-plugin/plugin.json +8 -0
  35. package/plugins/lisa-devin/.mcp.json +8 -0
  36. package/plugins/lisa-devin/agents/architecture-specialist.md +32 -0
  37. package/plugins/lisa-devin/agents/bug-fixer.md +43 -0
  38. package/plugins/lisa-devin/agents/builder.md +44 -0
  39. package/plugins/lisa-devin/agents/confluence-prd-intake.md +65 -0
  40. package/plugins/lisa-devin/agents/debug-specialist.md +34 -0
  41. package/plugins/lisa-devin/agents/eval-specialist.md +33 -0
  42. package/plugins/lisa-devin/agents/git-history-analyzer.md +183 -0
  43. package/plugins/lisa-devin/agents/github-agent.md +155 -0
  44. package/plugins/lisa-devin/agents/github-build-intake.md +64 -0
  45. package/plugins/lisa-devin/agents/github-prd-intake.md +66 -0
  46. package/plugins/lisa-devin/agents/jira-agent.md +135 -0
  47. package/plugins/lisa-devin/agents/jira-build-intake.md +64 -0
  48. package/plugins/lisa-devin/agents/learner.md +85 -0
  49. package/plugins/lisa-devin/agents/learning-judge.md +119 -0
  50. package/plugins/lisa-devin/agents/learnings-synthesizer.md +155 -0
  51. package/plugins/lisa-devin/agents/linear-agent.md +138 -0
  52. package/plugins/lisa-devin/agents/linear-build-intake.md +64 -0
  53. package/plugins/lisa-devin/agents/linear-prd-intake.md +66 -0
  54. package/plugins/lisa-devin/agents/notion-prd-intake.md +63 -0
  55. package/plugins/lisa-devin/agents/performance-specialist.md +26 -0
  56. package/plugins/lisa-devin/agents/pr-mining-specialist.md +85 -0
  57. package/plugins/lisa-devin/agents/product-specialist.md +30 -0
  58. package/plugins/lisa-devin/agents/quality-specialist.md +30 -0
  59. package/plugins/lisa-devin/agents/security-specialist.md +43 -0
  60. package/plugins/lisa-devin/agents/skill-evaluator.md +205 -0
  61. package/plugins/lisa-devin/agents/spec-conformance-specialist.md +56 -0
  62. package/plugins/lisa-devin/agents/test-specialist.md +32 -0
  63. package/plugins/lisa-devin/agents/tracker-mining-specialist.md +85 -0
  64. package/plugins/lisa-devin/agents/verification-specialist.md +145 -0
  65. package/plugins/lisa-devin/hooks/auto-update.mjs +824 -0
  66. package/plugins/lisa-devin/hooks/auto-update.sh +31 -0
  67. package/plugins/lisa-devin/hooks/block-blind-automerge.sh +1242 -0
  68. package/plugins/lisa-devin/hooks/block-direct-issue-create.sh +2603 -0
  69. package/plugins/lisa-devin/hooks/block-host-name-leak.mjs +412 -0
  70. package/plugins/lisa-devin/hooks/block-host-name-leak.sh +61 -0
  71. package/plugins/lisa-devin/hooks/block-instruction-file-edits.sh +207 -0
  72. package/plugins/lisa-devin/hooks/block-managed-file-edits.sh +1175 -0
  73. package/plugins/lisa-devin/hooks/block-no-verify.sh +2288 -0
  74. package/plugins/lisa-devin/hooks/block-shell-json-parsing.sh +263 -0
  75. package/plugins/lisa-devin/hooks/cleanup-stale-worktrees.sh +122 -0
  76. package/plugins/lisa-devin/hooks/devin-tool-name-shim.sh +30 -0
  77. package/plugins/lisa-devin/hooks/discharge-work-item-gates.sh +90 -0
  78. package/plugins/lisa-devin/hooks/enforce-verification-gate.sh +506 -0
  79. package/plugins/lisa-devin/hooks/enforcement-vintage-npm.mjs +320 -0
  80. package/plugins/lisa-devin/hooks/enforcement-vintage.mjs +472 -0
  81. package/plugins/lisa-devin/hooks/enforcement-vintage.sh +48 -0
  82. package/plugins/lisa-devin/hooks/failure-signature-index.mjs +717 -0
  83. package/plugins/lisa-devin/hooks/failure-signature-index.sh +26 -0
  84. package/plugins/lisa-devin/hooks/guard-dedupe.bash +374 -0
  85. package/plugins/lisa-devin/hooks/inject-resolved-config.mjs +903 -0
  86. package/plugins/lisa-devin/hooks/inject-resolved-config.sh +107 -0
  87. package/plugins/lisa-devin/hooks/inject-rules.sh +49 -0
  88. package/plugins/lisa-devin/hooks/install-pkgs.sh +84 -0
  89. package/plugins/lisa-devin/hooks/operational-hazards.mjs +736 -0
  90. package/plugins/lisa-devin/hooks/operational-hazards.sh +28 -0
  91. package/plugins/lisa-devin/hooks/parity-safety-net-heredoc.py +1004 -0
  92. package/plugins/lisa-devin/hooks/parity-safety-net.sh +3275 -0
  93. package/plugins/lisa-devin/hooks/secrets-preflight.sh +72 -0
  94. package/plugins/lisa-devin/hooks/setup-jira-cli.sh +205 -0
  95. package/plugins/lisa-devin/hooks/shell-write-nudge.sh +86 -0
  96. package/plugins/lisa-devin/hooks/sonar-secrets.sh +205 -0
  97. package/plugins/lisa-devin/hooks/threshold-ratchet-compare.mjs +518 -0
  98. package/plugins/lisa-devin/hooks/threshold-ratchet-families.mjs +543 -0
  99. package/plugins/lisa-devin/hooks/threshold-ratchet.mjs +568 -0
  100. package/plugins/lisa-devin/hooks/threshold-ratchet.sh +22 -0
  101. package/plugins/lisa-devin/hooks/withdrawn-rulings.mjs +600 -0
  102. package/plugins/lisa-devin/hooks/withdrawn-rulings.sh +24 -0
  103. package/plugins/lisa-devin/hooks/worktree-binding-guard.mjs +1383 -0
  104. package/plugins/lisa-devin/hooks/worktree-binding-guard.sh +79 -0
  105. package/plugins/lisa-devin/hooks.json +247 -0
  106. package/plugins/lisa-devin/rules/eager/00-rule-index.md +82 -0
  107. package/plugins/lisa-devin/rules/eager/base-rules.md +85 -0
  108. package/plugins/lisa-devin/rules/eager/coding-philosophy.md +27 -0
  109. package/plugins/lisa-devin/rules/eager/config-resolution.md +37 -0
  110. package/plugins/lisa-devin/rules/eager/do-it-now.md +11 -0
  111. package/plugins/lisa-devin/rules/eager/empirical-inquiry.md +24 -0
  112. package/plugins/lisa-devin/rules/eager/falsifiable-checks.md +48 -0
  113. package/plugins/lisa-devin/rules/eager/history-audit.md +27 -0
  114. package/plugins/lisa-devin/rules/eager/integration-access-layer.md +19 -0
  115. package/plugins/lisa-devin/rules/eager/intent-routing.md +18 -0
  116. package/plugins/lisa-devin/rules/eager/learnings-ladder.md +18 -0
  117. package/plugins/lisa-devin/rules/eager/local-ci-first.md +15 -0
  118. package/plugins/lisa-devin/rules/eager/measurement-integrity.md +18 -0
  119. package/plugins/lisa-devin/rules/eager/never-name-a-downstream-project.md +9 -0
  120. package/plugins/lisa-devin/rules/eager/not-blocked-just-waiting.md +13 -0
  121. package/plugins/lisa-devin/rules/eager/operational-hazards.md +50 -0
  122. package/plugins/lisa-devin/rules/eager/report-actionability.md +26 -0
  123. package/plugins/lisa-devin/rules/eager/security-audit-handling.md +40 -0
  124. package/plugins/lisa-devin/rules/eager/session-status-updates.md +20 -0
  125. package/plugins/lisa-devin/rules/eager/settled-decisions.md +75 -0
  126. package/plugins/lisa-devin/rules/eager/stale-state-claims.md +26 -0
  127. package/plugins/lisa-devin/rules/eager/tool-access-gate.md +23 -0
  128. package/plugins/lisa-devin/rules/eager/tracked-work.md +9 -0
  129. package/plugins/lisa-devin/rules/eager/upstream-to-lisa.md +14 -0
  130. package/plugins/lisa-devin/rules/eager/verification.md +33 -0
  131. package/plugins/lisa-devin/rules/eager/wiki-knowledge-source.md +13 -0
  132. package/plugins/lisa-devin/rules/eager/withdrawn-rulings.md +102 -0
  133. package/plugins/lisa-devin/rules/reference/automation-runbook-contract.md +355 -0
  134. package/plugins/lisa-devin/rules/reference/base-rules.md +136 -0
  135. package/plugins/lisa-devin/rules/reference/bdd-e2e-coverage.md +301 -0
  136. package/plugins/lisa-devin/rules/reference/blocker-containment.md +165 -0
  137. package/plugins/lisa-devin/rules/reference/claim-archaeology.md +184 -0
  138. package/plugins/lisa-devin/rules/reference/claim-evidence-mapping.md +362 -0
  139. package/plugins/lisa-devin/rules/reference/claim-time-guards.md +135 -0
  140. package/plugins/lisa-devin/rules/reference/coding-philosophy.md +428 -0
  141. package/plugins/lisa-devin/rules/reference/config-resolution.md +1225 -0
  142. package/plugins/lisa-devin/rules/reference/control-reachability.md +166 -0
  143. package/plugins/lisa-devin/rules/reference/convergent-review.md +145 -0
  144. package/plugins/lisa-devin/rules/reference/credential-substrate-precedence.md +249 -0
  145. package/plugins/lisa-devin/rules/reference/dependency-decision-records.md +177 -0
  146. package/plugins/lisa-devin/rules/reference/dependency-internalization-kit.md +244 -0
  147. package/plugins/lisa-devin/rules/reference/dependency-trust-classes.md +291 -0
  148. package/plugins/lisa-devin/rules/reference/deployed-state-readback.md +142 -0
  149. package/plugins/lisa-devin/rules/reference/derived-branch-plan.md +214 -0
  150. package/plugins/lisa-devin/rules/reference/design-source-of-truth.md +260 -0
  151. package/plugins/lisa-devin/rules/reference/design-value-binding.md +311 -0
  152. package/plugins/lisa-devin/rules/reference/do-it-now.md +19 -0
  153. package/plugins/lisa-devin/rules/reference/documentation-source-paths.md +31 -0
  154. package/plugins/lisa-devin/rules/reference/empirical-inquiry.md +28 -0
  155. package/plugins/lisa-devin/rules/reference/factory-model.md +111 -0
  156. package/plugins/lisa-devin/rules/reference/falsifiable-checks.md +275 -0
  157. package/plugins/lisa-devin/rules/reference/history-audit.md +42 -0
  158. package/plugins/lisa-devin/rules/reference/integration-access-layer.md +89 -0
  159. package/plugins/lisa-devin/rules/reference/intent-routing.md +428 -0
  160. package/plugins/lisa-devin/rules/reference/leaf-only-lifecycle.md +227 -0
  161. package/plugins/lisa-devin/rules/reference/learnings-ladder.md +41 -0
  162. package/plugins/lisa-devin/rules/reference/local-ci-first.md +34 -0
  163. package/plugins/lisa-devin/rules/reference/measurement-integrity.md +119 -0
  164. package/plugins/lisa-devin/rules/reference/never-name-a-downstream-project.md +37 -0
  165. package/plugins/lisa-devin/rules/reference/not-blocked-just-waiting.md +41 -0
  166. package/plugins/lisa-devin/rules/reference/observability-audit.md +146 -0
  167. package/plugins/lisa-devin/rules/reference/operational-hazards.md +115 -0
  168. package/plugins/lisa-devin/rules/reference/prd-definition-of-ready.md +118 -0
  169. package/plugins/lisa-devin/rules/reference/prd-lifecycle-rollup.md +192 -0
  170. package/plugins/lisa-devin/rules/reference/pre-flight-autofill.md +250 -0
  171. package/plugins/lisa-devin/rules/reference/project-learnings.md +159 -0
  172. package/plugins/lisa-devin/rules/reference/promotion-contract.md +148 -0
  173. package/plugins/lisa-devin/rules/reference/readiness-rubric.md +242 -0
  174. package/plugins/lisa-devin/rules/reference/ready-role-filing.md +212 -0
  175. package/plugins/lisa-devin/rules/reference/rejection-detection.md +308 -0
  176. package/plugins/lisa-devin/rules/reference/repo-scope-split.md +119 -0
  177. package/plugins/lisa-devin/rules/reference/report-actionability.md +61 -0
  178. package/plugins/lisa-devin/rules/reference/reset-seed-coverage.md +286 -0
  179. package/plugins/lisa-devin/rules/reference/security-audit-handling.md +55 -0
  180. package/plugins/lisa-devin/rules/reference/session-status-updates.md +111 -0
  181. package/plugins/lisa-devin/rules/reference/settled-decisions.md +39 -0
  182. package/plugins/lisa-devin/rules/reference/stale-state-claims.md +88 -0
  183. package/plugins/lisa-devin/rules/reference/tool-access-gate.md +114 -0
  184. package/plugins/lisa-devin/rules/reference/tracked-work.md +49 -0
  185. package/plugins/lisa-devin/rules/reference/upstream-to-lisa.md +26 -0
  186. package/plugins/lisa-devin/rules/reference/usage-accounting.md +261 -0
  187. package/plugins/lisa-devin/rules/reference/verification.md +278 -0
  188. package/plugins/lisa-devin/rules/reference/wiki-knowledge-source.md +37 -0
  189. package/plugins/lisa-devin/rules/reference/withdrawn-rulings.md +148 -0
  190. package/plugins/lisa-devin/rules/reference/work-item-definition-of-ready.md +177 -0
  191. package/plugins/lisa-devin/rules/reference/work-item-trailer-definition.md +129 -0
  192. package/plugins/lisa-devin/scripts/automation-run-record.mjs +678 -0
  193. package/plugins/lisa-devin/scripts/automation-status-claude-adapter.mjs +804 -0
  194. package/plugins/lisa-devin/scripts/automation-status-codex-adapter.mjs +1081 -0
  195. package/plugins/lisa-devin/scripts/automation-status-contract-drift.mjs +392 -0
  196. package/plugins/lisa-devin/scripts/automation-status-expected-fleet.mjs +508 -0
  197. package/plugins/lisa-devin/scripts/automation-status-report.mjs +200 -0
  198. package/plugins/lisa-devin/scripts/automation-status-run-history.mjs +216 -0
  199. package/plugins/lisa-devin/scripts/automation-status-unrecorded-runs.mjs +127 -0
  200. package/plugins/lisa-devin/scripts/blocker-edge-resolution.mjs +150 -0
  201. package/plugins/lisa-devin/scripts/cross-pollinate.mjs +763 -0
  202. package/plugins/lisa-devin/scripts/design-bindings-probe.mjs +713 -0
  203. package/plugins/lisa-devin/scripts/design-intake-gate.mjs +470 -0
  204. package/plugins/lisa-devin/scripts/design-source-gate.mjs +610 -0
  205. package/plugins/lisa-devin/scripts/design-variable-ids.mjs +567 -0
  206. package/plugins/lisa-devin/scripts/doctor-report.mjs +635 -0
  207. package/plugins/lisa-devin/scripts/install-remote-agent-aws.mjs +443 -0
  208. package/plugins/lisa-devin/scripts/intake-blocker-reprobe.mjs +1065 -0
  209. package/plugins/lisa-devin/scripts/intake-prework-denominator.mjs +249 -0
  210. package/plugins/lisa-devin/scripts/lifecycle-label-trust.mjs +593 -0
  211. package/plugins/lisa-devin/scripts/linear-state-write-target.mjs +362 -0
  212. package/plugins/lisa-devin/scripts/plugin-sync-explain.mjs +654 -0
  213. package/plugins/lisa-devin/scripts/pr-arming-sweep.mjs +561 -0
  214. package/plugins/lisa-devin/scripts/project-ideation-idempotency-harness.mjs +338 -0
  215. package/plugins/lisa-devin/scripts/qa-signal-lifecycle.mjs +523 -0
  216. package/plugins/lisa-devin/scripts/queue-contract-resolution.mjs +583 -0
  217. package/plugins/lisa-devin/scripts/queue-health-classification.mjs +157 -0
  218. package/plugins/lisa-devin/scripts/queue-status-build-readers.mjs +561 -0
  219. package/plugins/lisa-devin/scripts/queue-status-prd-readers.mjs +452 -0
  220. package/plugins/lisa-devin/scripts/remote-agent-aws-setup.sh +677 -0
  221. package/plugins/lisa-devin/scripts/repo-scope-vocabulary-audit.mjs +458 -0
  222. package/plugins/lisa-devin/scripts/resolve-lifecycle-role.mjs +347 -0
  223. package/plugins/lisa-devin/scripts/rollup-blocker-classification.mjs +616 -0
  224. package/plugins/lisa-devin/scripts/scoping-label-audit.mjs +474 -0
  225. package/plugins/lisa-devin/skills/lisa-acceptance-criteria/SKILL.md +73 -0
  226. package/plugins/lisa-devin/skills/lisa-agent-design-best-practices/SKILL.md +242 -0
  227. package/plugins/lisa-devin/skills/lisa-agent-ready/SKILL.md +271 -0
  228. package/plugins/lisa-devin/skills/lisa-analyze-claude-remote/SKILL.md +434 -0
  229. package/plugins/lisa-devin/skills/lisa-atlassian-access/SKILL.md +469 -0
  230. package/plugins/lisa-devin/skills/lisa-atlassian-access/scripts/markdown-to-adf.mjs +236 -0
  231. package/plugins/lisa-devin/skills/lisa-attribute-failure/SKILL.md +142 -0
  232. package/plugins/lisa-devin/skills/lisa-automation-status/SKILL.md +149 -0
  233. package/plugins/lisa-devin/skills/lisa-bug-triage/SKILL.md +23 -0
  234. package/plugins/lisa-devin/skills/lisa-capability-drift/SKILL.md +71 -0
  235. package/plugins/lisa-devin/skills/lisa-codebase-research/SKILL.md +87 -0
  236. package/plugins/lisa-devin/skills/lisa-codify-verification/SKILL.md +213 -0
  237. package/plugins/lisa-devin/skills/lisa-confluence-prd-intake/SKILL.md +417 -0
  238. package/plugins/lisa-devin/skills/lisa-confluence-to-tracker/SKILL.md +469 -0
  239. package/plugins/lisa-devin/skills/lisa-confluence-write-prd/SKILL.md +111 -0
  240. package/plugins/lisa-devin/skills/lisa-cross-pollinate/SKILL.md +175 -0
  241. package/plugins/lisa-devin/skills/lisa-debrief/SKILL.md +96 -0
  242. package/plugins/lisa-devin/skills/lisa-debrief-apply/SKILL.md +106 -0
  243. package/plugins/lisa-devin/skills/lisa-delivery-effectiveness/SKILL.md +62 -0
  244. package/plugins/lisa-devin/skills/lisa-design-intake/SKILL.md +198 -0
  245. package/plugins/lisa-devin/skills/lisa-detect-tooling/SKILL.md +110 -0
  246. package/plugins/lisa-devin/skills/lisa-detect-tooling/scripts/commands.mjs +479 -0
  247. package/plugins/lisa-devin/skills/lisa-detect-tooling/scripts/detect-tooling.mjs +658 -0
  248. package/plugins/lisa-devin/skills/lisa-doctor/SKILL.md +743 -0
  249. package/plugins/lisa-devin/skills/lisa-drive-pr-to-merge/SKILL.md +1587 -0
  250. package/plugins/lisa-devin/skills/lisa-epic-triage/SKILL.md +28 -0
  251. package/plugins/lisa-devin/skills/lisa-evaluation-suite/SKILL.md +63 -0
  252. package/plugins/lisa-devin/skills/lisa-exploratory-qa/SKILL.md +185 -0
  253. package/plugins/lisa-devin/skills/lisa-fix-linter-error/SKILL.md +45 -0
  254. package/plugins/lisa-devin/skills/lisa-generate-claude-remote-build-script/SKILL.md +235 -0
  255. package/plugins/lisa-devin/skills/lisa-git-commit/SKILL.md +53 -0
  256. package/plugins/lisa-devin/skills/lisa-git-prune/SKILL.md +35 -0
  257. package/plugins/lisa-devin/skills/lisa-git-submit-pr/SKILL.md +170 -0
  258. package/plugins/lisa-devin/skills/lisa-github-add-journey/SKILL.md +118 -0
  259. package/plugins/lisa-devin/skills/lisa-github-build-intake/SKILL.md +745 -0
  260. package/plugins/lisa-devin/skills/lisa-github-claim/SKILL.md +27 -0
  261. package/plugins/lisa-devin/skills/lisa-github-create/SKILL.md +105 -0
  262. package/plugins/lisa-devin/skills/lisa-github-evidence/SKILL.md +120 -0
  263. package/plugins/lisa-devin/skills/lisa-github-journey/SKILL.md +134 -0
  264. package/plugins/lisa-devin/skills/lisa-github-prd-intake/SKILL.md +424 -0
  265. package/plugins/lisa-devin/skills/lisa-github-project-v2/SKILL.md +227 -0
  266. package/plugins/lisa-devin/skills/lisa-github-read-issue/SKILL.md +305 -0
  267. package/plugins/lisa-devin/skills/lisa-github-sync/SKILL.md +201 -0
  268. package/plugins/lisa-devin/skills/lisa-github-to-tracker/SKILL.md +456 -0
  269. package/plugins/lisa-devin/skills/lisa-github-validate-issue/SKILL.md +598 -0
  270. package/plugins/lisa-devin/skills/lisa-github-verify/SKILL.md +60 -0
  271. package/plugins/lisa-devin/skills/lisa-github-write-issue/SKILL.md +531 -0
  272. package/plugins/lisa-devin/skills/lisa-github-write-prd/SKILL.md +156 -0
  273. package/plugins/lisa-devin/skills/lisa-health/SKILL.md +142 -0
  274. package/plugins/lisa-devin/skills/lisa-health-drift-cron/SKILL.md +80 -0
  275. package/plugins/lisa-devin/skills/lisa-implement/SKILL.md +372 -0
  276. package/plugins/lisa-devin/skills/lisa-improve-code-complexity/SKILL.md +44 -0
  277. package/plugins/lisa-devin/skills/lisa-improve-harness/SKILL.md +487 -0
  278. package/plugins/lisa-devin/skills/lisa-improve-max-lines/SKILL.md +45 -0
  279. package/plugins/lisa-devin/skills/lisa-improve-max-lines-per-function/SKILL.md +46 -0
  280. package/plugins/lisa-devin/skills/lisa-improve-test-coverage/SKILL.md +47 -0
  281. package/plugins/lisa-devin/skills/lisa-improve-tests/SKILL.md +50 -0
  282. package/plugins/lisa-devin/skills/lisa-intake/SKILL.md +208 -0
  283. package/plugins/lisa-devin/skills/lisa-intake-explain/SKILL.md +279 -0
  284. package/plugins/lisa-devin/skills/lisa-jam-access/SKILL.md +128 -0
  285. package/plugins/lisa-devin/skills/lisa-jira-add-journey/SKILL.md +139 -0
  286. package/plugins/lisa-devin/skills/lisa-jira-build-intake/SKILL.md +556 -0
  287. package/plugins/lisa-devin/skills/lisa-jira-claim/SKILL.md +27 -0
  288. package/plugins/lisa-devin/skills/lisa-jira-create/SKILL.md +157 -0
  289. package/plugins/lisa-devin/skills/lisa-jira-evidence/SKILL.md +106 -0
  290. package/plugins/lisa-devin/skills/lisa-jira-evidence/scripts/post-evidence.sh +262 -0
  291. package/plugins/lisa-devin/skills/lisa-jira-journey/SKILL.md +168 -0
  292. package/plugins/lisa-devin/skills/lisa-jira-journey/scripts/generate-templates.py +239 -0
  293. package/plugins/lisa-devin/skills/lisa-jira-journey/scripts/parse-plan.py +570 -0
  294. package/plugins/lisa-devin/skills/lisa-jira-read-ticket/SKILL.md +199 -0
  295. package/plugins/lisa-devin/skills/lisa-jira-read-ticket/scripts/download-attachment.sh +211 -0
  296. package/plugins/lisa-devin/skills/lisa-jira-sync/SKILL.md +117 -0
  297. package/plugins/lisa-devin/skills/lisa-jira-validate-ticket/SKILL.md +525 -0
  298. package/plugins/lisa-devin/skills/lisa-jira-verify/SKILL.md +61 -0
  299. package/plugins/lisa-devin/skills/lisa-jira-write-ticket/SKILL.md +440 -0
  300. package/plugins/lisa-devin/skills/lisa-jsdoc-best-practices/SKILL.md +491 -0
  301. package/plugins/lisa-devin/skills/lisa-kane-browser/SKILL.md +80 -0
  302. package/plugins/lisa-devin/skills/lisa-learnings-audit/SKILL.md +490 -0
  303. package/plugins/lisa-devin/skills/lisa-linear-access/SKILL.md +483 -0
  304. package/plugins/lisa-devin/skills/lisa-linear-add-journey/SKILL.md +109 -0
  305. package/plugins/lisa-devin/skills/lisa-linear-build-intake/SKILL.md +548 -0
  306. package/plugins/lisa-devin/skills/lisa-linear-claim/SKILL.md +28 -0
  307. package/plugins/lisa-devin/skills/lisa-linear-create/SKILL.md +150 -0
  308. package/plugins/lisa-devin/skills/lisa-linear-evidence/SKILL.md +124 -0
  309. package/plugins/lisa-devin/skills/lisa-linear-journey/SKILL.md +147 -0
  310. package/plugins/lisa-devin/skills/lisa-linear-prd-intake/SKILL.md +411 -0
  311. package/plugins/lisa-devin/skills/lisa-linear-read-issue/SKILL.md +201 -0
  312. package/plugins/lisa-devin/skills/lisa-linear-sync/SKILL.md +164 -0
  313. package/plugins/lisa-devin/skills/lisa-linear-to-tracker/SKILL.md +454 -0
  314. package/plugins/lisa-devin/skills/lisa-linear-validate-issue/SKILL.md +504 -0
  315. package/plugins/lisa-devin/skills/lisa-linear-verify/SKILL.md +65 -0
  316. package/plugins/lisa-devin/skills/lisa-linear-write-issue/SKILL.md +448 -0
  317. package/plugins/lisa-devin/skills/lisa-linear-write-prd/SKILL.md +98 -0
  318. package/plugins/lisa-devin/skills/lisa-monitor/SKILL.md +224 -0
  319. package/plugins/lisa-devin/skills/lisa-nightly-add-test-coverage/SKILL.md +40 -0
  320. package/plugins/lisa-devin/skills/lisa-nightly-improve-tests/SKILL.md +29 -0
  321. package/plugins/lisa-devin/skills/lisa-nightly-lower-code-complexity/SKILL.md +42 -0
  322. package/plugins/lisa-devin/skills/lisa-notion-access/SKILL.md +301 -0
  323. package/plugins/lisa-devin/skills/lisa-notion-prd-intake/SKILL.md +360 -0
  324. package/plugins/lisa-devin/skills/lisa-notion-to-tracker/SKILL.md +467 -0
  325. package/plugins/lisa-devin/skills/lisa-notion-write-prd/SKILL.md +111 -0
  326. package/plugins/lisa-devin/skills/lisa-parity-code-review/SKILL.md +83 -0
  327. package/plugins/lisa-devin/skills/lisa-parity-code-simplifier/SKILL.md +76 -0
  328. package/plugins/lisa-devin/skills/lisa-parity-coderabbit/SKILL.md +87 -0
  329. package/plugins/lisa-devin/skills/lisa-parity-sentry-sdk-setup/SKILL.md +375 -0
  330. package/plugins/lisa-devin/skills/lisa-parity-sentry-seer/SKILL.md +168 -0
  331. package/plugins/lisa-devin/skills/lisa-parity-skill-creator/SKILL.md +155 -0
  332. package/plugins/lisa-devin/skills/lisa-performance-review/SKILL.md +94 -0
  333. package/plugins/lisa-devin/skills/lisa-persist-learning/SKILL.md +247 -0
  334. package/plugins/lisa-devin/skills/lisa-plan/SKILL.md +64 -0
  335. package/plugins/lisa-devin/skills/lisa-plugin-sync-explain/SKILL.md +53 -0
  336. package/plugins/lisa-devin/skills/lisa-posthog-access/SKILL.md +140 -0
  337. package/plugins/lisa-devin/skills/lisa-prd-backlink/SKILL.md +274 -0
  338. package/plugins/lisa-devin/skills/lisa-prd-source-write/SKILL.md +104 -0
  339. package/plugins/lisa-devin/skills/lisa-prd-ticket-coverage/SKILL.md +187 -0
  340. package/plugins/lisa-devin/skills/lisa-product-walkthrough/SKILL.md +106 -0
  341. package/plugins/lisa-devin/skills/lisa-project-ideation/SKILL.md +417 -0
  342. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/evidence-card-format.md +21 -0
  343. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/host-project-only.md +22 -0
  344. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +57 -0
  345. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/public-external-inspiration.md +22 -0
  346. package/plugins/lisa-devin/skills/lisa-project-ideation/examples/unavailable-data-rejection.md +22 -0
  347. package/plugins/lisa-devin/skills/lisa-pull-request-review/SKILL.md +132 -0
  348. package/plugins/lisa-devin/skills/lisa-quality-review/SKILL.md +63 -0
  349. package/plugins/lisa-devin/skills/lisa-queue-status/SKILL.md +215 -0
  350. package/plugins/lisa-devin/skills/lisa-remote-dispatch/SKILL.md +109 -0
  351. package/plugins/lisa-devin/skills/lisa-remote-dispatch/scripts/dispatch.mjs +535 -0
  352. package/plugins/lisa-devin/skills/lisa-repair-intake/SKILL.md +1621 -0
  353. package/plugins/lisa-devin/skills/lisa-reproduce-bug/SKILL.md +75 -0
  354. package/plugins/lisa-devin/skills/lisa-research/SKILL.md +92 -0
  355. package/plugins/lisa-devin/skills/lisa-review-implementation/SKILL.md +209 -0
  356. package/plugins/lisa-devin/skills/lisa-review-local/SKILL.md +141 -0
  357. package/plugins/lisa-devin/skills/lisa-rework-triage/SKILL.md +206 -0
  358. package/plugins/lisa-devin/skills/lisa-root-cause-analysis/SKILL.md +135 -0
  359. package/plugins/lisa-devin/skills/lisa-secrets-access/SKILL.md +430 -0
  360. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/aws-bootstrap.mjs +433 -0
  361. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/bootstrap-store.mjs +288 -0
  362. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/doctor-secrets.mjs +273 -0
  363. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/envfile.mjs +80 -0
  364. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/inspect-vault.mjs +142 -0
  365. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/materialize-secrets.mjs +1085 -0
  366. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/note-format.mjs +179 -0
  367. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/owner.mjs +96 -0
  368. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/preflight-secrets.mjs +342 -0
  369. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/prompt-secret.mjs +79 -0
  370. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/providers.mjs +805 -0
  371. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/publish-aws-bootstrap.mjs +680 -0
  372. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/read-secret-note.mjs +105 -0
  373. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/resolve-expo-token.mjs +90 -0
  374. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/resolve-secret.mjs +285 -0
  375. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/rotate-secret.mjs +297 -0
  376. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/routing-floor.mjs +153 -0
  377. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/surfaces.mjs +480 -0
  378. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/sync-secret-to-ci.mjs +510 -0
  379. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/tools-from-notes.mjs +63 -0
  380. package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/validate-config.mjs +550 -0
  381. package/plugins/lisa-devin/skills/lisa-security-review/SKILL.md +124 -0
  382. package/plugins/lisa-devin/skills/lisa-security-zap-scan/SKILL.md +53 -0
  383. package/plugins/lisa-devin/skills/lisa-sentry-access/SKILL.md +140 -0
  384. package/plugins/lisa-devin/skills/lisa-setup-atlassian/SKILL.md +407 -0
  385. package/plugins/lisa-devin/skills/lisa-setup-automations/SKILL.md +430 -0
  386. package/plugins/lisa-devin/skills/lisa-setup-automations/scripts/generate-workflow.mjs +288 -0
  387. package/plugins/lisa-devin/skills/lisa-setup-confluence/SKILL.md +254 -0
  388. package/plugins/lisa-devin/skills/lisa-setup-github/SKILL.md +319 -0
  389. package/plugins/lisa-devin/skills/lisa-setup-github-repo/SKILL.md +128 -0
  390. package/plugins/lisa-devin/skills/lisa-setup-jira/SKILL.md +198 -0
  391. package/plugins/lisa-devin/skills/lisa-setup-kane/SKILL.md +96 -0
  392. package/plugins/lisa-devin/skills/lisa-setup-linear/SKILL.md +375 -0
  393. package/plugins/lisa-devin/skills/lisa-setup-local-env/SKILL.md +95 -0
  394. package/plugins/lisa-devin/skills/lisa-setup-local-env/scripts/local-env.mjs +196 -0
  395. package/plugins/lisa-devin/skills/lisa-setup-notion/SKILL.md +376 -0
  396. package/plugins/lisa-devin/skills/lisa-setup-remote-aws/SKILL.md +149 -0
  397. package/plugins/lisa-devin/skills/lisa-setup-remote-env/SKILL.md +382 -0
  398. package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/materialized-env-authority.mjs +262 -0
  399. package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/session-start.sh +87 -0
  400. package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/setup.sh +216 -0
  401. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/environment.mjs +227 -0
  402. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +378 -0
  403. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +1632 -0
  404. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/tool-floor.mjs +94 -0
  405. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/toolchain.mjs +448 -0
  406. package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/verify-remote-env.mjs +250 -0
  407. package/plugins/lisa-devin/skills/lisa-setup-sonar/SKILL.md +153 -0
  408. package/plugins/lisa-devin/skills/lisa-setup-workstation/SKILL.md +143 -0
  409. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/bounded-child.mjs +168 -0
  410. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/catalogue.mjs +293 -0
  411. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/cli.mjs +333 -0
  412. package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/workstation.mjs +511 -0
  413. package/plugins/lisa-devin/skills/lisa-sonarcloud-access/SKILL.md +202 -0
  414. package/plugins/lisa-devin/skills/lisa-spec-conformance/SKILL.md +205 -0
  415. package/plugins/lisa-devin/skills/lisa-starter-sync/SKILL.md +35 -0
  416. package/plugins/lisa-devin/skills/lisa-sync-down/SKILL.md +209 -0
  417. package/plugins/lisa-devin/skills/lisa-task-decomposition/SKILL.md +195 -0
  418. package/plugins/lisa-devin/skills/lisa-task-triage/SKILL.md +23 -0
  419. package/plugins/lisa-devin/skills/lisa-tdd-implementation/SKILL.md +91 -0
  420. package/plugins/lisa-devin/skills/lisa-tear-down-automations/SKILL.md +85 -0
  421. package/plugins/lisa-devin/skills/lisa-test-strategy/SKILL.md +66 -0
  422. package/plugins/lisa-devin/skills/lisa-ticket-triage/SKILL.md +214 -0
  423. package/plugins/lisa-devin/skills/lisa-track/SKILL.md +129 -0
  424. package/plugins/lisa-devin/skills/lisa-tracker-add-journey/SKILL.md +28 -0
  425. package/plugins/lisa-devin/skills/lisa-tracker-build-intake/SKILL.md +134 -0
  426. package/plugins/lisa-devin/skills/lisa-tracker-claim/SKILL.md +35 -0
  427. package/plugins/lisa-devin/skills/lisa-tracker-create/SKILL.md +28 -0
  428. package/plugins/lisa-devin/skills/lisa-tracker-evidence/SKILL.md +63 -0
  429. package/plugins/lisa-devin/skills/lisa-tracker-journey/SKILL.md +27 -0
  430. package/plugins/lisa-devin/skills/lisa-tracker-read/SKILL.md +28 -0
  431. package/plugins/lisa-devin/skills/lisa-tracker-source-artifacts/SKILL.md +111 -0
  432. package/plugins/lisa-devin/skills/lisa-tracker-sync/SKILL.md +150 -0
  433. package/plugins/lisa-devin/skills/lisa-tracker-validate/SKILL.md +37 -0
  434. package/plugins/lisa-devin/skills/lisa-tracker-verify/SKILL.md +29 -0
  435. package/plugins/lisa-devin/skills/lisa-tracker-write/SKILL.md +55 -0
  436. package/plugins/lisa-devin/skills/lisa-usage-accounting/SKILL.md +205 -0
  437. package/plugins/lisa-devin/skills/lisa-usage-accounting/references/effectiveness.md +63 -0
  438. package/plugins/lisa-devin/skills/lisa-use-the-product/SKILL.md +86 -0
  439. package/plugins/lisa-devin/skills/lisa-validate-tracker-mapping/SKILL.md +467 -0
  440. package/plugins/lisa-devin/skills/lisa-verification-lifecycle/SKILL.md +384 -0
  441. package/plugins/lisa-devin/skills/lisa-verify/SKILL.md +55 -0
  442. package/plugins/lisa-devin/skills/lisa-verify-prd/SKILL.md +394 -0
  443. package/plugins/lisa-devin/skills/lisa-verify-workflow-change/SKILL.md +154 -0
  444. package/plugins/lisa-devin/skills/lisa-wiki-install/SKILL.md +101 -0
  445. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  446. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  447. package/plugins/lisa-expo-agy/plugin.json +1 -1
  448. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  449. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  450. package/plugins/lisa-expo-devin/.claude-plugin/plugin.json +11 -0
  451. package/plugins/lisa-expo-devin/.devin-plugin/plugin.json +8 -0
  452. package/plugins/lisa-expo-devin/.mcp.json +8 -0
  453. package/plugins/lisa-expo-devin/THIRD-PARTY-NOTICES.md +84 -0
  454. package/plugins/lisa-expo-devin/agents/ops-specialist.md +124 -0
  455. package/plugins/lisa-expo-devin/hooks/devin-tool-name-shim.sh +30 -0
  456. package/plugins/lisa-expo-devin/hooks/register-maestro-mcp.sh +84 -0
  457. package/plugins/lisa-expo-devin/hooks.json +14 -0
  458. package/plugins/lisa-expo-devin/skills/add-app-clip/SKILL.md +280 -0
  459. package/plugins/lisa-expo-devin/skills/add-app-clip/references/native-module.md +96 -0
  460. package/plugins/lisa-expo-devin/skills/apollo-client/SKILL.md +238 -0
  461. package/plugins/lisa-expo-devin/skills/apollo-client/references/mutation-patterns.md +360 -0
  462. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/SKILL.md +369 -0
  463. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
  464. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
  465. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
  466. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
  467. package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +438 -0
  468. package/plugins/lisa-expo-devin/skills/building-native-ui/SKILL.md +321 -0
  469. package/plugins/lisa-expo-devin/skills/building-native-ui/references/animations.md +220 -0
  470. package/plugins/lisa-expo-devin/skills/building-native-ui/references/controls.md +272 -0
  471. package/plugins/lisa-expo-devin/skills/building-native-ui/references/form-sheet.md +253 -0
  472. package/plugins/lisa-expo-devin/skills/building-native-ui/references/gradients.md +106 -0
  473. package/plugins/lisa-expo-devin/skills/building-native-ui/references/icons.md +213 -0
  474. package/plugins/lisa-expo-devin/skills/building-native-ui/references/media.md +198 -0
  475. package/plugins/lisa-expo-devin/skills/building-native-ui/references/route-structure.md +229 -0
  476. package/plugins/lisa-expo-devin/skills/building-native-ui/references/search.md +248 -0
  477. package/plugins/lisa-expo-devin/skills/building-native-ui/references/storage.md +121 -0
  478. package/plugins/lisa-expo-devin/skills/building-native-ui/references/tabs.md +433 -0
  479. package/plugins/lisa-expo-devin/skills/building-native-ui/references/toolbar-and-headers.md +284 -0
  480. package/plugins/lisa-expo-devin/skills/building-native-ui/references/visual-effects.md +197 -0
  481. package/plugins/lisa-expo-devin/skills/building-native-ui/references/webgpu-three.md +605 -0
  482. package/plugins/lisa-expo-devin/skills/building-native-ui/references/zoom-transitions.md +158 -0
  483. package/plugins/lisa-expo-devin/skills/container-view-pattern/SKILL.md +355 -0
  484. package/plugins/lisa-expo-devin/skills/container-view-pattern/references/examples.md +749 -0
  485. package/plugins/lisa-expo-devin/skills/container-view-pattern/references/patterns.md +318 -0
  486. package/plugins/lisa-expo-devin/skills/container-view-pattern/scripts/create_component.py +200 -0
  487. package/plugins/lisa-expo-devin/skills/container-view-pattern/scripts/validate_component.py +332 -0
  488. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/SKILL.md +268 -0
  489. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/common-issues.md +619 -0
  490. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
  491. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/platform-api.md +276 -0
  492. package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
  493. package/plugins/lisa-expo-devin/skills/directory-structure/SKILL.md +214 -0
  494. package/plugins/lisa-expo-devin/skills/directory-structure/scripts/validate_structure.py +454 -0
  495. package/plugins/lisa-expo-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
  496. package/plugins/lisa-expo-devin/skills/eas-update-insights/SKILL.md +228 -0
  497. package/plugins/lisa-expo-devin/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
  498. package/plugins/lisa-expo-devin/skills/eas-update-insights/references/update-insights-schema.md +69 -0
  499. package/plugins/lisa-expo-devin/skills/expo-api-routes/SKILL.md +369 -0
  500. package/plugins/lisa-expo-devin/skills/expo-brownfield/SKILL.md +54 -0
  501. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/brownfield-integrated.md +526 -0
  502. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/brownfield-isolated.md +402 -0
  503. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/comparison.md +63 -0
  504. package/plugins/lisa-expo-devin/skills/expo-brownfield/references/troubleshooting.md +88 -0
  505. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/SKILL.md +92 -0
  506. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/fetch.js +113 -0
  507. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/package.json +11 -0
  508. package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/validate.js +85 -0
  509. package/plugins/lisa-expo-devin/skills/expo-deployment/SKILL.md +193 -0
  510. package/plugins/lisa-expo-devin/skills/expo-deployment/references/app-store-metadata.md +479 -0
  511. package/plugins/lisa-expo-devin/skills/expo-deployment/references/ios-app-store.md +355 -0
  512. package/plugins/lisa-expo-devin/skills/expo-deployment/references/play-store.md +264 -0
  513. package/plugins/lisa-expo-devin/skills/expo-deployment/references/testflight.md +58 -0
  514. package/plugins/lisa-expo-devin/skills/expo-deployment/references/workflows.md +200 -0
  515. package/plugins/lisa-expo-devin/skills/expo-dev-client/SKILL.md +164 -0
  516. package/plugins/lisa-expo-devin/skills/expo-env-config/SKILL.md +309 -0
  517. package/plugins/lisa-expo-devin/skills/expo-env-config/references/validation-patterns.md +417 -0
  518. package/plugins/lisa-expo-devin/skills/expo-module/SKILL.md +141 -0
  519. package/plugins/lisa-expo-devin/skills/expo-module/references/config-plugin.md +90 -0
  520. package/plugins/lisa-expo-devin/skills/expo-module/references/create-expo-module.md +206 -0
  521. package/plugins/lisa-expo-devin/skills/expo-module/references/lifecycle.md +127 -0
  522. package/plugins/lisa-expo-devin/skills/expo-module/references/module-config.md +48 -0
  523. package/plugins/lisa-expo-devin/skills/expo-module/references/native-module.md +286 -0
  524. package/plugins/lisa-expo-devin/skills/expo-module/references/native-view.md +171 -0
  525. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/SKILL.md +432 -0
  526. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/references/official-docs.md +290 -0
  527. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/references/static-export-verification.md +54 -0
  528. package/plugins/lisa-expo-devin/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
  529. package/plugins/lisa-expo-devin/skills/expo-tailwind-setup/SKILL.md +487 -0
  530. package/plugins/lisa-expo-devin/skills/expo-ui-jetpack-compose/SKILL.md +40 -0
  531. package/plugins/lisa-expo-devin/skills/expo-ui-swift-ui/SKILL.md +39 -0
  532. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/SKILL.md +419 -0
  533. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/color-tokens.md +343 -0
  534. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/component-mapping.md +307 -0
  535. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
  536. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
  537. package/plugins/lisa-expo-devin/skills/gluestack-nativewind/scripts/validate_styling.py +424 -0
  538. package/plugins/lisa-expo-devin/skills/jira-add-journey/SKILL.md +140 -0
  539. package/plugins/lisa-expo-devin/skills/jira-create/SKILL.md +161 -0
  540. package/plugins/lisa-expo-devin/skills/jira-evidence/SKILL.md +84 -0
  541. package/plugins/lisa-expo-devin/skills/jira-evidence/scripts/post-evidence.sh +262 -0
  542. package/plugins/lisa-expo-devin/skills/jira-journey/SKILL.md +196 -0
  543. package/plugins/lisa-expo-devin/skills/jira-journey/scripts/generate-templates.py +281 -0
  544. package/plugins/lisa-expo-devin/skills/jira-journey/scripts/parse-plan.py +400 -0
  545. package/plugins/lisa-expo-devin/skills/jira-verify/SKILL.md +27 -0
  546. package/plugins/lisa-expo-devin/skills/local-state/SKILL.md +362 -0
  547. package/plugins/lisa-expo-devin/skills/local-state/references/async-storage.md +505 -0
  548. package/plugins/lisa-expo-devin/skills/local-state/references/persistence-patterns.md +711 -0
  549. package/plugins/lisa-expo-devin/skills/local-state/references/reactive-variables.md +446 -0
  550. package/plugins/lisa-expo-devin/skills/maestro-mcp-setup/SKILL.md +144 -0
  551. package/plugins/lisa-expo-devin/skills/native-data-fetching/SKILL.md +507 -0
  552. package/plugins/lisa-expo-devin/skills/native-data-fetching/references/expo-router-loaders.md +344 -0
  553. package/plugins/lisa-expo-devin/skills/ops-browser-uat/SKILL.md +124 -0
  554. package/plugins/lisa-expo-devin/skills/ops-check-logs/SKILL.md +217 -0
  555. package/plugins/lisa-expo-devin/skills/ops-db-ops/SKILL.md +214 -0
  556. package/plugins/lisa-expo-devin/skills/ops-deploy/SKILL.md +123 -0
  557. package/plugins/lisa-expo-devin/skills/ops-monitor-errors/SKILL.md +99 -0
  558. package/plugins/lisa-expo-devin/skills/ops-performance/SKILL.md +165 -0
  559. package/plugins/lisa-expo-devin/skills/ops-run-local/SKILL.md +169 -0
  560. package/plugins/lisa-expo-devin/skills/ops-verify-health/SKILL.md +101 -0
  561. package/plugins/lisa-expo-devin/skills/owasp-zap/SKILL.md +61 -0
  562. package/plugins/lisa-expo-devin/skills/play-store-access/SKILL.md +226 -0
  563. package/plugins/lisa-expo-devin/skills/playwright-ci-debugging/SKILL.md +140 -0
  564. package/plugins/lisa-expo-devin/skills/playwright-selectors/SKILL.md +496 -0
  565. package/plugins/lisa-expo-devin/skills/reduce-complexity/SKILL.md +251 -0
  566. package/plugins/lisa-expo-devin/skills/reduce-complexity/references/extraction-strategies.md +456 -0
  567. package/plugins/lisa-expo-devin/skills/reduce-complexity/references/refactoring-patterns.md +557 -0
  568. package/plugins/lisa-expo-devin/skills/testing-library/SKILL.md +314 -0
  569. package/plugins/lisa-expo-devin/skills/testing-library/references/async-patterns.md +420 -0
  570. package/plugins/lisa-expo-devin/skills/testing-library/references/expo-router-testing.md +556 -0
  571. package/plugins/lisa-expo-devin/skills/testing-library/references/mocking-patterns.md +612 -0
  572. package/plugins/lisa-expo-devin/skills/testing-library/references/query-priority.md +291 -0
  573. package/plugins/lisa-expo-devin/skills/upgrading-expo/SKILL.md +134 -0
  574. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
  575. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/expo-av-to-video.md +160 -0
  576. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/native-tabs.md +124 -0
  577. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/new-architecture.md +79 -0
  578. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-19.md +79 -0
  579. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-compiler.md +59 -0
  580. package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
  581. package/plugins/lisa-expo-devin/skills/use-dom/SKILL.md +417 -0
  582. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  583. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  584. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  585. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  586. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  587. package/plugins/lisa-harper-fabric-devin/.claude-plugin/plugin.json +11 -0
  588. package/plugins/lisa-harper-fabric-devin/.devin-plugin/plugin.json +8 -0
  589. package/plugins/lisa-harper-fabric-devin/generated-artifact-globs.txt +5 -0
  590. package/plugins/lisa-harper-fabric-devin/hooks/block-generated-artifact-edits.sh +141 -0
  591. package/plugins/lisa-harper-fabric-devin/hooks/devin-tool-name-shim.sh +30 -0
  592. package/plugins/lisa-harper-fabric-devin/hooks/enforce-config-extensions.mjs +196 -0
  593. package/plugins/lisa-harper-fabric-devin/hooks/enforce-config-extensions.sh +46 -0
  594. package/plugins/lisa-harper-fabric-devin/hooks/inject-rules.sh +27 -0
  595. package/plugins/lisa-harper-fabric-devin/hooks.json +36 -0
  596. package/plugins/lisa-harper-fabric-devin/rules/eager/harper-fabric.md +31 -0
  597. package/plugins/lisa-harper-fabric-devin/rules/reference/harper-fabric.md +52 -0
  598. package/plugins/lisa-harper-fabric-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
  599. package/plugins/lisa-harper-fabric-devin/skills/harper-auth/SKILL.md +368 -0
  600. package/plugins/lisa-harper-fabric-devin/skills/harper-build-and-deploy/SKILL.md +198 -0
  601. package/plugins/lisa-harper-fabric-devin/skills/harper-caching/SKILL.md +265 -0
  602. package/plugins/lisa-harper-fabric-devin/skills/harper-component-model/SKILL.md +87 -0
  603. package/plugins/lisa-harper-fabric-devin/skills/harper-config-yaml/SKILL.md +283 -0
  604. package/plugins/lisa-harper-fabric-devin/skills/harper-operations/SKILL.md +239 -0
  605. package/plugins/lisa-harper-fabric-devin/skills/harper-realtime/SKILL.md +187 -0
  606. package/plugins/lisa-harper-fabric-devin/skills/harper-resources/SKILL.md +142 -0
  607. package/plugins/lisa-harper-fabric-devin/skills/harper-rest-queries/SKILL.md +403 -0
  608. package/plugins/lisa-harper-fabric-devin/skills/harper-schema-graphql/SKILL.md +123 -0
  609. package/plugins/lisa-harper-fabric-devin/skills/harper-testing/SKILL.md +254 -0
  610. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  611. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  612. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  613. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  614. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  615. package/plugins/lisa-nestjs-devin/.claude-plugin/plugin.json +11 -0
  616. package/plugins/lisa-nestjs-devin/.devin-plugin/plugin.json +8 -0
  617. package/plugins/lisa-nestjs-devin/hooks/block-migration-edits.sh +125 -0
  618. package/plugins/lisa-nestjs-devin/hooks/devin-tool-name-shim.sh +30 -0
  619. package/plugins/lisa-nestjs-devin/hooks/lisa-edit-gate.sh +152 -0
  620. package/plugins/lisa-nestjs-devin/hooks.json +15 -0
  621. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/SKILL.md +176 -0
  622. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/advanced-features.md +527 -0
  623. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/project-patterns.md +531 -0
  624. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/quick-start.md +257 -0
  625. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
  626. package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/types-scalars.md +513 -0
  627. package/plugins/lisa-nestjs-devin/skills/nestjs-rules/SKILL.md +560 -0
  628. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/SKILL.md +275 -0
  629. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
  630. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/entity-patterns.md +450 -0
  631. package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/observability-patterns.md +536 -0
  632. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  633. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  634. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  635. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  636. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  637. package/plugins/lisa-openclaw-devin/.claude-plugin/plugin.json +8 -0
  638. package/plugins/lisa-openclaw-devin/.devin-plugin/plugin.json +8 -0
  639. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-repo-topic/SKILL.md +163 -0
  640. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +185 -0
  641. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/SKILL.md +175 -0
  642. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/references/platform-routing.md +123 -0
  643. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/references/prompts.md +78 -0
  644. package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-setup/SKILL.md +141 -0
  645. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  646. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  647. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  648. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  649. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  650. package/plugins/lisa-phaser-devin/.claude-plugin/plugin.json +11 -0
  651. package/plugins/lisa-phaser-devin/.devin-plugin/plugin.json +8 -0
  652. package/plugins/lisa-phaser-devin/agents/accessibility-advocate.md +55 -0
  653. package/plugins/lisa-phaser-devin/agents/art-director.md +90 -0
  654. package/plugins/lisa-phaser-devin/agents/audio-director.md +65 -0
  655. package/plugins/lisa-phaser-devin/agents/combat-designer.md +61 -0
  656. package/plugins/lisa-phaser-devin/agents/economy-designer.md +59 -0
  657. package/plugins/lisa-phaser-devin/agents/game-designer.md +62 -0
  658. package/plugins/lisa-phaser-devin/agents/game-feel-specialist.md +56 -0
  659. package/plugins/lisa-phaser-devin/agents/level-designer.md +59 -0
  660. package/plugins/lisa-phaser-devin/agents/localization-manager.md +61 -0
  661. package/plugins/lisa-phaser-devin/agents/marketing-strategist.md +59 -0
  662. package/plugins/lisa-phaser-devin/agents/monetization-designer.md +59 -0
  663. package/plugins/lisa-phaser-devin/agents/narrative-designer.md +56 -0
  664. package/plugins/lisa-phaser-devin/agents/onboarding-advocate.md +59 -0
  665. package/plugins/lisa-phaser-devin/agents/player-advocate.md +57 -0
  666. package/plugins/lisa-phaser-devin/agents/producer.md +61 -0
  667. package/plugins/lisa-phaser-devin/agents/product-analyst.md +62 -0
  668. package/plugins/lisa-phaser-devin/agents/publisher.md +59 -0
  669. package/plugins/lisa-phaser-devin/agents/qa-playtester.md +57 -0
  670. package/plugins/lisa-phaser-devin/agents/target-player.md +52 -0
  671. package/plugins/lisa-phaser-devin/agents/ux-ui-designer.md +60 -0
  672. package/plugins/lisa-phaser-devin/hooks/devin-tool-name-shim.sh +30 -0
  673. package/plugins/lisa-phaser-devin/hooks/inject-rules.sh +27 -0
  674. package/plugins/lisa-phaser-devin/hooks.json +14 -0
  675. package/plugins/lisa-phaser-devin/rules/eager/phaser.md +44 -0
  676. package/plugins/lisa-phaser-devin/rules/reference/phaser.md +184 -0
  677. package/plugins/lisa-phaser-devin/skills/phaser-accessibility/SKILL.md +135 -0
  678. package/plugins/lisa-phaser-devin/skills/phaser-asset-pipeline/SKILL.md +222 -0
  679. package/plugins/lisa-phaser-devin/skills/phaser-asset-sourcing/SKILL.md +151 -0
  680. package/plugins/lisa-phaser-devin/skills/phaser-build-deploy/SKILL.md +153 -0
  681. package/plugins/lisa-phaser-devin/skills/phaser-i18n/SKILL.md +122 -0
  682. package/plugins/lisa-phaser-devin/skills/phaser-project-structure/SKILL.md +89 -0
  683. package/plugins/lisa-phaser-devin/skills/phaser-services/SKILL.md +208 -0
  684. package/plugins/lisa-phaser-devin/skills/phaser-testing/SKILL.md +192 -0
  685. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  686. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  687. package/plugins/lisa-rails-agy/plugin.json +1 -1
  688. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  689. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  690. package/plugins/lisa-rails-devin/.claude-plugin/plugin.json +11 -0
  691. package/plugins/lisa-rails-devin/.devin-plugin/plugin.json +8 -0
  692. package/plugins/lisa-rails-devin/agents/ops-specialist.md +226 -0
  693. package/plugins/lisa-rails-devin/hooks/devin-tool-name-shim.sh +30 -0
  694. package/plugins/lisa-rails-devin/hooks/inject-rules.sh +40 -0
  695. package/plugins/lisa-rails-devin/hooks/lisa-edit-gate.sh +152 -0
  696. package/plugins/lisa-rails-devin/hooks/rubocop-on-edit.sh +101 -0
  697. package/plugins/lisa-rails-devin/hooks/sg-scan-on-edit.sh +97 -0
  698. package/plugins/lisa-rails-devin/hooks.json +29 -0
  699. package/plugins/lisa-rails-devin/rules/eager/rails-conventions.md +23 -0
  700. package/plugins/lisa-rails-devin/rules/reference/rails-conventions.md +176 -0
  701. package/plugins/lisa-rails-devin/skills/action-controller-best-practices/SKILL.md +374 -0
  702. package/plugins/lisa-rails-devin/skills/action-view-best-practices/SKILL.md +335 -0
  703. package/plugins/lisa-rails-devin/skills/active-record-model-best-practices/SKILL.md +166 -0
  704. package/plugins/lisa-rails-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
  705. package/plugins/lisa-rails-devin/skills/fix-linter-error/SKILL.md +45 -0
  706. package/plugins/lisa-rails-devin/skills/improve-code-complexity/SKILL.md +51 -0
  707. package/plugins/lisa-rails-devin/skills/improve-max-lines/SKILL.md +46 -0
  708. package/plugins/lisa-rails-devin/skills/improve-max-lines-per-function/SKILL.md +46 -0
  709. package/plugins/lisa-rails-devin/skills/improve-test-coverage/SKILL.md +48 -0
  710. package/plugins/lisa-rails-devin/skills/jira-add-journey/SKILL.md +79 -0
  711. package/plugins/lisa-rails-devin/skills/jira-create/SKILL.md +100 -0
  712. package/plugins/lisa-rails-devin/skills/jira-evidence/SKILL.md +76 -0
  713. package/plugins/lisa-rails-devin/skills/jira-evidence/scripts/post-evidence.sh +262 -0
  714. package/plugins/lisa-rails-devin/skills/jira-journey/SKILL.md +65 -0
  715. package/plugins/lisa-rails-devin/skills/jira-verify/SKILL.md +26 -0
  716. package/plugins/lisa-rails-devin/skills/ops-check-logs/SKILL.md +191 -0
  717. package/plugins/lisa-rails-devin/skills/ops-deploy/SKILL.md +153 -0
  718. package/plugins/lisa-rails-devin/skills/ops-run-local/SKILL.md +169 -0
  719. package/plugins/lisa-rails-devin/skills/ops-verify-jobs/SKILL.md +157 -0
  720. package/plugins/lisa-rails-devin/skills/ops-verify-telemetry/SKILL.md +226 -0
  721. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  722. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  723. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  724. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  725. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  726. package/plugins/lisa-typescript-devin/.claude-plugin/plugin.json +11 -0
  727. package/plugins/lisa-typescript-devin/.devin-plugin/plugin.json +8 -0
  728. package/plugins/lisa-typescript-devin/hooks/block-suppress-directives.sh +141 -0
  729. package/plugins/lisa-typescript-devin/hooks/devin-tool-name-shim.sh +30 -0
  730. package/plugins/lisa-typescript-devin/hooks/format-on-edit.sh +102 -0
  731. package/plugins/lisa-typescript-devin/hooks/lint-on-edit.sh +117 -0
  732. package/plugins/lisa-typescript-devin/hooks/lisa-edit-gate.sh +152 -0
  733. package/plugins/lisa-typescript-devin/hooks/sg-scan-on-edit.sh +94 -0
  734. package/plugins/lisa-typescript-devin/hooks.json +34 -0
  735. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  736. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  737. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  738. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  739. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  740. package/plugins/lisa-wiki-devin/.claude-plugin/plugin.json +8 -0
  741. package/plugins/lisa-wiki-devin/.devin-plugin/plugin.json +8 -0
  742. package/plugins/lisa-wiki-devin/ci/lisa-wiki-validate.yml +33 -0
  743. package/plugins/lisa-wiki-devin/schema/lisa-wiki-config.schema.json +162 -0
  744. package/plugins/lisa-wiki-devin/schema/wiki-structure.schema.json +51 -0
  745. package/plugins/lisa-wiki-devin/scripts/_wiki-lib.mjs +204 -0
  746. package/plugins/lisa-wiki-devin/scripts/diff-guard.mjs +117 -0
  747. package/plugins/lisa-wiki-devin/scripts/ensure-gitignore.mjs +131 -0
  748. package/plugins/lisa-wiki-devin/scripts/ensure-wiki.mjs +268 -0
  749. package/plugins/lisa-wiki-devin/scripts/ingest-git.mjs +198 -0
  750. package/plugins/lisa-wiki-devin/scripts/ingest-memory.mjs +135 -0
  751. package/plugins/lisa-wiki-devin/scripts/ingest-roles.mjs +95 -0
  752. package/plugins/lisa-wiki-devin/scripts/ingest_slack_channel.py +361 -0
  753. package/plugins/lisa-wiki-devin/scripts/lib/bounded-child.mjs +159 -0
  754. package/plugins/lisa-wiki-devin/scripts/lint-wiki.mjs +513 -0
  755. package/plugins/lisa-wiki-devin/scripts/mcp-doctor.mjs +72 -0
  756. package/plugins/lisa-wiki-devin/scripts/render-contract.mjs +107 -0
  757. package/plugins/lisa-wiki-devin/scripts/rewrite-refs.mjs +144 -0
  758. package/plugins/lisa-wiki-devin/scripts/slack_oauth_user.py +179 -0
  759. package/plugins/lisa-wiki-devin/scripts/validate-config.mjs +321 -0
  760. package/plugins/lisa-wiki-devin/scripts/verify-migration.mjs +203 -0
  761. package/plugins/lisa-wiki-devin/scripts/verify-wiki-safety.mjs +126 -0
  762. package/plugins/lisa-wiki-devin/scripts/wiki-safety.mjs +378 -0
  763. package/plugins/lisa-wiki-devin/scripts/wiki-status.mjs +345 -0
  764. package/plugins/lisa-wiki-devin/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
  765. package/plugins/lisa-wiki-devin/skills/lisa-wiki-add-role/SKILL.md +35 -0
  766. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
  767. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
  768. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-git/SKILL.md +25 -0
  769. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
  770. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
  771. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
  772. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
  773. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
  774. package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-web/SKILL.md +23 -0
  775. package/plugins/lisa-wiki-devin/skills/lisa-wiki-doctor/SKILL.md +47 -0
  776. package/plugins/lisa-wiki-devin/skills/lisa-wiki-ingest/SKILL.md +106 -0
  777. package/plugins/lisa-wiki-devin/skills/lisa-wiki-lint/SKILL.md +32 -0
  778. package/plugins/lisa-wiki-devin/skills/lisa-wiki-migrate/SKILL.md +43 -0
  779. package/plugins/lisa-wiki-devin/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
  780. package/plugins/lisa-wiki-devin/skills/lisa-wiki-query/SKILL.md +40 -0
  781. package/plugins/lisa-wiki-devin/skills/lisa-wiki-setup/SKILL.md +75 -0
  782. package/plugins/lisa-wiki-devin/skills/lisa-wiki-setup-automations/SKILL.md +83 -0
  783. package/plugins/lisa-wiki-devin/skills/lisa-wiki-status/SKILL.md +47 -0
  784. package/plugins/lisa-wiki-devin/skills/lisa-wiki-tear-down-automations/SKILL.md +34 -0
  785. package/plugins/lisa-wiki-devin/skills/lisa-wiki-usage/SKILL.md +50 -0
  786. package/plugins/lisa-wiki-devin/templates/agents/role-agent.claude.md +16 -0
  787. package/plugins/lisa-wiki-devin/templates/agents/role-agent.codex.toml +15 -0
  788. package/plugins/lisa-wiki-devin/templates/index.md +17 -0
  789. package/plugins/lisa-wiki-devin/templates/llm-wiki-contract.md +72 -0
  790. package/plugins/lisa-wiki-devin/templates/log.md +8 -0
  791. package/plugins/lisa-wiki-devin/templates/page-types/architecture.md +18 -0
  792. package/plugins/lisa-wiki-devin/templates/page-types/concept.md +18 -0
  793. package/plugins/lisa-wiki-devin/templates/page-types/decision.md +18 -0
  794. package/plugins/lisa-wiki-devin/templates/page-types/entity.md +19 -0
  795. package/plugins/lisa-wiki-devin/templates/page-types/open-question.md +18 -0
  796. package/plugins/lisa-wiki-devin/templates/page-types/playbook.md +18 -0
  797. package/plugins/lisa-wiki-devin/templates/page-types/project.md +19 -0
  798. package/plugins/lisa-wiki-devin/templates/page-types/requirement.md +19 -0
  799. package/plugins/lisa-wiki-devin/templates/page-types/staff.md +26 -0
  800. package/plugins/lisa-wiki-devin/templates/start-here.md +24 -0
  801. package/plugins/lisa-wiki-devin/templates/state-readme.md +20 -0
  802. package/plugins/lisa-wiki-devin/templates/wrapper-gitignore.txt +19 -0
  803. package/scripts/build-plugins.sh +2 -2
  804. package/scripts/deployed-guard-advice.mjs +1 -0
  805. package/scripts/generate-devin-plugin-artifacts.mjs +263 -0
  806. package/scripts/lib/hook-registration-audit.mjs +3 -1
  807. package/scripts/lib/per-agent-hook-filter.mjs +174 -5
  808. package/scripts/lib/plugin-rule-citations.mjs +2 -2
  809. package/scripts/two-channel-couplings.json +1 -1
@@ -0,0 +1,743 @@
1
+ ---
2
+ name: lisa-doctor
3
+ description: "Audit whether the current repository is ready to use Lisa. Runs grouped read-only checks across project detection, Lisa config, runtime distribution surfaces, tracker/source preflight access, automation prerequisites, optional GitHub Project coordination, and optional wiki delegation, then reports PASS/WARN/FAIL/SKIP results plus an overall readiness verdict (`READY`, `READY_WITH_WARNINGS`, or `NOT_READY`)."
4
+ allowed-tools: ["Skill", "Bash", "Read", "Glob", "Grep"]
5
+ ---
6
+
7
+ # Doctor: $ARGUMENTS
8
+
9
+ Run a read-only Lisa readiness audit for the current repository.
10
+
11
+ ## Purpose
12
+
13
+ `/lisa:doctor` is the deterministic answer to "is this repo actually ready to use Lisa?" It audits
14
+ the repository in grouped sections, reports each check as `PASS`, `WARN`, `FAIL`, or `SKIP`, and
15
+ emits one overall verdict: `READY`, `READY_WITH_WARNINGS`, or `NOT_READY`.
16
+
17
+ The command is repository-scoped. It validates only what can be observed from the current repo,
18
+ current machine, and current runtime. It does **not** create automations, labels, tracker items, or
19
+ other external state as part of the default audit path.
20
+
21
+ ## Inputs
22
+
23
+ - Optional flags in `$ARGUMENTS` that narrow or tune read-only validation.
24
+ - The current repository root and its Lisa config files (`.lisa.config.json`,
25
+ `.lisa.config.local.json`) when present.
26
+
27
+ ## Confirmation policy
28
+
29
+ Do **not** ask whether to proceed. Once invoked, run the read-only audit, print the grouped
30
+ results, emit the overall verdict, and stop.
31
+
32
+ Specifically forbidden:
33
+
34
+ - Previewing the number of checks and asking whether to continue.
35
+ - Offering "run a few checks first" or "dry-run vs real run" choices. This skill is already the
36
+ read-only path.
37
+ - Performing setup mutations just because a failing check discovered something missing.
38
+
39
+ The only legitimate reasons to stop early are:
40
+
41
+ - The current working directory cannot be resolved to a repository/root the audit can inspect.
42
+ - The runtime blocks all required local reads needed to even classify the repo.
43
+
44
+ ## Audit contract
45
+
46
+ Doctor reports grouped checks in a stable, human-readable structure. The grouped sections include,
47
+ as applicable to the current repo:
48
+
49
+ 1. **Project detection and runtime basics** — detect the project root, package/runtime surface, and
50
+ whether Lisa is installed where the repo expects it.
51
+ 2. **Lisa config readiness** — read `.lisa.config.json` and `.lisa.config.local.json` using the
52
+ same local-overrides-global semantics defined by `config-resolution`; report missing required
53
+ keys, incompatible combinations, and committed-vs-local locality problems as findings rather
54
+ than mutating config.
55
+ 3. **Tracker/source preflight** — perform read-only readiness checks for the configured `tracker`
56
+ and `source` only. If a required CLI, MCP surface, or auth context is unavailable in the current
57
+ runtime, report that explicitly instead of pretending the repo is ready.
58
+ 4. **Runtime distribution surfaces** — confirm the command, skill, hook, and related distribution
59
+ surfaces relevant to this repo are present where Lisa expects them on the active runtime, and
60
+ that the Lisa-owned enforcement artifacts (`scripts/lisa-hooks/*`,
61
+ `scripts/lisa-enforcement-fallback.sh`) match the installed Lisa version rather than an older
62
+ copy. Present-but-stale is a finding: a guard whose fix never landed enforces the old behavior.
63
+ 5. **Automation readiness** — inspect whether the configured queue source/tracker and scheduling
64
+ prerequisites are observable, but do **not** create, edit, or delete automations during doctor.
65
+ 6. **Optional GitHub Project coordination** — when `github.projects.v2` is configured, delegate
66
+ the shared validation read to `github-project-v2` instead of reimplementing ad-hoc GraphQL
67
+ checks. Honor the `required=false` vs `required=true` semantics documented by
68
+ `config-resolution`: best-effort failures are `WARN`, required-mode failures are `FAIL`.
69
+ 7. **Optional wiki delegation** — when a repo-local `wiki/` exists, either summarize the
70
+ specialized `lisa-wiki-doctor` verdict or explicitly report that deeper wiki checks are
71
+ available there. The base doctor stays narrower than full wiki migration enforcement.
72
+ 8. **Optional Kane browser provider** — when `verification.browser.kane.enabled` is true, run the
73
+ Lisa-owned readiness probe. Require explicit cloud-upload approval, the contract-tested exact
74
+ version, a non-production environment allow-list, local Chrome/Chromium, Test Manager
75
+ project/folder targeting, `whoami` authentication, and nonzero/observable credit readiness.
76
+ Report missing executable/browser, auth failure, wrong target, zero credits, and control-plane
77
+ failure separately. If Kane is not enabled, report an informational `OK`/not enabled rather than
78
+ probing or installing it.
79
+
80
+ If a check family is not applicable to the current repo, report `SKIP` with the reason.
81
+
82
+ ### Minimum config-readiness checks
83
+
84
+ The Lisa config group is not just "does a file exist?" Doctor must audit the config contract in
85
+ this order:
86
+
87
+ 1. **Presence + parseability**
88
+ - `FAIL` when `.lisa.config.json` is missing, empty, or invalid JSON.
89
+ - Read `.lisa.config.local.json` only when present; if present but invalid JSON, `FAIL`.
90
+ 2. **Merged effective config**
91
+ - Resolve every key with the same per-key local-overrides-global semantics documented by
92
+ `config-resolution`. Doctor must describe findings against the effective merged value, not by
93
+ pretending one file fully replaces the other.
94
+ 3. **Required top-level dispatch keys**
95
+ - `FAIL` when merged `tracker` is missing or is not one of `jira`, `github`, or `linear`.
96
+ - `FAIL` when merged `source` is present but is not one of `notion`, `confluence`, `linear`,
97
+ `github`, or `jira`.
98
+ 4. **Vendor required-key audit**
99
+ - `FAIL` when the configured tracker/source points at a vendor whose required keys are absent
100
+ after merge. Examples: `tracker=github` requires `github.org` + `github.repo`;
101
+ `tracker=jira` requires `atlassian.cloudId` + `jira.project`; `source=notion` requires
102
+ `notion.workspaceId` + `notion.prdDatabaseId`.
103
+ - Reuse the `config-resolution` vendor tables rather than inventing a second required-key list.
104
+ 5. **Local-vs-committed locality audit**
105
+ - `WARN` when developer-specific fields appear in committed config. At minimum enforce the
106
+ documented local-only examples: `atlassian.email`, `intake.assignee`, and
107
+ `jira.verified_workflow_hash`.
108
+ - `WARN` when project-wide shared fields exist only in `.lisa.config.local.json` and are absent
109
+ from `.lisa.config.json`, because the current machine may work while the repository remains
110
+ under-configured for teammates and automations. Examples include `tracker`, `source`,
111
+ `github.org`, `github.repo`, `atlassian.cloudId`, `atlassian.site`, `jira.project`,
112
+ `linear.workspace`, `linear.teamKey`, and `deploy.branches`.
113
+
114
+ 6. **Deploy env-order audit** (only when `deploy.branches` is present)
115
+ - `PASS` (or skip) when `deploy.branches` defines a single environment — `deploy.order` is
116
+ optional and the back-sync chain is empty.
117
+ - `PASS` (or skip) when `deploy.branches` defines multiple environments that all map to the
118
+ **same** branch (e.g. `dev`/`staging`/`production` all → `main`). The branches resolve to a
119
+ single distinct branch, so there is nothing to back-sync, the chain is the empty no-op, and
120
+ `deploy.order` is not required. Do not WARN.
121
+ - `WARN` when `deploy.branches` resolves to **more than one distinct** branch but `deploy.order`
122
+ is absent. Config-driven back-sync cannot derive a source→target chain without the env
123
+ ranking; the repo must add `deploy.order` (low→high, e.g.
124
+ `["dev","staging","production"]`).
125
+ - `FAIL` when `deploy.order` is present but its env-name set does not exactly match the keys of
126
+ `deploy.branches` (every env in one must appear in the other). A mismatch silently breaks the
127
+ derived chain.
128
+ - Reuse the `deploy.order` / `deploy.branches` contract from `config-resolution` ("Env order
129
+ (sync-down chain)") rather than re-deriving the rules here.
130
+
131
+ Locality findings are advisory unless the merged config is unusable. Missing shared keys after the
132
+ merge are `FAIL`; shared keys that exist only locally are `WARN`.
133
+
134
+ ### Minimum tracker/source preflight checks
135
+
136
+ After config readiness passes far enough to resolve the merged `tracker` and optional `source`,
137
+ doctor must perform read-only preflight checks for the configured vendors only. It does not probe
138
+ every vendor Lisa supports.
139
+
140
+ 1. **Scope the audit to configured vendors**
141
+ - Audit the merged `tracker`.
142
+ - Audit the merged `source` only when present and distinct from the tracker.
143
+ - Report every non-configured vendor as `SKIP` rather than pretending it was checked.
144
+ 2. **Prove a readable substrate exists**
145
+ - `tracker=github` or `source=github`: require `gh` CLI availability, a passing `gh auth status`,
146
+ and a read probe against the configured repo such as `gh repo view <org>/<repo>`.
147
+ - `tracker=jira`, `source=jira`, or `source=confluence`: follow the `atlassian-access`
148
+ substrate ladder and prove at least one read-capable path can see the configured
149
+ `atlassian.cloudId` and vendor scope. Acceptable substrates are `acli`, Atlassian MCP, or the
150
+ validated API-token/curl path documented by `config-resolution`.
151
+ - `tracker=linear` or `source=linear`: require either readable Linear MCP access or a valid
152
+ personal API-key probe against the configured workspace. When Linear is the tracker, doctor
153
+ must also prove the configured `linear.teamKey` is visible.
154
+ - `source=notion`: require either a Notion MCP identity match for `notion.workspaceId` or a
155
+ valid internal-integration token probe, plus read visibility to `notion.prdDatabaseId`.
156
+ 3. **Separate missing tooling from missing auth or scope**
157
+ - Missing executable / MCP substrate availability is a distinct observed fact, not the same as
158
+ "auth failed."
159
+ - When a probe runs and fails, preserve the exact read-only failure text or HTTP/GraphQL status
160
+ in the observed output so the operator can distinguish wrong workspace/site/repo from missing
161
+ credentials.
162
+ 4. **Severity ladder**
163
+ - `PASS` when at least one supported read-only substrate proves the configured vendor is
164
+ reachable with the required scope.
165
+ - `WARN` when the configured vendor is reachable, but an additional optional substrate is
166
+ unavailable and later Lisa flows would need to fall back.
167
+ - `FAIL` when no supported substrate can prove read access for the configured tracker/source, or
168
+ when the configured vendor target is unreadable from the current runtime.
169
+
170
+ ### Minimum GitHub Project coordination checks
171
+
172
+ When `github.projects.v2` is configured, doctor must run one additional read-only coordination
173
+ check instead of treating the config block as implicitly ready.
174
+
175
+ 1. **Delegate through the shared chokepoint**
176
+ - Call `lisa-github-project-v2` in read-only resolution mode:
177
+
178
+ ```text
179
+ operation: resolve-project
180
+ ```
181
+
182
+ - Do not inline ad-hoc Project GraphQL in doctor. Setup, doctor, writers, and linked-PR flows
183
+ must all read the same owner/access contract from the shared utility.
184
+ 2. **Preserve exact namespace + access failures**
185
+ - Enforce the v1 namespace rule exactly as documented by the shared utility. If
186
+ `github.projects.v2.owner.slug` does not match `github.org`, report:
187
+
188
+ ```yaml
189
+ code: project_namespace_mismatch
190
+ message: "github.projects.v2.owner.slug must match github.org in v1"
191
+ remediation: "Use a Project owned by <github.org> or remove github.projects.v2."
192
+ ```
193
+
194
+ - For owner-access or GraphQL failures, preserve the exact GitHub / GraphQL failure text in the
195
+ observed output. Examples include missing Project, `Resource not accessible by integration`,
196
+ unsupported owner kind, or a wrong owner/number pair.
197
+ 3. **Report exact remediation paths**
198
+ - Doctor must make the next operator action explicit. At minimum, say whether they need to:
199
+ 1. choose a Project owned by the tracked repo namespace,
200
+ 2. grant the token Project read/write access,
201
+ 3. correct the configured Project number/owner, or
202
+ 4. remove `github.projects.v2` when coordination is not required.
203
+ 4. **Map shared utility outcomes into doctor severity**
204
+ - `required: false` => doctor `WARN`. Repository-local GitHub issue/PR flows remain usable while
205
+ Project coordination is degraded.
206
+ - `required: true` => doctor `FAIL`. The same Project validation failure blocks Lisa readiness
207
+ because coordination was configured as required.
208
+
209
+ Good output examples:
210
+
211
+ ```text
212
+ WARN github.projects.v2: Resource not accessible by integration
213
+ Observed: exact GitHub / GraphQL failure text preserved from resolve-project.
214
+ Remediation: grant the token Project read/write access or remove github.projects.v2.required.
215
+ Repository-local GitHub issue/PR flows remain usable; Project coordination is disabled.
216
+ ```
217
+
218
+ ```text
219
+ FAIL github.projects.v2: github.projects.v2.owner.slug must match github.org in v1
220
+ Remediation: use a Project owned by CodySwannGT or remove github.projects.v2.
221
+ ```
222
+
223
+ ### Minimum automation-readiness checks
224
+
225
+ Doctor's automation-readiness group stays read-only: it audits whether this repo and runtime could
226
+ support `/lisa:setup-automations` and the resulting recurring jobs, but it does **not** create,
227
+ edit, delete, or reconcile automations on the default doctor path.
228
+
229
+ 1. **Resolve the queue inputs exactly as setup-automations would**
230
+ - Resolve the PRD queue from merged `source`.
231
+ - Resolve the build queue from merged `tracker`.
232
+ - Resolve the repair queue from the same queue-detection rules as `lisa-repair-intake`
233
+ (identical source-dispatch contract to `lisa-intake`).
234
+ - If any automation would require guessing because `source`, `tracker`, or their vendor keys are
235
+ still unresolved after the config-readiness audit, report that automation as `FAIL` rather
236
+ than pretending scheduling can proceed safely.
237
+ 2. **Audit the current runtime's native scheduler surface without mutating it**
238
+ - Codex: doctor should report whether the runtime exposes the native automations surface
239
+ (`automation_update`) needed by `/lisa:setup-automations`.
240
+ - Claude: doctor should report whether the runtime exposes `/schedule`.
241
+ - Other runtimes: doctor should explicitly say that no native Lisa scheduler is known for the
242
+ current runtime.
243
+ - This is observability only. Never create a placeholder automation just to prove the scheduler
244
+ works.
245
+ 3. **Check exploratory-automation support by shipped stack surface**
246
+ - `exploratory-bugs` is supported only when the project ships an `exploratory-qa` command
247
+ surface (the `expo`, `rails`, or `harper-fabric` stacks today). Reuse the same stack/support
248
+ rule documented by `setup-automations`; do not invent exploratory jobs for stacks that do not
249
+ ship that command.
250
+ - When the repo does not ship `exploratory-qa`, report `exploratory-bugs` as `SKIP` with the
251
+ reason.
252
+ - `exploratory-prds` remains applicable when the repo can run `/lisa:project-ideation`; if its
253
+ queue/config prerequisites are unresolved, report the exact blocking config fact.
254
+ 4. **Severity ladder**
255
+ - `PASS` when an automation's queue inputs are resolvable and the runtime exposes the required
256
+ native scheduler surface for that automation.
257
+ - `WARN` when Lisa remains usable manually, but the current runtime has no native scheduler
258
+ surface for unattended runs, so automation setup would be unavailable from here.
259
+ - `SKIP` when an optional automation is intentionally unsupported for this repo surface (for
260
+ example, `exploratory-bugs` on a stack with no `exploratory-qa` command).
261
+ - `FAIL` when the repo's config cannot resolve the queue that an automation needs, because that
262
+ would make unattended runs ambiguous or broken before scheduling even starts.
263
+
264
+ ### Minimum wiki-delegation checks
265
+
266
+ When a repo-local `wiki/` directory exists, doctor must surface the specialized wiki-readiness path
267
+ without turning the base doctor into a second `lisa-wiki-doctor`.
268
+
269
+ 1. **Detect whether wiki delegation applies**
270
+ - If no repo-local `wiki/` directory exists, report the entire wiki group as `SKIP` with the
271
+ reason that no wiki surface is present in this repository.
272
+ - If `wiki/` exists, keep the group present in the final report; do not silently omit it.
273
+ 2. **Prefer summary of an existing specialized verdict**
274
+ - If the repo already has a readable `wiki/state/migration/doctor-report.json`, doctor may
275
+ summarize the specialized verdict (`READY`, `READY_WITH_WARNINGS`, or `NOT_READY`) plus the
276
+ most relevant blocking/warning facts, clearly attributing them to `lisa-wiki-doctor`.
277
+ - Preserve the base doctor's narrower scope: summarize or quote the specialized verdict, but do
278
+ not inline the full migration/readiness checklist into the base doctor output.
279
+ 3. **Otherwise advertise the deeper follow-up explicitly**
280
+ - If `wiki/` exists but no specialized report is available yet, doctor must still tell the
281
+ operator that deeper wiki checks live behind `lisa-wiki-doctor`.
282
+ - The report should make the next action explicit, for example:
283
+
284
+ ```text
285
+ WARN wiki-follow-up: wiki/ detected; deeper wiki migration checks not yet summarized
286
+ Observed: wiki/ exists, but no wiki/state/migration/doctor-report.json was found.
287
+ Remediation: run lisa-wiki-doctor to produce the wiki-specific readiness verdict.
288
+ ```
289
+ 4. **Severity ladder**
290
+ - `SKIP` when `wiki/` is absent.
291
+ - `PASS` when `wiki/` exists and doctor successfully summarizes an existing
292
+ `lisa-wiki-doctor` verdict.
293
+ - `WARN` when `wiki/` exists and doctor can only advertise the specialized follow-up because no
294
+ persisted wiki verdict is available yet.
295
+ - `FAIL` only when `wiki/` exists but the repo cannot surface the specialized follow-up at all
296
+ (for example, the required `lisa-wiki-doctor` distribution surface is missing or the existing
297
+ report is unreadable/malformed enough that doctor cannot safely summarize it).
298
+ 5. **Keep wiki readiness optional for non-wiki repos**
299
+ - Never require a wiki plugin surface when `wiki/` is absent.
300
+ - Never let wiki-specific checks downgrade unrelated non-wiki repositories.
301
+
302
+ ### Minimum repository-readiness checks
303
+
304
+ The eight groups above answer one question: **is Lisa installed correctly here?** There is a second,
305
+ orthogonal question — **may an agent fleet operate here unattended?** — and conflating them is how a
306
+ brownfield onboarding ends in "we built a wiki, looks good" instead of a verdict someone can act on.
307
+ `Repository readiness` is that second question, and it is opt-in behind the `--readiness` flag; the
308
+ default doctor path never renders it and stays byte-identical.
309
+
310
+ 1. **Render one separately-titled group.** When readiness mode is requested, append a single
311
+ `Repository readiness` group (id `repository-readiness`) in a fixed position after the eight
312
+ installation groups, using the shared `createRepositoryReadinessDoctorGroup` helper from
313
+ `scripts/doctor-report.mjs`. It is distinct from the installation groups so a reader is never left
314
+ guessing which question a verdict answered.
315
+ 2. **Score exactly the eight ownership dimensions from `readiness-rubric`.** Report **eight** checks,
316
+ in fixed order, **never fewer** and never silently omit one: `context-routing`,
317
+ `capabilities-tools`, `domain-ownership`, `execution-proof`, `feedback-guardrails`,
318
+ `dependencies-supply-chain`, `delivery-authority`, `proportionality`. Cite the `readiness-rubric`
319
+ slug for the dimension definitions, the seven ship blockers, and the consequence-ordering
320
+ contract; do not restate or fork that vocabulary here.
321
+ 3. **`SKIP` carries a reason and is never blank.** A dimension with no applicable evidence renders
322
+ `SKIP` with a stated reason ("no deployment target configured, so delivery/authority was not
323
+ assessed"). An unassessed dimension is a known unknown, and the report says so.
324
+
325
+ **This surface reflects the CLI; it does not re-score.** The evidence producers and the blocker
326
+ engine live in the Lisa CLI, which is the single source of truth. When `.lisa/readiness.json` is
327
+ present and readable (parses, matching `schema_version`, carries a `dimensions` array), this group
328
+ **projects** each recorded dimension's status and its operator-facing evidence/reason text, so an
329
+ operator running `/lisa:doctor` through any coding agent sees the same readiness answer the CLI
330
+ gives. When the report is absent, unparseable, or stamped with an unknown `schema_version` — or
331
+ records nothing for a given dimension — that dimension falls back to `SKIP` with the reason it was
332
+ not assessed. Absence means the readiness pass has not run, never that the repository is clean: a
333
+ pass or a fail is never manufactured from a missing report. Run
334
+ `lisa doctor --offline --readiness` to produce the report first.
335
+
336
+ **A standing blocker outranks the recorded status.** Some CLI producers record `WARN` while
337
+ standing a ship blocker — the blocker engine never reads the per-dimension status, so the finding
338
+ flips the repository to `NOT_READY` exactly as a `FAIL` would. A dimension that owns an entry in
339
+ the report's `blockers[]` therefore projects as `FAIL` regardless of its recorded label, and its
340
+ remediation names the blocker ids and repeats the report's `narrowed_claim` (the "IS ready for
341
+ supervised, single-ticket agent work" fallback `readiness-rubric` requires whenever a blocker
342
+ stands). Projected checks also carry the report's `generated_at`/`lisa_version` so a stale report
343
+ cannot read as current truth, and unassessed dimensions carry the CLI's not-established caveat.
344
+ 4. **Reuse the shipped verdict ladder and consequence ordering.** No new verdict value and no new
345
+ severity: reuse `READY` / `READY_WITH_WARNINGS` / `NOT_READY`. `READY` requires *positive*
346
+ evidence — every readiness dimension assessed and clean, with no blocker standing. An unassessed
347
+ (`SKIP`) dimension is silence, not health, so any readiness report carrying one tops out at
348
+ `READY_WITH_WARNINGS`; only a standing ship blocker yields `NOT_READY`. Section order stays
349
+ stable; the findings **within** each dimension check order highest-consequence-first.
350
+ 5. **Persist to a versioned, relocatable artifact.** Writing the report to `.lisa/readiness.json`
351
+ (`schema_version: 1`, with `verdict`, `blocker_count`, and per-dimension findings) is resolved
352
+ through a single resolver so the location is one line to change. The write is atomic and must
353
+ never fail the run: a write error degrades to a `WARN` check rather than throwing.
354
+ 6. **Warn-only, always.** This gates a claim, not a process: readiness never hard-blocks and never
355
+ changes doctor's exit-code semantics (exit 1 iff some check is `FAIL`). Where a surface named here
356
+ is not installed, degrade — state what was assessed, state what was not, and continue.
357
+
358
+ ### Upstream Lisa change-history diagnosis
359
+
360
+ A failing or warning check has two possible causes: the project drifted, or **Lisa itself changed
361
+ upstream** since this project last updated. Doctor must distinguish them instead of blaming the
362
+ project by default. Whenever findings need explanation — and always before proposing repairs —
363
+ attribute the finding with real evidence.
364
+
365
+ The attribution procedure itself is shared: it lives in the `lisa-attribute-failure` skill
366
+ (extracted from this section so any failure event can be attributed, not only doctor findings).
367
+ Doctor invokes it per finding:
368
+
369
+ 1. **Resolve the version window.** Determine the project's installed Lisa version (the
370
+ `@codyswann/lisa` entry in `package.json`/lockfile, or the plugin version stamp on the active
371
+ runtime) and the latest published version (`npm view @codyswann/lisa version`, or the update
372
+ check's cached result).
373
+ 2. **Invoke `lisa-attribute-failure`** with the finding as the failure event: the defect
374
+ description, the implicated template/config paths, the rule/skill/hook in play, and the
375
+ resolved version window. The skill evaluates its three ordered signals — Lisa-managed surface
376
+ ownership, shipped rule/skill/hook behavior, and the upstream change-history window (the
377
+ version-window compare procedure formerly documented inline here, preserved verbatim in that
378
+ skill: pagination/`--slurp` handling, targeted per-SHA diff context, truncation caveats, and
379
+ the bounded explicit-tag fetch fallback) — and returns `lisa` | `project` | `ambiguous` plus
380
+ the cited evidence.
381
+ 3. **Map the verdict into the finding.**
382
+ - `lisa` — Lisa changed the contract (a tightened lint rule, a renamed check context, a new
383
+ required config key) or shipped the defective surface. Say so in `Observed:` with the cited
384
+ evidence (commit subject/version or managed-surface proof), and let `Remediation:` point at
385
+ the sanctioned adoption path (e.g. `lisa update` + re-apply, a documented config opt-out)
386
+ rather than hand-editing managed files.
387
+ - `project` — history shows no relevant upstream change and the surface is project-owned: the
388
+ project drifted, so remediate on the project side.
389
+ - `ambiguous` — history was unavailable, truncated, or otherwise inconclusive: report the gap
390
+ as a `WARN`-level observability note with the evidence gap named — never fail the audit
391
+ because history was unavailable or incomplete, and never attribute drift with unverified
392
+ confidence.
393
+
394
+ This diagnosis remains part of doctor's read-only contract: the attribution skill reads Lisa's
395
+ repository, never writes to it, and repair suggestions stay suggestions.
396
+
397
+ ## Output contract
398
+
399
+ The final report must:
400
+
401
+ - Separate observed facts from remediation advice.
402
+ - Print every check with one of `PASS`, `WARN`, `FAIL`, or `SKIP`.
403
+ - Emit exactly one overall verdict: `READY`, `READY_WITH_WARNINGS`, or `NOT_READY`.
404
+ - Stay read-only by default.
405
+
406
+ Render the report in grouped sections using the shared `scripts/doctor-report.mjs` contract:
407
+
408
+ - Start with `Overall verdict: <VERDICT>` and one `Counts:` line covering `PASS`, `WARN`, `FAIL`,
409
+ and `SKIP`.
410
+ - Then print each group as `<group-id>. <group-title>`.
411
+ - Under each group, print one line per check as `- <STATUS> <check-id>: <summary>`.
412
+ - When available, print `Observed:` and `Remediation:` lines beneath the check so the report keeps
413
+ facts separate from advice.
414
+ - If a group has no applicable checks yet, render it as a grouped `SKIP` with the reason instead of
415
+ silently omitting the section.
416
+
417
+ The verdict ladder is:
418
+
419
+ - `READY` — no `FAIL` and no `WARN`.
420
+ - `READY_WITH_WARNINGS` — no `FAIL`, but one or more `WARN`.
421
+ - `NOT_READY` — one or more `FAIL`.
422
+
423
+ ## Gate configuration
424
+
425
+ ```sh
426
+ node scripts/lisa-gates.mjs validate # shape + unknown gate ids
427
+ node scripts/lisa-gates.mjs list --moment=pull-request
428
+ node scripts/lisa-gates.mjs contexts # branch-protection contexts
429
+ node scripts/lisa-gates.mjs skip-jobs # what replaces each skip_jobs token
430
+ ```
431
+
432
+ A gate is a **property** — *credential leakage* — not a tool. `gitleaks` is one way to prove
433
+ that property, and which way is the project's choice: each gate names a task in the project's own
434
+ runner, so swapping the tool changes one line of project config and nothing in Lisa.
435
+
436
+ `validate` refuses an unknown gate id rather than ignoring it. A misspelled `credential-leakge`
437
+ would otherwise read as an enabled guarantee and run nothing at all — the same silent-hole shape
438
+ as a skipped required check. Gates a project invents carry an `x-` prefix, which Lisa runs without
439
+ pretending to understand.
440
+
441
+ `skip-jobs` answers the migration off the `skip_jobs` workflow input. Eleven of the token → gate
442
+ pairs cannot be recovered by transforming the name — `lint` is `code-style`, `sg_scan` is
443
+ `structural-rules`, `work_item_traceability` is `traceability` — and being wrong does not break a
444
+ build: it declares the WRONG gate `off`, so a check silently stops running while the configuration
445
+ reads deliberate. Pass `--moment=` to match the moment the caller passes to `quality.yml`, because a
446
+ gate's legal moments are a closed set and a declaration outside it is refused by `validate` — after
447
+ the token has already been deleted.
448
+
449
+ Four of its six answers are refusals, and they are the point. `unmappable` means the job was never
450
+ converted to a gate façade, so keep the token. `partial` means one job behind the token has a gate
451
+ and the others do not, so the declaration alone would leave work running. `inert` means no job
452
+ honours that token at all. `unknown` means nothing matches it — usually a space after a comma, which
453
+ GitHub matches against nothing, so that job has been RUNNING all along. None of them produce a gate
454
+ id, because a confident wrong answer here is worse than no answer.
455
+
456
+ `lisa doctor` reports the same thing per caller workflow and does NOT edit the workflow. `lisa apply`
457
+ runs on postinstall, and an automated rewrite of a caller that gets it wrong is silent; an agent
458
+ performing the edit can read the surrounding code and confirm afterwards that the same checks ran.
459
+
460
+ `contexts` is the value that replaces a hand-transcribed branch-protection list. It is scoped to
461
+ one environment: a gate required before a production deploy is **not** thereby a merge blocker on a
462
+ pull request, and collapsing the two would promote every deploy-time gate into branch protection.
463
+
464
+ When reconciling a ruleset against it, pass `--previous=` with any label retired in the last
465
+ release. Downstream repositories call the shared workflow unpinned, so a renamed job reaches every
466
+ repository before any of them has reconciled — and a required context that never reports leaves
467
+ pull requests waiting indefinitely. The fastest way out of that is deleting the requirement, which
468
+ is how a rename ends up removing a guarantee. Emitting both labels for one release avoids it.
469
+
470
+ ### Reconciling against the live ruleset
471
+
472
+ `contexts` says what the repository *should* require. Reconciliation asks whether GitHub agrees.
473
+
474
+ **The comparison also runs without anyone typing it.** A control reachable only by a human reading
475
+ a code block is indistinguishable from one that was never written, so the declaration is held
476
+ against both enforcing surfaces on paths a machine already takes:
477
+
478
+ | surface | who runs it | needs the network |
479
+ | --- | --- | --- |
480
+ | the shipped ruleset template a repository is provisioned from | `lisa doctor` (one operator-readable line) and `lisa doctor --json` → `declarationDrift.templates` | no |
481
+ | the live branch-protection ruleset | `lisa doctor --json` → `declarationDrift.live`, and the `github.declared-checks` check in `lisa health` | yes |
482
+
483
+ Both report one verdict per required context, and the vocabulary is seven values rather than
484
+ matched/unmatched, because the mismatches and an unreadable surface need different actions:
485
+
486
+ - `matched` — declared `required`, and the surface requires it.
487
+ - `declared-not-enforced` — the settings file says it must pass and nothing requires it. The
488
+ declaration blocks nothing.
489
+ - `enforced-declared-off` — the settings file says the property is deliberately not proved here,
490
+ and protection requires it anyway. A contradiction, not a gap.
491
+ - `enforced-undeclared` — protection requires it, a registry gate produces it, and no declaration
492
+ governs it. **Silence is not permission to stop requiring it**; the remedy is to declare the gate.
493
+ - `enforced-declared-optional` — protection requires it while the declaration says optional. Name
494
+ which surface wins.
495
+ - `enforced-not-lisa-owned` — protection requires it and no registry gate produces it. Third-party
496
+ checks are required by construction and declared by nobody; this bucket exists so they can be told
497
+ apart from a Lisa gate that fell out of the settings file, never so they can be removed.
498
+ - `unproven` — the surface could not be read, so no enforcement comparison was made. It is never a
499
+ match and never drift; the operator fixes access/availability and reruns the observation.
500
+
501
+ `enforced-declared-off` and `declared-not-enforced` fail the health check; the two gaps warn. No
502
+ remedy in that vocabulary removes a required context — the type has no such member, so the
503
+ guarantee holds for every caller rather than for the careful ones. A surface this run could not
504
+ read is reported as unproven and is never a match.
505
+
506
+ Reconciliation is **wired**, not something an agent has to remember to run: it is step 5 of
507
+ `scripts/lisa-github-repo-setup.sh`, alongside the settings baseline and the rulesets themselves,
508
+ and it is exposed as `npm run policy:reconcile`. Until #2917 its only callers were the code blocks
509
+ below — prose in this very file — so the declared configuration converged when somebody happened to
510
+ read a document. Run it by hand for the flags:
511
+
512
+ ```sh
513
+ node scripts/lisa-reconcile-policy.mjs --dry-run # read-only: what would change
514
+ node scripts/lisa-reconcile-policy.mjs --on-drift=report # report, write nothing
515
+ node scripts/lisa-reconcile-policy.mjs --on-drift=block # exit 1 on any drift, for CI
516
+ node scripts/lisa-reconcile-policy.mjs # honors policy.on_drift
517
+ node scripts/lisa-reconcile-policy.mjs --previous="🧽 Lint" # keep a renamed context required
518
+ node scripts/lisa-reconcile-policy.mjs --prune # also remove EXTRA contexts
519
+ ```
520
+
521
+ It reads the live ruleset and repository settings through `gh`, compares them against the derived
522
+ contexts and the `policy` block, and reports three sets: **MISSING** (declared, not live), **EXTRA**
523
+ (live, not declared), **MATCHED**. `--dry-run` never writes, whatever `policy.on_drift` says.
524
+
525
+ Three behaviors need an operator to understand them before reading a report.
526
+
527
+ **1. `UNPROVEN` is not a pass.** If `gh` is missing, unauthenticated, or the API errors — a private
528
+ repository on a plan without rulesets answers `403` — the verdict is `UNPROVEN` and the exit code is
529
+ `2`. It is neither of its neighbours, and the distinction is the same one the secrets preflight
530
+ draws with `unreachable`: reported as clean it is a vacuous green, clean precisely because nothing
531
+ was learned; reported as drift it sends someone to fix a ruleset that may be perfectly correct. The
532
+ drift sets come back `null` rather than empty, because empty is what a clean repository looks like.
533
+ `on_drift` does not soften this — not even `report` — because `on_drift` decides what to do about a
534
+ drift that was *measured*, and here nothing was. Map it to doctor's `WARN`/`FAIL` on the same rule
535
+ as any other unavailable check surface: never `PASS`.
536
+
537
+ **2. An `EXTRA` context is reported, never removed.** Lisa does not own the whole required list.
538
+ Under `repair` the script ADDS what is missing and leaves what is extra alone, naming each one.
539
+ Removing them requires `--prune`, and the right way to clear the list is one at a time: each EXTRA
540
+ context is either an app to keep, or a check that belongs in `.lisa.config.json` — decide which
541
+ before pruning anything.
542
+
543
+ A context posted by an external app no longer HAS to be EXTRA. `SonarCloud Code Analysis`,
544
+ `GitGuardian Security Checks`, and `CodeRabbit` are declarable two ways, and either one makes the
545
+ reconciler treat them as MATCHED rather than as a permanent false alarm:
546
+
547
+ ```json
548
+ "gates": {
549
+ "credential-leakage": {
550
+ "pull-request": {
551
+ "level": "required",
552
+ "await": "GitGuardian Security Checks",
553
+ "posted_by": 46505
554
+ }
555
+ }
556
+ },
557
+ "github": {
558
+ "rulesets": {
559
+ "requiredChecks": {
560
+ "quality checks": [{ "context": "🧩 Plugin artifacts match source" }]
561
+ }
562
+ }
563
+ }
564
+ ```
565
+
566
+ An `await` names the gate the signal PROVES, so declaring nothing requires nothing — which is how a
567
+ project that proves credential leakage with a different scanner says so. `posted_by` is the GitHub
568
+ App id allowed to post that context; omit it and the context is required unpinned, GitHub's "any
569
+ source". `requiredChecks` is for a repository-specific check that no gate models; it replaces the
570
+ additive-only `addRequiredChecks`, which is still read but can never express "stop requiring this".
571
+ Both surfaces name the ruleset a repair writes to, so `--ruleset` is needed only for a
572
+ gate-DERIVED context on a repository whose rulesets are ambiguous.
573
+
574
+ **2b. A gate proved OUTSIDE the quality facade names its own check-run chain.** A run-mode gate's
575
+ required context is derived by prefixing the gate's label with the chain of jobs that reach the
576
+ facade. When a project proves one property from a workflow of its own instead, that chain describes
577
+ a route that never reaches the prover, and the derived name is one nothing posts — which does not
578
+ turn a pull request red, it holds it at "Expected — Waiting for status to be reported" for ever.
579
+ Declare the real chain on that moment:
580
+
581
+ ```json
582
+ "gates": {
583
+ "e2e-browser": {
584
+ "run": "test:e2e:pr",
585
+ "pull-request": {
586
+ "level": "required",
587
+ "caller_chain": ["🎭 PR Browser Coverage"]
588
+ }
589
+ }
590
+ }
591
+ ```
592
+
593
+ Read the chain off a completed run, never off the YAML: a check run's reported name is the
594
+ `/`-joined chain of the JOB names that reach it, outermost first, and the top workflow's own `name:`
595
+ never appears in it. Take it from
596
+ `gh api repos/OWNER/NAME/commits/SHA/check-runs --paginate --slurp`, or let
597
+ `lisa-gates.mjs verify-contexts --posted=<file>` compare a derivation against what actually posted.
598
+ Either spelling works — `["A", "B"]` or `"A / B"` — and the override replaces the caller's chain for
599
+ that gate only; every other gate keeps deriving exactly what it derived before. It is declared per
600
+ MOMENT, because the same job posts a one-level name on the pull-request path and a two-level one on
601
+ the release path. Declaring it on the whole gate, on an `await`ing moment, at a moment that posts no
602
+ status, or with a blank level is refused by `lisa-gates.mjs validate` — at declaration time, which
603
+ is the last point at which any of those can still fail loudly.
604
+
605
+ **3. Keep both names during a rename.** `--previous=<old label>` requires the old and the new
606
+ context simultaneously for one release. Without it the reconciliation reports the still-live old
607
+ context as EXTRA (and `--prune` would delete it) while in-flight pull requests wait on a context
608
+ that will never report again.
609
+
610
+ Repair writes exactly two things: required contexts on a ruleset, and repository settings. Policy
611
+ carried by the *shape* of a rule — linear history, signed commits, force-push and deletion
612
+ protection, conversation resolution — is compared here and repaired by
613
+ `scripts/lisa-github-rulesets.sh`, which owns rule construction; the reconciler reports those and
614
+ names that script rather than reshaping rules it did not build. When more than one ruleset requires
615
+ status checks it refuses to guess which owns the derived contexts and asks for `--ruleset=<name>`,
616
+ because writing to the wrong one enforces a context under a different ref-name condition.
617
+
618
+ That rule construction is itself config-driven now. `all/github-rulesets/base.json` is deleted; the
619
+ `base` ruleset is generated per project from `policy` — including `policy.ruleset.enforcement`, the
620
+ `policy.ruleset.include_refs` / `exclude_refs` conditions, `policy.ruleset.bypass_actors`, and
621
+ `policy.review.required_approving_review_count`, none of which config could express while the
622
+ template owned them.
623
+
624
+ `policy.review.require_extra_approval_for_unattributed_changes` is declarable for a reason worth
625
+ stating, because its default is not "leave it alone". Measured against the live rulesets API on
626
+ 2026-08-25: a `pull_request` rule sent WITHOUT the parameter came back with it `true`; set
627
+ explicitly to `false` it came back `false`; sent again without it, it came back `true`. GitHub
628
+ re-applies its own default on every write that omits the field. So an operator who wants it OFF
629
+ cannot hold it off unless the payload names it, and an operator who wants it ON is recording no
630
+ choice at all — the value is whatever GitHub's default happens to be. Declaring it pins the choice
631
+ and makes it visible to the reconciler; declaring nothing keeps the payload byte-for-byte what it
632
+ was, parameter absent.
633
+
634
+ ### A ruleset that governs no branch
635
+
636
+ Reconciliation asks whether the required LIST matches. It never asks whether the ruleset carrying
637
+ that list matches any ref the repository actually has, and GitHub does not ask either: a
638
+ `conditions.ref_name.include` entry is a pattern, not a reference, so `refs/heads/dev` is accepted
639
+ and stays live on a repository whose only branch is `main`. Everything that ruleset requires is then
640
+ required nowhere — the gate still runs and posts its context, and no pull request waits on it.
641
+
642
+ Every surface read that as healthy. `compareRulesets` in `lisa health` compares the include list
643
+ against Lisa's template by string equality, and both say `refs/heads/dev`, therefore no drift; the
644
+ repo-map row parses includes but matches the literal `~DEFAULT_BRANCH` and ORs across rows, so one
645
+ governing ruleset makes the whole answer green. Nothing enumerated the repository's branches.
646
+
647
+ The `github.ruleset-reach` check in `lisa health` now does, and so does
648
+ `scripts/lisa-github-rulesets.sh` at the end of every apply, dry run included. Both load one shipped
649
+ detector, `scripts/lisa-ruleset-reach.mjs`, so the two surfaces cannot disagree about which rulesets
650
+ govern nothing. Not in doctor: doctor makes no network call, and which branches exist is a live
651
+ read — the same split that puts the template half of the declaration comparison in doctor and the
652
+ live half in health.
653
+
654
+ Three answers, never two. A ruleset that matches at least one branch is silent. One that matches
655
+ none is named with the patterns that matched nothing. One this run could not classify — an
656
+ unreadable branch list, a `~DEFAULT_BRANCH` whose default branch could not be resolved, an fnmatch
657
+ bracket expression the detector does not model — is `undetermined` and says so, because an unread
658
+ branch list is not an empty repository and reporting it as one would name every ruleset present.
659
+
660
+ **Report only, and neither obvious repair is Lisa's to make.** Creating the missing branch
661
+ manufactures the very ref the ruleset was written to protect; disabling the ruleset gives up a
662
+ protection somebody chose. An automated actor may narrow a control, never loosen one. Point the
663
+ ruleset at a branch the repository has, or retire it deliberately.
664
+
665
+ ## Secrets configuration
666
+
667
+ Run the secrets health checks through the skill that owns the contract, rather than reimplementing
668
+ any part of it here:
669
+
670
+ ```sh
671
+ node .claude/skills/lisa-secrets-access/scripts/validate-config.mjs # shape
672
+ node .claude/skills/lisa-secrets-access/scripts/preflight-secrets.mjs # credential readiness
673
+ node .claude/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs # tooling readiness
674
+ node .claude/skills/lisa-secrets-access/scripts/doctor-secrets.mjs # health
675
+ ```
676
+
677
+ Run the validator first. It checks only the *shape* of the `secrets`, `remoteEnv`, and
678
+ `automations` blocks — whether a declaration could ever be correct — and catches the failures that
679
+ would otherwise surface somewhere unhelpful: a container failing mid-setup, a scheduled loop that
680
+ never fires, a dispatch naming a surface nobody provisioned. The health check then asks whether the
681
+ credentials actually resolve.
682
+
683
+ The preflight in the middle is the same check the SessionStart hook runs, and it is here for the
684
+ half the hook deliberately cannot do. The hook injects its verdict into an agent's context and
685
+ never blocks — killing a session over a credential it may not need would tax every session for a
686
+ minority need, and a control people route around enforces nothing. Doctor is where the same
687
+ verdict is allowed to be a non-zero exit.
688
+
689
+ It reports three outcomes, and the third carries the weight. `ok` and `missing` are self-evident.
690
+ **`unreachable`** means the provider itself could not be asked — no CLI, no bootstrap token, an API
691
+ that errored — and it is neither of its neighbours. Reported as `ok` it would be a vacuous green,
692
+ clean precisely because nothing was learned. Reported as `missing` it would blame the vault for a
693
+ fault in this machine's access and send someone to grant a credential that was never absent. Both
694
+ fail; they differ in what they tell the reader to fix.
695
+
696
+ The tooling preflight asks the same question about CLIs, and it is a *caller* of
697
+ `planToolchain` rather than a second implementation — that distinction is the point.
698
+ `verify-remote-env.mjs` previously ran its own toolchain loop which never consulted
699
+ `minVersion`, so a container verified clean against a `node` older than the manifest
700
+ demanded while the plan-side check rejected exactly that. One function now answers the
701
+ question everywhere.
702
+
703
+ It needs only two verdicts. A local binary cannot fail to be asked the way a vault can,
704
+ and the analogous trap — a tool present at an unparseable version — already fails closed
705
+ upstream, because an unknown version loses every `minVersion` comparison. What it does add
706
+ is a split credentials have no equivalent for: a missing tool with a pinned, checksummed
707
+ `install` entry is something Lisa can place itself, so it reports an action and exits zero,
708
+ while a tool nothing can provision blocks and exits non-zero.
709
+
710
+ It reports without ever printing a value, and compares two copies of the same credential by digest.
711
+ Map its findings into the doctor's own verdicts: `error` → `FAIL`, `warn` → `WARN`.
712
+
713
+ **A project with no credentials manager is `WARN`, never `FAIL`.** The `env` provider is a supported
714
+ state — the environment *is* the provider. A manager is the preferred path because it gives one
715
+ store, rotation, and an audit trail; it is not a requirement, and doctor must not act as though it
716
+ were.
717
+
718
+ The check worth understanding before triaging its output is the two-store one. A value present in
719
+ both the provider and a local copy is **not a duplicate** — it is two live credentials, one of them
720
+ untracked. Both authenticate, so the difference is invisible from either side, and "tidying up the
721
+ duplicate" deletes a working credential that no record accounts for. Treat a mismatch as
722
+ stop-and-ask, never as something to adjudicate automatically.
723
+
724
+ ## Delegation and reuse
725
+
726
+ - Reuse `config-resolution` for config and lifecycle role defaults instead of inventing a second
727
+ schema.
728
+ - Reuse `lisa-secrets-access` for every secrets check. Doctor must never read a keychain, parse a
729
+ `.env`, or invoke a provider CLI itself — one chokepoint is what makes the single-store rule
730
+ enforceable, and a diagnostic that bypasses it is exactly the second reader that creates drift.
731
+ - Reuse the existing `github-project-v2` chokepoint for GitHub Project coordination checks instead
732
+ of inlining bespoke access logic.
733
+ - Reuse ideas from `lisa-wiki-doctor` for grouped verdict rendering where they fit, while keeping
734
+ the Lisa-wide doctor narrower than the wiki-specific migration/readiness workflow.
735
+
736
+ ## Rules
737
+
738
+ - Never mutate repository, tracker, or automation state on the default doctor path.
739
+ - Never hardcode tracker/source label names outside the documented defaults plus configured
740
+ overrides from `config-resolution`.
741
+ - Never silently treat an unavailable check surface as success; report `WARN`, `FAIL`, or `SKIP`
742
+ with the explicit missing dependency.
743
+ - Never turn wiki-specific checks into a requirement for non-wiki repos.