@olegkoval/agent-skills 1.23.0 → 1.25.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 +2 -1
- package/.cursor-plugin/index.json +5 -0
- package/.grok-plugin/index.json +5 -0
- package/.kiro/steering/garmin-watchface.md +7 -0
- package/.kiro/steering/pr-finalize.md +140 -0
- package/.windsurf/rules/garmin-watchface.md +7 -0
- package/.windsurf/rules/pr-finalize.md +139 -0
- package/README.md +1 -0
- package/catalog/skills.json +30 -6
- package/package.json +1 -1
- package/packages/software-development/pr-finalize/SKILL.md +149 -0
- package/packages/software-development/pr-finalize/adapters/claude/plugin.json +5 -0
- package/packages/software-development/pr-finalize/adapters/claude/skills/pr-finalize/SKILL.md +150 -0
- package/packages/software-development/pr-finalize/adapters/codex/README.md +26 -0
- package/packages/software-development/pr-finalize/adapters/cursor/plugin.json +6 -0
- package/packages/software-development/pr-finalize/adapters/cursor/skills/pr-finalize/SKILL.md +151 -0
- package/packages/software-development/pr-finalize/adapters/grok/plugin.json +6 -0
- package/packages/software-development/pr-finalize/adapters/grok/skills/pr-finalize/SKILL.md +150 -0
- package/packages/software-development/pr-finalize/adapters/kiro/steering/pr-finalize.md +140 -0
- package/packages/software-development/pr-finalize/adapters/windsurf/rules/pr-finalize.md +139 -0
- package/packages/wearables/garmin-watchface/SKILL.md +7 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/SKILL.md +7 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/references/publishing.md +145 -0
- package/packages/wearables/garmin-watchface/adapters/claude/skills/garmin-watchface/scripts/ciq-release +333 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/SKILL.md +7 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/references/publishing.md +145 -0
- package/packages/wearables/garmin-watchface/adapters/cursor/skills/garmin-watchface/scripts/ciq-release +333 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/SKILL.md +7 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/references/publishing.md +145 -0
- package/packages/wearables/garmin-watchface/adapters/grok/skills/garmin-watchface/scripts/ciq-release +333 -0
- package/packages/wearables/garmin-watchface/adapters/kiro/steering/garmin-watchface.md +7 -0
- package/packages/wearables/garmin-watchface/adapters/windsurf/rules/garmin-watchface.md +7 -0
- package/packages/wearables/garmin-watchface/references/publishing.md +145 -0
- package/packages/wearables/garmin-watchface/scripts/ciq-release +333 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "olko-agent-skills",
|
|
3
3
|
"description": "Agent-agnostic skill catalog for Codex, Claude, Cursor, Grok, Copilot, Windsurf, Kiro, and other skill-aware tools.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.24.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Oleg Koval"
|
|
7
7
|
},
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"./packages/software-development/macos-menubar-app",
|
|
33
33
|
"./packages/software-development/skill-budget-audit",
|
|
34
34
|
"./packages/software-development/crash-course",
|
|
35
|
+
"./packages/software-development/pr-finalize",
|
|
35
36
|
"./packages/software-development/qodoloop",
|
|
36
37
|
"./packages/wearables/garmin-watchface",
|
|
37
38
|
"./packages/software-development/coderabbitloop",
|
|
@@ -106,6 +106,11 @@
|
|
|
106
106
|
"source": "./packages/software-development/crash-course/adapters/cursor",
|
|
107
107
|
"description": "Expert tutor for rapid, source-grounded learning of any topic: a timed 4-hour sprint plus cheat-sheet, learning-ladder, quiz-me, Feynman, and resource-curation modes."
|
|
108
108
|
},
|
|
109
|
+
{
|
|
110
|
+
"name": "olko:pr-finalize",
|
|
111
|
+
"source": "./packages/software-development/pr-finalize/adapters/cursor",
|
|
112
|
+
"description": "Drives one GitHub PR to genuinely merge-ready: rebases and resolves conflicts, sweeps every review bot and human comment to zero unaddressed findings, verifies unit and E2E coverage actually exists, runs the repo's real lint/format/test gates before pushing, and reports what still needs a human."
|
|
113
|
+
},
|
|
109
114
|
{
|
|
110
115
|
"name": "olko:qodoloop",
|
|
111
116
|
"source": "./packages/software-development/qodoloop/adapters/cursor",
|
package/.grok-plugin/index.json
CHANGED
|
@@ -116,6 +116,11 @@
|
|
|
116
116
|
"source": "./packages/software-development/crash-course/adapters/grok",
|
|
117
117
|
"description": "Expert tutor for rapid, source-grounded learning of any topic: a timed 4-hour sprint plus cheat-sheet, learning-ladder, quiz-me, Feynman, and resource-curation modes."
|
|
118
118
|
},
|
|
119
|
+
{
|
|
120
|
+
"name": "olko:pr-finalize",
|
|
121
|
+
"source": "./packages/software-development/pr-finalize/adapters/grok",
|
|
122
|
+
"description": "Drives one GitHub PR to genuinely merge-ready: rebases and resolves conflicts, sweeps every review bot and human comment to zero unaddressed findings, verifies unit and E2E coverage actually exists, runs the repo's real lint/format/test gates before pushing, and reports what still needs a human."
|
|
123
|
+
},
|
|
119
124
|
{
|
|
120
125
|
"name": "olko:qodoloop",
|
|
121
126
|
"source": "./packages/software-development/qodoloop/adapters/grok",
|
|
@@ -22,6 +22,7 @@ looked like success first.
|
|
|
22
22
|
| `references/simulator.md` | Screenshots, settings not applying, monkeydo hanging |
|
|
23
23
|
| `references/devices.md` | Adding device support, launcher icons, API levels |
|
|
24
24
|
| `references/store.md` | Publishing, listing copy, IP questions |
|
|
25
|
+
| `references/publishing.md` | Driving the store portal in a browser; upload/update flow, validator rejections |
|
|
25
26
|
|
|
26
27
|
## Tools
|
|
27
28
|
|
|
@@ -34,8 +35,14 @@ Run these rather than reinventing them. All are standalone.
|
|
|
34
35
|
<skill-dir>/scripts/ciq-capture out.png # calibrated simulator screenshot
|
|
35
36
|
<skill-dir>/scripts/ciq-capture out.png --face --size 260 # cropped + masked to the round display
|
|
36
37
|
<skill-dir>/scripts/ciq-calibrate # re-derive the display rect if capture looks wrong
|
|
38
|
+
<skill-dir>/scripts/ciq-release # pre-submission check: package, screenshots, icon, keys, copy
|
|
37
39
|
```
|
|
38
40
|
|
|
41
|
+
`<skill-dir>/scripts/ciq-release` is what you run before opening the store
|
|
42
|
+
portal. Every check in it is something otherwise discovered halfway through the
|
|
43
|
+
submission form -- a stale screenshot set, an icon still copied from the last
|
|
44
|
+
project, or copy containing a character the description validator rejects.
|
|
45
|
+
|
|
39
46
|
`<skill-dir>/scripts/ciq-capture` exists because `screencapture -R` grabs a screen *region*, not
|
|
40
47
|
a window: without a frontmost check it silently photographs whatever is on top,
|
|
41
48
|
and the window moves between simulator restarts. Both failure modes produce a
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
inclusion: manual
|
|
5
|
+
description: "Drives one GitHub PR to genuinely merge-ready: rebases and resolves conflicts, sweeps every review bot and human comment to zero unaddressed findings, verifies unit and E2E coverage actually exists, runs the repo's real lint/format/test gates before pushing, and reports what still needs a human."
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# PR Finalize
|
|
9
|
+
|
|
10
|
+
One PR, taken all the way to merge-ready. The job is not "make the bots stop talking" — it is **land the change in a state a careful reviewer would sign off on**, with evidence for every claim.
|
|
11
|
+
|
|
12
|
+
## Inputs
|
|
13
|
+
|
|
14
|
+
- **PR number or URL** (optional): detect from the current branch if not given.
|
|
15
|
+
- `--no-push` (optional): do everything except the final push. Use when the repo auto-merges and the user wants to eyeball first.
|
|
16
|
+
|
|
17
|
+
## Non-negotiables
|
|
18
|
+
|
|
19
|
+
These are the failure modes this skill exists to prevent. Violating one makes the whole run worthless:
|
|
20
|
+
|
|
21
|
+
- **Never report a gate as passing without having run it.** Paste the real output. "Tests should pass" is not a result.
|
|
22
|
+
- **Never resolve or claim-fix a finding you didn't actually fix.** Blocked is an honest outcome; a false "done" is not.
|
|
23
|
+
- **Never `git add -A`.** Stage only the files your fixes touched. Start from a clean tree so that's safe.
|
|
24
|
+
- **Never invent test coverage.** If the change has no browser-reachable surface, say so explicitly and name the suite that *is* the real gate. Do not add a hollow E2E test to look thorough.
|
|
25
|
+
- **A green CI badge is not proof.** Many repos split their required check from the full suite (browser-free half only, etc.). Find out what the required check actually runs.
|
|
26
|
+
|
|
27
|
+
## Instructions
|
|
28
|
+
|
|
29
|
+
### 1. Establish the ground truth
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
gh pr view <PR> --json number,title,body,state,isDraft,headRefName,baseRefName,mergeable,mergeStateStatus,labels,reviewDecision,statusCheckRollup,url
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Record four things before touching code:
|
|
36
|
+
|
|
37
|
+
- **`mergeable`** — `CONFLICTING` means step 2 is mandatory.
|
|
38
|
+
- **Which checks are failing**, and for each, whether it is *required*. Check branch protection (`gh api repos/{owner}/{repo}/branches/<base>/protection`) rather than assuming — a red optional job (a flaky bot-review runner, a nightly) is not a blocker, and burning the run waiting on one is a classic waste.
|
|
39
|
+
- **Whether the repo auto-merges.** Look for a shepherd/automerge workflow in `.github/workflows/` and read its *gating conditions* (required labels, required checks). If pushing could trigger an immediate merge, decide deliberately: either satisfy the review sweep first, or tell the user before you push. Never let an auto-merge race a review you were asked to complete.
|
|
40
|
+
- **Whether a bot review actually ran.** A `SUCCESS` status from a review bot can still mean "rate-limited, never reviewed" — read its comment body, not just the check state.
|
|
41
|
+
|
|
42
|
+
### 2. Rebase onto the base branch
|
|
43
|
+
|
|
44
|
+
Require a clean tree first (`git status --porcelain` empty), then:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
git fetch origin <base>
|
|
48
|
+
git rebase origin/<base>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Resolve conflicts by **understanding both sides**, not by picking one. Read the base-side commit that introduced the conflicting hunk (`git log -1 --format=%s <base> -- <file>`, then the diff) — a conflict usually means main changed an invariant your branch is unaware of, and blindly keeping "your" side silently reverts it. State in the PR comment which invariant you preserved and why.
|
|
52
|
+
|
|
53
|
+
After resolving, re-run the tests before continuing — a rebase that compiles is not a rebase that works.
|
|
54
|
+
|
|
55
|
+
### 3. Sweep every review source
|
|
56
|
+
|
|
57
|
+
Collect findings from all of these; do not stop at the first:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# inline review threads (all bots + humans), with resolution state
|
|
61
|
+
gh api repos/{owner}/{repo}/pulls/<PR>/comments --paginate
|
|
62
|
+
# rollup issue comments (where CodeRabbit/Qodo post summaries and rate-limit notices)
|
|
63
|
+
gh api repos/{owner}/{repo}/issues/<PR>/comments --paginate
|
|
64
|
+
# formal reviews
|
|
65
|
+
gh pr view <PR> --json reviews
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Delegate to the dedicated loop skill when one exists** rather than reimplementing its bot's protocol — `qodoloop` for Qodo, `coderabbitloop` for CodeRabbit, `greploop` for Greptile. Each already encodes that bot's posting shape, its ready-made per-finding fix prompt, and its real terminal states. Use this skill's own sweep for human comments and for bots without a dedicated loop.
|
|
69
|
+
|
|
70
|
+
Triage every finding into exactly one bucket:
|
|
71
|
+
|
|
72
|
+
| Bucket | Action |
|
|
73
|
+
|---|---|
|
|
74
|
+
| **Real defect** | Fix it. This is the point of the exercise. |
|
|
75
|
+
| **Legitimate improvement** | Fix it if it's in scope for this PR. |
|
|
76
|
+
| **False positive** | Reply explaining *specifically* why the bot is wrong. Do not resolve silently. |
|
|
77
|
+
| **Needs a human call** | Reply, leave open, surface in the final report. |
|
|
78
|
+
|
|
79
|
+
Bot findings are suggestions from something that has not run the code. A "🐞 Bug" label is a hypothesis — verify it against the actual source before fixing, and against the actual behavior before dismissing.
|
|
80
|
+
|
|
81
|
+
### 4. Close the coverage gap
|
|
82
|
+
|
|
83
|
+
Ask, for the change as a whole, what would catch a regression here — then check whether the PR actually has it.
|
|
84
|
+
|
|
85
|
+
- **Unit / integration tests:** does every new branch have a test that fails if you invert it? Bots frequently and correctly flag helper functions exercised only *indirectly* through a caller. A direct test per branch is cheap and is usually the right response.
|
|
86
|
+
- **Browser / E2E tests:** determine whether the repo supports them (`playwright.config.*`, `cypress.config.*`, a `test:e2e` script) **and** whether this change has any surface they can reach. Then do one of exactly two things:
|
|
87
|
+
- it has a reachable surface → add or extend the E2E spec;
|
|
88
|
+
- it does not → **say so explicitly in the PR comment**, name why (e.g. "this is entirely inside a Durable Object alarm loop; the E2E harness only serves static assets"), and name the suite that is the real gate.
|
|
89
|
+
|
|
90
|
+
Silence here reads as an oversight. An explicit "not applicable, because X" reads as diligence — and is checkable.
|
|
91
|
+
|
|
92
|
+
### 5. Run the real gates
|
|
93
|
+
|
|
94
|
+
Discover them from the repo (`Makefile`, `package.json` scripts, CI workflow) — do not guess target names. Run, at minimum, the equivalents of:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
<lint> # e.g. make lint / npm run lint
|
|
98
|
+
<format> # check mode first; only write if it reports drift
|
|
99
|
+
<tests> # the suite covering the changed package
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Capture exit codes, not just output. Repo-specific traps worth checking for before you burn a cycle: linters whose cache replays findings from deleted sibling worktrees, formatters whose local toolchain version outruns CI's (churning unrelated files), and test runners that hang when two runs overlap.
|
|
103
|
+
|
|
104
|
+
If a gate fails, fix it. Do not push red.
|
|
105
|
+
|
|
106
|
+
### 6. Push and explain
|
|
107
|
+
|
|
108
|
+
Stage only the files you touched, commit, and push (`--force-with-lease` after a rebase — never bare `--force`).
|
|
109
|
+
|
|
110
|
+
Then post **one** PR comment that a reviewer can audit without re-reading the diff:
|
|
111
|
+
|
|
112
|
+
- what the rebase conflict was and which side won, with the reason;
|
|
113
|
+
- each finding, and what you did about it (including the ones you rejected, with the argument);
|
|
114
|
+
- the coverage decision from step 4, including the explicit not-applicable if that's the answer;
|
|
115
|
+
- **verbatim** gate output — real numbers (`# pass 480 / # fail 0`, `0 issues.`), not adjectives.
|
|
116
|
+
|
|
117
|
+
Re-trigger any bot that never actually reviewed (e.g. `@coderabbitai review`) so the PR gets the pass it was owed.
|
|
118
|
+
|
|
119
|
+
### 7. Verify and report
|
|
120
|
+
|
|
121
|
+
Re-read the PR state after the push — confirm `mergeable` flipped, checks went green, and clear now-stale labels (`needs-rebase`, etc.). Poll re-triggered bots for their new pass and handle anything it raises.
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
PR #965 finalized.
|
|
125
|
+
Rebase: 1 conflict resolved (kept main's #834 D1-first ordering)
|
|
126
|
+
Findings: 2 addressed, 0 rejected, 0 blocked
|
|
127
|
+
Coverage: +5 unit tests; E2E not applicable (no browser surface) — stated on the PR
|
|
128
|
+
Gates: tests 480/480, lint 0 issues, format clean
|
|
129
|
+
State: MERGEABLE, checks green
|
|
130
|
+
Needs human: none
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
If anything is left, say precisely what and why — an honest "blocked on X" is the deliverable when X is genuinely a human call.
|
|
134
|
+
|
|
135
|
+
## Related skills
|
|
136
|
+
|
|
137
|
+
- `qodoloop` — full Qodo thread protocol (per-finding Agent Prompts, resolve mutations).
|
|
138
|
+
- `coderabbitloop` — full CodeRabbit protocol.
|
|
139
|
+
- `greploop` — drives a PR to a 5/5 Greptile confidence score.
|
|
140
|
+
- `ci-fix-loop` — when the blocker is a failing pipeline rather than review feedback.
|
|
@@ -21,6 +21,7 @@ looked like success first.
|
|
|
21
21
|
| `references/simulator.md` | Screenshots, settings not applying, monkeydo hanging |
|
|
22
22
|
| `references/devices.md` | Adding device support, launcher icons, API levels |
|
|
23
23
|
| `references/store.md` | Publishing, listing copy, IP questions |
|
|
24
|
+
| `references/publishing.md` | Driving the store portal in a browser; upload/update flow, validator rejections |
|
|
24
25
|
|
|
25
26
|
## Tools
|
|
26
27
|
|
|
@@ -33,8 +34,14 @@ Run these rather than reinventing them. All are standalone.
|
|
|
33
34
|
<skill-dir>/scripts/ciq-capture out.png # calibrated simulator screenshot
|
|
34
35
|
<skill-dir>/scripts/ciq-capture out.png --face --size 260 # cropped + masked to the round display
|
|
35
36
|
<skill-dir>/scripts/ciq-calibrate # re-derive the display rect if capture looks wrong
|
|
37
|
+
<skill-dir>/scripts/ciq-release # pre-submission check: package, screenshots, icon, keys, copy
|
|
36
38
|
```
|
|
37
39
|
|
|
40
|
+
`<skill-dir>/scripts/ciq-release` is what you run before opening the store
|
|
41
|
+
portal. Every check in it is something otherwise discovered halfway through the
|
|
42
|
+
submission form -- a stale screenshot set, an icon still copied from the last
|
|
43
|
+
project, or copy containing a character the description validator rejects.
|
|
44
|
+
|
|
38
45
|
`<skill-dir>/scripts/ciq-capture` exists because `screencapture -R` grabs a screen *region*, not
|
|
39
46
|
a window: without a frontmost check it silently photographs whatever is on top,
|
|
40
47
|
and the window moves between simulator restarts. Both failure modes produce a
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
<!-- Generated by scripts/build-adapters.sh. Do not edit directly. -->
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
description: "Drives one GitHub PR to genuinely merge-ready: rebases and resolves conflicts, sweeps every review bot and human comment to zero unaddressed findings, verifies unit and E2E coverage actually exists, runs the repo's real lint/format/test gates before pushing, and reports what still needs a human."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PR Finalize
|
|
8
|
+
|
|
9
|
+
One PR, taken all the way to merge-ready. The job is not "make the bots stop talking" — it is **land the change in a state a careful reviewer would sign off on**, with evidence for every claim.
|
|
10
|
+
|
|
11
|
+
## Inputs
|
|
12
|
+
|
|
13
|
+
- **PR number or URL** (optional): detect from the current branch if not given.
|
|
14
|
+
- `--no-push` (optional): do everything except the final push. Use when the repo auto-merges and the user wants to eyeball first.
|
|
15
|
+
|
|
16
|
+
## Non-negotiables
|
|
17
|
+
|
|
18
|
+
These are the failure modes this skill exists to prevent. Violating one makes the whole run worthless:
|
|
19
|
+
|
|
20
|
+
- **Never report a gate as passing without having run it.** Paste the real output. "Tests should pass" is not a result.
|
|
21
|
+
- **Never resolve or claim-fix a finding you didn't actually fix.** Blocked is an honest outcome; a false "done" is not.
|
|
22
|
+
- **Never `git add -A`.** Stage only the files your fixes touched. Start from a clean tree so that's safe.
|
|
23
|
+
- **Never invent test coverage.** If the change has no browser-reachable surface, say so explicitly and name the suite that *is* the real gate. Do not add a hollow E2E test to look thorough.
|
|
24
|
+
- **A green CI badge is not proof.** Many repos split their required check from the full suite (browser-free half only, etc.). Find out what the required check actually runs.
|
|
25
|
+
|
|
26
|
+
## Instructions
|
|
27
|
+
|
|
28
|
+
### 1. Establish the ground truth
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
gh pr view <PR> --json number,title,body,state,isDraft,headRefName,baseRefName,mergeable,mergeStateStatus,labels,reviewDecision,statusCheckRollup,url
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Record four things before touching code:
|
|
35
|
+
|
|
36
|
+
- **`mergeable`** — `CONFLICTING` means step 2 is mandatory.
|
|
37
|
+
- **Which checks are failing**, and for each, whether it is *required*. Check branch protection (`gh api repos/{owner}/{repo}/branches/<base>/protection`) rather than assuming — a red optional job (a flaky bot-review runner, a nightly) is not a blocker, and burning the run waiting on one is a classic waste.
|
|
38
|
+
- **Whether the repo auto-merges.** Look for a shepherd/automerge workflow in `.github/workflows/` and read its *gating conditions* (required labels, required checks). If pushing could trigger an immediate merge, decide deliberately: either satisfy the review sweep first, or tell the user before you push. Never let an auto-merge race a review you were asked to complete.
|
|
39
|
+
- **Whether a bot review actually ran.** A `SUCCESS` status from a review bot can still mean "rate-limited, never reviewed" — read its comment body, not just the check state.
|
|
40
|
+
|
|
41
|
+
### 2. Rebase onto the base branch
|
|
42
|
+
|
|
43
|
+
Require a clean tree first (`git status --porcelain` empty), then:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
git fetch origin <base>
|
|
47
|
+
git rebase origin/<base>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Resolve conflicts by **understanding both sides**, not by picking one. Read the base-side commit that introduced the conflicting hunk (`git log -1 --format=%s <base> -- <file>`, then the diff) — a conflict usually means main changed an invariant your branch is unaware of, and blindly keeping "your" side silently reverts it. State in the PR comment which invariant you preserved and why.
|
|
51
|
+
|
|
52
|
+
After resolving, re-run the tests before continuing — a rebase that compiles is not a rebase that works.
|
|
53
|
+
|
|
54
|
+
### 3. Sweep every review source
|
|
55
|
+
|
|
56
|
+
Collect findings from all of these; do not stop at the first:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# inline review threads (all bots + humans), with resolution state
|
|
60
|
+
gh api repos/{owner}/{repo}/pulls/<PR>/comments --paginate
|
|
61
|
+
# rollup issue comments (where CodeRabbit/Qodo post summaries and rate-limit notices)
|
|
62
|
+
gh api repos/{owner}/{repo}/issues/<PR>/comments --paginate
|
|
63
|
+
# formal reviews
|
|
64
|
+
gh pr view <PR> --json reviews
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Delegate to the dedicated loop skill when one exists** rather than reimplementing its bot's protocol — `qodoloop` for Qodo, `coderabbitloop` for CodeRabbit, `greploop` for Greptile. Each already encodes that bot's posting shape, its ready-made per-finding fix prompt, and its real terminal states. Use this skill's own sweep for human comments and for bots without a dedicated loop.
|
|
68
|
+
|
|
69
|
+
Triage every finding into exactly one bucket:
|
|
70
|
+
|
|
71
|
+
| Bucket | Action |
|
|
72
|
+
|---|---|
|
|
73
|
+
| **Real defect** | Fix it. This is the point of the exercise. |
|
|
74
|
+
| **Legitimate improvement** | Fix it if it's in scope for this PR. |
|
|
75
|
+
| **False positive** | Reply explaining *specifically* why the bot is wrong. Do not resolve silently. |
|
|
76
|
+
| **Needs a human call** | Reply, leave open, surface in the final report. |
|
|
77
|
+
|
|
78
|
+
Bot findings are suggestions from something that has not run the code. A "🐞 Bug" label is a hypothesis — verify it against the actual source before fixing, and against the actual behavior before dismissing.
|
|
79
|
+
|
|
80
|
+
### 4. Close the coverage gap
|
|
81
|
+
|
|
82
|
+
Ask, for the change as a whole, what would catch a regression here — then check whether the PR actually has it.
|
|
83
|
+
|
|
84
|
+
- **Unit / integration tests:** does every new branch have a test that fails if you invert it? Bots frequently and correctly flag helper functions exercised only *indirectly* through a caller. A direct test per branch is cheap and is usually the right response.
|
|
85
|
+
- **Browser / E2E tests:** determine whether the repo supports them (`playwright.config.*`, `cypress.config.*`, a `test:e2e` script) **and** whether this change has any surface they can reach. Then do one of exactly two things:
|
|
86
|
+
- it has a reachable surface → add or extend the E2E spec;
|
|
87
|
+
- it does not → **say so explicitly in the PR comment**, name why (e.g. "this is entirely inside a Durable Object alarm loop; the E2E harness only serves static assets"), and name the suite that is the real gate.
|
|
88
|
+
|
|
89
|
+
Silence here reads as an oversight. An explicit "not applicable, because X" reads as diligence — and is checkable.
|
|
90
|
+
|
|
91
|
+
### 5. Run the real gates
|
|
92
|
+
|
|
93
|
+
Discover them from the repo (`Makefile`, `package.json` scripts, CI workflow) — do not guess target names. Run, at minimum, the equivalents of:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
<lint> # e.g. make lint / npm run lint
|
|
97
|
+
<format> # check mode first; only write if it reports drift
|
|
98
|
+
<tests> # the suite covering the changed package
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Capture exit codes, not just output. Repo-specific traps worth checking for before you burn a cycle: linters whose cache replays findings from deleted sibling worktrees, formatters whose local toolchain version outruns CI's (churning unrelated files), and test runners that hang when two runs overlap.
|
|
102
|
+
|
|
103
|
+
If a gate fails, fix it. Do not push red.
|
|
104
|
+
|
|
105
|
+
### 6. Push and explain
|
|
106
|
+
|
|
107
|
+
Stage only the files you touched, commit, and push (`--force-with-lease` after a rebase — never bare `--force`).
|
|
108
|
+
|
|
109
|
+
Then post **one** PR comment that a reviewer can audit without re-reading the diff:
|
|
110
|
+
|
|
111
|
+
- what the rebase conflict was and which side won, with the reason;
|
|
112
|
+
- each finding, and what you did about it (including the ones you rejected, with the argument);
|
|
113
|
+
- the coverage decision from step 4, including the explicit not-applicable if that's the answer;
|
|
114
|
+
- **verbatim** gate output — real numbers (`# pass 480 / # fail 0`, `0 issues.`), not adjectives.
|
|
115
|
+
|
|
116
|
+
Re-trigger any bot that never actually reviewed (e.g. `@coderabbitai review`) so the PR gets the pass it was owed.
|
|
117
|
+
|
|
118
|
+
### 7. Verify and report
|
|
119
|
+
|
|
120
|
+
Re-read the PR state after the push — confirm `mergeable` flipped, checks went green, and clear now-stale labels (`needs-rebase`, etc.). Poll re-triggered bots for their new pass and handle anything it raises.
|
|
121
|
+
|
|
122
|
+
```text
|
|
123
|
+
PR #965 finalized.
|
|
124
|
+
Rebase: 1 conflict resolved (kept main's #834 D1-first ordering)
|
|
125
|
+
Findings: 2 addressed, 0 rejected, 0 blocked
|
|
126
|
+
Coverage: +5 unit tests; E2E not applicable (no browser surface) — stated on the PR
|
|
127
|
+
Gates: tests 480/480, lint 0 issues, format clean
|
|
128
|
+
State: MERGEABLE, checks green
|
|
129
|
+
Needs human: none
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
If anything is left, say precisely what and why — an honest "blocked on X" is the deliverable when X is genuinely a human call.
|
|
133
|
+
|
|
134
|
+
## Related skills
|
|
135
|
+
|
|
136
|
+
- `qodoloop` — full Qodo thread protocol (per-finding Agent Prompts, resolve mutations).
|
|
137
|
+
- `coderabbitloop` — full CodeRabbit protocol.
|
|
138
|
+
- `greploop` — drives a PR to a 5/5 Greptile confidence score.
|
|
139
|
+
- `ci-fix-loop` — when the blocker is a failing pipeline rather than review feedback.
|
package/README.md
CHANGED
|
@@ -162,6 +162,7 @@ Each entry links to its `SKILL.md`. Reference any skill by its `olko:*` lookup n
|
|
|
162
162
|
| [open-source-publisher](packages/software-development/open-source-publisher/SKILL.md) | Prepares an open-source repository for public publishing with branding, CI/CD, and release hygiene | Releasing a private project publicly with proper GitHub Pages, README, and social preview |
|
|
163
163
|
| [product-builder](packages/software-development/product-builder/SKILL.md) | Builds a full-stack web app or SaaS product from a user description using production-oriented defaults | Building a complete app, SaaS, dashboard, or product rather than a prototype |
|
|
164
164
|
| [pr-description-writer](packages/software-development/pr-description-writer/SKILL.md) | Drafts and posts a GitHub PR title and body from git diff and commit history, respecting existing PR templates | Opening a PR after pushing a branch or wanting a structured PR description written automatically |
|
|
165
|
+
| [pr-finalize](packages/software-development/pr-finalize/SKILL.md) | Drives one GitHub PR to genuinely merge-ready: rebases and resolves conflicts, sweeps every review bot and human comment, verifies unit and E2E coverage really exists, and runs the repo's own lint/format/test gates before pushing | Finalizing a PR, clearing all outstanding review comments, or getting a branch merge-ready in one pass |
|
|
165
166
|
| [promptctl](packages/software-development/promptctl/SKILL.md) | Uses `promptctl` for reusable prompt templates, scoring, and workflow automation | A project needs prompt conventions, review, scoring, or reusable prompt workflows |
|
|
166
167
|
| [qodoloop](packages/software-development/qodoloop/SKILL.md) | Iteratively drives a GitHub PR to zero unresolved Qodo findings, reading each finding's own Agent Prompt, replying to the thread, and resolving it | Fully addressing a PR against Qodo's code review before merging |
|
|
167
168
|
| [relay](packages/software-development/relay/SKILL.md) | Uses `claude-relay` to run long or rate-limit-prone tasks autonomously across subscription accounts | A task will outlive one session or hit rate limits partway through |
|
package/catalog/skills.json
CHANGED
|
@@ -399,7 +399,7 @@
|
|
|
399
399
|
"lookupName": "olko:obsidian-pr-sync",
|
|
400
400
|
"category": "software-development",
|
|
401
401
|
"path": "packages/software-development/obsidian-pr-sync",
|
|
402
|
-
"description": "Fetch open GitHub PRs assigned to you or requesting your review, and write a grouped, age-sorted '## PRs to review' section into today's Obsidian daily note. Idempotent
|
|
402
|
+
"description": "Fetch open GitHub PRs assigned to you or requesting your review, and write a grouped, age-sorted '## PRs to review' section into today's Obsidian daily note. Idempotent — re-running replaces the section.",
|
|
403
403
|
"tags": [
|
|
404
404
|
"github",
|
|
405
405
|
"obsidian",
|
|
@@ -470,7 +470,7 @@
|
|
|
470
470
|
"lookupName": "olko:macos-menubar-app",
|
|
471
471
|
"category": "software-development",
|
|
472
472
|
"path": "packages/software-development/macos-menubar-app",
|
|
473
|
-
"description": "Build a production-quality macOS menubar or notch app in SwiftUI
|
|
473
|
+
"description": "Build a production-quality macOS menubar or notch app in SwiftUI — MenuBarExtra, sandbox entitlements, keyboard shortcuts, sound effects, accessibility permissions, and App Store preparation.",
|
|
474
474
|
"tags": [
|
|
475
475
|
"macos",
|
|
476
476
|
"swiftui",
|
|
@@ -495,7 +495,7 @@
|
|
|
495
495
|
"lookupName": "olko:skill-budget-audit",
|
|
496
496
|
"category": "software-development",
|
|
497
497
|
"path": "packages/software-development/skill-budget-audit",
|
|
498
|
-
"description": "Diagnose and fix Claude Code skill context budget overflow
|
|
498
|
+
"description": "Diagnose and fix Claude Code skill context budget overflow — identify heavy plugin bundles, remove domain-specific ones, and restore skill discoverability.",
|
|
499
499
|
"tags": [
|
|
500
500
|
"claude-code",
|
|
501
501
|
"skills",
|
|
@@ -533,12 +533,36 @@
|
|
|
533
533
|
"grok"
|
|
534
534
|
]
|
|
535
535
|
},
|
|
536
|
+
{
|
|
537
|
+
"name": "pr-finalize",
|
|
538
|
+
"lookupName": "olko:pr-finalize",
|
|
539
|
+
"category": "software-development",
|
|
540
|
+
"path": "packages/software-development/pr-finalize",
|
|
541
|
+
"description": "Drives one GitHub PR to genuinely merge-ready: rebases and resolves conflicts, sweeps every review bot and human comment to zero unaddressed findings, verifies unit and E2E coverage actually exists, runs the repo's real lint/format/test gates before pushing, and reports what still needs a human.",
|
|
542
|
+
"tags": [
|
|
543
|
+
"code-review",
|
|
544
|
+
"pull-requests",
|
|
545
|
+
"github",
|
|
546
|
+
"testing",
|
|
547
|
+
"automation",
|
|
548
|
+
"agents"
|
|
549
|
+
],
|
|
550
|
+
"adapters": [
|
|
551
|
+
"claude",
|
|
552
|
+
"codex",
|
|
553
|
+
"cursor",
|
|
554
|
+
"copilot",
|
|
555
|
+
"grok",
|
|
556
|
+
"windsurf",
|
|
557
|
+
"kiro"
|
|
558
|
+
]
|
|
559
|
+
},
|
|
536
560
|
{
|
|
537
561
|
"name": "qodoloop",
|
|
538
562
|
"lookupName": "olko:qodoloop",
|
|
539
563
|
"category": "software-development",
|
|
540
564
|
"path": "packages/software-development/qodoloop",
|
|
541
|
-
"description": "Iteratively drives a GitHub PR to zero unresolved Qodo findings
|
|
565
|
+
"description": "Iteratively drives a GitHub PR to zero unresolved Qodo findings — reads each finding's own Agent Prompt, applies the fix, replies to the thread, resolves it, pushes, and waits for Qodo's next pass.",
|
|
542
566
|
"tags": [
|
|
543
567
|
"code-review",
|
|
544
568
|
"qodo",
|
|
@@ -586,7 +610,7 @@
|
|
|
586
610
|
"lookupName": "olko:coderabbitloop",
|
|
587
611
|
"category": "software-development",
|
|
588
612
|
"path": "packages/software-development/coderabbitloop",
|
|
589
|
-
"description": "Iteratively drives a GitHub PR to zero unresolved CodeRabbit findings
|
|
613
|
+
"description": "Iteratively drives a GitHub PR to zero unresolved CodeRabbit findings — reads each inline comment's own Prompt for AI Agents block, applies the fix, replies to the thread, resolves it, pushes, and re-triggers CodeRabbit.",
|
|
590
614
|
"tags": [
|
|
591
615
|
"code-review",
|
|
592
616
|
"coderabbit",
|
|
@@ -678,7 +702,7 @@
|
|
|
678
702
|
"lookupName": "olko:wikipedia-uk-editor",
|
|
679
703
|
"category": "software-development",
|
|
680
704
|
"path": "packages/software-development/wikipedia-uk-editor",
|
|
681
|
-
"description": "Draft policy-compliant Ukrainian Wikipedia edits
|
|
705
|
+
"description": "Draft policy-compliant Ukrainian Wikipedia edits — translate an English article into uk, expand or source an existing uk article, or fix a maintenance backlog item — and return ready-to-paste wikitext plus an edit summary.",
|
|
682
706
|
"tags": [
|
|
683
707
|
"wikipedia",
|
|
684
708
|
"ukrainian",
|
package/package.json
CHANGED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pr-finalize
|
|
3
|
+
description: >
|
|
4
|
+
Drives a single GitHub PR from "open with loose ends" to genuinely ready-to-merge: rebases off the
|
|
5
|
+
base branch and resolves conflicts, sweeps every review bot (Qodo, CodeRabbit, Greptile) plus human
|
|
6
|
+
comments to zero unaddressed findings, verifies that unit AND browser/E2E coverage was actually
|
|
7
|
+
added for the change, runs the repo's real lint/format/test gates before pushing, and reports what
|
|
8
|
+
still needs a human. Use when the user gives a PR URL or number and says "finalize this PR",
|
|
9
|
+
"fix all outstanding comments", "address the review feedback and push", "get this PR merge-ready",
|
|
10
|
+
or asks to clear what Qodo/CodeRabbit/Greptile could still comment on.
|
|
11
|
+
compatibility: Requires git and gh (GitHub CLI) authenticated. Review-bot sweeps only cover bots actually installed on the repo.
|
|
12
|
+
metadata:
|
|
13
|
+
version: "1.0"
|
|
14
|
+
allowed-tools: Bash(gh:*) Bash(git:*)
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# PR Finalize
|
|
18
|
+
|
|
19
|
+
One PR, taken all the way to merge-ready. The job is not "make the bots stop talking" — it is **land the change in a state a careful reviewer would sign off on**, with evidence for every claim.
|
|
20
|
+
|
|
21
|
+
## Inputs
|
|
22
|
+
|
|
23
|
+
- **PR number or URL** (optional): detect from the current branch if not given.
|
|
24
|
+
- `--no-push` (optional): do everything except the final push. Use when the repo auto-merges and the user wants to eyeball first.
|
|
25
|
+
|
|
26
|
+
## Non-negotiables
|
|
27
|
+
|
|
28
|
+
These are the failure modes this skill exists to prevent. Violating one makes the whole run worthless:
|
|
29
|
+
|
|
30
|
+
- **Never report a gate as passing without having run it.** Paste the real output. "Tests should pass" is not a result.
|
|
31
|
+
- **Never resolve or claim-fix a finding you didn't actually fix.** Blocked is an honest outcome; a false "done" is not.
|
|
32
|
+
- **Never `git add -A`.** Stage only the files your fixes touched. Start from a clean tree so that's safe.
|
|
33
|
+
- **Never invent test coverage.** If the change has no browser-reachable surface, say so explicitly and name the suite that *is* the real gate. Do not add a hollow E2E test to look thorough.
|
|
34
|
+
- **A green CI badge is not proof.** Many repos split their required check from the full suite (browser-free half only, etc.). Find out what the required check actually runs.
|
|
35
|
+
|
|
36
|
+
## Instructions
|
|
37
|
+
|
|
38
|
+
### 1. Establish the ground truth
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
gh pr view <PR> --json number,title,body,state,isDraft,headRefName,baseRefName,mergeable,mergeStateStatus,labels,reviewDecision,statusCheckRollup,url
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Record four things before touching code:
|
|
45
|
+
|
|
46
|
+
- **`mergeable`** — `CONFLICTING` means step 2 is mandatory.
|
|
47
|
+
- **Which checks are failing**, and for each, whether it is *required*. Check branch protection (`gh api repos/{owner}/{repo}/branches/<base>/protection`) rather than assuming — a red optional job (a flaky bot-review runner, a nightly) is not a blocker, and burning the run waiting on one is a classic waste.
|
|
48
|
+
- **Whether the repo auto-merges.** Look for a shepherd/automerge workflow in `.github/workflows/` and read its *gating conditions* (required labels, required checks). If pushing could trigger an immediate merge, decide deliberately: either satisfy the review sweep first, or tell the user before you push. Never let an auto-merge race a review you were asked to complete.
|
|
49
|
+
- **Whether a bot review actually ran.** A `SUCCESS` status from a review bot can still mean "rate-limited, never reviewed" — read its comment body, not just the check state.
|
|
50
|
+
|
|
51
|
+
### 2. Rebase onto the base branch
|
|
52
|
+
|
|
53
|
+
Require a clean tree first (`git status --porcelain` empty), then:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
git fetch origin <base>
|
|
57
|
+
git rebase origin/<base>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Resolve conflicts by **understanding both sides**, not by picking one. Read the base-side commit that introduced the conflicting hunk (`git log -1 --format=%s <base> -- <file>`, then the diff) — a conflict usually means main changed an invariant your branch is unaware of, and blindly keeping "your" side silently reverts it. State in the PR comment which invariant you preserved and why.
|
|
61
|
+
|
|
62
|
+
After resolving, re-run the tests before continuing — a rebase that compiles is not a rebase that works.
|
|
63
|
+
|
|
64
|
+
### 3. Sweep every review source
|
|
65
|
+
|
|
66
|
+
Collect findings from all of these; do not stop at the first:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# inline review threads (all bots + humans), with resolution state
|
|
70
|
+
gh api repos/{owner}/{repo}/pulls/<PR>/comments --paginate
|
|
71
|
+
# rollup issue comments (where CodeRabbit/Qodo post summaries and rate-limit notices)
|
|
72
|
+
gh api repos/{owner}/{repo}/issues/<PR>/comments --paginate
|
|
73
|
+
# formal reviews
|
|
74
|
+
gh pr view <PR> --json reviews
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Delegate to the dedicated loop skill when one exists** rather than reimplementing its bot's protocol — `qodoloop` for Qodo, `coderabbitloop` for CodeRabbit, `greploop` for Greptile. Each already encodes that bot's posting shape, its ready-made per-finding fix prompt, and its real terminal states. Use this skill's own sweep for human comments and for bots without a dedicated loop.
|
|
78
|
+
|
|
79
|
+
Triage every finding into exactly one bucket:
|
|
80
|
+
|
|
81
|
+
| Bucket | Action |
|
|
82
|
+
|---|---|
|
|
83
|
+
| **Real defect** | Fix it. This is the point of the exercise. |
|
|
84
|
+
| **Legitimate improvement** | Fix it if it's in scope for this PR. |
|
|
85
|
+
| **False positive** | Reply explaining *specifically* why the bot is wrong. Do not resolve silently. |
|
|
86
|
+
| **Needs a human call** | Reply, leave open, surface in the final report. |
|
|
87
|
+
|
|
88
|
+
Bot findings are suggestions from something that has not run the code. A "🐞 Bug" label is a hypothesis — verify it against the actual source before fixing, and against the actual behavior before dismissing.
|
|
89
|
+
|
|
90
|
+
### 4. Close the coverage gap
|
|
91
|
+
|
|
92
|
+
Ask, for the change as a whole, what would catch a regression here — then check whether the PR actually has it.
|
|
93
|
+
|
|
94
|
+
- **Unit / integration tests:** does every new branch have a test that fails if you invert it? Bots frequently and correctly flag helper functions exercised only *indirectly* through a caller. A direct test per branch is cheap and is usually the right response.
|
|
95
|
+
- **Browser / E2E tests:** determine whether the repo supports them (`playwright.config.*`, `cypress.config.*`, a `test:e2e` script) **and** whether this change has any surface they can reach. Then do one of exactly two things:
|
|
96
|
+
- it has a reachable surface → add or extend the E2E spec;
|
|
97
|
+
- it does not → **say so explicitly in the PR comment**, name why (e.g. "this is entirely inside a Durable Object alarm loop; the E2E harness only serves static assets"), and name the suite that is the real gate.
|
|
98
|
+
|
|
99
|
+
Silence here reads as an oversight. An explicit "not applicable, because X" reads as diligence — and is checkable.
|
|
100
|
+
|
|
101
|
+
### 5. Run the real gates
|
|
102
|
+
|
|
103
|
+
Discover them from the repo (`Makefile`, `package.json` scripts, CI workflow) — do not guess target names. Run, at minimum, the equivalents of:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
<lint> # e.g. make lint / npm run lint
|
|
107
|
+
<format> # check mode first; only write if it reports drift
|
|
108
|
+
<tests> # the suite covering the changed package
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Capture exit codes, not just output. Repo-specific traps worth checking for before you burn a cycle: linters whose cache replays findings from deleted sibling worktrees, formatters whose local toolchain version outruns CI's (churning unrelated files), and test runners that hang when two runs overlap.
|
|
112
|
+
|
|
113
|
+
If a gate fails, fix it. Do not push red.
|
|
114
|
+
|
|
115
|
+
### 6. Push and explain
|
|
116
|
+
|
|
117
|
+
Stage only the files you touched, commit, and push (`--force-with-lease` after a rebase — never bare `--force`).
|
|
118
|
+
|
|
119
|
+
Then post **one** PR comment that a reviewer can audit without re-reading the diff:
|
|
120
|
+
|
|
121
|
+
- what the rebase conflict was and which side won, with the reason;
|
|
122
|
+
- each finding, and what you did about it (including the ones you rejected, with the argument);
|
|
123
|
+
- the coverage decision from step 4, including the explicit not-applicable if that's the answer;
|
|
124
|
+
- **verbatim** gate output — real numbers (`# pass 480 / # fail 0`, `0 issues.`), not adjectives.
|
|
125
|
+
|
|
126
|
+
Re-trigger any bot that never actually reviewed (e.g. `@coderabbitai review`) so the PR gets the pass it was owed.
|
|
127
|
+
|
|
128
|
+
### 7. Verify and report
|
|
129
|
+
|
|
130
|
+
Re-read the PR state after the push — confirm `mergeable` flipped, checks went green, and clear now-stale labels (`needs-rebase`, etc.). Poll re-triggered bots for their new pass and handle anything it raises.
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
PR #965 finalized.
|
|
134
|
+
Rebase: 1 conflict resolved (kept main's #834 D1-first ordering)
|
|
135
|
+
Findings: 2 addressed, 0 rejected, 0 blocked
|
|
136
|
+
Coverage: +5 unit tests; E2E not applicable (no browser surface) — stated on the PR
|
|
137
|
+
Gates: tests 480/480, lint 0 issues, format clean
|
|
138
|
+
State: MERGEABLE, checks green
|
|
139
|
+
Needs human: none
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
If anything is left, say precisely what and why — an honest "blocked on X" is the deliverable when X is genuinely a human call.
|
|
143
|
+
|
|
144
|
+
## Related skills
|
|
145
|
+
|
|
146
|
+
- `qodoloop` — full Qodo thread protocol (per-finding Agent Prompts, resolve mutations).
|
|
147
|
+
- `coderabbitloop` — full CodeRabbit protocol.
|
|
148
|
+
- `greploop` — drives a PR to a 5/5 Greptile confidence score.
|
|
149
|
+
- `ci-fix-loop` — when the blocker is a failing pipeline rather than review feedback.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "olko-pr-finalize",
|
|
3
|
+
"description": "Drives one GitHub PR to genuinely merge-ready: rebases and resolves conflicts, sweeps every review bot and human comment to zero unaddressed findings, verifies unit and E2E coverage actually exists, runs the repo's real lint/format/test gates before pushing, and reports what still needs a human.",
|
|
4
|
+
"skills": "./skills"
|
|
5
|
+
}
|