Trade & store logistics: currency & money-supply surface (meets Currency/Currencies) #53
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
Currency and money-supply surface under the DiscordLink-replacement epic (#37). DiscordLink ships
Currency <name>(one currency: top holders, backing, trade count) andCurrencies(top currencies, split minted/backed vs personal/credit), plus a Currency Display module. Owning this on the website is squarely in the epic's read-only-info-belongs-on-the-site thesis.No-reset spine
Build from what the server already exposes.
/infocarriesEconomyDesc(trade and contract counts) and the currency listing, and/datasetscarriesTradesInLast7Daysand the commerce series. Honesty note: per-account balances and top-holder lists may not be in the current export surface. The agent's first task is a 20-minute probe (per the dataset how-to indocs/datasets/README.md) to confirm what currency and holder data is exportable without a new mod. Build every part that is reachable now. Anything that genuinely needs live in-game balances gets split into a follow-up issue linked to the reset-gated stores/economy exporter, never a silent skip (AGENTS.md pull-everything rule).Scope
The agent builds a currency and money-supply MCP surface:
Currencies.Currency <name>. Top holders only if the probe confirms they are exportable.get_eco_currency) with text + JSON +_meta.uicard, and/preview/currency.jsonfor the SPA.DiscordLink parity
Meets
CurrencyandCurrenciesfor everything exportable today. The holder-list piece is meet-if-reachable, defer-if-not, with the gap filed rather than hidden.Acceptance
docs/datasets/before the tool is finalized, so the reachable-vs-deferred line is documented.ward exec smokepasses.respx-mocked unit tests for the parsing and classification.ward exec test/ward exec lintgreen.docs/FEATURES.mdupdated. Any deferred holder data has a linked follow-up issue.Dependencies
Parent: #37. Related survey: #7. Surfaced in the
/tradeSPA route (sibling).🔒 Reserved by
ward agent --driver claude— containerengineer-claude-eco-app-53on hostKAI-DESKTOP-TOWERis carrying this issue (reserved 2026-07-05T01:40:26Z). Concurrentward agentruns are blocked until it finishes or the reservation goes stale (2h0m0s TTL);--forceoverrides.Do not comment on or edit this issue to steer the run while it is reserved. The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a new issue, dispatched fresh — that is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494).
— Claude (she/her), via
ward agent🔓 Reservation released by
ward container reap— containereco-app(--driver claude) exited without launching the agent (smoke-test death, ward#222/#264), so the hold it took is retracted. A plainward agentretry no longer needs--force.— Claude (she/her), via
ward agent🔒 Reserved by
ward agent --driver claude— containerengineer-claude-eco-app-53on hostKAI-DESKTOP-TOWERis carrying this issue (reserved 2026-07-05T02:54:18Z). Concurrentward agentruns are blocked until it finishes or the reservation goes stale (2h0m0s TTL);--forceoverrides.Do not comment on or edit this issue to steer the run while it is reserved. The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a new issue, dispatched fresh — that is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494).
— Claude (she/her), via
ward agentWARD-OUTCOME: done - get_eco_currency (roster/money-supply + per-currency report), /preview/currency.json, probe doc, tests; deferred top-holders to #58; merged sibling trades/stores work and pushed to main.
The probe rewrote the plan on contact: the issue assumed
/infocarries a currency listing, but on 0.13.0.4 it only hasEconomyDesc. The real surface turned out to be/datasets/flatlist(pleasantly, public) plus the admin exporter, which named nine currency datasets cleanly split into money-supply series and the CreateCurrency/MintCurrency/CurrencyTrade actions. That flatlist was the whole ballgame - once I had it, the minted-vs-personal classification (a currency is backed iff it mints) fell out naturally and matched whatCurrenciesshows.What fought back: no admin token in this container, so I couldn't see a single real CurrencyTrade row - the exporter 401s. I leaned on the established codebase pattern (defensive header-keyed column candidates + graceful degradation, exactly like climate.py/crafting.py) and respx fixtures built from the documented shapes. Confidence is high on the reachable series and the classification logic (fully tested, and I verified the degraded public path live against the server). It's medium on the exact CurrencyTrade/MintCurrency CSV column names - if the live exporter spells the currency or amount column differently than my candidate list, the per-currency trade/mint attribution will come up empty until the names are added, though the money-supply headline and roster still render. Worth a 5-minute re-probe with the token once deployed.
Rough edges / follow-ups: top-holders is genuinely not in any export surface, filed as #58 (the new mods/stores exporter from #50 that landed on main mid-merge is store shelves, not per-account balances, so the gap stands). The /trade SPA page (sibling) can now consume /preview/currency.json. Merge with the concurrent trades/stores feature was clean - the tool-list test combined both additions without a conflict.