Skip to content

feat: one-line hook per project in ranking tables (full descriptions kept in docs/DETAILS) - #12

Merged
jammyfu merged 1 commit into
mainfrom
feat/one-line-hooks
Oct 30, 2026
Merged

jammyfu merged 1 commit into
mainfrom
feat/one-line-hooks

Conversation

@jammyfu

@jammyfu jammyfu commented Oct 30, 2026

Copy link
Copy Markdown
Owner

What

Ranking tables now show one short hook per project instead of the full description.

  • zh-Hans / zh-Hant ≤ 18 Chinese characters (aim ~15), en ≤ 60, ja ≤ 28, ko ≤ 30 (display-width rule in tools/hooks.py).
  • The hook is a separate field: hook next to desc in data/projects.json, and hook inside each data/translation_library.json entry (same repo + source-hash key). No long description and no translation was changed, deleted or re-translated; old library entries still match for reuse.
  • Everything the tables used to say (Ghidra, assembly, tool names, …) is kept verbatim in the new generated docs/DETAILS*.md (one page per language, linked from the README and docs/FACTS.md).
  • New repos follow the rule automatically: new hooks stage in tools/i18n_pipeline.py (--hooks, also in the default run; backend = translate backend so CI does it too, polish_local.sh uses agy). HOOK_PROMPT embeds HOOK_RULE; replies breaking the length / hype / ! / … / new-number guard are rejected and the row falls back to the translation. Suspected cracked/pirated repos get a flat literal label.
  • Tests: tests/test_hooks.py (per-language length test over every stored hook, guard unit tests, prompt contains the rule, old-entry survival vs frozen tests/fixtures/pre_hook_baseline.json, DETAILS pages carry every old text, tables show the hook not the long text, hooks never touched by polish).

Before → after (zh-Hans / en)

morluto/rea

  • zh-Hans before: 逆向工程师往往要盯着汇编看上好几天,这个工具让 AI 直接告诉你程序做了什么。它接入 Ghidra,让原本读不懂的二进制文件一句话就能讲清楚。
  • zh-Hans after: 让 AI 帮你逆向、复刻任何软件
  • en before: Reverse engineers stare at assembly for days; this lets AI just tell you what a program does. Hooks into Ghidra so an unreadable binary gets explained in one sentence.
  • en after: Let AI reverse-engineer and clone any software

cloudflare/security-audit-skill

  • zh-Hans before: 让 AI 审查自己写的代码是否有漏洞,再请第二个 AI 来质疑审查结论。专门针对编程智能体容易写出的不安全代码。
  • zh-Hans after: 两个 AI 互相挑代码漏洞
  • en before: Have AI audit its own code for vulnerabilities, then call in a second AI to challenge the findings. Built for the insecure code coding agents tend to write.
  • en after: One AI audits the code, a second AI challenges it

stablyai/orca

  • zh-Hans before: 在同一台桌面电脑上同时运行多个 AI 编程智能体,比较谁写得更好。每个智能体都有自己的工作区,互不干扰。
  • zh-Hans after: 多个 AI 编程智能体同台比拼
  • en before: Run several AI coding agents on one desktop and compare who writes better. Each agent gets its own workspace, so they never step on each other.
  • en after: Run many AI coding agents side by side

DenisSergeevitch/ex-ussr-kinship-research

  • zh-Hans before: 面向 AI 智能体(Codex、Claude Code)的证据优先家谱研究技能:涵盖前苏联地区的教会簿册、民事、军事、流放和政治迫害档案…
  • zh-Hans after: 用 AI 查前苏联地区的家谱档案
  • en before: Evidence-first genealogy skill for AI agents (Codex, Claude Code): church books, civil, military, deportation and repression records across the former USSR. Re…
  • en after: AI genealogy research for former-USSR records

shipwords-dev/shipwords

  • zh-Hans before: 为每个新关键词上线一个赚钱的 AI 网站。基于 Cloudflare 的启动模板,含登录认证、积分、支付和 AI 生成。/ 新词站群框架:一个新词一个站,一个下午上线。起量的继续迭代,没起…
  • zh-Hans after: 一个新词,一个赚钱的 AI 网站
  • en before: Ship a money-making AI site for every new keyword. Cloudflare-native starter with auth, credits, payments and AI generation. / A framework for farms of new-keyword sites: one new keyword, one site, live in an afternoon. Keep iterating on the ones that take off, drop the ones that don't…
  • en after: A money-making AI site for every new keyword

Uncertain / for review

  • No model key was available: all 129 × 5 hooks (70 projects + 59 current new repos) were written by hand from the existing texts; zh-Hant was derived with OpenCC (Taiwan phrasing) plus glossary fixes. Please skim.
  • 复刻 / clone in the morluto/rea hook follows the wording the user suggested; the source text itself only says AI explains what a program does via Ghidra.
  • Limits are enforced by display width (CJK = 2 columns): zh 36, ja 56, ko 60, en 60 characters.
  • Not merged; waiting for the user's go-ahead.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-30T12:02:57.056546Z bfdb271 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bfdb271654

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread tests/test_hooks.py
Comment on lines +84 to +86
missing = [it["name"] for it in items if it.get("description")
and not all(nci.get_hook(LIB, it["name"], it["description"], l) for l in LANG5)]
self.assertEqual(missing, [], "run: python3 tools/i18n_pipeline.py --hooks")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Allow missing hooks when the optional model stage is skipped

When a newly discovered repository lacks a cached hook and Cursor credentials are absent, a model call fails, or a reply is rejected, the pipeline deliberately keeps the original description or translation. This assertion nevertheless fails verification for that supported fallback state. In .github/workflows/daily-update.yml, the Verify step runs before Commit and push, so a single missing hook prevents the entire daily star/ranking update from being published. Make hook gaps informational, as the docstring promises, and test fallback behavior without requiring complete model-generated coverage of live data.

Useful? React with 👍 / 👎.

Comment thread tests/test_hooks.py
Comment on lines +103 to +105
for key, value in old.items():
if key != "seen": # `seen` is only the last-used day
self.assertEqual(new[key], value, (name, h, key))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Test description preservation without freezing production copy

After any accepted polish changes an existing project's description or a cached newcomer translation, these baseline comparisons fail even though the hook-writing stage preserved the descriptions correctly. i18n_pipeline._apply() explicitly updates those fields, and tools/polish_local.sh runs verification immediately afterward, so legitimate polish results can no longer pass the script's verification/commit path. The related DETAILS assertions also require obsolete wording to remain forever. Test preservation by comparing before and after a hook-writing operation on fixtures rather than requiring mutable production data and generated pages to match a permanent pre-hook snapshot.

Useful? React with 👍 / 👎.

@jammyfu
jammyfu merged commit 01525b9 into main Oct 30, 2026
1 check passed
@jammyfu
jammyfu deleted the feat/one-line-hooks branch October 30, 2026 12:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant