@codyswann/lisa 4.55.1 → 4.55.3
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-overwrite/scripts/check-orphaned-branches.mjs +49 -13
- package/all/copy-overwrite/scripts/lisa-enforcement-fallback.sh +9 -1
- package/all/copy-overwrite/scripts/lisa-hooks/block-blind-automerge.sh +10 -5
- package/all/copy-overwrite/scripts/lisa-hooks/block-direct-issue-create.sh +4 -0
- package/all/copy-overwrite/scripts/lisa-hooks/block-managed-file-edits.sh +73 -2
- package/all/copy-overwrite/scripts/lisa-hooks/guard-dedupe.bash +63 -29
- package/all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh +2 -1
- package/all/copy-overwrite/scripts/lisa-hooks/worktree-binding-guard.sh +2 -1
- package/all/copy-overwrite/scripts/lisa-run-gates.mjs +7 -2
- package/all/copy-overwrite/scripts/lisa-work-item.mjs +50 -14
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +36 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +89 -139
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/opencode/plugin-templates/block-managed-file-edits.sh +76 -2
- package/dist/opencode/plugin-templates/block-no-verify.sh +3 -0
- package/dist/opencode/plugin-templates/guard-dedupe.bash +66 -29
- package/dist/opencode/plugin-templates/parity-safety-net-heredoc.py +3 -0
- package/dist/opencode/plugin-templates/parity-safety-net.sh +5 -1
- package/dist/opencode/support-file-resolver.d.ts.map +1 -1
- package/dist/opencode/support-file-resolver.js +3 -1
- package/dist/opencode/support-file-resolver.js.map +1 -1
- package/expo/copy-overwrite/plugins/withAndroidSplashNoClientExit.js +23 -21
- package/expo/create-only/.github/required-checks.json +1 -1
- package/nestjs/create-only/.github/required-checks.json +1 -1
- package/package.json +4 -4
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +18 -10
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +18 -9
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/SKILL.md +45 -7
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +18 -7
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-prd-intake/SKILL.md +12 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +1 -18
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-verify/SKILL.md +0 -17
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +3 -34
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +46 -6
- package/plugins/lisa/.codex-plugin/skills/lisa-rework-triage/SKILL.md +2 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-secrets-access/scripts/providers.mjs +2 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +7 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +11 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/toolchain.mjs +17 -5
- package/plugins/lisa/.codex-plugin/skills/lisa-track/SKILL.md +18 -4
- package/plugins/lisa/hooks/block-blind-automerge.sh +13 -5
- package/plugins/lisa/hooks/block-direct-issue-create.sh +7 -0
- package/plugins/lisa/hooks/block-instruction-file-edits.sh +3 -0
- package/plugins/lisa/hooks/block-managed-file-edits.sh +76 -2
- package/plugins/lisa/hooks/block-no-verify.sh +3 -0
- package/plugins/lisa/hooks/block-shell-json-parsing.sh +3 -0
- package/plugins/lisa/hooks/guard-dedupe.bash +66 -29
- package/plugins/lisa/hooks/parity-safety-net-heredoc.py +3 -0
- package/plugins/lisa/hooks/parity-safety-net.sh +5 -1
- package/plugins/lisa/hooks/worktree-binding-guard.mjs +3 -0
- package/plugins/lisa/hooks/worktree-binding-guard.sh +5 -1
- package/plugins/lisa/rules/eager/00-rule-index.md +1 -0
- package/plugins/lisa/rules/eager/base-rules.md +3 -1
- package/plugins/lisa/rules/eager/withdrawn-rulings.md +14 -3
- package/plugins/lisa/rules/reference/automation-runbook-contract.md +1 -1
- package/plugins/lisa/rules/reference/bdd-e2e-coverage.md +1 -1
- package/plugins/lisa/rules/reference/blocker-containment.md +3 -3
- package/plugins/lisa/rules/reference/claim-archaeology.md +1 -1
- package/plugins/lisa/rules/reference/claim-evidence-mapping.md +1 -1
- package/plugins/lisa/rules/reference/claim-time-guards.md +1 -1
- package/plugins/lisa/rules/reference/control-reachability.md +1 -1
- package/plugins/lisa/rules/reference/convergent-review.md +1 -1
- package/plugins/lisa/rules/reference/credential-substrate-precedence.md +1 -1
- package/plugins/lisa/rules/reference/dependency-decision-records.md +1 -1
- package/plugins/lisa/rules/reference/dependency-internalization-kit.md +1 -1
- package/plugins/lisa/rules/reference/dependency-trust-classes.md +1 -1
- package/plugins/lisa/rules/reference/deployed-state-readback.md +1 -1
- package/plugins/lisa/rules/reference/derived-branch-plan.md +1 -1
- package/plugins/lisa/rules/reference/design-source-of-truth.md +1 -1
- package/plugins/lisa/rules/reference/design-value-binding.md +1 -1
- package/plugins/lisa/rules/reference/documentation-source-paths.md +1 -1
- package/plugins/lisa/rules/reference/leaf-only-lifecycle.md +1 -1
- package/plugins/lisa/rules/reference/observability-audit.md +1 -1
- package/plugins/lisa/rules/reference/prd-definition-of-ready.md +1 -1
- package/plugins/lisa/rules/reference/prd-lifecycle-rollup.md +1 -1
- package/plugins/lisa/rules/reference/pre-flight-autofill.md +1 -1
- package/plugins/lisa/rules/reference/promotion-contract.md +1 -1
- package/plugins/lisa/rules/reference/readiness-rubric.md +1 -1
- package/plugins/lisa/rules/reference/ready-role-filing.md +1 -1
- package/plugins/lisa/rules/reference/rejection-detection.md +1 -1
- package/plugins/lisa/rules/reference/repo-scope-split.md +9 -10
- package/plugins/lisa/rules/reference/reset-seed-coverage.md +1 -1
- package/plugins/lisa/rules/reference/usage-accounting.md +1 -1
- package/plugins/lisa/rules/reference/work-item-definition-of-ready.md +1 -1
- package/plugins/lisa/scripts/linear-state-write-target.mjs +2 -2
- package/plugins/lisa/scripts/qa-signal-lifecycle.mjs +24 -11
- package/plugins/lisa/scripts/resolve-lifecycle-role.mjs +2 -7
- package/plugins/lisa/skills/lisa-github-build-intake/SKILL.md +18 -10
- package/plugins/lisa/skills/lisa-jira-build-intake/SKILL.md +18 -9
- package/plugins/lisa/skills/lisa-linear-access/SKILL.md +45 -7
- package/plugins/lisa/skills/lisa-linear-build-intake/SKILL.md +18 -7
- package/plugins/lisa/skills/lisa-linear-prd-intake/SKILL.md +12 -2
- package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +1 -18
- package/plugins/lisa/skills/lisa-linear-verify/SKILL.md +0 -17
- package/plugins/lisa/skills/lisa-linear-write-issue/SKILL.md +3 -34
- package/plugins/lisa/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +46 -6
- package/plugins/lisa/skills/lisa-rework-triage/SKILL.md +2 -1
- package/plugins/lisa/skills/lisa-secrets-access/scripts/providers.mjs +2 -1
- package/plugins/lisa/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +7 -2
- package/plugins/lisa/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +11 -4
- package/plugins/lisa/skills/lisa-setup-remote-env/scripts/toolchain.mjs +17 -5
- package/plugins/lisa/skills/lisa-track/SKILL.md +18 -4
- package/plugins/lisa-agy/hooks/block-blind-automerge.sh +13 -5
- package/plugins/lisa-agy/hooks/block-direct-issue-create.sh +7 -0
- package/plugins/lisa-agy/hooks/block-instruction-file-edits.sh +3 -0
- package/plugins/lisa-agy/hooks/block-managed-file-edits.sh +76 -2
- package/plugins/lisa-agy/hooks/block-shell-json-parsing.sh +3 -0
- package/plugins/lisa-agy/hooks/guard-dedupe.bash +66 -29
- package/plugins/lisa-agy/hooks/parity-safety-net-heredoc.py +3 -0
- package/plugins/lisa-agy/hooks/parity-safety-net.sh +5 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/scripts/linear-state-write-target.mjs +2 -2
- package/plugins/lisa-agy/scripts/qa-signal-lifecycle.mjs +24 -11
- package/plugins/lisa-agy/scripts/resolve-lifecycle-role.mjs +2 -7
- package/plugins/lisa-agy/skills/lisa-github-build-intake/SKILL.md +18 -10
- package/plugins/lisa-agy/skills/lisa-jira-build-intake/SKILL.md +18 -9
- package/plugins/lisa-agy/skills/lisa-linear-access/SKILL.md +45 -7
- package/plugins/lisa-agy/skills/lisa-linear-build-intake/SKILL.md +18 -7
- package/plugins/lisa-agy/skills/lisa-linear-prd-intake/SKILL.md +12 -2
- package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +1 -18
- package/plugins/lisa-agy/skills/lisa-linear-verify/SKILL.md +0 -17
- package/plugins/lisa-agy/skills/lisa-linear-write-issue/SKILL.md +3 -34
- package/plugins/lisa-agy/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +46 -6
- package/plugins/lisa-agy/skills/lisa-rework-triage/SKILL.md +2 -1
- package/plugins/lisa-agy/skills/lisa-secrets-access/scripts/providers.mjs +2 -1
- package/plugins/lisa-agy/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +7 -2
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +11 -4
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/toolchain.mjs +17 -5
- package/plugins/lisa-agy/skills/lisa-track/SKILL.md +18 -4
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/hooks/block-blind-automerge.sh +13 -5
- package/plugins/lisa-copilot/hooks/block-direct-issue-create.sh +7 -0
- package/plugins/lisa-copilot/hooks/block-instruction-file-edits.sh +3 -0
- package/plugins/lisa-copilot/hooks/block-managed-file-edits.sh +76 -2
- package/plugins/lisa-copilot/hooks/block-no-verify.sh +3 -0
- package/plugins/lisa-copilot/hooks/block-shell-json-parsing.sh +3 -0
- package/plugins/lisa-copilot/hooks/guard-dedupe.bash +66 -29
- package/plugins/lisa-copilot/hooks/parity-safety-net-heredoc.py +3 -0
- package/plugins/lisa-copilot/hooks/parity-safety-net.sh +5 -1
- package/plugins/lisa-copilot/hooks/worktree-binding-guard.mjs +3 -0
- package/plugins/lisa-copilot/hooks/worktree-binding-guard.sh +5 -1
- package/plugins/lisa-copilot/rules/eager/00-rule-index.md +1 -0
- package/plugins/lisa-copilot/rules/eager/base-rules.md +3 -1
- package/plugins/lisa-copilot/rules/eager/withdrawn-rulings.md +14 -3
- package/plugins/lisa-copilot/rules/reference/automation-runbook-contract.md +1 -1
- package/plugins/lisa-copilot/rules/reference/bdd-e2e-coverage.md +1 -1
- package/plugins/lisa-copilot/rules/reference/blocker-containment.md +3 -3
- package/plugins/lisa-copilot/rules/reference/claim-archaeology.md +1 -1
- package/plugins/lisa-copilot/rules/reference/claim-evidence-mapping.md +1 -1
- package/plugins/lisa-copilot/rules/reference/claim-time-guards.md +1 -1
- package/plugins/lisa-copilot/rules/reference/control-reachability.md +1 -1
- package/plugins/lisa-copilot/rules/reference/convergent-review.md +1 -1
- package/plugins/lisa-copilot/rules/reference/credential-substrate-precedence.md +1 -1
- package/plugins/lisa-copilot/rules/reference/dependency-decision-records.md +1 -1
- package/plugins/lisa-copilot/rules/reference/dependency-internalization-kit.md +1 -1
- package/plugins/lisa-copilot/rules/reference/dependency-trust-classes.md +1 -1
- package/plugins/lisa-copilot/rules/reference/deployed-state-readback.md +1 -1
- package/plugins/lisa-copilot/rules/reference/derived-branch-plan.md +1 -1
- package/plugins/lisa-copilot/rules/reference/design-source-of-truth.md +1 -1
- package/plugins/lisa-copilot/rules/reference/design-value-binding.md +1 -1
- package/plugins/lisa-copilot/rules/reference/documentation-source-paths.md +1 -1
- package/plugins/lisa-copilot/rules/reference/leaf-only-lifecycle.md +1 -1
- package/plugins/lisa-copilot/rules/reference/observability-audit.md +1 -1
- package/plugins/lisa-copilot/rules/reference/prd-definition-of-ready.md +1 -1
- package/plugins/lisa-copilot/rules/reference/prd-lifecycle-rollup.md +1 -1
- package/plugins/lisa-copilot/rules/reference/pre-flight-autofill.md +1 -1
- package/plugins/lisa-copilot/rules/reference/promotion-contract.md +1 -1
- package/plugins/lisa-copilot/rules/reference/readiness-rubric.md +1 -1
- package/plugins/lisa-copilot/rules/reference/ready-role-filing.md +1 -1
- package/plugins/lisa-copilot/rules/reference/rejection-detection.md +1 -1
- package/plugins/lisa-copilot/rules/reference/repo-scope-split.md +9 -10
- package/plugins/lisa-copilot/rules/reference/reset-seed-coverage.md +1 -1
- package/plugins/lisa-copilot/rules/reference/usage-accounting.md +1 -1
- package/plugins/lisa-copilot/rules/reference/work-item-definition-of-ready.md +1 -1
- package/plugins/lisa-copilot/scripts/linear-state-write-target.mjs +2 -2
- package/plugins/lisa-copilot/scripts/qa-signal-lifecycle.mjs +24 -11
- package/plugins/lisa-copilot/scripts/resolve-lifecycle-role.mjs +2 -7
- package/plugins/lisa-copilot/skills/lisa-github-build-intake/SKILL.md +18 -10
- package/plugins/lisa-copilot/skills/lisa-jira-build-intake/SKILL.md +18 -9
- package/plugins/lisa-copilot/skills/lisa-linear-access/SKILL.md +45 -7
- package/plugins/lisa-copilot/skills/lisa-linear-build-intake/SKILL.md +18 -7
- package/plugins/lisa-copilot/skills/lisa-linear-prd-intake/SKILL.md +12 -2
- package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +1 -18
- package/plugins/lisa-copilot/skills/lisa-linear-verify/SKILL.md +0 -17
- package/plugins/lisa-copilot/skills/lisa-linear-write-issue/SKILL.md +3 -34
- package/plugins/lisa-copilot/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +46 -6
- package/plugins/lisa-copilot/skills/lisa-rework-triage/SKILL.md +2 -1
- package/plugins/lisa-copilot/skills/lisa-secrets-access/scripts/providers.mjs +2 -1
- package/plugins/lisa-copilot/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +7 -2
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +11 -4
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/toolchain.mjs +17 -5
- package/plugins/lisa-copilot/skills/lisa-track/SKILL.md +18 -4
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/block-blind-automerge.sh +13 -5
- package/plugins/lisa-cursor/hooks/block-direct-issue-create.sh +7 -0
- package/plugins/lisa-cursor/hooks/block-instruction-file-edits.sh +3 -0
- package/plugins/lisa-cursor/hooks/block-managed-file-edits.sh +76 -2
- package/plugins/lisa-cursor/hooks/block-no-verify.sh +3 -0
- package/plugins/lisa-cursor/hooks/block-shell-json-parsing.sh +3 -0
- package/plugins/lisa-cursor/hooks/guard-dedupe.bash +66 -29
- package/plugins/lisa-cursor/hooks/parity-safety-net-heredoc.py +3 -0
- package/plugins/lisa-cursor/hooks/parity-safety-net.sh +5 -1
- package/plugins/lisa-cursor/hooks/worktree-binding-guard.mjs +3 -0
- package/plugins/lisa-cursor/hooks/worktree-binding-guard.sh +5 -1
- package/plugins/lisa-cursor/rules/00-rule-index.mdc +1 -0
- package/plugins/lisa-cursor/rules/automation-runbook-contract-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/base-rules.mdc +3 -1
- package/plugins/lisa-cursor/rules/bdd-e2e-coverage-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/blocker-containment-reference.mdc +3 -3
- package/plugins/lisa-cursor/rules/claim-archaeology-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/claim-evidence-mapping-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/claim-time-guards-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/control-reachability-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/convergent-review-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/credential-substrate-precedence-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/dependency-decision-records-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/dependency-internalization-kit-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/dependency-trust-classes-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/deployed-state-readback-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/derived-branch-plan-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/design-source-of-truth-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/design-value-binding-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/documentation-source-paths-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/leaf-only-lifecycle-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/observability-audit-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/prd-definition-of-ready-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/prd-lifecycle-rollup-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/pre-flight-autofill-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/promotion-contract-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/readiness-rubric-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/ready-role-filing-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/rejection-detection-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/repo-scope-split-reference.mdc +9 -10
- package/plugins/lisa-cursor/rules/reset-seed-coverage-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/usage-accounting-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/withdrawn-rulings.mdc +14 -3
- package/plugins/lisa-cursor/rules/work-item-definition-of-ready-reference.mdc +1 -1
- package/plugins/lisa-cursor/scripts/linear-state-write-target.mjs +2 -2
- package/plugins/lisa-cursor/scripts/qa-signal-lifecycle.mjs +24 -11
- package/plugins/lisa-cursor/scripts/resolve-lifecycle-role.mjs +2 -7
- package/plugins/lisa-cursor/skills/lisa-github-build-intake/SKILL.md +18 -10
- package/plugins/lisa-cursor/skills/lisa-jira-build-intake/SKILL.md +18 -9
- package/plugins/lisa-cursor/skills/lisa-linear-access/SKILL.md +45 -7
- package/plugins/lisa-cursor/skills/lisa-linear-build-intake/SKILL.md +18 -7
- package/plugins/lisa-cursor/skills/lisa-linear-prd-intake/SKILL.md +12 -2
- package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +1 -18
- package/plugins/lisa-cursor/skills/lisa-linear-verify/SKILL.md +0 -17
- package/plugins/lisa-cursor/skills/lisa-linear-write-issue/SKILL.md +3 -34
- package/plugins/lisa-cursor/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +46 -6
- package/plugins/lisa-cursor/skills/lisa-rework-triage/SKILL.md +2 -1
- package/plugins/lisa-cursor/skills/lisa-secrets-access/scripts/providers.mjs +2 -1
- package/plugins/lisa-cursor/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +7 -2
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +11 -4
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/toolchain.mjs +17 -5
- package/plugins/lisa-cursor/skills/lisa-track/SKILL.md +18 -4
- 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-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-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-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-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 +11 -0
- package/plugins/src/base/hooks/block-blind-automerge.sh +10 -5
- package/plugins/src/base/hooks/block-direct-issue-create.sh +4 -0
- package/plugins/src/base/hooks/block-managed-file-edits.sh +73 -2
- package/plugins/src/base/hooks/guard-dedupe.bash +63 -29
- package/plugins/src/base/hooks/parity-safety-net.sh +2 -1
- package/plugins/src/base/hooks/worktree-binding-guard.sh +2 -1
- package/plugins/src/base/rules/eager/00-rule-index.md +1 -0
- package/plugins/src/base/rules/eager/base-rules.md +3 -1
- package/plugins/src/base/rules/eager/withdrawn-rulings.md +14 -3
- package/plugins/src/base/rules/reference/automation-runbook-contract.md +1 -1
- package/plugins/src/base/rules/reference/bdd-e2e-coverage.md +1 -1
- package/plugins/src/base/rules/reference/blocker-containment.md +3 -3
- package/plugins/src/base/rules/reference/claim-archaeology.md +1 -1
- package/plugins/src/base/rules/reference/claim-evidence-mapping.md +1 -1
- package/plugins/src/base/rules/reference/claim-time-guards.md +1 -1
- package/plugins/src/base/rules/reference/control-reachability.md +1 -1
- package/plugins/src/base/rules/reference/convergent-review.md +1 -1
- package/plugins/src/base/rules/reference/credential-substrate-precedence.md +1 -1
- package/plugins/src/base/rules/reference/dependency-decision-records.md +1 -1
- package/plugins/src/base/rules/reference/dependency-internalization-kit.md +1 -1
- package/plugins/src/base/rules/reference/dependency-trust-classes.md +1 -1
- package/plugins/src/base/rules/reference/deployed-state-readback.md +1 -1
- package/plugins/src/base/rules/reference/derived-branch-plan.md +1 -1
- package/plugins/src/base/rules/reference/design-source-of-truth.md +1 -1
- package/plugins/src/base/rules/reference/design-value-binding.md +1 -1
- package/plugins/src/base/rules/reference/documentation-source-paths.md +1 -1
- package/plugins/src/base/rules/reference/leaf-only-lifecycle.md +1 -1
- package/plugins/src/base/rules/reference/observability-audit.md +1 -1
- package/plugins/src/base/rules/reference/prd-definition-of-ready.md +1 -1
- package/plugins/src/base/rules/reference/prd-lifecycle-rollup.md +1 -1
- package/plugins/src/base/rules/reference/pre-flight-autofill.md +1 -1
- package/plugins/src/base/rules/reference/promotion-contract.md +1 -1
- package/plugins/src/base/rules/reference/readiness-rubric.md +1 -1
- package/plugins/src/base/rules/reference/ready-role-filing.md +1 -1
- package/plugins/src/base/rules/reference/rejection-detection.md +1 -1
- package/plugins/src/base/rules/reference/repo-scope-split.md +9 -10
- package/plugins/src/base/rules/reference/reset-seed-coverage.md +1 -1
- package/plugins/src/base/rules/reference/usage-accounting.md +1 -1
- package/plugins/src/base/rules/reference/work-item-definition-of-ready.md +1 -1
- package/plugins/src/base/scripts/linear-state-write-target.mjs +2 -2
- package/plugins/src/base/scripts/qa-signal-lifecycle.mjs +24 -11
- package/plugins/src/base/scripts/resolve-lifecycle-role.mjs +2 -7
- package/plugins/src/base/skills/lisa-github-build-intake/SKILL.md +18 -10
- package/plugins/src/base/skills/lisa-jira-build-intake/SKILL.md +18 -9
- package/plugins/src/base/skills/lisa-linear-access/SKILL.md +45 -7
- package/plugins/src/base/skills/lisa-linear-build-intake/SKILL.md +18 -7
- package/plugins/src/base/skills/lisa-linear-prd-intake/SKILL.md +12 -2
- package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +1 -18
- package/plugins/src/base/skills/lisa-linear-verify/SKILL.md +0 -17
- package/plugins/src/base/skills/lisa-linear-write-issue/SKILL.md +3 -34
- package/plugins/src/base/skills/lisa-prd-ticket-coverage/SKILL.md +2 -2
- package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +46 -6
- package/plugins/src/base/skills/lisa-rework-triage/SKILL.md +2 -1
- package/plugins/src/base/skills/lisa-secrets-access/scripts/providers.mjs +2 -1
- package/plugins/src/base/skills/lisa-setup-linear/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-setup-remote-env/scripts/preflight-tools.mjs +7 -2
- package/plugins/src/base/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +11 -4
- package/plugins/src/base/skills/lisa-setup-remote-env/scripts/toolchain.mjs +17 -5
- package/plugins/src/base/skills/lisa-track/SKILL.md +18 -4
- package/scripts/build-plugins.sh +4 -0
- package/scripts/copy-opencode-plugin-templates.mjs +5 -1
- package/scripts/lisa-enforcement-fallback.sh +9 -1
- package/scripts/two-channel-couplings.json +5 -33
- package/typescript/copy-overwrite/scripts/check-skipped-required-checks.mjs +551 -13
- package/typescript/create-only/.github/required-checks.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-qa-checklist/SKILL.md +0 -70
- package/plugins/lisa/.codex-plugin/skills/lisa-qa-checklist/agents/openai.yaml +0 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-qa-clear/SKILL.md +0 -86
- package/plugins/lisa/.codex-plugin/skills/lisa-qa-clear/agents/openai.yaml +0 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-qa-fail/SKILL.md +0 -119
- package/plugins/lisa/.codex-plugin/skills/lisa-qa-fail/agents/openai.yaml +0 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-qa-queue/SKILL.md +0 -94
- package/plugins/lisa/.codex-plugin/skills/lisa-qa-queue/agents/openai.yaml +0 -4
- package/plugins/lisa/commands/qa-checklist.md +0 -6
- package/plugins/lisa/commands/qa-clear.md +0 -6
- package/plugins/lisa/commands/qa-fail.md +0 -6
- package/plugins/lisa/commands/qa-queue.md +0 -6
- package/plugins/lisa/skills/lisa-qa-checklist/SKILL.md +0 -70
- package/plugins/lisa/skills/lisa-qa-checklist/agents/openai.yaml +0 -4
- package/plugins/lisa/skills/lisa-qa-clear/SKILL.md +0 -86
- package/plugins/lisa/skills/lisa-qa-clear/agents/openai.yaml +0 -4
- package/plugins/lisa/skills/lisa-qa-fail/SKILL.md +0 -119
- package/plugins/lisa/skills/lisa-qa-fail/agents/openai.yaml +0 -4
- package/plugins/lisa/skills/lisa-qa-queue/SKILL.md +0 -94
- package/plugins/lisa/skills/lisa-qa-queue/agents/openai.yaml +0 -4
- package/plugins/lisa-agy/commands/lisa/qa-checklist.md +0 -6
- package/plugins/lisa-agy/commands/lisa/qa-clear.md +0 -6
- package/plugins/lisa-agy/commands/lisa/qa-fail.md +0 -6
- package/plugins/lisa-agy/commands/lisa/qa-queue.md +0 -6
- package/plugins/lisa-agy/skills/lisa-qa-checklist/SKILL.md +0 -70
- package/plugins/lisa-agy/skills/lisa-qa-clear/SKILL.md +0 -86
- package/plugins/lisa-agy/skills/lisa-qa-fail/SKILL.md +0 -119
- package/plugins/lisa-agy/skills/lisa-qa-queue/SKILL.md +0 -94
- package/plugins/lisa-copilot/commands/lisa/qa-checklist.md +0 -6
- package/plugins/lisa-copilot/commands/lisa/qa-clear.md +0 -6
- package/plugins/lisa-copilot/commands/lisa/qa-fail.md +0 -6
- package/plugins/lisa-copilot/commands/lisa/qa-queue.md +0 -6
- package/plugins/lisa-copilot/skills/lisa-qa-checklist/SKILL.md +0 -70
- package/plugins/lisa-copilot/skills/lisa-qa-clear/SKILL.md +0 -86
- package/plugins/lisa-copilot/skills/lisa-qa-fail/SKILL.md +0 -119
- package/plugins/lisa-copilot/skills/lisa-qa-queue/SKILL.md +0 -94
- package/plugins/lisa-cursor/commands/lisa/qa-checklist.md +0 -6
- package/plugins/lisa-cursor/commands/lisa/qa-clear.md +0 -6
- package/plugins/lisa-cursor/commands/lisa/qa-fail.md +0 -6
- package/plugins/lisa-cursor/commands/lisa/qa-queue.md +0 -6
- package/plugins/lisa-cursor/skills/lisa-qa-checklist/SKILL.md +0 -70
- package/plugins/lisa-cursor/skills/lisa-qa-clear/SKILL.md +0 -86
- package/plugins/lisa-cursor/skills/lisa-qa-fail/SKILL.md +0 -119
- package/plugins/lisa-cursor/skills/lisa-qa-queue/SKILL.md +0 -94
- package/plugins/src/base/commands/qa-checklist.md +0 -6
- package/plugins/src/base/commands/qa-clear.md +0 -6
- package/plugins/src/base/commands/qa-fail.md +0 -6
- package/plugins/src/base/commands/qa-queue.md +0 -6
- package/plugins/src/base/skills/lisa-qa-checklist/SKILL.md +0 -70
- package/plugins/src/base/skills/lisa-qa-clear/SKILL.md +0 -86
- package/plugins/src/base/skills/lisa-qa-fail/SKILL.md +0 -119
- package/plugins/src/base/skills/lisa-qa-queue/SKILL.md +0 -94
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# This file is managed by Lisa and IS replaced on each `lisa` run.
|
|
2
|
+
# Do not edit directly — durable changes belong upstream in Lisa.
|
|
3
|
+
|
|
1
4
|
# shellcheck shell=bash
|
|
2
5
|
# Evaluate a dual-channel guard once per tool call, without de-registering it.
|
|
3
6
|
#
|
|
@@ -51,12 +54,9 @@
|
|
|
51
54
|
# refusal reaching the agent without the message that explains it. On a
|
|
52
55
|
# refusal every channel evaluates and speaks exactly as it does today.
|
|
53
56
|
#
|
|
54
|
-
#
|
|
55
|
-
#
|
|
56
|
-
#
|
|
57
|
-
# unless a second channel has actually been seen. The digest, and the one `stat`
|
|
58
|
-
# that feeds it the per-call discriminator, are reached only where a second
|
|
59
|
-
# channel is live, which is exactly where they are repaid.
|
|
57
|
+
# State ownership, modes and ancestry are verified before channel discovery.
|
|
58
|
+
# After that validation the channel check uses only builtins, and returns
|
|
59
|
+
# before digesting code or sizing the transcript unless another channel is live.
|
|
60
60
|
|
|
61
61
|
# Key this guard would memoise under, once computed. Empty means "record
|
|
62
62
|
# nothing on exit".
|
|
@@ -74,14 +74,25 @@ lisa_guard_memo_ready=0
|
|
|
74
74
|
# Digest tool for the memo key, resolved once. Empty disables the memo.
|
|
75
75
|
lisa_guard_memo_digest_tool=""
|
|
76
76
|
|
|
77
|
-
#
|
|
78
|
-
#
|
|
79
|
-
#
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
77
|
+
# Read ownership and all permission bits without accepting output from a
|
|
78
|
+
# failed platform-specific stat invocation.
|
|
79
|
+
# $1 - directory; sets lisa_guard_memo_owner and lisa_guard_memo_mode
|
|
80
|
+
lisa_guard_memo_stat() {
|
|
81
|
+
local facts=""
|
|
82
|
+
facts="$(stat -c '%u %a' "$1" 2>/dev/null)" ||
|
|
83
|
+
facts="$(stat -f '%u %p' "$1" 2>/dev/null)" || return 1
|
|
84
|
+
lisa_guard_memo_owner="${facts%% *}"
|
|
85
|
+
lisa_guard_memo_mode="${facts#* }"
|
|
86
|
+
case "$lisa_guard_memo_owner:$lisa_guard_memo_mode" in
|
|
87
|
+
*[!0-9:]* | :* | *:) return 1 ;;
|
|
88
|
+
esac
|
|
89
|
+
case "$lisa_guard_memo_mode" in *[!0-7]*) return 1 ;; esac
|
|
90
|
+
lisa_guard_memo_mode=$((8#$lisa_guard_memo_mode & 8#7777))
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
# Memo leaves must be private even when a sticky shared temp ancestor is safe.
|
|
94
|
+
# Ownership alone allows another local account to plant a session/allow file
|
|
95
|
+
# in an owned but group- or world-writable directory.
|
|
85
96
|
#
|
|
86
97
|
# $1 - candidate directory
|
|
87
98
|
lisa_guard_memo_dir_usable() {
|
|
@@ -89,23 +100,42 @@ lisa_guard_memo_dir_usable() {
|
|
|
89
100
|
[ -d "$1" ] || return 1
|
|
90
101
|
[ ! -L "$1" ] || return 1
|
|
91
102
|
[ -O "$1" ] || return 1
|
|
103
|
+
lisa_guard_memo_stat "$1" || return 1
|
|
104
|
+
[ $((lisa_guard_memo_mode & 8#0022)) -eq 0 ]
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
# Resolve parents physically and verify every ancestor. Plugin hooks do not
|
|
108
|
+
# inherit the dispatcher's trust walk, and exported paths are still inputs.
|
|
109
|
+
# $1 - candidate memo base; sets lisa_guard_memo_base only on success
|
|
110
|
+
lisa_guard_memo_trust_base() {
|
|
111
|
+
lisa_guard_memo_dir_usable "$1" || return 1
|
|
112
|
+
local physical=""
|
|
113
|
+
physical="$(cd "$1" 2>/dev/null && pwd -P)" || return 1
|
|
114
|
+
local current="$physical"
|
|
115
|
+
while :; do
|
|
116
|
+
lisa_guard_memo_stat "$current" || return 1
|
|
117
|
+
[ "$lisa_guard_memo_owner" = 0 ] || [ -O "$current" ] || return 1
|
|
118
|
+
if [ $((lisa_guard_memo_mode & 8#0022)) -ne 0 ] &&
|
|
119
|
+
[ $((lisa_guard_memo_mode & 8#1000)) -eq 0 ]; then
|
|
120
|
+
return 1
|
|
121
|
+
fi
|
|
122
|
+
[ "$current" != / ] || break
|
|
123
|
+
current="${current%/*}"
|
|
124
|
+
[ -n "$current" ] || current=/
|
|
125
|
+
done
|
|
126
|
+
lisa_guard_memo_base="$physical"
|
|
92
127
|
}
|
|
93
128
|
|
|
94
129
|
# Establish the memo base directory.
|
|
95
130
|
#
|
|
96
|
-
# Preferred source is `LISA_GUARD_MEMO_DIR`, exported by the dispatcher
|
|
97
|
-
#
|
|
98
|
-
#
|
|
99
|
-
# reached by the plugin channel has no such parent, so it creates the directory
|
|
100
|
-
# itself under `TMPDIR` — private by umask, and used only when this user owns
|
|
101
|
-
# it. If neither works the memo is unavailable and every guard evaluates, which
|
|
102
|
-
# is today's behaviour.
|
|
131
|
+
# Preferred source is `LISA_GUARD_MEMO_DIR`, exported by the dispatcher. Both
|
|
132
|
+
# this input and the plugin channel's TMPDIR fallback receive the same trust
|
|
133
|
+
# checks. Missing state is created privately; untrusted state disables memo use.
|
|
103
134
|
lisa_guard_memo_resolve_base() {
|
|
104
135
|
[ -z "$lisa_guard_memo_base" ] || return 0
|
|
105
136
|
|
|
106
137
|
local candidate="${LISA_GUARD_MEMO_DIR:-}"
|
|
107
|
-
if
|
|
108
|
-
lisa_guard_memo_base="$candidate"
|
|
138
|
+
if lisa_guard_memo_trust_base "$candidate"; then
|
|
109
139
|
return 0
|
|
110
140
|
fi
|
|
111
141
|
|
|
@@ -118,8 +148,7 @@ lisa_guard_memo_resolve_base() {
|
|
|
118
148
|
if [ ! -e "$candidate" ] && [ ! -L "$candidate" ]; then
|
|
119
149
|
(umask 077 && mkdir -p "$candidate") 2>/dev/null || true
|
|
120
150
|
fi
|
|
121
|
-
if
|
|
122
|
-
lisa_guard_memo_base="$candidate"
|
|
151
|
+
if lisa_guard_memo_trust_base "$candidate"; then
|
|
123
152
|
return 0
|
|
124
153
|
fi
|
|
125
154
|
return 1
|
|
@@ -165,6 +194,7 @@ lisa_guard_memo_sweep() {
|
|
|
165
194
|
#
|
|
166
195
|
# $1 - guard name, used only to name the memo file
|
|
167
196
|
# $2 - the raw tool payload this guard was handed on stdin
|
|
197
|
+
# Remaining arguments - files containing delegated verdict code
|
|
168
198
|
lisa_guard_dedupe() {
|
|
169
199
|
local guard_name="${1:-}"
|
|
170
200
|
local payload="${2:-}"
|
|
@@ -194,8 +224,7 @@ lisa_guard_dedupe() {
|
|
|
194
224
|
fresh_session=1
|
|
195
225
|
fi
|
|
196
226
|
fi
|
|
197
|
-
|
|
198
|
-
[ ! -L "$session_dir" ] || return 0
|
|
227
|
+
lisa_guard_memo_dir_usable "$session_dir" || return 0
|
|
199
228
|
|
|
200
229
|
# Swept once, by the process that created the session directory, so a
|
|
201
230
|
# long-lived machine does not accumulate memo state. Off the hot path by
|
|
@@ -278,11 +307,18 @@ lisa_guard_dedupe() {
|
|
|
278
307
|
case "$transcript_size" in "" | *[!0-9]*) return 0 ;; esac
|
|
279
308
|
|
|
280
309
|
# One command substitution, covering everything the verdict depends on: the
|
|
281
|
-
# guard's own bytes, this library
|
|
310
|
+
# guard's own bytes, this library, delegated code, payload, and call identity.
|
|
311
|
+
# Keep literal bytes (including trailing newlines), and propagate every read
|
|
312
|
+
# failure. A successful digest of a partial stream is not proof of identity.
|
|
282
313
|
local key=""
|
|
283
314
|
key="$(
|
|
315
|
+
set -o pipefail
|
|
284
316
|
{
|
|
285
|
-
|
|
317
|
+
local source_file=""
|
|
318
|
+
for source_file in "$self_script" "${BASH_SOURCE[0]}" "${@:3}"; do
|
|
319
|
+
cat "$source_file" 2>/dev/null || exit 1
|
|
320
|
+
printf '\0'
|
|
321
|
+
done
|
|
286
322
|
printf '\n%s\n' "$payload"
|
|
287
323
|
printf '%s\n' "$transcript_size"
|
|
288
324
|
} | if [ "$lisa_guard_memo_digest_tool" = "shasum" ]; then
|
|
@@ -293,6 +329,7 @@ lisa_guard_dedupe() {
|
|
|
293
329
|
)" || key=""
|
|
294
330
|
key="${key%% *}"
|
|
295
331
|
case "$key" in "" | *[!0-9a-f]*) return 0 ;; esac
|
|
332
|
+
[ "${#key}" -eq 64 ] || return 0
|
|
296
333
|
|
|
297
334
|
# One memo file per guard per session, rewritten as the call moves on, so the
|
|
298
335
|
# state directory stays a fixed size however long a session runs. A saturated
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
+
# This file is managed by Lisa and IS replaced on each `lisa` run.
|
|
3
|
+
# Do not edit directly — durable changes belong upstream in Lisa.
|
|
4
|
+
|
|
2
5
|
"""Classify the only heredoc forms whose payload is non-executable text.
|
|
3
6
|
|
|
4
7
|
SCOPE — read this before hardening anything here (issue #1993).
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
+
# This file is managed by Lisa and IS replaced on each `lisa` run.
|
|
3
|
+
# Do not edit directly — durable changes belong upstream in Lisa.
|
|
4
|
+
|
|
2
5
|
# PreToolUse hook for Bash: a safety net that blocks destructive shell commands
|
|
3
6
|
# before they run. Lisa-native reimplementation of the upstream
|
|
4
7
|
# `safety-net@cc-marketplace` plugin's PreToolUse Bash-guard (parity work,
|
|
@@ -136,7 +139,8 @@ if [ -r "$lisa_guard_dedupe_lib" ]; then
|
|
|
136
139
|
# shellcheck source=guard-dedupe.bash
|
|
137
140
|
. "$lisa_guard_dedupe_lib"
|
|
138
141
|
trap 'lisa_guard_dedupe_record $?' EXIT
|
|
139
|
-
lisa_guard_dedupe parity-safety-net "$input"
|
|
142
|
+
lisa_guard_dedupe parity-safety-net "$input" \
|
|
143
|
+
"$lisa_guard_hook_dir/parity-safety-net-heredoc.py"
|
|
140
144
|
fi
|
|
141
145
|
|
|
142
146
|
tool_name="$(printf '%s' "$input" | jq -r '.tool_name // empty')"
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
// This file is managed by Lisa and IS replaced on each `lisa` run.
|
|
3
|
+
// Do not edit directly — durable changes belong upstream in Lisa.
|
|
4
|
+
|
|
2
5
|
/**
|
|
3
6
|
* Reconcile the worktree a session was TOLD it is in against the one it is
|
|
4
7
|
* ACTUALLY operating in, and refuse to act while the two disagree.
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
+
# This file is managed by Lisa and IS replaced on each `lisa` run.
|
|
3
|
+
# Do not edit directly — durable changes belong upstream in Lisa.
|
|
4
|
+
|
|
2
5
|
# PreToolUse guard for Bash/Write/Edit/MultiEdit, and PostToolUse recorder for
|
|
3
6
|
# EnterWorktree: refuse to act while the worktree the session was told it is in
|
|
4
7
|
# disagrees with the one it is measurably in (CodySwannGT/lisa#3864).
|
|
@@ -54,7 +57,8 @@ if [ -r "$lisa_guard_dedupe_lib" ]; then
|
|
|
54
57
|
# shellcheck source=guard-dedupe.bash
|
|
55
58
|
. "$lisa_guard_dedupe_lib"
|
|
56
59
|
trap 'lisa_guard_dedupe_record $?' EXIT
|
|
57
|
-
lisa_guard_dedupe worktree-binding-guard "$input"
|
|
60
|
+
lisa_guard_dedupe worktree-binding-guard "$input" \
|
|
61
|
+
"$lisa_guard_hook_dir/worktree-binding-guard.mjs"
|
|
58
62
|
fi
|
|
59
63
|
|
|
60
64
|
if ! command -v node >/dev/null 2>&1; then
|
|
@@ -73,6 +73,7 @@ Paths are relative to this file.
|
|
|
73
73
|
|
|
74
74
|
| Slug | Read it when | Body |
|
|
75
75
|
|---|---|---|
|
|
76
|
+
| `operational-hazards` | looking up or publishing an active operational hazard that other sessions must see | [../reference/operational-hazards.md](operational-hazards-reference.mdc) |
|
|
76
77
|
| `automation-runbook-contract` | registering a loop, or ending any flow with its run outcome | [../reference/automation-runbook-contract.md](automation-runbook-contract-reference.mdc) |
|
|
77
78
|
| `convergent-review` | reviewing a PR or resolving review findings | [../reference/convergent-review.md](convergent-review-reference.mdc) |
|
|
78
79
|
| `credential-substrate-precedence` | writing or editing an `*-access` skill | [../reference/credential-substrate-precedence.md](credential-substrate-precedence-reference.mdc) |
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Automation Runbook Contract (load-bearing)
|
|
13
13
|
|
|
@@ -12,7 +12,7 @@ These are mandatory disciplines that apply to every session. Full prose, JIRA de
|
|
|
12
12
|
You are factory machinery, not a chat assistant. Three consequences bind every session:
|
|
13
13
|
|
|
14
14
|
- **Do not pause mid-flow to ask a human whether to proceed.** Handoff happens at the gates — the ready-role flips and intake's adversarial validation — never in the middle of a flow.
|
|
15
|
-
- **Every flow must work headless**: no interactive prompts, idempotent re-runs, clean exits on empty queues. Flows run under native schedulers as often as under a human.
|
|
15
|
+
- **Every admitted flow must work headless**: no interactive prompts after admission, idempotent re-runs, clean exits on empty queues. Resolve required input before admission: interactive requests may need clarification; unattended requests with missing input return `recovery-required` without guessing or applying side effects. Flows run under native schedulers as often as under a human.
|
|
16
16
|
- **Never weaken a gate to get work through it — fix the work.**
|
|
17
17
|
|
|
18
18
|
The model these follow from (the four factories, the gate, the loops, the brownfield on-ramp) is [reference/factory-model.md](factory-model-reference.mdc); read it when you need the shape rather than the obligations.
|
|
@@ -21,6 +21,8 @@ The model these follow from (the four factories, the gate, the loops, the brownf
|
|
|
21
21
|
|
|
22
22
|
Treat every request as potentially underspecified. Before starting any work:
|
|
23
23
|
|
|
24
|
+
**Unattended: override stop-and-ask below.** Missing input means `recovery-required`: no guessing, prompts or side effects. Ask only before interactive admission.
|
|
25
|
+
|
|
24
26
|
1. Identify ambiguities that would prevent completion. If any exist, stop and ask.
|
|
25
27
|
2. Identify open questions whose answers would change your approach. If any exist, stop and ask.
|
|
26
28
|
3. Define how you will empirically verify the work is complete by USING the resulting software, not just running tests. If you cannot define this, stop and ask.
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## BDD Behavior Contract & E2E Coverage (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Blocker Containment (load-bearing)
|
|
13
13
|
|
|
@@ -44,7 +44,7 @@ A false negative (left blocked) costs a cycle and is visible. A false positive (
|
|
|
44
44
|
|
|
45
45
|
## The one carve-out: a blocker with no code
|
|
46
46
|
|
|
47
|
-
A dependency need not deliver code. A blocker **closed as completed** that positively declares no code deliverable —
|
|
47
|
+
A dependency need not deliver code. A blocker **closed as completed** that positively declares no code deliverable — `## Target Backend Environment` reading `None — no runtime behavior change: <kind>` (`doc-only` / `config-only` / `type-only`), no linked PR, no merge commit — is **cleared**, because there is no artifact whose location could matter.
|
|
48
48
|
|
|
49
49
|
This requires a **positive determination**, never an absence. "I could not find a PR" is fail-closed under the rule above; "the item declares it ships no code" is this carve-out. Collapsing the two turns the carve-out into a universal bypass.
|
|
50
50
|
|
|
@@ -136,7 +136,7 @@ A blocker is cleared under this carve-out when **all** of the following hold:
|
|
|
136
136
|
|
|
137
137
|
1. it is **closed as completed** (not `not planned` — see `rejection-detection`, where *not planned* is a durable decline);
|
|
138
138
|
2. it **positively declares no code deliverable** — `## Target Backend Environment` reading `None — no runtime behavior change: doc-only` (or `config-only` / `type-only`), per the grammar `derived-branch-plan` already defines;
|
|
139
|
-
3. it has **no linked
|
|
139
|
+
3. it has **no linked PR and no merge commit**. Any linked PR requires the normal containment test regardless of what the section declares; an open or unmerged PR remains blocking — the code is the authority over the prose.
|
|
140
140
|
|
|
141
141
|
This is a **positive determination, never an absence.** "I could not find a PR" is `no-pr` in the fail-closed table above. "The item declares that it ships no code" is this carve-out. Collapsing the two converts a narrow carve-out into a universal bypass, and it is the single most likely way for this rule to be implemented wrongly.
|
|
142
142
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Claim-Time Archaeology (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Claim → Evidence Mapping Contract (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Claim-Time Guards (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Control Reachability — A Prescribed Control Must Reach the Changed Path (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Convergent Review
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Credential-Substrate Precedence (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Dependency Decisions (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Dependency Internalization Kit (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Dependency Trust Classes (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Deployed-State Readback (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Derived Branch Plan (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Design Source of Truth (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Design Value Binding (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Documentation Source Paths (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Leaf-Only Build-Ready Invariant (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Observability Audit (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## PRD Definition of Ready (requirement atoms)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## PRD Lifecycle Rollup & Generated-Top-Level-Work Contract (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Pre-Flight Spec Autofill — Draft-Then-Block (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Promotion Contract (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Repository Readiness Rubric (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Ready-Role Filing (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Rejection Detection at Claim Time (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Repo Scope & Work-Time Splitting (load-bearing)
|
|
13
13
|
|
|
@@ -47,9 +47,10 @@ A tracker can oversee multiple repos. Build-intake claims only current-repo tick
|
|
|
47
47
|
|
|
48
48
|
Then, for each ready candidate:
|
|
49
49
|
|
|
50
|
-
1. **
|
|
51
|
-
2. **Multi-repo leaf → split, never claim.**
|
|
52
|
-
3. **
|
|
50
|
+
1. **Count distinct repository markers first** — all `repo:<name>` labels plus recognized JIRA repository components, deduplicated by repository. Containers go to the leaf-only gate; do not split them.
|
|
51
|
+
2. **Multi-repo leaf → split, never claim.** More than one repository uses the work-time split; each sibling is build-ready and stamped with its own `repo:<name>`.
|
|
52
|
+
3. **Exactly one repository:** current repo → leaf-only gate + claim; wrong repo → skip.
|
|
53
|
+
4. **No repository marker:** determine from content and code, stamp the resolved markers, then re-apply this decision from the count.
|
|
53
54
|
|
|
54
55
|
---
|
|
55
56
|
|
|
@@ -91,12 +92,10 @@ A ticketing system can oversee multiple repos (one JIRA project / Linear team fo
|
|
|
91
92
|
|
|
92
93
|
Resolve the current repo per the `config-resolution` "Repo scoping" section (config `repo` → `github.repo` → git remote basename; stop with a clear error if unresolvable). Then walk the ready candidates in priority order and apply the **repo-scope decision** to each before claiming:
|
|
93
94
|
|
|
94
|
-
1. **
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
2. **Multi-repo leaf → split, never claim.** If determination finds the leaf touches more than one repo, run the **work-time split procedure** below to break it into single-repo siblings — each created **build-ready** (`build_ready: true`, so the build queue auto-claims it) and stamped with its own `repo:<name>`. After the split, the current repo's sibling (if any) becomes a normal current-repo candidate; the others are separate single-repo `ready` leaves for their repos. A multi-repo leaf is never claimed as-is.
|
|
99
|
-
3. **Wrong repo → skip.** A single-repo leaf whose `repo:<name>` ≠ the current repo is left `ready` (and labeled) and skipped; intake moves on until it finds a claimable current-repo leaf, then stops (one item per cycle).
|
|
95
|
+
1. **Count distinct repository markers first** — all `repo:<name>` labels and JIRA components equal to recognized repository names, deduplicated by repository. Containers go to the leaf-only gate and are never split or claimed here.
|
|
96
|
+
2. **Multi-repo leaf → split, never claim.** More than one distinct repository takes the work-time split procedure before any wrong-repository skip. Each sibling is created **build-ready** (`build_ready: true`) and stamped with its own `repo:<name>`. The current repo's sibling, if any, becomes a normal candidate.
|
|
97
|
+
3. **Exactly one repository:** a single-repo leaf for the current repo proceeds to the leaf-only gate + claim; a leaf for another repo is skipped and left ready for its own intake.
|
|
98
|
+
4. **No repository marker:** determine the target repo(s) from description, acceptance criteria, technical approach and actual code surfaces. Stamp the resolved `repo:<name>` labels and re-apply from step 1. Continue until one current-repo leaf is claimed or the candidates are exhausted.
|
|
100
99
|
|
|
101
100
|
**Query-time pre-filter (the cheapest arm — apply before the per-candidate walk).** When the queue is queryable, scope the candidate **query itself** to the current repo so sibling-repo tickets never even enter the set — instead of pulling the whole project's ready tickets and skipping the wrong ones one-by-one (a full wasted scan when none belong to the current repo, e.g. a JIRA project shared across `frontend`/`backend`/`infrastructure`). On JIRA, append to the JQL:
|
|
102
101
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Reset/Seed Coverage & State Classification (load-bearing)
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
9
9
|
> section below is the former eager head, preserved verbatim; the full
|
|
10
|
-
> contract follows it. Reachable on demand via
|
|
10
|
+
> contract follows it. Reachable on demand via [the rule index](00-rule-index.mdc).
|
|
11
11
|
|
|
12
12
|
## Usage Accounting (load-bearing)
|
|
13
13
|
|