fix(frontend): make Android Chrome Terra connect tappable (GL-137) #159

Merged
PlasticDigits merged 4 commits from fix/gl-137-android-chrome-terra-connect into main 2026-08-31 12:36:18 +00:00
PlasticDigits commented 2026-08-31 05:58:45 +00:00 (Migrated from gitlab.com)

What

Make the header Connect Terra Wallet control tappable on Android Chrome and complete same-device WalletConnect without a non-gesture auto-redirect.

  • Header CTA: aria-label="Connect Terra Wallet", 44px hit target, touch-action: manipulation, Cancel instead of a disabled spinner
  • Header z-50 isolate without overflow-x-clip so Android Chrome does not clip/eat the tap
  • connecting is never persisted (onRehydrateStorage reset) so a fresh visit is not spinner-disabled
  • WalletConnect Open / Copy pairing sheet (DEX #519 pattern); cosmes QRCodeModal no longer location.hrefs from an async callback
  • Keplr on mobile Chrome without window.keplr is a WalletConnect row, not a dead “Not installed” extension row
  • Leap stays desktop extension-only (not the mobile fix)
  • Invariants INV-FE-WC-MOBILE-1, docs, and skills/agent-frontend-terra-wallet-mobile.md

Why

Related #137 (kept open until Android 16 Chrome device QA passes)

usera (Android 16 Chrome) could not activate Connect Terra Wallet on bridge.cl8y.com while the same device connected successfully on ustr-cmm. Bridge transfers require a Terra wallet; a dead header CTA makes the product unusable for that cohort.

Testing

  • Unit tests (npm run test:unit in packages/frontend) — 692 passed
  • Typecheck (npx tsc --noEmit)
  • Playwright wallet-connect (desktop + 390×844 mobile) with 5 workers: E2E_UI_ONLY=1 npx playwright test e2e/wallet-connect.spec.ts --workers=5 — 7 passed
  • Tested on desktop (device: ___) — desktop extension path unchanged in code; please confirm Keplr extension
  • Tested on mobile (device: Android 16 Chrome) — needs device QA (tap CTA → modal → Lunc Dash / Galaxy Station Open+Copy)
  • Wallet tested: ___
  • No console errors in Playwright runs
  • Screenshots attached (if UI change) — overlay stacking screenshot still useful from a real Android 16 Chrome session

Checklist

  • Only touches packages/frontend/ plus docs/skills/README for invariants
  • No hardcoded secrets, keys, or addresses
  • Lint passes (npx eslint on changed TS)
  • Unit tests pass (npm run test:unit)
## What Make the header **Connect Terra Wallet** control tappable on Android Chrome and complete same-device WalletConnect without a non-gesture auto-redirect. - Header CTA: `aria-label="Connect Terra Wallet"`, 44px hit target, `touch-action: manipulation`, **Cancel** instead of a disabled spinner - Header `z-50 isolate` without `overflow-x-clip` so Android Chrome does not clip/eat the tap - `connecting` is never persisted (`onRehydrateStorage` reset) so a fresh visit is not spinner-disabled - WalletConnect Open / Copy pairing sheet (DEX #519 pattern); cosmes `QRCodeModal` no longer `location.href`s from an async callback - Keplr on mobile Chrome without `window.keplr` is a **WalletConnect** row, not a dead “Not installed” extension row - Leap stays desktop extension-only (not the mobile fix) - Invariants **INV-FE-WC-MOBILE-1**, docs, and `skills/agent-frontend-terra-wallet-mobile.md` ## Why Related #137 (kept open until Android 16 Chrome device QA passes) usera (Android 16 Chrome) could not activate Connect Terra Wallet on `bridge.cl8y.com` while the same device connected successfully on ustr-cmm. Bridge transfers require a Terra wallet; a dead header CTA makes the product unusable for that cohort. ## Testing - [x] Unit tests (`npm run test:unit` in `packages/frontend`) — 692 passed - [x] Typecheck (`npx tsc --noEmit`) - [x] Playwright wallet-connect (desktop + 390×844 mobile) with 5 workers: `E2E_UI_ONLY=1 npx playwright test e2e/wallet-connect.spec.ts --workers=5` — 7 passed - [ ] Tested on desktop (device: ___) — desktop extension path unchanged in code; please confirm Keplr extension - [ ] Tested on mobile (device: Android 16 Chrome) — **needs device QA** (tap CTA → modal → Lunc Dash / Galaxy Station Open+Copy) - [ ] Wallet tested: ___ - [x] No console errors in Playwright runs - [ ] Screenshots attached (if UI change) — overlay stacking screenshot still useful from a real Android 16 Chrome session ## Checklist - [x] Only touches `packages/frontend/` plus docs/skills/README for invariants - [x] No hardcoded secrets, keys, or addresses - [x] Lint passes (`npx eslint` on changed TS) - [x] Unit tests pass (`npm run test:unit`)
PlasticDigits commented 2026-08-31 05:59:01 +00:00 (Migrated from gitlab.com)

mentioned in issue #137

mentioned in issue #137
PlasticDigits commented 2026-08-31 09:14:53 +00:00 (Migrated from gitlab.com)

RECOMMEND: FIX

Reviewed against #137. The implementation matches the intended DEX #519 / ustr-cmm direction (tappable header, no async location.href, Open+Copy pairing, Keplr WC on mobile Chrome, Leap desktop-only). It is not a BLOCK. Do not close #137 until the reported device actually works.

Security

Vector Result
WC auto-redirect from async callback Addressed — cosmes QRCodeModal patch + pairing hook; mobile uses Open/Copy
Arbitrary https: / javascript: deep links Rejected by isAllowedWalletConnectDeepLink
Broad intent: prefix Low — any intent: URI passes. Pairing templates come from the app wallet catalog, not an arbitrary WC peer, but a buggy/malicious details.android would still open. Prefer allowlisting known packages (com.chainapsis.keplr, Galaxy Station, Lunc Dash)
Simulated wallet on production Still DEV_MODE
Stuck connecting onRehydrateStorage resets connecting; header becomes Cancel, not a disabled spinner
Overlay eating taps Header z-50 isolate, overflow-x-clip removed; Legal TermsGate is not on the header (aligned with #134)
Connect tap ≠ skip T&C MET if !156 is merged as designed
CSP blanket https: Not added
Prompt injection None

#137 acceptance criteria

Criterion Status
Android 16 Chrome first tap opens TerraWalletModal MISSING verification — code makes this plausible; device QA unchecked
connecting === false on fresh visit MET in code + unit tests
Lunc Dash / Galaxy Station Open+Copy MET in code; device unchecked
Keplr not a dead “Not installed” row on Chrome Android MET — WC row when window.keplr absent
Desktop extension unchanged Claimed; desktop Keplr checklist still blank
Legal gate does not swallow Connect MET for this MR (header above page overlays); still needs a combined !156+!159 pass
WC Cancel clears spinner MET (Cancel instead of disabled spinner)

Issue verification: “Manual matrix on this issue: Android 16 Chrome tap → modal → Lunc Dash or Galaxy Station → address shown.” That box is still empty. Playwright 390×844 with 5 workers (7 passed) is necessary but not sufficient — the original bug was Android Chrome hit-testing / WalletConnect, which desktop Chromium cannot reproduce.

Other gaps

  • Draft !157 is a duplicate of this work; close or mark superseded.
  • isAllowedWalletConnectDeepLink allowlists all intent: and wc: URIs. Fine for pairing URIs; still reject intent: without a known package.
  • Leap remains desktop extension-only (as specified). Users on mobile looking for Leap will not see a path — document in-app browser / Lunc Dash as the supported path (issue already wants this visible before the user is stuck; confirm the in-app banner still shows).
  • Screenshots of overlay stacking on real Android 16 Chrome still useful.

Testing

Unit coverage on pairing URI builders, allowlist negatives (javascript:, data:, https://evil.example), WalletButton Cancel vs disabled, store rehydrate, and modal options is good. E2E covers desktop + mobile viewport including simulated Terra wallet.

Required before treating #137 as closed: one passing Android 16 Chrome session on a preview deploy (tap CTA → modal → Open or Copy → terra1 in the header). Until then this is a well-aimed fix that has not been verified on the failing cohort.

RECOMMEND: FIX Reviewed against #137. The implementation matches the intended DEX #519 / ustr-cmm direction (tappable header, no async `location.href`, Open+Copy pairing, Keplr WC on mobile Chrome, Leap desktop-only). It is **not** a BLOCK. Do not close #137 until the reported device actually works. ## Security | Vector | Result | |---|---| | WC auto-redirect from async callback | Addressed — cosmes `QRCodeModal` patch + pairing hook; mobile uses Open/Copy | | Arbitrary `https:` / `javascript:` deep links | Rejected by `isAllowedWalletConnectDeepLink` | | Broad `intent:` prefix | **Low** — any `intent:` URI passes. Pairing templates come from the app wallet catalog, not an arbitrary WC peer, but a buggy/malicious `details.android` would still open. Prefer allowlisting known packages (`com.chainapsis.keplr`, Galaxy Station, Lunc Dash) | | Simulated wallet on production | Still `DEV_MODE` | | Stuck `connecting` | `onRehydrateStorage` resets `connecting`; header becomes Cancel, not a disabled spinner | | Overlay eating taps | Header `z-50 isolate`, `overflow-x-clip` removed; Legal TermsGate is not on the header (aligned with #134) | | Connect tap ≠ skip T&C | MET if !156 is merged as designed | | CSP blanket `https:` | Not added | | Prompt injection | None | ## #137 acceptance criteria | Criterion | Status | |---|---| | Android 16 Chrome first tap opens TerraWalletModal | **MISSING verification** — code makes this plausible; device QA unchecked | | `connecting === false` on fresh visit | MET in code + unit tests | | Lunc Dash / Galaxy Station Open+Copy | MET in code; **device unchecked** | | Keplr not a dead “Not installed” row on Chrome Android | MET — WC row when `window.keplr` absent | | Desktop extension unchanged | Claimed; desktop Keplr checklist still blank | | Legal gate does not swallow Connect | MET for this MR (header above page overlays); still needs a combined !156+!159 pass | | WC Cancel clears spinner | MET (Cancel instead of disabled spinner) | Issue verification: “Manual matrix on this issue: Android 16 Chrome tap → modal → Lunc Dash or Galaxy Station → address shown.” That box is still empty. Playwright `390×844` with 5 workers (7 passed) is necessary but not sufficient — the original bug was Android Chrome hit-testing / WalletConnect, which desktop Chromium cannot reproduce. ## Other gaps - Draft !157 is a duplicate of this work; close or mark superseded. - `isAllowedWalletConnectDeepLink` allowlists all `intent:` and `wc:` URIs. Fine for pairing URIs; still reject `intent:` without a known package. - Leap remains desktop extension-only (as specified). Users on mobile looking for Leap will not see a path — document in-app browser / Lunc Dash as the supported path (issue already wants this visible **before** the user is stuck; confirm the in-app banner still shows). - Screenshots of overlay stacking on real Android 16 Chrome still useful. ## Testing Unit coverage on pairing URI builders, allowlist negatives (`javascript:`, `data:`, `https://evil.example`), WalletButton Cancel vs disabled, store rehydrate, and modal options is good. E2E covers desktop + mobile viewport including simulated Terra wallet. **Required before treating #137 as closed:** one passing Android 16 Chrome session on a preview deploy (tap CTA → modal → Open or Copy → `terra1` in the header). Until then this is a well-aimed fix that has not been verified on the failing cohort.
PlasticDigits commented 2026-08-31 09:16:59 +00:00 (Migrated from gitlab.com)

Follow-up (second pass): still RECOMMEND: FIX. Two completion-path bugs were not in the first note:

  1. High — connect.ts still remaps WC failures to “install the extension.” packages/frontend/src/services/terra/connect.ts (~80–101) is unchanged. Any error containing "Keplr" / "Station" / "Cosmostation" becomes “Please install the … extension.” This MR now offers those wallets as WalletType.WALLETCONNECT on mobile Chrome. A WC reject/timeout/relay error that mentions the wallet name shows the old extension dead-end — the exact UX #137 is trying to kill. Gate that remap on WalletType.EXTENSION only.

  2. High — cancelConnection + visibility retry can rotate the pairing URI. stores/wallet.ts cancelConnection now closes the pairing sheet. Unchanged hooks/useWallet.ts (~110–145) on visibilitychange → visible while connecting calls cancelConnection() then connectTerraWallet(..., WALLETCONNECT). Android Open (luncdash: / intent:) backgrounds Chrome; return from the wallet is the happy path. If the session is not yet in the cosmes cache, the user comes back to a new wc: URI while the wallet approved the old one. Retry via cached session / tryReconnect without closing the sheet or minting a new URI.

  3. Copy fallback (Medium): pairing CopyButton swallows clipboard.writeText failure. Cosmes fallback uses prompt. Android Chrome often needs a visible Copy fallback when Open does not land in-app.

  4. Cosmes QR fallback Open still location.hrefs with no allowlist when the pairing hook returns false (defense in depth vs the intent: prefix).

Device QA on Android 16 Chrome remains required before closing #137. Draft !157 is the closed wrong-target duplicate.

Follow-up (second pass): still **RECOMMEND: FIX**. Two completion-path bugs were not in the first note: 1. **High — `connect.ts` still remaps WC failures to “install the extension.”** `packages/frontend/src/services/terra/connect.ts` (~80–101) is **unchanged**. Any error containing `"Keplr"` / `"Station"` / `"Cosmostation"` becomes “Please install the … extension.” This MR now offers those wallets as `WalletType.WALLETCONNECT` on mobile Chrome. A WC reject/timeout/relay error that mentions the wallet name shows the old extension dead-end — the exact UX #137 is trying to kill. Gate that remap on `WalletType.EXTENSION` only. 2. **High — `cancelConnection` + visibility retry can rotate the pairing URI.** `stores/wallet.ts` `cancelConnection` now closes the pairing sheet. Unchanged `hooks/useWallet.ts` (~110–145) on `visibilitychange` → visible while `connecting` calls `cancelConnection()` then `connectTerraWallet(..., WALLETCONNECT)`. Android Open (`luncdash:` / `intent:`) backgrounds Chrome; return from the wallet is the happy path. If the session is not yet in the cosmes cache, the user comes back to a **new** `wc:` URI while the wallet approved the old one. Retry via cached session / `tryReconnect` without closing the sheet or minting a new URI. 3. **Copy fallback (Medium):** pairing `CopyButton` swallows `clipboard.writeText` failure. Cosmes fallback uses `prompt`. Android Chrome often needs a visible Copy fallback when Open does not land in-app. 4. Cosmes QR fallback Open still `location.href`s with **no** allowlist when the pairing hook returns false (defense in depth vs the `intent:` prefix). Device QA on Android 16 Chrome remains required before closing #137. Draft !157 is the closed wrong-target duplicate.
PlasticDigits commented 2026-08-31 11:25:52 +00:00 (Migrated from gitlab.com)

mentioned in commit b862755129

mentioned in commit b8627551294805a5c39984ee0dfeb94cc8ae3a42
PlasticDigits commented 2026-08-31 11:25:52 +00:00 (Migrated from gitlab.com)

added 1 commit

  • b8627551 - fix(frontend): keep WalletConnect pairing URI stable after Android resume (GL-137)

Compare with previous version

added 1 commit <ul><li>b8627551 - fix(frontend): keep WalletConnect pairing URI stable after Android resume (GL-137)</li></ul> [Compare with previous version](/PlasticDigits/cl8y-bridge-monorepo/-/merge_requests/19/diffs?diff_id=1993926996&start_sha=2d8ebc29d99d2178c255cd28acc1e078f141a52e)
PlasticDigits commented 2026-08-31 11:26:45 +00:00 (Migrated from gitlab.com)

Follow-up: review fixes landed (b862755)

Implemented the two High completion-path bugs from the second pass, plus the Medium copy fallback, intent: package allowlist, and cosmes fallback Open allowlist. Unit + Playwright retested. Do not close #137 until Android 16 Chrome device QA passes.

Review items completed

  1. High — WC errors remapped to “install the extension.” remapTerraConnectError only emits “Please install the … extension” for WalletType.EXTENSION. WalletConnect reject/timeout/relay errors that mention Keplr/Station/Cosmostation keep the real message.
  2. High — cancelConnection + visibility retry rotated the pairing URI. Returning from Lunc Dash / Galaxy Station / Keplr no longer cancels the in-flight connect or mints a new wc: URI. resumeWalletConnectAfterForeground leaves the pairing sheet up; tryReconnect runs only when a cosmes wcSession is already cached. Pairing hook open() refuses to replace an in-flight URI.
  3. Medium — Copy swallowed clipboard failure. copyTextToClipboard falls back to execCommand then prompt. Pairing sheet now shows a selectable wc: URI field for Android long-press when Copy fails.
  4. Cosmes QR fallback Open now calls isAllowedDeepLink before location.href (hook missing still rejects unknown intent: packages).
  5. intent: allowlist requires #Intent plus a known package= (com.chainapsis.keplr, io.hexxagon.station, money.terra.station, wannabit.io.cosmostaion) or scheme= — not a blanket intent: prefix.
  6. Leap path documented in-app (modal hint names Lunc Dash / Galaxy Station / Keplr / in-app browser). In-app banner unchanged.
  7. Invariants / skill updated: INV-FE-WC-MOBILE-1 in docs/FRONTEND_BRIDGE_INVARIANTS.md, docs/frontend.md, docs/qa-templates/qa-test-pass.md, skills/agent-frontend-terra-wallet-mobile.md.

Not done (out of this push / still required)

  • Android 16 Chrome device QA on a preview deploy (the original #137 cohort). Playwright 390×844 cannot reproduce Android hit-testing / WalletConnect.
  • Desktop Keplr extension manual confirmation (code path unchanged).
  • Combined !156 + !159 Legal TermsGate + Connect stacking pass.
  • Overlay stacking screenshots from a real Android 16 Chrome session.
  • Closing #137 — wait for the device matrix.

Draft !157 was already the closed wrong-target duplicate.

Automated verification (this commit)

  • npm run test:unit — 707 passed (retest of new cases also passed)
  • npx tsc --noEmit
  • ESLint on changed TS
  • Playwright E2E_UI_ONLY=1 npx playwright test e2e/wallet-connect.spec.ts --workers=5 — 7 passed (run twice)

Device QA checklist (please run on Android 16 Chrome)

  • Fresh visit: header Connect Terra Wallet is enabled (connecting === false); first tap opens TerraWalletModal
  • Lunc Dash: Open (or Copy / long-press URI) → approve → terra1 in the header; returning to Chrome does not replace the pairing URI
  • Galaxy Station: same Open + Copy path
  • Keplr without window.keplr: enabled WalletConnect row, not a dead “Not installed”; a WC reject/timeout does not say “install the Keplr extension”
  • Copy failure: selectable pairing URI (or prompt) is visible
  • Cancel during WC: spinner clears; CTA is tappable again
  • Leap is hidden; hint mentions Lunc Dash / Galaxy Station / Keplr / in-app browser
  • In-app browser banner still shows inside a wallet WebView
  • Desktop Chrome + Keplr extension still connects
  • If !156 is on the same preview: Legal gate does not swallow Connect; Connect tap ≠ skip T&C

Issue: #137 · MR: !159

## Follow-up: review fixes landed (`b862755`) Implemented the two **High** completion-path bugs from the second pass, plus the Medium copy fallback, `intent:` package allowlist, and cosmes fallback Open allowlist. Unit + Playwright retested. **Do not close #137 until Android 16 Chrome device QA passes.** ### Review items completed 1. **High — WC errors remapped to “install the extension.”** `remapTerraConnectError` only emits “Please install the … extension” for `WalletType.EXTENSION`. WalletConnect reject/timeout/relay errors that mention Keplr/Station/Cosmostation keep the real message. 2. **High — `cancelConnection` + visibility retry rotated the pairing URI.** Returning from Lunc Dash / Galaxy Station / Keplr no longer cancels the in-flight connect or mints a new `wc:` URI. `resumeWalletConnectAfterForeground` leaves the pairing sheet up; `tryReconnect` runs only when a cosmes `wcSession` is already cached. Pairing hook `open()` refuses to replace an in-flight URI. 3. **Medium — Copy swallowed clipboard failure.** `copyTextToClipboard` falls back to `execCommand` then `prompt`. Pairing sheet now shows a selectable `wc:` URI field for Android long-press when Copy fails. 4. **Cosmes QR fallback Open** now calls `isAllowedDeepLink` before `location.href` (hook missing still rejects unknown `intent:` packages). 5. **`intent:` allowlist** requires `#Intent` plus a known `package=` (`com.chainapsis.keplr`, `io.hexxagon.station`, `money.terra.station`, `wannabit.io.cosmostaion`) or `scheme=` — not a blanket `intent:` prefix. 6. **Leap path documented in-app** (modal hint names Lunc Dash / Galaxy Station / Keplr / in-app browser). In-app banner unchanged. 7. **Invariants / skill** updated: `INV-FE-WC-MOBILE-1` in `docs/FRONTEND_BRIDGE_INVARIANTS.md`, `docs/frontend.md`, `docs/qa-templates/qa-test-pass.md`, `skills/agent-frontend-terra-wallet-mobile.md`. ### Not done (out of this push / still required) - **Android 16 Chrome device QA** on a preview deploy (the original #137 cohort). Playwright 390×844 cannot reproduce Android hit-testing / WalletConnect. - **Desktop Keplr extension** manual confirmation (code path unchanged). - **Combined !156 + !159** Legal TermsGate + Connect stacking pass. - Overlay stacking **screenshots** from a real Android 16 Chrome session. - Closing #137 — wait for the device matrix. Draft !157 was already the closed wrong-target duplicate. ### Automated verification (this commit) - [x] `npm run test:unit` — 707 passed (retest of new cases also passed) - [x] `npx tsc --noEmit` - [x] ESLint on changed TS - [x] Playwright `E2E_UI_ONLY=1 npx playwright test e2e/wallet-connect.spec.ts --workers=5` — 7 passed (run twice) ### Device QA checklist (please run on Android 16 Chrome) - [ ] Fresh visit: header **Connect Terra Wallet** is enabled (`connecting === false`); first tap opens `TerraWalletModal` - [ ] Lunc Dash: Open (or Copy / long-press URI) → approve → `terra1` in the header; returning to Chrome does **not** replace the pairing URI - [ ] Galaxy Station: same Open + Copy path - [ ] Keplr without `window.keplr`: enabled WalletConnect row, not a dead “Not installed”; a WC reject/timeout does **not** say “install the Keplr extension” - [ ] Copy failure: selectable pairing URI (or prompt) is visible - [ ] Cancel during WC: spinner clears; CTA is tappable again - [ ] Leap is hidden; hint mentions Lunc Dash / Galaxy Station / Keplr / in-app browser - [ ] In-app browser banner still shows inside a wallet WebView - [ ] Desktop Chrome + Keplr extension still connects - [ ] If !156 is on the same preview: Legal gate does not swallow Connect; Connect tap ≠ skip T&C Issue: #137 · MR: !159
PlasticDigits commented 2026-08-31 12:10:02 +00:00 (Migrated from gitlab.com)

changed the description

changed the description
PlasticDigits commented 2026-08-31 12:11:15 +00:00 (Migrated from gitlab.com)

changed the description

changed the description
PlasticDigits commented 2026-08-31 12:26:37 +00:00 (Migrated from gitlab.com)

added 10 commits

  • b8627551...50b593d4 - 9 commits from branch main
  • 42c92cea - chore: merge main into fix/gl-137-android-chrome-terra-connect (GL-137 + clickwrap/rank)

Compare with previous version

added 10 commits <ul><li>b8627551...50b593d4 - 9 commits from branch <code>main</code></li><li>42c92cea - chore: merge main into fix/gl-137-android-chrome-terra-connect (GL-137 + clickwrap/rank)</li></ul> [Compare with previous version](/PlasticDigits/cl8y-bridge-monorepo/-/merge_requests/19/diffs?diff_id=1994075723&start_sha=b8627551294805a5c39984ee0dfeb94cc8ae3a42)
PlasticDigits commented 2026-08-31 12:35:59 +00:00 (Migrated from gitlab.com)

added 6 commits

  • 42c92cea...9e820004 - 5 commits from branch main
  • e94e5382 - chore: merge main into fix/gl-137-android-chrome-terra-connect (Terra AW docs)

Compare with previous version

added 6 commits <ul><li>42c92cea...9e820004 - 5 commits from branch <code>main</code></li><li>e94e5382 - chore: merge main into fix/gl-137-android-chrome-terra-connect (Terra AW docs)</li></ul> [Compare with previous version](/PlasticDigits/cl8y-bridge-monorepo/-/merge_requests/19/diffs?diff_id=1994102221&start_sha=42c92ceabc7843e01af1369b083d5d563e4c48b7)
PlasticDigits commented 2026-08-31 12:36:18 +00:00 (Migrated from gitlab.com)

mentioned in commit e228eb1cf8

mentioned in commit e228eb1cf8d7f4902ed9db6b9293f195c70d8384
PlasticDigits (Migrated from gitlab.com) merged commit e228eb1cf8 into main 2026-08-31 12:36:19 +00:00
PlasticDigits commented 2026-08-31 12:39:02 +00:00 (Migrated from gitlab.com)

mentioned in issue #134

mentioned in issue #134
PlasticDigits commented 2026-09-01 07:29:07 +00:00 (Migrated from gitlab.com)

mentioned in merge request !161

mentioned in merge request !161
PlasticDigits commented 2026-09-01 07:29:38 +00:00 (Migrated from gitlab.com)

mentioned in merge request !162

mentioned in merge request !162
Sign in to join this conversation.
No description provided.