get_economy: 5 of 7 documented dimensions are hardcoded-looking zeros, sparks is empty, and the narrative calls 0% contract completion "healthy" #261

Closed
opened 2026-08-13 17:09:01 +00:00 by coilyco-ops · 0 comments
Member

Summary

get_economy's description promises "live economic vitals ... including trades, contracts, loans, wages, tax flow, culture, and volatile-series trends." Of those seven, two return data. The rest are zero or empty, and the generated narrative reads the zeros as good news.

Evidence

mcp__eco__get_economy() against eco.coilysiren.me:3001, admin_ok: true, day 40 of a cycle with 165 total players and an active market:

"kpis": {
  "trades_per_day": 41.9,          // ✅
  "trades_total": 1677,            // ✅
  "total_culture": 910.32,         // ✅
  "contracts_posted": 0, "contracts_completed": 0, "contracts_failed": 0,
  "contract_completion_ratio": 0, "contract_failure_rate": 0,
  "loans_offered": 0, "loans_accepted": 0, "loans_repaid": 0, "loans_defaulted": 0,
  "loan_default_rate": 0,
  "wages_total": 0,
  "taxes_paid": 0, "govt_funds": 0, "net_tax_flow": 0,
  "trades_wow_pct": null
},
"sparks": [],
"health": "healthy",
"narrative": "Economy is healthy — 0.0% default rate, 0.0% contracts completed"

Three separate problems:

  1. govt_funds: 0 is provably wrongget_currency reports governmentHoldings: 87912.99 with a supporting 41-day series. Tracked separately in the sibling issue; noting here because it shows at least one of these zeros is a lookup failure, not an empty game state.

  2. sparks: [] — the description's "volatile-series trends." get_currency and get_climate both return rich multi-series data for this same server, so the series exist; get_economy just does not surface them. trades_wow_pct: null likewise.

  3. The narrative misreads its own zeros. "Economy is healthy — 0.0% default rate, 0.0% contracts completed" derives healthy from a 0% default rate that is 0% only because zero loans exist, and reports 0% contract completion as if it were a positive. If the zeros are genuine, the honest reading is "no contract or loan activity on this server," not "healthy."

contracts: 0 may well be true — /info independently reports "1677 trades, 0 contracts". Wages and taxes are less believable on a server with five settlements, sitting mayors, and government-owned deeds.

Expected

  • Distinguish "measured zero" from "not collected" — null plus a note for datasets not read, as get_climate does per-dataset with its observation.freshness_state.
  • Do not compute health / narrative from ratios whose denominator is zero; say "no contract activity recorded" instead.
  • Populate sparks, or drop it from the description.

Repro

mcp__eco__get_economy()

Found during a QA sweep of all 25 Eco MCP tools.

## Summary `get_economy`'s description promises "live economic vitals ... including trades, contracts, loans, wages, tax flow, culture, and volatile-series trends." Of those seven, two return data. The rest are zero or empty, and the generated narrative reads the zeros as good news. ## Evidence `mcp__eco__get_economy()` against `eco.coilysiren.me:3001`, `admin_ok: true`, day 40 of a cycle with 165 total players and an active market: ```json "kpis": { "trades_per_day": 41.9, // ✅ "trades_total": 1677, // ✅ "total_culture": 910.32, // ✅ "contracts_posted": 0, "contracts_completed": 0, "contracts_failed": 0, "contract_completion_ratio": 0, "contract_failure_rate": 0, "loans_offered": 0, "loans_accepted": 0, "loans_repaid": 0, "loans_defaulted": 0, "loan_default_rate": 0, "wages_total": 0, "taxes_paid": 0, "govt_funds": 0, "net_tax_flow": 0, "trades_wow_pct": null }, "sparks": [], "health": "healthy", "narrative": "Economy is healthy — 0.0% default rate, 0.0% contracts completed" ``` Three separate problems: 1. **`govt_funds: 0` is provably wrong** — `get_currency` reports `governmentHoldings: 87912.99` with a supporting 41-day series. Tracked separately in the sibling issue; noting here because it shows at least one of these zeros is a lookup failure, not an empty game state. 2. **`sparks: []`** — the description's "volatile-series trends." `get_currency` and `get_climate` both return rich multi-series data for this same server, so the series exist; `get_economy` just does not surface them. `trades_wow_pct: null` likewise. 3. **The narrative misreads its own zeros.** "Economy is healthy — 0.0% default rate, 0.0% contracts completed" derives *healthy* from a 0% default rate that is 0% only because zero loans exist, and reports 0% contract completion as if it were a positive. If the zeros are genuine, the honest reading is "no contract or loan activity on this server," not "healthy." `contracts: 0` may well be true — `/info` independently reports "1677 trades, 0 contracts". Wages and taxes are less believable on a server with five settlements, sitting mayors, and government-owned deeds. ## Expected - Distinguish "measured zero" from "not collected" — `null` plus a note for datasets not read, as `get_climate` does per-dataset with its `observation.freshness_state`. - Do not compute `health` / `narrative` from ratios whose denominator is zero; say "no contract activity recorded" instead. - Populate `sparks`, or drop it from the description. ## Repro ``` mcp__eco__get_economy() ``` Found during a QA sweep of all 25 Eco MCP tools.
Sign in to join this conversation.
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
coilyco-gaming/eco-app#261
No description provided.