gem
v0.13.0

Changelog

This page is a curated narrative summary of the parser, validation, and report changes that materially affect how gem behaves today.

It is intentionally short-range. The full per-release SemVer history lives in the canonical CHANGELOG.md.

September 2026 — In-game clock and match end

Replay ticks keep running while a match is paused, and many replays keep recording for minutes after the Ancient falls. ParsedMatch.game_clock now records observed pauses and converts ticks to the in-game clock exactly as OpenDota reports it, and ParsedMatch.post_game_tick marks when the match ended. OpenDota-compatible objective, ward-expiry, lane-window, and teamfight-XP times are pause-aware; reports show the in-game clock and the real match duration; and Roshan, smoke, and ward-impact windows end with the match. This let game_closing fire on real replays for the first time, so the Roshan calibration corpus and tag frequencies were re-audited.

See Match data and the Roshan calibration record.

September 2026 — Farming route evidence

Farming Patterns now reconstructs camp-local routes with explicit zone, sample-gap, movement-discontinuity, and micro-exit rules. Public route, segment, and point records preserve neutral interaction, fresh cumulative XP/gold deltas, sampled coverage, strength, and missing-evidence reasons; four flat DataFrames expose the same route facts. Dense player records retain total-earned XP separately from level-local XP, and report downsampling preserves route discontinuities. A comparative context layer adds explicit camp topology, bounded local presence, modeled observer coverage, lane towers, objective and territory provenance, composable tags, and a fourth normalized tag table. The report exposes why each tag appeared; the older safety/pressure scorer remains available only as a compatibility API and collapsed formula reference.

See Farming Patterns and the calibration record.

September 2026 — Roshan evidence calibration

Roshan conversion now records protocol/fallback team provenance, explicit Aegis fate sources, and engagement-aware fight associations. Unknown structures and Tormentors remain visible and uncredited. The report cross-links Roshan windows with fight positioning and no longer renders the deprecated aggregate score or exclusive label. Flat DataFrame exports and a reproducible real-replay corpus support downstream analysis; the tag ruleset remains explicitly provisional.

See Roshan Conversion and the calibration record.

June 2026 — v0.4.x

The 0.4 line is an OpenDota match-API parity effort plus report asset-cache tooling. The supported top-level API (gem.parse, gem.ParsedMatch, gem.find_player, …) is unchanged — everything here is additive.

June 2026 — v0.3.0

A structural + correctness release. The supported top-level API (gem.parse, gem.ParsedMatch, gem.find_player, …) is unchanged.

May 2026

March 2026

  1. Replay Edge Cases
  2. Farming Patterns
  3. Roshan Conversion
  4. Estimate Vision
  5. Vision Modifiers