Skip to content

fix(ratewise): 修正 v2 rate chip 基準標籤與切換鈕不可用態(QA-I D1/D3) - #659

Merged
s123104 merged 1 commit into
experiment/ratewise-product-2026h2from
fix/v2-chip-basis-honesty
Jul 6, 2026
Merged

fix(ratewise): 修正 v2 rate chip 基準標籤與切換鈕不可用態(QA-I D1/D3)#659
s123104 merged 1 commit into
experiment/ratewise-product-2026h2from
fix/v2-chip-basis-honesty

Conversation

@s123104

@s123104 s123104 commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

摘要

修復 QA-I 稽核發現的兩個 converter v2 缺陷(D1 P1+D3 P2)。單一 hotfix PR,無順帶重構。
已依審查(REQUEST CHANGES)重構:標籤由引擎回傳的實際採用 basis 驅動,刪除平行推導函式。

D1(P1):rate chip 標籤與實際計算數值不符

根因basisLabel 只看 rateType 平行推導,忽略 auto 模式(預設)實際選價方向與 fallback——引擎外幣→TWD 用銀行買入價、買入缺失時回落賣出價,chip 卻恆標「賣出」(或修法不完整時恆標「買入」)。

修法(審查裁決版)

  • 引擎 per-leg 選價收斂為 resolveConversionLeg(auto from=買入/to=賣出、sell=賣出、mid=中間價),回傳 { rate, side }——side 感知 fallback(買入全缺回落賣出時回 sell;mid 退化時回實際採用側)
  • convertCurrencyAmountWithMode 與新增的 getUnitExchangeRateWithBasis 共用同一 leg 決策;chip 直接消費引擎回傳的 side,已刪除 getUnitRateSide 平行推導函式
  • getUnitExchangeRategetBuyRategetMidRate 保持原簽名(thin wrapper),既有呼叫端零變動、數值 bit-for-bit 一致

PM 同步裁決(同一 code path 一併修正)

  • mid 模式:值為中間價 → 標「中間價」(新 key rateBasisMid ×4 語系;引擎 mid 依當前 rateType 計價且 fallback 可跨型,故不宣稱現金/即期)
  • auto 交叉(外幣→外幣經 TWD):買(from)/賣(to) 混合價 → side='mixed',chip 只標 rate type(現金/即期)省略買/賣,不過度宣稱;兩腿一致(sell 模式、或 from 腿 fallback 後同為賣出)維持完整標籤。取捨已記錄於 doc 註解

標籤全矩陣(rateType=現金示例;即期同理)

方向 auto sell mid
TWD→外幣 現金賣出 現金賣出 中間價
外幣→TWD 現金買入(買入缺失→現金賣出) 現金賣出 中間價(退化→現金賣出)
外幣→外幣 現金(混合價;from 腿回落賣出時→現金賣出) 現金賣出 中間價(單腿退化→現金)

D3(P2):基準切換鈕不可用態零回饋

根因:KRW(spot=null)時 handleToggleBasis 靜默 early-return,無樣式、無提示。

修法:比照 v1 RateSelector 慣例——aria-disabledcursor-not-allowed opacity-60+既有 RateTypeTooltip 顯示「目前不提供 即期 匯率」(重用既有 4 語系 key)。

前後對比(390×844,KRW→TWD auto 模式)

chip 顯示
修復前 1 KRW = 0.0192 TWD ・ 現金賣出(值為買入價、標籤錯誤;切換鈕無不可用態)
修復後 1 KRW = 0.0192 TWD ・ 現金買入(標籤=引擎實際 basis;chip 呈不可用態,點擊出現原因 tooltip)

截圖存於 worktree screenshots/(gitignored QA 暫存):v2-chip-krw-twd-before.pngv2-chip-krw-twd-after.pngv2-chip-krw-twd-d3-tooltip.png

測試

  • pnpm --filter @app/ratewise exec vitest run SingleConverterV2 exchangeRateCalculation131 例全綠(含既有紅線回歸)
  • 新增「值 vs 標籤」耦合測試(走真引擎):雙方向、buy 缺失 fallback→標籤跟 side(Blocking 2 回歸)、mid、auto 交叉 mixed、sell 交叉一致、mid 退化;引擎層 rate 同源斷言(三模式×三方向 WithBasis.rate === convertCurrencyAmountWithMode(1,…)
  • pre-commit/pre-push 全過;changeset:patch;002 一筆(累計 +173,已 rebase 至 fix(ratewise): GA E2E gate 回歸監測窗補強+Lighthouse smoke paths 擴充 Authority Guide #657 後 base)

來源:QA-I 行動 PWA 稽核 D1/D3;審查 REQUEST CHANGES 兩項 Blocking+PM 裁決 3/4/5。

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

⚠️ Deprecation Warning: The deny-licenses option is deprecated for possible removal in the next major release. For more information, see issue 997.

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

✅ SEO 審計通過!所有 2026 標準驗證項目都符合要求。

  • ✅ Sitemap 2026 標準
  • ✅ Breadcrumb Schema
  • ✅ JSON-LD 結構化數據
  • ✅ 內部連結結構

@s123104
s123104 force-pushed the fix/v2-chip-basis-honesty branch from 564c160 to cf4fde9 Compare July 6, 2026 22:08
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

✅ SEO 審計通過!所有 2026 標準驗證項目都符合要求。

  • ✅ Sitemap 2026 標準
  • ✅ Breadcrumb Schema
  • ✅ JSON-LD 結構化數據
  • ✅ 內部連結結構

- D1:引擎 per-leg 選價改回傳 { rate, side }(side 感知 fallback),
  getUnitExchangeRateWithBasis 回傳實際採用 basis 供 chip 直接消費,無平行推導
- D1:買入缺失回落賣出時標籤同步標賣出;mid 模式標「中間價」;
  auto 交叉兩腿買/賣不一致只標 rate type(現金/即期)不過度宣稱
- D1:4 語系補 rateBasisCashBuy/rateBasisSpotBuy/rateBasisMid key
- D3:切換目標基準不可用時比照 v1 RateSelector 慣例加 aria-disabled、
  不可用樣式與 RateTypeTooltip 原因提示
- 補值與標籤耦合測試(雙方向/fallback/mid/cross)與 rate 同源斷言;changeset(patch)

測試:vitest run SingleConverterV2 exchangeRateCalculation 131 例全綠;pnpm typecheck 通過

Co-authored-by: Cursor <cursoragent@cursor.com>
@s123104
s123104 force-pushed the fix/v2-chip-basis-honesty branch from cf4fde9 to eb75f8a Compare July 6, 2026 23:07
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

✅ SEO 審計通過!所有 2026 標準驗證項目都符合要求。

  • ✅ Sitemap 2026 標準
  • ✅ Breadcrumb Schema
  • ✅ JSON-LD 結構化數據
  • ✅ 內部連結結構

@s123104
s123104 merged commit 4079da2 into experiment/ratewise-product-2026h2 Jul 6, 2026
11 checks passed
@s123104
s123104 deleted the fix/v2-chip-basis-honesty branch July 6, 2026 23:24
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