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.
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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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:above the table, with a clear buttonXimmediately to its right.Xclears the field and immediately restores that overview.Filtered view — totals include hidden positions.Acceptance and verification
B,BT, thenBTCupdates the view after every keystroke without pressing Return.btcandBTCproduce the same matches.Xbutton and a query with no matches behave consistently and immediately.Implementation starting point
src/main/tjava/com/r35157/evelyn/emc/impl/ref/PerpsTab.tjavaKeep 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.