@codyswann/lisa 2.195.3 → 2.195.6
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/README.md +17 -3
- package/all/copy-contents/gitignore +10 -4
- package/dist/cli/print-update-warning.d.ts +1 -1
- package/dist/cli/print-update-warning.js +2 -2
- package/dist/cli/print-update-warning.js.map +1 -1
- package/dist/cli/update-check.d.ts +6 -0
- package/dist/cli/update-check.d.ts.map +1 -1
- package/dist/cli/update-check.js +3 -3
- package/dist/cli/update-check.js.map +1 -1
- package/dist/cli/update-cmd.d.ts +1 -1
- package/dist/cli/update-cmd.d.ts.map +1 -1
- package/dist/cli/update-cmd.js +8 -7
- package/dist/cli/update-cmd.js.map +1 -1
- package/dist/codex/hooks-installer.d.ts +4 -1
- package/dist/codex/hooks-installer.d.ts.map +1 -1
- package/dist/codex/hooks-installer.js +109 -30
- package/dist/codex/hooks-installer.js.map +1 -1
- package/dist/codex/mcp-installer.d.ts +22 -0
- package/dist/codex/mcp-installer.d.ts.map +1 -0
- package/dist/codex/mcp-installer.js +135 -0
- package/dist/codex/mcp-installer.js.map +1 -0
- package/dist/codex/plugin-marketplace-installer.d.ts +19 -13
- package/dist/codex/plugin-marketplace-installer.d.ts.map +1 -1
- package/dist/codex/plugin-marketplace-installer.js +69 -72
- package/dist/codex/plugin-marketplace-installer.js.map +1 -1
- package/dist/codex/project-hooks-cleanup.d.ts +12 -0
- package/dist/codex/project-hooks-cleanup.d.ts.map +1 -0
- package/dist/codex/project-hooks-cleanup.js +31 -0
- package/dist/codex/project-hooks-cleanup.js.map +1 -0
- package/dist/codex/project-overlay.d.ts +23 -0
- package/dist/codex/project-overlay.d.ts.map +1 -0
- package/dist/codex/project-overlay.js +64 -0
- package/dist/codex/project-overlay.js.map +1 -0
- package/dist/codex/scripts/inject-rules.sh +4 -0
- package/dist/codex/scripts/install-pkgs.sh +4 -0
- package/dist/codex/scripts/setup-jira-cli.sh +5 -1
- package/dist/codex/settings-installer.d.ts.map +1 -1
- package/dist/codex/settings-installer.js +16 -3
- package/dist/codex/settings-installer.js.map +1 -1
- package/dist/codex/skills-installer.d.ts +15 -19
- package/dist/codex/skills-installer.d.ts.map +1 -1
- package/dist/codex/skills-installer.js +47 -140
- package/dist/codex/skills-installer.js.map +1 -1
- package/dist/core/lisa-plugin-selection.d.ts +16 -0
- package/dist/core/lisa-plugin-selection.d.ts.map +1 -0
- package/dist/core/lisa-plugin-selection.js +59 -0
- package/dist/core/lisa-plugin-selection.js.map +1 -0
- package/dist/core/lisa-rules-mirror.d.ts +2 -1
- package/dist/core/lisa-rules-mirror.d.ts.map +1 -1
- package/dist/core/lisa-rules-mirror.js +19 -3
- package/dist/core/lisa-rules-mirror.js.map +1 -1
- package/dist/core/lisa-skill-sources.d.ts.map +1 -1
- package/dist/core/lisa-skill-sources.js +16 -1
- package/dist/core/lisa-skill-sources.js.map +1 -1
- package/dist/core/lisa.d.ts +4 -6
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +12 -38
- package/dist/core/lisa.js.map +1 -1
- package/dist/migrations/ensure-lisa-postinstall.d.ts.map +1 -1
- package/dist/migrations/ensure-lisa-postinstall.js +4 -3
- package/dist/migrations/ensure-lisa-postinstall.js.map +1 -1
- package/dist/opencode/plugin-templates/lisa-session-bootstrap.ts +2 -3
- package/npm-package/create-only/.github/workflows/publish-to-npm.yml +2 -1
- package/package.json +2 -3
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-acceptance-criteria/SKILL.md +71 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-acceptance-criteria/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-agent-design-best-practices/SKILL.md +219 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-agent-design-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-analyze-claude-remote/SKILL.md +429 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-analyze-claude-remote/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/SKILL.md +361 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/scripts/markdown-to-adf.mjs +214 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-automation-status/SKILL.md +111 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-automation-status/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-bug-triage/SKILL.md +23 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-bug-triage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-codebase-research/SKILL.md +87 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-codebase-research/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-codify-verification/SKILL.md +162 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-codify-verification/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-prd-intake/SKILL.md +417 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-prd-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-to-tracker/SKILL.md +356 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-to-tracker/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-write-prd/SKILL.md +109 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-cross-pollinate/SKILL.md +175 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-cross-pollinate/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-debrief/SKILL.md +94 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-debrief/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-debrief-apply/SKILL.md +63 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-debrief-apply/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +336 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-doctor/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +179 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-epic-triage/SKILL.md +28 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-epic-triage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/SKILL.md +91 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-fix-linter-error/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-generate-claude-remote-build-script/SKILL.md +224 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-generate-claude-remote-build-script/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-commit/SKILL.md +48 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-commit/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-prune/SKILL.md +35 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-prune/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-submit-pr/SKILL.md +113 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-submit-pr/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-add-journey/SKILL.md +115 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +446 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-create/SKILL.md +101 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-create/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-evidence/SKILL.md +110 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-journey/SKILL.md +121 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-prd-intake/SKILL.md +432 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-prd-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-project-v2/SKILL.md +227 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-project-v2/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-read-issue/SKILL.md +248 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-read-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/SKILL.md +132 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-to-tracker/SKILL.md +339 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-to-tracker/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +330 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-verify/SKILL.md +29 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/SKILL.md +339 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-prd/SKILL.md +157 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +202 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-implement/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-code-complexity/SKILL.md +44 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-code-complexity/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines/SKILL.md +45 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines-per-function/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-test-coverage/SKILL.md +44 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-test-coverage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-tests/SKILL.md +47 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-tests/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-intake/SKILL.md +133 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-intake-explain/SKILL.md +279 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-intake-explain/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jam-access/SKILL.md +52 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jam-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-add-journey/SKILL.md +121 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +368 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/SKILL.md +154 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-evidence/SKILL.md +90 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-evidence/scripts/post-evidence.sh +180 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/SKILL.md +127 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/generate-templates.py +233 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/SKILL.md +198 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/scripts/download-attachment.sh +110 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-sync/SKILL.md +108 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-sync/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +317 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-verify/SKILL.md +30 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/SKILL.md +267 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jsdoc-best-practices/SKILL.md +432 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jsdoc-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/SKILL.md +90 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-add-journey/SKILL.md +105 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +346 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/SKILL.md +146 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-evidence/SKILL.md +103 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-journey/SKILL.md +134 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-prd-intake/SKILL.md +383 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-prd-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-read-issue/SKILL.md +200 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-read-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-sync/SKILL.md +127 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-sync/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/SKILL.md +339 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +314 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-verify/SKILL.md +51 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +292 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-prd/SKILL.md +96 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +69 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-monitor/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-add-test-coverage/SKILL.md +40 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-add-test-coverage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-improve-tests/SKILL.md +29 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-improve-tests/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-lower-code-complexity/SKILL.md +28 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-lower-code-complexity/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-access/SKILL.md +226 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-prd-intake/SKILL.md +360 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-prd-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-to-tracker/SKILL.md +353 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-to-tracker/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-write-prd/SKILL.md +109 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-write-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-review/SKILL.md +83 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-review/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-simplifier/SKILL.md +76 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-simplifier/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-coderabbit/SKILL.md +77 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-coderabbit/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-safety-net-rules/SKILL.md +144 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-safety-net-rules/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-sdk-setup/SKILL.md +211 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-sdk-setup/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-seer/SKILL.md +135 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-seer/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-skill-creator/SKILL.md +151 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-skill-creator/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-performance-review/SKILL.md +94 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-performance-review/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-plan/SKILL.md +60 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-plan/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-plugin-sync-explain/SKILL.md +53 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-plugin-sync-explain/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-posthog-access/SKILL.md +60 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-posthog-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-backlink/SKILL.md +265 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-backlink/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-source-write/SKILL.md +101 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-source-write/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-ticket-coverage/SKILL.md +170 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-ticket-coverage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-product-walkthrough/SKILL.md +104 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-product-walkthrough/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/SKILL.md +315 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/evidence-card-format.md +21 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/host-project-only.md +22 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/idempotency-verification-harness.md +57 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/public-external-inspiration.md +22 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/examples/unavailable-data-rejection.md +22 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-pull-request-review/SKILL.md +84 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-pull-request-review/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-quality-review/SKILL.md +54 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-quality-review/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-queue-status/SKILL.md +133 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-queue-status/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +1030 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-reproduce-bug/SKILL.md +96 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-reproduce-bug/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-research/SKILL.md +68 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-research/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-review-implementation/SKILL.md +209 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-review-implementation/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-review-local/SKILL.md +88 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-review-local/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-root-cause-analysis/SKILL.md +155 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-root-cause-analysis/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-security-review/SKILL.md +57 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-security-review/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-security-zap-scan/SKILL.md +33 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-security-zap-scan/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sentry-access/SKILL.md +56 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sentry-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-atlassian/SKILL.md +347 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-atlassian/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +103 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-confluence/SKILL.md +254 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-confluence/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-github/SKILL.md +268 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-github/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-jira/SKILL.md +198 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-jira/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-linear/SKILL.md +251 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-linear/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-notion/SKILL.md +316 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-notion/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sonarcloud-access/SKILL.md +71 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sonarcloud-access/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-spec-conformance/SKILL.md +159 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-spec-conformance/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sync-down/SKILL.md +171 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sync-down/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-task-decomposition/SKILL.md +127 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-task-decomposition/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-task-triage/SKILL.md +23 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-task-triage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tdd-implementation/SKILL.md +86 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tdd-implementation/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-test-strategy/SKILL.md +63 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-test-strategy/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-ticket-triage/SKILL.md +186 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-ticket-triage/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-add-journey/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-build-intake/SKILL.md +86 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-build-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-create/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-create/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/SKILL.md +53 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-journey/SKILL.md +27 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-read/SKILL.md +28 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-read/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-source-artifacts/SKILL.md +107 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-source-artifacts/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-sync/SKILL.md +65 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-sync/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-validate/SKILL.md +37 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-validate/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-verify/SKILL.md +29 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-write/SKILL.md +54 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-write/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-usage-accounting/SKILL.md +170 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-usage-accounting/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-use-the-product/SKILL.md +86 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-use-the-product/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-validate-tracker-mapping/SKILL.md +195 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-validate-tracker-mapping/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/SKILL.md +365 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verify/SKILL.md +52 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verify-prd/SKILL.md +392 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verify-prd/agents/openai.yaml +4 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-wiki-install/SKILL.md +101 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-wiki-install/agents/openai.yaml +4 -0
- package/plugins/lisa/hooks/inject-rules.sh +3 -2
- package/plugins/lisa/hooks/install-pkgs.sh +4 -45
- package/plugins/lisa/hooks/setup-jira-cli.sh +4 -12
- package/plugins/lisa/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-setup-linear/SKILL.md +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-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/hooks/inject-rules.sh +3 -2
- package/plugins/lisa-copilot/hooks/install-pkgs.sh +4 -45
- package/plugins/lisa-copilot/hooks/setup-jira-cli.sh +4 -12
- package/plugins/lisa-copilot/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/install-pkgs.sh +4 -45
- package/plugins/lisa-cursor/hooks/setup-jira-cli.sh +4 -12
- package/plugins/lisa-cursor/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-expo/.codex-plugin/skills/add-app-clip/SKILL.md +280 -0
- package/plugins/lisa-expo/.codex-plugin/skills/add-app-clip/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/add-app-clip/references/native-module.md +96 -0
- package/plugins/lisa-expo/.codex-plugin/skills/apollo-client/SKILL.md +238 -0
- package/plugins/lisa-expo/.codex-plugin/skills/apollo-client/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/apollo-client/references/mutation-patterns.md +360 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/SKILL.md +367 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +438 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/SKILL.md +321 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/animations.md +220 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/controls.md +272 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/form-sheet.md +253 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/gradients.md +106 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/icons.md +213 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/media.md +198 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/route-structure.md +229 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/search.md +248 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/storage.md +121 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/tabs.md +433 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/toolbar-and-headers.md +284 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/visual-effects.md +197 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/webgpu-three.md +605 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/references/zoom-transitions.md +158 -0
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/SKILL.md +299 -0
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/references/examples.md +749 -0
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/references/patterns.md +318 -0
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/scripts/create_component.py +200 -0
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/scripts/validate_component.py +209 -0
- package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/SKILL.md +268 -0
- package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/references/common-issues.md +619 -0
- package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
- package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/references/platform-api.md +276 -0
- package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +416 -0
- package/plugins/lisa-expo/.codex-plugin/skills/directory-structure/SKILL.md +214 -0
- package/plugins/lisa-expo/.codex-plugin/skills/directory-structure/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/directory-structure/scripts/validate_structure.py +454 -0
- package/plugins/lisa-expo/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-expo/.codex-plugin/skills/e2e-coverage-gaps/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/SKILL.md +228 -0
- package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
- package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/references/update-insights-schema.md +69 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-api-routes/SKILL.md +369 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-api-routes/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/SKILL.md +54 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/brownfield-integrated.md +526 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/brownfield-isolated.md +402 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/comparison.md +63 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/references/troubleshooting.md +88 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/SKILL.md +92 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/scripts/fetch.js +113 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/scripts/package.json +11 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/scripts/validate.js +85 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/SKILL.md +193 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/app-store-metadata.md +479 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/ios-app-store.md +355 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/play-store.md +264 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/testflight.md +58 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/references/workflows.md +200 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-dev-client/SKILL.md +164 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-dev-client/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-env-config/SKILL.md +309 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-env-config/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-env-config/references/validation-patterns.md +417 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/SKILL.md +141 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/config-plugin.md +90 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/create-expo-module.md +206 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/lifecycle.md +127 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/module-config.md +48 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/native-module.md +286 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/references/native-view.md +171 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/SKILL.md +431 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/references/official-docs.md +290 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/scripts/generate-route.py +171 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-tailwind-setup/SKILL.md +480 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-tailwind-setup/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-jetpack-compose/SKILL.md +40 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-jetpack-compose/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-swift-ui/SKILL.md +39 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-swift-ui/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/SKILL.md +419 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/references/color-tokens.md +343 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/references/component-mapping.md +307 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/scripts/validate_styling.py +424 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-add-journey/SKILL.md +126 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-create/SKILL.md +161 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-create/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-evidence/SKILL.md +78 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-evidence/scripts/post-evidence.sh +180 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/SKILL.md +190 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/scripts/generate-templates.py +281 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/scripts/parse-plan.py +368 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-verify/SKILL.md +27 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-verify/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +13 -0
- package/plugins/lisa-expo/.codex-plugin/skills/lisa-e2e-coverage-gaps/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/local-state/SKILL.md +362 -0
- package/plugins/lisa-expo/.codex-plugin/skills/local-state/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/local-state/references/async-storage.md +505 -0
- package/plugins/lisa-expo/.codex-plugin/skills/local-state/references/persistence-patterns.md +711 -0
- package/plugins/lisa-expo/.codex-plugin/skills/local-state/references/reactive-variables.md +446 -0
- package/plugins/lisa-expo/.codex-plugin/skills/native-data-fetching/SKILL.md +507 -0
- package/plugins/lisa-expo/.codex-plugin/skills/native-data-fetching/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/native-data-fetching/references/expo-router-loaders.md +344 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-browser-uat/SKILL.md +124 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-browser-uat/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-check-logs/SKILL.md +217 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-check-logs/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-db-ops/SKILL.md +123 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-db-ops/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-deploy/SKILL.md +123 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-deploy/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-monitor-errors/SKILL.md +99 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-monitor-errors/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-performance/SKILL.md +165 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-performance/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-run-local/SKILL.md +169 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-run-local/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-verify-health/SKILL.md +101 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-verify-health/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/owasp-zap/SKILL.md +61 -0
- package/plugins/lisa-expo/.codex-plugin/skills/owasp-zap/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/play-store-access/SKILL.md +226 -0
- package/plugins/lisa-expo/.codex-plugin/skills/play-store-access/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/playwright-ci-debugging/SKILL.md +140 -0
- package/plugins/lisa-expo/.codex-plugin/skills/playwright-ci-debugging/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/playwright-selectors/SKILL.md +455 -0
- package/plugins/lisa-expo/.codex-plugin/skills/playwright-selectors/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/SKILL.md +251 -0
- package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/references/extraction-strategies.md +456 -0
- package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/references/refactoring-patterns.md +557 -0
- package/plugins/lisa-expo/.codex-plugin/skills/testing-library/SKILL.md +314 -0
- package/plugins/lisa-expo/.codex-plugin/skills/testing-library/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/async-patterns.md +420 -0
- package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/expo-router-testing.md +556 -0
- package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/mocking-patterns.md +590 -0
- package/plugins/lisa-expo/.codex-plugin/skills/testing-library/references/query-priority.md +291 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/SKILL.md +134 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/expo-av-to-video.md +160 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/native-tabs.md +124 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/new-architecture.md +79 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/react-19.md +79 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/react-compiler.md +59 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
- package/plugins/lisa-expo/.codex-plugin/skills/use-dom/SKILL.md +417 -0
- package/plugins/lisa-expo/.codex-plugin/skills/use-dom/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/.mcp.json +0 -4
- package/plugins/lisa-expo/THIRD-PARTY-NOTICES.md +14 -6
- package/plugins/lisa-expo/skills/building-native-ui/SKILL.md +1 -1
- package/plugins/lisa-expo-agy/THIRD-PARTY-NOTICES.md +14 -6
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-agy/skills/building-native-ui/SKILL.md +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -7
- package/plugins/lisa-expo-copilot/.mcp.json +0 -4
- package/plugins/lisa-expo-copilot/THIRD-PARTY-NOTICES.md +14 -6
- package/plugins/lisa-expo-copilot/skills/building-native-ui/SKILL.md +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/THIRD-PARTY-NOTICES.md +14 -6
- package/plugins/lisa-expo-cursor/mcp.json +0 -4
- package/plugins/lisa-expo-cursor/skills/building-native-ui/SKILL.md +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/e2e-coverage-gaps/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-auth/SKILL.md +368 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-auth/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-build-and-deploy/SKILL.md +198 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-build-and-deploy/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-caching/SKILL.md +265 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-caching/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-component-model/SKILL.md +87 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-component-model/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-config-yaml/SKILL.md +283 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-config-yaml/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-operations/SKILL.md +239 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-operations/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-realtime/SKILL.md +187 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-realtime/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-resources/SKILL.md +142 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-resources/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-rest-queries/SKILL.md +403 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-rest-queries/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-schema-graphql/SKILL.md +123 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-schema-graphql/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-testing/SKILL.md +254 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-testing/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +13 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/lisa-e2e-coverage-gaps/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/hooks/block-generated-artifact-edits.sh +42 -24
- package/plugins/lisa-harper-fabric/hooks/enforce-config-extensions.mjs +12 -14
- package/plugins/lisa-harper-fabric/hooks/enforce-config-extensions.sh +30 -3
- package/plugins/lisa-harper-fabric/hooks/inject-rules.sh +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-copilot/hooks/block-generated-artifact-edits.sh +42 -24
- package/plugins/lisa-harper-fabric-copilot/hooks/enforce-config-extensions.mjs +12 -14
- package/plugins/lisa-harper-fabric-copilot/hooks/enforce-config-extensions.sh +30 -3
- package/plugins/lisa-harper-fabric-copilot/hooks/inject-rules.sh +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/hooks/block-generated-artifact-edits.sh +42 -24
- package/plugins/lisa-harper-fabric-cursor/hooks/enforce-config-extensions.mjs +12 -14
- package/plugins/lisa-harper-fabric-cursor/hooks/enforce-config-extensions.sh +30 -3
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/SKILL.md +176 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/agents/openai.yaml +4 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/advanced-features.md +527 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/project-patterns.md +531 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/quick-start.md +257 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/references/types-scalars.md +513 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-rules/SKILL.md +565 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-rules/agents/openai.yaml +4 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/SKILL.md +275 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/agents/openai.yaml +4 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/references/entity-patterns.md +450 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/references/observability-patterns.md +536 -0
- package/plugins/lisa-nestjs/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-repo-topic/SKILL.md +13 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-repo-topic/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-slack/SKILL.md +13 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-slack/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-telegram/SKILL.md +13 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-telegram/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-repo-topic/SKILL.md +163 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-repo-topic/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +185 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/SKILL.md +175 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/references/platform-routing.md +123 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/references/prompts.md +78 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-setup/SKILL.md +141 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-setup/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-setup-openclaw/SKILL.md +13 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-setup-openclaw/agents/openai.yaml +4 -0
- 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-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-accessibility/SKILL.md +135 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-accessibility/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-pipeline/SKILL.md +222 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-pipeline/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-sourcing/SKILL.md +151 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-sourcing/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-build-deploy/SKILL.md +153 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-build-deploy/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-i18n/SKILL.md +122 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-i18n/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-project-structure/SKILL.md +89 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-project-structure/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-services/SKILL.md +208 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-services/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-testing/SKILL.md +192 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-testing/agents/openai.yaml +4 -0
- package/plugins/lisa-phaser/hooks/inject-rules.sh +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-copilot/hooks/inject-rules.sh +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-rails/.codex-plugin/skills/action-controller-best-practices/SKILL.md +374 -0
- package/plugins/lisa-rails/.codex-plugin/skills/action-controller-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/action-view-best-practices/SKILL.md +335 -0
- package/plugins/lisa-rails/.codex-plugin/skills/action-view-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/active-record-model-best-practices/SKILL.md +166 -0
- package/plugins/lisa-rails/.codex-plugin/skills/active-record-model-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +105 -0
- package/plugins/lisa-rails/.codex-plugin/skills/e2e-coverage-gaps/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/fix-linter-error/SKILL.md +45 -0
- package/plugins/lisa-rails/.codex-plugin/skills/fix-linter-error/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-code-complexity/SKILL.md +48 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-code-complexity/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines/SKILL.md +46 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines-per-function/SKILL.md +46 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines-per-function/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-test-coverage/SKILL.md +45 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-test-coverage/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-add-journey/SKILL.md +65 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-create/SKILL.md +100 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-create/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-evidence/SKILL.md +70 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-evidence/scripts/post-evidence.sh +180 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-journey/SKILL.md +64 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-journey/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-verify/SKILL.md +26 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-verify/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +13 -0
- package/plugins/lisa-rails/.codex-plugin/skills/lisa-e2e-coverage-gaps/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-check-logs/SKILL.md +191 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-check-logs/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-deploy/SKILL.md +153 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-deploy/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-run-local/SKILL.md +169 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-run-local/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-jobs/SKILL.md +157 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-jobs/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-telemetry/SKILL.md +197 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-telemetry/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/hooks/inject-rules.sh +2 -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-copilot/hooks/inject-rules.sh +2 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- 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-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +2 -2
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-ingest/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-ingest/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-role/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-role/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-ingest/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-ingest/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-lint/SKILL.md +11 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-lint/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-migrate/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-migrate/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-onboard-me/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-onboard-me/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-query/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-query/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup-wiki/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup-wiki/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-status/SKILL.md +12 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-status/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-ingest/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-role/SKILL.md +30 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-role/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-confluence/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-docs/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-git/SKILL.md +25 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-git/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-jira/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-memory/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-notion/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-roles/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-slack/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-web/SKILL.md +23 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-web/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-doctor/SKILL.md +47 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-doctor/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-ingest/SKILL.md +99 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-ingest/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-lint/SKILL.md +32 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-lint/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-migrate/SKILL.md +43 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-migrate/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-onboard-me/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-query/SKILL.md +36 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-query/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup/SKILL.md +75 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup-automations/SKILL.md +83 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup-automations/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-status/SKILL.md +47 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-status/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-tear-down-automations/SKILL.md +34 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-tear-down-automations/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-usage/SKILL.md +50 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-usage/agents/openai.yaml +4 -0
- 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/src/base/hooks/inject-rules.sh +3 -2
- package/plugins/src/base/hooks/install-pkgs.sh +4 -45
- package/plugins/src/base/hooks/setup-jira-cli.sh +4 -12
- package/plugins/src/base/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/src/expo/.mcp.json +0 -4
- package/plugins/src/expo/THIRD-PARTY-NOTICES.md +14 -6
- package/plugins/src/expo/skills/building-native-ui/SKILL.md +1 -1
- package/plugins/src/harper-fabric/hooks/block-generated-artifact-edits.sh +42 -24
- package/plugins/src/harper-fabric/hooks/enforce-config-extensions.mjs +12 -14
- package/plugins/src/harper-fabric/hooks/enforce-config-extensions.sh +30 -3
- package/plugins/src/harper-fabric/hooks/inject-rules.sh +1 -1
- package/plugins/src/nestjs/skills/typeorm-patterns/references/configuration-patterns.md +5 -5
- package/plugins/src/phaser/hooks/inject-rules.sh +1 -1
- package/plugins/src/rails/hooks/inject-rules.sh +2 -1
- package/scripts/clean-dist.mjs +7 -0
- package/scripts/generate-codex-plugin-artifacts.mjs +311 -20
- package/scripts/install-claude-plugins.sh +53 -40
- package/typescript/package-lisa/package.lisa.json +1 -1
- package/.agents/plugins/marketplace.json +0 -128
- package/dist/codex/lisa-plugin-detection.d.ts +0 -68
- package/dist/codex/lisa-plugin-detection.d.ts.map +0 -1
- package/dist/codex/lisa-plugin-detection.js +0 -139
- package/dist/codex/lisa-plugin-detection.js.map +0 -1
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: e2e-coverage-gaps
|
|
3
|
+
description: "Playwright/e2e coverage-gap…"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# E2E Coverage Gaps
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Find where the automated end-to-end (Playwright) suite is **blind**: routes with no test at all, and
|
|
11
|
+
flows that only assert the **happy path** while ignoring error, permission, empty, loading, and edge
|
|
12
|
+
cases. Inventory the app's routes and the existing tests, explore the running app to confirm each gap
|
|
13
|
+
is real and reachable, then file each gap as a **build-ready missing-test work item** so it enters the
|
|
14
|
+
Lisa lifecycle.
|
|
15
|
+
|
|
16
|
+
This skill is purely about **automated-coverage gaps**. It does not judge whether the UI is confusing
|
|
17
|
+
or pretty — for human usability findings, use the `lisa-exploratory-qa` skill.
|
|
18
|
+
|
|
19
|
+
## Parameters
|
|
20
|
+
|
|
21
|
+
- **`target-url | env`** (first positional) — the app to inventory and explore.
|
|
22
|
+
- **`ready=true|false`** — build-ready state for the missing-test tickets (**default `true`**). Adding
|
|
23
|
+
missing coverage is safe to queue, so these default to build-ready; pass `ready=false` to leave them
|
|
24
|
+
in the backlog for human triage.
|
|
25
|
+
|
|
26
|
+
## Core Workflow
|
|
27
|
+
|
|
28
|
+
### 1. Establish Scope
|
|
29
|
+
|
|
30
|
+
- Identify the target environment, account type, and browser requirement, and read the `ready` flag
|
|
31
|
+
(default `true`).
|
|
32
|
+
- **Confirm the tracker is configured.** Gaps are filed as tickets, so read `tracker` from
|
|
33
|
+
`.lisa.config.json` (local overrides global). If it is unset, stop and report that the tracker must
|
|
34
|
+
be configured (via `/lisa:setup:jira` / `:github` / `:linear`) before gaps can be filed.
|
|
35
|
+
|
|
36
|
+
### 2. Inventory App Routes
|
|
37
|
+
|
|
38
|
+
- Enumerate every route/screen from the project's routing source — filesystem routes, the router
|
|
39
|
+
config, navigation definitions, or a generated sitemap.
|
|
40
|
+
- For each route capture: its path + params, the auth/role it requires, and the primary user actions
|
|
41
|
+
reachable from it (forms, mutations, filters, flows).
|
|
42
|
+
|
|
43
|
+
### 3. Inventory Existing Playwright Coverage
|
|
44
|
+
|
|
45
|
+
- Inspect the Playwright config, auth/setup projects, fixtures, constants, selectors, spec directories,
|
|
46
|
+
skipped/TODO/flaky tests, retries, and viewport/device projects.
|
|
47
|
+
- For each spec, record which route(s)/flow(s) it exercises and whether it asserts **behavior** or just
|
|
48
|
+
**presence**.
|
|
49
|
+
- Use existing test helpers/selectors when exploring — they reveal intended flows and stable hooks.
|
|
50
|
+
|
|
51
|
+
### 4. Compute the Gap Matrix
|
|
52
|
+
|
|
53
|
+
Map routes/flows against existing coverage and classify each gap:
|
|
54
|
+
|
|
55
|
+
- **Uncovered route/flow:** no test touches it at all.
|
|
56
|
+
- **Happy-path-only:** the success case is tested but the non-happy paths are not — missing
|
|
57
|
+
error/validation, permission/denied, empty/zero-state, loading/slow, and boundary/edge scenarios.
|
|
58
|
+
- **Assertion-thin:** a test exists but asserts presence rather than behavior/outcome.
|
|
59
|
+
- **Skipped/TODO/flaky:** coverage exists but is disabled or unreliable.
|
|
60
|
+
- **Breakpoint gap:** a flow is only tested at a single viewport when behavior changes across
|
|
61
|
+
breakpoints.
|
|
62
|
+
|
|
63
|
+
### 5. Explore to Confirm
|
|
64
|
+
|
|
65
|
+
- Navigate each candidate gap in the running app to confirm it is real, reachable, and worth a test.
|
|
66
|
+
Discard gaps that aren't actually reachable or are intentionally out of scope.
|
|
67
|
+
|
|
68
|
+
### 6. File One Ticket Per Gap
|
|
69
|
+
|
|
70
|
+
Each confirmed gap becomes a leaf **missing-test** work item created via `lisa-tracker-write` (the
|
|
71
|
+
vendor-neutral writer — it dispatches to the configured tracker and runs the validation gate; never
|
|
72
|
+
call a vendor `*-write-*` skill directly), `issue_type: Task`, **build-ready per the `ready` flag
|
|
73
|
+
(default `true`)**. Pass `build_ready` explicitly on every create. Each ticket MUST specify:
|
|
74
|
+
|
|
75
|
+
- The **route/flow** and the exact **user behavior the test must assert**.
|
|
76
|
+
- **Which scenario is missing** (uncovered vs which non-happy path: error / validation / permission /
|
|
77
|
+
empty / loading / edge / breakpoint).
|
|
78
|
+
- The **stable selector / fixture / flow** to use — concrete and automatable.
|
|
79
|
+
- **Three-audience description** + **Gherkin acceptance criteria** describing the test to add.
|
|
80
|
+
|
|
81
|
+
### Idempotency — don't spam duplicates
|
|
82
|
+
|
|
83
|
+
Before creating a ticket, search the tracker for an **open** ticket carrying a stable marker
|
|
84
|
+
`[lisa-e2e-coverage-gaps] <gap-key>` in its body (the `<gap-key>` is a stable slug of route + missing
|
|
85
|
+
scenario, e.g. `checkout/payment-declined` or `dashboard/empty-state@mobile`). If one exists, reference
|
|
86
|
+
it instead of duplicating. **Match by the marker, never by title.** A *closed* prior ticket does not
|
|
87
|
+
suppress a genuine new gap.
|
|
88
|
+
|
|
89
|
+
## Output
|
|
90
|
+
|
|
91
|
+
No report file. Emit a concise in-session summary:
|
|
92
|
+
|
|
93
|
+
- **Route inventory:** count of routes/screens discovered.
|
|
94
|
+
- **Existing coverage:** strengths and thin areas (skipped/flaky, assertion-thin, single-viewport).
|
|
95
|
+
- **Gap matrix:** uncovered vs happy-path-only vs breakpoint gaps.
|
|
96
|
+
- **Tickets filed:** each gap with its created/referenced ticket ref and build-ready state.
|
|
97
|
+
|
|
98
|
+
## Quality Bar
|
|
99
|
+
|
|
100
|
+
- Distinguish **no coverage** from **happy-path-only** — both are gaps, but the ticket must say which.
|
|
101
|
+
- Every ticket must stand alone for an implementer who was not in the session and must be concretely
|
|
102
|
+
automatable (named route, behavior, and stable hook).
|
|
103
|
+
- Do not refile gaps already covered or already ticketed (marker check).
|
|
104
|
+
- This skill is about automated coverage only — route human usability issues to `lisa-exploratory-qa`.
|
|
105
|
+
- Preserve unrelated repo changes.
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: harper-auth
|
|
3
|
+
description: "adding or debugging Harper…"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Harper Auth
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Harper uses role-based access control. Every user has one role, and that role
|
|
11
|
+
decides which databases, tables, attributes, and operations the user can access.
|
|
12
|
+
Use declarative `roles.yaml` for application-owned roles and the Operations API
|
|
13
|
+
for environment-owned users, password changes, role audits, and token issuance.
|
|
14
|
+
|
|
15
|
+
Cross-check extension wiring in [[harper-config-yaml]] before editing roles:
|
|
16
|
+
custom `config.yaml` files replace Harper's default config, so `roles` must be
|
|
17
|
+
re-declared alongside `rest`, `graphqlSchema`, and `jsResource` when the app needs
|
|
18
|
+
all of them. Cross-check endpoint/resource behavior in [[harper-resources]] and
|
|
19
|
+
query filters in [[harper-rest-queries]].
|
|
20
|
+
|
|
21
|
+
## Role model
|
|
22
|
+
|
|
23
|
+
Harper has built-in roles and custom roles:
|
|
24
|
+
|
|
25
|
+
| Role type | Use it for | Notes |
|
|
26
|
+
| --- | --- | --- |
|
|
27
|
+
| `super_user` | Operators, deploy automation, emergency admin work | Full access to operations and data. Do not use for app clients. |
|
|
28
|
+
| `structure_user` | Schema/database administration without full data access | Scope narrowly when used; normal app users usually should not need it. |
|
|
29
|
+
| Custom role | Application clients, readers, editors, service accounts | Permissions are explicit. Missing database/table entries mean no access. |
|
|
30
|
+
|
|
31
|
+
Prefer least-privilege custom roles for application traffic. A public read client,
|
|
32
|
+
an editor/admin client, and a deploy/operator client should normally be separate
|
|
33
|
+
users with separate roles.
|
|
34
|
+
|
|
35
|
+
## Enable role files
|
|
36
|
+
|
|
37
|
+
Keep roles in the component root, typically `harper-app/roles.yaml`, and enable
|
|
38
|
+
the built-in `roles` extension in `harper-app/config.yaml`:
|
|
39
|
+
|
|
40
|
+
```yaml
|
|
41
|
+
rest: true
|
|
42
|
+
graphqlSchema:
|
|
43
|
+
files: 'schema.graphql'
|
|
44
|
+
roles:
|
|
45
|
+
files: 'roles.yaml'
|
|
46
|
+
jsResource:
|
|
47
|
+
files: 'resources.js'
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Because `config.yaml` is not merged with Harper's defaults, keep every extension
|
|
51
|
+
the component needs in this file. Removing `roles` silently stops role-file
|
|
52
|
+
reconciliation; removing `rest` or `jsResource` can make the secured endpoint
|
|
53
|
+
disappear while the role still exists.
|
|
54
|
+
|
|
55
|
+
## Declare roles in `roles.yaml`
|
|
56
|
+
|
|
57
|
+
Use `roles.yaml` for roles that should be versioned with the app. On startup,
|
|
58
|
+
Harper creates missing declared roles and updates existing declared roles to match
|
|
59
|
+
the file.
|
|
60
|
+
|
|
61
|
+
Example: public readers can read orders, but only admins can write:
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
public_reader:
|
|
65
|
+
super_user: false
|
|
66
|
+
app:
|
|
67
|
+
Orders:
|
|
68
|
+
read: true
|
|
69
|
+
insert: false
|
|
70
|
+
update: false
|
|
71
|
+
delete: false
|
|
72
|
+
attributes:
|
|
73
|
+
id:
|
|
74
|
+
read: true
|
|
75
|
+
status:
|
|
76
|
+
read: true
|
|
77
|
+
publicTotal:
|
|
78
|
+
read: true
|
|
79
|
+
|
|
80
|
+
order_admin:
|
|
81
|
+
super_user: false
|
|
82
|
+
app:
|
|
83
|
+
Orders:
|
|
84
|
+
read: true
|
|
85
|
+
insert: true
|
|
86
|
+
update: true
|
|
87
|
+
delete: false
|
|
88
|
+
attributes:
|
|
89
|
+
internalNotes:
|
|
90
|
+
read: true
|
|
91
|
+
insert: true
|
|
92
|
+
update: true
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Rules:
|
|
96
|
+
|
|
97
|
+
- Database keys such as `app` must match the database names in `schema.graphql`.
|
|
98
|
+
- Table keys such as `Orders` must match the table type names, not necessarily the
|
|
99
|
+
exported REST path.
|
|
100
|
+
- Table-level `read`, `insert`, `update`, and `delete` are the outer gate.
|
|
101
|
+
- Attribute permissions narrow field-level access. They cannot grant a capability
|
|
102
|
+
that the table-level permission denies.
|
|
103
|
+
- If a database or table is omitted from the role, that role has no access to it.
|
|
104
|
+
|
|
105
|
+
Use role files for stable app permissions. Use Operations API calls when changing
|
|
106
|
+
users, rotating credentials, or inspecting what the deployed system actually has.
|
|
107
|
+
|
|
108
|
+
## Manage users and roles with Operations API
|
|
109
|
+
|
|
110
|
+
User and role mutations require a `super_user` caller. Send JSON `POST` requests
|
|
111
|
+
to the Operations API, usually port `9925` locally:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
curl -sS http://localhost:9925/ \
|
|
115
|
+
-u "$HARPER_USERNAME:$HARPER_PASSWORD" \
|
|
116
|
+
-H 'Content-Type: application/json' \
|
|
117
|
+
--data '{"operation":"list_roles"}'
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Create a user for a declared role:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
curl -sS http://localhost:9925/ \
|
|
124
|
+
-u "$HARPER_USERNAME:$HARPER_PASSWORD" \
|
|
125
|
+
-H 'Content-Type: application/json' \
|
|
126
|
+
--data '{
|
|
127
|
+
"operation": "add_user",
|
|
128
|
+
"username": "public-client",
|
|
129
|
+
"password": "replace-with-generated-secret",
|
|
130
|
+
"role": "public_reader",
|
|
131
|
+
"active": true
|
|
132
|
+
}'
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Change a user's role or password:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
curl -sS http://localhost:9925/ \
|
|
139
|
+
-u "$HARPER_USERNAME:$HARPER_PASSWORD" \
|
|
140
|
+
-H 'Content-Type: application/json' \
|
|
141
|
+
--data '{
|
|
142
|
+
"operation": "alter_user",
|
|
143
|
+
"username": "public-client",
|
|
144
|
+
"role": "order_admin",
|
|
145
|
+
"active": true
|
|
146
|
+
}'
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Remove a user before removing a role:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
curl -sS http://localhost:9925/ \
|
|
153
|
+
-u "$HARPER_USERNAME:$HARPER_PASSWORD" \
|
|
154
|
+
-H 'Content-Type: application/json' \
|
|
155
|
+
--data '{"operation":"drop_user","username":"public-client"}'
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Avoid committing real passwords, tokens, or generated secrets. For local examples,
|
|
159
|
+
use environment variables or throwaway development credentials.
|
|
160
|
+
|
|
161
|
+
## Basic auth and JWT operation tokens
|
|
162
|
+
|
|
163
|
+
Harper accepts Basic auth for Operations API and secured REST calls:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
curl -i http://localhost:9926/app/orders/ \
|
|
167
|
+
-u "$PUBLIC_USERNAME:$PUBLIC_PASSWORD"
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
For clients that should not send Basic auth on every request, create JWT tokens
|
|
171
|
+
with `create_authentication_tokens`. This operation is intentionally unauthenticated
|
|
172
|
+
but requires the target username and password:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
tokens="$(
|
|
176
|
+
curl -sS http://localhost:9925/ \
|
|
177
|
+
-H 'Content-Type: application/json' \
|
|
178
|
+
--data '{
|
|
179
|
+
"operation": "create_authentication_tokens",
|
|
180
|
+
"username": "'"$PUBLIC_USERNAME"'",
|
|
181
|
+
"password": "'"$PUBLIC_PASSWORD"'"
|
|
182
|
+
}'
|
|
183
|
+
)"
|
|
184
|
+
|
|
185
|
+
operation_token="$(jq -r '.operation_token' <<<"$tokens")"
|
|
186
|
+
refresh_token="$(jq -r '.refresh_token' <<<"$tokens")"
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Use the operation token as a bearer token:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
curl -i http://localhost:9926/app/orders/ \
|
|
193
|
+
-H "Authorization: Bearer $operation_token"
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Refresh an expired operation token with the refresh token:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
curl -sS http://localhost:9925/ \
|
|
200
|
+
-H 'Content-Type: application/json' \
|
|
201
|
+
-H "Authorization: Bearer $refresh_token" \
|
|
202
|
+
--data '{"operation": "refresh_operation_token"}'
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Treat operation tokens and refresh tokens as credentials. Never log them, commit
|
|
206
|
+
them, paste them into tickets, or store them in browser-accessible app config.
|
|
207
|
+
|
|
208
|
+
## Exported resources and `context.user`
|
|
209
|
+
|
|
210
|
+
Exported tables and custom Resources inherit the caller's role permissions.
|
|
211
|
+
If a role cannot read or write the underlying table, Harper should deny the REST
|
|
212
|
+
or GraphQL request before app logic treats it as successful.
|
|
213
|
+
|
|
214
|
+
Use custom Resource checks when the rule depends on request identity, tenant
|
|
215
|
+
ownership, or business state that is not expressible in `roles.yaml`:
|
|
216
|
+
|
|
217
|
+
```javascript
|
|
218
|
+
export class Orders extends tables.Orders {
|
|
219
|
+
static async post(target, data, context) {
|
|
220
|
+
const user = context.user;
|
|
221
|
+
if (!user) {
|
|
222
|
+
const error = new Error('Authentication required');
|
|
223
|
+
error.statusCode = 401;
|
|
224
|
+
throw error;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
if (user.role !== 'order_admin') {
|
|
228
|
+
const error = new Error('Forbidden');
|
|
229
|
+
error.statusCode = 403;
|
|
230
|
+
throw error;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return super.post(target, await data, context);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Pass `context` through when delegating to tables or other resources:
|
|
239
|
+
|
|
240
|
+
```javascript
|
|
241
|
+
await tables.OrderEvents.post(
|
|
242
|
+
target,
|
|
243
|
+
{
|
|
244
|
+
orderId,
|
|
245
|
+
type: 'created',
|
|
246
|
+
createdBy: context.user?.username,
|
|
247
|
+
},
|
|
248
|
+
context,
|
|
249
|
+
);
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Guidance:
|
|
253
|
+
|
|
254
|
+
- Use `roles.yaml` for coarse table/attribute access and Resource logic for
|
|
255
|
+
request-specific policy.
|
|
256
|
+
- Do not trust client-provided role, user id, tenant id, or permission claims.
|
|
257
|
+
Read identity from `context.user`.
|
|
258
|
+
- Do not put `context` in module-level state; it belongs to one request.
|
|
259
|
+
- Do not use `requestWithoutAuthentication` for normal application routes. If a
|
|
260
|
+
webhook must bypass Harper auth, verify its signature first and keep its table
|
|
261
|
+
writes narrowly scoped.
|
|
262
|
+
|
|
263
|
+
## Session cookies are `SameSite=None` — guard state-changing POSTs
|
|
264
|
+
|
|
265
|
+
Harper hardcodes the session cookie's `SameSite=None` attribute on HTTPS. The
|
|
266
|
+
browser therefore attaches the session cookie to **cross-site** requests, so a
|
|
267
|
+
same-origin app cannot rely on `SameSite` to block CSRF on cookie-authenticated,
|
|
268
|
+
state-changing routes (`POST`/`PUT`/`PATCH`/`DELETE`).
|
|
269
|
+
|
|
270
|
+
Add an app-side origin check in the resource before mutating. Reject requests
|
|
271
|
+
whose `Origin` (or `Referer` fallback) is not an allowed origin:
|
|
272
|
+
|
|
273
|
+
```javascript
|
|
274
|
+
const ALLOWED_ORIGINS = new Set([
|
|
275
|
+
'https://app.example.com',
|
|
276
|
+
]);
|
|
277
|
+
|
|
278
|
+
function requireSameOrigin(context) {
|
|
279
|
+
const headers = context.requestContext?.headers ?? context.headers;
|
|
280
|
+
const origin =
|
|
281
|
+
headers?.get?.('origin') ??
|
|
282
|
+
headers?.get?.('referer');
|
|
283
|
+
const ok =
|
|
284
|
+
typeof origin === 'string' &&
|
|
285
|
+
[...ALLOWED_ORIGINS].some((allowed) => origin.startsWith(allowed));
|
|
286
|
+
if (!ok) {
|
|
287
|
+
const error = new Error('Cross-origin request rejected');
|
|
288
|
+
error.statusCode = 403; // Harper reads statusCode, not status
|
|
289
|
+
throw error;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
export class Watchlists extends tables.Watchlists {
|
|
294
|
+
static async post(target, data, context) {
|
|
295
|
+
requireSameOrigin(context);
|
|
296
|
+
// ...authorization and write
|
|
297
|
+
return super.post(target, await data, context);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
Guidance:
|
|
303
|
+
|
|
304
|
+
- Call the check on every cookie-authenticated state-changing route. Read-only
|
|
305
|
+
`GET` handlers and token/`Authorization: Bearer` APIs (not cookie-driven) do
|
|
306
|
+
not need it.
|
|
307
|
+
- Prefer an allowlist of exact origins over substring matching that a lookalike
|
|
308
|
+
host could satisfy.
|
|
309
|
+
- This is defense the app owns; Harper will not add it for you.
|
|
310
|
+
|
|
311
|
+
## Verification matrix
|
|
312
|
+
|
|
313
|
+
Run the local app, create the test users, and check unauthenticated, reader, and
|
|
314
|
+
admin behavior against the same endpoint:
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
harper dev harper-app
|
|
318
|
+
|
|
319
|
+
# Unauthenticated request should be denied.
|
|
320
|
+
curl -i http://localhost:9926/app/orders/
|
|
321
|
+
|
|
322
|
+
# Reader can read.
|
|
323
|
+
curl -i http://localhost:9926/app/orders/ \
|
|
324
|
+
-u "$PUBLIC_USERNAME:$PUBLIC_PASSWORD"
|
|
325
|
+
|
|
326
|
+
# Reader cannot write.
|
|
327
|
+
curl -i -X POST http://localhost:9926/app/orders/ \
|
|
328
|
+
-u "$PUBLIC_USERNAME:$PUBLIC_PASSWORD" \
|
|
329
|
+
-H 'Content-Type: application/json' \
|
|
330
|
+
--data '{"id":"ord_1","status":"new"}'
|
|
331
|
+
|
|
332
|
+
# Admin can write.
|
|
333
|
+
curl -i -X POST http://localhost:9926/app/orders/ \
|
|
334
|
+
-u "$ADMIN_USERNAME:$ADMIN_PASSWORD" \
|
|
335
|
+
-H 'Content-Type: application/json' \
|
|
336
|
+
--data '{"id":"ord_1","status":"new"}'
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
Expected results:
|
|
340
|
+
|
|
341
|
+
| Caller | Read | Write |
|
|
342
|
+
| --- | --- | --- |
|
|
343
|
+
| No credentials | `401` or auth denial | `401` or auth denial |
|
|
344
|
+
| `public_reader` | `200` | `403` or permission denial |
|
|
345
|
+
| `order_admin` | `200` | `200` or expected validation response |
|
|
346
|
+
|
|
347
|
+
Also verify metadata with a restricted user when debugging permissions:
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
curl -sS http://localhost:9925/ \
|
|
351
|
+
-u "$PUBLIC_USERNAME:$PUBLIC_PASSWORD" \
|
|
352
|
+
-H 'Content-Type: application/json' \
|
|
353
|
+
--data '{"operation":"user_info"}'
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
If the status code is unexpected, check in this order:
|
|
357
|
+
|
|
358
|
+
1. `config.yaml` still enables `roles`, `rest`, `graphqlSchema`, and `jsResource`.
|
|
359
|
+
2. `roles.yaml` database/table names match the schema.
|
|
360
|
+
3. The user is active and assigned to the intended role.
|
|
361
|
+
4. The route being tested is the exported table/resource path you meant to secure.
|
|
362
|
+
5. Resource code passes `context` through to `super` and nested table calls.
|
|
363
|
+
|
|
364
|
+
## Sources
|
|
365
|
+
|
|
366
|
+
- [Users & Roles Configuration](https://docs.harperdb.io/reference/v5/users-and-roles/configuration)
|
|
367
|
+
- [Operations Reference](https://docs.harperdb.io/reference/v5/operations-api/operations)
|
|
368
|
+
- [Components Overview](https://docs.harperdb.io/reference/v5/components/overview)
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: harper-build-and-deploy
|
|
3
|
+
description: "building, running locally, or…"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Harper Build and Deploy
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
The Harper lifecycle is: **develop locally → build TypeScript into the deployable
|
|
11
|
+
component → run/iterate → deploy to Fabric**. This skill covers the CLI, the
|
|
12
|
+
project's build step, and the deploy surface so a change is provably finished, not
|
|
13
|
+
just compiling.
|
|
14
|
+
|
|
15
|
+
## Local dev and run (the CLI)
|
|
16
|
+
|
|
17
|
+
The CLI binary is `harper` (v5; older installs use `harperdb`). Key commands:
|
|
18
|
+
|
|
19
|
+
| Command | What it does |
|
|
20
|
+
| --- | --- |
|
|
21
|
+
| `harper dev <path/to/app>` | Dev mode: **watches files, single-threaded, auto-restarts worker threads** on change, with console logging. The fast iteration loop. Does **not** restart the main thread. |
|
|
22
|
+
| `harper run <path/to/app>` | Run an app from any directory. Use when you need the main thread to (re)start; manage start/stop yourself. |
|
|
23
|
+
| `harper start` / `stop` / `restart` | Background (daemon) lifecycle. |
|
|
24
|
+
| `harper status` | Harper and clustering status. |
|
|
25
|
+
| `harper get_components` | List installed components. |
|
|
26
|
+
|
|
27
|
+
In this project, dev typically runs against the component dir, e.g.
|
|
28
|
+
`harper dev harper-app` (use the project's documented run command if it wraps this).
|
|
29
|
+
|
|
30
|
+
## The build step (TypeScript -> generated artifacts)
|
|
31
|
+
|
|
32
|
+
Harper loads JavaScript (`resources.js`) and serves static files (`web/**`). In this
|
|
33
|
+
project those are **generated**, not authored.
|
|
34
|
+
|
|
35
|
+
What the build actually does:
|
|
36
|
+
|
|
37
|
+
1. Compiles the TypeScript source under `src/` into deployable JavaScript.
|
|
38
|
+
2. Emits `harper-app/resources.js`, the aggregate resource module loaded by the
|
|
39
|
+
`jsResource` extension.
|
|
40
|
+
3. Emits per-resource modules such as `harper-app/resource-*.js` when the project
|
|
41
|
+
build splits resources for Harper's runtime loader.
|
|
42
|
+
4. Copies browser/static output into `harper-app/web/**` for the `static`
|
|
43
|
+
extension to serve.
|
|
44
|
+
5. Mirrors shared library output into `harper-app/lib/**` and rewrites imports
|
|
45
|
+
such as `../lib/foo.js` to `./lib/foo.js`. Fabric packages the component root
|
|
46
|
+
as a flat deploy unit, and Node resolves real paths at runtime, so imports must
|
|
47
|
+
point at files that exist inside the packaged `harper-app/` root.
|
|
48
|
+
6. Adds cache-busting `?v=` query parameters to browser-module imports when the
|
|
49
|
+
project build owns web asset versioning.
|
|
50
|
+
|
|
51
|
+
Generated Harper deploy artifacts usually include:
|
|
52
|
+
|
|
53
|
+
- `harper-app/*.js` — every compiled module the build emits to the harper-app
|
|
54
|
+
root (`resources.js`, `resource-*.js`, and any other output such as a route
|
|
55
|
+
negotiation module). The single-star does **not** cross a directory separator,
|
|
56
|
+
so it does not match hand-written shims one level down.
|
|
57
|
+
- `harper-app/web/**`
|
|
58
|
+
- `harper-app/lib/**`
|
|
59
|
+
|
|
60
|
+
The guard surfaces (`generated-artifact-globs.txt` for the PreToolUse block hook,
|
|
61
|
+
`.gitignore`, `.prettierignore`, the ESLint/oxlint/knip ignores, and
|
|
62
|
+
`tsconfig.eslint.json`) all key off `harper-app/*.js` so a newly-named compiled
|
|
63
|
+
module is protected automatically. **Name compiled resource modules
|
|
64
|
+
`resource-*.ts`** so their JS output is unambiguously generated.
|
|
65
|
+
|
|
66
|
+
If you keep a *hand-written* `.js` at the harper-app root (e.g. an SEO shell),
|
|
67
|
+
the root-level rule would otherwise treat it as generated: re-include it with a
|
|
68
|
+
`!harper-app/<file>.js` line below the managed gitignore block, and add it to
|
|
69
|
+
`.lisa/harper-generated-artifact-allowlist.txt` so the block hook lets you edit
|
|
70
|
+
it. Hand-written shims nested under `harper-app/<route>/index.js` need no
|
|
71
|
+
exemption — the root-level rule never matches them.
|
|
72
|
+
|
|
73
|
+
Every lint, format, dead-code, search, or generated-artifact guard must ignore
|
|
74
|
+
generated paths unless it is explicitly validating the build output itself. When
|
|
75
|
+
a new generated *directory* appears, add it to every relevant ignore surface in
|
|
76
|
+
the same change; partial ignores fail later gates in non-obvious ways.
|
|
77
|
+
|
|
78
|
+
- **TypeScript under `src/` is source.** `bun run build` produces the deployable
|
|
79
|
+
Harper assets from it.
|
|
80
|
+
- **Never edit generated Harper assets directly** — change the TypeScript and
|
|
81
|
+
rebuild. See [[harper-resources]] and [[harper-component-model]].
|
|
82
|
+
- **Build before symlinking, packaging, or deploying `harper-app/`.** Deploying
|
|
83
|
+
stale artifacts ships code that does not match `src/`.
|
|
84
|
+
|
|
85
|
+
## The deployable surface
|
|
86
|
+
|
|
87
|
+
A deployable Harper component must keep these at the component root Fabric packages:
|
|
88
|
+
|
|
89
|
+
- `config.yaml` — active extensions ([[harper-config-yaml]])
|
|
90
|
+
- `schema.graphql` — data model ([[harper-schema-graphql]])
|
|
91
|
+
- `resources.js` — generated custom logic
|
|
92
|
+
- `web/**` — generated static assets
|
|
93
|
+
|
|
94
|
+
If a change touches this surface, it is not done until the local build and the
|
|
95
|
+
relevant deployed or smoke path agree.
|
|
96
|
+
|
|
97
|
+
## Deploying to Fabric
|
|
98
|
+
|
|
99
|
+
Fabric is Harper's distributed deploy network. Lisa ships a create-only GitHub
|
|
100
|
+
Actions workflow at `.github/workflows/deploy.yml` for Harper/Fabric projects. Use
|
|
101
|
+
that workflow as the canonical deployment path for repositories that have adopted
|
|
102
|
+
the template: it builds the project, runs `harper deploy_component` against the
|
|
103
|
+
configured Fabric target, and then runs the project's smoke verification script.
|
|
104
|
+
|
|
105
|
+
Required GitHub secrets:
|
|
106
|
+
|
|
107
|
+
- `CLI_TARGET` or `HARPER_FABRIC_TARGET` — Fabric target URL.
|
|
108
|
+
- `CLI_TARGET_USERNAME` — deploy username.
|
|
109
|
+
- `CLI_TARGET_PASSWORD` — deploy password.
|
|
110
|
+
|
|
111
|
+
Optional GitHub variables:
|
|
112
|
+
|
|
113
|
+
- `HARPER_PROJECT` — Fabric project name; defaults to the repository name.
|
|
114
|
+
- `HARPER_PACKAGE` — package path; defaults to `harper-app`.
|
|
115
|
+
|
|
116
|
+
For local debugging or one-off deploys, the equivalent CLI command packages the
|
|
117
|
+
component and sends it to a target instance:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
harper deploy_component \
|
|
121
|
+
project=<app-name> \
|
|
122
|
+
package=<path-or-git-url> \
|
|
123
|
+
target=https://<instance>:9925 \
|
|
124
|
+
username=<user> \
|
|
125
|
+
password=<pass> \
|
|
126
|
+
restart=true \
|
|
127
|
+
replicated=true
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
- Omitting `package` deploys the current directory.
|
|
131
|
+
- `restart=true` restarts threads after deploy so new code loads.
|
|
132
|
+
- `replicated=true` asks Harper/Fabric to apply the component deploy across the
|
|
133
|
+
cluster rather than only the node receiving the deploy request. Include it when
|
|
134
|
+
targeting Fabric or any clustered deployment.
|
|
135
|
+
- Credentials can come from `CLI_TARGET_USERNAME` / `CLI_TARGET_PASSWORD` instead of
|
|
136
|
+
inline flags — prefer that so secrets never land in shell history or tracked files.
|
|
137
|
+
|
|
138
|
+
## Replication and topology
|
|
139
|
+
|
|
140
|
+
Fabric is a distributed runtime: a project can run on one or more Harper nodes,
|
|
141
|
+
often grouped by region or environment. Your application code is packaged as a
|
|
142
|
+
component, and the data layer is replicated through Harper's database and
|
|
143
|
+
clustering model.
|
|
144
|
+
|
|
145
|
+
Keep these semantics separate:
|
|
146
|
+
|
|
147
|
+
- **Component code replication** is controlled by deploy behavior. With
|
|
148
|
+
`replicated=true`, the deployed component package should reach the cluster nodes
|
|
149
|
+
that serve the application. Without it, you may update only the target node and
|
|
150
|
+
leave other nodes running older code.
|
|
151
|
+
- **Data replication** is runtime/database behavior. Deploying code does not by
|
|
152
|
+
itself prove that existing rows, schema changes, caches, or realtime state are
|
|
153
|
+
consistent across regions or nodes.
|
|
154
|
+
- **Thread restart** is local process behavior. `restart=true` reloads code after
|
|
155
|
+
the package lands; it is not a substitute for checking every node or region that
|
|
156
|
+
receives traffic.
|
|
157
|
+
|
|
158
|
+
After a replicated deploy, verify from the topology the app actually uses:
|
|
159
|
+
|
|
160
|
+
1. Confirm the deploy command or workflow used `replicated=true` for Fabric/cluster
|
|
161
|
+
targets.
|
|
162
|
+
2. Read `harper status` or the project's Fabric status command to see the expected
|
|
163
|
+
nodes/regions.
|
|
164
|
+
3. Hit the public smoke endpoint through the production route, then hit a direct
|
|
165
|
+
node or region endpoint when the project exposes one.
|
|
166
|
+
4. For schema or data changes, verify a write/read path that proves the expected
|
|
167
|
+
data is visible where traffic can land.
|
|
168
|
+
5. If one node serves old assets or resources, treat the deploy as incomplete even
|
|
169
|
+
when the initial target node passed smoke.
|
|
170
|
+
|
|
171
|
+
## Secrets
|
|
172
|
+
|
|
173
|
+
Keep runtime secrets out of tracked files. Use environment variables, the
|
|
174
|
+
`loadEnv` extension, or an OS keychain helper. Document *where* secrets live (which
|
|
175
|
+
env var, which store) without recording their values.
|
|
176
|
+
|
|
177
|
+
## Verification (required before reporting done)
|
|
178
|
+
|
|
179
|
+
1. `bun run build` — produces fresh `resources.js` / `web/**`.
|
|
180
|
+
2. `bun run typecheck`.
|
|
181
|
+
3. The smallest relevant test command.
|
|
182
|
+
4. For deploy-affecting changes, run the create-only GitHub deploy workflow when
|
|
183
|
+
available, or manually run `harper deploy_component` plus the project **smoke
|
|
184
|
+
command** against the local or deployed Harper endpoint.
|
|
185
|
+
5. For public HTTP surfaces, run the create-only ZAP baseline workflow or
|
|
186
|
+
`bash scripts/zap-baseline.sh` with `ZAP_TARGET_URL` set to the deployed app.
|
|
187
|
+
|
|
188
|
+
If a verification command cannot run, report the exact command and the blocker —
|
|
189
|
+
do not claim completion. When you hit a Harper/Fabric limitation or workaround,
|
|
190
|
+
record the symptom, root cause, fix, and the tempting-but-broken alternatives in
|
|
191
|
+
the project's Fabric runbook.
|
|
192
|
+
|
|
193
|
+
## Sources
|
|
194
|
+
|
|
195
|
+
- [Harper CLI overview](https://docs.harperdb.io/reference/v4/cli/overview)
|
|
196
|
+
- [Harper CLI](https://docs.harperdb.io/docs/deployments/harper-cli)
|
|
197
|
+
- [Plugin API](https://docs.harperdb.io/reference/v5/components/plugin-api)
|
|
198
|
+
- [Harper Fabric](https://www.harper.fast/)
|