处理 1c7/chinese-independent-developer 仓库的项目提交。 检查 issue #160 新评论、新开的 Issue、新开的 PR, 将有效项目添加到对应 README,关闭垃圾内容,并把评论区的意见与建议上报维护者。 历史判例与事故记录在同目录的 references/precedents.md,遇到边界判断时按需查阅。 当用户要求“收录项目”“处理提交”“处理 issue”“跑一下列表”或运行中国独立开发者列表维护流程时使用。
96%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
处理 1c7/chinese-independent-developer 的项目提交:扫 #160 评论、open issue、open PR,有效的收进对应 README,无效的按类别拒绝,评论区里的意见与建议单独上报。
阅读顺序:本文是流程和硬约束,每次运行完整读一遍。本文写「→ 判例:X」的地方,是历史上踩过的坑,遇到对应情况再去读 references/precedents.md 的 X 节,不要在执行时全量加载判例库。
gh pr diff 逐行审查,diff 里出现删他人条目的 - 行,一律先恢复再合并,绝不让删除落进 master。gh / git,保证用的是维护者 1c7 的 PAT;不用 GitHub Connector 或平台原生 GitHub 工具。本地文件读写用当前运行环境自带的工具。:clock8:,不许改成 ✅;不许拿官网资料重写他的简介。references/precedents.md 对应小节再拍板,那是维护者已经定过调的先例;不要让"想当然"覆盖踩过的坑。git status --short # 必须为空
git fetch origin master && git rev-list --count HEAD..origin/master # 必须为 0
gh auth status | head -5 # 必须是 1c7 本人的 PATgit pull --rebase origin master 再开始。git diff 看清是补完还是丢弃,不要直接 checkout --。SINCE=$(date -u -d '72 hours ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-72H +%Y-%m-%dT%H:%M:%SZ)
COUNT_COMMENTS=$(gh api "repos/1c7/chinese-independent-developer/issues/160/comments?since=$SINCE&per_page=100" | tee /tmp/c160.json | jq 'length')
COUNT_ISSUES=$(gh api "repos/1c7/chinese-independent-developer/issues?state=open&per_page=50" \
| jq '[.[] | select(.number != 160 and .pull_request == null)] | length') # 另有「已知保留 issue」清单,见第 2 节末尾
COUNT_PRS=$(gh api "repos/1c7/chinese-independent-developer/pulls?state=open&per_page=50" \
| jq '[.[] | select(.head.ref | startswith("auto-add-") | not)] | length')
echo "新评论: $COUNT_COMMENTS 新Issue: $COUNT_ISSUES 待处理PR: $COUNT_PRS"
wc -c README.md-v-240H。wc -c README.md 超过 490,000 就地处理,别等到插入条目之后:运行间隔里别人 merge 也可能顶过线。直接按 6.3 跑 migrate_archive.py --write,即使本次空跑也要单独发一条搬迁 commit(2026-09-27 实测:开跑时已是 490,082 字节,只想着"这次没新条目"就会把超标状态原样留给下一次)。查重永远只看两样东西:产品域名、产品名。提交者是谁、他以前投过几次、隔了几周几个月,统统不参与判断——同一个作者跨月跨年反复投稿是常态。
python3 .github/scripts/pending_submissions.py /tmp/c160.json; echo "EXIT=$?"脚本把窗口内每条非我方评论里的 URL 和产品名抽出来,逐个到 README 系列(主版面 / 程序员版面 / 游戏版面 / 两个分册)比对,按结果打三种标签:
| 标签 | 含义 | 怎么办 |
|---|---|---|
[新] | 域名和产品名都没命中 | 正常新提交,进检查一 |
[同名] | 产品名命中、域名没命中 | 重点看:老产品换域名 → 照常收录,描述必须写它独有的功能点;纯重复 → 静默跳过,不发致谢 |
[无链接] | 只有裸 URL、没写产品名 | 人看,判断是提交还是垃圾 |
SINCE=$(date -u -d '72 hours ago' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -v-72H +%Y-%m-%dT%H:%M:%SZ)
gh api "repos/1c7/chinese-independent-developer/issues/160/comments?since=$SINCE&per_page=100"对每条评论提取产品 URL,查是否已在任一分册:
grep -rF "<产品完整URL>" README.md .github/pages/README-Programmer-Edition.md .github/pages/README-Game.md去重规则
grep -F),禁止用产品名或关键词判断重复。72h 窗口重叠:被判「拒绝」的评论不会在 README 留痕迹,URL 去重挡不住重复处理。发拒绝回复前先查这条评论之后有没有我们 @ 该提交者的回复:
gh api "repos/1c7/chinese-independent-developer/issues/160/comments?per_page=100" \
| jq --arg since "<该评论created_at>" \
'[.[] | select(.created_at > $since and (.user.login=="1c7" or .user.login=="claude[bot]"))]'处理完记录:作者用户名、产品名、目标版面(供第 7 步逐人致谢)。
维护者很少回看原文,这类内容不上报等于消失。每次运行都跑,空跑也跑。
拉 #160 最新 200 条评论,排除我们自己:
TOTAL=$(gh api repos/1c7/chinese-independent-developer/issues/160 --jq .comments)
LAST=$(( (TOTAL + 99) / 100 ))
for p in $((LAST-1)) $LAST; do
gh api "repos/1c7/chinese-independent-developer/issues/160/comments?per_page=100&page=$p"
done | jq -s 'add' \
| jq -r '.[] | select(.user.login != "1c7" and .user.login != "claude[bot]")
| "\(.created_at[0:10])\t\(.id)\t@\(.user.login)\n\(.body[0:300])\n---"'⚠️ 单 issue 评论接口的 sort/direction 无效、per_page>100 会截断并返回最早的一批。必须按上面的算法倒着取页(→ 判例:J)。
判据:有没有「产品名 + 可访问 URL + 描述」三元组?有 → 是提交,走检查一。没有、说的是列表本身 → 属于本节。
典型内容:指出描述过时/链接失效/分类放错/作者不是中国人/是返佣或刷量站;要求修改或下架自己的条目;质疑收录标准;抱怨重复、排序、分册、格式;建议加版面或字段;版权侵权投诉;对运营方式的不满。
动作(硬约束)
https://github.com/1c7/chinese-independent-developer/issues/160#issuecomment-<id>)、作者、时间、原文摘要(保留原措辞,不改写成中性描述)、类别 + 建议选项。不限时间窗(2026-10-19 调整):原来只查「最近 72 小时开启」的 issue,一旦某次运行没跑到这步,issue 就永久滑出窗口、再也不会被看到。
gh api "repos/1c7/chinese-independent-developer/issues?state=open&per_page=50" \
| jq '[.[] | select(.number != 160 and .pull_request == null)]'gh issue close <number>。检查二的提交者已在各自 issue 收到致谢,不需要在第 7 步再 @。
gh api "repos/1c7/chinese-independent-developer/pulls?state=open&per_page=50" \
| jq '[.[] | select(.head.ref | startswith("auto-add-") | not)]'每个 PR 的处理顺序:
gh pr diff <number> 逐行看。有删他人条目的 - 行 → 先恢复(maintainer_can_modify 为 true 就推到贡献者分支;否则本地合并时恢复),让最终 diff 回到纯新增(→ 判例:G)。gh pr merge <number> --squash。报 Base branch was modified 不是真失败,sleep 5 后重查 mergeable/mergeable_state,true/clean 就重试一次(→ 判例:G)。--merge;推不了才本地 git merge --no-ff + git push + gh pr close 兜底(→ 判例:G)。冲突复杂到分不清该保留什么(不只是新增条目,而是改了已有结构)→ 不要瞎猜、不要删任何已有内容,在 PR 里说明冲突原因、保持打开等人工介入。# 先取分支信息(冲突路径和推送都靠这两个值)
HEAD_REF=$(gh api repos/1c7/chinese-independent-developer/pulls/<number> | jq -r '.head.ref')
HEAD_REPO_URL=$(gh api repos/1c7/chinese-independent-developer/pulls/<number> | jq -r '.head.repo.clone_url')
MAINTAINER_CAN_MODIFY=$(gh api repos/1c7/chinese-independent-developer/pulls/<number> | jq -r '.maintainer_can_modify')
# maintainer_can_modify=true:改他的分支,让 PR 保持紫色 Merged
git fetch origin master
git fetch origin pull/<number>/head:pr-<number>
git checkout pr-<number> && git merge origin/master --no-edit
# 手工解决冲突:双方新增的条目都保留,冲突标记清干净
git add <冲突文件> && git commit --no-edit
git push "$HEAD_REPO_URL" "pr-<number>:$HEAD_REF"
gh pr merge <number> --merge
# 推不了才兜底(PR 会显示为 Closed,评论里不要提这件事)
git fetch origin master && git fetch origin pull/<number>/head:pr-<number>
git checkout master && git reset --hard origin/master
git merge pr-<number> --no-ff -m "合并 PR #<number>:<项目名>"
git push origin master && gh pr close <number>wc -c README.md 容量检查;格式硬伤单独发整理 commit;当天区块顺序不对另发排序 commit。git fetch origin master。禁止「手动誊抄 + 批量关闭」。默认能收就收,只有确凿证据是老外才拒绝。满足任一条即判为中国人:
gh api users/<username> | jq '{name, bio, location}'
gh api "users/<username>/repos?sort=updated&per_page=10" | jq '[.[] | {name, description}]'name 是外文名但仓库全中文 → 收(→ 判例:A)。location 在国外不能单独当拒绝依据,中国留学生照样收;写中国城市也不能单独当收录依据。确凿是老外时的处理:检查一不收录、只在评论下礼貌说明;检查二礼貌评论后关闭 issue;检查三礼貌评论后关 PR(不用 merge)。用提交者的语言,只给结论不给判断依据,POST 后同样 PATCH + GET 验证。
感谢分享 <产品名>!不过本仓库只收录中国独立开发者的项目(README 开头写明"聚合所有中国独立开发者的项目"),所以暂时不在收录范围内,抱歉。祝 <产品名> 发展顺利!Thanks for sharing <product>! This repo specifically curates projects made by Chinese independent developers, so it's outside the scope of this list. Good luck with <product>!每一次拒绝都必须出现在最终汇报里。
除垃圾广告和老外,以下三类也拒绝:
seko.sensetime.com = 商汤)。cg_click_id、cgv、utm_source=cakegrowth_gzh、ref=、invite=、aff=)。⚠️ 判据要逐条比对,不要用观感扩大化:
affiliate 多数是「not affiliated with X, Inc.」免责声明,不是联盟计划。ref= 指向本仓库且提交者就是作者 → 只是来源追踪,正常收录。必做核查(任何可疑链接):
curl -sL --max-time 20 "<url>" -o /dev/null -w "HTTP:%{http_code} FINAL_URL:%{url_effective}\n"
curl -sL --max-time 20 "<url>" | grep -oE '<title>[^<]*</title>|og:url[^>]*' | head -5curl 打不开 不能据此判站点有问题,必须换 WebFetch 复核一次。000/SSL_ERROR、503 限流页、403 Cloudflare 拦截都不等于站点挂了(→ 判例:C)。*.pages.dev / *.github.io / *.vercel.app / *.netlify.app 只是托管,不是大厂。拒绝模板(只给结论):
@<用户名> 感谢推荐!不过本仓库只收录中国独立开发者自己的项目,<产品名> 是 <公司名> 的产品,暂时不在收录范围内,抱歉。祝 <产品名> 发展顺利!POST → 捕获 ID → PATCH 覆写 → GET 验证正文。拒绝后的动作同第 4 步:检查一只回评论、检查二评论后关闭 issue、检查三评论后关闭 PR(不 merge)。
必须有:制作者名字(没写用 GitHub 用户名)、产品名、可访问 URL、一句话描述。拿不到 URL 时从仓库或正文里找,只有纯广告无任何可定位产品才算垃圾。
可选:城市、GitHub、博客、更多介绍链接。
#### 制作者名字(城市) - [Github](url)
* :white_check_mark: [产品名](url):一句话描述 - [更多介绍](url)格式规范
[更多介绍] 前缺的「 - 」。:clock8:,✅→:white_check_mark:,❌→:x:。不许升级、降级,不许拿官网资料重写简介(→ 判例:E)。TZ=Asia/Shanghai date +"%Y 年 %-m 月 %-d 号添加"。免费的间歇计时器 → 间歇计时器(免费)。**)。| 类别 | 标准 | 文件 |
|---|---|---|
| 主版面 | 打开即用的网站或 App,非游戏 | README.md |
| 程序员版面 | 需要命令行/写代码/安装依赖,或开发工作流工具 | .github/pages/README-Programmer-Edition.md |
| 游戏版面 | 任何游戏 | .github/pages/README-Game.md |
| 拒绝 | 垃圾广告、无 URL、确凿老外、大厂、返佣、刷量 | 不处理 |
桌面 App 看服务对象:面向普通用户/创作者 → 主版面;额度监控、依赖清理、Agent/IDE 管理器、菜单栏开发工具 → 程序员版面(→ 判例:D)。
个人博客、内容站不算产品,不收(→ 判例:B5)。作者另有产品时,博客写成作者信息行里的链接(#### 名字(城市) - [Github](url), [博客](url)),不单独占一行。把「博客」链接点开核实,实为导航站/资源站的不收。
####。git log 核对:for f in README.md .github/pages/README-Programmer-Edition.md .github/pages/README-Game.md; do
echo "== $f"; git log --date=local --format="%h %ci %s" -8 -- "$f"
done容量:插入后 wc -c README.md。超 490,000 就搬迁,一次剪到 487,500 留余量:
python3 .github/scripts/migrate_archive.py # 预演,看到「行级校验通过」
python3 .github/scripts/migrate_archive.py --write只有脚本不可用时才手剪,且必须按日期定位插入、兼容「日/号」两种标题、不重排分册(→ 判例:H)。分册自己接近 500,000 字节时,把较新的一半拆成 README-Earlier-Projects-2.md,编号一旦定下就冻结。
提交:git pull → 改文件 → git add → 一次 commit → git push origin master。pull 必须在 commit 之前(合并过 PR 后本地是落后的,先 commit 再 push 会被拒)。用 git pull --rebase 的,rebase 完必须 grep 确认本次新增的条目还在——冲突合并有可能把它弄丢。不建分支、不开 PR;PR 来源不走这条。
每位提交者单独一条,一人一评,不合并。正文只写结果,不加「谢谢」等结尾客套,不提冲突/手动处理等过程。
@<用户名> 感谢提交,已将你的产品 <产品名> 添加到 <主版面/程序员版面/游戏版面>!每条都 POST → 立即 PATCH 覆写 → GET 验证正文,且版面名必须带「面」字。
⚠️ 一次处理多个提交时最容易串号:PR 在 API 里也是 issue,编号相同,issues/<号>/comments 打错一个数字就把 A 的致谢贴到 B 下面(2026-10-21 事故:SliceLoft 的致谢被贴到 Issue #1622 Notebook Generator 下,PR #1620 反而没收到,维护者当场发现)。
gh api repos/1c7/chinese-independent-developer/issues/comments/<id> --jq .issue_url。-X DELETE 删掉自己那条(删自己的不算违反红线 2),再往正确的号重发。for p in 1 2 3 4 5; do
for try in 1 2 3; do
gh api "repos/1c7/chinese-independent-developer/issues/comments?sort=created&direction=desc&per_page=100&page=$p" \
> /tmp/sig_scan_$p.json 2>/dev/null && break
sleep 3
done
done
jq -s 'add' /tmp/sig_scan_[1-5].json > /tmp/sig_scan_all.json
jq -e 'type == "array" and length > 0' /tmp/sig_scan_all.json >/dev/null \
|| { echo "扫描接口没拿到数据,本次扫描无效,必须重试后再判断"; exit 1; }
jq -r '[.[] | select(.body | test("Generated by")) | select(.user.login as $u | ["1c7","claude[bot]"] | index($u)) | .id] | unique | .[]' \
/tmp/sig_scan_all.json > /tmp/sig_dirty.txt
echo "已扫评论: $(jq 'length' /tmp/sig_scan_all.json) 条"
echo "检出待修: $(grep -c . /tmp/sig_dirty.txt) 条"扫到就逐条 PATCH 并 GET 复核;空正文保护;只修我们自己发的(贡献者用 > 引用的是他的评论,不许动);修完必须重新扫一遍确认残留为 0(→ 判例:I)。
只列结果,不列过程:
产品X(原因:老外 / 垃圾广告 / 大厂产品 / 带返佣链接 / 刷量平台 / 重复提交 / 信息无法定位);被维护者推翻改为收录的,如实写翻转。**主版面新增**:Unit Converter for Science、Jev AI
**程序员版面新增**:Agents Anywhere
**未收录**:书径 EbookNest(原因:信息无法定位)
**需要你处理的意见/建议(1 条)**
- [issues/160#issuecomment-123456](链接) @someone:说主版面某条链接 404 —— 建议:核实后改 URL
共 3 项收录,1 项未收录,全部处理完毕。gh 不在 PATH 时先 export PATH="/opt/homebrew/bin:$PATH"。references/precedents.md(A 身份 / B 拒绝 / C 网络核查 / D 版面 / E 格式 / F 去重 / G PR / H 容量 / I 签名 / J 接口 / K 意见)。只在遇到边界判断时查,不要每次全读。1c7/chinese-independent-developer
98d6d26
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.