Repository navigation
[PR] [bili-blog-pipeline] record discussion threads (meet-bili→#5550, frequent-compression→#5551, compress-at-fold-point→#5552) - #5553
Conversation
…uent-compression→#5551, compress-at-fold-point→#5552)
…uent-compression→#6163)
bc9c779 to
77afef1
Compare
📦 Built Package ArtifactBranch: Latest build — install this exact versionnpm install -g billion-context@0.0.9082-pr.5553.c04a5eaThis exact version is immutable and reproducible. The rolling Recent builds (commit → version)
Download artifact
tar xzf billion-context-pr5553.tgz
npm install -g packageInstall instructions are refreshed on each push. |
(ai: vllm-qwen/qwen3.8-27b) Conflict resolved. Rebased What happened: the branch was cut from Nov-1 master ( Resolution followed union-of-intent, minimal and faithful:
Live verification this run (mirror cache, fetched 03:34Z+): 七问
收工判定:冲突已解除并实证(dirty→blocked),CI 在途 0 失败,等待人工合并。 |
[bot] 🏷 (ai: vllm-qwen/qwen3.8-27b) CI 已全部跑完,全绿。 Full report above (floor 5) — here is the final verified state, mirror cache fetched 03:56Z on head
Nothing left for the CI lane: rebase landed, all checks green, remaining step is human merge only. |
…frequent-compression) The 2026-11-11 refresh run recorded #6162/#6163, duplicate threads that were deleted shortly after creation; the originals from the 2026-11-02 run still live. Pointing the manifest at them keeps the panel discussion buttons on live threads.
ranxianglei
left a comment
There was a problem hiding this comment.
(ai: vllm-qwen/qwen3.8-27b)
APPROVE — merge stays human-only (§7.4). Scope: bot write-back from scripts/blog-discussions.mjs; one data file; no code.
Independent verification (not taken from PR text)
- Diff vs master at head
49f15633eb: onlywebsite/articles.jsonchanged — the two pre-existing entries each gain onediscussionfield (meet-bili→5550, frequent-compression→5551); entries otherwise byte-identical, order/format unchanged; JSON parses; both referenced post files exist. - Consumer contract matches exactly:
src/web/blogfeed.ts:498accepts only integer>0 (else dropped → button hidden);src/web/client.ts:1057-1058renders…/discussions/<num>. No test pins real manifest numbers (suites use synthetic fixtures), so no test coupling either way. - Thread liveness via GraphQL (read-only): #5550 “Meet billion-context · 认识 billion-context” and #5551 “What to do when billion-context compresses frequently? · billion-context频繁压缩该怎么办?” are ALIVE; titles equal the articles’ frontmatter
title/title_zhjoined perthreadTitle().
Finding fixed on the spot (the only code change of this review)
The head I was dispatched against (77afef189) recorded #6162/#6163 — duplicate threads created by the 2026-11-11 refresh run, deleted shortly after creation (verified live at 12:55Z, NOT_FOUND by 13:11Z). Merging as-is would ship panel buttons pointing at dead threads (404), and per the pipeline’s own verifyRecorded semantics (“a vanished thread is NOT resurrected automatically”) it would never self-heal. Fixed by commit 49f15633eb, which points the manifest at the surviving original threads from the 2026-11-02 run.
已顺手修:manifest 指向的 #6162/#6163 是创建后数小时内即被删除的重复线程(照原样合并会让面板按钮指向 404,且按流水线设计不会自愈)——改指存续原线程 #5550/#5551 + commit 49f1563
Root cause of the duplicates (out of scope for this data PR — escalated separately as the 🔶 需要决策 comment below): idempotency layer 2 scans GraphQL bodyText for the invisible marker <!-- bili-blog:<slug> -->, but bodyText strips HTML comments (proven on #5550, written by this same script whose marker code has existed since its first commit 03473b1). While this PR sits unmerged, every qualifying blog push re-creates another duplicate pair; merging promptly stops that machine for the current entries (layer 1 then covers them).
Regression sweep: pure additive data on a defensively-parsed manifest; no code path, cache/retry/cursor logic, config surface, or kernel/ touched. PR title still lists the Nov-02 numbers incl. the fold-point thread (stale after the rebase onto #6150) — title is system-pipeline-owned per AGENTS.md, left untouched.
CI: new-head run in progress at posting (guards green, 0 failures so far); the identical-shape previous head went 30/30 green.
八问
- 是什么问题:博客流水线的 manifest PR——把两篇文章的 GitHub Discussion 线程号记入 articles.json,面板文章页才能显示讨论入口(合并前按钮保持隐藏)。
- 什么原因导致的:我接到的 head 记录了 11-11 流水线重跑创建的重复线程 #6162/#6163——幂等第二层(marker 扫描)因 GraphQL bodyText 剥离 HTML 注释而结构性失效,扫不到已存在的 #5550/#5551 便重复建帖;重复帖随后被人工删除。
- 影响范围与严重程度:修复前=合并后面板按钮指向 404(用户可见缺陷,且按流水线设计不自愈);修复后=零缺陷,纯数据追加。
- 怎么修复的:manifest 两个数字改指存续原线程 #5550/#5551(GraphQL 独立验证存活、标题与文章 frontmatter 逐字一致);流水线脚本缺陷不塞进本数据 PR,单独走 🔶 升级。
- 是否有回归问题:无回归——diff 仅给两条既有条目各加一个字段,条目本体/顺序/格式逐字不变,JSON 过解析校验,消费端谓词(integer>0)匹配,零代码路径触碰。
- 是否破坏缓存:不涉及。
- 是否改了设计方向:无。
- 是否引入新配置:无。
判定:可合(PR body 声明 squash-merge safe;合并权按 §7.4 留人工)。建议尽快合并——未合并期间每次命中博客面的 push 都会再产生一对重复讨论帖(见下方 🔶 评论)。
|
🔶 需要决策: blog pipeline idempotency layer 2 is structurally dead — duplicate discussion threads re-create on every qualifying push while the manifest PR is unmerged PR: #5553 (this thread). Gated diff: none inside this PR — the defect lives in Evidence chain (all verified independently during review):
Options:
Recommendation: A. Deliberately not bundled into this PR (data write-back vs pipeline script; bot-refreshed branch). Requesting owner decision: approve A / pick B / accept C. |
[bot] 🏷 (ai: vllm-qwen/qwen3.8-27b) Review complete — verdict: APPROVE (posted on GitHub: #5553 (review)). Merge remains human-only per §7.4. 查重:不重复 — single pipeline write-back PR; verified via 标签:needs-decision(流水线幂等缺陷需 owner 拍板修法,见下)· scope/ui(博客面板数据面)· p3(修复后本 PR 零缺陷;残留问题仅产生可清理的重复讨论帖,无数据损坏)。 已顺手修:manifest 指向的 #6162/#6163 是创建后数小时内即被删除的重复线程(照原样合并会让面板按钮指向 404,且按流水线 verifyRecorded 设计不会自愈)——改指存续原线程 #5550/#5551 + commit 49f1563(已推分支,diff vs master 仍仅两行数据)。 What I verified independently (not from the PR text):
🔶 需要决策 (escalated on-thread on GitHub: #5553 (comment), label applied here): the pipeline's idempotency layer 2 is structurally dead — it scans GraphQL 八问
收工判定:APPROVE 已提交,新 head CI 30/30 全绿,PR 仅剩人工合并一步——建议尽快合并:未合并期间每次命中博客面的 push 都会再产生一对重复讨论帖(根因见 🔶 评论)。本 lane 工作完毕。 |
Automated by the blog pipeline (scripts/blog-discussions.mjs).
Records newly created Discussion thread numbers into website/articles.json.
Repo policy: the pipeline never pushes master directly; numbers land here
as exactly one PR for a human merge (same posture as release-manual.yml).
the same branch/PR is refreshed in place.