@codyswann/lisa 2.119.1 → 2.121.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (766) hide show
  1. package/.claude-plugin/marketplace.json +18 -0
  2. package/dist/agy/agents-md-installer.d.ts +24 -0
  3. package/dist/agy/agents-md-installer.d.ts.map +1 -0
  4. package/dist/agy/agents-md-installer.js +126 -0
  5. package/dist/agy/agents-md-installer.js.map +1 -0
  6. package/dist/agy/mcp-installer.d.ts +102 -0
  7. package/dist/agy/mcp-installer.d.ts.map +1 -0
  8. package/dist/agy/mcp-installer.js +155 -0
  9. package/dist/agy/mcp-installer.js.map +1 -0
  10. package/dist/agy/plugin-installer.d.ts +21 -0
  11. package/dist/agy/plugin-installer.d.ts.map +1 -0
  12. package/dist/agy/plugin-installer.js +88 -0
  13. package/dist/agy/plugin-installer.js.map +1 -0
  14. package/dist/claude/claude-md-installer.d.ts +18 -0
  15. package/dist/claude/claude-md-installer.d.ts.map +1 -0
  16. package/dist/claude/claude-md-installer.js +62 -0
  17. package/dist/claude/claude-md-installer.js.map +1 -0
  18. package/dist/codex/lisa-plugin-detection.d.ts +68 -0
  19. package/dist/codex/lisa-plugin-detection.d.ts.map +1 -0
  20. package/dist/codex/lisa-plugin-detection.js +139 -0
  21. package/dist/codex/lisa-plugin-detection.js.map +1 -0
  22. package/dist/copilot/copilot-instructions-installer.d.ts +18 -0
  23. package/dist/copilot/copilot-instructions-installer.d.ts.map +1 -0
  24. package/dist/copilot/copilot-instructions-installer.js +61 -0
  25. package/dist/copilot/copilot-instructions-installer.js.map +1 -0
  26. package/dist/copilot/plugin-installer.d.ts +29 -0
  27. package/dist/copilot/plugin-installer.d.ts.map +1 -0
  28. package/dist/copilot/plugin-installer.js +144 -0
  29. package/dist/copilot/plugin-installer.js.map +1 -0
  30. package/dist/core/config.d.ts +28 -4
  31. package/dist/core/config.d.ts.map +1 -1
  32. package/dist/core/config.js +24 -0
  33. package/dist/core/config.js.map +1 -1
  34. package/dist/core/lisa.d.ts +35 -0
  35. package/dist/core/lisa.d.ts.map +1 -1
  36. package/dist/core/lisa.js +99 -2
  37. package/dist/core/lisa.js.map +1 -1
  38. package/package.json +1 -1
  39. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa/.codex-plugin/plugin.json +2 -1
  41. package/plugins/lisa/hooks/hooks.json +75 -0
  42. package/plugins/lisa-agy/agents/architecture-specialist.md +47 -0
  43. package/plugins/lisa-agy/agents/bug-fixer.md +39 -0
  44. package/plugins/lisa-agy/agents/builder.md +40 -0
  45. package/plugins/lisa-agy/agents/confluence-prd-intake.md +65 -0
  46. package/plugins/lisa-agy/agents/debug-specialist.md +114 -0
  47. package/plugins/lisa-agy/agents/git-history-analyzer.md +183 -0
  48. package/plugins/lisa-agy/agents/github-agent.md +148 -0
  49. package/plugins/lisa-agy/agents/github-build-intake.md +64 -0
  50. package/plugins/lisa-agy/agents/github-prd-intake.md +66 -0
  51. package/plugins/lisa-agy/agents/jira-agent.md +129 -0
  52. package/plugins/lisa-agy/agents/jira-build-intake.md +64 -0
  53. package/plugins/lisa-agy/agents/learner.md +43 -0
  54. package/plugins/lisa-agy/agents/learnings-synthesizer.md +135 -0
  55. package/plugins/lisa-agy/agents/linear-agent.md +134 -0
  56. package/plugins/lisa-agy/agents/linear-build-intake.md +64 -0
  57. package/plugins/lisa-agy/agents/linear-prd-intake.md +66 -0
  58. package/plugins/lisa-agy/agents/notion-prd-intake.md +63 -0
  59. package/plugins/lisa-agy/agents/performance-specialist.md +85 -0
  60. package/plugins/lisa-agy/agents/pr-mining-specialist.md +85 -0
  61. package/plugins/lisa-agy/agents/product-specialist.md +63 -0
  62. package/plugins/lisa-agy/agents/quality-specialist.md +56 -0
  63. package/plugins/lisa-agy/agents/security-specialist.md +51 -0
  64. package/plugins/lisa-agy/agents/skill-evaluator.md +245 -0
  65. package/plugins/lisa-agy/agents/spec-conformance-specialist.md +49 -0
  66. package/plugins/lisa-agy/agents/test-specialist.md +49 -0
  67. package/plugins/lisa-agy/agents/tracker-mining-specialist.md +85 -0
  68. package/plugins/lisa-agy/agents/verification-specialist.md +135 -0
  69. package/plugins/lisa-agy/commands/automation-status.md +12 -0
  70. package/plugins/lisa-agy/commands/codify-verification.md +6 -0
  71. package/plugins/lisa-agy/commands/debrief/apply.md +6 -0
  72. package/plugins/lisa-agy/commands/debrief.md +6 -0
  73. package/plugins/lisa-agy/commands/doctor.md +6 -0
  74. package/plugins/lisa-agy/commands/fix/linter-error.md +7 -0
  75. package/plugins/lisa-agy/commands/git/commit.md +7 -0
  76. package/plugins/lisa-agy/commands/git/prune.md +6 -0
  77. package/plugins/lisa-agy/commands/git/submit-pr.md +7 -0
  78. package/plugins/lisa-agy/commands/implement.md +6 -0
  79. package/plugins/lisa-agy/commands/improve/code-complexity.md +6 -0
  80. package/plugins/lisa-agy/commands/improve/max-lines-per-function.md +7 -0
  81. package/plugins/lisa-agy/commands/improve/max-lines.md +7 -0
  82. package/plugins/lisa-agy/commands/improve/test-coverage.md +7 -0
  83. package/plugins/lisa-agy/commands/improve/tests.md +7 -0
  84. package/plugins/lisa-agy/commands/intake-explain.md +31 -0
  85. package/plugins/lisa-agy/commands/intake.md +6 -0
  86. package/plugins/lisa-agy/commands/monitor.md +6 -0
  87. package/plugins/lisa-agy/commands/plan.md +6 -0
  88. package/plugins/lisa-agy/commands/plugin-sync-explain.md +8 -0
  89. package/plugins/lisa-agy/commands/product-walkthrough.md +7 -0
  90. package/plugins/lisa-agy/commands/project-ideation.md +6 -0
  91. package/plugins/lisa-agy/commands/pull-request/review.md +7 -0
  92. package/plugins/lisa-agy/commands/queue-status.md +34 -0
  93. package/plugins/lisa-agy/commands/repair-intake.md +6 -0
  94. package/plugins/lisa-agy/commands/research.md +6 -0
  95. package/plugins/lisa-agy/commands/review/local.md +6 -0
  96. package/plugins/lisa-agy/commands/security/zap-scan.md +6 -0
  97. package/plugins/lisa-agy/commands/setup/atlassian.md +7 -0
  98. package/plugins/lisa-agy/commands/setup/confluence.md +7 -0
  99. package/plugins/lisa-agy/commands/setup/github.md +7 -0
  100. package/plugins/lisa-agy/commands/setup/jira.md +7 -0
  101. package/plugins/lisa-agy/commands/setup/linear.md +7 -0
  102. package/plugins/lisa-agy/commands/setup/notion.md +7 -0
  103. package/plugins/lisa-agy/commands/setup-automations.md +6 -0
  104. package/plugins/lisa-agy/commands/tear-down-automations.md +6 -0
  105. package/plugins/lisa-agy/commands/verify-prd.md +6 -0
  106. package/plugins/lisa-agy/commands/verify.md +6 -0
  107. package/plugins/lisa-agy/commands/wiki/install.md +7 -0
  108. package/plugins/lisa-agy/plugin.json +8 -0
  109. package/plugins/lisa-agy/scripts/automation-status-claude-adapter.mjs +672 -0
  110. package/plugins/lisa-agy/scripts/automation-status-codex-adapter.mjs +697 -0
  111. package/plugins/lisa-agy/scripts/automation-status-contract-drift.mjs +392 -0
  112. package/plugins/lisa-agy/scripts/automation-status-expected-fleet.mjs +319 -0
  113. package/plugins/lisa-agy/scripts/automation-status-report.mjs +170 -0
  114. package/plugins/lisa-agy/scripts/doctor-report.mjs +143 -0
  115. package/plugins/lisa-agy/scripts/plugin-sync-explain.mjs +512 -0
  116. package/plugins/lisa-agy/scripts/project-ideation-idempotency-harness.mjs +319 -0
  117. package/plugins/lisa-agy/scripts/queue-contract-resolution.mjs +453 -0
  118. package/plugins/lisa-agy/scripts/queue-health-classification.mjs +157 -0
  119. package/plugins/lisa-agy/scripts/queue-status-build-readers.mjs +509 -0
  120. package/plugins/lisa-agy/scripts/queue-status-prd-readers.mjs +452 -0
  121. package/plugins/lisa-agy/skills/acceptance-criteria/SKILL.md +71 -0
  122. package/plugins/lisa-agy/skills/agent-design-best-practices/SKILL.md +219 -0
  123. package/plugins/lisa-agy/skills/atlassian-access/SKILL.md +293 -0
  124. package/plugins/lisa-agy/skills/automation-status/SKILL.md +111 -0
  125. package/plugins/lisa-agy/skills/bug-triage/SKILL.md +23 -0
  126. package/plugins/lisa-agy/skills/codebase-research/SKILL.md +87 -0
  127. package/plugins/lisa-agy/skills/codify-verification/SKILL.md +152 -0
  128. package/plugins/lisa-agy/skills/confluence-prd-intake/SKILL.md +417 -0
  129. package/plugins/lisa-agy/skills/confluence-to-tracker/SKILL.md +360 -0
  130. package/plugins/lisa-agy/skills/confluence-write-prd/SKILL.md +109 -0
  131. package/plugins/lisa-agy/skills/debrief/SKILL.md +94 -0
  132. package/plugins/lisa-agy/skills/debrief-apply/SKILL.md +63 -0
  133. package/plugins/lisa-agy/skills/doctor/SKILL.md +317 -0
  134. package/plugins/lisa-agy/skills/epic-triage/SKILL.md +28 -0
  135. package/plugins/lisa-agy/skills/fix-linter-error/SKILL.md +45 -0
  136. package/plugins/lisa-agy/skills/git-commit/SKILL.md +48 -0
  137. package/plugins/lisa-agy/skills/git-prune/SKILL.md +35 -0
  138. package/plugins/lisa-agy/skills/git-submit-pr/SKILL.md +105 -0
  139. package/plugins/lisa-agy/skills/github-add-journey/SKILL.md +115 -0
  140. package/plugins/lisa-agy/skills/github-build-intake/SKILL.md +377 -0
  141. package/plugins/lisa-agy/skills/github-create/SKILL.md +101 -0
  142. package/plugins/lisa-agy/skills/github-evidence/SKILL.md +110 -0
  143. package/plugins/lisa-agy/skills/github-journey/SKILL.md +121 -0
  144. package/plugins/lisa-agy/skills/github-prd-intake/SKILL.md +432 -0
  145. package/plugins/lisa-agy/skills/github-project-v2/SKILL.md +227 -0
  146. package/plugins/lisa-agy/skills/github-read-issue/SKILL.md +248 -0
  147. package/plugins/lisa-agy/skills/github-sync/SKILL.md +119 -0
  148. package/plugins/lisa-agy/skills/github-to-tracker/SKILL.md +345 -0
  149. package/plugins/lisa-agy/skills/github-validate-issue/SKILL.md +331 -0
  150. package/plugins/lisa-agy/skills/github-verify/SKILL.md +29 -0
  151. package/plugins/lisa-agy/skills/github-write-issue/SKILL.md +339 -0
  152. package/plugins/lisa-agy/skills/github-write-prd/SKILL.md +157 -0
  153. package/plugins/lisa-agy/skills/implement/SKILL.md +145 -0
  154. package/plugins/lisa-agy/skills/improve-code-complexity/SKILL.md +44 -0
  155. package/plugins/lisa-agy/skills/improve-max-lines/SKILL.md +45 -0
  156. package/plugins/lisa-agy/skills/improve-max-lines-per-function/SKILL.md +46 -0
  157. package/plugins/lisa-agy/skills/improve-test-coverage/SKILL.md +44 -0
  158. package/plugins/lisa-agy/skills/improve-tests/SKILL.md +47 -0
  159. package/plugins/lisa-agy/skills/intake/SKILL.md +132 -0
  160. package/plugins/lisa-agy/skills/intake-explain/SKILL.md +279 -0
  161. package/plugins/lisa-agy/skills/jira-add-journey/SKILL.md +121 -0
  162. package/plugins/lisa-agy/skills/jira-build-intake/SKILL.md +286 -0
  163. package/plugins/lisa-agy/skills/jira-create/SKILL.md +154 -0
  164. package/plugins/lisa-agy/skills/jira-evidence/SKILL.md +90 -0
  165. package/plugins/lisa-agy/skills/jira-evidence/scripts/post-evidence.sh +163 -0
  166. package/plugins/lisa-agy/skills/jira-journey/SKILL.md +127 -0
  167. package/plugins/lisa-agy/skills/jira-journey/scripts/generate-templates.py +233 -0
  168. package/plugins/lisa-agy/skills/jira-journey/scripts/parse-plan.py +368 -0
  169. package/plugins/lisa-agy/skills/jira-read-ticket/SKILL.md +198 -0
  170. package/plugins/lisa-agy/skills/jira-read-ticket/scripts/download-attachment.sh +110 -0
  171. package/plugins/lisa-agy/skills/jira-sync/SKILL.md +95 -0
  172. package/plugins/lisa-agy/skills/jira-validate-ticket/SKILL.md +318 -0
  173. package/plugins/lisa-agy/skills/jira-verify/SKILL.md +30 -0
  174. package/plugins/lisa-agy/skills/jira-write-ticket/SKILL.md +265 -0
  175. package/plugins/lisa-agy/skills/jsdoc-best-practices/SKILL.md +432 -0
  176. package/plugins/lisa-agy/skills/linear-add-journey/SKILL.md +105 -0
  177. package/plugins/lisa-agy/skills/linear-build-intake/SKILL.md +283 -0
  178. package/plugins/lisa-agy/skills/linear-create/SKILL.md +146 -0
  179. package/plugins/lisa-agy/skills/linear-evidence/SKILL.md +103 -0
  180. package/plugins/lisa-agy/skills/linear-journey/SKILL.md +134 -0
  181. package/plugins/lisa-agy/skills/linear-prd-intake/SKILL.md +383 -0
  182. package/plugins/lisa-agy/skills/linear-read-issue/SKILL.md +200 -0
  183. package/plugins/lisa-agy/skills/linear-sync/SKILL.md +114 -0
  184. package/plugins/lisa-agy/skills/linear-to-tracker/SKILL.md +342 -0
  185. package/plugins/lisa-agy/skills/linear-validate-issue/SKILL.md +313 -0
  186. package/plugins/lisa-agy/skills/linear-verify/SKILL.md +51 -0
  187. package/plugins/lisa-agy/skills/linear-write-issue/SKILL.md +292 -0
  188. package/plugins/lisa-agy/skills/linear-write-prd/SKILL.md +96 -0
  189. package/plugins/lisa-agy/skills/lisa-review-implementation/SKILL.md +209 -0
  190. package/plugins/lisa-agy/skills/monitor/SKILL.md +48 -0
  191. package/plugins/lisa-agy/skills/nightly-add-test-coverage/SKILL.md +40 -0
  192. package/plugins/lisa-agy/skills/nightly-improve-tests/SKILL.md +29 -0
  193. package/plugins/lisa-agy/skills/nightly-lower-code-complexity/SKILL.md +28 -0
  194. package/plugins/lisa-agy/skills/notion-access/SKILL.md +226 -0
  195. package/plugins/lisa-agy/skills/notion-prd-intake/SKILL.md +360 -0
  196. package/plugins/lisa-agy/skills/notion-to-tracker/SKILL.md +357 -0
  197. package/plugins/lisa-agy/skills/notion-write-prd/SKILL.md +109 -0
  198. package/plugins/lisa-agy/skills/performance-review/SKILL.md +94 -0
  199. package/plugins/lisa-agy/skills/plan/SKILL.md +60 -0
  200. package/plugins/lisa-agy/skills/plugin-sync-explain/SKILL.md +53 -0
  201. package/plugins/lisa-agy/skills/prd-backlink/SKILL.md +265 -0
  202. package/plugins/lisa-agy/skills/prd-source-write/SKILL.md +101 -0
  203. package/plugins/lisa-agy/skills/prd-ticket-coverage/SKILL.md +170 -0
  204. package/plugins/lisa-agy/skills/product-walkthrough/SKILL.md +129 -0
  205. package/plugins/lisa-agy/skills/project-ideation/SKILL.md +315 -0
  206. package/plugins/lisa-agy/skills/project-ideation/examples/evidence-card-format.md +21 -0
  207. package/plugins/lisa-agy/skills/project-ideation/examples/host-project-only.md +22 -0
  208. package/plugins/lisa-agy/skills/project-ideation/examples/idempotency-verification-harness.md +57 -0
  209. package/plugins/lisa-agy/skills/project-ideation/examples/public-external-inspiration.md +22 -0
  210. package/plugins/lisa-agy/skills/project-ideation/examples/unavailable-data-rejection.md +22 -0
  211. package/plugins/lisa-agy/skills/pull-request-review/SKILL.md +68 -0
  212. package/plugins/lisa-agy/skills/quality-review/SKILL.md +54 -0
  213. package/plugins/lisa-agy/skills/queue-status/SKILL.md +133 -0
  214. package/plugins/lisa-agy/skills/repair-intake/SKILL.md +584 -0
  215. package/plugins/lisa-agy/skills/reproduce-bug/SKILL.md +96 -0
  216. package/plugins/lisa-agy/skills/research/SKILL.md +68 -0
  217. package/plugins/lisa-agy/skills/review-local/SKILL.md +88 -0
  218. package/plugins/lisa-agy/skills/root-cause-analysis/SKILL.md +155 -0
  219. package/plugins/lisa-agy/skills/security-review/SKILL.md +57 -0
  220. package/plugins/lisa-agy/skills/security-zap-scan/SKILL.md +33 -0
  221. package/plugins/lisa-agy/skills/setup-atlassian/SKILL.md +347 -0
  222. package/plugins/lisa-agy/skills/setup-automations/SKILL.md +99 -0
  223. package/plugins/lisa-agy/skills/setup-confluence/SKILL.md +254 -0
  224. package/plugins/lisa-agy/skills/setup-github/SKILL.md +268 -0
  225. package/plugins/lisa-agy/skills/setup-jira/SKILL.md +198 -0
  226. package/plugins/lisa-agy/skills/setup-linear/SKILL.md +251 -0
  227. package/plugins/lisa-agy/skills/setup-notion/SKILL.md +316 -0
  228. package/plugins/lisa-agy/skills/spec-conformance/SKILL.md +159 -0
  229. package/plugins/lisa-agy/skills/task-decomposition/SKILL.md +127 -0
  230. package/plugins/lisa-agy/skills/task-triage/SKILL.md +23 -0
  231. package/plugins/lisa-agy/skills/tdd-implementation/SKILL.md +83 -0
  232. package/plugins/lisa-agy/skills/tear-down-automations/SKILL.md +34 -0
  233. package/plugins/lisa-agy/skills/test-strategy/SKILL.md +63 -0
  234. package/plugins/lisa-agy/skills/ticket-triage/SKILL.md +182 -0
  235. package/plugins/lisa-agy/skills/tracker-add-journey/SKILL.md +26 -0
  236. package/plugins/lisa-agy/skills/tracker-build-intake/SKILL.md +64 -0
  237. package/plugins/lisa-agy/skills/tracker-create/SKILL.md +26 -0
  238. package/plugins/lisa-agy/skills/tracker-evidence/SKILL.md +52 -0
  239. package/plugins/lisa-agy/skills/tracker-journey/SKILL.md +26 -0
  240. package/plugins/lisa-agy/skills/tracker-read/SKILL.md +27 -0
  241. package/plugins/lisa-agy/skills/tracker-source-artifacts/SKILL.md +107 -0
  242. package/plugins/lisa-agy/skills/tracker-sync/SKILL.md +51 -0
  243. package/plugins/lisa-agy/skills/tracker-validate/SKILL.md +36 -0
  244. package/plugins/lisa-agy/skills/tracker-verify/SKILL.md +27 -0
  245. package/plugins/lisa-agy/skills/tracker-write/SKILL.md +53 -0
  246. package/plugins/lisa-agy/skills/usage-accounting/SKILL.md +170 -0
  247. package/plugins/lisa-agy/skills/verification-lifecycle/SKILL.md +339 -0
  248. package/plugins/lisa-agy/skills/verify/SKILL.md +49 -0
  249. package/plugins/lisa-agy/skills/verify-prd/SKILL.md +392 -0
  250. package/plugins/lisa-agy/skills/wiki-install/SKILL.md +101 -0
  251. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  252. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  253. package/plugins/lisa-copilot/.claude-plugin/plugin.json +72 -0
  254. package/plugins/lisa-copilot/agents/architecture-specialist.agent.md +47 -0
  255. package/plugins/lisa-copilot/agents/bug-fixer.agent.md +39 -0
  256. package/plugins/lisa-copilot/agents/builder.agent.md +40 -0
  257. package/plugins/lisa-copilot/agents/confluence-prd-intake.agent.md +65 -0
  258. package/plugins/lisa-copilot/agents/debug-specialist.agent.md +114 -0
  259. package/plugins/lisa-copilot/agents/git-history-analyzer.agent.md +183 -0
  260. package/plugins/lisa-copilot/agents/github-agent.agent.md +148 -0
  261. package/plugins/lisa-copilot/agents/github-build-intake.agent.md +64 -0
  262. package/plugins/lisa-copilot/agents/github-prd-intake.agent.md +66 -0
  263. package/plugins/lisa-copilot/agents/jira-agent.agent.md +129 -0
  264. package/plugins/lisa-copilot/agents/jira-build-intake.agent.md +64 -0
  265. package/plugins/lisa-copilot/agents/learner.agent.md +43 -0
  266. package/plugins/lisa-copilot/agents/learnings-synthesizer.agent.md +135 -0
  267. package/plugins/lisa-copilot/agents/linear-agent.agent.md +134 -0
  268. package/plugins/lisa-copilot/agents/linear-build-intake.agent.md +64 -0
  269. package/plugins/lisa-copilot/agents/linear-prd-intake.agent.md +66 -0
  270. package/plugins/lisa-copilot/agents/notion-prd-intake.agent.md +63 -0
  271. package/plugins/lisa-copilot/agents/performance-specialist.agent.md +85 -0
  272. package/plugins/lisa-copilot/agents/pr-mining-specialist.agent.md +85 -0
  273. package/plugins/lisa-copilot/agents/product-specialist.agent.md +63 -0
  274. package/plugins/lisa-copilot/agents/quality-specialist.agent.md +56 -0
  275. package/plugins/lisa-copilot/agents/security-specialist.agent.md +51 -0
  276. package/plugins/lisa-copilot/agents/skill-evaluator.agent.md +245 -0
  277. package/plugins/lisa-copilot/agents/spec-conformance-specialist.agent.md +49 -0
  278. package/plugins/lisa-copilot/agents/test-specialist.agent.md +49 -0
  279. package/plugins/lisa-copilot/agents/tracker-mining-specialist.agent.md +85 -0
  280. package/plugins/lisa-copilot/agents/verification-specialist.agent.md +135 -0
  281. package/plugins/lisa-copilot/commands/automation-status.md +12 -0
  282. package/plugins/lisa-copilot/commands/codify-verification.md +6 -0
  283. package/plugins/lisa-copilot/commands/debrief/apply.md +6 -0
  284. package/plugins/lisa-copilot/commands/debrief.md +6 -0
  285. package/plugins/lisa-copilot/commands/doctor.md +6 -0
  286. package/plugins/lisa-copilot/commands/fix/linter-error.md +7 -0
  287. package/plugins/lisa-copilot/commands/git/commit.md +7 -0
  288. package/plugins/lisa-copilot/commands/git/prune.md +6 -0
  289. package/plugins/lisa-copilot/commands/git/submit-pr.md +7 -0
  290. package/plugins/lisa-copilot/commands/implement.md +6 -0
  291. package/plugins/lisa-copilot/commands/improve/code-complexity.md +6 -0
  292. package/plugins/lisa-copilot/commands/improve/max-lines-per-function.md +7 -0
  293. package/plugins/lisa-copilot/commands/improve/max-lines.md +7 -0
  294. package/plugins/lisa-copilot/commands/improve/test-coverage.md +7 -0
  295. package/plugins/lisa-copilot/commands/improve/tests.md +7 -0
  296. package/plugins/lisa-copilot/commands/intake-explain.md +31 -0
  297. package/plugins/lisa-copilot/commands/intake.md +6 -0
  298. package/plugins/lisa-copilot/commands/monitor.md +6 -0
  299. package/plugins/lisa-copilot/commands/plan.md +6 -0
  300. package/plugins/lisa-copilot/commands/plugin-sync-explain.md +8 -0
  301. package/plugins/lisa-copilot/commands/product-walkthrough.md +7 -0
  302. package/plugins/lisa-copilot/commands/project-ideation.md +6 -0
  303. package/plugins/lisa-copilot/commands/pull-request/review.md +7 -0
  304. package/plugins/lisa-copilot/commands/queue-status.md +34 -0
  305. package/plugins/lisa-copilot/commands/repair-intake.md +6 -0
  306. package/plugins/lisa-copilot/commands/research.md +6 -0
  307. package/plugins/lisa-copilot/commands/review/local.md +6 -0
  308. package/plugins/lisa-copilot/commands/security/zap-scan.md +6 -0
  309. package/plugins/lisa-copilot/commands/setup/atlassian.md +7 -0
  310. package/plugins/lisa-copilot/commands/setup/confluence.md +7 -0
  311. package/plugins/lisa-copilot/commands/setup/github.md +7 -0
  312. package/plugins/lisa-copilot/commands/setup/jira.md +7 -0
  313. package/plugins/lisa-copilot/commands/setup/linear.md +7 -0
  314. package/plugins/lisa-copilot/commands/setup/notion.md +7 -0
  315. package/plugins/lisa-copilot/commands/setup-automations.md +6 -0
  316. package/plugins/lisa-copilot/commands/tear-down-automations.md +6 -0
  317. package/plugins/lisa-copilot/commands/verify-prd.md +6 -0
  318. package/plugins/lisa-copilot/commands/verify.md +6 -0
  319. package/plugins/lisa-copilot/commands/wiki/install.md +7 -0
  320. package/plugins/lisa-copilot/hooks/block-no-verify.sh +37 -0
  321. package/plugins/lisa-copilot/hooks/inject-rules.sh +33 -0
  322. package/plugins/lisa-copilot/hooks/install-pkgs.sh +69 -0
  323. package/plugins/lisa-copilot/hooks/notify-ntfy.sh +183 -0
  324. package/plugins/lisa-copilot/hooks/setup-jira-cli.sh +51 -0
  325. package/plugins/lisa-copilot/rules/eager/base-rules.md +70 -0
  326. package/plugins/lisa-copilot/rules/eager/coding-philosophy.md +27 -0
  327. package/plugins/lisa-copilot/rules/eager/config-resolution.md +28 -0
  328. package/plugins/lisa-copilot/rules/eager/documentation-source-paths.md +13 -0
  329. package/plugins/lisa-copilot/rules/eager/empirical-inquiry.md +22 -0
  330. package/plugins/lisa-copilot/rules/eager/intent-routing.md +18 -0
  331. package/plugins/lisa-copilot/rules/eager/leaf-only-lifecycle.md +39 -0
  332. package/plugins/lisa-copilot/rules/eager/prd-lifecycle-rollup.md +31 -0
  333. package/plugins/lisa-copilot/rules/eager/repo-scope-split.md +39 -0
  334. package/plugins/lisa-copilot/rules/eager/security-audit-handling.md +29 -0
  335. package/plugins/lisa-copilot/rules/eager/usage-accounting.md +28 -0
  336. package/plugins/lisa-copilot/rules/eager/verification.md +21 -0
  337. package/plugins/lisa-copilot/rules/eager/wiki-knowledge-source.md +16 -0
  338. package/plugins/lisa-copilot/rules/reference/base-rules.md +133 -0
  339. package/plugins/lisa-copilot/rules/reference/coding-philosophy.md +428 -0
  340. package/plugins/lisa-copilot/rules/reference/config-resolution.md +691 -0
  341. package/plugins/lisa-copilot/rules/reference/documentation-source-paths.md +13 -0
  342. package/plugins/lisa-copilot/rules/reference/empirical-inquiry.md +27 -0
  343. package/plugins/lisa-copilot/rules/reference/intent-routing.md +407 -0
  344. package/plugins/lisa-copilot/rules/reference/leaf-only-lifecycle.md +120 -0
  345. package/plugins/lisa-copilot/rules/reference/prd-lifecycle-rollup.md +156 -0
  346. package/plugins/lisa-copilot/rules/reference/repo-scope-split.md +58 -0
  347. package/plugins/lisa-copilot/rules/reference/security-audit-handling.md +30 -0
  348. package/plugins/lisa-copilot/rules/reference/usage-accounting.md +144 -0
  349. package/plugins/lisa-copilot/rules/reference/verification.md +124 -0
  350. package/plugins/lisa-copilot/rules/reference/wiki-knowledge-source.md +14 -0
  351. package/plugins/lisa-copilot/scripts/automation-status-claude-adapter.mjs +672 -0
  352. package/plugins/lisa-copilot/scripts/automation-status-codex-adapter.mjs +697 -0
  353. package/plugins/lisa-copilot/scripts/automation-status-contract-drift.mjs +392 -0
  354. package/plugins/lisa-copilot/scripts/automation-status-expected-fleet.mjs +319 -0
  355. package/plugins/lisa-copilot/scripts/automation-status-report.mjs +170 -0
  356. package/plugins/lisa-copilot/scripts/doctor-report.mjs +143 -0
  357. package/plugins/lisa-copilot/scripts/plugin-sync-explain.mjs +512 -0
  358. package/plugins/lisa-copilot/scripts/project-ideation-idempotency-harness.mjs +319 -0
  359. package/plugins/lisa-copilot/scripts/queue-contract-resolution.mjs +453 -0
  360. package/plugins/lisa-copilot/scripts/queue-health-classification.mjs +157 -0
  361. package/plugins/lisa-copilot/scripts/queue-status-build-readers.mjs +509 -0
  362. package/plugins/lisa-copilot/scripts/queue-status-prd-readers.mjs +452 -0
  363. package/plugins/lisa-copilot/skills/acceptance-criteria/SKILL.md +71 -0
  364. package/plugins/lisa-copilot/skills/agent-design-best-practices/SKILL.md +219 -0
  365. package/plugins/lisa-copilot/skills/atlassian-access/SKILL.md +293 -0
  366. package/plugins/lisa-copilot/skills/automation-status/SKILL.md +111 -0
  367. package/plugins/lisa-copilot/skills/bug-triage/SKILL.md +23 -0
  368. package/plugins/lisa-copilot/skills/codebase-research/SKILL.md +87 -0
  369. package/plugins/lisa-copilot/skills/codify-verification/SKILL.md +152 -0
  370. package/plugins/lisa-copilot/skills/confluence-prd-intake/SKILL.md +417 -0
  371. package/plugins/lisa-copilot/skills/confluence-to-tracker/SKILL.md +360 -0
  372. package/plugins/lisa-copilot/skills/confluence-write-prd/SKILL.md +109 -0
  373. package/plugins/lisa-copilot/skills/debrief/SKILL.md +94 -0
  374. package/plugins/lisa-copilot/skills/debrief-apply/SKILL.md +63 -0
  375. package/plugins/lisa-copilot/skills/doctor/SKILL.md +317 -0
  376. package/plugins/lisa-copilot/skills/epic-triage/SKILL.md +28 -0
  377. package/plugins/lisa-copilot/skills/fix-linter-error/SKILL.md +45 -0
  378. package/plugins/lisa-copilot/skills/git-commit/SKILL.md +48 -0
  379. package/plugins/lisa-copilot/skills/git-prune/SKILL.md +35 -0
  380. package/plugins/lisa-copilot/skills/git-submit-pr/SKILL.md +105 -0
  381. package/plugins/lisa-copilot/skills/github-add-journey/SKILL.md +115 -0
  382. package/plugins/lisa-copilot/skills/github-build-intake/SKILL.md +377 -0
  383. package/plugins/lisa-copilot/skills/github-create/SKILL.md +101 -0
  384. package/plugins/lisa-copilot/skills/github-evidence/SKILL.md +110 -0
  385. package/plugins/lisa-copilot/skills/github-journey/SKILL.md +121 -0
  386. package/plugins/lisa-copilot/skills/github-prd-intake/SKILL.md +432 -0
  387. package/plugins/lisa-copilot/skills/github-project-v2/SKILL.md +227 -0
  388. package/plugins/lisa-copilot/skills/github-read-issue/SKILL.md +248 -0
  389. package/plugins/lisa-copilot/skills/github-sync/SKILL.md +119 -0
  390. package/plugins/lisa-copilot/skills/github-to-tracker/SKILL.md +345 -0
  391. package/plugins/lisa-copilot/skills/github-validate-issue/SKILL.md +331 -0
  392. package/plugins/lisa-copilot/skills/github-verify/SKILL.md +29 -0
  393. package/plugins/lisa-copilot/skills/github-write-issue/SKILL.md +339 -0
  394. package/plugins/lisa-copilot/skills/github-write-prd/SKILL.md +157 -0
  395. package/plugins/lisa-copilot/skills/implement/SKILL.md +145 -0
  396. package/plugins/lisa-copilot/skills/improve-code-complexity/SKILL.md +44 -0
  397. package/plugins/lisa-copilot/skills/improve-max-lines/SKILL.md +45 -0
  398. package/plugins/lisa-copilot/skills/improve-max-lines-per-function/SKILL.md +46 -0
  399. package/plugins/lisa-copilot/skills/improve-test-coverage/SKILL.md +44 -0
  400. package/plugins/lisa-copilot/skills/improve-tests/SKILL.md +47 -0
  401. package/plugins/lisa-copilot/skills/intake/SKILL.md +132 -0
  402. package/plugins/lisa-copilot/skills/intake-explain/SKILL.md +279 -0
  403. package/plugins/lisa-copilot/skills/jira-add-journey/SKILL.md +121 -0
  404. package/plugins/lisa-copilot/skills/jira-build-intake/SKILL.md +286 -0
  405. package/plugins/lisa-copilot/skills/jira-create/SKILL.md +154 -0
  406. package/plugins/lisa-copilot/skills/jira-evidence/SKILL.md +90 -0
  407. package/plugins/lisa-copilot/skills/jira-evidence/scripts/post-evidence.sh +163 -0
  408. package/plugins/lisa-copilot/skills/jira-journey/SKILL.md +127 -0
  409. package/plugins/lisa-copilot/skills/jira-journey/scripts/generate-templates.py +233 -0
  410. package/plugins/lisa-copilot/skills/jira-journey/scripts/parse-plan.py +368 -0
  411. package/plugins/lisa-copilot/skills/jira-read-ticket/SKILL.md +198 -0
  412. package/plugins/lisa-copilot/skills/jira-read-ticket/scripts/download-attachment.sh +110 -0
  413. package/plugins/lisa-copilot/skills/jira-sync/SKILL.md +95 -0
  414. package/plugins/lisa-copilot/skills/jira-validate-ticket/SKILL.md +318 -0
  415. package/plugins/lisa-copilot/skills/jira-verify/SKILL.md +30 -0
  416. package/plugins/lisa-copilot/skills/jira-write-ticket/SKILL.md +265 -0
  417. package/plugins/lisa-copilot/skills/jsdoc-best-practices/SKILL.md +432 -0
  418. package/plugins/lisa-copilot/skills/linear-add-journey/SKILL.md +105 -0
  419. package/plugins/lisa-copilot/skills/linear-build-intake/SKILL.md +283 -0
  420. package/plugins/lisa-copilot/skills/linear-create/SKILL.md +146 -0
  421. package/plugins/lisa-copilot/skills/linear-evidence/SKILL.md +103 -0
  422. package/plugins/lisa-copilot/skills/linear-journey/SKILL.md +134 -0
  423. package/plugins/lisa-copilot/skills/linear-prd-intake/SKILL.md +383 -0
  424. package/plugins/lisa-copilot/skills/linear-read-issue/SKILL.md +200 -0
  425. package/plugins/lisa-copilot/skills/linear-sync/SKILL.md +114 -0
  426. package/plugins/lisa-copilot/skills/linear-to-tracker/SKILL.md +342 -0
  427. package/plugins/lisa-copilot/skills/linear-validate-issue/SKILL.md +313 -0
  428. package/plugins/lisa-copilot/skills/linear-verify/SKILL.md +51 -0
  429. package/plugins/lisa-copilot/skills/linear-write-issue/SKILL.md +292 -0
  430. package/plugins/lisa-copilot/skills/linear-write-prd/SKILL.md +96 -0
  431. package/plugins/lisa-copilot/skills/lisa-review-implementation/SKILL.md +209 -0
  432. package/plugins/lisa-copilot/skills/monitor/SKILL.md +48 -0
  433. package/plugins/lisa-copilot/skills/nightly-add-test-coverage/SKILL.md +40 -0
  434. package/plugins/lisa-copilot/skills/nightly-improve-tests/SKILL.md +29 -0
  435. package/plugins/lisa-copilot/skills/nightly-lower-code-complexity/SKILL.md +28 -0
  436. package/plugins/lisa-copilot/skills/notion-access/SKILL.md +226 -0
  437. package/plugins/lisa-copilot/skills/notion-prd-intake/SKILL.md +360 -0
  438. package/plugins/lisa-copilot/skills/notion-to-tracker/SKILL.md +357 -0
  439. package/plugins/lisa-copilot/skills/notion-write-prd/SKILL.md +109 -0
  440. package/plugins/lisa-copilot/skills/performance-review/SKILL.md +94 -0
  441. package/plugins/lisa-copilot/skills/plan/SKILL.md +60 -0
  442. package/plugins/lisa-copilot/skills/plugin-sync-explain/SKILL.md +53 -0
  443. package/plugins/lisa-copilot/skills/prd-backlink/SKILL.md +265 -0
  444. package/plugins/lisa-copilot/skills/prd-source-write/SKILL.md +101 -0
  445. package/plugins/lisa-copilot/skills/prd-ticket-coverage/SKILL.md +170 -0
  446. package/plugins/lisa-copilot/skills/product-walkthrough/SKILL.md +129 -0
  447. package/plugins/lisa-copilot/skills/project-ideation/SKILL.md +315 -0
  448. package/plugins/lisa-copilot/skills/project-ideation/examples/evidence-card-format.md +21 -0
  449. package/plugins/lisa-copilot/skills/project-ideation/examples/host-project-only.md +22 -0
  450. package/plugins/lisa-copilot/skills/project-ideation/examples/idempotency-verification-harness.md +57 -0
  451. package/plugins/lisa-copilot/skills/project-ideation/examples/public-external-inspiration.md +22 -0
  452. package/plugins/lisa-copilot/skills/project-ideation/examples/unavailable-data-rejection.md +22 -0
  453. package/plugins/lisa-copilot/skills/pull-request-review/SKILL.md +68 -0
  454. package/plugins/lisa-copilot/skills/quality-review/SKILL.md +54 -0
  455. package/plugins/lisa-copilot/skills/queue-status/SKILL.md +133 -0
  456. package/plugins/lisa-copilot/skills/repair-intake/SKILL.md +584 -0
  457. package/plugins/lisa-copilot/skills/reproduce-bug/SKILL.md +96 -0
  458. package/plugins/lisa-copilot/skills/research/SKILL.md +68 -0
  459. package/plugins/lisa-copilot/skills/review-local/SKILL.md +88 -0
  460. package/plugins/lisa-copilot/skills/root-cause-analysis/SKILL.md +155 -0
  461. package/plugins/lisa-copilot/skills/security-review/SKILL.md +57 -0
  462. package/plugins/lisa-copilot/skills/security-zap-scan/SKILL.md +33 -0
  463. package/plugins/lisa-copilot/skills/setup-atlassian/SKILL.md +347 -0
  464. package/plugins/lisa-copilot/skills/setup-automations/SKILL.md +99 -0
  465. package/plugins/lisa-copilot/skills/setup-confluence/SKILL.md +254 -0
  466. package/plugins/lisa-copilot/skills/setup-github/SKILL.md +268 -0
  467. package/plugins/lisa-copilot/skills/setup-jira/SKILL.md +198 -0
  468. package/plugins/lisa-copilot/skills/setup-linear/SKILL.md +251 -0
  469. package/plugins/lisa-copilot/skills/setup-notion/SKILL.md +316 -0
  470. package/plugins/lisa-copilot/skills/spec-conformance/SKILL.md +159 -0
  471. package/plugins/lisa-copilot/skills/task-decomposition/SKILL.md +127 -0
  472. package/plugins/lisa-copilot/skills/task-triage/SKILL.md +23 -0
  473. package/plugins/lisa-copilot/skills/tdd-implementation/SKILL.md +83 -0
  474. package/plugins/lisa-copilot/skills/tear-down-automations/SKILL.md +34 -0
  475. package/plugins/lisa-copilot/skills/test-strategy/SKILL.md +63 -0
  476. package/plugins/lisa-copilot/skills/ticket-triage/SKILL.md +182 -0
  477. package/plugins/lisa-copilot/skills/tracker-add-journey/SKILL.md +26 -0
  478. package/plugins/lisa-copilot/skills/tracker-build-intake/SKILL.md +64 -0
  479. package/plugins/lisa-copilot/skills/tracker-create/SKILL.md +26 -0
  480. package/plugins/lisa-copilot/skills/tracker-evidence/SKILL.md +52 -0
  481. package/plugins/lisa-copilot/skills/tracker-journey/SKILL.md +26 -0
  482. package/plugins/lisa-copilot/skills/tracker-read/SKILL.md +27 -0
  483. package/plugins/lisa-copilot/skills/tracker-source-artifacts/SKILL.md +107 -0
  484. package/plugins/lisa-copilot/skills/tracker-sync/SKILL.md +51 -0
  485. package/plugins/lisa-copilot/skills/tracker-validate/SKILL.md +36 -0
  486. package/plugins/lisa-copilot/skills/tracker-verify/SKILL.md +27 -0
  487. package/plugins/lisa-copilot/skills/tracker-write/SKILL.md +53 -0
  488. package/plugins/lisa-copilot/skills/usage-accounting/SKILL.md +170 -0
  489. package/plugins/lisa-copilot/skills/verification-lifecycle/SKILL.md +339 -0
  490. package/plugins/lisa-copilot/skills/verify/SKILL.md +49 -0
  491. package/plugins/lisa-copilot/skills/verify-prd/SKILL.md +392 -0
  492. package/plugins/lisa-copilot/skills/wiki-install/SKILL.md +101 -0
  493. package/plugins/lisa-cursor/.claude-plugin/plugin.json +52 -0
  494. package/plugins/lisa-cursor/agents/architecture-specialist.md +47 -0
  495. package/plugins/lisa-cursor/agents/bug-fixer.md +39 -0
  496. package/plugins/lisa-cursor/agents/builder.md +40 -0
  497. package/plugins/lisa-cursor/agents/confluence-prd-intake.md +65 -0
  498. package/plugins/lisa-cursor/agents/debug-specialist.md +114 -0
  499. package/plugins/lisa-cursor/agents/git-history-analyzer.md +183 -0
  500. package/plugins/lisa-cursor/agents/github-agent.md +148 -0
  501. package/plugins/lisa-cursor/agents/github-build-intake.md +64 -0
  502. package/plugins/lisa-cursor/agents/github-prd-intake.md +66 -0
  503. package/plugins/lisa-cursor/agents/jira-agent.md +129 -0
  504. package/plugins/lisa-cursor/agents/jira-build-intake.md +64 -0
  505. package/plugins/lisa-cursor/agents/learner.md +43 -0
  506. package/plugins/lisa-cursor/agents/learnings-synthesizer.md +135 -0
  507. package/plugins/lisa-cursor/agents/linear-agent.md +134 -0
  508. package/plugins/lisa-cursor/agents/linear-build-intake.md +64 -0
  509. package/plugins/lisa-cursor/agents/linear-prd-intake.md +66 -0
  510. package/plugins/lisa-cursor/agents/notion-prd-intake.md +63 -0
  511. package/plugins/lisa-cursor/agents/performance-specialist.md +85 -0
  512. package/plugins/lisa-cursor/agents/pr-mining-specialist.md +85 -0
  513. package/plugins/lisa-cursor/agents/product-specialist.md +63 -0
  514. package/plugins/lisa-cursor/agents/quality-specialist.md +56 -0
  515. package/plugins/lisa-cursor/agents/security-specialist.md +51 -0
  516. package/plugins/lisa-cursor/agents/skill-evaluator.md +245 -0
  517. package/plugins/lisa-cursor/agents/spec-conformance-specialist.md +49 -0
  518. package/plugins/lisa-cursor/agents/test-specialist.md +49 -0
  519. package/plugins/lisa-cursor/agents/tracker-mining-specialist.md +85 -0
  520. package/plugins/lisa-cursor/agents/verification-specialist.md +135 -0
  521. package/plugins/lisa-cursor/commands/automation-status.md +12 -0
  522. package/plugins/lisa-cursor/commands/codify-verification.md +6 -0
  523. package/plugins/lisa-cursor/commands/debrief/apply.md +6 -0
  524. package/plugins/lisa-cursor/commands/debrief.md +6 -0
  525. package/plugins/lisa-cursor/commands/doctor.md +6 -0
  526. package/plugins/lisa-cursor/commands/fix/linter-error.md +7 -0
  527. package/plugins/lisa-cursor/commands/git/commit.md +7 -0
  528. package/plugins/lisa-cursor/commands/git/prune.md +6 -0
  529. package/plugins/lisa-cursor/commands/git/submit-pr.md +7 -0
  530. package/plugins/lisa-cursor/commands/implement.md +6 -0
  531. package/plugins/lisa-cursor/commands/improve/code-complexity.md +6 -0
  532. package/plugins/lisa-cursor/commands/improve/max-lines-per-function.md +7 -0
  533. package/plugins/lisa-cursor/commands/improve/max-lines.md +7 -0
  534. package/plugins/lisa-cursor/commands/improve/test-coverage.md +7 -0
  535. package/plugins/lisa-cursor/commands/improve/tests.md +7 -0
  536. package/plugins/lisa-cursor/commands/intake-explain.md +31 -0
  537. package/plugins/lisa-cursor/commands/intake.md +6 -0
  538. package/plugins/lisa-cursor/commands/monitor.md +6 -0
  539. package/plugins/lisa-cursor/commands/plan.md +6 -0
  540. package/plugins/lisa-cursor/commands/plugin-sync-explain.md +8 -0
  541. package/plugins/lisa-cursor/commands/product-walkthrough.md +7 -0
  542. package/plugins/lisa-cursor/commands/project-ideation.md +6 -0
  543. package/plugins/lisa-cursor/commands/pull-request/review.md +7 -0
  544. package/plugins/lisa-cursor/commands/queue-status.md +34 -0
  545. package/plugins/lisa-cursor/commands/repair-intake.md +6 -0
  546. package/plugins/lisa-cursor/commands/research.md +6 -0
  547. package/plugins/lisa-cursor/commands/review/local.md +6 -0
  548. package/plugins/lisa-cursor/commands/security/zap-scan.md +6 -0
  549. package/plugins/lisa-cursor/commands/setup/atlassian.md +7 -0
  550. package/plugins/lisa-cursor/commands/setup/confluence.md +7 -0
  551. package/plugins/lisa-cursor/commands/setup/github.md +7 -0
  552. package/plugins/lisa-cursor/commands/setup/jira.md +7 -0
  553. package/plugins/lisa-cursor/commands/setup/linear.md +7 -0
  554. package/plugins/lisa-cursor/commands/setup/notion.md +7 -0
  555. package/plugins/lisa-cursor/commands/setup-automations.md +6 -0
  556. package/plugins/lisa-cursor/commands/tear-down-automations.md +6 -0
  557. package/plugins/lisa-cursor/commands/verify-prd.md +6 -0
  558. package/plugins/lisa-cursor/commands/verify.md +6 -0
  559. package/plugins/lisa-cursor/commands/wiki/install.md +7 -0
  560. package/plugins/lisa-cursor/hooks/block-no-verify.sh +37 -0
  561. package/plugins/lisa-cursor/hooks/install-pkgs.sh +69 -0
  562. package/plugins/lisa-cursor/hooks/notify-ntfy.sh +183 -0
  563. package/plugins/lisa-cursor/hooks/setup-jira-cli.sh +51 -0
  564. package/plugins/lisa-cursor/rules/eager/base-rules.md +70 -0
  565. package/plugins/lisa-cursor/rules/eager/coding-philosophy.md +27 -0
  566. package/plugins/lisa-cursor/rules/eager/config-resolution.md +28 -0
  567. package/plugins/lisa-cursor/rules/eager/documentation-source-paths.md +13 -0
  568. package/plugins/lisa-cursor/rules/eager/empirical-inquiry.md +22 -0
  569. package/plugins/lisa-cursor/rules/eager/intent-routing.md +18 -0
  570. package/plugins/lisa-cursor/rules/eager/leaf-only-lifecycle.md +39 -0
  571. package/plugins/lisa-cursor/rules/eager/prd-lifecycle-rollup.md +31 -0
  572. package/plugins/lisa-cursor/rules/eager/repo-scope-split.md +39 -0
  573. package/plugins/lisa-cursor/rules/eager/security-audit-handling.md +29 -0
  574. package/plugins/lisa-cursor/rules/eager/usage-accounting.md +28 -0
  575. package/plugins/lisa-cursor/rules/eager/verification.md +21 -0
  576. package/plugins/lisa-cursor/rules/eager/wiki-knowledge-source.md +16 -0
  577. package/plugins/lisa-cursor/rules/reference/base-rules.md +133 -0
  578. package/plugins/lisa-cursor/rules/reference/coding-philosophy.md +428 -0
  579. package/plugins/lisa-cursor/rules/reference/config-resolution.md +691 -0
  580. package/plugins/lisa-cursor/rules/reference/documentation-source-paths.md +13 -0
  581. package/plugins/lisa-cursor/rules/reference/empirical-inquiry.md +27 -0
  582. package/plugins/lisa-cursor/rules/reference/intent-routing.md +407 -0
  583. package/plugins/lisa-cursor/rules/reference/leaf-only-lifecycle.md +120 -0
  584. package/plugins/lisa-cursor/rules/reference/prd-lifecycle-rollup.md +156 -0
  585. package/plugins/lisa-cursor/rules/reference/repo-scope-split.md +58 -0
  586. package/plugins/lisa-cursor/rules/reference/security-audit-handling.md +30 -0
  587. package/plugins/lisa-cursor/rules/reference/usage-accounting.md +144 -0
  588. package/plugins/lisa-cursor/rules/reference/verification.md +124 -0
  589. package/plugins/lisa-cursor/rules/reference/wiki-knowledge-source.md +14 -0
  590. package/plugins/lisa-cursor/scripts/automation-status-claude-adapter.mjs +672 -0
  591. package/plugins/lisa-cursor/scripts/automation-status-codex-adapter.mjs +697 -0
  592. package/plugins/lisa-cursor/scripts/automation-status-contract-drift.mjs +392 -0
  593. package/plugins/lisa-cursor/scripts/automation-status-expected-fleet.mjs +319 -0
  594. package/plugins/lisa-cursor/scripts/automation-status-report.mjs +170 -0
  595. package/plugins/lisa-cursor/scripts/doctor-report.mjs +143 -0
  596. package/plugins/lisa-cursor/scripts/plugin-sync-explain.mjs +512 -0
  597. package/plugins/lisa-cursor/scripts/project-ideation-idempotency-harness.mjs +319 -0
  598. package/plugins/lisa-cursor/scripts/queue-contract-resolution.mjs +453 -0
  599. package/plugins/lisa-cursor/scripts/queue-health-classification.mjs +157 -0
  600. package/plugins/lisa-cursor/scripts/queue-status-build-readers.mjs +509 -0
  601. package/plugins/lisa-cursor/scripts/queue-status-prd-readers.mjs +452 -0
  602. package/plugins/lisa-cursor/skills/acceptance-criteria/SKILL.md +71 -0
  603. package/plugins/lisa-cursor/skills/agent-design-best-practices/SKILL.md +219 -0
  604. package/plugins/lisa-cursor/skills/atlassian-access/SKILL.md +293 -0
  605. package/plugins/lisa-cursor/skills/automation-status/SKILL.md +111 -0
  606. package/plugins/lisa-cursor/skills/bug-triage/SKILL.md +23 -0
  607. package/plugins/lisa-cursor/skills/codebase-research/SKILL.md +87 -0
  608. package/plugins/lisa-cursor/skills/codify-verification/SKILL.md +152 -0
  609. package/plugins/lisa-cursor/skills/confluence-prd-intake/SKILL.md +417 -0
  610. package/plugins/lisa-cursor/skills/confluence-to-tracker/SKILL.md +360 -0
  611. package/plugins/lisa-cursor/skills/confluence-write-prd/SKILL.md +109 -0
  612. package/plugins/lisa-cursor/skills/debrief/SKILL.md +94 -0
  613. package/plugins/lisa-cursor/skills/debrief-apply/SKILL.md +63 -0
  614. package/plugins/lisa-cursor/skills/doctor/SKILL.md +317 -0
  615. package/plugins/lisa-cursor/skills/epic-triage/SKILL.md +28 -0
  616. package/plugins/lisa-cursor/skills/fix-linter-error/SKILL.md +45 -0
  617. package/plugins/lisa-cursor/skills/git-commit/SKILL.md +48 -0
  618. package/plugins/lisa-cursor/skills/git-prune/SKILL.md +35 -0
  619. package/plugins/lisa-cursor/skills/git-submit-pr/SKILL.md +105 -0
  620. package/plugins/lisa-cursor/skills/github-add-journey/SKILL.md +115 -0
  621. package/plugins/lisa-cursor/skills/github-build-intake/SKILL.md +377 -0
  622. package/plugins/lisa-cursor/skills/github-create/SKILL.md +101 -0
  623. package/plugins/lisa-cursor/skills/github-evidence/SKILL.md +110 -0
  624. package/plugins/lisa-cursor/skills/github-journey/SKILL.md +121 -0
  625. package/plugins/lisa-cursor/skills/github-prd-intake/SKILL.md +432 -0
  626. package/plugins/lisa-cursor/skills/github-project-v2/SKILL.md +227 -0
  627. package/plugins/lisa-cursor/skills/github-read-issue/SKILL.md +248 -0
  628. package/plugins/lisa-cursor/skills/github-sync/SKILL.md +119 -0
  629. package/plugins/lisa-cursor/skills/github-to-tracker/SKILL.md +345 -0
  630. package/plugins/lisa-cursor/skills/github-validate-issue/SKILL.md +331 -0
  631. package/plugins/lisa-cursor/skills/github-verify/SKILL.md +29 -0
  632. package/plugins/lisa-cursor/skills/github-write-issue/SKILL.md +339 -0
  633. package/plugins/lisa-cursor/skills/github-write-prd/SKILL.md +157 -0
  634. package/plugins/lisa-cursor/skills/implement/SKILL.md +145 -0
  635. package/plugins/lisa-cursor/skills/improve-code-complexity/SKILL.md +44 -0
  636. package/plugins/lisa-cursor/skills/improve-max-lines/SKILL.md +45 -0
  637. package/plugins/lisa-cursor/skills/improve-max-lines-per-function/SKILL.md +46 -0
  638. package/plugins/lisa-cursor/skills/improve-test-coverage/SKILL.md +44 -0
  639. package/plugins/lisa-cursor/skills/improve-tests/SKILL.md +47 -0
  640. package/plugins/lisa-cursor/skills/intake/SKILL.md +132 -0
  641. package/plugins/lisa-cursor/skills/intake-explain/SKILL.md +279 -0
  642. package/plugins/lisa-cursor/skills/jira-add-journey/SKILL.md +121 -0
  643. package/plugins/lisa-cursor/skills/jira-build-intake/SKILL.md +286 -0
  644. package/plugins/lisa-cursor/skills/jira-create/SKILL.md +154 -0
  645. package/plugins/lisa-cursor/skills/jira-evidence/SKILL.md +90 -0
  646. package/plugins/lisa-cursor/skills/jira-evidence/scripts/post-evidence.sh +163 -0
  647. package/plugins/lisa-cursor/skills/jira-journey/SKILL.md +127 -0
  648. package/plugins/lisa-cursor/skills/jira-journey/scripts/generate-templates.py +233 -0
  649. package/plugins/lisa-cursor/skills/jira-journey/scripts/parse-plan.py +368 -0
  650. package/plugins/lisa-cursor/skills/jira-read-ticket/SKILL.md +198 -0
  651. package/plugins/lisa-cursor/skills/jira-read-ticket/scripts/download-attachment.sh +110 -0
  652. package/plugins/lisa-cursor/skills/jira-sync/SKILL.md +95 -0
  653. package/plugins/lisa-cursor/skills/jira-validate-ticket/SKILL.md +318 -0
  654. package/plugins/lisa-cursor/skills/jira-verify/SKILL.md +30 -0
  655. package/plugins/lisa-cursor/skills/jira-write-ticket/SKILL.md +265 -0
  656. package/plugins/lisa-cursor/skills/jsdoc-best-practices/SKILL.md +432 -0
  657. package/plugins/lisa-cursor/skills/linear-add-journey/SKILL.md +105 -0
  658. package/plugins/lisa-cursor/skills/linear-build-intake/SKILL.md +283 -0
  659. package/plugins/lisa-cursor/skills/linear-create/SKILL.md +146 -0
  660. package/plugins/lisa-cursor/skills/linear-evidence/SKILL.md +103 -0
  661. package/plugins/lisa-cursor/skills/linear-journey/SKILL.md +134 -0
  662. package/plugins/lisa-cursor/skills/linear-prd-intake/SKILL.md +383 -0
  663. package/plugins/lisa-cursor/skills/linear-read-issue/SKILL.md +200 -0
  664. package/plugins/lisa-cursor/skills/linear-sync/SKILL.md +114 -0
  665. package/plugins/lisa-cursor/skills/linear-to-tracker/SKILL.md +342 -0
  666. package/plugins/lisa-cursor/skills/linear-validate-issue/SKILL.md +313 -0
  667. package/plugins/lisa-cursor/skills/linear-verify/SKILL.md +51 -0
  668. package/plugins/lisa-cursor/skills/linear-write-issue/SKILL.md +292 -0
  669. package/plugins/lisa-cursor/skills/linear-write-prd/SKILL.md +96 -0
  670. package/plugins/lisa-cursor/skills/lisa-review-implementation/SKILL.md +209 -0
  671. package/plugins/lisa-cursor/skills/monitor/SKILL.md +48 -0
  672. package/plugins/lisa-cursor/skills/nightly-add-test-coverage/SKILL.md +40 -0
  673. package/plugins/lisa-cursor/skills/nightly-improve-tests/SKILL.md +29 -0
  674. package/plugins/lisa-cursor/skills/nightly-lower-code-complexity/SKILL.md +28 -0
  675. package/plugins/lisa-cursor/skills/notion-access/SKILL.md +226 -0
  676. package/plugins/lisa-cursor/skills/notion-prd-intake/SKILL.md +360 -0
  677. package/plugins/lisa-cursor/skills/notion-to-tracker/SKILL.md +357 -0
  678. package/plugins/lisa-cursor/skills/notion-write-prd/SKILL.md +109 -0
  679. package/plugins/lisa-cursor/skills/performance-review/SKILL.md +94 -0
  680. package/plugins/lisa-cursor/skills/plan/SKILL.md +60 -0
  681. package/plugins/lisa-cursor/skills/plugin-sync-explain/SKILL.md +53 -0
  682. package/plugins/lisa-cursor/skills/prd-backlink/SKILL.md +265 -0
  683. package/plugins/lisa-cursor/skills/prd-source-write/SKILL.md +101 -0
  684. package/plugins/lisa-cursor/skills/prd-ticket-coverage/SKILL.md +170 -0
  685. package/plugins/lisa-cursor/skills/product-walkthrough/SKILL.md +129 -0
  686. package/plugins/lisa-cursor/skills/project-ideation/SKILL.md +315 -0
  687. package/plugins/lisa-cursor/skills/project-ideation/examples/evidence-card-format.md +21 -0
  688. package/plugins/lisa-cursor/skills/project-ideation/examples/host-project-only.md +22 -0
  689. package/plugins/lisa-cursor/skills/project-ideation/examples/idempotency-verification-harness.md +57 -0
  690. package/plugins/lisa-cursor/skills/project-ideation/examples/public-external-inspiration.md +22 -0
  691. package/plugins/lisa-cursor/skills/project-ideation/examples/unavailable-data-rejection.md +22 -0
  692. package/plugins/lisa-cursor/skills/pull-request-review/SKILL.md +68 -0
  693. package/plugins/lisa-cursor/skills/quality-review/SKILL.md +54 -0
  694. package/plugins/lisa-cursor/skills/queue-status/SKILL.md +133 -0
  695. package/plugins/lisa-cursor/skills/repair-intake/SKILL.md +584 -0
  696. package/plugins/lisa-cursor/skills/reproduce-bug/SKILL.md +96 -0
  697. package/plugins/lisa-cursor/skills/research/SKILL.md +68 -0
  698. package/plugins/lisa-cursor/skills/review-local/SKILL.md +88 -0
  699. package/plugins/lisa-cursor/skills/root-cause-analysis/SKILL.md +155 -0
  700. package/plugins/lisa-cursor/skills/security-review/SKILL.md +57 -0
  701. package/plugins/lisa-cursor/skills/security-zap-scan/SKILL.md +33 -0
  702. package/plugins/lisa-cursor/skills/setup-atlassian/SKILL.md +347 -0
  703. package/plugins/lisa-cursor/skills/setup-automations/SKILL.md +99 -0
  704. package/plugins/lisa-cursor/skills/setup-confluence/SKILL.md +254 -0
  705. package/plugins/lisa-cursor/skills/setup-github/SKILL.md +268 -0
  706. package/plugins/lisa-cursor/skills/setup-jira/SKILL.md +198 -0
  707. package/plugins/lisa-cursor/skills/setup-linear/SKILL.md +251 -0
  708. package/plugins/lisa-cursor/skills/setup-notion/SKILL.md +316 -0
  709. package/plugins/lisa-cursor/skills/spec-conformance/SKILL.md +159 -0
  710. package/plugins/lisa-cursor/skills/task-decomposition/SKILL.md +127 -0
  711. package/plugins/lisa-cursor/skills/task-triage/SKILL.md +23 -0
  712. package/plugins/lisa-cursor/skills/tdd-implementation/SKILL.md +83 -0
  713. package/plugins/lisa-cursor/skills/tear-down-automations/SKILL.md +34 -0
  714. package/plugins/lisa-cursor/skills/test-strategy/SKILL.md +63 -0
  715. package/plugins/lisa-cursor/skills/ticket-triage/SKILL.md +182 -0
  716. package/plugins/lisa-cursor/skills/tracker-add-journey/SKILL.md +26 -0
  717. package/plugins/lisa-cursor/skills/tracker-build-intake/SKILL.md +64 -0
  718. package/plugins/lisa-cursor/skills/tracker-create/SKILL.md +26 -0
  719. package/plugins/lisa-cursor/skills/tracker-evidence/SKILL.md +52 -0
  720. package/plugins/lisa-cursor/skills/tracker-journey/SKILL.md +26 -0
  721. package/plugins/lisa-cursor/skills/tracker-read/SKILL.md +27 -0
  722. package/plugins/lisa-cursor/skills/tracker-source-artifacts/SKILL.md +107 -0
  723. package/plugins/lisa-cursor/skills/tracker-sync/SKILL.md +51 -0
  724. package/plugins/lisa-cursor/skills/tracker-validate/SKILL.md +36 -0
  725. package/plugins/lisa-cursor/skills/tracker-verify/SKILL.md +27 -0
  726. package/plugins/lisa-cursor/skills/tracker-write/SKILL.md +53 -0
  727. package/plugins/lisa-cursor/skills/usage-accounting/SKILL.md +170 -0
  728. package/plugins/lisa-cursor/skills/verification-lifecycle/SKILL.md +339 -0
  729. package/plugins/lisa-cursor/skills/verify/SKILL.md +49 -0
  730. package/plugins/lisa-cursor/skills/verify-prd/SKILL.md +392 -0
  731. package/plugins/lisa-cursor/skills/wiki-install/SKILL.md +101 -0
  732. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  733. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  734. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  735. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +2 -1
  736. package/plugins/lisa-harper-fabric/hooks/hooks.json +26 -0
  737. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  738. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +2 -1
  739. package/plugins/lisa-nestjs/hooks/hooks.json +15 -0
  740. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  741. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  742. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  743. package/plugins/lisa-rails/.codex-plugin/plugin.json +2 -1
  744. package/plugins/lisa-rails/hooks/hooks.json +41 -0
  745. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  746. package/plugins/lisa-typescript/.codex-plugin/plugin.json +2 -1
  747. package/plugins/lisa-typescript/hooks/format-on-edit.sh +5 -3
  748. package/plugins/lisa-typescript/hooks/hooks.json +34 -0
  749. package/plugins/lisa-typescript/hooks/lint-on-edit.sh +5 -2
  750. package/plugins/lisa-typescript/hooks/sg-scan-on-edit.sh +5 -2
  751. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  752. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  753. package/plugins/src/typescript/hooks/format-on-edit.sh +5 -3
  754. package/plugins/src/typescript/hooks/lint-on-edit.sh +5 -2
  755. package/plugins/src/typescript/hooks/sg-scan-on-edit.sh +5 -2
  756. package/scripts/build-plugins.sh +24 -0
  757. package/scripts/generate-agy-plugin-artifacts.mjs +168 -0
  758. package/scripts/generate-codex-plugin-artifacts.mjs +150 -12
  759. package/scripts/generate-copilot-plugin-artifacts.mjs +235 -0
  760. package/scripts/generate-cursor-plugin-artifacts.mjs +177 -0
  761. package/scripts/internal-agy-skill-policy.json +3 -0
  762. package/scripts/internal-copilot-runtime-probe.json +13 -0
  763. package/scripts/internal-copilot-skill-policy.json +3 -0
  764. package/scripts/internal-cursor-skill-policy.json +3 -0
  765. package/scripts/lib/per-agent-hook-filter.mjs +249 -0
  766. package/scripts/probes/wave3-verification.sh +106 -0
@@ -0,0 +1,156 @@
1
+ # PRD Lifecycle Rollup & Generated-Top-Level-Work Contract
2
+
3
+ This is the single vendor-neutral source of truth for how a PRD owns the work it generates and how its lifecycle rolls up to `shipped` from that work. Every PRD-source and PRD-intake skill (`prd-backlink`, `prd-ticket-coverage`, `*-prd-intake`, `*-to-tracker`) cites this rule by slug rather than restating it, so PRD→child linking and PRD closure rollup behave identically across GitHub, Linear, JIRA/Atlassian, Confluence, and Notion instead of drifting per vendor.
4
+
5
+ It defines four coupled things:
6
+
7
+ 1. **Generated top-level work** — what a PRD owns as children (its created Epics / top-level Stories), explicitly **excluding** leaf Sub-tasks.
8
+ 2. **Per-vendor terminal-state predicate** — how "this generated child is done" is decided for each source/tracker.
9
+ 3. **PRD `shipped` transition + verified native closure** — when and how a PRD rolls up to shipped, remains eligible for verification, and closes only after verified.
10
+ 4. **Idempotency dedupe key** — the child-ref identity that makes linking and rollup safe to re-run.
11
+
12
+ This is the PRD-level companion to `leaf-only-lifecycle`: that rule governs the *build* lifecycle of leaf work units and how a **parent container** rolls up from its leaf children; this rule governs the *PRD* lifecycle and how the **PRD** rolls up from its generated top-level children. The two share the rollup shape (terminal children → parent advances) and the multi-env terminal handling, applied at different levels of the hierarchy.
13
+
14
+ ## Why this exists
15
+
16
+ PRD intake currently comments back with created ticket links, but the PRD is not necessarily the structural parent of the work it generated. That makes lifecycle rollup weaker than it should be: humans cannot always navigate from PRD to generated top-level work using the host tool's hierarchy UI, agents must parse free-form comments instead of reading a first-class relationship, and PRD shipped/closed state is not automatically derived from whether its generated work is done. Worst of all, cross-vendor implementations drift in how they record the PRD-to-work relationship and when they close a PRD.
17
+
18
+ The desired model is vendor-neutral: **the PRD is the source-of-truth parent for the top-level work it generated, and PRD lifecycle completion rolls up from that child set.** That belongs here, in a cross-vendor rule, and every backlink / intake / coverage path enforces it.
19
+
20
+ This surfaced in real GitHub-backed PRD intake (`CodySwannGT/advisory-rankings`): PRD issue #64 generated top-level Epic #65 plus child Stories/Sub-tasks. #65 should be a child/sub-issue of #64, and #64 should eventually transition/close when #65 and its descendants are complete — not before, and not twice.
21
+
22
+ ## Generated top-level work (the contract)
23
+
24
+ **Generated top-level work** is the set of work units a PRD's intake/decomposition *directly created at the top of the hierarchy* and now owns as children:
25
+
26
+ | Class | Examples by type | Owned by the PRD as a child? |
27
+ |---|---|---|
28
+ | **Generated top-level work** | the created **Epic(s)**, and any **top-level Story** created directly under the PRD (a Story with no parent Epic) | **Yes** — these are the PRD's children for rollup |
29
+ | **Descendant work** | **Sub-tasks**, and **Stories that hang under a generated Epic**, and any leaf (Bug/Task/Improvement) under a top-level unit | **No** — owned by their top-level parent, not by the PRD directly |
30
+
31
+ The boundary is **structural, mirroring `leaf-only-lifecycle`'s container/leaf taxonomy but one level up**:
32
+
33
+ - A PRD owns its **top-level** generated units. Those top-level units own their own descendants (per `leaf-only-lifecycle`'s parent-status-rollup state machine).
34
+ - Leaf Sub-tasks are **never** direct children of the PRD when a top-level Epic/Story hierarchy exists (PRD #525 non-goal: "Do not make leaf implementation tasks direct children of the PRD when a top-level Epic/Story hierarchy exists"). The PRD owns top-level generated work; those top-level work units own their descendants.
35
+ - When a PRD decomposes into a flat set with no Epic (e.g. a few top-level Stories or a single leaf Task and nothing under it), the **top-level** items it created are its generated top-level work, whatever their type. The rule is "what the PRD created at the top," not "only Epics."
36
+
37
+ ### How each vendor records the PRD→child relationship
38
+
39
+ The relationship is recorded with the source tool's **native hierarchy first**, falling back to a **durable documented section** in the PRD where native hierarchy is unavailable or the source and destination are different systems (PRD #525: vendors need not all expose identical native hierarchy):
40
+
41
+ - **GitHub Issues** — native **sub-issues**: the generated Epic issue becomes a sub-issue of the PRD issue when the repo supports sub-issues and source and tracker are the same repo. Otherwise a documented `## Tickets` / generated-work section.
42
+ - **Linear** — native **parent / project** relationships: a generated top-level Issue uses `parentId`, or a generated Project groups generated Issues; the PRD's relationship to its top-level Project/Issues is recorded natively where the PRD also lives in Linear.
43
+ - **JIRA** — native **Epic link / parent field** or a documented issue-link type for the PRD→Epic relationship where available.
44
+ - **Confluence / Notion** — no native issue hierarchy for tracker work: the PRD page carries a stable, machine-readable **generated-work section** (e.g. `## Tickets` / `## Generated Work`) listing the top-level refs and URLs.
45
+ - **Cross-vendor** (e.g. Notion PRD → JIRA tracker) — the destination ticket cannot become a native child of the PRD, so the relationship is **always** recorded in the PRD source artifact's documented section.
46
+
47
+ The documented-section fallback is always written so the generated child set is readable later without relying only on free-form comments. Comment summaries are still useful human-facing audit trails and are not removed (PRD #525 non-goal).
48
+
49
+ ### Vendor relationship and closure matrix
50
+
51
+ Use this matrix when implementing or auditing a PRD-source integration. It describes the native relationship to prefer, the documented fallback that must remain durable, and the closure behavior after the all-terminal rollup condition is met.
52
+
53
+ | PRD source / tracker shape | Native hierarchy mechanism | Documented fallback | Closure behavior |
54
+ |---|---|---|---|
55
+ | **GitHub Issues (source and tracker in the same repo)** | Link generated top-level work as native sub-issues of the PRD issue when the repo supports GitHub sub-issues. The PRD's direct sub-issues are the generated top-level child set; descendants under those children are excluded from PRD rollup. | Always maintain the machine-readable `## Tickets` / `## Generated Work` section keyed by `owner/repo#number`, and use it when sub-issues are unavailable, disabled, or incomplete. | Rollup changes the PRD lifecycle label from `prd-ticketed` to `prd-shipped` when every required generated top-level issue is terminal and leaves the issue open for `/lisa:verify-prd`. Verified PASS closes the issue natively. |
56
+ | **Linear** | Use Linear native grouping where the PRD also lives in Linear: generated top-level Issues are related through `parentId`, or a generated Project groups the generated Issues. Read only top-level Issues for PRD rollup. | Use the PRD's machine-readable generated-work section when the destination tracker is not Linear or native project / parent relationships cannot represent the PRD-to-work link. Entries are keyed by Linear issue or project identifier / UUID. | Rollup removes `prd-ticketed` and adds `prd-shipped` to the PRD project when every required generated top-level Issue / Project is completed and leaves it active for `/lisa:verify-prd`. Verified PASS archives/completes it natively. |
57
+ | **JIRA / Atlassian tracker work** | Prefer native Epic / parent fields, or a documented issue-link type where the PRD-to-Epic relationship can be represented in JIRA. JIRA child terminal state is read from the issue's Done status category. | If the PRD source is not JIRA or the native link cannot attach tracker work to the PRD artifact, record generated top-level JIRA issue keys in the PRD's generated-work section. | Rollup may transition a JIRA-hosted PRD to the configured shipped status only after all required generated top-level issues are in the Done status category. Verified PASS performs native completion where supported. |
58
+ | **Confluence PRDs** | No native issue hierarchy for tracker work. Confluence's native structure is used for PRD lifecycle lanes by parent page, not for destination work children. | The Confluence page's machine-readable `## Tickets` / `## Generated Work` section is the primary child source. Top-level generated work entries are keyed by destination ticket ref. | Rollup re-parents the PRD page from the `ticketed` parent to the `shipped` parent when every required generated-work entry is marked done and leaves the page active for `/lisa:verify-prd`. Verified PASS archives it where supported. |
59
+ | **Notion PRDs** | No native issue hierarchy for tracker work. Notion's native status/select property stores PRD lifecycle state, not generated ticket parentage. | The Notion page's machine-readable `## Tickets` / `## Generated Work` section is the primary child source. Top-level generated work entries are keyed by destination ticket ref. | Rollup sets the configured Notion status/select value to `Shipped` when every required generated-work entry is marked done and leaves the page active for `/lisa:verify-prd`. Verified PASS archives it where supported. |
60
+ | **Cross-vendor PRD -> tracker** | Native hierarchy cannot cross systems, so the destination ticket is not expected to become a native child of the PRD artifact. Native tracker hierarchy still applies inside the destination system among generated Epics, Stories, and Sub-tasks. | The source PRD artifact's generated-work section is authoritative for the PRD-to-top-level-work child set, and each entry links to the destination ticket URL / key. | The PRD source owns the lifecycle transition. It evaluates terminal state using the destination tracker's predicate, applies the source vendor's `shipped` transition, leaves the PRD open/active, then `/lisa:verify-prd` owns verified native closure. |
61
+
62
+ ## Per-vendor terminal-state predicate
63
+
64
+ A generated top-level child is **terminal** (counts as done for rollup) when it reaches the source/tracker's done/shipped state. The predicate is vendor-specific; the *semantics* ("this child has shipped") are not:
65
+
66
+ | Vendor | A generated top-level child is terminal when… |
67
+ |---|---|
68
+ | **GitHub Issues** | the issue is **closed** *and* (where the build-status label is used) carries the resolved `done` role label (`status:done` by default — env-keyed; see below). A closed-as-not-planned issue is terminal-but-dropped: it does not hold the PRD open but is excluded from "shipped" (treated like a won't-do leaf). |
69
+ | **Linear** | the Issue/Project is in a **completed** workflow state (`done`-category), **or** a **canceled** state (terminal-but-dropped, like not-planned — does not hold the PRD open, excluded from shipped). |
70
+ | **JIRA** | the issue's status is in the **Done status category** (`statusCategory.key == "done"`). |
71
+ | **Confluence / Notion** | the documented generated-work entry is marked **done** in the PRD's machine-readable section (the durable equivalent of a closed ticket, since these sources have no native ticket state). |
72
+
73
+ Notes:
74
+
75
+ - **Required vs. optional children.** Only the generated top-level children that must ship for the PRD to be complete are counted toward the all-terminal check. Won't-do / canceled / not-planned children are terminal-but-dropped: they do not hold the PRD open and are excluded from the shipped set. This mirrors `leaf-only-lifecycle`'s "required leaves" qualifier.
76
+ - **Recursion is delegated, not duplicated.** A generated Epic is terminal only when *it* has rolled up to its own terminal state per `leaf-only-lifecycle`'s parent-status-rollup (all its required Stories/Sub-tasks terminal). This rule does not re-derive an Epic's state from its leaves — it reads the top-level child's own resolved state and trusts `leaf-only-lifecycle` to have rolled that up bottom-up.
77
+ - **Blocked dominates at the report level.** If any required generated top-level child is blocked or incomplete, rollup leaves the PRD open and reports the incomplete child set (PRD #525: "rollup leaving a PRD open when at least one generated top-level child is incomplete"). The PRD is only advanced when **all** required top-level children are terminal.
78
+
79
+ ### The terminal `done` is the configured, env-keyed value — multi-env capable
80
+
81
+ Where a vendor's terminal predicate references the build-status `done` role (GitHub/Linear labels), that value is the project's configured `done` — which is **env-keyed** (`config-resolution` "Env-keyed `done`"): a map keyed by environment (`dev`, `staging`, `production`), resolved from the merged PR's base branch. This rule does **not** hardcode a `dev → staging → prod` promotion chain; a multi-env project counts a child as terminal when it reaches whichever `done` value matches the environment it shipped to.
82
+
83
+ **Single-environment collapse (this repo).** Lisa's own deploy has only `main`/`production` (`deploy.branches = production: main`, no dev/staging), so `done` is a single value, not a map, and the build lifecycle collapses to one chain: `ready → claimed (in-progress) → review (code-review) → done`. A generated top-level child is terminal when it reaches the single `status:done`; rollup never resolves a `dev` or `staging` `done` in this repo. This is the *collapsed* case of the generic rule, not a different rule — projects with more environments keep the env-keyed map.
84
+
85
+ ## PRD `shipped` transition and verified native closure
86
+
87
+ When **all required** generated top-level children are terminal, the PRD rolls up to its `shipped` PRD-lifecycle state and remains open/active for the initiative-level verification loop:
88
+
89
+ 1. **Transition to `shipped`.** Set the PRD to the configured `shipped` role (`config-resolution` PRD-lifecycle roles: `prd-shipped` label for GitHub/Linear, `Shipped` status for Notion, the shipped parent page for Confluence). The PRD lifecycle is `ready → in_review → (blocked | ticketed) → shipped → verified`; rollup performs the `ticketed → shipped` hop only, and only on the all-terminal condition. The subsequent `shipped → verified` (pass) / `shipped → ticketed` (fail) hops are owned by PRD-level verification (`/lisa:verify-prd`), **not** by this rollup — see "PRD-level verification vs ticket verification" below.
90
+ 2. **Leave `shipped` open for verification.** Rollup never closes, archives, or completes the PRD at the `shipped` hop. `shipped` is the queue for `/lisa:verify-prd`, so closing here would hide the PRD from the acceptance gate.
91
+ 3. **Verified closes natively.** When `/lisa:verify-prd` passes, it transitions `shipped → verified` and then closes, archives, or completes the PRD where the source tool supports a native terminal action. The verified native close is mandatory and idempotent; there is no project-configurable close-on-verified escape hatch.
92
+ 4. **Partial completion is a no-op + report.** If only some required children are terminal, leave the PRD in its current state and report the incomplete/blocked child set. Do not advance, do not close.
93
+
94
+ The PRD never advances to `shipped` on its own authority — it is **derived** from the generated-top-level-child set, exactly as a container's state is derived from its leaves in `leaf-only-lifecycle`.
95
+
96
+ ## PRD-level verification vs ticket verification
97
+
98
+ `shipped` and `verified` are two different terminal facts about a PRD, and they are established by two different flows. Keeping them distinct is the whole point of the `verified` state:
99
+
100
+ | | `shipped` | `verified` |
101
+ |---|---|---|
102
+ | **Meaning** | All generated top-level work is terminal — the work graph is *complete* | The shipped product has been *empirically checked against the PRD itself* |
103
+ | **Established by** | This rollup (`ticketed → shipped`), derived from child-ticket state | `/lisa:verify-prd`, the initiative-level acceptance gate |
104
+ | **Evidence** | The terminal-child set (closed issues / done labels / completed states) | Spec-conformance against the PRD's requirements + empirical proof (browser/computer use, API/CLI/DB checks, screenshots, logs) |
105
+ | **Ownership** | Set by the intake rollup phase; product may also set by hand | Product-owned, like `draft` and `shipped`; set only by `/lisa:verify-prd` |
106
+
107
+ `shipped` is **necessary but not sufficient** for `verified`: a PRD can have every ticket closed while still missing a requirement, diverging from its acceptance criteria, or failing a real user workflow. `verified` is what proves the shipped product actually matches the PRD.
108
+
109
+ **`/lisa:verify` (one work item) vs `/lisa:verify-prd` (the whole initiative).** These are deliberately separate scopes:
110
+
111
+ - **`/lisa:verify`** empirically verifies a **single work item** (a ticket / story / sub-task) in its target environment as part of that item's Build/Fix/Improve flow. It is what drives a build ticket to its `done` state; it operates at the *leaf/build* level (see `leaf-only-lifecycle`). It does **not** read the PRD or judge initiative-level acceptance, and it is **not** replaced by PRD verification.
112
+ - **`/lisa:verify-prd`** is the **initiative-level acceptance gate**. It runs *after* the PRD is `shipped` (all generated top-level work terminal), reads the PRD and its generated child set, confirms the children are terminal, then runs spec-conformance against the original PRD requirements plus empirical verification of the shipped surface. On pass it transitions the PRD `shipped → verified` and posts evidence; on fail it **re-opens the PRD `shipped → ticketed`** (never `blocked`), creates **build-ready fix tickets** for the missing or incorrect behavior (registered as the PRD's generated work) and posts a product-readable failure report — the fix tickets auto-build, rollup re-ships the PRD once they are terminal, and a later cycle re-verifies (self-healing; see "Closing the loop" below). Re-runs are idempotent (no duplicate evidence, fix tickets, or lifecycle transitions).
113
+
114
+ **No extra failure states, and verification never uses `blocked`.** A failed PRD verification does **not** move the PRD to `blocked`; it re-opens the PRD `shipped → ticketed` and creates build-ready fix tickets (see "Closing the loop"), forming a self-healing loop rather than parking the PRD for a human. It introduces no `prd-verifying` or `prd-verification-failed` state — the lifecycle stays intentionally small, and `blocked` remains the *intake* (ready-stage validation) failure state, not the verification one. `verified` is terminal and product-owned (like `draft` and `shipped`); a PRD is never moved to `verified` solely because its tickets are closed, and a PRD is never closed/archived before verification has passed. The vendor maps for the `verified` role (`prd-verified` label for GitHub/Linear, `Verified` status for Notion, the verified parent page for Confluence) live in the `config-resolution` rule.
115
+
116
+ ### Closing the loop: PRD intake dispatches `/lisa:verify-prd` for shipped PRDs
117
+
118
+ `shipped → verified` does not happen on its own — something has to run the acceptance gate. The PRD-intake scanners close that loop: in addition to the `ticketed → shipped` rollup, each PRD-intake cycle **dispatches `/lisa:verify-prd` for a shipped PRD** so a shipped PRD does not sit unverified forever. This is a **dispatch**, not a transition — the intake scanner still never *sets* the verification outcome itself; `/lisa:verify-prd` (which it invokes) performs the `shipped → verified` (pass) or, on fail, the `shipped → ticketed` re-open (it **never** uses `blocked`), with its own guard, evidence, and build-ready fix-ticket creation.
119
+
120
+ **The self-healing FAIL loop.** When verify-prd fails it re-opens the PRD `shipped → ticketed` and creates **build-ready** fix tickets (registered as the PRD's generated work). Because the fix tickets are build-ready they are auto-claimed by the build queue with no human promotion; once they reach terminal, the `ticketed → shipped` rollup (Phase 3f) re-ships the PRD, and the next cycle's verify dispatch (Phase 3g) re-verifies. PASS ends at `verified`; FAIL starts another round. The loop **never auto-halts** (the failure report carries a verification-round count for human visibility) and **never** parks the PRD in `blocked`.
121
+
122
+ Bounded, like the ready claim: `/lisa:verify-prd` is a heavy full flow (spec-conformance + empirical verification + fix-ticket creation), so a scanner verifies **one shipped PRD per cycle** and lets the scheduler drain the rest — the same one-item-per-cycle discipline the `ready` claim uses. After verify-prd runs, the PRD leaves `shipped` (to `verified` on pass, or `ticketed` on fail), so it is not re-picked by the shipped query that cycle; a PRD whose generated work is not actually terminal is guard-stopped by verify-prd and left `shipped` (verify-prd's gate, not the scanner's). This dispatch is **behaviorally identical across all four PRD-intake skills** (the `github` / `linear` / `notion` / `confluence` `*-prd-intake` Phase 3g); only the `shipped`-role query surface differs.
123
+
124
+ ## Idempotency dedupe key
125
+
126
+ Linking and rollup MUST be safe to re-run: re-running intake, backlink, or rollup never produces duplicate child links, duplicate sub-issues, duplicate generated-work entries, or a double `shipped` transition (PRD #525: "Re-running backlink or rollup is idempotent").
127
+
128
+ The dedupe key is **child-ref identity** — the stable, vendor-native identifier of each generated top-level child:
129
+
130
+ - **GitHub** — `owner/repo#number` (the issue ref).
131
+ - **Linear** — the issue/project identifier (e.g. `TEAM-123`) or its UUID.
132
+ - **JIRA** — the issue key (e.g. `PROJ-123`).
133
+ - **Confluence / Notion** — the destination ticket ref recorded in the generated-work entry (the entry is keyed by that ref, not by list position).
134
+
135
+ **Match by stable ref, never by title.** Identity is the child-ref above and *only* the child-ref — never the child's title, summary, or any other mutable field. A child whose **title changed but whose ref is unchanged is the same child**: re-running linking/backlink matches it by ref, updates the displayed title in place, and does **not** create a second link or a duplicate generated-work entry. Conversely, two distinct refs are two distinct children even if their titles happen to be identical. Title-based matching would both miss a renamed child (duplicating it) and falsely collapse two same-named children, so it is never used as the dedupe key (PRD #525: "Dedupe matches by stable ref not title").
136
+
137
+ Apply it as follows:
138
+
139
+ - **Linking** is keyed by child-ref: before adding a native child link or a documented generated-work entry, check whether that exact child-ref is already linked/listed; if so, it's a no-op. The documented generated-work section is **regenerated** from the current child set on each run rather than appended, so re-planning never accumulates stale or duplicate entries (the same regenerate-don't-append discipline `prd-backlink` already uses for its `## Tickets` section).
140
+ - **Rollup** is keyed by the PRD's current state: a PRD already in `shipped` (and closed, when closure is configured) is a no-op — rollup does not re-transition or re-close it. Computing the all-terminal condition over the child-ref set is itself idempotent (a pure function of the children's current states).
141
+
142
+ ## Citation
143
+
144
+ Skills that link generated work to a PRD or roll a PRD up cite this rule by slug (the `prd-lifecycle-rollup` rule) instead of restating it:
145
+
146
+ - **PRD backlink / native linking** (`prd-backlink`) — record generated top-level work as native PRD children where supported; always write the documented generated-work fallback; dedupe by child-ref. *(LPC-1.1 #580, LPC-1.2 #582)*
147
+ - **PRD coverage** (`prd-ticket-coverage`) — read the generated top-level child set deterministically from the recorded relationship, not from free-form comments.
148
+ - **GitHub PRD shipped rollup** (`github-prd-intake`) — detect terminal/incomplete/blocked child sets, transition to `prd-shipped`, and leave the PRD open for `/lisa:verify-prd`. *(LPC-1.3 #583)*
149
+ - **Linear / Confluence / Notion PRD shipped rollup** (`linear-prd-intake`, `confluence-prd-intake`, `notion-prd-intake`) — mirror the GitHub shipped rollup with each vendor's terminal predicate and keep the PRD active for verification. *(LPC-1.3 #584)*
150
+ - **Repair close-out** (`repair-intake`) — re-run the same generated-top-level-work terminal
151
+ predicate to close out PRDs that were left open after all associated child work became terminal,
152
+ without setting the product-owned `verified` role.
153
+ - **Idempotency** (all of the above) — dedupe-by-ref linking and no-op already-shipped rollup. *(LPC-1.4 #585)*
154
+ - **Vendor matrix documentation** — describe native-hierarchy vs documented-link fallback per supported vendor against this contract. *(LPC-1.5 #586)*
155
+
156
+ This is the PRD-level companion to `leaf-only-lifecycle` (which governs the build lifecycle and parent-from-leaves rollup); together they define the full hierarchy: a PRD owns its generated top-level work, which owns its leaves, and terminal state rolls up bottom-to-top — leaf → top-level unit → PRD.
@@ -0,0 +1,58 @@
1
+ # Repo Scope & Work-Time Splitting
2
+
3
+ Leaf work units are single-repo. A **leaf work unit** is an individually implementable ticket with no child tickets — issue types **Bug, Task, Sub-task, Improvement**. Each must name exactly one repository. **Epic, Story, Spike** are coordination containers and may span repos.
4
+
5
+ This invariant is enforced at four points: gate **S10** in the `*-validate-*` skills (write time), `task-decomposition` step 1.5 (PRD-decomposition time), **claim-time repo scoping** in the build-intake skills (when intake decides whether to claim a ready ticket for the current repo — see below), and the work-time split procedure below (when an agent picks up an existing ticket to implement it).
6
+
7
+ ## Two splitting strategies, by phase
8
+
9
+ The strategy depends on whether the tickets exist yet. Do not mix them.
10
+
11
+ - **Decomposition-time (greenfield — no tickets exist yet).** Use `task-decomposition` step 1.5: create one work unit per repo and group them under a **parent Story** (the cross-repo coordination container). Children are per-repo; the parent stays cross-repo. This is the right shape when you are creating the tickets from a PRD in the first place.
12
+ - **Work-time (a ticket already exists and an agent is about to implement it).** Use the procedure below: keep the original ticket, **narrow it to one repo**, spin off a **sibling** per additional repo, and link them with a dependency. Do **not** invent a new parent Story — re-homing an in-flight ticket's hierarchy is more disruptive than narrowing it. The siblings inherit the original's existing parent (Epic/Story/Project) if it has one.
13
+
14
+ ## Work-time split procedure
15
+
16
+ When an agent reads an existing leaf work unit at the pre-flight gate (before any code is written) and the work touches more than one repo, it must STOP and split before proceeding. This is an agent-performed fix, not a product question — like auto-transitioning status, auto-splitting a cross-repo work unit is explicitly allowed (S10 is `product_relevant: false`: a cross-repo work unit is a decomposition error the agent owns, not something to bounce to the reporter).
17
+
18
+ 1. **Detect the repos.** Parse the description, acceptance criteria, and technical approach for repo references, and confirm against the actual code surfaces the change requires. If the work fits in one repo, proceed normally — no split.
19
+ 2. **Pick the repo the original keeps.** Default: the original retains the **consumer / user-facing repo** (e.g. frontend), because that is usually the ticket a stakeholder is watching and the one whose acceptance criteria describe the user-visible outcome. Each **producer repo** (e.g. backend) becomes a new sibling.
20
+ 3. **Create one sibling per additional repo, cloning the original's metadata.** Carry over: summary (re-prefixed `[repo-name]`), the three audience sections, priority, labels/components, parent (Epic/Story/Project) if the original has one, target backend environment, sign-in requirements, and a Validation Journey scoped to that repo. Scope the acceptance criteria to that repo only.
21
+ 4. **Link by dependency.** The producer repo **blocks** the consumer repo (`is blocked by` on the consumer / `blocks` on the producer), so execution order is explicit: the producing sibling ships first. When there is no clear producer/consumer direction, use `relates to`.
22
+ 5. **Narrow the original.** Edit its summary prefix, its `Repository` section, and its acceptance criteria down to the retained repo only. Remove every cross-repo reference ("and the backend should also…").
23
+ 6. **Comment on the original.** Note the split and link each new sibling so the history is auditable.
24
+ 7. **Re-validate.** Run `tracker-verify` (which runs S10) against the original and each new sibling. Every one must now PASS single-repo scope. If any still fails, the split was incomplete — fix it before proceeding.
25
+ 8. **Proceed in dependency order.** Implement the producer sibling(s) first, then the consumer (the narrowed original), respecting the `blocks` links.
26
+
27
+ ### When to block instead of split
28
+
29
+ Auto-split only when the split is unambiguous. Fall back to the standard BLOCK + reassign-to-reporter path (see the pre-flight gate in `base-rules`) when:
30
+
31
+ - The repos touched cannot be determined confidently from the ticket and the code.
32
+ - Splitting would strand stakeholder context that only the reporter can re-scope (e.g. the acceptance criteria describe a single indivisible cross-repo behavior with no clean per-repo boundary).
33
+ - The metadata required to clone (parent, environment, credentials) is itself missing — block on the missing metadata first; do not propagate gaps into the siblings.
34
+
35
+ ## Claim-time repo scoping (build-intake)
36
+
37
+ A ticketing system can oversee multiple repos (one JIRA project / Linear team for `frontend`, `backend`, `infrastructure`). When `lisa:*-build-intake` runs inside one repo, it claims only tickets for **that** repo — it never pulls a ready ticket meant for a sibling repo. This is the fourth enforcement point of the single-repo-leaf invariant; it runs in each vendor build-intake's claim gate (Phase 3a), **before** the leaf-only container gate and the claim.
38
+
39
+ Resolve the current repo per the `config-resolution` "Repo scoping" section (config `repo` → `github.repo` → git remote basename; stop with a clear error if unresolvable). Then walk the ready candidates in priority order and apply the **repo-scope decision** to each before claiming:
40
+
41
+ 1. **Read the candidate's repo marker** — the `repo:<name>` label (JIRA: also a component equal to a repo name).
42
+ - **Labeled for another repo** → **skip** cheaply (do not claim, do not re-determine); it stays `ready` for that repo's own intake. Move to the next candidate.
43
+ - **Labeled for the current repo** → proceed to the leaf-only gate + claim (the cheap, common path once labels exist).
44
+ - **Unlabeled** → **determine** the target repo(s) from the ticket (description, acceptance criteria, technical approach) confirmed against the actual code surfaces the change requires — the same detection as step 1 of the work-time split. Then **stamp** the resolved `repo:<name>` label(s) so future cycles filter cheaply, and re-apply this decision with the now-known repo.
45
+ 2. **Multi-repo leaf → split, never claim.** If determination finds the leaf touches more than one repo, run the **work-time split procedure** below to break it into single-repo siblings — each created **build-ready** (`build_ready: true`, so the build queue auto-claims it) and stamped with its own `repo:<name>`. After the split, the current repo's sibling (if any) becomes a normal current-repo candidate; the others are separate single-repo `ready` leaves for their repos. A multi-repo leaf is never claimed as-is.
46
+ 3. **Wrong repo → skip.** A single-repo leaf whose `repo:<name>` ≠ the current repo is left `ready` (and labeled) and skipped; intake moves on until it finds a claimable current-repo leaf, then stops (one item per cycle).
47
+
48
+ **Cost.** Only **unlabeled** candidates need content determination; once stamped, wrong-repo candidates are skipped by label alone. Prefer candidates already labeled `repo:<current>` first (cheap claim), falling through to unlabeled candidates (determine + stamp) only when no pre-labeled current-repo leaf is ready.
49
+
50
+ A container (Epic/Story/Spike) is handled by the leaf-only gate, not here — containers may span repos, may keep multiple `repo:<name>` labels for visibility, and are never claimed/built directly. Only a leaf work unit is split or skipped by repo scope.
51
+
52
+ ## Vendor mechanics
53
+
54
+ The procedure is vendor-neutral; the create + link + edit mechanics differ:
55
+
56
+ - **JIRA** — create via `mcp__atlassian__createJiraIssue` (clone fields, set the same epic parent); link via `mcp__atlassian__createIssueLink` with `Blocks` / `is blocked by` (resolve names via `mcp__atlassian__getIssueLinkTypes`); narrow the original via `mcp__atlassian__editJiraIssue`; comment via `mcp__atlassian__addCommentToJiraIssue`. See `jira-write-ticket` Phase 6.
57
+ - **GitHub** — create the sibling issue with the same labels and parent sub-issue; encode the dependency in the body (`Blocked by #<n>` / `Blocks #<n>`) and via the sub-issue/parent graph where used; edit the original's body to narrow scope. See `github-write-issue` Phase 6.
58
+ - **Linear** — create via `mcp__linear-server__save_issue` (clone fields, set the same `projectId`); add a blocking relation via the `relations` field or a paired relation call; edit the original to narrow scope. See `linear-write-issue` Phase 6.
@@ -0,0 +1,30 @@
1
+ # Security Audit Handling
2
+
3
+ If `git push` fails because the pre-push hook reports security vulnerabilities, follow these steps. Never use `--no-verify` to bypass the security audit.
4
+
5
+ ## Node.js Projects (GHSA advisories)
6
+
7
+ 1. Note the GHSA ID(s), affected package(s), and advisory URL from the error output
8
+ 2. Check the advisory URL to determine if a patched version of the vulnerable package exists
9
+ 3. If a patched version exists: add a resolution/override in package.json to force the patched version (add to both `resolutions` and `overrides` sections), then run the package manager install command to regenerate the lockfile, commit the changes, and retry the push
10
+ 4. If no patched version exists and the vulnerability is safe for this project (e.g., transitive dependency with no untrusted input, devDeps only, or build tool only): add an exclusion entry to `audit.ignore.local.json` with the format `{"id": "GHSA-xxx", "package": "pkg-name", "reason": "why this is safe for this project"}`, then commit and retry the push
11
+
12
+ ### Critical: Override the vulnerable package, not its parent
13
+
14
+ When the audit output shows a dependency chain like `@expo/cli › glob › minimatch`, the vulnerable package is **minimatch**, not glob. Always override the **leaf package** that has the actual vulnerability.
15
+
16
+ **Never override a parent package to force a lower major version** — other packages in the project may depend on a newer major version, and a resolution/override forces ALL installations to the specified version. For example, overriding `glob` to `^8.1.0` will break `@expo/cli` which requires `glob@^13.0.0`, causing `expo prebuild` to fail with `files.map is not a function`.
17
+
18
+ Before adding a resolution/override, verify:
19
+ - You are targeting the **actually vulnerable package**, not a parent in the chain
20
+ - The override version is **compatible with all dependents** (check with `bun why <package>` or `npm ls <package>`)
21
+ - The override does not **downgrade** a package across a major version boundary that other dependencies require
22
+
23
+ ## Rails Projects (bundler-audit)
24
+
25
+ 1. Note the advisory ID, affected gem, and advisory URL from the error output
26
+ 2. Check if a patched version of the gem exists
27
+ 3. If a patched version exists:
28
+ - If the gem is a **direct dependency** (listed in Gemfile): update its version constraint in Gemfile, run `bundle update <gem>`, commit the changes, and retry the push
29
+ - If the gem is a **transitive dependency** (not in Gemfile, only in Gemfile.lock): run `bundle update <gem>` to pull the patched version without changing the Gemfile, commit the lockfile change, and retry the push
30
+ 4. If no patched version exists and the vulnerability is safe for this project: document the exception and retry the push
@@ -0,0 +1,144 @@
1
+ # Usage Accounting
2
+
3
+ Lisa usage accounting is a vendor-neutral contract for attaching AI usage and cost telemetry to the artifacts Lisa creates or updates. It governs the section shape, machine-readable tokens, source/pricing semantics, rollup behavior, and idempotent rewrite rules. Writer skills and lifecycle skills attach telemetry by following this contract; they do not invent artifact-local formats.
4
+
5
+ ## Managed section
6
+
7
+ Artifacts that support inline body/description content use a single managed section:
8
+
9
+ ```markdown
10
+ ## Lisa Usage
11
+ ```
12
+
13
+ The section is canonical. Rewrite it in place; never append a second usage section under a different heading. If an artifact host cannot safely edit the body, write the same section format in a comment instead and treat that comment body as the managed usage artifact for future rewrites.
14
+
15
+ The visible body is for humans; the hidden tokens are for machines. Both are required.
16
+
17
+ ## Direct-entry schema
18
+
19
+ Each direct usage entry records one logical Lisa run or sub-run on one artifact. The required semantic fields are:
20
+
21
+ | Field | Meaning |
22
+ |---|---|
23
+ | `entry_id` | Stable dedupe key for this logical usage entry. Unique within the artifact graph. |
24
+ | `flow` | `research`, `plan`, `implement`, `verify`, `debrief`, `intake`, `repair-intake`, `monitor`, or a command slug. |
25
+ | `run_id` | Runtime/session identifier when available; empty only when the runtime exposes no stable run id. |
26
+ | `provider` | Model provider name. |
27
+ | `model` | Model identifier. |
28
+ | `source` | `observed`, `estimated`, or `unavailable`. |
29
+ | `input_tokens` | Prompt/input tokens, or `null` when unavailable. |
30
+ | `cached_input_tokens` | Cached/reused input tokens, or `null` when unavailable/not exposed. |
31
+ | `output_tokens` | Output/completion tokens, or `null` when unavailable. |
32
+ | `reasoning_tokens` | Reasoning/internal tokens, or `null` when unavailable/not exposed. |
33
+ | `total_tokens` | Total trustworthy tokens for the entry, or `null`. |
34
+ | `cost` | Observed or estimated cost for this entry, or `null`. |
35
+ | `currency` | ISO currency code when `cost` is known, otherwise `null`. |
36
+ | `pricing_status` | `observed`, `estimated`, `missing`, or `unavailable`. |
37
+ | `pricing_source` | Runtime billing source, config/pricing snapshot ref, or `null`. |
38
+ | `artifact_ref` | Canonical ref of the artifact carrying the entry. |
39
+ | `parent_artifact_ref` | Canonical parent artifact ref when the entry is attached below a parent, otherwise empty. |
40
+
41
+ `entry_id` must be stable across rewrites of the same logical run. Rewriting an existing entry with the same `entry_id` updates it in place. A different run gets a different `entry_id` and is appended as a new direct entry.
42
+
43
+ ## Source semantics
44
+
45
+ `source` describes how trustworthy the token counts are:
46
+
47
+ - `observed`: the runtime supplied the usage directly. Do not replace observed counts with estimates.
48
+ - `estimated`: Lisa derived counts or cost from trustworthy runtime metadata plus an explicit pricing contract. Estimates are allowed only when the derivation inputs are real and attributable to the run.
49
+ - `unavailable`: Lisa could not obtain trustworthy usage data. Write the entry anyway with `null` token/cost fields rather than silently omitting the row.
50
+
51
+ The absence of data is never treated as zero. `null` means unknown; `0` means explicitly observed or derived zero.
52
+
53
+ For example, an unavailable Verify run still records a direct entry with `source = unavailable`,
54
+ `pricing_status = unavailable`, and `null` token/cost fields so downstream readers can distinguish
55
+ "missing telemetry" from "zero usage."
56
+
57
+ ## Pricing semantics
58
+
59
+ `pricing_status` describes how trustworthy the money fields are:
60
+
61
+ - `observed`: runtime supplied a trustworthy monetary cost.
62
+ - `estimated`: Lisa calculated cost from trustworthy token counts plus explicit pricing metadata.
63
+ - `missing`: token counts are known but no trustworthy price source exists yet.
64
+ - `unavailable`: the runtime exposed neither trustworthy cost nor enough trustworthy token data to estimate cost.
65
+
66
+ Runtime-observed cost always wins over estimates. Estimated cost never overwrites an observed value. Missing pricing preserves token counts and a `null` cost.
67
+
68
+ ## Machine-readable tokens
69
+
70
+ Every visible direct entry row ends with exactly one machine-readable token:
71
+
72
+ ```text
73
+ <!-- lisa:usage-entry entry_id=<id> flow=<flow> run_id=<run-id> provider=<provider> model=<model> source=<source> input_tokens=<n|null> cached_input_tokens=<n|null> output_tokens=<n|null> reasoning_tokens=<n|null> total_tokens=<n|null> cost=<decimal|null> currency=<code|null> pricing_status=<status> pricing_source=<ref|null> artifact_ref=<ref> parent_artifact_ref=<ref-or-empty> -->
74
+ ```
75
+
76
+ Field order is fixed. A reader parses the usage ledger by matching `<!-- lisa:usage-entry ` lines only; it never needs to scrape prose or table cell positions. String fields are percent-encoded before rendering and decoded after parsing, so whitespace, commas, and HTML comment terminators inside source values cannot split or truncate the token.
77
+
78
+ Every managed section also ends with exactly one rollup token:
79
+
80
+ ```text
81
+ <!-- lisa:usage-rollup direct_entry_ids=<csv> child_entry_ids=<csv> child_refs=<csv> direct_tokens=<n|null> child_tokens=<n|null> total_tokens=<n|null> direct_cost=<decimal|null> child_cost=<decimal|null> total_cost=<decimal|null> currency=<code|null> -->
82
+ ```
83
+
84
+ - `direct_entry_ids` enumerates the entries attached directly to the current artifact.
85
+ - `child_entry_ids` enumerates deduped descendant entry ids included in the rollup.
86
+ - `child_refs` enumerates the child artifacts consulted for the rollup.
87
+ - `total_*` fields equal direct plus child totals over the deduped entry set.
88
+
89
+ The rollup token is the machine-readable summary. The visible rollup table mirrors it for humans. List fields are comma-delimited after encoding each item independently; commas inside an item are encoded as data, not treated as separators.
90
+
91
+ ## Visible rendering contract
92
+
93
+ The canonical body layout is:
94
+
95
+ ```markdown
96
+ ## Lisa Usage
97
+
98
+ _Managed by Lisa. Regenerated on each usage update; do not edit by hand._
99
+
100
+ ### Direct Usage
101
+
102
+ | Flow | Model | Source | Tokens | Cost |
103
+ |---|---|---|---:|---:|
104
+ | ...human-readable rows ending with `lisa:usage-entry` tokens... |
105
+
106
+ ### Rollup
107
+
108
+ | Scope | Tokens | Cost |
109
+ |---|---:|---:|
110
+ | Direct | ... | ... |
111
+ | Child | ... | ... |
112
+ | Total | ... | ... |
113
+
114
+ <!-- lisa:usage-rollup ... -->
115
+ ```
116
+
117
+ Writers may add host-specific surrounding prose, but they must preserve the heading, the managed-note line, the direct-entry tokens, and the single rollup token.
118
+
119
+ ## Rollup and dedupe behavior
120
+
121
+ Rollups aggregate descendant usage from native tracker hierarchy, documented generated-work references, and explicit `parent_artifact_ref` links. Within one artifact rollup:
122
+
123
+ - Dedupe strictly by stable `entry_id`.
124
+ - Count each `entry_id` at most once even if the same descendant is discoverable through more than one path.
125
+ - Preserve direct totals separately from child totals.
126
+ - Exclude descendant entries whose `entry_id` is already present in the artifact's direct-entry set.
127
+
128
+ Concrete example: if child artifact A and child artifact B both surface descendant entry
129
+ `verify-123`, the parent rollup lists `verify-123` once in `child_entry_ids`. If the parent also
130
+ records `verify-123` directly, exclude that descendant copy from child totals and keep the entry in
131
+ the direct half only.
132
+
133
+ The rollup contract is additive across the hierarchy: PRDs may roll up Epics/Stories/leaves, and leaves may roll up evidence or verification artifacts, without double counting shared descendants.
134
+
135
+ ## Idempotent rewrite rules
136
+
137
+ - There is exactly one managed `## Lisa Usage` section per artifact body/comment.
138
+ - Recompute the entire section on every write; never append ad hoc rows.
139
+ - Sort direct entries deterministically by `(flow, run_id, entry_id)`.
140
+ - Preserve existing entries with unchanged `entry_id` and refreshed field values.
141
+ - Re-running with the same logical entry set must produce byte-identical output.
142
+ - Do not include timestamps in the section preamble or token lines.
143
+
144
+ Idempotency is enforced by `entry_id` for direct entries and by the fixed rollup token field order for totals.
@@ -0,0 +1,124 @@
1
+ # Empirical Verification
2
+
3
+ This repository supports AI agents as first-class contributors.
4
+
5
+ This file is the operational contract that defines how agents plan work, execute changes, verify outcomes, and escalate when blocked.
6
+
7
+ If anything here conflicts with other repo docs, treat this file as authoritative for agent behavior.
8
+
9
+ ---
10
+
11
+ ## Core Principle
12
+
13
+ Agents must close the loop between code changes and observable system behavior.
14
+
15
+ No agent may claim success without evidence from runtime verification.
16
+
17
+ Never assume something works because the code "looks correct." Run a command, observe the output, compare to expected result.
18
+
19
+ **Verification is not linting, typechecking, or testing.** Those are **quality checks** — prerequisites that must pass before verification begins, but they are NOT verification themselves. Running `bun run test`, `bun run typecheck`, `bun run lint`, or `bun run format` is a quality check. Verification is using the resulting software the way a user would — interacting with the UI, calling the API, running the CLI command, observing the behavior. Tests pass in isolation; verification proves the system works as a whole.
20
+
21
+ **If all you did was run tests, typecheck, and lint — you have NOT verified.** You have only confirmed quality checks pass. Verification requires running the actual system and observing the results: making HTTP requests, clicking through the UI, executing CLI commands, querying the database, or otherwise interacting with the running software as an end user would.
22
+
23
+ Verification is mandatory. Never skip it, defer it, or claim it was unnecessary. Every task must be verified before claiming completion.
24
+
25
+ Before starting implementation, state your verification plan — how you will use the resulting software to prove it works. A verification plan that only lists test/typecheck/lint commands is not a verification plan. Do not begin implementation until the plan is confirmed.
26
+
27
+ After verifying a change empirically, encode that verification as an automated regression test via the `codify-verification` skill. The manual proof that something works must become a repeatable test that catches future regressions — Playwright for UI/browser flows, integration test for API/DB/auth, benchmark for performance, etc. Codification is mandatory for every empirical verification type except the inherently non-behavioral ones (PR, Documentation, Deploy) and Investigate-Only spikes. If codification is genuinely impossible, escalate via the Escalation Protocol — never silently skip.
28
+
29
+ Every pull request must include step-by-step instructions for reviewers to independently replicate the verification. These are not test commands — they are the exact steps a human would follow to use the software and confirm the change works. If a reviewer cannot reproduce your verification from the PR description alone, the PR is incomplete.
30
+
31
+ ---
32
+
33
+ ## Roles
34
+
35
+ ### Builder Agent
36
+
37
+ Implements the change in code and infrastructure.
38
+
39
+ ### Verifier Agent
40
+
41
+ Acts as the end user (human user, API client, operator, attacker, or system) and produces proof artifacts.
42
+
43
+ Verifier Agent must be independent from Builder Agent when possible.
44
+
45
+ ### Human Overseer
46
+
47
+ Approves risky operations, security boundary crossings, and any work the agents cannot fully verify.
48
+
49
+ ---
50
+
51
+ ## Verification Levels
52
+
53
+ Agents must label every task outcome with exactly one of these:
54
+
55
+ - **FULLY VERIFIED**: Verified in the target environment with end-user simulation and captured artifacts.
56
+ - **PARTIALLY VERIFIED**: Verified in a lower-fidelity environment or with incomplete surfaces, with explicit gaps documented.
57
+ - **UNVERIFIED**: Verification blocked, human action required, no claim of correctness permitted.
58
+
59
+ ---
60
+
61
+ ## Quality Gates (Prerequisites)
62
+
63
+ These are NOT verification. They are prerequisites that must pass before verification begins. Running these does not constitute verification — it only confirms code quality.
64
+
65
+ | Gate | What to prove | Acceptable proof |
66
+ |------|---------------|------------------|
67
+ | **Test** | Unit and integration tests pass for all changed code paths | Test runner output showing all relevant tests green with no skips |
68
+ | **Type Safety** | No type errors introduced by the change | Type checker exits clean on the full project |
69
+ | **Lint/Format** | Code meets project style and quality rules | Linter and formatter exit clean on changed files |
70
+
71
+ Quality gates are enforced automatically by the self-correction loop (hooks, pre-commit, pre-push). Passing all quality gates is necessary but NOT sufficient — you must still verify empirically.
72
+
73
+ ---
74
+
75
+ ## Verification Types
76
+
77
+ Every change requires one or more verification types. Classify the change first, then verify each applicable type by **running the actual system and observing results**.
78
+
79
+ | Type | When it applies | What to prove | Acceptable proof |
80
+ |------|----------------|---------------|------------------|
81
+ | **UI** | Change affects user-visible interface | Feature renders correctly and interactions work as expected | Automated session recording or screenshots showing correct states; for cross-platform changes, evidence from each platform or explicit gap documentation |
82
+ | **API** | Change affects HTTP/GraphQL/RPC endpoints | Endpoint returns correct status, headers, and body for success and error cases | Request/response capture showing schema and data match expectations |
83
+ | **Database** | Change involves schema, migrations, or queries | Schema is correct after migration; data integrity is maintained | Query output showing expected schema and data state |
84
+ | **Auth** | Change affects authentication or authorization | Correct access for allowed roles; rejection for disallowed roles | Request traces showing enforcement across at least two roles |
85
+ | **Security** | Change involves input handling, secrets, or attack surfaces | Exploit is prevented; safe handling is enforced | Reproduction of attack pre-fix failing post-fix, or evidence of sanitization/rejection |
86
+ | **Performance** | Change claims performance improvement or affects hot paths | Measurable improvement in latency, throughput, or resource usage | Before/after benchmarks with methodology documented |
87
+ | **Infrastructure** | Change affects deployment, scaling, or cloud resources | Resources are created/updated correctly; system is stable | Infrastructure state output showing expected configuration; stability metrics during transition |
88
+ | **Observability** | Change affects logging, metrics, or tracing | Events are emitted with correct structure and correlation | Log or metric output showing expected entries with correlation IDs |
89
+ | **Background Jobs** | Change affects queues, workers, or scheduled tasks | Job enqueues, processes, and reaches terminal state correctly | Evidence of enqueue, processing, and final state; idempotency check when relevant |
90
+ | **Configuration** | Change affects config files, feature flags, or environment variables | Configuration is loaded and applied correctly at runtime | Application output showing the configuration taking effect |
91
+ | **Documentation** | Change affects documentation content or structure | Documentation is accurate and matches implementation | Content inspection confirming accuracy against actual behavior |
92
+ | **Cache** | Change affects caching behavior or invalidation | Cache hits, misses, and invalidation work as expected | Evidence of cache behavior (hit/miss logs, TTL verification, key inspection) |
93
+ | **Email/Notification** | Change affects outbound messages | Message is sent with correct content to correct recipient | Captured message content or delivery log showing expected output |
94
+ | **PR** | Shipping code (always applies when opening a PR) | PR includes goal summary, verification level, proof artifacts, and reproduction steps | PR description containing all required sections |
95
+ | **Deploy** | Shipping code to an environment | Deployment completes and application is healthy in the target environment | Deployment output and health check evidence from the target environment |
96
+
97
+ ---
98
+
99
+ ## Per-Work-Unit Evidence Contract
100
+
101
+ Every **leaf work unit** — an individually implementable ticket with no child tickets (issue types Bug, Task, Sub-task, Improvement) — that changes runtime behavior must declare, at creation time, the exact evidence that proves it is done. Epics, Stories, and Spikes are coordination containers, not work units: their evidence is the rollup of their children, so this contract does not apply to them.
102
+
103
+ The declaration is not a separate field — it is the set of `[EVIDENCE: name]` markers in the work unit's **Validation Journey**. Those markers are the work unit's **evidence manifest**: an enumerated, named list of the artifacts a verifier must capture. The manifest binds both ends of the ticket lifecycle:
104
+
105
+ - **At creation** — the work unit cannot be written without a Validation Journey that names at least one `[EVIDENCE: name]` artifact (enforced by gate S14 in `tracker-validate` and the vendor `*-validate-*` skills). A behavior-changing unit should name both a success artifact and an error/edge artifact.
106
+ - **At completion** — the work unit cannot be marked complete, nor transitioned to its review/Done state, until every `[EVIDENCE: name]` marker in its manifest has a captured, non-empty artifact attached to the ticket (enforced by the Task Completion Rules and Definition of Done in `verification-lifecycle`, and by the evidence-manifest gate in `tracker-evidence`). A manifest with a missing or empty artifact blocks completion exactly like a failed verification.
107
+
108
+ The manifest is the single source of truth for "what evidence is required": authored once in the Validation Journey, enforced at write time, replayed during `tracker-journey`, and checked again before the ticket closes. There is no second list to keep in sync.
109
+
110
+ ---
111
+
112
+ ## Local vs Remote Verification
113
+
114
+ Verification happens at two stages in the workflow:
115
+
116
+ - **Quality gates** (enforced automatically): Tests, typecheck, lint, and format run via hooks at write-time, commit-time, and push-time. These are prerequisites, not verification.
117
+ - **Local verification** (part of the Implement flow): After quality gates pass, empirically verify the change by running the actual system in a local or preview environment — make HTTP requests, interact with the UI, execute CLI commands, query the database. This proves the change works before shipping. After local verification succeeds, invoke `codify-verification` to encode it as a regression test (Playwright for UI, integration test for API/DB/auth, benchmark for performance, etc.) and commit the test in the same PR.
118
+ - **Remote verification** (part of the Verify flow): After the PR is merged and deployed, repeat the same empirical verification against the target environment. This proves the change works in production, not just locally. If remote verification fails, fix and re-deploy.
119
+
120
+ Both levels use the same verification types table above. The difference is the environment, not the rigor.
121
+
122
+ ---
123
+
124
+ For the full verification lifecycle (classify, check tooling, plan, execute, loop), surfaces, escalation protocol, and proof artifact requirements, see the `verification-lifecycle` skill loaded by the `verification-specialist` agent.
@@ -0,0 +1,14 @@
1
+ # Wiki as Knowledge Source
2
+
3
+ If this project has an LLM Wiki (a `wiki/` directory with an `index.md`), treat it as the canonical source of durable project knowledge. The wiki is curated and current; ad-hoc scraping of code, tickets, chat history, or stale READMEs is not.
4
+
5
+ Before researching project background, conventions, ownership, architecture, glossary terms, or "how/why does X work here":
6
+
7
+ 1. Consult the wiki first. Start from `wiki/index.md` and follow links, or use the wiki query skill (`/lisa-wiki-query`, or the runtime's wiki query skill) to find the relevant page.
8
+ 2. Use what the wiki says as the authoritative answer when it covers the question. Do not re-derive it from raw sources when the wiki already documents it.
9
+ 3. Fall back to primary sources (code, tickets, commit history, external docs) only when the wiki is silent, ambiguous, or contradicted by what you observe in the code.
10
+ 4. If you find the wiki is wrong, stale, or missing knowledge that belongs there, surface the gap — and where the project's workflow supports it, capture the correction back into the wiki via its ingestion path (`/lisa-wiki-ingest` or equivalent) rather than leaving the knowledge only in this session.
11
+
12
+ The wiki documents knowledge; it does not override executable behavior. When the wiki and the running code disagree about what the system actually does, trust the code and treat the wiki as out of date. See the `documentation-source-paths` rule for how source-material directories relate to the wiki.
13
+
14
+ If the project has no `wiki/`, this rule does not apply.