Skip to content

[不合併] develop rebase 到 v1.4.243 的 CI 驗證 - #90

Closed
audichuang wants to merge 353 commits into
ci-base/v1.4.243from
rebase/v1.4.243
Closed

audichuang wants to merge 353 commits into
ci-base/v1.4.243from
rebase/v1.4.243

Conversation

@audichuang

@audichuang audichuang commented Oct 28, 2026 •

Copy link
Copy Markdown
Owner

只用來在 rebase 後的 develop 上跑 Fork PR Checks,不會合併。base 是指向上游 v1.4.243 的暫時分支 ci-base/v1.4.243(對 develop 開會因兩份歷史衝突而跑不了 CI),驗完就刪。這次是 MANUAL(有手動解的衝突、照筆記丟掉兩個 cherry-pick、十個額外修正 commit),由 auto-rebase 依 FORK.md「Unattended merges」判斷能否自動移動 develop;不能的話會在留言寫出移動指令。

Summary

-develop = v1.4.242 + 334 個 fork commit(含 PR merge,rebase 後攤平)
+develop = v1.4.243 + 332 個 fork commit + 10 個修正 commit
  • range-diff:322 =、16 !、2 <、10 >。rerere 沒有重放舊解法(只有這次自己錄下的在同一個 rebase 內重放);locale 檔由 merge driver 合好,沒有停下來。
  • 兩個 < 都是照條目 f34c13c/ad2156c358 刻意丟掉:a6a4352e8a(cherry-pick 的 test: remove 57 low-value cases and standalone browser probes stablyai/orca#33889)與 dfb4a446e8(cherry-pick 的 test: remove 140 low-value cases and 49 suites stablyai/orca#34062)。v1.4.243 已含兩個上游 commit;test: remove 57 low-value cases and standalone browser probes stablyai/orca#33889 那個 patch 跟上游不同,不會自動略過,所以兩個都用 rebase -i 的 drop 丟掉。
  • 上游基準(fork-upstream-red.mjs v1.4.243):tc、lint、check:daemon-protocol-crossing 全綠,沒有要 cherry-pick 的上游修正。
  • 用到的筆記條目(known-resolutions.md,全部適用、全部照做,canary 2026-10-28 對上游 main 54411a9 解好的檔直接採用;54411a9a96 是 v1.4.243 的祖先,條目列的檔在兩者之間上游沒再改):
    • b7fb07c379…(fix(ci): unblock main: split over-long files and pin scanner test file times stablyai/orca#34072 未使用 import):v1.4.243 同時含 a93e31a 的修正 → 不用處理。
    • f34c13ca1e…/ad2156c358…(cherry-pick 丟掉):照做。reliability-gates.jsonc 與 terminal-spawn-restore.test.ts 結果跟上游相同。
    • fe82078909…/362104ca18…/bec8276291…(wakeWslDistro × gitWorktreeId):照做(衝突見下,兩個 fork 測試的斷言是額外 commit)。
    • 07b5c083bd…(AI fix actions use the + menu's agent picker and remember chat or terminal stablyai/orca#31310 agent choice × folder repo launch cwd):照做;SourceControlAgentActionDialog.folder-cwd.test.tsx 依新結構重寫,另補 use-ai.folder-cwd.test.tsx。
    • 6c2423d25d…(section-order 搬到 shared):照做。
    • 16a29bc2fe…(pty IPC harness 搬家):照做。
    • a2b378018a…(mobile 排除 virtual review 分頁):照做。
    • 875d89af50…(run-lint.mjs 不再 export resolveLintCommands):照做(含 SKILL.md 描述)。
    • bec8276291…(editor-save-queue.ts max-lines):照做。
    • 217f935597…(updater isDestroyed):照做。
    • f719d0fb10…(ui-rounds-map README):照做。
    • d1f3532bb1…/cf7379610f…(AGENTS.md # Tests):照做。
    • fork 自身問題「editor-autosave.ts:177」:待人判斷,沒動。
  • 衝突解法(逐 commit):
    • 3c377c2 folder workspace 多 repo
      • useEditorPanelExternalContentEvents.ts:wakeWslDistro 與 gitWorktreeId 兩個欄位都留(上游在前)。
      • useEditorPanelActiveTabContentLoad.ts:view 分支採上游(帶 load);沒有 view 時 { ...load, gitWorktreeId }(90edae3503 之後改成條目寫的條件式,最終與 canary 檔相同)。
      • useEditorPanelFileContentLoader.ts:採上游新增的 readGrantId/readGrantPairing,readWorktreeId 用 fork 的 git owner 版(ba35906362 再把 readRelativePath 換成 fork 版)。
      • recovery-launch.ts:採上游 projectSourceControlActionLaunch 的 commandInput/projection,加回 fork 的 launchWorktreeId/initialCwd。
      • use-discard-confirmation.ts:採上游 shared section-order import,留 fork 的 useSourceControlWorktreeScope。
      • uncommitted-entry-row.tsx(筆記沒寫到):上游把 entry-actions、discard-all-sequence 搬到 src/shared/;採上游 import,加回 fork 的 SOURCE_CONTROL_OPEN_TO_SIDE_EVENT(8af97f9687 再換成 fork slot import)。
      • useSourceControlAgentActionDialog.ts/useSourceControlAgentActionStart.ts:採上游,加 initialCwd。
      • right-sidebar-activity-visibility.test.ts(筆記沒寫到):上游 test: remove 128 low-value cases and 22 suites stablyai/orca#34206 刪了這個測試檔;接受刪除。fork 案例在 eb37c12 已搬進 right-sidebar-activity-visibility.fork.test.ts(eb37c124f4 同樣 modify/delete,同樣接受刪除)。
    • 35bcf04 AGENTS.md:採上游全文,檔尾補 fork 的 # Fork Maintenance;最終 AGENTS.md 與 canary 解好的檔相同。
    • ba35906:useEditorPanelFileContentLoader.ts 的 readRelativePath 換成 fork 版,保留上游兩行。
    • ef14bd1 Git Graph 分頁:mobile-session-surfaces.ts 採上游(上游只放行 edit/diff/markdown-preview,git-graph 已排除);old-client-session-tabs-projection.ts 採上游(check-details 改回 []),'git-graph' 留在 simulator 那組。
    • adc3a85(筆記沒寫到)asar-transparent-fs.ts:上游 fix(windows): delete again succeeds after a held file is released stablyai/orca#34058 改成整個 original-fs promises(nativeFs())並新增 readdir/unlink/rmdir/lstat;採上游,加回 fork 的 statSync。60845d5733 把 statSync 搬出上游檔,那一步的衝突取 v1.4.243 版本(舊 develop 上這個檔也跟上游相同)。
    • 90edae3、b110bc0711、1ab0819078:照條目 07b5c08/fe82078909,取 canary 解好的檔。
    • 8af97f9:uncommitted-entry-row.tsx 採上游 shared import + fork slot import。
    • 6d64103:mobile-session-surfaces.ts 取 v1.4.243 版本(條目 a2b3780);old-client-session-tabs-projection.ts 同上。
  • 額外 commit(每條筆記一個):section-order import、pty fork 測試搬家、guard 測試 ALLOWED、fork-lint-run 去掉 resolveLintCommands、SKILL.md 描述、editor-file-saved-dispatch 拆檔、updater 測試 isDestroyed、ui-rounds README、editor 測試斷言、use-ai.ts folder repo 路由+重寫 dialog 測試。

Evidence

上游基準(fork-upstream-red.mjs v1.4.243,upstream-red.md 全文):

Upstream v1.4.243 (2d9b595): static checks on the clean release

  • tc: green
  • lint: green
  • check:daemon-protocol-crossing: green

Every red step in the fork gate is the fork's to fix.

make fork-footprint(上一次 v1.4.242 的 fork 自身足跡:production 180 files +1638 -598,test 8、locale 8、baseline 3、other 4):

>> fork base: v1.4.243
fork footprint v1.4.243..ce43f34f43
  fork-added files:        508
  modified upstream files: 204
    production   181 files  +1665 -619  (2284 lines)
    test           8 files  +72 -44  (116 lines)
    locale         8 files  +1751 -27  (1778 lines)
    baseline       3 files  +30 -0  (30 lines)
    other          4 files  +23 -5  (28 lines)

production 多 1 個檔、+27 行:主要是 use-ai.ts(folder repo 的 AI 解衝突路由)與 use-saved-source-control-action-start.ts、use-source-control-action-agent-choice.ts 三處跟著上游 stablyai#31310 新結構接回 initialCwd;editor-save-queue.ts 的 dispatch 搬到 fork 檔,上游檔反而變小。

本機閘門:make -k fork-check-static 第 1 輪綠(tc、changed-code quality、fork-check-lint 全部步驟);make fork-check-seams 80 檔 469 測試全綠。

備註:chat 路由的 onStart 仍收到 agentArgs,是上游 runSourceControlAgentActionStart.ts 無條件傳 projection.agentArgs 的行為(fork 在這個檔只加 initialCwd);重寫後的 SourceControlAgentActionDialog.folder-cwd.test.tsx 因此斷言 route,不斷言 agentArgs。

CI 與審查結果見留言。

Merge Danger

Door: two-way(不合併;develop 移動前有備份分支)

Blast Radius: 全部 fork 功能

🤖 Generated with Claude Code

audichuang and others added 30 commits October 28, 2026 12:20
原本焦點留在出發的那一列,按 Enter 會選回原本的 commit。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
沿用 Source Control 分支比較的樹(單一子資料夾的鏈合併成一行、可收合),
標題列加清單/樹狀切換並記住選擇;Shift 範圍選取改照樹狀的畫面順序。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011LdpV7UCim1xUWLWDpgSsT
上游新增的 TAB_ID_RULES 以 Record<TabContentType> 列舉分頁種類,fork 的 git-graph 分頁沒有登記會讓 tc 失敗;它不是終端機,id 照原樣保留。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
負載高的全套測試裡,resetModules 後重新 import 花了 723ms,超過 200ms 的 timer 延遲,timer 在清除前就觸發。改成只算 restore 之後的觸發;拿掉清除時兩個測試仍會失敗。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
runs-on 改讀 repo variable FORK_RELEASE_RUNNER(設 orca-release 走 macmini,未設退回 macos-15);
self-hosted 直接用登入鑰匙圈裡已信任的簽章身分,只有 GitHub 機器才匯入 p12、sudo 信任憑證、清理暫時鑰匙圈。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
macmini 實測 dryrun:pnpm store 上傳 6.5 分鐘、每個檔案向 Apple 時間戳伺服器簽章約 1 秒(共 6.7 分鐘),
都比 build 本身久。fork 不做 notarization,憑證效期到 2036,時間戳沒有用處。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
每個 release tag 存的快取,下一個 tag 讀不到(GitHub cache 只給同一個 ref 與預設分支),每次 hosted 白花 2.5 分鐘上傳;
fork-dmg 用不到 git 歷史,完整 checkout 改成淺層,release 說明需要的 annotated tag 另外抓。
release 說明改成獨立步驟讓 dryrun 也會跑到;fork-release-dryrun-hosted-* 固定跑 GitHub 機器,讓退回路徑有得測。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…te 分區

- Changed files 樹狀的資料夾列也能右鍵複製路徑與 Copy Full Source
- repo 切換器改成一列一個 worktree,帶 repo 的 badge 色塊,選單密度與其他選單一致
- branch 篩選把 local 與各 remote 分成區塊,remote 區省略重複前綴

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCAZ1XcuRQXFvNrgYFgP8G
- 分頁列右上角加 Git Graph 按鈕(只在最右上那組,已開則聚焦)
- 資料夾多 repo 側欄改成單一清單 + 底部固定面板,repo 色塊、branch 獨立灰字、0 不顯示、動作 hover 才出現,分成有變更/沒有變更兩組
- Git Graph 工具列:repo 切換器移到最左並加 repo 色條,新增 User / Paths 篩選鈕與清除
- commit 雙擊或 Enter 開全部差異,詳細窗格標題列加按鈕
- 變更檔案右鍵加 Show File History

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCAZ1XcuRQXFvNrgYFgP8G
- 沒設 badge 顏色的 repo 依加入順序配黃金角色相,側欄、切換器、Git Graph 色條一致
- 選中 repo 的名稱與色塊回到面板工具列,不再另佔一列重複 upstream
- Git Graph 搜尋框只顯示自由文字,author/path 由篩選鈕呈現

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCAZ1XcuRQXFvNrgYFgP8G
- Show File History 一併納入 remote branch,不再漏掉只在 remote 的歷史
- 篩選 token 改成分段重組,引號內的值原樣保留並支援跳脫,不再互相改寫
- 多 repo 清單:方向鍵直接切換選取、再點目前 repo 不收起面板、背景刷新不會弄丟焦點、hover 動作不蓋住變更數
- repo 切換器搜尋改成子字串比對,會真的縮小清單

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCAZ1XcuRQXFvNrgYFgP8G
- Git Graph e2e 改用 Commits 區頭按鈕的 data 屬性,避開分頁列同名按鈕
- 多 repo e2e 把 Changes 區塊限定在選中 repo 的面板,選中 repo 名稱改比對內層文字
- Paths 篩選鈕與最近路徑用 whitespace-pre,連續空格照實顯示

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCAZ1XcuRQXFvNrgYFgP8G
- 沒選 commit 時詳細區收成窄邊,branch 標籤限寬,非目前分支訊息提高對比
- Git Graph 分頁的篩選與側邊欄 Commits 分開,預設 All branches,存在分頁狀態上,換 repo 只丟掉已選分支
- 分頁第一次載入自動選中目前分支最新的 commit;篩選沒結果時提供清除篩選與看全部分支

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCAZ1XcuRQXFvNrgYFgP8G
… Source Control 開啟

- 資料夾工作區側邊欄與 Git Graph 分頁共用選中 repo;方向鍵切換時分頁延遲 250ms 跟上,避免每鍵重載
- Git Graph 工具列加「在 Source Control 開啟」;Commits 右鍵加 Show in Git Graph,找不到會往下多讀或提供清除篩選
- 分頁篩選以分頁狀態為準,A→B→A 不會帶回舊篩選;關閉分頁時清掉暫存;detached HEAD 自動選對 commit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCAZ1XcuRQXFvNrgYFgP8G
- 側邊欄切 repo 讓 Graph 跟上時保留鍵盤焦點,只有主動開啟或回到分頁才聚焦 Graph
- 記住的 commit 選取改為依分頁保存,關閉分頁時清掉,重開會選目前分支最新 commit
- 詳細區標題列加 Hide details,選了 commit 也能收成窄邊並記住

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCAZ1XcuRQXFvNrgYFgP8G
- openGitGraphTab 送出一次性的聚焦請求,Graph 已在前景時也會聚焦選中的 commit 列
- 從右鍵選單或對話框觸發時短暫守住焦點,避免選單關閉把焦點還給側邊欄;側邊欄跟隨換 repo 不送請求

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PCAZ1XcuRQXFvNrgYFgP8G
…rk-check-lint

v1.4.237's lint script adds check:host-list-render-ratchet and
check:mobile-shared-dependency-versions; fork renderer components and
lockfile edits can trip either.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ipCode restore

v1.4.236 makes path-based requestEditorSaveQuiesce take an autosave hold and
return its release. The fork's multi-owner discard and ClipCode restore ignored
it, so autosave of a restored file stayed off until reload. Both now go through
requestEditorSaveQuiesceAll and release in finally.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d ClipCode delete

Since v1.4.236 a path quiesce takes an autosave hold that the caller must
release. No test noticed when the fork's two-owner discard (repo + folder)
or ClipCode restore's delete branch dropped that release, or when
requestEditorSaveQuiesceAll kept the holds it took before another owner
refused. Cover single and bulk discard after git succeeds, after git fails,
and on a partial quiesce failure, plus the restore delete branch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hold release; unblock guarded-write scan

- conflict-review-folder-owner.test.tsx: one review tab per repo in a folder, conflicts tracked
  under the repo key, the conflict file and the overview reads carry the repo's gitWorktreeId.
- folder discard: holds stay taken while git is still running (deferred git), not only after
  the mocked call returns.
- clipcode-restore-plan: pick the preview bucket without the `? 'overwrite'` text that
  editor-save-guarded-write-paths.test.ts reads as an overwrite-consent grant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-check

fork-check-lint ran a hand-picked subset of upstream `pnpm lint`, and the rebase step only
compared what a new release added, so checks from earlier releases stayed missing. Running them
all turned up three fork violations, fixed here:

- layout-writer ratchet: the fork's Git Graph tab writes editor layout the way upstream's own
  editor-tab openers still do; list it in the renderer baseline like them.
- max-lines: the fork's gitWorktreeId field pushed workspace-session.ts to 301 lines; move
  upstream's buildSanitizedTabsByWorktree to its own file (provenance comment at the top).
- WSL-move localStorage census: register the two fork modules that use localStorage.

fork-lint-parity.mjs now fails when upstream lint has a step fork-check-lint neither runs nor
excludes with a reason. fork-check-source-scans runs the src tests that read source text, which
`vitest --changed` never selects because they import nothing the fork changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fork-source-scan-tests now scans every upstream unit root through
discoverUnitFiles (so UNIT_EXCLUDE applies), recognises async fs reads,
globs and repo-relative literals, skips six upstream tests that fail on
macOS hosts at v1.4.237 too (Linux CI still runs them), and exits
non-zero on an empty selection; the make recipe stops before vitest
when it does. fork-lint-parity reads the recipe from the exact
prerequisite line, strips '@', ignores comments, and both scripts are
importable with vitest coverage.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
make fork-check-e2e runs the folder multi-repo e2e plus every spec the
fork added or changed since FORK_BASE; fork-check-full reuses it, and a
new "fork e2e specs" job runs it under Xvfb so "Fork PR checks passed"
requires it, including on the unattended rebase PRs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
audichuang and others added 6 commits October 28, 2026 12:22
…ue.ts

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Upstream stablyai#34119 grew editor-save-queue.ts to the 300-line max-lines cap; the fork's filePath
field pushed it over.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Upstream stablyai#11567 checks win.isDestroyed() and webContents.isDestroyed() before sending IPC.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Upstream stablyai#33964 moved the file-name list that happened to contain README out of the renderer.
…r assertions

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Upstream stablyai#34222 passes { wakeWslDistro: true } on the active tab's load and Retry.
…ped resolveLintCommands

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tream's saved-start path

Upstream stablyai#31310 replaced the dialog's agent checks with the + menu's agent choice and moved
saved-recipe starts to use-saved-source-control-action-start.ts. use-ai.ts's resolve-conflicts
editor now carries the folder workspace and the repo's start directory, and the dialog test is
rewritten for the new hooks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@audichuang

Copy link
Copy Markdown
Owner Author

本機閘門開始(RUN=20261028T041757Z)

@audichuang

Copy link
Copy Markdown
Owner Author

盲審開始(head ce43f34)

audichuang and others added 9 commits October 28, 2026 12:46
…34585)

Hourly and daily builds publish unvetted dev channels on a schedule, so their
latency is not user-facing. Move the macOS build to hosted macos-15, the
Windows build to hosted windows-2022 (the release path), template
qualification to hosted lanes, and the small routing/publish jobs to
ubuntu-latest. Adhoc and release builds stay on Blacksmith.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>

(cherry picked from commit f4d98b7)
… runners (stablyai#34568)

* ci: move secondary, scheduled and contract workflows to GitHub-hosted runners

Public-repo standard hosted runners are free under Enterprise. Release, build,
benchmark, e2e and unit workflows stay on Blacksmith. ci-xterm-cache seeds both
cache stores since its PR consumer's pool is undecided.

* test(pi): resolve the smoke bundle's external packages from the repo

stablyai#34148 pulled zod into the commit-message planner graph; the bundle in the
OS temp dir could not resolve it on any runner.

* ci(unit): use four workers on the hosted four-core x64 runner

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>

(cherry picked from commit 791502f)
…tablyai#34600)

* ci: narrow native, launcher and packaging cache keys and stop PR-local saves

* ci: hash Rust crate sources, not build outputs, in launcher and hook keys

* ci: fail closed on unlocked native packages and cover transitive key inputs

* ci: resolve the Windows Rust cache scope with a script, not a nested local action

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>

(cherry picked from commit 2cd3e6d)
Hosted macos-15 fails afterPack's packaged x64 terminal host boot check
(hourly run 40608643418: timed out waiting for the PTY), so no
latest-mac.yml is published. Windows, template qualification and routing
jobs stay on hosted runners.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>

(cherry picked from commit beb53a7)
… stop PR-local saves (stablyai#34672)

- Warm electron-builder-linux-<versions> and the hosted ubuntu-24.04 Electron native modules
- PRs restore hosted Linux Electron native modules without saving
- Replace mobile verify's bundler-cache with a restore of a warmup-saved bundle
- Drop the pnpm store cache where a direct install was faster (mobile main, glibc-floor containers)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>

(cherry picked from commit e0f32dc)
Each 12-vCPU arch job spends ~3 of its ~7 minutes waiting on Apple's
notary service; packaging itself runs at the same speed as the hourly
build's 6-vCPU runner. Halve the per-minute rate.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>

(cherry picked from commit 1df26ab)
…#34512)

* ci: restore main's Vitest transform cache in PR unit shards

Main produces per-shard transform caches on a schedule; PR shards restore
the newest one for the same config/lockfile/runtime policy. A Vitest cache
key generator folds each literal specifier's resolution candidates into the
per-module key so newly added files that shadow a resolution invalidate the
importer, and bails on glob-expanded dynamic imports.

* ci: list the resolution key plugin in the node tsconfig project

* ci: accept Vitest's CACHEDIR.TAG when sealing the unit module cache

Vitest 5.0.5 tags its cache root, which made every seal fail with
'invalid cache entry name' so no producer cache was ever saved.

* ci: reseed the unit module cache when any cache-key input lands on main

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>

(cherry picked from commit 8b64ec2)
… git owner

The folder tab's overview read spreads upstream's active-tab load options ({ wakeWslDistro })
into the git-owner options; objectContaining let dropping that spread pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r repo directory

The dialog forwards initialCwd to its start hook, which passes it to the agent tab launch; no
test covered that chain for an interactive Start.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@audichuang

Copy link
Copy Markdown
Owner Author

CI 第 1 輪(head ce43f34,run 40632346756):紅。6 個 test shard 共 12 個測試失敗,全部是讀 .github/workflows 的上游 config 測試(ci-native-cache、ci-dependency-download-cache、ci-unit-module-cache、mobile-{typecheck-cache,test-change-scope,release-check-scope}、ssh-windows-mobile-bundle、mac-notarization-builder-contract、hourly-preflight-workflow、dev-channel-orcad-template-workflow)。

對照:在乾淨的 v1.4.243 worktree 跑同樣 10 個檔,結果相同(Test Files 10 failed (10)、Tests 12 failed | 221 passed (233))→ 上游自己的紅。原因:v1.4.243 的 eb94767「ci: sync release workflows with main for the v1.4.243 cut」把 .github/ 同步到上游 main 的 8b64ec2(git diff 8b64ec281a v1.4.243 -- .github/ 為空),但讀這些 workflow 的測試與腳本沒有同步。upstream-red 報告看不到它,因為它只跑 tc/lint,不跑單元測試(上游在 release commit 上也不跑單元測試)。

處理:從上游 main cherry-pick -x 分岔點..8b64ec2 之間改這些測試的 7 個 commit(f4d98b74e3、791502fae4、2cd3e6d6a3、beb53a7f9e、e0f32dcac1、1df26abf60、8b64ec281a),.github/ 一律保留 v1.4.243 那側(已經是 main 的最終狀態),只帶進測試、腳本、vitest config 與 docs。之後 git diff v1.4.243 HEAD -- .github/ 只剩 fork 原有的三個檔。本機:這 13 個測試檔 303 個測試全綠;static r2、seams r2(80 檔 469 測試)全綠。mutation 證明:cherry-pick 前(ce43f34f43)這 12 個測試在 CI 與乾淨 v1.4.243 都紅。

另外依審查者 C1 補了兩個測試(0f39c60519、424102202a),見審查留言。新的 head 4241022 重跑 CI。

@audichuang

Copy link
Copy Markdown
Owner Author

CI 第 2 輪(head 4241022,run 40634974184,04:54:58Z → 05:08:00Z):綠。fork-pr.yml 全部 job success:scope、macOS arm64 build、wire、typecheck and quality、mobile、tests 1–8/8、e2e、Fork PR checks passed。沒有自動重跑任何 job。

…esh wake a stopped WSL distro

Upstream stablyai#34222 rejects git:status on a stopped WSL distro unless the request carries
wakeWslDistro, which useGitStatusPolling sets on the active workspace's first status. The folder
panel's repo refresh is a parallel path: its open and manual sweeps now wake, polls and change
nudges stay gated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@audichuang

Copy link
Copy Markdown
Owner Author

第 2 輪審查開始(head 20ae645:修 Codex 第 1 輪的 WSL 喚醒 BLOCKING)

…the conflict dialog's repo cwd

The WSL wake test now types its request (anti-slop rejects a bare object parameter) and checks
that a save nudge stays gated. A conflict start without a saved agent opens the dialog with
use-ai's editor, which upstream stablyai#31310 spreads over the panel's worktreeId and initialCwd props;
pin that it carries the folder workspace and the repo directory. Two git-owner tests that guard
seams join the seam list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@audichuang

Copy link
Copy Markdown
Owner Author

CI 第 4 輪(head ac6ddc3,run 40638472279,05:31:17Z → 05:45:15Z):綠,fork-pr.yml 全部 job success(含 Fork PR checks passed)。第 3 輪(20ae64599e,run 40637309535)的 typecheck and quality 被 audit:anti-slop 擋下(測試 helper 的 object 參數),已在 ac6ddc3 修掉。沒有自動重跑任何 job。本機 static r4 綠、seams r4 83 檔 482 測試綠。

@audichuang

Copy link
Copy Markdown
Owner Author

盲審結果(head ac6ddc3)

審查者 範圍 VERDICT
Claude A 衝突忠實度 range-diff 16 !、2 < ACCEPTABLE(0 BLOCKING)
Claude B 上游 API 漂移 upstream-touching、importer-sweep、seam-upstream ACCEPTABLE(0 BLOCKING)
Claude C1 mutation range-diff ! hunk ACCEPTABLE(0 BLOCKING,2 個解過的 hunk 沒測試守 → 已補)
Claude C2 mutation 10 個修正 commit+seam-upstream 的 seam NOT ACCEPTABLE(1 BLOCKING,審的是 ce43f34,已由 4241022 解)
Codex 第 1 輪 全面 NOT ACCEPTABLE(1 BLOCKING)
Claude 第 2 輪 ce43f34..20ae645 ACCEPTABLE
Codex 第 2 輪(同 thread) ce43f34..20ae645 ACCEPTABLE(0/0)
Codex 補充確認(同 thread) ac6ddc3(只改測試) ACCEPTABLE(0/0)

BLOCKING 與處理

  1. Codex r1:folder repo 狀態刷新漏接 WSL 喚醒(use-folder-repo-status-refresh.ts:63)。上游 fix(wsl): background file reads and watches never start a stopped WSL distro (E9) stablyai/orca#34222 讓 git:status 對停止中的 WSL distro 沒帶 wakeWslDistro 就拒絕,上游 useGitStatusPolling 只在 workspace 第一次查狀態時帶;fork 的 folder repo 刷新是平行路徑。確認為真 → 20ae645:開啟與手動 refresh(含 mid-sweep 補跑)帶喚醒,週期輪詢與存檔/訊號 nudge 不帶;測試「may wake a stopped WSL distro on open and manual refresh, never on a poll or save nudge」:永不喚醒 → 紅、永遠喚醒 → 紅、nudge 喚醒 → 紅(ac6ddc39dc 加的斷言)。Codex r2 以 IPC 邊界重現確認已解。(審查者 B 同一件事列為 NON-BLOCKING。)
  2. C2:互動式 Start 的 initialCwd 轉傳沒有測試守(useSourceControlAgentActionStart.ts:188、useSourceControlAgentActionDialog.ts:130)。C2 審的是 ce43f34;4241022 已補「starts a terminal agent in the folder workspace at the repo directory」,拿掉 dialog:130 或 start hook:188 都紅(我、Claude r2、Codex r2 各自驗過)。C2 同時點名的 dialog-layer.tsx:203:上游 AI fix actions use the + menu's agent picker and remember chat or terminal stablyai/orca#31310 在同檔新增 {...resolveConflictsEditor} 蓋過這個 prop,真正生效的是 use-ai.ts 的 editor 物件,ac6ddc3 補「opens the conflict dialog … without a saved agent」釘住 editor 帶 worktreeId: FOLDER, initialCwd,拿掉 use-ai.ts 的 initialCwd 兩案例都紅。

另外依 C1 補:0f39c60(...load 沒人守:conflict-review-folder-owner 斷言收緊為 { wakeWslDistro: true, gitWorktreeId: 'repo-a' },拿掉 ...load → × reads the overview files through the repo, not the folder)。

mutation 證明(合格 MANUAL)

  • range-diff !:C1 的表(choice/saved-start/recovery/runSource/FileContentLoader readRelativePath/mobile git-graph/old-client git-graph/activity-visibility 各自紅的測試名見 C1 結果);只改 context 的 hunk 由 pnpm tc 涵蓋。
  • 與上游逐位元組相同:asar-transparent-fs.ts、mobile-session-surfaces.ts、reliability-gates.jsonc、terminal-spawn-restore.test.ts、right-sidebar-activity-visibility.test.ts(刪除)——git diff v1.4.243 HEAD 為空。
  • AGENTS.md(commit 18、162–164):v1.4.242..舊 develop 與 v1.4.243..HEAD 的 fork 增刪行完全相同。
  • 10 個筆記修正 commit:C2 的表逐一紅(section-order → TS2307;pty 搬家 → Cannot find module;guard → × every allowlist entry…;fork-lint-run → × runs package scripts by name…/fork-upstream-api exit 1;saved dispatch → × names the written path…+max-lines 301;updater → win.isDestroyed is not a function;ui-rounds → × name only UI text…;editor 斷言 → × retries an overview read…;use-ai → × starts a saved conflict agent…;SKILL.md 只改文件)。
  • 我另做的:saved-start 拿掉 initialCwd → × falls back instead of starting…;choice 拿掉 initialCwd → × cannot start a saved chat-only agent for a repo below the folder root。
  • 7 個上游 cherry-pick:cherry-pick 前(ce43f34f43)那 12 個測試在 CI run 40632346756 與乾淨 v1.4.243 都紅,之後綠。
  • C 列的「沒有測試會紅」而落在解過衝突的 hunk 上:C1 feat(source-control): folder workspace 多 repo Source Control + ClipCode 複製/還原 #1、feat(source-control): Commits 區加全螢幕 Git Graph 檢視 #2 與 C2 feat(source-control): folder workspace 多 repo Source Control + ClipCode 複製/還原 #1 都已補測試。C2 feat(source-control): Commits 區加全螢幕 Git Graph 檢視 #2(useEditorPanelFileContentLoader.ts:104 options?.gitWorktreeId ??)與 fork 強化:降低上游 rebase 衝突與功能悄悄壞掉的風險 #3(recovery-launch.ts:197 worktreeId: launchWorktreeId)雖在衝突 hunk 範圍內,但 fork 的 seam 行 rebase 前後相同(diff <(git diff v1.4.242 2d87a5f19d -- f | grep gitWorktreeId|launchWorktreeId|initialCwd) <(git diff v1.4.243 HEAD -- f | …) 兩檔皆為空),衝突只因上游在旁邊插了 readGrantId 兩行/改成 projection,上游 hunk 不碰這兩個條件 → 依 resolution-history 的判準屬既有缺口,已寫成 known-resolutions「fork 自身問題」條目讓下一次 run 補測試。

反駁

  • Claude r2 chore(fork): main 改為發版指標,新增 make sync 取代 git pull #7「三個 fork commit 帶 Co-Authored-By」:auto-rebase SKILL.md 明定「所有 commit:message 英文,結尾 Co-Authored-By: Claude Opus 5.5 …」,這是這條 pipeline 的規定,照做。
  • SourceControlAgentActionDialog.folder-cwd.test.tsx 不再斷言 chat 路由「不帶 CLI 參數」:上游 runSourceControlAgentActionStart.ts 無條件把 projection.agentArgs 傳給 onStart(fork 在這個檔只加 initialCwd),不是回歸。

NON-BLOCKING 留待(既有缺口或建議,列進通知與筆記)

importer-sweep 人工確認

@audichuang

Copy link
Copy Markdown
Owner Author

develop 已移到 ac6ddc3(舊 develop 備份在 backup/develop-v1.4.242-20261028T041757Z),接著發版。

@audichuang

Copy link
Copy Markdown
Owner Author

發版開始 v1.4.243-fork.1(main 與 tag 已推到 ac6ddc3)

@audichuang

Copy link
Copy Markdown
Owner Author

發版失敗:v1.4.243-fork.1 的 release run 40640209742 在 make fork-dmg 紅:Missing orca-process-footprint helper。上游 stablyai#34053(d58ab9762c)新增 macOS helper orca-process-footprint 並加進 build:native/build:mac:release,fork 的 Makefile computer-use target 只建 keyboard-layout 與 notification-status;正式簽章(isMacRelease)時 electron-builder afterPack 找不到它就丟錯。PR CI 的 macOS 建置是 ad-hoc、不走這個檢查,所以沒抓到。確定性失敗,沒有重跑。修法(已在本機驗證 pnpm run build:process-footprint-macos -- --single-arch 產出 arm64 helper):在 computer-use target 加這一行,已寫進 fork-canary-notes 的 known-resolutions(fork 自身問題),下一次 auto-rebase 會套用並發版。develop 與 main 已在 ac6ddc3,tag v1.4.243-fork.1 已推(不刪);cask 仍是 1.4.242-fork.1。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant