0.48.3 — numbers that say what they leave out
Numbers that say what they leave out
A patch on top of 0.48.2, from two test reports run against the live endpoint.
Fixed — your collection was valued at prices nobody is asking any more
The value chain took the last price a shop was seen asking, however long ago it said it. On a real collection two isolated observations — three months old, from the source that matches no product version — carried about 497 € of a 832 € reported plus-value, against pieces whose catalogue list prices totalled 214 €.
The sweep revisits a figure every couple of days, so a price it hasn't refreshed in thirty days doesn't mean the piece held its value: it means the listing stopped resolving — delisted, sold out, renamed. Such a price now falls through to the catalogue MSRP, exactly like a figure that was never priced.
Expect a lower collection value after this update. It is the truer one. valuation.pieces_stale counts the pieces it happened to, so the drop explains itself — and a large count is telling you the price sweep has stopped reaching those shops, which is the actual news.
Fixed — a wishlist row can now answer its own question
A row handed back a target in one currency and a shop price in another, and left the comparison to whoever was reading. The web app manages; an assistant over MCP has no rate table at all. And the bare numbers mislead in both directions: $149.99 under a €150.00 target looks like a one-cent deal and is a twenty-euro one, while $239 against a €200 target reads as over by $39 and is over by €6.
Each row now carries target_comparison: whether the target is met, which price was measured, both sides in euros when a conversion happened, and the rate date so the verdict can be checked later. Absent when there's no target, no price, or no rate for the pair — an honest "can't tell" rather than a wrong answer.
Fixed — statistics that contradicted each other
- Pre-order slip. Slip was the sum of forward date changes, with backward ones dropped. That's right for a reschedule and wrong for a correction: type a purchase date into the release-date field, fix it seconds later, and the repair counts as a slip. One pre-order that really slipped 62 days reported 335 — while the year-in-review card reported 62 for the same pre-order. Both now measure announced date to current date, and a corrected typo is no longer a permanent mark on that maker's record.
- Deposits at risk. An open pre-order with 108.00 committed showed no deposits, beside an "open: 1" that was right. The query required the price's currency, and a pre-order normally records only the deposit — the shop invoices the balance months later — so it filtered out exactly the rows the panel exists to show.
- Plus-value. It is measured against what you paid for the figures, not your total outlay; the two differ by 400 € on a real collection, and nothing said which.
plus_value_basisnow does.
Fixed — duplicate detection defeated by word order
find_duplicate_figures matched on substring, so "Crown Studio 1:6 Tifa" found the entry and "Crown Studio Tifa 1:6" found nothing. Shop titles are exactly where word order wanders. It now matches on word sets, with the furniture dropped (【PRE-ORDER】, "resin", "statue", a bare scale), which matters because this is the check that runs before a new catalogue row is created for a figure that already exists.
Also
Price alerts kept a permanent dedup key, which with the crossing-based alerts introduced in 0.48.2 would have silently swallowed a genuine second crossing months later. Two MCP tool descriptions pointed at a tool that doesn't exist, and one didn't mention that permanent deletion needs its own scope — which read as "deletion isn't available over MCP" when it is.
📘 Wishlist · La Cote · Pre-orders
🐳 ghcr.io/dim145/figurecollector-{server,client,docs}:0.48.3
📝 Full changelog: 0.48.2...0.48.3