Repository navigation
[PR] fix(release): let one-click publish a merged-but-unpublished fallback bump (stuck v0.1.210) - #5375
Conversation
…mp (#5376) The fallback-bump design (direct push blocked -> bump PR, merge it) leaves master exactly one patch ahead of npm latest whenever the release run dies before publishing (e.g. docs-sync red on the bumped sha). The Drift guard then refuses EVERY dispatch forever with: 'master package.json (0.1.210) != npm latest (0.1.209). A release must be cut from the live release: sync the base before releasing.' so the staged version can never be published and every click re-invents the next patch number instead of shipping what master already carries. Fix (release-manual.yml only, workflow-logic): - Drift guard gains an id and tolerates the pending-bump state ONLY when all three hold: tree version == nextPatch(npm latest), the resolved target IS that tree version, and no v<tree> tag exists upstream yet. All other drift shapes keep failing loudly. - Bump version / Verify bump diff skip in that state (package.json, package-lock.json, codex plugin manifests and changelog are already staged by the merged bump commit — re-running them would double-write). - Commit and push reports direct=true and pushes nothing: master already IS the publish content, so every direct-gated step (Full CI dispatch/gate at the exact sha, tag creation, npm publish) applies unchanged and the needs_pr fallback branches stay off.
📦 Built Package ArtifactBranch: Latest build — install this exact versionnpm install -g billion-context@0.0.7590-pr.5375.7f2cfbdThis exact version is immutable and reproducible. The rolling Recent builds (commit → version)
Download artifact
tar xzf billion-context-pr5375.tgz
npm install -g packageInstall instructions are refreshed on each push. |
📦 Merged Build PublishedThis merge to master was published as npm install -g billion-context@0.0.977-master.aeffa1a # this exact build
npm install -g billion-context@master # always the newest merged build
|
(ai: vllm-qwen/qwen3.8-27b) 查重:不重复——本条即 PR #5375 的跟踪单,无其他同机制在途条目。 核对结论:PR #5375(head
行为变更披露(旧→新):Drift guard 从「拒绝一切 mismatch」变为「拒绝一切 mismatch,除 pending-bump 三条件同时成立」;其余所有形态的错误消息一字未改。 结构化八问:
收工判定:验证通过,无需返工。剩余一步是**重新点一次 one-click(空输入)**→ 直接从绿色 master head 发布 v0.1.210,无回退、无幽灵 0.1.211。触发 workflow_dispatch 属于发版动作,留给你点;若你明确指示我来触发,我也可以代劳。 |
Why
Tonight's v0.1.210 attempt got stuck in a state NO click can escape:
package.json= 0.1.210 while npmlateststayed 0.1.209;release-manual.ymlthen rejects every dispatch:…so the exact version master already carries can never be published, until someone manually rewinds the tree. (Observed live: runs 41218248354 stuck at the Full CI gate on the red sha, 41220076591 refused via retired train box, 41220460402 refused by this guard at 16:36Z.)
What changes (workflow-only,
release-manual.yml+29/−2)tree == nextPatch(npm latest)AND resolved target equals the tree version ANDv<tree>tag does not exist upstream. Every other mismatch shape still fails loudly with the same message.package.json, lockfile, codex plugin manifests and changelog, so re-running would double-write.direct=trueand pushes nothing: master is the publish content, so the full CI dispatch/gate at the exact sha, tagging and npm publish all behave exactly as in the normal direct-push path; theneeds_prfallback branches stay off.Invariants kept
version=input above the pending patch still refused (condition (b));Verify
YAML parses clean; state matrix walked for blank/explicit inputs × (in-sync / pending / other-drift / already-tagged). After merge: re-click one-click with no inputs → it will publish v0.1.210 straight from the green master head — no rewind, no phantom 0.1.211.