docs(guides): practical DEX how-to #12

Open
opened 2026-09-13 17:31:43 +00:00 by PlasticDigits · 0 comments

Summary

https://docs.cl8y.com/guides currently lists only the Open the DEX CTA stub. There is no crawlable first-party page that teaches how to use the CL8Y DEX: swaps, limit orders, fee tiers, wrapping/unwrapping, adding and removing liquidity, slippage settings, and common transaction errors — with trading fees, network fees, and any applicable taxes named as distinct kinds.

Ship one prerendered practical DEX guide on a new allowlisted path so a reader who already knows they want to trade or provide liquidity can complete those jobs on the live first-party DEX, and so support can paste a stable section URL instead of rewriting the same answers in chat.

Bundle (do not split into swap / limit / wrap / LP / fee / slippage / error tickets):

  1. Swaps on / (AMM / hybrid route the live Swap card already runs).
  2. Limit orders on /trade (Limit tab) and /limits (resting book / lifecycle) as the live dApp already presents them.
  3. Fee tiers on /tiers (CL8Y holder discount schedule — pointer only; do not freeze a table).
  4. Wrap / unwrap on /wrap (native LUNC / USTC vs CW20 wrap legs; unwrap is not free).
  5. Add liquidity and remove liquidity on /pool (existing factory pools; creating a pair is not required to LP one that already exists).
  6. Slippage settings (Swap Settings + Trade Market Advanced; store default lives on the DEX, not in a docs query string).
  7. Cost kinds: DEX trading / protocol fee versus Terra Classic network gas versus any tax imposed by the chain — with a clear sentence that this page does not freeze percentages, USD, bps, or tier thresholds unless that exact figure already exists as a first-party constant in this repo.
  8. Common user-facing transaction errors and what to do on the DEX origin (not operator recovery).

Keep /guides/open-the-dex as the CTA-only child. Do not put this manuscript on / (Start Here, code/cl8y-docs#9), /guides/first-use (code/cl8y-docs#10), or /guides/bridge (code/cl8y-docs#11).

v0 platform work (#3) already shipped crawl files, unique titles, and stub routes. Full DEX manuscripts were out of scope there. #10 owns a newcomer’s first swap as one phase of wallet → gas → inbound → trade → outbound; it must not grow this dedicated DEX how-to.

Parent / siblings (do not re-implement):

  • code/cl8y-docs#3 — v0 host + stubs; /guides/open-the-dex purpose remains “follow the first-party CTA. Not a trading tutorial.”
  • code/cl8y-docs#9 — Start Here on / (product map). DEX is one or two sentences there, not a how-to. Cite and link; do not expand that ticket.
  • code/cl8y-docs#10 — first-use walkthrough. That ticket must not add /guides/dex. This issue owns the dedicated DEX operations how-to. Do not merge manuscripts; do not rewrite #10’s first-swap path here.
  • code/cl8y-docs#11 — Bridge how-to. Different product origin (https://bridge.cl8y.com). Cite; do not merge inbound/outbound transfer steps into this page.
  • docs/ARCHITECTURE.md §4 / §10 / §12 — closed route allowlist; dexHref execute ids; no unverified stats; no unpublished marketing content/guides/.
  • code/cl8y-dex-terraclassic — source of currently published Swap / Trade / Limits / Pool / Wrap / Tiers chrome, fee-kind presentation, slippage Settings, and retail error copy (docs/frontend.md, skills/AGENTS_FRONTEND_USER_ERRORS.md). Read, do not vendor unpublished operator internals or copy the SPA into this host.
  • code/CL8Y-web#1 — CL8Y utility-token wording (fee-tier pointer, not a fabricated schedule). Different deployable.

Current codebase

Guides index has no DEX operations child:

  • src/pages/GuidesPage.tsx — lists only /guides/open-the-dex. Copy forbids dumping unpublished marketing manuscripts.
  • src/pages/OpenDexPage.tsx — DEX CTA stub; explicitly not a trading tutorial.
  • src/seo.ts — closed DocsPath union of seven v0 paths. No /guides/dex.
  • src/lib/dexHref.ts — CAMPAIGNS closed vocabulary; no guides-dex. Helper always builds Swap / with from/to. No path helper for /trade, /pool, /wrap, /limits, /tiers.
  • src/App.tsx — seven Route entries; unknown paths 404 via nginx try_files … =404.
  • src/content/invariants.ts — BANNED_CURRENT_COPY / FORBIDDEN_CLAIM_PATTERNS (no TVL / “best DEX” / CoinGecko / CMC / DeFiLlama; no “Buy CL8Y” CTA).
  • e2e/crawl.spec.ts — currently hardcodes the seven v0 paths (must follow ROUTES after this path is added; do not assume loc count 7/8/9 if #10 or #11 land first).
  • src/verify-dist.test.ts — follows ROUTES; sitemap loc count follows that module.
  • Architecture §4: no DEX how-to row.

A complete DEX manuscript therefore must add one allowlisted path in the same PR (seo union, campaign id, App route, prerender, sitemap, crawl tests, ARCHITECTURE §4). Do not overload /guides/open-the-dex. Do not overload /guides/first-use (#10). Do not add /guides/swap, /guides/liquidity, /guides/wrap, or /guides/fees as extra routes in this issue — support deep-links are in-page fragment ids on the one manuscript.

Duplicates / already implemented

Work Action
#1 architecture, #2 review, #5 CI Unrelated; do not reopen
#3 v0 stubs Prerequisite host; Open the DEX stays CTA-only
#9 Start Here on / Sibling map; different problem (what exists vs how to trade / LP)
#10 first-use walkthrough Sibling how-to; includes one first Swap as a phase of onboarding. Different primary reader job. That PR must not register /guides/dex.
#11 Bridge how-to Sibling how-to for a different origin. Do not merge.
Unpublished marketing content/guides/ Forbidden to dump here (INVARIANTS 14)
DEX SPA at https://dex.cl8y.com Cite the live UI; do not copy Swap/Trade/Pool/Wrap screens into this host
DEX integrator / indexer OpenAPI tickets Different repo; this page is retail how-to, not an API pack
DEX docs/frontend.md / skills Read-only source of live chrome names. Do not paste operator gas envelopes, gem lists, or unpublished internals.

If /guides/dex already exists as a complete prerendered how-to (swaps, limits, tiers, wrap, add/remove LP, slippage, cost kinds, common errors, stable fragment ids) and AC1–AC13 pass, close as implemented — do not duplicate.

Why the new implementation is needed

The public docs origin is the URL operators hand people who ask how to swap, place a limit, wrap, or LP. Today:

  • /guides never names DEX operations as a how-to (only a CTA stub).
  • #9 maps the product in one or two sentences; it does not teach a swap or LP.
  • #10 teaches a first use and must not grow a second guides child in that PR.
  • Fee, tax, slippage, wrap, and error questions get answered in chat with no crawlable first-party page, which invites invented percentages and conflating trading fees with gas or chain tax.

This is documentation copy + one new prerendered route + stable heading ids + optional same-origin screenshots. No wallet SDK, no swap/LP execution on this host, no Coolify SKU pick.

Constraints / guardrails

  1. Route. Add exactly one path: /guides/dex. Title seed DEX · Guides · CL8Y docs (wordsmith OK; must stay unique vs existing routes and vs #10/#11 titles if those pages exist). Canonical https://docs.cl8y.com/guides/dex (no trailing slash). Amend ARCHITECTURE §4 in the same PR. Do not add /guides/swap, /guides/liquidity, /guides/wrap, /guides/fees, /guides/wallet, or /guides/withdraw.

  2. Support deep-links. Every required section is an h2 with a stable id that appears in prerendered HTML (no JS). Required ids (exact):

    id Section
    swaps Swaps
    limit-orders Limit orders
    fee-tiers Fee tiers
    wrap Wrap / unwrap
    add-liquidity Add liquidity
    remove-liquidity Remove liquidity
    slippage Slippage
    costs Trading fees vs network fees vs taxes
    errors Common transaction errors

    Support URLs are https://docs.cl8y.com/guides/dex#swaps (and the other ids). Do not mint extra sitemap locs for fragments. Fragment ids must be in the static HTML id attribute (not only client-side).

  3. Reader. Someone who already knows they want to use the first-party DEX (not a zero-wallet newcomer — that is #10). Numbered steps. Short sentences. One scrollable manuscript. Not a whitepaper. Not Start Here (#9). Not a Bridge transfer (#11).

  4. This host stays static. INVARIANTS 19: no wagmi, WalletConnect, three.js, LCD keys, or DEX screens running here. Describe using whatever wallets the live DEX already documents. Do not mint a wallet directory. Do not ask the reader to connect a wallet on docs.cl8y.com. Confirmations happen on https://dex.cl8y.com.

  5. Surfaces to teach (required; names must match the live dApp). Source: code/cl8y-dex-terraclassic docs/frontend.md route table and the production chrome — if a surface is unpublished or gated off in production, omit it (“see DEX”) rather than inventing UI.

    • Swaps — / (Swap). Pick pay/receive, review quote, confirm in the wallet on the DEX origin. This host does not broadcast. Point at dexHref with execute ids (uluna + checksummed Terra Classic CL8Y CW20 already in src/data/contracts.ts) and campaign guides-dex.
    • Limit orders — /trade Limit tab (place against the book) and /limits (wallet’s resting orders / lifecycle). State that /trade Market is a different ticket (solver quote + slippage), not a resting limit. Do not document maker-bot insert hints, FIFO reprice internals, or unpublished book APIs.
    • Fee tiers — /tiers. CL8Y is the utility token for reduced DEX trading fees (code/CL8Y-web#1). Point at the live Tiers UI for the current schedule. Do not invent tier names, CL8Y thresholds, or discount percentages.
    • Wrap / unwrap — /wrap. Native LUNC (uluna) / native USTC vs CW20 wrap legs (cLUNC / cUSTC). Copy must say wrap and unwrap are not the same as a Swap, and unwrap is not free. Do not treat AMM Swap as mint/redeem. Do not add a /ust1 mint/redeem tutorial (out of scope).
    • Add liquidity — /pool provide on an existing factory pair. Creating a pair is not required to LP an existing pool. Do not teach Create Pair / Create Token admin flows.
    • Remove liquidity — /pool withdraw / Manage. Mention LP-token burn/return in user language; do not paste contract message schemas.
    • Slippage — Swap Settings and Trade Market Advanced share the DEX store default (live UI: 5% unless the user changed it). Expert mode is a DEX Settings friction, not a docs deep-link. Forbidden query keys on any docs→DEX href: slippage, expertMode, recipient, pool_only, hybrid_optimize, showGems.
    • Costs — see constraint 7.
    • Errors — see constraint 9.
  6. DEX hrefs.

    • Swap CTA: existing dexHref({ from, to, campaign: "guides-dex" }). Execute ids only. Never tickers as from/to.
    • Other surfaces: a tested helper (e.g. dexPathHref) using new URL(path, getDexOrigin()) with a closed path vocabulary: /trade, /pool, /wrap, /limits, /tiers only. Optional utm_* via URLSearchParams (campaign guides-dex). No string concat, no window.location, no visitor query. rel="noopener noreferrer" if target="_blank".
    • Do not claim the DEX keeps utm_* after Swap canonicalize (ARCHITECTURE §10).
  7. Costs: trading vs network vs tax. Required distinction on #costs:

    • DEX trading / protocol fee — whatever swap, limit-fill, wrap, or LP fee the live DEX UI already shows (including CL8Y fee-tier discounts on /tiers). Point at that chrome. Do not freeze a percentage, bps, or USD.
    • Network fees — Terra Classic gas paid in native LUNC (uluna) to the chain, not “the DEX fee.” Distinct from CW20 wrap legs.
    • Taxes imposed elsewhere — only if a published first-party DEX or chain surface already names a tax (for example a Terra Classic on-chain tax on some denoms). Name the kind. Do not invent a rate. Do not attribute a chain tax to the CL8Y trading fee or to a fee-tier discount. Pattern: “the live DEX UI shows the current trading fee and gas; this page does not freeze a number.” No CoinGecko/CMC/DeFiLlama. No fabricated tier tables.
  8. Production discovery. Do not instruct readers to enable gems / test pairs / ?showGems=1. Production browse omits gems (code/cl8y-dex-terraclassic #562). Do not share or document gem pair addresses.

  9. Errors and recovery (user-facing only). Cover at least, using the live DEX labels (source AGENTS_FRONTEND_USER_ERRORS.md / pause / blacklist / wrap-pause banners — do not invent friendlier names):

    • Missing native LUNC gas (uluna) so the wallet cannot broadcast.
    • Slippage / max-spread too tight (quote vs Settings; 5% confirm-again / Expert gate as the DEX already shows — describe, do not bypass).
    • Pair paused / market frozen / trading restricted (blacklist) — wait or pick another pair; do not tell users to bypass.
    • Wrap temporarily paused.
    • Insufficient balance / quote unavailable / market-data outage — retry on the DEX; do not paste LCD/RPC lists.
    • Limit that would cross the market (client guard on /trade and /limits) — change price; do not “take” through a Limit ticket unless the live UI says to use Market.
    • Confusing LUNC vs cLUNC (or USTC vs cUSTC) so wrap/swap/LP uses the wrong leg.

    Do not publish operator recovery, RPC lists, Coolify, queue ids, pair-admin pause playbooks, or contract migrate steps.

  10. Screenshots (optional but in-scope). Same-origin files only (public/guides/dex/ or equivalent). First-party DEX chrome, cropped, no seed phrases, no live balances presented as current, no third-party CEX UI. Alt text that remains true if images fail. No remote image CDN, no mermaid runtime. If screenshots would go stale faster than copy, ship the prose first.

  11. Claims / copy bans. Keep BANNED_CURRENT_COPY and FORBIDDEN_CLAIM_PATTERNS. No GameFi lore. “Buy CL8Y” is not a CTA. Do not dump unpublished marketing manuscripts. USTR/UST1: not required on this page (that exception is #9’s CMM section on / only). Do not add /ust1 or /mint tutorials.

  12. Guides index. /guides lists DEX beside Open the DEX (and First use / Bridge if #10/#11 have shipped). One-line each; do not duplicate the manuscript on the index. Suggested stub: “DEX — swaps, limits, fee tiers, wrap, add/remove liquidity, slippage, fees vs gas vs tax, common errors.”

  13. Home. Optional one-line link from / once #9’s Start Here exists; not required to block this PR. Do not redefine / in this issue.

  14. Sitemap / nginx. Loc count follows ROUTES (seven v0 + this path, plus /guides/first-use and /guides/bridge only if those issues already merged). nginx try_files unchanged. Unknown paths still 404. Do not change Dockerfile, Woodpecker shape, or DEX Sitemap: pointer.

  15. Do not publish ops internals, queue ids, host/SKU, extra contract strings beyond src/data/contracts.ts, or gas-limit tables from docs/frontend.md.

Relevant files

Path Why
src/pages/DexGuidePage.tsx (new) How-to manuscript with required h2 ids
src/content/dexGuide.ts (new, preferred) Strings + section ids so unit tests can forbid hype / unverified fee, tax, and tier figures without rendering React
src/pages/GuidesPage.tsx Index link to /guides/dex
src/App.tsx Register the route
src/seo.ts New DocsPath, title, description, campaign
src/lib/dexHref.ts + dexHref.test.ts Add guides-dex to CAMPAIGNS
src/lib/dexPathHref.ts (new) Closed-path DEX URLs (/trade, /pool, /wrap, /limits, /tiers) + unit tests
src/data/contracts.ts Reuse published strings only; do not invent
src/content/invariants.ts Unchanged bans; DEX copy must still fail closed
e2e/crawl.spec.ts New path: unique title/canonical; body sniff for required headings and ids. Prefer deriving the path table from ROUTES so #10/#11 cannot desync loc count.
src/verify-dist.test.ts Follows ROUTES; sitemap loc includes the new path only on this origin
docs/ARCHITECTURE.md §4 / §10 / §12 Allowlist row; campaign id; claims still apply to how-to copy
docs/INVARIANTS.md Campaign list; still no unverified fee/tax/tier figures; still no wallet UI
skills/docs-static-host/SKILL.md / docs-dex-cta New path + campaign + path helper
public/guides/dex/ Optional screenshots
code/cl8y-dex-terraclassic Read published routes, fee chrome, slippage, wrap, pool, user-visible errors only
code/cl8y-docs#9, #10, #11 Sibling manuscripts; do not merge
  1. Extract copy into src/content/dexGuide.ts (section titles + ids + body strings + cost-kind sentences with no numeric literals unless sourced). Unit-test: banned hype, no javascript:, no ticker execute ids, no unverified % / TVL / invented tax rates / invented tier thresholds.
  2. DexGuidePage: H1 DEX; ordered sections with the required ids; Swap CTA through dexHref; other CTAs through dexPathHref.
  3. Extend DocsPath / CAMPAIGNS / App / prerender. Sitemap is generated from seo.ts — do not hand-edit a second allowlist that can drift. Update e2e/crawl.spec.ts from ROUTES rather than a hardcoded seven-row table if that is still duplicated.
  4. GuidesPage: stub line as in constraint 12.
  5. Playwright: prerendered HTML (no JS) contains the required headings and id attributes; crawl MIME tests unchanged; 404 still 404.
  6. Do not change nginx, Dockerfile, or add WalletConnect.

Acceptance criteria

  • AC1. GET /guides/dex prerendered HTML (no JS) contains a DEX heading and the nine required sections with exact ids: swaps, limit-orders, fee-tiers, wrap, add-liquidity, remove-liquidity, slippage, costs, errors.
  • AC2. The same HTML names fee/tax kinds (DEX trading / protocol fee vs network gas vs tax imposed elsewhere) and points at the live DEX UI; it contains no invented percentages, USD, TVL, volume, ranking, bps, or CL8Y tier thresholds.
  • AC3. The same HTML states that a chain tax or network fee is not the DEX trading fee, using only kinds that are already published first-party. If no first-party tax is published, say network fees are paid to the chain and omit an invented tax row.
  • AC4. #fee-tiers points at /tiers on the DEX origin and does not print a schedule. #wrap distinguishes native vs CW20 wrap legs and states unwrap is not free. #limit-orders distinguishes Trade Limit vs Market vs /limits.
  • AC5. Recovery copy covers at least: missing native gas, slippage too tight, pair paused / restricted, wrap paused, wrong wrap leg, limit that would cross — without operator/RPC/host internals.
  • AC6. Swap href uses dexHref with from=uluna, to= the Terra Classic CL8Y CW20 in contracts.ts, utm_campaign=guides-dex. Path hrefs for /trade, /pool, /wrap, /limits, /tiers use the closed helper. rel safe if new tab. No visitor-query concat. No slippage / expertMode / gem query keys.
  • AC7. Unique title (DEX · Guides · CL8Y docs or equivalent); canonical https://docs.cl8y.com/guides/dex. Other v0 routes keep their titles (home may change only via #9; first-use only via #10; Bridge only via #11).
  • AC8. /guides links to /guides/dex. /guides/open-the-dex still exists and still is not rewritten into this manuscript. /guides/first-use and /guides/bridge are neither created nor rewritten by this PR.
  • AC9. Sitemap loc includes the new path on https://docs.cl8y.com only. Unknown paths 404. robots/sitemap MIME unchanged.
  • AC10. No wagmi / WalletConnect / seed-phrase UI. No “Buy CL8Y” CTA. No GameFi lore. No unpublished marketing dump. No gem discovery instructions.
  • AC11. Screenshots, if any, are same-origin, alt-texted, and do not show seeds or claimed-live balances. If omitted, AC1–AC10 still pass.
  • AC12. npm test, npm run typecheck, production npm run build with required VITE_*, npm run test:dist, Playwright 5 workers stay green.
  • AC13. ARCHITECTURE §4 lists /guides/dex. CAMPAIGNS includes guides-dex.

Given a reader opens the prerendered /guides/dex page When they read the how-to without executing JavaScript Then they can follow swaps, limit orders, fee-tier lookup, wrap/unwrap, add and remove liquidity, and slippage settings on the first-party DEX, distinguish DEX trading fees from network gas and taxes imposed elsewhere, jump to a named section via fragment id, and apply user-facing recovery for common errors — without invented statistics or a wallet UI on this host

Test plan (functional paths)

# Path Expect
T1 dist/guides/dex/index.html Unique title/canonical; DEX H1
T2 Same file, no JS All nine h2 ids present
T3 Same file Cost-kind copy present; no % fee/tax/tier table unless sourced constant
T4 Swap anchor dexHref default pair + utm_campaign=guides-dex
T5 Path anchors /trade, /pool, /wrap, /limits, /tiers on DEX origin; rel safe if new tab
T6 /guides HTML Link to /guides/dex
T7 /guides/open-the-dex Still CTA-only; not replaced
T8 GET /guides/swap (unlisted) 404
T9 Unit: dexGuide.ts Forbidden claim patterns fail if someone pastes TVL / “best DEX” / fee % / invented tax rate / tier threshold
T10 Unit: dexPathHref Rejects unknown paths and javascript: / tickers
T11 Playwright 5 workers New path in crawl table; previous routes still pass

Test plan (copy safety)

Not a DeFi attack suite. Keep host crawl/CTA tests from #3 green. Do not add abuse/hack tests.

# Vector Expect
C1 Unverified TVL/volume/fee % / tax rate / tier threshold on the new page Fail AC2 / unit grep
C2 GameFi / PROTOCASS / Karnyx / TigerHunt Absent
C3 Primary CTA “Buy CL8Y” or third-party venue Forbidden
C4 javascript: / data: / protocol-relative DEX href Never emitted
C5 Visitor query concatenated onto DEX hrefs Forbidden
C6 Docs href includes slippage / expertMode / showGems Forbidden
C7 Sitemap loc to a foreign host Forbidden
C8 Dump of unpublished marketing guides Forbidden
C9 WalletConnect / wagmi / seed screenshot Fail review
C10 Invented contract not in contracts.ts Fail review
C11 Teaching users to connect a wallet on docs.cl8y.com Forbidden (connect on DEX origin only)
C12 Attributing a chain tax to the DEX trading fee Fail AC3
C13 Operator recovery, RPC lists, host/SKU, pair-admin steps Out of scope; fail review
C14 Expanding #9’s /, #10’s first-use, or #11’s Bridge into this how-to Out of scope
C15 Gem / test-pair discovery instructions Forbidden

Verification criteria

  • npm test && npm run typecheck && production npm run build with required VITE_*.
  • npm run test:dist (unique titles/canonicals including the new path).
  • Playwright 5 workers: DEX body sniff for required headings and ids; crawl MIME tests unchanged.
  • Human: open prerendered /guides/dex and confirm a reader can answer “how do I swap / place a limit / wrap / LP / set slippage / what is a trading fee vs gas vs tax / what if it fails?” from the page alone, and that #slippage (etc.) jumps to the matching h2, without connecting a wallet on this host.
  • Existing scripts/check-origins.mjs still fail-closed without HTTPS origins.
  • No Coolify hostname/SKU work in this PR.

Out of scope

  • Redefining / (that is #9), implementing /guides/first-use (that is #10), or implementing /guides/bridge (that is #11).
  • Replacing /guides/open-the-dex or adding more than one new path.
  • Wallet connect, swap/LP/limit execution, wrap/mint UI on this host.
  • UST1 mint/redeem, Create Pair, Create Token, faucet /mint, Charts, Portfolio, Protocol stats.
  • Publishing unpublished marketing manuscripts.
  • Inventing DEX fee-tier tables, tax rates, gas-limit envelopes, CMM collateral ratios, or extra addresses.
  • Editing code/CL8Y-web, code/cl8y-dex-terraclassic, or code/cl8y-bridge-monorepo except as read-only sources.
  • nginx, Dockerfile, Woodpecker shape, or DEX Sitemap: pointer.
  • Choosing hypervisor image, SKU, or a new host.
  • Operator incident recovery.

First-pass model recommendation

Recommendation: grok-high

Rationale: This is a retail DEX how-to that must source published Swap / Trade / Limits / Pool / Wrap / Tiers chrome, distinguish protocol fees from network gas and any chain tax, and describe slippage plus user-visible errors without freezing rates or tier thresholds. Composer’s docs/test-only path does not apply: product claims have to be read from code/cl8y-dex-terraclassic / the live DEX UI, wallet confirmation stays a founder-required topic (even though this host only describes it), the change expands the closed allowlist (DocsPath, CAMPAIGNS, prerender, sitemap, ARCHITECTURE §4) plus a new path-href helper, and the expected files exceed a single-subsystem three-file edit (DexGuidePage, dexGuide copy module, dexPathHref, seo/campaigns, App, guides index, architecture/invariants, crawl tests). Uncertain published fee/tax/tier/error presentation fails the “known local edit” bar. Comparable control-plane calibration: a single RCA Markdown would be Composer; this is closer to a cross-module content-policy change than a test-helper tweak.

## Summary `https://docs.cl8y.com/guides` currently lists only the Open the DEX CTA stub. There is no crawlable first-party page that teaches how to use the CL8Y DEX: swaps, limit orders, fee tiers, wrapping/unwrapping, adding and removing liquidity, slippage settings, and common transaction errors — with trading fees, network fees, and any applicable taxes named as distinct kinds. Ship **one** prerendered practical DEX guide on a **new** allowlisted path so a reader who already knows they want to trade or provide liquidity can complete those jobs on the live first-party DEX, and so support can paste a stable section URL instead of rewriting the same answers in chat. Bundle (do not split into swap / limit / wrap / LP / fee / slippage / error tickets): 1. Swaps on `/` (AMM / hybrid route the live Swap card already runs). 2. Limit orders on `/trade` (Limit tab) and `/limits` (resting book / lifecycle) as the live dApp already presents them. 3. Fee tiers on `/tiers` (CL8Y holder discount schedule — pointer only; do not freeze a table). 4. Wrap / unwrap on `/wrap` (native LUNC / USTC vs CW20 wrap legs; unwrap is not free). 5. Add liquidity and remove liquidity on `/pool` (existing factory pools; creating a pair is not required to LP one that already exists). 6. Slippage settings (Swap Settings + Trade Market Advanced; store default lives on the DEX, not in a docs query string). 7. Cost kinds: DEX trading / protocol fee versus Terra Classic network gas versus any tax imposed by the chain — with a clear sentence that this page does not freeze percentages, USD, bps, or tier thresholds unless that exact figure already exists as a first-party constant in this repo. 8. Common user-facing transaction errors and what to do on the DEX origin (not operator recovery). Keep `/guides/open-the-dex` as the CTA-only child. Do not put this manuscript on `/` (Start Here, `code/cl8y-docs`#9), `/guides/first-use` (`code/cl8y-docs`#10), or `/guides/bridge` (`code/cl8y-docs`#11). v0 platform work (#3) already shipped crawl files, unique titles, and stub routes. Full DEX manuscripts were out of scope there. `#10` owns a newcomer’s **first** swap as one phase of wallet → gas → inbound → trade → outbound; it must not grow this dedicated DEX how-to. Parent / siblings (do not re-implement): - `code/cl8y-docs`#3 — v0 host + stubs; `/guides/open-the-dex` purpose remains “follow the first-party CTA. Not a trading tutorial.” - `code/cl8y-docs`#9 — Start Here on `/` (product map). DEX is one or two sentences there, not a how-to. Cite and link; do not expand that ticket. - `code/cl8y-docs`#10 — first-use walkthrough. That ticket must not add `/guides/dex`. This issue owns the dedicated DEX operations how-to. Do not merge manuscripts; do not rewrite #10’s first-swap path here. - `code/cl8y-docs`#11 — Bridge how-to. Different product origin (`https://bridge.cl8y.com`). Cite; do not merge inbound/outbound transfer steps into this page. - `docs/ARCHITECTURE.md` §4 / §10 / §12 — closed route allowlist; `dexHref` execute ids; no unverified stats; no unpublished marketing `content/guides/`. - `code/cl8y-dex-terraclassic` — source of currently published Swap / Trade / Limits / Pool / Wrap / Tiers chrome, fee-kind presentation, slippage Settings, and retail error copy (`docs/frontend.md`, `skills/AGENTS_FRONTEND_USER_ERRORS.md`). Read, do not vendor unpublished operator internals or copy the SPA into this host. - `code/CL8Y-web`#1 — CL8Y utility-token wording (fee-tier **pointer**, not a fabricated schedule). Different deployable. ## Current codebase Guides index has no DEX operations child: - `src/pages/GuidesPage.tsx` — lists only `/guides/open-the-dex`. Copy forbids dumping unpublished marketing manuscripts. - `src/pages/OpenDexPage.tsx` — DEX CTA stub; explicitly not a trading tutorial. - `src/seo.ts` — closed `DocsPath` union of seven v0 paths. No `/guides/dex`. - `src/lib/dexHref.ts` — `CAMPAIGNS` closed vocabulary; no `guides-dex`. Helper always builds Swap `/` with `from`/`to`. No path helper for `/trade`, `/pool`, `/wrap`, `/limits`, `/tiers`. - `src/App.tsx` — seven `Route` entries; unknown paths 404 via nginx `try_files … =404`. - `src/content/invariants.ts` — `BANNED_CURRENT_COPY` / `FORBIDDEN_CLAIM_PATTERNS` (no TVL / “best DEX” / CoinGecko / CMC / DeFiLlama; no “Buy CL8Y” CTA). - `e2e/crawl.spec.ts` — currently hardcodes the seven v0 paths (must follow `ROUTES` after this path is added; do not assume loc count 7/8/9 if #10 or #11 land first). - `src/verify-dist.test.ts` — follows `ROUTES`; sitemap loc count follows that module. - Architecture §4: no DEX how-to row. A complete DEX manuscript therefore **must add one allowlisted path** in the same PR (seo union, campaign id, App route, prerender, sitemap, crawl tests, ARCHITECTURE §4). Do not overload `/guides/open-the-dex`. Do not overload `/guides/first-use` (#10). Do not add `/guides/swap`, `/guides/liquidity`, `/guides/wrap`, or `/guides/fees` as extra routes in this issue — support deep-links are **in-page fragment ids** on the one manuscript. ### Duplicates / already implemented | Work | Action | | --- | --- | | #1 architecture, #2 review, #5 CI | Unrelated; do not reopen | | #3 v0 stubs | Prerequisite host; Open the DEX stays CTA-only | | #9 Start Here on `/` | Sibling map; different problem (what exists vs how to trade / LP) | | #10 first-use walkthrough | Sibling how-to; includes **one** first Swap as a phase of onboarding. Different primary reader job. That PR must not register `/guides/dex`. | | #11 Bridge how-to | Sibling how-to for a different origin. Do not merge. | | Unpublished marketing `content/guides/` | Forbidden to dump here (INVARIANTS 14) | | DEX SPA at `https://dex.cl8y.com` | Cite the live UI; do not copy Swap/Trade/Pool/Wrap screens into this host | | DEX integrator / indexer OpenAPI tickets | Different repo; this page is retail how-to, not an API pack | | DEX `docs/frontend.md` / skills | Read-only source of live chrome names. Do not paste operator gas envelopes, gem lists, or unpublished internals. | If `/guides/dex` already exists as a complete prerendered how-to (swaps, limits, tiers, wrap, add/remove LP, slippage, cost kinds, common errors, stable fragment ids) and AC1–AC13 pass, close as implemented — do not duplicate. ## Why the new implementation is needed The public docs origin is the URL operators hand people who ask how to swap, place a limit, wrap, or LP. Today: - `/guides` never names DEX operations as a how-to (only a CTA stub). - #9 maps the product in one or two sentences; it does not teach a swap or LP. - #10 teaches a first use and must not grow a second guides child in that PR. - Fee, tax, slippage, wrap, and error questions get answered in chat with no crawlable first-party page, which invites invented percentages and conflating trading fees with gas or chain tax. This is documentation copy + one new prerendered route + stable heading `id`s + optional same-origin screenshots. No wallet SDK, no swap/LP execution on this host, no Coolify SKU pick. ## Constraints / guardrails 1. **Route.** Add exactly one path: `/guides/dex`. Title seed `DEX · Guides · CL8Y docs` (wordsmith OK; must stay unique vs existing routes and vs #10/#11 titles if those pages exist). Canonical `https://docs.cl8y.com/guides/dex` (no trailing slash). Amend ARCHITECTURE §4 in the same PR. Do not add `/guides/swap`, `/guides/liquidity`, `/guides/wrap`, `/guides/fees`, `/guides/wallet`, or `/guides/withdraw`. 2. **Support deep-links.** Every required section is an `h2` with a **stable** `id` that appears in prerendered HTML (no JS). Required ids (exact): | `id` | Section | | --- | --- | | `swaps` | Swaps | | `limit-orders` | Limit orders | | `fee-tiers` | Fee tiers | | `wrap` | Wrap / unwrap | | `add-liquidity` | Add liquidity | | `remove-liquidity` | Remove liquidity | | `slippage` | Slippage | | `costs` | Trading fees vs network fees vs taxes | | `errors` | Common transaction errors | Support URLs are `https://docs.cl8y.com/guides/dex#swaps` (and the other ids). Do not mint extra sitemap locs for fragments. Fragment ids must be in the static HTML `id` attribute (not only client-side). 3. **Reader.** Someone who already knows they want to use the first-party DEX (not a zero-wallet newcomer — that is #10). Numbered steps. Short sentences. One scrollable manuscript. Not a whitepaper. Not Start Here (#9). Not a Bridge transfer (#11). 4. **This host stays static.** INVARIANTS 19: no wagmi, WalletConnect, three.js, LCD keys, or DEX screens **running here**. Describe using whatever wallets the live DEX already documents. Do not mint a wallet directory. Do not ask the reader to connect a wallet on `docs.cl8y.com`. Confirmations happen on `https://dex.cl8y.com`. 5. **Surfaces to teach (required; names must match the live dApp).** Source: `code/cl8y-dex-terraclassic` `docs/frontend.md` route table and the production chrome — if a surface is unpublished or gated off in production, omit it (“see DEX”) rather than inventing UI. - **Swaps** — `/` (Swap). Pick pay/receive, review quote, confirm in the wallet **on the DEX origin**. This host does not broadcast. Point at `dexHref` with execute ids (`uluna` + checksummed Terra Classic CL8Y CW20 already in `src/data/contracts.ts`) and campaign `guides-dex`. - **Limit orders** — `/trade` Limit tab (place against the book) and `/limits` (wallet’s resting orders / lifecycle). State that `/trade` Market is a different ticket (solver quote + slippage), not a resting limit. Do not document maker-bot insert hints, FIFO reprice internals, or unpublished book APIs. - **Fee tiers** — `/tiers`. CL8Y is the utility token for reduced DEX trading fees (`code/CL8Y-web`#1). Point at the live Tiers UI for the current schedule. Do **not** invent tier names, CL8Y thresholds, or discount percentages. - **Wrap / unwrap** — `/wrap`. Native LUNC (`uluna`) / native USTC vs CW20 wrap legs (`cLUNC` / `cUSTC`). Copy must say wrap and unwrap are **not** the same as a Swap, and unwrap is **not** free. Do not treat AMM Swap as mint/redeem. Do not add a `/ust1` mint/redeem tutorial (out of scope). - **Add liquidity** — `/pool` provide on an existing factory pair. Creating a pair is not required to LP an existing pool. Do not teach Create Pair / Create Token admin flows. - **Remove liquidity** — `/pool` withdraw / Manage. Mention LP-token burn/return in user language; do not paste contract message schemas. - **Slippage** — Swap Settings and Trade Market Advanced share the DEX store default (live UI: 5% unless the user changed it). Expert mode is a DEX Settings friction, not a docs deep-link. **Forbidden query keys** on any docs→DEX href: `slippage`, `expertMode`, `recipient`, `pool_only`, `hybrid_optimize`, `showGems`. - **Costs** — see constraint 7. - **Errors** — see constraint 9. 6. **DEX hrefs.** - Swap CTA: existing `dexHref({ from, to, campaign: "guides-dex" })`. Execute ids only. Never tickers as `from`/`to`. - Other surfaces: a tested helper (e.g. `dexPathHref`) using `new URL(path, getDexOrigin())` with a **closed** path vocabulary: `/trade`, `/pool`, `/wrap`, `/limits`, `/tiers` only. Optional `utm_*` via `URLSearchParams` (campaign `guides-dex`). No string concat, no `window.location`, no visitor query. `rel="noopener noreferrer"` if `target="_blank"`. - Do not claim the DEX keeps `utm_*` after Swap canonicalize (ARCHITECTURE §10). 7. **Costs: trading vs network vs tax.** Required distinction on `#costs`: - **DEX trading / protocol fee** — whatever swap, limit-fill, wrap, or LP fee the live DEX UI already shows (including CL8Y fee-tier discounts on `/tiers`). Point at that chrome. Do not freeze a percentage, bps, or USD. - **Network fees** — Terra Classic gas paid in native LUNC (`uluna`) to the chain, not “the DEX fee.” Distinct from CW20 wrap legs. - **Taxes imposed elsewhere** — only if a published first-party DEX or chain surface already names a tax (for example a Terra Classic on-chain tax on some denoms). Name the **kind**. Do not invent a rate. Do not attribute a chain tax to the CL8Y trading fee or to a fee-tier discount. Pattern: “the live DEX UI shows the current trading fee and gas; this page does not freeze a number.” No CoinGecko/CMC/DeFiLlama. No fabricated tier tables. 8. **Production discovery.** Do not instruct readers to enable gems / test pairs / `?showGems=1`. Production browse omits gems (`code/cl8y-dex-terraclassic` #562). Do not share or document gem pair addresses. 9. **Errors and recovery (user-facing only).** Cover at least, using the **live DEX labels** (source `AGENTS_FRONTEND_USER_ERRORS.md` / pause / blacklist / wrap-pause banners — do not invent friendlier names): - Missing native LUNC gas (`uluna`) so the wallet cannot broadcast. - Slippage / max-spread too tight (quote vs Settings; 5% confirm-again / Expert gate as the DEX already shows — describe, do not bypass). - Pair paused / market frozen / trading restricted (blacklist) — wait or pick another pair; do not tell users to bypass. - Wrap temporarily paused. - Insufficient balance / quote unavailable / market-data outage — retry on the DEX; do not paste LCD/RPC lists. - Limit that would cross the market (client guard on `/trade` and `/limits`) — change price; do not “take” through a Limit ticket unless the live UI says to use Market. - Confusing LUNC vs `cLUNC` (or USTC vs `cUSTC`) so wrap/swap/LP uses the wrong leg. Do **not** publish operator recovery, RPC lists, Coolify, queue ids, pair-admin pause playbooks, or contract migrate steps. 10. **Screenshots (optional but in-scope).** Same-origin files only (`public/guides/dex/` or equivalent). First-party DEX chrome, cropped, no seed phrases, no live balances presented as current, no third-party CEX UI. Alt text that remains true if images fail. No remote image CDN, no mermaid runtime. If screenshots would go stale faster than copy, ship the prose first. 11. **Claims / copy bans.** Keep `BANNED_CURRENT_COPY` and `FORBIDDEN_CLAIM_PATTERNS`. No GameFi lore. “Buy CL8Y” is not a CTA. Do not dump unpublished marketing manuscripts. USTR/UST1: not required on this page (that exception is #9’s CMM section on `/` only). Do not add `/ust1` or `/mint` tutorials. 12. **Guides index.** `/guides` lists DEX beside Open the DEX (and First use / Bridge if #10/#11 have shipped). One-line each; do not duplicate the manuscript on the index. Suggested stub: “DEX — swaps, limits, fee tiers, wrap, add/remove liquidity, slippage, fees vs gas vs tax, common errors.” 13. **Home.** Optional one-line link from `/` once #9’s Start Here exists; not required to block this PR. Do not redefine `/` in this issue. 14. **Sitemap / nginx.** Loc count follows `ROUTES` (seven v0 + this path, plus `/guides/first-use` and `/guides/bridge` only if those issues already merged). nginx `try_files` unchanged. Unknown paths still 404. Do not change Dockerfile, Woodpecker shape, or DEX `Sitemap:` pointer. 15. **Do not** publish ops internals, queue ids, host/SKU, extra contract strings beyond `src/data/contracts.ts`, or gas-limit tables from `docs/frontend.md`. ## Relevant files | Path | Why | | --- | --- | | `src/pages/DexGuidePage.tsx` (new) | How-to manuscript with required `h2` ids | | `src/content/dexGuide.ts` (new, preferred) | Strings + section ids so unit tests can forbid hype / unverified fee, tax, and tier figures without rendering React | | `src/pages/GuidesPage.tsx` | Index link to `/guides/dex` | | `src/App.tsx` | Register the route | | `src/seo.ts` | New `DocsPath`, title, description, campaign | | `src/lib/dexHref.ts` + `dexHref.test.ts` | Add `guides-dex` to `CAMPAIGNS` | | `src/lib/dexPathHref.ts` (new) | Closed-path DEX URLs (`/trade`, `/pool`, `/wrap`, `/limits`, `/tiers`) + unit tests | | `src/data/contracts.ts` | Reuse published strings only; do not invent | | `src/content/invariants.ts` | Unchanged bans; DEX copy must still fail closed | | `e2e/crawl.spec.ts` | New path: unique title/canonical; body sniff for required headings **and** `id`s. Prefer deriving the path table from `ROUTES` so #10/#11 cannot desync loc count. | | `src/verify-dist.test.ts` | Follows `ROUTES`; sitemap loc includes the new path only on this origin | | `docs/ARCHITECTURE.md` §4 / §10 / §12 | Allowlist row; campaign id; claims still apply to how-to copy | | `docs/INVARIANTS.md` | Campaign list; still no unverified fee/tax/tier figures; still no wallet UI | | `skills/docs-static-host/SKILL.md` / `docs-dex-cta` | New path + campaign + path helper | | `public/guides/dex/` | Optional screenshots | | `code/cl8y-dex-terraclassic` | Read published routes, fee chrome, slippage, wrap, pool, user-visible errors only | | `code/cl8y-docs`#9, #10, #11 | Sibling manuscripts; do not merge | ## Recommended direction 1. Extract copy into `src/content/dexGuide.ts` (section titles + `id`s + body strings + cost-kind sentences with no numeric literals unless sourced). Unit-test: banned hype, no `javascript:`, no ticker execute ids, no unverified `%` / TVL / invented tax rates / invented tier thresholds. 2. `DexGuidePage`: H1 DEX; ordered sections with the required `id`s; Swap CTA through `dexHref`; other CTAs through `dexPathHref`. 3. Extend `DocsPath` / `CAMPAIGNS` / `App` / prerender. Sitemap is generated from `seo.ts` — do not hand-edit a second allowlist that can drift. Update `e2e/crawl.spec.ts` from `ROUTES` rather than a hardcoded seven-row table if that is still duplicated. 4. `GuidesPage`: stub line as in constraint 12. 5. Playwright: prerendered HTML (no JS) contains the required headings and `id` attributes; crawl MIME tests unchanged; 404 still 404. 6. Do not change nginx, Dockerfile, or add WalletConnect. ## Acceptance criteria - AC1. `GET /guides/dex` prerendered HTML (no JS) contains a DEX heading and the nine required sections with **exact** `id`s: `swaps`, `limit-orders`, `fee-tiers`, `wrap`, `add-liquidity`, `remove-liquidity`, `slippage`, `costs`, `errors`. - AC2. The same HTML names fee/tax **kinds** (DEX trading / protocol fee vs network gas vs tax imposed elsewhere) and points at the live DEX UI; it contains **no** invented percentages, USD, TVL, volume, ranking, bps, or CL8Y tier thresholds. - AC3. The same HTML states that a chain tax or network fee is not the DEX trading fee, using only kinds that are already published first-party. If no first-party tax is published, say network fees are paid to the chain and omit an invented tax row. - AC4. `#fee-tiers` points at `/tiers` on the DEX origin and does not print a schedule. `#wrap` distinguishes native vs CW20 wrap legs and states unwrap is not free. `#limit-orders` distinguishes Trade Limit vs Market vs `/limits`. - AC5. Recovery copy covers at least: missing native gas, slippage too tight, pair paused / restricted, wrap paused, wrong wrap leg, limit that would cross — without operator/RPC/host internals. - AC6. Swap href uses `dexHref` with `from=uluna`, `to=` the Terra Classic CL8Y CW20 in `contracts.ts`, `utm_campaign=guides-dex`. Path hrefs for `/trade`, `/pool`, `/wrap`, `/limits`, `/tiers` use the closed helper. `rel` safe if new tab. No visitor-query concat. No `slippage` / `expertMode` / gem query keys. - AC7. Unique title (`DEX · Guides · CL8Y docs` or equivalent); canonical `https://docs.cl8y.com/guides/dex`. Other v0 routes keep their titles (home may change only via #9; first-use only via #10; Bridge only via #11). - AC8. `/guides` links to `/guides/dex`. `/guides/open-the-dex` still exists and still is not rewritten into this manuscript. `/guides/first-use` and `/guides/bridge` are neither created nor rewritten by this PR. - AC9. Sitemap loc includes the new path on `https://docs.cl8y.com` only. Unknown paths 404. robots/sitemap MIME unchanged. - AC10. No wagmi / WalletConnect / seed-phrase UI. No “Buy CL8Y” CTA. No GameFi lore. No unpublished marketing dump. No gem discovery instructions. - AC11. Screenshots, if any, are same-origin, alt-texted, and do not show seeds or claimed-live balances. If omitted, AC1–AC10 still pass. - AC12. `npm test`, `npm run typecheck`, production `npm run build` with required `VITE_*`, `npm run test:dist`, Playwright 5 workers stay green. - AC13. ARCHITECTURE §4 lists `/guides/dex`. `CAMPAIGNS` includes `guides-dex`. Given a reader opens the prerendered `/guides/dex` page When they read the how-to without executing JavaScript Then they can follow swaps, limit orders, fee-tier lookup, wrap/unwrap, add and remove liquidity, and slippage settings on the first-party DEX, distinguish DEX trading fees from network gas and taxes imposed elsewhere, jump to a named section via fragment id, and apply user-facing recovery for common errors — without invented statistics or a wallet UI on this host ## Test plan (functional paths) | # | Path | Expect | | --- | --- | --- | | T1 | `dist/guides/dex/index.html` | Unique title/canonical; DEX H1 | | T2 | Same file, no JS | All nine `h2` ids present | | T3 | Same file | Cost-kind copy present; no `%` fee/tax/tier table unless sourced constant | | T4 | Swap anchor | `dexHref` default pair + `utm_campaign=guides-dex` | | T5 | Path anchors | `/trade`, `/pool`, `/wrap`, `/limits`, `/tiers` on DEX origin; `rel` safe if new tab | | T6 | `/guides` HTML | Link to `/guides/dex` | | T7 | `/guides/open-the-dex` | Still CTA-only; not replaced | | T8 | `GET /guides/swap` (unlisted) | 404 | | T9 | Unit: `dexGuide.ts` | Forbidden claim patterns fail if someone pastes TVL / “best DEX” / fee `%` / invented tax rate / tier threshold | | T10 | Unit: `dexPathHref` | Rejects unknown paths and `javascript:` / tickers | | T11 | Playwright 5 workers | New path in crawl table; previous routes still pass | ## Test plan (copy safety) Not a DeFi attack suite. Keep host crawl/CTA tests from #3 green. Do not add abuse/hack tests. | # | Vector | Expect | | --- | --- | --- | | C1 | Unverified TVL/volume/fee % / tax rate / tier threshold on the new page | Fail AC2 / unit grep | | C2 | GameFi / PROTOCASS / Karnyx / TigerHunt | Absent | | C3 | Primary CTA “Buy CL8Y” or third-party venue | Forbidden | | C4 | `javascript:` / `data:` / protocol-relative DEX href | Never emitted | | C5 | Visitor query concatenated onto DEX hrefs | Forbidden | | C6 | Docs href includes `slippage` / `expertMode` / `showGems` | Forbidden | | C7 | Sitemap loc to a foreign host | Forbidden | | C8 | Dump of unpublished marketing guides | Forbidden | | C9 | WalletConnect / wagmi / seed screenshot | Fail review | | C10 | Invented contract not in `contracts.ts` | Fail review | | C11 | Teaching users to connect a wallet on docs.cl8y.com | Forbidden (connect on DEX origin only) | | C12 | Attributing a chain tax to the DEX trading fee | Fail AC3 | | C13 | Operator recovery, RPC lists, host/SKU, pair-admin steps | Out of scope; fail review | | C14 | Expanding #9’s `/`, #10’s first-use, or #11’s Bridge into this how-to | Out of scope | | C15 | Gem / test-pair discovery instructions | Forbidden | ## Verification criteria - `npm test` && `npm run typecheck` && production `npm run build` with required `VITE_*`. - `npm run test:dist` (unique titles/canonicals including the new path). - Playwright 5 workers: DEX body sniff for required headings and `id`s; crawl MIME tests unchanged. - Human: open prerendered `/guides/dex` and confirm a reader can answer “how do I swap / place a limit / wrap / LP / set slippage / what is a trading fee vs gas vs tax / what if it fails?” from the page alone, and that `#slippage` (etc.) jumps to the matching `h2`, without connecting a wallet on this host. - Existing `scripts/check-origins.mjs` still fail-closed without HTTPS origins. - No Coolify hostname/SKU work in this PR. ## Out of scope - Redefining `/` (that is #9), implementing `/guides/first-use` (that is #10), or implementing `/guides/bridge` (that is #11). - Replacing `/guides/open-the-dex` or adding more than one new path. - Wallet connect, swap/LP/limit execution, wrap/mint UI **on this host**. - UST1 mint/redeem, Create Pair, Create Token, faucet `/mint`, Charts, Portfolio, Protocol stats. - Publishing unpublished marketing manuscripts. - Inventing DEX fee-tier tables, tax rates, gas-limit envelopes, CMM collateral ratios, or extra addresses. - Editing `code/CL8Y-web`, `code/cl8y-dex-terraclassic`, or `code/cl8y-bridge-monorepo` except as read-only sources. - nginx, Dockerfile, Woodpecker shape, or DEX `Sitemap:` pointer. - Choosing hypervisor image, SKU, or a new host. - Operator incident recovery. ## First-pass model recommendation Recommendation: grok-high Rationale: This is a retail DEX how-to that must source published Swap / Trade / Limits / Pool / Wrap / Tiers chrome, distinguish protocol fees from network gas and any chain tax, and describe slippage plus user-visible errors without freezing rates or tier thresholds. Composer’s docs/test-only path does not apply: product claims have to be read from `code/cl8y-dex-terraclassic` / the live DEX UI, wallet confirmation stays a founder-required topic (even though this host only describes it), the change expands the closed allowlist (`DocsPath`, `CAMPAIGNS`, prerender, sitemap, ARCHITECTURE §4) plus a new path-href helper, and the expected files exceed a single-subsystem three-file edit (`DexGuidePage`, `dexGuide` copy module, `dexPathHref`, seo/campaigns, App, guides index, architecture/invariants, crawl tests). Uncertain published fee/tax/tier/error presentation fails the “known local edit” bar. Comparable control-plane calibration: a single RCA Markdown would be Composer; this is closer to a cross-module content-policy change than a test-helper tweak.
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-docs#12
No description provided.