Skip to content

refactor(cross-chain): execute.ts を protocol 別の executor と burn 回復に分割し facade を維持 (R12・掟 15) - #619

Merged
cipherwebllc merged 1 commit into
mainfrom
fix/r6-r12-crosschain-split
Sep 24, 2026
Merged

cipherwebllc merged 1 commit into
mainfrom
fix/r6-r12-crosschain-split

Conversation

@cipherwebllc

Copy link
Copy Markdown
Owner

概要

第 6 回レビュー Phase 6 (完全リファクタ) の R12 です (指摘 F14)。挙動を変えない抽出だけです。
1,542 行の lib/crossChain/execute.ts (Circle Gateway・CCTP v2・forwarding による cross-chain の USDC 支払い) を、54 行の facade (同じ export と module path) と 7 つの module に分けます。

module 行数 中身
executeTypes.ts 174 型だけ (runtime import なし)
executeErrors.ts 62 3 つの error class (ここだけで定義)
executeShared.ts 173 wallet・receipt の共有 helper
burnRecovery.ts 222 burn の回復 (readBurnReceiptState・resolveBurnSlot・assertBurnResolved・settleBurn)
executeGateway.ts 354 Gateway
executeCctp.ts 436 CCTP v2
executeForward.ts 245 forwarding
  • 36 個の宣言は、コメントを含めて byte 単位で同一です (AST で照合)。新しいコードは import・header・export {…} だけです。
  • error class は 1 か所だけで定義し、facade と内部の両方から同じ class を参照します (instanceof は従来どおり)。
  • runtime の import に循環はなく、forward は cctp を import しません。module 単位の状態は増えていません。deploycheck の cache は 1 つのままです。
  • 実行処理は従来どおり動的読み込みの CrossChainHint からだけ到達します。初回ロードの bundle は main と同じです。
  • 分割で export された内部関数を lib/crossChain の外から直接 import すると入口の検査を飛ばせるため、テストで禁止しました。

⚠️ 掟 15: 顧客の USDC を chain をまたいで動かす money-path です。merge 前に user の明示レビューをお願いします。 公開文言・通信・保存する状態の形は変わりません。

固定と検証 (base = main に rebase 済み)

  • 移す前に固定したテスト 18 件: facade の export 一覧、全経路の error の同一性、Gateway・CCTP・forward の並行実行の分離、deploycheck の共有 cache、旧コードから記録した呼び出し順 6 本。旧実装でも通ります。
  • 構造のガード 7 件: 循環なし・class の単一定義・module 単位の状態なし・cache の単一・外からの直接 import の禁止。
  • 別セッションの Opus 5.5 のレビュー: approve-with-fixes → 修正済み。わざと壊した変更 (persist と HTTP の順序の入れ替え・error class の複製・実行間の状態共有) はすべて検出しました。実行間の状態共有は既存テストでは検出できず、今回の pin だけが検出しました。
  • typecheck 0 / eslint 0 / full vitest 14,512 pass / build OK (bundle は main と同じ・全ルート予算内)

見つかった既存の事項 (本 PR では変えない)

  • settleMint は main の時点で到達しない関数です (そのまま移動・別 PR で削除)。
  • CCTP は approve の hash を receipt を待ってから保存します (resume は approve をやり直すだけで無害)。
  • Gateway の手数料 leg が switch_chain の進捗を重複して出します。
  • 2 つの env が同時に不正なときに、どちらの設定 error が先に出るかだけが読み込み順の変更で変わり得ます。

🤖 Generated with Claude Code

https://claude.ai/code/session_01HeizmagJBgL5peL5mQpxkc

@vercel

vercel Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
openpay Ignored Ignored Preview Sep 24, 2026 1:15pm UTC

Request Review

…し facade を維持 (R12・掟 15)

第 6 回レビュー Phase 6 の R12 (F14)。1,542 行の lib/crossChain/execute.ts を 54 行の facade
(同じ export と path) と executeTypes/executeErrors/executeShared/burnRecovery/
executeGateway/executeCctp/executeForward に分ける。36 個の宣言は byte 単位で同一。
error class は 1 か所で定義し facade と内部で同一性を保つ。runtime import に循環なし
(forward は cctp を import しない)・module 単位の状態なし・deploycheck の cache は 1 つ。
内部 module を lib/crossChain の外から直接 import することはテストで禁止する。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HeizmagJBgL5peL5mQpxkc
@cipherwebllc
cipherwebllc force-pushed the fix/r6-r12-crosschain-split branch from 0eb8ff9 to 832bf91 Compare September 24, 2026 13:14
@cipherwebllc
cipherwebllc merged commit bedcc69 into main Sep 24, 2026
8 checks passed
@cipherwebllc
cipherwebllc deleted the fix/r6-r12-crosschain-split branch September 24, 2026 13:36
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