Four tools return arrays that limit never reaches, and one truncates silently #286

Closed
opened 2026-08-13 22:38:41 +00:00 by coilyco-ops · 0 comments
Member

Slice of #267, filed so five built pull requests can close what they actually close. Angie (ENG, claude seat).

267 is an invariant across 25 tools plus a generic test. These are the bounding violations already fixed against it, grouped because they are one shape and one mechanism.

The violations

get_social           newArrivals: 60 rows returned, 124 present, warnings []
                     the only silent truncation in the suite
get_crafting_atlas   limit bound 1 of 6 arrays, ~45 KB at limit=1
get_trades           limit bound 1 of 5; topBuyers and topSellers are sorted
                     and never sliced, so both hold one row per trading citizen
get_social           no limit parameter at all, so reputationEdges (~210 rows)
                     had no bound it could honour
get_social           topReputationGivers / topReputationReceivers, same
                     never-sliced shape as topBuyers

Every one is a key nobody passed to _bound_rows, or a bound a caller could not reach. get_stores was already correct at 2 of 2.

Acceptance

  • Each array above is bounded by limit and warns shown-of-total.
  • get_social declares limit in its own schema. A bound a caller cannot pass is not a bound they can use.
  • Scalar summaries stay whole: totalEvents, totalCurrencyVolume, counts, totalReputationTransfers, totalFirstLogins.
  • An untruncated list stays quiet, so the honest case is distinguishable from the capped one.
  • Each fails under a mutation restoring the original argument list.

Deliberately not here

playByDay and firstLoginsByDay are time series wanting get_species' even-spacing rather than a head slice. reputationColumnsSeen is the exporter header. get_currency's holder cap and get_world's byObject sit behind caches and an input-model decision. Those stay on 267.

Closed by

#273, #274, #276, #277, #278.

**Slice of https://forgejo.coilysiren.me/coilyco-gaming/eco-app/issues/267, filed so five built pull requests can close what they actually close.** Angie (ENG, `claude` seat). 267 is an invariant across 25 tools plus a generic test. These are the bounding violations already fixed against it, grouped because they are one shape and one mechanism. ## The violations ``` get_social newArrivals: 60 rows returned, 124 present, warnings [] the only silent truncation in the suite get_crafting_atlas limit bound 1 of 6 arrays, ~45 KB at limit=1 get_trades limit bound 1 of 5; topBuyers and topSellers are sorted and never sliced, so both hold one row per trading citizen get_social no limit parameter at all, so reputationEdges (~210 rows) had no bound it could honour get_social topReputationGivers / topReputationReceivers, same never-sliced shape as topBuyers ``` Every one is a key nobody passed to `_bound_rows`, or a bound a caller could not reach. `get_stores` was already correct at 2 of 2. ## Acceptance - Each array above is bounded by `limit` and warns shown-of-total. - `get_social` declares `limit` in its own schema. A bound a caller cannot pass is not a bound they can use. - Scalar summaries stay whole: `totalEvents`, `totalCurrencyVolume`, `counts`, `totalReputationTransfers`, `totalFirstLogins`. - An untruncated list stays quiet, so the honest case is distinguishable from the capped one. - Each fails under a mutation restoring the original argument list. ## Deliberately not here `playByDay` and `firstLoginsByDay` are time series wanting `get_species`' even-spacing rather than a head slice. `reputationColumnsSeen` is the exporter header. `get_currency`'s holder cap and `get_world`'s `byObject` sit behind caches and an input-model decision. Those stay on 267. ## Closed by https://forgejo.coilysiren.me/coilyco-gaming/eco-app/pulls/273, https://forgejo.coilysiren.me/coilyco-gaming/eco-app/pulls/274, https://forgejo.coilysiren.me/coilyco-gaming/eco-app/pulls/276, https://forgejo.coilysiren.me/coilyco-gaming/eco-app/pulls/277, https://forgejo.coilysiren.me/coilyco-gaming/eco-app/pulls/278.
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#286
No description provided.