@codyswann/lisa 2.191.1 → 2.191.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.
Files changed (56) hide show
  1. package/package.json +1 -1
  2. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  3. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  4. package/plugins/lisa/skills/lisa-drive-pr-to-merge/SKILL.md +33 -6
  5. package/plugins/lisa-agy/plugin.json +1 -1
  6. package/plugins/lisa-agy/skills/lisa-drive-pr-to-merge/SKILL.md +33 -6
  7. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  8. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  9. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  10. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  11. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  13. package/plugins/lisa-copilot/skills/lisa-drive-pr-to-merge/SKILL.md +33 -6
  14. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  15. package/plugins/lisa-cursor/skills/lisa-drive-pr-to-merge/SKILL.md +33 -6
  16. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  18. package/plugins/lisa-expo-agy/plugin.json +1 -1
  19. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  23. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  24. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  28. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  29. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  33. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  34. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  38. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  39. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  43. package/plugins/lisa-rails-agy/plugin.json +1 -1
  44. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  48. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  49. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  53. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  54. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  56. package/plugins/src/base/skills/lisa-drive-pr-to-merge/SKILL.md +33 -6
package/package.json CHANGED
@@ -95,7 +95,7 @@
95
95
  "ws": ">=8.20.1"
96
96
  },
97
97
  "name": "@codyswann/lisa",
98
- "version": "2.191.1",
98
+ "version": "2.191.3",
99
99
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
100
100
  "main": "dist/index.js",
101
101
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -38,9 +38,29 @@ Use plain `gh` + `git` so Claude and Codex execute identically.
38
38
 
39
39
  ## 1. Enable auto-merge
40
40
 
41
+ Before enabling auto-merge, capture the live PR head and compare it to
42
+ `verify_commit`:
43
+
44
+ ```bash
45
+ head_sha=$(gh pr view <pr> --json headRefOid -q .headRefOid)
46
+ test "$head_sha" = "<verify_commit>"
47
+ ```
48
+
49
+ If they differ, reset `verify_commit` to the live head only after confirming the
50
+ new head contains the intended fix, or stop and report the mismatch. Never enable
51
+ auto-merge against a stale head you have not verified.
52
+
41
53
  `gh pr merge <pr> --auto --<merge_method>`. Enabling auto-merge is **not terminal**
42
54
  — continue the loop below until the PR is actually `MERGED` or `CLOSED`.
43
55
 
56
+ If any later step will push commits, temporarily remove the auto-merge latch
57
+ before the push when GitHub exposes that mutation (`disablePullRequestAutoMerge`),
58
+ or otherwise treat the push as a merge race: immediately re-read `headRefOid`,
59
+ reset `verify_commit` to the pushed head, wait until that head's checks have
60
+ started, then re-enable auto-merge. Do not leave auto-merge armed while a
61
+ required fix, CodeRabbit follow-up, generated artifact update, or CI auto-fix is
62
+ still in flight.
63
+
44
64
  - **Capability fallback**: if the repo disallows auto-merge, do not fail. Keep
45
65
  watching; once checks are green, the review gate is clear, and `mergeable == MERGEABLE`,
46
66
  run `gh pr merge <pr> --<merge_method>` directly.
@@ -99,17 +119,23 @@ surface the file list and merge state.
99
119
  ### c. Failing CI / deploy checks (`statusCheckRollup` has FAILURE)
100
120
  Inspect the failing check's logs (`gh pr checks <pr>`, `gh run view <run> --log-failed`).
101
121
  Fix the underlying code inline — **never lower thresholds, skip tests, or disable
102
- checks** to force green. Commit, push, resume. When the root cause is an upstream
103
- Lisa template/postinstall bug rather than this project's code, fix it upstream and
104
- propagate down rather than patching only here.
122
+ checks** to force green. Before pushing the fix, disarm auto-merge or classify the
123
+ run as race-prone, then after the push re-read the PR head, update `verify_commit`
124
+ to that exact SHA, wait for checks on that head to start, and only then resume
125
+ auto-merge. When the root cause is an upstream Lisa template/postinstall bug
126
+ rather than this project's code, fix it upstream and propagate down rather than
127
+ patching only here.
105
128
 
106
129
  ### d. Review comments — human and bot (CodeRabbit, etc.)
107
130
  Delegate to the `pull-request-review` skill with the PR number. It owns the whole
108
131
  comment cycle: fetch every unresolved human + bot thread (with resolution state via
109
132
  GraphQL), implement valid feedback (commit + push), reply to invalid feedback, and
110
133
  resolve every thread via `resolveReviewThread` so the branch-protection
111
- thread-resolution gate clears. Do not re-implement that here it is the single
112
- source of truth for review-thread handling. When it returns, re-poll and continue.
134
+ thread-resolution gate clears. If that skill needs to push a commit, auto-merge
135
+ must be disabled first when possible; when it returns, re-read `headRefOid`, reset
136
+ `verify_commit` to the returned/pushed head, wait for that head's checks to start,
137
+ then re-enable auto-merge and continue. Do not re-implement review handling here
138
+ — it is the single source of truth for review-thread handling.
113
139
 
114
140
  ### e. Review gate stall (`reviewDecision == CHANGES_REQUESTED`)
115
141
  After the requested changes are addressed and threads resolved, the prior
@@ -138,7 +164,8 @@ git merge-base --is-ancestor <verify_commit> origin/<baseRefName> # exit 0 = s
138
164
  Also confirm the merge commit's parent is your fixed head, not a stale one. If a
139
165
  late commit (CI auto-fix, CodeRabbit follow-up) raced past the merge, it did **not**
140
166
  ship — fix forward with a new commit/PR and re-drive. Re-confirm after any commit
141
- that lands while auto-merge is enabled.
167
+ that lands while auto-merge is enabled; a successful merge of an older head is a
168
+ failed drive-to-merge outcome, not a successful closeout.
142
169
 
143
170
  ## 4. Terminal states
144
171
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -38,9 +38,29 @@ Use plain `gh` + `git` so Claude and Codex execute identically.
38
38
 
39
39
  ## 1. Enable auto-merge
40
40
 
41
+ Before enabling auto-merge, capture the live PR head and compare it to
42
+ `verify_commit`:
43
+
44
+ ```bash
45
+ head_sha=$(gh pr view <pr> --json headRefOid -q .headRefOid)
46
+ test "$head_sha" = "<verify_commit>"
47
+ ```
48
+
49
+ If they differ, reset `verify_commit` to the live head only after confirming the
50
+ new head contains the intended fix, or stop and report the mismatch. Never enable
51
+ auto-merge against a stale head you have not verified.
52
+
41
53
  `gh pr merge <pr> --auto --<merge_method>`. Enabling auto-merge is **not terminal**
42
54
  — continue the loop below until the PR is actually `MERGED` or `CLOSED`.
43
55
 
56
+ If any later step will push commits, temporarily remove the auto-merge latch
57
+ before the push when GitHub exposes that mutation (`disablePullRequestAutoMerge`),
58
+ or otherwise treat the push as a merge race: immediately re-read `headRefOid`,
59
+ reset `verify_commit` to the pushed head, wait until that head's checks have
60
+ started, then re-enable auto-merge. Do not leave auto-merge armed while a
61
+ required fix, CodeRabbit follow-up, generated artifact update, or CI auto-fix is
62
+ still in flight.
63
+
44
64
  - **Capability fallback**: if the repo disallows auto-merge, do not fail. Keep
45
65
  watching; once checks are green, the review gate is clear, and `mergeable == MERGEABLE`,
46
66
  run `gh pr merge <pr> --<merge_method>` directly.
@@ -99,17 +119,23 @@ surface the file list and merge state.
99
119
  ### c. Failing CI / deploy checks (`statusCheckRollup` has FAILURE)
100
120
  Inspect the failing check's logs (`gh pr checks <pr>`, `gh run view <run> --log-failed`).
101
121
  Fix the underlying code inline — **never lower thresholds, skip tests, or disable
102
- checks** to force green. Commit, push, resume. When the root cause is an upstream
103
- Lisa template/postinstall bug rather than this project's code, fix it upstream and
104
- propagate down rather than patching only here.
122
+ checks** to force green. Before pushing the fix, disarm auto-merge or classify the
123
+ run as race-prone, then after the push re-read the PR head, update `verify_commit`
124
+ to that exact SHA, wait for checks on that head to start, and only then resume
125
+ auto-merge. When the root cause is an upstream Lisa template/postinstall bug
126
+ rather than this project's code, fix it upstream and propagate down rather than
127
+ patching only here.
105
128
 
106
129
  ### d. Review comments — human and bot (CodeRabbit, etc.)
107
130
  Delegate to the `pull-request-review` skill with the PR number. It owns the whole
108
131
  comment cycle: fetch every unresolved human + bot thread (with resolution state via
109
132
  GraphQL), implement valid feedback (commit + push), reply to invalid feedback, and
110
133
  resolve every thread via `resolveReviewThread` so the branch-protection
111
- thread-resolution gate clears. Do not re-implement that here it is the single
112
- source of truth for review-thread handling. When it returns, re-poll and continue.
134
+ thread-resolution gate clears. If that skill needs to push a commit, auto-merge
135
+ must be disabled first when possible; when it returns, re-read `headRefOid`, reset
136
+ `verify_commit` to the returned/pushed head, wait for that head's checks to start,
137
+ then re-enable auto-merge and continue. Do not re-implement review handling here
138
+ — it is the single source of truth for review-thread handling.
113
139
 
114
140
  ### e. Review gate stall (`reviewDecision == CHANGES_REQUESTED`)
115
141
  After the requested changes are addressed and threads resolved, the prior
@@ -138,7 +164,8 @@ git merge-base --is-ancestor <verify_commit> origin/<baseRefName> # exit 0 = s
138
164
  Also confirm the merge commit's parent is your fixed head, not a stale one. If a
139
165
  late commit (CI auto-fix, CodeRabbit follow-up) raced past the merge, it did **not**
140
166
  ship — fix forward with a new commit/PR and re-drive. Re-confirm after any commit
141
- that lands while auto-merge is enabled.
167
+ that lands while auto-merge is enabled; a successful merge of an older head is a
168
+ failed drive-to-merge outcome, not a successful closeout.
142
169
 
143
170
  ## 4. Terminal states
144
171
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -38,9 +38,29 @@ Use plain `gh` + `git` so Claude and Codex execute identically.
38
38
 
39
39
  ## 1. Enable auto-merge
40
40
 
41
+ Before enabling auto-merge, capture the live PR head and compare it to
42
+ `verify_commit`:
43
+
44
+ ```bash
45
+ head_sha=$(gh pr view <pr> --json headRefOid -q .headRefOid)
46
+ test "$head_sha" = "<verify_commit>"
47
+ ```
48
+
49
+ If they differ, reset `verify_commit` to the live head only after confirming the
50
+ new head contains the intended fix, or stop and report the mismatch. Never enable
51
+ auto-merge against a stale head you have not verified.
52
+
41
53
  `gh pr merge <pr> --auto --<merge_method>`. Enabling auto-merge is **not terminal**
42
54
  — continue the loop below until the PR is actually `MERGED` or `CLOSED`.
43
55
 
56
+ If any later step will push commits, temporarily remove the auto-merge latch
57
+ before the push when GitHub exposes that mutation (`disablePullRequestAutoMerge`),
58
+ or otherwise treat the push as a merge race: immediately re-read `headRefOid`,
59
+ reset `verify_commit` to the pushed head, wait until that head's checks have
60
+ started, then re-enable auto-merge. Do not leave auto-merge armed while a
61
+ required fix, CodeRabbit follow-up, generated artifact update, or CI auto-fix is
62
+ still in flight.
63
+
44
64
  - **Capability fallback**: if the repo disallows auto-merge, do not fail. Keep
45
65
  watching; once checks are green, the review gate is clear, and `mergeable == MERGEABLE`,
46
66
  run `gh pr merge <pr> --<merge_method>` directly.
@@ -99,17 +119,23 @@ surface the file list and merge state.
99
119
  ### c. Failing CI / deploy checks (`statusCheckRollup` has FAILURE)
100
120
  Inspect the failing check's logs (`gh pr checks <pr>`, `gh run view <run> --log-failed`).
101
121
  Fix the underlying code inline — **never lower thresholds, skip tests, or disable
102
- checks** to force green. Commit, push, resume. When the root cause is an upstream
103
- Lisa template/postinstall bug rather than this project's code, fix it upstream and
104
- propagate down rather than patching only here.
122
+ checks** to force green. Before pushing the fix, disarm auto-merge or classify the
123
+ run as race-prone, then after the push re-read the PR head, update `verify_commit`
124
+ to that exact SHA, wait for checks on that head to start, and only then resume
125
+ auto-merge. When the root cause is an upstream Lisa template/postinstall bug
126
+ rather than this project's code, fix it upstream and propagate down rather than
127
+ patching only here.
105
128
 
106
129
  ### d. Review comments — human and bot (CodeRabbit, etc.)
107
130
  Delegate to the `pull-request-review` skill with the PR number. It owns the whole
108
131
  comment cycle: fetch every unresolved human + bot thread (with resolution state via
109
132
  GraphQL), implement valid feedback (commit + push), reply to invalid feedback, and
110
133
  resolve every thread via `resolveReviewThread` so the branch-protection
111
- thread-resolution gate clears. Do not re-implement that here it is the single
112
- source of truth for review-thread handling. When it returns, re-poll and continue.
134
+ thread-resolution gate clears. If that skill needs to push a commit, auto-merge
135
+ must be disabled first when possible; when it returns, re-read `headRefOid`, reset
136
+ `verify_commit` to the returned/pushed head, wait for that head's checks to start,
137
+ then re-enable auto-merge and continue. Do not re-implement review handling here
138
+ — it is the single source of truth for review-thread handling.
113
139
 
114
140
  ### e. Review gate stall (`reviewDecision == CHANGES_REQUESTED`)
115
141
  After the requested changes are addressed and threads resolved, the prior
@@ -138,7 +164,8 @@ git merge-base --is-ancestor <verify_commit> origin/<baseRefName> # exit 0 = s
138
164
  Also confirm the merge commit's parent is your fixed head, not a stale one. If a
139
165
  late commit (CI auto-fix, CodeRabbit follow-up) raced past the merge, it did **not**
140
166
  ship — fix forward with a new commit/PR and re-drive. Re-confirm after any commit
141
- that lands while auto-merge is enabled.
167
+ that lands while auto-merge is enabled; a successful merge of an older head is a
168
+ failed drive-to-merge outcome, not a successful closeout.
142
169
 
143
170
  ## 4. Terminal states
144
171
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -38,9 +38,29 @@ Use plain `gh` + `git` so Claude and Codex execute identically.
38
38
 
39
39
  ## 1. Enable auto-merge
40
40
 
41
+ Before enabling auto-merge, capture the live PR head and compare it to
42
+ `verify_commit`:
43
+
44
+ ```bash
45
+ head_sha=$(gh pr view <pr> --json headRefOid -q .headRefOid)
46
+ test "$head_sha" = "<verify_commit>"
47
+ ```
48
+
49
+ If they differ, reset `verify_commit` to the live head only after confirming the
50
+ new head contains the intended fix, or stop and report the mismatch. Never enable
51
+ auto-merge against a stale head you have not verified.
52
+
41
53
  `gh pr merge <pr> --auto --<merge_method>`. Enabling auto-merge is **not terminal**
42
54
  — continue the loop below until the PR is actually `MERGED` or `CLOSED`.
43
55
 
56
+ If any later step will push commits, temporarily remove the auto-merge latch
57
+ before the push when GitHub exposes that mutation (`disablePullRequestAutoMerge`),
58
+ or otherwise treat the push as a merge race: immediately re-read `headRefOid`,
59
+ reset `verify_commit` to the pushed head, wait until that head's checks have
60
+ started, then re-enable auto-merge. Do not leave auto-merge armed while a
61
+ required fix, CodeRabbit follow-up, generated artifact update, or CI auto-fix is
62
+ still in flight.
63
+
44
64
  - **Capability fallback**: if the repo disallows auto-merge, do not fail. Keep
45
65
  watching; once checks are green, the review gate is clear, and `mergeable == MERGEABLE`,
46
66
  run `gh pr merge <pr> --<merge_method>` directly.
@@ -99,17 +119,23 @@ surface the file list and merge state.
99
119
  ### c. Failing CI / deploy checks (`statusCheckRollup` has FAILURE)
100
120
  Inspect the failing check's logs (`gh pr checks <pr>`, `gh run view <run> --log-failed`).
101
121
  Fix the underlying code inline — **never lower thresholds, skip tests, or disable
102
- checks** to force green. Commit, push, resume. When the root cause is an upstream
103
- Lisa template/postinstall bug rather than this project's code, fix it upstream and
104
- propagate down rather than patching only here.
122
+ checks** to force green. Before pushing the fix, disarm auto-merge or classify the
123
+ run as race-prone, then after the push re-read the PR head, update `verify_commit`
124
+ to that exact SHA, wait for checks on that head to start, and only then resume
125
+ auto-merge. When the root cause is an upstream Lisa template/postinstall bug
126
+ rather than this project's code, fix it upstream and propagate down rather than
127
+ patching only here.
105
128
 
106
129
  ### d. Review comments — human and bot (CodeRabbit, etc.)
107
130
  Delegate to the `pull-request-review` skill with the PR number. It owns the whole
108
131
  comment cycle: fetch every unresolved human + bot thread (with resolution state via
109
132
  GraphQL), implement valid feedback (commit + push), reply to invalid feedback, and
110
133
  resolve every thread via `resolveReviewThread` so the branch-protection
111
- thread-resolution gate clears. Do not re-implement that here it is the single
112
- source of truth for review-thread handling. When it returns, re-poll and continue.
134
+ thread-resolution gate clears. If that skill needs to push a commit, auto-merge
135
+ must be disabled first when possible; when it returns, re-read `headRefOid`, reset
136
+ `verify_commit` to the returned/pushed head, wait for that head's checks to start,
137
+ then re-enable auto-merge and continue. Do not re-implement review handling here
138
+ — it is the single source of truth for review-thread handling.
113
139
 
114
140
  ### e. Review gate stall (`reviewDecision == CHANGES_REQUESTED`)
115
141
  After the requested changes are addressed and threads resolved, the prior
@@ -138,7 +164,8 @@ git merge-base --is-ancestor <verify_commit> origin/<baseRefName> # exit 0 = s
138
164
  Also confirm the merge commit's parent is your fixed head, not a stale one. If a
139
165
  late commit (CI auto-fix, CodeRabbit follow-up) raced past the merge, it did **not**
140
166
  ship — fix forward with a new commit/PR and re-drive. Re-confirm after any commit
141
- that lands while auto-merge is enabled.
167
+ that lands while auto-merge is enabled; a successful merge of an older head is a
168
+ failed drive-to-merge outcome, not a successful closeout.
142
169
 
143
170
  ## 4. Terminal states
144
171
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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": "2.191.1",
3
+ "version": "2.191.3",
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-typescript",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.191.1",
3
+ "version": "2.191.3",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -38,9 +38,29 @@ Use plain `gh` + `git` so Claude and Codex execute identically.
38
38
 
39
39
  ## 1. Enable auto-merge
40
40
 
41
+ Before enabling auto-merge, capture the live PR head and compare it to
42
+ `verify_commit`:
43
+
44
+ ```bash
45
+ head_sha=$(gh pr view <pr> --json headRefOid -q .headRefOid)
46
+ test "$head_sha" = "<verify_commit>"
47
+ ```
48
+
49
+ If they differ, reset `verify_commit` to the live head only after confirming the
50
+ new head contains the intended fix, or stop and report the mismatch. Never enable
51
+ auto-merge against a stale head you have not verified.
52
+
41
53
  `gh pr merge <pr> --auto --<merge_method>`. Enabling auto-merge is **not terminal**
42
54
  — continue the loop below until the PR is actually `MERGED` or `CLOSED`.
43
55
 
56
+ If any later step will push commits, temporarily remove the auto-merge latch
57
+ before the push when GitHub exposes that mutation (`disablePullRequestAutoMerge`),
58
+ or otherwise treat the push as a merge race: immediately re-read `headRefOid`,
59
+ reset `verify_commit` to the pushed head, wait until that head's checks have
60
+ started, then re-enable auto-merge. Do not leave auto-merge armed while a
61
+ required fix, CodeRabbit follow-up, generated artifact update, or CI auto-fix is
62
+ still in flight.
63
+
44
64
  - **Capability fallback**: if the repo disallows auto-merge, do not fail. Keep
45
65
  watching; once checks are green, the review gate is clear, and `mergeable == MERGEABLE`,
46
66
  run `gh pr merge <pr> --<merge_method>` directly.
@@ -99,17 +119,23 @@ surface the file list and merge state.
99
119
  ### c. Failing CI / deploy checks (`statusCheckRollup` has FAILURE)
100
120
  Inspect the failing check's logs (`gh pr checks <pr>`, `gh run view <run> --log-failed`).
101
121
  Fix the underlying code inline — **never lower thresholds, skip tests, or disable
102
- checks** to force green. Commit, push, resume. When the root cause is an upstream
103
- Lisa template/postinstall bug rather than this project's code, fix it upstream and
104
- propagate down rather than patching only here.
122
+ checks** to force green. Before pushing the fix, disarm auto-merge or classify the
123
+ run as race-prone, then after the push re-read the PR head, update `verify_commit`
124
+ to that exact SHA, wait for checks on that head to start, and only then resume
125
+ auto-merge. When the root cause is an upstream Lisa template/postinstall bug
126
+ rather than this project's code, fix it upstream and propagate down rather than
127
+ patching only here.
105
128
 
106
129
  ### d. Review comments — human and bot (CodeRabbit, etc.)
107
130
  Delegate to the `pull-request-review` skill with the PR number. It owns the whole
108
131
  comment cycle: fetch every unresolved human + bot thread (with resolution state via
109
132
  GraphQL), implement valid feedback (commit + push), reply to invalid feedback, and
110
133
  resolve every thread via `resolveReviewThread` so the branch-protection
111
- thread-resolution gate clears. Do not re-implement that here it is the single
112
- source of truth for review-thread handling. When it returns, re-poll and continue.
134
+ thread-resolution gate clears. If that skill needs to push a commit, auto-merge
135
+ must be disabled first when possible; when it returns, re-read `headRefOid`, reset
136
+ `verify_commit` to the returned/pushed head, wait for that head's checks to start,
137
+ then re-enable auto-merge and continue. Do not re-implement review handling here
138
+ — it is the single source of truth for review-thread handling.
113
139
 
114
140
  ### e. Review gate stall (`reviewDecision == CHANGES_REQUESTED`)
115
141
  After the requested changes are addressed and threads resolved, the prior
@@ -138,7 +164,8 @@ git merge-base --is-ancestor <verify_commit> origin/<baseRefName> # exit 0 = s
138
164
  Also confirm the merge commit's parent is your fixed head, not a stale one. If a
139
165
  late commit (CI auto-fix, CodeRabbit follow-up) raced past the merge, it did **not**
140
166
  ship — fix forward with a new commit/PR and re-drive. Re-confirm after any commit
141
- that lands while auto-merge is enabled.
167
+ that lands while auto-merge is enabled; a successful merge of an older head is a
168
+ failed drive-to-merge outcome, not a successful closeout.
142
169
 
143
170
  ## 4. Terminal states
144
171