Repository navigation
[PR] Blog refresh falls back to the GitHub contents API when raw.githubusercontent.com is unreachable - #5394
Conversation
📦 Built Package ArtifactBranch: Latest build — install this exact versionnpm install -g billion-context@0.0.7756-pr.5394.e703acaThis exact version is immutable and reproducible. The rolling Recent builds (commit → version)
Download artifact
tar xzf billion-context-pr5394.tgz
npm install -g packageInstall instructions are refreshed on each push. |
(ai: vllm-qwen/qwen3.8-27b) 查重: 不重复。 按失败签名与主题检索了 open+closed 的 issue/PR(blog refresh、raw 主机回退、GFW 出口):相关条目全是上游血缘或不同机制——#4906(master 自动拉新文的原始需求,已关)、#4917/#4915(实现 PR)、#5171(两套冲突实现的裁决,已关)、#4958/#4970(博客资产 SVG 沙箱,不同机制)、#5070(articles.json bundle 条目,不同机制)。没有任何条目处理「raw 不可达 → 整轮失败」这个问题。 标签: bug / scope/ui / p2(+平台 pr 标)——面板博客更新通道缺陷,web 面,局部功能异常但主功能可用。 审的是 GitHub PR #5394(分支 结构化八问
测试有效性: 4 个新链测试都有牙——断言真实 feed 状态(标题/中文对/html/资产存在性),用请求台账做负向断言(任何第三方主机零接触;健康轮不碰 API 文件端点),offline 标记,引用丢弃;gate 双向齐全(#3617 纪律)。小缺口(不拦):sticky walk start 本身的行为没有独立断言,只被「整轮成功」间接覆盖。 顺手小修(已推 PR 分支,独立标注 commit):
CI: 审时 head 4d9d4a2 —— 27 success / 11 skipped / 8 个 test shard 在跑,零失败;新 head 6d16e17 上 CI 重跑中。 判定: 可合(等新 head CI 转绿即可合并)。备注一句:此 PR 无独立源 issue(owner 指令直接触发,决策已记录在 PR 正文),按 loop guard 不补占位 issue。 |
(ai: vllm-qwen/qwen3.8-27b) Review 结论:APPROVE(可合)——独立复审,最终 head 我独立验证了什么
我顺手补的两个小修(独立标注 commit,已推 PR 分支)
结构化八问
行为变更披露(旧值 → 新值)
测试有效性:4 个新测试有牙(断言 feed items/html 内容/资产存在性/offline 标记/host 白名单,非恒真断言),能抓住原始 bug 类(raw 死 → 轮次失败)及 base64 解码、双语装配、fail-soft、第三方 host 泄漏、>1MiB omission 的回归;sticky-start 缺口已补。残余小缺口(图片双源硬错 → 轮次失败的路径无直接 pin,其文本类比已被钉住)不阻塞。 diff 整洁度 / 代码整洁:每一行 diff 都与本 PR 目的相关;命名达意、无死代码(除上述观察项)、无魔法数字、注释讲为什么、风格与仓库一致、零新依赖。通过。 判定:可合。 建议以 head [system] Review lane 完成:PR #5394(镜像 #5396)独立复审完毕——APPROVE;补 2 个小修 commit(docs 7d525a7 / test 6882e4d);新 head 6882e4d 核心矩阵全绿(旧 head 的「全绿」实为 skip-scoped run,已在文中披露);等待 owner 合并。 |
… hosts only (raw → GitHub contents API)
…ved in four copies
articles.json entries may carry a positive-integer discussion number (written back by the blog pipeline workflow when it creates the article's GitHub Discussion thread). The remote feed item now carries it as item.discussion — a plain number, dropped by JSON serialization whenever unrecorded, so clients can show the comment button only with an exact recorded link. Posts that never go through the manifest never get the field.
40b8429 to
3dd937b
Compare
Why
From mainland-China networks (and other GFW-class egress splits), `raw.githubusercontent.com` is routinely blocked while `api.github.com` stays reachable. The blog puller only knew the raw host, so EVERY hourly round failed there and those instances were stuck on the npm-bundled copy forever — new posts never arrived no matter how long you waited.
What changed (host-side only)
Each file body now walks a two-member fallback chain, both first-party GitHub hosts only:
No third-party mirror joins the chain (owner decision 2026-11-01: an independent CDN copy of the tree is not an acceptable content source).
Behavior keeps:
Tests
`tests/web-blog-refresh.test.ts`: chain facets rewritten — API-serves-when-raw-is-dead (bilingual pair intact over the JSON path), both-first-party-dead fails soft, healthy-raw rounds never touch any non-GitHub host (now trivially: there are only two hosts), >1 MiB image omission drains to a dropped reference. 25/25 green plus neighbors (web-blogfeed, web-blog-route) green; tsc clean.