Repository navigation
[不合併] develop rebase 到 v1.4.242 的 CI 驗證 - #86
Closed
audichuang wants to merge 329 commits into
Closed
audichuang wants to merge 329 commits into
audichuang wants to merge 329 commits into
Conversation
…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
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UuoXdYuN5y46yVVU88kSwh
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
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
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011LdpV7UCim1xUWLWDpgSsT
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>
…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>
Owner
Author
|
本機閘門開始(RUN=20261027T001750Z) |
* 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)
Owner
Author
|
盲審開始(head dfb4a44;本機 static 第 2 輪與 seams 綠) |
Owner
Author
|
CI:fork-pr.yml run 40426961139(head dfb4a44)第 2 次嘗試全綠, |
Owner
Author
盲審結果(head dfb4a44,第 1 輪,沒有修正輪)
Mutation 證明(合格的 MANUAL)
沒有測試會紅的 seam(C 找到的,都是既有缺口,不擋這次)每項都已確認:fork 的行在 rebase 前後相同,上游在那個檔的 hunk 也沒碰到這個 seam。
其他 NON-BLOCKING
|
Owner
Author
|
develop 已移動到 dfb4a44(舊 develop 備份在 |
Owner
Author
|
發版開始 v1.4.242-fork.1 |
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。 |
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.
只用來在 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
=、5!、2<、5>。rerere 沒有重放任何舊解法;locale 檔由 merge driver 合好,沒有停下來。<,原因不同:d3acf4d1a6(computer-use 各架構暫存檔移出.build/release):照條目 8d18f31 刻意丟掉。上游 fix(build): pin the native SwiftPM build system for the computer-use universal binary stablyai/orca#21146 加--build-system native修了同一件事;config/scripts/build-computer-macos.mjs現在跟 v1.4.242 逐位元組相同(git diff v1.4.242 HEAD -- config/scripts/build-computer-macos.mjs是空的),fork 在這個檔已沒有任何一行可以 mutate。23bc22afdf(cherry-pick 的上游 5dfaee0 / fix(ci): localize the chat font family search keywords stablyai/orca#33715):v1.4.242 已含 5dfaee0,rebase 以相同 patch 自動略過。補翻譯的c31fc67504仍在(v1.4.242 的其他語系沒有fontKeyword*)。known-resolutions.md):512927523e…(Remove obsolete reference documentation stablyai/orca#34008 刪docs/reference/× fork AGENTS.md):照做。8d18f318d7…(fix(build): pin the native SwiftPM build system for the computer-use universal binary stablyai/orca#21146 SwiftPM native build system × d3acf4d、9179c28214):照做。17621d5368…(fix(editor): reload open tabs on external changes when Windows paths are spelled differently stablyai/orca#14812 Windows 路徑拼法 × df6ae0f):照做,衝突檔照條目解;editor-autosave.ts沒衝突,修正是額外 commit。a25a5f1fa7…(perf(devex): parallel pnpm lint (169s → 50s), capped typecheck threads, fresh shard timings stablyai/orca#33817pnpm lint改成run-lint.mjs× fork-lint-run):照做,額外 commit。b7fb07c379…(fix(ci): unblock main: split over-long files and pin scanner test file times stablyai/orca#34072 未使用 import):不適用,v1.4.242 不含這個 commit。this.directKey = externalChangePathKeyFor(scope.worktreePath)),加回 fork 的 folder-scoped diff:建索引 keyscoped ? this.directKey(file.filePath) : file.relativePath,查詢時合併diffsByRelativePath.get(change.relativePath)與diffsByRelativePath.get(this.directKey(change.absolutePath))。slicesDir/--show-bin-path與capture());這個 commit 的其他檔照留。Avoid adding low-value tests…不帶[Anti-patterns](…)連結),檔尾補回 fork 的# Fork Maintenance。最終 fork 段落跟舊 develop 一字不差。!只來自上游在附近改了 context(locale 新 key、sonner.tsx 的INLINE_ACTION_CLASS_NAMES),沒有停下來解衝突。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(第二個)。make fork-ci-disable-upstream。Evidence
make fork-footprint:差額全部來自兩個上游 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