@codyswann/lisa 4.54.13 → 4.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/all/copy-contents/.gitattributes +8 -0
- package/all/copy-overwrite/scripts/check-orphaned-branches.mjs +78 -9
- package/all/copy-overwrite/scripts/check-third-party-action-pins.mjs +17 -1
- package/all/copy-overwrite/scripts/lib/process-tree-runner.mjs +194 -7
- package/all/copy-overwrite/scripts/lisa-enforcement-fallback.sh +31 -0
- package/all/copy-overwrite/scripts/lisa-hooks/block-blind-automerge.sh +81 -2
- package/all/copy-overwrite/scripts/lisa-hooks/block-direct-issue-create.sh +293 -8
- package/all/copy-overwrite/scripts/lisa-hooks/block-instruction-file-edits.sh +21 -0
- package/all/copy-overwrite/scripts/lisa-hooks/block-managed-file-edits.sh +78 -15
- package/all/copy-overwrite/scripts/lisa-hooks/block-no-verify.sh +21 -0
- package/all/copy-overwrite/scripts/lisa-hooks/block-shell-json-parsing.sh +21 -0
- package/all/copy-overwrite/scripts/lisa-hooks/guard-dedupe.bash +340 -0
- package/all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh +29 -1
- package/all/copy-overwrite/scripts/lisa-hooks/worktree-binding-guard.mjs +183 -1
- package/all/copy-overwrite/scripts/lisa-hooks/worktree-binding-guard.sh +21 -0
- package/all/copy-overwrite/scripts/lisa-postinstall.mjs +21 -1
- package/all/copy-overwrite/scripts/lisa-run-gates.mjs +100 -5
- package/all/copy-overwrite/scripts/lisa-work-item.mjs +1085 -80
- package/all/create-only/.github/workflows/continuous-gates.yml +7 -0
- package/cdk/create-only/.github/workflows/ci.yml +7 -0
- package/cdk/create-only/.github/workflows/deploy.yml +21 -0
- package/dist/cli/apply.d.ts.map +1 -1
- package/dist/cli/apply.js +9 -1
- package/dist/cli/apply.js.map +1 -1
- package/dist/cli/doctor-apply-deletions.d.ts +61 -0
- package/dist/cli/doctor-apply-deletions.d.ts.map +1 -0
- package/dist/cli/doctor-apply-deletions.js +137 -0
- package/dist/cli/doctor-apply-deletions.js.map +1 -0
- package/dist/cli/doctor-cdk-preset-adoption.d.ts +15 -0
- package/dist/cli/doctor-cdk-preset-adoption.d.ts.map +1 -0
- package/dist/cli/doctor-cdk-preset-adoption.js +316 -0
- package/dist/cli/doctor-cdk-preset-adoption.js.map +1 -0
- package/dist/cli/doctor-config-shadowing.d.ts +22 -0
- package/dist/cli/doctor-config-shadowing.d.ts.map +1 -0
- package/dist/cli/doctor-config-shadowing.js +123 -0
- package/dist/cli/doctor-config-shadowing.js.map +1 -0
- package/dist/cli/doctor-rails-deploy-intent.d.ts +15 -0
- package/dist/cli/doctor-rails-deploy-intent.d.ts.map +1 -0
- package/dist/cli/doctor-rails-deploy-intent.js +197 -0
- package/dist/cli/doctor-rails-deploy-intent.js.map +1 -0
- package/dist/cli/doctor-seeded-artifacts.d.ts +12 -0
- package/dist/cli/doctor-seeded-artifacts.d.ts.map +1 -0
- package/dist/cli/doctor-seeded-artifacts.js +54 -0
- package/dist/cli/doctor-seeded-artifacts.js.map +1 -0
- package/dist/cli/doctor-stale-banner-scan.d.ts +44 -0
- package/dist/cli/doctor-stale-banner-scan.d.ts.map +1 -0
- package/dist/cli/doctor-stale-banner-scan.js +152 -0
- package/dist/cli/doctor-stale-banner-scan.js.map +1 -0
- package/dist/cli/doctor-stale-managed-banner.d.ts +19 -0
- package/dist/cli/doctor-stale-managed-banner.d.ts.map +1 -0
- package/dist/cli/doctor-stale-managed-banner.js +198 -0
- package/dist/cli/doctor-stale-managed-banner.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +16 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/ui-detected-stacks.d.ts.map +1 -1
- package/dist/cli/ui-detected-stacks.js +3 -2
- package/dist/cli/ui-detected-stacks.js.map +1 -1
- package/dist/cli/update-check.d.ts.map +1 -1
- package/dist/cli/update-check.js +14 -0
- package/dist/cli/update-check.js.map +1 -1
- package/dist/cli/worktree-liveness.d.ts +5 -0
- package/dist/cli/worktree-liveness.d.ts.map +1 -1
- package/dist/cli/worktree-liveness.js +7 -6
- package/dist/cli/worktree-liveness.js.map +1 -1
- package/dist/cli/worktree-ownership.d.ts +13 -0
- package/dist/cli/worktree-ownership.d.ts.map +1 -1
- package/dist/cli/worktree-ownership.js +14 -0
- package/dist/cli/worktree-ownership.js.map +1 -1
- package/dist/configs/eslint/base.d.ts +34 -0
- package/dist/configs/eslint/base.d.ts.map +1 -1
- package/dist/configs/eslint/base.js +34 -0
- package/dist/configs/eslint/base.js.map +1 -1
- package/dist/core/apply-receipt.d.ts +65 -0
- package/dist/core/apply-receipt.d.ts.map +1 -1
- package/dist/core/apply-receipt.js +62 -2
- package/dist/core/apply-receipt.js.map +1 -1
- package/dist/core/cdk-preset-adoption.d.ts +136 -0
- package/dist/core/cdk-preset-adoption.d.ts.map +1 -0
- package/dist/core/cdk-preset-adoption.js +135 -0
- package/dist/core/cdk-preset-adoption.js.map +1 -0
- package/dist/core/config-shadowing.d.ts +36 -0
- package/dist/core/config-shadowing.d.ts.map +1 -1
- package/dist/core/config-shadowing.js +38 -0
- package/dist/core/config-shadowing.js.map +1 -1
- package/dist/core/config.d.ts +11 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/learnings-merge-driver.d.ts +10 -0
- package/dist/core/learnings-merge-driver.d.ts.map +1 -1
- package/dist/core/learnings-merge-driver.js +18 -0
- package/dist/core/learnings-merge-driver.js.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +136 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +9 -1
- package/dist/core/lisa.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.d.ts +5 -5
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +7 -7
- package/dist/core/nightly-e2e-guard-behavior-certificate.js.map +1 -1
- package/dist/core/ownership-header.d.ts +74 -0
- package/dist/core/ownership-header.d.ts.map +1 -0
- package/dist/core/ownership-header.js +76 -0
- package/dist/core/ownership-header.js.map +1 -0
- package/dist/core/rails-deploy-production-intent.d.ts +36 -0
- package/dist/core/rails-deploy-production-intent.d.ts.map +1 -0
- package/dist/core/rails-deploy-production-intent.js +79 -0
- package/dist/core/rails-deploy-production-intent.js.map +1 -0
- package/dist/core/stale-managed-banner.d.ts +78 -0
- package/dist/core/stale-managed-banner.d.ts.map +1 -0
- package/dist/core/stale-managed-banner.js +118 -0
- package/dist/core/stale-managed-banner.js.map +1 -0
- package/dist/core/two-channel-delivery-scan.d.ts +33 -1
- package/dist/core/two-channel-delivery-scan.d.ts.map +1 -1
- package/dist/core/two-channel-delivery-scan.js +133 -6
- package/dist/core/two-channel-delivery-scan.js.map +1 -1
- package/dist/core/two-channel-delivery.d.ts +101 -4
- package/dist/core/two-channel-delivery.d.ts.map +1 -1
- package/dist/core/two-channel-delivery.js +121 -13
- package/dist/core/two-channel-delivery.js.map +1 -1
- package/dist/core/two-channel-staleness.d.ts +137 -0
- package/dist/core/two-channel-staleness.d.ts.map +1 -0
- package/dist/core/two-channel-staleness.js +268 -0
- package/dist/core/two-channel-staleness.js.map +1 -0
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +265 -121
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/core/workflow-deletion-ownership.d.ts +6 -24
- package/dist/core/workflow-deletion-ownership.d.ts.map +1 -1
- package/dist/core/workflow-deletion-ownership.js +22 -42
- package/dist/core/workflow-deletion-ownership.js.map +1 -1
- package/dist/detection/detectors/cdk.d.ts.map +1 -1
- package/dist/detection/detectors/cdk.js +2 -1
- package/dist/detection/detectors/cdk.js.map +1 -1
- package/dist/health/template-inspection.d.ts.map +1 -1
- package/dist/health/template-inspection.js +2 -1
- package/dist/health/template-inspection.js.map +1 -1
- package/dist/migrations/ensure-lisa-postinstall.d.ts +16 -0
- package/dist/migrations/ensure-lisa-postinstall.d.ts.map +1 -1
- package/dist/migrations/ensure-lisa-postinstall.js +16 -0
- package/dist/migrations/ensure-lisa-postinstall.js.map +1 -1
- package/dist/migrations/ensure-pinned-reusable-workflow-refs.d.ts +2 -2
- package/dist/migrations/ensure-pinned-reusable-workflow-refs.d.ts.map +1 -1
- package/dist/migrations/ensure-pinned-reusable-workflow-refs.js +98 -34
- package/dist/migrations/ensure-pinned-reusable-workflow-refs.js.map +1 -1
- package/dist/migrations/ensure-playwright-dedicated-caller.d.ts.map +1 -1
- package/dist/migrations/ensure-playwright-dedicated-caller.js +1 -0
- package/dist/migrations/ensure-playwright-dedicated-caller.js.map +1 -1
- package/dist/opencode/hooks-installer.d.ts.map +1 -1
- package/dist/opencode/hooks-installer.js +1 -0
- package/dist/opencode/hooks-installer.js.map +1 -1
- package/dist/opencode/plugin-templates/block-managed-file-edits.sh +78 -15
- package/dist/opencode/plugin-templates/block-no-verify.sh +21 -0
- package/dist/opencode/plugin-templates/guard-dedupe.bash +337 -0
- package/dist/opencode/plugin-templates/lisa-block-direct-issue-create.ts +242 -55
- package/dist/opencode/plugin-templates/parity-safety-net.sh +29 -1
- package/dist/strategies/package-lisa.d.ts.map +1 -1
- package/dist/strategies/package-lisa.js +2 -1
- package/dist/strategies/package-lisa.js.map +1 -1
- package/dist/utils/path-utils.d.ts +29 -0
- package/dist/utils/path-utils.d.ts.map +1 -1
- package/dist/utils/path-utils.js +41 -0
- package/dist/utils/path-utils.js.map +1 -1
- package/expo/create-only/.github/workflows/ci.yml +21 -0
- package/expo/create-only/.github/workflows/deploy.yml +28 -0
- package/expo/create-only/.github/workflows/maestro-e2e.yml +7 -0
- package/expo/create-only/.github/workflows/nightly-e2e-bypass-reaper.yml +124 -13
- package/expo/create-only/.github/workflows/nightly-e2e-health.yml +7 -0
- package/expo/create-only/.github/workflows/nightly-e2e-report.yml +7 -0
- package/expo/create-only/.github/workflows/nightly-e2e-tracking.yml +8 -0
- package/expo/create-only/.github/workflows/playwright-e2e.yml +7 -0
- package/harper-fabric/copy-overwrite/.github/workflows/ci.yml +7 -0
- package/harper-fabric/create-only/.github/workflows/deploy.yml +14 -0
- package/nestjs/create-only/.github/workflows/ci.yml +14 -0
- package/nestjs/create-only/.github/workflows/deploy.yml +28 -0
- package/package.json +10 -5
- package/phaser/copy-overwrite/.github/workflows/ci.yml +7 -0
- package/plugins/lisa/.claude-plugin/plugin.json +28 -1
- package/plugins/lisa/.codex-plugin/hooks.json +27 -0
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +130 -19
- package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +27 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-github-prd-intake/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +22 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-verify/SKILL.md +14 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/SKILL.md +51 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-intake/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +27 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +22 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-verify/SKILL.md +14 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/SKILL.md +51 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/SKILL.md +55 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +27 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-prd-intake/SKILL.md +47 -30
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/SKILL.md +3 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +22 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-verify/SKILL.md +14 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +54 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-qa-clear/SKILL.md +19 -7
- package/plugins/lisa/.codex-plugin/skills/lisa-qa-fail/SKILL.md +28 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-qa-queue/SKILL.md +28 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +94 -24
- package/plugins/lisa/.codex-plugin/skills/lisa-rework-triage/SKILL.md +32 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-linear/SKILL.md +4 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-track/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-build-intake/SKILL.md +9 -0
- package/plugins/lisa/agents/linear-prd-intake.md +8 -8
- package/plugins/lisa/hooks/block-blind-automerge.sh +81 -2
- package/plugins/lisa/hooks/block-direct-issue-create.agy.sh +64 -16
- package/plugins/lisa/hooks/block-direct-issue-create.sh +293 -8
- package/plugins/lisa/hooks/block-instruction-file-edits.sh +21 -0
- package/plugins/lisa/hooks/block-managed-file-edits.sh +78 -15
- package/plugins/lisa/hooks/block-no-verify.sh +21 -0
- package/plugins/lisa/hooks/block-shell-json-parsing.sh +21 -0
- package/plugins/lisa/hooks/failure-signature-index.mjs +240 -5
- package/plugins/lisa/hooks/guard-dedupe.bash +337 -0
- package/plugins/lisa/hooks/inject-rules.sh +13 -5
- package/plugins/lisa/hooks/operational-hazards.mjs +736 -0
- package/plugins/lisa/hooks/operational-hazards.sh +28 -0
- package/plugins/lisa/hooks/parity-safety-net.sh +29 -1
- package/plugins/lisa/hooks/threshold-ratchet-compare.mjs +102 -21
- package/plugins/lisa/hooks/threshold-ratchet-families.mjs +130 -2
- package/plugins/lisa/hooks/threshold-ratchet.mjs +63 -13
- package/plugins/lisa/hooks/worktree-binding-guard.mjs +183 -1
- package/plugins/lisa/hooks/worktree-binding-guard.sh +21 -0
- package/plugins/lisa/rules/eager/00-rule-index.md +1 -0
- package/plugins/lisa/rules/eager/operational-hazards.md +50 -0
- package/plugins/lisa/rules/eager/tracked-work.md +1 -1
- package/plugins/lisa/rules/reference/config-resolution.md +1 -1
- package/plugins/lisa/rules/reference/leaf-only-lifecycle.md +1 -1
- package/plugins/lisa/rules/reference/operational-hazards.md +115 -0
- package/plugins/lisa/rules/reference/work-item-trailer-definition.md +129 -0
- package/plugins/lisa/scripts/intake-blocker-reprobe.mjs +407 -26
- package/plugins/lisa/scripts/qa-signal-lifecycle.mjs +507 -0
- package/plugins/lisa/skills/lisa-drive-pr-to-merge/SKILL.md +130 -19
- package/plugins/lisa/skills/lisa-github-build-intake/SKILL.md +27 -4
- package/plugins/lisa/skills/lisa-github-prd-intake/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +22 -0
- package/plugins/lisa/skills/lisa-github-verify/SKILL.md +14 -0
- package/plugins/lisa/skills/lisa-github-write-issue/SKILL.md +51 -0
- package/plugins/lisa/skills/lisa-intake/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-jira-build-intake/SKILL.md +27 -4
- package/plugins/lisa/skills/lisa-jira-validate-ticket/SKILL.md +22 -0
- package/plugins/lisa/skills/lisa-jira-verify/SKILL.md +14 -0
- package/plugins/lisa/skills/lisa-jira-write-ticket/SKILL.md +51 -0
- package/plugins/lisa/skills/lisa-linear-access/SKILL.md +55 -2
- package/plugins/lisa/skills/lisa-linear-build-intake/SKILL.md +27 -4
- package/plugins/lisa/skills/lisa-linear-prd-intake/SKILL.md +48 -31
- package/plugins/lisa/skills/lisa-linear-to-tracker/SKILL.md +3 -3
- package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +22 -0
- package/plugins/lisa/skills/lisa-linear-verify/SKILL.md +14 -0
- package/plugins/lisa/skills/lisa-linear-write-issue/SKILL.md +54 -3
- package/plugins/lisa/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa/skills/lisa-qa-clear/SKILL.md +19 -7
- package/plugins/lisa/skills/lisa-qa-fail/SKILL.md +28 -3
- package/plugins/lisa/skills/lisa-qa-queue/SKILL.md +28 -3
- package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +94 -24
- package/plugins/lisa/skills/lisa-rework-triage/SKILL.md +32 -2
- package/plugins/lisa/skills/lisa-setup-linear/SKILL.md +5 -5
- package/plugins/lisa/skills/lisa-track/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-tracker-build-intake/SKILL.md +9 -0
- package/plugins/lisa-agy/agents/linear-prd-intake.md +8 -8
- package/plugins/lisa-agy/hooks/block-blind-automerge.sh +81 -2
- package/plugins/lisa-agy/hooks/block-direct-issue-create.agy.sh +64 -16
- package/plugins/lisa-agy/hooks/block-direct-issue-create.sh +293 -8
- package/plugins/lisa-agy/hooks/block-instruction-file-edits.sh +21 -0
- package/plugins/lisa-agy/hooks/block-managed-file-edits.sh +78 -15
- package/plugins/lisa-agy/hooks/block-shell-json-parsing.sh +21 -0
- package/plugins/lisa-agy/hooks/guard-dedupe.bash +337 -0
- package/plugins/lisa-agy/hooks/parity-safety-net.sh +29 -1
- package/plugins/lisa-agy/hooks.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/scripts/intake-blocker-reprobe.mjs +407 -26
- package/plugins/lisa-agy/scripts/qa-signal-lifecycle.mjs +507 -0
- package/plugins/lisa-agy/skills/lisa-drive-pr-to-merge/SKILL.md +130 -19
- package/plugins/lisa-agy/skills/lisa-github-build-intake/SKILL.md +27 -4
- package/plugins/lisa-agy/skills/lisa-github-prd-intake/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +22 -0
- package/plugins/lisa-agy/skills/lisa-github-verify/SKILL.md +14 -0
- package/plugins/lisa-agy/skills/lisa-github-write-issue/SKILL.md +51 -0
- package/plugins/lisa-agy/skills/lisa-intake/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-jira-build-intake/SKILL.md +27 -4
- package/plugins/lisa-agy/skills/lisa-jira-validate-ticket/SKILL.md +22 -0
- package/plugins/lisa-agy/skills/lisa-jira-verify/SKILL.md +14 -0
- package/plugins/lisa-agy/skills/lisa-jira-write-ticket/SKILL.md +51 -0
- package/plugins/lisa-agy/skills/lisa-linear-access/SKILL.md +55 -2
- package/plugins/lisa-agy/skills/lisa-linear-build-intake/SKILL.md +27 -4
- package/plugins/lisa-agy/skills/lisa-linear-prd-intake/SKILL.md +48 -31
- package/plugins/lisa-agy/skills/lisa-linear-to-tracker/SKILL.md +3 -3
- package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +22 -0
- package/plugins/lisa-agy/skills/lisa-linear-verify/SKILL.md +14 -0
- package/plugins/lisa-agy/skills/lisa-linear-write-issue/SKILL.md +54 -3
- package/plugins/lisa-agy/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa-agy/skills/lisa-qa-clear/SKILL.md +19 -7
- package/plugins/lisa-agy/skills/lisa-qa-fail/SKILL.md +28 -3
- package/plugins/lisa-agy/skills/lisa-qa-queue/SKILL.md +28 -3
- package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +94 -24
- package/plugins/lisa-agy/skills/lisa-rework-triage/SKILL.md +32 -2
- package/plugins/lisa-agy/skills/lisa-setup-linear/SKILL.md +5 -5
- package/plugins/lisa-agy/skills/lisa-track/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-tracker-build-intake/SKILL.md +9 -0
- 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 +19 -1
- package/plugins/lisa-copilot/agents/linear-prd-intake.agent.md +8 -8
- package/plugins/lisa-copilot/hooks/block-blind-automerge.sh +81 -2
- package/plugins/lisa-copilot/hooks/block-direct-issue-create.sh +293 -8
- package/plugins/lisa-copilot/hooks/block-instruction-file-edits.sh +21 -0
- package/plugins/lisa-copilot/hooks/block-managed-file-edits.sh +78 -15
- package/plugins/lisa-copilot/hooks/block-no-verify.sh +21 -0
- package/plugins/lisa-copilot/hooks/block-shell-json-parsing.sh +21 -0
- package/plugins/lisa-copilot/hooks/failure-signature-index.mjs +240 -5
- package/plugins/lisa-copilot/hooks/guard-dedupe.bash +337 -0
- package/plugins/lisa-copilot/hooks/inject-rules.sh +13 -5
- package/plugins/lisa-copilot/hooks/operational-hazards.mjs +736 -0
- package/plugins/lisa-copilot/hooks/operational-hazards.sh +28 -0
- package/plugins/lisa-copilot/hooks/parity-safety-net.sh +29 -1
- package/plugins/lisa-copilot/hooks/threshold-ratchet-compare.mjs +102 -21
- package/plugins/lisa-copilot/hooks/threshold-ratchet-families.mjs +130 -2
- package/plugins/lisa-copilot/hooks/threshold-ratchet.mjs +63 -13
- package/plugins/lisa-copilot/hooks/worktree-binding-guard.mjs +183 -1
- package/plugins/lisa-copilot/hooks/worktree-binding-guard.sh +21 -0
- package/plugins/lisa-copilot/rules/eager/00-rule-index.md +1 -0
- package/plugins/lisa-copilot/rules/eager/operational-hazards.md +50 -0
- package/plugins/lisa-copilot/rules/eager/tracked-work.md +1 -1
- package/plugins/lisa-copilot/rules/reference/config-resolution.md +1 -1
- package/plugins/lisa-copilot/rules/reference/leaf-only-lifecycle.md +1 -1
- package/plugins/lisa-copilot/rules/reference/operational-hazards.md +115 -0
- package/plugins/lisa-copilot/rules/reference/work-item-trailer-definition.md +129 -0
- package/plugins/lisa-copilot/scripts/intake-blocker-reprobe.mjs +407 -26
- package/plugins/lisa-copilot/scripts/qa-signal-lifecycle.mjs +507 -0
- package/plugins/lisa-copilot/skills/lisa-drive-pr-to-merge/SKILL.md +130 -19
- package/plugins/lisa-copilot/skills/lisa-github-build-intake/SKILL.md +27 -4
- package/plugins/lisa-copilot/skills/lisa-github-prd-intake/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +22 -0
- package/plugins/lisa-copilot/skills/lisa-github-verify/SKILL.md +14 -0
- package/plugins/lisa-copilot/skills/lisa-github-write-issue/SKILL.md +51 -0
- package/plugins/lisa-copilot/skills/lisa-intake/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-jira-build-intake/SKILL.md +27 -4
- package/plugins/lisa-copilot/skills/lisa-jira-validate-ticket/SKILL.md +22 -0
- package/plugins/lisa-copilot/skills/lisa-jira-verify/SKILL.md +14 -0
- package/plugins/lisa-copilot/skills/lisa-jira-write-ticket/SKILL.md +51 -0
- package/plugins/lisa-copilot/skills/lisa-linear-access/SKILL.md +55 -2
- package/plugins/lisa-copilot/skills/lisa-linear-build-intake/SKILL.md +27 -4
- package/plugins/lisa-copilot/skills/lisa-linear-prd-intake/SKILL.md +48 -31
- package/plugins/lisa-copilot/skills/lisa-linear-to-tracker/SKILL.md +3 -3
- package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +22 -0
- package/plugins/lisa-copilot/skills/lisa-linear-verify/SKILL.md +14 -0
- package/plugins/lisa-copilot/skills/lisa-linear-write-issue/SKILL.md +54 -3
- package/plugins/lisa-copilot/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa-copilot/skills/lisa-qa-clear/SKILL.md +19 -7
- package/plugins/lisa-copilot/skills/lisa-qa-fail/SKILL.md +28 -3
- package/plugins/lisa-copilot/skills/lisa-qa-queue/SKILL.md +28 -3
- package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +94 -24
- package/plugins/lisa-copilot/skills/lisa-rework-triage/SKILL.md +32 -2
- package/plugins/lisa-copilot/skills/lisa-setup-linear/SKILL.md +5 -5
- package/plugins/lisa-copilot/skills/lisa-track/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-tracker-build-intake/SKILL.md +9 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/agents/linear-prd-intake.md +8 -8
- package/plugins/lisa-cursor/hooks/block-blind-automerge.sh +81 -2
- package/plugins/lisa-cursor/hooks/block-direct-issue-create.sh +293 -8
- package/plugins/lisa-cursor/hooks/block-instruction-file-edits.sh +21 -0
- package/plugins/lisa-cursor/hooks/block-managed-file-edits.sh +78 -15
- package/plugins/lisa-cursor/hooks/block-no-verify.sh +21 -0
- package/plugins/lisa-cursor/hooks/block-shell-json-parsing.sh +21 -0
- package/plugins/lisa-cursor/hooks/failure-signature-index.mjs +240 -5
- package/plugins/lisa-cursor/hooks/guard-dedupe.bash +337 -0
- package/plugins/lisa-cursor/hooks/hooks.json +10 -0
- package/plugins/lisa-cursor/hooks/operational-hazards.mjs +736 -0
- package/plugins/lisa-cursor/hooks/operational-hazards.sh +28 -0
- package/plugins/lisa-cursor/hooks/parity-safety-net.sh +29 -1
- package/plugins/lisa-cursor/hooks/threshold-ratchet-compare.mjs +102 -21
- package/plugins/lisa-cursor/hooks/threshold-ratchet-families.mjs +130 -2
- package/plugins/lisa-cursor/hooks/threshold-ratchet.mjs +63 -13
- package/plugins/lisa-cursor/hooks/worktree-binding-guard.mjs +183 -1
- package/plugins/lisa-cursor/hooks/worktree-binding-guard.sh +21 -0
- package/plugins/lisa-cursor/rules/00-rule-index.mdc +1 -0
- package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/leaf-only-lifecycle-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/operational-hazards-reference.mdc +120 -0
- package/plugins/lisa-cursor/rules/operational-hazards.mdc +55 -0
- package/plugins/lisa-cursor/rules/tracked-work.mdc +1 -1
- package/plugins/lisa-cursor/rules/work-item-trailer-definition-reference.mdc +134 -0
- package/plugins/lisa-cursor/scripts/intake-blocker-reprobe.mjs +407 -26
- package/plugins/lisa-cursor/scripts/qa-signal-lifecycle.mjs +507 -0
- package/plugins/lisa-cursor/skills/lisa-drive-pr-to-merge/SKILL.md +130 -19
- package/plugins/lisa-cursor/skills/lisa-github-build-intake/SKILL.md +27 -4
- package/plugins/lisa-cursor/skills/lisa-github-prd-intake/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +22 -0
- package/plugins/lisa-cursor/skills/lisa-github-verify/SKILL.md +14 -0
- package/plugins/lisa-cursor/skills/lisa-github-write-issue/SKILL.md +51 -0
- package/plugins/lisa-cursor/skills/lisa-intake/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-jira-build-intake/SKILL.md +27 -4
- package/plugins/lisa-cursor/skills/lisa-jira-validate-ticket/SKILL.md +22 -0
- package/plugins/lisa-cursor/skills/lisa-jira-verify/SKILL.md +14 -0
- package/plugins/lisa-cursor/skills/lisa-jira-write-ticket/SKILL.md +51 -0
- package/plugins/lisa-cursor/skills/lisa-linear-access/SKILL.md +55 -2
- package/plugins/lisa-cursor/skills/lisa-linear-build-intake/SKILL.md +27 -4
- package/plugins/lisa-cursor/skills/lisa-linear-prd-intake/SKILL.md +48 -31
- package/plugins/lisa-cursor/skills/lisa-linear-to-tracker/SKILL.md +3 -3
- package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +22 -0
- package/plugins/lisa-cursor/skills/lisa-linear-verify/SKILL.md +14 -0
- package/plugins/lisa-cursor/skills/lisa-linear-write-issue/SKILL.md +54 -3
- package/plugins/lisa-cursor/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa-cursor/skills/lisa-qa-clear/SKILL.md +19 -7
- package/plugins/lisa-cursor/skills/lisa-qa-fail/SKILL.md +28 -3
- package/plugins/lisa-cursor/skills/lisa-qa-queue/SKILL.md +28 -3
- package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +94 -24
- package/plugins/lisa-cursor/skills/lisa-rework-triage/SKILL.md +32 -2
- package/plugins/lisa-cursor/skills/lisa-setup-linear/SKILL.md +5 -5
- package/plugins/lisa-cursor/skills/lisa-track/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-tracker-build-intake/SKILL.md +9 -0
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/hooks/inject-rules.sh +14 -3
- package/plugins/lisa-harper-fabric/rules/eager/harper-fabric.md +31 -0
- 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/inject-rules.sh +14 -3
- package/plugins/lisa-harper-fabric-copilot/rules/eager/harper-fabric.md +31 -0
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/rules/harper-fabric-reference.mdc +57 -0
- package/plugins/lisa-harper-fabric-cursor/rules/harper-fabric.mdc +32 -53
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/hooks/inject-rules.sh +14 -3
- package/plugins/lisa-phaser/rules/eager/phaser.md +44 -0
- 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 +14 -3
- package/plugins/lisa-phaser-copilot/rules/eager/phaser.md +44 -0
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/rules/phaser-reference.mdc +189 -0
- package/plugins/lisa-phaser-cursor/rules/phaser.mdc +45 -185
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/hooks/inject-rules.sh +14 -4
- package/plugins/lisa-rails/rules/eager/rails-conventions.md +23 -0
- 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 +14 -4
- package/plugins/lisa-rails-copilot/rules/eager/rails-conventions.md +23 -0
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/rules/rails-conventions-reference.mdc +181 -0
- package/plugins/lisa-rails-cursor/rules/rails-conventions.mdc +24 -177
- 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 +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/materialized-artifacts.json +1 -0
- package/plugins/src/base/.claude-plugin/plugin.json +27 -0
- package/plugins/src/base/agents/linear-prd-intake.md +8 -8
- package/plugins/src/base/hooks/block-blind-automerge.sh +81 -2
- package/plugins/src/base/hooks/block-direct-issue-create.agy.sh +64 -16
- package/plugins/src/base/hooks/block-direct-issue-create.sh +293 -8
- package/plugins/src/base/hooks/block-instruction-file-edits.sh +21 -0
- package/plugins/src/base/hooks/block-managed-file-edits.sh +78 -15
- package/plugins/src/base/hooks/block-no-verify.sh +21 -0
- package/plugins/src/base/hooks/block-shell-json-parsing.sh +21 -0
- package/plugins/src/base/hooks/failure-signature-index.mjs +240 -5
- package/plugins/src/base/hooks/guard-dedupe.bash +337 -0
- package/plugins/src/base/hooks/inject-rules.sh +13 -5
- package/plugins/src/base/hooks/operational-hazards.mjs +736 -0
- package/plugins/src/base/hooks/operational-hazards.sh +28 -0
- package/plugins/src/base/hooks/parity-safety-net.sh +29 -1
- package/plugins/src/base/hooks/threshold-ratchet-compare.mjs +102 -21
- package/plugins/src/base/hooks/threshold-ratchet-families.mjs +130 -2
- package/plugins/src/base/hooks/threshold-ratchet.mjs +63 -13
- package/plugins/src/base/hooks/worktree-binding-guard.mjs +183 -1
- package/plugins/src/base/hooks/worktree-binding-guard.sh +21 -0
- package/plugins/src/base/rules/eager/00-rule-index.md +1 -0
- package/plugins/src/base/rules/eager/operational-hazards.md +50 -0
- package/plugins/src/base/rules/eager/tracked-work.md +1 -1
- package/plugins/src/base/rules/reference/config-resolution.md +1 -1
- package/plugins/src/base/rules/reference/leaf-only-lifecycle.md +1 -1
- package/plugins/src/base/rules/reference/operational-hazards.md +115 -0
- package/plugins/src/base/rules/reference/work-item-trailer-definition.md +129 -0
- package/plugins/src/base/scripts/intake-blocker-reprobe.mjs +407 -26
- package/plugins/src/base/scripts/qa-signal-lifecycle.mjs +507 -0
- package/plugins/src/base/skills/lisa-drive-pr-to-merge/SKILL.md +130 -19
- package/plugins/src/base/skills/lisa-github-build-intake/SKILL.md +27 -4
- package/plugins/src/base/skills/lisa-github-prd-intake/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +22 -0
- package/plugins/src/base/skills/lisa-github-verify/SKILL.md +14 -0
- package/plugins/src/base/skills/lisa-github-write-issue/SKILL.md +51 -0
- package/plugins/src/base/skills/lisa-intake/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-jira-build-intake/SKILL.md +27 -4
- package/plugins/src/base/skills/lisa-jira-validate-ticket/SKILL.md +22 -0
- package/plugins/src/base/skills/lisa-jira-verify/SKILL.md +14 -0
- package/plugins/src/base/skills/lisa-jira-write-ticket/SKILL.md +51 -0
- package/plugins/src/base/skills/lisa-linear-access/SKILL.md +55 -2
- package/plugins/src/base/skills/lisa-linear-build-intake/SKILL.md +27 -4
- package/plugins/src/base/skills/lisa-linear-prd-intake/SKILL.md +48 -31
- package/plugins/src/base/skills/lisa-linear-to-tracker/SKILL.md +3 -3
- package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +22 -0
- package/plugins/src/base/skills/lisa-linear-verify/SKILL.md +14 -0
- package/plugins/src/base/skills/lisa-linear-write-issue/SKILL.md +54 -3
- package/plugins/src/base/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/src/base/skills/lisa-qa-clear/SKILL.md +19 -7
- package/plugins/src/base/skills/lisa-qa-fail/SKILL.md +28 -3
- package/plugins/src/base/skills/lisa-qa-queue/SKILL.md +28 -3
- package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +94 -24
- package/plugins/src/base/skills/lisa-rework-triage/SKILL.md +32 -2
- package/plugins/src/base/skills/lisa-setup-linear/SKILL.md +5 -5
- package/plugins/src/base/skills/lisa-track/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-tracker-build-intake/SKILL.md +9 -0
- package/plugins/src/harper-fabric/hooks/inject-rules.sh +14 -3
- package/plugins/src/harper-fabric/rules/eager/harper-fabric.md +31 -0
- package/plugins/src/phaser/hooks/inject-rules.sh +14 -3
- package/plugins/src/phaser/rules/eager/phaser.md +44 -0
- package/plugins/src/rails/hooks/inject-rules.sh +14 -4
- package/plugins/src/rails/rules/eager/rails-conventions.md +23 -0
- package/rails/copy-overwrite/scripts/check-threshold-ratchet.mjs +63 -13
- package/rails/copy-overwrite/scripts/threshold-ratchet-compare.mjs +102 -21
- package/rails/copy-overwrite/scripts/threshold-ratchet-families.mjs +130 -2
- package/rails/create-only/.github/workflows/ci.yml +8 -0
- package/rails/create-only/.github/workflows/deploy.yml +22 -0
- package/scripts/build-plugins.sh +2 -1
- package/scripts/check-engine-floor.mjs +361 -0
- package/scripts/check-guard-parity-notes.mjs +709 -0
- package/scripts/check-template-workflow-refs.mjs +9 -0
- package/scripts/check-third-party-action-pins.mjs +17 -1
- package/scripts/check-workflow-contract-assertions.mjs +480 -0
- package/scripts/copy-opencode-plugin-templates.mjs +1 -0
- package/scripts/deployed-guard-advice.mjs +636 -0
- package/scripts/generate-agy-plugin-artifacts.mjs +35 -10
- package/scripts/generate-export-surface.mjs +105 -19
- package/scripts/generate-two-channel-couplings.ts +143 -212
- package/scripts/lisa-enforcement-fallback.sh +31 -0
- package/scripts/measure-scripts-profile-gap.mts +361 -0
- package/scripts/mutation-performance-measure.mjs +21 -5
- package/scripts/reconcile-release-tags.mjs +65 -84
- package/scripts/two-channel-couplings.json +302 -70
- package/scripts/workflow-contract-assertion.sh +47 -0
- package/typescript/copy-overwrite/.lintstagedrc.json +1 -0
- package/typescript/copy-overwrite/eslint.ignore.config.json +1 -0
- package/typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs +527 -53
- package/typescript/copy-overwrite/scripts/check-skipped-required-checks.mjs +301 -13
- package/typescript/copy-overwrite/scripts/check-threshold-ratchet.mjs +63 -13
- package/typescript/copy-overwrite/scripts/threshold-ratchet-compare.mjs +102 -21
- package/typescript/copy-overwrite/scripts/threshold-ratchet-families.mjs +130 -2
- package/typescript/create-only/.github/workflows/ci.yml +7 -0
- /package/plugins/lisa-harper-fabric/rules/{harper-fabric.md → reference/harper-fabric.md} +0 -0
- /package/plugins/lisa-harper-fabric-copilot/rules/{harper-fabric.md → reference/harper-fabric.md} +0 -0
- /package/plugins/lisa-phaser/rules/{phaser.md → reference/phaser.md} +0 -0
- /package/plugins/lisa-phaser-copilot/rules/{phaser.md → reference/phaser.md} +0 -0
- /package/plugins/lisa-rails/rules/{rails-conventions.md → reference/rails-conventions.md} +0 -0
- /package/plugins/lisa-rails-copilot/rules/{rails-conventions.md → reference/rails-conventions.md} +0 -0
- /package/plugins/src/harper-fabric/rules/{harper-fabric.md → reference/harper-fabric.md} +0 -0
- /package/plugins/src/phaser/rules/{phaser.md → reference/phaser.md} +0 -0
- /package/plugins/src/rails/rules/{rails-conventions.md → reference/rails-conventions.md} +0 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `lisa doctor` check: is this repository carrying a CDK application preset it
|
|
3
|
+
* was never eligible for?
|
|
4
|
+
*
|
|
5
|
+
* `src/detection/detectors/cdk.ts` closed the decision — nothing is classified
|
|
6
|
+
* as a CDK app now without a `cdk.json`. That guard runs at detection time, so
|
|
7
|
+
* it reaches the next apply and nothing else: a repository admitted by the old
|
|
8
|
+
* `aws-cdk*`-dependency arm keeps its preset, its force-merged runtime
|
|
9
|
+
* dependencies, and — because the dead-code gate's entry globs are ordinary
|
|
10
|
+
* TypeScript directory names — a knip run that measures a fraction of the
|
|
11
|
+
* source and exits zero. None of that announces itself, and the first of them
|
|
12
|
+
* actively reports success (CodySwannGT/lisa#3533, CodySwannGT/lisa#3711).
|
|
13
|
+
*
|
|
14
|
+
* This check REPORTS. It removes nothing: a repository may since have come to
|
|
15
|
+
* depend on something the preset delivered, and that judgement is not one a
|
|
16
|
+
* health probe gets to make.
|
|
17
|
+
*
|
|
18
|
+
* The whole point is that an affected repository can find ITSELF, so a probe
|
|
19
|
+
* that cannot look must never render as a repository with nothing to report.
|
|
20
|
+
* Every filesystem answer here is three-valued — present, absent, or
|
|
21
|
+
* undeterminable — and the last one fails rather than passing quietly.
|
|
22
|
+
* @module cli/doctor-cdk-preset-adoption
|
|
23
|
+
*/
|
|
24
|
+
import { readFile, stat } from "node:fs/promises";
|
|
25
|
+
import * as path from "node:path";
|
|
26
|
+
import { CDK_APP_MARKER, CDK_PRESET_ARTIFACTS, CDK_PRESET_BIN_ENTRY, CDK_PRESET_FORCED_DEPENDENCIES, cdkAppEntrySource, classifyCdkPresetAdoption, } from "../core/cdk-preset-adoption.js";
|
|
27
|
+
/** Name of the CDK preset-adoption check as doctor reports it. */
|
|
28
|
+
export const CDK_PRESET_ADOPTION_CHECK_NAME = "CDK preset earned?";
|
|
29
|
+
/** Repo-relative manifest the preset force-merges its dependencies into. */
|
|
30
|
+
const PACKAGE_JSON = "package.json";
|
|
31
|
+
/**
|
|
32
|
+
* Errno codes that ANSWER the question rather than refusing it: the path is
|
|
33
|
+
* genuinely not there. Anything else — a permission denial, an I/O error, a
|
|
34
|
+
* symlink loop — means the probe could not look, which is a different answer
|
|
35
|
+
* and must not be spelled the same way.
|
|
36
|
+
*/
|
|
37
|
+
const ABSENT_CODES = new Set(["ENOENT", "ENOTDIR", "ENAMETOOLONG"]);
|
|
38
|
+
/**
|
|
39
|
+
* The errno code of a rejected filesystem call, when it carries one.
|
|
40
|
+
* @param error - Value thrown by a filesystem call
|
|
41
|
+
* @returns The errno code, or undefined when the value carries none
|
|
42
|
+
*/
|
|
43
|
+
function errnoCode(error) {
|
|
44
|
+
const code = typeof error === "object" && error !== null
|
|
45
|
+
? error.code
|
|
46
|
+
: undefined;
|
|
47
|
+
return typeof code === "string" ? code : undefined;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Answer whether a repo-relative path exists, REJECTING when the filesystem
|
|
51
|
+
* declines to say.
|
|
52
|
+
*
|
|
53
|
+
* `fs-extra`'s `pathExists` resolves false for every failure, including a
|
|
54
|
+
* permission denial, so a repository this process cannot read would report the
|
|
55
|
+
* same "no CDK preset here" as a healthy one.
|
|
56
|
+
* @param projectRoot - Absolute project root
|
|
57
|
+
* @param relativePath - Repo-relative path to probe
|
|
58
|
+
* @returns True when the path is present, false when it is provably absent
|
|
59
|
+
* @throws {Error} When the filesystem cannot answer
|
|
60
|
+
*/
|
|
61
|
+
async function probeExists(projectRoot, relativePath) {
|
|
62
|
+
try {
|
|
63
|
+
await stat(path.join(projectRoot, relativePath));
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const code = errnoCode(error);
|
|
68
|
+
if (code !== undefined && ABSENT_CODES.has(code))
|
|
69
|
+
return false;
|
|
70
|
+
throw new Error(`could not read ${relativePath}: ${code ?? String(error)}`, {
|
|
71
|
+
cause: error,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Read a repo-relative file, REJECTING when the filesystem declines to say.
|
|
77
|
+
* @param projectRoot - Absolute project root
|
|
78
|
+
* @param relativePath - Repo-relative path to read
|
|
79
|
+
* @returns The file text, or null when the file is provably absent
|
|
80
|
+
* @throws {Error} When the file exists but could not be read
|
|
81
|
+
*/
|
|
82
|
+
async function readTextOrAbsent(projectRoot, relativePath) {
|
|
83
|
+
try {
|
|
84
|
+
return await readFile(path.join(projectRoot, relativePath), "utf8");
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
const code = errnoCode(error);
|
|
88
|
+
if (code !== undefined && ABSENT_CODES.has(code))
|
|
89
|
+
return null;
|
|
90
|
+
throw new Error(`could not read ${relativePath}: ${code ?? String(error)}`, {
|
|
91
|
+
cause: error,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Read a repo-relative JSON document, REJECTING when the filesystem declines
|
|
97
|
+
* to say and when the bytes will not parse.
|
|
98
|
+
*
|
|
99
|
+
* A document that exists but cannot be parsed is not a document with nothing
|
|
100
|
+
* in it, and must not be classified as one.
|
|
101
|
+
* @param projectRoot - Absolute project root
|
|
102
|
+
* @param relativePath - Repo-relative path to read
|
|
103
|
+
* @returns The parsed document, or null when the file is provably absent
|
|
104
|
+
* @throws {Error} When the file exists but could not be read or parsed
|
|
105
|
+
*/
|
|
106
|
+
async function readJsonOrAbsent(projectRoot, relativePath) {
|
|
107
|
+
const text = await readTextOrAbsent(projectRoot, relativePath);
|
|
108
|
+
if (text === null)
|
|
109
|
+
return null;
|
|
110
|
+
try {
|
|
111
|
+
return JSON.parse(text);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
throw new Error(`could not parse ${relativePath}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Which CDK-exclusive preset artifacts this repository carries.
|
|
119
|
+
* @param projectRoot - Absolute project root
|
|
120
|
+
* @returns Present artifacts, in the order the preset ships them
|
|
121
|
+
* @throws {Error} When an artifact can be neither confirmed nor ruled out
|
|
122
|
+
*/
|
|
123
|
+
async function presentPresetArtifacts(projectRoot) {
|
|
124
|
+
const present = await Promise.all(CDK_PRESET_ARTIFACTS.map(artifact => probeExists(projectRoot, artifact)));
|
|
125
|
+
return CDK_PRESET_ARTIFACTS.filter((_, index) => present[index] === true);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* What the repository's `cdk.json` declares as its application entrypoint.
|
|
129
|
+
*
|
|
130
|
+
* The marker alone is not enough. `cdk.json` is itself part of what the preset
|
|
131
|
+
* delivers, under `create-only`, so a repository admitted by the old predicate
|
|
132
|
+
* and then applied holds a marker Lisa wrote for it. A real CDK app cannot
|
|
133
|
+
* synth without the entry its `app` command names; a repository holding a
|
|
134
|
+
* seeded marker has never had one.
|
|
135
|
+
* @param projectRoot - Absolute project root
|
|
136
|
+
* @param marker - Parsed `cdk.json` document
|
|
137
|
+
* @returns What the marker's `app` command turns out to name
|
|
138
|
+
* @throws {Error} When the entry can be neither confirmed nor ruled out
|
|
139
|
+
*/
|
|
140
|
+
async function resolveAppEntry(projectRoot, marker) {
|
|
141
|
+
const app = typeof marker === "object" && marker !== null
|
|
142
|
+
? marker.app
|
|
143
|
+
: undefined;
|
|
144
|
+
if (typeof app !== "string")
|
|
145
|
+
return { kind: "unrecognised" };
|
|
146
|
+
const source = cdkAppEntrySource(app);
|
|
147
|
+
if (source === null)
|
|
148
|
+
return { kind: "unrecognised" };
|
|
149
|
+
return {
|
|
150
|
+
kind: "resolved",
|
|
151
|
+
source,
|
|
152
|
+
present: await probeExists(projectRoot, source),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Which of the preset's force-merged package.json entries this repository
|
|
157
|
+
* still carries, stated so the reader knows what to back out.
|
|
158
|
+
* @param manifest - Parsed `package.json`, or null when absent
|
|
159
|
+
* @returns Operator-readable clauses, empty when none are present
|
|
160
|
+
*/
|
|
161
|
+
function describeMergedEntries(manifest) {
|
|
162
|
+
if (typeof manifest !== "object" || manifest === null)
|
|
163
|
+
return [];
|
|
164
|
+
const record = manifest;
|
|
165
|
+
const dependencies = typeof record.dependencies === "object" && record.dependencies !== null
|
|
166
|
+
? record.dependencies
|
|
167
|
+
: {};
|
|
168
|
+
const merged = CDK_PRESET_FORCED_DEPENDENCIES.filter(name => name in dependencies);
|
|
169
|
+
const bin = typeof record.bin === "object" && record.bin !== null
|
|
170
|
+
? record.bin
|
|
171
|
+
: {};
|
|
172
|
+
return [
|
|
173
|
+
merged.length > 0
|
|
174
|
+
? [`runtime dependencies \`${merged.join("`, `")}\` in ${PACKAGE_JSON}`]
|
|
175
|
+
: [],
|
|
176
|
+
bin[CDK_PRESET_BIN_ENTRY.name] === CDK_PRESET_BIN_ENTRY.target
|
|
177
|
+
? [
|
|
178
|
+
`a \`bin.${CDK_PRESET_BIN_ENTRY.name}\` entry pointing at ` +
|
|
179
|
+
`\`${CDK_PRESET_BIN_ENTRY.target}\``,
|
|
180
|
+
]
|
|
181
|
+
: [],
|
|
182
|
+
].flat();
|
|
183
|
+
}
|
|
184
|
+
/** What an operator has to weigh before backing any of this out. */
|
|
185
|
+
const REMEDY = "Nothing here is removed automatically: the repository may since have come " +
|
|
186
|
+
"to depend on something the preset delivered. Decide per file, then keep " +
|
|
187
|
+
`the decision by making sure no \`${CDK_APP_MARKER}\` is present — while ` +
|
|
188
|
+
"one is, every apply re-merges the entries above";
|
|
189
|
+
/**
|
|
190
|
+
* The consequence worth stating, because it is the one that reports success.
|
|
191
|
+
*/
|
|
192
|
+
const QUIET_CONSEQUENCE = "The preset's knip `entry` globs include ordinary TypeScript directory " +
|
|
193
|
+
"names (`config`, `util`, `utils`, `functions`), so the dead-code gate may " +
|
|
194
|
+
"be measuring a fraction of the source and passing";
|
|
195
|
+
/**
|
|
196
|
+
* Report whether a repository carries a CDK preset it was never eligible for.
|
|
197
|
+
*
|
|
198
|
+
* Fails rather than warns on a hit: a dead-code gate reporting success over a
|
|
199
|
+
* fraction of the source is a live false green, and force-merged runtime
|
|
200
|
+
* dependencies return on every apply until the marker is gone. Fails equally
|
|
201
|
+
* when the question could not be answered, for the reason in the module note.
|
|
202
|
+
* @param targetPath - Project path to inspect
|
|
203
|
+
* @returns Doctor check result
|
|
204
|
+
*/
|
|
205
|
+
export async function checkCdkPresetAdoption(targetPath) {
|
|
206
|
+
try {
|
|
207
|
+
const root = await stat(targetPath);
|
|
208
|
+
if (!root.isDirectory()) {
|
|
209
|
+
throw new Error(`${targetPath} is not a directory`);
|
|
210
|
+
}
|
|
211
|
+
return await assess(targetPath);
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
return {
|
|
215
|
+
name: CDK_PRESET_ADOPTION_CHECK_NAME,
|
|
216
|
+
status: "fail",
|
|
217
|
+
detail: "Could not determine whether this repository carries a CDK " +
|
|
218
|
+
`application preset: ${error instanceof Error ? error.message : String(error)}. Treated as a failure rather than a pass: a tree that could not be ` +
|
|
219
|
+
"read is not a tree with nothing in it",
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Gather the evidence and turn it into the check line it earns.
|
|
225
|
+
* @param projectRoot - Absolute project root
|
|
226
|
+
* @returns Doctor check result
|
|
227
|
+
* @throws {Error} When any part of the evidence cannot be gathered
|
|
228
|
+
*/
|
|
229
|
+
async function assess(projectRoot) {
|
|
230
|
+
const presetArtifacts = await presentPresetArtifacts(projectRoot);
|
|
231
|
+
if (presetArtifacts.length === 0) {
|
|
232
|
+
return ok("No CDK application preset artifacts in this repository");
|
|
233
|
+
}
|
|
234
|
+
const marker = await readJsonOrAbsent(projectRoot, CDK_APP_MARKER);
|
|
235
|
+
const hasAppMarker = marker !== null;
|
|
236
|
+
const appEntry = hasAppMarker
|
|
237
|
+
? await resolveAppEntry(projectRoot, marker)
|
|
238
|
+
: null;
|
|
239
|
+
const adoption = classifyCdkPresetAdoption({
|
|
240
|
+
presetArtifacts,
|
|
241
|
+
hasAppMarker,
|
|
242
|
+
appEntry,
|
|
243
|
+
});
|
|
244
|
+
if (adoption === "eligible") {
|
|
245
|
+
return ok(`Carries the CDK application preset and has a ${CDK_APP_MARKER}`);
|
|
246
|
+
}
|
|
247
|
+
if (adoption === "undeterminable") {
|
|
248
|
+
return {
|
|
249
|
+
name: CDK_PRESET_ADOPTION_CHECK_NAME,
|
|
250
|
+
status: "warn",
|
|
251
|
+
detail: `This repository carries the CDK application preset and a ` +
|
|
252
|
+
`${CDK_APP_MARKER}, but that marker names no application entry this ` +
|
|
253
|
+
"check can look for, so whether the preset was earned could not be " +
|
|
254
|
+
`settled. Confirm by hand that \`${CDK_APP_MARKER}\` drives a real ` +
|
|
255
|
+
`CDK app; if it does not, see ${QUIET_CONSEQUENCE.toLowerCase()}`,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
return {
|
|
259
|
+
name: CDK_PRESET_ADOPTION_CHECK_NAME,
|
|
260
|
+
status: "fail",
|
|
261
|
+
detail: ineligibleDetail(presetArtifacts, appEntry !== null && appEntry.kind === "resolved"
|
|
262
|
+
? appEntry.source
|
|
263
|
+
: null, await mergedEntries(projectRoot)),
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* The preset's force-merged manifest entries, or why they could not be listed.
|
|
268
|
+
*
|
|
269
|
+
* A manifest this check cannot read does not unsettle the verdict — the
|
|
270
|
+
* verdict was already reached from the artifacts and the marker — so the
|
|
271
|
+
* failure is stated as part of the finding instead of replacing it with
|
|
272
|
+
* "could not determine".
|
|
273
|
+
* @param projectRoot - Absolute project root
|
|
274
|
+
* @returns Operator-readable clauses, empty when there are none to state
|
|
275
|
+
*/
|
|
276
|
+
async function mergedEntries(projectRoot) {
|
|
277
|
+
try {
|
|
278
|
+
return describeMergedEntries(await readJsonOrAbsent(projectRoot, PACKAGE_JSON));
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
return [
|
|
282
|
+
`entries this check could not list, because ${PACKAGE_JSON} would not ` +
|
|
283
|
+
`read (${error instanceof Error ? error.message : String(error)})`,
|
|
284
|
+
];
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* State the finding, what it delivered, and what the reader has to decide.
|
|
289
|
+
* @param presetArtifacts - CDK-exclusive artifacts found
|
|
290
|
+
* @param missingEntry - Entry the marker names but does not have, if any
|
|
291
|
+
* @param delivered - Force-merged package.json entries still present
|
|
292
|
+
* @returns One operator-readable detail line
|
|
293
|
+
*/
|
|
294
|
+
function ineligibleDetail(presetArtifacts, missingEntry, delivered) {
|
|
295
|
+
const why = missingEntry === null
|
|
296
|
+
? `there is no ${CDK_APP_MARKER}, which is the only thing that admits ` +
|
|
297
|
+
"the preset"
|
|
298
|
+
: `its ${CDK_APP_MARKER} names an application entry ` +
|
|
299
|
+
`(\`${missingEntry}\`) that does not exist, so the marker is one ` +
|
|
300
|
+
"Lisa seeded rather than one this repository wrote";
|
|
301
|
+
const merged = delivered.length > 0
|
|
302
|
+
? ` It also force-merged ${delivered.join(" and ")}.`
|
|
303
|
+
: "";
|
|
304
|
+
return ("This repository carries the CDK application preset it was never " +
|
|
305
|
+
`eligible for: \`${presetArtifacts.join("`, `")}\` are present and ` +
|
|
306
|
+
`${why}.${merged} ${QUIET_CONSEQUENCE}. ${REMEDY}`);
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* A passing line for this check.
|
|
310
|
+
* @param detail - What was found
|
|
311
|
+
* @returns Doctor check result
|
|
312
|
+
*/
|
|
313
|
+
function ok(detail) {
|
|
314
|
+
return { name: CDK_PRESET_ADOPTION_CHECK_NAME, status: "ok", detail };
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=doctor-cdk-preset-adoption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-cdk-preset-adoption.js","sourceRoot":"","sources":["../../src/cli/doctor-cdk-preset-adoption.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Name of the config-precedence check as doctor reports it. */
|
|
2
|
+
export declare const CONFIG_SHADOWING_CHECK_NAME = "Config precedence clean?";
|
|
3
|
+
/** Shape of one doctor check result (structurally identical to doctor's). */
|
|
4
|
+
interface ShadowingCheckResult {
|
|
5
|
+
name: string;
|
|
6
|
+
status: "ok" | "warn" | "fail";
|
|
7
|
+
detail: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Report whether Lisa's seeded config files outrank configs the project wrote
|
|
11
|
+
* itself.
|
|
12
|
+
*
|
|
13
|
+
* Fails rather than warns on a hit: the project's configuration is not being
|
|
14
|
+
* read right now, the remedy is one deletion, and nothing else in the toolchain
|
|
15
|
+
* will ever mention it. Fails equally when the tree could not be inspected,
|
|
16
|
+
* for the reason in the module note.
|
|
17
|
+
* @param targetPath - Project path to inspect
|
|
18
|
+
* @returns Doctor check result
|
|
19
|
+
*/
|
|
20
|
+
export declare function checkConfigShadowing(targetPath: string): Promise<ShadowingCheckResult>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=doctor-config-shadowing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-config-shadowing.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-config-shadowing.ts"],"names":[],"mappings":"AA2BA,gEAAgE;AAChE,eAAO,MAAM,2BAA2B,6BAA6B,CAAC;AAEtE,6EAA6E;AAC7E,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAwED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC,CA6B/B"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `lisa doctor` check: is a Lisa-seeded config outranking the project's own?
|
|
3
|
+
*
|
|
4
|
+
* `src/core/config-shadowing.ts` closed the create path — Lisa no longer
|
|
5
|
+
* writes `knip.json` into a repository that already configures knip under a
|
|
6
|
+
* filename `knip.json` would outrank. That guard is reached once per path, on
|
|
7
|
+
* the write that never happens again, so it cannot reach the repositories that
|
|
8
|
+
* already received the file. Those are the silent population: the seeded file
|
|
9
|
+
* is neither tracked nor gitignored, so it reads as something a developer
|
|
10
|
+
* created; the postinstall that wrote it is skipped under `CI`, so no pipeline
|
|
11
|
+
* ever reproduces it; and until this check, nothing in Lisa looked for the
|
|
12
|
+
* pair (CodySwannGT/lisa#3858).
|
|
13
|
+
*
|
|
14
|
+
* The whole point is that an affected repository can find ITSELF, which means
|
|
15
|
+
* a probe that cannot read must never render as a clean tree. Every filesystem
|
|
16
|
+
* answer here is three-valued — present, absent, or undeterminable — and the
|
|
17
|
+
* last one fails rather than passing quietly, because "reported nothing"
|
|
18
|
+
* looking identical to "found nothing" is the defect this check exists to end.
|
|
19
|
+
* @module cli/doctor-config-shadowing
|
|
20
|
+
*/
|
|
21
|
+
import { stat } from "node:fs/promises";
|
|
22
|
+
import * as path from "node:path";
|
|
23
|
+
import { installedConfigShadowings, } from "../core/config-shadowing.js";
|
|
24
|
+
/** Name of the config-precedence check as doctor reports it. */
|
|
25
|
+
export const CONFIG_SHADOWING_CHECK_NAME = "Config precedence clean?";
|
|
26
|
+
/**
|
|
27
|
+
* Errno codes that answer the question rather than refusing it: the path is
|
|
28
|
+
* genuinely not there. Anything else — a permission denial, an I/O error, a
|
|
29
|
+
* symlink loop — means the probe could not look, which is not the same answer
|
|
30
|
+
* and must not be spelled the same way.
|
|
31
|
+
*/
|
|
32
|
+
const ABSENT_CODES = new Set(["ENOENT", "ENOTDIR", "ENAMETOOLONG"]);
|
|
33
|
+
/**
|
|
34
|
+
* The errno code of a rejected filesystem call, when it carries one.
|
|
35
|
+
* @param error - Value thrown by a filesystem call
|
|
36
|
+
* @returns The errno code, or undefined when the value carries none
|
|
37
|
+
*/
|
|
38
|
+
function errnoCode(error) {
|
|
39
|
+
const code = typeof error === "object" && error !== null
|
|
40
|
+
? error.code
|
|
41
|
+
: undefined;
|
|
42
|
+
return typeof code === "string" ? code : undefined;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Answer whether a repo-relative path exists, REJECTING when the filesystem
|
|
46
|
+
* declines to say.
|
|
47
|
+
*
|
|
48
|
+
* `fs-extra`'s `pathExists` resolves false for every failure, including a
|
|
49
|
+
* permission denial, so a directory this process cannot read would report the
|
|
50
|
+
* same "no shadowing here" as a healthy one.
|
|
51
|
+
* @param projectRoot - Absolute project root
|
|
52
|
+
* @param relativePath - Repo-relative path to probe
|
|
53
|
+
* @returns True when the path is present, false when it is provably absent
|
|
54
|
+
* @throws {Error} When the filesystem cannot answer
|
|
55
|
+
*/
|
|
56
|
+
async function probeExists(projectRoot, relativePath) {
|
|
57
|
+
try {
|
|
58
|
+
await stat(path.join(projectRoot, relativePath));
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
const code = errnoCode(error);
|
|
63
|
+
if (code !== undefined && ABSENT_CODES.has(code))
|
|
64
|
+
return false;
|
|
65
|
+
throw new Error(`could not read ${relativePath}: ${code ?? String(error)}`, { cause: error });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* One installed shadowing, stated so the reader knows which file is being
|
|
70
|
+
* read, which is being ignored, and what to do about it.
|
|
71
|
+
*
|
|
72
|
+
* Names the losing file explicitly. An operator who has spent an afternoon
|
|
73
|
+
* editing settings that were never loaded needs to be told that specific
|
|
74
|
+
* thing, not that "a precedence conflict exists".
|
|
75
|
+
* @param shadowing - Pair found on disk
|
|
76
|
+
* @returns One operator-readable clause
|
|
77
|
+
*/
|
|
78
|
+
function describeShadowing(shadowing) {
|
|
79
|
+
return (`${shadowing.template} outranks ${shadowing.sibling}, so ${shadowing.tool} ` +
|
|
80
|
+
`reads ${shadowing.template} and the settings in ${shadowing.sibling} are ` +
|
|
81
|
+
`not being read. Lisa seeded ${shadowing.template}; delete it to restore ` +
|
|
82
|
+
`${shadowing.sibling}. \`lisa apply\` will not write it back, because it ` +
|
|
83
|
+
`now stands down whenever a config it would outrank is present`);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Report whether Lisa's seeded config files outrank configs the project wrote
|
|
87
|
+
* itself.
|
|
88
|
+
*
|
|
89
|
+
* Fails rather than warns on a hit: the project's configuration is not being
|
|
90
|
+
* read right now, the remedy is one deletion, and nothing else in the toolchain
|
|
91
|
+
* will ever mention it. Fails equally when the tree could not be inspected,
|
|
92
|
+
* for the reason in the module note.
|
|
93
|
+
* @param targetPath - Project path to inspect
|
|
94
|
+
* @returns Doctor check result
|
|
95
|
+
*/
|
|
96
|
+
export async function checkConfigShadowing(targetPath) {
|
|
97
|
+
try {
|
|
98
|
+
const root = await stat(targetPath);
|
|
99
|
+
if (!root.isDirectory()) {
|
|
100
|
+
throw new Error(`${targetPath} is not a directory`);
|
|
101
|
+
}
|
|
102
|
+
const shadowings = await installedConfigShadowings(relativePath => probeExists(targetPath, relativePath));
|
|
103
|
+
return shadowings.length === 0
|
|
104
|
+
? {
|
|
105
|
+
name: CONFIG_SHADOWING_CHECK_NAME,
|
|
106
|
+
status: "ok",
|
|
107
|
+
detail: "No Lisa-seeded config outranks a config this project wrote",
|
|
108
|
+
}
|
|
109
|
+
: {
|
|
110
|
+
name: CONFIG_SHADOWING_CHECK_NAME,
|
|
111
|
+
status: "fail",
|
|
112
|
+
detail: shadowings.map(describeShadowing).join(". "),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
return {
|
|
117
|
+
name: CONFIG_SHADOWING_CHECK_NAME,
|
|
118
|
+
status: "fail",
|
|
119
|
+
detail: `Could not determine config precedence: ${error instanceof Error ? error.message : String(error)}. Treated as a failure rather than a pass: an unreadable tree is not a clean one`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=doctor-config-shadowing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-config-shadowing.js","sourceRoot":"","sources":["../../src/cli/doctor-config-shadowing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DoctorCheck } from "./doctor.js";
|
|
2
|
+
/** Name of the deploy-intent check as doctor reports it. */
|
|
3
|
+
export declare const RAILS_DEPLOY_INTENT_CHECK_NAME = "Rails production deploy intent stated?";
|
|
4
|
+
/**
|
|
5
|
+
* Report whether a Rails project's deploy workflow states its production
|
|
6
|
+
* intent.
|
|
7
|
+
*
|
|
8
|
+
* Warns rather than fails on a hit: nothing is broken, and the remedy is a
|
|
9
|
+
* human decision about a host-owned file. Fails when the question could not
|
|
10
|
+
* be answered, for the reason in the module note.
|
|
11
|
+
* @param targetPath - Project path to inspect
|
|
12
|
+
* @returns Doctor check result
|
|
13
|
+
*/
|
|
14
|
+
export declare function checkRailsDeployIntent(targetPath: string): Promise<DoctorCheck>;
|
|
15
|
+
//# sourceMappingURL=doctor-rails-deploy-intent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-rails-deploy-intent.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-rails-deploy-intent.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,4DAA4D;AAC5D,eAAO,MAAM,8BAA8B,2CACD,CAAC;AA8G3C;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CA0BtB"}
|