world.animals is 0 on every server tested while get_region tracks live populations #246

Closed
opened 2026-08-13 04:53:13 +00:00 by coilyco-ops · 0 comments
Member

Split out of #237, which fixed the totalCulture: 0 half of the same shape and left this one recorded rather than guessed at.

Observed

get_server_statusworld.animals: 0 on both servers tested during the 2026-08-12 sweep (Eco via Sirens and GreenLeaf Prime), while get_region on the same fetch tracks real animal populations: Deer 248, Wolf 167, Bison 114.

Animals is present in /info's key list, so this is a reported zero rather than an absent field — the null-not-zero pass in #214 does not cover it.

Why it was not fixed alongside the culture half

TotalCulture had a reconciliation source sitting in the same /info payload: ServerAchievementsDict carries milestone progress, so resolve_total_culture() could prefer the milestone floor without a second fetch.

Animals has no such in-payload counterpart. The only contradicting evidence lives in get_region's worldlayers/species data plane, which to_payload() does not fetch and should not start fetching just to sanity-check one scalar — that would put a species-list round trip behind every status call.

Options

  1. Cross-check at the tool layer, not in to_payload. get_server_status could annotate the field when a cached region snapshot disagrees. Costs a cache read, not a fetch.
  2. Mark the field as unreliable unconditionally, the way the culture fix marks a milestone-derived figure — cheap, honest, and no new data dependency.
  3. Confirm upstream first. Two servers reporting 0 while species data is live suggests /info.Animals counts something other than tracked fauna, or is simply unpopulated in 0.13. Worth one look at Eco's source before building anything on top of it.

(3) then (2) is the cheap order. (1) only earns its keep if a consumer actually wants the number.

Acceptance

  • Either world.animals carries a number a reader can trust, or the payload says the field is not reliable.
  • Whatever is decided is recorded here with the evidence, so the next sweep does not re-file it.

Refs: #237 (parent), #214 (absent-vs-zero), #240 (sweep tracking).

Split out of https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/237, which fixed the `totalCulture: 0` half of the same shape and left this one recorded rather than guessed at. ## Observed `get_server_status` → `world.animals: 0` on **both** servers tested during the 2026-08-12 sweep (Eco via Sirens and GreenLeaf Prime), while `get_region` on the same fetch tracks real animal populations: Deer 248, Wolf 167, Bison 114. `Animals` is present in `/info`'s key list, so this is a reported zero rather than an absent field — the null-not-zero pass in https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/214 does not cover it. ## Why it was not fixed alongside the culture half `TotalCulture` had a reconciliation source sitting in the same `/info` payload: `ServerAchievementsDict` carries milestone progress, so `resolve_total_culture()` could prefer the milestone floor without a second fetch. `Animals` has no such in-payload counterpart. The only contradicting evidence lives in `get_region`'s worldlayers/species data plane, which `to_payload()` does not fetch and should not start fetching just to sanity-check one scalar — that would put a species-list round trip behind every status call. ## Options 1. **Cross-check at the tool layer, not in `to_payload`.** `get_server_status` could annotate the field when a cached region snapshot disagrees. Costs a cache read, not a fetch. 2. **Mark the field as unreliable unconditionally**, the way the culture fix marks a milestone-derived figure — cheap, honest, and no new data dependency. 3. **Confirm upstream first.** Two servers reporting 0 while species data is live suggests `/info.Animals` counts something other than tracked fauna, or is simply unpopulated in 0.13. Worth one look at Eco's source before building anything on top of it. (3) then (2) is the cheap order. (1) only earns its keep if a consumer actually wants the number. ## Acceptance - Either `world.animals` carries a number a reader can trust, or the payload says the field is not reliable. - Whatever is decided is recorded here with the evidence, so the next sweep does not re-file it. Refs: https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/237 (parent), https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/214 (absent-vs-zero), https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/240 (sweep tracking).
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#246
No description provided.