@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
package/dist/utils/path-utils.js
CHANGED
|
@@ -43,4 +43,45 @@ export function getDirname(filePath) {
|
|
|
43
43
|
export function getBasename(filePath) {
|
|
44
44
|
return path.basename(filePath);
|
|
45
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Whether one path is a root itself or lies beneath it, judged on a path
|
|
48
|
+
* boundary rather than a string prefix.
|
|
49
|
+
*
|
|
50
|
+
* ## The defect this exists against
|
|
51
|
+
*
|
|
52
|
+
* `"/a/land3716-tmp/f".startsWith("/a/land3716")` is true, so a bare prefix
|
|
53
|
+
* comparison reports a SIBLING as being inside the root (CodySwannGT/lisa#3808).
|
|
54
|
+
* The convention agents follow makes that the common shape, not the exotic one:
|
|
55
|
+
* a scratch worktree at `<TMPDIR>/<name>` and its scratch directory at
|
|
56
|
+
* `<TMPDIR>/<name>-tmp` are siblings, and the second string-prefixes the first.
|
|
57
|
+
*
|
|
58
|
+
* ## What it decides, and what it does not
|
|
59
|
+
*
|
|
60
|
+
* It is **lexical**. Both arguments are resolved to absolute paths and `..`
|
|
61
|
+
* segments are collapsed, so traversal and relative inputs are handled, and a
|
|
62
|
+
* trailing separator is irrelevant. It does NOT follow symlinks: a link inside
|
|
63
|
+
* the root whose target is outside it still reports as inside, because the path
|
|
64
|
+
* as written is inside. A caller that must refuse such an escape has to resolve
|
|
65
|
+
* the real paths itself and ask this question about those instead.
|
|
66
|
+
*
|
|
67
|
+
* It fails closed. An argument that cannot name a path — the empty string,
|
|
68
|
+
* which `path.resolve` would silently turn into the working directory — reads
|
|
69
|
+
* as NOT contained, because "inside" is the answer that grants access.
|
|
70
|
+
* @param root Directory the candidate is tested against
|
|
71
|
+
* @param candidate Path being tested
|
|
72
|
+
* @returns True when `candidate` is `root` or lives beneath it
|
|
73
|
+
*/
|
|
74
|
+
export function isPathInside(root, candidate) {
|
|
75
|
+
if (root === "" || candidate === "") {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
const relative = path.relative(path.resolve(root), path.resolve(candidate));
|
|
79
|
+
if (relative === "") {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
if (path.isAbsolute(relative)) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
return relative !== ".." && !relative.startsWith(`..${path.sep}`);
|
|
86
|
+
}
|
|
46
87
|
//# sourceMappingURL=path-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/utils/path-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,UAAkB;IAClE,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,GAAG,QAAkB;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC"}
|
|
1
|
+
{"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/utils/path-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,UAAkB;IAClE,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,GAAG,QAAkB;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,SAAiB;IAC1D,IAAI,IAAI,KAAK,EAAE,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5E,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -40,6 +40,13 @@ jobs:
|
|
|
40
40
|
pull-requests: read
|
|
41
41
|
uses: CodySwannGT/lisa/.github/workflows/quality.yml@main
|
|
42
42
|
with:
|
|
43
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
44
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
45
|
+
# this repository with no pull request here. This is the contract major it
|
|
46
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
47
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
48
|
+
# (CodySwannGT/lisa#3698).
|
|
49
|
+
expected_workflow_contract_major: '1'
|
|
43
50
|
node_version: '22.21.1'
|
|
44
51
|
package_manager: 'bun'
|
|
45
52
|
skip_jobs: 'test:e2e,playwright_e2e'
|
|
@@ -66,6 +73,13 @@ jobs:
|
|
|
66
73
|
needs: [quality]
|
|
67
74
|
uses: CodySwannGT/lisa/.github/workflows/lighthouse.yml@main
|
|
68
75
|
with:
|
|
76
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
77
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
78
|
+
# this repository with no pull request here. This is the contract major it
|
|
79
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
80
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
81
|
+
# (CodySwannGT/lisa#3698).
|
|
82
|
+
expected_workflow_contract_major: '1'
|
|
69
83
|
node_version: '22.21.1'
|
|
70
84
|
package_manager: 'bun'
|
|
71
85
|
|
|
@@ -74,5 +88,12 @@ jobs:
|
|
|
74
88
|
needs: [quality]
|
|
75
89
|
uses: CodySwannGT/lisa/.github/workflows/zap-baseline-expo.yml@main
|
|
76
90
|
with:
|
|
91
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
92
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
93
|
+
# this repository with no pull request here. This is the contract major it
|
|
94
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
95
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
96
|
+
# (CodySwannGT/lisa#3698).
|
|
97
|
+
expected_workflow_contract_major: '1'
|
|
77
98
|
node_version: '22.21.1'
|
|
78
99
|
package_manager: 'bun'
|
|
@@ -106,6 +106,13 @@ jobs:
|
|
|
106
106
|
uses: CodySwannGT/lisa/.github/workflows/gates.yml@main
|
|
107
107
|
needs: [determine_environment]
|
|
108
108
|
with:
|
|
109
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
110
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
111
|
+
# this repository with no pull request here. This is the contract major it
|
|
112
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
113
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
114
|
+
# (CodySwannGT/lisa#3698).
|
|
115
|
+
expected_workflow_contract_major: '1'
|
|
109
116
|
moment: pre-deploy:${{ needs.determine_environment.outputs.environment }}
|
|
110
117
|
node_version: '22.21.1'
|
|
111
118
|
package_manager: 'bun'
|
|
@@ -121,6 +128,13 @@ jobs:
|
|
|
121
128
|
contents: write
|
|
122
129
|
pull-requests: read
|
|
123
130
|
with:
|
|
131
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
132
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
133
|
+
# this repository with no pull request here. This is the contract major it
|
|
134
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
135
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
136
|
+
# (CodySwannGT/lisa#3698).
|
|
137
|
+
expected_workflow_contract_major: '1'
|
|
124
138
|
environment: ${{ needs.determine_environment.outputs.environment }}
|
|
125
139
|
release_strategy: 'standard-version'
|
|
126
140
|
skip_jobs: 'test:e2e,test:unit,test:integration'
|
|
@@ -196,6 +210,13 @@ jobs:
|
|
|
196
210
|
permissions:
|
|
197
211
|
contents: read
|
|
198
212
|
with:
|
|
213
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
214
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
215
|
+
# this repository with no pull request here. This is the contract major it
|
|
216
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
217
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
218
|
+
# (CodySwannGT/lisa#3698).
|
|
219
|
+
expected_workflow_contract_major: '1'
|
|
199
220
|
environment: ${{ needs.determine_environment.outputs.environment }}
|
|
200
221
|
secrets:
|
|
201
222
|
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
|
|
@@ -347,6 +368,13 @@ jobs:
|
|
|
347
368
|
needs: [determine_environment, deploy]
|
|
348
369
|
if: ${{ always() && !cancelled() && needs.deploy.result == 'success' }}
|
|
349
370
|
with:
|
|
371
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
372
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
373
|
+
# this repository with no pull request here. This is the contract major it
|
|
374
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
375
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
376
|
+
# (CodySwannGT/lisa#3698).
|
|
377
|
+
expected_workflow_contract_major: '1'
|
|
350
378
|
moment: post-deploy:${{ needs.determine_environment.outputs.environment }}
|
|
351
379
|
node_version: '22.21.1'
|
|
352
380
|
package_manager: 'bun'
|
|
@@ -96,6 +96,13 @@ jobs:
|
|
|
96
96
|
name: 📱 Maestro Native E2E
|
|
97
97
|
uses: CodySwannGT/lisa/.github/workflows/maestro-native-e2e.yml@main
|
|
98
98
|
with:
|
|
99
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
100
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
101
|
+
# this repository with no pull request here. This is the contract major it
|
|
102
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
103
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
104
|
+
# (CodySwannGT/lisa#3698).
|
|
105
|
+
expected_workflow_contract_major: '1'
|
|
99
106
|
platform: ${{ inputs.platform || 'all' }}
|
|
100
107
|
# Return the shared environment to a known state before either platform
|
|
101
108
|
# starts. Both lifecycle commands are mandatory. If this project needs no
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
name: 🧹 Nightly E2E Bypass Reaper
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Writes the durable waiver record, then removes a used `nightly-e2e-bypass`
|
|
7
|
+
# label, when its pull request closes.
|
|
7
8
|
#
|
|
8
9
|
# ## Why removal happens on CLOSE and not on USE
|
|
9
10
|
#
|
|
@@ -20,12 +21,36 @@ name: 🧹 Nightly E2E Bypass Reaper
|
|
|
20
21
|
# applied (default 24, hard ceiling 72). The reaper keeps the label list honest;
|
|
21
22
|
# it is not what bounds the waiver's lifetime.
|
|
22
23
|
#
|
|
23
|
-
# ## Why the
|
|
24
|
+
# ## Why the RECORD is written before the label is stripped
|
|
24
25
|
#
|
|
25
|
-
# The audit
|
|
26
|
-
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
26
|
+
# The audit lives on the gate run that honoured the bypass — its job summary,
|
|
27
|
+
# its `::notice::` annotation, its `audit_json` output — and none of that is
|
|
28
|
+
# reachable from the pull request a reviewer is looking at, nor from any
|
|
29
|
+
# repository-wide question. Measured on a consumer: the LABEL was the only
|
|
30
|
+
# index of "which merges went past this gate on a waiver", and stripping it
|
|
31
|
+
# withdrew the REQUEST and erased the INDEX in the same call. After a waived
|
|
32
|
+
# merge closed, the repository could no longer answer "what shipped on a
|
|
33
|
+
# waiver, and why" — a compliance question as much as an engineering one.
|
|
34
|
+
#
|
|
35
|
+
# So this workflow re-derives the waiver from the live pull request FIRST and
|
|
36
|
+
# posts a marker-delimited record comment, and only then strips the label. The
|
|
37
|
+
# ordering is the whole point, and it is enforced by the step order plus the
|
|
38
|
+
# refusal below: if the record could not be established, the label is LEFT ON.
|
|
39
|
+
# A label nobody removed is untidy; an unrecorded waived merge is unauditable,
|
|
40
|
+
# and untidy is the cheaper of the two.
|
|
41
|
+
#
|
|
42
|
+
# ## Why an EXPIRED waiver is still recorded
|
|
43
|
+
#
|
|
44
|
+
# By the time a pull request closes the waiver has often lapsed, and the
|
|
45
|
+
# re-derivation says `refused`. That is not a reason to write nothing — an
|
|
46
|
+
# expired waiver still shipped something, and those are exactly the merges most
|
|
47
|
+
# worth being able to find later. The record carries the state it was recorded
|
|
48
|
+
# in rather than pretending the waiver was fine.
|
|
49
|
+
#
|
|
50
|
+
# The one state that is NOT recorded is `not_determined`: the live pull request
|
|
51
|
+
# could not be read, so nothing was established. Writing a confident-looking
|
|
52
|
+
# record there would be worse than writing none, so the workflow fails and
|
|
53
|
+
# leaves the label in place for a re-run to catch.
|
|
29
54
|
|
|
30
55
|
on:
|
|
31
56
|
pull_request_target:
|
|
@@ -33,8 +58,8 @@ on:
|
|
|
33
58
|
|
|
34
59
|
permissions:
|
|
35
60
|
contents: read
|
|
36
|
-
# The one write in the whole nightly-gate standard
|
|
37
|
-
# label from an already-closed PR.
|
|
61
|
+
# The one write in the whole nightly-gate standard: posting the waiver record
|
|
62
|
+
# and removing one label from an already-closed PR.
|
|
38
63
|
pull-requests: write
|
|
39
64
|
|
|
40
65
|
concurrency:
|
|
@@ -43,23 +68,109 @@ concurrency:
|
|
|
43
68
|
|
|
44
69
|
jobs:
|
|
45
70
|
reap:
|
|
46
|
-
name: 🧹
|
|
71
|
+
name: 🧹 Record the waiver, then remove its label
|
|
47
72
|
# `pull_request_target` runs with a writable token against the BASE repo, so
|
|
48
73
|
# this job must never check out or execute pull-request code. It does not:
|
|
49
|
-
#
|
|
74
|
+
# the checkout below pins the BASE ref explicitly and nothing in this file
|
|
75
|
+
# names the pull request's head commit, so the only code that runs here is
|
|
76
|
+
# code already merged into the base branch and reviewed on its own terms.
|
|
77
|
+
#
|
|
78
|
+
# The reaper checks out at all because it re-derives the waiver through the
|
|
79
|
+
# SAME guard the gate uses. The alternative — restating that derivation in
|
|
80
|
+
# shell here — is a second implementation of "is this waiver good?", and two
|
|
81
|
+
# of those drift.
|
|
50
82
|
if: contains(github.event.pull_request.labels.*.name, 'nightly-e2e-bypass')
|
|
51
83
|
runs-on: ubuntu-latest
|
|
52
|
-
timeout-minutes:
|
|
84
|
+
timeout-minutes: 10
|
|
53
85
|
steps:
|
|
86
|
+
- name: 📥 Checkout the BASE branch (never the pull request's head)
|
|
87
|
+
uses: actions/checkout@v6
|
|
88
|
+
with:
|
|
89
|
+
ref: ${{ github.event.pull_request.base.ref }}
|
|
90
|
+
persist-credentials: false
|
|
91
|
+
|
|
92
|
+
- name: 🔧 Setup Node.js
|
|
93
|
+
uses: actions/setup-node@v6
|
|
94
|
+
with:
|
|
95
|
+
package-manager-cache: false
|
|
96
|
+
node-version: '22'
|
|
97
|
+
|
|
98
|
+
- name: 🔎 Locate the guard
|
|
99
|
+
id: guard
|
|
100
|
+
env:
|
|
101
|
+
# Two addresses for the SAME file, not a fallback to a different
|
|
102
|
+
# implementation: `lisa apply` installs the guard into `scripts/`, and
|
|
103
|
+
# a repository that has not run it yet still carries the template.
|
|
104
|
+
INSTALLED: scripts/check-nightly-e2e-health.mjs
|
|
105
|
+
TEMPLATE: typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs
|
|
106
|
+
run: |
|
|
107
|
+
set -euo pipefail
|
|
108
|
+
if [[ -f "$INSTALLED" ]]; then
|
|
109
|
+
echo "path=$INSTALLED" >> "$GITHUB_OUTPUT"
|
|
110
|
+
elif [[ -f "$TEMPLATE" ]]; then
|
|
111
|
+
echo "path=$TEMPLATE" >> "$GITHUB_OUTPUT"
|
|
112
|
+
else
|
|
113
|
+
echo "::error title=Nightly E2E guard is not installed::Neither '$INSTALLED' nor '$TEMPLATE' exists on this branch, so the waiver cannot be re-derived. Refusing to strip the bypass label: that would erase the only index of this waived merge. Run \`lisa apply\`."
|
|
114
|
+
exit 1
|
|
115
|
+
fi
|
|
116
|
+
|
|
117
|
+
- name: 🧾 Re-derive the waiver from the live pull request
|
|
118
|
+
id: waiver
|
|
119
|
+
# A refused waiver exits 1 by design — that exit code is the merge-time
|
|
120
|
+
# contract — and on THIS path a refusal is an ordinary outcome to be
|
|
121
|
+
# recorded, not a failure. The state is read from the output instead,
|
|
122
|
+
# and the step below decides what each state means here.
|
|
123
|
+
continue-on-error: true
|
|
124
|
+
env:
|
|
125
|
+
GITHUB_TOKEN: ${{ github.token }}
|
|
126
|
+
GITHUB_REPOSITORY: ${{ github.repository }}
|
|
127
|
+
NIGHTLY_PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
128
|
+
NIGHTLY_BYPASS_LABEL: nightly-e2e-bypass
|
|
129
|
+
GUARD: ${{ steps.guard.outputs.path }}
|
|
130
|
+
run: node "$GUARD" --waiver-verdict
|
|
131
|
+
|
|
132
|
+
- name: 🗒️ Post the durable waiver record
|
|
133
|
+
env:
|
|
134
|
+
GH_TOKEN: ${{ github.token }}
|
|
135
|
+
REPO: ${{ github.repository }}
|
|
136
|
+
PR: ${{ github.event.pull_request.number }}
|
|
137
|
+
STATE: ${{ steps.waiver.outputs.waiver_state }}
|
|
138
|
+
RECORD: ${{ steps.waiver.outputs.waiver_record }}
|
|
139
|
+
MARKER: NIGHTLY-E2E-BYPASS-RECORD
|
|
140
|
+
run: |
|
|
141
|
+
set -euo pipefail
|
|
142
|
+
if [[ "$STATE" == "none" ]]; then
|
|
143
|
+
echo "::notice title=No waiver to record::The live pull request carries no bypass label, so somebody removed it between the close event and this run. There is nothing to record and nothing to strip."
|
|
144
|
+
exit 0
|
|
145
|
+
fi
|
|
146
|
+
if [[ "$STATE" != "waived" && "$STATE" != "refused" ]]; then
|
|
147
|
+
echo "::error title=Waiver NOT recorded::The waiver could not be re-derived (state: '${STATE:-unreadable}'), so nothing was established about it. Refusing to write a record that would look authoritative and refusing to strip the label, which is currently the only index of this waived merge. Re-run this workflow once the API is readable."
|
|
148
|
+
exit 1
|
|
149
|
+
fi
|
|
150
|
+
# Idempotent. `pull_request_target` can fire more than once for a
|
|
151
|
+
# close, and two identical records read as two waived merges.
|
|
152
|
+
if gh api --paginate "repos/$REPO/issues/$PR/comments" \
|
|
153
|
+
--jq '.[].body' 2>/dev/null | grep -qF "$MARKER"; then
|
|
154
|
+
echo "::notice title=Waiver already recorded::#$PR already carries a $MARKER comment. Not posting a second one."
|
|
155
|
+
exit 0
|
|
156
|
+
fi
|
|
157
|
+
printf '%s\n' \
|
|
158
|
+
"Recorded by the nightly-E2E bypass reaper when this pull request closed, BEFORE its \`nightly-e2e-bypass\` label was stripped." \
|
|
159
|
+
"" \
|
|
160
|
+
"$RECORD" > "$RUNNER_TEMP/waiver-record.md"
|
|
161
|
+
gh pr comment "$PR" --repo "$REPO" --body-file "$RUNNER_TEMP/waiver-record.md"
|
|
162
|
+
echo "::notice title=Waiver recorded::The waiver on #$PR is now durable: it survives the label removal below."
|
|
163
|
+
|
|
54
164
|
- name: 🧹 Strip the bypass label
|
|
55
165
|
env:
|
|
56
166
|
GH_TOKEN: ${{ github.token }}
|
|
57
167
|
REPO: ${{ github.repository }}
|
|
58
168
|
PR: ${{ github.event.pull_request.number }}
|
|
59
169
|
LABEL: nightly-e2e-bypass
|
|
170
|
+
MERGED: ${{ github.event.pull_request.merged && 'merged' || 'closed' }}
|
|
60
171
|
run: |
|
|
61
172
|
set -euo pipefail
|
|
62
|
-
echo "Removing '$LABEL' from $REPO#$PR (state: $
|
|
173
|
+
echo "Removing '$LABEL' from $REPO#$PR (state: $MERGED)."
|
|
63
174
|
# ONE delete. Someone removing the label between the event and this
|
|
64
175
|
# run is the desired end state, not a failure — but a permission or
|
|
65
176
|
# API problem must NEVER look like a successful reap, or the label
|
|
@@ -75,7 +186,7 @@ jobs:
|
|
|
75
186
|
deleted=$?
|
|
76
187
|
set -e
|
|
77
188
|
if [[ $deleted -eq 0 ]]; then
|
|
78
|
-
echo "::notice title=Nightly E2E bypass label removed::'$LABEL' cleared from #$PR after close. The
|
|
189
|
+
echo "::notice title=Nightly E2E bypass label removed::'$LABEL' cleared from #$PR after close. The waiver record posted above outlives it, and the audit on the gate run that honoured it is unaffected."
|
|
79
190
|
exit 0
|
|
80
191
|
fi
|
|
81
192
|
if gh api "repos/$REPO/issues/$PR/labels" --jq '.[].name' 2>/dev/null \
|
|
@@ -166,6 +166,13 @@ jobs:
|
|
|
166
166
|
# `scripts/check-template-workflow-refs.mjs`.
|
|
167
167
|
uses: CodySwannGT/lisa/.github/workflows/nightly-e2e-health.yml@main
|
|
168
168
|
with:
|
|
169
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
170
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
171
|
+
# this repository with no pull request here. This is the contract major it
|
|
172
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
173
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
174
|
+
# (CodySwannGT/lisa#3698).
|
|
175
|
+
expected_workflow_contract_major: '1'
|
|
169
176
|
branch: dev
|
|
170
177
|
# Structured JSON, schema-validated before any API call. Duplicated
|
|
171
178
|
# labels, unanchored regexes, unknown keys and zero-match patterns are all
|
|
@@ -96,6 +96,13 @@ jobs:
|
|
|
96
96
|
# detects a mismatch. Enforced by `scripts/check-template-workflow-refs.mjs`.
|
|
97
97
|
uses: CodySwannGT/lisa/.github/workflows/nightly-e2e-report.yml@main
|
|
98
98
|
with:
|
|
99
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
100
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
101
|
+
# this repository with no pull request here. This is the contract major it
|
|
102
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
103
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
104
|
+
# (CodySwannGT/lisa#3698).
|
|
105
|
+
expected_workflow_contract_major: '1'
|
|
99
106
|
branch: dev
|
|
100
107
|
# The status-check context the GATE publishes, used to MEASURE whether it
|
|
101
108
|
# is actually required on `branch`. This default is the composite GitHub
|
|
@@ -35,4 +35,12 @@ jobs:
|
|
|
35
35
|
# including the gate whose job is checking these refs — it reported this
|
|
36
36
|
# file as having none at all.
|
|
37
37
|
uses: CodySwannGT/lisa/.github/workflows/nightly-e2e-tracking.yml@main
|
|
38
|
+
with:
|
|
39
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
40
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
41
|
+
# this repository with no pull request here. This is the contract major it
|
|
42
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
43
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
44
|
+
# (CodySwannGT/lisa#3698).
|
|
45
|
+
expected_workflow_contract_major: '1'
|
|
38
46
|
secrets: inherit
|
|
@@ -130,6 +130,13 @@ jobs:
|
|
|
130
130
|
name: 🎭 Playwright Web E2E
|
|
131
131
|
uses: CodySwannGT/lisa/.github/workflows/playwright-e2e.yml@main
|
|
132
132
|
with:
|
|
133
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
134
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
135
|
+
# this repository with no pull request here. This is the contract major it
|
|
136
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
137
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
138
|
+
# (CodySwannGT/lisa#3698).
|
|
139
|
+
expected_workflow_contract_major: '1'
|
|
133
140
|
node_version: '22.21.1'
|
|
134
141
|
package_manager: 'bun'
|
|
135
142
|
# The moment this workflow's cadence corresponds to. It is what makes the
|
|
@@ -19,6 +19,13 @@ jobs:
|
|
|
19
19
|
pull-requests: read
|
|
20
20
|
uses: CodySwannGT/lisa/.github/workflows/quality.yml@main
|
|
21
21
|
with:
|
|
22
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
23
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
24
|
+
# this repository with no pull request here. This is the contract major it
|
|
25
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
26
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
27
|
+
# (CodySwannGT/lisa#3698).
|
|
28
|
+
expected_workflow_contract_major: '1'
|
|
22
29
|
node_version: '22.21.1'
|
|
23
30
|
package_manager: 'bun'
|
|
24
31
|
skip_jobs: ''
|
|
@@ -33,6 +33,13 @@ jobs:
|
|
|
33
33
|
name: 🚦 Pre-Deploy Gates
|
|
34
34
|
uses: CodySwannGT/lisa/.github/workflows/gates.yml@main
|
|
35
35
|
with:
|
|
36
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
37
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
38
|
+
# this repository with no pull request here. This is the contract major it
|
|
39
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
40
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
41
|
+
# (CodySwannGT/lisa#3698).
|
|
42
|
+
expected_workflow_contract_major: '1'
|
|
36
43
|
moment: pre-deploy:${{ github.ref_name }}
|
|
37
44
|
node_version: '22.21.1'
|
|
38
45
|
package_manager: 'bun'
|
|
@@ -117,6 +124,13 @@ jobs:
|
|
|
117
124
|
needs: [deploy]
|
|
118
125
|
if: ${{ always() && !cancelled() && needs.deploy.result == 'success' }}
|
|
119
126
|
with:
|
|
127
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
128
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
129
|
+
# this repository with no pull request here. This is the contract major it
|
|
130
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
131
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
132
|
+
# (CodySwannGT/lisa#3698).
|
|
133
|
+
expected_workflow_contract_major: '1'
|
|
120
134
|
moment: post-deploy:${{ github.ref_name }}
|
|
121
135
|
node_version: '22.21.1'
|
|
122
136
|
package_manager: 'bun'
|
|
@@ -21,6 +21,13 @@ jobs:
|
|
|
21
21
|
pull-requests: read
|
|
22
22
|
uses: CodySwannGT/lisa/.github/workflows/quality.yml@main
|
|
23
23
|
with:
|
|
24
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
25
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
26
|
+
# this repository with no pull request here. This is the contract major it
|
|
27
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
28
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
29
|
+
# (CodySwannGT/lisa#3698).
|
|
30
|
+
expected_workflow_contract_major: '1'
|
|
24
31
|
node_version: '22.21.1'
|
|
25
32
|
package_manager: 'bun'
|
|
26
33
|
skip_jobs: 'test:e2e,playwright_e2e'
|
|
@@ -42,5 +49,12 @@ jobs:
|
|
|
42
49
|
needs: [quality]
|
|
43
50
|
uses: CodySwannGT/lisa/.github/workflows/zap-baseline-nestjs.yml@main
|
|
44
51
|
with:
|
|
52
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
53
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
54
|
+
# this repository with no pull request here. This is the contract major it
|
|
55
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
56
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
57
|
+
# (CodySwannGT/lisa#3698).
|
|
58
|
+
expected_workflow_contract_major: '1'
|
|
45
59
|
node_version: '22.21.1'
|
|
46
60
|
package_manager: 'bun'
|
|
@@ -102,6 +102,13 @@ jobs:
|
|
|
102
102
|
uses: CodySwannGT/lisa/.github/workflows/gates.yml@main
|
|
103
103
|
needs: [determine_environment]
|
|
104
104
|
with:
|
|
105
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
106
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
107
|
+
# this repository with no pull request here. This is the contract major it
|
|
108
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
109
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
110
|
+
# (CodySwannGT/lisa#3698).
|
|
111
|
+
expected_workflow_contract_major: '1'
|
|
105
112
|
moment: pre-deploy:${{ needs.determine_environment.outputs.environment }}
|
|
106
113
|
node_version: '22.21.1'
|
|
107
114
|
package_manager: 'bun'
|
|
@@ -117,6 +124,13 @@ jobs:
|
|
|
117
124
|
contents: write
|
|
118
125
|
pull-requests: read
|
|
119
126
|
with:
|
|
127
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
128
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
129
|
+
# this repository with no pull request here. This is the contract major it
|
|
130
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
131
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
132
|
+
# (CodySwannGT/lisa#3698).
|
|
133
|
+
expected_workflow_contract_major: '1'
|
|
120
134
|
environment: ${{ needs.determine_environment.outputs.environment }}
|
|
121
135
|
release_strategy: 'standard-version'
|
|
122
136
|
skip_jobs: 'test:e2e,test:unit,test:integration,test'
|
|
@@ -430,6 +444,13 @@ jobs:
|
|
|
430
444
|
needs: [determine_environment, deploy]
|
|
431
445
|
if: ${{ always() && !cancelled() && needs.deploy.result == 'success' }}
|
|
432
446
|
with:
|
|
447
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
448
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
449
|
+
# this repository with no pull request here. This is the contract major it
|
|
450
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
451
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
452
|
+
# (CodySwannGT/lisa#3698).
|
|
453
|
+
expected_workflow_contract_major: '1'
|
|
433
454
|
moment: post-deploy:${{ needs.determine_environment.outputs.environment }}
|
|
434
455
|
node_version: '22.21.1'
|
|
435
456
|
package_manager: 'bun'
|
|
@@ -447,6 +468,13 @@ jobs:
|
|
|
447
468
|
(needs.determine_environment.outputs.environment == 'staging' || needs.determine_environment.outputs.environment == 'stage')
|
|
448
469
|
uses: CodySwannGT/lisa/.github/workflows/load-test.yml@main
|
|
449
470
|
with:
|
|
471
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
472
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
473
|
+
# this repository with no pull request here. This is the contract major it
|
|
474
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
475
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
476
|
+
# (CodySwannGT/lisa#3698).
|
|
477
|
+
expected_workflow_contract_major: '1'
|
|
450
478
|
environment: ${{ needs.determine_environment.outputs.environment }}
|
|
451
479
|
test_scenario: 'smoke' # Start with smoke test after deployment
|
|
452
480
|
base_url: ${{ needs.deploy.outputs.environment_url }}
|
package/package.json
CHANGED
|
@@ -19,8 +19,10 @@
|
|
|
19
19
|
"lint": "oxlint --disable-nested-config && eslint . --quiet",
|
|
20
20
|
"lint:fix": "oxlint --fix --disable-nested-config && eslint . --fix",
|
|
21
21
|
"lint:slow": "eslint . --config eslint.slow.config.ts --quiet",
|
|
22
|
-
"typecheck": "tsc --noEmit && bun run typecheck:tests",
|
|
22
|
+
"typecheck": "tsc --noEmit && bun run typecheck:tests && bun run typecheck:engine-floor",
|
|
23
23
|
"typecheck:tests": "node scripts/check-typecheck-tests.mjs",
|
|
24
|
+
"typecheck:engine-floor": "node scripts/check-engine-floor.mjs",
|
|
25
|
+
"measure:scripts-profile-gap": "bun scripts/measure-scripts-profile-gap.mts",
|
|
24
26
|
"format:check": "prettier --check .",
|
|
25
27
|
"format": "prettier --check . --write",
|
|
26
28
|
"knip:check": "knip",
|
|
@@ -68,6 +70,7 @@
|
|
|
68
70
|
"check:empty-subject-guards": "node scripts/check-empty-subject-guards.mjs",
|
|
69
71
|
"check:cwd-resolution-corpus": "node scripts/check-cwd-resolution-corpus.mjs",
|
|
70
72
|
"check:probe-absence-direction": "node scripts/check-probe-absence-direction.mjs",
|
|
73
|
+
"check:guard-parity-notes": "node scripts/check-guard-parity-notes.mjs",
|
|
71
74
|
"check:shell-guard-refusals": "bun run build && $npm_execpath run lisa-test-run -- --adapter direct -- node scripts/check-shell-guard-refusal-coverage.mjs --trace-out .lisa/shell-guard-trace.jsonl",
|
|
72
75
|
"check:workflow-inputs": "node scripts/detect-stale-workflow-inputs.mjs --project . --project typescript/create-only --project rails/create-only --json",
|
|
73
76
|
"check:conflict-markers": "node all/copy-overwrite/scripts/check-conflict-markers.mjs",
|
|
@@ -76,7 +79,9 @@
|
|
|
76
79
|
"check:merge-drivers": "node scripts/check-merge-driver-registration.mjs",
|
|
77
80
|
"check:failure-signatures": "node plugins/src/base/hooks/failure-signature-index.mjs --check",
|
|
78
81
|
"check:withdrawn-rulings": "node plugins/src/base/hooks/withdrawn-rulings.mjs --check",
|
|
82
|
+
"check:operational-hazards": "node plugins/src/base/hooks/operational-hazards.mjs --check",
|
|
79
83
|
"check:template-workflow-refs": "node scripts/check-template-workflow-refs.mjs",
|
|
84
|
+
"check:workflow-contract-assertions": "node scripts/check-workflow-contract-assertions.mjs",
|
|
80
85
|
"check:third-party-action-pins": "node scripts/check-third-party-action-pins.mjs",
|
|
81
86
|
"check:workflow-package-paths": "node scripts/check-workflow-package-paths.mjs",
|
|
82
87
|
"check:delivery-deletion-conflicts": "node scripts/check-delivery-deletion-conflicts.mjs",
|
|
@@ -181,7 +186,7 @@
|
|
|
181
186
|
"zod-validation-error": "^4.0.0"
|
|
182
187
|
},
|
|
183
188
|
"name": "@codyswann/lisa",
|
|
184
|
-
"version": "4.
|
|
189
|
+
"version": "4.55.0",
|
|
185
190
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
186
191
|
"main": "dist/index.js",
|
|
187
192
|
"exports": {
|
|
@@ -329,7 +334,7 @@
|
|
|
329
334
|
"test": "tests"
|
|
330
335
|
},
|
|
331
336
|
"types": "./dist/index.d.ts",
|
|
332
|
-
"lisaReleaseCommit": "
|
|
333
|
-
"gitHead": "
|
|
334
|
-
"lisaReleaseTag": "v4.
|
|
337
|
+
"lisaReleaseCommit": "e01ec6ad7d10e2f097c3cb8034b7903fbf66534d",
|
|
338
|
+
"gitHead": "e01ec6ad7d10e2f097c3cb8034b7903fbf66534d",
|
|
339
|
+
"lisaReleaseTag": "v4.55.0"
|
|
335
340
|
}
|
|
@@ -22,6 +22,13 @@ jobs:
|
|
|
22
22
|
pull-requests: read
|
|
23
23
|
uses: CodySwannGT/lisa/.github/workflows/quality.yml@main
|
|
24
24
|
with:
|
|
25
|
+
# Travels with the `uses:` line above — the two are one unit. Lisa's
|
|
26
|
+
# reusable workflows are tracked at `@main`, so that file changes under
|
|
27
|
+
# this repository with no pull request here. This is the contract major it
|
|
28
|
+
# spoke when Lisa seeded this file; the run fails loudly if it has since
|
|
29
|
+
# declared a break, and says NOT DETERMINED if this line goes missing
|
|
30
|
+
# (CodySwannGT/lisa#3698).
|
|
31
|
+
expected_workflow_contract_major: '1'
|
|
25
32
|
node_version: '22.21.1'
|
|
26
33
|
package_manager: 'bun'
|
|
27
34
|
skip_jobs: ''
|