@codyswann/lisa 2.176.2 → 2.176.4
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/package.json +2 -2
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/skills/drive-pr-to-merge/SKILL.md +31 -5
- package/plugins/lisa/skills/repair-intake/SKILL.md +6 -3
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/drive-pr-to-merge/SKILL.md +31 -5
- package/plugins/lisa-agy/skills/repair-intake/SKILL.md +6 -3
- 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/skills/drive-pr-to-merge/SKILL.md +31 -5
- package/plugins/lisa-copilot/skills/repair-intake/SKILL.md +6 -3
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/skills/drive-pr-to-merge/SKILL.md +31 -5
- package/plugins/lisa-cursor/skills/repair-intake/SKILL.md +6 -3
- 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/src/base/skills/drive-pr-to-merge/SKILL.md +31 -5
- package/plugins/src/base/skills/repair-intake/SKILL.md +6 -3
package/package.json
CHANGED
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
"ws": ">=8.20.1"
|
|
92
92
|
},
|
|
93
93
|
"name": "@codyswann/lisa",
|
|
94
|
-
"version": "2.176.
|
|
94
|
+
"version": "2.176.4",
|
|
95
95
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
96
96
|
"main": "dist/index.js",
|
|
97
97
|
"exports": {
|
|
@@ -214,7 +214,7 @@
|
|
|
214
214
|
"vitest": "^4.1.9"
|
|
215
215
|
},
|
|
216
216
|
"devDependencies": {
|
|
217
|
-
"@codyswann/lisa": "^2.
|
|
217
|
+
"@codyswann/lisa": "^2.176.3",
|
|
218
218
|
"@types/js-yaml": "^4.0.9",
|
|
219
219
|
"@types/semver": "^7.7.1",
|
|
220
220
|
"eslint-plugin-oxlint": "^1.62.0",
|
|
@@ -25,9 +25,10 @@ merges" loop. Other skills delegate here instead of re-implementing it. Runs
|
|
|
25
25
|
resolve review comments, dismiss stale review gates — drive until merged.
|
|
26
26
|
- **`report`** (diagnose & mechanically nudge only): perform just the safe,
|
|
27
27
|
idempotent, non-destructive actions — ensure auto-merge is enabled and, if the
|
|
28
|
-
PR is `BEHIND` but otherwise clean, run `gh pr update-branch
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
PR is `BEHIND` but otherwise clean, run `gh pr update-branch` only when the
|
|
29
|
+
base branch requires strict up-to-date checks. For **anything** that would
|
|
30
|
+
require editing code, resolving threads, or dismissing a review, **do not
|
|
31
|
+
act** — stop and return a structured blocker classification
|
|
31
32
|
(`merged` / `will-merge-after-resync` / `blocked:<conflict|checks|changes_requested|deploy>`)
|
|
32
33
|
so the caller applies its own policy. This is the mode `repair-intake` and the
|
|
33
34
|
build-intake skills use to diagnose-and-route without fixing in place.
|
|
@@ -60,8 +61,33 @@ apply; for any of (b)–(e) do not act — classify the blocker and return per t
|
|
|
60
61
|
contract above.
|
|
61
62
|
|
|
62
63
|
### a. Branch behind base (`mergeStateStatus == BEHIND`)
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
Before proactively syncing a clean `BEHIND` PR, check whether the base branch
|
|
65
|
+
actually requires up-to-date branches:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
owner_repo=$(gh repo view --json nameWithOwner -q .nameWithOwner)
|
|
69
|
+
base=$(gh pr view <pr> --json baseRefName -q .baseRefName)
|
|
70
|
+
strict=$(gh api "repos/$owner_repo/rules/branches/$base" \
|
|
71
|
+
--jq '[.[] | select(.type == "required_status_checks") | .parameters.strict_required_status_checks_policy // false] | any')
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
If that rules endpoint is unavailable, fall back to classic branch protection:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
strict=$(gh api "repos/$owner_repo/branches/$base/protection/required_status_checks" \
|
|
78
|
+
--jq '.strict // false')
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Only when `strict == true`, once required checks are green, run
|
|
82
|
+
`gh pr update-branch <pr>` and keep watching the new head while checks rerun.
|
|
83
|
+
If `strict == false`, do **not** update the branch solely because the base moved:
|
|
84
|
+
continue the mergeability loop and let GitHub merge the existing head once the
|
|
85
|
+
checks/reviews are acceptable. This avoids cancellation storms in repos whose CI
|
|
86
|
+
uses `concurrency.cancel-in-progress: true`.
|
|
87
|
+
|
|
88
|
+
Still sync when it is necessary to resolve a genuine merge conflict, and it is
|
|
89
|
+
acceptable to perform one final sync immediately before a direct merge if the
|
|
90
|
+
merge attempt proves the head must be updated.
|
|
65
91
|
|
|
66
92
|
### b. Sync/merge conflict
|
|
67
93
|
If `gh pr update-branch` reports a conflict (or `mergeStateStatus == DIRTY`):
|
|
@@ -393,9 +393,12 @@ drive-pr-to-merge pr=<n> on_blocker=report
|
|
|
393
393
|
```
|
|
394
394
|
|
|
395
395
|
In report mode it ensures auto-merge is enabled and runs `gh pr update-branch <n>` only when the
|
|
396
|
-
PR is `BEHIND`-but-clean
|
|
397
|
-
|
|
398
|
-
|
|
396
|
+
PR is `BEHIND`-but-clean **and** the base branch's ruleset or classic branch protection requires
|
|
397
|
+
strict up-to-date status checks (`strict_required_status_checks_policy` / `required_status_checks.strict`).
|
|
398
|
+
If strict checks are off, it does not update the branch solely because the base moved; that avoids
|
|
399
|
+
CI cancellation storms in repos where updating the PR head restarts and cancels in-flight runs. It
|
|
400
|
+
never edits code, resolves threads, or dismisses reviews. It returns a classification (`merged` /
|
|
401
|
+
`will-merge-after-resync` / `blocked:<reason>`). On a `merged` / `will-merge-after-resync` result,
|
|
399
402
|
record this as a repair write (`resynced`), keep the item `claimed`, and move on — a later cycle sees
|
|
400
403
|
the now-`CLEAN` (or merged) PR and either lets auto-merge finish or applies the merged-PR recovery in
|
|
401
404
|
step 2. Only if `gh pr update-branch` itself reports a conflict it cannot apply does the PR become a
|
|
@@ -25,9 +25,10 @@ merges" loop. Other skills delegate here instead of re-implementing it. Runs
|
|
|
25
25
|
resolve review comments, dismiss stale review gates — drive until merged.
|
|
26
26
|
- **`report`** (diagnose & mechanically nudge only): perform just the safe,
|
|
27
27
|
idempotent, non-destructive actions — ensure auto-merge is enabled and, if the
|
|
28
|
-
PR is `BEHIND` but otherwise clean, run `gh pr update-branch
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
PR is `BEHIND` but otherwise clean, run `gh pr update-branch` only when the
|
|
29
|
+
base branch requires strict up-to-date checks. For **anything** that would
|
|
30
|
+
require editing code, resolving threads, or dismissing a review, **do not
|
|
31
|
+
act** — stop and return a structured blocker classification
|
|
31
32
|
(`merged` / `will-merge-after-resync` / `blocked:<conflict|checks|changes_requested|deploy>`)
|
|
32
33
|
so the caller applies its own policy. This is the mode `repair-intake` and the
|
|
33
34
|
build-intake skills use to diagnose-and-route without fixing in place.
|
|
@@ -60,8 +61,33 @@ apply; for any of (b)–(e) do not act — classify the blocker and return per t
|
|
|
60
61
|
contract above.
|
|
61
62
|
|
|
62
63
|
### a. Branch behind base (`mergeStateStatus == BEHIND`)
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
Before proactively syncing a clean `BEHIND` PR, check whether the base branch
|
|
65
|
+
actually requires up-to-date branches:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
owner_repo=$(gh repo view --json nameWithOwner -q .nameWithOwner)
|
|
69
|
+
base=$(gh pr view <pr> --json baseRefName -q .baseRefName)
|
|
70
|
+
strict=$(gh api "repos/$owner_repo/rules/branches/$base" \
|
|
71
|
+
--jq '[.[] | select(.type == "required_status_checks") | .parameters.strict_required_status_checks_policy // false] | any')
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
If that rules endpoint is unavailable, fall back to classic branch protection:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
strict=$(gh api "repos/$owner_repo/branches/$base/protection/required_status_checks" \
|
|
78
|
+
--jq '.strict // false')
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Only when `strict == true`, once required checks are green, run
|
|
82
|
+
`gh pr update-branch <pr>` and keep watching the new head while checks rerun.
|
|
83
|
+
If `strict == false`, do **not** update the branch solely because the base moved:
|
|
84
|
+
continue the mergeability loop and let GitHub merge the existing head once the
|
|
85
|
+
checks/reviews are acceptable. This avoids cancellation storms in repos whose CI
|
|
86
|
+
uses `concurrency.cancel-in-progress: true`.
|
|
87
|
+
|
|
88
|
+
Still sync when it is necessary to resolve a genuine merge conflict, and it is
|
|
89
|
+
acceptable to perform one final sync immediately before a direct merge if the
|
|
90
|
+
merge attempt proves the head must be updated.
|
|
65
91
|
|
|
66
92
|
### b. Sync/merge conflict
|
|
67
93
|
If `gh pr update-branch` reports a conflict (or `mergeStateStatus == DIRTY`):
|
|
@@ -393,9 +393,12 @@ drive-pr-to-merge pr=<n> on_blocker=report
|
|
|
393
393
|
```
|
|
394
394
|
|
|
395
395
|
In report mode it ensures auto-merge is enabled and runs `gh pr update-branch <n>` only when the
|
|
396
|
-
PR is `BEHIND`-but-clean
|
|
397
|
-
|
|
398
|
-
|
|
396
|
+
PR is `BEHIND`-but-clean **and** the base branch's ruleset or classic branch protection requires
|
|
397
|
+
strict up-to-date status checks (`strict_required_status_checks_policy` / `required_status_checks.strict`).
|
|
398
|
+
If strict checks are off, it does not update the branch solely because the base moved; that avoids
|
|
399
|
+
CI cancellation storms in repos where updating the PR head restarts and cancels in-flight runs. It
|
|
400
|
+
never edits code, resolves threads, or dismisses reviews. It returns a classification (`merged` /
|
|
401
|
+
`will-merge-after-resync` / `blocked:<reason>`). On a `merged` / `will-merge-after-resync` result,
|
|
399
402
|
record this as a repair write (`resynced`), keep the item `claimed`, and move on — a later cycle sees
|
|
400
403
|
the now-`CLEAN` (or merged) PR and either lets auto-merge finish or applies the merged-PR recovery in
|
|
401
404
|
step 2. Only if `gh pr update-branch` itself reports a conflict it cannot apply does the PR become a
|
|
@@ -25,9 +25,10 @@ merges" loop. Other skills delegate here instead of re-implementing it. Runs
|
|
|
25
25
|
resolve review comments, dismiss stale review gates — drive until merged.
|
|
26
26
|
- **`report`** (diagnose & mechanically nudge only): perform just the safe,
|
|
27
27
|
idempotent, non-destructive actions — ensure auto-merge is enabled and, if the
|
|
28
|
-
PR is `BEHIND` but otherwise clean, run `gh pr update-branch
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
PR is `BEHIND` but otherwise clean, run `gh pr update-branch` only when the
|
|
29
|
+
base branch requires strict up-to-date checks. For **anything** that would
|
|
30
|
+
require editing code, resolving threads, or dismissing a review, **do not
|
|
31
|
+
act** — stop and return a structured blocker classification
|
|
31
32
|
(`merged` / `will-merge-after-resync` / `blocked:<conflict|checks|changes_requested|deploy>`)
|
|
32
33
|
so the caller applies its own policy. This is the mode `repair-intake` and the
|
|
33
34
|
build-intake skills use to diagnose-and-route without fixing in place.
|
|
@@ -60,8 +61,33 @@ apply; for any of (b)–(e) do not act — classify the blocker and return per t
|
|
|
60
61
|
contract above.
|
|
61
62
|
|
|
62
63
|
### a. Branch behind base (`mergeStateStatus == BEHIND`)
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
Before proactively syncing a clean `BEHIND` PR, check whether the base branch
|
|
65
|
+
actually requires up-to-date branches:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
owner_repo=$(gh repo view --json nameWithOwner -q .nameWithOwner)
|
|
69
|
+
base=$(gh pr view <pr> --json baseRefName -q .baseRefName)
|
|
70
|
+
strict=$(gh api "repos/$owner_repo/rules/branches/$base" \
|
|
71
|
+
--jq '[.[] | select(.type == "required_status_checks") | .parameters.strict_required_status_checks_policy // false] | any')
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
If that rules endpoint is unavailable, fall back to classic branch protection:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
strict=$(gh api "repos/$owner_repo/branches/$base/protection/required_status_checks" \
|
|
78
|
+
--jq '.strict // false')
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Only when `strict == true`, once required checks are green, run
|
|
82
|
+
`gh pr update-branch <pr>` and keep watching the new head while checks rerun.
|
|
83
|
+
If `strict == false`, do **not** update the branch solely because the base moved:
|
|
84
|
+
continue the mergeability loop and let GitHub merge the existing head once the
|
|
85
|
+
checks/reviews are acceptable. This avoids cancellation storms in repos whose CI
|
|
86
|
+
uses `concurrency.cancel-in-progress: true`.
|
|
87
|
+
|
|
88
|
+
Still sync when it is necessary to resolve a genuine merge conflict, and it is
|
|
89
|
+
acceptable to perform one final sync immediately before a direct merge if the
|
|
90
|
+
merge attempt proves the head must be updated.
|
|
65
91
|
|
|
66
92
|
### b. Sync/merge conflict
|
|
67
93
|
If `gh pr update-branch` reports a conflict (or `mergeStateStatus == DIRTY`):
|
|
@@ -393,9 +393,12 @@ drive-pr-to-merge pr=<n> on_blocker=report
|
|
|
393
393
|
```
|
|
394
394
|
|
|
395
395
|
In report mode it ensures auto-merge is enabled and runs `gh pr update-branch <n>` only when the
|
|
396
|
-
PR is `BEHIND`-but-clean
|
|
397
|
-
|
|
398
|
-
|
|
396
|
+
PR is `BEHIND`-but-clean **and** the base branch's ruleset or classic branch protection requires
|
|
397
|
+
strict up-to-date status checks (`strict_required_status_checks_policy` / `required_status_checks.strict`).
|
|
398
|
+
If strict checks are off, it does not update the branch solely because the base moved; that avoids
|
|
399
|
+
CI cancellation storms in repos where updating the PR head restarts and cancels in-flight runs. It
|
|
400
|
+
never edits code, resolves threads, or dismisses reviews. It returns a classification (`merged` /
|
|
401
|
+
`will-merge-after-resync` / `blocked:<reason>`). On a `merged` / `will-merge-after-resync` result,
|
|
399
402
|
record this as a repair write (`resynced`), keep the item `claimed`, and move on — a later cycle sees
|
|
400
403
|
the now-`CLEAN` (or merged) PR and either lets auto-merge finish or applies the merged-PR recovery in
|
|
401
404
|
step 2. Only if `gh pr update-branch` itself reports a conflict it cannot apply does the PR become a
|
|
@@ -25,9 +25,10 @@ merges" loop. Other skills delegate here instead of re-implementing it. Runs
|
|
|
25
25
|
resolve review comments, dismiss stale review gates — drive until merged.
|
|
26
26
|
- **`report`** (diagnose & mechanically nudge only): perform just the safe,
|
|
27
27
|
idempotent, non-destructive actions — ensure auto-merge is enabled and, if the
|
|
28
|
-
PR is `BEHIND` but otherwise clean, run `gh pr update-branch
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
PR is `BEHIND` but otherwise clean, run `gh pr update-branch` only when the
|
|
29
|
+
base branch requires strict up-to-date checks. For **anything** that would
|
|
30
|
+
require editing code, resolving threads, or dismissing a review, **do not
|
|
31
|
+
act** — stop and return a structured blocker classification
|
|
31
32
|
(`merged` / `will-merge-after-resync` / `blocked:<conflict|checks|changes_requested|deploy>`)
|
|
32
33
|
so the caller applies its own policy. This is the mode `repair-intake` and the
|
|
33
34
|
build-intake skills use to diagnose-and-route without fixing in place.
|
|
@@ -60,8 +61,33 @@ apply; for any of (b)–(e) do not act — classify the blocker and return per t
|
|
|
60
61
|
contract above.
|
|
61
62
|
|
|
62
63
|
### a. Branch behind base (`mergeStateStatus == BEHIND`)
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
Before proactively syncing a clean `BEHIND` PR, check whether the base branch
|
|
65
|
+
actually requires up-to-date branches:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
owner_repo=$(gh repo view --json nameWithOwner -q .nameWithOwner)
|
|
69
|
+
base=$(gh pr view <pr> --json baseRefName -q .baseRefName)
|
|
70
|
+
strict=$(gh api "repos/$owner_repo/rules/branches/$base" \
|
|
71
|
+
--jq '[.[] | select(.type == "required_status_checks") | .parameters.strict_required_status_checks_policy // false] | any')
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
If that rules endpoint is unavailable, fall back to classic branch protection:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
strict=$(gh api "repos/$owner_repo/branches/$base/protection/required_status_checks" \
|
|
78
|
+
--jq '.strict // false')
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Only when `strict == true`, once required checks are green, run
|
|
82
|
+
`gh pr update-branch <pr>` and keep watching the new head while checks rerun.
|
|
83
|
+
If `strict == false`, do **not** update the branch solely because the base moved:
|
|
84
|
+
continue the mergeability loop and let GitHub merge the existing head once the
|
|
85
|
+
checks/reviews are acceptable. This avoids cancellation storms in repos whose CI
|
|
86
|
+
uses `concurrency.cancel-in-progress: true`.
|
|
87
|
+
|
|
88
|
+
Still sync when it is necessary to resolve a genuine merge conflict, and it is
|
|
89
|
+
acceptable to perform one final sync immediately before a direct merge if the
|
|
90
|
+
merge attempt proves the head must be updated.
|
|
65
91
|
|
|
66
92
|
### b. Sync/merge conflict
|
|
67
93
|
If `gh pr update-branch` reports a conflict (or `mergeStateStatus == DIRTY`):
|
|
@@ -393,9 +393,12 @@ drive-pr-to-merge pr=<n> on_blocker=report
|
|
|
393
393
|
```
|
|
394
394
|
|
|
395
395
|
In report mode it ensures auto-merge is enabled and runs `gh pr update-branch <n>` only when the
|
|
396
|
-
PR is `BEHIND`-but-clean
|
|
397
|
-
|
|
398
|
-
|
|
396
|
+
PR is `BEHIND`-but-clean **and** the base branch's ruleset or classic branch protection requires
|
|
397
|
+
strict up-to-date status checks (`strict_required_status_checks_policy` / `required_status_checks.strict`).
|
|
398
|
+
If strict checks are off, it does not update the branch solely because the base moved; that avoids
|
|
399
|
+
CI cancellation storms in repos where updating the PR head restarts and cancels in-flight runs. It
|
|
400
|
+
never edits code, resolves threads, or dismisses reviews. It returns a classification (`merged` /
|
|
401
|
+
`will-merge-after-resync` / `blocked:<reason>`). On a `merged` / `will-merge-after-resync` result,
|
|
399
402
|
record this as a repair write (`resynced`), keep the item `claimed`, and move on — a later cycle sees
|
|
400
403
|
the now-`CLEAN` (or merged) PR and either lets auto-merge finish or applies the merged-PR recovery in
|
|
401
404
|
step 2. Only if `gh pr update-branch` itself reports a conflict it cannot apply does the PR become a
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.176.
|
|
3
|
+
"version": "2.176.4",
|
|
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.176.
|
|
3
|
+
"version": "2.176.4",
|
|
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.176.
|
|
3
|
+
"version": "2.176.4",
|
|
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.176.
|
|
3
|
+
"version": "2.176.4",
|
|
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.176.
|
|
3
|
+
"version": "2.176.4",
|
|
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"
|
|
@@ -25,9 +25,10 @@ merges" loop. Other skills delegate here instead of re-implementing it. Runs
|
|
|
25
25
|
resolve review comments, dismiss stale review gates — drive until merged.
|
|
26
26
|
- **`report`** (diagnose & mechanically nudge only): perform just the safe,
|
|
27
27
|
idempotent, non-destructive actions — ensure auto-merge is enabled and, if the
|
|
28
|
-
PR is `BEHIND` but otherwise clean, run `gh pr update-branch
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
PR is `BEHIND` but otherwise clean, run `gh pr update-branch` only when the
|
|
29
|
+
base branch requires strict up-to-date checks. For **anything** that would
|
|
30
|
+
require editing code, resolving threads, or dismissing a review, **do not
|
|
31
|
+
act** — stop and return a structured blocker classification
|
|
31
32
|
(`merged` / `will-merge-after-resync` / `blocked:<conflict|checks|changes_requested|deploy>`)
|
|
32
33
|
so the caller applies its own policy. This is the mode `repair-intake` and the
|
|
33
34
|
build-intake skills use to diagnose-and-route without fixing in place.
|
|
@@ -60,8 +61,33 @@ apply; for any of (b)–(e) do not act — classify the blocker and return per t
|
|
|
60
61
|
contract above.
|
|
61
62
|
|
|
62
63
|
### a. Branch behind base (`mergeStateStatus == BEHIND`)
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
Before proactively syncing a clean `BEHIND` PR, check whether the base branch
|
|
65
|
+
actually requires up-to-date branches:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
owner_repo=$(gh repo view --json nameWithOwner -q .nameWithOwner)
|
|
69
|
+
base=$(gh pr view <pr> --json baseRefName -q .baseRefName)
|
|
70
|
+
strict=$(gh api "repos/$owner_repo/rules/branches/$base" \
|
|
71
|
+
--jq '[.[] | select(.type == "required_status_checks") | .parameters.strict_required_status_checks_policy // false] | any')
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
If that rules endpoint is unavailable, fall back to classic branch protection:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
strict=$(gh api "repos/$owner_repo/branches/$base/protection/required_status_checks" \
|
|
78
|
+
--jq '.strict // false')
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Only when `strict == true`, once required checks are green, run
|
|
82
|
+
`gh pr update-branch <pr>` and keep watching the new head while checks rerun.
|
|
83
|
+
If `strict == false`, do **not** update the branch solely because the base moved:
|
|
84
|
+
continue the mergeability loop and let GitHub merge the existing head once the
|
|
85
|
+
checks/reviews are acceptable. This avoids cancellation storms in repos whose CI
|
|
86
|
+
uses `concurrency.cancel-in-progress: true`.
|
|
87
|
+
|
|
88
|
+
Still sync when it is necessary to resolve a genuine merge conflict, and it is
|
|
89
|
+
acceptable to perform one final sync immediately before a direct merge if the
|
|
90
|
+
merge attempt proves the head must be updated.
|
|
65
91
|
|
|
66
92
|
### b. Sync/merge conflict
|
|
67
93
|
If `gh pr update-branch` reports a conflict (or `mergeStateStatus == DIRTY`):
|
|
@@ -393,9 +393,12 @@ drive-pr-to-merge pr=<n> on_blocker=report
|
|
|
393
393
|
```
|
|
394
394
|
|
|
395
395
|
In report mode it ensures auto-merge is enabled and runs `gh pr update-branch <n>` only when the
|
|
396
|
-
PR is `BEHIND`-but-clean
|
|
397
|
-
|
|
398
|
-
|
|
396
|
+
PR is `BEHIND`-but-clean **and** the base branch's ruleset or classic branch protection requires
|
|
397
|
+
strict up-to-date status checks (`strict_required_status_checks_policy` / `required_status_checks.strict`).
|
|
398
|
+
If strict checks are off, it does not update the branch solely because the base moved; that avoids
|
|
399
|
+
CI cancellation storms in repos where updating the PR head restarts and cancels in-flight runs. It
|
|
400
|
+
never edits code, resolves threads, or dismisses reviews. It returns a classification (`merged` /
|
|
401
|
+
`will-merge-after-resync` / `blocked:<reason>`). On a `merged` / `will-merge-after-resync` result,
|
|
399
402
|
record this as a repair write (`resynced`), keep the item `claimed`, and move on — a later cycle sees
|
|
400
403
|
the now-`CLEAN` (or merged) PR and either lets auto-merge finish or applies the merged-PR recovery in
|
|
401
404
|
step 2. Only if `gh pr update-branch` itself reports a conflict it cannot apply does the PR become a
|