@lvlup-sw/exarchos 2.7.1 → 2.8.0
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/.claude-plugin/plugin.json +3 -2
- package/agents/fixer.md +2 -1
- package/agents/implementer.md +2 -1
- package/agents/reviewer.md +2 -1
- package/agents/scaffolder.md +55 -0
- package/commands/discover.md +6 -0
- package/dist/exarchos.js +314 -335
- package/package.json +1 -1
- package/skills/claude/cleanup/SKILL.md +10 -4
- package/skills/claude/cleanup/references/merge-verification.md +8 -9
- package/skills/claude/debug/references/thorough-track.md +5 -2
- package/skills/claude/debug/references/troubleshooting.md +1 -1
- package/skills/claude/delegation/SKILL.md +4 -3
- package/skills/claude/delegation/references/agent-teams-saga.md +1 -3
- package/skills/claude/delegation/references/fixer-prompt.md +0 -1
- package/skills/claude/delegation/references/implementer-prompt.md +0 -1
- package/skills/claude/delegation/references/parallel-strategy.md +6 -11
- package/skills/claude/delegation/references/worked-example.md +3 -3
- package/skills/claude/delegation/references/workflow-steps.md +0 -2
- package/skills/claude/delegation/references/worktree-enforcement.md +1 -1
- package/skills/claude/discovery/SKILL.md +95 -0
- package/skills/claude/dogfood/SKILL.md +8 -2
- package/skills/claude/dogfood/references/report-template.md +4 -4
- package/skills/claude/oneshot-workflow/SKILL.md +9 -3
- package/skills/claude/prune-workflows/SKILL.md +6 -0
- package/skills/claude/quality-review/references/auto-transition.md +1 -1
- package/skills/claude/refactor/references/overhaul-track.md +1 -1
- package/skills/claude/shepherd/SKILL.md +14 -5
- package/skills/claude/shepherd/references/assess-checklist.md +7 -7
- package/skills/claude/shepherd/references/fix-strategies.md +4 -4
- package/skills/claude/synthesis/SKILL.md +27 -8
- package/skills/claude/synthesis/references/github-native-stacking.md +26 -30
- package/skills/claude/synthesis/references/merge-ordering.md +1 -1
- package/skills/claude/synthesis/references/synthesis-steps.md +6 -6
- package/skills/claude/synthesis/references/troubleshooting.md +11 -18
- package/skills/codex/cleanup/SKILL.md +10 -4
- package/skills/codex/cleanup/references/merge-verification.md +8 -9
- package/skills/codex/debug/references/thorough-track.md +5 -2
- package/skills/codex/debug/references/troubleshooting.md +1 -1
- package/skills/codex/delegation/SKILL.md +4 -3
- package/skills/codex/delegation/references/agent-teams-saga.md +1 -3
- package/skills/codex/delegation/references/fixer-prompt.md +0 -1
- package/skills/codex/delegation/references/implementer-prompt.md +0 -1
- package/skills/codex/delegation/references/parallel-strategy.md +6 -11
- package/skills/codex/delegation/references/worked-example.md +3 -3
- package/skills/codex/delegation/references/workflow-steps.md +0 -2
- package/skills/codex/delegation/references/worktree-enforcement.md +1 -1
- package/skills/codex/discovery/SKILL.md +95 -0
- package/skills/codex/dogfood/SKILL.md +8 -2
- package/skills/codex/dogfood/references/report-template.md +4 -4
- package/skills/codex/oneshot-workflow/SKILL.md +9 -3
- package/skills/codex/prune-workflows/SKILL.md +6 -0
- package/skills/codex/quality-review/references/auto-transition.md +1 -1
- package/skills/codex/refactor/references/overhaul-track.md +1 -1
- package/skills/codex/shepherd/SKILL.md +14 -5
- package/skills/codex/shepherd/references/assess-checklist.md +7 -7
- package/skills/codex/shepherd/references/fix-strategies.md +4 -4
- package/skills/codex/synthesis/SKILL.md +27 -8
- package/skills/codex/synthesis/references/github-native-stacking.md +26 -30
- package/skills/codex/synthesis/references/merge-ordering.md +1 -1
- package/skills/codex/synthesis/references/synthesis-steps.md +6 -6
- package/skills/codex/synthesis/references/troubleshooting.md +11 -18
- package/skills/copilot/cleanup/SKILL.md +10 -4
- package/skills/copilot/cleanup/references/merge-verification.md +8 -9
- package/skills/copilot/debug/references/thorough-track.md +5 -2
- package/skills/copilot/debug/references/troubleshooting.md +1 -1
- package/skills/copilot/delegation/SKILL.md +4 -3
- package/skills/copilot/delegation/references/agent-teams-saga.md +1 -3
- package/skills/copilot/delegation/references/fixer-prompt.md +0 -1
- package/skills/copilot/delegation/references/implementer-prompt.md +0 -1
- package/skills/copilot/delegation/references/parallel-strategy.md +6 -11
- package/skills/copilot/delegation/references/worked-example.md +3 -3
- package/skills/copilot/delegation/references/workflow-steps.md +0 -2
- package/skills/copilot/delegation/references/worktree-enforcement.md +1 -1
- package/skills/copilot/discovery/SKILL.md +95 -0
- package/skills/copilot/dogfood/SKILL.md +8 -2
- package/skills/copilot/dogfood/references/report-template.md +4 -4
- package/skills/copilot/oneshot-workflow/SKILL.md +9 -3
- package/skills/copilot/prune-workflows/SKILL.md +6 -0
- package/skills/copilot/quality-review/references/auto-transition.md +1 -1
- package/skills/copilot/refactor/references/overhaul-track.md +1 -1
- package/skills/copilot/shepherd/SKILL.md +14 -5
- package/skills/copilot/shepherd/references/assess-checklist.md +7 -7
- package/skills/copilot/shepherd/references/fix-strategies.md +4 -4
- package/skills/copilot/synthesis/SKILL.md +27 -8
- package/skills/copilot/synthesis/references/github-native-stacking.md +26 -30
- package/skills/copilot/synthesis/references/merge-ordering.md +1 -1
- package/skills/copilot/synthesis/references/synthesis-steps.md +6 -6
- package/skills/copilot/synthesis/references/troubleshooting.md +11 -18
- package/skills/cursor/cleanup/SKILL.md +10 -4
- package/skills/cursor/cleanup/references/merge-verification.md +8 -9
- package/skills/cursor/debug/references/thorough-track.md +5 -2
- package/skills/cursor/debug/references/troubleshooting.md +1 -1
- package/skills/cursor/delegation/SKILL.md +4 -3
- package/skills/cursor/delegation/references/agent-teams-saga.md +1 -3
- package/skills/cursor/delegation/references/fixer-prompt.md +0 -1
- package/skills/cursor/delegation/references/implementer-prompt.md +0 -1
- package/skills/cursor/delegation/references/parallel-strategy.md +6 -11
- package/skills/cursor/delegation/references/worked-example.md +3 -3
- package/skills/cursor/delegation/references/workflow-steps.md +0 -2
- package/skills/cursor/delegation/references/worktree-enforcement.md +1 -1
- package/skills/cursor/discovery/SKILL.md +95 -0
- package/skills/cursor/dogfood/SKILL.md +8 -2
- package/skills/cursor/dogfood/references/report-template.md +4 -4
- package/skills/cursor/oneshot-workflow/SKILL.md +9 -3
- package/skills/cursor/prune-workflows/SKILL.md +6 -0
- package/skills/cursor/quality-review/references/auto-transition.md +1 -1
- package/skills/cursor/refactor/references/overhaul-track.md +1 -1
- package/skills/cursor/shepherd/SKILL.md +14 -5
- package/skills/cursor/shepherd/references/assess-checklist.md +7 -7
- package/skills/cursor/shepherd/references/fix-strategies.md +4 -4
- package/skills/cursor/synthesis/SKILL.md +27 -8
- package/skills/cursor/synthesis/references/github-native-stacking.md +26 -30
- package/skills/cursor/synthesis/references/merge-ordering.md +1 -1
- package/skills/cursor/synthesis/references/synthesis-steps.md +6 -6
- package/skills/cursor/synthesis/references/troubleshooting.md +11 -18
- package/skills/generic/cleanup/SKILL.md +10 -4
- package/skills/generic/cleanup/references/merge-verification.md +8 -9
- package/skills/generic/debug/references/thorough-track.md +5 -2
- package/skills/generic/debug/references/troubleshooting.md +1 -1
- package/skills/generic/delegation/SKILL.md +4 -3
- package/skills/generic/delegation/references/agent-teams-saga.md +1 -3
- package/skills/generic/delegation/references/fixer-prompt.md +0 -1
- package/skills/generic/delegation/references/implementer-prompt.md +0 -1
- package/skills/generic/delegation/references/parallel-strategy.md +6 -11
- package/skills/generic/delegation/references/worked-example.md +3 -3
- package/skills/generic/delegation/references/workflow-steps.md +0 -2
- package/skills/generic/delegation/references/worktree-enforcement.md +1 -1
- package/skills/generic/discovery/SKILL.md +95 -0
- package/skills/generic/dogfood/SKILL.md +8 -2
- package/skills/generic/dogfood/references/report-template.md +4 -4
- package/skills/generic/oneshot-workflow/SKILL.md +9 -3
- package/skills/generic/prune-workflows/SKILL.md +6 -0
- package/skills/generic/quality-review/references/auto-transition.md +1 -1
- package/skills/generic/refactor/references/overhaul-track.md +1 -1
- package/skills/generic/shepherd/SKILL.md +14 -5
- package/skills/generic/shepherd/references/assess-checklist.md +7 -7
- package/skills/generic/shepherd/references/fix-strategies.md +4 -4
- package/skills/generic/synthesis/SKILL.md +27 -8
- package/skills/generic/synthesis/references/github-native-stacking.md +26 -30
- package/skills/generic/synthesis/references/merge-ordering.md +1 -1
- package/skills/generic/synthesis/references/synthesis-steps.md +6 -6
- package/skills/generic/synthesis/references/troubleshooting.md +11 -18
- package/skills/opencode/cleanup/SKILL.md +10 -4
- package/skills/opencode/cleanup/references/merge-verification.md +8 -9
- package/skills/opencode/debug/references/thorough-track.md +5 -2
- package/skills/opencode/debug/references/troubleshooting.md +1 -1
- package/skills/opencode/delegation/SKILL.md +4 -3
- package/skills/opencode/delegation/references/agent-teams-saga.md +1 -3
- package/skills/opencode/delegation/references/fixer-prompt.md +0 -1
- package/skills/opencode/delegation/references/implementer-prompt.md +0 -1
- package/skills/opencode/delegation/references/parallel-strategy.md +6 -11
- package/skills/opencode/delegation/references/worked-example.md +3 -3
- package/skills/opencode/delegation/references/workflow-steps.md +0 -2
- package/skills/opencode/delegation/references/worktree-enforcement.md +1 -1
- package/skills/opencode/discovery/SKILL.md +95 -0
- package/skills/opencode/dogfood/SKILL.md +8 -2
- package/skills/opencode/dogfood/references/report-template.md +4 -4
- package/skills/opencode/oneshot-workflow/SKILL.md +9 -3
- package/skills/opencode/prune-workflows/SKILL.md +6 -0
- package/skills/opencode/quality-review/references/auto-transition.md +1 -1
- package/skills/opencode/refactor/references/overhaul-track.md +1 -1
- package/skills/opencode/shepherd/SKILL.md +14 -5
- package/skills/opencode/shepherd/references/assess-checklist.md +7 -7
- package/skills/opencode/shepherd/references/fix-strategies.md +4 -4
- package/skills/opencode/synthesis/SKILL.md +27 -8
- package/skills/opencode/synthesis/references/github-native-stacking.md +26 -30
- package/skills/opencode/synthesis/references/merge-ordering.md +1 -1
- package/skills/opencode/synthesis/references/synthesis-steps.md +6 -6
- package/skills/opencode/synthesis/references/troubleshooting.md +11 -18
- package/skills/claude/delegation/references/pr-fixes-mode.md +0 -155
- package/skills/codex/delegation/references/pr-fixes-mode.md +0 -155
- package/skills/copilot/delegation/references/pr-fixes-mode.md +0 -155
- package/skills/cursor/delegation/references/pr-fixes-mode.md +0 -155
- package/skills/generic/delegation/references/pr-fixes-mode.md +0 -155
- package/skills/opencode/delegation/references/pr-fixes-mode.md +0 -155
|
@@ -8,15 +8,15 @@ PR stacking creates a chain of dependent pull requests that merge bottom-up into
|
|
|
8
8
|
|
|
9
9
|
## 1. PR Chain Creation
|
|
10
10
|
|
|
11
|
-
Create PRs that chain together by setting each PR's
|
|
11
|
+
Create PRs that chain together by setting each PR's base to the previous branch:
|
|
12
12
|
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
```typescript
|
|
14
|
+
// First PR in chain targets main
|
|
15
|
+
exarchos_orchestrate({ action: "create_pr", base: "main", head: "feat/step-1", title: "feat: step 1", body: "..." })
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
// Subsequent PRs target the previous PR's branch
|
|
18
|
+
exarchos_orchestrate({ action: "create_pr", base: "feat/step-1", head: "feat/step-2", title: "feat: step 2", body: "..." })
|
|
19
|
+
exarchos_orchestrate({ action: "create_pr", base: "feat/step-2", head: "feat/step-3", title: "feat: step 3", body: "..." })
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
The resulting chain looks like:
|
|
@@ -72,15 +72,14 @@ After rebasing a mid-stack branch, all downstream branches in the stack must als
|
|
|
72
72
|
|
|
73
73
|
View the current PR chain and its state:
|
|
74
74
|
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
# 103: feat/step-2 <- feat/step-3 [OPEN]
|
|
75
|
+
```typescript
|
|
76
|
+
// List all open PRs with base/head branch relationships
|
|
77
|
+
exarchos_orchestrate({ action: "list_prs", state: "open" })
|
|
78
|
+
|
|
79
|
+
// Example output shows PR numbers, base/head branches, titles, and state:
|
|
80
|
+
// 101: main <- feat/step-1 [OPEN]
|
|
81
|
+
// 102: feat/step-1 <- feat/step-2 [OPEN]
|
|
82
|
+
// 103: feat/step-2 <- feat/step-3 [OPEN]
|
|
84
83
|
```
|
|
85
84
|
|
|
86
85
|
To validate stack integrity, use the `validate_pr_stack` action via orchestrate:
|
|
@@ -97,32 +96,29 @@ exarchos_orchestrate({
|
|
|
97
96
|
GitHub's native merge queue ensures PRs pass CI before merging:
|
|
98
97
|
|
|
99
98
|
- **Enable:** Repository Settings > Rules > Branch protection > Require merge queue
|
|
100
|
-
- **Auto-merge:** `
|
|
99
|
+
- **Auto-merge:** `exarchos_orchestrate({ action: "merge_pr", prId: "<number>", strategy: "squash" })` enables auto-merge once checks pass
|
|
101
100
|
- **For stacks:** Enable auto-merge on each PR, then merge bottom-up
|
|
102
101
|
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
# Merge the first PR to start the cascade
|
|
110
|
-
gh pr merge 101 --squash
|
|
102
|
+
```typescript
|
|
103
|
+
// Enable auto-merge on all PRs in the stack
|
|
104
|
+
exarchos_orchestrate({ action: "merge_pr", prId: "101", strategy: "squash" })
|
|
105
|
+
exarchos_orchestrate({ action: "merge_pr", prId: "102", strategy: "squash" })
|
|
106
|
+
exarchos_orchestrate({ action: "merge_pr", prId: "103", strategy: "squash" })
|
|
111
107
|
```
|
|
112
108
|
|
|
113
109
|
After PR 101 merges and its branch is deleted, GitHub retargets PR 102 to `main`. If auto-merge is enabled on PR 102, it merges automatically once CI passes.
|
|
114
110
|
|
|
115
|
-
## 7. Graphite to
|
|
111
|
+
## 7. Graphite to Exarchos MCP Equivalents
|
|
116
112
|
|
|
117
|
-
| Graphite Command |
|
|
113
|
+
| Graphite Command | Exarchos MCP Equivalent |
|
|
118
114
|
|---|---|
|
|
119
115
|
| `gt create <branch> -m "feat: ..."` | `git checkout -b <branch> && git commit -m "feat: ..." && git push -u origin <branch>` |
|
|
120
|
-
| `gt submit --no-interactive --publish --stack` | `
|
|
121
|
-
| `gt log` | `
|
|
116
|
+
| `gt submit --no-interactive --publish --stack` | `exarchos_orchestrate({ action: "create_pr", base: "<base>", title: "...", body: "..." })` (per PR) |
|
|
117
|
+
| `gt log` | `exarchos_orchestrate({ action: "list_prs", state: "open" })` |
|
|
122
118
|
| `gt modify -m "..."` | `git commit --amend -m "..." && git push --force-with-lease` |
|
|
123
119
|
| `gt sync` | `git fetch --prune && git rebase origin/main` |
|
|
124
120
|
| `gt restack` | `git rebase origin/<base-branch>` per branch in stack |
|
|
125
|
-
| `mcp__graphite__run_gt_cmd` | `
|
|
121
|
+
| `mcp__graphite__run_gt_cmd` | `exarchos_orchestrate` VCS actions |
|
|
126
122
|
|
|
127
123
|
## 8. Error Handling
|
|
128
124
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
GitHub-native stacked PRs merge bottom-up: the base branch merges first, then each dependent branch in sequence. This ordering is enforced by creating PRs with correct base branches and enabling auto-merge (
|
|
5
|
+
GitHub-native stacked PRs merge bottom-up: the base branch merges first, then each dependent branch in sequence. This ordering is enforced by creating PRs with correct base branches and enabling auto-merge via `exarchos_orchestrate({ action: "merge_pr", prId: "<number>", strategy: "squash" })`.
|
|
6
6
|
|
|
7
7
|
## Stack Ordering Rules
|
|
8
8
|
|
|
@@ -74,7 +74,7 @@ The script queries GitHub's PR reviews API for each PR, filters for CodeRabbit r
|
|
|
74
74
|
**On `passed: true`:** All PRs are APPROVED or have no CodeRabbit review -- proceed to Step 5.
|
|
75
75
|
**On `passed: false`:** At least one PR has CHANGES_REQUESTED or PENDING. The output identifies which PRs need attention. Route to fix cycle:
|
|
76
76
|
```typescript
|
|
77
|
-
Skill({ skill: "exarchos:
|
|
77
|
+
Skill({ skill: "exarchos:shepherd", args: "[PR_URL]" })
|
|
78
78
|
```
|
|
79
79
|
After fixes are applied, return to Step 4 to re-check.
|
|
80
80
|
|
|
@@ -121,13 +121,13 @@ mcp__plugin_exarchos_exarchos__exarchos_orchestrate({
|
|
|
121
121
|
|
|
122
122
|
Create PRs for each branch in the stack (bottom-up) and enable auto-merge:
|
|
123
123
|
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
124
|
+
```typescript
|
|
125
|
+
// For each branch in the stack (bottom-up):
|
|
126
|
+
exarchos_orchestrate({ action: "create_pr", base: "<parent-branch>", head: "<branch>", title: "<type>: <what>", body: "<pr-body>" })
|
|
127
|
+
exarchos_orchestrate({ action: "merge_pr", prId: "<number>", strategy: "squash" })
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
After creation, use `
|
|
130
|
+
After creation, use `exarchos_orchestrate({ action: "list_prs", state: "open" })` to get the PR URLs for each stack entry.
|
|
131
131
|
|
|
132
132
|
## Step 7: Cleanup After Merge
|
|
133
133
|
|
|
@@ -21,7 +21,7 @@ If tests fail during synthesis (they passed in review):
|
|
|
21
21
|
### Merge Queue Rejection
|
|
22
22
|
|
|
23
23
|
If the merge queue rejects a PR:
|
|
24
|
-
1. Check CI status via `
|
|
24
|
+
1. Check CI status via `exarchos_orchestrate({ action: "check_ci", prId: "<number>" })`
|
|
25
25
|
2. Fix failing checks
|
|
26
26
|
3. Push fixes and re-enqueue
|
|
27
27
|
|
|
@@ -29,20 +29,13 @@ If the merge queue rejects a PR:
|
|
|
29
29
|
|
|
30
30
|
If the user receives PR review comments:
|
|
31
31
|
|
|
32
|
-
1.
|
|
32
|
+
1. Route to the shepherd skill:
|
|
33
33
|
```typescript
|
|
34
|
-
Skill({ skill: "exarchos:
|
|
34
|
+
Skill({ skill: "exarchos:shepherd", args: "[PR_URL]" })
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
2.
|
|
38
|
-
|
|
39
|
-
gh pr view <number> --json reviews,comments
|
|
40
|
-
```
|
|
41
|
-
> Or use GitHub MCP `pull_request_read` if available.
|
|
42
|
-
|
|
43
|
-
3. Creates fix tasks from review comments
|
|
44
|
-
4. After fixes, amend the commit with `git commit --amend -m "fix: <description>"` and push with `git push --force-with-lease`
|
|
45
|
-
5. Return to merge confirmation
|
|
37
|
+
2. Shepherd reads PR comments, assesses CI, and applies fixes directly
|
|
38
|
+
3. After fixes, return to merge confirmation
|
|
46
39
|
|
|
47
40
|
## Final Report Template
|
|
48
41
|
|
|
@@ -50,7 +43,7 @@ If the user receives PR review comments:
|
|
|
50
43
|
## Synthesis Complete
|
|
51
44
|
|
|
52
45
|
### Pull Requests
|
|
53
|
-
[PR URLs from
|
|
46
|
+
[PR URLs from list_prs action]
|
|
54
47
|
|
|
55
48
|
### Stack Branches
|
|
56
49
|
- task/001-types
|
|
@@ -88,11 +81,11 @@ If workflow state doesn't match git reality:
|
|
|
88
81
|
3. Update state via `mcp__plugin_exarchos_exarchos__exarchos_workflow` with `action: "set"` to match git truth
|
|
89
82
|
|
|
90
83
|
## PR Creation Failed
|
|
91
|
-
If `
|
|
84
|
+
If `create_pr` fails:
|
|
92
85
|
1. Check the error output for specific guidance
|
|
93
|
-
2. Run `
|
|
86
|
+
2. Run `exarchos_orchestrate({ action: "list_prs", state: "open" })` to verify the branch state
|
|
94
87
|
3. If rebase conflict: run `git rebase origin/<base>` to resolve
|
|
95
|
-
4. If authentication issue: check
|
|
88
|
+
4. If authentication issue: check VCS provider token permissions
|
|
96
89
|
|
|
97
90
|
## Stack Rebase Conflict
|
|
98
91
|
If `git rebase` encounters conflicts:
|
|
@@ -104,8 +97,8 @@ If `git rebase` encounters conflicts:
|
|
|
104
97
|
|
|
105
98
|
When Exarchos MCP tools are available:
|
|
106
99
|
|
|
107
|
-
1. **After stack submission:** Call `mcp__plugin_exarchos_exarchos__exarchos_event` with `action: "append"` with event type `stack.enqueued` including PR numbers from `
|
|
108
|
-
2. **Monitor merge status:** Use `
|
|
100
|
+
1. **After stack submission:** Call `mcp__plugin_exarchos_exarchos__exarchos_event` with `action: "append"` with event type `stack.enqueued` including PR numbers from `exarchos_orchestrate({ action: "list_prs", state: "open" })`
|
|
101
|
+
2. **Monitor merge status:** Use `exarchos_orchestrate({ action: "list_prs", state: "all" })` to check stack/PR status
|
|
109
102
|
3. **On successful merge:** Call `mcp__plugin_exarchos_exarchos__exarchos_event` with `action: "append"` with event type `phase.transitioned` to mark workflow complete
|
|
110
103
|
|
|
111
104
|
## Performance Notes
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
# PR Feedback Mode (--pr-fixes)
|
|
2
|
-
|
|
3
|
-
When invoked with `--pr-fixes [PR_URL]`, delegation addresses human review feedback from a pull request instead of implementing from a plan.
|
|
4
|
-
|
|
5
|
-
## Priority Levels
|
|
6
|
-
|
|
7
|
-
| Priority | Source | Description |
|
|
8
|
-
|----------|--------|-------------|
|
|
9
|
-
| 1 | `coderabbit:critical` | Critical issues + SPEC COMPLIANCE failures |
|
|
10
|
-
| 2 | `human` | Human reviewer comments (authority over automation) |
|
|
11
|
-
| 3 | `coderabbit:major` | Major issues + CODE QUALITY HIGH items |
|
|
12
|
-
| 4 | `coderabbit:minor` | Minor issues |
|
|
13
|
-
|
|
14
|
-
## Process
|
|
15
|
-
|
|
16
|
-
### Step 1: Fetch All PR Feedback
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# Get full PR details including reviews and comments
|
|
20
|
-
gh pr view <number> --json title,body,state,files,reviewDecision,reviews,comments
|
|
21
|
-
|
|
22
|
-
# Get issue-level comments (pre-merge check summaries)
|
|
23
|
-
gh issue view <number> --json comments
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
> Or use GitHub MCP `pull_request_read` and `issue_read` if available.
|
|
27
|
-
|
|
28
|
-
### Step 2: Parse CodeRabbit Feedback
|
|
29
|
-
|
|
30
|
-
**2a: Identify CodeRabbit comments** by author = `coderabbitai[bot]`
|
|
31
|
-
|
|
32
|
-
**2b: Parse line comments by severity label:**
|
|
33
|
-
|
|
34
|
-
| Label | Priority |
|
|
35
|
-
|-------|----------|
|
|
36
|
-
| `Critical` | 1 |
|
|
37
|
-
| `Major` | 2 |
|
|
38
|
-
| `Minor` | 3 |
|
|
39
|
-
|
|
40
|
-
Extract from each comment:
|
|
41
|
-
- Severity label (emoji + text)
|
|
42
|
-
- File path and line number
|
|
43
|
-
- Issue description
|
|
44
|
-
- Suggested fix (from Proposed fix section if present)
|
|
45
|
-
|
|
46
|
-
**2c: Parse pre-merge check summaries:**
|
|
47
|
-
- `Status: FAIL` in Spec Review -> Priority 1
|
|
48
|
-
- `Status: NEEDS_FIXES | BLOCKED` in Quality Review -> Priority 2
|
|
49
|
-
- Extract items from `Missing:`, `Untested:`, `Scope Creep:` lists
|
|
50
|
-
|
|
51
|
-
**2d: Parse reviews with `CHANGES_REQUESTED`:**
|
|
52
|
-
- Note "Actionable comments posted: N" count
|
|
53
|
-
- Cross-reference with line comments already parsed
|
|
54
|
-
|
|
55
|
-
### Step 3: Parse Human Comments (Priority 2)
|
|
56
|
-
|
|
57
|
-
For non-CodeRabbit comments, assign `priority: 2` (human authority over automation).
|
|
58
|
-
|
|
59
|
-
Skip comments that are:
|
|
60
|
-
- Purely praise/acknowledgment ("LGTM", "Nice work")
|
|
61
|
-
- Questions without action items
|
|
62
|
-
- Already marked resolved
|
|
63
|
-
- From other bots (CI notifications, etc.)
|
|
64
|
-
|
|
65
|
-
### Step 4: Create Fix Tasks
|
|
66
|
-
|
|
67
|
-
For each actionable item, create a structured fix task:
|
|
68
|
-
|
|
69
|
-
| Field | Description |
|
|
70
|
-
|-------|-------------|
|
|
71
|
-
| `id` | `fix-001`, `fix-002`, etc. |
|
|
72
|
-
| `priority` | `1` (critical), `2` (human), `3` (major), `4` (minor) |
|
|
73
|
-
| `source` | `"coderabbit:critical"`, `"human"`, `"coderabbit:major"`, `"coderabbit:minor"` |
|
|
74
|
-
| `severity` | `"Critical"`, `"Major"`, `"Minor"`, or null |
|
|
75
|
-
| `file` | File path |
|
|
76
|
-
| `line` | Line number (if line comment) |
|
|
77
|
-
| `issue` | Problem description |
|
|
78
|
-
| `action` | Required change / suggested fix |
|
|
79
|
-
|
|
80
|
-
### Step 5: Sort and Display Fix Tasks
|
|
81
|
-
|
|
82
|
-
Sort by priority (1->4), then by file path for grouping.
|
|
83
|
-
|
|
84
|
-
### Step 6: Track Fix Tasks
|
|
85
|
-
|
|
86
|
-
Use TodoWrite to track all fix tasks with priority labels.
|
|
87
|
-
|
|
88
|
-
### Step 7: Dispatch Fixes (MANDATORY - Priority Order)
|
|
89
|
-
|
|
90
|
-
**Dispatch sequence:**
|
|
91
|
-
1. Dispatch all P1 (critical) fixes in parallel
|
|
92
|
-
2. Wait for completion
|
|
93
|
-
3. Dispatch all P2 (human) fixes in parallel
|
|
94
|
-
4. Wait for completion
|
|
95
|
-
5. Dispatch all P3 (major) fixes in parallel
|
|
96
|
-
6. Wait for completion
|
|
97
|
-
7. Dispatch all P4 (minor) fixes in parallel
|
|
98
|
-
8. Wait for completion
|
|
99
|
-
|
|
100
|
-
**Task prompt template:**
|
|
101
|
-
```typescript
|
|
102
|
-
Task({
|
|
103
|
-
subagent_type: "general-purpose",
|
|
104
|
-
model: "opus",
|
|
105
|
-
description: "Fix [P{priority} {severity}]: {issue summary}",
|
|
106
|
-
prompt: `
|
|
107
|
-
# Task: Fix PR Feedback - {issue summary}
|
|
108
|
-
|
|
109
|
-
## Priority
|
|
110
|
-
{priority} - {source}
|
|
111
|
-
|
|
112
|
-
## Context
|
|
113
|
-
PR: {PR_URL}
|
|
114
|
-
Source: {source}
|
|
115
|
-
Original feedback: "{original comment text}"
|
|
116
|
-
|
|
117
|
-
## Working Directory
|
|
118
|
-
{absolute path to repo}
|
|
119
|
-
|
|
120
|
-
## Fix Required
|
|
121
|
-
File: {file path}
|
|
122
|
-
Line: {line number if applicable}
|
|
123
|
-
Issue: {issue description}
|
|
124
|
-
Action: {required change}
|
|
125
|
-
|
|
126
|
-
## TDD Requirements
|
|
127
|
-
1. Write a test that would catch this issue (if applicable)
|
|
128
|
-
2. Verify test fails
|
|
129
|
-
3. Implement the fix
|
|
130
|
-
4. Verify test passes
|
|
131
|
-
|
|
132
|
-
## Success Criteria
|
|
133
|
-
- [ ] Issue addressed per feedback
|
|
134
|
-
- [ ] Tests pass
|
|
135
|
-
- [ ] No regressions introduced
|
|
136
|
-
`
|
|
137
|
-
})
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
**CHECKPOINT:** Do NOT proceed to next priority level until all fixes in the current level have completed.
|
|
141
|
-
|
|
142
|
-
### Step 8: Push and Report
|
|
143
|
-
|
|
144
|
-
After all fixes complete, commit and push:
|
|
145
|
-
```bash
|
|
146
|
-
git add <fixed-files>
|
|
147
|
-
git commit -m "fix: address PR review feedback"
|
|
148
|
-
git push
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
Report to user: total fixes by priority, files modified. Then auto-chain to `/exarchos:synthesize` for merge confirmation.
|
|
152
|
-
|
|
153
|
-
### Handling Missing CodeRabbit Comments
|
|
154
|
-
|
|
155
|
-
If no CodeRabbit comments found, proceed with human comments only.
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
# PR Feedback Mode (--pr-fixes)
|
|
2
|
-
|
|
3
|
-
When invoked with `--pr-fixes [PR_URL]`, delegation addresses human review feedback from a pull request instead of implementing from a plan.
|
|
4
|
-
|
|
5
|
-
## Priority Levels
|
|
6
|
-
|
|
7
|
-
| Priority | Source | Description |
|
|
8
|
-
|----------|--------|-------------|
|
|
9
|
-
| 1 | `coderabbit:critical` | Critical issues + SPEC COMPLIANCE failures |
|
|
10
|
-
| 2 | `human` | Human reviewer comments (authority over automation) |
|
|
11
|
-
| 3 | `coderabbit:major` | Major issues + CODE QUALITY HIGH items |
|
|
12
|
-
| 4 | `coderabbit:minor` | Minor issues |
|
|
13
|
-
|
|
14
|
-
## Process
|
|
15
|
-
|
|
16
|
-
### Step 1: Fetch All PR Feedback
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# Get full PR details including reviews and comments
|
|
20
|
-
gh pr view <number> --json title,body,state,files,reviewDecision,reviews,comments
|
|
21
|
-
|
|
22
|
-
# Get issue-level comments (pre-merge check summaries)
|
|
23
|
-
gh issue view <number> --json comments
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
> Or use GitHub MCP `pull_request_read` and `issue_read` if available.
|
|
27
|
-
|
|
28
|
-
### Step 2: Parse CodeRabbit Feedback
|
|
29
|
-
|
|
30
|
-
**2a: Identify CodeRabbit comments** by author = `coderabbitai[bot]`
|
|
31
|
-
|
|
32
|
-
**2b: Parse line comments by severity label:**
|
|
33
|
-
|
|
34
|
-
| Label | Priority |
|
|
35
|
-
|-------|----------|
|
|
36
|
-
| `Critical` | 1 |
|
|
37
|
-
| `Major` | 2 |
|
|
38
|
-
| `Minor` | 3 |
|
|
39
|
-
|
|
40
|
-
Extract from each comment:
|
|
41
|
-
- Severity label (emoji + text)
|
|
42
|
-
- File path and line number
|
|
43
|
-
- Issue description
|
|
44
|
-
- Suggested fix (from Proposed fix section if present)
|
|
45
|
-
|
|
46
|
-
**2c: Parse pre-merge check summaries:**
|
|
47
|
-
- `Status: FAIL` in Spec Review -> Priority 1
|
|
48
|
-
- `Status: NEEDS_FIXES | BLOCKED` in Quality Review -> Priority 2
|
|
49
|
-
- Extract items from `Missing:`, `Untested:`, `Scope Creep:` lists
|
|
50
|
-
|
|
51
|
-
**2d: Parse reviews with `CHANGES_REQUESTED`:**
|
|
52
|
-
- Note "Actionable comments posted: N" count
|
|
53
|
-
- Cross-reference with line comments already parsed
|
|
54
|
-
|
|
55
|
-
### Step 3: Parse Human Comments (Priority 2)
|
|
56
|
-
|
|
57
|
-
For non-CodeRabbit comments, assign `priority: 2` (human authority over automation).
|
|
58
|
-
|
|
59
|
-
Skip comments that are:
|
|
60
|
-
- Purely praise/acknowledgment ("LGTM", "Nice work")
|
|
61
|
-
- Questions without action items
|
|
62
|
-
- Already marked resolved
|
|
63
|
-
- From other bots (CI notifications, etc.)
|
|
64
|
-
|
|
65
|
-
### Step 4: Create Fix Tasks
|
|
66
|
-
|
|
67
|
-
For each actionable item, create a structured fix task:
|
|
68
|
-
|
|
69
|
-
| Field | Description |
|
|
70
|
-
|-------|-------------|
|
|
71
|
-
| `id` | `fix-001`, `fix-002`, etc. |
|
|
72
|
-
| `priority` | `1` (critical), `2` (human), `3` (major), `4` (minor) |
|
|
73
|
-
| `source` | `"coderabbit:critical"`, `"human"`, `"coderabbit:major"`, `"coderabbit:minor"` |
|
|
74
|
-
| `severity` | `"Critical"`, `"Major"`, `"Minor"`, or null |
|
|
75
|
-
| `file` | File path |
|
|
76
|
-
| `line` | Line number (if line comment) |
|
|
77
|
-
| `issue` | Problem description |
|
|
78
|
-
| `action` | Required change / suggested fix |
|
|
79
|
-
|
|
80
|
-
### Step 5: Sort and Display Fix Tasks
|
|
81
|
-
|
|
82
|
-
Sort by priority (1->4), then by file path for grouping.
|
|
83
|
-
|
|
84
|
-
### Step 6: Track Fix Tasks
|
|
85
|
-
|
|
86
|
-
Use TodoWrite to track all fix tasks with priority labels.
|
|
87
|
-
|
|
88
|
-
### Step 7: Dispatch Fixes (MANDATORY - Priority Order)
|
|
89
|
-
|
|
90
|
-
**Dispatch sequence:**
|
|
91
|
-
1. Dispatch all P1 (critical) fixes in parallel
|
|
92
|
-
2. Wait for completion
|
|
93
|
-
3. Dispatch all P2 (human) fixes in parallel
|
|
94
|
-
4. Wait for completion
|
|
95
|
-
5. Dispatch all P3 (major) fixes in parallel
|
|
96
|
-
6. Wait for completion
|
|
97
|
-
7. Dispatch all P4 (minor) fixes in parallel
|
|
98
|
-
8. Wait for completion
|
|
99
|
-
|
|
100
|
-
**Task prompt template:**
|
|
101
|
-
```typescript
|
|
102
|
-
Task({
|
|
103
|
-
subagent_type: "general-purpose",
|
|
104
|
-
model: "opus",
|
|
105
|
-
description: "Fix [P{priority} {severity}]: {issue summary}",
|
|
106
|
-
prompt: `
|
|
107
|
-
# Task: Fix PR Feedback - {issue summary}
|
|
108
|
-
|
|
109
|
-
## Priority
|
|
110
|
-
{priority} - {source}
|
|
111
|
-
|
|
112
|
-
## Context
|
|
113
|
-
PR: {PR_URL}
|
|
114
|
-
Source: {source}
|
|
115
|
-
Original feedback: "{original comment text}"
|
|
116
|
-
|
|
117
|
-
## Working Directory
|
|
118
|
-
{absolute path to repo}
|
|
119
|
-
|
|
120
|
-
## Fix Required
|
|
121
|
-
File: {file path}
|
|
122
|
-
Line: {line number if applicable}
|
|
123
|
-
Issue: {issue description}
|
|
124
|
-
Action: {required change}
|
|
125
|
-
|
|
126
|
-
## TDD Requirements
|
|
127
|
-
1. Write a test that would catch this issue (if applicable)
|
|
128
|
-
2. Verify test fails
|
|
129
|
-
3. Implement the fix
|
|
130
|
-
4. Verify test passes
|
|
131
|
-
|
|
132
|
-
## Success Criteria
|
|
133
|
-
- [ ] Issue addressed per feedback
|
|
134
|
-
- [ ] Tests pass
|
|
135
|
-
- [ ] No regressions introduced
|
|
136
|
-
`
|
|
137
|
-
})
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
**CHECKPOINT:** Do NOT proceed to next priority level until all fixes in the current level have completed.
|
|
141
|
-
|
|
142
|
-
### Step 8: Push and Report
|
|
143
|
-
|
|
144
|
-
After all fixes complete, commit and push:
|
|
145
|
-
```bash
|
|
146
|
-
git add <fixed-files>
|
|
147
|
-
git commit -m "fix: address PR review feedback"
|
|
148
|
-
git push
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
Report to user: total fixes by priority, files modified. Then auto-chain to `/exarchos:synthesize` for merge confirmation.
|
|
152
|
-
|
|
153
|
-
### Handling Missing CodeRabbit Comments
|
|
154
|
-
|
|
155
|
-
If no CodeRabbit comments found, proceed with human comments only.
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
# PR Feedback Mode (--pr-fixes)
|
|
2
|
-
|
|
3
|
-
When invoked with `--pr-fixes [PR_URL]`, delegation addresses human review feedback from a pull request instead of implementing from a plan.
|
|
4
|
-
|
|
5
|
-
## Priority Levels
|
|
6
|
-
|
|
7
|
-
| Priority | Source | Description |
|
|
8
|
-
|----------|--------|-------------|
|
|
9
|
-
| 1 | `coderabbit:critical` | Critical issues + SPEC COMPLIANCE failures |
|
|
10
|
-
| 2 | `human` | Human reviewer comments (authority over automation) |
|
|
11
|
-
| 3 | `coderabbit:major` | Major issues + CODE QUALITY HIGH items |
|
|
12
|
-
| 4 | `coderabbit:minor` | Minor issues |
|
|
13
|
-
|
|
14
|
-
## Process
|
|
15
|
-
|
|
16
|
-
### Step 1: Fetch All PR Feedback
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# Get full PR details including reviews and comments
|
|
20
|
-
gh pr view <number> --json title,body,state,files,reviewDecision,reviews,comments
|
|
21
|
-
|
|
22
|
-
# Get issue-level comments (pre-merge check summaries)
|
|
23
|
-
gh issue view <number> --json comments
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
> Or use GitHub MCP `pull_request_read` and `issue_read` if available.
|
|
27
|
-
|
|
28
|
-
### Step 2: Parse CodeRabbit Feedback
|
|
29
|
-
|
|
30
|
-
**2a: Identify CodeRabbit comments** by author = `coderabbitai[bot]`
|
|
31
|
-
|
|
32
|
-
**2b: Parse line comments by severity label:**
|
|
33
|
-
|
|
34
|
-
| Label | Priority |
|
|
35
|
-
|-------|----------|
|
|
36
|
-
| `Critical` | 1 |
|
|
37
|
-
| `Major` | 2 |
|
|
38
|
-
| `Minor` | 3 |
|
|
39
|
-
|
|
40
|
-
Extract from each comment:
|
|
41
|
-
- Severity label (emoji + text)
|
|
42
|
-
- File path and line number
|
|
43
|
-
- Issue description
|
|
44
|
-
- Suggested fix (from Proposed fix section if present)
|
|
45
|
-
|
|
46
|
-
**2c: Parse pre-merge check summaries:**
|
|
47
|
-
- `Status: FAIL` in Spec Review -> Priority 1
|
|
48
|
-
- `Status: NEEDS_FIXES | BLOCKED` in Quality Review -> Priority 2
|
|
49
|
-
- Extract items from `Missing:`, `Untested:`, `Scope Creep:` lists
|
|
50
|
-
|
|
51
|
-
**2d: Parse reviews with `CHANGES_REQUESTED`:**
|
|
52
|
-
- Note "Actionable comments posted: N" count
|
|
53
|
-
- Cross-reference with line comments already parsed
|
|
54
|
-
|
|
55
|
-
### Step 3: Parse Human Comments (Priority 2)
|
|
56
|
-
|
|
57
|
-
For non-CodeRabbit comments, assign `priority: 2` (human authority over automation).
|
|
58
|
-
|
|
59
|
-
Skip comments that are:
|
|
60
|
-
- Purely praise/acknowledgment ("LGTM", "Nice work")
|
|
61
|
-
- Questions without action items
|
|
62
|
-
- Already marked resolved
|
|
63
|
-
- From other bots (CI notifications, etc.)
|
|
64
|
-
|
|
65
|
-
### Step 4: Create Fix Tasks
|
|
66
|
-
|
|
67
|
-
For each actionable item, create a structured fix task:
|
|
68
|
-
|
|
69
|
-
| Field | Description |
|
|
70
|
-
|-------|-------------|
|
|
71
|
-
| `id` | `fix-001`, `fix-002`, etc. |
|
|
72
|
-
| `priority` | `1` (critical), `2` (human), `3` (major), `4` (minor) |
|
|
73
|
-
| `source` | `"coderabbit:critical"`, `"human"`, `"coderabbit:major"`, `"coderabbit:minor"` |
|
|
74
|
-
| `severity` | `"Critical"`, `"Major"`, `"Minor"`, or null |
|
|
75
|
-
| `file` | File path |
|
|
76
|
-
| `line` | Line number (if line comment) |
|
|
77
|
-
| `issue` | Problem description |
|
|
78
|
-
| `action` | Required change / suggested fix |
|
|
79
|
-
|
|
80
|
-
### Step 5: Sort and Display Fix Tasks
|
|
81
|
-
|
|
82
|
-
Sort by priority (1->4), then by file path for grouping.
|
|
83
|
-
|
|
84
|
-
### Step 6: Track Fix Tasks
|
|
85
|
-
|
|
86
|
-
Use TodoWrite to track all fix tasks with priority labels.
|
|
87
|
-
|
|
88
|
-
### Step 7: Dispatch Fixes (MANDATORY - Priority Order)
|
|
89
|
-
|
|
90
|
-
**Dispatch sequence:**
|
|
91
|
-
1. Dispatch all P1 (critical) fixes in parallel
|
|
92
|
-
2. Wait for completion
|
|
93
|
-
3. Dispatch all P2 (human) fixes in parallel
|
|
94
|
-
4. Wait for completion
|
|
95
|
-
5. Dispatch all P3 (major) fixes in parallel
|
|
96
|
-
6. Wait for completion
|
|
97
|
-
7. Dispatch all P4 (minor) fixes in parallel
|
|
98
|
-
8. Wait for completion
|
|
99
|
-
|
|
100
|
-
**Task prompt template:**
|
|
101
|
-
```typescript
|
|
102
|
-
Task({
|
|
103
|
-
subagent_type: "general-purpose",
|
|
104
|
-
model: "opus",
|
|
105
|
-
description: "Fix [P{priority} {severity}]: {issue summary}",
|
|
106
|
-
prompt: `
|
|
107
|
-
# Task: Fix PR Feedback - {issue summary}
|
|
108
|
-
|
|
109
|
-
## Priority
|
|
110
|
-
{priority} - {source}
|
|
111
|
-
|
|
112
|
-
## Context
|
|
113
|
-
PR: {PR_URL}
|
|
114
|
-
Source: {source}
|
|
115
|
-
Original feedback: "{original comment text}"
|
|
116
|
-
|
|
117
|
-
## Working Directory
|
|
118
|
-
{absolute path to repo}
|
|
119
|
-
|
|
120
|
-
## Fix Required
|
|
121
|
-
File: {file path}
|
|
122
|
-
Line: {line number if applicable}
|
|
123
|
-
Issue: {issue description}
|
|
124
|
-
Action: {required change}
|
|
125
|
-
|
|
126
|
-
## TDD Requirements
|
|
127
|
-
1. Write a test that would catch this issue (if applicable)
|
|
128
|
-
2. Verify test fails
|
|
129
|
-
3. Implement the fix
|
|
130
|
-
4. Verify test passes
|
|
131
|
-
|
|
132
|
-
## Success Criteria
|
|
133
|
-
- [ ] Issue addressed per feedback
|
|
134
|
-
- [ ] Tests pass
|
|
135
|
-
- [ ] No regressions introduced
|
|
136
|
-
`
|
|
137
|
-
})
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
**CHECKPOINT:** Do NOT proceed to next priority level until all fixes in the current level have completed.
|
|
141
|
-
|
|
142
|
-
### Step 8: Push and Report
|
|
143
|
-
|
|
144
|
-
After all fixes complete, commit and push:
|
|
145
|
-
```bash
|
|
146
|
-
git add <fixed-files>
|
|
147
|
-
git commit -m "fix: address PR review feedback"
|
|
148
|
-
git push
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
Report to user: total fixes by priority, files modified. Then auto-chain to `/exarchos:synthesize` for merge confirmation.
|
|
152
|
-
|
|
153
|
-
### Handling Missing CodeRabbit Comments
|
|
154
|
-
|
|
155
|
-
If no CodeRabbit comments found, proceed with human comments only.
|