大白话
scripts/worktree-link-deps.sh 保证「工作区自有包指回本 worktree」——否则 worktree 会拿
主 checkout 的源码在编译,而别的 session 在主 checkout 的未提交改动会变成本 worktree 的假红/假绿
(这正是该脚本抬头写的坑 ①)。
但这条保证今天只对 @opencode-ai/* 与 @alpha-code/* 两个作用域生效 ——
判定写在 case "$name" in @opencode-ai|@alpha-code) 这一支里。
无 scope 命名的自有包走的是 *) 兜底分支,整条软链照抄主 checkout。
实测(2026-08-02,alpha@10daf61b)
全仓枚举(走 MAIN 目录树,不复用脚本任何输出;跳过 .git 与 .worktrees),
无 scope 且 realpath 落在 $MAIN/packages/ 下的软链恰好一条:
packages/web/node_modules/opencode => packages/opencode
为什么值得修(而不是"反正 packages/opencode 是上游、不会改")
north-star 确实禁止改 packages/opencode,所以日常两边字节相同,看不出问题。
但滚动 pin 模型下上游是会变的 —— re-vendor / pin bump 类的票(#738、#759 等)
在 worktree 里改的正是 vendored 上游。那种时候:
- worktree 里
packages/opencode 是新的;
- 而
packages/web 解析到的 opencode 仍是主 checkout 的旧的;
- 于是
packages/web 的 typecheck / 测试测的不是本分支那份上游。
判据不会响 —— 又一个「观测手段自己有盲区」。
最小修法
把「自有包」的判定从按目录名匹配作用域改成按 realpath 前缀:
任何 realpath 落在 $MAIN/packages/ 下的软链都回指 $WT 的同一相对位置,
无论它叫什么、在不在 @scope 目录里。@scope 那一支的逐条处理保留(它还要建子目录)。
判据
- 修完在新建 worktree 里
readlink packages/web/node_modules/opencode 必须指向
本 worktree 的 packages/opencode;
- 先证明判据能测出已知的坏:回退修复后同一条
readlink 必须指向主 checkout。
- 脚本末尾已有的自检(
#796 加的条目数 + 坏链判红)顺带覆盖。
出处
#796(PR #802)实现方在同类扫描里点名、未顺手改;编排者独立枚举确认只此一条。
大白话
scripts/worktree-link-deps.sh保证「工作区自有包指回本 worktree」——否则 worktree 会拿主 checkout 的源码在编译,而别的 session 在主 checkout 的未提交改动会变成本 worktree 的假红/假绿
(这正是该脚本抬头写的坑 ①)。
但这条保证今天只对
@opencode-ai/*与@alpha-code/*两个作用域生效 ——判定写在
case "$name" in @opencode-ai|@alpha-code)这一支里。无 scope 命名的自有包走的是
*)兜底分支,整条软链照抄主 checkout。实测(2026-08-02,
alpha@10daf61b)全仓枚举(走 MAIN 目录树,不复用脚本任何输出;跳过
.git与.worktrees),无 scope 且 realpath 落在
$MAIN/packages/下的软链恰好一条:为什么值得修(而不是"反正 packages/opencode 是上游、不会改")
north-star 确实禁止改
packages/opencode,所以日常两边字节相同,看不出问题。但滚动 pin 模型下上游是会变的 —— re-vendor / pin bump 类的票(
#738、#759等)在 worktree 里改的正是 vendored 上游。那种时候:
packages/opencode是新的;packages/web解析到的opencode仍是主 checkout 的旧的;packages/web的 typecheck / 测试测的不是本分支那份上游。判据不会响 —— 又一个「观测手段自己有盲区」。
最小修法
把「自有包」的判定从按目录名匹配作用域改成按 realpath 前缀:
任何 realpath 落在
$MAIN/packages/下的软链都回指$WT的同一相对位置,无论它叫什么、在不在
@scope目录里。@scope那一支的逐条处理保留(它还要建子目录)。判据
readlink packages/web/node_modules/opencode必须指向本 worktree 的
packages/opencode;readlink必须指向主 checkout。#796加的条目数 + 坏链判红)顺带覆盖。出处
#796(PR #802)实现方在同类扫描里点名、未顺手改;编排者独立枚举确认只此一条。