Adds a sell list to the appraisal tool, priced to undercut the cheapest sale order #78

Merged
miko merged 4 commits from feat/appraisal-sell-undercut into main 2026-11-02 00:19:29 +00:00
Owner

The appraisal result gains a second export in the multi-sell panel, labelled in the owner's words: "Sell these items: undercut the cheapest sale order" at the basis hub's station, by 0.01.

The paste goes into the client's MultiSell window, which lists the items as NEW orders from hangar stock; that is the only route a paste can take, since ESI has no order writes and MultiSell cannot modify an order already on the market. Prices are EveSynapse's own swept station bests (market_station_stats), read live at render rather than from the stored snapshot, one bounded query for the appraisal's types. An item with no sale order at that station has no price to undercut: it is named as left out, never given an invented price.

Each hub region's main trade station is recorded beside the region list (marketHubStations) and exposed to modules as MarketHubStation on the deps contract.

Tests: TestAppraisalSellItemsUndercut seeds a Jita best sell of 6.40 for Tritanium and pins the rendered sell list (Tritanium 6.39) plus the left-out note for Pyerite, which prices off its estimate and has no Jita sell orders. All 27 appraisal tests pass.

The appraisal result gains a second export in the multi-sell panel, labelled in the owner's words: "Sell these items: undercut the cheapest sale order" at the basis hub's station, by 0.01. The paste goes into the client's MultiSell window, which lists the items as NEW orders from hangar stock; that is the only route a paste can take, since ESI has no order writes and MultiSell cannot modify an order already on the market. Prices are EveSynapse's own swept station bests (market_station_stats), read live at render rather than from the stored snapshot, one bounded query for the appraisal's types. An item with no sale order at that station has no price to undercut: it is named as left out, never given an invented price. Each hub region's main trade station is recorded beside the region list (marketHubStations) and exposed to modules as MarketHubStation on the deps contract. Tests: TestAppraisalSellItemsUndercut seeds a Jita best sell of 6.40 for Tritanium and pins the rendered sell list (Tritanium 6.39) plus the left-out note for Pyerite, which prices off its estimate and has no Jita sell orders. All 27 appraisal tests pass.
Adds a sell list to the appraisal tool, priced to undercut the cheapest sale order
Some checks failed
github/test Test gate on GitHub runners
github/analysis Analysis gate on GitHub runners
github/core-only Core-only gate on GitHub runners
github/race Race gate on GitHub runners
4f18b05d23
The appraisal result gains a second export beside the
multi-sell list: the priced items at 0.01 under the cheapest
sale order at the basis hub's station right now, ready to
paste into the client's MultiSell window, which lists them
as new orders. Prices are EveSynapse's own swept station
bests, read live rather than from the snapshot. An item with
no sale order at that station has no price to undercut; it
is named as left out instead of being given an invented
price. Each hub region's main trade station is now recorded
next to the region list and exposed to modules as
MarketHubStation.
Regenerates the market queries with sqlc
All checks were successful
github/analysis Analysis gate on GitHub runners
github/test Test gate on GitHub runners
github/core-only Core-only gate on GitHub runners
github/race Race gate on GitHub runners
56bcd02dc6
Renames the appraisal tool to Appraisal / Multi-Sell
All checks were successful
github/analysis Analysis gate on GitHub runners
github/test Test gate on GitHub runners
github/core-only Core-only gate on GitHub runners
github/race Race gate on GitHub runners
e66ae487dd
miko merged commit e13db2b82d into main 2026-11-02 00:19:29 +00:00
Sign in to join this conversation.
No reviewers
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
EveSynapse/evesynapse!78
No description provided.