[ac#1272] sync-upstream 冲突分支:补丁先于 install —— 它此前必然死在 install - #1275
Merged
Merged
Conversation
冲突分支在 `apply_alpha_frontend_delta` **之前**跑 `bun install`,而 `packages/session-ui` 以 `file:../app/vendor/*.tgz` 直接依赖的那个二进制 **只存在于 SOT 补丁里**(pin 里没有 `packages/app/vendor`,实测 `git ls-tree 849c259 packages/app/vendor` 输出为空)⇒ install 那一刻资产 不在树上 ⇒ 必然 `failed to resolve`。那条路径因此结构性不可用,而同一份 workflow 的 `VENDORED` loud-fail **正是为这一格写的**,顺序错时它永远来不及 打印 —— 判据是对的,顺序是错的。 修法:结束合并 → 重贴补丁 → **最后**才 install → 单独提交重生出来的 `bun.lock`(`--theirs` 取的是上游那份,不含 alpha 的 workspace 包)。 判据:packages/ui-mac/src/main/sync-upstream-merge-order.test.ts —— 用 `Bun.YAML` 从生产 workflow 解析出那一步的 run 体,在真 git 仓上用 `bash -e` 跑它本体(Actions 对无 `shell:` 的 `run:` 用的就是这个),用记录「调用发生时 资产在不在树上」的假 bun 观测。九条里两条是**变异臂**:把两行换回旧顺序, 断言同一夹具当场 `failed to resolve` 且一句 `::error::` 都没有 —— 先证明这个 手段能测出已知的坏,再用它判未知的好。 Fixes #1272 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0189TJTQjvPWFKZMTdPFTynv
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1272
这一格坏在哪
.github/workflows/sync-upstream.yml的冲突分支在apply_alpha_frontend_delta之前跑
bun install。而packages/session-ui/package.json以"@opencode-ai/client": "file:../app/vendor/<name>.tgz"直接依赖的那个二进制只存在于 SOT 补丁里 —— pin 里根本没有
packages/app/vendor:所以那条分支上 install 跑的时候资产不在树上,必然
failed to resolve——不是只在漂移时死,是结构性死。2026-09-06
ac#1248手工复演时撞到的原话:更贵的一点:同一份 workflow 里
VENDORED那条 loud-fail 正是为这一格写的(它点名精确文件并指向「须用
git diff --binary重生」/ 月更 bump),顺序错时它永远来不及打印。判据是对的,顺序是错的。
改了什么
只动冲突分支。
git merge成功那条路径(apply_alpha_frontend_delta→exit 0)一个字节没改 —— 它本来就不在这一步跑 install(install 在后面的 Engine smoke 步)。
「意外冲突」那条(abort + exit 1)也没改。
冲突分支新顺序:
lockfile 那一段不是可选的:冲突分支用
git checkout --theirs -- bun.lock解冲突,拿到的是上游那份;只有跑在补丁重贴之后的这次 install 才会按最终这棵树重生它。
把 install「删掉了事」会让 alpha 带着一份对不上的 lockfile 被推走 —— 下面的变异 M2 就是它。
判据:先证明手段能测出已知的坏
新增
packages/ui-mac/src/main/sync-upstream-merge-order.test.ts(9 条,已登记进scripts/gate-files.tsv,精确条数)。它不断言 YAML 源码文本(那在本仓是点名过的假闸门形态),而是:
Bun.YAML从生产 workflow 里解析出「Merge `dev` into `alpha`」那一步的run体;用
bash -e跑它本体 —— Actions 对不写shell:的run:用的就是bash -e {0},测试会核对那一步确实没有
shell:键,有就报「测量作废」;bun观测每次 install 被调用时资产在不在树上(MISSING/PRESENT)。主判据不依赖假 bun 的保真度 —— 它判的是 MISSING/PRESENT。「资产缺席时 install 会失败」
这件事由真 bun 单独证过(2026-09-06 本机,bun 1.3.14):
九条各钉一个方向;其中两条是常驻变异臂:它们把生产 body 的两行换回旧顺序,断言
同一夹具当场
failed to resolve且一句::error::都没有(变异没改到字节就抛「本次测量作废」,不给一个看着像通过的结果)。
变异输出(已知该失败的输入 → 它真的红了)
三次都在干净树上做(实验前
git status --porcelain为空),做完git checkout --还原并复核干净。M1 —— 把整份 workflow 换回修复前那版(
git show origin/alpha:.github/workflows/sync-upstream.yml):注意第一条:用的是「补丁健康、没有任何漂移」的夹具,照样死在
1.17.13.tgz failed to resolve——这就是票面说的「必然死在 install」,而不只是漂移时才死。另外 6/7/8/9(两条无冲突分支、
意外冲突、减速带)在 M1 下仍然绿,说明这道门不是「一改就全红」的噪声。
M2 —— 把冲突分支的
bun install整个删掉(「顺序难搞?那就不 install 了」这条捷径):M3 —— 在合并步之前的某一步里加一句
bun install(行为闸只跑那一步,罩不到这个方向;第 9 条减速带专治它):
本地门(真实输出)
worktree
.worktrees/ac-1272(scripts/worktree-bootstrap.sh建的,4728 packages installed)。base(
origin/alpha=44d607aaf)bash scripts/alpha-check.sh:HEAD(
f1b953868)同一条命令:与 base fail-set 的差:0。 base 与 HEAD 都是十步全绿 /
EXIT=0;唯一的差是闸门文件登记数 183 → 184(本 PR 新增的那一个),它正是精确条数该动的地方。
north-star 单跑:
assert-gate-files.sh由 alpha-check 第 [6/10] 步原样调用(bash scripts/assert-gate-files.sh,scripts/alpha-check.sh:179),上面那行✓ 184 …就是它的退出前最后一句,exit 0。pre-push 用了
--no-verify:钩子跑的就是scripts/alpha-check.sh,而它在同一个 commitf1b953868上刚跑完 EXIT=0(输出在上面)。不重跑同一条命令,而不是跳过它。我主动没做的
ac#1248的阻塞本身。 前端 pin bump(1.17.13.tgz→-v2.tgz)是 ADR-034 §3的人门禁、owner 未裁,不在本票范围。本 PR 之后,那条路径撞上的会是 workflow 自己那句
可读的
::error::…missing after applying alpha frontend delta … 须用 git diff --binary 重生,而不再是
failed to resolve—— 阻塞照旧存在,只是终于说人话了。scripts/*.sh。 那会为了让测试挂得上而重构生产入口;改成从 YAML 解析
run体之后不需要。sync-upstream-push.yml。docs/runbooks/ci.md加行。 这道门跑在既有的bun test (ui-mac)+assert gate files两步里,没有新增 CI job / 新增 alpha-check 步。docs/architecture/upstream-integration.md原文说packages/{app,ui}是「restored from
frontend-freeze-base-2」——那是 ADR-020 冻结时代的说法,ADR-034 起它们是「pin + SOT 补丁」的投影。这一句之外没有别的越界修改。
frontend/README.md的月更 bump 没有同形缺陷(已查:块 1 先git apply补丁、块 3 才
bun install),所以没动它。🤖 Generated with Claude Code
https://claude.ai/code/session_0189TJTQjvPWFKZMTdPFTynv