




















@@ -0,0 +1,156 @@
1+---
2+name: clawdtributor
3+description: Use when asked to scan the OpenClaw clawtributors Discord channel for PRs/issues, find new/open contributor work, recheck which surfaced items remain open, deep-review candidates, group them by topic, or produce the compact colored triage list with @handle, LOC, PR/Issue marker, type, blast radius, and verification hint.
4+---
5+6+# Clawdtributor
7+8+Use for the `#clawtributors` queue: Discord-discovered OpenClaw PRs/issues that need live GitHub status plus maintainer-quality review.
9+10+## Compose with other skills
11+12+- `$discrawl`: local Discord archive sync/search.
13+- `$openclaw-pr-maintainer`: live GitHub PR/issue review, duplicate search, close/land rules.
14+- `$gitcrawl`: related issue/PR and current-main/stale-proof search.
15+- `$openclaw-testing` / `$crabbox`: proof choice when a candidate needs real validation.
16+17+## Archive flow
18+19+Local archive first; verify freshness for current questions.
20+21+```bash
22+discrawl status --json
23+discrawl sync
24+```
25+26+Resolve channel if needed:
27+28+```bash
29+sqlite3 "$HOME/.discrawl/discrawl.db" \
30+"select id,name from channels where name like '%clawtributor%' order by name;"
31+```
32+33+Current known channel id from prior work: `1458141495701012561`. Re-resolve if it stops matching.
34+35+Extract recent refs:
36+37+```bash
38+sqlite3 "$HOME/.discrawl/discrawl.db" "
39+select m.created_at, coalesce(nullif(mm.username,''), m.author_id), m.content
40+from messages m
41+left join members mm on mm.guild_id=m.guild_id and mm.user_id=m.author_id
42+where m.channel_id='1458141495701012561'
43+ and m.created_at >= '<ISO cutoff>'
44+order by m.created_at desc;" |
45+perl -nE 'while(m{github\.com/openclaw/openclaw/(pull|issues)/(\d+)}g){say "$1\t$2\t$_"}'
46+```
47+48+Map a PR/issue back to the Discord handle:
49+50+```bash
51+sqlite3 -separator $'\t' "$HOME/.discrawl/discrawl.db" "
52+select m.created_at,
53+ coalesce(nullif(mm.username,''), nullif(mm.global_name,''), m.author_id)
54+from messages m
55+left join members mm on mm.guild_id=m.guild_id and mm.user_id=m.author_id
56+where m.channel_id='1458141495701012561'
57+ and m.content like '%github.com/openclaw/openclaw/<pull-or-issues>/<number>%'
58+order by m.created_at desc
59+limit 1;"
60+```
61+62+Show only `@handle` in the final list. Do not write the word Discord unless the user asks for source details.
63+64+## Live GitHub recheck
65+66+Always recheck live state before listing, closing, or saying "open".
67+68+```bash
69+GITHUB_TOKEN= GITHUB_TOKEN_NODIFF= GH_TOKEN= \
70+gh api repos/openclaw/openclaw/pulls/<number> \
71+ --jq '. | {number,title,state,merged,mergeable,draft,author:.user.login,url:.html_url,updatedAt:.updated_at,additions,deletions,changedFiles:.changed_files}'
72+```
73+74+For issues:
75+76+```bash
77+GITHUB_TOKEN= GITHUB_TOKEN_NODIFF= GH_TOKEN= \
78+gh api repos/openclaw/openclaw/issues/<number> \
79+ --jq '. | {number,title,state,author:.user.login,url:.html_url,updatedAt:.updated_at,pull_request}'
80+```
81+82+If `gh` says bad credentials, clear env vars with empty assignments as above. Use `--jq '. | {...}'` for object projections.
83+84+## Review depth
85+86+For each open item, inspect enough to classify risk:
87+88+- PR body, linked issue, comments, files, additions/deletions, checks.
89+- Current `origin/main` code path and adjacent tests.
90+- Related threads with `gitcrawl neighbors/search`.
91+- Whether main already fixed it, the PR is obsolete, or the idea is invalid.
92+- Blast radius: touched runtime surfaces, config/schema, plugin/core boundary, user-visible behavior, release/package surface.
93+- Verification: say if local unit/docs proof is enough, live/provider proof is needed, or it is not directly verifiable.
94+95+Do not close from title alone. If closing as done on main or nonsensical, prove it against current main and comment first when mutation is requested. Bulk close/reopen above 5 requires explicit scope.
96+97+## Candidate selection
98+99+When asked for `5 new`, exclude refs already surfaced in the session and refill from the archive until there are 5 live-open candidates. If fewer than 5 remain open, list all open ones and say how many short.
100+101+Prefer:
102+103+- Fresh, open, external contributor work.
104+- Small, high-confidence bugfixes.
105+- Clear repro, tests, or obvious code-path proof.
106+107+Demote:
108+109+- Broad product/features without owner decision.
110+- Large rewrites with unclear contract.
111+- PRs already in progress, merged, closed, duplicate, or fixed on main.
112+113+## Topic grouping
114+115+Group only when useful or requested:
116+117+- Agents/tooling
118+- Providers/auth/models
119+- Channels/messaging
120+- UI/web
121+- Gateway/protocol/runtime
122+- Config/memory/cache
123+- Docker/install/release
124+- Docs/tests/chore
125+- Closed/obsolete
126+127+Infer topic from labels, touched files, title/body, and actual code path.
128+129+## Output format
130+131+No Markdown tables. Compact bullets. Use color/risk markers:
132+133+- 🟢 low/narrow
134+- 🟡 medium or needs targeted proof
135+- 🔴 broad/high runtime risk
136+- 🟣 security/policy/owner-boundary slow review
137+- ✅ merged
138+- ⚪ closed unmerged
139+140+Required line shape:
141+142+```markdown
143+- **PR #81244** `@whatsskill.` `+118/-1` `bug` 🟢 verifiable: yes. This prevents chat action buttons from overlapping short assistant replies. Blast: web chat rendering, low.
144+- **Issue #81245** `@alice` `LOC n/a` `bug` 🟡 verifiable: partial. This reports duplicate Telegram replies when reconnecting after gateway restart. Blast: Telegram channel runtime, medium.
145+```
146+147+Rules:
148+149+- Bold the `PR #n` or `Issue #n` marker.
150+- Use `@handle`, not author bio text.
151+- PR LOC is `+additions/-deletions`; issue LOC is `LOC n/a`.
152+- Type: `bug`, `feature`, `perf`, `security`, `docs`, `test`, `chore`, or `refactor`.
153+- Write a full sentence for what it does.
154+- Always include blast radius in one phrase.
155+- Always include `verifiable: yes|partial|no` plus the shortest proof hint when helpful.
156+- If status is not open, still show it only when the user asked for all surfaced refs; use ✅ or ⚪ and state merged/closed.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。