Skip to content

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

Closed
audichuang wants to merge 329 commits into
ci-base/v1.4.242from
rebase/v1.4.242
Closed

audichuang wants to merge 329 commits into
ci-base/v1.4.242from
rebase/v1.4.242

Conversation

@audichuang

@audichuang audichuang commented Oct 27, 2026 •

Copy link
Copy Markdown
Owner

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

Summary

-develop = v1.4.241 + 326 個 fork commit(含 PR merge,rebase 後攤平)
+develop = v1.4.242 + 324 個 fork commit + 3 個修正 + 2 個上游 main 的 cherry-pick
  • range-diff:319 =、5 !、2 <、5 >。rerere 沒有重放任何舊解法;locale 檔由 merge driver 合好,沒有停下來。
  • 兩個 <,原因不同:
  • 用到的筆記條目(known-resolutions.md):
  • 衝突解法(逐 commit):
    • df6ae0f folder workspace 多 repo(條目 17621d5)
      • editor-external-watch-path-index.ts:採上游結構(this.directKey = externalChangePathKeyFor(scope.worktreePath)),加回 fork 的 folder-scoped diff:建索引 key scoped ? this.directKey(file.filePath) : file.relativePath,查詢時合併 diffsByRelativePath.get(change.relativePath) 與 diffsByRelativePath.get(this.directKey(change.absolutePath))。
    • 9179c28 fork macOS 發行打包(條目 8d18f31)
      • build-computer-macos.mjs:整檔採 v1.4.242(丟掉 fork 的 slicesDir/--show-bin-path 與 capture());這個 commit 的其他檔照留。
    • a0c670f FORK.md 與 AGENTS.md 指向(條目 5129275)
      • AGENTS.md:採上游全文(Avoid adding low-value tests… 不帶 [Anti-patterns](…) 連結),檔尾補回 fork 的 # Fork Maintenance。最終 fork 段落跟舊 develop 一字不差。
    • 7c0479d、edddbe1b0a:range-diff 的 ! 只來自上游在附近改了 context(locale 新 key、sonner.tsx 的 INLINE_ACTION_CLASS_NAMES),沒有停下來解衝突。
  • 額外 commit:
    • 2884c0778d ci(fork): run fork-check-lint's upstream steps from run-lint.mjs LINT_STEPS:fork-lint-run.mjs 改讀 LINT_STEPS/resolveLintCommands(登記進 config/fork-upstream-api.txt);同一個 commit 也改了 FORK.md、Makefile 註解與 auto-rebase SKILL.md 第 1 步第 8 點的描述(原本寫「讀 package.json 的 lint」)。
    • 91693e96bc fix(editor): match folder-scoped diff tabs across Windows path spellings:editor-autosave.ts 的 fork 分支改用 pathKey(file.filePath) === absolutePathKey;兩個 fork 測試各補一個 Windows 拼法案例。
    • f34b34a706 test(fork): warm updater-setup's cold import before the nudge cases:只改 fork 測試檔(beforeAll 預熱 import)。
    • a6a4352e8a、dfb4a446e8:cherry-pick -x 上游 main 的 f34c13c(test: remove 57 low-value cases and standalone browser probes stablyai/orca#33889)與 ad2156c(test: remove 140 low-value cases and 49 suites stablyai/orca#34062)。v1.4.242 本身過不了 check:test-file-runners(ci-unit-files.mjs 把 browser-route-{tcp-egress,h3-egress,dns-prefetch}.electron.test.ts 列為專屬 job,但 pr.yml/unit-tests.yml 已經不跑;乾淨的 v1.4.242 worktree 跑同一條指令一樣紅),上游 main 用這兩個 commit 把三個檔刪掉。f34c13ca1e 在 .github/workflows/pr.yml 有衝突:v1.4.242 的 pr.yml 已經沒有這三行,採 v1.4.242 那側,所以這個 commit 的 patch 跟上游不同(之後 rebase 到含 test: remove 57 low-value cases and standalone browser probes stablyai/orca#33889 的 release 時可能不會自動略過,會空掉或在 pr.yml 衝突,照上游即可)。證明:改回去(還原那幾個測試檔與 ci-unit-files.mjs)check:test-file-runners 會紅,列出 tcp-egress/dns-prefetch(第一個)與 h3-egress(第二個)。
  • 上游新增的 workflow 等 develop 移動後跑 make fork-ci-disable-upstream。

Evidence

make fork-footprint:

cherry-pick 前(v1.4.242..f34b34a706)       cherry-pick 後(v1.4.242..dfb4a446e8)
fork-added files:        504                 504
modified upstream files: 203                 320
  production   180 files  +1638 -598         189 files  +1639 -1224
  test           8 files  +72 -44            113 files  +80 -4156
  locale         8 files  +1751 -27            8 files  +1751 -27
  baseline       3 files  +30 -0               5 files  +30 -6
  other          4 files  +23 -5               5 files  +43 -115

差額全部來自兩個上游 cherry-pick(刪上游測試與 fixture),下一次 rebase 到含它們的 release 後會消失。fork 自己的足跡是左欄;上一次(v1.4.241)的 production 數字在 PR #83 沒有記錄,無從比較。

本機閘門、fork footprint、CI 與審查結果見留言。

Merge Danger

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

Blast Radius: 全部 fork 功能

🤖 Generated with Claude Code

audichuang and others added 30 commits October 27, 2026 08:22
…er-manager 測試會檢查它

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

- 新增 .github/workflows/fork-release.yml(macos-15):tag 必須是 fork main,匯入自簽憑證並設信任後跑 make fork-dmg,檢查打包版本,發 Release(說明取自 annotated tag),再用 HOMEBREW_TAP_TOKEN 更新 Casks/orca-fork.rb
- fork-release-dryrun-* tag 只打包簽章並上傳 artifact,不發 Release、不動 tap,用來測 workflow
- FORK.md 的 Release 段落改成推 annotated tag 由 CI 發版

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
folder 工作區的 Git Graph 只列已加入的 repo,乾淨沒動過的子 repo 因為從沒匯入而選不到。
選單打開時掃一次資料夾,底部顯示「Add repositories in this folder (N not added)...」,
點下去開 Source Control 同一個加入對話框;只限本機資料夾,和 Source Control 一致。
未加入 repo 的計算抽成 getNewNestedRepoCandidatesFromState,對話框共用。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UuoXdYuN5y46yVVU88kSwh
上游移除 check:deprecated-runtime-owner-ratchet,新增 check:unproven-pty-retirement-ratchet 與 check:id-only-store-write-ratchet。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… folder、git 留在 repo

v1.4.232 把開檔邏輯抽到 open-uncommitted-entry.ts;rebase 時 fork 的分頁/git 分流改成它的參數,補契約測試防上游改掉。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
electron-builder 的 files 是排除清單,本機 checkout 裡未追蹤或被 ignore 的項目
(.orca/drops 截圖、CLAUDE.local.md、.codegraph 等)會被打進 app.asar。fork 設定
改成排除 git 未追蹤的頂層項目(out/、node_modules/ 除外),fork-dmg 最後再檢查
app.asar,有未追蹤的頂層項目就讓 build 失敗。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
原本只保留 fork-pr.yml,rebase 後跑一次就把發版 workflow 也停掉;改成保留所有 fork-*.yml。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
repo 有 6 個以上時,清單上方出現過濾框:空白分隔的每個詞都要出現在 repo 名稱或分支裡(不分大小寫)。
Enter 打開第一個符合的 repo、↓ 移到第一列、Esc 清空;展開中的 repo 一律保留在清單裡。
面板超過 400 行,把頂端工具列和過濾框拆成各自的元件。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UuoXdYuN5y46yVVU88kSwh
實機看到:有 repo 展開時,過濾結果被擠到展開面板底下,離輸入框很遠,打完字像沒反應。
現在輸入過濾字時暫時收起展開的面板,只列符合的 repo;點選或 Enter 打開它並清掉過濾字。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UuoXdYuN5y46yVVU88kSwh
原本借用了真實工作環境的 repo 與資料夾名稱;改成 orders-api、not-added、docs/guide 這類說明測試在測什麼的名字。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UuoXdYuN5y46yVVU88kSwh
- 比對改用共用的 splitFileNameFilterTokens / pathMatchesFileNameFilterTokens(和檔案總管過濾一致,含全形空白)。
- toggleRepo 依畫面上是否展開判斷,過濾中點選與 Enter 走同一條路,拿掉 openRepo 與呼叫端的三元式。
- 過濾框因 repo 少於 6 個而隱藏時清掉過濾字,避免之後回來時悄悄縮小清單。
- 展開時的上下兩段清單還原成 slice(過濾中不會有展開面板);移除別名、重複算的 label 與多餘的 isComposing 檢查。
- 補 ↓ 移到第一個結果、過濾字隨框隱藏而清除的測試。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UuoXdYuN5y46yVVU88kSwh
原本只能從 COMMITS 標題旁的小圖示(資料夾工作區還得先展開某個 repo)、⌘⇧H 或 ⌘J 打開 Git Graph。
現在資料夾工具列與一般 repo 工作區的 Source Control 標題列都有帶文字的「Git Graph」按鈕,提示顯示快捷鍵。
資料夾開在目前選中的 repo;進去後仍可用切換選單看其他 repo 的完整圖。和 COMMITS 旁的入口共用提示元件。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UuoXdYuN5y46yVVU88kSwh
實機把右側欄拖到最窄時,資料夾工具列的名稱被「Git Graph」文字整個擠掉。
工具列寬度小於 300px 時收起文字(同 tab bar 的 container query 做法),按鈕仍帶 aria-label。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UuoXdYuN5y46yVVU88kSwh
分支一多,完整 Git Graph 的圖欄會被一路佔著 lane 的舊分支撐寬,Message 欄被擠到剩幾十 px。
改用 fork 自己的 lane 版面:沿用上游 view model 的拓撲和顏色,跨過超過 20 列的連線只在兩端各留 2 列並畫箭頭,
點箭頭跳到另一端;目前分支自己的主線固定在第 0 條、永不摺疊。側欄的小圖不變。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
實機看到一排長期分支疊在一起時,箭頭那一列的欄位被壓縮讓給下一個 commit,點剛好畫在箭頭上。
箭頭前後各多保留一列欄位,而且保留的欄位不跟著壓縮移動。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- lane 從開始到結束都留在同一欄,只在該列沒有 commit 點擋路時才往左移一欄;
  不再有線橫穿別的 commit 點,箭頭保留的欄位也不會搶走 HEAD 的最左欄(第 0 欄保留到 HEAD 主線結束)
- 點還沒載入對端的箭頭不再選到底下那一列,提示改成「載入更多後可跳過去」
- 跳轉後把目標 commit 捲到畫面中間
- 詳情面板加「子提交」連結,和「父提交」一起成為沿著摺疊連線移動的鍵盤路徑

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex 第二輪審查:孤兒分支的 HEAD 沒有往下的線,原本因此沒被固定在第 0 欄;
點「子提交/父提交」跳過去後焦點留在已消失的連結上,方向鍵無法繼續移動。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
點擊改由箭頭自己處理並停止冒泡,不再依賴 commit 列按鈕的 onClick;分界列不是按鈕,原本點了沒反應。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
分界列不在可選取的 commit 清單裡,跳到它沒有反應。往下的箭頭改接分界列下方那個 commit,往上的接上方那個。
另把從上游 swimlane 拆出線段與決定摺疊的部分移到 git-graph-lane-tracks.ts。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
原本焦點留在出發的那一列,按 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>
audichuang and others added 19 commits October 27, 2026 08:22
…oves

/code-review of #80: scope tests keep only paths the fork's full-scope guard rejects
(docs/site) plus the skills rule; the skip rule lives in the scope script and the gate
checker only; the heavy jobs drop a draft check scope already applies; the
isDocsOnlyPath pin says why it imports; FORK.md's local-check line follows the scope job.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rge may be released

The user chose no branch protection: the auto-rebase force-pushes develop with a lease.
A docs-only PR's merge commit ran no build, so FORK.md's Release rule now releases it only
when its first parent passed the full checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review of #81: walk the first-parent chain past consecutive docs-only merges, name what
counts (a feat merge whose run built, or the auto-rebase head), say how to tell a docs run,
and keep the fork-check-full sentence's subject explicit.

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

/code-review of #81: a docs-only merge is one whose PR's scope job said docs (no invented
job names); the vouching ancestor must be releasable by the full rule, and if it is not,
neither is the docs merge. The direct-push exception names the user's own rebases too,
which are also why develop stays unprotected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upstream stablyai#33428 makes refreshGitStatusForWorktree require ownerHostId so a
same-path twin on another host never gets this copy's transport. Resolve the
copy once, as useGitStatusPolling does, and pass its host, connection and
transport; the test pins that all three reach the refresh.

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

v1.4.241 adds check:e2e-typecheck-ratchet with an empty baseline. The `in`
check could not narrow the page.evaluate union, so barBox stayed possibly
undefined; test the value instead.

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

v1.4.241 adds check:flaky-test-pattern-ratchet, grandfathering upstream's
existing findings. The fork's own tests (19 rule/file pairs, mostly e2e
specs and real-timer component tests) get their entries the same way, as
FORK.md asks for upstream ratchets; upstream rows keep their order.

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

The cherry-picked upstream fix adds two en.json keys that upstream has not
translated yet; fork-locale-parity counts them as fork keys until a release
carries them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1.4.241 rebuilt buildTabStripLayoutKey; its fork lookup by the tab's own repo
had no test, so a revert to relativePath would stop folder tabs re-rendering
when their repo status changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The v1.4.241 auto-rebase met four new upstream checks one fork-check round
at a time: fork-lint-run stopped at the first failing step and make stopped
fork-check-lint at the first failing check. Both now run everything and list
the failures. The canary also runs upstream's lint steps in the merged tree
(report-only), so new ratchets show up a day before the release.

Also lists the folder git-status layout-key test in the seam groups.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ly on static checks

Auto-rebase run 121 (v1.4.241) ended its turn to await a background
fork-check; Orca judged the idle run completed and closed its terminal,
killing the job. Both pipeline skills now wait in the foreground in
sub-10-minute calls (config/scripts/fork-wait-for-job.sh, gh-wait -t,
codex-companion wait), and Claude reviewers run as `claude -p` children,
since the Agent tool only runs in the background.

The auto-rebase's local gate is now `make -k fork-check-static` plus the
seams; the full unit suite, e2e, wire and mobile run once on Fork CI
(Linux) instead of again on a loaded macOS host with upstream-only reds.
Blind review starts as soon as the head is pushed, alongside CI. Lint
failures are checked against vNEW and fixed by cherry-picking upstream's
own fix. Step 7 disables upstream workflows again after main moves, since
GitHub registers new ones only from the default branch. The canary skill
diagnoses the new lint section of its report.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Fresh exit-file names per run and an absolute path to the wait script;
  a stale .exit ended the wait at once, and the base worktree has no fork
  scripts.
- Auto-rebase: launch reviewers, wait for CI, then wait for reviewers; A/B
  prompts state MAIN is read-only (claude -p runs without permission asks);
  repro a fork e2e by its spec, not make; the step 8 notice no longer
  mentions local e2e.
- Canary: the foreground-wait rule covers every long command; lint
  failures are attributed from the files they name instead of a second
  worktree that cleanup never removed; canary-last.json gains lintFailures.
- fork-lint-run reports a missing exit code as 1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Bash tool's default timeout is two minutes, so a nine-minute wait
without `timeout: 600000` is moved to the background: the run-121 death
again. Both skills now say so, and say how to tell a killed job from a
slow one.

Also: a cherry-picked upstream lint fix is proven by its lint step turning
red (FORK.md's gate and step 6 agree), its translations go in a separate
commit so the patch-id still matches upstream, exclusions never override
the CI gate, the post-release workflow disable is retried and never blocks
the release, and claude -p reviewers are told not to background work.

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1.4.241 took 2h40m and nobody could say where without rebuilding the
timeline by hand. Each run now records its phase durations next to the
previous run's, so a slow phase shows up in the notes instead of in the
user's patience.

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

Upstream v1.4.242 (stablyai#33817) replaced the `pnpm lint` && chain with
`node config/scripts/run-lint.mjs`, so parsing package.json's lint
script found a single step and reported every EXCLUDED entry as stale.
fork-lint-run now reads LINT_STEPS and resolveLintCommands from
run-lint.mjs (pinned in fork-upstream-api.txt), runs package scripts by
name and run-lint's bare commands through `pnpm exec`, and keeps the
failure message format fork-canary.sh parses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upstream v1.4.242 (stablyai#14812) folds Windows separator and drive spellings
in every absolute-path match for external file changes. The fork's
folder-scoped diff tabs match by absolute path too, so both the watch
batch index and getOpenFilesForExternalFileChange compare through the
same path keys now, with a fork test for each.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The first case imported updater-setup cold after vi.resetModules() and
timed out at 30s under full-suite load. A beforeAll import with a 120s
timeout pays the transform once; the cases still reset modules.

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

Copy link
Copy Markdown
Owner Author

本機閘門開始(RUN=20261027T001750Z)

OrcaWin and others added 2 commits October 27, 2026 08:28
…ai#33889)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
(cherry picked from commit f34c13c)
* test: remove 140 low-value cases and redundant browser probes

* fix: remove unused upstream chat menu import

* test: pin the host-split layout fixture branch

---------

Co-authored-by: Orca Test Audit <test-audit@stably.ai>
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
(cherry picked from commit ad2156c)
@audichuang

Copy link
Copy Markdown
Owner Author

盲審開始(head dfb4a44;本機 static 第 2 輪與 seams 綠)

@audichuang

Copy link
Copy Markdown
Owner Author

CI:fork-pr.yml run 40426961139(head dfb4a44)第 2 次嘗試全綠,Fork PR checks passed SUCCESS。第 1 次只有 fork-check tests (3/8) 紅:上游自己的 src/main/ai-vault/session-scanner-pi-omp-shared-root.test.ts > lists each transcript once under its writer when Pi scans the same folder for a workspace(fork 沒碰 ai-vault),rerun --failed 一次就綠,算偶發。00:31:34 → 00:58:30(含重跑)。

@audichuang

Copy link
Copy Markdown
Owner Author

盲審結果(head dfb4a44,第 1 輪,沒有修正輪)

審查者 VERDICT BLOCKING
Claude A 衝突忠實度 ACCEPTABLE 0
Claude B 上游 API 漂移 ACCEPTABLE 0
Claude C 測試與 seam ACCEPTABLE 0
Codex(thread 01a17ac6-72f7-7e50-897d-d25396347743) ACCEPTABLE 0

Mutation 證明(合格的 MANUAL)

項目 守它的測試 改回去之後紅的那一行
! 3c377c2 editor-external-watch-path-index.ts 索引 key/查詢 key editor-external-watch-path-index.fork.test.ts 整檔改回 v1.4.242 → × matches a folder-scoped diff tab by absolute path, not its repo-relative path、× …across Windows separator and drive spellings;只把查詢改回 change.absolutePath → Windows 那個案例紅
! 8362758 build-computer-macos.mjs + < d3acf4d 等於上游,沒有 fork 程式碼可以 mutate git diff v1.4.242 HEAD -- config/scripts/build-computer-macos.mjs 是空的(上游 stablyai#21146 --build-system native)
! 35bcf04 AGENTS.md 這個檔沒有 lint 檢查(check:readme-local-links 只掃 README;把連結加回去還是綠,筆記條目寫錯了),改用逐位元組證明 git diff v1.4.241 654945a14a 和 git diff v1.4.242 HEAD 在 AGENTS.md 新增的行完全相同,兩邊都沒有刪上游的行
! ef14bd1 en.json(只有 context 變) fork-locale-parity 174 個 fork key 在七個語系都在;少掉的 fontKeyword* 兩個 key 改由上游 5dfaee0 帶進來
! accb786 sonner.tsx(只有 context 變) sonner.fork.test.tsx offset/mobileOffset 改回上游 → × lifts toasts above registered bottom chrome on wide and narrow windows
< 23bc22a 等於上游 上游 5dfaee0(stablyai#33715)已經在 v1.4.241..v1.4.242 裡
2884c07 fork-lint-run fork-check-lint 的 fork-lint-run 那一步;fork-lint-run.test.mjs 換回舊腳本 → fork-lint-run: EXCLUDED names check:path-literal-ratchet, which upstream lint no longer runs; drop it(exit 1);測試 × applies this checkout's exclusions to its lint script;把 LINT_STEPS 的 export 拿掉 → fork-upstream-api.mjs 紅
91693e9 autosave Windows path key editor-autosave.fork.test.ts 改回 file.filePath === absolutePath → × matches a folder-owned diff tab across Windows separator and drive spellings
f34b34a updater-nudge 預熱 「fork 自身問題」例外(只改 fork 測試檔) 本機 4/4 過,CI 綠
a6a4352、dfb4a446e8 上游 cherry-pick check:test-file-runners 還原 tcp/dns 測試檔與 ci-unit-files.mjs → …do not contain "src/main/browser/browser-route-tcp-egress.electron.test.ts"/dns-prefetch;revert 第二個 → …h3-egress…

沒有測試會紅的 seam(C 找到的,都是既有缺口,不擋這次)

每項都已確認:fork 的行在 rebase 前後相同,上游在那個檔的 hunk 也沒碰到這個 seam。

  1. editor-autosave.ts:177 owner 檢查 getOpenFileGitWorktreeId(file) === target.worktreeId:舊 develop 的第 174 行就有這行。上游 hunk 只加 pathKey、改 edit 分支;修正 commit 只改第 174 行的比對。拿掉它只影響一種情境:事件的 target 是 folder 本身、分頁是 repo-scoped diff。這時 index 路徑(editor-external-watch-path-index.ts)會配對到,fallback 路徑會排除,兩條路徑原本就不一致。要以哪條為準留給人決定,不補測試去固定其中一邊(已寫進筆記)。
  2. CombinedDiffViewer.tsx:57、:69 讀 store 時用的 gitWorktreeId:上游只改 toggleSection(167–183 行)。
  3. use-global-keybindings.ts:236 的 sourceControl.openGitGraph:上游只加 tab.close 的 preview 防護(160 行);e2e git-graph-full-view.spec.ts:124 有守,CI 綠。
  4. app-bridge.ts:37、ipc/app.ts:190 的 App bundle replaced IPC:上游只改 stageBeforeUnloadSync;ipc/app.ts 上游沒動。

其他 NON-BLOCKING

  • Codex:fork-lint-run.test.mjs 沒有跑真正的 CLI 入口,入口改回舊邏輯時單元測試仍是綠的(fork-check-lint 會紅)。建議用假的 pnpm 補一個 CLI 測試。
  • A:build-computer-macos.mjs 現在靠 SwiftPM 已標 deprecated 的 --build-system native。等 SwiftPM 移除它時,要從 develop 歷史找回 fork 的 --show-bin-path 做法(d3acf4d1a6/9179c28214)。
  • B:importer-sweep.txt 用檔名比對,types.ts、worktree.ts 這類常見檔名誤報很多。
  • 上游 API 漂移人工確認過的呼叫點:externalChangePathKeyFor(autosave、watch index 都跟上了);spawn 流程重寫後 fork 的 launchCwd 經 spawn-run.ts:45 → spawn-agent-launch.ts:129 → spawn-preflight.ts:76;新的分頁切換路徑不碰 Git Graph 分頁;lint 入口換成 run-lint.mjs。

@audichuang

Copy link
Copy Markdown
Owner Author

develop 已移動到 dfb4a44(舊 develop 備份在 backup/develop-v1.4.241-20261027T001750Z),接著發版。

@audichuang

Copy link
Copy Markdown
Owner Author

發版開始 v1.4.242-fork.1

@audichuang

Copy link
Copy Markdown
Owner Author

v1.4.242-fork.1 已發佈:https://github.com/audichuang/orca/releases/tag/v1.4.242-fork.1(release run 40429975071 綠,cask 1.4.242-fork.1)。develop = main = dfb4a44。

@audichuang audichuang closed this Oct 27, 2026
@audichuang
audichuang deleted the rebase/v1.4.242 branch October 27, 2026 01:11
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.

2 participants