No order type selector on /trade — only limit order form present, no market order type or disabled-type rationale (W7:C1) #152
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:implement
agent:implement
agent:open_issues
agent:ready
agent:research
agent:security_audit
agent:verify
architecture
backend
blocker:hybrid
blocker:launch
blocker:limit-orders
blocker:v2
block:log_only
block:security
bug
ci
contracts
correctness
deploy
dev
devops
docs
documentation
duplicate
e2e
enhancement
epic
feature
frontend
functional-completion
gas
good first issue
governance
help wanted
high-risk
hooks
hybrid
indexer
infra
infrastructure
integrators
invalid
launch-blocker
limit-orders
localnet
localterra
low priority
missing-implementation
needs-design
ops
performance
priority
high
priority
medium
product
qa
QA
question
ready
ready
research
scripts
security
security-hardening
smartcontracts
tech-debt
testing
ux
UX
v2
verification
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
code/cl8y-dex-terraclassic#152
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Issue Summary
The
/tradepage offers no order type selector. Only a "Place Limit" form and a "Cancel Limit" form are present. There is no market order type, no type switcher, no disabled-type indicator, and no rationale explaining why market orders are unavailable.Reproduction Steps
/trade(or/trade/<pair_address>)terra146...c9mjav)Expected Behavior
An order type selector (tab or dropdown) allowing the trader to choose between at least Market and Limit order types. If market orders are intentionally unsupported or not yet implemented, the UI should show the option as disabled with a visible reason (tooltip or label).
Actual Behavior
The panel renders a "Place Limit" section and a "Cancel Limit" section only. No order type selector control exists. A CEX-migrant trader has no way to carry out market orders, simply because there is no ui entry that supports
Environment Details
localterra(local Docker)VITE_NETWORK=local npm run devatlocalhost:3000make indexer-dev)make deploy-localWallet / Device Details
terra1...sl7cvvterra146...c9mjav)Screenshots
Severity / Impact
LAUNCH-BLOCKER. Market orders cannot be tested at all — the UI provides no surface for them. This blocks W7-C1 verification entirely: there is no order type selector to navigate, toggle, hover, or keyboard-through. It also cascades into W7-C3 (price input tick enforcement is only testable on limit), W7-C5 (TIF options, which differ by order type), and W7-C8 (submit CTA label is hardcoded to "Place Limit" rather than reflecting the active order type and side). A hybrid DEX that presents only limit order entry with no market order path — and no explanation that market orders are unsupported or planned — gives CEX-migrant traders no fast-execution route and no clarity on what the product supports. This must be resolved or explicitly scoped out (with in-UI messaging) before launch.
cc : @PlasticDigits LAUNCH BLOCKER !
~"blocker:limit-orders"
changed title from
No order type selector on `/trade` — only limit order form present, no market order type or disabled-type rationaletoNo order type selector on `/trade` — only limit order form present, no market order type or disabled-type rationale (W7:C1)changed the description
mentioned in issue #116
mentioned in commit
965baf9cd9mentioned in commit
3ede6ca8deUpdate (GitLab #152) — shipped on
main@3ede6caImplemented Limit / Market tabs on
/trade, market execution with global slippage + optional hybrid (indexerPOST /route/solvewhen available, else pairhybrid_simulation/ pool fallback), expected receive + min after slippage, and two-tx LUNC preflight forincrease_allowance+ swap.Limit path now stacks three client guards before place: book-head crossing (bid must stay below best ask; ask above best bid —
limit-book?limit=1), tape-reference direction (#154), plus existing escrow + native gas gates.Verification checklist (for QA / @brouie)
/trade/:pairshows Limit and Market tabs; keyboard focus order still sane with the Bid/Ask radiogroup (#153).estimated_amount_out; with indexer down, confirm direct pairswapstill broadcasts.npm run test:unitinfrontend-dapp(Vitest) passes locally.Issue left open pending your sign-off.
cc @brouie — please verify on LocalTerra + indexer when you have a moment.
mentioned in issue #201
QA verification sign-off (@brouie / agent)
Verified on LocalTerra + host Postgres + indexer (
:3001) + frontend (:3000) + 30/30 bot swarm.Checklist
/trade/:pairLimit / Market tabs — EMBER/CORAL pair shows both tabs (data-testid=trade-order-tab-limit|market); Bid/Ask radiogroup uses WAI-ARIArole=radiogroupwith arrow-key side switching (trade-ticket-side-*).10CORAL → quote card shows Expected receive + Min. after slippage; hybrid ON shows Indexer hybrid disclosure; hybrid OFF shows Direct pair · hybrid_simulation (pool-only leg) disclosure.Market swap submittedtoast) with hybrid routing + indexer quote path on connected local wallet.1.06(≥ best ask1.056645) blocks submit with best-ask crossing warning; unit tests inlimitOrderNonCrossing.test.ts.TradePage.test.tsxasserts pause banner copy mentions swaps and disables limit submit; market panel gates on!isPausedinTradeMarketOrderPanel.npm run test:unit— 599/599 pass (includingTradePage#152 tab test + router hybrid message-shape tests).Notes
postRouteSolve→simulateHybridSwap→swap()when indexer ops absent.main(Limit/Market tabs, market panel, crossing guards) — no additional code changes required for #152.Closing as verified.
mentioned in merge request !767
mentioned in issue #321
mentioned in issue #297
mentioned in issue #546
marked as related to #546
mentioned in issue #597
mentioned in issue #693