fair_price: in-game evidence never attaches, and the item is silently rewritten before lookup #268
Labels
No labels
burndown-2026-06
headless
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/eco-app#268
Loading…
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?
fair_priceexists to "compare an Eco item's in-game market evidence with an advisory real-world commodity benchmark". At5e05296the real-world half works and the in-game half never fires — including for items with active, readable markets on the same server.04a1ae2—fix(fair_price): declare the benchmark substitution and the missing evidence— implemented substitution disclosure for the real-world axis only. The in-game axis has a second, undisclosed rewrite.Defect 1 — "no in-game market" is false
All five valid calls returned
inGameMedian: null,inGameCurrency: null,inGameTrend: null,inGameVerdict: null. Againsteco.coilysiren.me:3001(admin reachable, 528 detailed ledger rows):Wheat is the clean case: the requested name and the ledger name agree, so no mapping question arises. The market exists and the tool says it does not.
Defect 2 — undisclosed item rewrite
The in-game lookup substitutes a different item than the caller asked for, with no disclosure:
substitutedsubstitutionReasonIronIronIngotfalsenullCopperCopperIngotfalsenullWheatWheatfalsenullThe narrative for a call that asked about
Ironreads "In-cycle fair price for IronIngot trending down". The disclosure machinery already exists and fires correctly on the real-world axis —fair_price(item=CopperIngot)returnssubstituted: truewith a well-written reason. It simply is not wired to the in-game axis.Note that neither
IronIngotnorCopperIngotappears in the ledger at all; the traded forms areIronBarItemandCopperWiringItem. So the rewrite is also mapping to names the market never uses, which is a plausible root cause for defect 1.Working correctly, do not regress
The real-world benchmark axis is sound: correct series ids (
PCOPPUSDM,PWHEAMTUSDM,DCOILWTICO,PIORECRUSDM), sane units and frequencies, correct trend arithmetic, working cache (cached: trueon repeat), and clearunknown_itemerrors.Lower-severity, same tool
serverhas no observable effect — no field echoes which server was used, and a cross-server call returns an identically shaped payload.cycle_idhas no observable effect and is not echoed; the narrative still reads "calibration not yet recorded for this cycle".unknown_itemsuggestion list names 5 items (Board, Copper, Iron, Oil, Wheat); the schema documents 9, andCopperIngot/Lumberresolve fine despite not being suggested.Acceptance criteria
fair_price(item=Wheat)against a server with a Wheat market returns a non-nullinGameMedian,inGameCurrencyandinGameVerdict.substitutedandsubstitutionReason, matching the real-world axis behaviour.serverandcycle_idare either honoured and echoed in the payload, or removed from the schema.no_in_game_market_for_*.Refs
04a1ae2.