W9-c2 Cancel resting limit order requires manual Order ID entry — no row-level cancel on open orders table #162

Closed
opened 2026-05-12 14:56:48 +00:00 by totdking · 12 comments
totdking commented 2026-05-12 14:56:48 +00:00 (Migrated from gitlab.com)
No description provided.
totdking commented 2026-05-12 14:58:22 +00:00 (Migrated from gitlab.com)

Issue Summary

The only way to cancel a resting limit order is to scroll to the "Manage — Cancel Resting Limit" form at the bottom of the page and manually type in the Order ID. The open orders table (BIDS / ASKS) has no cancel button on rows, no cancel-all control, and does not expose Order IDs inline. The trader must locate the Order ID from the MY LIMITS (INDEXER) section separately before they can cancel.


Reproduction Steps

  1. Start the app (VITE_NETWORK=local npm run dev) with LocalTerra running
  2. Connect Station wallet and navigate to the Limits / Trade tab
  3. Place one or more resting limit orders
  4. Observe the open orders table (BIDS / ASKS panel) — no cancel affordance on rows
  5. Attempt to cancel an order — the only path is to scroll to "Manage — Cancel Resting Limit," look up the Order ID from MY LIMITS (INDEXER), type it into the Order ID field, then press CANCEL

Expected Behavior

A cancel button or action (×, trash icon, context menu) should be accessible directly from each row in the open orders table. CEX-standard UX: click cancel on the row → optional confirm → order removed.


Actual Behavior

No per-row cancel affordance exists. Cancel requires:

  1. Knowing or separately locating the Order ID (not shown in the table)
  2. Scrolling to a separate form section
  3. Manually entering the Order ID
  4. Pressing CANCEL

There is also no cancel-all option.


Screenshot

image.png{width="252" height="600"}


Environment Details

Field Value
OS macOS (Apple M1 Pro, 14-inch)
Browser Google Chrome (desktop)
Viewport ~1440px desktop
Network localterra (local Docker)
Frontend VITE_NETWORK=local npm run dev
Indexer Running (make indexer-dev)
Contracts Deployed via make deploy-local

Wallet / Device Details

  • Wallet: Keplr browser extension
  • Wallet state: Connected — localterra

Severity / Impact

P2 Polish. Cancel works at the contract level — no funds are at risk. However the UX is significantly below the CEX expectation baseline: a trader migrating from a centralized exchange will not intuitively find the cancel path, and the manual Order ID lookup adds friction that could delay cancellation during fast market moves. Found under W9-C2 (Order row actions — Interactivity and Trader use dimensions).

cc: @PlasticDigits

### Issue Summary The only way to cancel a resting limit order is to scroll to the "Manage — Cancel Resting Limit" form at the bottom of the page and manually type in the Order ID. The open orders table (BIDS / ASKS) has no cancel button on rows, no cancel-all control, and does not expose Order IDs inline. The trader must locate the Order ID from the MY LIMITS (INDEXER) section separately before they can cancel. --- ### Reproduction Steps 1. Start the app (`VITE_NETWORK=local npm run dev`) with LocalTerra running 2. Connect Station wallet and navigate to the Limits / Trade tab 3. Place one or more resting limit orders 4. Observe the open orders table (BIDS / ASKS panel) — no cancel affordance on rows 5. Attempt to cancel an order — the only path is to scroll to "Manage — Cancel Resting Limit," look up the Order ID from MY LIMITS (INDEXER), type it into the Order ID field, then press CANCEL --- ### Expected Behavior A cancel button or action (×, trash icon, context menu) should be accessible directly from each row in the open orders table. CEX-standard UX: click cancel on the row → optional confirm → order removed. --- ### Actual Behavior No per-row cancel affordance exists. Cancel requires: 1. Knowing or separately locating the Order ID (not shown in the table) 2. Scrolling to a separate form section 3. Manually entering the Order ID 4. Pressing CANCEL There is also no cancel-all option. --- ## Screenshot ![image.png](/uploads/57e5d233814e5c229a50132d8868108f/image.png){width="252" height="600"} --- ### Environment Details | Field | Value | |-------|-------| | OS | macOS (Apple M1 Pro, 14-inch) | | Browser | Google Chrome (desktop) | | Viewport | \~1440px desktop | | Network | `localterra` (local Docker) | | Frontend | `VITE_NETWORK=local npm run dev` | | Indexer | Running (`make indexer-dev`) | | Contracts | Deployed via `make deploy-local` | --- ### Wallet / Device Details - **Wallet:** Keplr browser extension - **Wallet state:** Connected — localterra --- ### Severity / Impact **P2 Polish.** Cancel works at the contract level — no funds are at risk. However the UX is significantly below the CEX expectation baseline: a trader migrating from a centralized exchange will not intuitively find the cancel path, and the manual Order ID lookup adds friction that could delay cancellation during fast market moves. Found under **W9-C2** (Order row actions — Interactivity and Trader use dimensions). cc: @PlasticDigits
totdking commented 2026-05-12 18:06:15 +00:00 (Migrated from gitlab.com)

mentioned in issue #116

mentioned in issue #116
PlasticDigits commented 2026-05-13 04:39:36 +00:00 (Migrated from gitlab.com)

mentioned in commit 75e44f13d2

mentioned in commit 75e44f13d2a8afd1969e98b0e12f0bdc45c75f26
PlasticDigits commented 2026-05-13 06:37:29 +00:00 (Migrated from gitlab.com)

mentioned in commit 4be399561d

mentioned in commit 4be399561d68ab59c613a22bf00deeefe16d479c
PlasticDigits commented 2026-05-13 06:38:03 +00:00 (Migrated from gitlab.com)

Update (GitLab #162 — row cancel / edit)

Implemented CEX-style row actions on /limits by reusing the same OrderBookPanel + useLimitOrderCancelMutation wiring as /trade (commit 4be3995 on main).

What changed

  • Limit orders page: Replaced the static Bids/Asks list with the full order book panel (depth columns, Edit / × on wallet-owned rows, Cancel all mine).
  • Shared cancel hook: Invalidates limitBookPagePreview and wallet-indexer-history on success so standalone + claim flows stay consistent.
  • Docs: New docs/frontend.md anchor #limits-page-order-book-row-actions; skill skills/AGENTS_FRONTEND_ORDER_BOOK_ROW_ACTIONS.md cross-linked.
  • Manual cancel form: Kept; added helper copy pointing traders to row actions first.

Verification checklist

  • VITE_NETWORK=local npm run dev → open /limits, select pair, connect wallet.
  • Place a resting limit; confirm your row shows #order_id and Edit / × when owner matches wallet.
  • × → confirm dialog → cancel tx broadcasts; book + My limits refresh after indexer catches up.
  • Edit → limit form below prefills side, price, remaining size.
  • Cancel all mine → sequential cancels for active indexed placements (same semantics as trade page).
  • Paused pair (L6): row actions + cancel form disabled.
  • Cancel limit form still works with typed Order ID.

Please verify when you can.

/cc @totdking

## Update (GitLab #162 — row cancel / edit) Implemented **CEX-style row actions on `/limits`** by reusing the same `OrderBookPanel` + `useLimitOrderCancelMutation` wiring as `/trade` (commit `4be3995` on `main`). ### What changed - **Limit orders page:** Replaced the static Bids/Asks list with the full order book panel (depth columns, **Edit** / **×** on wallet-owned rows, **Cancel all mine**). - **Shared cancel hook:** Invalidates `limitBookPagePreview` and `wallet-indexer-history` on success so standalone + claim flows stay consistent. - **Docs:** New `docs/frontend.md` anchor `#limits-page-order-book-row-actions`; skill `skills/AGENTS_FRONTEND_ORDER_BOOK_ROW_ACTIONS.md` cross-linked. - **Manual cancel form:** Kept; added helper copy pointing traders to row actions first. ### Verification checklist - [ ] `VITE_NETWORK=local npm run dev` → open **/limits**, select pair, connect wallet. - [ ] Place a resting limit; confirm your row shows **`#order_id`** and **Edit** / **×** when `owner` matches wallet. - [ ] **×** → confirm dialog → cancel tx broadcasts; book + **My limits** refresh after indexer catches up. - [ ] **Edit** → limit form below prefills side, price, remaining size. - [ ] **Cancel all mine** → sequential cancels for active indexed placements (same semantics as trade page). - [ ] Paused pair (L6): row actions + cancel form disabled. - [ ] **Cancel limit** form still works with typed Order ID. Please verify when you can. /cc @totdking
PlasticDigits commented 2026-05-13 06:38:33 +00:00 (Migrated from gitlab.com)

mentioned in commit 39b73360c3

mentioned in commit 39b73360c35c67dde40bf9b10a6b5434a8d94ed2
PlasticDigits commented 2026-05-27 05:37:33 +00:00 (Migrated from gitlab.com)

Verification complete — closing GitLab #162

Verified on local stack (LocalTerra healthy, Postgres :5432, indexer :3001, frontend :3000, bot swarm active).

Checklist

  • /limits — EMBER/CORAL pair, wallet connected; order book shows #order_id on every row.
  • Row actions — wallet-owned rows show Edit / ×; Cancel all mine enabled when active placements exist.
  • Edit — clicked Edit on order #21 → limit ticket prefilled Ask, price 1.004035…, remaining size 183.904204 EMBER.
  • Manual cancel form — entered order id 7, Cancel limit → shared mutation fired (row #7 actions disabled while pending; same hook as book).
  • Unit tests — OrderBookPanel.test.tsx (4/4) including GitLab #162 row actions + Edit prefill.
  • Paused pair (L6) — no paused pairs on this LocalTerra deploy; isPairPaused disables row Edit/×, Cancel all mine, and cancel form (same wiring as /trade; covered by TradePage.test.tsx pause case).

Fix in this pass

  • Copy bug: Cancel-limit helper text rendered raw markdown [GitLab #162](url) as literal characters. Replaced with plain copy: “…enter an order id below.” (commit 40b2551).

Original row-action feature (commit 4be3995) confirmed working. Issue closed.

## Verification complete — closing GitLab #162 Verified on local stack (LocalTerra healthy, Postgres :5432, indexer :3001, frontend :3000, bot swarm active). ### Checklist - [x] **`/limits`** — EMBER/CORAL pair, wallet connected; order book shows **`#order_id`** on every row. - [x] **Row actions** — wallet-owned rows show **Edit** / **×**; **Cancel all mine** enabled when active placements exist. - [x] **Edit** — clicked Edit on order #21 → limit ticket prefilled **Ask**, price `1.004035…`, remaining size `183.904204` EMBER. - [x] **Manual cancel form** — entered order id `7`, **Cancel limit** → shared mutation fired (row #7 actions disabled while pending; same hook as book). - [x] **Unit tests** — `OrderBookPanel.test.tsx` (4/4) including GitLab #162 row actions + Edit prefill. - [x] **Paused pair (L6)** — no paused pairs on this LocalTerra deploy; `isPairPaused` disables row **Edit**/**×**, **Cancel all mine**, and cancel form (same wiring as `/trade`; covered by `TradePage.test.tsx` pause case). ### Fix in this pass - **Copy bug:** Cancel-limit helper text rendered raw markdown `[GitLab #162](url)` as literal characters. Replaced with plain copy: *“…enter an order id below.”* (commit `40b2551`). Original row-action feature (commit `4be3995`) confirmed working. Issue closed.
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-05-27 05:37:34 +00:00
PlasticDigits commented 2026-05-31 12:21:30 +00:00 (Migrated from gitlab.com)

mentioned in issue #247

mentioned in issue #247
PlasticDigits commented 2026-06-05 04:08:28 +00:00 (Migrated from gitlab.com)

mentioned in issue #312

mentioned in issue #312
PlasticDigits commented 2026-06-25 14:12:57 +00:00 (Migrated from gitlab.com)

mentioned in issue #419

mentioned in issue #419
PlasticDigits commented 2026-08-16 07:14:04 +00:00 (Migrated from gitlab.com)

mentioned in issue #530

mentioned in issue #530
PlasticDigits commented 2026-08-18 12:08:53 +00:00 (Migrated from gitlab.com)

mentioned in issue #561

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