incident(frontend): verify Lunc Dash wallet path on DEX #1279

Closed
opened 2026-09-17 12:06:33 +00:00 by PlasticDigits · 3 comments

Summary

A check was requested for Lunc Dash on the CL8Y DEX retail surface. No defect, device, expected-vs-actual, or transaction evidence was supplied. This is ops verification of an already-shipped WalletConnect path, not a product implement ticket and not a reopen of closed connect bugs.

Live device results, pass/fail, and any deploy follow-up stay with operators via ops-bot DMs and authenticated GET /status. Do not use ops.md here. Do not publish hosts, VMs, snapshot ids, tokens, or queue ids on this issue.

Fingerprint

Item Detail
Check Lunc Dash connect, pairing, terms hint, Swap sign/reject, disconnect
Component Connect Wallet modal → WalletConnect-only row LuncDash (WalletName.LUNCDASH)
When Requested as a check; no incident time or failing device recorded
Shipped (closed) #519 same-device pairing sheet; #554 Android Chrome pairing foreground; #658 non-Keplr terms hint; #490 logos; #566 WC matrix (Lunc Dash was already WC)
Residual (not a dApp “fix”) Station / LuncDash WalletConnect uses atomic post; the wallet app may LCD-sim rewrite gas (ADR 0004 G3, closed #679 / #1222)
Not this ticket Listing CW20s inside wallet registries (#1260 is USDT-in-wallets); Leap (#159); Legal portal signer matrix (cl8y-ecosystem-legal)

Current codebase

Lunc Dash is a first-class Connect option and is WalletConnect-only (no extension install row).

Piece Location Behavior
Connect list frontend-dapp/src/components/wallet/connectWalletOptions.ts Always emits name: 'LuncDash', WalletName.LUNCDASH, WalletType.WALLETCONNECT. Station / Keplr / Cosmostation may flip Extension vs WC on mobile; Lunc Dash does not. Leap absent.
Logo frontend-dapp/src/components/wallet/walletIconSrc.ts, frontend-dapp/public/wallets/PROVENANCE.md Local luncdash.png (no CDN).
Deep link frontend-dapp/src/utils/walletConnectPairing.ts buildLuncDashDeepLink Cosmes scheme: luncdash://wallet_connect?payload=<encoded wc:>. walletSpecificDeepLink prefers this when details.isStation && details.isLuncDash.
Scheme allowlist same file, isAllowedWalletConnectDeepLink luncdash: is allowed. Do not open arbitrary pairing URLs.
Pairing UI frontend-dapp/src/components/wallet/WalletConnectPairingModal.tsx, skill skills/AGENTS_FRONTEND_WALLETCONNECT_MOBILE.md Mobile: Open Lunc Dash, Open wallet (wc:), Copy pairing link, Cancel. Desktop: QR remains. In-app browser stays a valid alternate path (WC-M7), not “the” fix.
Connect + session frontend-dapp/src/services/terraclassic/wallet.ts LUNCDashController; 0-wallet WC recovery reads cosmes.wallet.luncdash.wcSession.
Atomic post frontend-dapp/src/services/terraclassic/terraWalletSignTxRaw.ts Station / LuncDash WC stay on atomic broadcastTx (isAtomicWalletConnectPost). Do not LCD-sim in the dApp; do not re-enable mainnet SEC-E08.
Terms hint frontend-dapp/src/utils/legalKeplrInAppHint.ts luncdash → Open this site in Lunc Dash to accept terms. Multi-wallet sentence lists Station, Keplr, Cosmostation, Lunc Dash, Galaxy Station. Hide when a keplr-like injector is present. DEX does not implement ADR-036.
In-app UA frontend-dapp/src/utils/detectWalletInAppBrowser.ts /LuncDash|LUNCDash|LUNC Dash/i → Lunc Dash.
Unit coverage walletConnectPairing.test.ts, WalletConnectPairingModal.test.tsx, WalletModal.test.tsx, legalKeplrInAppHint.test.ts Scheme, Open Lunc Dash href, modal copy, terms hint. Device pairing is not fully determined by these tests.
Manual matrix QA_TEMPLATE.md § 1.5 LuncDash Cases 1.5.1–1.5.11 (desktop QR, same-device mobile, Android Chrome sheet, timeout, reject, disconnect, 0-wallet, swap sign/reject, LP, session, terms).

Retail docs: docs/frontend.md WC-M5 / pairing implementation notes.

Why this check is needed

Unit tests and closed tickets do not prove the live Lunc Dash app still completes pairing and Swap approve on current mobile Chrome / in-app browsers. The request is to run that check. If the check finds a regression of a closed AC (#519 QR-only, #554 spinner/sheet, #658 Keplr-only copy), reopen that issue with device evidence. Do not implement speculative wallet-app or deep-link changes from this ticket.

Constraints / guardrails

  • Do not invent a second Lunc Dash URI scheme. Keep buildLuncDashDeepLink.
  • Do not add Leap to Connect or terms copy.
  • Do not treat wallet-app fee rewrite (~block-gas LCD sim on atomic WC post) as a DEX broadcast bug; envelope policy is ADR 0004 Stay.
  • Do not implement Legal portal signing in this repo (C1 / L658).
  • Do not remove in-app browser as a documented alternate path.
  • Do not paste capture prose, tokens, or operational /status JSON here.
  • In-repo make / Vitest pairing tests may be used as a pre-check only; they do not close this leftover.

Operator check (do not implement here)

Run QA_TEMPLATE.md 1.5.1–1.5.11 on a real Lunc Dash install:

  1. Desktop: Connect → LuncDash → QR on a second device → terra1… in the header.
  2. Same-device mobile browser: Open Lunc Dash or Copy pairing link (not QR-only).
  3. Android Chrome: pairing sheet above Connect; Open Lunc Dash tappable; header Cancel re-enables Connect.
  4. Swap: approve succeeds; reject shows a rejection (not a hang).
  5. Unsigned WC with no injector: terms hint names Lunc Dash or the DEX wallet list — not Keplr-only; Accept still opens the Legal portal.
  6. Disconnect and tab reopen: session closes or reconnects cleanly.

Record pass/fail and anonymized device notes in ops-bot, then close this issue when the matrix is done (or reopen the matching closed defect if an AC failed).

Out of scope

  • Product features, copy changes, or new WalletConnect libraries unless a closed AC is actually broken.
  • Coolify / host / SKU work from intake.
  • Token listing inside Lunc Dash’s own registry.
  • Station-only auto-gas research (closed #1222).

First-pass model recommendation

Recommendation: grok-high

Rationale: This is ops/device QA across Connect Wallet, WalletConnect pairing, legal hint, and Swap sign — not a known local edit of at most three production files with deterministic tests. Wallet / WalletConnect is a founder-required surface; gas rewrite is a wallet-app residual (ADR 0004). Composer criteria fail on uncertain live scope, cross-cutting wallet protocol, and ops (not first-pass product implement). Verification is the QA 1.5 matrix on real devices plus existing pairing unit tests as a pre-check, not make test alone.

Policy: docs/model-policy.md, invariant 5.

## Summary A check was requested for **Lunc Dash** on the CL8Y DEX retail surface. No defect, device, expected-vs-actual, or transaction evidence was supplied. This is **ops verification** of an already-shipped WalletConnect path, not a product implement ticket and not a reopen of closed connect bugs. Live device results, pass/fail, and any deploy follow-up stay with operators via **ops-bot DMs** and authenticated **`GET /status`**. Do not use `ops.md` here. Do not publish hosts, VMs, snapshot ids, tokens, or queue ids on this issue. ### Fingerprint | Item | Detail | | --- | --- | | Check | Lunc Dash connect, pairing, terms hint, Swap sign/reject, disconnect | | Component | Connect Wallet modal → WalletConnect-only row `LuncDash` (`WalletName.LUNCDASH`) | | When | Requested as a check; no incident time or failing device recorded | | Shipped (closed) | [#519](https://git.cl8y.com/code/cl8y-dex-terraclassic/issues/519) same-device pairing sheet; [#554](https://git.cl8y.com/code/cl8y-dex-terraclassic/issues/554) Android Chrome pairing foreground; [#658](https://git.cl8y.com/code/cl8y-dex-terraclassic/issues/658) non-Keplr terms hint; [#490](https://git.cl8y.com/code/cl8y-dex-terraclassic/issues/490) logos; [#566](https://git.cl8y.com/code/cl8y-dex-terraclassic/issues/566) WC matrix (Lunc Dash was already WC) | | Residual (not a dApp “fix”) | Station / LuncDash WalletConnect uses atomic `post`; the wallet app may LCD-sim rewrite gas ([ADR 0004](docs/adr/0004-terraclassic-retail-gas-census.md) G3, closed [#679](https://git.cl8y.com/code/cl8y-dex-terraclassic/issues/679) / [#1222](https://git.cl8y.com/code/cl8y-dex-terraclassic/issues/1222)) | | Not this ticket | Listing CW20s *inside* wallet registries ([#1260](https://git.cl8y.com/code/cl8y-dex-terraclassic/issues/1260) is USDT-in-wallets); Leap ([#159](https://git.cl8y.com/code/cl8y-dex-terraclassic/issues/159)); Legal portal signer matrix (`cl8y-ecosystem-legal`) | ## Current codebase Lunc Dash is a first-class Connect option and is **WalletConnect-only** (no extension install row). | Piece | Location | Behavior | | --- | --- | --- | | Connect list | [`frontend-dapp/src/components/wallet/connectWalletOptions.ts`](frontend-dapp/src/components/wallet/connectWalletOptions.ts) | Always emits `name: 'LuncDash'`, `WalletName.LUNCDASH`, `WalletType.WALLETCONNECT`. Station / Keplr / Cosmostation may flip Extension vs WC on mobile; Lunc Dash does not. Leap absent. | | Logo | [`frontend-dapp/src/components/wallet/walletIconSrc.ts`](frontend-dapp/src/components/wallet/walletIconSrc.ts), [`frontend-dapp/public/wallets/PROVENANCE.md`](frontend-dapp/public/wallets/PROVENANCE.md) | Local `luncdash.png` (no CDN). | | Deep link | [`frontend-dapp/src/utils/walletConnectPairing.ts`](frontend-dapp/src/utils/walletConnectPairing.ts) `buildLuncDashDeepLink` | Cosmes scheme: `luncdash://wallet_connect?payload=<encoded wc:>`. `walletSpecificDeepLink` prefers this when `details.isStation && details.isLuncDash`. | | Scheme allowlist | same file, `isAllowedWalletConnectDeepLink` | `luncdash:` is allowed. Do not open arbitrary pairing URLs. | | Pairing UI | [`frontend-dapp/src/components/wallet/WalletConnectPairingModal.tsx`](frontend-dapp/src/components/wallet/WalletConnectPairingModal.tsx), skill [`skills/AGENTS_FRONTEND_WALLETCONNECT_MOBILE.md`](skills/AGENTS_FRONTEND_WALLETCONNECT_MOBILE.md) | Mobile: **Open Lunc Dash**, **Open wallet** (`wc:`), **Copy pairing link**, **Cancel**. Desktop: QR remains. In-app browser stays a valid alternate path (**WC-M7**), not “the” fix. | | Connect + session | [`frontend-dapp/src/services/terraclassic/wallet.ts`](frontend-dapp/src/services/terraclassic/wallet.ts) | `LUNCDashController`; 0-wallet WC recovery reads `cosmes.wallet.luncdash.wcSession`. | | Atomic post | [`frontend-dapp/src/services/terraclassic/terraWalletSignTxRaw.ts`](frontend-dapp/src/services/terraclassic/terraWalletSignTxRaw.ts) | Station / LuncDash WC stay on atomic `broadcastTx` (`isAtomicWalletConnectPost`). Do not LCD-sim in the dApp; do not re-enable mainnet SEC-E08. | | Terms hint | [`frontend-dapp/src/utils/legalKeplrInAppHint.ts`](frontend-dapp/src/utils/legalKeplrInAppHint.ts) | `luncdash` → `Open this site in Lunc Dash to accept terms.` Multi-wallet sentence lists Station, Keplr, Cosmostation, Lunc Dash, Galaxy Station. Hide when a keplr-like injector is present. DEX does **not** implement ADR-036. | | In-app UA | [`frontend-dapp/src/utils/detectWalletInAppBrowser.ts`](frontend-dapp/src/utils/detectWalletInAppBrowser.ts) | `/LuncDash\|LUNCDash\|LUNC Dash/i` → `Lunc Dash`. | | Unit coverage | [`walletConnectPairing.test.ts`](frontend-dapp/src/utils/__tests__/walletConnectPairing.test.ts), [`WalletConnectPairingModal.test.tsx`](frontend-dapp/src/components/wallet/__tests__/WalletConnectPairingModal.test.tsx), [`WalletModal.test.tsx`](frontend-dapp/src/components/wallet/__tests__/WalletModal.test.tsx), [`legalKeplrInAppHint.test.ts`](frontend-dapp/src/utils/__tests__/legalKeplrInAppHint.test.ts) | Scheme, Open Lunc Dash href, modal copy, terms hint. Device pairing is **not** fully determined by these tests. | | Manual matrix | [`QA_TEMPLATE.md`](QA_TEMPLATE.md) § **1.5 LuncDash** | Cases 1.5.1–1.5.11 (desktop QR, same-device mobile, Android Chrome sheet, timeout, reject, disconnect, 0-wallet, swap sign/reject, LP, session, terms). | Retail docs: [`docs/frontend.md`](docs/frontend.md) WC-M5 / pairing implementation notes. ## Why this check is needed Unit tests and closed tickets do not prove the **live** Lunc Dash app still completes pairing and Swap approve on current mobile Chrome / in-app browsers. The request is to **run that check**. If the check finds a regression of a closed AC (#519 QR-only, #554 spinner/sheet, #658 Keplr-only copy), reopen **that** issue with device evidence. Do not implement speculative wallet-app or deep-link changes from this ticket. ## Constraints / guardrails - **Do not** invent a second Lunc Dash URI scheme. Keep `buildLuncDashDeepLink`. - **Do not** add Leap to Connect or terms copy. - **Do not** treat wallet-app fee rewrite (~block-gas LCD sim on atomic WC post) as a DEX broadcast bug; envelope policy is ADR 0004 Stay. - **Do not** implement Legal portal signing in this repo (**C1** / L658). - **Do not** remove in-app browser as a documented alternate path. - **Do not** paste capture prose, tokens, or operational `/status` JSON here. - In-repo `make` / Vitest pairing tests may be used as a **pre-check** only; they do not close this leftover. ## Operator check (do not implement here) Run [`QA_TEMPLATE.md`](QA_TEMPLATE.md) **1.5.1–1.5.11** on a real Lunc Dash install: 1. Desktop: Connect → LuncDash → QR on a second device → `terra1…` in the header. 2. Same-device mobile browser: **Open Lunc Dash** or **Copy pairing link** (not QR-only). 3. Android Chrome: pairing sheet above Connect; **Open Lunc Dash** tappable; header **Cancel** re-enables Connect. 4. Swap: approve succeeds; reject shows a rejection (not a hang). 5. Unsigned WC with no injector: terms hint names **Lunc Dash** or the DEX wallet list — not Keplr-only; Accept still opens the Legal portal. 6. Disconnect and tab reopen: session closes or reconnects cleanly. Record pass/fail and anonymized device notes in **ops-bot**, then close this issue when the matrix is done (or reopen the matching closed defect if an AC failed). ## Out of scope - Product features, copy changes, or new WalletConnect libraries unless a closed AC is actually broken. - Coolify / host / SKU work from intake. - Token listing inside Lunc Dash’s own registry. - Station-only auto-gas research (closed #1222). ## First-pass model recommendation Recommendation: grok-high Rationale: This is ops/device QA across Connect Wallet, WalletConnect pairing, legal hint, and Swap sign — not a known local edit of at most three production files with deterministic tests. Wallet / WalletConnect is a founder-required surface; gas rewrite is a wallet-app residual (ADR 0004). Composer criteria fail on uncertain live scope, cross-cutting wallet protocol, and ops (not first-pass product implement). Verification is the QA 1.5 matrix on real devices plus existing pairing unit tests as a pre-check, not `make test` alone. Policy: [docs/model-policy.md](https://git.cl8y.com/PlasticDigits/cl8y-agent-control/src/branch/main/docs/model-policy.md), invariant 5.
Author
Owner

PR #1291 merged leftover scaffolding (L1279 + make verify-issue-1279). This issue stays open: device QA QA_TEMPLATE 1.5.1–1.5.11 still closes via ops-bot. Make does not close it.

Leftover ops: #1300

PR #1291 merged leftover scaffolding (L1279 + `make verify-issue-1279`). This issue stays open: device QA QA_TEMPLATE 1.5.1–1.5.11 still closes via ops-bot. Make does not close it. Leftover ops: https://git.cl8y.com/code/cl8y-dex-terraclassic/issues/1300
Author
Owner

Policy: leftover human work is cl8y-pm inbox cards (one developer; assigned load must be visible). There is no ops-bot channel.

Inbox queued:

  • Pair Lunc Dash on the DEX
  • Approve or reject a Swap in Lunc Dash

make verify-issue-1279 stays pre-check only. This issue stays open until those cards are done.

Policy: leftover human work is **cl8y-pm inbox cards** (one developer; assigned load must be visible). There is no ops-bot channel. Inbox queued: - Pair Lunc Dash on the DEX - Approve or reject a Swap in Lunc Dash `make verify-issue-1279` stays pre-check only. This issue stays open until those cards are done.
Author
Owner

Device QA for leftover pairing failed. This leftover verify ticket is closed in favor of product bug #1308.

Observed on a real Lunc Dash install against https://dex.cl8y.com (anonymized):

  • After Connect Wallet → LuncDash on a phone, Lunc Dash opens but does not connect (no pairing prompt).
  • Lunc Dash WalletConnect settings show a working bridge.cl8y.com session and do not show dex.cl8y.com.
  • Returning to the browser shows a QR. Mobile must pair same-device (WC-M1), not QR-only.

make verify-issue-1279 stays a pre-check only. Swap approve/reject leftover is blocked until #1308 AC1–AC3 hold; that sign-off is AC7 on #1308, not a reason to keep this issue open.

Device QA for leftover pairing **failed**. This leftover verify ticket is closed in favor of product bug [#1308](https://git.cl8y.com/code/cl8y-dex-terraclassic/issues/1308). Observed on a real Lunc Dash install against `https://dex.cl8y.com` (anonymized): - After Connect Wallet → LuncDash on a phone, Lunc Dash opens but does not connect (no pairing prompt). - Lunc Dash WalletConnect settings show a working `bridge.cl8y.com` session and do **not** show `dex.cl8y.com`. - Returning to the browser shows a QR. Mobile must pair same-device (**WC-M1**), not QR-only. `make verify-issue-1279` stays a pre-check only. Swap approve/reject leftover is blocked until #1308 AC1–AC3 hold; that sign-off is **AC7** on #1308, not a reason to keep this issue open.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
code/cl8y-dex-terraclassic#1279
No description provided.