Skip to content

Remove dead get_market_positions and fix 0.5.0 ImportError cleanly#385

Merged
crthpl merged 1 commit intomainfrom
fix/metagame-remove-dead-market-positions
Apr 13, 2026
Merged

Remove dead get_market_positions and fix 0.5.0 ImportError cleanly#385
crthpl merged 1 commit intomainfrom
fix/metagame-remove-dead-market-positions

Conversation

@crthpl
Copy link
Copy Markdown
Contributor

@crthpl crthpl commented Apr 13, 2026

Summary

Supersedes #384. 0.5.0 crash-looped every metagame consumer because import metagame raised AttributeError on websocket_api.MarketPositions — a class that does not exist anywhere: not in the proto schema, not in the Rust backend, not in the generated websocket_api module. get_market_positions referenced two phantom messages (MarketPositions and GetMarketPositions) and could never have worked at runtime; it was only invisible because 0.4.x had from __future__ import annotations making the return type lazy.

0.5.1 plastered over the crash by re-adding the future import. That works, but it permanently hides similar dead references from ever being caught at import. Better fix: delete the dead method, keep annotations eager.

Positions are already streamed to clients via the Portfolio message on the normal ServerMessage channel, so nothing is lost by removing this method.

Bumps to 0.5.2.

Test plan

  • uv sync && uv run python -c "from metagame import TradingClient" succeeds
  • inspect.get_annotations(method, eval_str=True) resolves for every TradingClient method (no other dangling references)
  • uv build produces 0.5.2 artifacts
  • After release, bump metagame==0.5.2 in scenarios and confirm Fly smoke checks pass

`get_market_positions` referenced `websocket_api.MarketPositions` and
`websocket_api.GetMarketPositions`, neither of which exist in the proto
schema, the Rust backend, or the generated websocket_api module. The
method could never have worked — it was only invisible because 0.4.x
had `from __future__ import annotations` making the dangling return
type lazy. 0.5.0 dropped the future import, surfacing the bug at
`import metagame` time and crash-looping every consumer.

0.5.1 plastered over it by restoring `from __future__ import annotations`,
but that approach hides similar dead code from ever being caught.
Instead, delete the method (positions are already streamed via Portfolio
on the normal ServerMessage channel) and keep annotations eagerly
evaluated. Bumps to 0.5.2.
@crthpl crthpl requested a review from a team as a code owner April 13, 2026 22:06
@vercel
Copy link
Copy Markdown

vercel bot commented Apr 13, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
platform Ready Ready Preview, Comment Apr 13, 2026 10:06pm

Request Review

@crthpl crthpl merged commit 685ee0c into main Apr 13, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant