@codyswann/lisa 4.33.6 → 4.33.8

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.
Files changed (101) hide show
  1. package/dist/cli/apply.d.ts.map +1 -1
  2. package/dist/cli/apply.js +8 -1
  3. package/dist/cli/apply.js.map +1 -1
  4. package/dist/core/apply-receipt.d.ts +18 -0
  5. package/dist/core/apply-receipt.d.ts.map +1 -1
  6. package/dist/core/apply-receipt.js +7 -5
  7. package/dist/core/apply-receipt.js.map +1 -1
  8. package/dist/core/config.d.ts +34 -0
  9. package/dist/core/config.d.ts.map +1 -1
  10. package/dist/core/config.js.map +1 -1
  11. package/dist/core/lisa.d.ts +75 -0
  12. package/dist/core/lisa.d.ts.map +1 -1
  13. package/dist/core/lisa.js +125 -6
  14. package/dist/core/lisa.js.map +1 -1
  15. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  16. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  17. package/dist/core/upstream-evidence-manifest.js +20 -5
  18. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  19. package/dist/core/workflow-deletion-ownership.d.ts +69 -0
  20. package/dist/core/workflow-deletion-ownership.d.ts.map +1 -0
  21. package/dist/core/workflow-deletion-ownership.js +156 -0
  22. package/dist/core/workflow-deletion-ownership.js.map +1 -0
  23. package/package.json +4 -4
  24. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  26. package/plugins/lisa/.codex-plugin/skills/lisa-intake-explain/SKILL.md +1 -1
  27. package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +32 -20
  28. package/plugins/lisa/.codex-plugin/skills/lisa-ticket-triage/SKILL.md +1 -1
  29. package/plugins/lisa/rules/eager/blocker-containment.md +44 -0
  30. package/plugins/lisa/rules/reference/blocker-containment.md +92 -0
  31. package/plugins/lisa/skills/lisa-intake-explain/SKILL.md +1 -1
  32. package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +32 -20
  33. package/plugins/lisa/skills/lisa-ticket-triage/SKILL.md +1 -1
  34. package/plugins/lisa-agy/plugin.json +1 -1
  35. package/plugins/lisa-agy/skills/lisa-intake-explain/SKILL.md +1 -1
  36. package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +32 -20
  37. package/plugins/lisa-agy/skills/lisa-ticket-triage/SKILL.md +1 -1
  38. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  40. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  41. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-copilot/rules/eager/blocker-containment.md +44 -0
  45. package/plugins/lisa-copilot/rules/reference/blocker-containment.md +92 -0
  46. package/plugins/lisa-copilot/skills/lisa-intake-explain/SKILL.md +1 -1
  47. package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +32 -20
  48. package/plugins/lisa-copilot/skills/lisa-ticket-triage/SKILL.md +1 -1
  49. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-cursor/rules/blocker-containment-reference.mdc +97 -0
  51. package/plugins/lisa-cursor/rules/blocker-containment.mdc +49 -0
  52. package/plugins/lisa-cursor/skills/lisa-intake-explain/SKILL.md +1 -1
  53. package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +32 -20
  54. package/plugins/lisa-cursor/skills/lisa-ticket-triage/SKILL.md +1 -1
  55. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  57. package/plugins/lisa-expo-agy/plugin.json +1 -1
  58. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  62. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  63. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  67. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  68. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  72. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  73. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  77. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  78. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  82. package/plugins/lisa-rails-agy/plugin.json +1 -1
  83. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  85. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  87. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  88. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  90. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  91. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  92. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  93. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  95. package/plugins/src/base/rules/eager/blocker-containment.md +44 -0
  96. package/plugins/src/base/rules/reference/blocker-containment.md +92 -0
  97. package/plugins/src/base/skills/lisa-intake-explain/SKILL.md +1 -1
  98. package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +32 -20
  99. package/plugins/src/base/skills/lisa-ticket-triage/SKILL.md +1 -1
  100. package/typescript/copy-overwrite/.github/GITHUB_ACTIONS.md +2 -2
  101. package/typescript/deletions.json +8 -1
@@ -1005,28 +1005,40 @@ is no normalized `is blocked by` field. Read the bundle, then extract blockers p
1005
1005
  - **Linear**: inspect the native issue **relations** from Linear MCP `get_issue` and select
1006
1006
  blocker relations.
1007
1007
 
1008
- Then classify each blocker:
1009
-
1010
- - **Closed, or shipped to any environment** → **cleared**. A blocker is cleared at **any**
1011
- env-staged `done` role — not only the production terminal. The `done` role is configured
1012
- per-env as a `{dev, staging, production}` map (`config-resolution`), so `On Dev`, `On Stg`,
1013
- **and** production `Done` all mean the blocker's code is merged and deployed to ≥1 environment.
1014
- A post-build `review` role (e.g. `Code Review`) is likewise cleared — the change exists and is
1015
- in flight. An `is blocked by` link is a **development** dependency: it is satisfied once the
1016
- blocker's code is in trunk; it must NOT wait for the blocker to reach production. (This matches
1017
- the intake-path dependency-hold gate in `lisa-intake-explain`, which already treats
1018
- `code-review` / `on-dev` / `on-stg` / `done` as cleared — repair-intake must not be stricter.
1019
- In an env-staged workflow where `Done` means "in production", a strict production-terminal
1020
- check strands every dependent forever behind a blocker that is already merged and sitting at
1021
- `On Stg` / `On Dev`.)
1022
- - **Open** in a pre-merge role (`ready` / `claimed` / unknown — code not yet in trunk) → **still
1023
- blocking**.
1024
- - **Inaccessible** (deleted, cross-org, permission denied) → **still blocking**, unless the item
1025
- body or a newer human comment explicitly states the dependency is resolved.
1008
+ Then classify each blocker **by containment, per the `blocker-containment` rule** — cite that
1009
+ slug for the full contract; do not restate its resolution steps or its fail-closed table here.
1010
+
1011
+ The one question is whether the blocker's code is on the branch **this item** will be built from:
1012
+ resolve this item's base branch from its `## Target Backend Environment` through
1013
+ `.lisa.config.json` `deploy.branches` (`derived-branch-plan`, `config-resolution` — never by
1014
+ reading a rendered `Branch Plan`), resolve the blocker's merge commit through the vendor access
1015
+ layer, and test ancestry against the remote.
1016
+
1017
+ - **Contained** — every merged PR on the blocker is an ancestor of this item's base branch →
1018
+ **cleared**.
1019
+ - **Not contained**, or containment **not computable** for any reason the rule enumerates (no
1020
+ linked PR, PR not merged, blocker inaccessible, base branch underivable or absent from the
1021
+ remote, ancestry query errored) → **still blocking**, with the rule's reason key in the run
1022
+ record.
1023
+ - **Ships no code** — the blocker is closed as completed, positively declares
1024
+ `Target Backend Environment: None — no runtime behavior change`, and has no merged PR →
1025
+ **cleared** under the rule's carve-out. This is a positive determination, never an absence:
1026
+ "no PR found" is `no-pr` and stays blocking.
1027
+ - **Human override** — an explicit human statement on this item that the dependency is satisfied
1028
+ clears it and outranks a failed containment check. Name it in the run record.
1029
+
1030
+ **A lifecycle status name is never the test.** `done`, `on-stg`, `on-dev` and `code-review` are
1031
+ labels that correlate with containment in a single-trunk workflow and come apart from it in a
1032
+ promotion workflow, where `main` is the trailing branch — a blocker at `On Stg` is on `staging`
1033
+ and absent from `main`, and a blocker in `Code Review` is merged to nothing. Containment gets
1034
+ both the loose and the strict failure right at once: a blocker merged into the branch this item
1035
+ builds from clears **immediately**, with no wait for production, so a dependent is never stranded
1036
+ behind work already merged where it needs it.
1026
1037
 
1027
1038
  Only re-dispatch when **every** parsed blocker is cleared. When in doubt, stay blocked — a
1028
- false-negative (left blocked) is cheap; a false-positive (re-dispatched into a real blocker)
1029
- wastes a build cycle.
1039
+ false-negative (left blocked) costs one cycle and is visible; a false-positive is **invisible**,
1040
+ because the item moves to `ready`, which looks exactly like a repair that worked, and the failure
1041
+ surfaces days later as work begun before its dependency existed.
1030
1042
 
1031
1043
  ### Class B — validation / quality-gate self-block
1032
1044
 
@@ -46,7 +46,7 @@ If relevant code IS found, proceed to Phase 2.
46
46
 
47
47
  From the context bundle, evaluate relationships before analyzing this ticket in isolation:
48
48
 
49
- - **Open blockers (`is blocked by`)**: if any blocker is not `Done` or its linked PR is not merged, raise an ambiguity: "Blocker {KEY} is not shipped — work cannot meaningfully start." This is an automatic `BLOCKED` verdict unless the human confirms the blocker state is acceptable.
49
+ - **Open blockers (`is blocked by`)**: clear-check each blocker **by containment, per the `blocker-containment` rule** — cite that slug for the full contract rather than restating it. A blocker is satisfied when its merged PRs are ancestors of the branch this ticket will be built from (resolved from this ticket's `## Target Backend Environment` through `.lisa.config.json` `deploy.branches`, never from a rendered `Branch Plan`), or when the rule's narrow no-code carve-out or human override applies. **`Done` is not the test** — a state name holds in a single-trunk workflow and comes apart in a promotion workflow, and requiring the production terminal strands every dependent behind work already merged where this ticket needs it. This is the same predicate the `DUPLICATE_ALREADY_FIXED` bullet below already requires ("present on the relevant base branch… never from a name/label match alone"), applied here too. For a blocker that is not contained, or where containment is not computable, raise an ambiguity naming the rule's reason key: "Blocker {KEY} is not on {BRANCH} ({REASON}) — work cannot meaningfully start." That is an automatic `BLOCKED` verdict unless the human confirms the blocker state is acceptable.
50
50
  - **Epic siblings in progress**: if a sibling under the same epic is `In Progress` / `In Review` with a different assignee and overlapping scope, raise it as an edge case in Phase 4 ("Duplicate-work risk with {KEY}").
51
51
  - **`duplicates` / `is duplicated by` links**:
52
52
  - If this ticket is a duplicate of an open canonical ticket whose fix is not yet merged into the base branch, verdict is `BLOCKED` with the recommendation to close as duplicate manually rather than implement.
@@ -45,6 +45,8 @@ For full functionality, configure the following secrets:
45
45
  |--------|---------|--------------|
46
46
  | `EXPO_TOKEN` | EAS builds and updates | Mobile deployment |
47
47
  | `SENTRY_AUTH_TOKEN` | Error tracking | Release monitoring |
48
+ | `SENTRY_ORG` | Sentry organization slug | Release monitoring |
49
+ | `SENTRY_PROJECT` | Sentry project slug | Release monitoring |
48
50
  | `SONAR_TOKEN` | Code quality analysis | Security scanning |
49
51
  | `SNYK_TOKEN` | Vulnerability scanning | Security scanning |
50
52
 
@@ -535,8 +537,6 @@ Variables are non-sensitive configuration values. Set them in **Settings** > **S
535
537
  | `JIRA_BASE_URL` | Jira instance base URL (enables Jira triage workflow) | `https://company.atlassian.net` |
536
538
  | `JIRA_USER_EMAIL` | Email associated with the Jira API token | `user@company.com` |
537
539
  | `JIRA_PROJECT_KEY` | Jira project key for ticket queries | `PROJ` |
538
- | `SENTRY_ORG` | Sentry organization slug | `my-company` |
539
- | `SENTRY_PROJECT` | Sentry project slug | `frontend-app` |
540
540
 
541
541
  ## External Service Setup
542
542
 
@@ -52,5 +52,12 @@
52
52
  ".github/workflows/reusable-claude-nightly-test-improvement-rails.yml",
53
53
  ".github/workflows/required-checks-drift.yml"
54
54
  ],
55
- "keep": []
55
+ "keep": [],
56
+ "force": {
57
+ ".github/workflows/auto-update-pr-branches.yml": "Removed fleet-wide (CodySwannGT/lisa#3590): it force-updated PR branches with the workflow's own github.token, and GitHub will not start runs from such a push, so required checks went ABSENT at head and pull requests silently stopped becoming mergeable. An edited copy does the same damage, so this removal overrides workflow ownership.",
58
+ ".github/workflows/auto-update-pr-branches-dispatch.yml": "Removed fleet-wide (CodySwannGT/lisa#3590): it force-updated PR branches with the workflow's own github.token, and GitHub will not start runs from such a push, so required checks went ABSENT at head and pull requests silently stopped becoming mergeable. An edited copy does the same damage, so this removal overrides workflow ownership.",
59
+ ".github/workflows/reusable-auto-update-pr-branches.yml": "Removed fleet-wide (CodySwannGT/lisa#3590): it force-updated PR branches with the workflow's own github.token, and GitHub will not start runs from such a push, so required checks went ABSENT at head and pull requests silently stopped becoming mergeable. An edited copy does the same damage, so this removal overrides workflow ownership.",
60
+ ".github/workflows/reusable-auto-update-pr-branches-dispatch.yml": "Removed fleet-wide (CodySwannGT/lisa#3590): it force-updated PR branches with the workflow's own github.token, and GitHub will not start runs from such a push, so required checks went ABSENT at head and pull requests silently stopped becoming mergeable. An edited copy does the same damage, so this removal overrides workflow ownership.",
61
+ ".github/workflows/required-checks-drift.yml": "Removed fleet-wide (CodySwannGT/lisa#3599): it read the live ruleset over the GitHub API, which needs administration:read and therefore a personal access token held in a permanent repository secret. An edited copy still asks for that token, so this removal overrides workflow ownership."
62
+ }
56
63
  }