EMC Perps: add instant text filter for positions and wallet groups #105

Open
opened 2026-10-26 15:33:32 +01:00 by minimons · 0 comments
Owner

Problem

The owner needs to quickly find Evelyn perpetual positions in EMC by instrument (for example BTC) or by part of a wallet address/group name. Add a small text filter at the top of the Perps tab.

Agreed behavior

Filter: [        BTC] [X]
  • Put a text field labelled Filter: above the table, with a clear button X immediately to its right.
  • Apply the filter immediately on every text change, including each keystroke, deletion and paste. Do not wait for Return/Enter, focus loss or the next polling cycle.
  • Use case-insensitive substring matching, without regex or query syntax.
  • Match the text of position/group rows, including instrument names, group names and the full wallet address even if the displayed address is shortened.
  • When a position matches, display that position together with its ancestor groups so its wallet, venue and Cross account context remain understandable. Hide unrelated branches.
  • When a group itself matches, display that group and all its descendants. A wallet-address match therefore shows all positions belonging to that wallet.
  • An empty field shows the complete normal overview. Clicking X clears the field and immediately restores that overview.
  • Keep the Perpetual Contracts root as context. A query without matches must not leave unrelated position/group rows visible.
  • Preserve the original group and portfolio totals, including values for positions hidden by the filter. Do not calculate filtered subtotals or apportion shared Cross collateral. While a filter is active, display a clear explanation near the filter, for example: Filtered view — totals include hidden positions.
  • Filtering is a presentation operation. Preserve the existing account-aware metrics, risk summaries, TWAP warnings and freshness/retention semantics rather than recalculating them from the visible subset.
  • Keep the entered filter active across normal snapshot updates and read failures. Newly added or changed positions must be evaluated against the current filter.
  • Make matching results readily visible through their ancestors. Preserve normal expansion/selection behavior across unchanged polling updates; clearing the filter should restore the normal overview without losing its prior group expansion state.
  • Support both Production and Test Perps tabs, each with its own filter state.

Acceptance and verification

  • Typing B, BT, then BTC updates the view after every keystroke without pressing Return. btc and BTC produce the same matches.
  • A symbol match keeps matching positions and their ancestor hierarchy, hiding unrelated positions.
  • A substring of a full wallet address shows the whole matching wallet branch, including positions with other symbols.
  • A venue or Cross group name match includes the matching group's descendants.
  • Backspace, paste, an empty query, the X button and a query with no matches behave consistently and immediately.
  • Group/root totals remain identical to the unfiltered snapshot, and the explanation is visible only while filtering is active.
  • An active query survives polling, a failed read and recovery; matching additions/removals are reflected without waiting for another text edit.
  • Unchanged snapshots preserve selection and expansion for retained visible rows. Clearing restores the complete normal overview.
  • Verify the control placement and behavior in JavaFX and run the normal build checks. Follow the repository OpenSpec workflow and update the relevant Perps overview specification. No new automated test suite is requested.

Implementation starting point

src/main/tjava/com/r35157/evelyn/emc/impl/ref/PerpsTab.tjava

Keep this within EMC's presentation layer and existing snapshot/polling model. No service-side filtering, additional venue requests, trading changes or persistent filter configuration are needed.

## Problem The owner needs to quickly find Evelyn perpetual positions in EMC by instrument (for example `BTC`) or by part of a wallet address/group name. Add a small text filter at the top of the Perps tab. ## Agreed behavior ```text Filter: [ BTC] [X] ``` - Put a text field labelled `Filter:` above the table, with a clear button `X` immediately to its right. - Apply the filter immediately on every text change, including each keystroke, deletion and paste. Do not wait for Return/Enter, focus loss or the next polling cycle. - Use case-insensitive substring matching, without regex or query syntax. - Match the text of position/group rows, including instrument names, group names and the full wallet address even if the displayed address is shortened. - When a position matches, display that position together with its ancestor groups so its wallet, venue and Cross account context remain understandable. Hide unrelated branches. - When a group itself matches, display that group and all its descendants. A wallet-address match therefore shows all positions belonging to that wallet. - An empty field shows the complete normal overview. Clicking `X` clears the field and immediately restores that overview. - Keep the Perpetual Contracts root as context. A query without matches must not leave unrelated position/group rows visible. - Preserve the original group and portfolio totals, including values for positions hidden by the filter. Do not calculate filtered subtotals or apportion shared Cross collateral. While a filter is active, display a clear explanation near the filter, for example: `Filtered view — totals include hidden positions.` - Filtering is a presentation operation. Preserve the existing account-aware metrics, risk summaries, TWAP warnings and freshness/retention semantics rather than recalculating them from the visible subset. - Keep the entered filter active across normal snapshot updates and read failures. Newly added or changed positions must be evaluated against the current filter. - Make matching results readily visible through their ancestors. Preserve normal expansion/selection behavior across unchanged polling updates; clearing the filter should restore the normal overview without losing its prior group expansion state. - Support both Production and Test Perps tabs, each with its own filter state. ## Acceptance and verification - Typing `B`, `BT`, then `BTC` updates the view after every keystroke without pressing Return. `btc` and `BTC` produce the same matches. - A symbol match keeps matching positions and their ancestor hierarchy, hiding unrelated positions. - A substring of a full wallet address shows the whole matching wallet branch, including positions with other symbols. - A venue or Cross group name match includes the matching group's descendants. - Backspace, paste, an empty query, the `X` button and a query with no matches behave consistently and immediately. - Group/root totals remain identical to the unfiltered snapshot, and the explanation is visible only while filtering is active. - An active query survives polling, a failed read and recovery; matching additions/removals are reflected without waiting for another text edit. - Unchanged snapshots preserve selection and expansion for retained visible rows. Clearing restores the complete normal overview. - Verify the control placement and behavior in JavaFX and run the normal build checks. Follow the repository OpenSpec workflow and update the relevant Perps overview specification. No new automated test suite is requested. ## Implementation starting point `src/main/tjava/com/r35157/evelyn/emc/impl/ref/PerpsTab.tjava` Keep this within EMC's presentation layer and existing snapshot/polling model. No service-side filtering, additional venue requests, trading changes or persistent filter configuration are needed.
minimons added the enhancement label 2026-10-26 15:39:02 +01:00
minimons added this to the Evelyn project 2026-10-26 15:39:06 +01:00
minimons self-assigned this 2026-10-26 15:39:11 +01:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: r35157/com_r35157_nenjim-hubd-impl_ref#105