DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Plugin Gh Trending — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
P

dsh-plugin-gh-trending

Plugin Gh Trending

DSH GitHub trending rankings monitoring plugin: daily / weekly / monthly + cross-ranking appearances + change log. Read-only GET throughout, no external notifications.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:gh-gongjin/dsh-plugin-gh-trending#a8d161ca669e3b79dc1662c4df94a79c723bfb06
READMECompatibilityVersions

Compatibility and provenance

Plugin Gh Trending is published as dsh-plugin-gh-trending and currently resolves to version 0.1.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
10/8/2026

Versions

0.1.0stable
10/8/2026

Related plugins

Loading related plugins…

Latest
0.1.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
10/15/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in developer-tools.

Web App@deepseek-ai/dsh-web-appThe dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)Sdk Minimal@deepseek-ai/dsh-sdk-minimalThe standalone minimal SDK profile bundle: JSON-RPC, one DeepSeek adapter, persistent shell, and JSONL sessionsSdk App@deepseek-ai/dsh-sdk-appThe dsh SDK profile bundle: stdio JSON-RPC serving and process lifecycle over dsh-baseExperimental Inspector@deepseek-ai/dsh-experimental-inspectorExperimental cross-realm CDP hub for Host debugging and Client Runtime inspection

README

dsh-plugin-gh-trending

DSH(deepseek HARNESS)的 GitHub 热榜监控插件:在侧边栏「插件」下方增加一个入口,盯三件事 —— 日榜 / 周榜 / 月榜各自怎么变、哪些仓库同时在多张榜上、本机第一次见到的仓库。变化只记录在本插件面板里,不推任何外部通知。

对 github.com 全程只读 GET(每轮三发 = 三张榜各一发;只有传输类失败——连不上/超时——才对那一榜补发,单榜含补发最多 3 发,成功即停):不带 key、不带 cookie、不 POST、不下载 zip、不 clone。 需要代理时走插件自己的 CONNECT 隧道(lib/services/net.js):它不改本机任何代理设置,也不起监听端口,只在需要时向代理发起一条 CONNECT github.com:443,之后仍是标准 TLS + HTTPS GET。

它是什么

  • 三张榜独立闸门:日 / 周 / 月各一份状态,坏在哪一榜就只冻结哪一榜,绝不连冒横幅。
  • 变化流水:board_enter / board_exit / board_move / first_on_board / renamed / rising_cross / cooling_cross / source_error / source_recover / baseline(枚举与中文标签只在宿主侧 lib/domain.js,界面只查表)。位次挪动日/周 ≥3、月 ≥2 才记 board_move。
  • 跨榜同现:同时出现在 ≥2 张榜 = 持续升温,只剩 1 张 = 热度回落。三张榜在同一次检查里拿到,这块分析零额外请求。
  • 改名识别:靠条目里的 record_id 认出同一个仓库换了 owner/name ⇒ 记 renamed 而不是「掉榜 + 新进」两笔假账。
  • 仓库详情按需取:点榜面条目的仓库名才弹出一张详情对话框,并在这一下点击去 api.github.com 要元数据 + README,把 GitHub 自己给的字段拼成一张结构化段表(sections[] 四段:项目是什么 / 热度与元数据 / 仓库自己怎么介绍它 / 中文摘要,★ 第十一轮起替代旧的那一整句 narrative;段序、段名、哪句摆在哪一段、哪句算小字全在宿主拼死,客户端只按 kind 摆),并探测仓库自己写的中文 README(★ readmeSource 五档:zh_default 默认 README 本身就是中文 / zh_file 仓库另写了一份中文 README(★ 第十五轮起这一档有两条路:根目录列表里命中 README-zh_CN.md 那类,或默认篇首屏那行语言切换里写着的相对路径命中(真机 docs/i18n/README.zh-CN.md 那一类,根目录压根没有)—— 两条路共用同一发正文请求,编排仍是 4 发封顶) / zh_section 默认篇是外文但整篇里嵌着一段中文小节(第十一轮新增,吃已经在手的那份正文,零额外请求)/ en_default 只有英文篇 / none 没 README)。 描述那一句若命中内置离线词表,会在「项目是什么」那一段里多一个块「中文描述(内置离线预译 · <日期>,不是现译)」,原文紧跟着另起一块照给;没命中而现译开关开着时,换成「中文描述(<这一行当初是谁译的> · <日期 时刻>)」(免费接口 / 百度 / 腾讯 / 阿里 / 模型现译 五选一,库里旧行还可能有历史档名 官方接口,§8.4),原文照样另起一块(译文不替换仓库自己写的那句)。
  • 描述列中文(内置离线预译表,lib/desc-zh.js):榜面与详情里的仓库描述,命中表里的就给一句人工预译的中文,没命中就只显示原文。三条口径: 离线(这份文件是死数据,零 import、零 fetch、零模型调用,dz-6 从源码钉住);带来源与时间戳(卡头与悬停都念「内置离线预译 · 2026-10-06」,界面不自己编日期); 原文改过就不译(命中判据是「仓库主键 + 原文与表里记的那一句逐字相同」,仓库把描述改了 ⇒ 静默退回原文显示,绝不拿旧译文指鹿为马)。 表由脚本生成、不是手抄(tmp/gen-desc-zh.mjs:src 那一列由解析器从真榜面逐字取出,中文那一列是人工写好再合并进去的),当前 73 条;★ 覆盖面会随时间衰减 —— 表只认整理那天在榜上的那些仓库,掉榜/新上榜的描述就是原文。
  • 现译引擎五档(D,2026-10-06 第九轮加三档、同日第十轮扩成五档,lib/services/web-translate.js + lib/services/llm.js):内置表没命中的那一句描述(以及 README 英文节选的摘要),交给你在设置页选的那一档现译: 免费接口 = Google 网页版翻译(免注册免密钥,★ 不是官方授权接口,且这台机器直连不通、必须经代理)/百度 = 百度翻译开放平台通用文本翻译(AppID + 密钥,签名 MD5,境内直连可达)/腾讯 = 腾讯云机器翻译 TextTranslate(Version 2018-03-21、地域广州;SecretId + SecretKey,签名 HmacSHA1 v1,直连可达)/阿里 = 阿里云机器翻译通用版 TranslateGeneral(Version 2018-10-12;AccessKeyId + AccessKeySecret,签名 RPC V2 的 HMAC-SHA1,直连可达)/宿主模型 = 第八轮那一路(lib/services/llm.js,花宿主的模型额度)。默认落免费接口(用户裁定「两条都做,设置页选」+「与宿主模型并存,二选一」+「分段器并排五档」)。★ 三家云要不要花钱、有多少免费额度以官网计费页为准(这一轮没能复核到可引用的数字,所以界面上不念数字,只把注册入口摆出来)。五条口径五档共用: 只在点开详情那一刻、只译当前这一条(榜面永远零现译,一轮三发榜面照旧);B 优先(表命中的行压根不派活,两个来源不会在同一屏打架); 三道源侧闸门(★ 第十一轮加两道、第十九轮补第三道,都排在派活之前:仓库自己写的描述就是中文 ⇒ 不派描述那一发;README 已经有中文 ⇒ 不派摘要那一发 —— ★ 第十八轮把这一句点名到三档:zh_default 默认篇整篇是中文 / zh_file 仓库另写的那份中文篇(根目录名或默认篇里的语言切换行指到的)/ zh_section 整篇里嵌一段达标中文小节,只有默认篇是英文(en_default)才译;none 由"没有节选"挡。★ 第十九轮(用户改判「这两种也算有中文」)补第三道 readmeZhOnScreen(节选):即便档名是 en_default,只要要派出去的那段节选里 CJK ≥ 8(中英混排篇,真机 thedotmack/claude-mem 9 字)或出现「中文」两字(中文篇在子目录没抓到、只剩那行语言切换字样)⇒ 摘要那一发也不派,self 段名跟着补那半句实话(「(节选里已有中文)」/「(这行写着有中文版)」)。★ 判节选不判档名:README_ZH_MIN_CJK = 20 那条一字未动(它管的是「默认 README 本身就是中文」这句档名敢不敢说,降到 8 会把只有一行切换标签的英文篇改名成中文);「日本語」不算中文、国名「中国」不算声明、英文 Chinese 不认(挡了就是删了用户在用的那一屏)。三道都在源上挡,不是译完了再挑译文。★ 第十五轮的第三道闸门不在这里,在那一路服务自己声明的 kinds() 里:免费 / 百度 / 腾讯 / 阿里只有翻译能力,「整理成一段简体中文摘要」那一路只派给 宿主模型 ⇒ 那四档连 enabled('readme') 都问不到,设置页那一行开关也跟着不摆 ★ 第十七轮(10-07)这一条被用户改判:那一发放回来了,五档都派两发(原话「我前面是有摘要现译的,你在哪一次改坏了,给我放出来」);kinds() 那道口与三道源侧闸门都还在,只是翻译四档现在也报 readme。保留的只有措辞:那四档给的是节选的节译,段名与设置页那句说明跟着档位走,只有宿主模型那档叫「摘要」); 落库复用(按「仓库主键 + 原文逐字相同」判,仓库改了描述就重译,绝不拿旧译文指鹿为马。★ 第十一轮把「换了引擎,旧译文照样复用」这一条钉成裁定:现行行为就是要的行为 ⇒ 零代码改动,只补判据与文档,落款署的是那一行当初的来源,不冒充新引擎);两档开关各开各的(描述出厂开、摘要出厂关,都关掉时那一屏与 C/D 之前逐字相同。★ ,载荷从 / / 三格换成一张 。★ :翻译四档现在也报 ⇒ )。 ★ ():没选中的那四路连"你开着吗"都不问,五路服务互相不知道对方在 ⇒ 不会变成一次点击发五发。 ★ :换了引擎不作废旧译文,也不拿新引擎的名字盖它 —— 库里那行署它当初的来源( 表行内 字段)。 ★ 额度分两本账: 那一发不打任何 HTTP(走宿主连接);另外(同一份 、同一档 15s 超时),但(另四个域名)。 ★ (第十轮把这一格从"只有百度一家"扩成三家 × 六格):密钥本体,出网 URL 里只有各家的 (//、//、//);密钥, 界面上只看得到「库里已存(留空不改动)」那一句。★ 标识符能进查询串是的例外,(★ 第二十一轮改判那句"仍然零凭据":出厂 空 ⇒ 与旧版一样一发凭据头都不带;填了才带 ,,且这一把密钥与那三把走回显闸门 ; 那三类头全域仍禁,全程仍只读 GET)。 失败的话各说各的:模型那八档(开关没开 / 宿主没给模型 / 没设默认模型 / 超时 / 答错 + / 读不出中文 / 太长 / 没存下来)+ HTTP 那四路九档(多出的三档是 、、 —— 网页接口改了形状必须点得名,不许混进"没中文"),一律。
  • 语言过滤:可配一档语言(prefs.language,页面 slug 的小写形式),保存时就地 GET 一张周榜验 <title>,站点不认这个 slug 就拒收并说明原因。空 = 全站榜。
  • 出网方式:跟随系统(先环境变量 HTTPS_PROXY/ALL_PROXY/HTTP_PROXY,再 Windows 注册表的系统代理)/ 自定义地址(只认设置页那一行,形如 127.0.0.1:7897,只支持 http 代理的 CONNECT 隧道)/ 直连。默认 跟随系统 —— 这台机器上直连 github.com 会超时,而注册表里就写着 127.0.0.1:7897。
  • 设置:检查频率(1 / 3 / 12 / 24 小时)、榜单条数(525,默认 15)、事件保留条数(502000,默认 300)、详情缓存(★ 第十二轮:6 / 12 / 24 / 72 小时 四档分段器,出厂 24 小时,改档下一发详情就按新档判新鲜;失败档那 5 分钟不进设置页)、语言过滤、出网方式、现译引擎(并排五档分段器,出厂「免费接口」;选中「百度 / 腾讯 / 阿里」任何一家时才多出一行那一家的两格(标识符 + 密钥,密钥框是 password)带「保存」/「清除」,并另起一行给出那家的注册地址(要注册才用得着,链接新开标签页、不带走面板))、现译开关行(★ 第十五轮改口径:摆几行由当前那一路服务的 kinds() 决定,不是客户端写死两行;★ 第十七轮(10-07)用户改判放回:翻译四档的 kinds() 现在也报 readme ⇒ 五档都摆两行(描述现译 出厂开、摘要现译 出厂关),那一行行名不变、"这一段是什么"跟着档位走 —— 翻译四档那句说明念「这一段是节译不是摘要」,只有 宿主模型 那档念「另给一段中文摘要」(domain.switchRowLabel);每行 {key,kind,row,label,on} 五格、客户端只念 key/row/label/on,点一下即存。真机那两屏 tmp/shots/68-r15-set-keyless.png / 69-r15-set-host-llm.png 是第十五轮那一版的读数(免费档只有一行开关),第十七轮放回后还没重拍 ⇒ 挂在 §9.3 那条走查清单上,要重启宿主才看得见新那两行)、GitHub 令牌那一行 + 「创建令牌」那一行(★ 第二十一轮新增,用户裁定「设置页加一个 GitHub token,配额抬到 5000/h」:它不在现译那一叠分段器里,是 GitHub 那一域的凭据、与翻译无关 ⇒ 单独两行,全部读 snap.github:框是 password + autoComplete:'new-password'、maxLength 与字段名来自那张派生表、密钥格 value 恒空(存过只把 placeholder 换成「库里已存(留空不改动)」)、库里存过才摆「清除」(点了只发 {ghToken:''} 这一格)、「保存」只在草稿 ≠ 库里那份时可用;下面那一行给 github.com/settings/tokens 那条网址(target=_blank rel=noreferrer,★ 与三家云同一条律:那句额度话不替 GitHub 承诺数字)。⚠️ 这两行还没在真机上看过,与第十七、十九、二十轮那几屏挂在同一条走查清单上),外加一张只读的「运行环境」表(最近那一发的传输路径 + 宿主能力位)。

它不是什么

  • 不是 GitHub 官方工具,与 github.com 无隶属关系;榜单是趋势页页面自己排的名次。
  • 不做 AI 解读(零 ctx.llm) —— 2026-10-06 第八轮由用户拍板改判为「默认零调用 + 句柄只许一个使用者」:现译只在点开详情那一下、只在开关开着的那一档发生。 ★ 同日第九轮再改一次:现译默认不再走模型 —— 出厂档换成免密钥的翻译接口,宿主模型降为设置页分段器里的一档(上面「现译引擎五档」那条;★ 第十轮那一档旁边又多了两家云,从三档变五档)。两次改判都没动这条铁律的另一半: 不发通知、不写会话日志、不动宿主定时器之外的任何东西照旧成立;要通知请用宿主自己的机制,本插件不代作决定。 真机口径(2026-10-05 第六轮为「描述译中文」跑过一次临时宿主 LLM 探针,跑完即撤、现已撤净):这台宿主的 ctx.llm 关不掉思考 —— 官方那两个关思考的字段被静默吞掉、reasoningEffort 看不出起作用,20 来字的译文照烧 209~318 outputTokens ⇒ 真要做现译只能默认关闭 + 从调用次数省。 10-06 01:16 那一轮把它翻案了:思考能关,走 reasoningEffort:'off' —— 同模型同题两发对照:outputTokens 260 → 12、耗时 1.9s → 0.9s、思考字符 1342 → 0(归零才算关掉,耗时和观感都不算判据); 顶层那两个官方关思考字段照旧传了不生效,因为适配器只认 reasoningEffort 这一个入口。★ 这句"还没有排期"也一并作废:10-06 同日第八轮就做了, 发的每一发固定 reasoningEffort:'off'(LLM_REASONING_EFFORT 单点在 domain)。 五发读数与两发对照、判据全在 docs/design-spec.md §9.4 / §9.4.1。

一个必须先说清的口径

数据源是 https://github.com/trending?since=daily|weekly|monthly 的页面 HTML,属于非官方接口:对方改版即失效。 (为什么不选 Search API:要 key,而且"趋势榜"是站点自己算的一张榜,API 复现不了你在 github.com 上看到的那个名次。为什么不选第三方镜像:多一层可用性风险,数据也不可追溯。)

第二个数据源只在点详情时才出现:https://api.github.com/repos/{owner}/{name}(+ /readme、必要时 /contents/)。它是官方 REST,字段稳定,但额度默认是匿名那一档:60 次/小时/IP(实测历轮每一发都回 x-ratelimit-limit: 60。★ 第二十一轮(10-07)改判那半句"硬的":设置页可以填一个 GitHub 令牌 ⇒ 详情那四发各带一条 Authorization: Bearer <token>,只进请求头(不进 URL、不回显、不进日志、不进快照,空白格等于没填、照旧匿名发), 官方文档口径带令牌是 5000 次/小时(★ 本机没有 GitHub 账号也没有令牌 ⇒ 那一形状是合成的,零真回包)⇒ 屏上那句「匿名配额 / 已认证配额 剩 N / 上限」的上限与那两个字的标签都由 GitHub 自己回的那一格决定:填了却被拒(撤销、拼错)就照旧念「匿名配额」,代理把那一格吞了就退回保守的 60 —— 宁可梦见 60,不可梦见 5000。★ 发数一发没多(一次点击仍 ≤4 发),而 github.com/trending 榜面那三发永远匿名(gh.js 连这一格的键名都不许认得)。 所以一次点击最多 4 发(元数据 1 + README 1 + 只在默认篇不是中文时补 根目录列表 1 + 中文文件 1;★ 第十五轮第二路没加这个数 —— 那一发中文文件正文照发,只是路径改从已经在手的默认 README 那行语言切换里抽,零额外请求,命中才发),成功档缓存按设置页那一档(★ 第十二轮:6 / 12 / 24 / 72 小时,出厂 24 小时,改档下一发就按新档判新鲜——TTL 是调用时现取现算、不在装配时锁死)、失败档 5 分钟(不进设置页),同人连点两下在途去重,界面还如实显示「这一小时还剩几次」。★ 第十一轮的 zh_section 那一档不在这个数里加东西:默认篇是外文时,先在已经在手的那份整篇 README 里找中文小节(零额外请求,那条路实测 3 发封顶),找到了就不再往现译那一路派活;「仓库自己写的描述本身就是中文」(descSelfZh)同理;★ 第十九轮的第三道闸门同样不在这个数里加东西 —— 它吃的是要派出去的那段节选(/readme 那一发已经回来的字),既不许多打一发去猜路径,也不新增载荷键或存储字段 ⇒ 三闸门省的都是翻译那本账,GitHub 这本账一克没动。详情读的是仓库自己写的话(description 两路中文都没有时那句原样标「原文,未翻译」—— 开关关着、那一档发不出去、或接口答错了都落在这档),命中内置离线词表时多一句人工预译的中文(带来源与时间戳,原文照给,见上面「描述列中文」那条与 docs/design-spec.md §8.2),现译命中时同理(落款是「<这一行当初是谁译的> · <时刻>」,原文同样照给,§8.3 / §8.4)。 ★ 10-06 之后这里多出第二个出网账:现译开关开着且内置表没命中时,那一句会交给设置页选中的那一档(一次点击最多两发 = 描述 + 摘要;★ 第十五轮曾把翻译四档砍成只剩描述那一发,第十七轮(10-07)用户改判放回 ⇒ 五档又都吃满这个上限,那道能力声明 kinds() 与源侧闸门都还在(★ 第十九轮又补一道,见上面那条))。五档里只有 宿主模型 那一发不打 HTTP(走宿主自己的模型连接与额度); 免费接口 / 百度 / 腾讯 / 阿里 那四发是插件自己经同一份 net.js 出的网(代理仲裁与 15s 超时都不另建一套),打的却是另四个域名(translate.googleapis.com / fanyi-api.baidu.com / tmt.tencentcloudapi.com / mt.aliyuncs.com,白名单由 TRANSLATE_ENDPOINTS 派生成 TRANSLATE_HOSTS,判据不手抄清单) ⇒ GitHub 那一域的配额五档都不占(★ 第二十一轮之前那句写的是「那 60 次/小时」;现在那一域是"匿名 60 那一档,填了令牌则是按账号那一档",但这件事没变), 与页脚那句配额说的还是 GitHub 那一头,跟翻译成没成是两条独立的线(别在文案里混成"配额用完了所以没译出")。判据与口径见 §8.3 / §8.4。 ★ :腾讯云与阿里云那两路接进来用的是它们(腾讯 v1 签名把参数放查询串、阿里 RPC V2 是查询串签名), 所以改判的是"翻译域的查询参数里允许出现厂商标识符"那一格, method。★ 后半那句「也不是 GitHub 那一域的零凭据」(原句留着当历史):现在写的是「 —— 库里 空着(出厂态)时那一域一发凭据头都没有,与旧版逐字节一致;填了才带 ,,且只给 的详情那一路」; / / 三类头(判据 按域收窄成三道硬界,逐条证伪见 §9.2 第二十一轮)。

探针实测的三件事决定了解析器的形状(完整读数见 docs/design-spec.md §9.1):

  • 每个数值 span 前内嵌约 700 字符的 <svg> ⇒ 锚点必须跨 </svg> 取文本,定长窗口会静默取空。
  • 未登录页每行都带 /login?return_to=… 的 star 按钮 ⇒ 仓库名必须从 <h2 起找,不然每个仓库都解析成 login。
  • ?since=bogus 不报错,逐字节返回日榜;语言 slug 不存在也只给 200 + 0 条 ⇒ 白名单与「空榜 / 无效语言」的判据(<title> 念没念语言名)只能守在宿主侧。

因此:

情况面板表现
某一榜本轮抓不到 / 解析失败该榜卡就地写「故障 · <原因>(显示 <多久> 前的上次成功数据)· 已连续 N 轮」,行数据冻结在最后一次成功轮,其他两榜照常
连不上 / 超时(传输类)先补发(同榜最多 3 发),仍不通则卡上多一条来源提示,按最近那一发的实际路线说:经代理 http://127.0.0.1:7897 未通 / 直连未通 / 配置坏到根本没出网(三种情况绝不并成一句「网络不通」);同时写明「下次自动检查 X 后」
代理地址填错 / 解析不出来记为配置错误(不补发、不静默回落直连),榜面冻结在最后一次成功轮,运行环境 · 传输路径 一行红点写明原因
语言 slug 站点不认记为配置错误(不是源故障),但仍然冻结该榜并写清原因;保存时直接 400 拒收
语言合法但这一档今天没榜合法空榜:ok=true + 「这一档今天没有上榜仓库」,不冒红点
条件请求拿到 304只推「最近取回」时间,榜面数据时间不动(304 只证明整页字节没变,"今日新增"是累计值)
点详情时 api.github.com 给 404 / 限额用尽 / 传输失败 / 配置坏四种各给一句话(REPO_ERROR_LABELS + 接口原话),榜面照常;失败行 5 分钟内复读同一仓库不再出网,免得把坏名字刷爆额度
详情命中缓存(设置页那一档,出厂 24 小时)载荷标 cached:true + cacheAgeMs,这一发请求都不发;重取走 ?refresh=1(绕过 TTL,但仍吃服务端限额)
三榜连坏节拍按 2^N 翻倍退避,指数封顶 4 轮、绝对封顶 4 小时;任何一榜成功即归零。(2026-10-05 真机改造前:启动抖动连坏三轮,未封顶的指数退避把下一轮推到 24 小时,面板一整天空着。改造后同一场景实测 backoffExp:1 → effectiveMs 顶到 4 小时,第三轮自愈)
宿主没有 ctx.storageDomain / 存储域 open 失败榜面照看,能力位与状态卡如实写「变化史留不下来」。绝不谎报存储在位

安装

⚠️ 当前状态:页签化 + 传输补发 + 插件内代理隧道 + 仓库详情(数据源与详情对话框)+ 描述列内置离线预译 + 模型现译(C)+ 现译引擎五档(D,第九轮三档、第十轮扩到五档并接上腾讯 / 阿里云)+ 自带中文探测与结构化段表(A,第十一轮)+ 详情屏撤废话与详情缓存时长可配置(第十二轮)+ 名次徽章分档(第十四轮)+ 节选与判据窗口分家 / 句子边界收口 / 摘要能力跟着那一路 / 语言切换行找中文 README(第十五轮,★ 其中「摘要能力跟着那一路」已被第十七轮用户改判放回)+ 回执带上厂商请求号 / 同屏一条失败句只念一次(第十六轮)+ 摘要现译放回来(第十七轮)+ README 有中文就不派摘要(第十八轮,闸门本就在)+ 屏上那段节选里已有中文也不派摘要(第十九轮,★ 同一轮"库里那条旧译文行删"那一件没做成** —— 删掉后被在跑的宿主写回,要等宿主关掉重删)+ 多份中文篇并存时挑简体那一份(第二十轮)+ 设置页 GitHub 令牌那一行 / 详情配额那句跟着 GitHub 自己回的那一格(第二十一轮,★ 这轮动的是文首那条铁律的"不带 key":改判为默认零凭据 + 填了只进请求头),这几件已过 391 项用例(★ 第十三轮把基线从 356 推到 357(差的那一条是事故补的回归判据)、第十四轮推到 358、第十五轮推到 368、第十六轮推到 371、第十七轮推到 372、第十九轮推到 376、第二十轮推到 378、第二十一轮推到 391)(★ 口径更正:跑测器 test/_helpers.mjs 数的是用例(check)条数,不是 assert 条数,旧文档写"项断言"是把这两件事混成一件了;10-07 10:0x 本机复跑:SKIP_LOCAL=1 下 354 过 / 0 挂 / 2 跳,那两条跳的是要真出网的口径(hc-17 与 wt-27);不带 SKIP_LOCAL 那一份是 355 过 / 1 挂 / 0 跳,挂的是 wt-27 免费接口真出网那一发回 HTTP 429;那是外部限流的读数,离线 354 不受影响,细节与归因见下面「测试」那节与 docs/design-spec.md §9.2)(★ 第十三轮(10-07,修完第十二轮那格 requiredInt 之后):基线推到 357 项、SKIP_LOCAL=1 下 355 过 / 0 挂 / 2 跳,逐套差值只在 store 39→40; 而第十二轮落地当天界面上是三榜全红「故障 · 存储不可用」——离线那一份满绿测不到那一发(假设施 open() 不跑 schema),见下面第十三轮那条与 §9.3 那条病历) (★ 第十四轮(10-07,名次徽章分档:前三名金/银/铜、第 4 名起中性,色值与兄弟插件 modelwatch 对表):基线推到 358 项、SKIP_LOCAL=1 下 356 过 / 0 挂 / 2 跳,逐套差值只在 client 53→54; 这一件只动浏览器半边** client.js(宿主半边 / 载荷 / schema 一字未动),界面上要等宿主重新加载那份 client 源(重载面板,不行就重启 dsh desktop);无头量了逐档计算样式与徽标 rect(tmp/probe-rank.mjs),但活宿主那一屏仍未截图) (★ 第十五轮(10-07,四件合并:节选与判据窗口分家 / 句子边界收口 / 摘要能力跟着那一路 / 语言切换行找中文 README):基线推到 368 项、SKIP_LOCAL=1 下 366 过 / 0 挂 / 2 跳(直跑 368 / 0 / 0),差值在 repo +7 / api +1 / llm +1 / web-translate +1,另两套(client / host-compat)条数不变、内容改判;这一件过真机(图 6870 + 第二路真回包 + 配额 55→51 那一屏四发),逐条读数见下面第十二件那条与 §9.3 第十五轮;★ 第十四轮欠的那张活宿主名次徽章屏仍未截 ⇒ 还挂在那条清单上) (★ 第十六轮(10-07,两件旧账收尾:vendorErr 把厂商请求号排在回执最前 / 详情同屏一条失败句只念一次):基线推到 371 项、 下 (直跑 ),差值 63→64、 54→55、 28→29;证伪电池 ;★ —— 那两屏各要一个现场:请求号那一屏要一次(要么用你库里的真凭据发坏签名,要么等你自己撞上),去重那一屏要 档(本机模型是就绪的,我不动它)。逐条读数与边界见下面第十三件那条) (★ :基线推到 、 下 (直跑 ,挂的仍是 免费档真出网那发回 —— 与本轮改动无关的外部限流),差值 56→57(新那条钉的是"说明句跟着档位走"), / / / ;证伪电池 ,末行 ,读数 。★ :那一屏要才看得到(改的是宿主半边 , 挂载下浏览器半边重载不算),两屏(设置页两行开关 + 详情弹框「中文节译」那一段)挂在 §9.3 那条走查清单上,等你重启后截给我) (★ :(那道闸 自第十一轮就在,本轮把 / / 三档钉上能承重的现场 —— 旧形状摆在只开描述档的桩下等于没钉,被电池判出一条);基线仍 、 下 (逐套与上一份同数, 那条就地改判);电池 ;真库存对账 抓到一条( 库里有一条 12:24 的 译文,而它现在记 —— 那是第二路落地前那一版判成"英文篇"时发的;★ 闸门排在 之前,这种旧行,)) (★ : —— 新立第三道源侧闸门 (节选 CJK ≥ 8 ⇒ 中英混排篇;出现「中文」两字 ⇒ 中文篇在子目录没抓到、只剩那行语言切换字样),★ 而 那条一字未动(两条律分家:8 管"别派",20 管"档名敢不敢说");反面三条钉死(「日本語」不算中文、国名「中国 / 中國」不算声明、英文 不认 —— 误挡一类就是删了你在用的那一屏)。基线 、 下 (差值 57→59 / 64→66);电池 (★ 首跑第 ③ 条挂在别人先炸的断言上 ⇒ 把反例拆成独立 check 才算验成,同族第八次)。(★ 详见下面第十六件那圈 ④ 与「假读数」那两条): 19:24 摘掉(回执 、那一刻对账 5 条全 ),19:26:37 宿主那一写把内存态整份落回文件 ⇒ 现在仍是 9 行 / 6 条,,要等你关掉 dsh desktop 再删。★ 我自己的假读数一并登记:动手前用 过滤 / 判"宿主没在跑",而它的进程名是 (镜像名里两个词都没有)⇒ 那个条件结构上抓不到它,判"宿主在不在跑"要按 匹配。本轮(闸门吃已在手的那段节选),也( schema 未动)。⚠️ :又是宿主半边 ⇒ 要重启 dsh desktop,两屏(那两类不再多出摘要段 + 日文篇照旧给摘要)与第十七轮那两屏一起挂在 §9.3 等你重启后截给我) (★ :第一条 = (那种形状没法零请求识别,猜路径要加一发、撞 60 次/小时那条红线 ⇒ 保持不做);第二条 = (多份中文篇并存时旧写法两路各自 取首个,(0x2d) 排在 (0x2e) 前 ⇒ 真机 挑中了 那份繁体,读数 )。落地形状是: 出 0 明写简体 / 1 不带变体 / 2 明写繁体,比较器只此一处, 与 都挂它;三条边界各有反向用例((只有繁体时繁体照旧上屏)//)。基线 、 下 ,差额只在 66→68(★ 那一圈:旧断言把繁体钉成了规矩);电池 + (★ 首跑第 ⑥ 条的植入顺手把大小写归一也丢了 = 一发变异动两维 ⇒ 改成单因再跑)。本轮、载荷与 schema 零增量。⚠️ :又是宿主半边 ⇒ 要重启 dsh desktop;那一屏是点开 后 段的路径念 (★ 库里它那行 早于第二路,所以不能拿旧库存当"验过"),与第十七、十九轮那几屏挂在同一条清单上;第十九轮那件"旧行删"这一轮复跑对账(宿主还在跑)) (★ : —— 「对 github.com / api.github.com 全程只读 GET:」改判为「;填了才带 ,;只给 api.github.com 的详情那一路,榜面那一路恒匿名」。只读 GET / 不 POST / 不下载 zip / 不 clone ,(仍 ≤4 发)。配额那一格的:填了却被撤销 ⇒ 照旧念「匿名配额」;代理吞了那一格 ⇒ 退回保守的 60();客户端旧那句 的兜底(同一屏不许有第二个真相)。★ : 并进 那张派生表 ⇒ schema / / / POST 白名单 / 五处一处手抄就红( 那条"新增键必须 optional"的第十三轮律照守,域 仍 1、零迁移)。基线 、 下 (差值 68→76 / 59→61 / 55→57 / 20→21, );电池 + (去向 6 / 读数 4 / 派生 4 / 接线与界面 2;★ 同一个"令牌进 URL"的植入钉了 —— 行为侧 + 静态侧各红一次)。★ :① 那一形状本机(没有 GitHub 账号,历轮每一发都是 60)⇒ 它是官方文档口径、夹具里标注为合成,真机上要读的是而不是那个数;可验的那半是"填一个坏令牌 ⇒ 那句必须仍念『匿名配额』"。② 本轮、没截屏,且;那两屏(设置页新增那两行 + 详情弹框那句配额)与第十七、十九、二十轮一起挂在 §9.3 等你重启 dsh desktop 后截给我) (末尾另修了六条你递过来的真机问题:定时器崩溃、榜单表列宽、页头字号、页签条那条没意义的滚动条、注册链接被推到行尾、★ 以及 10-07 那张「存储不可用」截图); 前面那四件在真机(挂 web profile + 无头浏览器逐签截图)走过三轮,其后又有第四第七轮(第四轮定时器崩溃、第五轮列宽、第六轮内置离线预译、第七轮模型现译,下面几段各记一件),逐轮记账都在 §9.3。第一轮含一次真故障往返:三榜连坏三轮时界面读到 / / 传输提示 / ,退避 实测顶到 4 小时封顶。 第二轮(2026-10-05 12:17)验的是隧道本身:宿主的 dsh 进程里 读得到系统代理,三档(跟随系统 / 自定义 / 直连)各查一轮, 逐档改口,三榜 16 / 19 / 23 条真数据经隧道取回。截图又抓出一个断言全绿看不见的问题(外链吃浏览器默认蓝 + 下划线),逐条记账见 §9.3。 : 经隧道跑通 vite(英文篇,3 发)、ant-design(另有中文 README,4 发)、ruanyf/weekly(默认篇本身就是中文,2 发); 第三轮走查( + ,图 )在挂出来的面板里点仓库名逐档核对: 遮罩盖住整视口且压过 sticky 页签条(顶栏 hit-test 落在遮罩上)、底色是 不是黑块、900×800 下对话框完整在视口内、横向溢出 0; 中文篇那一屏读到「这个仓库的 README 本身就是中文写的,下面是节选。」+ 中文正文; / / 点空白关得掉、点框内不关; 缓存命中 14ms 落地(GitHub 侧 0 发)、「重新取一次」实测改发 且配额 60→57(英文篇三发); 与 HTTP 503 两档各给一句话、不给元数据也不给中文叙述。截图另抓出一个断言全绿看不见的问题(落款把整篇原文长度念成节选字数),逐条记账见 §9.3。 (2026-10-05 14:54,desktop host 被拖崩,IDE 弹「应用无法启动或已意外停止」):定时器回调里调的是裸 ,而 当时只是 上的一个方法 ⇒ 挂上定时器不报错、, 从 落进宿主的 。闸门提成闭包里的具名函数,另加三条"把回调摘下来真的调一遍"的回归用例(两档后端各一条 + 撞忙时一条); 病历与复现读数见 §9.3 第四轮。桌面 profile 是以 挂的这同一份目录 ⇒ (不用重挂载,也不必走"禁用第三方插件"那条按钮); 诚实一句:这一版没有在 desktop 里活满一个节拍再观察过(那要等一整个档位,且得由你决定何时重启)。 (同日第五轮):日榜表前三列被截成 08:51,你重启 desktop 宿主后先读了它的 snapshot,再把同一份目录挂进 web profile 起实例、无头浏览器截图):卡头「描述中译为内置离线预译 · 2026-10-06」在日 / 周 / 月三张卡上各出现一次, 日榜 13 行里 11 行中译 / 1 行无描述 / 1 行未命中照给原文,周榜与月榜各 15 行里 14 行中译;弹框命中档与未命中档两屏都在(§9.3 第六轮,图 )。 是宿主模型句柄的唯一使用者(改判后的 :那个文件由 的 接线,不是手抄清单), 你四条裁定落在实现上就是「点开详情只译当前这一条 / 描述出厂开、README 摘要另开关 / 落 表按「仓库键 + 原文逐字」判复用 / B 命中绝不重发」。 离线 ( 下 ),六发证伪各挂各的现场(F4 分两味,所以是七发读数:F1 重拼吃 ⇒ repo 46/1 + api 46/1、F2 ⇒ llm 17/1、F3 模型闸门提到缓存前 ⇒ llm 17/1、 F4a 回执被洗成 errText ⇒ llm 17/1、F4b 回执整个丢掉 ⇒ llm 16/2、F5 不给 ⇒ repo/api 各 46/1、F6 客户端不渲染「回执:」⇒ client 50/1),台账见 §9.2。 真机那一遍(同日 10:1913:2x,脚本 / / ,读数 ,图 + ,§9.3 第八轮): 出厂屏高亮在「免费接口(免密钥)」且;点官方档 ⇒ 真发 、凭据行出现、说明换成「官方接口还没填 AppID 与密钥…()」; 存过凭据后 placeholder 念「库里已存(留空不改动)」并出现「清除」,切回宿主模型 ⇒ 凭据行,清除那一发是 ; ( 的真机对照);详情弹框第 3 行 读到 ,同屏前两行是「内置离线预译」⇒ B 优先在真机上仍然排在新档前面。 本轮抓出的那条只有截图看得见:密钥框 placeholder 第一版太长被裁掉半句 ⇒ 缩短 并复拍(⚠️ "改前"那张被同名复拍覆盖了、没留档,下次换文件名)。 诚实一句:(本机没 AppID,那一发从没发出去过; 里 登记的就是这件事,签名靠 在用例里独立复算对账。★ 那一份第十轮已按厂商拆成三份,登记方式改成逐条 ,见下面「第八件」末尾); / / / / / 六档失败文案在真机也;而「免费接口」那一路是网页接口、不是官方授权接口(ToS 不覆盖程序化调用,对方随时可能改形状)—— 把它做成默认档是你的裁定,风险登记在 §9.3。 (同日第九轮):「这个滚动条没有意义」—— 真宿主上量到 的 ()而 (溢出的是当前签那条 ), ⇒ 撤掉那句 (:第一轮那条 column flex 收缩压力还作数,不许顺手一起删),判据就地改强挂在 (那条规则里出现任何 即红)。 你那句原话是「」,两条落点是「」+「」: 五枚按钮并排(短名,谁译的、要不要注册、离不离得开代理由下面那句的话说), 选中三家云任何一家 ⇒ 下面出现(标识符 + 密钥)与(百度 1 条、腾讯 2 条、阿里 2 条,;额度那句 —— 这一轮没复核到官网的可引用读数,一律"以官网计费页为准")。 ★ :两家云用的都是官方签名里(腾讯 v1 把参数放查询串、阿里 RPC V2 是查询串签名), 改判的只是"翻译域的查询参数里允许出现厂商标识符";密钥本体仍然,(★ :现在念作「GitHub 那一域零凭据;设置页填了令牌才带 ,只进请求头、绝不进 URL」—— 本条第十轮其余口径原样留着当历史,见文首那条铁律与 §8.6)。 旧档名 (第九轮只有百度那一档时存的)在读的那一刻先搬家成 再判脏,库里那批 的旧译文()。 离线 (,跳的还是 与那条真发,编号已从 漂到 ),直跑 ;本轮 : 18→26(两路签名各一条 + 一次性数 + 非 2xx 先读回包 + 旧档名行 + 命中缓存不组 URL + 档名归一 + 夹具逐家口径), 36→38(搬家顺序 + 旧行继续读); / / ( 整条重写成五档 + 逐家凭据 + 注册行 + CSS 那七段判据, 从扫一把密钥改成扫三把)。 全红到位(,逐发还原并逐字节比对,读数 ):出口少摘一把 / 干脆不摘 / 视图带出 / 字段表不看档名 / / 腾讯改成编码后再签 / 阿里出网改用 / 阿里一次性数写死 / 日志不遮签名 / 密钥框退成明文 / 没存也念"库里已存" / 留空密钥进 patch / 注册行不摆 / 草稿收口拆掉。 ★ 首跑:「阿里一次性数写死」当场全绿 —— 当时只钉腾讯那个 键名,;扩成两家各发两发再比之后重跑才 14/14。 真机那一遍(同日 19:2x,web profile + 无头 Chrome,脚本 / ,读数 / ,图 13 张 ,§9.3 第十轮): 逐档走查每一发(切档只发 、保存只发当前档两格、清除只发当前档两格空串,带 body 的共 9 发); 与 两档(连输入框都不给);三家空凭据时屏上多一句新写的 (原话点名"AppID 与密钥",那两家的字段名不是这个);存过之后标识符、密钥框空白 + 「库里已存(留空不改动)」+ 出现「清除」; (收尾那一屏再搜仍是空)。本轮抓出的那条还是只有截图看得见:注册链接被 那条 (卡头「完整榜单 →」用的)推到行尾 ⇒ 加一条例外 , 活宿主上复量标签到第一枚链接的间距 (改前那一大片空是几百 px),( / )。 诚实三句:(无凭据那一发只走到"查标识符"那一步:腾讯 、阿里 HTTP 404 + ⇒ 服务端先查标识符后验签名,,只有离线独立复算那一条腿); ,所以界面不念(第三方转述的数字含第九轮那句"百度 5 万字符/月",本轮从文档与界面一起撤了); ,有第三方转述说部分新账号会被要求改 POST + TC3 —— 官方文档这轮没复核到这条明文,真撞上时要按规矩另开一次改判,不在实现里偷偷 POST。 你那句原话是「」,三条落点是「」+「」+「」⇒ 这一轮(详情那一层编排仍是最多 3 发,读数 ),动的是"详情那一屏由谁拼、拼成什么形状": ① 多出 —— 默认篇是外文时,在的那份整篇 README 里找中文小节( + ,判据吃 CJK 、与默认篇那一档同一条律 ;,这条状态机的真形取自榜上那篇 代码注释);找不到就保持 ,不硬凑一段; ② (都排在派活之前,不是译完再挑):(仓库自己写的描述本身就是中文,)⇒ 不派描述那一发;命中 ⇒ 不派摘要那一发; ③ 详情载荷从"一整句 "换成 (四段 ,块只有 /// 四种 ,段序只认 、数字只进 各一次)—— 旧那五格 / / / / 连同 , 改名 且、 一进来就解构删掉 ⇒ ( 21 含 、出边界 21 含 不含它);段表与 ,缓存命中与刚取回两条路同走 →,逐字同形; ④ 「换引擎旧译文照样复用」,所以这一条,只补判据与文档(落款署的是那一行的来源,命中只比原文不比引擎,§8.4)。 离线 (,跳的还是 与 ),10-06 当晚直跑 ;本轮 ( 47→56:围栏状态机、 两条、两个阈值两侧余量、 那一路仍三发封顶、 入库行、段序只认常量、数字只出现一次、描述五种来源的字面分档、 段成功带落款/失败给 note 与回执; 53→54:第一道闸门那条), / / / ( 整条改吃段表:四种 各自类名逐字、 逐级加重、一张 、旗标句落 段的 块; 改判:摘要失败、段名说「没取到」)。 全红到位(,四个源文件逐发还原并逐字节比对,读数 ):围栏失效 / 小节阈值放宽到 1 / 编排整块撤 / 那句落款删 / 阈值失效 / 段序改手写表 / 数字并回 段 / 不删 / 两道闸门各拆 / B 优先拆 / 退成 / 与正文同形。 ★ 首跑又:「B 优先拆除」当场全绿 —— 那条用例把 写成,"描述那一发没派"是挡的、不是 B 优先挡的;改成两档都开并在派活矩阵补一行「B 命中 + 只开描述档 ⇒ 零调用」后才是 (同一条律第二次抓到"断言没承重",§9.2)。 ★ 本轮还第一次抓到:那条围栏用例原名带「真机」二字,而 的机制是 ⇒ 离线那 350 里压根没有它;改名「(榜单上真出过的形状)」才进覆盖面(同一条律第三次撞,判据是)。 诚实两句: —— 详情弹框重排改的是"一屏四段、句子分主次"的形状,按验收口径该在活宿主上逐段量 (每段吃多高、/ 墨迹深浅差、 的边框与内边距),只数 DOM 节点或断言 CSS 字符串都算没验过; 那要把这份目录重挂进 web profile 并,本轮没做(要你点头),所以 §9.3 未验证清单第十一轮那条。 :榜上仓库里唯一候选 ,按"认围栏"口径重跑后那三段 CJK≥8 的"中文小节"全是 ⇒ 退回零样本;全链路吃的是合成夹具 (标 、逐条 ),真回包那一路没吃过(探针与出网账见 §9.1,其中 的发数,是本轮唯一的读数缺口)。 你那句原话是「」,两条落点是「」+「」: ① 段对象从五格缩成()—— 四句 落款("这一段读的是 api.github.com 的 description / language / license / topics 字段"、"这些数字与日期是元数据字段,不是本插件算的"、"下面是仓库自己写的 README 正文…不是译文"、"这一段是现译给的,不是仓库自己写的中文"), 那张表连带删掉;「是谁写的 / 是谁译的」改由说(、), 段那两句(README 五档说明句 + 的小节名)并进段名, ; ② 撤的是解释,不是事实:「不是现译」那个标签、仓库那一句(译文永不替换原文)、页脚那行 GitHub 配额; ③ README 那行落款压成一行短字面 (两个口径的数都留着,差在哪由那道斜杠交代,不另起一句解释;两个数相等时写「整篇就这么多」,不许把同一个数念两遍); ④ 详情缓存 TTL 从常量 (12 小时)改成 + 单点换算,出厂 ;设置页多一行分段器(与检查频率同形状、话术全吃载荷), 档位外(★ 不许悄悄回落 24 —— 那等于库里一个值、分段器上另一个值,同 那条理由), 只认名单(缺这格的旧库由出厂值补回 24); ★ 服务侧吃的是 :装配时把毫秒锁死会让"改档"到宿主重启才认,而屏上分段器已经显示成新档(两份真相, 同时钉这条接线与"装配处不许出现 ");(那是故障保护,不是给用户调的配置)。 离线 (,跳的还是 与 ),同轮直跑 (挂的仍是 那一发真出网回 );本轮 ( 54→55:档位封闭与越界 400; 52→53:那一行分段器 / 选中读库里那份 / 旧载荷整行不摆; 38→39:越界回落 + 旧库补格; 20→21: TTL 接线), 56 条(段对象只四格、/ 段名、 新字面、、TTL 那两条从 12 小时口径改口到 24 小时 + 现取现算)。 全红到位(,六个源文件逐发还原并逐字节比对,末行 ): 格加回 / 段名不带档名 / 段名不带引擎 / 塞回载荷 / 落款压回旧长句 / 两数相等仍报整篇 / 客户端把撤掉的落款摆回屏上 / 装配时锁死 TTL / 服务侧抄毫秒常量 / 初值漏格 / 出厂档不是 24 / 档位多出第 5 档 / 话术表少一档 / 不认档 / 入口载荷不发档位 / api 闸门拆除 / 设置页那行撤掉 / 旧载荷仍摆空行 / 选中项读出厂值。 ★ 首跑(电池自己的缺陷,不是判据漏洞):那条把 段名的只吃了上半句 ⇒ 植入后源文件直接 ,跑挂了却没有一条红用例。补全锚点后 19/19,并给电池加一档显式读数「植入改坏源文件(判据没跑到)」—— 免得下次把脚手架的坏消息读成判据的红(同一条律第四次:判据要在上挂)。 诚实两句: —— 撤废话改的是那一屏的句子密度、加的那一行是设置页的分段器,按验收口径要在活宿主上截两屏并逐段量 ,而 动了装配半边 ⇒ ;第十一轮那条未验证清单,本轮把"详情弹框 + 设置页缓存行"并成一次走查。 (只有离线那两条:24h 档下 7 小时的行仍算新鲜,切到 6h 档同一行当场过期重取)。

★ 第十件落地当天就撞出一发真机事故(10-07 第十三轮,用户递截图问「怎么回事」):desktop 上三榜全红「故障 · 存储不可用」、每榜 0 条。 根因就在这件的第四个落点里:新偏好键 repoCacheHours 当时写成 requiredInt('详情缓存时长(小时)'),注释理由是"与邻居 intervalMin 同形状"—— 可 intervalMin 是首建就存在的必填键、对它自己的老库合法;追加的必填键对第十二轮之前写下的那一行就是坏行。 而宿主只在 open() 读存量时跑这套 schema,一条坏行被 kv-records-base.js 包成 UNAVAILABLE ⇒ 一整域不可用(榜面走降级路径所以还看得见,但状态与榜史全读不出来)。 修法两处,零新键 / 零迁移 / 域 version 仍钉 1:那一格改回 optionalInt(缺格由 clampPrefs 补出厂 24 小时,语义不丢), 并往 test/store.test.mjs 末尾加一条跑真宿主生效那一步的回归判据(拿 GHT_DOMAIN.tables[t].valueSchema.parse 吃上一版库存里真实存在的行形状;两头钉 —— 不抛 = 域还开得上,不凭空造格 = 补默认只许 clampPrefs 一处)。 ⚠️ 为什么"离线 354/0/2 全绿"跟"界面上全线红"能同时成立:test/_helpers.mjs 的假设施 open() 不跑 schema、seed() 明写"未经 schema 校验" ⇒ 那套假设施结构上碰不到这一发。★ 同一条律第九轮的 engine 与第十一轮的 readmeSection / descSelfZh / zhCjk 都守住了(全部 optional*,注释里写着同样的理由),第十二轮这一格是自己破的。 读数(10-07 11:0x 复跑,tmp/rerun-r12-fix.txt):store 39→40、离线全量 355 过 / 0 挂 / 2 跳(基线从 356 项推到 357 项);同一块证伪电池扩到 20 条 / 未抓到红 0 条(新那一发"把这格写成 required"当场 [store] pass 39 / fail 1,tmp/r12-falsify-out3.txt); 真库存只读探针 tmp/probe-storage-open.mjs 报六表 239 行、读不出 0 行,并自证真缺那一格(prefs 缺 repoCacheHours / repo 缺 readmeSection / trans 缺 engine)—— 它只报行数与缺哪一格,绝不打印行值(prefs 那一行躺着你的真凭据)。 ⚠️ 界面上什么时候退红,取决于你什么时候重启 dsh desktop 宿主(link: 挂载下宿主半边在进程启动时加载;修复在树里,但那个进程还拿着旧 schema)。我没替你重启。 ★ 顺手补的第三处:lib/stores.js 里 */export function createPrefsStore 那个被第十二轮吃掉的换行(全树只有这一处,改的只有这一行)。 ★ 第十一件(名次徽章分档,2026-10-07 第十四轮):你递了一张 modelwatch「本周前三」的截图(红框圈住 1/2/3 三枚圆徽),口径「榜单前三名也加上这种徽标和颜色,好区分一点」。 落法:.gt-rank 退成纯底座(22×22 / 圆角 8 / 11px·700 / tabular-nums),底色一律由档类给 —— 金 #e8b530 / 银 #c3c9d2 / 铜 #cf9a63(字色 #3d2c00 / #2f353c / ),第 4 名起 走宿主令牌; 三档色值与 modelwatch 的 (观感口径跟兄弟插件对表)⇒ ,这条对表关系由 的色值正则钉着。榜页 8 列表格与总览速览,两处渲染点各自验(只钉组件不算:调用点自己拼类名就把档吃掉了)。 读数(10-07 11:2x–11:3x,): 53→54、离线全量 (基线 357→,差额只有那一条新用例 ⇒ 数据面 / 载荷 / schema 一字未动);新电池 (只圈 ),末行 。 无头那一遍( → )量到:三档计算样式 / / 、第 4 名与第 15 名 + 1px 边框,(中性档那 1px 边框没把它撑大,靠 )、46px 首列内右缘留 8px、 没触发折行、两位名次不撑列。 ★ 这一轮踩到两条自己的律: —— 在 …`[client] pass 4 / fail 50client-54Number(rank)parseInt(rank,10)||rankclient.jsalibaba/open-code-reviewdocs/i18n/README.zh-CN.mdInstall Ask your areadmeZhVerdictheadcleanheadREADME_EXCERPT_MAX=1600cleanbodyCharszh_sectionmaxLengthversionexcerptOf()EXCERPT_SENT_BACK_MAX=200EXCERPT_SENT_END_REx end.lib/services/web-translate.jsSERVED_KINDS=['desc']kinds()enabled(kind)lib/services/llm.jskinds() => [...LLM_KINDS]宿主模型switchRows[]{key,kind,row,label,on}SERVED_KINDS['desc','readme']domain.summarySectionLabelswitchRowLabelpickZhReadmeLink(默认篇 raw 原文)href="路径"zhReadmeRelPath/#....mdREADME_ZH_LINK_MAX=200encodeURIComponentreadmePathen_defaulttmp/rerun-r15.txtSKIP_LOCAL=1repoapillmweb-translatewt-27clienthost-compattranslatorViewswitchRowshc-18translator.descOnswitchRowstmp/r15-falsify.mjsrepo.jsdomain.jsweb-translate.jsapi.jsllm.jstmp/r15-falsify-out.txt[还原 ok]////mailto:http:llm.jsapitmp/shot-r15.mjstmp/r15-walkthrough.txttmp/shots/68~70-r15-

★ 第十七件(多份中文篇并存时挑简体那份 + 「不猜路径」保持不做,2026-10-07 第二十轮):一条真行为改动、一条零改动,378 项离线用例走过,同样没真机屏。 你上一轮那两条"没动的"这轮都有了答复(原话「只做"屏上有中文/那行写着有中文版",不猜路径」+「使用 README.zh.md 这种」): ① 零改动那一条:那种「中文篇在子目录、默认篇里连那行都没写」的形状不做路径猜测 —— 猜就要多加一发 contents,撞 60 次/小时匿名配额那条红线 ⇒ 第十九轮那道闸门的两条来路(节选 CJK ≥ 8/出现「中文」字样)就是最终覆盖面,能力边界继续如实登记(界面上永远不会为那种形状凭空多出一段中文)。 ② 真行为改动那一条:两条路命中多份中文篇时,旧写法都是 .sort() 取第一个,而 '-'(0x2d) 排在 '.'(0x2e) 前面 ⇒ 真读数 tmp/probe-zh-link-shape.txt 第 8~9、40 行:thedotmack/claude-mem 那行语言切换同时写着 docs/i18n/README.zh.md 与 docs/i18n/README.zh-tw.md,繁体那份被挑中了。 ③ 形状 = 一份优先档、两路共用:domain.js 两份封闭词元名单(简体 ['hans','cn','chn']/繁体 ['hant','tw','hk'])→ zhVariantRank(文件名) 出 0 明写简体 / 1 只写 zh、chinese / 2 明写繁体,比较器 byZhPreference 只此一处,pickZhReadme(根目录列表)与 pickZhReadmeLink(语言切换行)都挂它。★ 单点不是洁癖:第十五轮那条发现就是"两处各写一次排序"里第二处单独露出来的;电池第 ①② 条分两条钉,就是为了"只接一路时另一路那条必须还红得起来"。 ④ 三条边界各有反向用例:只排序不过滤(只有繁体时那份繁体照旧上屏 —— 把它过滤掉等于撤掉你在用的那一屏,同第十七轮"不许对任何一档说做不到"那条律;两档同时出现在一个名字里 ⇒ 保守按繁体算)/切文件名的词元,目录名不参与(docs/tw/README.zh.md 还是"不带变体"那份)、不按子串(拼错的 README.zh-cnother.md 不许冒充简体)/同档内仍按字面排序("稳定比聪明重要"没改判 —— 丢掉 tie-break 的话,GitHub 目录序一变你看到的那一份就换一份)。 ⑤ 出网账 0 发 / schema 账零增量:挑到哪一份都是原来那一发正文(详情编排仍 ≤4 发),载荷键、repo 表字段与域 version 一字未动。判据吃的是第十九轮那 4 发留下的读数+本地库存两行(只读)。 ⑥ 读数(20:1x 本机,tmp/rerun-r20.txt):SKIP_LOCAL=1 下 376 过 / 0 挂 / 2 跳,基线 376 → 378 条,差额只在一套:repo 66→68(zhVariantRank 一圈 + 「两路共用同一条优先档」一圈);★ pickZhReadmeLink 那一圈条数不变、内容改判 —— 旧断言「多条命中按名排序」把"繁体那份赢"钉成了规矩,本轮当场翻案(同第八轮 provider:undefined 那一族:离线断言把坏行为钉成规矩)。 ⑦ 九发证伪(tmp/r20-falsify.mjs,圈 domain.js / services/repo.js,读数 tmp/r20-falsify-out.txt):[证伪] 9 条 / 未抓到红 0 条,末行 [还原 ok]:两路各退回字面排序/两路各把排序做成过滤/词元从整条路径切/词元换子串/简繁先后调换/丢掉 tie-break/两份名单撞车,各红在自己的断言上。★ :首跑第 ⑥ 条的植入写成 —— 顺手把也丢了,一发变异同时动了两维(连带把 那一圈也炸了)⇒ 改成 只动"词元还是子串"这一维再跑。,否则读数在同时说两件不同的事。 ⑧ ★ :库里 那行 记的是 / / / ⇒ ,它身上第二路从来没跑过。所以"改完挑简体那份"这一条,是。 ⚠️ 诚实一句:(又是宿主半边 ⇒ 要重启 dsh desktop,我不替你重启)。要看的那一屏只有一处:点开 , 段元数据里的路径念 ;顺带 应仍是 (它只有一个候选 ⇒ 若它变了,就是我把排序做成了过滤)。★ 第十九轮那件"旧译文行删"这一轮:20:0x 复跑对账仍是 (宿主 5 个 进程在跑,18:25 起)⇒ 等你关掉 dsh desktop 我再删一次,脚本与逐字节备份都在 。 ★ :宿主在 (5 个 全为新进程,库存文件 落过一盘)⇒ 上面那句「18:25 起」只对那一遍成立;而那一版加载的是 (16:43)/ (19:26)/ 第十九轮那两份 ⇒ ;本轮 21:20:06-07 落地的 / ⇒ 只有。同一遍对账: 仍 (含那条 的旧摘要行)⇒「旧译文行删」照旧挂着。

第十五轮:那两行不再是写死的两行 —— 摆几行由当前那一路自己声明的 kinds() 决定
descOn
readmeOn
switchLabels
switchRows[]
第十七轮(10-07)改判后那份机制一字未动,动的是服务那份声明
readme
五档都摆两行
选路只有一处
pickTranslator
落款跟着那一行自己的引擎
trans
engine
宿主模型
四发在插件的出网账里
net.js
不吃 GitHub 那 60 次/小时
密钥的边界
只参与摘要那一步
标识符 + 一次性数 + 签名
appid
salt
sign
SecretId
Nonce
Signature
AccessKeyId
SignatureNonce
Signature
不进 URL、不出网、不回显、不进日志
翻译域
GitHub 那一域默认零凭据
ghToken
一条
Authorization: Bearer
只进请求头、绝不进 URL
同一套
PREF_SECRET_KEYS
cookie
回执原话
no_credential
http
bad_json
原文照给
翻译那四发一格都不占
运行环境
全程只读 GET 这条铁律一个字没松
官方签名里能走 GET 的那一档
不是
第二十一轮就地改判
默认零凭据
ghToken
一条
Authorization
只进请求头、绝不进 URL
api.github.com
cookie
client_secret
access_token
全域仍然一律禁
hc-7
SKIP_LOCAL=1
369 过 / 0 挂 / 2 跳
371 / 0 / 0
repo
client
web-translate
tmp/r16-falsify.mjs
11 条 / 未抓到红 0 条
这一轮没有真机截图,也不是"过了真机"
真的厂商失败
host_llm
两路同时挂
第十七轮(10-07,用户改判第十五轮③「摘要现译放回来」)
372 项
SKIP_LOCAL=1
370 过 / 0 挂 / 2 跳
371 过 / 1 挂 / 0 跳
wt-27
HTTP 429
api
repo
client
host-compat
web-translate
条数不变、内容改判
tmp/r17-falsify.mjs
12 条 / 未抓到红 0 条
[还原 ok]
tmp/r17-falsify-out.txt
这一轮没有真机截图
重启 dsh desktop 宿主
lib/**
link:
第十八轮(10-07,你那条「README 有中文就不许译」)
行为一字未改
readmeSource === 'en_default'
zh_default
zh_file
zh_section
各自
假绿
372 项
SKIP_LOCAL=1
370 过 / 0 挂 / 2 跳
api
tmp/r18-falsify.mjs
7 条 / 未抓到红 0 条
tmp/probe-readme-zh-rows.txt
旧行残留
alibaba/open-code-review
readme:keyless
readmeSource=zh_file
translate()
读不出来也不会显示
我没动你那行库存
第十九轮(10-07,你改判「这两种也算有中文,旧译文行删」)
这是真行为改动
readmeZhOnScreen(节选)
README_ZH_MIN_CJK = 20
档名律
Chinese
372 → 376 项
SKIP_LOCAL=1
374 过 / 0 挂 / 2 跳
api
repo
tmp/r19-falsify.mjs
8 条 / 未抓到红 0 条
旧行删过一次、又被在跑的宿主写回来了
tables.trans["readme:alibaba/open-code-review"]
trans 9 → 8|其余各格逐字一致 ok
readme:*
en_default
这一件没做成
tasklist
dsh
electron
DeepSeek Harness.exe
CommandLine
零额外出网
没新增载荷键 / 存储字段
repo
没有真机截图
第二十轮(10-07,你裁定「只做屏上有中文/那行写着有中文版,不猜路径」+「使用 README.zh.md 这种」)
零改动
真行为改动
.sort()
'-'
'.'
thedotmack/claude-mem
README.zh-tw.md
tmp/probe-zh-link-shape.txt
一份优先档、两路共用
zhVariantRank(文件名)
pickZhReadme
pickZhReadmeLink
只排序不过滤
切文件名词元不切路径不按子串
同档内仍按字面
376 → 378 条
SKIP_LOCAL=1
376 过 / 0 挂 / 2 跳
repo
pickZhReadmeLink
条数不变、内容改判
tmp/r20-falsify.mjs
9 条 / 未抓到红 0 条
[还原 ok]
出网 0 发
仍然没有真机截图
thedotmack/claude-mem
self
docs/i18n/README.zh.md
at=10-06 08:42
照旧 6 条
第二十一轮(10-07,你问「匿名 60/h ⇒ 一小时最多 15 个仓库,能不能提升?比如设置页加一个 GitHub token」+ 对方案点头「可以」)
这一轮动的是文首那条铁律的一半
不带 key
默认零凭据
一条
Authorization: Bearer
只进请求头、绝不进 URL
一个字没松
发数一发没多
上限与「匿名 / 已认证」那两个字的标签一起跟着 GitHub 自己回的 x-ratelimit-limit 走
宁可梦见 60,不可梦见 5000
|| '匿名配额'
整段删掉
它同时是"第四把密钥"
ghToken
PREF_CRED_FIELDS
clampPrefs
publicPrefs
hc-19
store
version
378 → 391 条
SKIP_LOCAL=1
389 过 / 0 挂 / 2 跳
repo
api
client
host-compat
store
条数不变、两条内容改判
tmp/r21-falsify.mjs
16 条 / 未抓到红 0 条
[还原 ok]
两次
诚实两条
5000
零真回包
那两个字的标签换没换
零真出网
没动你的 prefs、没替你填令牌
(共尝试 3 次)
已连续 N 轮
下次自动检查 4 小时后
effectiveMs
reg query
运行环境 · 传输路径
docs/design-spec.md
详情这一层数据源与弹框都过了真机
tmp/probe-repo-service.mjs
tmp/shot-detail.mjs
tmp/shot-detail2.mjs
tmp/shots/18~26-*.png
color(srgb … / .26)
Esc
×
&refresh=1
ok:false
docs/design-spec.md
另有一条真机崩溃已修
run()
run
return {…}
响的那一刻必抛
ReferenceError
Timeout.tick
uncaughtException
docs/design-spec.md
link:F:/dsh-plugins/dsh-plugin-gh-trending
修复已在原地生效,重启宿主即可
另有一条你截图递过来的列宽问题已修
100px、今日新增 整列不见、余量全灌进最后一列 —— 根因不是宽度数值,是 <col class="gt-repo"> 与格子里的 <a class="gt-repo"> 撞名,单元格那条 display:block 把 col 踢出了列布局,后面每列拿到的宽度整体左移两格。 列宽类改为带前缀的 gt-col-repo / gt-col-desc,数值按"尽量显示全"重配(# 46 / 仓库 268 / 描述吃余量 / 语言 112 / 累计★ 64 / 今日新增 72 / 较上轮 56,≤1000px 反过来), 四档视口的量宽读数与截图见 tmp/probe-cols.mjs / tmp/shots/27-cols-*.png,病历见 §9.3 第五轮。同样一句诚实话:这一版只在离板夹具(真 CSS + 真榜面解析结果)上量过,没在挂出来的宿主面板里重走。 (同日第六轮补了一半:真宿主面板的截图里八列各有值、今日新增 不再是 0 宽 —— 那是肉眼看过、没量过,逐列 px 仍然只有离板读数。) 第五件(描述列内置离线预译,2026-10-06):离线 266 项 + 真机截图都走过了。 lib/desc-zh.js(73 条,死数据)+ snap.descZh + 弹框那句「中文描述(内置离线预译 · <日期>,不是现译)」, 离线 266 项全绿、十一条证伪各挂各的现场(台账与证伪读数 §9.2,功能口径 §8.2),另用 10 发 GET /repos/{owner}/{name} 对账过 api 的 description 与表里 src 逐字相同(命中 10/10)。 真机那一遍(同日 08:49
tmp/shots/30~32-*.png
第六件(模型现译 C,2026-10-06):离线 305 项 + 真机截图都走过了。
lib/services/llm.js
hc-8
index.js
createLlmTranslator
派生
trans
305 过 / 0 挂
SKIP_LOCAL=1
304 / 0 / 1 跳
base
provider:undefined
descErr
10:4x,脚本 tmp/shot-llm.mjs、读数全文 tmp/walk-llm3.txt、图 tmp/shots/40~46-llm-*.png + 42-detail-{②,③,④,⑤}*.png,§9.3 第七轮)抓出三条断言全绿、真机一跑才现形的毛病并都修了: ① 点了「开」而高亮还停在「关」(保存偏好不推 update 帧);② 每一次现译都失败在 NO_ADAPTER no adapter registered for provider "undefined"(旧的离线用例还把 provider 缺省钉成了规矩); ③ 模型命中那一档的叙述头一句塌成「这是一个 GitHub 仓库。」(重拼吃了错的源对象)。修好后的屏上原文:m-abozaid/esp32-c3-adblock 那一屏头一句是 这是一个用 C++ 写、MIT 许可证、累计 1,342 星的项目。最近一次推送在 2026-10-04,建档 2026-06-19。,译文与原文两句并排(中文描述(模型现译 · 10-06 10:25):… / 仓库自己写的描述(原文):…), 摘要段段名 中文摘要 · 模型现译 · 10-06 10:29;复用那一次是按你裁的"逐字"来核的 —— 两次点同一条,两个落款逐字相同、trans 表之后没有新增行; 两档一起关那一屏读到「模型」字样 = false、摘要段 = false、仓库自己写的描述(原文,未翻译):… 照在 ⇒ 关掉的那一档不是"翻译失败",是压根没派活; 900px 窄视口 + 出厂态是描述段中文照在而摘要段不在(各开各的),横向溢出 {"over":0}。 本轮出网账:api.github.com 0 发(三屏页脚都是「缓存于 1 小时前」),模型 2 发(描述 92 字 / 摘要 189 字)—— 花的是宿主的模型额度,不占 GitHub 那 60 次/小时。 走查后环境已拆净(实例关掉、web profile 里那个 junction 用 cmd rmdir 摘掉、package.json 与 cordis.patch.yml 从备份还原并 cmp 逐字节一致、偏好回出厂态)。 诚实一句:C 的失败四档(no_model / unavailable / timeout / store)在真机一格样本都没有,那四句文案目前只有离线判据;「两档全关 ⇒ 句柄零调用」在宿主上也只有屏上层证据。 另有一条你截图递过来的页头字号问题已修(同日第八轮):红框圈住「GitHub 热榜」那句「这个字感觉太小了点,比其他插件的小」—— 先对表不猜:同一台 desktop 里 modelwatch / stock-analysis / sysops / it-tools 四家的 -title 规则都是 font-size:17px;font-weight:600,只有 api-catalog 与旧的我们是 16px(卡头 13px、页签与 .X-sub 都跟 modelwatch 逐字同源 ⇒ 偏的就页头那一格)。 .gt-title 改 17px,墨迹读数 17px ⇒ ink 17 / 宽 97 / 盒 98.8×25.5、16px ⇒ ink 16 / 宽 91.3(zoom:1、transform:none,缩放那条解释排除了),脚本 tmp/probe-title.mjs、并排图 tmp/shots/47-title-parity.png,判据就地挂在 client-31(掉回 16px 当场红,证伪读数 [client] pass 50 / fail 1)。 同样一句诚实话:这一条没在挂出来的宿主面板里重截(离板夹具量的是真 CSS 与各家真规则);client.js 是浏览器半边,刷新页面即生效、不必重启宿主,最后一屏还得你自己看。 第七件(现译引擎三档 D,2026-10-06 第九轮):330 项离线断言 + 真机截图都走过了。 你两条裁定落在实现上就是「两条都做,设置页选」+「与宿主模型并存、二选一、默认落免费接口」: lib/services/web-translate.js(免密钥那一路 + 百度那一路,同形换体)与 lib/services/llm.js(第八轮那一路)并存,选路只有一处(pickTranslator 读 prefs.translateEngine), 没选中的那两路连"你开着吗"都不问。trans 表行内多一个 engine ⇒ 落款跟着那一行自己的来源,换引擎不作废旧译文(也不冒充新引擎)。 离线 330 过 / 0 挂 / 2 跳(SKIP_LOCAL=1,跳 hc-17 与 wt-19),新套件 web-translate 19 条 + api 6 条 + client-52 + hc-7 改判 + hc-19 新增; 十六发证伪各挂各的现场(十发在免费/官方那两路:去 dt=t / 把密钥当参数发 / 不遮 sign / 复用不看原文 / 开关闸门漏 / 引擎闸门漏 / 超时不响 / 没汉字也算成功 / 落款不看行引擎 / 库里存截断原文; 六发在凭据与只读 GET 那两条铁律上:三个出口不再摘密钥 ×3 / 翻译那一路改调用名从派生名单溜走 / 带 cookie 头 / 发 POST),台账与逐发读数见 §9.2。 ★ 这一轮把 hc-7 的出网名单从手抄两个文件名改成由"谁真的调用 fetchFn("派生 —— 手抄那一版对新增的 web-translate.js 零覆盖还照样全绿,和 §0 第七轮那个洞同一个形状、换了个位置复发。 真机那一遍(同日 12:05
tmp/probe-sbar.mjs
tmp/probe-engine.mjs
tmp/probe-detail-keyless.mjs
tmp/probe-*.out|txt
tmp/shots/48-sbar-live-1440.png
50~57-*.png
没有凭据行
{translateEngine:'official'}
零出网
整行撤掉
{baiduAppid:'',baiduKey:''}
渲染完的那一屏全文搜密钥 ⇒ found:false
hc-19
michael-denyer/pstack-claude
中文描述(免费接口 · 10-06 13:21):…
SECRET_SAVED_HINT
重启宿主
官方那一档真机零样本
test/fixtures/trans-official.json
"synthesized": true
wt-7
provenance
transport
http
bad_json
empty
too_long
store
一格样本都没有
另有一条你截图递过来的滚动条问题已修
.gt-tabs
scrollWidth 1088 === clientWidth 1088
没有横向溢出可防
scrollHeight 34 > clientHeight 33
:after{bottom:-1px}
overflow-x:auto
flex:none 留着
client-38
overflow
第八件(现译引擎五档:接上腾讯与阿里云 + 切换时显示注册地址,2026-10-06 第十轮):342 项断言 + 真机 13 张截图都走过了。
腾讯,阿里都接上,切换官方接口时,下面显示去哪个网址注册key
改判铁律,两家都接
分段器并排五档
免费接口 / 百度 / 腾讯 / 阿里 / 宿主模型
当前档
那一家的两格
那一家的注册地址
target=_blank rel=noreferrer
不念数字
只读 GET 那条铁律一个字没松
能走 GET 的那一档
只进摘要,不进 URL、不出网、不回显、不进日志
GitHub 那一域仍然零凭据
第二十一轮改判的就是这半句
默认
一条
Authorization: Bearer
official
baidu
engine:'official'
继续读得出来、不改写
TRANS_ROW_ENGINES
340 过 / 0 挂 / 2 跳
SKIP_LOCAL=1
hc-17
wt-19
wt-27
342 / 0 / 0
+10
web-translate
store
client
api
host-compat
条数不变、内容改判
client-52
hc-19
十四发证伪
tmp/r10-falsify.mjs
tmp/r10-falsify-out.txt
value
搬家排在判脏之后
URLSearchParams
抓出一条假绿
wt-11
Nonce
判据没跟着新覆盖面走
tmp/probe-engine10.mjs
tmp/probe-regrow.mjs
tmp/probe-engine10.txt
tmp/probe-regrow.txt
tmp/shots/60~66-engine10-*.png
真 POST 的 body 都记了档
{translateEngine:'…'}
免费接口
宿主模型
两行都不摆
no_credential
明文回填
渲染完那一屏搜三把密钥 ⇒ found:[]
.gt-link
margin-left:auto
.gt-setrow .gt-link{margin-left:0}
10px
前后两张图这次都留着
62-engine10-03-腾讯-已存.png
66-engine10-07-注册行贴标签-腾讯.png
两家云的签名本机零真机样本
AuthFailure.SecretIdNotFound
InvalidAccessKeyId.NotFound
签名对不对这台机器测不出来
额度数字没复核到出处
腾讯取的是 v1 签名
第九件(自带中文探测 + 结构化段表 A,2026-10-06 第十一轮):350 项离线断言走过了,真机截图这一件还没走。
自带中文探测 + 结构化摘要,换引擎后旧译文照样复用,按这个做
只做零额外请求那两处
宿主模板分段,不新增调用
拆进段里,整段撤掉
没改判任何铁律、出网预算增量为零
tmp/probe-zh-readings.txt
readmeSource
第五档
zh_section
已经在手
splitReadmeSections
pickZhSection
个数
README_ZH_SECTION_MIN_CJK=20
围栏代码块里的 # 行不算语义标题
token_ids…
en_default
两道源侧闸门
descSelfZh
DESC_SELF_ZH_MIN_CJK=8
zh_section
narrative
结构化段表
sections[]
what/heat/self/summary
p
sub
num
excerpt
kind
REPO_SECTION_KEYS
heat.facts
narrative
facts
flags
readmeLabel
readmeMeta
repoNarrative()
整段撤掉
narrativeFields
sectionFields
只在宿主内部
api
载荷 26 键 → 21 键
repoView
sectionFields
zh
sectionFields
都不落库
repoView
applyZh
钉成裁定 = 保持现状
零代码改动
当初
350 过 / 0 挂 / 2 跳
SKIP_LOCAL=1
hc-17
wt-27
352 / 0 / 0
+10
repo
pickZhSection
zh_section
descSelfZh
summary
api
client
store
check
host-compat
条数不变、内容改判
client-41
kind
p ⊂ sub ⊂ num
gt-modal-facts
heat
sub
client-51
照摆段
十三发证伪
tmp/r11-falsify.mjs
tmp/r11-falsify-out.txt
zh_section
descSelfZh
what
applyZh
sectionFields
num
sub
excerpt
抓出一条假绿
enabled
只开 readme
开关
[api] 52 / fail 2
用例名把用例杀掉
test/_helpers.mjs:12
用例名含「真机」⇒ SKIP_LOCAL=1 时整条静默跳过
复跑时盯 skip 那一位
这一件没有真机截图
getBoundingClientRect
sub
num
excerpt
重启 dsh desktop 宿主
还挂着
zh_section 命中侧零真机样本
QwenLM/Qwen
代码注释
test/fixtures/repo-zh-section.json
synthetic
shapeSources
probe-zh-fixture.mjs
没留档
第十件(详情屏撤掉废话 + 详情缓存时长进设置页,2026-10-07 第十二轮):356 项离线用例走过了(★ 同轮事故修复后基线是 357 项、第十四轮起 358 项,见下面第十三轮那条),真机截图这一件还没走。
1.把这个页面上的废话都去掉,2.缓存时长可以配置吗,调整为默认24小时
四段来源落款全撤
进设置页,默认 24 小时
四格
key/label/blocks/facts
source
整格撤
REPO_SECTION_SOURCE_NOTES
段名
仓库自己怎么介绍它 · 默认 README 是英文
中文摘要 · 免费接口 · 10-07 09:5x
self
zh_section
readmeNote()
整函数删除
保留
原文
节选 54 / 整篇 4,235 字 · 已去标记 · README
REPO_CACHE_TTL_MS
封闭四档
REPO_CACHE_HOURS=[6,12,24,72]
repoCacheTtlMs()
REPO_CACHE_DEFAULT_HOURS=24
POST /api/prefs
直接 400
translateEngine
clampPrefs
getTtlMs()
调用时现取现算
hc-20
ttlMs:
失败档那 5 分钟不进设置页
354 过 / 0 挂 / 2 跳
SKIP_LOCAL=1
hc-17
wt-27
355 过 / 1 挂 / 0 跳
wt-27
HTTP 429
+4
api
client
store
host-compat
hc-20
repo
条数不变、内容改判
self
summary
readmeMeta
'note' in zh.summary === false
十九发证伪
tmp/r12-falsify.mjs
[还原 ok]
source
self
summary
note
prefsView
clampPrefs
有一条不算证伪过
self
跨行模板串
SyntaxError
自己的现场
这一件没有真机截图
getBoundingClientRect
index.js
得重启 dsh desktop 宿主
还挂着
「改小到 6 小时那一档之后,库里那批 12 小时时代存的行怎么办」真机零样本
#3a2410
.gt-rank-n
.mw-rank-1/2/3
逐字相同
改一处要连着改另一处
client-54
共用同一个 RankBadge
tmp/rerun-r14.txt
client
356 过 / 0 挂 / 2 跳
358 项
tmp/r14-falsify.mjs
client.js
7 条 / 未抓到红 0 条
[还原 ok]
tmp/probe-rank.mjs
tmp/shots/67-rank-medals.png
rgb(232,181,48)
rgb(195,201,210)
rgb(207,154,99)
rgb(250,250,251)
五枚徽标恒 22×22
.gt-root *{box-sizing:border-box}
nowrap
① CSS 是模板串
const CSS = \
里写的注释带了反引号 ⇒ 整份 CSS 当场截断,报的是「rank is not defined」这种八竿子打不着的错(
);**② 断言钉前提** ——
首跑挂在它自己的前提上(夹具的日榜只到第 3 名 ⇒ "第 4 名走中性"空跑),补成 5 行才落到位。另剔掉一条**自等价植入**(
换
抓不到任何红)。 ⚠️ 诚实一句:**这一件同样没有活宿主截图** —— 上面那一遍量的是**从
逐字抠出来的那份 CSS + 复刻的表**(宿主真令牌与深色外观没覆盖,表体其余七列是占位文本),而本轮只动浏览器半边 ⇒ 界面上要等宿主重新加载那份 client 源(重载面板,不行就重启 dsh desktop)。我没替你重启,也没挂 web profile 走查;这一屏并进上面那条欠着的走查清单(详情弹框 + 设置页缓存行 + 名次徽章)。 ★ **第十二件(节选与判据窗口分家 + 句子边界收口 + 摘要能力跟着那一路 + 第二路找中文 README,2026-10-07 第十五轮):368 项离线用例 + 真机三张截图都走过了。** 你递的是两屏现场:
「**这种项目有中文文档,为什么没有获取到**」(那份中文 README 在
,根目录压根没有),和详情屏那句断在
的硬切节选;裁定「**照你说的,把这几处修复合并在一轮里完成**」⇒ 四件并成一轮: ① **分家**:
交两样东西 ——
(去标记后**前 600 字**,只用来数 CJK 判那五档)与
(去标记后的**整篇**);旧版拿
当节选交出去 ⇒ **
那道预算从来没生效**(入库、上屏、喂摘要三者都恒 ≤600)。现在节选吃
、
钉的是**节选出自的那一篇**的整篇长度(命中中文篇时指那一篇,
那一档仍指默认篇)。★ schema 那一格的
一字未动、域
仍钉 1 ⇒ **零迁移**(库里旧的 600 字行读回来还是 600 字,下一发按新档重取才变长)。 ② **收口**:
切到 1,600 后往回退到窗口内**最后一个句子收尾**(回退上限
,窗口里一个句末都没有就宁可硬切),
**中西文两支各写各的**(中文那句没有空格可依赖);硬切与回切都退掉半个代理对(1,398 个
+
+ 200 枚 emoji ⇒ 长度恰为 **1,599**,切在半枚 emoji 上就红)。 ③ **能力下沉**:
的
+
(
第一行就查这张表)⇄
的
(两路都 serve)⇒「整理成一段简体中文摘要」那一路**只派给
**;设置页那几行开关跟着变成载荷
(每行
五格,客户端只念四格),**当前那一路做不了摘要 ⇒ 那一行压根不摆**,不再留一个点了没用的控件。 ★ **第十七轮(10-07)这一条被用户改判**(原话「我前面是有摘要现译的,你在哪一次改坏了,给我放出来」):
现在报
⇒ 五档都派摘要那一发、设置页那行开关五档都摆;本段**原样留着**当第十五轮当时的口径与读数(图 68/69 是那一版的屏,不是现状),保留的只有"不挂假名"那半:那四档给的是节选的**节译**,段名与说明句跟着档位走(
/
)。 ④ **第二路**:
吃那行语言切换,**markdown
文字
与 HTML
两种写法都认**(真机那一行用的是后一种,只写前一种等于没做),多条命中按名排序(★ **这一条已被第二十轮改判**:现在先按"明写简体 / 不带变体 / 明写繁体"三档、**同档内**才按名 —— 见下面第十七件);
的闸门**全排在造 URL 之前**(scheme / 站内绝对
/
/ 反斜杠 / 空段与
/ 非
/ 超
一律不放行),返回**原始路径**(
只在出网那一发逐段做,界面上
念的也是原始那份),那一发 404 就回落
不炸。★ **编排没加发数**:那一发中文正文本来就是第 4 发,只是路径换了来源。 读数(10-07 12:5x,
):
下 **366 过 / 0 挂 / 2 跳**,基线 358 → **368 项**(逐套过数:
56→63、
55→56、
18→19、
26→27(跳的还是
,所以项数 27→28)、
54 与
20 **条数不变、内容改判** —— 前者现译那一屏的夹具改成吃
现造的
,后者
从读
改成遍历
;只报条数就会把这两套的改判漏记账)。 **十二发证伪**全红到位(
,圈
/
/
/
/
五个文件,逐条还原并逐字节比对,读数
):**[证伪] 12 条 / 未抓到红 0 条**,末行
。★ 首跑抓出**两条自己的假绿**:「绝对 URL 闸门撤掉」当场全绿 ——
那种被"空段"那一支**冗余挡住**了,补上无
的
/
坏形状才让这一支成为唯一防线;「宿主模型谎报只 serve desc」那一发**指错了套件**(植在
却跑
)—— 判据在另一套件里,等于没验。逐条归因表在 §9.2。 真机那一遍(10-07 12:5x~13:2x,
,读数全文
,图 3 张
.png,宿主日志 tmp/r15-host.log,第二路真回包两份 tmp/r15-ocr-live{,2}.json):出厂「免费接口」那一屏**只有「描述现译」一行**(图 68)、点「宿主模型」当场多出一行 摘要现译 关/开[on]且引擎行提示同步换话(图 69)、切回免费接口 又恢复成一行(★ **这一读数是第十五轮那一版的现状,第十七轮已改判**:现在五档都摆两行,那一屏待重启宿主后重拍);详情弹框(tester-army/e2e,图 70)节选 textLen:1,594、endsAtSentence:true、尾巴逐字 …report them to security@tester.army.,框 650×319/maxHeight:400.8px/ownScroll:false/dialogScrollable:false;第二路真回包 readmeSource:zh_file/readmePath:docs/i18n/README.zh-CN.md/整篇 8,869/zhCjk 330/ 节选 **1,586 且落在「。」上**,两次相邻refresh=1之间配额 **55 → 51** ⇒ 那一屏真发四发,与「4 发封顶」对上。本轮出网账api.github.com**10 发匿名 GET**、翻译那四个域名 **0 发**。 ⚠️ 诚实三句:**中途差点读错一次** —— 13:09 那一屏回的是cached:true + 节选 600 字,那行是 **12:24 旧进程写进库的**(cacheAgeMs 2,716,250),不是新代码产的;"库里那行旧"和"代码没生效"在两屏读数里长得一模一样,分清它俩的是 cached+cacheAgeMs + 进程创建时间三个数(tmp/r15-ocr.json就是那份**旧**读数,原样留着别当本轮证据)。★ 第二路这一发补的是**"详情载荷那一屏的zh_file 真回包"那一格**(zh_file此前只在 §9.1 的**数据源探针**里过过 —— ant-design 那份README-zh_CN.md走的是**根目录列表命中**那一版,本轮第一次是**第二路**命中的),**它补的不是zh_section**(后者本机仍 0 命中)。而 **第二路那两发吃的是合成档**(语言切换行按真机形状手写,只有"根目录没命中"那一头用 vitejs/vite的真清单,那一发 404 态真接口压根触发不了)⇒alibaba/open-code-review的真回包只留在tmp/,**没落进 test/fixtures/**。逐段 getBoundingClientRect仍欠(上面界面那节那条)。走查后环境已拆净(探针宿主 PID 12144 连同四枚无头 chrome 关掉、junction 先验ReparsePoint/Junction再[System.IO.Directory]::Delete 摘掉、package.json从tmp/bak/web-package.json.r15-before还原并cmp逐字节一致、prefs 只读回translateEngine:keyless、一次性 DOM 探针与浏览器目录删掉);**desktop 那台宿主我没替你重启**。 ★ **第十三件(回执带上厂商请求号 + 同屏一条失败句只念一次,2026-10-07 第十六轮):371 项离线用例走过,真机那一屏没造。** 这两件都是我自己上一轮递给你的旧账,你回的是「**按你推荐的来**」⇒ 按下面这两条落地;★ 顺带认一条:**我上一轮那句"request id 常正好被 .slice(0,200)切掉"说得不准** —— 旧vendorErr只拼code + msg,那串号**压根没进过回执**(三家还各放在不同格:腾讯 Response.RequestId、阿里顶层 RequestId、百度叫 log_id),所以本轮的修法不是放宽那 200,而是**把号认出来并排在最前**。 ① **请求号进回执且砍不掉**:vendorErr现在拼请求号 <号> ,号先截 VENDOR_ID_MAX=64再排最前 —— 调用点那句${statusNote}${errText}的slice(0, 200)砍的是尾巴,号排在HTTP 403 +请求号 + 64 = 77 字之内,**错误体再长也砍不到它**;没有号(百度那条真回包就没有log_id)时那三个字一个都不摆,不许拼出「请求号 」那种半截话。屏上那一行是 回执:HTTP 403 请求号 …,用户找客服时报得出号。 ② **同屏只念一次**:repoSections里摘要段的sub(失败句)与 num(回执:…)两块**按字面跟着描述段去重** —— 两路现译走的是**同一个**当前档(pickTranslator只选一个服务),它挂掉时两处逐字相同,那句话讲的是那一档的事实不是这一路各自的事实。★ 去重只按"已在屏上的字面"逐格判:原因不同(描述挂在传输、摘要too_long)时各说各的;两块都撤了**段仍摆**,段名「中文摘要 · 没取到」本身是新信息(撤成整段不摆就是把一次失败说成没失败;★ **第十七轮**那一句段名跟着档位走,失败行没有引擎 ⇒ 现在念「**中文现译** · 没取到」,成功行才分「中文摘要 / 中文节译」)。载荷键一格没撤(summaryNote/summaryErr 照给,只是不再重复上屏)。 读数(10-07 15:4x,tmp/rerun-r16.txt):SKIP_LOCAL=1 下 **369 过 / 0 挂 / 2 跳**,基线 368 → **371 项**(repo 63→64、client 54→55、web-translate项数 29(过数 28,跳的仍是wt-27);api/host-compat/llm一字未动);★ 不带SKIP_LOCAL 的直跑(tmp/rerun-r16-full.txt):**371 过 / 0 挂 / 0 跳**(hc-17、wt-27 这一次都通,满绿不保证复现)。 **十一发证伪**全红到位(tmp/r16-falsify.mjs,只圈 lib/services/web-translate.js与lib/services/repo.js,读数 tmp/r16-falsify-out.txt):**[证伪] 11 条 / 未抓到红 0 条**,末行 [还原 ok]。★ 这一轮的电池专门做了**两头**:repo.js那五条改动先在repo套件里红,其中两条**另在client套件各跑一遍**(同一条屏上的话由宿主拼、由客户端摆,第十五轮踩过"植入的文件与跑的套件对不上 ⇒ 判据等于没验");「号排回正文尾巴」那一发当场红在wt-29的**顺序**那一头(三家夹具各断一句startsWith('请求号 …')),而同一用例的**第二头**钉的是预算 —— 最坏那一发(403 + 64 字顶满的号 + 约 700 字错误体真走假 net)断言回执 ≤200且^HTTP 403 请求号 R{64} :只写头一头会漏另一头。 ⚠️ 诚实两句:**这一轮没有真机截图,也不能写成"过了真机"** —— ①那一屏要一次**真的厂商失败**,本机发得出它的只有你家库里那三把真凭据(我不会拿它去发坏签名);②那一屏要 host_llm档**两路同时挂**,而你这台宿主的模型是就绪的,我不会为了造现场把它弄成不可用。两屏都并进那条欠着的走查清单(详情逐段 rect + 深色外观 +6/72小时档 + 第十四轮那张名次徽章活宿主屏):**哪天你自己撞上"翻译接口回了错误",那一行开头就该是回执:HTTP xxx 请求号 …** —— 那串号能直接报给厂商客服,截图给我我就把这格划掉。代码本轮只动这两个文件,载荷形状、schema、出网账一字未动。 ★ **第十四件(摘要现译放回来,2026-10-07 第十七轮):372 项离线用例走过,真机那一屏没截。** 你递的是设置页那一屏:切到腾讯、阿里、百度、免费接口任何一档,**「摘要现译」那一行都不在**(那张聊天截图没落进 tmp/shots/,本轮没编号 —— 它是**这轮要修的现场**,不是本轮的验收读数),原话「**我前面是有摘要现译的,你在哪一次改坏了,给我放出来**」+「**前面我使用免费接口都翻译了摘要,什么做不了**」⇒ 这一轮是把第十五轮③那道**档侧能力闸**撤掉,不是加新功能: ① **放回那一发**:lib/services/web-translate.js的SERVED_KINDS从['desc']改回['desc','readme']⇒kinds() 两路都报,enabled('readme')仍只看llmReadme 开关(放回不等于自动派活,额度还是用户点开的);api.js那道want('readme') 与**两道源侧闸门**(descSelfZh、readmeSource === 'en_default')一字未动 ⇒ 中文篇 README 依旧不白花那一发。 ② **不挂假名(本轮唯一保留的口径)**:翻译四档给的是节选的**逐字节译**,不是「整理成一段」的摘要 ⇒ 段名 summarySectionLabel(engine)(host_llm念「中文摘要」,其余四档念「**中文节译**」,失败行没有引擎、切不出档 ⇒ 念「**中文现译** · 没取到」),设置页那句说明switchRowLabel(key, engine)跟着档位走(行名**仍是**「摘要现译」,那正是你要放回来的那一行)。落款engine 吃的是**那一行自己的**(applyZh里?? 'host_llm' 只兜第八轮那批没这格的旧行),换档不会把旧的免费档译文署成模型口吻。 读数(10-07 16:0x,tmp/rerun-r17.txt/tmp/rerun-r17-full.txt):SKIP_LOCAL=1下 **370 过 / 0 挂 / 2 跳**,基线 371 → **372 项**(差值只在api 56→57:新那条钉的是"说明句跟着档位走、行名不跟着变";repo64 /client55 /web-translate28 /host-compat 21 **条数不变、内容改判** —— 前两套改成吃三档段名与两行开关,hc-18 从"翻译档只有一行"改成"两行",wt-28整条重写为"这一档 serve 两路");★ 不带SKIP_LOCAL的直跑:**371 过 / 1 挂 / 0 跳**,挂的仍是wt-27免费档**真出网**那一发回HTTP 429(外部限流,与本轮无关;上一轮同一条是通的 ⇒ 满绿不保证复现)。 **十二发证伪**全红到位(tmp/r17-falsify.mjs,圈 domain.js/web-translate.js/repo.js/api.js/client.js五个文件,读数tmp/r17-falsify-out.txt):**[证伪] 12 条 / 未抓到红 0 条**,末行 [还原 ok]。★ 首跑**没验成**一条:客户端那条锚点缩进抄错 ⇒ 报「锚点失效」而不是假绿(这条如实登记,改正后 12 条全红);③④那两组刻意做了**两头**(宿主拼段名跑 repo、客户端摆段名跑 client;服务的能力声明跑 web-translate与api两套)。 ⚠️ 诚实一句:**这一轮没有真机截图** —— 本轮动的是**宿主半边**lib/**,link:挂载下重载面板不算,要**重启 dsh desktop** 才看得见那两行开关与「中文节译」那一段(我不会替你重启,也不动你库里的 prefs 与缓存行)。两屏(设置页五档各两行开关 + 详情弹框那一段的段名与落款)并进那条欠着的走查清单(详情逐段 rect + 深色外观 +6/72 小时档 + 第十四轮那张名次徽章屏 + 第十六轮那两屏):**你重启后截给我,我就把这格划掉。** ★ **第十五件(README 有中文就不许译 —— 判据覆盖面补齐,2026-10-07 第十八轮):零行为改动,372 项复跑同数,抓出一条我自己的假绿。** 你的原话「**如果项目 readme 有中文,即使开摘要现译也不要翻译,只有英文的才翻译**」。核对结果是:**这条口径代码里已经在**(lib/api.js:321那道闸view.readmeSource === 'en_default' ⇒ 三档"已经有中文"的都不派:zh_default整篇中文 /zh_file抓到仓库另写的那份中文篇 /zh_section 整篇里嵌一段达标中文小节),所以本轮**没改行为**,改的是**判据与文档**三处: ① **判据覆盖面**:api那圈派活矩阵原先只在「**只开描述档**」的桩下摆中文形状 ⇒want('readme')恒假,那种行**测不到摘要闸门**(我第一版就往里加了一行zh_file,电池当场报它**假绿** —— 同族第七次:断言钉住了文本、没钉住前提)。改成在「**只开摘要档**」那一圈里**三档中文各钉一发**「jobs 必须为空」+ 各钉一发 self 段的档名,en_default 那一发仍派且喂的是节选。 ② **真库存对账**(tmp/probe-readme-zh-rows.mjs,只读、零出网、只打键与枚举不打行值,读数 tmp/probe-readme-zh-rows.txt):trans表 6 条readme:
里**有一条对不上档** ——alibaba/open-code-review有engine:keyless的摘要译文行,而它repo行现在记的是readmeSource=zh_file(zhCjk=330)。**对得上的解释**:那行 src 是 600 字(第十五轮"节选与判据窗口分家"之前的旧上限),行时刻 12:24、repo行时刻 18:26 ⇒ 它是**第二路还没落地那一版判成"英文篇"时留下的旧行**。★ 关键是它**现在不会被读出来**:闸门排在translate() 之前,不派活就连查表都不查 ⇒ 我不去删你那行库存(旧行留着还是"曾经谁译的"的账,删它得你点头)。 ③ **口径落档**:lib/api.js那段注释原先只点名zh_section,现在三档都点名并写清"只有默认篇是英文才译"。 读数:全量复跑与第十七轮**逐套同数**(SKIP_LOCAL=1 下 **370 过 / 0 挂 / 2 跳**,api仍 57 —— ★ **条数不变、内容改判**的那一套:矩阵那一圈从 1 档中文扩到 3 档,加进去的行不增check()数,只报条数就会把这次改判漏记账)。证伪电池tmp/r18-falsify.mjs(圈 lib/api.js+lib/services/repo.js,读数 tmp/r18-falsify-out.txt)**7 条 / 未抓到红 0 条**,末行 [还原 ok]:闸门给 zh_file/zh_default/zh_section **各单独开侧门**(三发,验三档各自都真有现场、不是只有一条承重)、放宽成"有来源就派"(一发)、readmeZhVerdict 永说不是中文(repo 6 红)、pickZhSection 阈值抬死(repo 4 红)、第二路整条断掉(repo2 红)全被抓回。 ⚠️ 两条**没动的边界**(要动得先有真样本,别凭我判):一是阈值README_ZH_MIN_CJK = 20—— 整篇里汉字不足 20 且没有一段达标小节的**中英混排篇**仍算en_default(会译),当初定 20 的真读数是英文侧 ant-design2 / 中文侧 30、195、297;二是中文篇名字状README_ZH_NAME_RE与语言切换行 —— 仓库把中文篇放在子目录**又**没在默认篇里写链接时找不到(仍算只有英文 ⇒ 会译)。~~你说"这两种也要算有中文"我就去收窄,否则我留着这两个口径不动。~~ ★ **下一轮(第十九轮)你就说了**,这两条边界当场作废,见下面第十六件。本轮**行为一字未改 ⇒ 没有新真机现场**,第十七轮那两屏照旧欠着(要重启宿主)。 ★ **第十六件("这两种也算有中文" + 旧译文行删,2026-10-07 第十九轮):这次是真行为改动,376 项离线用例走过,同样没真机屏。★ 两件事里只做成了第一件 —— 旧行删掉后被在跑的宿主用内存态写回(④b/④c 记的是这一笔)。** 你的原话「**这两种也算有中文,旧译文行删**」⇒ 上一轮那两条"没动的边界"由你裁定作废,本轮做了两件事: ① **第三道源侧闸门readmeZhOnScreen(节选)**(判据在 lib/services/repo.js,常量在 domain.js,api.js 派活前调用)。两条来路各管你说的那一种:via='cjk'(节选里中日韩字符 ≥ **8** ⇒ 中英混排那档,真机 thedotmack/claude-mem 节选 9 字)/via='lang'(节选里出现「**中文**」两字 ⇒ 中文篇在子目录、第二路没抓到、手上只剩那行语言切换字样,真机 ant-design 英文篇整篇才 2 个 CJK)。★ **零额外请求**:吃的还是默认 README 那一发已经拿回来的那段节选,不猜路径、不许多打一发(60 次/小时那本账本轮没动);★ **零新增载荷键、零新增存储字段、repo 表 schema 一字未动**(第十轮那条「存储不可用」事故的律)。 ② **★ 档名律与闸门律分家(本轮最要紧的一条裁定)**:README_ZH_MIN_CJK = 20 **一个字没动** —— 那 20 管的是「默认 README 本身就是中文」**这句档名敢不敢说**;新的 8 只管「这段节选里已有中文 ⇒ 别派」。拿 8 去改 20 的后果是真读数:ant-design 英文篇整篇 2 个 CJK、claude-mem 那 9 个字**全是语言切换行的标签**(tmp/probe-zh-link-shape.txt)⇒ 那样改名等于档名说谎。两条律问的不是同一件事,阈值就该分开。 ③ **反面三条钉死(误挡一类就是删了你在用的那一屏)**:「**日本語**」不算中文(CJK 计数含假名,那 3 个字够不着 8 也不含「中文」⇒ 真机 m-abozaid/esp32-c3-adblock照旧派摘要);国名「中国 / 中國」不算声明;英文Chinese不认(Chinese tea 一大把)。命中时self 段名补那半句实话,两档各有字面(「(节选里已有中文)」/「(这行写着有中文版)」,宿主单点拼、客户端不重拼,client 那套黑名单盯着),★ 且**不许写成「所以没译」**—— 开关关着时同样不译,那句会把"没开"说成"不该译";zh_三档不补(中文由档名自己说)。 ④ **旧译文行删了一次,被在跑的宿主写回来了**(你点头的那一件,**这一件没做成**):库里trans表那条readme:alibaba/open-code-review(engine:keyless,而该仓现在记的是 zh_file/zhCjk=330)。做法两道闸都守住了:整文件备份 tmp/gh_trending.json.bak-20261007-192307(sha256 逐字节一致)+ 只有「JSON.parse再stringify(按库存自己的缩进档)与原文**逐字节相同**」才落盘,否则一字不改地退出(脚本 tmp/delete-stale-readme-row.mjs,默认干跑,只打键与枚举、不打行值)。19:24 的回执 trans 9 → 8|repo 16 行未动|其余各格逐字一致 ok,那一刻对账 readme:**5 条全部**en_default。 ④b ★★ **但 19:26:37 宿主那一写把整份内存态落回文件**(同批新增 37 条 events、state 三行刷新、seen+4 —— 它就在那儿跑着),19:33 复跑对账回落到trans 9 行 / readme:* 6 条,那一行原样在 ⇒ **文件层删一格而内存里那格还在,下一次落盘就还原。删它必须先把 dsh desktop 关掉**(我没替你关,也不动你的进程)。 ④c ★ **本轮最该记的一条是我自己的假读数**:动手前我用 tasklist过滤dsh/electron 判"宿主不在跑",据此把"可能被内存态覆盖"那句风险划掉了 —— 而宿主的进程名是 **DeepSeek Harness.exe**(PID 9500,10-07 18:25:01 创建),镜像名里 dsh与electron两个词都没有 ⇒ 那个过滤条件**结构上抓不到它**,判"宿主在不在跑 / 哪一版在应答"要按Get-CimInstance Win32_Process 的 **CommandLine** 匹配。★ 而「闸门排在 translate() 之前 ⇒ 旧行不查、不读、不上屏」那句仍然成立,所以它躺在库里不影响本轮行为。 ⑤ 读数(19:24 本机,tmp/rerun-r19.txt):SKIP_LOCAL=1 下 **374 过 / 0 挂 / 2 跳**,基线 372 → **376 项**。差额四条按圈记:api 57→**59**、repo64→**66**。★ 本套**第 8 次**撞自己立的坑:新那条 repo 用例名字里带「真机」⇒SKIP_LOCAL=1下**静默跳过并打 skip 1**,我一度以为它在跑 ⇒ 改名「两侧各用一条本机真读数钉边界」后才真进矩阵(要真出网的口径仍只归hc-17/wt-27)。 ⑤b **本轮出网账**:api.github.com **4 发**(tmp/probe-zh-link-shape.mjs:thedotmack/claude-mem与m-abozaid/esp32-c3-adblock各两发 =/contents/+/readme,只读、只打路径形状与 CJK 计数,不打正文也不打凭据),★ 另有 **2 次失败尝试**没打出可用读数(探针接线错,如实报差额不藏);**闸门与删行那两件事各 0 发**(闸门吃已在手的那段节选、删行是本地读写)。60 次/小时那本账本轮花 4。 ⑥ **八发证伪**(tmp/r19-falsify.mjs,圈 api.js/domain.js/services/repo.js,读数 tmp/r19-falsify-out.txt):**[证伪] 8 条 / 未抓到红 0 条**,末行 [还原 ok]:闸门撤除/阈值抬死/阈值降到 1/「中文」字样认法失效/放宽到 Chinese·中国/段名不补/那半句不分档乱补/闸门改吃库存 zhCjk全被抓回。★ **首跑第 ③ 条挂在别人的现场上**(阈值降到 1 时,同一个check()里lang 那条断言先炸 ⇒ "误挡日文"这个现场永远轮不到报红)⇒ 按「**证伪要在自己的现场上挂**」把反例**拆成独立用例**(api/repo 各一圈),拆完复跑才有那两行"红在自己的用例上";★ 拆圈的代价是条数上涨(api 58→59、repo 65→66),只报"新增一条用例"会漏记这一笔。 ⑦ ★ **一条能力边界如实登记(本轮没做)**:「中文篇在子目录、**默认篇里连那行都没写**」这种形状**没法零请求识别** ⇒ 猜路径就要多加一发,撞的是 60 次/小时匿名配额那条红线 ⇒ 只做「屏上那段有中文/那行写着有中文版」,不猜路径。~~另登记一条**没动的发现**(你裁定范围外):pickZhReadmeLink按名字排序取第一个 ⇒ claude-mem 那种形状会挑中docs/i18n/README.zh-tw.md(繁体)而不是 README.zh.md('-'(0x2d) 排在 '.'(0x2e) 前面)。~~ ★ **第十七件(第二十轮)把这条发现接住了**:你裁定「**使用 README.zh.md 这种**」⇒ 已落地,见下面那件;「不猜路径」那一条你也裁定了 **保持不做**。 ⚠️ 诚实一句:**这一轮没有真机截图** —— 本轮动的又是**宿主半边** lib/,link:挂载下重载面板不算,要**重启 dsh desktop** 才看得见(我不替你重启,除了④那一格是你点头才动的库)。要看的两屏是「混排篇/只剩切换行那两类仓库**不再多出**摘要段,且self` 段名尾巴上有那半句」+「日文篇那一屏照旧**给摘要」,与第十七轮那两屏一起并进欠着的走查清单:你重启后截给我,我就把这格划掉。
一条自我 correction
/tw|hant|hk/.test(base)
大小写归一
pickZhReadmeLink
base.toLowerCase()
变异也要单因
对照读数(只读、零出网)
thedotmack/claude-mem
repo
readmeSource=en_default
readmePath=README
zhCjk=9
at=2026-10-06 08:42:21
那发早于第十五轮第二路
不是验证过
重启后要点开它看的那一屏
这一轮也没有真机截图
lib/**
thedotmack/claude-mem
self
docs/i18n/README.zh.md
alibaba/open-code-review
docs/i18n/README.zh-CN.md
照旧没做成
trans 9 行 / readme:* 6 条
DeepSeek Harness.exe
tmp/
同一轮 21:3x 再对一次账(只读、零出网),有两处要把旧读数划掉
21:10:33 被重启过
DeepSeek Harness.exe
21:12:15
client.js
lib/api.js
lib/**
第十七、十九轮那几屏现在就在应答,不必再重启就能截
lib/domain.js
lib/services/repo.js
晚于那次重启
第二十轮那一屏还欠一次重启
readme:*
6 条
zh_file

下面的挂载步骤是给你确认用的。

方式 A:官方 CLI

dsh plugin --profile desktop add github:gh-gongjin/dsh-plugin-gh-trending

CLI 内部走 pnpm,需要 pnpm 在 PATH 里。本地目录同样可装:dsh plugin --profile desktop add <本仓库的绝对路径>。

方式 B:手工两步(不需要 pnpm)

  1. 编辑 profile 的 package.json(桌面版是 ~/.dsh/profiles/desktop/package.json,Windows 为 %USERPROFILE%\.dsh\profiles\desktop\package.json):

    • dependencies 增加:"dsh-plugin-gh-trending": "link:<本仓库的绝对路径>"
    • dsh.profile.bundles 数组末尾追加 "dsh-plugin-gh-trending"
  2. 在 profile 的 node_modules 下建目录联接:

    New-Item -ItemType Junction `
      -Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-plugin-gh-trending" `
      -Target "<本仓库的绝对路径>"
    
  3. 重启 dsh(宿主半边在启动时加载)。只改 client.js 的话刷新页面即可。

停用 / 卸载

临时停用:在 ~/.dsh/profiles/desktop/cordis.patch.yml 里加

- id: gh-trending
  disabled: true

界面

S2 起是六页签(交互照 modelwatch 的同源实现):页头(三榜状态胶囊 + 「立即检查」+ 该操作的回执)与页签条包成一块 sticky 常驻,滚到榜底也切得动签;六个签 总览 / 日榜 / 周榜 / 月榜 / 变化记录 / 设置,签上带该榜条数徽标(0 条、总览与设置不带徽标 —— 拿 0 冒充有数最坏)。

  • 总览:三榜状态 → 每榜前 3 名速览(名次徽章 + 仓库 + +新增)→ 跨榜同现,一屏看完「要不要点进某一榜」;卡头的「完整榜单 →」就是切页签。总览原先收尾在一张「最近变化」小结(前 4 条 + 「全部 →」),2026-10-05 用户口径去掉——流水就归「变化记录」那一签管,总览不重复养一份影子。
  • 日 / 周 / 月榜:各自一张 8 列大表(table-layout:fixed + <colgroup>:# 46 / 仓库 268 / 描述吃余量 / 语言 112 / 累计★ 64 / 本轮新增 72 / 位次变化 56 / 兜底 0,≤1000px 时仓库吃余量、描述定 160),卡头一行给「榜面数据 · 最近取回 」(坏榜改口「最近尝试」)与 显示 / 榜面 计数,这一张榜真有命中的描述时再追一句「· 描述中译为内置离线预译 · <日期>」(没命中就整段不出现,载荷的 label 换成别的界面就跟着变 —— 那句话读的是 snap.descZh.label,客户端不许自己编日期)。描述列:命中的行显示译文、悬停看得见原文(译文是预译的,读的人有权核对它翻的是哪一句),没命中的行仍是原文。
  • 变化记录:全量流水。设置:偏好 + 只读「运行环境」表(环境跟在设置里,不占一个签)。偏好里 出网方式 那行下面是现译引擎五档分段器(免费接口 / 百度 / 腾讯 / 阿里 / 宿主模型,★ 档名、顺序、当前档、这一档那句 engineHint、以及「这一档现在发不出去」那句 notReadyHint 全从 snap.translator 读,点一下即存,客户端不排表);只在选中有凭据那三家之一时多摆一行凭据(每档恰好两格、由 credFields[] 给出:AppID+密钥 / SecretId+SecretKey / AccessKeyId+AccessKeySecret。标识符那格是普通框、value 等于库里那份,密钥那格 type=password 且 value 恒空、从不回显 —— placeholder 说「库里已存(留空不改动)」而不是给你看那几个字;旁边那个「清除」只在库里这一档真有凭据时才出现(credStored),点了只发当前档那两格的空串,没凭据时它压根不摆;留空的密钥框不进 patch,进了就等于清除,那是旁边那个按钮的语义);凭据行下面紧跟注册那一行(百度 1 个链接、腾讯/阿里各 2 个 —— 开通入口与密钥管理分开,全部 target=_blank rel=noreferrer,★ 只跟当前选中的那一家,别家的 URL 出现在这一屏即红;那句额度话不念具体数字,只指向官网计费页);再下面才是现译开关行(★ 第十五轮:行清单是载荷给的 —— snap.translator.switchRows[],每行 {key,kind,row,label,on} 五格,客户端只念 key/row/label/on 四格,一行代码都不排表;当前那一路 kinds() 报什么 ⇒ 屏上就摆什么(★ 第十五轮那四档只报 desc、只有 描述现译 一行;第十七轮用户改判放回 ⇒ 五档的 kinds() 都报 desc+readme,两行开关五档都在,行名 摘要现译 不跟着档位变,只有那句 label 跟着变:翻译四档念「README 英文节选译成中文(这一档只做翻译,这一段是节译不是摘要)」,宿主模型 念「README 英文节选另给一段中文摘要」)。同一套分段器类名 .gt-seg,点一下即存,没有草稿态;这些行只管「要不要」,「能不能」只在上面引擎那一行说一次;「这一路压根没有摘要能力」这件事由那一行不出现来说(★ 第十五轮那句作废:现在由那一行的说明句来说 —— 撤掉一行等于删了用户在用的那一屏;仍然不许客户端自己补行:载荷没给 switchRows 的旧宿主整段不摆,点了没用的控件比没有更糟 —— 那说的是载荷里没这一格,与档位无关)。出网方式 是三档分段器 + 一个地址框(草稿,点「保存」才发),切到 自定义地址 时模式与地址一起发——只发模式会拿旧地址出网,只发地址则可能压根没在用自定义。详情缓存那一行(★ 第十二轮)与检查频率同形状:四档分段器 6 小时 / 12 小时 / 24 小时 / 3 天、出厂 24 小时,档位与话术都从入口载荷读(cacheHours / cacheHourLabels,客户端一个字不写)、点一下即存;★ TTL 在服务侧调用时现取现算 ⇒ 改档后下一发详情就按新档判新鲜,不必重启宿主;档位外的值 POST /api/prefs 直接 400(不许悄悄回落 24 —— 那等于库里一个值、分段器上另一个值);失败档那 5 分钟不进设置页(故障保护不是给用户调的配置)。运行环境第一行是 传输路径:最近那一发到底走了哪条路(代理隧道 · Windows 系统代理 · http://127.0.0.1:7897 / 直连 · 设置页选了直连 / 没能出网 · <原因>),整句由宿主拼好,客户端只搬字;没出过网之前这一行干脆不出现。
  • 没有自动弹出的提示层(toast / 通知):所有错误、降级、保存反馈一律就地落在那张卡上;「立即检查」的回执落在页头,因为按钮在页头 —— 页签化之后若回执仍只活在某一签里,点完按钮的人当场看不到下文。唯一的浮层是点仓库名才出现的详情对话框:它不自己冒现。★ 对话框的内容从第十一轮起是段表直通:宿主把 sections[] 一次拼死(四段 项目是什么 / 热度与元数据 / 仓库自己怎么介绍它 / 中文摘要,每段一组带 kind 的块 p/sub/num/excerpt),客户端只按 kind 挑类名摆(.gt-modal-sec 装段、.gt-modal-h2 是段名、.gt-modal-p / gt-sub / gt-num 逐级加重、excerpt 走带框那条 .gt-modal-readme),不重拼句子、不自己排段序、数字只从 heat 段那一张 gt-modal-facts 出来(同屏一个数只出现一次);现译那两句(中文描述 / 中文摘要)也落在段里,不另立一套视觉语言。 ★ 第十二轮(用户裁定「把这个页面上的废话都去掉」)把四段各自的"来源落款"整句撤了:段对象只剩 key/label/blocks/facts 四格(source 那一格连同 REPO_SECTION_SOURCE_NOTES 那张表一起删), "这一份是谁写的 / 那一句是谁译的"并进段名说(仓库自己怎么介绍它 · 默认 README 是英文、仓库自己怎么介绍它 · 默认 README 里有一段中文说明(小节「…」)、中文摘要 · 免费接口 · 10-07 09:5x ★ 这一个是第十五轮之前的真读数,那时段名不分档;第十七轮(10-07)起段名跟着那一行自己的引擎走:宿主模型 才念「中文摘要」,翻译四档念「中文节译 · 免费接口 · …」,失败行念「中文现译 · 没取到」),README 那行落款压成一行短字面 节选 54 / 整篇 4,235 字 · 已去标记 · README。 ★ 第十五轮:那一行短字面没改形状,改的是节选本身 —— 旧版拿"数中文的那 600 字窗口"当节选交出去,README_EXCERPT_MAX=1600 那道预算从来没生效;现在窗口只服务判据,节选吃去标记后的整篇,并且在句子边界收口(真机那屏断在 Install Ask your a)。真读数:节选 1,594 / 整篇 4,802 字 · 已去标记 · README(tmp/shots/70-r15-detail-excerpt.png)与 节选 1,586 / 整篇 8,869 字 · 已去标记 · docs/i18n/README.zh-CN.md(第二路真回包 tmp/r15-ocr-live.json)。 撤的是解释,不是事实:「不是现译」那个标签、仓库原文那一句(译文永不替换原文)、页脚那行 GitHub 配额,三件都照旧在屏上。 ⚠️ 诚实一句:「四段摆出来好不好读」的判据这一件(类名逐字 + 块序 + facts 归属 + 段对象只四格 + 那四句旧落款一句都不在屏上)在第十一、十二轮只有离线判据,旧那三张 tmp/shots/42-detail-*.png 是第八轮「一整句叙述」那一版的图、别拿它们当第十一轮的读数;★ 第十五轮(10-07)补上了活宿主那一屏的截图与弹框几何(tmp/shots/68~70-r15-*.png:设置页两档各有几行开关、详情弹框 650×319 / maxHeight 400.8px / 弹框自身不滚),但"逐段 getBoundingClientRect"仍然欠着 —— 每一段吃多高、sub/ 墨迹深浅差、 的边框与内边距,那一遍没量 ⇒ 挂在 §9.3 未验证清单第十一轮那条。
  • 名次徽章、新面孔 标签(本机首次上榜)、原 owner/name 标签(改名)、无描述显示 —;数值列走 tabular-nums 并用 fixed 表模板定宽(余量给描述列,不是给末尾空列 —— modelwatch 的真机大空隙事故)。 ★ 第十四轮起徽章分四档(用户口径「榜单前三名也加上这种徽标和颜色,好区分一点」,附 modelwatch 截图):.gt-rank 只做底座(22×22 / 圆角 8 / 11px·700 / tabular-nums),底色一律由档类给—— .gt-rank-1/2/3 金 #e8b530 / 银 #c3c9d2 / 铜 #cf9a63(三档色值与 modelwatch 的 .mw-rank-1/2/3 逐字相同,改一处要连着改另一处),.gt-rank-n(第 4 名起)走宿主令牌 --gt-soft/--gt-faint/--gt-line; 选档单点在 RankBadge(Number.isFinite(n) && n>=1 && n<=3,坏名次一律落中性档,不许把 NaN 拼进类名),榜页 8 列表格与总览速览两处渲染点共用它(判据 client-54 三头:单点类名 / 两处渲染点各带档类 / CSS 规则逐字)。
  • 「榜面数据 」与「最近取回 」分两条写:拿到 304 时只有后者在动,混成一条就会把陈旧数据念成新数据。反过来,取回失败那一轮 lastFetchAt 也照推(它是发起时刻),所以坏榜上这条改口念「最近尝试」,不然就把没取到的东西念成了刚取到。
  • 当前签靠字重 + 近黑下划线(--gt-fg)分主次,不拿招牌色表意(蓝色留给链接、红/黄留给状态);页签条不留横向滚动(第九轮撤掉了那句 overflow-x:auto —— 六个签在 1088px 的栏里 scrollWidth === clientWidth,那条竖 scrollbar 是纯噪声,判据挂在 client-38),三榜速览靠 auto-fit 收列,不新增断点。页头的回执同样走中性档:跑完一轮是告知不是状态,三榜全红时再抹一道绿就是两头打脸。

节拍与存储

默认 1 小时一轮,档位封闭集合 [60, 180, 720, 1440];启动 5 秒后自动跑第一轮(autoCheckOnStart 可关)。 连坏时节拍按 2^N 翻倍,指数封顶 4 轮、绝对封顶 4 小时:封顶只算绝对毫秒,不改用户的档位语义(选 24 小时的就真是 24 小时起)。 传输类失败(连不上/超时)在同一次检查内先补发(单榜最多 3 发,间隔 1 秒,成功即停),补发次数拼进故障文案,界面照读。 配置类失败(代理地址解析不出来)一律不补发:同一份坏配置补发三次只是把三发变九发。 出网前每一发先仲裁一次路线(设置页自定义 > 环境变量 > Windows 注册表 > 直连):注册表读一次缓存 60 秒,改偏好即作废; 读不到注册表如实写「读不到系统代理」并按直连走 —— 读注册表失败不是网络故障,别把两件事混成一条红。 宿主 ctx.timer.interval 优先,缺了退 setInterval(unref + dispose 显式清 —— 宿主给的是 disposer 函数,对它调 clearInterval 是静默 no-op)。 本机口径(2026-10-05 19:12:41 从运行中的 desktop 宿主拉的 snapshot):实测走的是宿主那一档(caps.timer:true)⇒ setInterval 兜底档在本机没有真机样本, 而修复版已在真机上活满了一个节拍:20:05:37 那一拍响,20:06:35 读到 nextCheckAt 前移到 21:05:37(整 +60 分钟)、events 70→71(新那条 board_exit 带 20:05:40.839),崩溃日志目录 19:05 之后无新文件; 兜底档那半仍然没验过,两档不许说成"都验过"。原文 snapshot 留在 tmp/snapshot-desktop-20261005.json,响后那份与逐分钟读数留 tmp/tick-desktop-after.json / tmp/tick-watch.log。 ★ 挂进定时器的那个回调只能调闭包里的具名函数:真机 desktop host 上它响了一次,回调里的裸 run() 找不到(那时 run 只是 return {…} 里的一个方法)⇒ ReferenceError 从 Timeout.tick 直接落进宿主的 uncaughtException,整个 IDE 弹「应用无法启动或已意外停止」。 闸门的忙时分支仍是 rejected promise,被回调自己的 .catch 接走 ⇒ 定时轮撞上手動轮只留一行告警。诊断与三条回归用例见 docs/design-spec.md §9.3 第四轮。

存储走 ctx.storageDomain,域 gh_trending,六张表同域:state(按榜分行)/ events(只追加 + 裁老)/ prefs / seen(观测史)/ repo(仓库详情缓存,LRU 裁到 REPO_CACHE_MAX 行)/ trans(现译译文,键 kind:小写 owner/name,LRU 裁到 TRANS_MAX 行)。 域名排他(同名重复 open 报 already-open),所以 open 收口成 WeakMap + refcount 登记表,最后一个持有者放手才真关域。 ★ 域 version 保持 1:加一张表不是抬版本的时机。宿主整档布局按 stored !== descriptor.version 直接抛 version-mismatch(@deepseek-ai/dsh-storage-json 的实现,实测口径),compatibleVersions 只管 per-record 布局 —— 抬到 2 会让本机已经攒下的榜史与偏好整个打不开,而库里少一张表本来就是空表起步。

API 面

GET /gh-trending/api/snapshot、GET /api/stream(SSE,首帧 snapshot、检查完 update = 全量快照)、POST /api/check、 GET /api/events?limit=&board=、GET|POST /api/prefs、GET /api/repo?name=owner/name[&refresh=1]。 写操作只接受本机回环(连 x-forwarded-for 链每一跳都要是回环),纯读面板的 GET 不闸以便排障; 唯一一条闸的 GET 是 /api/repo —— 它读的是本地缓存,但缓存过期那一发要打 api.github.com,花的是匿名按 IP 计的额度,让局域网邻居点你的面板刷额度不合理。 /api/repo 的载荷是 applyZh 出边界的那 21 键(★ 第十一轮撤掉整段叙述那五格后从 26 变 21;整句中文与段落形状由宿主拼:sections(四段段表,唯一句子出口)/ error,旧的 narrative / facts / flags / readmeLabel / readmeMeta 五格已整段撤掉,客户端不补判定); zh 那七格恒在(开关关着、B 命中、模型没回都给齐七键,空的是 '' / null,不是缺键),而 repoView 自己那一格 sectionFields(宿主重拼段表唯一能吃的口径)在 applyZh 一进来就被解构删掉、不出边界(缓存命中与刚取回两条路在 builder 里同形、sectionFields 两边都留着,那一刀只在 api 边界切); 坏名字(不是 owner/name 形状)在造 URL 之前就被拦下,回 ok:false + errKey:'bad_key',一个字节都不出网(也不去喂模型)。

GET /api/snapshot 是界面的唯一一份真相:每榜带 transport(本轮失败是不是传输类)、顶层带 transportHint(那句话的宿主单点文案)、 net = {via, viaLabel, source, sourceLabel, proxy, reason, targetHost, at, status, text}(最近一发仲裁出来的路线,整句 text 由宿主拼好)与 cadence = {intervalMin, effectiveMs, backoffExp, nextCheckAt, fetchAttempts}(检查服务缺位则给 null)。客户端只渲染这些字段,不自己补判定。 net.status 是 ok|err|idle 三档圆点:判的是"这条路通没通"(有榜且坏榜都属传输类才算红),不是"这一榜有没有数据"——transportHint 仍只在坏榜 transport===true 时才念那句来源。


测试

零依赖:node:assert/strict + 自研 check(name, fn),node test/<x>.test.mjs 直跑,无测试框架、无 npm script。

for f in test/*.test.mjs; do node "$f"; done          # 391 项用例(十一套;含两条要真出网的口径)—— ★ 直跑那两份通与不通都出现过,见下面读数
SKIP_LOCAL=1 node test/host-compat.test.mjs           # 跳 hc-17(声明真机口径)
SKIP_LOCAL=1 node test/web-translate.test.mjs         # 跳 wt-27(真发一发免费档)

当前读数(2026-10-07 21:0x 本机复跑,第二十一轮「匿名 60/h ⇒ 一小时最多 15 个仓库,设置页加一个 GitHub 令牌抬到 5000/h」那一遍,原文 tmp/rerun-r21.txt):SKIP_LOCAL=1 下 389 过 / 0 挂 / 2 跳,逐套 gh 19 / net 22 / store 40 / repo 76 / check 39 / api 61 / client 57 / host-compat 21(+1 跳)/ desc-zh 7 / llm 19 / web-translate 28(+1 跳,项数 29)⇒ 基线 378 → 391 条。 ★ 差额 +13 分四套(按圈记,不是"新增十三条用例"这么轻):repo 68→76 = 默认零凭据那一圈(不填 ⇒ 每一发没有 authorization)+ 填了 ⇒ 四发各带一条 Bearer 且 URL 一个字节不变、域也不变 + 空格等于没填(请求头与视图两侧 trim 同口径)+ 上限吃 x-ratelimit-limit 那三种形状(回 5000 换档 / 仍回 60 照念匿名 / 代理吞头退回保守那一格)+ 门面 rate() 的 limit 与 label 跟着换档 + 令牌现取现算(改偏好不用重启,清空后下一发就不带);api 59→61 = githubView 只给 has 布尔不给 value(说明句与「去哪创建」全来自 domain)+ 快照里 github 那一格恒在(客户端没有兜底表,缺键就是白屏不是少一行);client 55→57 = client-56 令牌行三形状全吃 snap.github、密钥格永不回填、「清除」只在存过时摆 + client-57 配额那句只从宿主的 rate.label 来;host-compat 20→21 = hc-21 接线(装配处出现 const *token* = 那种抄死即红、令牌读者清单从 import 边派生、界面不许抄「匿名/已认证」那两个词)。 ★ 另两圈条数不变、内容改判:store 那两条(凭据格清单从手抄六格改成吃 PREF_CRED_FIELDS 那份派生表 + 那条新增键自查改用「上一版行形状只缺 ghToken」—— 拿第十三轮那起「存储不可用」血案当尺子);api 旧那条「密钥不回显」里的 secretKeys.length === 3 翻成 deepEqual 派生四把(★ 手抄一个数就等着漏扫新增那把)。 ★ 证伪电池 tmp/r21-falsify.mjs(圈 domain.js / lib/stores.js / lib/api.js / lib/services/repo.js / index.js / client.js)16 条 / 未抓到红 0 条、末行 [还原 ok](读数 tmp/r21-falsify-out.txt):① 无条件带头 ② 接线漏发 ③ 令牌拼进 URL(行为侧)③b 同一个植入换 hc-7 那条静态判据(★ 这一发是"那条静态判据不是摆设"的非空转证明,同族第八次兑现)④⑤ 两侧 trim 各缺一半 ⑥ 上限钉死不看头 ⑦ 把"带没带头"排在响应头之前(坏令牌报成"已认证"= 把没生效说成生效)⑧ 丢掉吞头那条退路(少报也是谎)⑨ 读不到上限不退回出厂那一格 ⑩⑪⑫ 三处清单退回手抄 ⑬ 视图多给一格 value ⑭ 装配时锁成常量 ⑮ 界面自己抄那两个字。★ ⑩ 首跑红在另一条断言上(记录校验失败:GitHub 令牌…过长(318 字,上限 256 字),不是我预期的那格)⇒ 挂反了也是挂,这一条如实登记。 ★ 本轮出网 0 发:本机没有 GitHub 账号也没有令牌,一切"填了令牌"的形状都吃假 net.fetch。★ 5000 那个数字在本机是合成的(历次真回包只见过 60,那条 5000 的头是喂进去的)⇒ 界面上「已认证配额 / 5000」这一屏永久验不到,可验的那半是**"填一个坏令牌 ⇒ 那句必须仍念『匿名配额』"(repo 那一圈第 5 条钉的就是它)。载荷只多 github 一格、repo schema 未动、version 仍钉 1(ghToken 走 optional + clampPrefs 补默认,第十三轮那条律一个字没松)。 ⚠️ 同样没截真机屏(动的还是宿主半边 index.js + lib/** ⇒ 要重启 dsh desktop** 才看得见,我不替你重启、也没动你的 prefs 与库存行),第十七、十九、二十、二十一轮那几屏挂在 §9.3 同一条清单上。

上一份读数(2026-10-07 20:1x 本机复跑,第二十轮「使用 README.zh.md 这种」挑篇优先档那一遍,原文 tmp/rerun-r20.txt):SKIP_LOCAL=1 下 376 过 / 0 挂 / 2 跳,逐套 gh 19 / net 22 / store 40 / repo 68 / check 39 / api 59 / client 55 / host-compat 20(+1 跳)/ desc-zh 7 / llm 19 / web-translate 28(+1 跳,项数 29)⇒ 基线 376 → 378 条。 ★ 差额只在一套:repo 66→68 = zhVariantRank 那一圈(三档封闭 + 目录名不参与 + 子串不算命中 + 两份名单不许交集 + 简繁同时命中按繁体)+ 「两路挑篇共用同一条优先档」那一圈(同一件事在 pickZhReadme 与 pickZhReadmeLink 各钉一次,外加"只有繁体时照旧挑中"那两条反面)。★ 另有一圈条数不变、内容改判:pickZhReadmeLink 那条旧断言「多条命中按名排序」把"繁体那份赢"钉成了规矩 ⇒ 本轮就地翻案(同第八轮 provider:undefined、第十七轮 wt-28 那一族)。 ★ 证伪电池 tmp/r20-falsify.mjs(圈 domain.js / services/repo.js)9 条 / 未抓到红 0 条、末行 [还原 ok](读数 tmp/r20-falsify-out.txt):两路各退回字面排序 / 两路各把排序做成过滤 / 词元从整条路径切 / 词元换子串 / 简繁先后调换 / 丢掉 tie-break / 两份名单撞车。★ 一条自我 correction:首跑第 ⑥ 条(词元换子串)的植入写成 /tw|hant|hk/.test(base) —— 顺手丢了大小写归一,一发变异同时动两维、连带把 pickZhReadmeLink 那一圈也炸了 ⇒ 改成单因(base.toLowerCase())复跑后,红只落在该落的那条断言上。变异不单因,读数就在同时说两件不同的事。 ★ 同轮只读对账(零出网,吃本地库存):thedotmack/claude-mem 那行 repo 记 readmeSource=en_default / readmePath=README / zhCjk=9 / at=2026-10-06 08:42:21 ⇒ 早于第十五轮第二路,所以"改完挑简体那份"在活宿主上从来没跑过,这一条是待截图不是已验。★ 第十九轮那件"旧译文行删"这一轮 20:0x 复跑对账照旧是 trans 9 行 / readme:* 6 条(宿主 5 个 DeepSeek Harness.exe 进程 18:25 起在跑)⇒ 仍未做成,等你关掉 dsh desktop。 ★ 本轮出网 0 发(判据吃第十九轮那 4 发留下的读数 + 本地库存),载荷键与 repo schema 零增量;⚠️ 同样没截真机屏(宿主半边 ⇒ 要重启 dsh desktop,我不替你重启),第十七、十九、二十轮那几屏挂在 §9.3 同一条清单上。 ★ 顺手抓到一条旧账(如实登记,不藏):下面那张逐套表里 repo 与 api 两格的数字停在第十八轮(64 / 57),而第十九轮其实已经是 66 / 59 —— 那一轮只在正文记了差值、没补表头。本轮已按现读数补齐(68 / 59)。⇒ 台账里"正文与表格是两处真相"这种形状和代码里的同一句,判据一样:改一处必须扫另一处。

上一份读数(2026-10-07 19:24 本机复跑,第十九轮「这两种也算有中文」第三道闸门那一遍,原文 tmp/rerun-r19.txt):SKIP_LOCAL=1 下 374 过 / 0 挂 / 2 跳,逐套 gh 19 / net 22 / store 40 / repo 66 / check 39 / api 59 / client 55 / host-compat 20(+1 跳)/ desc-zh 7 / llm 19 / web-translate 28(+1 跳,项数 29)⇒ 基线 372 → 376 项。 ★ 差额四条按圈记(不是"新增两条用例"这么轻):api 57→59 = 第三道闸门命中圈(两形状各钉 jobs 为空 + 段名后缀)+ 反面独立一圈;repo 64→66 = readmeZhOnScreen 命中圈(真读数钉两侧余量:9 挡 / 3 不挡、7 不算 / 8 算)+ 反面独立一圈(日本語 / 纯英文 / 空串 / 中国·中國 / 英文 Chinese)。 ★ 本套第 8 次撞「用例名含『真机』⇒ SKIP_LOCAL=1 静默跳过」:新那条 repo 用例一度报 skip 1 而我以为它在跑 ⇒ 改名「两侧各用一条本机真读数钉边界」;要真出网的口径仍然只归 hc-17 / wt-27 两条,别的用例名里不许再出现"真机"两字。 ★ 证伪电池 tmp/r19-falsify.mjs(圈 api.js / domain.js / services/repo.js)8 条 / 未抓到红 0 条、末行 [还原 ok](读数 tmp/r19-falsify-out.txt)。★ 首跑第 ③ 条挂在别人的现场上(阈值降到 1 时同 check() 里 lang 那条先炸,"误挡日文"轮不到报红)⇒ 反例拆成独立 check 后复跑,③ 现在红在「attachZh:第三道闸门的反面 —— 「日本語」…」」、⑤ 红在「readmeZhOnScreen 的反面:…」—— 这是「**证伪要在自己的现场上挂**」那条律的第 8 次兑现。 ★ 同轮**库存对账**(tmp/probe-readme-zh-rows.mjs只读、零出网):19:24 删掉那一行后trans表 5 条readme:**全部**readmeSource=en_default([对账 ok]),★ 但 **19:26:37 被在跑的宿主用内存态写回**(19:33 复跑 ⇒ readme: 又 6 条,alibaba/open-code-review 那一条原样在)⇒ **"旧译文行删"这一件没做成,要等宿主关掉再删**(下面第十九轮那份读数与第十六件 ④b 记的是同一件事)。 ★ 本轮**没截真机屏**(动的又是宿主半边,link:` 挂载要重启 dsh desktop,我不替你重启),下面那两份读数的"欠截图"账一起挂着。

上一份读数(2026-10-07 18:3x 本机复跑,第十八轮「README 有中文就不派摘要」补判据那一遍,原文 tmp/rerun-r18.txt):SKIP_LOCAL=1 下 370 过 / 0 挂 / 2 跳,逐套 gh 19 / net 22 / store 40 / repo 64 / check 39 / api 57 / client 55 / host-compat 20(+1 跳)/ desc-zh 7 / llm 19 / web-translate 28(+1 跳,项数 29)⇒ 基线仍是 372 项,与上一份逐套同数。 ★ 同数不等于同内容:api 那一套里 attachZh…摘要档只认 en_default 那条改判了 —— 三档中文(zh_default / zh_file / zh_section)原先只在「只开描述档」的桩下摆(那种形状 want('readme') 恒假,闸门坏了也测不到 ⇒ 我第一版新加的那行被电池当场判成假绿),现在各在「只开摘要档」那一圈钉「jobs 为空」+ 各自的 self 段档名。check() 条数因此不变(矩阵里的行不是新用例)。证伪电池 tmp/r18-falsify.mjs 7 条 / 未抓到红 0 条(三档各单独开侧门 + 整闸放宽 + 两处中文判据 + 第二路断掉,读数 tmp/r18-falsify-out.txt),末行 [还原 ok]。★ 本轮行为一字未改 ⇒ 没有新真机现场,第十七轮那两屏照旧欠着。

上一份读数(2026-10-07 16:0x 本机复跑,第十七轮摘要现译放回那一遍,原文 tmp/rerun-r17.txt):SKIP_LOCAL=1 下 370 过 / 0 挂 / 2 跳(hc-17 与 wt-27,逐套 gh 19 / net 22 / store 40 / repo 64 / check 39 / api 57 / client 55 / host-compat 20(+1 跳)/ desc-zh 7 / llm 19 / web-translate 28(+1 跳,项数 29))⇒ 基线 371 → 372 项。 ★ 差额一条:api +1(新那条 switchRows 那句说明跟着档位走 钉的是本轮仅剩的那道口 —— 行名不变、说明句与段名跟着档位走;外加一条反向:服务没声明 kinds() 时一行都不摆,而这与档位无关)。四套条数不变、内容改判:repo(段名三档词都收:中文摘要 / 中文节译 / 中文现译 · 没取到)、client(client-49 两行开关 + 说明句跟档位、client-51/55 找段改吃 summaryAny)、host-compat(hc-18 翻译档也返回两行)、web-translate(wt-28 整条重写:这一档 serve 两路,llmReadme 开着就真译、关着连网都不碰)。 ★ 本轮电池 tmp/r17-falsify.mjs(圈 domain.js / web-translate.js / repo.js / api.js / client.js 五个文件)12 条 / 未抓到红 0 条,末行 [还原 ok],输出原文 tmp/r17-falsify-out.txt。★ 首跑有一条压根没验成:客户端那条的锚点缩进我抄错(12 空格 vs 文件里 10 空格)⇒ 电池报的是「锚点失效」而不是假绿,改正后重跑才成 12 条 —— 这一条如实登记:锚点命中数必须打出来,否则"改动没落地"和"判据没承重"在输出里长得一样。③④两组做了两头(宿主拼段名跑 repo、客户端摆段名跑 client;服务能力声明跑 web-translate 与 api 两套),其中"真服务只报 desc"那一发红在 api 的桩=真服务对齐那条上,不是我以为的选路那条。 ★ 同轮不带 SKIP_LOCAL 的直跑(原文 tmp/rerun-r17-full.txt):371 过 / 1 挂 / 0 跳 —— 挂的是 wt-27 免费档真出网那一发回 HTTP 429([web-translate] pass 28 / fail 1),与本轮改动无关,是外部限流;上一轮同一条是通的 ⇒ 口径照旧:满绿在任何一份上都不保证复现。

上一份读数(2026-10-07 15:4x 本机复跑,第十六轮两件旧账那一遍,原文 tmp/rerun-r16.txt):SKIP_LOCAL=1 下 369 过 / 0 挂 / 2 跳(hc-17 与 wt-27,逐套 gh 19 / net 22 / store 40 / repo 64 / check 39 / api 56 / client 55 / host-compat 20(+1 跳)/ desc-zh 7 / llm 19 / web-translate 28(+1 跳,项数 29))⇒ 基线 368 → 371 项。 ★ 差额三条一条一件的两头:web-translate +1(wt-29 请求号那条,含"最坏情况"那一发:403 + 64 字顶满的号 + 700 字错误体,量的是那串号在调用点 slice(0,200) 之后还活不活着)、repo +1(同屏去重那条:同字面撤、原因不同照给、只重一句时按格撤、描述没派活时一句不少)、client +1(client-55:同一句话在整屏文本里只出现一次,夹具走的是真的 applyZh + repoSections —— 手搓两份"看起来一样"的载荷就测不到宿主那份去重)。 ★ 本轮电池 tmp/r16-falsify.mjs(只圈 lib/services/web-translate.js 与 lib/services/repo.js 两个文件)11 条 / 未抓到红 0 条,末行 [还原 ok],输出原文 tmp/r16-falsify-out.txt。★ 这一轮的电池刻意一套植入跑两套:repo.js 那五条里的两条另在 client 套件里各跑一遍(同一条屏上的话,宿主拼与客户端摆是两套判据,第十五轮踩过"植入的文件与跑的套件对不上 ⇒ 判据等于没验")。两条旧口径的假绿顺带清掉:上一轮我说".slice(0,200) 正好切掉 request id"—— 实测旧 vendorErr 压根没把那串号拼进回执(三家位置还各不相同),所以「只认 RequestId 不认 log_id」这一发才是百度那一档的真防线。 ★ 同轮不带 SKIP_LOCAL 的直跑(原文 tmp/rerun-r16-full.txt):371 过 / 0 挂 / 0 跳 —— hc-17 与 wt-27 那两条真口径又通了一次(口径照旧:满绿在任何一份上都不保证复现,同一用例同一天里通与不通都出现过)。

上一份读数(2026-10-07 12:5x 本机复跑,第十五轮四件合并那一遍,原文 tmp/rerun-r15.txt):SKIP_LOCAL=1 下 366 过 / 0 挂 / 2 跳(hc-17 与 wt-27,逐套 gh 19 / net 22 / store 40 / repo 63 / check 39 / api 56 / client 54 / host-compat 20(+1 跳)/ desc-zh 7 / llm 19 / web-translate 27(+1 跳))⇒ 基线 358 → 368 项。 ★ 差额四处都在数据面与能力面上:repo +7(分家两条、句子边界一条含代理对那一发、第二路三条含 404 回落、pickZhReadmeLink 一条)、api +1(假那两路桩的能力声明 = 真服务的声明 —— 跨边界两头都要断言)、llm 与 web-translate 各 +1(两档各自的 kinds():LLM_KINDS 两路全 serve ⇄ SERVED_KINDS=['desc'] 摘要即使开关开着也不派。★ 后半那句是第十五轮当时的口径,第十七轮已改判回 ['desc','readme'],wt-28 那条判据整条重写见上面第十四件)。 ★ client / host-compat 条数不变、内容改判(test/client.test.mjs:1474 的现译那一屏夹具改成吃 switchRows、两处桩各自声明 kinds();test/host-compat.test.mjs:457 的 hc-18 从读 translator.descOn 改成遍历 translator.switchRows)—— 只报条数就会把这两套的改判漏记账。 ★ 本轮电池 tmp/r15-falsify.mjs(圈 repo.js / domain.js / web-translate.js / api.js / llm.js 五个文件)12 条 / 未抓到红 0 条,末行 [还原 ok],输出原文 tmp/r15-falsify-out.txt。★ 首跑抓出两条假绿:「绝对 URL 闸门撤掉」当场全绿(// 那种被"空段"那一支冗余挡住 ⇒ 补无 // 的 mailto: / http: 坏形状才承重)、「宿主模型谎报只 serve desc」那一发指错了套件(植在 llm.js 却跑 api)—— 判据在另一套件里等于没验。 ★ 同轮不带 SKIP_LOCAL 的直跑(原文 tmp/rerun-r15-full.txt,10-07 13:4x):368 过 / 0 挂 / 0 跳 —— hc-17 与 wt-27 那两条真口径这一次都通了(免费档真出网那发没撞 429)。★ 第十二轮那条口径照旧作数:满绿在任何一份上都不保证复现(同一用例同一天里通与不通都出现过),别把任何一份总数当"永远如此"。

上一份读数(2026-10-07 11:2x–11:3x 本机复跑,第十四轮名次徽章分档那一遍,原文 tmp/rerun-r14.txt):SKIP_LOCAL=1 下 356 过 / 0 挂 / 2 跳(hc-17 与 wt-27,逐套 gh 19 / net 22 / store 40 / repo 56 / check 39 / api 55 / client 54 / host-compat 20(+1 跳)/ desc-zh 7 / llm 18 / web-translate 26(+1 跳))。 ★ 与下面 11:0x 那份的唯一差额是 client 那一条 client-54(三头判据:单点类名 / 两处渲染点各带档类 / CSS 规则逐字)⇒ 这一轮改的是纯观感,数据面、载荷、schema 一字未动。 ★ 本轮新电池 tmp/r14-falsify.mjs(只圈 client.js 一个文件)7 条 / 未抓到红 0 条,末行 [还原 ok];输出 tmp/r14-falsify-out.txt,★ 第二版 tmp/r14-falsify-out2.txt 把挂掉那一条的断言消息一起打出来 —— 只报"挂了哪条用例"不够,本轮一条用例里有三头,得看得见是哪一头抓到的。 ★ 一条自等价植入当场被剔(const n = Number(rank) 换成 parseInt(rank,10) || rank 抓不到任何红 —— 坏名次仍旧落中性档),位置让给「榜页表格那一处自己拼徽标」。 ★ 这一条用例首跑挂在它自己的前提断言上:夹具的日榜只排到第 3 名 ⇒ "第 4 名走中性"那一档空跑,补成 5 行才落到位(assert.equal(boardBadges.length, 5, '前提:…'))。

上一份读数(2026-10-07 11:0x 本机复跑,第十三轮修完「存储不可用」那一遍,原文 tmp/rerun-r12-fix.txt):SKIP_LOCAL=1 下 355 过 / 0 挂 / 2 跳(hc-17 与 wt-27,逐套 gh 19 / net 22 / store 40 / repo 56 / check 39 / api 55 / client 53 / host-compat 20(+1 跳)/ desc-zh 7 / llm 18 / web-translate 26(+1 跳))。 ★ 与下面 10:0x 那份的唯一差额是 store 那一条新回归判据(跑真 valueSchema.parse 吃上一版库存行形状,见上面第十三轮那条)⇒ 这次修复没碰行为。 ★ 同一块证伪电池(tmp/r12-falsify.mjs)本轮扩到 20 条 / 未抓到红 0 条,输出原文 tmp/r12-falsify-out3.txt(前三份 r12-falsify-out.txt / -out2.txt 是第十二轮那 19 条的,原样留着)。

上一份读数(2026-10-07 10:0x 本机复跑,第十二轮收尾这一遍):SKIP_LOCAL=1 下 354 过 / 0 挂 / 2 跳(hc-17 与 wt-27,逐套 gh 19 / net 22 / store 39 / repo 56 / check 39 / api 55 / client 53 / host-compat 20(+1 跳)/ desc-zh 7 / llm 18 / web-translate 26(+1 跳)); 不带 SKIP_LOCAL 的那一份这次是 355 过 / 1 挂 / 0 跳 —— 挂的还是 wt-27(免费档那一路真出网那一发回 HTTP 429,[web-translate] pass 26 / fail 1)。 ★ 口径一句(本轮更正):这里数的是用例(check)条数,不是 assert 条数 —— 跑测器 test/_helpers.mjs 只按用例打 pass/fail/skip,没有断言计数器;旧文档写「352 项断言」是把两件事混成一件了。 ★ 上一轮的 350/0/2(第十一轮收尾,原文 tmp/rerun-r11.txt)、第十二轮收尾的 354/0/2 与本轮(第十三轮)的 355/0/2 都只说明"离线这一些绿";满绿在任何一份上都不保证复现(10-06 当晚直跑 352/0/0,10-07 三个时刻里 429 挂过两次),这正是"免费档不是授权接口、随时可能限流"那句判据的读数;别把任何一份总数当"永远如此"。 ★ ⚠️ 但"离线满绿"连界面是否亮着都不保证 —— 10-07 第十二轮落地当天就有过一发:354/0/2 全绿的那一会儿,用户 desktop 上是三榜全红「故障 · 存储不可用」(假设施 open() 不跑 schema,测不到那一发;判据与修法见上面第十三轮那条与 docs/design-spec.md §4 末尾)。 ★ 同日 13:5x 那一次(第九轮收尾)直跑是 331 过 / 1 挂:挂的是当时唯一真打免费接口的 wt-19(现编号 wt-27),translate.googleapis.com 连回两发 HTTP 429(等 20 秒再打仍 429)⇒ 那是外部限流的读数,不是代码坏了(离线那些全绿,插件侧的表现是降级:原文照给 + 一句「翻译接口回了错误状态」)。 本轮 19:5x 复跑那一发又通了 ⇒ 同一个用例在同一天里通与不通都出现过,这正是"免费档不是授权接口、随时可能限流"那句判据的读数;别把任何一份总数当"永远如此"。逐轮台账与证伪读数(每条新判据都改坏一次看它挂不挂)在 docs/design-spec.md §9.2。

文件项数覆盖
gh.test.mjs19parseCount 缩写量级返回 null(不交假数)、<h2 起找仓库名、跨 </svg> 取数值、丢行率判改版、304 分支、脏 slug 不出网、四档语言判定、代理配置错标 configError(不补发)而连不上代理仍算传输类
net.test.mjs22插件内隧道全套(全离线:假 socket / 假 runReg / 注入的 tunnelRequestFn):地址解析四类报错、凭据掩码、环境变量优先序、注册表三行只认那三行、例外命中转直连、路线仲裁四档各有记法、CONNECT 请求行字节逐个钉死、200 后同包 TLS 字节 unshift 不丢、407/502/关闭/连不上/超时各给一句话、跟满 maxRedirects 就把最后一个 3xx 交回、注册表缓存 60s 与 invalidate、坏配置绝不静默回落直连
store.test.mjs40域登记表(refs 计数 / 关完才摘牌 / open 失败可重试)、写串行队列、close() 后写报 CLOSED、无设施报 UNAVAILABLE、prefs 宽容档 vs strict 档、代理模式只认封闭集合(地址能解析就原样留含凭据,坏地址清空留 warn)、seen 首见钉住 first*、六表同域且 version 钉在 1(抬版本 = 本机榜史整个打不开)、repo 表小写主键 / schema 拒脏行 / maxRows LRU 裁行、trans 表:键是 kind:小写仓库(描述与摘要两档互不覆盖)、schema 挡脏行(kind 只认封闭集合,空原文空译文进不来)、无设施时 available=false 且读写报 UNAVAILABLE(现译层据此走"只译不存")、超 TRANS_MAX 按最老裁、★第十轮两条:现译引擎旧值 official 在 clampPrefs 里先搬家再判脏**(顺序反了会把库里那份抹回出厂档,而凭据还躺着没人念)+ 六格凭据只钳长度、内容不归一化;trans 那一格吃的是 TRANS_ROW_ENGINES(现行五档 + 历史档名),旧档名那一行仍然读得出来 —— 换档名不等于把用户库里的译文全废**、★第十二轮:repoCacheHours 只认 REPO_CACHE_HOURS 那四档(5 / 0 / 100 / 'abc' / null 一律回落出厂 24),库里缺这格的旧档案读回来是 24 而不是 undefined(⚠️ 这一条当时只走到 clampPrefs,没走 schema —— 同轮那格写的是 requiredInt,真宿主 open() 读老库存行时当场抛、整域不可用 ⇒ 这条用例在假设施上绿而界面上红)、★第十三轮补的那条:★ schema 的 open 校验:每张表都必须吃得下"上一版库存里真实存在的那一行"(缺新增键 ≠ 坏行) —— 吃的正是真宿主那一步(GHT_DOMAIN.tables[t].valueSchema.parse,三份上一版行形状 prefs / repo / trans),两头钉:不抛(否则整域「存储不可用」)+ 'repoCacheHours' in parsed === false(补默认只许 clampPrefs 一处,两处都补就是两份真相);★第二十一轮 就地改判(条数不变)两条:凭据格那圈的清单从手抄六格改成吃 PREF_CRED_FIELDS 那份派生表(GitHub 令牌自动进来,且"空格等于没填"这一条与 repo.js 那条 trim 同源)、★ 那条新增键自查换成"上一版那一行 —— 出厂值齐全、只缺 ghToken"必须被 open() 吃得下(拿第十三轮那起「存储不可用」血案当尺子:写侧不校验、读侧一行坏行拖死整域)
repo.test.mjs76仓库详情那一层全套(全离线,喂 test/fixtures/repo-api.json 的真字节):owner/name 形状闸门(坏名字零出网)、stripReadme 四种方括号写法(徽章串 / 引用链接 / 嵌套图片链 / 链接定义行)削到不留一个方括号、CJK 判据钉三档真读数(周刊 297 / antd 英文篇 2 / 中文篇 30)与 19-vs-20 边界、pickZhReadme 吃真根目录列表、2/3/4 发的请求路径与每发的 header/timeoutMs/signal、README-404 与 meta-404 分档、403 带 remaining:0 才算限额、proxy_config 与传输错分开、repoCacheRow 只落 schema 字段、readmeMeta 落款四个口径(节选字数吃屏上那段、整篇长度另说、两个数相等时不报整篇)、缓存命中与刚取回两条路键集与整句中文逐字一致、★TTL 按设置页那一档现算(repoCacheTtlMs 封闭四档 + 出厂 24h;改档后同一行的下一发就按新档判新鲜,不在装配时锁死)/ 失败档 5min、refresh 绕 TTL、在途去重、无存储时降级、脏行出边界时折成可用形状、内置预译命中时叙述三段(中文描述(<来源·时间戳>,不是现译):… 单独一句 + 原文另起一句),三条非命中形状仍分别说「原文,未翻译」与「仓库没有写描述。」、现译落款与 B 的字面分离(C 那一句里不许出现「内置离线预译」)、applyZh 两路并载荷 + B 命中不重拼 + 坏载荷不炸、两条旧用例的夹具改吃真的 repoView() 产物(夹具自己拼形状就测不到"少一格")、★第十一轮 +9(A):splitReadmeSections:围栏代码块里的 # 行不算语义标题(真形取自榜上那篇 token_ids…,原名带「真机」⇒ 被 SKIP_LOCAL 静默跳过、改名才进覆盖面)/ pickZhSection 两条(文档顺序取第一段、语言切换行与赞助者名单算噪声)/ descIsZh 阈值 8 的两侧余量 7 与 48 / 默认篇外文 + 整篇嵌一段中文小节 ⇒ zh_section,仍三发封顶(逐条点名请求路径 = 出网预算那条)/ descSelfZh ⇒ 入库行带 true 且这一档不靠翻译接口 / repoSections:段序只认 REPO_SECTION_KEYS / 数字只在 heat 段出现一次 / 描述那一句有五种来源,字面必须分得开 / self 段按 README 五档各给一句 + summary 段成功带落款、失败给 note 与回执两行;★同轮就地改判(条数不变):repoCacheRow(sections / sectionFields 两格一个字都不进库,先断"这格在 view 里存在"再断"库里没有"—— 反手抄)、缓存命中与刚取回两条路逐键同形(比的是 sections 整体 JSON.stringify,且两条路都留着 sectionFields 且逐字相等 ⇒ 删那一刀在 api 边界不在 builder)、库里躺着外部改过的脏行(段表只两段的期望改判);★第十五轮 +7:第十五轮分家:判据窗口 600 只用来数 CJK,节选吃去标记后的整篇(旧版拿窗口当节选 ⇒ 1,600 的预算从没生效)/ 第十五轮分家在载荷上兑现:长英文篇的节选真的到 1,600 / 节选在句子边界收口:回退到窗口内最后一个句末;中西文断句形状不同,中文那句没有空格(同一条里含代理对那一发:1,398 个 x + end. + 200 枚 emoji ⇒ 长度恰为 1,599,切在半枚 emoji 上就红)/ pickZhReadmeLink:第二路吃语言切换行 —— markdown 与 href 两种写法都认,多条命中按名排序 / / + / ★:(四档:note+回执都与描述那一段相同 ⇒ 两块全撤但段名照摆「中文摘要 · 没取到」(★ 第十七轮那句改念「 · 没取到」—— 失败行没有引擎,切不出是哪一档);原因不同 ⇒ 各说各的不许去重;只 note 相同 ⇒ 只撤 note、回执留下;描述那一路压根没派活 ⇒ 一个都不许撤)—— 去重吃的是不是"两路是否同一个引擎",后者为真时前者未必相同(note 各有各的档位话术);★: 那条对 段收( / / ,按档位与成败各念一个),成功段名新增 与 两头 —— 段名跟着那一行引擎走,不跟着当前设置走;★:(9 字挡 / 3 字不挡、7 不算 / 8 算)+ (日本語 / 纯英文 / 空串 / · / 英文 );★:(含"目录名不参与"与"子串不算命中"两头)+ (★ + "只有繁体时照旧挑中"那两条反面);★同轮: 那条旧断言「多条命中按名排序」把繁体那份钉成了规矩 ⇒ 改成「先按简繁档再按名」;★:()+ (★ 反手把"进 URL"这条路钉死)+ (与 那一侧 trim ,两处各一半就是两份真相)+ + (★ 撤销/拼错的令牌不许报成"生效了"—— 本机唯一可验的那半)+ + +
check.test.mjs39进出/位次/改名/首见判定、改名不报掉榜、三榜只记一条 first_on_board、跨榜翻转只在翻转轮记账、基线吃上轮成功 rows 而非 prevRows、坏轮冻结、304 只推 lastFetchAt、退避指数与 4 小时绝对封顶、传输类失败补发(次数 / 中途成功即停 / 非传输类不补发 / 关掉补发)、cadence 载荷与停表归零、单飞 409、传输层接线:custom 没地址时三榜各一发就收,故障里点名是配置坏了、端到端吃夹具、定时器响了:把挂进定时器的回调摘下来真的调一次(ctx.timer 档与 setInterval 兜底档各一条,真机崩的就是这一条路径),以及响了却撞上正在跑的一轮时 CHECK_BUSY 只落一行告警、绝不同步 throw
api.test.mjs61回环闸门与 XFF 链、闸门表逐条点名:三条闸(两个写 + 花配额的 GET /api/repo)与四条不闸、错误码→HTTP、SSE 帧与心跳摘牌、update 帧形状 = GET snapshot 形状、流式 body 自拼(宿主 handler 只给 (req,res))、坏榜的旧档照样给得出、transport/cadence/transportHint 随快照走、net 说最近那一发的实话(经代理 / 没出网 / 还没出过网)与 net.status 判的是路通没通而不是数据新不新、/api/repo 的 name 透传与 refresh 写法、缺 name 400、详情服务没装配 501、坏名字保持 200(那是用户输入不是故障)、服务抛错按 code 翻 HTTP、descZh 三键恒在(空数据也是 {hits:{},label,note}),hits 只覆盖 topN 切片之后屏上那些行、现译装配 attachZh 八条:两档全关那一屏逐字不变 / B 命中不派描述那一路 / 描述档三条件与摘要档只认 en_default / 译文进叙述时来源与时刻由宿主写死 / 现译失败只换那一格且把原因带给界面 / ok:false 不派活(坏名字不去喂模型)/ refresh=1 把 force 传下去 / 没装配现译服务时 zh 是全空七键而不是缺键、快照 translator 视图(键恒在、开关读库里那份、三句文案来自 domain;★ 第十五轮:descOn / readmeOn / switchLabels 三格整格撤,换成一张 switchRows[],行的条数由当前那一路的 kinds() 决定)、POST /api/prefs 两个开关只吃严格布尔("true" / 1 / on 一律 400 —— 表单序列化烧的是用户的模型额度)、那六条(第九轮立、第十轮改到五档):translator 视图逐档说话(免费档缺代理与某家云缺凭据是两句不同的话)/ 派活按引擎选路(没选中的那四路连 enabled 都不问)/ 老库里没 translateEngine 那一格按出厂档 / 密钥不回显(POST 回执 + GET prefs + snapshot 三处与序列化全文)/ translateEngine 只认现行五档、旧档名与脏值一律 400 且把合法值念出来 / 凭据六格非字符串与超长各 400、★第十一轮 +1(A 的第一道闸门):attachZh:仓库自己写的描述本身就是中文 ⇒ 描述那一发压根不派(反向也钉:sectionFields 缺 descSelfZh 时照常派 ['desc']);★同轮就地改判:zh_section 那一档在只开摘要档的现场下 jobs 必须为空(第二道闸门)+ secText('self') 命中那句小节落款、旧那些吃 narrative / narrativeFields 的断言整体搬到 sections / sectionFields(含 'sectionFields' in d === false 这条边界)、路由那条改成现调 repoView() 现算期望段表再 JSON.stringify 全等(夹具不许手搓形状)、★B 优先那条补判据:enabled 从「只开 readme」改成「两档都开」并在派活矩阵补一行「B 命中 + 只开描述档 ⇒ 零调用」—— 旧写法下"没派描述"是开关挡的、不是 B 优先挡的,拆掉闸门照样全绿(证伪首跑抓出的假绿, 才是承重);★: 的 只认封闭四档( 这种字符串认, 一律 —— 不许悄悄回落 24 让库里一个值、分段器上另一个值,并验库里那份没被污染)+ 同轮 那条与引擎循环那条(旧断言读的是撤掉的 落款句与 ,现在钉的是与 );★:(桩的 必须逐字等于真那一份 ⇒ 否则"非 不派摘要"这条判据测的是我编的桩,不是那道闸门;同轮派活矩阵那条:两路各派各的 —— 宿主模型档两路都做、免费/三家云那四档摘要那一发压根不派,且用例不再传 把摘要放行);★:(钉本轮仅剩的那道口 —— ,变的是那句说明;另加反向那头:服务没声明 时一行都不摆,而这与档位无关)+同轮「假 = 真服务」那条与派活矩阵那条(翻译四档现在也报 ,五档两行开关都在);★: 里那圈中文形状 —— 旧形状把 (和第一版新加的 )摆在的桩下 ⇒ 恒假、闸门坏了照样全绿(电池第 ① 条判它假绿),现在改成在那一圈 为空( / / )+ 各钉一发 段的档名, 仍派且喂的是那段节选;反向还多三发(闸门给任一档单独开侧门都得当场红,见 );★:(混排 9 字与只剩切换行那两种形状各钉 为空 + 段名后缀)+ (★ 首跑电池第 ③ 条挂在同一 里先炸的那条断言上 ⇒ 反例必须拆成独立用例才红得到自己的现场);★:(★ 键集封闭 + + 全文搜不到令牌本体 + ,与 那条 trim 同口径)+ (格数从 读,用例不抄数);★同轮:「密钥不回显」那条从 翻成 派生的四把清单(★ 手抄一个数就等着漏扫新增那把),且新增那把不跟着翻译档走 —— 选哪一档翻译它都在,因为它发的是 不是厂商
client.test.mjs57vm 沙箱 + 假 React 渲染树:六页签各自成页 + 页签条常驻、页签计数徽标、总览速览小结(前 3 与跳转带键、不再摆流水小结)、故障口径(连续轮数 / 补发次数 / 下次自动检查 / 传输提示只在传输类出现)、设置卡的出网方式三档吃载荷、地址是草稿、切自定义得带着地址一起发、各卡分支文案、步进器到边界禁用、保存反馈看状态位、根 CSS 铁律(含外链不吃浏览器默认蓝、页头标题 .gt-title 必须是兄弟四家在用的 17px)、client 里宿主枚举字符串一个都不许出现、详情弹框:载荷由真的 repoView 造(段名 / 块 / 元数据对 / 配额行逐字照搬,客户端不数星不拼句)、三种"没内容"各说各的(还在取 / 请求坏了 / 宿主说没拿到)、Esc·×·遮罩·框内的开关语义、三个触发点各自只发一发 GET /api/repo?name=、遮罩挂在 .gt-root 之内、默认态一个浮层都不许在、描述列命中显示译文且悬停给原文与 note;「描述中译为…」只在该卡真有命中时出现,且逐字读 snap.descZh.label(换载荷文案就跟着变,客户端不许自己编日期)、设置卡现译那几段(引擎行 / 凭据行 / 注册行 / 开关那几行):状态读 snap.translator,ready:false 时那句 notReadyHint 只在「现译引擎」那一行念一次(★ 第十五轮:各行自己的行名与说明句从 switchLabels 那张表改成行内自带的 row / label,不重复念"能不能发"),宿主没给这个键时整段不摆、详情弹框的现译分段(描述段 + 摘要段 + 那句 summaryNote 落款)、回执有才念(回执:provider_error: bad response 上屏;errText 为空时那行不出现;zh 全空时详情里连「模型」两个字都不该出现)、★client-52(第十轮整条重写成七段判据):五档按钮的名字/顺序/高亮/disabled 全吃载荷(换 engineLabels 界面跟着改口,客户端不排表)+ 只念当前那一档的 hint(别档那句一个字都不许在屏上)+ 逐家凭据行的 type/maxLength/autoComplete 跟 credFields 走、标识符 value 等于库里那份而密钥 value 恒空、'value' in credFields[1]===false、keyless/host_llm 两档连输入框都不摆、留空密钥压根不进 patch、库里没凭据时不给「清除」、「清除」只发当前档两格、注册那一行只跟当前那一家(别家的 URL 出现在这一屏即红)且不念额度数字** + 源码侧三条(草稿收口那句在、三个密钥键名不许出现在 client.js、.gt-setrow .gt-link{margin-left:0} 那条 CSS 在**);★同轮 client-38 就地改强:.gt-tabs 那条规则里出现任何 overflow 即红(撤掉那条没意义的滚动条的判据,不新增用例);★第十一轮条数不变、三条改判(A 的段表侧):client-41 整条改吃段表 —— 四种 kind 各自的类名逐字(p ⊂ sub ⊂ num 逐级加重、excerpt 走带框那条 .gt-modal-readme)+ 一张 gt-modal-facts + 同屏一个数只出现一次 + 旗标句落 heat 段的 sub 块 + readmeSource:'' ⇒ self 段整段不摆;client-50 改吃 what 段第一块与 self 段的 块; :摘要那一发失败、段名说「没取到」,回执那行是段内 块(旧口径「失败就不摆」撤了)。★ 踩到的假绿形状: 的 只按 class token 匹配,拿 整串去查;★:设置页多一行「详情缓存」分段器 —— 四档文案全吃载荷()、选中项读(不是出厂值)、点击只发 、载荷没给 时(一排没有文案的按钮比没有更难解释); 加两头都钉(段对象 + 那四句旧落款); / 改判成读(旧断言读的是撤掉的 句与 );★:① 单点类名逐字(1/2/3 → ,4 与 全落 ,坏名次不许把 拼进类名)② (榜页 走 5 行夹具 + 总览速览 ;只钉组件不算 —— 调用点自己拼类名就把档吃掉了)③ CSS 侧三档色值逐字(金 / 银 / 铜 ,与 modelwatch 对表)+ 中性档必须吃宿主令牌 + (两份真相);★:开关那几行的( 现造的 ,两处桩各自声明 )—— (★ 那是第十五轮的口径,: 现在钉的是、行名仍是 、说明句跟着档位换成「这一段是节译不是摘要」那一句,并加了一发反向夹具 —— 载荷只给时客户端不许自己补第二行;按钮序是 关/开,所以 那档量到的是 ),客户端写死两行就是把"点了没用的控件"留在屏上(同一轮 那些段表判据一字未动,本轮改的是段里那段节选有多长,不是段表形状) / ★:去重那条判据在上的读数 —— 夹具走真的 + ,用例只数「那句失败话在屏上出现几次」(= 1),不在段表那层自证:那里去掉了一块,这里才是那一句真的只剩一遍 / ★:、 与 那三条找段的字面改吃 (「中文现译 · 没取到」), 另断 在屏上、 在屏上;★: GitHub 令牌那一行 —— 格表 / 说明句 / 创建网址(格数不写死、 必须是 且 、 跟载荷、、存过才给「清除」、令牌本体不许出现在任何文案里)+ 详情弹框那句配额(给「已认证配额剩 4987 / 5000」就念这一串、两个词不许同屏、★ 且判据: 里出现 / 任一字面量即红 —— 抄一份就有第二个真相,宿主报错读数时会被界面圆成"看着对"的那一句)
desc-zh.test.mjs7内置离线预译表本身:表体形状(主键小写、src 里不许有汉字、译文≠原文、主键不重号、条数与 DESC_ZH_COUNT 一致)、命中判据 =「主键 + 原文逐字相同」(空白归一、主键大小写不敏感,原文被改或被截断 ⇒ 回 '')、★表与解析器同口径(四份真榜面夹具里「表中有此仓库」的每一行必须命中,防解析清洗口径漂移而表还指旧句)、自带中文的仓库不进表、来源与时间戳只有一份(LABEL/NOTE 都由 DESC_ZH_AT+DESC_ZH_ORIGIN 拼,NOTE 必须含「不是现译」)、这份文件是死的(去注释后零 import/fetch(/require(/ctx./readFileSync ⇒ 离线口径由源码钉住)、descZhHits 只收命中行且键为小写主键
llm.test.mjs19模型现译那一发(全离线,喂假句柄 + spy stream()):闸门顺序四档各有各的话且句柄零被碰(未知路数 / 没原文 / 开关关 / 宿主没句柄)、★两档显式全关 ⇒ spy 句柄零调用(不是出厂态:描述那档出厂是开的)、发出去那一发的 reasoningEffort:'off' + temperature:0 + 两档各自 maxTokens + 原文截断,全部从交给 stream() 的那一份 opts 上读回来(不从标签反推)、transSrcKey 折叠空白 ⇒ 喂进去与存下来同口径、in-band 错误(finish 帧里坐着的 failure)判失败而不靠 throw、AbortError 与别的异常各说各的话、★超时那一发把定时器真的拨响(不许把异常圆成超时)、内容三闸(空 / 没汉字 / 超长 ⇒ 原文照给且各说各的)、分片累加与 delta.text 写法、逐字复用与"改一个字就重译"、★宿主默认模型那一档(没给 / 给空 / 读它抛 ⇒ 三句不同的话且句柄零被碰;库里已有译文时压根不取这一档)、desc 与 readme 两档各存一行不互盖、force(重新取一次)绕复用并盖掉旧行、在途去重、落库失败仍给译文并补那句"显示完就丢"、脏行按未命中重译、ready 只说宿主给没给能 stream 的句柄且 dispose 后立刻 false、判据自证(内置表那一条永远不被本套件当成"模型译过的")、★第十五轮 +1:kinds():这一档两路都 serve ⇒ 设置页那两行开关都摆(与 wt-28 那一档相对 —— ★ 第十五轮那一边只报 desc,第十七轮改判后两边都报 desc+readme ⇒ 这一条钉的不再是"谁能做摘要",而是"能力声明由那一路自己说":两路各自的 kinds() 不许被 api 或客户端写死)
web-translate.test.mjs29(+1 跳)★第九轮新套件(19 条)、第十轮扩到 27 条:免费 + 三家云那四路(全离线,喂假 net.fetch;假 net 按整条 URL 精确匹配)—— 闸门与档位(wt-1 开关关着零出网 / wt-2 三家各缺任一格凭据 ⇒ no_credential 且零出网 / wt-3 没传输层归 transport 而不是"翻译失败" / wt-4 路数不认与空原文 / wt-5 档名归一(official→baidu、脏值落出厂档)/ wt-14 免费档几种失败各归各档 / wt-15 连不上与超时都归 transport 且把超时定时器真拨响)、四份端点形状(wt-6 免费档按夹具里那条实测 URL 逐字发 GET / wt-7 免费档夹具是真回包(有抓取时刻与代理路径)/ wt-8 百度 MD5 / wt-9 腾讯 v1(★ 签的是原值、出网才编码)/ wt-10 阿里 RPC V2(★ 签的就是出网那一份百分号编码串,空格编 %20 不是 +)—— 三条都在用例里按官网公式独立复算并断言 URL 里没有密钥本体 / wt-11 一次性数每发都换(腾讯 Nonce 与阿里 SignatureNonce,且 Nonce 换了签名必须跟着换)/ wt-12 三家错误形状不同,认不出来就得点名 bad_json / wt-13 非 2xx 也要先读回包(阿里实测错误就是 404 + Code/Message))、复用与存储(wt-16 逐字复用且落款跟那一行自己的引擎 / wt-17 第九轮那批 engine:'official' 的旧行继续读得出、不冒充新档 / wt-18 改一个字就作废重译、库里记的是折过空白的同一份 / wt-19 force 绕表并写回 / wt-20 存储不可用仍给译文并说"显示完就丢" / wt-21 并发去重 / wt-22 命中缓存那一发不组 URL(一次性数在查库之后才算)/ wt-24 入参截断而库里存没截的那份)、边界自证(wt-23 打码:三家标识符各留头 4 位、签名/密钥/一次性数整段遮 / wt-25 五档引擎名与各张表在 domain 里各只有一份 / wt-26 三家夹具各恰好一条 provenance:'live'(无凭据真回包)且合成样本不许带 capturedAt / wt-27 真机一发,SKIP_LOCAL 跳)、★第十五轮 +1(wt-28):这一档只有翻译能力:kinds() 只报 desc,摘要那一路即使开关开着也不派(把 enabled 的第一行那道能力闸门钉住 —— 摘要提示词那句「整理成一段简体中文摘要」只派给真有摘要能力那一路;★ 第十七轮整条重写:SERVED_KINDS 改回 ['desc','readme'] ⇒ 这一档 serve 两路,llmReadme 开着就真的把那发译出来(断 engine==='keyless' 且假 net 恰一发),开关关着则 且 —— 能力回来了,闸门还是那道闸门)、★:(三家位置各不同:腾讯 /阿里顶层 /百度 ;最坏一发真走假 net —— + 64 字请求号 + 约 700 字错误体,断言回执行 ≤200 且 那串号活着;没有请求号的真回包不许凭空拼出「请求号 」那种半截话)
host-compat.test.mjs22(+1 跳)hc-0 扫描面自己先要「有东西可扫」:清单从 lib/ 目录真读派生(不是手抄文件名),且每个都真读得出 >200 字符、lib/desc-zh.js 必须在里面、零 @deepseek-ai/* / 零第三方依赖、★只读 GET 律的出网名单也改成派生(hc-7:凡真的调用 fetchFn( 的服务文件都算一路,net.js 自己除外;再按端点常量切成 GitHub 路与翻译那四路两拨,并自证两家之和等于总数、translateBound().length===1(四档共用同一份 web-translate.js,这一位就是在钉"不许哪天冒出第二个翻译出网文件而这条律扫不到它");逐文件钉无写方法、GitHub 那一路无凭据字样、不 clone 不下载、不起子进程、不许硬写 https: 字面量、地址只能从 domain 引 —— 手抄那一版对新增的 web-translate.js 零覆盖还照样全绿,见 spec §0 第九轮)、schedule/jobs/通知零调用 + 模型句柄只许一个使用者(hc-8 原为「零 ctx.llm」,10-06 第八轮改判:白名单文件由 index.js 的 createLlmTranslator 那条 import 边派生,并要求它真在扫描面里、真拿到句柄 ≥2 处;其余文件凡出现 deps.llm / snap.llm / .llm? 形状一律红,四类坏形状内置自证 —— 这条判据原先只匹配字面 ctx.llm,被 ctx.inject(['llm'], s => s.llm) 一路绿灯溜过去,见 spec §9.4)、inject=[]、index-inject 载荷 26 键齐(★ 第十二轮多 cacheHours / cacheHourLabels 两格:档位与中文话术都从 domain 走,客户端一格都不自己写;键表是刻意双写的,加键不同步就当场红)、客户端读的每个 cfg().X 都有人推(键表从宿主实际推的那一帧反查,不手抄清单)、保存偏好后必须真推一帧 update(hc-18:挂真 SSE 长连接、真 POST、读回那一帧的 translator.switchRows 里那一行的 on 翻转(★ 第十五轮:从读 descOn 那一格改成遍历这张表**,因为那一格整格撤了)—— 走查抓到的"点了『开』高亮还在『关』")、★hc-19 密钥边界(效果侧,第十轮从一把扩到三把):boot 插件 → 逐家真 POST 一份含 KEY 的偏好 → 逐条扫 POST 回执 / GET /api/snapshot / GET /api/prefs / SSE 帧文本 / logger.warn 里既无三把密钥中的任何一把、也不出现它们的键名,并要求该档 credFields[].has===true 且 'value' in f===false 做非空转证明(★ 只摘其中一把密钥的植入就是从这里被抓出来的)、★第十二轮 hc-20(详情 TTL 的接线):装配处只许写 getTtlMs: () => repoCacheTtlMs(getPrefs().repoCacheHours)(现取现算),出现 ttlMs: 那种抄死毫秒即红;出厂那一档与出厂那个毫秒必须同源;prefsView 的初始值里就得有 repoCacheHours 那一格(reloadPrefs 是异步的,装配与首次读库之间点详情不许读成 undefined)、裸宿主缺服务时加载不抛且能力位说真话;★第十七轮 就地改判(条数不变):hc-18 那份开关表在首帧**(装配完 + 老库存 )给 、在给两行都 —— 判的是"两行的键与出厂布尔都从载荷读",不再是"翻译档只有一行";★:装配处只许写 (现取现算,与 那条 TTL 同一个形状 —— 否则"填了令牌但真跑那一发仍是装配时空的那一份"),出现 那种存成变量即红;(,多一处就是多一个能把令牌递错的出口,少一处则是这一轮没接完); 里出现「匿名配额 / 已认证配额」任一字面量即红;★同轮: 那条「GitHub 那一路无凭据字样」(凡真的调 的文件里,带 的、且; 第一实参不许含 ;翻译那四路照旧零凭据头; 那一层不认得令牌 ⇒ 榜面恒匿名)、 密钥边界从三把扩到(逐家真 POST + 回执 / snapshot / GET prefs / SSE 帧 / 五处逐条扫,并要求该把 做非空转证明)

目录结构

index.js            宿主半边装配:能力探测、六仓储、节拍、路由、详情服务(★ 第十二轮:TTL 交 `getTtlMs()` 现取现算,不在装配时锁死)、入口载荷
client.js           浏览器半边:侧栏图标 + 整页面板(SSE 主、手动检查兜底;★ 第十二轮:设置页多一行「详情缓存」分段器,详情弹框只摆宿主给的段名与块;★ 第十五轮:现译那几行开关改成吃 `translator.switchRows` —— **行清单是载荷给的**,当前那一路没有摘要能力时那一行不摆,客户端不写死两行)
lib/domain.js       一份真相:枚举、标签、边界、阈值、六表 schema(含 GitHub API 基址、★现译引擎**五档**与各家凭据字段表 `TRANSLATE_CRED_FIELDS`(三家六格:schema 键名与长度上限全部从这张表派生,手抄必漏)、`TRANS_ROW_ENGINES`(现行五档 + 历史档名 `official`,让第九轮那批旧行继续读得出)、翻译端点白名单(`TRANSLATE_HOSTS` 由 `TRANSLATE_ENDPOINTS` 派生)、注册地址表 `TRANSLATE_REGISTER`、★**第十二轮的详情缓存四档**:`REPO_CACHE_HOURS`(`6/12/24/72`,封闭集合)+ 话术表 `REPO_CACHE_HOUR_LABELS` + 出厂档 `REPO_CACHE_DEFAULT_HOURS=24` + 单点换算 `repoCacheTtlMs()`(越界退回出厂档),`REPO_CACHE_TTL_MS` 由出厂档**算出来**而不是写死的毫秒数、★**第十一轮的段表与阈值**:`REPO_SECTION_KEYS`(段序唯一真相)与 `REPO_BLOCK_KINDS`(`p/sub/num/excerpt` 四种块;★ 第十二轮 `REPO_SECTION_SOURCE_NOTES` 那张来源落款表**整表删除** ⇒ 段对象只剩 `key/label/blocks/facts` 四格)、`README_ZH_SECTION_MIN_CJK`(= `README_ZH_MIN_CJK`,**同一条中文判据不另立一个数**)、`DESC_SELF_ZH_MIN_CJK=8`(描述本身就是中文 ⇒ 不派现译)、五档 `REPO_README_SOURCE_LABELS`、`repo` 表 schema 多的那两格 `readmeSection` / `descSelfZh`(★ `sections` 与 `sectionFields` **不在 schema 里** ⇒ 段表不落库,域 `version` 仍钉 1)、★**第十五轮的节选与第二路常量**:`README_HEAD_CHARS=600`(**只服务那五档的中文判据**)与 `README_EXCERPT_MAX=1600`(节选预算,本轮才真生效)**分家**、回退窗口 `EXCERPT_SENT_BACK_MAX=200` + 中西文两支 `EXCERPT_SENT_END_RE`(句子边界收口)、`README_ZH_LINK_MAX=200`(第二路那条链接的长度闸门)、`LLM_SWITCHES` 每行自带 `kind`(设置页那几行跟着当前那一路的 `kinds()` 走))
lib/kv-schema.js    最小 schema 校验(sysops / stock / modelwatch 同名文件的同源拷贝)
lib/kv-records-base.js  记录域底座:WeakMap 域登记表 + refcount + 串行写队列(同源拷贝)
lib/stores.js       state / events / prefs / seen / repo / trans 六仓储
lib/check.js        一轮检查的编排 + 变化判定纯函数
lib/services/gh.js  趋势页抓取与解析(榜面唯一"发什么请求"的地方;怎么出网它不管,交给 net.js)
lib/services/repo.js 仓库详情:api.github.com 元数据 + README + 自带中文 README 探测(★第十一轮到**五档** `zh_default` / `zh_file` / **`zh_section`** / `en_default` / `none`)+ ★**结构化段表** `repoSections`(四段 `what/heat/self/summary`、四种块 `p/sub/num/excerpt`、段序只认 `REPO_SECTION_KEYS`、数字只进 `heat.facts`;旧的整句 `repoNarrative()` 第十一轮整段撤掉)+ 两道源侧闸门用的 `descIsZh`(`DESC_SELF_ZH_MIN_CJK=8`)与围栏状态机 `splitReadmeSections`(同一份 net 传输层,编排仍 3 发封顶)+ ★**第十二轮**:`repoSections` 的段对象缩成 `key/label/blocks/facts` 四格(四句来源落款整格撤,"是谁写的/是谁译的"并进**段名**),`readmeNote()` **整函数删除**,`readmeMeta()` 压成一行短字面 `节选 N / 整篇 M 字 · 已去标记 · 文件`,详情服务的 TTL 吃 `getTtlMs()` **调用时现取现算**,★**第十五轮**:`readmeZhVerdict()` 交两样东西 —— `head`(去标记后前 600 字,**只用来数 CJK 判那五档**)与 `clean`(去标记后的整篇),节选吃 `clean` 并经 `excerptOf()` 在**句子边界**收口(`README_EXCERPT_MAX=1600` + 回退窗口 `EXCERPT_SENT_BACK_MAX=200` + 中西文两支 `EXCERPT_SENT_END_RE` + 硬切与回切都退掉半个代理对),第二路 `pickZhReadmeLink()`(markdown 与 `href` 两种写法)+ `zhReadmeRelPath()`(五道闸门排在造 URL 之前,返回**原始路径**,`encodeURIComponent` 只在出网那一发逐段做))
lib/desc-zh.js  内置离线预译描述表(**生成的死数据**:`[小写主键, 原文, 中文]` × 73 + `descZhFor` / `descZhHits`,零 import / 零出网,见 `dz-6`)
lib/services/net.js 传输层:CONNECT 隧道 + 路线仲裁(设置页自定义 > 环境变量 > Windows 注册表 > 直连)+ 注册表 60s 缓存
lib/services/llm.js 模型现译(★五档引擎里 `host_llm` 那一路):**宿主模型句柄的唯一使用者**(`hc-8` 的白名单文件由这一条 import 边派生)—— 闸门顺序、逐字复用、八档失败文案都在这一个文件里;★**`kinds()`(第十五轮立的机制,第十七轮仍在)**:这一档两路都 serve(`[...LLM_KINDS]` = `desc` + `readme`)⇒ 设置页那两行开关都摆
lib/services/web-translate.js ★**四路**(`keyless` 免费接口 + `baidu` / `tencent` / `aliyun` 三家云,第十轮把后两家接上):同一个形状的服务、同一条 `net.js` 传输,**全 GET**(腾讯 v1 那一路的签是「GET + host + 字典序原值」,POST/TC3 那套没走);查询串里只带各家的**标识符**(`appid` / `SecretId` / `AccessKeyId`)+ 一次性数(`salt` / `Nonce` / `SignatureNonce`)+ `sign`/`Signature`,★密钥本体只进摘要、**不进 URL**;`pickTranslator` 按 `prefs.translateEngine` 在这四路与 llm.js 之间**选一个**(没选中的那一路连 `enabled` 都不问);★**`SERVED_KINDS=['desc','readme']`(第十七轮现值)**:这四路 `enabled(kind)` 第一行查这张表、第二行才看那两枚开关(`readme` 吃 `llmReadme`、`desc` 吃 `llmDesc`)⇒ 摘要那一发照派,只是段名与那句说明按档位念「节译」(第十五轮曾把这张表缩成 `['desc']` 并撤掉那一行开关,本轮已被用户改判撤回,见上面第十四件))
lib/api.js          路由表 + SSE hub + 错误码翻译 + 快照装配(`netView` 在这里把路线翻成界面那句话,`translatorView` 在这里把当前档翻成那 13 键(含 `credFields[]` / `register`,★ 恒无 `value`;★ **第十五轮:`descOn` / `readmeOn` / `switchLabels` 三格并成一张 `switchRows[]` ⇒ 15 键变 13 键,行的条数吃当前那一路的 `kinds()`**),派活那一侧的第三道闸门 `want(kind)` 读的是那一路的 `enabled()`,`descZh.hits` 也在这里按屏上那些行算)
lib/caps.js         能力位(现取现算,不在 apply 顶层锁死)
test/               十一个离线套件 + 四类夹具(趋势页切片 `make-fixtures.mjs` / api.github.com 原文 `make-repo-fixtures.mjs` / 现译四路各一份 `fixtures/trans-*.json`,逐条 `provenance` 见下 / ★第十一轮多一份 `fixtures/repo-zh-section.json`:`zh_section` 那一路的**形状夹具**,文件级 `provenance:"synthetic"`(**不是实抓**,命中侧本机零真样本),`shapeSources` 逐条写明每一格的形状从哪个真文件借(噪声行 ← ant-design、围栏里的中文行 ← Qwen),键集与状态码口径照 `repo-api.json`;由 `make-zh-fixture.mjs` 生成,用例不许把它当"GitHub 真的这么答")
docs/design-spec.md 设计规格(含 §9.1 S0 探针读数台账、§9.2 测试台账、§9.3 真机走查读数与仍未验证清单)
tmp/                真机走查脚本(shot.mjs 六签走查 / shot-bad.mjs 注入坏帧三态 / shot-proxy.mjs 三档出网方式逐档走查 /
                    shot-links.mjs 外链配色 / shot-detail*.mjs 详情弹框逐档 / shot-llm.mjs 现译两档走查 / probe-*.mjs 量几何、代理与详情数据源读数、
                    probe-title.mjs 页头字号与五家兄弟插件 `-title` 规则的墨迹对表)与截图 tmp/shots/;
                    `gen-desc-zh.mjs` + `desc-src-all.json` + `desc-zh-authoring.json` 是预译表的生成三件套(原文列由解析器取、中文列人工写,幂等);
                    `web-*.bak-*` 是走查前那份 web profile 的 `package.json` / `cordis.patch.yml` 备份(拆场按它 `cmp` 还原,第九轮收尾时两份都已 `diff` 过与 profile 现文件逐字节一致),`walk-llm*.txt` 是第七轮的逐屏读数原文;
                    ★ 第九轮留的:证伪脚本 `wt-falsify.mjs` / `hc-falsify.mjs`(还原源 `api.bak.js` / `web-translate.bak.js` / `wt2.bak.js` 三份 `cmp` 过与现源一致,纯重复)、
                    逐套复跑读数 `rerun-ski_local.txt`(330/0/2)与 `rerun-full.txt`(**已被 13:5x 那次覆盖成 331/1/0** —— 挂的是真出网那条 `wt-19`,撞的是外部 429;13:2x 那份 332/0/0 只留在 spec §9.2 台账里)、免费接口真回包 `p-g1.json`~`p-g5.json`、
                    以及**没落地成引擎的探路痕迹** `p-bing-*` / `p-yd.json` / `p-long*`(为什么最终只有百度那一路,见 spec §8.4)。
                    ★ 第十轮留的:证伪电池 `r10-falsify.mjs` + 输出原文 `r10-falsify-out.txt`(**14 条 / 未抓到红 0 条**,退出码 0,四条源文件跑完 `cmp` 过与备份逐字节一致)、
                    逐套复跑读数 `rerun-r10.txt`(`SKIP_LOCAL=1` 下 340/0/2,直跑 342/0/0)、真机走查探针与读数 `probe-engine10.mjs` / `probe-engine10.txt`(带 body 的 POST 实为 **9** 发)
                    与 `probe-regrow.mjs` / `probe-regrow.txt`(切档后旧译文是否重译那一档)、快照原文 `snap-web-1006-r10.json`、
                    截图 **13** 张 `shots/60-engine10-01-出厂keyless.png` ~ `66-engine10-07-注册行贴标签-{百度,腾讯,阿里}.png`(五档逐档 + 空凭据/已存/已清除/收尾出厂 + 那处「注册链接被推到行尾」的前后两张),
                    两份浏览器 profile `chrome-profile-engine10/` / `chrome-profile-regrow/`,以及旧夹具备份 `bak/trans-official.json.round9`(第九轮那一份「只登记百度」的 `trans-official.json`,现拆成 `test/fixtures/trans-{baidu,tencent,aliyun}.json` 三份)。
                    ★ 第十一轮留的(A:自带中文探测 + 结构化段表,**新增出网为零**,探针那几发的账见 spec §9.1):探测与读数 `probe-zh-section.mjs` / `probe-zh-section.txt`(那篇真 README 的分段现场)、
                    `probe-zh-scan.mjs` + `probe-zh-scan.txt` / `probe-zh-scan2.txt`(榜面 78 行候选池扫描,两轮)、`probe-zh-ratio.mjs` / `probe-zh-ratio.txt`(CJK 个数 vs 占比那条律的对照)、
                    `probe-desc-zh.txt`(描述侧中文频次,0 发);★ 名字相近但**不是本轮的**:`probe-repo-zh.mjs` / `probe-repo-zh.txt` 与 `probe-zh-ratio.mjs` / `probe-zh-ratio.txt` 是 10-05 详情那一层的旧探针(mtime 10-05 12:3x),别当第十一轮的读数引;
                    ★ `probe-zh-fixture.mjs`(计划把 `QwenLM/Qwen` 抓成真夹具,**按"认围栏"口径重跑后那段中文其实是代码注释 ⇒ 命中侧退回零样本、没落盘**,这一发的出网数**没留档**,是本轮唯一的读数缺口,spec §9.1 如实登记);
                    合成夹具生成器 `make-zh-fixture.mjs`;文档读数探针 `probe-zh-readings.mjs` / `probe-zh-readings.txt`(**零出网**:假 fetch 吃夹具走真 `fetchRepoDetail`→`repoView`→`applyZh`,实测编排 3 发 / 载荷两侧各 21 键 / 段表形状);
                    证伪电池 `r11-falsify.mjs` + 输出原文 `r11-falsify-out.txt`(**13 条 / 未抓到红 0 条**,四个源文件跑完逐字节等于备份,末行 `[还原 ok]`)、逐套复跑读数 `rerun-r11.txt`(`SKIP_LOCAL=1` 下 350/0/2)。
                    ★ 这一轮**没有真机截图**(详情弹框重排要重启宿主才能看,没点头 ⇒ 图与逐段 rect 都欠着,见 spec §9.3 第十一轮那条)。
                    ★ 第十二轮留的(撤废话 + 详情缓存时长,**新增出网为零**):证伪电池 `r12-falsify.mjs` + 输出原文 `r12-falsify-out.txt`(10:23)与 `r12-falsify-out2.txt`(10:3x 复跑,逐行一字不差)
                    (**19 条 / 未抓到红 0 条**,退出码 0,六个源文件跑完逐字节等于备份、末行 `[还原 ok]`;首跑那条"跨行锚点只吃半句"的缺陷已补锚并给电池加了一档「植入改坏源文件」的显式读数,**那一遍的原始输出没留档、被修好后那一遍覆盖**)、
                    逐套复跑读数 `rerun-r12.txt`(`SKIP_LOCAL=1` 下 354/0/2,直跑 355/1/0,挂的仍是 `wt-27` 那发真出网的 429);**10:3x 为核对文档同步又离线复跑一遍 ⇒ 仍是 354/0/2,与 `rerun-r12.txt` 一字不差**。
                    ★ 一次事故如实登记:同步 `docs/design-spec.md` 时误用**整文件写入**把它截成 416 字节,已从会话历史快照逐字节还原(1695 行 / 257,462 字节),
                    **代价是那一窗口内先做的 8 处第十二轮同步全部丢失、随后重做**(现在的规格文档是重做后的那份,含第十二轮 31 处口径)⇒ 教训落进记忆:**大文档只用逐处替换,永不整写**。
                    ★ 与第十一轮同样:**这一轮也没有真机截图**(`index.js` 动了装配半边 ⇒ 要看效果得重启 dsh desktop 宿主;详情弹框那一屏 + 设置页新加的「详情缓存」那一行**并成一次走查**,图与逐段 rect 仍欠着)。
                    ★ 第十三轮留的(修「存储不可用」事故,**零出网**):真库存只读探针 `probe-storage-open.mjs`(吃 `C:/Users/<本机用户>/.dsh/storages/gh_trending.json` 的真行过 `GHT_DOMAIN.tables[t].valueSchema.parse`,
                    读数 `六表 239 行 / 读不出 0 行` + 自证 prefs 缺 `repoCacheHours`、repo 缺 `readmeSection`、trans 缺 `engine`;★ **只报行数与缺哪一格,绝不打印行值**)+
                    复跑读数 `rerun-r12-fix.txt`(`SKIP_LOCAL=1` 下 **355/0/2**,与探针末行同档)+ 电池扩条后的输出 `r12-falsify-out3.txt`(**20 条 / 未抓到红 0 条**,末行 `[还原 ok]`)。
                    ★ 同一遍里探针首版被抓出的一处**空输出冒充读数**(拿 `valueSchema.shape` 数声明键,而 `record()` 不暴露 `shape` ⇒ "缺的声明键 无"是假的),已改成从 `parse` 结果读并拿"改坏成 required"那一发验它真会红。
                    ★ 第十四轮留的(名次徽章分档,**零出网**):无头几何探针 `probe-rank.mjs`(CSS 逐字抠 `client.js`、`RankBadge` **函数本体抠出来跑**、`<colgroup>` 与表头从 `BoardCard` 源码逐条读 ⇒ 它自己拒绝为对不上的脚手架出数)
                    写出页面 `shot-rank.html` + 图 `shots/67-rank-medals.png`;复跑读数 `rerun-r14.txt`(`SKIP_LOCAL=1` 下 **356/0/2**);
                    证伪电池 `r14-falsify.mjs`(只圈 `client.js`)两份输出 `r14-falsify-out.txt`(7 条 / 未抓到红 0 条)与 `r14-falsify-out2.txt`(同 7 条,多打**是哪一头断言抓到的**)。
                    ★ 同一轮删掉了 `make-rank-page.mjs`:它被 `probe-rank.mjs` 整件取代(同一份 `shot-rank.html` 留两个写主 = 两份真相)。
                    ★ 第十五轮留的(四件合并那一版,`api.github.com` 走查 10 发只读匿名 GET、翻译那四个域名 0 发):走查脚本 `shot-r15.mjs` + 读数全文 `r15-walkthrough.txt` + 宿主日志 `r15-host.log`;
                    图 3 张 `shots/68-r15-set-keyless.png` / `69-r15-set-host-llm.png` / `70-r15-detail-excerpt.png`(设置页两档各有几行开关 + 详情弹框那一屏);
                    第二路真回包两份 `r15-ocr-live.json` / `r15-ocr-live2.json`(同一仓库相邻两次 `refresh=1`,配额读数 55 → 51 就是"那一屏真发四发"的现场证据;★ 这条差值只在相邻两次之间作数);
                    ⚠️ `r15-ocr.json` 是**旧读数**(12:24 那个旧进程写进库的缓存行:`cached:true` + 节选恒 600 字),原样留着只为当"库里那行旧 ≠ 代码没生效"的对照,**别拿它当本轮证据引**;
                    复跑读数 `rerun-r15.txt`(`SKIP_LOCAL=1` 下 **366/0/2**)与 `rerun-r15-full.txt`(**不带 SKIP_LOCAL 的直跑 368/0/0**);
                    证伪电池 `r15-falsify.mjs` + 输出原文 `r15-falsify-out.txt`(**12 条 / 未抓到红 0 条**,五个源文件跑完逐字节等于备份,末行 `[还原 ok]`);
                    profile 备份 `bak/web-package.json.r15-before`(收尾 `cmp` 逐字节还原);一次性 DOM 探针 `probe-r15-dom.mjs` 与浏览器目录 `chrome-profile-r15/` 收尾已删(`tmp/` 现无残留)。
                    ★ 第十六轮留的(回执带请求号 + 同屏一条失败句只念一次,**两处改动本身零出网**):复跑读数 `rerun-r16.txt`(`SKIP_LOCAL=1` 下 **369/0/2**)与 `rerun-r16-full.txt`(不带 SKIP_LOCAL 的直跑 **371/0/0**;
                    ⚠️ 这一直跑里 `wt-27` 那条老的真口径用例**真的经代理朝免费接口发了一发** —— 本轮的出网数是这一发,不是新增的,别读成"本轮新接口通了");
                    证伪电池 `r16-falsify.mjs`(只圈 `lib/services/web-translate.js` 与 `lib/services/repo.js`,★ 其中 `repo.js` 那五条里的两条**另在 `client` 套件里各跑一遍**)+ 输出原文 `r16-falsify-out.txt`(**11 条 / 未抓到红 0 条**,末行 `[还原 ok]`,每条都带**是哪一句断言抓到的**)。
                    ★ 这一轮**没有真机截图,也没重启宿主**:那两屏(厂商回执行、摘要段只留段名)都要么吃真凭据、要么吃改过的库档位,动的会是用户自己的东西 ⇒ 屏上的读数暂时由 `wt-29` 最坏那一发(403 + 64 字顶满的号 + 约 700 字错误体,真走假 net)与 `client-55`(真渲染树数那句话出现几次)两份离线现场顶着;
                    顺带删掉本轮中途为"把两件旧账的原文捞回来"而从会话记录里导出的一份 `r16-asked.txt`(**不是读数**,内容全是聊天记录)。
                    ★ 这个目录**不随插件发布**(`package.json` 的 `files` 只有 `index.js` / `lib` / `client.js` / `cordis.yml` / `prototype` / `README.md` / `LICENSE`,`tmp/` 与 `docs/` 都不在里面),里面全是本机走查痕迹。
                    ★ **也不进 Git 仓库**(`.gitignore` 里钉死):这个目录 536MB,装着历次走查的浏览器 profile 与**库存备份 `gh_trending.json.bak-*` / `bak/` —— 那里面是用户自己填过的三家云真实凭据**(腾讯 `SecretId`/`SecretKey` 等),绝不上网;`prototype` 那一格是 `files` 里的历史声明,**本地没有这个目录**(如实登记,没为它改 `package.json`)。
                    ★ **推公开仓库前把台账里的本机绝对路径打了码**(4 处 `C:/Users/gongj/…` ⇒ `C:/Users/<本机用户>/…`:本行下面那条第十三轮探针的库存路径、spec 里同一条、以及第十五/八轮 crash 日志那两处目录),**其余逐字未动**;除此之外全仓再无不带用户名的本机路径,代码/测试/fixtures 逐字节扫过一遍无凭据(fixtures 里三家标识符统一是 `gh-trending-probe-no-credential`)。
                    (走查中途防"证伪植入没还原干净"而留的 `index.js.keep` / `repo.js.keep` / `llm.js.keep` 三份,收尾时 `cmp` 过与当前源逐字节一致 ⇒ 纯重复,已删。另有一份 `tmp/bak/`(10-06 01:43 那一次留的五份快照 `api.js` / `client.js` / `repo.js` / `desc-zh.js` / `host-compat.test.mjs`,逐份 `cmp` 过都与现源**不同**,外加一个探针仓库名 `target.txt`):**它不是还原源**,树里活的是 `lib/` 与根目录那几份,别拿 bak 覆盖回去。)

夹具是真页条目的原文切片(条目内字节未改),并强制包含"每榜那一条无描述行"—— 夹具不许比真页干净,否则会把解析器的坑圆掉。 重新生成:node test/make-fixtures.mjs,吃 S0 探针留在 ../tmp/gh-*.html 的原始页面(单页 0.6~0.7MB);缺源文件就报错退出,不静默造空夹具。 node test/make-fixtures.mjs --check 只比对现有夹具与源是否一致。

test/fixtures/repo-api.json 是详情那一层的夹具:逐字节取自 api.github.com 的真响应(10 发 = 三个仓库的元数据 / README / 根目录列表 + 一发真 404), README 只留前缀(fullLength / keptLength / truncated 三件都写进档),文件头记 capturedAt 与当时的 route(走的是哪条隧道)。 重新生成:node test/make-repo-fixtures.mjs [--force]。这个夹具没有 --check:比对一致性要把那 9 发真打一遍,匿名额度是硬的。 「有元数据但没有 README」和「限额用尽」两档没有现成真仓库,按文件头 synthesized 里写明的方式拼出来 —— 合成档一律标明,不冒充真字节。

★ test/fixtures/repo-zh-section.json 是第十一轮那份 zh_section 的形状夹具:文件级 "provenance": "synthetic"(整份都是合成,不是实抓 —— 榜上唯一候选 QwenLM/Qwen 按"认围栏"口径重跑后那几段"中文"其实是代码注释 ⇒ 命中侧本机零真样本), shapeSources 逐条写明每一格的形状从哪来(语言切换行与徽章/引用链接定义行 ← repo-api.json 里 ant-design 的真形,围栏里的中文行 ← Qwen 那篇的真形),键集 / 状态码 / 头字段口径照 repo-api.json。 ★ 但它不幂等:node tmp/make-zh-fixture.mjs 只产"形状"那一份,现档里 _note / readings / route 是生成之后手登记进去的 ⇒ 直接重跑会把这三格抹掉(本轮实测过这一位:重跑后与备份 cmp 不一致,已按备份还原)。要重生成先备份。 ⇒ 这一档的判据目前全是离线的(repo 那条"仍三发封顶"吃的就是它),真回包那一路没吃过;要划掉这条:找一个默认篇是外文、整篇真嵌着达标中文小节的仓库,真发三发把回包字节存进来并改成 live。 ★ 第十五轮的第二路(从默认篇那行语言切换里抽相对路径)同样没进 fixture:那一屏的真回包(readmePath:docs/i18n/README.zh-CN.md / 整篇 8,869 / 节选 1,586)留在 tmp/r15-ocr-live.json,用例吃的是按真机形状手写的合成档(★ 只有"根目录没命中"那一头用 vitejs/vite 的真清单;"链接写着但文件不在"那一态真接口压根触发不了)。要划掉这条:按 make-repo-fixtures.mjs 的口径补一发 /contents/docs/i18n/README.zh-CN.md 的真字节进 repo-api.json。

test/fixtures/trans-{keyless,baidu,tencent,aliyun}.json 是现译那四路的夹具,一家一份(第十轮从「百度 + 腾讯 + 阿里挤在一份 trans-official.json 里」拆开的;第九轮那份备份在 tmp/bak/trans-official.json.round9)。 每份里恰好一条 "provenance": "live"(wt-26 逐家钉这一位):三家云那三条是无凭据的真回包(厂商点名的鉴权错误 —— 腾讯走到 AuthFailure.SecretIdNotFound、阿里 HTTP 404 + InvalidAccessKeyId.NotFound,本机真拿到过字节,登记为直连), 其余条目是 "provenance": "synthetic"(本机没这三家的账号 ⇒ 成功那一发的真字节从来没拿到过),★ 合成样本不许带 capturedAt,文件级 "synthesized": false 指的是"这份里确实有 live 条目",不是"全都真"。 trans-keyless.json 那份不吃凭据,整份就是实测(wt-7 钉它有抓取时刻与代理路径),所以不带逐条 provenance。 签名正确性靠 wt-8 / wt-9 / wt-10 在三条用例里按官网公式独立复算对账(不拿被测代码自己算的结果自证);要划掉这条:注册拿一对凭据、真发一发、把回包字节原样存进对应那份并改成 live。

挂载前要知道的三个坑(同仓插件踩过,本插件已按口径避开)

  1. 宿主半边不许 import @deepseek-ai/*:link: 挂载会解析出第二份模块实例。本仓库零第三方依赖,schema 与 KV 基座都是自造的最小实现(由 hc-1/hc-2 扫源码钉住)。
  2. client.js 里 ModuleLoader factory 必须 return module.exports:宿主把 factory 的返回值当模块导出,写成 return module; 会在宿主启动时报 invalid plugin … received object。
  3. ctx.inject 回调跑在独立 fiber,能力位与路由注册只能在回调里做;apply 顶层锁死能力快照 ⇒ 满屏降级横幅 + 路由全 404(sysops 病历)。

版式硬约束(由 client.test.mjs 钉住,别改回去):.gt-root 必须自己带 box-sizing:border-box; 禁用 container-type / @container,断点只用 @media;表格用 fixed 模板 + 描述列吃余量,右对齐列的表头必须 th.gt-r 点名覆盖(th 上的 text-align:left 特异性压过 .gt-r); <col> 的类名不许和格子里的元素共用(gt-col- 前缀)—— 撞名后单元格那条 display:block 会命中 col,而 display 不是 table-column 的 col 直接退出列布局,整张表宽度左移(真机病历 §9.3 第五轮)。


许可

MIT。本插件与 GitHub / Microsoft 无隶属关系,只是读取公开的趋势页。

num
excerpt
第二路的闸门在造 URL 之前:绝对 URL / 站内绝对 / 片段 / 反斜杠 / 非 .md / 穿越 / 超长一律不放行
第十五轮第二路:根目录那一层没有中文篇、但语言切换行写着路径 ⇒ 只在命中时补一发(共四发封顶)
第二路那一发 404 ⇒ 回落 en_default,详情不炸
第十六轮 +1
同一句失败话在一屏上说两遍 ⇒ summary 段那两块逐字撞上屏上已有的字面就不摆
中文现译
已上屏的字面
第十七轮 就地改判(条数不变)
段序只认 REPO_SECTION_KEYS
summary
三个词
中文摘要
中文节译
中文现译
/中文节译 · 免费接口 · /
/中文摘要 · 模型现译 · /
自己的
第十九轮 +2
readmeZhOnScreen:摘要闸门的两条来路,两侧各用一条本机真读数钉边界
反面独立一圈
中国
中國
Chinese
第二十轮 +2
zhVariantRank:三档封闭(明写简体 0/不带变体 1/明写繁体 2),两份词元名单不许有交集
两路挑篇共用同一条优先档:榜单上同时有 README.zh.md 与 README.zh-tw.md 时挑简体那份
两路各钉一次
就地改判(条数不变)
pickZhReadmeLink
第二十一轮 +8
默认零凭据:不填令牌时详情的每一发都没有 authorization
抬的是上限,不是把凭据撒出去
填了 ⇒ 四发各带一条 Bearer,令牌只在请求头里:URL 一个字节不变、域也不变
令牌格只有空格 = 等于没填:不发 Bearer 空头
githubView
同口径
上限吃 GitHub 自己回的那一格:回 5000 ⇒ 读数与屏上那句一起换档
填了令牌但 GitHub 仍按匿名回 60 ⇒ 那句照旧念「匿名配额」
代理把 x-ratelimit-limit 吞了 ⇒ 退回保守的出厂那一格,绝不梦见 5000
限额读数(门面):带令牌那一发之后 limit 与 label 跟着换档
令牌现取现算:改偏好不用重启宿主,清空之后下一发就不带
[api] 52 / fail 2
第十二轮 +1
POST /api/prefs
repoCacheHours
'72'
5 / 0 / 100 / '' / 'abc' / null
400 且不入库
改判
zh_section
readmeNote
zh.summary.note
段名
'note' in d.zh.summary === false
第十五轮 +1
假那两路桩的能力声明 = 真服务的声明
kinds()
host_llm
改判
enabled: () => true
第十七轮 +1
switchRows 那句说明跟着档位走:四档翻译路念「节译」,只有宿主模型那档念「摘要」
行名 摘要现译 五档都不变
kinds()
改判
readme
第十八轮 就地改判(条数不变)
attachZh…摘要档只认 en_default
搬到能承重的现场
zh_default
zh_file
只开描述档
want('readme')
只开摘要档
三档中文各钉一发
jobs
zh_default
zh_file
zh_section
self
en_default
tmp/r18-falsify-out.txt
第十九轮 +2
attachZh:第三道闸门(第十九轮)
jobs
self
反面独立一圈
attachZh:第三道闸门的反面 —— 「日本語」是日文不是中文 ⇒ 那一屏照常被译(不许顺手挡)
check()
第二十一轮 +2
githubView:只给 has 布尔,不给 value;说明句与「去哪创建」外链全部来自 domain(客户端不排表)
'value' in f === false
JSON.stringify(视图)
空格那一格也算没填
repo.js
快照里 github 那一格恒在(客户端没有兜底表,缺了就是白屏而不是少一行)
GH_CRED_FIELDS.length
就地改判(条数不变)
secretKeys.length === 3
deepEqual
api.github.com
sub
client-51
改判
照摆 summary 段
num
test/client.test.mjs:229
findByClass
单个
'gt-modal-p gt-sub'
永远查不到
第十二轮 +1(client-53)与两条改判
6 小时 / 12 小时 / 24 小时 / 3 天
库里那份
{repoCacheHours:那一档}
cacheHours
整行不摆
client-41
只有四格
一句都不许在屏上
client-50
client-51
段名
readmeNote
zh.summary.note
第十四轮 +1(client-54)名次徽标分档,三头
RankBadge
gt-rank-1/2/3
15/0/null/undefined/'abc'
gt-rank-n
NaN
两处渲染点各自带档类
td.gt-r
gt-mini
#e8b530
#c3c9d2
#cf9a63
.mw-rank-1/2/3
.gt-rank 底座不许再上一次底色
第十五轮条数不变、现译那一屏改判
行清单改成吃载荷
translatorView
switchRows[]
kinds()
当前这一档没有摘要能力时那一行压根不摆
第十七轮用户改判放回
client-49
五档两行开关都在
摘要现译
一行
llmDesc:false
[true,false]
client-41
第十六轮 +1(client-55)
真渲染树
applyZh
repoSections
第十七轮 就地改判(条数不变)
client-51
client-55
zh 全空
REPO_SECTION_LABELS.summaryAny
client-49
LLM_README_LABEL_TRANSLATE
LLM_SWITCH_LABELS.llmReadme
不
第二十一轮 +2
client-56
全吃 snap.github
type
password
autoComplete:'new-password'
maxLength
密钥格 value 恒空
client-57
只从 rate.label 来
源码侧
client.js
匿名配额
已认证配额
errKey:'off'
连网都不碰
第十六轮 +1(wt-29)
厂商请求号排最前,别被调用点那句 .slice(0, 200) 吃掉
Response.RequestId
RequestId
log_id
HTTP 403
^HTTP 403 请求号 R{64}
llmDesc:true
[['llmDesc',true],['llmReadme',false]]
新宿主帧
false
第二十一轮 +1(hc-21)令牌接线
getGhToken: () => getPrefs().ghToken
hc-20
const *token* =
认得 ghToken 这个键名的文件清单从扫描面反查
deepEqual(readers, ['index.js','lib/domain.js','lib/services/repo.js'])
client.js
就地改判(条数不变)两条
hc-7
按域分家
fetchFn(
authorization:
只许 repo.js 一个
只许一条
fetchFn(
token
gh.js
hc-19
四把
logger.warn
credFields[].has===true