<feed xmlns='http://www.w3.org/2005/Atom'>
<title>guess-market/tools, branch master</title>
<subtitle>definitely not polymarket
</subtitle>
<id>https://git.sartin.in/guess-market/atom?h=master</id>
<link rel='self' href='https://git.sartin.in/guess-market/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/'/>
<updated>2026-09-09T07:05:12Z</updated>
<entry>
<title>ui-desktop: build the JavaFX market UI on top of the service</title>
<updated>2026-09-09T07:05:12Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-09-09T07:05:12Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=f23c20c1c66b39fb1f49307e08e8593fa708e026'/>
<id>urn:sha1:f23c20c1c66b39fb1f49307e08e8593fa708e026</id>
<content type='text'>
Replace the placeholder hello-world window with a working desktop
client for the guess market.

ServiceEngine wires the in-memory repositories, XML loader, risk,
matching, fulfillment and settlement contexts together, and AppState
exposes their results as observable JavaFX state for the views to bind
to. The FXML views have an events tab and a users tab. The events tab
lists events with mechanism and commission filters, and shows each
event's price chart, order book ladder, trade history and participants.
The users tab shows each user's ledger and positions, and lets them
place buy and sell orders. Dialogs cover loading an XML file (in a
background task), creating an event and resolving one.

Bundle a CSS theme and Nerd Font faces so the UI looks the same on
every machine. Teach build.sh to copy each module's src/main/resources
into its class output, since FXML, CSS and fonts are loaded from the
classpath at runtime.
</content>
</entry>
<entry>
<title>ex-2: add invalid-input fixtures and wire ui-desktop to the service</title>
<updated>2026-09-06T07:36:54Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-09-06T07:36:54Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=508898f52c16cc737bc7d08b8ee4c29fab8d1146'/>
<id>urn:sha1:508898f52c16cc737bc7d08b8ee4c29fab8d1146</id>
<content type='text'>
The ex-2 loader has to reject documents that are schema-valid but
logically broken, and so far only error-2.xml and error-3.xml exercised
that path. Add one fixture per validation rule under
test-data/ex-2/invalid, each a copy of small.xml with a single defect
described in a leading comment: a non-.xml extension, a duplicate event
id, commission outside 0..90 on either side, a duplicate user name,
zero or negative initial cash, a market maker referencing an unknown
event, and an event with no market maker or with two.

Teach LedgerMapper to map individual LedgerEntry records to
LedgerEntryDTO, renaming id to seq and time to at and rendering the
timestamp through InstantOptions.humanize, so callers can show a ledger
history rather than only the account summary.

Make ui-desktop depend on api and service in the build tooling and in
its Eclipse classpath, since the desktop UI now talks to the service
layer directly, and put lib/openjfx on java.library.path for the test
run so tests touching JavaFX can load its native libraries.
</content>
</entry>
<entry>
<title>openjfx: ship native libraries so the desktop UI can launch on Windows</title>
<updated>2026-08-23T15:10:32Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-23T15:10:32Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=c0dde6531e831730c25230097fd85a8a38214101'/>
<id>urn:sha1:c0dde6531e831730c25230097fd85a8a38214101</id>
<content type='text'>
lib/openjfx held only the JavaFX API jars, with no Prism/Glass native
libraries backing them. At startup JavaFX tried the d3d then sw
rendering pipelines and both failed to load, since NativeLibLoader had
no native code to find, crashing before any window opened.

Bump the jars to 25.0.4 to match the target JDK and add the matching
native DLLs alongside them. Drop the web/media/swt/swing jars and
their natives (including the 92MB jfxwebkit.dll) since ui-desktop
never references those modules.

Update package.sh to also stage *.dll files when copying runtime libs
into build/dist, and point java.library.path at lib/openjfx in the
generated run-*.bat so the natives are found at launch.
</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>Add MapStruct LedgerMapper and wire annotation processing into build.sh</title>
<updated>2026-08-20T14:39:50Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-20T14:39:50Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=fbfd2e275e9d645e4ec8a1874bc57d98b1c38300'/>
<id>urn:sha1:fbfd2e275e9d645e4ec8a1874bc57d98b1c38300</id>
<content type='text'>
build.sh now passes -processorpath/-s so MapStruct's generated impl
compiles alongside hand-written sources.
</content>
</entry>
<entry>
<title>Add JaCoCo coverage reporting to test.sh</title>
<updated>2026-08-20T07:24:22Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-20T07:24:22Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=8089a72ef6065a2a01304aa1cc251d9950731527'/>
<id>urn:sha1:8089a72ef6065a2a01304aa1cc251d9950731527</id>
<content type='text'>
Vendor jacocoagent.jar/jacococli.jar under lib/jacoco/ (excluded from
the shipped classpath), attach the agent during test runs, and
generate an HTML+XML report into build/coverage after tests pass.
</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>Add XML schema validation, split build scripts by module, rename BuyMenuCommand to PlaceOrderMenuCommand</title>
<updated>2026-08-18T06:52:47Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-18T06:52:47Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=d2688a197bd680580699f05e8194f9180e4832fa'/>
<id>urn:sha1:d2688a197bd680580699f05e8194f9180e4832fa</id>
<content type='text'>
Introduces XMLValidatorV1 and deserializer/adapter classes for events, ledgers,
markets, users, and trading mechanisms. Replaces the monolithic build.bat/run.sh
scripts with per-module tools (_util.sh, build.sh, package.sh, test.sh) that
compile in dependency order.
</content>
</entry>
<entry>
<title>wireframe</title>
<updated>2026-08-06T21:17:22Z</updated>
<author>
<name>Kostya</name>
<email>mail@sartin.in</email>
</author>
<published>2026-08-06T21:17:22Z</published>
<link rel='alternate' type='text/html' href='https://git.sartin.in/guess-market/commit/?id=10e36a8910653a73910b7be654b3467ece511d9b'/>
<id>urn:sha1:10e36a8910653a73910b7be654b3467ece511d9b</id>
<content type='text'>
</content>
</entry>
</feed>
