@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
|
@@ -352,6 +352,40 @@ const jsdocRulesOff = Object.fromEntries(Object.keys(jsdoc.rules ?? {}).map(name
|
|
|
352
352
|
* meet — correctness and bug-finding rules (including the SonarJS rules an
|
|
353
353
|
* external scanner also runs, e.g. `sonarjs/no-alphabetical-sort`) stay ON,
|
|
354
354
|
* because those are precisely what the exclusion was hiding.
|
|
355
|
+
*
|
|
356
|
+
* WHAT THIS OVERRIDE COSTS, measured rather than asserted. Every rule below is
|
|
357
|
+
* argued, and none of those arguments says how much they add up to. Run
|
|
358
|
+
* `bun run measure:scripts-profile-gap` for today's number: it differences the
|
|
359
|
+
* config ESLint resolves inside `scripts/` against the config it resolves for
|
|
360
|
+
* the same extension outside it, then lints the tracked tree with every relaxed
|
|
361
|
+
* rule put back. Measured 2026-09-06 against Lisa's own `scripts/` tree — 90
|
|
362
|
+
* tracked files, 1,290 rules resolved for both probes — 33 rules are weaker
|
|
363
|
+
* here, 1 is STRICTER (`sonarjs/no-ignored-exceptions`, promoted on purpose),
|
|
364
|
+
* and restoring all 33 reports 1,115 findings across 76 files. Thirteen of the
|
|
365
|
+
* 33 report nothing, so they suppress a class this tree does not currently
|
|
366
|
+
* produce. Nothing gates on any of it.
|
|
367
|
+
*
|
|
368
|
+
* WHY THAT NUMBER IS NOT SIMPLY A BACKLOG TO BURN DOWN. The largest
|
|
369
|
+
* contributors are `jsdoc/*` (689) and `functional/no-let` (181) — exactly the
|
|
370
|
+
* two families this override argues do not apply to a linear CLI. The families
|
|
371
|
+
* that would be defects wherever they appeared are small and specific:
|
|
372
|
+
* `sonarjs/slow-regex` (32), `sonarjs/no-os-command-from-path` (5),
|
|
373
|
+
* `sonarjs/file-permissions` (2). Whether the boundary belongs where it is, per
|
|
374
|
+
* family rather than in one direction for all 33, is the open question in
|
|
375
|
+
* CodySwannGT/lisa#3773. It is not settled here, and it is not settled by the
|
|
376
|
+
* total.
|
|
377
|
+
*
|
|
378
|
+
* THE SHIPPED PAYLOAD RESOLVES THIS SAME PROFILE. Every `.mjs` Lisa installs
|
|
379
|
+
* lives under a `scripts/` directory, so `scriptsFilePatterns` matches it too:
|
|
380
|
+
* under the config Lisa ships to a consumer, a host's own `scripts/` file and a
|
|
381
|
+
* Lisa-shipped one resolve to identical severities for all 1,290 rules — zero
|
|
382
|
+
* differences. What holds the payload higher is not this override but
|
|
383
|
+
* `tests/unit/config/eslint-shipped-mjs-clean.test.ts`, which re-arms two of
|
|
384
|
+
* these suppressions over a roster it derives from the git index. So a file
|
|
385
|
+
* PROMOTED into a shipped tree meets the stricter bar automatically, with no
|
|
386
|
+
* step for anyone to forget — and a file that stays here never does. That
|
|
387
|
+
* asymmetry is the ticket's subject; do not read the automatic promotion check
|
|
388
|
+
* as closing it.
|
|
355
389
|
* @returns {object} ESLint flat config object for standalone scripts
|
|
356
390
|
*/
|
|
357
391
|
export const getScriptsFilesOverride = () => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/configs/eslint/base.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F;;;;;;;;GAQG;AACH,OAAO,cAAc,MAAM,iDAAiD,CAAC;AAC7E,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,QAAQ,MAAM,oCAAoC,CAAC;AAC1D,OAAO,OAAO,MAAM,uBAAuB,CAAC;AAC5C,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AAEzC,MAAM,eAAe,GAAG,aAAa,CAAC;AAEtC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU;IACV,SAAS;IACT,WAAW;IACX,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,iBAAiB;IACjB,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB;IAChB,0BAA0B;IAC1B,kBAAkB;IAClB,YAAY;IACZ,sBAAsB;IACtB,cAAc;IACd,kBAAkB;IAClB,aAAa;IACb,sBAAsB;IACtB,qEAAqE;IACrE,wEAAwE;IACxE,wEAAwE;IACxE,iEAAiE;IACjE,eAAe;IACf,2BAA2B;IAC3B,wBAAwB;IACxB,aAAa;IACb,eAAe;IACf,wBAAwB;IACxB,iBAAiB;IACjB,kBAAkB;IAClB,YAAY;IACZ,2BAA2B;IAC3B,YAAY;IACZ,QAAQ;IACR,sBAAsB;IACtB,kBAAkB;IAClB,UAAU;IACV,YAAY;IACZ,WAAW;IACX,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,aAAa;IACb,iBAAiB;IACjB,iBAAiB;IACjB,cAAc;IACd,QAAQ;IACR,oBAAoB;IACpB,wEAAwE;IACxE,0EAA0E;IAC1E,yEAAyE;IACzE,0EAA0E;IAC1E,6EAA6E;IAC7E,8DAA8D;IAC9D,EAAE;IACF,6DAA6D;IAC7D,4EAA4E;IAC5E,sEAAsE;IACtE,wDAAwD;IACxD,2EAA2E;IAC3E,yEAAyE;IACzE,uEAAuE;IACvE,mEAAmE;IACnE,aAAa;IACb,YAAY;IACZ,SAAS;IACT,mBAAmB;CACpB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,mBAAmB,EAAE,EAAE;IACvB,QAAQ,EAAE,GAAG;IACb,mBAAmB,EAAE,EAAE;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAoB,EAAE,CAClD;IACE,sBAAsB;IACtB,EAAE,CAAC,OAAO,CAAC,WAAW;IAEtB,2BAA2B;IAC3B,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW;IAE/B,4EAA4E;IAC5E;QACE,OAAO,EAAE;YACP,UAAU;SACX;KACF;IAED,eAAe;IACf,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE;QACE,OAAO,EAAE;YACP,mCAAmC,EAAE,cAAc;SACpD;QACD,KAAK,EAAE;YACL,GAAG,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK;SAC5C;KACF;IAED,gBAAgB;IAChB,KAAK,CAAC,OAAO,CAAC,oCAAoC,CAAC;IAEnD,4CAA4C;IAC5C,QAAQ;IAER,uEAAuE;IACvE,qEAAqE;IACrE,iDAAiD;IACjD,2DAA2D;IAC3D,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;IACrC,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;IACpC,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;IAChC,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;IAC/B,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;IACjC,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;IAC9B,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;IACjC,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;IAC9B,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;CACH,CAAC;AAElC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAAoC,EAAE,EAAE,CAAC,CAAC;IACvE,qFAAqF;IACrF,qGAAqG;IACrG,uFAAuF;IACvF,iEAAiE;IACjE,mBAAmB,EAAE,KAAK;IAE1B,eAAe;IACf,uBAAuB,EAAE;QACvB,MAAM;QACN;YACE,QAAQ,EAAE,CAAC,gBAAgB,CAAC;SAC7B;KACF;IAED,kEAAkE;IAClE,WAAW,EAAE;QACX,OAAO;QACP;YACE,GAAG,EAAE,UAAU,CAAC,QAAQ;YACxB,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,IAAI;SACnB;KACF;IACD,wBAAwB,EAAE;QACxB,OAAO;QACP;YACE,GAAG,EAAE,UAAU,CAAC,mBAAmB;YACnC,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,IAAI;SACnB;KACF;IAED,gBAAgB;IAChB,0EAA0E;IAC1E,8EAA8E;IAC9E,gFAAgF;IAChF,gFAAgF;IAEhF,sEAAsE;IACtE,8BAA8B,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,mBAAmB,CAAC;IACzE,gCAAgC,EAAE,OAAO;IACzC,6BAA6B,EAAE,OAAO;IACtC,6BAA6B,EAAE,OAAO;IACtC,qCAAqC,EAAE,MAAM;IAC7C,iCAAiC,EAAE,MAAM;IACzC,sCAAsC,EAAE,MAAM;IAC9C,2BAA2B,EAAE,MAAM;IACnC,uBAAuB,EAAE,OAAO;IAChC,iCAAiC,EAAE,OAAO;IAC1C,gCAAgC,EAAE,OAAO;IACzC,4BAA4B,EAAE,MAAM;IACpC,+BAA+B,EAAE,KAAK;IACtC,2BAA2B,EAAE,MAAM;IACnC,+BAA+B,EAAE,MAAM;IACvC,kBAAkB,EAAE,MAAM;IAC1B,oDAAoD;IACpD,qBAAqB,EAAE,KAAK;IAC5B,+CAA+C;IAC/C,wCAAwC,EAAE,KAAK;IAC/C,sCAAsC;IACtC,yBAAyB,EAAE,KAAK;IAChC,qEAAqE;IACrE,oCAAoC,EAAE,KAAK;IAC3C,qCAAqC;IACrC,wBAAwB,EAAE,KAAK;IAE/B,kBAAkB;IAClB,uDAAuD,EAAE,OAAO;IAChE,uDAAuD,EAAE,OAAO;IAChE,wDAAwD,EAAE,OAAO;IAEjE,gBAAgB;IAChB,uBAAuB,EAAE,KAAK;IAC9B,cAAc,EAAE,OAAO;IACvB,mBAAmB,EAAE,OAAO;IAC5B,QAAQ,EAAE,OAAO;IACjB,aAAa,EAAE,OAAO;IACtB,iBAAiB,EAAE,OAAO;IAC1B,KAAK,EAAE,OAAO;IACd,qBAAqB,EAAE,OAAO;IAC9B,gBAAgB,EAAE,KAAK;IAEvB,mBAAmB;IACnB,oCAAoC,EAAE,OAAO;IAC7C,mCAAmC,EAAE;QACnC,OAAO;QACP;YACE,iBAAiB,EAAE,IAAI;YACvB,iBAAiB,EAAE,gCAAgC;YACnD,yBAAyB,EAAE,IAAI;YAC/B,8BAA8B,EAAE,IAAI;YACpC,kBAAkB,EAAE,IAAI;SACzB;KACF;IACD,2DAA2D;IAC3D,uCAAuC,EAAE,KAAK;IAC9C,wDAAwD,EAAE,KAAK;IAC/D,mCAAmC,EAAE,KAAK;IAC1C,oCAAoC,EAAE,KAAK;IAC3C,yCAAyC,EAAE,KAAK;IAChD,0CAA0C,EAAE,KAAK;IACjD,4CAA4C,EAAE,KAAK;IAEnD,oEAAoE;IACpE,4CAA4C;IAC5C,2BAA2B,EAAE,KAAK;IAClC,kCAAkC,EAAE,KAAK;IACzC,mCAAmC,EAAE,KAAK;IAC1C,qCAAqC,EAAE,KAAK;IAC5C,sCAAsC,EAAE,KAAK;IAC7C,uCAAuC,EAAE,KAAK;IAC9C,2BAA2B,EAAE,KAAK;IAClC,gCAAgC,EAAE,KAAK;IACvC,iCAAiC,EAAE,KAAK;IACxC,yBAAyB,EAAE,KAAK;IAChC,0BAA0B,EAAE,KAAK;IACjC,0CAA0C,EAAE,KAAK;IACjD,+CAA+C;IAC/C,+FAA+F;IAC/F,2BAA2B,EAAE,KAAK;IAClC,mBAAmB,EAAE,OAAO;IAE5B,cAAc;IACd,qBAAqB,EAAE;QACrB,OAAO;QACP;YACE,OAAO,EAAE;gBACP,mBAAmB,EAAE,IAAI;gBACzB,gBAAgB,EAAE,IAAI;gBACtB,gBAAgB,EAAE,IAAI;gBACtB,uBAAuB,EAAE,KAAK;gBAC9B,kBAAkB,EAAE,KAAK;aAC1B;YACD,QAAQ,EAAE;gBACR,wBAAwB;gBACxB,wBAAwB;gBACxB,iGAAiG;aAClG;SACF;KACF;IACD,2BAA2B,EAAE,OAAO;IACpC,qBAAqB,EAAE,OAAO;IAC9B,uBAAuB,EAAE,OAAO;IAChC,iCAAiC,EAAE,OAAO;IAC1C,mCAAmC,EAAE,OAAO;IAC5C,oCAAoC,EAAE,OAAO;IAC7C,kBAAkB;IAClB,uBAAuB,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,oBAAoB,EAAE,4BAA4B,CAAC,EAAE,CAAC;IAC1J,gBAAgB,EAAE,KAAK;IACvB,0BAA0B,EAAE,KAAK;IACjC,4BAA4B,EAAE,KAAK;IACnC,6BAA6B,EAAE,KAAK;CACrC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC,CAAC;IAC3C,OAAO,EAAE;QACP,GAAG,OAAO,CAAC,OAAO;QAClB,GAAG,OAAO,CAAC,IAAI;QACf,GAAG,OAAO,CAAC,MAAM;KAClB;IACD,aAAa,EAAE;QACb,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,QAAQ;KACrB;CACF,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,CAAC;IACvC,KAAK,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;IAC9B,KAAK,EAAE;QACL,8BAA8B,EAAE,KAAK;QACrC,uCAAuC,EAAE,KAAK,EAAE,iBAAiB;QACjE,wBAAwB,EAAE,KAAK;KAChC;CACF,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;AAEnE;;;;GAIG;AACH,MAAM,aAAa,GAA0B,MAAM,CAAC,WAAW,CAC7D,MAAM,CAAC,IAAI,CACR,KAAwD,CAAC,KAAK,IAAI,EAAE,CACtE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE,EAAE,KAAc,CAAC,CAAC,CACjD,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/configs/eslint/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -69,8 +69,36 @@ export interface ApplyReceipt {
|
|
|
69
69
|
* Written by every apply, including the ones that delete nothing: an empty
|
|
70
70
|
* array asserts "this apply removed nothing", which is a different statement
|
|
71
71
|
* from a receipt too old to have the field.
|
|
72
|
+
*
|
|
73
|
+
* That assertion is true of a single apply and false of an INSTALL, which is
|
|
74
|
+
* why `recordSuccessfulApply` no longer lets an empty list overwrite a
|
|
75
|
+
* populated one — see the carry-forward note there.
|
|
72
76
|
*/
|
|
73
77
|
readonly deleted_paths: readonly string[];
|
|
78
|
+
/**
|
|
79
|
+
* The same removals as prose, with the reason each one was authorised.
|
|
80
|
+
*
|
|
81
|
+
* `deleted_paths` answers "which files"; a consumer looking at a `D` in `git
|
|
82
|
+
* status` needs "and why", and the reason exists — a forced removal carries
|
|
83
|
+
* the ruling that ordered it, and a refused one carries what Lisa could not
|
|
84
|
+
* prove. The apply already composes both lines; until now they went only to
|
|
85
|
+
* a stream, which on this path is nobody.
|
|
86
|
+
*
|
|
87
|
+
* Deliberately wider than `deleted_paths`: it also carries the workflows Lisa
|
|
88
|
+
* DECLINED to remove. A refusal is the fail-closed half of the same decision,
|
|
89
|
+
* and a fail-closed branch that says nothing is indistinguishable from one
|
|
90
|
+
* that never ran.
|
|
91
|
+
*/
|
|
92
|
+
readonly deletion_notices: readonly string[];
|
|
93
|
+
/**
|
|
94
|
+
* When the removals in `deleted_paths` actually happened.
|
|
95
|
+
*
|
|
96
|
+
* Not the same instant as `applied_at` once the record survives a later
|
|
97
|
+
* apply, and conflating them would make a carried-forward removal read as
|
|
98
|
+
* something the most recent apply just did. Null when no apply has recorded
|
|
99
|
+
* a removal here, or when the receipt predates the field.
|
|
100
|
+
*/
|
|
101
|
+
readonly deletions_recorded_at: string | null;
|
|
74
102
|
}
|
|
75
103
|
/**
|
|
76
104
|
* Resolve the single path every reader and writer uses.
|
|
@@ -85,6 +113,41 @@ export declare function resolveApplyReceiptPath(root: string): string;
|
|
|
85
113
|
* @returns The receipt, or null when there is no usable one
|
|
86
114
|
*/
|
|
87
115
|
export declare function readApplyReceipt(root: string): Promise<ApplyReceipt | null>;
|
|
116
|
+
/**
|
|
117
|
+
* The deletion record a new receipt should carry.
|
|
118
|
+
*
|
|
119
|
+
* An apply that removed nothing is not evidence that nothing was removed — on
|
|
120
|
+
* the install path it is the EXPECTED reading, and it arrives from the one
|
|
121
|
+
* process least able to say so. A plain `bun install` runs the apply twice: the
|
|
122
|
+
* postinstall apply removes the files, and the detached reconciliation
|
|
123
|
+
* trampoline re-applies afterwards, finds them already gone, and writes its own
|
|
124
|
+
* receipt over the first. Measured in a scratch fixture: `deleted_paths` held
|
|
125
|
+
* the removed workflow after the first apply and `[]` after the second, while
|
|
126
|
+
* git still showed the file deleted. The trampoline runs with `stdio:
|
|
127
|
+
* "ignore"`, so the process that erased the only durable record of a removal
|
|
128
|
+
* could not have reported doing so (CodySwannGT/lisa#4071).
|
|
129
|
+
*
|
|
130
|
+
* So an empty incoming list KEEPS whatever the receipt already held, and a
|
|
131
|
+
* non-empty one replaces it: those files are gone too, and the newer list is
|
|
132
|
+
* the live one. Carrying a removal forward over-reports at worst — the files
|
|
133
|
+
* really are still missing — and over-reporting a deletion is the safe
|
|
134
|
+
* direction, the same ruling `core/deletion-basis` makes about keeping a file
|
|
135
|
+
* on uncertainty.
|
|
136
|
+
* @param prior - The receipt already on disk, or null when there is none
|
|
137
|
+
* @param incoming - What this apply removed and said about it
|
|
138
|
+
* @param incoming.deletedPaths - Files this apply removed
|
|
139
|
+
* @param incoming.deletionNotices - This apply's removal and refusal lines
|
|
140
|
+
* @param now - Timestamp for a record this apply is creating
|
|
141
|
+
* @returns The deletion record to persist
|
|
142
|
+
*/
|
|
143
|
+
export declare function resolveDeletionRecord(prior: ApplyReceipt | null, incoming: {
|
|
144
|
+
readonly deletedPaths: readonly string[];
|
|
145
|
+
readonly deletionNotices: readonly string[];
|
|
146
|
+
}, now: string): {
|
|
147
|
+
readonly deleted_paths: readonly string[];
|
|
148
|
+
readonly deletion_notices: readonly string[];
|
|
149
|
+
readonly deletions_recorded_at: string | null;
|
|
150
|
+
};
|
|
88
151
|
/**
|
|
89
152
|
* Record that an apply completed successfully.
|
|
90
153
|
*
|
|
@@ -99,6 +162,7 @@ export declare function readApplyReceipt(root: string): Promise<ApplyReceipt | n
|
|
|
99
162
|
* @param details.applyMode - Whether this was a full or postinstall-safe apply
|
|
100
163
|
* @param details.stalePaths - Managed files the apply left out of date
|
|
101
164
|
* @param details.deletedPaths - Files the apply removed
|
|
165
|
+
* @param details.deletionNotices - The apply's removal and refusal lines, with reasons
|
|
102
166
|
* @param now - Clock, injectable for tests
|
|
103
167
|
* @returns True when the receipt was persisted
|
|
104
168
|
*/
|
|
@@ -108,5 +172,6 @@ export declare function recordSuccessfulApply(root: string, details: {
|
|
|
108
172
|
readonly applyMode: ApplyMode;
|
|
109
173
|
readonly stalePaths: readonly string[];
|
|
110
174
|
readonly deletedPaths: readonly string[];
|
|
175
|
+
readonly deletionNotices?: readonly string[];
|
|
111
176
|
}, now?: () => Date): Promise<boolean>;
|
|
112
177
|
//# sourceMappingURL=apply-receipt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-receipt.d.ts","sourceRoot":"","sources":["../../src/core/apply-receipt.ts"],"names":[],"mappings":"AA2BA,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,6BAA6B,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAEhE,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,6CAA6C;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mCAAmC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAC/B;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC
|
|
1
|
+
{"version":3,"file":"apply-receipt.d.ts","sourceRoot":"","sources":["../../src/core/apply-receipt.ts"],"names":[],"mappings":"AA2BA,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,6BAA6B,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAEhE,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,6CAA6C;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mCAAmC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAC/B;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C;;;;;;;OAOG;IACH,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C;AA6BD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAyB9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,YAAY,GAAG,IAAI,EAC1B,QAAQ,EAAE;IACR,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C,EACD,GAAG,EAAE,MAAM,GACV;IACD,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C,CAoBA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C,EACD,GAAG,GAAE,MAAM,IAAuB,GACjC,OAAO,CAAC,OAAO,CAAC,CA+BlB"}
|
|
@@ -86,6 +86,58 @@ export async function readApplyReceipt(root) {
|
|
|
86
86
|
apply_mode: toApplyMode(parsed.apply_mode),
|
|
87
87
|
stale_paths: toPathList(parsed.stale_paths),
|
|
88
88
|
deleted_paths: toPathList(parsed.deleted_paths),
|
|
89
|
+
deletion_notices: toPathList(parsed.deletion_notices),
|
|
90
|
+
deletions_recorded_at: typeof parsed.deletions_recorded_at === "string"
|
|
91
|
+
? parsed.deletions_recorded_at
|
|
92
|
+
: null,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* The deletion record a new receipt should carry.
|
|
97
|
+
*
|
|
98
|
+
* An apply that removed nothing is not evidence that nothing was removed — on
|
|
99
|
+
* the install path it is the EXPECTED reading, and it arrives from the one
|
|
100
|
+
* process least able to say so. A plain `bun install` runs the apply twice: the
|
|
101
|
+
* postinstall apply removes the files, and the detached reconciliation
|
|
102
|
+
* trampoline re-applies afterwards, finds them already gone, and writes its own
|
|
103
|
+
* receipt over the first. Measured in a scratch fixture: `deleted_paths` held
|
|
104
|
+
* the removed workflow after the first apply and `[]` after the second, while
|
|
105
|
+
* git still showed the file deleted. The trampoline runs with `stdio:
|
|
106
|
+
* "ignore"`, so the process that erased the only durable record of a removal
|
|
107
|
+
* could not have reported doing so (CodySwannGT/lisa#4071).
|
|
108
|
+
*
|
|
109
|
+
* So an empty incoming list KEEPS whatever the receipt already held, and a
|
|
110
|
+
* non-empty one replaces it: those files are gone too, and the newer list is
|
|
111
|
+
* the live one. Carrying a removal forward over-reports at worst — the files
|
|
112
|
+
* really are still missing — and over-reporting a deletion is the safe
|
|
113
|
+
* direction, the same ruling `core/deletion-basis` makes about keeping a file
|
|
114
|
+
* on uncertainty.
|
|
115
|
+
* @param prior - The receipt already on disk, or null when there is none
|
|
116
|
+
* @param incoming - What this apply removed and said about it
|
|
117
|
+
* @param incoming.deletedPaths - Files this apply removed
|
|
118
|
+
* @param incoming.deletionNotices - This apply's removal and refusal lines
|
|
119
|
+
* @param now - Timestamp for a record this apply is creating
|
|
120
|
+
* @returns The deletion record to persist
|
|
121
|
+
*/
|
|
122
|
+
export function resolveDeletionRecord(prior, incoming, now) {
|
|
123
|
+
if (incoming.deletedPaths.length > 0) {
|
|
124
|
+
return {
|
|
125
|
+
deleted_paths: [...incoming.deletedPaths],
|
|
126
|
+
deletion_notices: [...incoming.deletionNotices],
|
|
127
|
+
deletions_recorded_at: now,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
if (prior !== null && prior.deleted_paths.length > 0) {
|
|
131
|
+
return {
|
|
132
|
+
deleted_paths: [...prior.deleted_paths],
|
|
133
|
+
deletion_notices: [...prior.deletion_notices],
|
|
134
|
+
deletions_recorded_at: prior.deletions_recorded_at,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
deleted_paths: [],
|
|
139
|
+
deletion_notices: [...incoming.deletionNotices],
|
|
140
|
+
deletions_recorded_at: null,
|
|
89
141
|
};
|
|
90
142
|
}
|
|
91
143
|
/**
|
|
@@ -102,18 +154,26 @@ export async function readApplyReceipt(root) {
|
|
|
102
154
|
* @param details.applyMode - Whether this was a full or postinstall-safe apply
|
|
103
155
|
* @param details.stalePaths - Managed files the apply left out of date
|
|
104
156
|
* @param details.deletedPaths - Files the apply removed
|
|
157
|
+
* @param details.deletionNotices - The apply's removal and refusal lines, with reasons
|
|
105
158
|
* @param now - Clock, injectable for tests
|
|
106
159
|
* @returns True when the receipt was persisted
|
|
107
160
|
*/
|
|
108
161
|
export async function recordSuccessfulApply(root, details, now = () => new Date()) {
|
|
162
|
+
const appliedAt = now().toISOString();
|
|
109
163
|
const receipt = {
|
|
110
164
|
schema_version: APPLY_RECEIPT_SCHEMA_VERSION,
|
|
111
165
|
lisa_version: details.lisaVersion,
|
|
112
|
-
applied_at:
|
|
166
|
+
applied_at: appliedAt,
|
|
113
167
|
harness: details.harness,
|
|
114
168
|
apply_mode: details.applyMode,
|
|
115
169
|
stale_paths: [...details.stalePaths],
|
|
116
|
-
|
|
170
|
+
// Never a plain copy of `details.deletedPaths`: an idempotent re-apply
|
|
171
|
+
// deletes nothing by construction, and letting its empty list win erases
|
|
172
|
+
// the record of a removal that already happened. See resolveDeletionRecord.
|
|
173
|
+
...resolveDeletionRecord(await readApplyReceipt(root), {
|
|
174
|
+
deletedPaths: details.deletedPaths,
|
|
175
|
+
deletionNotices: details.deletionNotices ?? [],
|
|
176
|
+
}, appliedAt),
|
|
117
177
|
};
|
|
118
178
|
const receiptPath = resolveApplyReceiptPath(root);
|
|
119
179
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-receipt.js","sourceRoot":"","sources":["../../src/core/apply-receipt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,0BAA0B,CAAC;AAErE;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"apply-receipt.js","sourceRoot":"","sources":["../../src/core/apply-receipt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is a repository carrying the CDK application preset one that was ever
|
|
3
|
+
* eligible for it?
|
|
4
|
+
*
|
|
5
|
+
* `cdk.json` is now the only thing that admits the preset, and every surface
|
|
6
|
+
* that decides CDK-ness reads {@link CDK_APP_MARKER} rather than its own copy
|
|
7
|
+
* of the filename. That fix reaches the DECISION, not the repositories the old
|
|
8
|
+
* decision already wrote to: the preset's artifacts are `copy-overwrite`, its
|
|
9
|
+
* dependencies are force-merged into `package.json`, and nothing in the
|
|
10
|
+
* toolchain ever asked afterwards whether the repository it wrote them into
|
|
11
|
+
* was a CDK app (CodySwannGT/lisa#3533, CodySwannGT/lisa#3711).
|
|
12
|
+
*
|
|
13
|
+
* The classification lives here, apart from its callers, for the reason the
|
|
14
|
+
* Rails deploy-intent module gives: the seed-time decision and the
|
|
15
|
+
* installed-base check have to ask the identical question, and two spellings
|
|
16
|
+
* would drift silently in the direction that matters — an installed-base check
|
|
17
|
+
* quietly accepting a repository the seed guard would now reject.
|
|
18
|
+
*
|
|
19
|
+
* The naive discriminator is "preset artifacts present, `cdk.json` absent",
|
|
20
|
+
* and on its own it misses part of the affected population. `cdk.json` is
|
|
21
|
+
* itself one of the files the preset delivers, under `create-only`: a
|
|
22
|
+
* repository admitted by the old predicate and then applied received a
|
|
23
|
+
* `cdk.json` it never wrote, which makes it read as a genuine CDK app to any
|
|
24
|
+
* check that stops at the marker. So the marker is asked a second question —
|
|
25
|
+
* does the application entrypoint it names exist? A real CDK app cannot synth
|
|
26
|
+
* without one; a repository holding a seeded marker has never had one.
|
|
27
|
+
*
|
|
28
|
+
* Three states, kept apart because they are three different facts:
|
|
29
|
+
* {@link CdkPresetAdoption} distinguishes a repository that is entitled to the
|
|
30
|
+
* preset, one that is not, and one this module cannot place. Collapsing the
|
|
31
|
+
* third into either of the others is how a population stays unknown.
|
|
32
|
+
* @module core/cdk-preset-adoption
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* The single marker that makes a repository a CDK application.
|
|
36
|
+
*
|
|
37
|
+
* Exported so the detector, the package-lisa type scan, the health template
|
|
38
|
+
* inspection, the setup stack classification, and the installed-base doctor
|
|
39
|
+
* check all read one constant. Depending on a CDK package answers a different
|
|
40
|
+
* question — `aws-cdk-lib` and `constructs` say the repository USES CDK types,
|
|
41
|
+
* which any construct library does, while this file says it IS an app.
|
|
42
|
+
*/
|
|
43
|
+
export declare const CDK_APP_MARKER = "cdk.json";
|
|
44
|
+
/**
|
|
45
|
+
* `copy-overwrite` artifacts that ONLY the CDK preset delivers.
|
|
46
|
+
*
|
|
47
|
+
* Their presence is what says the preset was applied here. The rest of
|
|
48
|
+
* `cdk/copy-overwrite` — `eslint.config.ts`, `knip.json`, `tsconfig.json`,
|
|
49
|
+
* `vitest.config.ts` and friends — is shipped by other stacks too, so it
|
|
50
|
+
* says nothing about which preset a repository received. `.github/workflows/
|
|
51
|
+
* .keep` is technically CDK-exclusive and deliberately excluded: it is a
|
|
52
|
+
* directory placeholder that any repository may create for its own reasons.
|
|
53
|
+
*
|
|
54
|
+
* A regression test derives this set from the shipped stack trees, so an
|
|
55
|
+
* artifact added to the preset later cannot leave this list behind.
|
|
56
|
+
*/
|
|
57
|
+
export declare const CDK_PRESET_ARTIFACTS: readonly ["eslint.cdk.ts", "tsconfig.cdk.json", "vitest.cdk.ts"];
|
|
58
|
+
/**
|
|
59
|
+
* Runtime dependencies `cdk/package-lisa/package.lisa.json` force-merges.
|
|
60
|
+
*
|
|
61
|
+
* `force` means the values are not a suggestion: a repository that removes
|
|
62
|
+
* them by hand gets them back on the next apply for as long as it is still
|
|
63
|
+
* classified as a CDK app. Naming them is half the remedy, which is why the
|
|
64
|
+
* check states them rather than saying "some dependencies".
|
|
65
|
+
*/
|
|
66
|
+
export declare const CDK_PRESET_FORCED_DEPENDENCIES: readonly ["aws-cdk-github-oidc", "constructs", "source-map-support"];
|
|
67
|
+
/** The `bin` entry the CDK preset force-merges, and the file it names. */
|
|
68
|
+
export declare const CDK_PRESET_BIN_ENTRY: {
|
|
69
|
+
readonly name: "infrastructure";
|
|
70
|
+
readonly target: "bin/infrastructure.js";
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* What the CDK application entrypoint declared by a `cdk.json` turns out to
|
|
74
|
+
* be.
|
|
75
|
+
*
|
|
76
|
+
* `unrecognised` is not a defect and not a pass. A `cdk.json` may drive a
|
|
77
|
+
* non-JavaScript app, or name its entry somewhere this module cannot pick a
|
|
78
|
+
* single token out of, and guessing either way would be worse than saying so.
|
|
79
|
+
*/
|
|
80
|
+
export type CdkAppEntry =
|
|
81
|
+
/** A single source file the `app` command names. */
|
|
82
|
+
{
|
|
83
|
+
readonly kind: "resolved";
|
|
84
|
+
readonly source: string;
|
|
85
|
+
readonly present: boolean;
|
|
86
|
+
}
|
|
87
|
+
/** No single source file could be read out of the `app` command. */
|
|
88
|
+
| {
|
|
89
|
+
readonly kind: "unrecognised";
|
|
90
|
+
};
|
|
91
|
+
/** Filesystem evidence a caller gathers before classification. */
|
|
92
|
+
export interface CdkAdoptionEvidence {
|
|
93
|
+
/** Which of {@link CDK_PRESET_ARTIFACTS} are present in the repository. */
|
|
94
|
+
readonly presetArtifacts: readonly string[];
|
|
95
|
+
/** Whether {@link CDK_APP_MARKER} is present — the seed-time predicate. */
|
|
96
|
+
readonly hasAppMarker: boolean;
|
|
97
|
+
/** What the marker declares, or null when there is no marker to read. */
|
|
98
|
+
readonly appEntry: CdkAppEntry | null;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* How a repository stands to the CDK application preset.
|
|
102
|
+
*
|
|
103
|
+
* `absent` and `eligible` are both "nothing to report" to an operator, and are
|
|
104
|
+
* still kept apart: one repository never received the preset and the other
|
|
105
|
+
* received it correctly, and a check that cannot tell them apart cannot say
|
|
106
|
+
* which of its own answers it is giving.
|
|
107
|
+
*/
|
|
108
|
+
export type CdkPresetAdoption =
|
|
109
|
+
/** No CDK preset artifacts here. */
|
|
110
|
+
"absent"
|
|
111
|
+
/** Carries the preset, and is a CDK application. */
|
|
112
|
+
| "eligible"
|
|
113
|
+
/** Carries the preset, and is not a CDK application. */
|
|
114
|
+
| "ineligible"
|
|
115
|
+
/** Carries the preset; the evidence does not settle which. */
|
|
116
|
+
| "undeterminable";
|
|
117
|
+
/**
|
|
118
|
+
* The single source file a CDK `app` command names, when there is exactly one.
|
|
119
|
+
*
|
|
120
|
+
* Split on whitespace and filtered by extension rather than matched with a
|
|
121
|
+
* pattern: the command is arbitrary shell, and a token scan cannot backtrack.
|
|
122
|
+
* Zero candidates means the entry is not a source file this module knows how
|
|
123
|
+
* to look for; more than one means the command is doing something this module
|
|
124
|
+
* should not guess about. Both answer `null`, which the caller reports as
|
|
125
|
+
* undeterminable rather than as a finding.
|
|
126
|
+
* @param appCommand - The `app` value from a `cdk.json`
|
|
127
|
+
* @returns The entry source path, or null when it cannot be singled out
|
|
128
|
+
*/
|
|
129
|
+
export declare function cdkAppEntrySource(appCommand: string): string | null;
|
|
130
|
+
/**
|
|
131
|
+
* Classify a repository's standing against the CDK application preset.
|
|
132
|
+
* @param evidence - Filesystem evidence gathered by the caller
|
|
133
|
+
* @returns Which of the four states the repository is in
|
|
134
|
+
*/
|
|
135
|
+
export declare function classifyCdkPresetAdoption(evidence: CdkAdoptionEvidence): CdkPresetAdoption;
|
|
136
|
+
//# sourceMappingURL=cdk-preset-adoption.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdk-preset-adoption.d.ts","sourceRoot":"","sources":["../../src/core/cdk-preset-adoption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,kEAIvB,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,sEAIjC,CAAC;AAEX,0EAA0E;AAC1E,eAAO,MAAM,oBAAoB;;;CAGvB,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW;AACrB,oDAAoD;AAClD;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AACH,oEAAoE;GAClE;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC;AAEtC,kEAAkE;AAClE,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;CACvC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB;AAC3B,oCAAoC;AAClC,QAAQ;AACV,oDAAoD;GAClD,UAAU;AACZ,wDAAwD;GACtD,YAAY;AACd,8DAA8D;GAC5D,gBAAgB,CAAC;AAyBrB;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQnE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,mBAAmB,GAC5B,iBAAiB,CAOnB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is a repository carrying the CDK application preset one that was ever
|
|
3
|
+
* eligible for it?
|
|
4
|
+
*
|
|
5
|
+
* `cdk.json` is now the only thing that admits the preset, and every surface
|
|
6
|
+
* that decides CDK-ness reads {@link CDK_APP_MARKER} rather than its own copy
|
|
7
|
+
* of the filename. That fix reaches the DECISION, not the repositories the old
|
|
8
|
+
* decision already wrote to: the preset's artifacts are `copy-overwrite`, its
|
|
9
|
+
* dependencies are force-merged into `package.json`, and nothing in the
|
|
10
|
+
* toolchain ever asked afterwards whether the repository it wrote them into
|
|
11
|
+
* was a CDK app (CodySwannGT/lisa#3533, CodySwannGT/lisa#3711).
|
|
12
|
+
*
|
|
13
|
+
* The classification lives here, apart from its callers, for the reason the
|
|
14
|
+
* Rails deploy-intent module gives: the seed-time decision and the
|
|
15
|
+
* installed-base check have to ask the identical question, and two spellings
|
|
16
|
+
* would drift silently in the direction that matters — an installed-base check
|
|
17
|
+
* quietly accepting a repository the seed guard would now reject.
|
|
18
|
+
*
|
|
19
|
+
* The naive discriminator is "preset artifacts present, `cdk.json` absent",
|
|
20
|
+
* and on its own it misses part of the affected population. `cdk.json` is
|
|
21
|
+
* itself one of the files the preset delivers, under `create-only`: a
|
|
22
|
+
* repository admitted by the old predicate and then applied received a
|
|
23
|
+
* `cdk.json` it never wrote, which makes it read as a genuine CDK app to any
|
|
24
|
+
* check that stops at the marker. So the marker is asked a second question —
|
|
25
|
+
* does the application entrypoint it names exist? A real CDK app cannot synth
|
|
26
|
+
* without one; a repository holding a seeded marker has never had one.
|
|
27
|
+
*
|
|
28
|
+
* Three states, kept apart because they are three different facts:
|
|
29
|
+
* {@link CdkPresetAdoption} distinguishes a repository that is entitled to the
|
|
30
|
+
* preset, one that is not, and one this module cannot place. Collapsing the
|
|
31
|
+
* third into either of the others is how a population stays unknown.
|
|
32
|
+
* @module core/cdk-preset-adoption
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* The single marker that makes a repository a CDK application.
|
|
36
|
+
*
|
|
37
|
+
* Exported so the detector, the package-lisa type scan, the health template
|
|
38
|
+
* inspection, the setup stack classification, and the installed-base doctor
|
|
39
|
+
* check all read one constant. Depending on a CDK package answers a different
|
|
40
|
+
* question — `aws-cdk-lib` and `constructs` say the repository USES CDK types,
|
|
41
|
+
* which any construct library does, while this file says it IS an app.
|
|
42
|
+
*/
|
|
43
|
+
export const CDK_APP_MARKER = "cdk.json";
|
|
44
|
+
/**
|
|
45
|
+
* `copy-overwrite` artifacts that ONLY the CDK preset delivers.
|
|
46
|
+
*
|
|
47
|
+
* Their presence is what says the preset was applied here. The rest of
|
|
48
|
+
* `cdk/copy-overwrite` — `eslint.config.ts`, `knip.json`, `tsconfig.json`,
|
|
49
|
+
* `vitest.config.ts` and friends — is shipped by other stacks too, so it
|
|
50
|
+
* says nothing about which preset a repository received. `.github/workflows/
|
|
51
|
+
* .keep` is technically CDK-exclusive and deliberately excluded: it is a
|
|
52
|
+
* directory placeholder that any repository may create for its own reasons.
|
|
53
|
+
*
|
|
54
|
+
* A regression test derives this set from the shipped stack trees, so an
|
|
55
|
+
* artifact added to the preset later cannot leave this list behind.
|
|
56
|
+
*/
|
|
57
|
+
export const CDK_PRESET_ARTIFACTS = [
|
|
58
|
+
"eslint.cdk.ts",
|
|
59
|
+
"tsconfig.cdk.json",
|
|
60
|
+
"vitest.cdk.ts",
|
|
61
|
+
];
|
|
62
|
+
/**
|
|
63
|
+
* Runtime dependencies `cdk/package-lisa/package.lisa.json` force-merges.
|
|
64
|
+
*
|
|
65
|
+
* `force` means the values are not a suggestion: a repository that removes
|
|
66
|
+
* them by hand gets them back on the next apply for as long as it is still
|
|
67
|
+
* classified as a CDK app. Naming them is half the remedy, which is why the
|
|
68
|
+
* check states them rather than saying "some dependencies".
|
|
69
|
+
*/
|
|
70
|
+
export const CDK_PRESET_FORCED_DEPENDENCIES = [
|
|
71
|
+
"aws-cdk-github-oidc",
|
|
72
|
+
"constructs",
|
|
73
|
+
"source-map-support",
|
|
74
|
+
];
|
|
75
|
+
/** The `bin` entry the CDK preset force-merges, and the file it names. */
|
|
76
|
+
export const CDK_PRESET_BIN_ENTRY = {
|
|
77
|
+
name: "infrastructure",
|
|
78
|
+
target: "bin/infrastructure.js",
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* File extensions a CDK `app` command can name its entry source with.
|
|
82
|
+
*
|
|
83
|
+
* Deliberately not exhaustive over every runtime: an `app` this list does not
|
|
84
|
+
* match yields `unrecognised`, which is reported as such rather than folded
|
|
85
|
+
* into either verdict.
|
|
86
|
+
*/
|
|
87
|
+
const ENTRY_EXTENSIONS = [".ts", ".tsx", ".js", ".mjs", ".cjs"];
|
|
88
|
+
/** Quote characters a shell-ish `app` command may wrap a path in. */
|
|
89
|
+
const QUOTES = new Set(['"', "'", "`"]);
|
|
90
|
+
/**
|
|
91
|
+
* Strip one layer of surrounding quotes from a command token.
|
|
92
|
+
* @param token - Whitespace-delimited token from an `app` command
|
|
93
|
+
* @returns The token without its outer quotes
|
|
94
|
+
*/
|
|
95
|
+
function unquote(token) {
|
|
96
|
+
const first = token.charAt(0);
|
|
97
|
+
if (token.length < 2 || !QUOTES.has(first))
|
|
98
|
+
return token;
|
|
99
|
+
return token.charAt(token.length - 1) === first ? token.slice(1, -1) : token;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The single source file a CDK `app` command names, when there is exactly one.
|
|
103
|
+
*
|
|
104
|
+
* Split on whitespace and filtered by extension rather than matched with a
|
|
105
|
+
* pattern: the command is arbitrary shell, and a token scan cannot backtrack.
|
|
106
|
+
* Zero candidates means the entry is not a source file this module knows how
|
|
107
|
+
* to look for; more than one means the command is doing something this module
|
|
108
|
+
* should not guess about. Both answer `null`, which the caller reports as
|
|
109
|
+
* undeterminable rather than as a finding.
|
|
110
|
+
* @param appCommand - The `app` value from a `cdk.json`
|
|
111
|
+
* @returns The entry source path, or null when it cannot be singled out
|
|
112
|
+
*/
|
|
113
|
+
export function cdkAppEntrySource(appCommand) {
|
|
114
|
+
const candidates = appCommand
|
|
115
|
+
.split(/[ \t\r\n]+/u)
|
|
116
|
+
.map(unquote)
|
|
117
|
+
.filter(token => ENTRY_EXTENSIONS.some(extension => token.endsWith(extension)));
|
|
118
|
+
return candidates.length === 1 ? (candidates[0] ?? null) : null;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Classify a repository's standing against the CDK application preset.
|
|
122
|
+
* @param evidence - Filesystem evidence gathered by the caller
|
|
123
|
+
* @returns Which of the four states the repository is in
|
|
124
|
+
*/
|
|
125
|
+
export function classifyCdkPresetAdoption(evidence) {
|
|
126
|
+
if (evidence.presetArtifacts.length === 0)
|
|
127
|
+
return "absent";
|
|
128
|
+
if (!evidence.hasAppMarker)
|
|
129
|
+
return "ineligible";
|
|
130
|
+
if (evidence.appEntry === null || evidence.appEntry.kind === "unrecognised") {
|
|
131
|
+
return "undeterminable";
|
|
132
|
+
}
|
|
133
|
+
return evidence.appEntry.present ? "eligible" : "ineligible";
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=cdk-preset-adoption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdk-preset-adoption.js","sourceRoot":"","sources":["../../src/core/cdk-preset-adoption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AAEzC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,eAAe;IACf,mBAAmB;IACnB,eAAe;CACP,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,qBAAqB;IACrB,YAAY;IACZ,oBAAoB;CACZ,CAAC;AAEX,0EAA0E;AAC1E,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,gBAAgB;IACtB,MAAM,EAAE,uBAAuB;CACvB,CAAC;AAgDX;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAEzE,qEAAqE;AACrE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAExC;;;;GAIG;AACH,SAAS,OAAO,CAAC,KAAa;IAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/E,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,MAAM,UAAU,GAAG,UAAU;SAC1B,KAAK,CAAC,aAAa,CAAC;SACpB,GAAG,CAAC,OAAO,CAAC;SACZ,MAAM,CAAC,KAAK,CAAC,EAAE,CACd,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAC9D,CAAC;IACJ,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAA6B;IAE7B,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC3D,IAAI,CAAC,QAAQ,CAAC,YAAY;QAAE,OAAO,YAAY,CAAC;IAChD,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5E,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC;AAC/D,CAAC"}
|
|
@@ -69,4 +69,40 @@ export declare function shadowedConfigSibling(relativePath: string, exists: (can
|
|
|
69
69
|
* @returns One line for the apply summary
|
|
70
70
|
*/
|
|
71
71
|
export declare function shadowedConfigNote(template: string, tool: string, sibling: string): string;
|
|
72
|
+
/**
|
|
73
|
+
* One already-installed shadowing: Lisa's template on disk, outranking a
|
|
74
|
+
* config the project wrote itself.
|
|
75
|
+
*/
|
|
76
|
+
export interface InstalledConfigShadowing {
|
|
77
|
+
/** The tool whose configuration is being outranked. */
|
|
78
|
+
readonly tool: string;
|
|
79
|
+
/** Repo-relative path of the Lisa-seeded template that wins. */
|
|
80
|
+
readonly template: string;
|
|
81
|
+
/** Repo-relative path of the project's own config that loses. */
|
|
82
|
+
readonly sibling: string;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Every shadowing pair that is ALREADY on disk in a project.
|
|
86
|
+
*
|
|
87
|
+
* The counterpart to {@link shadowedConfigSibling}, asking the same question
|
|
88
|
+
* one tense later. That function decides whether to write a file that is not
|
|
89
|
+
* there yet, so it is reached exactly once per path and never again; a
|
|
90
|
+
* repository that received the template before the guard existed is past that
|
|
91
|
+
* decision forever and nothing else looks. This function is what lets such a
|
|
92
|
+
* repository find itself: it requires the template to be PRESENT, then asks
|
|
93
|
+
* whether an outranked sibling is present too.
|
|
94
|
+
*
|
|
95
|
+
* Both arms read {@link CONFIG_FAMILIES}, deliberately. A second copy of
|
|
96
|
+
* "which filenames outrank Lisa's" would drift out of step with the guard, and
|
|
97
|
+
* the drift would be silent in exactly the way the original defect was.
|
|
98
|
+
*
|
|
99
|
+
* `exists` is expected to REJECT when it cannot determine an answer rather
|
|
100
|
+
* than resolve false. A probe that cannot read reports the same "nothing
|
|
101
|
+
* found" as a clean tree, which is this whole class of defect wearing the
|
|
102
|
+
* detector's hat.
|
|
103
|
+
* @param exists - Predicate answering whether a repo-relative path is present,
|
|
104
|
+
* rejecting when the answer cannot be determined
|
|
105
|
+
* @returns Every installed shadowing pair, empty when the project is clean
|
|
106
|
+
*/
|
|
107
|
+
export declare function installedConfigShadowings(exists: (candidateRelativePath: string) => Promise<boolean>): Promise<readonly InstalledConfigShadowing[]>;
|
|
72
108
|
//# sourceMappingURL=config-shadowing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-shadowing.d.ts","sourceRoot":"","sources":["../../src/core/config-shadowing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAyGH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC1D,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAa1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,MAAM,CAMR"}
|
|
1
|
+
{"version":3,"file":"config-shadowing.d.ts","sourceRoot":"","sources":["../../src/core/config-shadowing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAyGH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC1D,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAa1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,MAAM,CAMR;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC1D,OAAO,CAAC,SAAS,wBAAwB,EAAE,CAAC,CAiB9C"}
|