feat(community-tax): one-click free migrate onto 11619 for listed templates + Terraport/GDEX LP gate #626

Closed
opened 2026-08-24 11:49:42 +00:00 by PlasticDigits · 30 comments
PlasticDigits commented 2026-08-24 11:49:42 +00:00 (Migrated from gitlab.com)

Design record #603 (S1–S5; this ticket is the implementation follow-up). Template #592 / store+list #601. Create Token #593. Catalog #594. F6 pin #582. Router hops #607 (improved option 2). ALPHA wrap vs drop #558 — this ticket does not replace POL wrap.

Product notes on #603 (2026-08-23 / 2026-08-24): already-whitelisted templates migrate for free on a one-button page; custom paths may be needed for 8266 and 8654; in-place migrate must not break Terraport / GDEX LP.


Current codebase

There is no /token/migrate route. App.tsx has /token/create, /tokens, /token/:addr/manage only. Create Token copy says wasm upgrades are CMM-only — you cannot migrate this contract. Manage (C593-8) requires LCD code_id == VITE_COMMUNITY_TAX_CODE_ID and must not show tax SKUs on 10184 / 8266 / 6036.

cl8y-community-tax-token::migrate is MigrateMsg {} + cw2::ensure_from_older_version(…, "crates.io:cl8y-community-tax-token", version). Same-crate bumps only. Foreign cw2 (6036 / 10184 / 8266 / 8654) reverts. No GetMigrateOrigin. GetLauncherOrigin is CONFIG.launcher (set at launcher instantiate). Catalog attest (I594-3) needs LCD code_id + CMM admin + launcher-tx + GetLauncherOrigin == env launcher — a rogue or adopted instance without those stays unlisted.

Live columbus-5 (2026-08-24):

Role Live
Adopt target wasm 11619 (option-2 hop_trader, #604–#609). REPORT GO.
Still listed 11611 (pre-option-2). Zero instances. Same-crate 11611→11619 is already allowed and is not this page.
Factory whitelist [6036, 8266, 10184, 11611, 11619]
Launcher terra126pr5… code 11622; token_code_id 11619
Honest listed sources 6036 TerraSwap cw20-base; 10184 cw20-mintable; 8266 Terraport token V2 (crates.io:terraport-token / 0.0.0, marketing + balance_at, no tax_map)
Known-bad ALPHA 8654 cw20_taxed + tax_map (terra1x6e64…zysuxz). Wasm/tax admin terra1ljqgc0…. Do not whitelist.

Factory F6: after a successful adopt to 11619, every CL8Y pair still pinned to the old code_id fail-closes until governance RefreshPairAssetCodeIds. Terraport / GDEX pairs are not F6-pinned; they keep the same CW20 address.

Paid Create Token SKUs are 50 UST1 invoices (C593-4). Product for this page: free (no invoice). Gas is still LUNC.


Why this is needed

Communities on listed honest templates want to keep the same CW20 address and holder set while moving onto the tax template (Create Token / catalog / extra-debit). Today the only safe product path is a new 11619 instantiate (S1) or a wrap (S2 / #558). That splits tickers and Terraport vs CL8Y venues.

Product: load the token, one button, no 50 UST1. 8266 (Terraport V2) and 8654 (ALPHA) may need custom importer branches. Shipping that button without a written Terraport / GDEX LP impact would let an admin migrate ALPHA (or a widely pooled 8266) and change tax under existing external AMM reserves.

#603 is design-only and must stay the decision record. This ticket ships the page + allowlisted importer after per-source go, with LP impact as a close gate (not a sibling investigation).


Constraints / guardrails

  1. Target is 11619, not 11611. Adopted instances must be option-2 (T592-13): official-router hops tax authenticated trader. Do not ship Honest-hop copy for new 11619 instances.
  2. H-01 — no pair/router FoT balance-delta math. After adopt, inbound to pair / router / escrow / AutoLP stays 1:1.
  3. Do not whitelist 8654 (or any tax_map / inbound FoT). Listing 11619 is enough for adopted addresses.
  4. T592-5 — after adopt, wasm admin must be CMM (terra16j5u6…). Source admin becomes manager only. UpdateAdmin in the same migrate tx (or immediately after, same ops bundle). Manager cannot migrate.
  5. O601-4 / I594-3 — catalog must not attest a migrate that lacks CMM admin + a defined origin. Do not fake launcher_tx. Either write CONFIG.launcher to the official launcher and add GetMigrateOrigin (or equivalent), or keep adopted tokens unlisted until that rule is written.
  6. F6 — CL8Y pairs pinned to the old id freeze until governance Refresh. Page must say so. Token admin cannot Refresh. Do not Refresh a pair whose other asset is unlisted.
  7. cw2 — do not skip ensure_from_older_version for same-crate upgrades. Foreign importer is a new migrate branch with an explicit allowlist.
  8. No supply mint / burn on adopt — total_supply and every BALANCES entry match pre-migrate (or a documented dust rule).
  9. No leftover tax_map — after adopt, {"tax_map":{}} must fail. Execute paths must not read 8654 tax keys.
  10. Free — no 50 UST1 invoice, no SKU charge, no ?payee= (C593-10). Ignore ?manager= / ?treasury=.
  11. Already-whitelisted only — LCD IsCodeIdWhitelisted on the source code_id (or a hard allowlist that matches factory: 6036 / 8266 / 10184). Refuse unknown / unlisted / LocalTerra-only ids on columbus-5. 11611 / 11619 are already the tax crate — do not offer “adopt” (same-crate bump is CMM ops).
  12. Do not RegisterListedPair a Terraport or GDEX pair. Extra-debit / outbound apply only to CL8Y factory-listed pairs.
  13. Combined max_buy+max_sell+max_transfer ≤ 2500. MintControl stays off unless the source already has a minter — then revoke by default (do not silently enable mint).
  14. S4 (8654) stays no-go until storage wipe + Layer A/B prove 8654-after-migrate ≡ launcher 11619 and the Terraport/GDEX LP table below is written. The page may load ALPHA and show not supported.
  15. Do not implement pair/router wasm changes. Do not turn hybrid off (#596).
  16. Columbus-5 ALPHA MsgMigrateContract is out of this ticket’s test plan. LocalTerra + multitest only.

Relevant files

Path Role
smartcontracts/contracts/community-tax-token/src/contract.rs migrate (same-crate only); GetLauncherOrigin
smartcontracts/contracts/community-tax-token/src/msg.rs MigrateMsg {}
smartcontracts/contracts/community-tax-token/src/state.rs CONFIG / FEATURES / exemptions
smartcontracts/contracts/community-tax-token/src/tax.rs Extra-debit / outbound / option-2 hop_trader
smartcontracts/contracts/factory/src/contract.rs RefreshPairAssetCodeIds / whitelist
frontend-dapp/src/App.tsx Routes — add /token/migrate
frontend-dapp/src/pages/CreateTokenPage.tsx Current “cannot migrate” copy; link to migrate page
frontend-dapp/src/pages/ManageTokenPage.tsx Post-adopt manage (C593-8)
frontend-dapp/src/components/common/navItems.ts More-menu item when env set
indexer/src/indexer/community_tokens.rs Attest probe — migrate origin
docs/runbooks/cw20-code-id-ops.md F6 refresh after adopt
docs/terraport.md Terraport factory terra1n75fg…
cw20-codeid-audits/codeids/11619/REPORT.md Target template
cw20-codeid-audits/codeids/8266/REPORT.md Terraport V2 source
cw20-codeid-audits/codeids/8654/README.md Known-bad ALPHA
skills/AGENTS_COMMUNITY_TAX_CW20.md T592 / O601
skills/AGENTS_FRONTEND_CREATE_TOKEN.md C593
skills/AGENTS_CW20_CODE_ID_PIN.md F6
#603 status note Live pins + LP table draft

One issue, two workstreams (do not split). Page and LP gate ship together; 8654 button stays disabled until S4 is go.

ID Source Direction
S3 6036, 10184 First ship. Allowlisted importer: source cw2 ∈ {cw20-base, cw20-mintable} (confirm LCD names), LCD probe no tax_map, keep BALANCES / TOKEN_INFO / allowances, write CONFIG / FEATURES (defaults: no paid SKUs unless source already has a minter — then revoke), set cw2 to tax crate, UpdateAdmin → CMM.
S3-8266 8266 Custom branch. cw2 crates.io:terraport-token. No tax_map. Storage-layout proof vs cw20-base; leftover marketing_info / balance_at keys must be unread (or explicitly dropped). Enable the button only after the Terraport/GDEX LP table says 1:1 stay-1:1.
S4 8654 Research + refuse on the page until go. Must wipe tax_map, map 1%/4.5% → sell/buy bps only if combined ≤ 2500, prove every balance 1:1, and publish the ALPHA Terraport/GDEX LP impact. Default remains not supported (S1 new ticker or S2 wrap on #558).
S1 / S2 all Still the documented fallback. Create Token stays the new-instantiate path.

Page (retail):

  • Route /token/migrate (label Migrate Token, never Create Token / Mint). Same env gate as Create Token (C593-1).
  • Paste or load a CW20 address. LCD: ContractInfo.code_id, cw2, token_info, tax_map probe, wasm admin, factory IsCodeIdWhitelisted.
  • If source is listed-honest and importer accepts: one primary button (connected wallet is wasm admin). Disconnected / wrong wallet / unlisted / tax_map / already-11619 → no button, short reason.
  • Confirm copy: address stays the same; holders stay; CL8Y pairs freeze until Refresh; Terraport/GDEX keep the address; tax rules become 11619 (extra-debit only on CL8Y listed pairs).
  • After success: link /token/:addr/manage (now 11619). Do not auto-inject into Swap (C593-11).
  • 8266 / 8654: if custom path is not go, show not supported + S1/S2 links. Do not hide 8654 behind a generic error.

Terraport / GDEX LP (required write-up in this ticket, then UI copy):

In-place migrate keeps the CW20 address. External DEX pairs are not CL8Y factory pairs and are not F6-pinned.

Source After adopt to 11619 Terraport / GDEX LP
6036 / 10184 / 8266 (honest 1:1) Extra-debit / outbound only on CL8Y RegisterListedPair. Other DEX transfers stay 1:1. Address unchanged. Reserves stay 1:1. CL8Y pairs freeze until Refresh.
8654 (ALPHA tax_map) Wipe tax_map. Inbound 1:1 everywhere. Address unchanged. Live ALPHA map (Terraport dest 8260/8214 = 0% inbound; transfer-out of those codes = 4.5%) goes away. Forward TP/GDEX flow becomes honest 1:1. Historical 4.5% pair→user skim is not unwound.

Fill this table with LCD-named ALPHA (and at least one 8266) Terraport / GDEX pair addresses, reserve snapshots, and a LocalTerra analogue — not prose only.

Ops bundle after a successful adopt (docs + optional script, not the retail button): whitelist already has 11619 → SetPairPaused on affected CL8Y pairs → RefreshPairAssetCodeIds (single, not a batch that includes an unlisted other-asset) → smoke extra-debit sell → unpause.


Acceptance criteria

  • /token/migrate exists (env-gated). User pastes a listed-honest token, connects the wasm admin, one click, no 50 UST1. Success leaves the same address on 11619 with CMM admin.
  • Importer allowlist is explicit. Unknown cw2 / unlisted code_id / tax_map / decimals outside 6–18 / combined caps > 2500 → revert, balances untouched.
  • 6036 and 10184 S3 paths work on LocalTerra (or documented fixture). 8266 custom path either works with a storage proof or the button stays disabled with copy.
  • 8654 never migrates on columbus-5 from this ticket. Page loads ALPHA (or a fixture) and shows not supported unless S4 is recorded go here.
  • Terraport / GDEX LP impact is written (skill + docs/contracts-terraclassic.md § migrate-adopt) with LCD pair examples for ALPHA and at least one 8266. UI confirm repeats the one-line consequence.
  • Catalog attest rule for adopted tokens is implemented or adopted tokens stay unlisted (no fake launcher_tx).
  • F6: CL8Y pair fail-closed until Refresh; after Refresh, extra-debit sell works. Page discloses the freeze.
  • Create Token “cannot migrate” copy is updated to point at this page for other templates; launcher-created 11619 tokens remain CMM-only.
  • Skills + #603 crosslink. #558 left open.
  • make verify-issue-<this> exists (docs + crate + Vitest; LocalTerra paths when chain is up).

Test plan (all paths)

No columbus-5 ALPHA migrate.

Path Prove
P0 Page chrome Env unset → route unavailable (Create Token pattern). Env set → More menu Migrate Token. No invoice card. Ignore ?payee= / ?manager=.
P1 Today Current 11619 migrate still rejects foreign cw2 (8654 / 10184 / 8266 fixtures) until the importer lands; after land, only allowlisted sources pass.
P2 Same-crate 11619→11619 (or 11611 fixture→11619) still works; MigrateMsg {} for honest upgrades unchanged. Retail page does not offer this.
P3 S3 6036/10184 Fixture with known balances → migrate → token_info.total_supply + sample balance unchanged; get_config present; tax_map query errors; inbound Transfer to a CL8Y pair 1:1; ContractInfo.admin == CMM.
P4 S3-8266 Same as P3 or button disabled + copy. If go: leftover marketing query either still works or is unused; no CONFIG smash.
P5 Reject tax_map / unknown cw2 / unlisted code_id / mint-cap mismatch / decimals > 18 / connected wallet ≠ wasm admin → no execute / revert; balances untouched.
P6 8654 UI Fixture or LCD ALPHA: page shows not supported + S1/S2; no migrate tx.
P7 F6 CL8Y pair pinned to 10184 (or 8266), asset migrates to 11619, swap fail-closed until Refresh; after Refresh, extra-debit sell + option-2 router trader work.
P8 Catalog Adopted token attested only under the rule this ticket chooses. Rogue migrate without CMM admin stays unlisted.
P9 LP impact LCD (or recorded) Terraport factory pair for ALPHA + one 8266: address unchanged; 8266 1:1; 8654 tax_map gone ⇒ forward 1:1; do not RegisterListedPair those pair addrs. LocalTerra analogue for 1:1 stay-1:1.
P10 Free No UST1 Send / invoice events on the happy path.
P11 Manage After adopt, /token/:addr/manage accepts 11619 and shows tax SKUs; source admin is manager, not wasm admin.

Attack / abuse test plan

Vector Expect
A1 8654 migrate without wiping tax_map Revert (or S4 wipe). Must not leave inbound FoT on a listed 11619 instance.
A2 Importer mints or burns total_supply or any balance changes → fail.
A3 Skip UpdateAdmin Source admin keeps migrate and can jump off 11619 onto a listed malicious rebuild. Adopt must set CMM admin.
A4 Fake origin Event-only “migrated” without CMM admin + origin query → catalog must not attest.
A5 Storage smash 8654 tax_map vs 11619 CONFIG; 8266 marketing vs FEATURES. Deserialize garbage / default-zero tax → fail closed.
A6 Re-enable mint Source minter: null → adopt must not set MintControl / minter. 10184 with minter → revoke or explicit map (default revoke).
A7 Caps Mapped 1%+4.5% is 550 (ok). Source that implies >2500 combined → revert.
A8 Refresh grief Governance Refresh on a pair whose other asset is unlisted → batch fail-closed. Runbook Refresh only pairs whose both pins are listed.
A9 Phishing /token/migrate? No query prefill of payee / admin / treasury.
A10 Non-admin click Connected wallet ≠ wasm admin → no tx. Holder cannot migrate someone else’s token.
A11 Register Terraport/GDEX as listed pair Extra-debit would fire on TP/GDEX Send+Swap. Forbid / test reject.
A12 Second migrate back to 8654 CMM-only; manager cannot migrate. Policy is refuse.
A13 Unlisted source Code id not on factory whitelist → page refuse (do not “helpfully” whitelist).
A14 Whitelist 8654 to “save” TP LP Forbidden. Listing 8654 is still H-01 / P2.

Verification criteria

# After impl:
rg -n "migrate-adopt|GetMigrateOrigin|/token/migrate|8654" \
  skills/AGENTS_COMMUNITY_TAX_CW20.md \
  skills/AGENTS_FRONTEND_CREATE_TOKEN.md \
  docs/contracts-terraclassic.md \
  frontend-dapp/src
make verify-issue-592
make verify-issue-601   # 11619 still GO; no 8654 whitelist
make verify-issue-593
make verify-issue-594
make verify-issue-582   # F6 refresh still fail-closed on unlisted
# add: make verify-issue-<this>
  • Issue comment or body records go/no-go for S3 (6036/10184), S3-8266, and S4 (8654) before each button is enabled.
  • P1 reproduced (foreign cw2 reject) and P3 (or P4) green on LocalTerra / multitest.
  • No factory AddWhitelistedCodeId 8654.
  • Terraport / GDEX LP table has real pair addrs (or an explicit “no ALPHA TP/GDEX pair found” LCD note).
  • #603 / #558 updated with this IID. #558 stays open for wrap vs drop.
  • Create Token still cannot self-migrate a launcher 11619 token (CMM-only).

Do not close #603 until its design table is filled or it points here as the decision+impl record.

## Parent / related Design record [#603](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/603) (S1–S5; this ticket is the **implementation** follow-up). Template [#592](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/592) / store+list [#601](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/601). Create Token [#593](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/593). Catalog [#594](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/594). F6 pin [#582](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/582). Router hops [#607](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/607) (improved option 2). ALPHA wrap vs drop [#558](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/558) — this ticket does **not** replace POL wrap. Product notes on #603 (2026-08-23 / 2026-08-24): already-whitelisted templates migrate **for free** on a one-button page; custom paths may be needed for **8266** and **8654**; in-place migrate must not break Terraport / GDEX LP. --- ## Current codebase There is **no** `/token/migrate` route. `App.tsx` has `/token/create`, `/tokens`, `/token/:addr/manage` only. Create Token copy says wasm upgrades are CMM-only — you cannot migrate this contract. Manage (**C593-8**) requires LCD `code_id == VITE_COMMUNITY_TAX_CODE_ID` and must not show tax SKUs on 10184 / 8266 / 6036. `cl8y-community-tax-token::migrate` is `MigrateMsg {}` + `cw2::ensure_from_older_version(…, "crates.io:cl8y-community-tax-token", version)`. Same-crate bumps only. Foreign cw2 (**6036** / **10184** / **8266** / **8654**) **reverts**. No `GetMigrateOrigin`. `GetLauncherOrigin` is `CONFIG.launcher` (set at launcher instantiate). Catalog attest (**I594-3**) needs LCD `code_id` + CMM admin + launcher-tx + `GetLauncherOrigin` == env launcher — a rogue or adopted instance without those stays unlisted. Live columbus-5 (2026-08-24): | Role | Live | |------|------| | Adopt **target** wasm | **11619** (option-2 `hop_trader`, #604–#609). REPORT **GO**. | | Still listed | **11611** (pre-option-2). Zero instances. Same-crate 11611→11619 is already allowed and is **not** this page. | | Factory whitelist | `[6036, 8266, 10184, 11611, 11619]` | | Launcher | `terra126pr5…` code **11622**; `token_code_id` **11619** | | Honest listed sources | **6036** TerraSwap cw20-base; **10184** cw20-mintable; **8266** Terraport token V2 (`crates.io:terraport-token` / `0.0.0`, marketing + `balance_at`, **no** `tax_map`) | | Known-bad | ALPHA **8654** `cw20_taxed` + `tax_map` (`terra1x6e64…zysuxz`). Wasm/tax admin `terra1ljqgc0…`. Do **not** whitelist. | Factory F6: after a successful adopt to 11619, every CL8Y pair still pinned to the old `code_id` **fail-closes** until governance `RefreshPairAssetCodeIds`. Terraport / GDEX pairs are **not** F6-pinned; they keep the same CW20 address. Paid Create Token SKUs are 50 UST1 invoices (**C593-4**). Product for this page: **free** (no invoice). Gas is still LUNC. --- ## Why this is needed Communities on listed honest templates want to **keep the same CW20 address and holder set** while moving onto the tax template (Create Token / catalog / extra-debit). Today the only safe product path is a **new** 11619 instantiate (S1) or a wrap (S2 / #558). That splits tickers and Terraport vs CL8Y venues. Product: load the token, one button, **no 50 UST1**. 8266 (Terraport V2) and 8654 (ALPHA) may need custom importer branches. Shipping that button without a written Terraport / GDEX LP impact would let an admin migrate ALPHA (or a widely pooled 8266) and change tax under existing external AMM reserves. #603 is design-only and must stay the decision record. This ticket ships the page + allowlisted importer **after** per-source go, with LP impact as a **close gate** (not a sibling investigation). --- ## Constraints / guardrails 1. **Target is 11619**, not 11611. Adopted instances must be option-2 (**T592-13**): official-router hops tax authenticated `trader`. Do not ship Honest-hop copy for new 11619 instances. 2. **H-01** — no pair/router FoT balance-delta math. After adopt, inbound to pair / router / escrow / AutoLP stays **1:1**. 3. **Do not whitelist 8654** (or any `tax_map` / inbound FoT). Listing 11619 is enough for adopted addresses. 4. **T592-5** — after adopt, wasm admin **must** be CMM (`terra16j5u6…`). Source admin becomes **manager** only. `UpdateAdmin` in the same migrate tx (or immediately after, same ops bundle). Manager cannot migrate. 5. **O601-4 / I594-3** — catalog must not attest a migrate that lacks CMM admin + a defined origin. Do **not** fake `launcher_tx`. Either write `CONFIG.launcher` to the official launcher **and** add `GetMigrateOrigin` (or equivalent), or keep adopted tokens unlisted until that rule is written. 6. **F6** — CL8Y pairs pinned to the old id freeze until governance Refresh. Page must say so. Token admin cannot Refresh. Do not Refresh a pair whose other asset is unlisted. 7. **cw2** — do not skip `ensure_from_older_version` for same-crate upgrades. Foreign importer is a **new** migrate branch with an explicit allowlist. 8. **No supply mint / burn on adopt** — `total_supply` and every `BALANCES` entry match pre-migrate (or a documented dust rule). 9. **No leftover `tax_map`** — after adopt, `{"tax_map":{}}` must fail. Execute paths must not read 8654 tax keys. 10. **Free** — no 50 UST1 invoice, no SKU charge, no `?payee=` (**C593-10**). Ignore `?manager=` / `?treasury=`. 11. **Already-whitelisted only** — LCD `IsCodeIdWhitelisted` on the **source** `code_id` (or a hard allowlist that matches factory: 6036 / 8266 / 10184). Refuse unknown / unlisted / LocalTerra-only ids on columbus-5. **11611 / 11619** are already the tax crate — do not offer “adopt” (same-crate bump is CMM ops). 12. **Do not `RegisterListedPair` a Terraport or GDEX pair.** Extra-debit / outbound apply only to CL8Y factory-listed pairs. 13. Combined `max_buy+max_sell+max_transfer ≤ 2500`. MintControl stays off unless the source already has a minter — then **revoke** by default (do not silently enable mint). 14. **S4 (8654) stays no-go** until storage wipe + Layer A/B prove 8654-after-migrate ≡ launcher 11619 **and** the Terraport/GDEX LP table below is written. The page may **load** ALPHA and show **not supported**. 15. Do not implement pair/router wasm changes. Do not turn hybrid off (**#596**). 16. Columbus-5 ALPHA `MsgMigrateContract` is **out** of this ticket’s test plan. LocalTerra + multitest only. --- ## Relevant files | Path | Role | |------|------| | [`smartcontracts/contracts/community-tax-token/src/contract.rs`](../smartcontracts/contracts/community-tax-token/src/contract.rs) | `migrate` (same-crate only); `GetLauncherOrigin` | | [`smartcontracts/contracts/community-tax-token/src/msg.rs`](../smartcontracts/contracts/community-tax-token/src/msg.rs) | `MigrateMsg {}` | | [`smartcontracts/contracts/community-tax-token/src/state.rs`](../smartcontracts/contracts/community-tax-token/src/state.rs) | `CONFIG` / `FEATURES` / exemptions | | [`smartcontracts/contracts/community-tax-token/src/tax.rs`](../smartcontracts/contracts/community-tax-token/src/tax.rs) | Extra-debit / outbound / option-2 `hop_trader` | | [`smartcontracts/contracts/factory/src/contract.rs`](../smartcontracts/contracts/factory/src/contract.rs) | `RefreshPairAssetCodeIds` / whitelist | | [`frontend-dapp/src/App.tsx`](../frontend-dapp/src/App.tsx) | Routes — add `/token/migrate` | | [`frontend-dapp/src/pages/CreateTokenPage.tsx`](../frontend-dapp/src/pages/CreateTokenPage.tsx) | Current “cannot migrate” copy; link to migrate page | | [`frontend-dapp/src/pages/ManageTokenPage.tsx`](../frontend-dapp/src/pages/ManageTokenPage.tsx) | Post-adopt manage (**C593-8**) | | [`frontend-dapp/src/components/common/navItems.ts`](../frontend-dapp/src/components/common/navItems.ts) | More-menu item when env set | | [`indexer/src/indexer/community_tokens.rs`](../indexer/src/indexer/community_tokens.rs) | Attest probe — migrate origin | | [`docs/runbooks/cw20-code-id-ops.md`](../docs/runbooks/cw20-code-id-ops.md) | F6 refresh after adopt | | [`docs/terraport.md`](../docs/terraport.md) | Terraport factory `terra1n75fg…` | | [`cw20-codeid-audits/codeids/11619/REPORT.md`](../cw20-codeid-audits/codeids/11619/REPORT.md) | Target template | | [`cw20-codeid-audits/codeids/8266/REPORT.md`](../cw20-codeid-audits/codeids/8266/REPORT.md) | Terraport V2 source | | [`cw20-codeid-audits/codeids/8654/README.md`](../cw20-codeid-audits/codeids/8654/README.md) | Known-bad ALPHA | | [`skills/AGENTS_COMMUNITY_TAX_CW20.md`](../skills/AGENTS_COMMUNITY_TAX_CW20.md) | T592 / O601 | | [`skills/AGENTS_FRONTEND_CREATE_TOKEN.md`](../skills/AGENTS_FRONTEND_CREATE_TOKEN.md) | C593 | | [`skills/AGENTS_CW20_CODE_ID_PIN.md`](../skills/AGENTS_CW20_CODE_ID_PIN.md) | F6 | | [#603 status note](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/work_items/603#note_3725094840) | Live pins + LP table draft | --- ## Recommended direction **One issue, two workstreams** (do not split). Page and LP gate ship together; 8654 button stays disabled until S4 is go. | ID | Source | Direction | |----|--------|-----------| | **S3** | **6036**, **10184** | First ship. Allowlisted importer: source cw2 ∈ `{cw20-base, cw20-mintable}` (confirm LCD names), LCD probe **no** `tax_map`, keep `BALANCES` / `TOKEN_INFO` / allowances, write `CONFIG` / `FEATURES` (defaults: no paid SKUs unless source already has a minter — then revoke), set cw2 to tax crate, `UpdateAdmin` → CMM. | | **S3-8266** | **8266** | Custom branch. cw2 `crates.io:terraport-token`. No `tax_map`. Storage-layout proof vs cw20-base; leftover `marketing_info` / `balance_at` keys must be unread (or explicitly dropped). Enable the button only after the Terraport/GDEX LP table says 1:1 stay-1:1. | | **S4** | **8654** | Research + refuse on the page until go. Must wipe `tax_map`, map 1%/4.5% → sell/buy bps only if combined ≤ 2500, prove every balance 1:1, and publish the ALPHA Terraport/GDEX LP impact. Default remains **not supported** (S1 new ticker or S2 wrap on #558). | | **S1 / S2** | all | Still the documented fallback. Create Token stays the new-instantiate path. | **Page (retail):** - Route `/token/migrate` (label **Migrate Token**, never Create Token / Mint). Same env gate as Create Token (**C593-1**). - Paste or load a CW20 address. LCD: `ContractInfo.code_id`, cw2, `token_info`, `tax_map` probe, wasm admin, factory `IsCodeIdWhitelisted`. - If source is listed-honest and importer accepts: **one** primary button (connected wallet **is** wasm admin). Disconnected / wrong wallet / unlisted / `tax_map` / already-11619 → no button, short reason. - Confirm copy: address stays the same; holders stay; CL8Y pairs freeze until Refresh; Terraport/GDEX keep the address; tax rules become 11619 (extra-debit only on CL8Y listed pairs). - After success: link `/token/:addr/manage` (now 11619). Do not auto-inject into Swap (**C593-11**). - 8266 / 8654: if custom path is not go, show **not supported** + S1/S2 links. Do not hide 8654 behind a generic error. **Terraport / GDEX LP (required write-up in this ticket, then UI copy):** In-place migrate **keeps the CW20 address**. External DEX pairs are not CL8Y factory pairs and are not F6-pinned. | Source | After adopt to 11619 | Terraport / GDEX LP | |--------|----------------------|---------------------| | 6036 / 10184 / 8266 (honest 1:1) | Extra-debit / outbound only on CL8Y `RegisterListedPair`. Other DEX transfers stay 1:1. | Address unchanged. Reserves stay 1:1. CL8Y pairs freeze until Refresh. | | 8654 (ALPHA `tax_map`) | Wipe `tax_map`. Inbound 1:1 everywhere. | Address unchanged. Live ALPHA map (Terraport dest **8260/8214** = 0% inbound; transfer-out of those codes = 4.5%) **goes away**. Forward TP/GDEX flow becomes honest 1:1. Historical 4.5% pair→user skim is **not** unwound. | Fill this table with **LCD-named** ALPHA (and at least one 8266) Terraport / GDEX pair addresses, reserve snapshots, and a LocalTerra analogue — not prose only. **Ops bundle after a successful adopt (docs + optional script, not the retail button):** whitelist already has 11619 → `SetPairPaused` on affected CL8Y pairs → `RefreshPairAssetCodeIds` (single, not a batch that includes an unlisted other-asset) → smoke extra-debit sell → unpause. --- ## Acceptance criteria - [ ] `/token/migrate` exists (env-gated). User pastes a listed-honest token, connects the wasm admin, one click, **no** 50 UST1. Success leaves the same address on **11619** with CMM admin. - [ ] Importer allowlist is explicit. Unknown cw2 / unlisted code_id / `tax_map` / decimals outside 6–18 / combined caps > 2500 → revert, balances untouched. - [ ] **6036** and **10184** S3 paths work on LocalTerra (or documented fixture). **8266** custom path either works with a storage proof **or** the button stays disabled with copy. - [ ] **8654** never migrates on columbus-5 from this ticket. Page loads ALPHA (or a fixture) and shows **not supported** unless S4 is recorded **go** here. - [ ] Terraport / GDEX LP impact is written (skill + `docs/contracts-terraclassic.md` § migrate-adopt) with LCD pair examples for ALPHA and at least one 8266. UI confirm repeats the one-line consequence. - [ ] Catalog attest rule for adopted tokens is implemented or adopted tokens stay **unlisted** (no fake `launcher_tx`). - [ ] F6: CL8Y pair fail-closed until Refresh; after Refresh, extra-debit sell works. Page discloses the freeze. - [ ] Create Token “cannot migrate” copy is updated to point at this page for **other** templates; launcher-created 11619 tokens remain CMM-only. - [ ] Skills + #603 crosslink. #558 left open. - [ ] `make verify-issue-<this>` exists (docs + crate + Vitest; LocalTerra paths when chain is up). --- ## Test plan (all paths) No columbus-5 ALPHA migrate. | Path | Prove | |------|--------| | **P0** Page chrome | Env unset → route unavailable (Create Token pattern). Env set → More menu **Migrate Token**. No invoice card. Ignore `?payee=` / `?manager=`. | | **P1** Today | Current 11619 `migrate` still rejects foreign cw2 (8654 / 10184 / 8266 fixtures) until the importer lands; after land, only allowlisted sources pass. | | **P2** Same-crate | 11619→11619 (or 11611 fixture→11619) still works; `MigrateMsg {}` for honest upgrades unchanged. Retail page does **not** offer this. | | **P3** S3 6036/10184 | Fixture with known balances → migrate → `token_info.total_supply` + sample `balance` unchanged; `get_config` present; `tax_map` query errors; inbound Transfer to a CL8Y pair 1:1; `ContractInfo.admin == CMM`. | | **P4** S3-8266 | Same as P3 **or** button disabled + copy. If go: leftover marketing query either still works or is unused; no CONFIG smash. | | **P5** Reject | `tax_map` / unknown cw2 / unlisted code_id / mint-cap mismatch / decimals > 18 / connected wallet ≠ wasm admin → no execute / revert; balances untouched. | | **P6** 8654 UI | Fixture or LCD ALPHA: page shows **not supported** + S1/S2; no migrate tx. | | **P7** F6 | CL8Y pair pinned to 10184 (or 8266), asset migrates to 11619, swap fail-closed until Refresh; after Refresh, extra-debit sell + option-2 router `trader` work. | | **P8** Catalog | Adopted token attested only under the rule this ticket chooses. Rogue migrate without CMM admin stays unlisted. | | **P9** LP impact | LCD (or recorded) Terraport factory pair for ALPHA + one 8266: address unchanged; 8266 1:1; 8654 tax_map gone ⇒ forward 1:1; do not RegisterListedPair those pair addrs. LocalTerra analogue for 1:1 stay-1:1. | | **P10** Free | No UST1 `Send` / invoice events on the happy path. | | **P11** Manage | After adopt, `/token/:addr/manage` accepts 11619 and shows tax SKUs; source admin is manager, not wasm admin. | --- ## Attack / abuse test plan | Vector | Expect | |--------|--------| | **A1** 8654 migrate without wiping `tax_map` | Revert (or S4 wipe). Must not leave inbound FoT on a listed 11619 instance. | | **A2** Importer mints or burns | `total_supply` or any balance changes → fail. | | **A3** Skip `UpdateAdmin` | Source admin keeps migrate and can jump off 11619 onto a listed malicious rebuild. Adopt must set CMM admin. | | **A4** Fake origin | Event-only “migrated” without CMM admin + origin query → catalog must not attest. | | **A5** Storage smash | 8654 `tax_map` vs 11619 `CONFIG`; 8266 marketing vs `FEATURES`. Deserialize garbage / default-zero tax → fail closed. | | **A6** Re-enable mint | Source `minter: null` → adopt must not set MintControl / minter. 10184 with minter → revoke or explicit map (default revoke). | | **A7** Caps | Mapped 1%+4.5% is 550 (ok). Source that implies >2500 combined → revert. | | **A8** Refresh grief | Governance Refresh on a pair whose other asset is unlisted → batch fail-closed. Runbook Refresh only pairs whose both pins are listed. | | **A9** Phishing `/token/migrate?` | No query prefill of payee / admin / treasury. | | **A10** Non-admin click | Connected wallet ≠ wasm admin → no tx. Holder cannot migrate someone else’s token. | | **A11** Register Terraport/GDEX as listed pair | Extra-debit would fire on TP/GDEX Send+Swap. Forbid / test reject. | | **A12** Second migrate back to 8654 | CMM-only; manager cannot migrate. Policy is refuse. | | **A13** Unlisted source | Code id not on factory whitelist → page refuse (do not “helpfully” whitelist). | | **A14** Whitelist 8654 to “save” TP LP | Forbidden. Listing 8654 is still H-01 / P2. | --- ## Verification criteria ```bash # After impl: rg -n "migrate-adopt|GetMigrateOrigin|/token/migrate|8654" \ skills/AGENTS_COMMUNITY_TAX_CW20.md \ skills/AGENTS_FRONTEND_CREATE_TOKEN.md \ docs/contracts-terraclassic.md \ frontend-dapp/src make verify-issue-592 make verify-issue-601 # 11619 still GO; no 8654 whitelist make verify-issue-593 make verify-issue-594 make verify-issue-582 # F6 refresh still fail-closed on unlisted # add: make verify-issue-<this> ``` - [ ] Issue comment or body records **go/no-go** for S3 (6036/10184), S3-8266, and S4 (8654) before each button is enabled. - [ ] P1 reproduced (foreign cw2 reject) and P3 (or P4) green on LocalTerra / multitest. - [ ] No factory `AddWhitelistedCodeId 8654`. - [ ] Terraport / GDEX LP table has real pair addrs (or an explicit “no ALPHA TP/GDEX pair found” LCD note). - [ ] #603 / #558 updated with this IID. #558 stays open for wrap vs drop. - [ ] Create Token still cannot self-migrate a launcher 11619 token (CMM-only). Do not close #603 until its design table is filled or it points here as the decision+impl record.
PlasticDigits commented 2026-08-24 11:49:44 +00:00 (Migrated from gitlab.com)

marked as related to #603

marked as related to #603
PlasticDigits commented 2026-08-24 11:49:44 +00:00 (Migrated from gitlab.com)

marked as related to #558

marked as related to #558
PlasticDigits commented 2026-08-24 11:49:45 +00:00 (Migrated from gitlab.com)

marked as related to #592

marked as related to #592
PlasticDigits commented 2026-08-24 11:49:46 +00:00 (Migrated from gitlab.com)

marked as related to #593

marked as related to #593
PlasticDigits commented 2026-08-24 11:49:46 +00:00 (Migrated from gitlab.com)

marked as related to #594

marked as related to #594
PlasticDigits commented 2026-08-24 11:49:47 +00:00 (Migrated from gitlab.com)

marked as related to #601

marked as related to #601
PlasticDigits commented 2026-08-24 11:49:48 +00:00 (Migrated from gitlab.com)

marked as related to #582

marked as related to #582
PlasticDigits commented 2026-08-24 11:49:48 +00:00 (Migrated from gitlab.com)

marked as related to #607

marked as related to #607
PlasticDigits commented 2026-08-24 11:49:54 +00:00 (Migrated from gitlab.com)

mentioned in issue #603

mentioned in issue #603
PlasticDigits commented 2026-08-24 12:11:52 +00:00 (Migrated from gitlab.com)

mentioned in commit 9cc595b7e5

mentioned in commit 9cc595b7e5856a390727398822358625917117f4
PlasticDigits commented 2026-08-24 12:12:27 +00:00 (Migrated from gitlab.com)

mentioned in merge request !1136

mentioned in merge request !1136
PlasticDigits commented 2026-08-24 12:12:33 +00:00 (Migrated from gitlab.com)

Implemented in !1136 (issue/626-community-tax-migrate).

Go / no-go (before each button):

ID Source Status
S3 6036 / 10184 go — cw2 crates.io:cw20-base / crates.io:cw20-mintable, no tax_map
S3-8266 8266 go — cw2 crates.io:terraport-token; leftover marketing_info / balance_at unread; LP table 1:1 stay-1:1
S4 8654 ALPHA no-go — page loads and shows not supported. No whitelist. No columbus-5 ALPHA migrate.

Shipped

  • Foreign adopt: MigrateMsg { adopt } allowlist + GetMigrateOrigin. Same-crate {} unchanged.
  • Free /token/migrate (env-gated). Tx bundle: migrate + UpdateAdmin → CMM. No invoice.
  • Catalog attest: CMM + launcher origin + (launcher_tx or allowlisted migrate cw2). Never fake launcher_tx.
  • Terraport LP table (LCD 2026-08-24): ALPHA/LUNC terra12u7kh…9e7p6, ALPHA/USTC terra1jg2vu…wph, Open/LUNC terra1uxr6m…nypyc. No GDEX factory pin in-repo.
  • Invariants M626-1–M626-12 + make verify-issue-626.

Verified locally: make verify-issue-626 (8/8 including retest), make verify-issue-592, make verify-issue-593, make verify-issue-594.

Not in this ticket: columbus-5 ALPHA MsgMigrateContract; S4 tax_map wipe; pair/router wasm; hybrid opt-out; RegisterListedPair of Terraport/GDEX; live LocalTerra P7 F6 / P11 manage smoke (documented + crate/Vitest coverage).

#603 stays the design record. #558 stays open for wrap vs drop.

Implemented in !1136 (`issue/626-community-tax-migrate`). **Go / no-go (before each button):** | ID | Source | Status | |----|--------|--------| | **S3** | 6036 / 10184 | **go** — cw2 `crates.io:cw20-base` / `crates.io:cw20-mintable`, no `tax_map` | | **S3-8266** | 8266 | **go** — cw2 `crates.io:terraport-token`; leftover `marketing_info` / `balance_at` unread; LP table 1:1 stay-1:1 | | **S4** | 8654 ALPHA | **no-go** — page loads and shows **not supported**. No whitelist. No columbus-5 ALPHA migrate. | **Shipped** - Foreign adopt: `MigrateMsg { adopt }` allowlist + `GetMigrateOrigin`. Same-crate `{}` unchanged. - Free `/token/migrate` (env-gated). Tx bundle: migrate + `UpdateAdmin` → CMM. No invoice. - Catalog attest: CMM + launcher origin + (`launcher_tx` **or** allowlisted migrate cw2). Never fake `launcher_tx`. - Terraport LP table (LCD 2026-08-24): ALPHA/LUNC `terra12u7kh…9e7p6`, ALPHA/USTC `terra1jg2vu…wph`, Open/LUNC `terra1uxr6m…nypyc`. No GDEX factory pin in-repo. - Invariants **M626-1–M626-12** + `make verify-issue-626`. **Verified locally:** `make verify-issue-626` (8/8 including retest), `make verify-issue-592`, `make verify-issue-593`, `make verify-issue-594`. **Not in this ticket:** columbus-5 ALPHA `MsgMigrateContract`; S4 `tax_map` wipe; pair/router wasm; hybrid opt-out; `RegisterListedPair` of Terraport/GDEX; live LocalTerra P7 F6 / P11 manage smoke (documented + crate/Vitest coverage). #603 stays the design record. #558 stays open for wrap vs drop.
PlasticDigits commented 2026-08-24 12:12:37 +00:00 (Migrated from gitlab.com)

mentioned in issue #558

mentioned in issue #558
PlasticDigits commented 2026-08-24 13:11:00 +00:00 (Migrated from gitlab.com)

mentioned in commit 5aef7194c6

mentioned in commit 5aef7194c62f247ceeeab1c1f1ae7c3ffec9414a
PlasticDigits commented 2026-08-24 13:11:00 +00:00 (Migrated from gitlab.com)

S4 is now go for the ALPHA instance (follow-up on !1136).

Why it was blocked at first: #626 constraint 14 treated 8654 as inbound FoT (tax_map / tax_info) until a wipe existed. Listing 8654 is still forbidden (H-01). The product path is: wipe leftovers → land on 11619 (already listed).

What the button does now

  • Detect ALPHA by code 8654 or terra1x6e64…zysuxz (factory whitelist not required — 8654 is not listed).
  • Importer wipes tax_info / tax_map / whale_info (raw + cw-storage-plus). Live 8654 may report cw2 crates.io:cw20-base.
  • Maps 4.5% / 1% → buy 450 / sell 100 (combined 550).
  • MsgMigrateContract + MsgUpdateAdmin → CMM. Same address. Terraport forward becomes 1:1; historical 4.5% skim is not unwound.
  • Still never AddWhitelistedCodeId 8654.

make verify-issue-626 first pass + retest: 8/8.

S4 is now **go** for the ALPHA *instance* (follow-up on !1136). **Why it was blocked at first:** #626 constraint 14 treated 8654 as inbound FoT (`tax_map` / `tax_info`) until a wipe existed. Listing **8654** is still forbidden (H-01). The product path is: wipe leftovers → land on **11619** (already listed). **What the button does now** - Detect ALPHA by code **8654** or `terra1x6e64…zysuxz` (factory whitelist not required — 8654 is not listed). - Importer wipes `tax_info` / `tax_map` / `whale_info` (raw + cw-storage-plus). Live 8654 may report cw2 `crates.io:cw20-base`. - Maps 4.5% / 1% → buy **450** / sell **100** (combined 550). - `MsgMigrateContract` + `MsgUpdateAdmin` → CMM. Same address. Terraport forward becomes 1:1; historical 4.5% skim is not unwound. - Still **never** `AddWhitelistedCodeId 8654`. `make verify-issue-626` first pass + retest: 8/8.
PlasticDigits commented 2026-08-24 13:16:05 +00:00 (Migrated from gitlab.com)

mentioned in commit 5d94a3e089

mentioned in commit 5d94a3e089604684b1b4dc2f23781a582415fe13
PlasticDigits commented 2026-08-24 13:31:34 +00:00 (Migrated from gitlab.com)

mentioned in issue #627

mentioned in issue #627
PlasticDigits commented 2026-08-24 13:31:34 +00:00 (Migrated from gitlab.com)

marked as related to #627

marked as related to #627
PlasticDigits commented 2026-08-24 13:32:56 +00:00 (Migrated from gitlab.com)

mentioned in commit bfc2d29510

mentioned in commit bfc2d295100a5f45606bf74319dc3b5e84b3a957
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-08-24 13:32:57 +00:00
PlasticDigits commented 2026-08-24 13:33:16 +00:00 (Migrated from gitlab.com)

!1136 merge (no automerge, no CI wait)

Merged !1136 onto main as bfc2d295. Source SHA 5d94a3e0. Fast-forward: origin/main was already the MR base (eb852f4d). No git conflicts. GitLab CI on the MR head failed with ci_quota_exceeded on every job (same class as !1132–!1135) — not treated as a code defect; did not wait.

Acceptance vs landed tip

AC Result
Env-gated /token/migrate, free, wasm-admin one-click, CMM UpdateAdmin Met in code (MigrateTokenPage + migrateAdoptCommunityToken)
Explicit importer allowlist; unknown cw2 / smash / decimals / caps revert Met in crate (adopt.rs + multitest)
6036 / 10184 S3 Crate fixtures only. Live LocalTerra P3 not re-run this pass
8266 S3-8266 Go (cw2 terraport-token; leftover keys unread)
8654 S4 Superseded. Body still says no-go / “not supported”; later commits + this note recorded S4 go (wipe + map 450/100). Retail default allowlist includes 8654. Still never AddWhitelistedCodeId 8654
Terraport / GDEX LP table Met (ALPHA/LUNC, ALPHA/USTC, Open/LUNC; no GDEX pin)
Catalog attest without fake launcher_tx Met (GetMigrateOrigin + CMM + launcher origin)
F6 freeze disclosed; Refresh is governance Copy met. Live P7 not re-run this pass
Create Token points at migrate; launcher 11619 stays CMM-only Met, but Create Token copy still lists 6036/10184/8266 and omits allowlisted 8654
Skills + #603 crosslink; #558 left open Met. #603 / #558 stay open
make verify-issue-626 Exists. Author recorded 8/8 + 592/593/594. This merge pass did not re-run those targets

Problems / leftovers (not merge-blocking)

  1. Live 11619 cannot run the new importer. Columbus-5 11619 is still same-crate MigrateMsg {} only. Retail migrate to VITE_COMMUNITY_TAX_CODE_ID=11619 will revert until a new community-tax-token store is listed and Coolify/indexer pins move. Listing 11619 covers adopted addresses; do not list 8654.
  2. MR description is stale (still “S4 no-go” / ALPHA not supported). Tip + skill say S4 go.
  3. 6036 live cw2 name is unverified here. Skill says crates.io:cw20-base. Sibling #627 notes 6036 may report terraswap-token — that would revert on-chain even if the page shows go. Confirm LCD cw2 before the first 6036 adopt.
  4. probeHasTaxMap treats any LCD error as false. Contract still wipes leftovers after migrate; frontend wipe-bps / confirm copy can be wrong on a flake.
  5. Optional LocalTerra P3 / P7 / P11 and verification make verify-issue-601 / 582 were not re-run on this merge.
  6. Do not append columbus-5 code 3 from #627. That stays a separate investigation.

Post-merge ops will be a new leftover issue (same pattern as #624 / #625). Do not reopen this ticket unless a merged invariant is wrong.

## !1136 merge (no automerge, no CI wait) Merged [!1136](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/merge_requests/418) onto `main` as `bfc2d295`. Source SHA `5d94a3e0`. Fast-forward: `origin/main` was already the MR base (`eb852f4d`). **No git conflicts.** GitLab CI on the MR head failed with `ci_quota_exceeded` on every job (same class as !1132–!1135) — not treated as a code defect; did not wait. ## Acceptance vs landed tip | AC | Result | |----|--------| | Env-gated `/token/migrate`, free, wasm-admin one-click, CMM `UpdateAdmin` | **Met in code** (`MigrateTokenPage` + `migrateAdoptCommunityToken`) | | Explicit importer allowlist; unknown cw2 / smash / decimals / caps revert | **Met in crate** (`adopt.rs` + multitest) | | 6036 / 10184 S3 | **Crate fixtures only.** Live LocalTerra P3 not re-run this pass | | 8266 S3-8266 | **Go** (cw2 `terraport-token`; leftover keys unread) | | 8654 S4 | **Superseded.** Body still says no-go / “not supported”; later commits + [this note](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/work_items/626#note_3725581216) recorded **S4 go** (wipe + map 450/100). Retail default allowlist includes 8654. Still **never** `AddWhitelistedCodeId 8654` | | Terraport / GDEX LP table | **Met** (ALPHA/LUNC, ALPHA/USTC, Open/LUNC; no GDEX pin) | | Catalog attest without fake `launcher_tx` | **Met** (`GetMigrateOrigin` + CMM + launcher origin) | | F6 freeze disclosed; Refresh is governance | **Copy met.** Live P7 not re-run this pass | | Create Token points at migrate; launcher 11619 stays CMM-only | **Met**, but Create Token copy still lists 6036/10184/8266 and omits allowlisted 8654 | | Skills + #603 crosslink; #558 left open | **Met.** #603 / #558 stay open | | `make verify-issue-626` | **Exists.** Author recorded 8/8 + 592/593/594. This merge pass did not re-run those targets | ## Problems / leftovers (not merge-blocking) 1. **Live 11619 cannot run the new importer.** Columbus-5 **11619** is still same-crate `MigrateMsg {}` only. Retail migrate to `VITE_COMMUNITY_TAX_CODE_ID=11619` will revert until a **new** community-tax-token store is listed and Coolify/indexer pins move. Listing **11619** covers adopted addresses; do **not** list 8654. 2. **MR description is stale** (still “S4 no-go” / ALPHA not supported). Tip + skill say S4 go. 3. **6036 live cw2 name is unverified here.** Skill says `crates.io:cw20-base`. Sibling [#627](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/627) notes 6036 may report `terraswap-token` — that would revert on-chain even if the page shows go. Confirm LCD cw2 before the first 6036 adopt. 4. **`probeHasTaxMap` treats any LCD error as false.** Contract still wipes leftovers after migrate; frontend wipe-bps / confirm copy can be wrong on a flake. 5. Optional LocalTerra P3 / P7 / P11 and verification `make verify-issue-601` / `582` were **not** re-run on this merge. 6. Do **not** append columbus-5 **code 3** from [#627](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/627). That stays a separate investigation. Post-merge ops will be a **new leftover issue** (same pattern as #624 / #625). Do not reopen this ticket unless a merged invariant is wrong.
PlasticDigits commented 2026-08-24 13:33:32 +00:00 (Migrated from gitlab.com)

mentioned in issue #628

mentioned in issue #628
PlasticDigits commented 2026-08-24 13:33:32 +00:00 (Migrated from gitlab.com)

marked as related to #628

marked as related to #628
PlasticDigits commented 2026-08-24 13:34:03 +00:00 (Migrated from gitlab.com)

Post-merge leftovers tracked on #628 (store new adopt wasm, Coolify/indexer pin, LocalTerra P3/P7/P11, 6036 cw2 confirm). Do not reopen this issue unless a merged M626 invariant is wrong.

Post-merge leftovers tracked on [#628](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/628) (store new adopt wasm, Coolify/indexer pin, LocalTerra P3/P7/P11, 6036 cw2 confirm). Do not reopen this issue unless a merged **M626** invariant is wrong.
PlasticDigits commented 2026-08-25 02:04:15 +00:00 (Migrated from gitlab.com)

mentioned in issue #633

mentioned in issue #633
PlasticDigits commented 2026-08-25 02:08:33 +00:00 (Migrated from gitlab.com)

mentioned in issue #634

mentioned in issue #634
PlasticDigits commented 2026-08-25 02:23:35 +00:00 (Migrated from gitlab.com)

mentioned in merge request !1137

mentioned in merge request !1137
PlasticDigits commented 2026-08-25 05:57:12 +00:00 (Migrated from gitlab.com)

mentioned in commit 315d5c910c

mentioned in commit 315d5c910cb03ad10ea0013547c767ccc7209153
PlasticDigits commented 2026-08-26 04:20:43 +00:00 (Migrated from gitlab.com)

marked as related to #670

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

mentioned in issue #670

mentioned in issue #670
PlasticDigits commented 2026-08-27 11:52:21 +00:00 (Migrated from gitlab.com)

mentioned in issue #690

mentioned in issue #690
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#626
No description provided.