feat(web): Terra Classic T&C must support every ustr-cmm wallet, not Keplr-only #11

Closed
opened 2026-08-18 15:16:12 +00:00 by PlasticDigits · 13 comments
PlasticDigits commented 2026-08-18 15:16:12 +00:00 (Migrated from gitlab.com)

Summary

After !29 / #9, /sign/terra-classic can complete T&C only via injected window.keplr.signArbitrary (desktop Keplr extension or Keplr in-app browser). Missing Keplr shows Open in Keplr + copy-link — it does not sign with the wallet the user already connected on the integrator.

That is a product gap. Integrators (starting with ustr-cmm on ust1cmm.com) connect Station, Leap, Cosmostation, LUNC Dash, and Galaxy Station, then redirect unsigned wallets here. Those users still cannot finish T&C in the same wallet.

Source of truth for the wallet set: PlasticDigits2/ustr-cmm frontend/src/services/wallet.ts + frontend/src/components/common/WalletButton.tsx (@goblinhunt/cosmes). ustr-cmm must not reimplement ADR-036 (ustr-cmm#12 / skills/frontend-legal-clickwrap); signing stays on this portal.

Related leftover from !29: #10 (Keplr stay-in-Chrome WC + busy flag). This issue is the full wallet matrix, not Keplr-only.

DEX/bridge connect bugs remain on those repos (dex#554, bridge#137). Do not treat this issue as “fix DEX connect.”


Wallet matrix (must match ustr-cmm)

From ustr-cmm WalletButton / wallet.ts (WalletName + WalletType):

Wallet ustr-cmm connect path Legal portal today
Terra Station Extension (window.station) Not used. Sign requires window.keplr.
Keplr Extension (window.keplr); Trust Wallet if it injects Keplr-compat Works if injected. Mobile Chrome: Open in Keplr only (#9).
Leap Extension (window.leap) Not used unless it also injects window.keplr.
Cosmostation Extension (window.cosmostation) Not used.
LUNC Dash WalletConnect (mobile) Dead-end in Chrome after redirect (community repro on #9). Open in Keplr is the wrong wallet.
Galaxy Station WalletConnect (mobile) Same as LUNC Dash.

If ustr-cmm adds/removes a Terra Classic wallet in that file, this issue’s matrix must be updated to stay in lockstep.


Why this is needed

  • Retail Terra Classic is mobile. The working control on #9 is: ustr-cmm connect with LUNC Dash succeeds on Android Chrome; Accept T&C then fails because the portal is Keplr-only.
  • Property-scoped clickwrap (ust1cmm.com, dex.cl8y.com, bridge.cl8y.com, …) inherits this. Every integrator that redirects to sign_urls.terra / terra_classic strands non-Keplr wallets.
  • Asking the user to switch to Keplr after they already connected another wallet is not an acceptable happy path.

Constraints / guardrails

Same as #9 / skills/terra-classic-adr036/SKILL.md — do not weaken them:

  1. Do not weaken ADR-036 verify in api/src/verify/terra.rs. Every wallet (extension or WC) must produce a signature the existing verifier accepts, or an explicitly versioned new scheme with tests. Prefer CosmJS/Keplr-compatible signArbitrary / sign/MsgSignData.
  2. Do not change the canonical legal message without coordinated Rust + SDK golden tests.
  3. Chain remains columbus-5 / TERRA_CLASSIC. No Terra 2.0 (phoenix-1).
  4. Property isolation unchanged.
  5. No admin tokens / secrets in the portal bundle. WalletConnect Cloud project id for this app must be Legal-owned (do not copy integrator WC ids into git as if they were ours).
  6. Address binding: pubkey must still re-derive the claimed terra1….
  7. Redirect allowlists stay authoritative; no open redirects. Deep links / WC return URLs must not encode a query-supplied redirect_uri as the wallet target.
  8. EVM / Telegram / Solana sign pages unchanged unless sharing a tiny UI helper (wallet picker shell).
  9. Fail closed: unknown signer ≠ signed.
  10. ustr-cmm stays SDK-only for Legal (redirect + status). Do not push ADR-036 into the integrator to “fix” this.

Reference implementation for connect (not copy-paste into Legal without review): ustr-cmm frontend/ + @goblinhunt/cosmes (StationController, KeplrController, LeapController, CosmostationController, LUNCDashController, GalaxyStationController). Legal needs signArbitrary-equivalent, not MsgExecuteContract.


  1. Extension wallets (Station, Keplr, Leap, Cosmostation): detect the same injected globals ustr-cmm uses (window.station, window.keplr, window.leap, window.cosmostation) and call that wallet’s ADR-036 signArbitrary (or documented Keplr-compat provider, e.g. Station/Cosmostation keplr provider). Do not require the user to also have Keplr.
  2. Mobile / WalletConnect (LUNC Dash, Galaxy Station, and WC for Keplr/Leap if ustr-cmm exposes it later): add in-page WC pairing on /sign/terra-classic so Android Chrome can approve signArbitrary in the already-used app without switching to Keplr’s in-app browser. Keep the existing Open in Keplr CTA as a fallback, not the only path.
  3. Account continuity: if the integrator already connected terra1…, the portal should sign that account (or clearly fail if the chosen wallet account differs). A signature for a different address must not satisfy the connected wallet’s signatures/status check.
  4. Do not tell Android Chrome users to install a desktop extension.

Acceptance criteria

  • Every wallet in the ustr-cmm matrix above can produce signed_latest: true for (property, TERRA_CLASSIC, terra1…) from the portal, on the same class of device ustr-cmm uses for that wallet (extension vs Android Chrome WC).
  • A user who connected LUNC Dash (or Galaxy Station) on ust1cmm.com and is redirected here can finish T&C in that wallet without installing Keplr.
  • Terra Station / Leap / Cosmostation extensions can sign when injected; missing Keplr is not a hard requirement for those wallets.
  • Existing Keplr desktop + Open in Keplr mobile path from #9 / !29 still works.
  • API still rejects wrong pubkey, wrong property/version, tampered message, bad timestamp.
  • EVM / Telegram / Solana unchanged.
  • Copy is retail-short (no “ADR-036” in idle status).
  • Wallet list is documented (README + skills/terra-classic-adr036/SKILL.md) and named as tracking ustr-cmm’s set.

Test plan

  1. Desktop: Station, Keplr, Leap, Cosmostation extensions — each Connect & sign → signed_latest: true.
  2. Android Chrome: LUNC Dash WC and Galaxy Station WC — in-page (or documented WC) sign → signed_latest: true (no Keplr required).
  3. Regression: missing window.keplr still shows Open in Keplr; mock Keplr e2e still green.
  4. Property isolation + mixed-case terra1 canonicalization still hold.
  5. Playwright: at least one non-Keplr injected-provider mock and one missing-Keplr-but-other-wallet (or WC mock) path; keep workers: 5.
  6. cd api && cargo test Terra ADR-036 unit + abuse integration stay green.

Test plan (attack / abuse)

Vector Expectation
Replay sig for another property / version_label / account Reject
WC session account ≠ claimed account_id Reject
Deep-link / WC return URL not on portal allowlist No open redirect
Fake window.leap / window.station in page Server-side verify still required
Extremely large signature / pubkey bodies Reject or body limits
Timestamp skew Reject

Relevant files

Area Path
Portal Terra page web/src/pages/terra.ts
Keplr-only mobile CTA web/src/keplrMobile.ts, web/src/keplrMobileUi.ts
Sign shell web/src/signShell.ts
API Terra verify api/src/verify/terra.rs (keep)
Invariants skills/terra-classic-adr036/SKILL.md
ustr-cmm reference frontend/src/services/wallet.ts, frontend/src/components/common/WalletButton.tsx
## Summary After [!29](https://gitlab.com/PlasticDigits/cl8y-ecosystem-legal/-/merge_requests/11) / [#9](https://gitlab.com/PlasticDigits/cl8y-ecosystem-legal/-/issues/9), `/sign/terra-classic` can complete T&C **only** via injected `window.keplr.signArbitrary` (desktop Keplr extension or Keplr in-app browser). Missing Keplr shows **Open in Keplr** + copy-link — it does **not** sign with the wallet the user already connected on the integrator. That is a product gap. Integrators (starting with **ustr-cmm** on `ust1cmm.com`) connect Station, Leap, Cosmostation, LUNC Dash, and Galaxy Station, then redirect unsigned wallets here. Those users still cannot finish T&C in the same wallet. **Source of truth for the wallet set:** [`PlasticDigits2/ustr-cmm`](https://gitlab.com/PlasticDigits2/ustr-cmm) `frontend/src/services/wallet.ts` + `frontend/src/components/common/WalletButton.tsx` (`@goblinhunt/cosmes`). ustr-cmm must **not** reimplement ADR-036 ([ustr-cmm#12](https://gitlab.com/PlasticDigits2/ustr-cmm/-/issues/12) / `skills/frontend-legal-clickwrap`); signing stays on this portal. Related leftover from !29: [#10](https://gitlab.com/PlasticDigits/cl8y-ecosystem-legal/-/issues/10) (Keplr stay-in-Chrome WC + `busy` flag). This issue is the full wallet matrix, not Keplr-only. DEX/bridge **connect** bugs remain on those repos ([dex#554](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/work_items/554), [bridge#137](https://gitlab.com/PlasticDigits/cl8y-bridge-monorepo/-/work_items/137)). Do not treat this issue as “fix DEX connect.” --- ## Wallet matrix (must match ustr-cmm) From ustr-cmm `WalletButton` / `wallet.ts` (`WalletName` + `WalletType`): | Wallet | ustr-cmm connect path | Legal portal today | |--------|----------------------|--------------------| | **Terra Station** | Extension (`window.station`) | Not used. Sign requires `window.keplr`. | | **Keplr** | Extension (`window.keplr`); Trust Wallet if it injects Keplr-compat | **Works** if injected. Mobile Chrome: Open in Keplr only (#9). | | **Leap** | Extension (`window.leap`) | Not used unless it also injects `window.keplr`. | | **Cosmostation** | Extension (`window.cosmostation`) | Not used. | | **LUNC Dash** | WalletConnect (mobile) | Dead-end in Chrome after redirect (community repro on #9). Open in Keplr is the wrong wallet. | | **Galaxy Station** | WalletConnect (mobile) | Same as LUNC Dash. | If ustr-cmm adds/removes a Terra Classic wallet in that file, this issue’s matrix must be updated to stay in lockstep. --- ## Why this is needed - Retail Terra Classic is **mobile**. The working control on #9 is: ustr-cmm **connect** with LUNC Dash succeeds on Android Chrome; Accept T&C then fails because the portal is Keplr-only. - Property-scoped clickwrap (`ust1cmm.com`, `dex.cl8y.com`, `bridge.cl8y.com`, …) inherits this. Every integrator that redirects to `sign_urls.terra` / `terra_classic` strands non-Keplr wallets. - Asking the user to switch to Keplr after they already connected another wallet is not an acceptable happy path. --- ## Constraints / guardrails Same as #9 / `skills/terra-classic-adr036/SKILL.md` — do not weaken them: 1. **Do not weaken ADR-036 verify** in `api/src/verify/terra.rs`. Every wallet (extension or WC) must produce a signature the existing verifier accepts, or an explicitly versioned new scheme with tests. Prefer CosmJS/Keplr-compatible `signArbitrary` / `sign/MsgSignData`. 2. **Do not change the canonical legal message** without coordinated Rust + SDK golden tests. 3. **Chain remains `columbus-5` / `TERRA_CLASSIC`.** No Terra 2.0 (`phoenix-1`). 4. **Property isolation** unchanged. 5. **No admin tokens / secrets in the portal bundle.** WalletConnect Cloud **project id** for *this* app must be Legal-owned (do not copy integrator WC ids into git as if they were ours). 6. **Address binding:** pubkey must still re-derive the claimed `terra1…`. 7. **Redirect allowlists** stay authoritative; no open redirects. Deep links / WC return URLs must not encode a query-supplied `redirect_uri` as the wallet target. 8. **EVM / Telegram / Solana** sign pages unchanged unless sharing a tiny UI helper (wallet picker shell). 9. **Fail closed:** unknown signer ≠ signed. 10. **ustr-cmm stays SDK-only** for Legal (redirect + status). Do not push ADR-036 into the integrator to “fix” this. Reference implementation for **connect** (not copy-paste into Legal without review): ustr-cmm `frontend/` + `@goblinhunt/cosmes` (`StationController`, `KeplrController`, `LeapController`, `CosmostationController`, `LUNCDashController`, `GalaxyStationController`). Legal needs **`signArbitrary`-equivalent**, not `MsgExecuteContract`. --- ## Recommended direction 1. **Extension wallets** (Station, Keplr, Leap, Cosmostation): detect the same injected globals ustr-cmm uses (`window.station`, `window.keplr`, `window.leap`, `window.cosmostation`) and call that wallet’s ADR-036 `signArbitrary` (or documented Keplr-compat provider, e.g. Station/Cosmostation `keplr` provider). Do not require the user to also have Keplr. 2. **Mobile / WalletConnect** (LUNC Dash, Galaxy Station, and WC for Keplr/Leap if ustr-cmm exposes it later): add in-page WC pairing on `/sign/terra-classic` so Android Chrome can approve `signArbitrary` in the already-used app **without** switching to Keplr’s in-app browser. Keep the existing Open in Keplr CTA as a fallback, not the only path. 3. **Account continuity:** if the integrator already connected `terra1…`, the portal should sign **that** account (or clearly fail if the chosen wallet account differs). A signature for a different address must not satisfy the connected wallet’s `signatures/status` check. 4. **Do not** tell Android Chrome users to install a desktop extension. --- ## Acceptance criteria - [ ] Every wallet in the ustr-cmm matrix above can produce `signed_latest: true` for `(property, TERRA_CLASSIC, terra1…)` from the portal, on the same class of device ustr-cmm uses for that wallet (extension vs Android Chrome WC). - [ ] A user who connected **LUNC Dash** (or Galaxy Station) on `ust1cmm.com` and is redirected here can finish T&C **in that wallet** without installing Keplr. - [ ] Terra Station / Leap / Cosmostation extensions can sign when injected; missing Keplr is not a hard requirement for those wallets. - [ ] Existing Keplr desktop + Open in Keplr mobile path from #9 / !29 still works. - [ ] API still rejects wrong pubkey, wrong property/version, tampered message, bad timestamp. - [ ] EVM / Telegram / Solana unchanged. - [ ] Copy is retail-short (no “ADR-036” in idle status). - [ ] Wallet list is documented (README + `skills/terra-classic-adr036/SKILL.md`) and named as tracking ustr-cmm’s set. --- ## Test plan 1. Desktop: Station, Keplr, Leap, Cosmostation extensions — each Connect & sign → `signed_latest: true`. 2. Android Chrome: LUNC Dash WC and Galaxy Station WC — in-page (or documented WC) sign → `signed_latest: true` (no Keplr required). 3. Regression: missing `window.keplr` still shows Open in Keplr; mock Keplr e2e still green. 4. Property isolation + mixed-case `terra1` canonicalization still hold. 5. Playwright: at least one non-Keplr injected-provider mock and one missing-Keplr-but-other-wallet (or WC mock) path; keep `workers: 5`. 6. `cd api && cargo test` Terra ADR-036 unit + abuse integration stay green. --- ## Test plan (attack / abuse) | Vector | Expectation | |--------|-------------| | Replay sig for another `property` / `version_label` / account | Reject | | WC session account ≠ claimed `account_id` | Reject | | Deep-link / WC return URL not on portal allowlist | No open redirect | | Fake `window.leap` / `window.station` in page | Server-side verify still required | | Extremely large signature / pubkey bodies | Reject or body limits | | Timestamp skew | Reject | --- ## Relevant files | Area | Path | |------|------| | Portal Terra page | `web/src/pages/terra.ts` | | Keplr-only mobile CTA | `web/src/keplrMobile.ts`, `web/src/keplrMobileUi.ts` | | Sign shell | `web/src/signShell.ts` | | API Terra verify | `api/src/verify/terra.rs` (keep) | | Invariants | `skills/terra-classic-adr036/SKILL.md` | | ustr-cmm reference | `frontend/src/services/wallet.ts`, `frontend/src/components/common/WalletButton.tsx` |
PlasticDigits commented 2026-08-18 15:16:13 +00:00 (Migrated from gitlab.com)

marked as related to #9

marked as related to #9
PlasticDigits commented 2026-08-18 15:16:13 +00:00 (Migrated from gitlab.com)

marked as related to #10

marked as related to #10
PlasticDigits commented 2026-08-26 01:35:51 +00:00 (Migrated from gitlab.com)

mentioned in commit 809f94f413

mentioned in commit 809f94f4134dbc26c12c55c222e2e3716917f1a9
PlasticDigits commented 2026-08-26 01:36:09 +00:00 (Migrated from gitlab.com)

mentioned in merge request !30

mentioned in merge request !30
PlasticDigits commented 2026-08-26 01:36:52 +00:00 (Migrated from gitlab.com)

mentioned in merge request !31

mentioned in merge request !31
PlasticDigits commented 2026-08-26 01:37:12 +00:00 (Migrated from gitlab.com)

Implemented on !31 (feat/11-terra-wallet-matrix).

Completed from the issue criteria:

  • Wallet matrix sign path on the portal (Station / Keplr / Leap / Cosmostation injected; LUNC Dash + Galaxy Station WalletConnect). Automated: mock Keplr, mock Leap (no window.keplr), mock LUNC Dash WC, claimed-account mismatch.
  • LUNC Dash / Galaxy Station can finish T&C in-page without installing Keplr (Open {wallet} + Copy pairing link). Real Android Chrome still needs a manual pass.
  • Station / Leap / Cosmostation extensions are first-class; missing Keplr is not a hard requirement.
  • Keplr desktop + Open in Keplr from #9 / !29 kept as fallback.
  • API ADR-036 verify unchanged (wrong pubkey / property / version / message / timestamp still rejected).
  • EVM / Telegram / Solana sign pages unchanged.
  • Retail-short copy (no “ADR-036” in idle status).
  • Wallet list documented in README + skills/terra-classic-adr036/SKILL.md as tracking ustr-cmm.

Not done here (manual / ops / other repos):

  • Real-device matrix (desktop extensions + Android Chrome LUNC Dash / Galaxy Station).
  • Setting a Legal-owned VITE_WC_PROJECT_ID on the portal host (Galaxy Station WC v2). Do not copy integrator Cloud ids.
  • ustr-cmm passing account into buildSignUrl (SDK now accepts it; integrator follow-up).
  • #10 leftover (Keplr stay-in-Chrome WC + busy flag) — out of scope.
Implemented on !31 (`feat/11-terra-wallet-matrix`). Completed from the issue criteria: - [x] Wallet matrix sign path on the portal (Station / Keplr / Leap / Cosmostation injected; LUNC Dash + Galaxy Station WalletConnect). Automated: mock Keplr, mock Leap (no `window.keplr`), mock LUNC Dash WC, claimed-account mismatch. - [x] LUNC Dash / Galaxy Station can finish T&C in-page without installing Keplr (Open {wallet} + Copy pairing link). Real Android Chrome still needs a manual pass. - [x] Station / Leap / Cosmostation extensions are first-class; missing Keplr is not a hard requirement. - [x] Keplr desktop + Open in Keplr from #9 / !29 kept as fallback. - [x] API ADR-036 verify unchanged (wrong pubkey / property / version / message / timestamp still rejected). - [x] EVM / Telegram / Solana sign pages unchanged. - [x] Retail-short copy (no “ADR-036” in idle status). - [x] Wallet list documented in README + `skills/terra-classic-adr036/SKILL.md` as tracking ustr-cmm. Not done here (manual / ops / other repos): - Real-device matrix (desktop extensions + Android Chrome LUNC Dash / Galaxy Station). - Setting a Legal-owned `VITE_WC_PROJECT_ID` on the portal host (Galaxy Station WC v2). Do not copy integrator Cloud ids. - ustr-cmm passing `account` into `buildSignUrl` (SDK now accepts it; integrator follow-up). - #10 leftover (Keplr stay-in-Chrome WC + `busy` flag) — out of scope.
PlasticDigits commented 2026-08-26 01:41:35 +00:00 (Migrated from gitlab.com)

Merge review of !31 (no automerge, did not wait for CI)

Conflicts: none. GitLab detailed_merge_status: mergeable. Local git merge --no-ff origin/feat/11-terra-wallet-matrix into main applied cleanly (then aborted; merge is via !31).

CI: pipeline #2790911930 failed every job with ci_quota_exceeded (same GitLab minutes/quota issue noted on #10). Not a code defect. Did not wait for a green pipeline.

Local sanity (worktree feat/11-terra-wallet-matrix @ 809f94f):

  • npm test: clickwrap 22 + web 60 = 82 passed
  • cd api && cargo test: 58 passed (unit + integration)
  • Playwright e2e: 19 passed / 5 workers — mock Keplr, missing-Keplr + wallet picker, Leap without window.keplr, LUNC Dash WC mock, claimed-account mismatch, EVM/Telegram/Solana/home/redirect unchanged

Acceptance criteria vs !31

Criterion Status
Wallet matrix can produce signed_latest Code + mocks yes. Station / Cosmostation / Galaxy Station / real extensions not e2e’d. Real-device matrix still manual.
LUNC Dash / Galaxy Station without Keplr Path exists. LUNC Dash WC mock green. Galaxy Station WC v2 is hidden until Legal-owned VITE_WC_PROJECT_ID is set on the portal host. Real Android Chrome still manual.
Station / Leap / Cosmostation injected; missing Keplr not required Code + Leap mock yes. Station / Cosmostation detection + signArbitrary wired; no real-extension pass.
Keplr desktop + Open in Keplr from #9 / !29 Kept. e2e still covers both.
API reject wrong pubkey / property / version / tampered / timestamp Unchanged verifier. cargo test green. terra.rs comments only for #11 wallet set.
EVM / Telegram / Solana unchanged Yes. Diff is Terra page + shared query account + sign-shell extras comment. Other sign pages not modified. e2e still green.
Retail-short copy (no “ADR-036” in idle) Yes. e2e asserts no ADR-036 on missing-Keplr page.
Wallet list documented, tracking ustr-cmm Yes. README + skills/terra-classic-adr036/SKILL.md + web/src/terra/matrix.ts.

Problems / leftovers (not blocking merge)

  1. CI quota — all !31 jobs ci_quota_exceeded. Same ops issue as #10.
  2. Real-device QA still open — desktop Station / Keplr / Leap / Cosmostation and Android Chrome LUNC Dash / Galaxy Station against staging/prod.
  3. Ops: set Legal-owned VITE_WC_PROJECT_ID on the portal. Galaxy Station WC is not offered until then. Do not copy integrator Cloud ids.
  4. Integrator: ustr-cmm (and others) should pass account into buildSignUrl so the portal binds the already-connected terra1…. SDK accepts it; callers not updated here.
  5. #10 UX busy flag still present — web/src/signShell.ts still sets busy = true and only clears it in catch. Terra onSign still returns early (no wallet selected / missing extension) without throwing, so Connect & sign can stay disabled. Out of scope for !31; still tracked on #10.
  6. #10 product leftover (Keplr stay-in-Chrome WC) is superseded in part by this matrix, but the sign-shell busy fix is still needed.

Merging !31 now. Follow-up issue will track post-merge tasks that are not already on #10.

## Merge review of !31 (no automerge, did not wait for CI) **Conflicts:** none. GitLab `detailed_merge_status: mergeable`. Local `git merge --no-ff origin/feat/11-terra-wallet-matrix` into `main` applied cleanly (then aborted; merge is via !31). **CI:** pipeline [#2790911930](https://gitlab.com/PlasticDigits/cl8y-ecosystem-legal/-/pipelines/2790911930) failed every job with `ci_quota_exceeded` (same GitLab minutes/quota issue noted on #10). Not a code defect. Did not wait for a green pipeline. **Local sanity (worktree `feat/11-terra-wallet-matrix` @ `809f94f`):** - `npm test`: clickwrap 22 + web 60 = 82 passed - `cd api && cargo test`: 58 passed (unit + integration) - Playwright e2e: 19 passed / 5 workers — mock Keplr, missing-Keplr + wallet picker, Leap without `window.keplr`, LUNC Dash WC mock, claimed-account mismatch, EVM/Telegram/Solana/home/redirect unchanged ### Acceptance criteria vs !31 | Criterion | Status | |-----------|--------| | Wallet matrix can produce `signed_latest` | **Code + mocks yes.** Station / Cosmostation / Galaxy Station / real extensions not e2e’d. Real-device matrix still manual. | | LUNC Dash / Galaxy Station without Keplr | **Path exists.** LUNC Dash WC mock green. Galaxy Station WC v2 is hidden until Legal-owned `VITE_WC_PROJECT_ID` is set on the portal host. Real Android Chrome still manual. | | Station / Leap / Cosmostation injected; missing Keplr not required | **Code + Leap mock yes.** Station / Cosmostation detection + `signArbitrary` wired; no real-extension pass. | | Keplr desktop + Open in Keplr from #9 / !29 | **Kept.** e2e still covers both. | | API reject wrong pubkey / property / version / tampered / timestamp | **Unchanged verifier.** `cargo test` green. `terra.rs` comments only for #11 wallet set. | | EVM / Telegram / Solana unchanged | **Yes.** Diff is Terra page + shared query `account` + sign-shell extras comment. Other sign pages not modified. e2e still green. | | Retail-short copy (no “ADR-036” in idle) | **Yes.** e2e asserts no ADR-036 on missing-Keplr page. | | Wallet list documented, tracking ustr-cmm | **Yes.** README + `skills/terra-classic-adr036/SKILL.md` + `web/src/terra/matrix.ts`. | ### Problems / leftovers (not blocking merge) 1. **CI quota** — all !31 jobs `ci_quota_exceeded`. Same ops issue as #10. 2. **Real-device QA still open** — desktop Station / Keplr / Leap / Cosmostation and Android Chrome LUNC Dash / Galaxy Station against staging/prod. 3. **Ops:** set Legal-owned `VITE_WC_PROJECT_ID` on the portal. Galaxy Station WC is not offered until then. Do not copy integrator Cloud ids. 4. **Integrator:** ustr-cmm (and others) should pass `account` into `buildSignUrl` so the portal binds the already-connected `terra1…`. SDK accepts it; callers not updated here. 5. **#10 UX `busy` flag still present** — `web/src/signShell.ts` still sets `busy = true` and only clears it in `catch`. Terra `onSign` still returns early (no wallet selected / missing extension) without throwing, so Connect & sign can stay disabled. Out of scope for !31; still tracked on #10. 6. **#10 product leftover** (Keplr stay-in-Chrome WC) is superseded in part by this matrix, but the sign-shell `busy` fix is still needed. Merging !31 now. Follow-up issue will track post-merge tasks that are not already on #10.
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-08-26 01:41:41 +00:00
PlasticDigits commented 2026-08-26 01:41:46 +00:00 (Migrated from gitlab.com)

mentioned in commit fd3f6b6fce

mentioned in commit fd3f6b6fce046bf8a1200d3a7eae79b8656e9aeb
PlasticDigits commented 2026-08-26 01:43:08 +00:00 (Migrated from gitlab.com)

marked as related to #13

marked as related to #13
PlasticDigits commented 2026-08-26 01:43:08 +00:00 (Migrated from gitlab.com)

mentioned in issue #13

mentioned in issue #13
PlasticDigits commented 2026-08-26 01:43:34 +00:00 (Migrated from gitlab.com)

!31 is merged (fd3f6b6 on main). Post-merge leftovers (real-device QA, VITE_WC_PROJECT_ID, ustr-cmm account param) tracked on #13. The signShell busy flag remains on #10.

!31 is merged (`fd3f6b6` on `main`). Post-merge leftovers (real-device QA, `VITE_WC_PROJECT_ID`, ustr-cmm `account` param) tracked on #13. The `signShell` `busy` flag remains on #10.
PlasticDigits commented 2026-08-26 04:08:00 +00:00 (Migrated from gitlab.com)

mentioned in issue cl8y-dex-terraclassic#658

mentioned in issue cl8y-dex-terraclassic#658
PlasticDigits commented 2026-08-30 14:33:22 +00:00 (Migrated from gitlab.com)

mentioned in issue #15

mentioned in issue #15
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-ecosystem-legal#11
No description provided.