@codyswann/lisa 4.4.7 → 4.4.9

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 (63) hide show
  1. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  2. package/dist/core/upstream-evidence-manifest.js +6 -3
  3. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  4. package/package.json +1 -1
  5. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  6. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  7. package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +30 -1
  8. package/plugins/lisa/skills/lisa-drive-pr-to-merge/SKILL.md +30 -1
  9. package/plugins/lisa-agy/plugin.json +1 -1
  10. package/plugins/lisa-agy/skills/lisa-drive-pr-to-merge/SKILL.md +30 -1
  11. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  13. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  14. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  15. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-copilot/skills/lisa-drive-pr-to-merge/SKILL.md +30 -1
  18. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa-cursor/skills/lisa-drive-pr-to-merge/SKILL.md +30 -1
  20. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  22. package/plugins/lisa-expo-agy/plugin.json +1 -1
  23. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  27. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  28. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  32. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  33. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  37. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  38. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  42. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  43. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  47. package/plugins/lisa-rails-agy/plugin.json +1 -1
  48. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  52. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  53. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  57. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  58. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/src/base/skills/lisa-drive-pr-to-merge/SKILL.md +30 -1
  61. package/scripts/lib/plugin-cache-resolution.mjs +325 -0
  62. package/scripts/plugin-parity-drift.mjs +20 -253
  63. package/scripts/plugin-routing-validate.mjs +32 -68
package/package.json CHANGED
@@ -145,7 +145,7 @@
145
145
  "zod-validation-error": "^4.0.0"
146
146
  },
147
147
  "name": "@codyswann/lisa",
148
- "version": "4.4.7",
148
+ "version": "4.4.9",
149
149
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
150
150
  "main": "dist/index.js",
151
151
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -341,6 +341,32 @@ auto-merge armed (section 1); when it returns, re-read `headRefOid` and reset
341
341
  `verify_commit` to the returned/pushed head, then continue. Do not re-implement review handling here
342
342
  — it is the single source of truth for review-thread handling.
343
343
 
344
+ **Merging past a rate-limited CodeRabbit is permitted — but ONLY when CodeRabbit
345
+ is the sole gate still blocking the merge.** When the CodeRabbit context reports
346
+ `Review rate limited` (or stays pending/queued because of the vendor cap) and it
347
+ is the *only* thing standing between the PR and `MERGED`, do not wait it out:
348
+ with `auto_merge=true` the PR already has auto-merge enabled (section 1), so
349
+ leave the latch armed and merge directly with `gh pr merge <pr> --<merge_method>`
350
+ (pass `--admin` only if branch protection lists the rate-limited context as
351
+ required and refuses the plain merge). "Sole gate" means every one of these is
352
+ already true at the moment you merge — verify each against the live poll, never
353
+ from memory:
354
+
355
+ - every other required check in `statusCheckRollup` is green (no FAILURE, no
356
+ other PENDING);
357
+ - zero unresolved review threads (human or bot);
358
+ - `reviewDecision` is not `CHANGES_REQUESTED`;
359
+ - `mergeable == MERGEABLE` and `mergeStateStatus` is not `BEHIND`/`DIRTY`;
360
+ - no pending auto-fix PR into this branch (step f).
361
+
362
+ If *anything* else is also blocking, the exception does not apply: clear that
363
+ blocker through its own step first, re-poll, and only then re-evaluate whether
364
+ CodeRabbit is the last gate standing. The exception never stacks with another
365
+ bypass, never fires under `auto_merge=false` (that mode stops at
366
+ `awaiting-human`, and a human decides), and never fires in `on_blocker=report`
367
+ mode. Record the result as `MERGED — NOT REVIEWED: CodeRabbit rate limited
368
+ (merged past as sole remaining gate)` in the terminal report (section 4).
369
+
344
370
  ### e. Review gate stall (`reviewDecision == CHANGES_REQUESTED`)
345
371
  After the requested changes are addressed and threads resolved, the prior
346
372
  `CHANGES_REQUESTED` review still blocks — a later `COMMENTED` review does not clear
@@ -541,7 +567,9 @@ Loop until one of:
541
567
  - **Hard block needing a human**: an unresolvable conflict, a failing check that
542
568
  needs design input, or genuine unresolved human objection (not a bot gate). Stop
543
569
  and report exactly what is blocking and what was already tried — never force the
544
- merge or weaken a gate to get past it.
570
+ merge or weaken a gate to get past it. The one sanctioned exception is a
571
+ rate-limited CodeRabbit that is the *sole* remaining gate on an auto-merge
572
+ enabled PR (step d); it never extends to any other gate.
545
573
 
546
574
  At every terminal state, release the babysitter lease
547
575
  (`gh pr edit <pr> --remove-label "lisa:babysitter-on-duty"`) so the CI
@@ -556,6 +584,7 @@ So state the verdict alongside the outcome:
556
584
 
557
585
  - `MERGED — reviewed (CodeRabbit "Review approved")`
558
586
  - `MERGED — NOT REVIEWED: CodeRabbit posted success but "Review rate limited"`
587
+ - `MERGED — NOT REVIEWED: CodeRabbit rate limited (merged past as sole remaining gate)`
559
588
 
560
589
  This is reporting, never a terminal state of its own. `NOT REVIEWED` does not
561
590
  turn a merged PR into a blocked one, and it must never be used to withhold a
@@ -341,6 +341,32 @@ auto-merge armed (section 1); when it returns, re-read `headRefOid` and reset
341
341
  `verify_commit` to the returned/pushed head, then continue. Do not re-implement review handling here
342
342
  — it is the single source of truth for review-thread handling.
343
343
 
344
+ **Merging past a rate-limited CodeRabbit is permitted — but ONLY when CodeRabbit
345
+ is the sole gate still blocking the merge.** When the CodeRabbit context reports
346
+ `Review rate limited` (or stays pending/queued because of the vendor cap) and it
347
+ is the *only* thing standing between the PR and `MERGED`, do not wait it out:
348
+ with `auto_merge=true` the PR already has auto-merge enabled (section 1), so
349
+ leave the latch armed and merge directly with `gh pr merge <pr> --<merge_method>`
350
+ (pass `--admin` only if branch protection lists the rate-limited context as
351
+ required and refuses the plain merge). "Sole gate" means every one of these is
352
+ already true at the moment you merge — verify each against the live poll, never
353
+ from memory:
354
+
355
+ - every other required check in `statusCheckRollup` is green (no FAILURE, no
356
+ other PENDING);
357
+ - zero unresolved review threads (human or bot);
358
+ - `reviewDecision` is not `CHANGES_REQUESTED`;
359
+ - `mergeable == MERGEABLE` and `mergeStateStatus` is not `BEHIND`/`DIRTY`;
360
+ - no pending auto-fix PR into this branch (step f).
361
+
362
+ If *anything* else is also blocking, the exception does not apply: clear that
363
+ blocker through its own step first, re-poll, and only then re-evaluate whether
364
+ CodeRabbit is the last gate standing. The exception never stacks with another
365
+ bypass, never fires under `auto_merge=false` (that mode stops at
366
+ `awaiting-human`, and a human decides), and never fires in `on_blocker=report`
367
+ mode. Record the result as `MERGED — NOT REVIEWED: CodeRabbit rate limited
368
+ (merged past as sole remaining gate)` in the terminal report (section 4).
369
+
344
370
  ### e. Review gate stall (`reviewDecision == CHANGES_REQUESTED`)
345
371
  After the requested changes are addressed and threads resolved, the prior
346
372
  `CHANGES_REQUESTED` review still blocks — a later `COMMENTED` review does not clear
@@ -541,7 +567,9 @@ Loop until one of:
541
567
  - **Hard block needing a human**: an unresolvable conflict, a failing check that
542
568
  needs design input, or genuine unresolved human objection (not a bot gate). Stop
543
569
  and report exactly what is blocking and what was already tried — never force the
544
- merge or weaken a gate to get past it.
570
+ merge or weaken a gate to get past it. The one sanctioned exception is a
571
+ rate-limited CodeRabbit that is the *sole* remaining gate on an auto-merge
572
+ enabled PR (step d); it never extends to any other gate.
545
573
 
546
574
  At every terminal state, release the babysitter lease
547
575
  (`gh pr edit <pr> --remove-label "lisa:babysitter-on-duty"`) so the CI
@@ -556,6 +584,7 @@ So state the verdict alongside the outcome:
556
584
 
557
585
  - `MERGED — reviewed (CodeRabbit "Review approved")`
558
586
  - `MERGED — NOT REVIEWED: CodeRabbit posted success but "Review rate limited"`
587
+ - `MERGED — NOT REVIEWED: CodeRabbit rate limited (merged past as sole remaining gate)`
559
588
 
560
589
  This is reporting, never a terminal state of its own. `NOT REVIEWED` does not
561
590
  turn a merged PR into a blocked one, and it must never be used to withhold a
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -341,6 +341,32 @@ auto-merge armed (section 1); when it returns, re-read `headRefOid` and reset
341
341
  `verify_commit` to the returned/pushed head, then continue. Do not re-implement review handling here
342
342
  — it is the single source of truth for review-thread handling.
343
343
 
344
+ **Merging past a rate-limited CodeRabbit is permitted — but ONLY when CodeRabbit
345
+ is the sole gate still blocking the merge.** When the CodeRabbit context reports
346
+ `Review rate limited` (or stays pending/queued because of the vendor cap) and it
347
+ is the *only* thing standing between the PR and `MERGED`, do not wait it out:
348
+ with `auto_merge=true` the PR already has auto-merge enabled (section 1), so
349
+ leave the latch armed and merge directly with `gh pr merge <pr> --<merge_method>`
350
+ (pass `--admin` only if branch protection lists the rate-limited context as
351
+ required and refuses the plain merge). "Sole gate" means every one of these is
352
+ already true at the moment you merge — verify each against the live poll, never
353
+ from memory:
354
+
355
+ - every other required check in `statusCheckRollup` is green (no FAILURE, no
356
+ other PENDING);
357
+ - zero unresolved review threads (human or bot);
358
+ - `reviewDecision` is not `CHANGES_REQUESTED`;
359
+ - `mergeable == MERGEABLE` and `mergeStateStatus` is not `BEHIND`/`DIRTY`;
360
+ - no pending auto-fix PR into this branch (step f).
361
+
362
+ If *anything* else is also blocking, the exception does not apply: clear that
363
+ blocker through its own step first, re-poll, and only then re-evaluate whether
364
+ CodeRabbit is the last gate standing. The exception never stacks with another
365
+ bypass, never fires under `auto_merge=false` (that mode stops at
366
+ `awaiting-human`, and a human decides), and never fires in `on_blocker=report`
367
+ mode. Record the result as `MERGED — NOT REVIEWED: CodeRabbit rate limited
368
+ (merged past as sole remaining gate)` in the terminal report (section 4).
369
+
344
370
  ### e. Review gate stall (`reviewDecision == CHANGES_REQUESTED`)
345
371
  After the requested changes are addressed and threads resolved, the prior
346
372
  `CHANGES_REQUESTED` review still blocks — a later `COMMENTED` review does not clear
@@ -541,7 +567,9 @@ Loop until one of:
541
567
  - **Hard block needing a human**: an unresolvable conflict, a failing check that
542
568
  needs design input, or genuine unresolved human objection (not a bot gate). Stop
543
569
  and report exactly what is blocking and what was already tried — never force the
544
- merge or weaken a gate to get past it.
570
+ merge or weaken a gate to get past it. The one sanctioned exception is a
571
+ rate-limited CodeRabbit that is the *sole* remaining gate on an auto-merge
572
+ enabled PR (step d); it never extends to any other gate.
545
573
 
546
574
  At every terminal state, release the babysitter lease
547
575
  (`gh pr edit <pr> --remove-label "lisa:babysitter-on-duty"`) so the CI
@@ -556,6 +584,7 @@ So state the verdict alongside the outcome:
556
584
 
557
585
  - `MERGED — reviewed (CodeRabbit "Review approved")`
558
586
  - `MERGED — NOT REVIEWED: CodeRabbit posted success but "Review rate limited"`
587
+ - `MERGED — NOT REVIEWED: CodeRabbit rate limited (merged past as sole remaining gate)`
559
588
 
560
589
  This is reporting, never a terminal state of its own. `NOT REVIEWED` does not
561
590
  turn a merged PR into a blocked one, and it must never be used to withhold a
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -341,6 +341,32 @@ auto-merge armed (section 1); when it returns, re-read `headRefOid` and reset
341
341
  `verify_commit` to the returned/pushed head, then continue. Do not re-implement review handling here
342
342
  — it is the single source of truth for review-thread handling.
343
343
 
344
+ **Merging past a rate-limited CodeRabbit is permitted — but ONLY when CodeRabbit
345
+ is the sole gate still blocking the merge.** When the CodeRabbit context reports
346
+ `Review rate limited` (or stays pending/queued because of the vendor cap) and it
347
+ is the *only* thing standing between the PR and `MERGED`, do not wait it out:
348
+ with `auto_merge=true` the PR already has auto-merge enabled (section 1), so
349
+ leave the latch armed and merge directly with `gh pr merge <pr> --<merge_method>`
350
+ (pass `--admin` only if branch protection lists the rate-limited context as
351
+ required and refuses the plain merge). "Sole gate" means every one of these is
352
+ already true at the moment you merge — verify each against the live poll, never
353
+ from memory:
354
+
355
+ - every other required check in `statusCheckRollup` is green (no FAILURE, no
356
+ other PENDING);
357
+ - zero unresolved review threads (human or bot);
358
+ - `reviewDecision` is not `CHANGES_REQUESTED`;
359
+ - `mergeable == MERGEABLE` and `mergeStateStatus` is not `BEHIND`/`DIRTY`;
360
+ - no pending auto-fix PR into this branch (step f).
361
+
362
+ If *anything* else is also blocking, the exception does not apply: clear that
363
+ blocker through its own step first, re-poll, and only then re-evaluate whether
364
+ CodeRabbit is the last gate standing. The exception never stacks with another
365
+ bypass, never fires under `auto_merge=false` (that mode stops at
366
+ `awaiting-human`, and a human decides), and never fires in `on_blocker=report`
367
+ mode. Record the result as `MERGED — NOT REVIEWED: CodeRabbit rate limited
368
+ (merged past as sole remaining gate)` in the terminal report (section 4).
369
+
344
370
  ### e. Review gate stall (`reviewDecision == CHANGES_REQUESTED`)
345
371
  After the requested changes are addressed and threads resolved, the prior
346
372
  `CHANGES_REQUESTED` review still blocks — a later `COMMENTED` review does not clear
@@ -541,7 +567,9 @@ Loop until one of:
541
567
  - **Hard block needing a human**: an unresolvable conflict, a failing check that
542
568
  needs design input, or genuine unresolved human objection (not a bot gate). Stop
543
569
  and report exactly what is blocking and what was already tried — never force the
544
- merge or weaken a gate to get past it.
570
+ merge or weaken a gate to get past it. The one sanctioned exception is a
571
+ rate-limited CodeRabbit that is the *sole* remaining gate on an auto-merge
572
+ enabled PR (step d); it never extends to any other gate.
545
573
 
546
574
  At every terminal state, release the babysitter lease
547
575
  (`gh pr edit <pr> --remove-label "lisa:babysitter-on-duty"`) so the CI
@@ -556,6 +584,7 @@ So state the verdict alongside the outcome:
556
584
 
557
585
  - `MERGED — reviewed (CodeRabbit "Review approved")`
558
586
  - `MERGED — NOT REVIEWED: CodeRabbit posted success but "Review rate limited"`
587
+ - `MERGED — NOT REVIEWED: CodeRabbit rate limited (merged past as sole remaining gate)`
559
588
 
560
589
  This is reporting, never a terminal state of its own. `NOT REVIEWED` does not
561
590
  turn a merged PR into a blocked one, and it must never be used to withhold a
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -341,6 +341,32 @@ auto-merge armed (section 1); when it returns, re-read `headRefOid` and reset
341
341
  `verify_commit` to the returned/pushed head, then continue. Do not re-implement review handling here
342
342
  — it is the single source of truth for review-thread handling.
343
343
 
344
+ **Merging past a rate-limited CodeRabbit is permitted — but ONLY when CodeRabbit
345
+ is the sole gate still blocking the merge.** When the CodeRabbit context reports
346
+ `Review rate limited` (or stays pending/queued because of the vendor cap) and it
347
+ is the *only* thing standing between the PR and `MERGED`, do not wait it out:
348
+ with `auto_merge=true` the PR already has auto-merge enabled (section 1), so
349
+ leave the latch armed and merge directly with `gh pr merge <pr> --<merge_method>`
350
+ (pass `--admin` only if branch protection lists the rate-limited context as
351
+ required and refuses the plain merge). "Sole gate" means every one of these is
352
+ already true at the moment you merge — verify each against the live poll, never
353
+ from memory:
354
+
355
+ - every other required check in `statusCheckRollup` is green (no FAILURE, no
356
+ other PENDING);
357
+ - zero unresolved review threads (human or bot);
358
+ - `reviewDecision` is not `CHANGES_REQUESTED`;
359
+ - `mergeable == MERGEABLE` and `mergeStateStatus` is not `BEHIND`/`DIRTY`;
360
+ - no pending auto-fix PR into this branch (step f).
361
+
362
+ If *anything* else is also blocking, the exception does not apply: clear that
363
+ blocker through its own step first, re-poll, and only then re-evaluate whether
364
+ CodeRabbit is the last gate standing. The exception never stacks with another
365
+ bypass, never fires under `auto_merge=false` (that mode stops at
366
+ `awaiting-human`, and a human decides), and never fires in `on_blocker=report`
367
+ mode. Record the result as `MERGED — NOT REVIEWED: CodeRabbit rate limited
368
+ (merged past as sole remaining gate)` in the terminal report (section 4).
369
+
344
370
  ### e. Review gate stall (`reviewDecision == CHANGES_REQUESTED`)
345
371
  After the requested changes are addressed and threads resolved, the prior
346
372
  `CHANGES_REQUESTED` review still blocks — a later `COMMENTED` review does not clear
@@ -541,7 +567,9 @@ Loop until one of:
541
567
  - **Hard block needing a human**: an unresolvable conflict, a failing check that
542
568
  needs design input, or genuine unresolved human objection (not a bot gate). Stop
543
569
  and report exactly what is blocking and what was already tried — never force the
544
- merge or weaken a gate to get past it.
570
+ merge or weaken a gate to get past it. The one sanctioned exception is a
571
+ rate-limited CodeRabbit that is the *sole* remaining gate on an auto-merge
572
+ enabled PR (step d); it never extends to any other gate.
545
573
 
546
574
  At every terminal state, release the babysitter lease
547
575
  (`gh pr edit <pr> --remove-label "lisa:babysitter-on-duty"`) so the CI
@@ -556,6 +584,7 @@ So state the verdict alongside the outcome:
556
584
 
557
585
  - `MERGED — reviewed (CodeRabbit "Review approved")`
558
586
  - `MERGED — NOT REVIEWED: CodeRabbit posted success but "Review rate limited"`
587
+ - `MERGED — NOT REVIEWED: CodeRabbit rate limited (merged past as sole remaining gate)`
559
588
 
560
589
  This is reporting, never a terminal state of its own. `NOT REVIEWED` does not
561
590
  turn a merged PR into a blocked one, and it must never be used to withhold a
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"