@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.
- package/.claude-plugin/marketplace.json +18 -0
- package/dist/agy/agents-md-installer.d.ts +24 -0
- package/dist/agy/agents-md-installer.d.ts.map +1 -0
- package/dist/agy/agents-md-installer.js +126 -0
- package/dist/agy/agents-md-installer.js.map +1 -0
- package/dist/agy/mcp-installer.d.ts +102 -0
- package/dist/agy/mcp-installer.d.ts.map +1 -0
- package/dist/agy/mcp-installer.js +155 -0
- package/dist/agy/mcp-installer.js.map +1 -0
- package/dist/agy/plugin-installer.d.ts +21 -0
- package/dist/agy/plugin-installer.d.ts.map +1 -0
- package/dist/agy/plugin-installer.js +88 -0
- package/dist/agy/plugin-installer.js.map +1 -0
- package/dist/claude/claude-md-installer.d.ts +18 -0
- package/dist/claude/claude-md-installer.d.ts.map +1 -0
- package/dist/claude/claude-md-installer.js +62 -0
- package/dist/claude/claude-md-installer.js.map +1 -0
- package/dist/codex/lisa-plugin-detection.d.ts +68 -0
- package/dist/codex/lisa-plugin-detection.d.ts.map +1 -0
- package/dist/codex/lisa-plugin-detection.js +139 -0
- package/dist/codex/lisa-plugin-detection.js.map +1 -0
- package/dist/copilot/copilot-instructions-installer.d.ts +18 -0
- package/dist/copilot/copilot-instructions-installer.d.ts.map +1 -0
- package/dist/copilot/copilot-instructions-installer.js +61 -0
- package/dist/copilot/copilot-instructions-installer.js.map +1 -0
- package/dist/copilot/plugin-installer.d.ts +29 -0
- package/dist/copilot/plugin-installer.d.ts.map +1 -0
- package/dist/copilot/plugin-installer.js +144 -0
- package/dist/copilot/plugin-installer.js.map +1 -0
- package/dist/core/config.d.ts +28 -4
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +24 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/lisa.d.ts +35 -0
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +99 -2
- package/dist/core/lisa.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +2 -1
- package/plugins/lisa/hooks/hooks.json +75 -0
- package/plugins/lisa-agy/agents/architecture-specialist.md +47 -0
- package/plugins/lisa-agy/agents/bug-fixer.md +39 -0
- package/plugins/lisa-agy/agents/builder.md +40 -0
- package/plugins/lisa-agy/agents/confluence-prd-intake.md +65 -0
- package/plugins/lisa-agy/agents/debug-specialist.md +114 -0
- package/plugins/lisa-agy/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-agy/agents/github-agent.md +148 -0
- package/plugins/lisa-agy/agents/github-build-intake.md +64 -0
- package/plugins/lisa-agy/agents/github-prd-intake.md +66 -0
- package/plugins/lisa-agy/agents/jira-agent.md +129 -0
- package/plugins/lisa-agy/agents/jira-build-intake.md +64 -0
- package/plugins/lisa-agy/agents/learner.md +43 -0
- package/plugins/lisa-agy/agents/learnings-synthesizer.md +135 -0
- package/plugins/lisa-agy/agents/linear-agent.md +134 -0
- package/plugins/lisa-agy/agents/linear-build-intake.md +64 -0
- package/plugins/lisa-agy/agents/linear-prd-intake.md +66 -0
- package/plugins/lisa-agy/agents/notion-prd-intake.md +63 -0
- package/plugins/lisa-agy/agents/performance-specialist.md +85 -0
- package/plugins/lisa-agy/agents/pr-mining-specialist.md +85 -0
- package/plugins/lisa-agy/agents/product-specialist.md +63 -0
- package/plugins/lisa-agy/agents/quality-specialist.md +56 -0
- package/plugins/lisa-agy/agents/security-specialist.md +51 -0
- package/plugins/lisa-agy/agents/skill-evaluator.md +245 -0
- package/plugins/lisa-agy/agents/spec-conformance-specialist.md +49 -0
- package/plugins/lisa-agy/agents/test-specialist.md +49 -0
- package/plugins/lisa-agy/agents/tracker-mining-specialist.md +85 -0
- package/plugins/lisa-agy/agents/verification-specialist.md +135 -0
- package/plugins/lisa-agy/commands/automation-status.md +12 -0
- package/plugins/lisa-agy/commands/codify-verification.md +6 -0
- package/plugins/lisa-agy/commands/debrief/apply.md +6 -0
- package/plugins/lisa-agy/commands/debrief.md +6 -0
- package/plugins/lisa-agy/commands/doctor.md +6 -0
- package/plugins/lisa-agy/commands/fix/linter-error.md +7 -0
- package/plugins/lisa-agy/commands/git/commit.md +7 -0
- package/plugins/lisa-agy/commands/git/prune.md +6 -0
- package/plugins/lisa-agy/commands/git/submit-pr.md +7 -0
- package/plugins/lisa-agy/commands/implement.md +6 -0
- package/plugins/lisa-agy/commands/improve/code-complexity.md +6 -0
- package/plugins/lisa-agy/commands/improve/max-lines-per-function.md +7 -0
- package/plugins/lisa-agy/commands/improve/max-lines.md +7 -0
- package/plugins/lisa-agy/commands/improve/test-coverage.md +7 -0
- package/plugins/lisa-agy/commands/improve/tests.md +7 -0
- package/plugins/lisa-agy/commands/intake-explain.md +31 -0
- package/plugins/lisa-agy/commands/intake.md +6 -0
- package/plugins/lisa-agy/commands/monitor.md +6 -0
- package/plugins/lisa-agy/commands/plan.md +6 -0
- package/plugins/lisa-agy/commands/plugin-sync-explain.md +8 -0
- package/plugins/lisa-agy/commands/product-walkthrough.md +7 -0
- package/plugins/lisa-agy/commands/project-ideation.md +6 -0
- package/plugins/lisa-agy/commands/pull-request/review.md +7 -0
- package/plugins/lisa-agy/commands/queue-status.md +34 -0
- package/plugins/lisa-agy/commands/repair-intake.md +6 -0
- package/plugins/lisa-agy/commands/research.md +6 -0
- package/plugins/lisa-agy/commands/review/local.md +6 -0
- package/plugins/lisa-agy/commands/security/zap-scan.md +6 -0
- package/plugins/lisa-agy/commands/setup/atlassian.md +7 -0
- package/plugins/lisa-agy/commands/setup/confluence.md +7 -0
- package/plugins/lisa-agy/commands/setup/github.md +7 -0
- package/plugins/lisa-agy/commands/setup/jira.md +7 -0
- package/plugins/lisa-agy/commands/setup/linear.md +7 -0
- package/plugins/lisa-agy/commands/setup/notion.md +7 -0
- package/plugins/lisa-agy/commands/setup-automations.md +6 -0
- package/plugins/lisa-agy/commands/tear-down-automations.md +6 -0
- package/plugins/lisa-agy/commands/verify-prd.md +6 -0
- package/plugins/lisa-agy/commands/verify.md +6 -0
- package/plugins/lisa-agy/commands/wiki/install.md +7 -0
- package/plugins/lisa-agy/plugin.json +8 -0
- package/plugins/lisa-agy/scripts/automation-status-claude-adapter.mjs +672 -0
- package/plugins/lisa-agy/scripts/automation-status-codex-adapter.mjs +697 -0
- package/plugins/lisa-agy/scripts/automation-status-contract-drift.mjs +392 -0
- package/plugins/lisa-agy/scripts/automation-status-expected-fleet.mjs +319 -0
- package/plugins/lisa-agy/scripts/automation-status-report.mjs +170 -0
- package/plugins/lisa-agy/scripts/doctor-report.mjs +143 -0
- package/plugins/lisa-agy/scripts/plugin-sync-explain.mjs +512 -0
- package/plugins/lisa-agy/scripts/project-ideation-idempotency-harness.mjs +319 -0
- package/plugins/lisa-agy/scripts/queue-contract-resolution.mjs +453 -0
- package/plugins/lisa-agy/scripts/queue-health-classification.mjs +157 -0
- package/plugins/lisa-agy/scripts/queue-status-build-readers.mjs +509 -0
- package/plugins/lisa-agy/scripts/queue-status-prd-readers.mjs +452 -0
- package/plugins/lisa-agy/skills/acceptance-criteria/SKILL.md +71 -0
- package/plugins/lisa-agy/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-agy/skills/atlassian-access/SKILL.md +293 -0
- package/plugins/lisa-agy/skills/automation-status/SKILL.md +111 -0
- package/plugins/lisa-agy/skills/bug-triage/SKILL.md +23 -0
- package/plugins/lisa-agy/skills/codebase-research/SKILL.md +87 -0
- package/plugins/lisa-agy/skills/codify-verification/SKILL.md +152 -0
- package/plugins/lisa-agy/skills/confluence-prd-intake/SKILL.md +417 -0
- package/plugins/lisa-agy/skills/confluence-to-tracker/SKILL.md +360 -0
- package/plugins/lisa-agy/skills/confluence-write-prd/SKILL.md +109 -0
- package/plugins/lisa-agy/skills/debrief/SKILL.md +94 -0
- package/plugins/lisa-agy/skills/debrief-apply/SKILL.md +63 -0
- package/plugins/lisa-agy/skills/doctor/SKILL.md +317 -0
- package/plugins/lisa-agy/skills/epic-triage/SKILL.md +28 -0
- package/plugins/lisa-agy/skills/fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-agy/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-agy/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-agy/skills/git-submit-pr/SKILL.md +105 -0
- package/plugins/lisa-agy/skills/github-add-journey/SKILL.md +115 -0
- package/plugins/lisa-agy/skills/github-build-intake/SKILL.md +377 -0
- package/plugins/lisa-agy/skills/github-create/SKILL.md +101 -0
- package/plugins/lisa-agy/skills/github-evidence/SKILL.md +110 -0
- package/plugins/lisa-agy/skills/github-journey/SKILL.md +121 -0
- package/plugins/lisa-agy/skills/github-prd-intake/SKILL.md +432 -0
- package/plugins/lisa-agy/skills/github-project-v2/SKILL.md +227 -0
- package/plugins/lisa-agy/skills/github-read-issue/SKILL.md +248 -0
- package/plugins/lisa-agy/skills/github-sync/SKILL.md +119 -0
- package/plugins/lisa-agy/skills/github-to-tracker/SKILL.md +345 -0
- package/plugins/lisa-agy/skills/github-validate-issue/SKILL.md +331 -0
- package/plugins/lisa-agy/skills/github-verify/SKILL.md +29 -0
- package/plugins/lisa-agy/skills/github-write-issue/SKILL.md +339 -0
- package/plugins/lisa-agy/skills/github-write-prd/SKILL.md +157 -0
- package/plugins/lisa-agy/skills/implement/SKILL.md +145 -0
- package/plugins/lisa-agy/skills/improve-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-agy/skills/improve-max-lines/SKILL.md +45 -0
- package/plugins/lisa-agy/skills/improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-agy/skills/improve-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-agy/skills/improve-tests/SKILL.md +47 -0
- package/plugins/lisa-agy/skills/intake/SKILL.md +132 -0
- package/plugins/lisa-agy/skills/intake-explain/SKILL.md +279 -0
- package/plugins/lisa-agy/skills/jira-add-journey/SKILL.md +121 -0
- package/plugins/lisa-agy/skills/jira-build-intake/SKILL.md +286 -0
- package/plugins/lisa-agy/skills/jira-create/SKILL.md +154 -0
- package/plugins/lisa-agy/skills/jira-evidence/SKILL.md +90 -0
- package/plugins/lisa-agy/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-agy/skills/jira-journey/SKILL.md +127 -0
- package/plugins/lisa-agy/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-agy/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-agy/skills/jira-read-ticket/SKILL.md +198 -0
- package/plugins/lisa-agy/skills/jira-read-ticket/scripts/download-attachment.sh +110 -0
- package/plugins/lisa-agy/skills/jira-sync/SKILL.md +95 -0
- package/plugins/lisa-agy/skills/jira-validate-ticket/SKILL.md +318 -0
- package/plugins/lisa-agy/skills/jira-verify/SKILL.md +30 -0
- package/plugins/lisa-agy/skills/jira-write-ticket/SKILL.md +265 -0
- package/plugins/lisa-agy/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-agy/skills/linear-add-journey/SKILL.md +105 -0
- package/plugins/lisa-agy/skills/linear-build-intake/SKILL.md +283 -0
- package/plugins/lisa-agy/skills/linear-create/SKILL.md +146 -0
- package/plugins/lisa-agy/skills/linear-evidence/SKILL.md +103 -0
- package/plugins/lisa-agy/skills/linear-journey/SKILL.md +134 -0
- package/plugins/lisa-agy/skills/linear-prd-intake/SKILL.md +383 -0
- package/plugins/lisa-agy/skills/linear-read-issue/SKILL.md +200 -0
- package/plugins/lisa-agy/skills/linear-sync/SKILL.md +114 -0
- package/plugins/lisa-agy/skills/linear-to-tracker/SKILL.md +342 -0
- package/plugins/lisa-agy/skills/linear-validate-issue/SKILL.md +313 -0
- package/plugins/lisa-agy/skills/linear-verify/SKILL.md +51 -0
- package/plugins/lisa-agy/skills/linear-write-issue/SKILL.md +292 -0
- package/plugins/lisa-agy/skills/linear-write-prd/SKILL.md +96 -0
- package/plugins/lisa-agy/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-agy/skills/monitor/SKILL.md +48 -0
- package/plugins/lisa-agy/skills/nightly-add-test-coverage/SKILL.md +40 -0
- package/plugins/lisa-agy/skills/nightly-improve-tests/SKILL.md +29 -0
- package/plugins/lisa-agy/skills/nightly-lower-code-complexity/SKILL.md +28 -0
- package/plugins/lisa-agy/skills/notion-access/SKILL.md +226 -0
- package/plugins/lisa-agy/skills/notion-prd-intake/SKILL.md +360 -0
- package/plugins/lisa-agy/skills/notion-to-tracker/SKILL.md +357 -0
- package/plugins/lisa-agy/skills/notion-write-prd/SKILL.md +109 -0
- package/plugins/lisa-agy/skills/performance-review/SKILL.md +94 -0
- package/plugins/lisa-agy/skills/plan/SKILL.md +60 -0
- package/plugins/lisa-agy/skills/plugin-sync-explain/SKILL.md +53 -0
- package/plugins/lisa-agy/skills/prd-backlink/SKILL.md +265 -0
- package/plugins/lisa-agy/skills/prd-source-write/SKILL.md +101 -0
- package/plugins/lisa-agy/skills/prd-ticket-coverage/SKILL.md +170 -0
- package/plugins/lisa-agy/skills/product-walkthrough/SKILL.md +129 -0
- package/plugins/lisa-agy/skills/project-ideation/SKILL.md +315 -0
- package/plugins/lisa-agy/skills/project-ideation/examples/evidence-card-format.md +21 -0
- package/plugins/lisa-agy/skills/project-ideation/examples/host-project-only.md +22 -0
- package/plugins/lisa-agy/skills/project-ideation/examples/idempotency-verification-harness.md +57 -0
- package/plugins/lisa-agy/skills/project-ideation/examples/public-external-inspiration.md +22 -0
- package/plugins/lisa-agy/skills/project-ideation/examples/unavailable-data-rejection.md +22 -0
- package/plugins/lisa-agy/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-agy/skills/quality-review/SKILL.md +54 -0
- package/plugins/lisa-agy/skills/queue-status/SKILL.md +133 -0
- package/plugins/lisa-agy/skills/repair-intake/SKILL.md +584 -0
- package/plugins/lisa-agy/skills/reproduce-bug/SKILL.md +96 -0
- package/plugins/lisa-agy/skills/research/SKILL.md +68 -0
- package/plugins/lisa-agy/skills/review-local/SKILL.md +88 -0
- package/plugins/lisa-agy/skills/root-cause-analysis/SKILL.md +155 -0
- package/plugins/lisa-agy/skills/security-review/SKILL.md +57 -0
- package/plugins/lisa-agy/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-agy/skills/setup-atlassian/SKILL.md +347 -0
- package/plugins/lisa-agy/skills/setup-automations/SKILL.md +99 -0
- package/plugins/lisa-agy/skills/setup-confluence/SKILL.md +254 -0
- package/plugins/lisa-agy/skills/setup-github/SKILL.md +268 -0
- package/plugins/lisa-agy/skills/setup-jira/SKILL.md +198 -0
- package/plugins/lisa-agy/skills/setup-linear/SKILL.md +251 -0
- package/plugins/lisa-agy/skills/setup-notion/SKILL.md +316 -0
- package/plugins/lisa-agy/skills/spec-conformance/SKILL.md +159 -0
- package/plugins/lisa-agy/skills/task-decomposition/SKILL.md +127 -0
- package/plugins/lisa-agy/skills/task-triage/SKILL.md +23 -0
- package/plugins/lisa-agy/skills/tdd-implementation/SKILL.md +83 -0
- package/plugins/lisa-agy/skills/tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa-agy/skills/test-strategy/SKILL.md +63 -0
- package/plugins/lisa-agy/skills/ticket-triage/SKILL.md +182 -0
- package/plugins/lisa-agy/skills/tracker-add-journey/SKILL.md +26 -0
- package/plugins/lisa-agy/skills/tracker-build-intake/SKILL.md +64 -0
- package/plugins/lisa-agy/skills/tracker-create/SKILL.md +26 -0
- package/plugins/lisa-agy/skills/tracker-evidence/SKILL.md +52 -0
- package/plugins/lisa-agy/skills/tracker-journey/SKILL.md +26 -0
- package/plugins/lisa-agy/skills/tracker-read/SKILL.md +27 -0
- package/plugins/lisa-agy/skills/tracker-source-artifacts/SKILL.md +107 -0
- package/plugins/lisa-agy/skills/tracker-sync/SKILL.md +51 -0
- package/plugins/lisa-agy/skills/tracker-validate/SKILL.md +36 -0
- package/plugins/lisa-agy/skills/tracker-verify/SKILL.md +27 -0
- package/plugins/lisa-agy/skills/tracker-write/SKILL.md +53 -0
- package/plugins/lisa-agy/skills/usage-accounting/SKILL.md +170 -0
- package/plugins/lisa-agy/skills/verification-lifecycle/SKILL.md +339 -0
- package/plugins/lisa-agy/skills/verify/SKILL.md +49 -0
- package/plugins/lisa-agy/skills/verify-prd/SKILL.md +392 -0
- package/plugins/lisa-agy/skills/wiki-install/SKILL.md +101 -0
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +72 -0
- package/plugins/lisa-copilot/agents/architecture-specialist.agent.md +47 -0
- package/plugins/lisa-copilot/agents/bug-fixer.agent.md +39 -0
- package/plugins/lisa-copilot/agents/builder.agent.md +40 -0
- package/plugins/lisa-copilot/agents/confluence-prd-intake.agent.md +65 -0
- package/plugins/lisa-copilot/agents/debug-specialist.agent.md +114 -0
- package/plugins/lisa-copilot/agents/git-history-analyzer.agent.md +183 -0
- package/plugins/lisa-copilot/agents/github-agent.agent.md +148 -0
- package/plugins/lisa-copilot/agents/github-build-intake.agent.md +64 -0
- package/plugins/lisa-copilot/agents/github-prd-intake.agent.md +66 -0
- package/plugins/lisa-copilot/agents/jira-agent.agent.md +129 -0
- package/plugins/lisa-copilot/agents/jira-build-intake.agent.md +64 -0
- package/plugins/lisa-copilot/agents/learner.agent.md +43 -0
- package/plugins/lisa-copilot/agents/learnings-synthesizer.agent.md +135 -0
- package/plugins/lisa-copilot/agents/linear-agent.agent.md +134 -0
- package/plugins/lisa-copilot/agents/linear-build-intake.agent.md +64 -0
- package/plugins/lisa-copilot/agents/linear-prd-intake.agent.md +66 -0
- package/plugins/lisa-copilot/agents/notion-prd-intake.agent.md +63 -0
- package/plugins/lisa-copilot/agents/performance-specialist.agent.md +85 -0
- package/plugins/lisa-copilot/agents/pr-mining-specialist.agent.md +85 -0
- package/plugins/lisa-copilot/agents/product-specialist.agent.md +63 -0
- package/plugins/lisa-copilot/agents/quality-specialist.agent.md +56 -0
- package/plugins/lisa-copilot/agents/security-specialist.agent.md +51 -0
- package/plugins/lisa-copilot/agents/skill-evaluator.agent.md +245 -0
- package/plugins/lisa-copilot/agents/spec-conformance-specialist.agent.md +49 -0
- package/plugins/lisa-copilot/agents/test-specialist.agent.md +49 -0
- package/plugins/lisa-copilot/agents/tracker-mining-specialist.agent.md +85 -0
- package/plugins/lisa-copilot/agents/verification-specialist.agent.md +135 -0
- package/plugins/lisa-copilot/commands/automation-status.md +12 -0
- package/plugins/lisa-copilot/commands/codify-verification.md +6 -0
- package/plugins/lisa-copilot/commands/debrief/apply.md +6 -0
- package/plugins/lisa-copilot/commands/debrief.md +6 -0
- package/plugins/lisa-copilot/commands/doctor.md +6 -0
- package/plugins/lisa-copilot/commands/fix/linter-error.md +7 -0
- package/plugins/lisa-copilot/commands/git/commit.md +7 -0
- package/plugins/lisa-copilot/commands/git/prune.md +6 -0
- package/plugins/lisa-copilot/commands/git/submit-pr.md +7 -0
- package/plugins/lisa-copilot/commands/implement.md +6 -0
- package/plugins/lisa-copilot/commands/improve/code-complexity.md +6 -0
- package/plugins/lisa-copilot/commands/improve/max-lines-per-function.md +7 -0
- package/plugins/lisa-copilot/commands/improve/max-lines.md +7 -0
- package/plugins/lisa-copilot/commands/improve/test-coverage.md +7 -0
- package/plugins/lisa-copilot/commands/improve/tests.md +7 -0
- package/plugins/lisa-copilot/commands/intake-explain.md +31 -0
- package/plugins/lisa-copilot/commands/intake.md +6 -0
- package/plugins/lisa-copilot/commands/monitor.md +6 -0
- package/plugins/lisa-copilot/commands/plan.md +6 -0
- package/plugins/lisa-copilot/commands/plugin-sync-explain.md +8 -0
- package/plugins/lisa-copilot/commands/product-walkthrough.md +7 -0
- package/plugins/lisa-copilot/commands/project-ideation.md +6 -0
- package/plugins/lisa-copilot/commands/pull-request/review.md +7 -0
- package/plugins/lisa-copilot/commands/queue-status.md +34 -0
- package/plugins/lisa-copilot/commands/repair-intake.md +6 -0
- package/plugins/lisa-copilot/commands/research.md +6 -0
- package/plugins/lisa-copilot/commands/review/local.md +6 -0
- package/plugins/lisa-copilot/commands/security/zap-scan.md +6 -0
- package/plugins/lisa-copilot/commands/setup/atlassian.md +7 -0
- package/plugins/lisa-copilot/commands/setup/confluence.md +7 -0
- package/plugins/lisa-copilot/commands/setup/github.md +7 -0
- package/plugins/lisa-copilot/commands/setup/jira.md +7 -0
- package/plugins/lisa-copilot/commands/setup/linear.md +7 -0
- package/plugins/lisa-copilot/commands/setup/notion.md +7 -0
- package/plugins/lisa-copilot/commands/setup-automations.md +6 -0
- package/plugins/lisa-copilot/commands/tear-down-automations.md +6 -0
- package/plugins/lisa-copilot/commands/verify-prd.md +6 -0
- package/plugins/lisa-copilot/commands/verify.md +6 -0
- package/plugins/lisa-copilot/commands/wiki/install.md +7 -0
- package/plugins/lisa-copilot/hooks/block-no-verify.sh +37 -0
- package/plugins/lisa-copilot/hooks/inject-rules.sh +33 -0
- package/plugins/lisa-copilot/hooks/install-pkgs.sh +69 -0
- package/plugins/lisa-copilot/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-copilot/hooks/setup-jira-cli.sh +51 -0
- package/plugins/lisa-copilot/rules/eager/base-rules.md +70 -0
- package/plugins/lisa-copilot/rules/eager/coding-philosophy.md +27 -0
- package/plugins/lisa-copilot/rules/eager/config-resolution.md +28 -0
- package/plugins/lisa-copilot/rules/eager/documentation-source-paths.md +13 -0
- package/plugins/lisa-copilot/rules/eager/empirical-inquiry.md +22 -0
- package/plugins/lisa-copilot/rules/eager/intent-routing.md +18 -0
- package/plugins/lisa-copilot/rules/eager/leaf-only-lifecycle.md +39 -0
- package/plugins/lisa-copilot/rules/eager/prd-lifecycle-rollup.md +31 -0
- package/plugins/lisa-copilot/rules/eager/repo-scope-split.md +39 -0
- package/plugins/lisa-copilot/rules/eager/security-audit-handling.md +29 -0
- package/plugins/lisa-copilot/rules/eager/usage-accounting.md +28 -0
- package/plugins/lisa-copilot/rules/eager/verification.md +21 -0
- package/plugins/lisa-copilot/rules/eager/wiki-knowledge-source.md +16 -0
- package/plugins/lisa-copilot/rules/reference/base-rules.md +133 -0
- package/plugins/lisa-copilot/rules/reference/coding-philosophy.md +428 -0
- package/plugins/lisa-copilot/rules/reference/config-resolution.md +691 -0
- package/plugins/lisa-copilot/rules/reference/documentation-source-paths.md +13 -0
- package/plugins/lisa-copilot/rules/reference/empirical-inquiry.md +27 -0
- package/plugins/lisa-copilot/rules/reference/intent-routing.md +407 -0
- package/plugins/lisa-copilot/rules/reference/leaf-only-lifecycle.md +120 -0
- package/plugins/lisa-copilot/rules/reference/prd-lifecycle-rollup.md +156 -0
- package/plugins/lisa-copilot/rules/reference/repo-scope-split.md +58 -0
- package/plugins/lisa-copilot/rules/reference/security-audit-handling.md +30 -0
- package/plugins/lisa-copilot/rules/reference/usage-accounting.md +144 -0
- package/plugins/lisa-copilot/rules/reference/verification.md +124 -0
- package/plugins/lisa-copilot/rules/reference/wiki-knowledge-source.md +14 -0
- package/plugins/lisa-copilot/scripts/automation-status-claude-adapter.mjs +672 -0
- package/plugins/lisa-copilot/scripts/automation-status-codex-adapter.mjs +697 -0
- package/plugins/lisa-copilot/scripts/automation-status-contract-drift.mjs +392 -0
- package/plugins/lisa-copilot/scripts/automation-status-expected-fleet.mjs +319 -0
- package/plugins/lisa-copilot/scripts/automation-status-report.mjs +170 -0
- package/plugins/lisa-copilot/scripts/doctor-report.mjs +143 -0
- package/plugins/lisa-copilot/scripts/plugin-sync-explain.mjs +512 -0
- package/plugins/lisa-copilot/scripts/project-ideation-idempotency-harness.mjs +319 -0
- package/plugins/lisa-copilot/scripts/queue-contract-resolution.mjs +453 -0
- package/plugins/lisa-copilot/scripts/queue-health-classification.mjs +157 -0
- package/plugins/lisa-copilot/scripts/queue-status-build-readers.mjs +509 -0
- package/plugins/lisa-copilot/scripts/queue-status-prd-readers.mjs +452 -0
- package/plugins/lisa-copilot/skills/acceptance-criteria/SKILL.md +71 -0
- package/plugins/lisa-copilot/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-copilot/skills/atlassian-access/SKILL.md +293 -0
- package/plugins/lisa-copilot/skills/automation-status/SKILL.md +111 -0
- package/plugins/lisa-copilot/skills/bug-triage/SKILL.md +23 -0
- package/plugins/lisa-copilot/skills/codebase-research/SKILL.md +87 -0
- package/plugins/lisa-copilot/skills/codify-verification/SKILL.md +152 -0
- package/plugins/lisa-copilot/skills/confluence-prd-intake/SKILL.md +417 -0
- package/plugins/lisa-copilot/skills/confluence-to-tracker/SKILL.md +360 -0
- package/plugins/lisa-copilot/skills/confluence-write-prd/SKILL.md +109 -0
- package/plugins/lisa-copilot/skills/debrief/SKILL.md +94 -0
- package/plugins/lisa-copilot/skills/debrief-apply/SKILL.md +63 -0
- package/plugins/lisa-copilot/skills/doctor/SKILL.md +317 -0
- package/plugins/lisa-copilot/skills/epic-triage/SKILL.md +28 -0
- package/plugins/lisa-copilot/skills/fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-copilot/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-copilot/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-copilot/skills/git-submit-pr/SKILL.md +105 -0
- package/plugins/lisa-copilot/skills/github-add-journey/SKILL.md +115 -0
- package/plugins/lisa-copilot/skills/github-build-intake/SKILL.md +377 -0
- package/plugins/lisa-copilot/skills/github-create/SKILL.md +101 -0
- package/plugins/lisa-copilot/skills/github-evidence/SKILL.md +110 -0
- package/plugins/lisa-copilot/skills/github-journey/SKILL.md +121 -0
- package/plugins/lisa-copilot/skills/github-prd-intake/SKILL.md +432 -0
- package/plugins/lisa-copilot/skills/github-project-v2/SKILL.md +227 -0
- package/plugins/lisa-copilot/skills/github-read-issue/SKILL.md +248 -0
- package/plugins/lisa-copilot/skills/github-sync/SKILL.md +119 -0
- package/plugins/lisa-copilot/skills/github-to-tracker/SKILL.md +345 -0
- package/plugins/lisa-copilot/skills/github-validate-issue/SKILL.md +331 -0
- package/plugins/lisa-copilot/skills/github-verify/SKILL.md +29 -0
- package/plugins/lisa-copilot/skills/github-write-issue/SKILL.md +339 -0
- package/plugins/lisa-copilot/skills/github-write-prd/SKILL.md +157 -0
- package/plugins/lisa-copilot/skills/implement/SKILL.md +145 -0
- package/plugins/lisa-copilot/skills/improve-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-copilot/skills/improve-max-lines/SKILL.md +45 -0
- package/plugins/lisa-copilot/skills/improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-copilot/skills/improve-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-copilot/skills/improve-tests/SKILL.md +47 -0
- package/plugins/lisa-copilot/skills/intake/SKILL.md +132 -0
- package/plugins/lisa-copilot/skills/intake-explain/SKILL.md +279 -0
- package/plugins/lisa-copilot/skills/jira-add-journey/SKILL.md +121 -0
- package/plugins/lisa-copilot/skills/jira-build-intake/SKILL.md +286 -0
- package/plugins/lisa-copilot/skills/jira-create/SKILL.md +154 -0
- package/plugins/lisa-copilot/skills/jira-evidence/SKILL.md +90 -0
- package/plugins/lisa-copilot/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-copilot/skills/jira-journey/SKILL.md +127 -0
- package/plugins/lisa-copilot/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-copilot/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-copilot/skills/jira-read-ticket/SKILL.md +198 -0
- package/plugins/lisa-copilot/skills/jira-read-ticket/scripts/download-attachment.sh +110 -0
- package/plugins/lisa-copilot/skills/jira-sync/SKILL.md +95 -0
- package/plugins/lisa-copilot/skills/jira-validate-ticket/SKILL.md +318 -0
- package/plugins/lisa-copilot/skills/jira-verify/SKILL.md +30 -0
- package/plugins/lisa-copilot/skills/jira-write-ticket/SKILL.md +265 -0
- package/plugins/lisa-copilot/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-copilot/skills/linear-add-journey/SKILL.md +105 -0
- package/plugins/lisa-copilot/skills/linear-build-intake/SKILL.md +283 -0
- package/plugins/lisa-copilot/skills/linear-create/SKILL.md +146 -0
- package/plugins/lisa-copilot/skills/linear-evidence/SKILL.md +103 -0
- package/plugins/lisa-copilot/skills/linear-journey/SKILL.md +134 -0
- package/plugins/lisa-copilot/skills/linear-prd-intake/SKILL.md +383 -0
- package/plugins/lisa-copilot/skills/linear-read-issue/SKILL.md +200 -0
- package/plugins/lisa-copilot/skills/linear-sync/SKILL.md +114 -0
- package/plugins/lisa-copilot/skills/linear-to-tracker/SKILL.md +342 -0
- package/plugins/lisa-copilot/skills/linear-validate-issue/SKILL.md +313 -0
- package/plugins/lisa-copilot/skills/linear-verify/SKILL.md +51 -0
- package/plugins/lisa-copilot/skills/linear-write-issue/SKILL.md +292 -0
- package/plugins/lisa-copilot/skills/linear-write-prd/SKILL.md +96 -0
- package/plugins/lisa-copilot/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-copilot/skills/monitor/SKILL.md +48 -0
- package/plugins/lisa-copilot/skills/nightly-add-test-coverage/SKILL.md +40 -0
- package/plugins/lisa-copilot/skills/nightly-improve-tests/SKILL.md +29 -0
- package/plugins/lisa-copilot/skills/nightly-lower-code-complexity/SKILL.md +28 -0
- package/plugins/lisa-copilot/skills/notion-access/SKILL.md +226 -0
- package/plugins/lisa-copilot/skills/notion-prd-intake/SKILL.md +360 -0
- package/plugins/lisa-copilot/skills/notion-to-tracker/SKILL.md +357 -0
- package/plugins/lisa-copilot/skills/notion-write-prd/SKILL.md +109 -0
- package/plugins/lisa-copilot/skills/performance-review/SKILL.md +94 -0
- package/plugins/lisa-copilot/skills/plan/SKILL.md +60 -0
- package/plugins/lisa-copilot/skills/plugin-sync-explain/SKILL.md +53 -0
- package/plugins/lisa-copilot/skills/prd-backlink/SKILL.md +265 -0
- package/plugins/lisa-copilot/skills/prd-source-write/SKILL.md +101 -0
- package/plugins/lisa-copilot/skills/prd-ticket-coverage/SKILL.md +170 -0
- package/plugins/lisa-copilot/skills/product-walkthrough/SKILL.md +129 -0
- package/plugins/lisa-copilot/skills/project-ideation/SKILL.md +315 -0
- package/plugins/lisa-copilot/skills/project-ideation/examples/evidence-card-format.md +21 -0
- package/plugins/lisa-copilot/skills/project-ideation/examples/host-project-only.md +22 -0
- package/plugins/lisa-copilot/skills/project-ideation/examples/idempotency-verification-harness.md +57 -0
- package/plugins/lisa-copilot/skills/project-ideation/examples/public-external-inspiration.md +22 -0
- package/plugins/lisa-copilot/skills/project-ideation/examples/unavailable-data-rejection.md +22 -0
- package/plugins/lisa-copilot/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-copilot/skills/quality-review/SKILL.md +54 -0
- package/plugins/lisa-copilot/skills/queue-status/SKILL.md +133 -0
- package/plugins/lisa-copilot/skills/repair-intake/SKILL.md +584 -0
- package/plugins/lisa-copilot/skills/reproduce-bug/SKILL.md +96 -0
- package/plugins/lisa-copilot/skills/research/SKILL.md +68 -0
- package/plugins/lisa-copilot/skills/review-local/SKILL.md +88 -0
- package/plugins/lisa-copilot/skills/root-cause-analysis/SKILL.md +155 -0
- package/plugins/lisa-copilot/skills/security-review/SKILL.md +57 -0
- package/plugins/lisa-copilot/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-copilot/skills/setup-atlassian/SKILL.md +347 -0
- package/plugins/lisa-copilot/skills/setup-automations/SKILL.md +99 -0
- package/plugins/lisa-copilot/skills/setup-confluence/SKILL.md +254 -0
- package/plugins/lisa-copilot/skills/setup-github/SKILL.md +268 -0
- package/plugins/lisa-copilot/skills/setup-jira/SKILL.md +198 -0
- package/plugins/lisa-copilot/skills/setup-linear/SKILL.md +251 -0
- package/plugins/lisa-copilot/skills/setup-notion/SKILL.md +316 -0
- package/plugins/lisa-copilot/skills/spec-conformance/SKILL.md +159 -0
- package/plugins/lisa-copilot/skills/task-decomposition/SKILL.md +127 -0
- package/plugins/lisa-copilot/skills/task-triage/SKILL.md +23 -0
- package/plugins/lisa-copilot/skills/tdd-implementation/SKILL.md +83 -0
- package/plugins/lisa-copilot/skills/tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa-copilot/skills/test-strategy/SKILL.md +63 -0
- package/plugins/lisa-copilot/skills/ticket-triage/SKILL.md +182 -0
- package/plugins/lisa-copilot/skills/tracker-add-journey/SKILL.md +26 -0
- package/plugins/lisa-copilot/skills/tracker-build-intake/SKILL.md +64 -0
- package/plugins/lisa-copilot/skills/tracker-create/SKILL.md +26 -0
- package/plugins/lisa-copilot/skills/tracker-evidence/SKILL.md +52 -0
- package/plugins/lisa-copilot/skills/tracker-journey/SKILL.md +26 -0
- package/plugins/lisa-copilot/skills/tracker-read/SKILL.md +27 -0
- package/plugins/lisa-copilot/skills/tracker-source-artifacts/SKILL.md +107 -0
- package/plugins/lisa-copilot/skills/tracker-sync/SKILL.md +51 -0
- package/plugins/lisa-copilot/skills/tracker-validate/SKILL.md +36 -0
- package/plugins/lisa-copilot/skills/tracker-verify/SKILL.md +27 -0
- package/plugins/lisa-copilot/skills/tracker-write/SKILL.md +53 -0
- package/plugins/lisa-copilot/skills/usage-accounting/SKILL.md +170 -0
- package/plugins/lisa-copilot/skills/verification-lifecycle/SKILL.md +339 -0
- package/plugins/lisa-copilot/skills/verify/SKILL.md +49 -0
- package/plugins/lisa-copilot/skills/verify-prd/SKILL.md +392 -0
- package/plugins/lisa-copilot/skills/wiki-install/SKILL.md +101 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +52 -0
- package/plugins/lisa-cursor/agents/architecture-specialist.md +47 -0
- package/plugins/lisa-cursor/agents/bug-fixer.md +39 -0
- package/plugins/lisa-cursor/agents/builder.md +40 -0
- package/plugins/lisa-cursor/agents/confluence-prd-intake.md +65 -0
- package/plugins/lisa-cursor/agents/debug-specialist.md +114 -0
- package/plugins/lisa-cursor/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-cursor/agents/github-agent.md +148 -0
- package/plugins/lisa-cursor/agents/github-build-intake.md +64 -0
- package/plugins/lisa-cursor/agents/github-prd-intake.md +66 -0
- package/plugins/lisa-cursor/agents/jira-agent.md +129 -0
- package/plugins/lisa-cursor/agents/jira-build-intake.md +64 -0
- package/plugins/lisa-cursor/agents/learner.md +43 -0
- package/plugins/lisa-cursor/agents/learnings-synthesizer.md +135 -0
- package/plugins/lisa-cursor/agents/linear-agent.md +134 -0
- package/plugins/lisa-cursor/agents/linear-build-intake.md +64 -0
- package/plugins/lisa-cursor/agents/linear-prd-intake.md +66 -0
- package/plugins/lisa-cursor/agents/notion-prd-intake.md +63 -0
- package/plugins/lisa-cursor/agents/performance-specialist.md +85 -0
- package/plugins/lisa-cursor/agents/pr-mining-specialist.md +85 -0
- package/plugins/lisa-cursor/agents/product-specialist.md +63 -0
- package/plugins/lisa-cursor/agents/quality-specialist.md +56 -0
- package/plugins/lisa-cursor/agents/security-specialist.md +51 -0
- package/plugins/lisa-cursor/agents/skill-evaluator.md +245 -0
- package/plugins/lisa-cursor/agents/spec-conformance-specialist.md +49 -0
- package/plugins/lisa-cursor/agents/test-specialist.md +49 -0
- package/plugins/lisa-cursor/agents/tracker-mining-specialist.md +85 -0
- package/plugins/lisa-cursor/agents/verification-specialist.md +135 -0
- package/plugins/lisa-cursor/commands/automation-status.md +12 -0
- package/plugins/lisa-cursor/commands/codify-verification.md +6 -0
- package/plugins/lisa-cursor/commands/debrief/apply.md +6 -0
- package/plugins/lisa-cursor/commands/debrief.md +6 -0
- package/plugins/lisa-cursor/commands/doctor.md +6 -0
- package/plugins/lisa-cursor/commands/fix/linter-error.md +7 -0
- package/plugins/lisa-cursor/commands/git/commit.md +7 -0
- package/plugins/lisa-cursor/commands/git/prune.md +6 -0
- package/plugins/lisa-cursor/commands/git/submit-pr.md +7 -0
- package/plugins/lisa-cursor/commands/implement.md +6 -0
- package/plugins/lisa-cursor/commands/improve/code-complexity.md +6 -0
- package/plugins/lisa-cursor/commands/improve/max-lines-per-function.md +7 -0
- package/plugins/lisa-cursor/commands/improve/max-lines.md +7 -0
- package/plugins/lisa-cursor/commands/improve/test-coverage.md +7 -0
- package/plugins/lisa-cursor/commands/improve/tests.md +7 -0
- package/plugins/lisa-cursor/commands/intake-explain.md +31 -0
- package/plugins/lisa-cursor/commands/intake.md +6 -0
- package/plugins/lisa-cursor/commands/monitor.md +6 -0
- package/plugins/lisa-cursor/commands/plan.md +6 -0
- package/plugins/lisa-cursor/commands/plugin-sync-explain.md +8 -0
- package/plugins/lisa-cursor/commands/product-walkthrough.md +7 -0
- package/plugins/lisa-cursor/commands/project-ideation.md +6 -0
- package/plugins/lisa-cursor/commands/pull-request/review.md +7 -0
- package/plugins/lisa-cursor/commands/queue-status.md +34 -0
- package/plugins/lisa-cursor/commands/repair-intake.md +6 -0
- package/plugins/lisa-cursor/commands/research.md +6 -0
- package/plugins/lisa-cursor/commands/review/local.md +6 -0
- package/plugins/lisa-cursor/commands/security/zap-scan.md +6 -0
- package/plugins/lisa-cursor/commands/setup/atlassian.md +7 -0
- package/plugins/lisa-cursor/commands/setup/confluence.md +7 -0
- package/plugins/lisa-cursor/commands/setup/github.md +7 -0
- package/plugins/lisa-cursor/commands/setup/jira.md +7 -0
- package/plugins/lisa-cursor/commands/setup/linear.md +7 -0
- package/plugins/lisa-cursor/commands/setup/notion.md +7 -0
- package/plugins/lisa-cursor/commands/setup-automations.md +6 -0
- package/plugins/lisa-cursor/commands/tear-down-automations.md +6 -0
- package/plugins/lisa-cursor/commands/verify-prd.md +6 -0
- package/plugins/lisa-cursor/commands/verify.md +6 -0
- package/plugins/lisa-cursor/commands/wiki/install.md +7 -0
- package/plugins/lisa-cursor/hooks/block-no-verify.sh +37 -0
- package/plugins/lisa-cursor/hooks/install-pkgs.sh +69 -0
- package/plugins/lisa-cursor/hooks/notify-ntfy.sh +183 -0
- package/plugins/lisa-cursor/hooks/setup-jira-cli.sh +51 -0
- package/plugins/lisa-cursor/rules/eager/base-rules.md +70 -0
- package/plugins/lisa-cursor/rules/eager/coding-philosophy.md +27 -0
- package/plugins/lisa-cursor/rules/eager/config-resolution.md +28 -0
- package/plugins/lisa-cursor/rules/eager/documentation-source-paths.md +13 -0
- package/plugins/lisa-cursor/rules/eager/empirical-inquiry.md +22 -0
- package/plugins/lisa-cursor/rules/eager/intent-routing.md +18 -0
- package/plugins/lisa-cursor/rules/eager/leaf-only-lifecycle.md +39 -0
- package/plugins/lisa-cursor/rules/eager/prd-lifecycle-rollup.md +31 -0
- package/plugins/lisa-cursor/rules/eager/repo-scope-split.md +39 -0
- package/plugins/lisa-cursor/rules/eager/security-audit-handling.md +29 -0
- package/plugins/lisa-cursor/rules/eager/usage-accounting.md +28 -0
- package/plugins/lisa-cursor/rules/eager/verification.md +21 -0
- package/plugins/lisa-cursor/rules/eager/wiki-knowledge-source.md +16 -0
- package/plugins/lisa-cursor/rules/reference/base-rules.md +133 -0
- package/plugins/lisa-cursor/rules/reference/coding-philosophy.md +428 -0
- package/plugins/lisa-cursor/rules/reference/config-resolution.md +691 -0
- package/plugins/lisa-cursor/rules/reference/documentation-source-paths.md +13 -0
- package/plugins/lisa-cursor/rules/reference/empirical-inquiry.md +27 -0
- package/plugins/lisa-cursor/rules/reference/intent-routing.md +407 -0
- package/plugins/lisa-cursor/rules/reference/leaf-only-lifecycle.md +120 -0
- package/plugins/lisa-cursor/rules/reference/prd-lifecycle-rollup.md +156 -0
- package/plugins/lisa-cursor/rules/reference/repo-scope-split.md +58 -0
- package/plugins/lisa-cursor/rules/reference/security-audit-handling.md +30 -0
- package/plugins/lisa-cursor/rules/reference/usage-accounting.md +144 -0
- package/plugins/lisa-cursor/rules/reference/verification.md +124 -0
- package/plugins/lisa-cursor/rules/reference/wiki-knowledge-source.md +14 -0
- package/plugins/lisa-cursor/scripts/automation-status-claude-adapter.mjs +672 -0
- package/plugins/lisa-cursor/scripts/automation-status-codex-adapter.mjs +697 -0
- package/plugins/lisa-cursor/scripts/automation-status-contract-drift.mjs +392 -0
- package/plugins/lisa-cursor/scripts/automation-status-expected-fleet.mjs +319 -0
- package/plugins/lisa-cursor/scripts/automation-status-report.mjs +170 -0
- package/plugins/lisa-cursor/scripts/doctor-report.mjs +143 -0
- package/plugins/lisa-cursor/scripts/plugin-sync-explain.mjs +512 -0
- package/plugins/lisa-cursor/scripts/project-ideation-idempotency-harness.mjs +319 -0
- package/plugins/lisa-cursor/scripts/queue-contract-resolution.mjs +453 -0
- package/plugins/lisa-cursor/scripts/queue-health-classification.mjs +157 -0
- package/plugins/lisa-cursor/scripts/queue-status-build-readers.mjs +509 -0
- package/plugins/lisa-cursor/scripts/queue-status-prd-readers.mjs +452 -0
- package/plugins/lisa-cursor/skills/acceptance-criteria/SKILL.md +71 -0
- package/plugins/lisa-cursor/skills/agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa-cursor/skills/atlassian-access/SKILL.md +293 -0
- package/plugins/lisa-cursor/skills/automation-status/SKILL.md +111 -0
- package/plugins/lisa-cursor/skills/bug-triage/SKILL.md +23 -0
- package/plugins/lisa-cursor/skills/codebase-research/SKILL.md +87 -0
- package/plugins/lisa-cursor/skills/codify-verification/SKILL.md +152 -0
- package/plugins/lisa-cursor/skills/confluence-prd-intake/SKILL.md +417 -0
- package/plugins/lisa-cursor/skills/confluence-to-tracker/SKILL.md +360 -0
- package/plugins/lisa-cursor/skills/confluence-write-prd/SKILL.md +109 -0
- package/plugins/lisa-cursor/skills/debrief/SKILL.md +94 -0
- package/plugins/lisa-cursor/skills/debrief-apply/SKILL.md +63 -0
- package/plugins/lisa-cursor/skills/doctor/SKILL.md +317 -0
- package/plugins/lisa-cursor/skills/epic-triage/SKILL.md +28 -0
- package/plugins/lisa-cursor/skills/fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-cursor/skills/git-commit/SKILL.md +48 -0
- package/plugins/lisa-cursor/skills/git-prune/SKILL.md +35 -0
- package/plugins/lisa-cursor/skills/git-submit-pr/SKILL.md +105 -0
- package/plugins/lisa-cursor/skills/github-add-journey/SKILL.md +115 -0
- package/plugins/lisa-cursor/skills/github-build-intake/SKILL.md +377 -0
- package/plugins/lisa-cursor/skills/github-create/SKILL.md +101 -0
- package/plugins/lisa-cursor/skills/github-evidence/SKILL.md +110 -0
- package/plugins/lisa-cursor/skills/github-journey/SKILL.md +121 -0
- package/plugins/lisa-cursor/skills/github-prd-intake/SKILL.md +432 -0
- package/plugins/lisa-cursor/skills/github-project-v2/SKILL.md +227 -0
- package/plugins/lisa-cursor/skills/github-read-issue/SKILL.md +248 -0
- package/plugins/lisa-cursor/skills/github-sync/SKILL.md +119 -0
- package/plugins/lisa-cursor/skills/github-to-tracker/SKILL.md +345 -0
- package/plugins/lisa-cursor/skills/github-validate-issue/SKILL.md +331 -0
- package/plugins/lisa-cursor/skills/github-verify/SKILL.md +29 -0
- package/plugins/lisa-cursor/skills/github-write-issue/SKILL.md +339 -0
- package/plugins/lisa-cursor/skills/github-write-prd/SKILL.md +157 -0
- package/plugins/lisa-cursor/skills/implement/SKILL.md +145 -0
- package/plugins/lisa-cursor/skills/improve-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-cursor/skills/improve-max-lines/SKILL.md +45 -0
- package/plugins/lisa-cursor/skills/improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-cursor/skills/improve-test-coverage/SKILL.md +44 -0
- package/plugins/lisa-cursor/skills/improve-tests/SKILL.md +47 -0
- package/plugins/lisa-cursor/skills/intake/SKILL.md +132 -0
- package/plugins/lisa-cursor/skills/intake-explain/SKILL.md +279 -0
- package/plugins/lisa-cursor/skills/jira-add-journey/SKILL.md +121 -0
- package/plugins/lisa-cursor/skills/jira-build-intake/SKILL.md +286 -0
- package/plugins/lisa-cursor/skills/jira-create/SKILL.md +154 -0
- package/plugins/lisa-cursor/skills/jira-evidence/SKILL.md +90 -0
- package/plugins/lisa-cursor/skills/jira-evidence/scripts/post-evidence.sh +163 -0
- package/plugins/lisa-cursor/skills/jira-journey/SKILL.md +127 -0
- package/plugins/lisa-cursor/skills/jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa-cursor/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-cursor/skills/jira-read-ticket/SKILL.md +198 -0
- package/plugins/lisa-cursor/skills/jira-read-ticket/scripts/download-attachment.sh +110 -0
- package/plugins/lisa-cursor/skills/jira-sync/SKILL.md +95 -0
- package/plugins/lisa-cursor/skills/jira-validate-ticket/SKILL.md +318 -0
- package/plugins/lisa-cursor/skills/jira-verify/SKILL.md +30 -0
- package/plugins/lisa-cursor/skills/jira-write-ticket/SKILL.md +265 -0
- package/plugins/lisa-cursor/skills/jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa-cursor/skills/linear-add-journey/SKILL.md +105 -0
- package/plugins/lisa-cursor/skills/linear-build-intake/SKILL.md +283 -0
- package/plugins/lisa-cursor/skills/linear-create/SKILL.md +146 -0
- package/plugins/lisa-cursor/skills/linear-evidence/SKILL.md +103 -0
- package/plugins/lisa-cursor/skills/linear-journey/SKILL.md +134 -0
- package/plugins/lisa-cursor/skills/linear-prd-intake/SKILL.md +383 -0
- package/plugins/lisa-cursor/skills/linear-read-issue/SKILL.md +200 -0
- package/plugins/lisa-cursor/skills/linear-sync/SKILL.md +114 -0
- package/plugins/lisa-cursor/skills/linear-to-tracker/SKILL.md +342 -0
- package/plugins/lisa-cursor/skills/linear-validate-issue/SKILL.md +313 -0
- package/plugins/lisa-cursor/skills/linear-verify/SKILL.md +51 -0
- package/plugins/lisa-cursor/skills/linear-write-issue/SKILL.md +292 -0
- package/plugins/lisa-cursor/skills/linear-write-prd/SKILL.md +96 -0
- package/plugins/lisa-cursor/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-cursor/skills/monitor/SKILL.md +48 -0
- package/plugins/lisa-cursor/skills/nightly-add-test-coverage/SKILL.md +40 -0
- package/plugins/lisa-cursor/skills/nightly-improve-tests/SKILL.md +29 -0
- package/plugins/lisa-cursor/skills/nightly-lower-code-complexity/SKILL.md +28 -0
- package/plugins/lisa-cursor/skills/notion-access/SKILL.md +226 -0
- package/plugins/lisa-cursor/skills/notion-prd-intake/SKILL.md +360 -0
- package/plugins/lisa-cursor/skills/notion-to-tracker/SKILL.md +357 -0
- package/plugins/lisa-cursor/skills/notion-write-prd/SKILL.md +109 -0
- package/plugins/lisa-cursor/skills/performance-review/SKILL.md +94 -0
- package/plugins/lisa-cursor/skills/plan/SKILL.md +60 -0
- package/plugins/lisa-cursor/skills/plugin-sync-explain/SKILL.md +53 -0
- package/plugins/lisa-cursor/skills/prd-backlink/SKILL.md +265 -0
- package/plugins/lisa-cursor/skills/prd-source-write/SKILL.md +101 -0
- package/plugins/lisa-cursor/skills/prd-ticket-coverage/SKILL.md +170 -0
- package/plugins/lisa-cursor/skills/product-walkthrough/SKILL.md +129 -0
- package/plugins/lisa-cursor/skills/project-ideation/SKILL.md +315 -0
- package/plugins/lisa-cursor/skills/project-ideation/examples/evidence-card-format.md +21 -0
- package/plugins/lisa-cursor/skills/project-ideation/examples/host-project-only.md +22 -0
- package/plugins/lisa-cursor/skills/project-ideation/examples/idempotency-verification-harness.md +57 -0
- package/plugins/lisa-cursor/skills/project-ideation/examples/public-external-inspiration.md +22 -0
- package/plugins/lisa-cursor/skills/project-ideation/examples/unavailable-data-rejection.md +22 -0
- package/plugins/lisa-cursor/skills/pull-request-review/SKILL.md +68 -0
- package/plugins/lisa-cursor/skills/quality-review/SKILL.md +54 -0
- package/plugins/lisa-cursor/skills/queue-status/SKILL.md +133 -0
- package/plugins/lisa-cursor/skills/repair-intake/SKILL.md +584 -0
- package/plugins/lisa-cursor/skills/reproduce-bug/SKILL.md +96 -0
- package/plugins/lisa-cursor/skills/research/SKILL.md +68 -0
- package/plugins/lisa-cursor/skills/review-local/SKILL.md +88 -0
- package/plugins/lisa-cursor/skills/root-cause-analysis/SKILL.md +155 -0
- package/plugins/lisa-cursor/skills/security-review/SKILL.md +57 -0
- package/plugins/lisa-cursor/skills/security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa-cursor/skills/setup-atlassian/SKILL.md +347 -0
- package/plugins/lisa-cursor/skills/setup-automations/SKILL.md +99 -0
- package/plugins/lisa-cursor/skills/setup-confluence/SKILL.md +254 -0
- package/plugins/lisa-cursor/skills/setup-github/SKILL.md +268 -0
- package/plugins/lisa-cursor/skills/setup-jira/SKILL.md +198 -0
- package/plugins/lisa-cursor/skills/setup-linear/SKILL.md +251 -0
- package/plugins/lisa-cursor/skills/setup-notion/SKILL.md +316 -0
- package/plugins/lisa-cursor/skills/spec-conformance/SKILL.md +159 -0
- package/plugins/lisa-cursor/skills/task-decomposition/SKILL.md +127 -0
- package/plugins/lisa-cursor/skills/task-triage/SKILL.md +23 -0
- package/plugins/lisa-cursor/skills/tdd-implementation/SKILL.md +83 -0
- package/plugins/lisa-cursor/skills/tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa-cursor/skills/test-strategy/SKILL.md +63 -0
- package/plugins/lisa-cursor/skills/ticket-triage/SKILL.md +182 -0
- package/plugins/lisa-cursor/skills/tracker-add-journey/SKILL.md +26 -0
- package/plugins/lisa-cursor/skills/tracker-build-intake/SKILL.md +64 -0
- package/plugins/lisa-cursor/skills/tracker-create/SKILL.md +26 -0
- package/plugins/lisa-cursor/skills/tracker-evidence/SKILL.md +52 -0
- package/plugins/lisa-cursor/skills/tracker-journey/SKILL.md +26 -0
- package/plugins/lisa-cursor/skills/tracker-read/SKILL.md +27 -0
- package/plugins/lisa-cursor/skills/tracker-source-artifacts/SKILL.md +107 -0
- package/plugins/lisa-cursor/skills/tracker-sync/SKILL.md +51 -0
- package/plugins/lisa-cursor/skills/tracker-validate/SKILL.md +36 -0
- package/plugins/lisa-cursor/skills/tracker-verify/SKILL.md +27 -0
- package/plugins/lisa-cursor/skills/tracker-write/SKILL.md +53 -0
- package/plugins/lisa-cursor/skills/usage-accounting/SKILL.md +170 -0
- package/plugins/lisa-cursor/skills/verification-lifecycle/SKILL.md +339 -0
- package/plugins/lisa-cursor/skills/verify/SKILL.md +49 -0
- package/plugins/lisa-cursor/skills/verify-prd/SKILL.md +392 -0
- package/plugins/lisa-cursor/skills/wiki-install/SKILL.md +101 -0
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +2 -1
- package/plugins/lisa-harper-fabric/hooks/hooks.json +26 -0
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +2 -1
- package/plugins/lisa-nestjs/hooks/hooks.json +15 -0
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +2 -1
- package/plugins/lisa-rails/hooks/hooks.json +41 -0
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +2 -1
- package/plugins/lisa-typescript/hooks/format-on-edit.sh +5 -3
- package/plugins/lisa-typescript/hooks/hooks.json +34 -0
- package/plugins/lisa-typescript/hooks/lint-on-edit.sh +5 -2
- package/plugins/lisa-typescript/hooks/sg-scan-on-edit.sh +5 -2
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/src/typescript/hooks/format-on-edit.sh +5 -3
- package/plugins/src/typescript/hooks/lint-on-edit.sh +5 -2
- package/plugins/src/typescript/hooks/sg-scan-on-edit.sh +5 -2
- package/scripts/build-plugins.sh +24 -0
- package/scripts/generate-agy-plugin-artifacts.mjs +168 -0
- package/scripts/generate-codex-plugin-artifacts.mjs +150 -12
- package/scripts/generate-copilot-plugin-artifacts.mjs +235 -0
- package/scripts/generate-cursor-plugin-artifacts.mjs +177 -0
- package/scripts/internal-agy-skill-policy.json +3 -0
- package/scripts/internal-copilot-runtime-probe.json +13 -0
- package/scripts/internal-copilot-skill-policy.json +3 -0
- package/scripts/internal-cursor-skill-policy.json +3 -0
- package/scripts/lib/per-agent-hook-filter.mjs +249 -0
- package/scripts/probes/wave3-verification.sh +106 -0
|
@@ -0,0 +1,584 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: repair-intake
|
|
3
|
+
description: "Vendor-agnostic repair scanner — the recovery counterpart to lisa:intake. Where intake claims `ready` work, repair-intake finds work that got stuck or was left half-closed: items left in `blocked`, stalled in an in-progress role (build `claimed`, PRD `in_review`), terminal-labeled items that are still natively open, and rollup/container items whose children are all terminal but whose parent is not closed out. Scans the same queues lisa:intake serves (Notion / Confluence / Linear / GitHub PRD databases; JIRA / GitHub / Linear build queues), enumerates candidates up to `max_candidates`, and repairs every materially actionable one in that bounded set: resumes stalled in-progress work IN PLACE (build → the vendor agent + the scanner's post-agent transition; PRD → the source `*-to-tracker` dry-run validate→route pipeline) — but for a stalled build it first diagnoses the PR/deploy state and, if the PR cannot merge (conflict, rebase-required, failing checks, unaddressed CodeRabbit/changes-requested) or a deploy failed, files a build-ready leaf fix ticket and moves the item to `blocked` (blocked by that ticket) rather than re-dispatching, re-validates blocked PRDs when new clarifying answers exist, re-dispatches blocked build items whose `is blocked by` dependencies have since closed, performs terminal native closure for terminal-labeled items, and closes rollups whose associated child work is fully terminal. Idempotent, loop-protected via a [lisa-repair-intake] marker + state fingerprint + backoff. Never mutates product-owned states (`draft`, `verified`) and never touches `ready` items. Designed as a /schedule cron target running alongside lisa:intake."
|
|
4
|
+
allowed-tools: ["Skill", "Bash", "Read", "Write", "Edit", "mcp__linear-server__list_teams", "mcp__linear-server__list_projects", "mcp__linear-server__get_project", "mcp__linear-server__save_project", "mcp__linear-server__list_project_labels", "mcp__linear-server__list_issues", "mcp__linear-server__get_issue", "mcp__linear-server__save_issue", "mcp__linear-server__list_comments", "mcp__linear-server__save_comment", "mcp__linear-server__list_issue_labels", "mcp__linear-server__create_issue_label"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Repair Intake: $ARGUMENTS
|
|
8
|
+
|
|
9
|
+
Run one batch-**repair** cycle against the queue identified by `$ARGUMENTS`. Where `lisa:intake`
|
|
10
|
+
scans the `ready` role and moves work *forward*, repair-intake scans the **stuck and
|
|
11
|
+
close-out** roles and moves work *unstuck* or *fully closed*:
|
|
12
|
+
|
|
13
|
+
- **Stalled in-progress** — an item left in an in-progress role (build `claimed`, PRD
|
|
14
|
+
`in_review`) whose processing cycle died. It is technically "being worked" but nothing is
|
|
15
|
+
happening, so it sits ignored forever. (The vendor PRD intakes explicitly leave an errored PRD
|
|
16
|
+
in `in_review` "for the human to investigate from there" — that orphan is exactly what this
|
|
17
|
+
skill recovers.) For a stalled **build**, repair-intake first diagnoses *why* it stalled by
|
|
18
|
+
inspecting its PRs and deploys: if the PR cannot merge (conflict / rebase-required / failing
|
|
19
|
+
checks / unaddressed CodeRabbit or `CHANGES_REQUESTED` review) or a deploy failed, it files a
|
|
20
|
+
build-ready leaf fix ticket and moves the item to `blocked` (blocked by that ticket) instead of
|
|
21
|
+
blindly re-dispatching the agent — which would just churn against an unmergeable PR.
|
|
22
|
+
- **Recoverable blocked** — an item in `blocked` whose blocker may now be gone: an
|
|
23
|
+
`is blocked by` dependency has since closed, clarifying questions have been answered, or
|
|
24
|
+
research/waiting resolves the ambiguity that stopped it.
|
|
25
|
+
- **Terminal-open drift** — an item already carrying its true terminal lifecycle role (for
|
|
26
|
+
example GitHub `status:done`) but still open/active in the provider's native state.
|
|
27
|
+
- **Completed rollup drift** — a parent/container item (Epic, Story, PRD, Linear Project, or
|
|
28
|
+
equivalent) whose associated child set is fully terminal but whose own lifecycle/native state has
|
|
29
|
+
not been closed out.
|
|
30
|
+
|
|
31
|
+
This skill is the symmetric counterpart to `lisa:intake`. It reuses the same queue-detection,
|
|
32
|
+
the same agent-team orchestration, the same "don't ask, just run" confirmation policy, and the
|
|
33
|
+
same per-item surfaces the vendor intakes use (`lisa:<source>-to-tracker` dry-run for PRDs;
|
|
34
|
+
`lisa:<tracker>-agent` + the scanner's lifecycle transitions for build) — it differs in *which
|
|
35
|
+
roles it scans* and, for stalled/blocked work, *that it skips the claim step* (the item is already
|
|
36
|
+
claimed/blocked). Close-out candidates do not dispatch agents; they only reconcile terminal
|
|
37
|
+
lifecycle state with provider-native closure and rollup state.
|
|
38
|
+
|
|
39
|
+
## Public contract
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
/lisa:repair-intake <queue> [intake_mode=prd|build|both] [stale_after=2h] [max_candidates=100] [force=true]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
| Token | Meaning | Default |
|
|
46
|
+
|-------|---------|---------|
|
|
47
|
+
| `<queue>` | Same queue identifier `lisa:intake` accepts (see Source dispatch). Required. | — |
|
|
48
|
+
| `intake_mode` | `prd` \| `build` \| `both`. Only meaningful for a GitHub `org/repo` (or bare `github`) that hosts both PRD and build label namespaces. `both` is unique to repair — a repair sweep usefully covers both lifecycles in one schedule. Absent → `both` when both namespaces exist, else whichever lifecycle exists. | `both` for dual GitHub queues; otherwise infer |
|
|
49
|
+
| `stale_after` | How long with no observable activity before an in-progress item counts as stalled. Accepts `24h`, `90m`, `2d`, or `0` (treat any in-progress item as stalled — manual recovery, also the only way to resume work on a provider that exposes no reliable timestamp). Overrides config. | `2h` |
|
|
50
|
+
| `max_candidates` | Cap on how many stuck/close-out candidates to enumerate and evaluate. Repair every materially actionable candidate within this bounded set, then stop. Overrides config. | `100` |
|
|
51
|
+
| `force` | `true` bypasses the loop-prevention backoff window (so a manual re-run re-attempts items even if their fingerprint is unchanged). It does **not** change the staleness rule — use `stale_after=0` for that. | `false` |
|
|
52
|
+
|
|
53
|
+
## Confirmation policy
|
|
54
|
+
|
|
55
|
+
Do NOT ask the caller whether to proceed. Once invoked with a queue, run the cycle to
|
|
56
|
+
completion. The caller (a human at the CLI or a scheduled cron) has already authorized the run
|
|
57
|
+
by invoking the skill; re-prompting defeats the purpose of a background repair sweep.
|
|
58
|
+
|
|
59
|
+
Specifically forbidden:
|
|
60
|
+
|
|
61
|
+
- Previewing projected scope (number of stuck items, projected re-dispatch count, write counts)
|
|
62
|
+
and asking whether to continue.
|
|
63
|
+
- Offering A/B/C-style choices like "repair / skip / report-only" — the documented behavior IS
|
|
64
|
+
the default.
|
|
65
|
+
- Pausing because many items are stuck, an item looks complex, or a repair is likely to land
|
|
66
|
+
the item back in `blocked`. Returning an item to `blocked` with a current, accurate note is a
|
|
67
|
+
valid outcome of the repair lifecycle, not a failure.
|
|
68
|
+
- Pausing because a re-dispatch looks expensive. The cost of one cycle is bounded by
|
|
69
|
+
`max_candidates` and the actionable subset inside that cap; the cost of stalling a scheduled
|
|
70
|
+
cron waiting on a human is unbounded.
|
|
71
|
+
|
|
72
|
+
The only legitimate reasons to stop early:
|
|
73
|
+
|
|
74
|
+
- Missing required input (no queue argument, missing project configuration). Surface the
|
|
75
|
+
missing value and exit.
|
|
76
|
+
- The queue itself is misconfigured (Status property missing expected values, JIRA workflow
|
|
77
|
+
can't reach required transitions). Surface and exit.
|
|
78
|
+
- No stuck/close-out candidates, or none actionable this cycle. Exit cleanly with the idle-case
|
|
79
|
+
summary.
|
|
80
|
+
|
|
81
|
+
## Orchestration: agent team
|
|
82
|
+
|
|
83
|
+
If you are NOT already operating inside an agent team (no prior successful team-creation or
|
|
84
|
+
subagent-delegation tool call in this session, not spawned into a team context), the very first
|
|
85
|
+
thing you do is establish team orchestration.
|
|
86
|
+
|
|
87
|
+
Use the team tool for the current runtime:
|
|
88
|
+
|
|
89
|
+
- Claude: use `TeamCreate`. If `TeamCreate` has not been loaded yet, first use `ToolSearch` with
|
|
90
|
+
`query: "select:TeamCreate"` to load its schema.
|
|
91
|
+
- Codex: do not call `TeamCreate`; Codex does not expose that Claude tool. Use `tool_search`
|
|
92
|
+
with a query like `multi-agent tools` to load `multi_agent_v1`, then use
|
|
93
|
+
`multi_agent_v1.spawn_agent` for teammate delegation. Treat the first successful `spawn_agent`
|
|
94
|
+
call as establishing team orchestration.
|
|
95
|
+
- Other runtimes: use the current runtime's tool-discovery mechanism to discover and call the
|
|
96
|
+
appropriate multi-agent/team tool.
|
|
97
|
+
|
|
98
|
+
If no team creation or subagent delegation tool is available, explicitly state that team
|
|
99
|
+
orchestration is unavailable in this runtime, continue as the lead agent, and preserve the
|
|
100
|
+
workflow's review, verification, and task-tracking obligations locally.
|
|
101
|
+
|
|
102
|
+
Until the team is established, the first Codex teammate has been spawned, or the no-team
|
|
103
|
+
fallback has been declared, do NOT call any of: `Agent`, `TaskCreate`, `Skill`, MCP tools
|
|
104
|
+
(Atlassian / Linear / GitHub / Notion), `Read`, `Write`, `Edit`, `Bash`, `Grep`, `Glob`.
|
|
105
|
+
Scanning the queue, evaluating staleness, and dispatching per-item repairs — all of those are
|
|
106
|
+
tasks for the team you are about to create, not for the lead session before orchestration
|
|
107
|
+
exists.
|
|
108
|
+
|
|
109
|
+
If you ARE already inside an agent team (e.g., a teammate invoked this skill via the Skill
|
|
110
|
+
tool), do NOT create a second team — many harnesses reject double-creates — and do NOT collapse the nested flow into a single inline worker. A nested team-first flow must still bring in the specialists it requires by adding them to the existing team, not by doing the work itself:
|
|
111
|
+
|
|
112
|
+
- **Claude:** teams are flat and only the lead can add named teammates, so do NOT call `Agent` with a `name` from a teammate (the harness rejects it: *"Teammates cannot spawn other teammates — the team roster is flat"*). Send the team lead a message naming the specialist teammate(s) this flow needs, their task assignments, and completion criteria, then coordinate through the shared task list until they finish. An anonymous subagent (`Agent` with `name` omitted) is permitted only for bounded one-shot work whose result returns directly to you — it is not a substitute for the required lifecycle specialists.
|
|
113
|
+
- **Codex:** do NOT call `TeamCreate`. If the lead/root agent is addressable (you were given its id/handle), send it a request to `multi_agent_v1.spawn_agent` the specialist agent(s), including each agent's prompt, ownership, and expected result. If no lead handle exists but `spawn_agent` is available to you, spawn only the bounded specialist agent(s) this flow needs, `wait_agent` for their results, and relay those results upward to the parent/lead.
|
|
114
|
+
|
|
115
|
+
Treat the first successful lead-spawn request (or, on the Codex fallback, the first specialist spawn) as preserving team orchestration. Never satisfy a team-first lifecycle flow by doing all the work inline. The cycle's outer team is created by repair-intake. Each per-item repair it runs
|
|
116
|
+
(`lisa:<source>-to-tracker` for a PRD, `lisa:<tracker>-agent` for a build item) executes within
|
|
117
|
+
the same team — those skills' orchestration preambles detect the existing team and skip creating
|
|
118
|
+
a second one. One team per cron cycle.
|
|
119
|
+
|
|
120
|
+
## Source dispatch
|
|
121
|
+
|
|
122
|
+
Detect the queue type from `$ARGUMENTS` using the **exact same detection and disambiguation
|
|
123
|
+
rules as `lisa:intake`** — read that skill's "Source dispatch" section for the authoritative
|
|
124
|
+
table; the detection is identical and only the per-item action changes (repair instead of
|
|
125
|
+
claim-and-advance). The essentials, inlined here so this skill is self-complete:
|
|
126
|
+
|
|
127
|
+
| If `$ARGUMENTS` is... | Queue / lifecycle | Source/tracker key | Candidates repaired |
|
|
128
|
+
|------------------------|-------------------|--------------------|----------------------|
|
|
129
|
+
| Notion **database** URL/ID | PRD (Notion) | source=notion | `in_review`, `blocked`, terminal/open PRDs, all-terminal generated-work rollups |
|
|
130
|
+
| Confluence **space** URL/key | PRD (Confluence) | source=confluence | `in_review`, `blocked`, terminal/open PRDs, all-terminal generated-work rollups |
|
|
131
|
+
| Confluence **parent page** URL/ID | PRD (Confluence, narrowed) | source=confluence | `in_review`, `blocked`, terminal/open PRDs, all-terminal generated-work rollups |
|
|
132
|
+
| Linear **workspace** URL, **team** URL/key, or literal `linear` | PRD (Linear) | source=linear | `in_review`, `blocked`, terminal/open PRDs, all-terminal generated-work rollups |
|
|
133
|
+
| GitHub **repo** URL / `org/repo` (PRD namespace) | PRD (GitHub) | source=github | `in_review`, `blocked`, terminal/open PRDs, all-terminal generated-work rollups |
|
|
134
|
+
| GitHub **repo** URL / `org/repo` with `tracker = github` (build namespace) | Build (GitHub) | tracker=github | `claimed`, `blocked`, terminal/open issues, all-terminal parent rollups |
|
|
135
|
+
| Literal `github` | GitHub; route by `intake_mode` (`prd` / `build` / `both`) | per lifecycle | per lifecycle above |
|
|
136
|
+
| JIRA project key or full JQL | Build (JIRA) | tracker=jira | `claimed`, `blocked`, terminal/closure verification, all-terminal parent rollups |
|
|
137
|
+
|
|
138
|
+
Disambiguation (same as `lisa:intake`): a `notion.so`/`notion.site` URL → Notion; an Atlassian
|
|
139
|
+
`/wiki/spaces/<KEY>` URL → Confluence (with `/pages/<id>` → parent-page narrowing); a
|
|
140
|
+
`linear.app` workspace/team URL or literal `linear` → Linear; a `github.com` URL / `<org>/<repo>`
|
|
141
|
+
token / literal `github` → GitHub; a bare token matching the JIRA project-key regex → JIRA
|
|
142
|
+
(else try Confluence space, then Linear team); a string with JQL operators → JQL. **A single-item
|
|
143
|
+
URL is out of scope** — this skill is batch-only; repair one item by hand via `lisa:implement`
|
|
144
|
+
(build) or by re-running `lisa:<source>-to-tracker` (PRD).
|
|
145
|
+
|
|
146
|
+
Role names for every vendor are resolved from `.lisa.config.json` per the `config-resolution`
|
|
147
|
+
rule — never hardcode status/label strings. The relevant repair roles:
|
|
148
|
+
|
|
149
|
+
| Lifecycle | Vendor | In-progress role key | Blocked role key | Terminal / rollup role key |
|
|
150
|
+
|-----------|--------|----------------------|------------------|----------------------------|
|
|
151
|
+
| Build | JIRA | `jira.workflow.claimed` (`In Progress`) | `jira.workflow.blocked` (`Blocked`) | env-resolved `jira.workflow.done` |
|
|
152
|
+
| Build | GitHub | `github.labels.build.claimed` (`status:in-progress`) | `github.labels.build.blocked` (`status:blocked`) | env-resolved `github.labels.build.done` (`status:done`) |
|
|
153
|
+
| Build | Linear | `linear.labels.build.claimed` (`status:in-progress`) | `linear.labels.build.blocked` (`status:blocked`) | env-resolved `linear.labels.build.done` (`status:done`) |
|
|
154
|
+
| PRD | Notion | `notion.values.in_review` (`In Review`) | `notion.values.blocked` (`Blocked`) | `notion.values.shipped` (`Shipped`) |
|
|
155
|
+
| PRD | GitHub | `github.labels.prd.in_review` (`prd-in-review`) | `github.labels.prd.blocked` (`prd-blocked`) | `github.labels.prd.shipped` (`prd-shipped`) |
|
|
156
|
+
| PRD | Linear | `linear.labels.prd.in_review` (`prd-in-review`) | `linear.labels.prd.blocked` (`prd-blocked`) | `linear.labels.prd.shipped` (`prd-shipped`) |
|
|
157
|
+
| PRD | Confluence | `confluence.parents.in_review` (page id) | `confluence.parents.blocked` (page id) | `confluence.parents.shipped` (page id) |
|
|
158
|
+
|
|
159
|
+
Resolve with the standard role-read pattern (local overrides global, default fallback):
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
read_role() {
|
|
163
|
+
local path="$1" default="$2"
|
|
164
|
+
local local_v global_v
|
|
165
|
+
local_v=$(jq -r "${path} // empty" .lisa.config.local.json 2>/dev/null)
|
|
166
|
+
global_v=$(jq -r "${path} // empty" .lisa.config.json 2>/dev/null)
|
|
167
|
+
echo "${local_v:-${global_v:-$default}}"
|
|
168
|
+
}
|
|
169
|
+
# e.g. build/github:
|
|
170
|
+
CLAIMED=$(read_role '.github.labels.build.claimed' 'status:in-progress')
|
|
171
|
+
BLOCKED=$(read_role '.github.labels.build.blocked' 'status:blocked')
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Access layer (which surface does each write)
|
|
175
|
+
|
|
176
|
+
repair-intake stays vendor-neutral; concrete reads/writes go through the same layers the vendor
|
|
177
|
+
intakes use. Never call Atlassian MCP or `acli` directly — go through `lisa:atlassian-access`.
|
|
178
|
+
|
|
179
|
+
| Vendor | Reads (scan / comments / links) | Writes (transition / comment / close-out) | Re-dispatch / re-validate |
|
|
180
|
+
|--------|---------------------------------|-------------------------------|---------------------------|
|
|
181
|
+
| JIRA (build) | `lisa:atlassian-access` `search-issues` / `lisa:jira-read-ticket` | `lisa:atlassian-access` `transition` / `comment` | `lisa:jira-agent` |
|
|
182
|
+
| GitHub (build) | `gh issue list` / `gh issue view --json` / `gh pr list` / GraphQL sub-issues | `gh issue edit` (labels) / `gh issue comment` / `gh issue close --reason completed` | `lisa:github-agent` |
|
|
183
|
+
| Linear (build) | Linear MCP `list_issues` / `get_issue` / `list_comments` | Linear MCP `save_issue` (labels) / `save_comment` | `lisa:linear-agent` |
|
|
184
|
+
| Notion (PRD) | `lisa:notion-access` (`query`, page comments) | `lisa:notion-access` `write-page` (status) / page comment | `lisa:notion-to-tracker` (dry-run) |
|
|
185
|
+
| GitHub (PRD) | `gh issue list/view` (PRD labels) / GraphQL sub-issues / generated-work section | `gh issue edit` / `gh issue comment` / `gh issue close --reason completed` | `lisa:github-to-tracker` (dry-run) |
|
|
186
|
+
| Linear (PRD) | Linear MCP `list_projects` / `get_project` (+ sentinel feedback issue) | Linear MCP `save_project` (labels) / `save_comment` | `lisa:linear-to-tracker` (dry-run) |
|
|
187
|
+
| Confluence (PRD) | `lisa:atlassian-access` CQL | `lisa:atlassian-access` page `parentId` update / comment | `lisa:confluence-to-tracker` (dry-run) |
|
|
188
|
+
|
|
189
|
+
## Staleness model
|
|
190
|
+
|
|
191
|
+
An in-progress item (build `claimed`, PRD `in_review`) is **stalled** only if it shows no
|
|
192
|
+
observable activity newer than the `stale_after` threshold. `blocked` items are NOT gated on
|
|
193
|
+
staleness — their repairability is judged on current blocker/answer state, not elapsed time.
|
|
194
|
+
|
|
195
|
+
### Threshold resolution
|
|
196
|
+
|
|
197
|
+
1. `$ARGUMENTS` `stale_after=<dur>` (one-off override) — always wins. Parse `Nh` / `Nm` / `Nd` /
|
|
198
|
+
`0` into hours.
|
|
199
|
+
2. `.lisa.config.json` `intake.repair.staleAfterHours` (durable project default).
|
|
200
|
+
3. Built-in default: **2 hours**.
|
|
201
|
+
|
|
202
|
+
`stale_after=0` means "treat any in-progress item as stalled" — a manual full-recovery lever,
|
|
203
|
+
and the only way to resume work on a provider that exposes no reliable activity timestamp.
|
|
204
|
+
|
|
205
|
+
### Activity signal (most-recent-wins, portable across vendors)
|
|
206
|
+
|
|
207
|
+
Compute the item's newest activity timestamp from the highest-priority signal the vendor
|
|
208
|
+
exposes, and compare it to `now - stale_after`:
|
|
209
|
+
|
|
210
|
+
1. Provider-native item `updatedAt` / `last_edited_time` / `updated`.
|
|
211
|
+
2. Latest lifecycle/progress **comment** on the item (and, for Linear PRDs, the sentinel
|
|
212
|
+
feedback issue).
|
|
213
|
+
3. For build items, latest **PR activity** on the linked PR: newest commit, review, check-run,
|
|
214
|
+
or PR comment.
|
|
215
|
+
4. Status/label **transition** time, when the provider exposes it cleanly.
|
|
216
|
+
|
|
217
|
+
If ANY of these is newer than the threshold, the item is **active** → record it as `active` and
|
|
218
|
+
skip it (read-only). For build `claimed`, an open PR with recent commits/checks is active. For
|
|
219
|
+
PRD `in_review`, a recent comment or page edit is active.
|
|
220
|
+
|
|
221
|
+
Count only **forward-progress** signals as keep-alive: new commits, a review that was just
|
|
222
|
+
requested or posted, an in-progress/queued check run, a fresh progress comment. A **settled
|
|
223
|
+
blocker state** — a failing/errored check run, `CONFLICTING` mergeability, a `CHANGES_REQUESTED`
|
|
224
|
+
review, an unaddressed CodeRabbit/reviewer change request, or a failed deployment — is NOT
|
|
225
|
+
keep-alive activity: it does not reset the staleness clock. The clock runs from the last genuine
|
|
226
|
+
progress event, so a PR that has been sitting failed/conflicted/awaiting-changes for longer than
|
|
227
|
+
`stale_after` counts as stalled and is diagnosed below.
|
|
228
|
+
|
|
229
|
+
If a provider cannot expose any reliable timestamp, do **not** auto-resume its in-progress
|
|
230
|
+
items unless the caller passed `stale_after=0`. (Dependency-cleared `blocked` repair still
|
|
231
|
+
proceeds — it is judged on blocker state, not time.)
|
|
232
|
+
|
|
233
|
+
## Repair decision tree
|
|
234
|
+
|
|
235
|
+
Apply per candidate. Continue through the ordered list until every candidate inside the
|
|
236
|
+
`max_candidates` cap has been evaluated. Each candidate may trigger a write (lifecycle transition,
|
|
237
|
+
native close/archive/complete, re-dispatch, or refreshed note), be recorded read-only, or be
|
|
238
|
+
recorded under Errors. Do not stop after the first write; the cap is the batch boundary.
|
|
239
|
+
|
|
240
|
+
### Build `claimed` (stalled in-progress) → diagnose blocker, else resume in place
|
|
241
|
+
|
|
242
|
+
After the staleness gate passes, **first diagnose why it stalled** by inspecting the item's PRs and
|
|
243
|
+
deploys (see "Stuck-cause diagnosis" below). A stalled build usually stalled for a concrete external
|
|
244
|
+
reason, and re-dispatching the agent at it will not fix a PR that cannot merge or a deploy that
|
|
245
|
+
failed — it just churns.
|
|
246
|
+
|
|
247
|
+
0. **Diagnose PR & deploy blockers.** If a real external blocker is found (PR cannot merge — merge
|
|
248
|
+
conflict / rebase-required / failing checks / `CHANGES_REQUESTED` / unaddressed CodeRabbit; or a
|
|
249
|
+
failed deploy), **do not dispatch the agent**. Instead file a build-ready leaf fix ticket for the
|
|
250
|
+
blocker, move this item `claimed → blocked` with an `is blocked by` link to that ticket, and
|
|
251
|
+
record it. The existing "Build `blocked` → unblock if cleared" path resumes this item on a later
|
|
252
|
+
cycle once the fix ticket is terminal — a self-healing loop. Skip the resume steps below.
|
|
253
|
+
|
|
254
|
+
If no external blocker is found, the work simply died mid-flight — run the **same per-item sequence
|
|
255
|
+
the vendor build-intake runs**, skipping the claim transition (the item is already `claimed`):
|
|
256
|
+
|
|
257
|
+
1. Dispatch the item to the vendor agent — `lisa:jira-agent` / `lisa:github-agent` /
|
|
258
|
+
`lisa:linear-agent` (matching the queue's tracker) — with the item ref. This resumes the work
|
|
259
|
+
in place, preserving its existing branch/PR and prior comments.
|
|
260
|
+
2. **On agent success**, apply the scanner's post-agent transition yourself: `claimed → done`,
|
|
261
|
+
where `done` is **env-resolved** exactly as `lisa:<tracker>-build-intake` resolves it (per
|
|
262
|
+
`config-resolution` env-keyed `done`: explicit `target_env` arg wins; else reverse-lookup the
|
|
263
|
+
env from the resulting PR's base branch via `deploy.branches`; if `done` is a map and env is
|
|
264
|
+
unresolvable, fail loudly — never guess). repair-intake owns this transition because it is
|
|
265
|
+
standing in for the scanner that never got to finish it.
|
|
266
|
+
3. **On a surfaced blocker** (agent reports it cannot proceed), leave/move the item to `blocked`
|
|
267
|
+
with a `[lisa-repair-intake]` note (see Loop prevention).
|
|
268
|
+
|
|
269
|
+
> Do **not** reset stalled in-progress items to `ready`. Reset throws away state, makes a
|
|
270
|
+
> partially-built item look freshly human-approved to the next `lisa:intake` claim, and forces a
|
|
271
|
+
> two-cycle recovery. Resume in place.
|
|
272
|
+
|
|
273
|
+
#### Stuck-cause diagnosis: PR & deploy blockers
|
|
274
|
+
|
|
275
|
+
Run this for every stalled `claimed` build item **before** considering an agent re-dispatch. The
|
|
276
|
+
goal is to distinguish "work died mid-flight, just resume it" from "work is blocked on a concrete
|
|
277
|
+
external state that resuming the agent cannot fix."
|
|
278
|
+
|
|
279
|
+
**1. Find the associated PR(s) and deploy(s).** From the item's linked PRs (GitHub: remote/dev
|
|
280
|
+
links and `gh pr list --search <issue-ref>`; JIRA: dev-status / remote links; Linear: attachments
|
|
281
|
+
and git-branch links) and the deploy(s) for the resulting merge (the env-keyed `deploy.branches`
|
|
282
|
+
mapping from `config-resolution`). Read each PR with the vendor's native state, e.g. GitHub
|
|
283
|
+
`gh pr view <n> --json mergeable,mergeStateStatus,reviewDecision,statusCheckRollup,comments,reviews`.
|
|
284
|
+
|
|
285
|
+
**2. Classify as a blocker.** Treat any of these as a real external blocker:
|
|
286
|
+
|
|
287
|
+
- **Merge conflict / rebase required** — `mergeable = CONFLICTING`, or `mergeStateStatus` in
|
|
288
|
+
`DIRTY` / `BEHIND`.
|
|
289
|
+
- **Failing required checks** — `statusCheckRollup` has a `FAILURE`/`ERROR`/`TIMED_OUT` conclusion,
|
|
290
|
+
or `mergeStateStatus = UNSTABLE`/`BLOCKED` due to checks.
|
|
291
|
+
- **Change requests outstanding** — `reviewDecision = CHANGES_REQUESTED`, or unresolved CodeRabbit
|
|
292
|
+
(or other reviewer) comments that request changes and have not been addressed by a newer commit.
|
|
293
|
+
- **Branch-protection / approvals blocked** — `mergeStateStatus = BLOCKED` for a reason other than
|
|
294
|
+
a transient check still running.
|
|
295
|
+
- **Failed deploy** — the deployment for the item's merge/branch reports a failed/errored status
|
|
296
|
+
(failed deploy workflow run, failed deployment status, or the project's deploy check is red).
|
|
297
|
+
|
|
298
|
+
A check that is still **queued/in progress**, or a `CLEAN`/`HAS_HOOKS` mergeable PR with no
|
|
299
|
+
outstanding change request, is **not** a blocker — that is normal in-flight state. (Such a PR with
|
|
300
|
+
recent check/commit activity would already have been caught as `active` by the staleness gate.)
|
|
301
|
+
|
|
302
|
+
**3. On a blocker found → file a leaf fix ticket + block the item.**
|
|
303
|
+
|
|
304
|
+
1. **File one build-ready leaf fix ticket** per distinct blocker via `lisa:tracker-write` (the
|
|
305
|
+
vendor-neutral leaf writer + validation gate; never a vendor `*-write-*` skill directly),
|
|
306
|
+
`issue_type: Bug` for a failing-check/conflict/failed-deploy, `Task` for review-feedback
|
|
307
|
+
follow-up, `build_ready: true` so it auto-builds. The ticket MUST name: the blocked item + its
|
|
308
|
+
PR/deploy URL, the exact blocker (conflict / which checks failed with their logs link / which
|
|
309
|
+
change requests / which deploy run), three-audience description, and Gherkin acceptance criteria
|
|
310
|
+
for "PR is mergeable / deploy is green."
|
|
311
|
+
2. **Transition the stalled item `claimed → blocked`** and add an **`is blocked by`** link to the
|
|
312
|
+
new fix ticket (vendor-native: JIRA issue link `is blocked by`; GitHub/Linear `Blocked by:` line
|
|
313
|
+
+ label). Post a `[lisa-repair-intake]` note naming what it is blocked by and why.
|
|
314
|
+
3. **Record it** as a repair write. Do **not** dispatch the vendor agent for this item this cycle.
|
|
315
|
+
|
|
316
|
+
The item now sits in `blocked`; once the fix ticket reaches a terminal state, the **Build
|
|
317
|
+
`blocked` → unblock if cleared** path (next section) detects the cleared `is blocked by`
|
|
318
|
+
dependency and resumes the original in place — a self-healing loop.
|
|
319
|
+
|
|
320
|
+
**Idempotency.** Before filing, check for an **open** fix ticket already carrying the marker
|
|
321
|
+
`[lisa-repair-intake] blocker:<item-ref>/<blocker-key>` (blocker-key is a stable slug of the
|
|
322
|
+
blocker, e.g. `pr-1234/merge-conflict` or `pr-1234/checks-failing`). If one exists, reference it
|
|
323
|
+
and ensure the `is blocked by` link is present rather than creating a duplicate. Honor the backoff
|
|
324
|
+
window and state fingerprint (Loop prevention) so re-runs over the same unchanged blocker are no-ops.
|
|
325
|
+
|
|
326
|
+
### Build `blocked` → re-evaluate, unblock if cleared
|
|
327
|
+
|
|
328
|
+
1. Read the block reason and dependencies (see Dependency clearing).
|
|
329
|
+
2. If every parsed blocker is **cleared** → move `blocked → claimed`, then run the same
|
|
330
|
+
agent-dispatch + post-agent `claimed → done` sequence as the stalled-`claimed` path above
|
|
331
|
+
(one-cycle recovery). If the agent re-blocks, move back to `blocked` — a valid outcome.
|
|
332
|
+
3. If the block was an **ambiguity** research can settle and no dependency remains → run the
|
|
333
|
+
research needed (`lisa:codebase-research` / `lisa:product-walkthrough`); if resolved, proceed
|
|
334
|
+
as in (2).
|
|
335
|
+
4. Else → still blocked. Refresh the note with the current reason (Loop prevention) and leave it
|
|
336
|
+
`blocked`.
|
|
337
|
+
|
|
338
|
+
### Build terminal-open → native close / complete / resolve
|
|
339
|
+
|
|
340
|
+
For each build item that already carries the env-resolved true terminal `done` role but is still
|
|
341
|
+
native-open / active / unresolved:
|
|
342
|
+
|
|
343
|
+
1. Verify the item is a **leaf** or a **rollup parent whose all required children are terminal**.
|
|
344
|
+
If it is a parent with incomplete children, do not close it; refresh a `[lisa-repair-intake]`
|
|
345
|
+
note naming the incomplete child set.
|
|
346
|
+
2. Verify the terminal `done` role is the true final value per `leaf-only-lifecycle` and
|
|
347
|
+
`config-resolution` env-keyed `done`. Intermediate env labels (for example `status:on-dev` or
|
|
348
|
+
`status:on-stg`) are not terminal and must stay open.
|
|
349
|
+
3. Perform the provider-native terminal action idempotently:
|
|
350
|
+
- GitHub: `gh issue close <number> --repo <org>/<repo> --reason completed`.
|
|
351
|
+
- Linear: move the issue to the configured Done / Completed native workflow state if available;
|
|
352
|
+
otherwise record the missing native state as a setup error.
|
|
353
|
+
- JIRA: verify it is resolved / closed (`statusCategory = Done`, resolution set if required);
|
|
354
|
+
if not, transition through the configured terminal workflow path or report the missing setup.
|
|
355
|
+
4. Post a compact `[lisa-repair-intake]` note only when the native close-out changed state or when
|
|
356
|
+
an actionable setup error must be surfaced. Do not spam already-closed terminal items.
|
|
357
|
+
|
|
358
|
+
### Build rollup with all children terminal → close out parent/container
|
|
359
|
+
|
|
360
|
+
For each parent/container item (Epic, Story, Spike, Project, or any item with child work) whose
|
|
361
|
+
required child set is fully terminal:
|
|
362
|
+
|
|
363
|
+
1. Read the child set using the vendor-native hierarchy first (GitHub sub-issues, JIRA
|
|
364
|
+
Epic/parent/sub-task hierarchy, Linear project/parent/sub-issues), with the same fallbacks the
|
|
365
|
+
vendor read/sync skills document.
|
|
366
|
+
2. Evaluate bottom-up per `leaf-only-lifecycle`: every required child must already be terminal.
|
|
367
|
+
Optional / won't-do / not-planned children are terminal-but-dropped and do not hold the parent
|
|
368
|
+
open.
|
|
369
|
+
3. Apply the configured terminal rollup role to the parent/container, removing any stale build
|
|
370
|
+
lifecycle role that conflicts.
|
|
371
|
+
4. Immediately perform terminal native closure where the provider supports it (GitHub close,
|
|
372
|
+
Linear complete, JIRA resolved/closed). A completed rollup parent should not remain open in
|
|
373
|
+
GitHub merely because no leaf agent touched it.
|
|
374
|
+
5. If any required child is incomplete, active, blocked, or inaccessible, leave the parent open and
|
|
375
|
+
record it as `still_blocked` or `active` with the current child tally.
|
|
376
|
+
|
|
377
|
+
### PRD `in_review` (stalled in-progress) → re-run validate→route
|
|
378
|
+
|
|
379
|
+
After the staleness gate passes, run the **same dry-run validate→route pipeline the vendor PRD
|
|
380
|
+
intake runs per item**, targeted at this single PRD and **skipping the claim** (it is already
|
|
381
|
+
`in_review`):
|
|
382
|
+
|
|
383
|
+
1. Invoke `lisa:<source>-to-tracker` with `dry_run: true` and the PRD's URL (source = the queue's
|
|
384
|
+
PRD vendor: `notion-to-tracker` / `confluence-to-tracker` / `linear-to-tracker` /
|
|
385
|
+
`github-to-tracker`). This indirectly runs `lisa:tracker-source-artifacts`,
|
|
386
|
+
`lisa:product-walkthrough`, and the `lisa:tracker-validate` gate, returning a structured
|
|
387
|
+
PASS/FAIL report with `prd_anchor` snippets — the same report the PRD intake consumes.
|
|
388
|
+
2. **On PASS** → re-invoke `lisa:<source>-to-tracker` with `dry_run: false` to write the tickets
|
|
389
|
+
(its full run already writes the PRD back-link via `lisa:prd-backlink`), run the
|
|
390
|
+
`lisa:prd-ticket-coverage` audit as the PRD intake does, then transition the PRD to its
|
|
391
|
+
`ticketed` role via the access layer.
|
|
392
|
+
3. **On FAIL** → post the clarifying-question comments grouped by `prd_anchor` (page-level for
|
|
393
|
+
`prd_anchor: null`), tagged `[lisa-repair-intake]` (Loop prevention), and transition to
|
|
394
|
+
`blocked`.
|
|
395
|
+
|
|
396
|
+
### PRD `blocked` → re-validate if new answers exist
|
|
397
|
+
|
|
398
|
+
1. Determine whether **new clarifying answers** exist: any comment/update on the PRD newer than
|
|
399
|
+
the last `[lisa-repair-intake]` note or the original `blocked` note. For Linear include the
|
|
400
|
+
sentinel feedback issue and anchored sub-issue comments; for Confluence include inline/footer
|
|
401
|
+
comments where the access layer exposes them; for Notion include page comments and
|
|
402
|
+
`last_edited_time`.
|
|
403
|
+
2. If new answers exist → run the `lisa:<source>-to-tracker` dry-run validate→route pipeline as
|
|
404
|
+
in PRD `in_review` above (skipping claim). PASS → `ticketed`; FAIL → refresh note, stay
|
|
405
|
+
`blocked`.
|
|
406
|
+
3. If no new answers and no dependency change → leave `blocked` untouched (subject to the
|
|
407
|
+
backoff window — do not re-post an identical note).
|
|
408
|
+
|
|
409
|
+
### PRD terminal-open → close / archive source artifact
|
|
410
|
+
|
|
411
|
+
For each PRD source artifact that already carries the configured terminal source role (`shipped`
|
|
412
|
+
for generated-work completion, or a source-specific terminal role that the configured PRD source
|
|
413
|
+
declares closed-out) but is still native-open / active:
|
|
414
|
+
|
|
415
|
+
1. Verify the PRD's generated top-level work is terminal per `prd-lifecycle-rollup`, unless the
|
|
416
|
+
source artifact is already in a stronger product-owned terminal role that explicitly permits
|
|
417
|
+
closure. Do not move a PRD out of `draft` or `verified`.
|
|
418
|
+
2. Close or archive through the source vendor's native mechanism where one exists:
|
|
419
|
+
- GitHub: close the PRD issue with `--reason completed`.
|
|
420
|
+
- Linear: archive/close the PRD project through Linear MCP when supported by the workspace.
|
|
421
|
+
- Confluence/Notion: archive the page only when the access layer exposes a supported archival
|
|
422
|
+
action; otherwise record a capability-aware no-op.
|
|
423
|
+
3. Never set `verified`; `/lisa:verify-prd` remains the only automated writer of the verified
|
|
424
|
+
role. This path only reconciles an already-terminal PRD with native closure.
|
|
425
|
+
|
|
426
|
+
### PRD rollup with all generated work terminal → ship and close out
|
|
427
|
+
|
|
428
|
+
For each PRD in `ticketed` or another non-product-owned open PRD role whose generated top-level
|
|
429
|
+
work is fully terminal:
|
|
430
|
+
|
|
431
|
+
1. Read the generated top-level child set exactly as `prd-ticket-coverage` / the vendor PRD intake
|
|
432
|
+
does: native PRD children where supported, plus the durable generated-work section fallback.
|
|
433
|
+
2. Evaluate terminal state using `prd-lifecycle-rollup`'s vendor predicate. A generated Epic or
|
|
434
|
+
Story is terminal only when it has itself rolled up and closed out; do not re-derive its leaf
|
|
435
|
+
descendants directly when its own state is still open.
|
|
436
|
+
3. Transition the PRD to the configured `shipped` role.
|
|
437
|
+
4. Close/archive the PRD source artifact through the vendor-native close-out mechanism where
|
|
438
|
+
supported. This repair path is the explicit close-out sweep for PRDs whose child work is done;
|
|
439
|
+
it does not set `verified` and does not run `/lisa:verify-prd`.
|
|
440
|
+
5. If generated work is missing, ambiguous, or partially incomplete, leave the PRD open and report
|
|
441
|
+
the incomplete child set. Never close a PRD on partial completion.
|
|
442
|
+
|
|
443
|
+
## Dependency clearing (conservative, vendor-specific extraction)
|
|
444
|
+
|
|
445
|
+
`lisa:tracker-read` is a thin dispatcher that returns each vendor's bundle **verbatim** — there
|
|
446
|
+
is no normalized `is blocked by` field. Read the bundle, then extract blockers per vendor:
|
|
447
|
+
|
|
448
|
+
- **GitHub**: parse the durable forms `lisa:github-build-intake` documents — `Blocked by: #123`,
|
|
449
|
+
qualified cross-repo refs (`owner/repo#123`), issue URLs in the body/comments — plus timeline
|
|
450
|
+
cross-reference events.
|
|
451
|
+
- **JIRA**: inspect the native issue-link records `lisa:jira-read-ticket` returns and select the
|
|
452
|
+
`is blocked by` link type.
|
|
453
|
+
- **Linear**: inspect the native issue **relations** from Linear MCP `get_issue` and select
|
|
454
|
+
blocker relations.
|
|
455
|
+
|
|
456
|
+
Then classify each blocker:
|
|
457
|
+
|
|
458
|
+
- **Closed / Done** (its true terminal role) → **cleared**.
|
|
459
|
+
- **Open** in any non-terminal role (`ready` / `claimed` / `review` / unknown) → **still
|
|
460
|
+
blocking**.
|
|
461
|
+
- **Inaccessible** (deleted, cross-org, permission denied) → **still blocking**, unless the item
|
|
462
|
+
body or a newer human comment explicitly states the dependency is resolved.
|
|
463
|
+
|
|
464
|
+
Only re-dispatch when **every** parsed blocker is cleared. When in doubt, stay blocked — a
|
|
465
|
+
false-negative (left blocked) is cheap; a false-positive (re-dispatched into a real blocker)
|
|
466
|
+
wastes a build cycle.
|
|
467
|
+
|
|
468
|
+
## Loop prevention
|
|
469
|
+
|
|
470
|
+
A `blocked` item with a permanently unresolved problem must not be "repaired" and re-noted every
|
|
471
|
+
cron tick.
|
|
472
|
+
|
|
473
|
+
- Every note this skill writes is prefixed `[lisa-repair-intake]` and carries a compact **state
|
|
474
|
+
fingerprint**: the lifecycle role, the set of blocker refs + their observed states, the
|
|
475
|
+
validation verdict (PASS/FAIL), terminal/open state, rollup child tally, and a timestamp.
|
|
476
|
+
- Before writing a note or re-attempting a `blocked` item, compute the current fingerprint. If
|
|
477
|
+
an identical fingerprint was already posted within the **backoff window**, skip the item
|
|
478
|
+
silently (record as `still_blocked` / `active`, no write).
|
|
479
|
+
- Backoff window default = `stale_after` (2h). `force=true` bypasses backoff for a manual run.
|
|
480
|
+
- A *changed* fingerprint (new blocker state, new answers, new verdict) always warrants a fresh
|
|
481
|
+
note + re-attempt — backoff suppresses only no-op repeats.
|
|
482
|
+
|
|
483
|
+
## Lifecycle ownership guard
|
|
484
|
+
|
|
485
|
+
repair-intake owns the repair surfaces needed to recover stuck work and close-out drift:
|
|
486
|
+
build `claimed` / `blocked`, PRD `in_review` / `blocked`, terminal-labeled native-open items, and
|
|
487
|
+
parent/container rollups whose child sets are already terminal. It MAY:
|
|
488
|
+
|
|
489
|
+
- Apply the build scanner's post-agent `claimed → done` on a successful resume (it is finishing
|
|
490
|
+
the scanner's interrupted job), and move a dependency-cleared build item `blocked → claimed`.
|
|
491
|
+
- Move a re-validated PRD `in_review`/`blocked → ticketed` (PASS) or `→ blocked` (FAIL), exactly
|
|
492
|
+
as the PRD intake does.
|
|
493
|
+
- Close / complete / resolve build items that already carry the true terminal `done` role but are
|
|
494
|
+
still natively open, per `leaf-only-lifecycle`.
|
|
495
|
+
- Roll up a parent/container to the configured terminal state and close/complete/resolve it when
|
|
496
|
+
all required children are terminal.
|
|
497
|
+
- Move a PRD with fully terminal generated work to `shipped` and close/archive the source artifact
|
|
498
|
+
where the source vendor supports native close-out, per `prd-lifecycle-rollup`.
|
|
499
|
+
|
|
500
|
+
It MUST NOT:
|
|
501
|
+
|
|
502
|
+
- Move a PRD out of `draft` or `verified` (those are product-owned), or set `verified` itself.
|
|
503
|
+
- Apply a build `done` value other than via the env-resolution rules, or close a native item at
|
|
504
|
+
any value other than the true terminal `done` (see `leaf-only-lifecycle`).
|
|
505
|
+
- Touch `ready` items (that is `lisa:intake`'s lane).
|
|
506
|
+
|
|
507
|
+
## Cycle behavior
|
|
508
|
+
|
|
509
|
+
1. **Resolve the queue** — detect vendor/lifecycle (Source dispatch); resolve stuck role names
|
|
510
|
+
from config. For JIRA, confirm the needed transitions are reachable; stop on misconfig.
|
|
511
|
+
2. **Enumerate repair candidates** — query in-progress role(s), `blocked` role(s), terminal/open
|
|
512
|
+
items, and rollup parents/PRDs with child work for the detected lifecycle(s), up to
|
|
513
|
+
`max_candidates`, via the Access layer reads.
|
|
514
|
+
3. **Order deterministically**, highest repair-confidence first:
|
|
515
|
+
1. terminal-labeled items that only need native close / complete / resolve,
|
|
516
|
+
2. rollup parents/PRDs whose child sets are all terminal,
|
|
517
|
+
3. `blocked` items whose dependencies are now **cleared** (safe, high-value, one-cycle wins),
|
|
518
|
+
4. `blocked` items with **new clarifying answers**,
|
|
519
|
+
5. **stalled** in-progress items, oldest activity first.
|
|
520
|
+
4. **Walk the ordered list**, evaluating each candidate (terminal close-out, rollup child tally,
|
|
521
|
+
staleness, dependency, answer checks), and repair **every** candidate that is actionable inside
|
|
522
|
+
the `max_candidates` cap. Continue after successful writes and after per-item errors.
|
|
523
|
+
5. **Empty / nothing actionable** → exit cleanly:
|
|
524
|
+
`"No stuck items actionable this cycle (examined N, all active or in backoff)."`
|
|
525
|
+
6. **Failure isolation** — if evaluating one candidate errors, record it under Errors and
|
|
526
|
+
continue to the next; one bad item never aborts the cycle.
|
|
527
|
+
|
|
528
|
+
Process **all materially actionable repairs among the enumerated candidates** — scan up to
|
|
529
|
+
`max_candidates`, repair the actionable subset, then exit. This intentionally differs from
|
|
530
|
+
`lisa:intake`'s one-ready-item claim contract because repair work is bounded by an explicit cap and
|
|
531
|
+
often consists of cheap close-out reconciliation that should drain in one cron pass.
|
|
532
|
+
|
|
533
|
+
## Summary report
|
|
534
|
+
|
|
535
|
+
Report outcomes in these buckets:
|
|
536
|
+
|
|
537
|
+
- `resumed` — stalled in-progress work re-dispatched in place.
|
|
538
|
+
- `unblocked` — blocker cleared (or answers resolved); re-dispatched or transitioned to
|
|
539
|
+
`ticketed`.
|
|
540
|
+
- `closed_out` — terminal-labeled items whose native open/active state was closed, completed,
|
|
541
|
+
resolved, or archived.
|
|
542
|
+
- `rolled_up` — parent/container/PRD rollups advanced because all associated children were
|
|
543
|
+
terminal.
|
|
544
|
+
- `still_blocked` — examined and intentionally left `blocked`, with the active reason.
|
|
545
|
+
- `active` — skipped because current work is not stale (or within backoff).
|
|
546
|
+
- `errors` — items that failed evaluation, with the error.
|
|
547
|
+
|
|
548
|
+
State every item repaired this cycle and the action taken. If the output would be long, group by
|
|
549
|
+
bucket and show compact refs plus counts.
|
|
550
|
+
|
|
551
|
+
## Schedule examples
|
|
552
|
+
|
|
553
|
+
```text
|
|
554
|
+
/schedule "every 2 hours" /lisa:repair-intake https://www.notion.so/<workspace>/<database-id>
|
|
555
|
+
/schedule "every 2 hours" /lisa:repair-intake https://linear.app/acme
|
|
556
|
+
/schedule "every 2 hours" /lisa:repair-intake acme/product-prds
|
|
557
|
+
/schedule "every 2 hours" /lisa:repair-intake acme/frontend-v2 intake_mode=build
|
|
558
|
+
/schedule "every 2 hours" /lisa:repair-intake github intake_mode=both
|
|
559
|
+
/schedule "every 4 hours" /lisa:repair-intake SE stale_after=12h
|
|
560
|
+
/lisa:repair-intake SE stale_after=0 force=true # manual: treat all in-progress as stalled, ignore backoff
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
Run repair-intake **less frequently than** `lisa:intake` (the ready queue moves faster than
|
|
564
|
+
stuck work accumulates), or interleaved on a longer cadence.
|
|
565
|
+
|
|
566
|
+
## Rules
|
|
567
|
+
|
|
568
|
+
- Never run a cycle without an explicit queue. Side effects too high to default.
|
|
569
|
+
- Never reset stalled in-progress items to `ready` — resume in place (decision tree).
|
|
570
|
+
- Never mutate product-owned states (`draft`, `verified`) or set `verified`; PRD rollup close-out
|
|
571
|
+
may move open generated-work PRDs to `shipped` and close/archive them only after all associated
|
|
572
|
+
child work is terminal.
|
|
573
|
+
- Apply build `done` ONLY via the env-resolution rules, and trigger native closure only at the
|
|
574
|
+
true terminal `done` value (`leaf-only-lifecycle`).
|
|
575
|
+
- Never re-dispatch a `blocked` build item unless every parsed blocker is cleared (conservative
|
|
576
|
+
dependency clearing).
|
|
577
|
+
- Repair every materially actionable candidate inside the `max_candidates` cap; default cap is 100.
|
|
578
|
+
- Default GitHub `intake_mode` is `both` when both PRD and build namespaces exist.
|
|
579
|
+
- Honor the backoff window — never re-post an identical `[lisa-repair-intake]` note within it
|
|
580
|
+
(unless `force=true`).
|
|
581
|
+
- Never run two repair cycles concurrently against overlapping queues, and never run
|
|
582
|
+
repair-intake against a queue `lisa:intake` is concurrently draining — the scheduling layer is
|
|
583
|
+
responsible for serialization.
|
|
584
|
+
- Stop and surface failures rather than retry-loop.
|