Skip to content

feat(ratewise): E8 wave-A — v2 等值雙列功能補全第一波(快速金額/歷史寫入/方向翻轉/長按複製) - #667

Merged
s123104 merged 1 commit into
experiment/ratewise-product-2026h2from
feat/e8-v2-completeness-wave-a
Jul 7, 2026
Merged

feat(ratewise): E8 wave-A — v2 等值雙列功能補全第一波(快速金額/歷史寫入/方向翻轉/長按複製)#667
s123104 merged 1 commit into
experiment/ratewise-product-2026h2from
feat/e8-v2-completeness-wave-a

Conversation

@s123104

@s123104 s123104 commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

嚴禁 merge:本 PR 依 E8 派工開出,等待使用者明確批准後才可合併。

摘要

.claude/prds/converter-v2-completeness-design.md 第 3 節裁決 #1/#2/#4/#6,於 v2 等值雙列補全四項能力,全程與 v1 共用 SSOT/引擎,未動 #664 two-pass hydration gate、#665 v2 card 禁用與 #659 basis 同源機制。已依審查(REQUEST CHANGES)完成 B1/B2 與 S1–S5 全數收斂。

四缺口實作說明

缺口 1:快速金額 chips(keypad 頂列單排)

缺口 2:歷史記錄寫入(settle 靜默寫入)

  • settle 邊界:輸入停頓 2s、切列、離開(unmount)→ flush;共用 v1 addToHistory(僅擴充 notify?: boolean),v2 自動寫入 notify: false 不彈 toast
  • B1 守門:(1) 金額 0/空/非有限值不寫——含 backspace 清到 0 後停頓 2s 路徑(測試以 rerender 模擬父層歸零後斷言不寫);(2) 與上一筆自動寫入同值(from|to|amount)去重,金額或 pair 變更後恢復寫入
  • B2 邊界:幣別變更(picker)、swap、現金/即期切換 → cancel pending settle(PM 裁決:timer 跨語意變更寫入的是變更後重算值,語意失真,寧可不寫);picker 選回同幣別=同 pair,pending 保留照常寫入

缺口 4:方向翻轉(獨立 ⇄ 鈕)

  • chip 互動衝突定案:chip 本體 tap 維持既有「切換現金/即期基準」語意,翻轉走 chip 右側獨立 ⇄ icon 鈕(44×44 熱區、aria-pressed
  • 定案理由:(1) 基準切換改變實際計價,D3 不可用態與 fix(ratewise): 修正 v2 rate chip 基準標籤與切換鈕不可用態(QA-I D1/D3) #659 值-標籤同源契約全綁在 chip 本體;(2) 兩動作語意分離、誤觸不互相汙染;(3) 翻轉為顯示層 only(同一報價倒數),基準標籤不變
  • S4 重置語意(PM 裁決):翻轉是 per-pair 檢視偏好——切幣別/swap 時重置為預設方向;同 pair session 內保留(選回同幣別、切換現金/即期都不重置)。測試已固定此語意

缺口 6:長按複製

  • S1 transient activation 結構:長按 500ms 計時器只標記意圖data-copy-armed 視覺回饋,金額列 tint);實際 writeTextpointerup handler 同步 context 執行(user activation 內),已移除 setTimeout 內的剪貼簿呼叫。桌面右鍵走 contextmenu(本身即使用者手勢);Android 長按派發 contextmenu 時亦在該手勢內提交,防 pointercancel 漏掉;committed 旗標防雙路徑重複複製
  • S1 WebKit 驗證:本 repo Playwright 無 webkit project(chromium×4+firefox offline)——iOS 真機驗證留待 staging QA;複製失敗已有 複製失敗 error toast 降級
  • S2:金額列加 select-none[-webkit-touch-callout:none],消除長按與原生文字選取/放大鏡的手勢衝突
  • 右鍵劫持 trade-off(已裁決):金額列 contextmenu 被 preventDefault 以支援右鍵複製,犧牲該區域原生右鍵選單——審查裁決接受(金額列非文字選取目標,複製即其主要語意)
  • 誤觸防護:長按提交後鬆手的 click 不切換活躍列;指標離開/取消=放棄本次長按不複製

佈局預算驗證表(零捲動硬約束)

視口 scrollHeight === innerHeight(皆斷言) keypad 高度(含 chips) keypad 佔比(斷言 30–40%) keypad 底緣 vs 固定導覽列頂緣
390×844 ✅ 844 304px 36.0% ✅ 749 < 787 ✅
375×667 ✅ 667 234px 35.1% ✅ 597 < 610 ✅
430×932 ✅ 932 304px 32.6% ✅ 705 < 875 ✅
320×844(S5) 無水平溢出(scrollWidth ≤ 320) chips 列/rate chip/⇄ 鈕右緣 ≤ 320 ✅
  • ≤667 以 short: 梯次壓縮;≤349 以 narrow: 收斂 rate chip 內距與字級(320px 不溢出)
  • e2e 斷言:scrollHeight === innerHeight(兩者皆入 objectContaining)+全部互動元素底緣以固定導覽列頂緣為可見上限+keypad 佔比下限 0.30(與 30-40% 敘述一致)

測試

證據

  • 三視口前後截圖與互動連拍存 screenshots/(QA 暫存,未入 commit);320 視口截圖於 e2e test-results
  • changeset:minor;002:reward-rw-e8-wave-a-v2-completeness(+1 → 累計 +180)

依據

@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 7, 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 7, 2026

Copy link
Copy Markdown
Contributor

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

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

- 快速金額 chips 內嵌 keypad 頂列:沿用 v1 SSOT 常數,點擊取代活躍列金額(保首鍵取代語意 633)
- 換算 settle(停頓 2s、切列、離開)以 addToHistory notify:false 靜默寫入既有歷史 store
- rate chip 旁新增獨立 ⇄ 鈕翻轉顯示方向(僅顯示層),chip 本體 tap 保留現金/即期切換契約
- 金額列長按 500ms 或桌面右鍵複製換算結果,格式與 toast 對齊 v1 歷史複製慣例
- 667 以下視口以 short: 梯次壓縮,三視口零捲動且 keypad 維持 30-40% 高度預算
- 審查修正 B1:settle 守門——金額 0/空不寫(含 backspace 清零路徑)、與上一筆自動寫入同值去重
- 審查修正 B2:幣別變更/swap/基準切換取消 pending settle(跨語意變更值失真,寧可不寫)
- 審查修正 S1:長按僅標記意圖+視覺回饋,writeText 移至 pointerup 手勢同步 context(activation)
- 審查修正 S2-S5:金額列 select-none+touch-callout、chips 移出 remount 爆炸半徑(scroll/focus
  保留)、翻轉態 per-pair 重置語意、320px 最小寬度不溢出斷言與 narrow 梯次收斂
測試:ratewise vitest 全綠 4934 passed;converter-v2 e2e 22 passed(desktop+mobile 含 320 視口)

Co-authored-by: Cursor <cursoragent@cursor.com>
@s123104
s123104 force-pushed the feat/e8-v2-completeness-wave-a branch from 0c6fad5 to 327a58c Compare July 7, 2026 04:00
@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

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

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

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