@codyswann/lisa 4.74.9 → 4.75.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +60 -0
- package/dist/core/lisa-skill-sources.d.ts +3 -3
- package/dist/core/lisa-skill-sources.d.ts.map +1 -1
- package/dist/core/lisa-skill-sources.js +3 -2
- package/dist/core/lisa-skill-sources.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +730 -5
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +4 -4
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-devin/.claude-plugin/plugin.json +11 -0
- package/plugins/lisa-cdk-devin/.devin-plugin/plugin.json +8 -0
- package/plugins/lisa-cdk-devin/skills/setup-aws-accounts/SKILL.md +292 -0
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-devin/.claude-plugin/plugin.json +8 -0
- package/plugins/lisa-devin/.devin-plugin/plugin.json +8 -0
- package/plugins/lisa-devin/.mcp.json +8 -0
- package/plugins/lisa-devin/agents/architecture-specialist.md +32 -0
- package/plugins/lisa-devin/agents/bug-fixer.md +43 -0
- package/plugins/lisa-devin/agents/builder.md +44 -0
- package/plugins/lisa-devin/agents/confluence-prd-intake.md +65 -0
- package/plugins/lisa-devin/agents/debug-specialist.md +34 -0
- package/plugins/lisa-devin/agents/eval-specialist.md +33 -0
- package/plugins/lisa-devin/agents/git-history-analyzer.md +183 -0
- package/plugins/lisa-devin/agents/github-agent.md +155 -0
- package/plugins/lisa-devin/agents/github-build-intake.md +64 -0
- package/plugins/lisa-devin/agents/github-prd-intake.md +66 -0
- package/plugins/lisa-devin/agents/jira-agent.md +135 -0
- package/plugins/lisa-devin/agents/jira-build-intake.md +64 -0
- package/plugins/lisa-devin/agents/learner.md +85 -0
- package/plugins/lisa-devin/agents/learning-judge.md +119 -0
- package/plugins/lisa-devin/agents/learnings-synthesizer.md +155 -0
- package/plugins/lisa-devin/agents/linear-agent.md +138 -0
- package/plugins/lisa-devin/agents/linear-build-intake.md +64 -0
- package/plugins/lisa-devin/agents/linear-prd-intake.md +66 -0
- package/plugins/lisa-devin/agents/notion-prd-intake.md +63 -0
- package/plugins/lisa-devin/agents/performance-specialist.md +26 -0
- package/plugins/lisa-devin/agents/pr-mining-specialist.md +85 -0
- package/plugins/lisa-devin/agents/product-specialist.md +30 -0
- package/plugins/lisa-devin/agents/quality-specialist.md +30 -0
- package/plugins/lisa-devin/agents/security-specialist.md +43 -0
- package/plugins/lisa-devin/agents/skill-evaluator.md +205 -0
- package/plugins/lisa-devin/agents/spec-conformance-specialist.md +56 -0
- package/plugins/lisa-devin/agents/test-specialist.md +32 -0
- package/plugins/lisa-devin/agents/tracker-mining-specialist.md +85 -0
- package/plugins/lisa-devin/agents/verification-specialist.md +145 -0
- package/plugins/lisa-devin/hooks/auto-update.mjs +824 -0
- package/plugins/lisa-devin/hooks/auto-update.sh +31 -0
- package/plugins/lisa-devin/hooks/block-blind-automerge.sh +1242 -0
- package/plugins/lisa-devin/hooks/block-direct-issue-create.sh +2603 -0
- package/plugins/lisa-devin/hooks/block-host-name-leak.mjs +412 -0
- package/plugins/lisa-devin/hooks/block-host-name-leak.sh +61 -0
- package/plugins/lisa-devin/hooks/block-instruction-file-edits.sh +207 -0
- package/plugins/lisa-devin/hooks/block-managed-file-edits.sh +1175 -0
- package/plugins/lisa-devin/hooks/block-no-verify.sh +2288 -0
- package/plugins/lisa-devin/hooks/block-shell-json-parsing.sh +263 -0
- package/plugins/lisa-devin/hooks/cleanup-stale-worktrees.sh +122 -0
- package/plugins/lisa-devin/hooks/devin-tool-name-shim.sh +30 -0
- package/plugins/lisa-devin/hooks/discharge-work-item-gates.sh +90 -0
- package/plugins/lisa-devin/hooks/enforce-verification-gate.sh +506 -0
- package/plugins/lisa-devin/hooks/enforcement-vintage-npm.mjs +320 -0
- package/plugins/lisa-devin/hooks/enforcement-vintage.mjs +472 -0
- package/plugins/lisa-devin/hooks/enforcement-vintage.sh +48 -0
- package/plugins/lisa-devin/hooks/failure-signature-index.mjs +717 -0
- package/plugins/lisa-devin/hooks/failure-signature-index.sh +26 -0
- package/plugins/lisa-devin/hooks/guard-dedupe.bash +374 -0
- package/plugins/lisa-devin/hooks/inject-resolved-config.mjs +903 -0
- package/plugins/lisa-devin/hooks/inject-resolved-config.sh +107 -0
- package/plugins/lisa-devin/hooks/inject-rules.sh +49 -0
- package/plugins/lisa-devin/hooks/install-pkgs.sh +84 -0
- package/plugins/lisa-devin/hooks/operational-hazards.mjs +736 -0
- package/plugins/lisa-devin/hooks/operational-hazards.sh +28 -0
- package/plugins/lisa-devin/hooks/parity-safety-net-heredoc.py +1004 -0
- package/plugins/lisa-devin/hooks/parity-safety-net.sh +3275 -0
- package/plugins/lisa-devin/hooks/secrets-preflight.sh +72 -0
- package/plugins/lisa-devin/hooks/setup-jira-cli.sh +205 -0
- package/plugins/lisa-devin/hooks/shell-write-nudge.sh +86 -0
- package/plugins/lisa-devin/hooks/sonar-secrets.sh +205 -0
- package/plugins/lisa-devin/hooks/threshold-ratchet-compare.mjs +518 -0
- package/plugins/lisa-devin/hooks/threshold-ratchet-families.mjs +543 -0
- package/plugins/lisa-devin/hooks/threshold-ratchet.mjs +568 -0
- package/plugins/lisa-devin/hooks/threshold-ratchet.sh +22 -0
- package/plugins/lisa-devin/hooks/withdrawn-rulings.mjs +600 -0
- package/plugins/lisa-devin/hooks/withdrawn-rulings.sh +24 -0
- package/plugins/lisa-devin/hooks/worktree-binding-guard.mjs +1383 -0
- package/plugins/lisa-devin/hooks/worktree-binding-guard.sh +79 -0
- package/plugins/lisa-devin/hooks.json +247 -0
- package/plugins/lisa-devin/rules/eager/00-rule-index.md +82 -0
- package/plugins/lisa-devin/rules/eager/base-rules.md +85 -0
- package/plugins/lisa-devin/rules/eager/coding-philosophy.md +27 -0
- package/plugins/lisa-devin/rules/eager/config-resolution.md +37 -0
- package/plugins/lisa-devin/rules/eager/do-it-now.md +11 -0
- package/plugins/lisa-devin/rules/eager/empirical-inquiry.md +24 -0
- package/plugins/lisa-devin/rules/eager/falsifiable-checks.md +48 -0
- package/plugins/lisa-devin/rules/eager/history-audit.md +27 -0
- package/plugins/lisa-devin/rules/eager/integration-access-layer.md +19 -0
- package/plugins/lisa-devin/rules/eager/intent-routing.md +18 -0
- package/plugins/lisa-devin/rules/eager/learnings-ladder.md +18 -0
- package/plugins/lisa-devin/rules/eager/local-ci-first.md +15 -0
- package/plugins/lisa-devin/rules/eager/measurement-integrity.md +18 -0
- package/plugins/lisa-devin/rules/eager/never-name-a-downstream-project.md +9 -0
- package/plugins/lisa-devin/rules/eager/not-blocked-just-waiting.md +13 -0
- package/plugins/lisa-devin/rules/eager/operational-hazards.md +50 -0
- package/plugins/lisa-devin/rules/eager/report-actionability.md +26 -0
- package/plugins/lisa-devin/rules/eager/security-audit-handling.md +40 -0
- package/plugins/lisa-devin/rules/eager/session-status-updates.md +20 -0
- package/plugins/lisa-devin/rules/eager/settled-decisions.md +75 -0
- package/plugins/lisa-devin/rules/eager/stale-state-claims.md +26 -0
- package/plugins/lisa-devin/rules/eager/tool-access-gate.md +23 -0
- package/plugins/lisa-devin/rules/eager/tracked-work.md +9 -0
- package/plugins/lisa-devin/rules/eager/upstream-to-lisa.md +14 -0
- package/plugins/lisa-devin/rules/eager/verification.md +33 -0
- package/plugins/lisa-devin/rules/eager/wiki-knowledge-source.md +13 -0
- package/plugins/lisa-devin/rules/eager/withdrawn-rulings.md +102 -0
- package/plugins/lisa-devin/rules/reference/automation-runbook-contract.md +355 -0
- package/plugins/lisa-devin/rules/reference/base-rules.md +136 -0
- package/plugins/lisa-devin/rules/reference/bdd-e2e-coverage.md +301 -0
- package/plugins/lisa-devin/rules/reference/blocker-containment.md +165 -0
- package/plugins/lisa-devin/rules/reference/claim-archaeology.md +184 -0
- package/plugins/lisa-devin/rules/reference/claim-evidence-mapping.md +362 -0
- package/plugins/lisa-devin/rules/reference/claim-time-guards.md +135 -0
- package/plugins/lisa-devin/rules/reference/coding-philosophy.md +428 -0
- package/plugins/lisa-devin/rules/reference/config-resolution.md +1225 -0
- package/plugins/lisa-devin/rules/reference/control-reachability.md +166 -0
- package/plugins/lisa-devin/rules/reference/convergent-review.md +145 -0
- package/plugins/lisa-devin/rules/reference/credential-substrate-precedence.md +249 -0
- package/plugins/lisa-devin/rules/reference/dependency-decision-records.md +177 -0
- package/plugins/lisa-devin/rules/reference/dependency-internalization-kit.md +244 -0
- package/plugins/lisa-devin/rules/reference/dependency-trust-classes.md +291 -0
- package/plugins/lisa-devin/rules/reference/deployed-state-readback.md +142 -0
- package/plugins/lisa-devin/rules/reference/derived-branch-plan.md +214 -0
- package/plugins/lisa-devin/rules/reference/design-source-of-truth.md +260 -0
- package/plugins/lisa-devin/rules/reference/design-value-binding.md +311 -0
- package/plugins/lisa-devin/rules/reference/do-it-now.md +19 -0
- package/plugins/lisa-devin/rules/reference/documentation-source-paths.md +31 -0
- package/plugins/lisa-devin/rules/reference/empirical-inquiry.md +28 -0
- package/plugins/lisa-devin/rules/reference/factory-model.md +111 -0
- package/plugins/lisa-devin/rules/reference/falsifiable-checks.md +275 -0
- package/plugins/lisa-devin/rules/reference/history-audit.md +42 -0
- package/plugins/lisa-devin/rules/reference/integration-access-layer.md +89 -0
- package/plugins/lisa-devin/rules/reference/intent-routing.md +428 -0
- package/plugins/lisa-devin/rules/reference/leaf-only-lifecycle.md +227 -0
- package/plugins/lisa-devin/rules/reference/learnings-ladder.md +41 -0
- package/plugins/lisa-devin/rules/reference/local-ci-first.md +34 -0
- package/plugins/lisa-devin/rules/reference/measurement-integrity.md +119 -0
- package/plugins/lisa-devin/rules/reference/never-name-a-downstream-project.md +37 -0
- package/plugins/lisa-devin/rules/reference/not-blocked-just-waiting.md +41 -0
- package/plugins/lisa-devin/rules/reference/observability-audit.md +146 -0
- package/plugins/lisa-devin/rules/reference/operational-hazards.md +115 -0
- package/plugins/lisa-devin/rules/reference/prd-definition-of-ready.md +118 -0
- package/plugins/lisa-devin/rules/reference/prd-lifecycle-rollup.md +192 -0
- package/plugins/lisa-devin/rules/reference/pre-flight-autofill.md +250 -0
- package/plugins/lisa-devin/rules/reference/project-learnings.md +159 -0
- package/plugins/lisa-devin/rules/reference/promotion-contract.md +148 -0
- package/plugins/lisa-devin/rules/reference/readiness-rubric.md +242 -0
- package/plugins/lisa-devin/rules/reference/ready-role-filing.md +212 -0
- package/plugins/lisa-devin/rules/reference/rejection-detection.md +308 -0
- package/plugins/lisa-devin/rules/reference/repo-scope-split.md +119 -0
- package/plugins/lisa-devin/rules/reference/report-actionability.md +61 -0
- package/plugins/lisa-devin/rules/reference/reset-seed-coverage.md +286 -0
- package/plugins/lisa-devin/rules/reference/security-audit-handling.md +55 -0
- package/plugins/lisa-devin/rules/reference/session-status-updates.md +111 -0
- package/plugins/lisa-devin/rules/reference/settled-decisions.md +39 -0
- package/plugins/lisa-devin/rules/reference/stale-state-claims.md +88 -0
- package/plugins/lisa-devin/rules/reference/tool-access-gate.md +114 -0
- package/plugins/lisa-devin/rules/reference/tracked-work.md +49 -0
- package/plugins/lisa-devin/rules/reference/upstream-to-lisa.md +26 -0
- package/plugins/lisa-devin/rules/reference/usage-accounting.md +261 -0
- package/plugins/lisa-devin/rules/reference/verification.md +278 -0
- package/plugins/lisa-devin/rules/reference/wiki-knowledge-source.md +37 -0
- package/plugins/lisa-devin/rules/reference/withdrawn-rulings.md +148 -0
- package/plugins/lisa-devin/rules/reference/work-item-definition-of-ready.md +177 -0
- package/plugins/lisa-devin/rules/reference/work-item-trailer-definition.md +129 -0
- package/plugins/lisa-devin/scripts/automation-run-record.mjs +678 -0
- package/plugins/lisa-devin/scripts/automation-status-claude-adapter.mjs +804 -0
- package/plugins/lisa-devin/scripts/automation-status-codex-adapter.mjs +1081 -0
- package/plugins/lisa-devin/scripts/automation-status-contract-drift.mjs +392 -0
- package/plugins/lisa-devin/scripts/automation-status-expected-fleet.mjs +508 -0
- package/plugins/lisa-devin/scripts/automation-status-report.mjs +200 -0
- package/plugins/lisa-devin/scripts/automation-status-run-history.mjs +216 -0
- package/plugins/lisa-devin/scripts/automation-status-unrecorded-runs.mjs +127 -0
- package/plugins/lisa-devin/scripts/blocker-edge-resolution.mjs +150 -0
- package/plugins/lisa-devin/scripts/cross-pollinate.mjs +763 -0
- package/plugins/lisa-devin/scripts/design-bindings-probe.mjs +713 -0
- package/plugins/lisa-devin/scripts/design-intake-gate.mjs +470 -0
- package/plugins/lisa-devin/scripts/design-source-gate.mjs +610 -0
- package/plugins/lisa-devin/scripts/design-variable-ids.mjs +567 -0
- package/plugins/lisa-devin/scripts/doctor-report.mjs +635 -0
- package/plugins/lisa-devin/scripts/install-remote-agent-aws.mjs +443 -0
- package/plugins/lisa-devin/scripts/intake-blocker-reprobe.mjs +1065 -0
- package/plugins/lisa-devin/scripts/intake-prework-denominator.mjs +249 -0
- package/plugins/lisa-devin/scripts/lifecycle-label-trust.mjs +593 -0
- package/plugins/lisa-devin/scripts/linear-state-write-target.mjs +362 -0
- package/plugins/lisa-devin/scripts/plugin-sync-explain.mjs +654 -0
- package/plugins/lisa-devin/scripts/pr-arming-sweep.mjs +561 -0
- package/plugins/lisa-devin/scripts/project-ideation-idempotency-harness.mjs +338 -0
- package/plugins/lisa-devin/scripts/qa-signal-lifecycle.mjs +523 -0
- package/plugins/lisa-devin/scripts/queue-contract-resolution.mjs +583 -0
- package/plugins/lisa-devin/scripts/queue-health-classification.mjs +157 -0
- package/plugins/lisa-devin/scripts/queue-status-build-readers.mjs +561 -0
- package/plugins/lisa-devin/scripts/queue-status-prd-readers.mjs +452 -0
- package/plugins/lisa-devin/scripts/remote-agent-aws-setup.sh +677 -0
- package/plugins/lisa-devin/scripts/repo-scope-vocabulary-audit.mjs +458 -0
- package/plugins/lisa-devin/scripts/resolve-lifecycle-role.mjs +347 -0
- package/plugins/lisa-devin/scripts/rollup-blocker-classification.mjs +616 -0
- package/plugins/lisa-devin/scripts/scoping-label-audit.mjs +474 -0
- package/plugins/lisa-devin/skills/lisa-acceptance-criteria/SKILL.md +73 -0
- package/plugins/lisa-devin/skills/lisa-agent-design-best-practices/SKILL.md +242 -0
- package/plugins/lisa-devin/skills/lisa-agent-ready/SKILL.md +271 -0
- package/plugins/lisa-devin/skills/lisa-analyze-claude-remote/SKILL.md +434 -0
- package/plugins/lisa-devin/skills/lisa-atlassian-access/SKILL.md +469 -0
- package/plugins/lisa-devin/skills/lisa-atlassian-access/scripts/markdown-to-adf.mjs +236 -0
- package/plugins/lisa-devin/skills/lisa-attribute-failure/SKILL.md +142 -0
- package/plugins/lisa-devin/skills/lisa-automation-status/SKILL.md +149 -0
- package/plugins/lisa-devin/skills/lisa-bug-triage/SKILL.md +23 -0
- package/plugins/lisa-devin/skills/lisa-capability-drift/SKILL.md +71 -0
- package/plugins/lisa-devin/skills/lisa-codebase-research/SKILL.md +87 -0
- package/plugins/lisa-devin/skills/lisa-codify-verification/SKILL.md +213 -0
- package/plugins/lisa-devin/skills/lisa-confluence-prd-intake/SKILL.md +417 -0
- package/plugins/lisa-devin/skills/lisa-confluence-to-tracker/SKILL.md +469 -0
- package/plugins/lisa-devin/skills/lisa-confluence-write-prd/SKILL.md +111 -0
- package/plugins/lisa-devin/skills/lisa-cross-pollinate/SKILL.md +175 -0
- package/plugins/lisa-devin/skills/lisa-debrief/SKILL.md +96 -0
- package/plugins/lisa-devin/skills/lisa-debrief-apply/SKILL.md +106 -0
- package/plugins/lisa-devin/skills/lisa-delivery-effectiveness/SKILL.md +62 -0
- package/plugins/lisa-devin/skills/lisa-design-intake/SKILL.md +198 -0
- package/plugins/lisa-devin/skills/lisa-detect-tooling/SKILL.md +110 -0
- package/plugins/lisa-devin/skills/lisa-detect-tooling/scripts/commands.mjs +479 -0
- package/plugins/lisa-devin/skills/lisa-detect-tooling/scripts/detect-tooling.mjs +658 -0
- package/plugins/lisa-devin/skills/lisa-doctor/SKILL.md +743 -0
- package/plugins/lisa-devin/skills/lisa-drive-pr-to-merge/SKILL.md +1587 -0
- package/plugins/lisa-devin/skills/lisa-epic-triage/SKILL.md +28 -0
- package/plugins/lisa-devin/skills/lisa-evaluation-suite/SKILL.md +63 -0
- package/plugins/lisa-devin/skills/lisa-exploratory-qa/SKILL.md +185 -0
- package/plugins/lisa-devin/skills/lisa-fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-devin/skills/lisa-generate-claude-remote-build-script/SKILL.md +235 -0
- package/plugins/lisa-devin/skills/lisa-git-commit/SKILL.md +53 -0
- package/plugins/lisa-devin/skills/lisa-git-prune/SKILL.md +35 -0
- package/plugins/lisa-devin/skills/lisa-git-submit-pr/SKILL.md +170 -0
- package/plugins/lisa-devin/skills/lisa-github-add-journey/SKILL.md +118 -0
- package/plugins/lisa-devin/skills/lisa-github-build-intake/SKILL.md +745 -0
- package/plugins/lisa-devin/skills/lisa-github-claim/SKILL.md +27 -0
- package/plugins/lisa-devin/skills/lisa-github-create/SKILL.md +105 -0
- package/plugins/lisa-devin/skills/lisa-github-evidence/SKILL.md +120 -0
- package/plugins/lisa-devin/skills/lisa-github-journey/SKILL.md +134 -0
- package/plugins/lisa-devin/skills/lisa-github-prd-intake/SKILL.md +424 -0
- package/plugins/lisa-devin/skills/lisa-github-project-v2/SKILL.md +227 -0
- package/plugins/lisa-devin/skills/lisa-github-read-issue/SKILL.md +305 -0
- package/plugins/lisa-devin/skills/lisa-github-sync/SKILL.md +201 -0
- package/plugins/lisa-devin/skills/lisa-github-to-tracker/SKILL.md +456 -0
- package/plugins/lisa-devin/skills/lisa-github-validate-issue/SKILL.md +598 -0
- package/plugins/lisa-devin/skills/lisa-github-verify/SKILL.md +60 -0
- package/plugins/lisa-devin/skills/lisa-github-write-issue/SKILL.md +531 -0
- package/plugins/lisa-devin/skills/lisa-github-write-prd/SKILL.md +156 -0
- package/plugins/lisa-devin/skills/lisa-health/SKILL.md +142 -0
- package/plugins/lisa-devin/skills/lisa-health-drift-cron/SKILL.md +80 -0
- package/plugins/lisa-devin/skills/lisa-implement/SKILL.md +372 -0
- package/plugins/lisa-devin/skills/lisa-improve-code-complexity/SKILL.md +44 -0
- package/plugins/lisa-devin/skills/lisa-improve-harness/SKILL.md +487 -0
- package/plugins/lisa-devin/skills/lisa-improve-max-lines/SKILL.md +45 -0
- package/plugins/lisa-devin/skills/lisa-improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-devin/skills/lisa-improve-test-coverage/SKILL.md +47 -0
- package/plugins/lisa-devin/skills/lisa-improve-tests/SKILL.md +50 -0
- package/plugins/lisa-devin/skills/lisa-intake/SKILL.md +208 -0
- package/plugins/lisa-devin/skills/lisa-intake-explain/SKILL.md +279 -0
- package/plugins/lisa-devin/skills/lisa-jam-access/SKILL.md +128 -0
- package/plugins/lisa-devin/skills/lisa-jira-add-journey/SKILL.md +139 -0
- package/plugins/lisa-devin/skills/lisa-jira-build-intake/SKILL.md +556 -0
- package/plugins/lisa-devin/skills/lisa-jira-claim/SKILL.md +27 -0
- package/plugins/lisa-devin/skills/lisa-jira-create/SKILL.md +157 -0
- package/plugins/lisa-devin/skills/lisa-jira-evidence/SKILL.md +106 -0
- package/plugins/lisa-devin/skills/lisa-jira-evidence/scripts/post-evidence.sh +262 -0
- package/plugins/lisa-devin/skills/lisa-jira-journey/SKILL.md +168 -0
- package/plugins/lisa-devin/skills/lisa-jira-journey/scripts/generate-templates.py +239 -0
- package/plugins/lisa-devin/skills/lisa-jira-journey/scripts/parse-plan.py +570 -0
- package/plugins/lisa-devin/skills/lisa-jira-read-ticket/SKILL.md +199 -0
- package/plugins/lisa-devin/skills/lisa-jira-read-ticket/scripts/download-attachment.sh +211 -0
- package/plugins/lisa-devin/skills/lisa-jira-sync/SKILL.md +117 -0
- package/plugins/lisa-devin/skills/lisa-jira-validate-ticket/SKILL.md +525 -0
- package/plugins/lisa-devin/skills/lisa-jira-verify/SKILL.md +61 -0
- package/plugins/lisa-devin/skills/lisa-jira-write-ticket/SKILL.md +440 -0
- package/plugins/lisa-devin/skills/lisa-jsdoc-best-practices/SKILL.md +491 -0
- package/plugins/lisa-devin/skills/lisa-kane-browser/SKILL.md +80 -0
- package/plugins/lisa-devin/skills/lisa-learnings-audit/SKILL.md +490 -0
- package/plugins/lisa-devin/skills/lisa-linear-access/SKILL.md +483 -0
- package/plugins/lisa-devin/skills/lisa-linear-add-journey/SKILL.md +109 -0
- package/plugins/lisa-devin/skills/lisa-linear-build-intake/SKILL.md +548 -0
- package/plugins/lisa-devin/skills/lisa-linear-claim/SKILL.md +28 -0
- package/plugins/lisa-devin/skills/lisa-linear-create/SKILL.md +150 -0
- package/plugins/lisa-devin/skills/lisa-linear-evidence/SKILL.md +124 -0
- package/plugins/lisa-devin/skills/lisa-linear-journey/SKILL.md +147 -0
- package/plugins/lisa-devin/skills/lisa-linear-prd-intake/SKILL.md +411 -0
- package/plugins/lisa-devin/skills/lisa-linear-read-issue/SKILL.md +201 -0
- package/plugins/lisa-devin/skills/lisa-linear-sync/SKILL.md +164 -0
- package/plugins/lisa-devin/skills/lisa-linear-to-tracker/SKILL.md +454 -0
- package/plugins/lisa-devin/skills/lisa-linear-validate-issue/SKILL.md +504 -0
- package/plugins/lisa-devin/skills/lisa-linear-verify/SKILL.md +65 -0
- package/plugins/lisa-devin/skills/lisa-linear-write-issue/SKILL.md +448 -0
- package/plugins/lisa-devin/skills/lisa-linear-write-prd/SKILL.md +98 -0
- package/plugins/lisa-devin/skills/lisa-monitor/SKILL.md +224 -0
- package/plugins/lisa-devin/skills/lisa-nightly-add-test-coverage/SKILL.md +40 -0
- package/plugins/lisa-devin/skills/lisa-nightly-improve-tests/SKILL.md +29 -0
- package/plugins/lisa-devin/skills/lisa-nightly-lower-code-complexity/SKILL.md +42 -0
- package/plugins/lisa-devin/skills/lisa-notion-access/SKILL.md +301 -0
- package/plugins/lisa-devin/skills/lisa-notion-prd-intake/SKILL.md +360 -0
- package/plugins/lisa-devin/skills/lisa-notion-to-tracker/SKILL.md +467 -0
- package/plugins/lisa-devin/skills/lisa-notion-write-prd/SKILL.md +111 -0
- package/plugins/lisa-devin/skills/lisa-parity-code-review/SKILL.md +83 -0
- package/plugins/lisa-devin/skills/lisa-parity-code-simplifier/SKILL.md +76 -0
- package/plugins/lisa-devin/skills/lisa-parity-coderabbit/SKILL.md +87 -0
- package/plugins/lisa-devin/skills/lisa-parity-sentry-sdk-setup/SKILL.md +375 -0
- package/plugins/lisa-devin/skills/lisa-parity-sentry-seer/SKILL.md +168 -0
- package/plugins/lisa-devin/skills/lisa-parity-skill-creator/SKILL.md +155 -0
- package/plugins/lisa-devin/skills/lisa-performance-review/SKILL.md +94 -0
- package/plugins/lisa-devin/skills/lisa-persist-learning/SKILL.md +247 -0
- package/plugins/lisa-devin/skills/lisa-plan/SKILL.md +64 -0
- package/plugins/lisa-devin/skills/lisa-plugin-sync-explain/SKILL.md +53 -0
- package/plugins/lisa-devin/skills/lisa-posthog-access/SKILL.md +140 -0
- package/plugins/lisa-devin/skills/lisa-prd-backlink/SKILL.md +274 -0
- package/plugins/lisa-devin/skills/lisa-prd-source-write/SKILL.md +104 -0
- package/plugins/lisa-devin/skills/lisa-prd-ticket-coverage/SKILL.md +187 -0
- package/plugins/lisa-devin/skills/lisa-product-walkthrough/SKILL.md +106 -0
- package/plugins/lisa-devin/skills/lisa-project-ideation/SKILL.md +417 -0
- package/plugins/lisa-devin/skills/lisa-project-ideation/examples/evidence-card-format.md +21 -0
- package/plugins/lisa-devin/skills/lisa-project-ideation/examples/host-project-only.md +22 -0
- package/plugins/lisa-devin/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +57 -0
- package/plugins/lisa-devin/skills/lisa-project-ideation/examples/public-external-inspiration.md +22 -0
- package/plugins/lisa-devin/skills/lisa-project-ideation/examples/unavailable-data-rejection.md +22 -0
- package/plugins/lisa-devin/skills/lisa-pull-request-review/SKILL.md +132 -0
- package/plugins/lisa-devin/skills/lisa-quality-review/SKILL.md +63 -0
- package/plugins/lisa-devin/skills/lisa-queue-status/SKILL.md +215 -0
- package/plugins/lisa-devin/skills/lisa-remote-dispatch/SKILL.md +109 -0
- package/plugins/lisa-devin/skills/lisa-remote-dispatch/scripts/dispatch.mjs +535 -0
- package/plugins/lisa-devin/skills/lisa-repair-intake/SKILL.md +1621 -0
- package/plugins/lisa-devin/skills/lisa-reproduce-bug/SKILL.md +75 -0
- package/plugins/lisa-devin/skills/lisa-research/SKILL.md +92 -0
- package/plugins/lisa-devin/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa-devin/skills/lisa-review-local/SKILL.md +141 -0
- package/plugins/lisa-devin/skills/lisa-rework-triage/SKILL.md +206 -0
- package/plugins/lisa-devin/skills/lisa-root-cause-analysis/SKILL.md +135 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/SKILL.md +430 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/aws-bootstrap.mjs +433 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/bootstrap-store.mjs +288 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/doctor-secrets.mjs +273 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/envfile.mjs +80 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/inspect-vault.mjs +142 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/materialize-secrets.mjs +1085 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/note-format.mjs +179 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/owner.mjs +96 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/preflight-secrets.mjs +342 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/prompt-secret.mjs +79 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/providers.mjs +805 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/publish-aws-bootstrap.mjs +680 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/read-secret-note.mjs +105 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/resolve-expo-token.mjs +90 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/resolve-secret.mjs +285 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/rotate-secret.mjs +297 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/routing-floor.mjs +153 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/surfaces.mjs +480 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/sync-secret-to-ci.mjs +510 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/tools-from-notes.mjs +63 -0
- package/plugins/lisa-devin/skills/lisa-secrets-access/scripts/validate-config.mjs +550 -0
- package/plugins/lisa-devin/skills/lisa-security-review/SKILL.md +124 -0
- package/plugins/lisa-devin/skills/lisa-security-zap-scan/SKILL.md +53 -0
- package/plugins/lisa-devin/skills/lisa-sentry-access/SKILL.md +140 -0
- package/plugins/lisa-devin/skills/lisa-setup-atlassian/SKILL.md +407 -0
- package/plugins/lisa-devin/skills/lisa-setup-automations/SKILL.md +430 -0
- package/plugins/lisa-devin/skills/lisa-setup-automations/scripts/generate-workflow.mjs +288 -0
- package/plugins/lisa-devin/skills/lisa-setup-confluence/SKILL.md +254 -0
- package/plugins/lisa-devin/skills/lisa-setup-github/SKILL.md +319 -0
- package/plugins/lisa-devin/skills/lisa-setup-github-repo/SKILL.md +128 -0
- package/plugins/lisa-devin/skills/lisa-setup-jira/SKILL.md +198 -0
- package/plugins/lisa-devin/skills/lisa-setup-kane/SKILL.md +96 -0
- package/plugins/lisa-devin/skills/lisa-setup-linear/SKILL.md +375 -0
- package/plugins/lisa-devin/skills/lisa-setup-local-env/SKILL.md +95 -0
- package/plugins/lisa-devin/skills/lisa-setup-local-env/scripts/local-env.mjs +196 -0
- package/plugins/lisa-devin/skills/lisa-setup-notion/SKILL.md +376 -0
- package/plugins/lisa-devin/skills/lisa-setup-remote-aws/SKILL.md +149 -0
- package/plugins/lisa-devin/skills/lisa-setup-remote-env/SKILL.md +382 -0
- package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/materialized-env-authority.mjs +262 -0
- package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/session-start.sh +87 -0
- package/plugins/lisa-devin/skills/lisa-setup-remote-env/assets/setup.sh +216 -0
- package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/environment.mjs +227 -0
- package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +378 -0
- package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +1632 -0
- package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/tool-floor.mjs +94 -0
- package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/toolchain.mjs +448 -0
- package/plugins/lisa-devin/skills/lisa-setup-remote-env/scripts/verify-remote-env.mjs +250 -0
- package/plugins/lisa-devin/skills/lisa-setup-sonar/SKILL.md +153 -0
- package/plugins/lisa-devin/skills/lisa-setup-workstation/SKILL.md +143 -0
- package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/bounded-child.mjs +168 -0
- package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/catalogue.mjs +293 -0
- package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/cli.mjs +333 -0
- package/plugins/lisa-devin/skills/lisa-setup-workstation/scripts/workstation.mjs +511 -0
- package/plugins/lisa-devin/skills/lisa-sonarcloud-access/SKILL.md +202 -0
- package/plugins/lisa-devin/skills/lisa-spec-conformance/SKILL.md +205 -0
- package/plugins/lisa-devin/skills/lisa-starter-sync/SKILL.md +35 -0
- package/plugins/lisa-devin/skills/lisa-sync-down/SKILL.md +209 -0
- package/plugins/lisa-devin/skills/lisa-task-decomposition/SKILL.md +195 -0
- package/plugins/lisa-devin/skills/lisa-task-triage/SKILL.md +23 -0
- package/plugins/lisa-devin/skills/lisa-tdd-implementation/SKILL.md +91 -0
- package/plugins/lisa-devin/skills/lisa-tear-down-automations/SKILL.md +85 -0
- package/plugins/lisa-devin/skills/lisa-test-strategy/SKILL.md +66 -0
- package/plugins/lisa-devin/skills/lisa-ticket-triage/SKILL.md +214 -0
- package/plugins/lisa-devin/skills/lisa-track/SKILL.md +129 -0
- package/plugins/lisa-devin/skills/lisa-tracker-add-journey/SKILL.md +28 -0
- package/plugins/lisa-devin/skills/lisa-tracker-build-intake/SKILL.md +134 -0
- package/plugins/lisa-devin/skills/lisa-tracker-claim/SKILL.md +35 -0
- package/plugins/lisa-devin/skills/lisa-tracker-create/SKILL.md +28 -0
- package/plugins/lisa-devin/skills/lisa-tracker-evidence/SKILL.md +63 -0
- package/plugins/lisa-devin/skills/lisa-tracker-journey/SKILL.md +27 -0
- package/plugins/lisa-devin/skills/lisa-tracker-read/SKILL.md +28 -0
- package/plugins/lisa-devin/skills/lisa-tracker-source-artifacts/SKILL.md +111 -0
- package/plugins/lisa-devin/skills/lisa-tracker-sync/SKILL.md +150 -0
- package/plugins/lisa-devin/skills/lisa-tracker-validate/SKILL.md +37 -0
- package/plugins/lisa-devin/skills/lisa-tracker-verify/SKILL.md +29 -0
- package/plugins/lisa-devin/skills/lisa-tracker-write/SKILL.md +55 -0
- package/plugins/lisa-devin/skills/lisa-usage-accounting/SKILL.md +205 -0
- package/plugins/lisa-devin/skills/lisa-usage-accounting/references/effectiveness.md +63 -0
- package/plugins/lisa-devin/skills/lisa-use-the-product/SKILL.md +86 -0
- package/plugins/lisa-devin/skills/lisa-validate-tracker-mapping/SKILL.md +467 -0
- package/plugins/lisa-devin/skills/lisa-verification-lifecycle/SKILL.md +384 -0
- package/plugins/lisa-devin/skills/lisa-verify/SKILL.md +55 -0
- package/plugins/lisa-devin/skills/lisa-verify-prd/SKILL.md +394 -0
- package/plugins/lisa-devin/skills/lisa-verify-workflow-change/SKILL.md +154 -0
- package/plugins/lisa-devin/skills/lisa-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-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-devin/.claude-plugin/plugin.json +11 -0
- package/plugins/lisa-expo-devin/.devin-plugin/plugin.json +8 -0
- package/plugins/lisa-expo-devin/.mcp.json +8 -0
- package/plugins/lisa-expo-devin/THIRD-PARTY-NOTICES.md +84 -0
- package/plugins/lisa-expo-devin/agents/ops-specialist.md +124 -0
- package/plugins/lisa-expo-devin/hooks/devin-tool-name-shim.sh +30 -0
- package/plugins/lisa-expo-devin/hooks/register-maestro-mcp.sh +84 -0
- package/plugins/lisa-expo-devin/hooks.json +14 -0
- package/plugins/lisa-expo-devin/skills/add-app-clip/SKILL.md +280 -0
- package/plugins/lisa-expo-devin/skills/add-app-clip/references/native-module.md +96 -0
- package/plugins/lisa-expo-devin/skills/apollo-client/SKILL.md +238 -0
- package/plugins/lisa-expo-devin/skills/apollo-client/references/mutation-patterns.md +360 -0
- package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/SKILL.md +369 -0
- package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
- package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
- package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
- package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
- package/plugins/lisa-expo-devin/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +438 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/SKILL.md +321 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/animations.md +220 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/controls.md +272 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/form-sheet.md +253 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/gradients.md +106 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/icons.md +213 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/media.md +198 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/route-structure.md +229 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/search.md +248 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/storage.md +121 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/tabs.md +433 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/toolbar-and-headers.md +284 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/visual-effects.md +197 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/webgpu-three.md +605 -0
- package/plugins/lisa-expo-devin/skills/building-native-ui/references/zoom-transitions.md +158 -0
- package/plugins/lisa-expo-devin/skills/container-view-pattern/SKILL.md +355 -0
- package/plugins/lisa-expo-devin/skills/container-view-pattern/references/examples.md +749 -0
- package/plugins/lisa-expo-devin/skills/container-view-pattern/references/patterns.md +318 -0
- package/plugins/lisa-expo-devin/skills/container-view-pattern/scripts/create_component.py +200 -0
- package/plugins/lisa-expo-devin/skills/container-view-pattern/scripts/validate_component.py +332 -0
- package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/SKILL.md +268 -0
- package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/common-issues.md +619 -0
- package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
- package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/references/platform-api.md +276 -0
- package/plugins/lisa-expo-devin/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
- package/plugins/lisa-expo-devin/skills/directory-structure/SKILL.md +214 -0
- package/plugins/lisa-expo-devin/skills/directory-structure/scripts/validate_structure.py +454 -0
- package/plugins/lisa-expo-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
- package/plugins/lisa-expo-devin/skills/eas-update-insights/SKILL.md +228 -0
- package/plugins/lisa-expo-devin/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
- package/plugins/lisa-expo-devin/skills/eas-update-insights/references/update-insights-schema.md +69 -0
- package/plugins/lisa-expo-devin/skills/expo-api-routes/SKILL.md +369 -0
- package/plugins/lisa-expo-devin/skills/expo-brownfield/SKILL.md +54 -0
- package/plugins/lisa-expo-devin/skills/expo-brownfield/references/brownfield-integrated.md +526 -0
- package/plugins/lisa-expo-devin/skills/expo-brownfield/references/brownfield-isolated.md +402 -0
- package/plugins/lisa-expo-devin/skills/expo-brownfield/references/comparison.md +63 -0
- package/plugins/lisa-expo-devin/skills/expo-brownfield/references/troubleshooting.md +88 -0
- package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/SKILL.md +92 -0
- package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/fetch.js +113 -0
- package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/package.json +11 -0
- package/plugins/lisa-expo-devin/skills/expo-cicd-workflows/scripts/validate.js +85 -0
- package/plugins/lisa-expo-devin/skills/expo-deployment/SKILL.md +193 -0
- package/plugins/lisa-expo-devin/skills/expo-deployment/references/app-store-metadata.md +479 -0
- package/plugins/lisa-expo-devin/skills/expo-deployment/references/ios-app-store.md +355 -0
- package/plugins/lisa-expo-devin/skills/expo-deployment/references/play-store.md +264 -0
- package/plugins/lisa-expo-devin/skills/expo-deployment/references/testflight.md +58 -0
- package/plugins/lisa-expo-devin/skills/expo-deployment/references/workflows.md +200 -0
- package/plugins/lisa-expo-devin/skills/expo-dev-client/SKILL.md +164 -0
- package/plugins/lisa-expo-devin/skills/expo-env-config/SKILL.md +309 -0
- package/plugins/lisa-expo-devin/skills/expo-env-config/references/validation-patterns.md +417 -0
- package/plugins/lisa-expo-devin/skills/expo-module/SKILL.md +141 -0
- package/plugins/lisa-expo-devin/skills/expo-module/references/config-plugin.md +90 -0
- package/plugins/lisa-expo-devin/skills/expo-module/references/create-expo-module.md +206 -0
- package/plugins/lisa-expo-devin/skills/expo-module/references/lifecycle.md +127 -0
- package/plugins/lisa-expo-devin/skills/expo-module/references/module-config.md +48 -0
- package/plugins/lisa-expo-devin/skills/expo-module/references/native-module.md +286 -0
- package/plugins/lisa-expo-devin/skills/expo-module/references/native-view.md +171 -0
- package/plugins/lisa-expo-devin/skills/expo-router-best-practices/SKILL.md +432 -0
- package/plugins/lisa-expo-devin/skills/expo-router-best-practices/references/official-docs.md +290 -0
- package/plugins/lisa-expo-devin/skills/expo-router-best-practices/references/static-export-verification.md +54 -0
- package/plugins/lisa-expo-devin/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
- package/plugins/lisa-expo-devin/skills/expo-tailwind-setup/SKILL.md +487 -0
- package/plugins/lisa-expo-devin/skills/expo-ui-jetpack-compose/SKILL.md +40 -0
- package/plugins/lisa-expo-devin/skills/expo-ui-swift-ui/SKILL.md +39 -0
- package/plugins/lisa-expo-devin/skills/gluestack-nativewind/SKILL.md +419 -0
- package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/color-tokens.md +343 -0
- package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/component-mapping.md +307 -0
- package/plugins/lisa-expo-devin/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
- package/plugins/lisa-expo-devin/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
- package/plugins/lisa-expo-devin/skills/gluestack-nativewind/scripts/validate_styling.py +424 -0
- package/plugins/lisa-expo-devin/skills/jira-add-journey/SKILL.md +140 -0
- package/plugins/lisa-expo-devin/skills/jira-create/SKILL.md +161 -0
- package/plugins/lisa-expo-devin/skills/jira-evidence/SKILL.md +84 -0
- package/plugins/lisa-expo-devin/skills/jira-evidence/scripts/post-evidence.sh +262 -0
- package/plugins/lisa-expo-devin/skills/jira-journey/SKILL.md +196 -0
- package/plugins/lisa-expo-devin/skills/jira-journey/scripts/generate-templates.py +281 -0
- package/plugins/lisa-expo-devin/skills/jira-journey/scripts/parse-plan.py +400 -0
- package/plugins/lisa-expo-devin/skills/jira-verify/SKILL.md +27 -0
- package/plugins/lisa-expo-devin/skills/local-state/SKILL.md +362 -0
- package/plugins/lisa-expo-devin/skills/local-state/references/async-storage.md +505 -0
- package/plugins/lisa-expo-devin/skills/local-state/references/persistence-patterns.md +711 -0
- package/plugins/lisa-expo-devin/skills/local-state/references/reactive-variables.md +446 -0
- package/plugins/lisa-expo-devin/skills/maestro-mcp-setup/SKILL.md +144 -0
- package/plugins/lisa-expo-devin/skills/native-data-fetching/SKILL.md +507 -0
- package/plugins/lisa-expo-devin/skills/native-data-fetching/references/expo-router-loaders.md +344 -0
- package/plugins/lisa-expo-devin/skills/ops-browser-uat/SKILL.md +124 -0
- package/plugins/lisa-expo-devin/skills/ops-check-logs/SKILL.md +217 -0
- package/plugins/lisa-expo-devin/skills/ops-db-ops/SKILL.md +214 -0
- package/plugins/lisa-expo-devin/skills/ops-deploy/SKILL.md +123 -0
- package/plugins/lisa-expo-devin/skills/ops-monitor-errors/SKILL.md +99 -0
- package/plugins/lisa-expo-devin/skills/ops-performance/SKILL.md +165 -0
- package/plugins/lisa-expo-devin/skills/ops-run-local/SKILL.md +169 -0
- package/plugins/lisa-expo-devin/skills/ops-verify-health/SKILL.md +101 -0
- package/plugins/lisa-expo-devin/skills/owasp-zap/SKILL.md +61 -0
- package/plugins/lisa-expo-devin/skills/play-store-access/SKILL.md +226 -0
- package/plugins/lisa-expo-devin/skills/playwright-ci-debugging/SKILL.md +140 -0
- package/plugins/lisa-expo-devin/skills/playwright-selectors/SKILL.md +496 -0
- package/plugins/lisa-expo-devin/skills/reduce-complexity/SKILL.md +251 -0
- package/plugins/lisa-expo-devin/skills/reduce-complexity/references/extraction-strategies.md +456 -0
- package/plugins/lisa-expo-devin/skills/reduce-complexity/references/refactoring-patterns.md +557 -0
- package/plugins/lisa-expo-devin/skills/testing-library/SKILL.md +314 -0
- package/plugins/lisa-expo-devin/skills/testing-library/references/async-patterns.md +420 -0
- package/plugins/lisa-expo-devin/skills/testing-library/references/expo-router-testing.md +556 -0
- package/plugins/lisa-expo-devin/skills/testing-library/references/mocking-patterns.md +612 -0
- package/plugins/lisa-expo-devin/skills/testing-library/references/query-priority.md +291 -0
- package/plugins/lisa-expo-devin/skills/upgrading-expo/SKILL.md +134 -0
- package/plugins/lisa-expo-devin/skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
- package/plugins/lisa-expo-devin/skills/upgrading-expo/references/expo-av-to-video.md +160 -0
- package/plugins/lisa-expo-devin/skills/upgrading-expo/references/native-tabs.md +124 -0
- package/plugins/lisa-expo-devin/skills/upgrading-expo/references/new-architecture.md +79 -0
- package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-19.md +79 -0
- package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-compiler.md +59 -0
- package/plugins/lisa-expo-devin/skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
- package/plugins/lisa-expo-devin/skills/use-dom/SKILL.md +417 -0
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-devin/.claude-plugin/plugin.json +11 -0
- package/plugins/lisa-harper-fabric-devin/.devin-plugin/plugin.json +8 -0
- package/plugins/lisa-harper-fabric-devin/generated-artifact-globs.txt +5 -0
- package/plugins/lisa-harper-fabric-devin/hooks/block-generated-artifact-edits.sh +141 -0
- package/plugins/lisa-harper-fabric-devin/hooks/devin-tool-name-shim.sh +30 -0
- package/plugins/lisa-harper-fabric-devin/hooks/enforce-config-extensions.mjs +196 -0
- package/plugins/lisa-harper-fabric-devin/hooks/enforce-config-extensions.sh +46 -0
- package/plugins/lisa-harper-fabric-devin/hooks/inject-rules.sh +27 -0
- package/plugins/lisa-harper-fabric-devin/hooks.json +36 -0
- package/plugins/lisa-harper-fabric-devin/rules/eager/harper-fabric.md +31 -0
- package/plugins/lisa-harper-fabric-devin/rules/reference/harper-fabric.md +52 -0
- package/plugins/lisa-harper-fabric-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
- package/plugins/lisa-harper-fabric-devin/skills/harper-auth/SKILL.md +368 -0
- package/plugins/lisa-harper-fabric-devin/skills/harper-build-and-deploy/SKILL.md +198 -0
- package/plugins/lisa-harper-fabric-devin/skills/harper-caching/SKILL.md +265 -0
- package/plugins/lisa-harper-fabric-devin/skills/harper-component-model/SKILL.md +87 -0
- package/plugins/lisa-harper-fabric-devin/skills/harper-config-yaml/SKILL.md +283 -0
- package/plugins/lisa-harper-fabric-devin/skills/harper-operations/SKILL.md +239 -0
- package/plugins/lisa-harper-fabric-devin/skills/harper-realtime/SKILL.md +187 -0
- package/plugins/lisa-harper-fabric-devin/skills/harper-resources/SKILL.md +142 -0
- package/plugins/lisa-harper-fabric-devin/skills/harper-rest-queries/SKILL.md +403 -0
- package/plugins/lisa-harper-fabric-devin/skills/harper-schema-graphql/SKILL.md +123 -0
- package/plugins/lisa-harper-fabric-devin/skills/harper-testing/SKILL.md +254 -0
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-devin/.claude-plugin/plugin.json +11 -0
- package/plugins/lisa-nestjs-devin/.devin-plugin/plugin.json +8 -0
- package/plugins/lisa-nestjs-devin/hooks/block-migration-edits.sh +125 -0
- package/plugins/lisa-nestjs-devin/hooks/devin-tool-name-shim.sh +30 -0
- package/plugins/lisa-nestjs-devin/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/lisa-nestjs-devin/hooks.json +15 -0
- package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/SKILL.md +176 -0
- package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/advanced-features.md +527 -0
- package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/project-patterns.md +531 -0
- package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/quick-start.md +257 -0
- package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
- package/plugins/lisa-nestjs-devin/skills/nestjs-graphql/references/types-scalars.md +513 -0
- package/plugins/lisa-nestjs-devin/skills/nestjs-rules/SKILL.md +560 -0
- package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/SKILL.md +275 -0
- package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
- package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/entity-patterns.md +450 -0
- package/plugins/lisa-nestjs-devin/skills/typeorm-patterns/references/observability-patterns.md +536 -0
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-devin/.claude-plugin/plugin.json +8 -0
- package/plugins/lisa-openclaw-devin/.devin-plugin/plugin.json +8 -0
- package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-repo-topic/SKILL.md +163 -0
- package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +185 -0
- package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/SKILL.md +175 -0
- package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/references/platform-routing.md +123 -0
- package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-connect-staff/references/prompts.md +78 -0
- package/plugins/lisa-openclaw-devin/skills/lisa-openclaw-setup/SKILL.md +141 -0
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-devin/.claude-plugin/plugin.json +11 -0
- package/plugins/lisa-phaser-devin/.devin-plugin/plugin.json +8 -0
- package/plugins/lisa-phaser-devin/agents/accessibility-advocate.md +55 -0
- package/plugins/lisa-phaser-devin/agents/art-director.md +90 -0
- package/plugins/lisa-phaser-devin/agents/audio-director.md +65 -0
- package/plugins/lisa-phaser-devin/agents/combat-designer.md +61 -0
- package/plugins/lisa-phaser-devin/agents/economy-designer.md +59 -0
- package/plugins/lisa-phaser-devin/agents/game-designer.md +62 -0
- package/plugins/lisa-phaser-devin/agents/game-feel-specialist.md +56 -0
- package/plugins/lisa-phaser-devin/agents/level-designer.md +59 -0
- package/plugins/lisa-phaser-devin/agents/localization-manager.md +61 -0
- package/plugins/lisa-phaser-devin/agents/marketing-strategist.md +59 -0
- package/plugins/lisa-phaser-devin/agents/monetization-designer.md +59 -0
- package/plugins/lisa-phaser-devin/agents/narrative-designer.md +56 -0
- package/plugins/lisa-phaser-devin/agents/onboarding-advocate.md +59 -0
- package/plugins/lisa-phaser-devin/agents/player-advocate.md +57 -0
- package/plugins/lisa-phaser-devin/agents/producer.md +61 -0
- package/plugins/lisa-phaser-devin/agents/product-analyst.md +62 -0
- package/plugins/lisa-phaser-devin/agents/publisher.md +59 -0
- package/plugins/lisa-phaser-devin/agents/qa-playtester.md +57 -0
- package/plugins/lisa-phaser-devin/agents/target-player.md +52 -0
- package/plugins/lisa-phaser-devin/agents/ux-ui-designer.md +60 -0
- package/plugins/lisa-phaser-devin/hooks/devin-tool-name-shim.sh +30 -0
- package/plugins/lisa-phaser-devin/hooks/inject-rules.sh +27 -0
- package/plugins/lisa-phaser-devin/hooks.json +14 -0
- package/plugins/lisa-phaser-devin/rules/eager/phaser.md +44 -0
- package/plugins/lisa-phaser-devin/rules/reference/phaser.md +184 -0
- package/plugins/lisa-phaser-devin/skills/phaser-accessibility/SKILL.md +135 -0
- package/plugins/lisa-phaser-devin/skills/phaser-asset-pipeline/SKILL.md +222 -0
- package/plugins/lisa-phaser-devin/skills/phaser-asset-sourcing/SKILL.md +151 -0
- package/plugins/lisa-phaser-devin/skills/phaser-build-deploy/SKILL.md +153 -0
- package/plugins/lisa-phaser-devin/skills/phaser-i18n/SKILL.md +122 -0
- package/plugins/lisa-phaser-devin/skills/phaser-project-structure/SKILL.md +89 -0
- package/plugins/lisa-phaser-devin/skills/phaser-services/SKILL.md +208 -0
- package/plugins/lisa-phaser-devin/skills/phaser-testing/SKILL.md +192 -0
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-devin/.claude-plugin/plugin.json +11 -0
- package/plugins/lisa-rails-devin/.devin-plugin/plugin.json +8 -0
- package/plugins/lisa-rails-devin/agents/ops-specialist.md +226 -0
- package/plugins/lisa-rails-devin/hooks/devin-tool-name-shim.sh +30 -0
- package/plugins/lisa-rails-devin/hooks/inject-rules.sh +40 -0
- package/plugins/lisa-rails-devin/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/lisa-rails-devin/hooks/rubocop-on-edit.sh +101 -0
- package/plugins/lisa-rails-devin/hooks/sg-scan-on-edit.sh +97 -0
- package/plugins/lisa-rails-devin/hooks.json +29 -0
- package/plugins/lisa-rails-devin/rules/eager/rails-conventions.md +23 -0
- package/plugins/lisa-rails-devin/rules/reference/rails-conventions.md +176 -0
- package/plugins/lisa-rails-devin/skills/action-controller-best-practices/SKILL.md +374 -0
- package/plugins/lisa-rails-devin/skills/action-view-best-practices/SKILL.md +335 -0
- package/plugins/lisa-rails-devin/skills/active-record-model-best-practices/SKILL.md +166 -0
- package/plugins/lisa-rails-devin/skills/e2e-coverage-gaps/SKILL.md +117 -0
- package/plugins/lisa-rails-devin/skills/fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-rails-devin/skills/improve-code-complexity/SKILL.md +51 -0
- package/plugins/lisa-rails-devin/skills/improve-max-lines/SKILL.md +46 -0
- package/plugins/lisa-rails-devin/skills/improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-rails-devin/skills/improve-test-coverage/SKILL.md +48 -0
- package/plugins/lisa-rails-devin/skills/jira-add-journey/SKILL.md +79 -0
- package/plugins/lisa-rails-devin/skills/jira-create/SKILL.md +100 -0
- package/plugins/lisa-rails-devin/skills/jira-evidence/SKILL.md +76 -0
- package/plugins/lisa-rails-devin/skills/jira-evidence/scripts/post-evidence.sh +262 -0
- package/plugins/lisa-rails-devin/skills/jira-journey/SKILL.md +65 -0
- package/plugins/lisa-rails-devin/skills/jira-verify/SKILL.md +26 -0
- package/plugins/lisa-rails-devin/skills/ops-check-logs/SKILL.md +191 -0
- package/plugins/lisa-rails-devin/skills/ops-deploy/SKILL.md +153 -0
- package/plugins/lisa-rails-devin/skills/ops-run-local/SKILL.md +169 -0
- package/plugins/lisa-rails-devin/skills/ops-verify-jobs/SKILL.md +157 -0
- package/plugins/lisa-rails-devin/skills/ops-verify-telemetry/SKILL.md +226 -0
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-devin/.claude-plugin/plugin.json +11 -0
- package/plugins/lisa-typescript-devin/.devin-plugin/plugin.json +8 -0
- package/plugins/lisa-typescript-devin/hooks/block-suppress-directives.sh +141 -0
- package/plugins/lisa-typescript-devin/hooks/devin-tool-name-shim.sh +30 -0
- package/plugins/lisa-typescript-devin/hooks/format-on-edit.sh +102 -0
- package/plugins/lisa-typescript-devin/hooks/lint-on-edit.sh +117 -0
- package/plugins/lisa-typescript-devin/hooks/lisa-edit-gate.sh +152 -0
- package/plugins/lisa-typescript-devin/hooks/sg-scan-on-edit.sh +94 -0
- package/plugins/lisa-typescript-devin/hooks.json +34 -0
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-devin/.claude-plugin/plugin.json +8 -0
- package/plugins/lisa-wiki-devin/.devin-plugin/plugin.json +8 -0
- package/plugins/lisa-wiki-devin/ci/lisa-wiki-validate.yml +33 -0
- package/plugins/lisa-wiki-devin/schema/lisa-wiki-config.schema.json +162 -0
- package/plugins/lisa-wiki-devin/schema/wiki-structure.schema.json +51 -0
- package/plugins/lisa-wiki-devin/scripts/_wiki-lib.mjs +204 -0
- package/plugins/lisa-wiki-devin/scripts/diff-guard.mjs +117 -0
- package/plugins/lisa-wiki-devin/scripts/ensure-gitignore.mjs +131 -0
- package/plugins/lisa-wiki-devin/scripts/ensure-wiki.mjs +268 -0
- package/plugins/lisa-wiki-devin/scripts/ingest-git.mjs +198 -0
- package/plugins/lisa-wiki-devin/scripts/ingest-memory.mjs +135 -0
- package/plugins/lisa-wiki-devin/scripts/ingest-roles.mjs +95 -0
- package/plugins/lisa-wiki-devin/scripts/ingest_slack_channel.py +361 -0
- package/plugins/lisa-wiki-devin/scripts/lib/bounded-child.mjs +159 -0
- package/plugins/lisa-wiki-devin/scripts/lint-wiki.mjs +513 -0
- package/plugins/lisa-wiki-devin/scripts/mcp-doctor.mjs +72 -0
- package/plugins/lisa-wiki-devin/scripts/render-contract.mjs +107 -0
- package/plugins/lisa-wiki-devin/scripts/rewrite-refs.mjs +144 -0
- package/plugins/lisa-wiki-devin/scripts/slack_oauth_user.py +179 -0
- package/plugins/lisa-wiki-devin/scripts/validate-config.mjs +321 -0
- package/plugins/lisa-wiki-devin/scripts/verify-migration.mjs +203 -0
- package/plugins/lisa-wiki-devin/scripts/verify-wiki-safety.mjs +126 -0
- package/plugins/lisa-wiki-devin/scripts/wiki-safety.mjs +378 -0
- package/plugins/lisa-wiki-devin/scripts/wiki-status.mjs +345 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-add-role/SKILL.md +35 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-git/SKILL.md +25 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-connector-web/SKILL.md +23 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-doctor/SKILL.md +47 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-ingest/SKILL.md +106 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-lint/SKILL.md +32 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-migrate/SKILL.md +43 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-query/SKILL.md +40 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-setup/SKILL.md +75 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-setup-automations/SKILL.md +83 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-status/SKILL.md +47 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa-wiki-devin/skills/lisa-wiki-usage/SKILL.md +50 -0
- package/plugins/lisa-wiki-devin/templates/agents/role-agent.claude.md +16 -0
- package/plugins/lisa-wiki-devin/templates/agents/role-agent.codex.toml +15 -0
- package/plugins/lisa-wiki-devin/templates/index.md +17 -0
- package/plugins/lisa-wiki-devin/templates/llm-wiki-contract.md +72 -0
- package/plugins/lisa-wiki-devin/templates/log.md +8 -0
- package/plugins/lisa-wiki-devin/templates/page-types/architecture.md +18 -0
- package/plugins/lisa-wiki-devin/templates/page-types/concept.md +18 -0
- package/plugins/lisa-wiki-devin/templates/page-types/decision.md +18 -0
- package/plugins/lisa-wiki-devin/templates/page-types/entity.md +19 -0
- package/plugins/lisa-wiki-devin/templates/page-types/open-question.md +18 -0
- package/plugins/lisa-wiki-devin/templates/page-types/playbook.md +18 -0
- package/plugins/lisa-wiki-devin/templates/page-types/project.md +19 -0
- package/plugins/lisa-wiki-devin/templates/page-types/requirement.md +19 -0
- package/plugins/lisa-wiki-devin/templates/page-types/staff.md +26 -0
- package/plugins/lisa-wiki-devin/templates/start-here.md +24 -0
- package/plugins/lisa-wiki-devin/templates/state-readme.md +20 -0
- package/plugins/lisa-wiki-devin/templates/wrapper-gitignore.txt +19 -0
- package/scripts/build-plugins.sh +2 -2
- package/scripts/deployed-guard-advice.mjs +1 -0
- package/scripts/generate-devin-plugin-artifacts.mjs +263 -0
- package/scripts/lib/hook-registration-audit.mjs +3 -1
- package/scripts/lib/per-agent-hook-filter.mjs +174 -5
- package/scripts/lib/plugin-rule-citations.mjs +2 -2
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Control Reachability — reference
|
|
2
|
+
|
|
3
|
+
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
4
|
+
> section below is the former eager head, preserved verbatim; the full
|
|
5
|
+
> contract follows it. Reachable on demand via [the rule index](../eager/00-rule-index.md).
|
|
6
|
+
|
|
7
|
+
## Control Reachability — A Prescribed Control Must Reach the Changed Path (load-bearing)
|
|
8
|
+
|
|
9
|
+
A work item may hand the implementer a falsifiable stopping rule: *"make the change; `<named existing test>` must go red. If it still passes, the fix did nothing."* That is good practice — it replaces eyeballing with an observation. It is also **only valid if that test's fixture exercises the path the change touches.**
|
|
10
|
+
|
|
11
|
+
When it does not, the test stays green **for a reason unrelated to the change**: execution never reached the changed code. The stopping rule then instructs the implementer to revert a correct fix, and the more faithfully the implementer follows the item, the more reliably it happens. Measured once in the portfolio: a pinned test's fixture omitted the field the fix read, execution fell through to a default branch, the test stayed green, and the fix had worked.
|
|
12
|
+
|
|
13
|
+
This is the specification-side sibling of `falsifiable-checks`, which governs a check *you authored*. Here the check is **prescribed by the work item** and the defect is in the prose, not the code.
|
|
14
|
+
|
|
15
|
+
## Authoring obligation — checkable, not advisory
|
|
16
|
+
|
|
17
|
+
**A work item that names an existing test as a red-before-green control must say what makes that test reach the code the change touches.** Naming the code is not enough; the item names the *input*.
|
|
18
|
+
|
|
19
|
+
Declare it in `## Validation Journey`, one marker per named control:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
[CONTROL: <test-identifier> | reaches: <input-or-field>]
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
- `<test-identifier>` — non-empty: the test file path, the test name, or both.
|
|
26
|
+
- `reaches:` — the literal key, then the **input, field, fixture key, argument, or state** that carries execution into the changed code. `reaches: the fix` and `reaches: the changed code` restate the assertion and do not satisfy it.
|
|
27
|
+
|
|
28
|
+
Enforced by gate **S20** in `lisa-jira-validate-ticket`, `lisa-github-validate-issue`, and `lisa-linear-validate-issue`; rendered by `lisa-jira-write-ticket`, `lisa-github-write-issue`, and `lisa-linear-write-issue`; read at claim time by `lisa-ticket-triage` and `lisa-implement`.
|
|
29
|
+
|
|
30
|
+
**An item that prescribes no existing-test control is exempt.** Introducing a *new* test carries no reachability obligation — the gate is `N/A` and the item is never reported as incomplete on this basis.
|
|
31
|
+
|
|
32
|
+
## Implementer obligation — a green control is two facts, not one
|
|
33
|
+
|
|
34
|
+
`lisa-tdd-implementation` and `lisa-reproduce-bug` bind this arm: **when a prescribed control does not change state as the item predicted, stop. Establish which cause holds before acting on the stopping rule.**
|
|
35
|
+
|
|
36
|
+
| Cause | Correct action |
|
|
37
|
+
|---|---|
|
|
38
|
+
| The change had no effect on behaviour | Revisit the change |
|
|
39
|
+
| The fixture never reaches the changed code path | Fix or extend the control — do **not** revert |
|
|
40
|
+
|
|
41
|
+
They demand opposite actions, and the cheaper reading ("the fix did nothing") wins by default when nothing forces the distinction. So force it: **prove reachability by execution, never by reading the fixture.** Put a temporary throw, log line, or counter in the changed code and run that one test; or run coverage scoped to it and read whether the changed lines were hit. Reasoning that the fixture *looks like* it reaches the path is the same move `falsifiable-checks` rejects as "mentally reverting".
|
|
42
|
+
|
|
43
|
+
**Never revert on an unexplained green.** An unexplained control is a blocked observation, not a verdict — and a reachable-but-still-green control is the only form of it that licenses revisiting the change.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
The full body behind the `control-reachability` eager head. It defines one vendor-neutral contract consumed by the three tracker writers (`lisa-jira-write-ticket`, `lisa-github-write-issue`, `lisa-linear-write-issue`), the three validators (`lisa-jira-validate-ticket`, `lisa-github-validate-issue`, `lisa-linear-validate-issue`) via gate **S20**, and the implementer surfaces `lisa-ticket-triage`, `lisa-tdd-implementation`, `lisa-reproduce-bug` and `lisa-implement`. Each surface cites this slug rather than growing its own prose, exactly as the vendor arms cite `leaf-only-lifecycle`, `repo-scope-split` and `derived-branch-plan`. One slug is what keeps a control rejected on JIRA from being accepted on Linear.
|
|
48
|
+
|
|
49
|
+
## The measured instance
|
|
50
|
+
|
|
51
|
+
A work item in a consumer lane named a real, existing test, stated a real expectation about it, and prescribed a stopping rule in substance:
|
|
52
|
+
|
|
53
|
+
> Make the change; that pinned test must go red. If it still passes, the fix did nothing.
|
|
54
|
+
|
|
55
|
+
On its face this is exemplary. It hands the implementer a falsifiable stopping condition instead of asking it to judge the result by eye, and it is the shape Lisa's own `falsifiable-checks` rule asks for everywhere else.
|
|
56
|
+
|
|
57
|
+
**The test still passed, and the fix had worked.** The pinned test's fixture omitted the field the fix reads, so execution fell through to a default branch. The test stayed green **for an entirely new reason** — not because behaviour was unchanged, but because the fixture never reached the changed path. Following the item's own stopping rule would have reverted a correct fix. A human noticed; an unattended agent following the written rule would not have.
|
|
58
|
+
|
|
59
|
+
## Why this failure mode is distinct
|
|
60
|
+
|
|
61
|
+
Lisa already carries a family of rules about controls that do not bite. This one is the mirror image, and the difference is what makes it worth its own slug.
|
|
62
|
+
|
|
63
|
+
| | The familiar family (`falsifiable-checks`) | This rule |
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| Where the defect lives | The check the author wrote | The **specification** that prescribes the check |
|
|
66
|
+
| Failure mode | The control **fails to bite** — passes something it should catch | The control **bites in the wrong direction** |
|
|
67
|
+
| Cost | A defect ships | A **correct fix is reverted** |
|
|
68
|
+
| How it looks | A green check nobody questions | Diligence — the agent followed the written stopping rule |
|
|
69
|
+
| Who it hits hardest | Careless implementers | **Disciplined** implementers |
|
|
70
|
+
|
|
71
|
+
It sits in the layer everyone treats as the thing that catches implementation error, which is exactly why nothing was watching it.
|
|
72
|
+
|
|
73
|
+
Related, at other layers: a gate that blocks a slow reviewer but only reports a hollow one is a gate mis-weighting two real signals; a gate that declares a merge condition nothing verifies is an unverified assertion in config. Here the signal itself is uninterpretable, and it is verified by an agent — incorrectly.
|
|
74
|
+
|
|
75
|
+
## Why the checkable form, and why a marker
|
|
76
|
+
|
|
77
|
+
The obvious fix is a sentence of guidance: *"make sure the fixture reaches the path."* That is the wrong instrument, and it is worth being explicit about why, because it will look like the simple answer every time someone revisits this.
|
|
78
|
+
|
|
79
|
+
**This failure is itself an instance of advisory guidance being insufficient.** A thoughtful author wrote a thoughtful stopping rule and it was still wrong. Prose asking for more thoughtfulness is the same class of artifact that failed. So the obligation is expressed as a **parseable declaration** a validator either finds or does not, in the same family as the `[EVIDENCE: <type>: <name>]` manifest markers — which exist for the same reason, and which turned "attach proof" from a discipline into a property.
|
|
80
|
+
|
|
81
|
+
The marker also moves the check **earlier**. A prose instruction can only be evaluated at the moment the stopping rule misfires, by the one agent least able to see past it. A marker is checked before work begins, by a validator that has no stake in the outcome.
|
|
82
|
+
|
|
83
|
+
## The marker
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
[CONTROL: <test-identifier> | reaches: <input-or-field>]
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Placed in `## Validation Journey`, one per named control. Parse by the exact `[CONTROL:` prefix and split on the single `|`.
|
|
90
|
+
|
|
91
|
+
| Field | Requirement |
|
|
92
|
+
|---|---|
|
|
93
|
+
| `<test-identifier>` | Non-empty. The test file path, the test name, or both. It must be enough to run the test. |
|
|
94
|
+
| `reaches:` | The literal key, then a non-empty description of the **input, field, fixture key, argument, or state** that carries execution into the changed code. |
|
|
95
|
+
|
|
96
|
+
Worked examples:
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
[CONTROL: tests/unit/pricing/discount.test.ts "applies tier discount" | reaches: fixture sets tier="gold", which is the field the resolver newly reads]
|
|
100
|
+
[CONTROL: spec/models/invoice_spec.rb#late_fee | reaches: seeded invoice has due_on in the past, entering the overdue branch]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Rejected, with the reason:
|
|
104
|
+
|
|
105
|
+
| Marker | Why it fails |
|
|
106
|
+
|---|---|
|
|
107
|
+
| `[CONTROL: discount.test.ts]` | No `reaches:` half — names the control without saying what makes it observe the change |
|
|
108
|
+
| `[CONTROL: | reaches: tier field]` | Empty identifier — nobody can run it |
|
|
109
|
+
| `[CONTROL: discount.test.ts \| reaches: the fix]` | Restates the assertion instead of naming an input |
|
|
110
|
+
| `[CONTROL: discount.test.ts \| reaches: the changed code path]` | Same — names the code, not what gets execution there |
|
|
111
|
+
|
|
112
|
+
**The marker answers one question: what in this fixture gets execution to the changed lines?** Anything that does not answer it is a control whose reachability cannot be stated, and a control whose reachability cannot be stated is not a control.
|
|
113
|
+
|
|
114
|
+
## Gate S20 — when it applies, and when it must stay silent
|
|
115
|
+
|
|
116
|
+
S20 applies when the body — Acceptance Criteria, Technical Approach, or Validation Journey — names an **existing** test AND predicts a state change for it when the work lands. Signals: "must go red", "currently passes and must fail", "fails before the fix and passes after", "if it still passes the fix did nothing", or any equivalent stopping rule.
|
|
117
|
+
|
|
118
|
+
It is `N/A` otherwise, and that half of the contract is load-bearing. **An item that introduces a new test rather than pinning an existing one carries no reachability obligation** and must never be reported as incomplete on this basis. A gate that fires on every work item is a gate teams learn to route around; the value of S20 is that a FAIL means something specific.
|
|
119
|
+
|
|
120
|
+
The remediation names the input, not the discipline:
|
|
121
|
+
|
|
122
|
+
> Name the input or field that makes `<test>` reach the code this work changes, as `[CONTROL: <test> | reaches: <field>]`. If the fixture does not reach it, the test cannot observe this change — extend the fixture or specify a new test instead.
|
|
123
|
+
|
|
124
|
+
`product_relevant: true`. An unfalsifiable stopping rule is a specification defect, and the person who wrote the item is the person who can fix it.
|
|
125
|
+
|
|
126
|
+
## The implementer arm — a green control is two facts
|
|
127
|
+
|
|
128
|
+
The authoring gate catches what it can see before work starts. It cannot see the actual test outcome, and only the implementer can. So the contract has a second arm, bound by `lisa-tdd-implementation` (RED phase) and `lisa-reproduce-bug` (when an existing test is reused as the reproduction):
|
|
129
|
+
|
|
130
|
+
**When a prescribed control does not change state as the item predicted, stop. Establish which of the two causes holds before acting on the stopping rule.**
|
|
131
|
+
|
|
132
|
+
| Cause | Correct action |
|
|
133
|
+
|---|---|
|
|
134
|
+
| The change had no effect on behaviour | Revisit the change |
|
|
135
|
+
| The fixture never reaches the changed code path | Fix or extend the control — do **not** revert |
|
|
136
|
+
|
|
137
|
+
Two properties of this make it worth writing down rather than trusting to judgement:
|
|
138
|
+
|
|
139
|
+
1. **The actions are opposite.** Getting the cause wrong does not degrade the outcome, it inverts it.
|
|
140
|
+
2. **One reading is cheaper than the other.** "The fix did nothing" requires no further work and closes the question; "the fixture never got there" requires an investigation. Left to default, the cheap reading wins — and it is the one that reverts working code.
|
|
141
|
+
|
|
142
|
+
### How to establish it
|
|
143
|
+
|
|
144
|
+
**Prove reachability by execution, never by reading the fixture.** Reasoning that the fixture *looks like* it reaches the path is exactly the "mentally reverting" move `falsifiable-checks` rejects, and for the same reason: the person doing the reasoning already believes the answer.
|
|
145
|
+
|
|
146
|
+
Two sound methods, in order of preference:
|
|
147
|
+
|
|
148
|
+
- **Instrument the changed code.** Put a temporary `throw` — not a log line, which can be swallowed by a reporter — at the top of the changed block, run that one test, and read whether it errors. Then remove it. A throw is preferred because its absence is unambiguous.
|
|
149
|
+
- **Coverage, scoped to the single test.** Run the project's coverage tool over that test alone and read whether the changed lines were executed. Whole-suite coverage does not answer this: some *other* test reaching those lines tells you nothing about this control.
|
|
150
|
+
|
|
151
|
+
Then report which method was used and what it showed. "The control stayed green because the fixture never set `tier`, confirmed by a throw at the resolver that the test did not hit" is a finding. "The control stayed green" is not.
|
|
152
|
+
|
|
153
|
+
### Never revert on an unexplained green
|
|
154
|
+
|
|
155
|
+
An unexplained control is a **blocked observation**, not a verdict. The only state that licenses revisiting the change is a control proven to reach the changed path and still not move. If reachability cannot be established at all — the harness will not run, the code path is unreachable from any fixture — that is a finding to report, and the work item's stopping rule is void until someone repairs the control.
|
|
156
|
+
|
|
157
|
+
Fixing the control is ordinary work, not scope creep: extend the fixture with the field that carries execution to the change, or write the test the item should have named. Either way the control ends the work able to observe the change, which is what the item asked for in the first place.
|
|
158
|
+
|
|
159
|
+
## What this rule does not claim
|
|
160
|
+
|
|
161
|
+
Stated plainly so nobody reads more into it than the evidence supports.
|
|
162
|
+
|
|
163
|
+
- **Frequency.** One measured instance. No count exists of how many work items name an existing test as a red-before-green control, so the rate could be rare or routine. The gate is cheap and `N/A` by default, which is the right shape for an unknown denominator.
|
|
164
|
+
- **Detectability by tooling.** Whether any existing gate could *automatically* detect a fixture that does not reach the changed code path is unexamined. Coverage-diff and per-test path instrumentation are plausible and would strengthen this rule into a machine check rather than a declaration; so is the possibility that nothing available does it cheaply. This contract deliberately requires a **declaration** an author writes and a validator parses, which is checkable today.
|
|
165
|
+
- **Blast radius of the observed instance.** The fix was not reverted, because a human noticed. That an unattended agent would have reverted it is inferred from the written stopping rule, not observed.
|
|
166
|
+
- **That an advisory rule would not have helped.** Untested. It is a reason to prefer the checkable form, not a measured finding.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Convergent Review
|
|
2
|
+
|
|
3
|
+
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
4
|
+
> section below is the former eager head, preserved verbatim; the full
|
|
5
|
+
> contract follows it. Reachable on demand via [the rule index](../eager/00-rule-index.md).
|
|
6
|
+
|
|
7
|
+
## Convergent Review
|
|
8
|
+
|
|
9
|
+
Review exists to get correct work merged, not to keep a PR in review orbit.
|
|
10
|
+
|
|
11
|
+
- Block only concrete correctness, security, data-loss, or contract-violation
|
|
12
|
+
failures. Lint-owned style, formatting, taste, and speculative improvements
|
|
13
|
+
are non-blocking unless the work item or repository rules make them release
|
|
14
|
+
criteria.
|
|
15
|
+
- Every finding must state severity, blocking yes/no, a concrete failure
|
|
16
|
+
scenario, evidence, and the smallest actionable fix — plus
|
|
17
|
+
`invariant_violated` (the property at risk) and `machinery_to_remove` (what
|
|
18
|
+
becomes deletable, or `none`), required for `readiness-rubric` findings and
|
|
19
|
+
recommended elsewhere.
|
|
20
|
+
- Present findings highest-consequence first, by severity and blast radius, not
|
|
21
|
+
by discovery order. Report section order stays stable.
|
|
22
|
+
- A blocking finding without a concrete failure scenario is malformed by
|
|
23
|
+
contract; downgrade it to non-blocking and ask for evidence.
|
|
24
|
+
- Resolve each finding as `fixed`, `deferred`, or `pushed-back`. If the reviewer
|
|
25
|
+
cannot refute a pushback with fresh evidence, the author's disposition stands.
|
|
26
|
+
- After suggestion implementation completes and gates pass, review does not
|
|
27
|
+
reopen absent new evidence: a relevant new commit, a failed gate, a newly cited
|
|
28
|
+
failure scenario, or a scope change.
|
|
29
|
+
- Irreconcilable blocking disagreement becomes a blocked work item with both
|
|
30
|
+
positions summarized for the operator, not an endless loop.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
Review exists to get correct work merged, not to keep a PR in review orbit.
|
|
35
|
+
Apply this contract to every product, quality, local, bot-parity, and suggestion
|
|
36
|
+
implementation pass.
|
|
37
|
+
|
|
38
|
+
## Severity Bar
|
|
39
|
+
|
|
40
|
+
Findings block only when they name a concrete failure scenario in one of these
|
|
41
|
+
classes:
|
|
42
|
+
|
|
43
|
+
- Correctness: shipped behavior violates the work item, breaks an existing
|
|
44
|
+
contract, or loses required data.
|
|
45
|
+
- Security: the change creates or preserves an exploitable auth, input,
|
|
46
|
+
secret-handling, permission, or data-exposure flaw.
|
|
47
|
+
- Data loss: a realistic path can delete, corrupt, overwrite, or strand user or
|
|
48
|
+
operational state.
|
|
49
|
+
- Contract violation: the change breaks a public API, workflow, generated
|
|
50
|
+
artifact contract, tracker lifecycle, or documented factory invariant.
|
|
51
|
+
|
|
52
|
+
Lint-owned style, formatting, taste, general maintainability preferences, and
|
|
53
|
+
speculative improvements are non-blocking unless the repository rule or work
|
|
54
|
+
item explicitly makes them release criteria.
|
|
55
|
+
|
|
56
|
+
## Required Finding Shape
|
|
57
|
+
|
|
58
|
+
Every finding must state:
|
|
59
|
+
|
|
60
|
+
- Severity: `critical`, `major`, `minor`, or `nit`.
|
|
61
|
+
- Blocking: `yes` or `no`.
|
|
62
|
+
- Failure scenario: the concrete user, operator, security, or factory outcome
|
|
63
|
+
that occurs if the change ships as-is.
|
|
64
|
+
- Evidence: the file, command output, observed behavior, ticket text, or
|
|
65
|
+
external constraint proving the scenario is reachable.
|
|
66
|
+
- Fix: the smallest actionable correction, or the reason no code change is
|
|
67
|
+
needed. The correction belongs at the **owning boundary** that permitted the
|
|
68
|
+
failure, not at the symptom site.
|
|
69
|
+
- `invariant_violated`: the named property the system is supposed to hold that
|
|
70
|
+
this finding puts at risk — for example "the artifact that ships is the
|
|
71
|
+
artifact CI validated". The invariant is the property; the failure scenario is
|
|
72
|
+
the outcome when it breaks. State both; they are not interchangeable.
|
|
73
|
+
- `machinery_to_remove`: the redundant checks, workarounds, or scaffolding that
|
|
74
|
+
become deletable once the correction lands, or explicitly `none`. This is a
|
|
75
|
+
**scaffolding-subtraction candidate** — it is surfaced for a human or the
|
|
76
|
+
implementer to act on and is never auto-deleted by any review pass.
|
|
77
|
+
|
|
78
|
+
A finding marked blocking without a concrete failure scenario is malformed by
|
|
79
|
+
contract. Downgrade it to non-blocking and ask for evidence instead of treating
|
|
80
|
+
it as a merge blocker.
|
|
81
|
+
|
|
82
|
+
### Compatibility
|
|
83
|
+
|
|
84
|
+
`invariant_violated` and `machinery_to_remove` are **required for findings
|
|
85
|
+
emitted under the `readiness-rubric`** and **recommended everywhere else**. A
|
|
86
|
+
finding from an existing product, quality, local, bot-parity, or suggestion
|
|
87
|
+
implementation pass that omits them is still well-formed by contract — this
|
|
88
|
+
extension is additive and never retroactively malforms a shipped review surface.
|
|
89
|
+
|
|
90
|
+
### Readiness findings map onto this shape
|
|
91
|
+
|
|
92
|
+
A readiness finding names five fields. All five bind to this contract, so there
|
|
93
|
+
is no second findings format anywhere in the repository:
|
|
94
|
+
|
|
95
|
+
| Readiness field | Contract field |
|
|
96
|
+
|---|---|
|
|
97
|
+
| the at-risk invariant | `invariant_violated` (above) |
|
|
98
|
+
| `evidence` | `Evidence` |
|
|
99
|
+
| `why_proof_missed` | `Evidence`, extended with a required proof-gap clause: why the existing proof machinery did not catch this |
|
|
100
|
+
| `root_correction` | `Fix`, qualified: the correction goes at the owning boundary, not the symptom site |
|
|
101
|
+
| redundant machinery | `machinery_to_remove` (above) |
|
|
102
|
+
|
|
103
|
+
Anything that needs a sixth field extends this section rather than starting a
|
|
104
|
+
parallel format.
|
|
105
|
+
|
|
106
|
+
### Consequence Ordering
|
|
107
|
+
|
|
108
|
+
Findings are presented **highest-consequence first**. Consequence is determined
|
|
109
|
+
by severity and blast radius — how much of the system, how many users, and how
|
|
110
|
+
irreversible the outcome — not by discovery order, file order, or the order a
|
|
111
|
+
tool happened to emit them in. Two reviewers ordering the same finding set
|
|
112
|
+
differently is a defect, not a preference.
|
|
113
|
+
|
|
114
|
+
This governs the order of findings **within** a section only. Report section
|
|
115
|
+
order stays stable and is unaffected: never reorder, merge, or silently omit a
|
|
116
|
+
section to surface a finding earlier.
|
|
117
|
+
|
|
118
|
+
## Dispositions
|
|
119
|
+
|
|
120
|
+
The implementer resolves each finding with exactly one disposition:
|
|
121
|
+
|
|
122
|
+
- `fixed`: code, tests, docs, or generated artifacts changed to remove the
|
|
123
|
+
failure scenario.
|
|
124
|
+
- `deferred`: the issue is real but non-blocking; record the rationale and, when
|
|
125
|
+
useful, the follow-up work item.
|
|
126
|
+
- `pushed-back`: the finding is not valid for this work because evidence,
|
|
127
|
+
scope, or existing project rules refute it; reply with that rationale.
|
|
128
|
+
|
|
129
|
+
If a reviewer cannot refute a `pushed-back` disposition with fresh evidence, the
|
|
130
|
+
author's disposition stands.
|
|
131
|
+
|
|
132
|
+
## Stopping Rule
|
|
133
|
+
|
|
134
|
+
After suggestion implementation completes and the required quality and
|
|
135
|
+
verification gates pass, review does not reopen unless new evidence appears:
|
|
136
|
+
|
|
137
|
+
- a new commit changes the reviewed behavior,
|
|
138
|
+
- a gate fails,
|
|
139
|
+
- a reviewer supplies a previously uncited failure scenario, or
|
|
140
|
+
- the work item scope changes.
|
|
141
|
+
|
|
142
|
+
Irreconcilable blocking disagreement is not an endless review loop. Move the
|
|
143
|
+
work item to the configured blocked state, add the human-needed marker when the
|
|
144
|
+
decision is human-only, and summarize both positions in operator-readable
|
|
145
|
+
language.
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# Credential-Substrate Precedence
|
|
2
|
+
|
|
3
|
+
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
4
|
+
> section below is the former eager head, preserved verbatim; the full
|
|
5
|
+
> contract follows it. Reachable on demand via [the rule index](../eager/00-rule-index.md).
|
|
6
|
+
|
|
7
|
+
## Credential-Substrate Precedence (load-bearing)
|
|
8
|
+
|
|
9
|
+
**When more than one substrate can reach an external system, the configured credentials
|
|
10
|
+
provider's token/CLI path goes first and the interactive MCP is the fallback — and
|
|
11
|
+
identity-match verification is mandatory on every substrate, at every tier.**
|
|
12
|
+
|
|
13
|
+
**One shared, vendor-neutral contract cited by every `*-access` skill** (the
|
|
14
|
+
`leaf-only-lifecycle` / `repo-scope-split` precedent: one shared slug, never divergent
|
|
15
|
+
per-skill prose). An access skill states its per-vendor mechanics — which token, which
|
|
16
|
+
CLI, which identity anchor — and cites this rule for the ordering. It never restates,
|
|
17
|
+
narrows, or locally overrides that ordering.
|
|
18
|
+
|
|
19
|
+
Settled by decision record `2026-08-12-credential-substrate-precedence` (D6), and
|
|
20
|
+
settled in the `settled-decisions` sense: re-arguing MCP-first inside a skill is out of
|
|
21
|
+
scope for that skill's work.
|
|
22
|
+
|
|
23
|
+
## The ladder
|
|
24
|
+
|
|
25
|
+
1. **Tier 1 — configured-provider substrate.** The token or CLI path fed by
|
|
26
|
+
`lisa-secrets-access`, chosen whenever its bootstrap credential is available **and**
|
|
27
|
+
the resolved substrate identity-matches the configured tenant/workspace/site.
|
|
28
|
+
`lisa-secrets-access` is the single chokepoint — never read an OS keychain a second
|
|
29
|
+
time. The two legacy OS-keychain rungs that remain (`lisa-atlassian-access`,
|
|
30
|
+
`lisa-notion-access`) are a dated migration ramp with a **removal date of
|
|
31
|
+
2026-11-01**, not a standing exemption; no new access skill may add one.
|
|
32
|
+
2. **Tier 2 — interactive MCP**, used only when tier 1 is *genuinely* unavailable:
|
|
33
|
+
no bootstrap, no adapter for the operation (per-operation, not per-session), or a
|
|
34
|
+
provider outage. "The MCP happens to be authenticated" and "tier 1 is slower" are
|
|
35
|
+
**not** qualifying reasons.
|
|
36
|
+
3. **Tier 3 — loud, actionable failure** naming the exact credential to set and the exact
|
|
37
|
+
remediation. Never silently no-op, never blind-retry a failed or absent substrate,
|
|
38
|
+
never fall through to one that failed identity-match.
|
|
39
|
+
|
|
40
|
+
## Identity-match is mandatory on every substrate
|
|
41
|
+
|
|
42
|
+
Verified **in both directions** before any operation: the substrate must claim the
|
|
43
|
+
configured tenant, and the configured tenant must be one the substrate can reach. A
|
|
44
|
+
substrate authenticated as a different account is **skipped, never used — including at
|
|
45
|
+
tier 1**. A credential is not an identity claim; the identity claim is what the provider
|
|
46
|
+
says when asked. Skipping the check because "the user obviously meant this workspace" is
|
|
47
|
+
forbidden.
|
|
48
|
+
|
|
49
|
+
## Mutating operations: fallback is guarded, never routine
|
|
50
|
+
|
|
51
|
+
Falling back to an ambient-bound substrate for a **write** requires: switch profile and
|
|
52
|
+
assert identity immediately before the write → write → re-read the affected objects →
|
|
53
|
+
assert the tenant **from the response** (self URL host, cloudId in the path, response
|
|
54
|
+
metadata), not from the pre-flight check → on mismatch, stop, report a cross-tenant
|
|
55
|
+
hazard, and best-effort roll back. A successful pre-flight switch is not sufficient:
|
|
56
|
+
another process can mutate global state between the check and the write.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
**When more than one substrate can reach an external system, the configured credentials
|
|
61
|
+
provider's token/CLI path goes first and the interactive MCP is the fallback — and
|
|
62
|
+
identity-match verification is mandatory on every substrate, at every tier.**
|
|
63
|
+
|
|
64
|
+
This is **one shared, vendor-neutral contract cited by every `*-access` skill** (the
|
|
65
|
+
`leaf-only-lifecycle` / `repo-scope-split` precedent: one shared slug, never divergent
|
|
66
|
+
per-skill prose). An access skill states its per-vendor mechanics — which token, which
|
|
67
|
+
CLI, which identity anchor — and cites this rule for the ordering. It never restates,
|
|
68
|
+
narrows, or locally overrides the ordering.
|
|
69
|
+
|
|
70
|
+
Settled by the decision record `2026-08-12-credential-substrate-precedence` (D6). It is
|
|
71
|
+
a **settled decision** in the `settled-decisions` sense: re-arguing MCP-first inside a
|
|
72
|
+
skill is out of scope for that skill's work.
|
|
73
|
+
|
|
74
|
+
## The ladder
|
|
75
|
+
|
|
76
|
+
### Tier 1 — configured-provider substrate
|
|
77
|
+
|
|
78
|
+
The token or CLI path fed by `lisa-secrets-access`. Chosen **whenever its bootstrap
|
|
79
|
+
credential is available AND the resolved substrate identity-matches the configured
|
|
80
|
+
tenant/workspace/site.**
|
|
81
|
+
|
|
82
|
+
`lisa-secrets-access` is the single chokepoint that makes this tier actionable rather
|
|
83
|
+
than aspirational: it owns the one-store rule and the surface ladder, and its `tool:`
|
|
84
|
+
note line already declares which CLI a given credential is expected to drive. An access
|
|
85
|
+
skill resolves its credential through that chokepoint — never by reading an OS keychain
|
|
86
|
+
a second time.
|
|
87
|
+
|
|
88
|
+
Both halves of the gate are load-bearing. A present credential that identity-matches
|
|
89
|
+
nothing is **not** tier 1; it is a failed tier, and the ladder moves on.
|
|
90
|
+
|
|
91
|
+
### Tier 2 — interactive MCP
|
|
92
|
+
|
|
93
|
+
Used when the tier 1 path is **genuinely unavailable**. The three genuine cases:
|
|
94
|
+
|
|
95
|
+
- **No bootstrap** — the provider credential is absent or the project has not adopted a
|
|
96
|
+
credentials provider at all.
|
|
97
|
+
- **No adapter for the operation** — the token/CLI substrate has no documented adapter
|
|
98
|
+
for the requested operation, and the MCP does (per-operation, not per-session: a skill
|
|
99
|
+
may resolve tier 1 for one operation and tier 2 for the next).
|
|
100
|
+
- **Provider outage** — the provider path is present but failing for reasons the caller
|
|
101
|
+
cannot fix in-session.
|
|
102
|
+
|
|
103
|
+
"The MCP happens to be authenticated" is not one of them. Neither is "tier 1 is slower."
|
|
104
|
+
|
|
105
|
+
### Tier 3 — loud, actionable failure
|
|
106
|
+
|
|
107
|
+
When no substrate is both available and identity-matched, fail with a message naming the
|
|
108
|
+
exact credential to set and the exact remediation path. Never silently no-op, never
|
|
109
|
+
blind-retry a failed or absent substrate, and never fall through to a substrate that
|
|
110
|
+
failed identity-match.
|
|
111
|
+
|
|
112
|
+
## Identity-match is mandatory on every substrate
|
|
113
|
+
|
|
114
|
+
Verification runs **in both directions** before any operation: the substrate must claim
|
|
115
|
+
the configured tenant, and the configured tenant must be one the substrate can actually
|
|
116
|
+
reach. A substrate authenticated as a **different** account is **skipped, never used**,
|
|
117
|
+
regardless of tier — including tier 1. A credential is not an identity claim; the
|
|
118
|
+
identity claim is what the provider says when asked.
|
|
119
|
+
|
|
120
|
+
| Vendor | Identity anchor | Probe |
|
|
121
|
+
|---|---|---|
|
|
122
|
+
| Atlassian | `atlassian.cloudId` / `atlassian.site` | `/rest/api/3/myself` email, acli `auth status` site, MCP accessible-resources contains the cloudId |
|
|
123
|
+
| Notion | `notion.workspaceId` (+ `prdDatabaseId` reachability) | `GET /v1/users/me` → `bot.workspace_name`/`workspace_id` |
|
|
124
|
+
| Linear | `linear.workspace` / `linear.teamKey` | `viewer`/`organization` on GraphQL; team list through the MCP |
|
|
125
|
+
| Sentry / PostHog / Jam / Sonar | configured org + project | the substrate's own whoami/org listing |
|
|
126
|
+
|
|
127
|
+
Skipping the check because "the user obviously meant this workspace" is forbidden. Silent
|
|
128
|
+
cross-tenant operations are precisely the hazard this contract exists to prevent.
|
|
129
|
+
|
|
130
|
+
## Why provider-first (and why it overturns a working default)
|
|
131
|
+
|
|
132
|
+
MCP-first was defensible and is being overturned deliberately, not corrected as an
|
|
133
|
+
oversight. Three reasons outweigh it.
|
|
134
|
+
|
|
135
|
+
**Headless parity.** Cron runs, cloud sessions, CI, and subagent sessions have no
|
|
136
|
+
browser. Under MCP-first an interactive session and a headless session resolve through
|
|
137
|
+
*different* substrates and can therefore fail differently — and the failure surfaces only
|
|
138
|
+
in the environment nobody is watching. Provider-first makes the primary path the same one
|
|
139
|
+
everywhere, with MCP as the enhancement rather than the default.
|
|
140
|
+
|
|
141
|
+
**Tenant safety — the generalized Atlassian write rule.** Substrates differ in *where
|
|
142
|
+
their target comes from*:
|
|
143
|
+
|
|
144
|
+
- **Per-invocation-bound.** The target is part of the call. A cloudId-scoped REST URL
|
|
145
|
+
(`https://api.atlassian.com/ex/jira/<CLOUDID>/…`) or a workspace-scoped API token
|
|
146
|
+
carries its tenant in the request itself, so nothing outside the call can redirect it.
|
|
147
|
+
- **Ambient-bound.** The target comes from machine-global or session-global state a skill
|
|
148
|
+
does not own: acli's single active account, an MCP's browser OAuth session bound to
|
|
149
|
+
whatever account the human last used. Any other process — or the human — can change it
|
|
150
|
+
between the check and the call. That is a **TOCTOU** window, and a successful
|
|
151
|
+
pre-flight `auth status` does not close it.
|
|
152
|
+
|
|
153
|
+
Prefer the per-invocation-bound substrate. This is exactly why Atlassian JIRA *writes*
|
|
154
|
+
were already forced onto the cloudId-scoped curl adapter; the hazard is not specific to
|
|
155
|
+
Atlassian and not specific to writes. A misrouted write is loud and often reversible; a
|
|
156
|
+
**read through the wrong tenant silently returns wrong data**, which then propagates into
|
|
157
|
+
tickets, PRDs, and verification claims — harder to detect and harder to unwind. Reads get
|
|
158
|
+
the same ordering as writes.
|
|
159
|
+
|
|
160
|
+
**Determinism.** A token path either has its bootstrap or does not, and says so. An MCP's
|
|
161
|
+
readiness depends on session state a skill cannot inspect reliably — the same server
|
|
162
|
+
registers under different prefixes depending on install path, and its data tools register
|
|
163
|
+
only after OAuth completes.
|
|
164
|
+
|
|
165
|
+
## MCP stays a first-class fallback
|
|
166
|
+
|
|
167
|
+
This is a **re-ordering, not a removal.** The strongest argument for MCP-first — that an
|
|
168
|
+
already-authenticated MCP is zero-setup and identity-verified — is preserved by keeping
|
|
169
|
+
MCP as a genuine, fully supported tier rather than deleting it:
|
|
170
|
+
|
|
171
|
+
- Every access skill keeps its MCP adapters in the dispatch table.
|
|
172
|
+
- An operation with no tier 1 adapter routes to MCP **as the normal path**, not as an
|
|
173
|
+
error.
|
|
174
|
+
- A project with no credentials provider is fully functional on MCP alone.
|
|
175
|
+
- MCP failure messages stay actionable (how to enable and authenticate the plugin).
|
|
176
|
+
|
|
177
|
+
Removing an MCP adapter is a separate decision requiring its own justification. Do not
|
|
178
|
+
treat this contract as license to delete one.
|
|
179
|
+
|
|
180
|
+
## Guarded fallback for ambient-bound substrates
|
|
181
|
+
|
|
182
|
+
When the ladder does fall back to an ambient-bound substrate for a **mutating**
|
|
183
|
+
operation, the fallback is guarded — never the normal path:
|
|
184
|
+
|
|
185
|
+
1. Switch to the configured profile and assert the active identity matches config
|
|
186
|
+
immediately before the write.
|
|
187
|
+
2. Execute the write.
|
|
188
|
+
3. Re-read the affected object(s) immediately afterward.
|
|
189
|
+
4. Perform a **post-write tenant assertion** on the response — the tenant is proven from
|
|
190
|
+
the response (self URL host, cloudId in the path, or response metadata), not assumed
|
|
191
|
+
from the pre-flight check.
|
|
192
|
+
5. On mismatch: stop, report a cross-tenant hazard, and best-effort **roll back** the
|
|
193
|
+
write when a safe reversal exists (delete the created object, remove the created
|
|
194
|
+
comment/link, revert a reversible field edit). Never continue as if it succeeded.
|
|
195
|
+
|
|
196
|
+
A successful pre-flight switch is not sufficient for tenant safety — another process can
|
|
197
|
+
mutate global state between the check and the write.
|
|
198
|
+
|
|
199
|
+
## Legacy OS-keychain fallback — removal date 2026-11-01
|
|
200
|
+
|
|
201
|
+
Two access skills (`lisa-atlassian-access`, `lisa-notion-access`) still read an
|
|
202
|
+
OS keychain as a last rung below the chokepoint, because the guided
|
|
203
|
+
`/lisa:setup:atlassian` and `/lisa:setup:notion` flows wrote credentials there
|
|
204
|
+
before `lisa-secrets-access` existed. That rung is a **migration ramp with a
|
|
205
|
+
removal date, not a standing exemption**: it is a second reader of the same
|
|
206
|
+
credential, which is exactly how one credential ends up living in two places and
|
|
207
|
+
drifting, and a keychain entry is machine-local ambient state that no headless
|
|
208
|
+
surface can reach — so a project resting on it has no working tier 1 in cron, CI,
|
|
209
|
+
or a cloud session.
|
|
210
|
+
|
|
211
|
+
**Both rungs are deleted on 2026-11-01.** Before then, projects still on the
|
|
212
|
+
keychain path move the credential into their configured provider — re-running
|
|
213
|
+
`/lisa:setup:<vendor>` stores it through the chokepoint. After removal, a
|
|
214
|
+
keychain-only project fails loudly with the exact variable named (tier 3), which
|
|
215
|
+
is the intended outcome: it can never silently resolve through a substrate
|
|
216
|
+
authenticated elsewhere. No new access skill may add a keychain rung; a credential
|
|
217
|
+
the chokepoint cannot answer for is a setup gap to fix, not a store to add.
|
|
218
|
+
|
|
219
|
+
## Consequences to expect
|
|
220
|
+
|
|
221
|
+
- **A stale or wrong token now fails identity-match instead of silently succeeding
|
|
222
|
+
through an authenticated MCP.** That is intended: it is the exact class of bug this
|
|
223
|
+
contract exists to surface. Fix the credential (`/lisa:setup:<vendor>`); do not
|
|
224
|
+
re-order the ladder to route around it.
|
|
225
|
+
- Headless and interactive sessions take the same primary path, so a credential problem
|
|
226
|
+
reproduces on a laptop instead of only at 3am in cron.
|
|
227
|
+
- The ordering is **not configurable per project**. A knob would let a project
|
|
228
|
+
reintroduce the headless divergence this contract removes. Revisit only with a concrete
|
|
229
|
+
need and a new decision record.
|
|
230
|
+
|
|
231
|
+
## Adding or editing an access skill
|
|
232
|
+
|
|
233
|
+
1. Cite this rule by name; do not restate the ordering.
|
|
234
|
+
2. Document the tier 1 credential and the `lisa-secrets-access` resolution path.
|
|
235
|
+
3. Document the identity anchor and its probe, and state that mismatch means skip.
|
|
236
|
+
4. Keep MCP adapters and name the operations for which MCP is the only substrate.
|
|
237
|
+
5. Make the terminal failure name the exact credential and remediation command.
|
|
238
|
+
|
|
239
|
+
An access skill whose MCP is provider-credential-authenticated has no interactive
|
|
240
|
+
tier to demote — that MCP *is* the tier 1 substrate (`lisa-sonarcloud-access`: the
|
|
241
|
+
official SonarQube MCP authenticates headlessly from `SONARQUBE_CLI_TOKEN`).
|
|
242
|
+
Reserve a browser-OAuth demotion for vendors whose MCP is keychain-bound and
|
|
243
|
+
therefore dead headless.
|
|
244
|
+
|
|
245
|
+
That is a claim about tier ORDER and never about exclusivity. "Tier 1 needs no
|
|
246
|
+
demotion" does not license "there is no other substrate": where the vendor exposes
|
|
247
|
+
a token-authenticated Web API, it remains a sanctioned read-only fallback for a
|
|
248
|
+
surface on which the MCP is not wired, and a missing MCP there is a demotion rather
|
|
249
|
+
than a terminal tool-access failure.
|