<feed xmlns='http://www.w3.org/2005/Atom'>
<title>guess-market/api/src/main/java, branch 2.0</title>
<subtitle>definitely not polymarket
</subtitle>
<id>https://git.sartin.in/guess-market/atom?h=2.0</id>
<link rel='self' href='https://git.sartin.in/guess-market/atom?h=2.0'/>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/'/>
<updated>2026-09-06T09:22:58Z</updated>
<entry>
<title>api: extend contexts and DTOs for order books and event creation</title>
<updated>2026-09-06T09:22:58Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-09-06T09:22:58Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=5bc7c4ed9d052668af66d3116a6b7afbe62c6eec'/>
<id>urn:sha1:5bc7c4ed9d052668af66d3116a6b7afbe62c6eec</id>
<content type='text'>
The desktop UI needs to create events, trade on both sides of an order
book, and show who is participating in an event, none of which the api
module could express so far.

Add AccountContext for looking up ledger accounts by owner, and give
CatalogContext an openEvent operation plus createEvent, taking either a
CreateEventRequest or its fields spelled out. createEvent defaults to
a "Not implemented" error so existing implementations keep compiling
until they support it.

Let GuessMarketContext.placeOrder take an explicit side, keeping the
old signature as a default method that places a BUY so current callers
are unaffected.

Add OrderBookDTO and BookOrderDTO to describe per-option books with
best bid, best ask and spread, and ParticipantDTO for a user's
position, fees and P&amp;L in an event. Carry the order books and
participants on EventDetailDTO and the market maker's name on
EventSummaryDTO.
</content>
</entry>
<entry>
<title>model: relocate market DTOs out of the flat api package</title>
<updated>2026-08-23T14:05:29Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-23T14:05:29Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=843820ea9f357220d69f3795f3289ee41eed355c'/>
<id>urn:sha1:843820ea9f357220d69f3795f3289ee41eed355c</id>
<content type='text'>
Move AccountDTO/MarketDTO/MarketStateDTO/PurchaseReceiptDTO/TradeRowDTO
out of the catch-all api package into model.market (and LedgerDTO into
model.ledger), matching the existing model.event convention so DTOs
live next to the domain they describe rather than in the interface
package. Relocate LedgerMapper from mapper.v2 to infrastructure.adapter
to match the module's established package layout, and update all call
sites and imports accordingly.

Also register the ui-desktop module in the build tooling: add it to
MODULES, add openjfx to the shipped runtime libs, and generalize
package.sh so each executable module (ui-console, ui-desktop) gets its
own Main-Class/Class-Path manifest and run script instead of
special-casing ui-console. Fold long Class-Path manifest lines at 72
bytes per the JAR spec, since adding ui-desktop's dependencies pushed
the line past the limit.
</content>
</entry>
<entry>
<title>Move CommissionTiming and MechanismType into model.event package</title>
<updated>2026-08-20T09:09:20Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-20T09:09:20Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=0fc488c3f9e29f5e9f1092f8081714c9e820f178'/>
<id>urn:sha1:0fc488c3f9e29f5e9f1092f8081714c9e820f178</id>
<content type='text'>
Groups them with the other event-domain enums instead of the general
api package, and updates all call sites accordingly.
</content>
</entry>
<entry>
<title>Break down purchase receipts by cost/commission, harden XML validation and state I/O</title>
<updated>2026-08-18T15:19:50Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-18T15:19:50Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=755d2265054e5140e82d322681566c3034583c95'/>
<id>urn:sha1:755d2265054e5140e82d322681566c3034583c95</id>
<content type='text'>
Adds a full pre-load validation pass for GM XML seeds (ids, names,
options, commission, LMSR liquidity), replaces IO.print with
System.out, and surfaces detailed error messages across load/save
commands instead of generic failures.
</content>
</entry>
<entry>
<title>Wire event ledger movements, show winning market by name, seed LMSR subsidy</title>
<updated>2026-08-18T09:07:57Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-18T09:07:57Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=9dab2b3d624ecae08439532157fb8b9805fe9274'/>
<id>urn:sha1:9dab2b3d624ecae08439532157fb8b9805fe9274</id>
<content type='text'>
- Event ledger now grows on purchase and shrinks on payout, mirroring
  the exact amounts moved on the buyer's ledger (it previously had a
  Ledger object that nothing ever wrote to).
- Settlement and event-detail views now show the winning market's
  display name instead of its raw key; event details are viewable for
  settled events too (the picker previously excluded anything not
  ACTIVE).
- LMSR events seed their ledger with a SUBSIDY entry for the market
  maker's worst-case loss (b * ln(outcomes)), reusing the existing
  cost() function rather than recomputing the formula.
</content>
</entry>
<entry>
<title>Replace order matching with risk/matching/fulfillment/settlement pipeline</title>
<updated>2026-08-17T11:15:59Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-17T11:15:59Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=13a221ffaefc169d028c7eab6f21ac88052d1d40'/>
<id>urn:sha1:13a221ffaefc169d028c7eab6f21ac88052d1d40</id>
<content type='text'>
Move XML loading infrastructure and models under service/catalog, and
split order execution into a real pipeline: RiskEngine checks the order,
MatchingEngine matches it, FulfillmentContext books the resulting trades,
and SettlementContext resolves winning markets. GuessMarketContext.buyShares
becomes placeOrder(price, quantity), and TradingMechanism.buy now returns
matched trades directly instead of a single TradeExecution.
</content>
</entry>
<entry>
<title>Split DTOs into api/model, extract order matching into service/matching</title>
<updated>2026-08-16T18:50:15Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-16T18:50:15Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=eed9265be711432f40247f149c07f9e33511192a'/>
<id>urn:sha1:eed9265be711432f40247f149c07f9e33511192a</id>
<content type='text'>
Moves Event/Ledger DTOs out of the flat api package into
api/model/{event,ledger}, and moves LocalCatalogContext and order
matching logic into dedicated service/catalog and service/matching
packages, replacing TradingOperation/TradingOperationImpl.
</content>
</entry>
<entry>
<title>Rename Option/Account to Market/Ledger, add Result-based error handling</title>
<updated>2026-08-16T11:55:08Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-16T11:55:08Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=07a7a1cb3e4cfc1580bc05b0a6010a1e9f7e7508'/>
<id>urn:sha1:07a7a1cb3e4cfc1580bc05b0a6010a1e9f7e7508</id>
<content type='text'>
Split GuessMarketContext into a separate CatalogContext for read-only
event listing, wrap fallible operations in Result&lt;T&gt; instead of throwing,
and wire load/save of events and users through a JSON Wrapper.
</content>
</entry>
<entry>
<title>Wire buyShares and menu commands, replace factory interfaces with DI</title>
<updated>2026-08-14T11:02:33Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-14T11:02:33Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=98ebc2b0f6fdde1f7502a35ebe067fb95e5ee336'/>
<id>urn:sha1:98ebc2b0f6fdde1f7502a35ebe067fb95e5ee336</id>
<content type='text'>
Implement LocalGuessMarketContext.buyShares/loadEvents via a new
TradingOperation and Loader, backed by in-memory repositories. Replace
the ConsoleInputProviderFactory/ConsoleOutputProviderFactory pattern
with picocontainer-injected providers, and drive the menu from a list
of MenuCommand implementations instead of a hardcoded printout.
</content>
</entry>
<entry>
<title>Add service module with stubbed LocalGuessMarketContext</title>
<updated>2026-08-13T16:24:24Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-13T16:24:24Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=ae8486da5c542d6af9a2e0f9f7cc39729a055eee'/>
<id>urn:sha1:ae8486da5c542d6af9a2e0f9f7cc39729a055eee</id>
<content type='text'>
GuessMarketContext gained a richer surface (loadEvents/listEvents/
buyShares/closeEvent/account/save-restoreState) backed by new
EventDetailDTO, MarketStateDTO, OptionStateDTO and PurchaseReceiptDTO.
The old engine-module provider implemented the previous shape and is
removed; market.guess.service.LocalGuessMarketContext replaces it as a
stub, each method throwing UnsupportedOperationException pending a
real implementation.
</content>
</entry>
</feed>
