Generate /players/{account_id}[/{match_id}] locally after POST_GAME via OpenDota; publish to OSS only when public_share is enabled.
Co-authored-by: Cursor <cursoragent@cursor.com>
Drop the accidental itemcat_*.png.png downloads by stripping the
existing .png suffix before download_icons appends one. Leave daily
leaderboards/streamers and ignored OpenDota/STRATZ caches uncommitted.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use a single fail-fast /proPlayers probe so rate-limited runners start the
15-pro refresh batch immediately from watchlist names.
Co-authored-by: Cursor <cursoragent@cursor.com>
Continue with watchlist names when /proPlayers is rate-limited, and soft-fail
the pro-matches step so daily can still refresh leaderboards and streamers.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop the long retry chain after three consecutive 429s and restore prior
hero cells so a burned IP no longer stalls the whole daily tier.
Co-authored-by: Cursor <cursoragent@cursor.com>
Keep restored cache and continue the tier so a burned runner IP cannot
block leaderboards, pro-match rotation, or streamer refresh.
Co-authored-by: Cursor <cursoragent@cursor.com>
Daily now refreshes the 15 oldest watchlist pros, keeps prior cache for the
rest, fails fast on consecutive 429s, and still writes a partial result.
Co-authored-by: Cursor <cursoragent@cursor.com>
v4 is unsupported on this Gitea host and was failing the job after a successful refresh; keep continue-on-error so summary upload cannot mask refresh success.
Co-authored-by: Cursor <cursoragent@cursor.com>
Linux self-hosted runners without python3-venv fail job-local venv; use pip --break-system-packages so refresh can still install deps.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use a job-local venv so pip install no longer fails with externally-managed-environment on the Mac mini runner.
Co-authored-by: Cursor <cursoragent@cursor.com>
Path URLs, crawlable hero/mechanics pages, and sitemap make the static site indexable while keeping SPA hydration.
Co-authored-by: Cursor <cursoragent@cursor.com>
Move role filters between grid and detail, fix skill video/text layout and detail height jump, unify item dividers, drop OpenDota matchup cross, sync docs and assets.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ship Web refresh cache/lock, mobile demand gate, matches 职业/国服 filter, and related site updates through 0.5.84.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ship top-level #/matches with pro watchlist defaults, bump site to 0.5.71, and document the flow in AGENTS/README.
Co-authored-by: Cursor <cursoragent@cursor.com>
Separate the local recognition, web publishing, and shared data paths while preserving direct script execution and existing site content.
Co-authored-by: Cursor <cursoragent@cursor.com>
Track reusable CF analytics utilities and the commercial prospects document while keeping local probe/sample artifacts untracked.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ship OpenDota counter-stats reordering for feared items, finalize SITE_VERSION/docs for rankings/streamers/trends/matches/mechanics and draft archetypes, and ignore regenerable Web data caches.
Co-authored-by: Cursor <cursoragent@cursor.com>
Include Gitea web-daily/weekly/patch conclusions and Cloudflare Pages deploys; ship the refresh workflows so those signals exist.
Co-authored-by: Cursor <cursoragent@cursor.com>
Gitea Actions runs notify_site_traffic.py at 09:00 CST using Cloudflare GraphQL and a Feishu webhook (secrets from keyzoo).
Co-authored-by: Cursor <cursoragent@cursor.com>
Add STATIC_ASSET_BASE so Cloudflare Pages ships ~2MB HTML/JS/data; icons served from climperor OSS via _oss_static_assets.py. New machines can deploy without local fetch scripts.
Co-authored-by: Cursor <cursoragent@cursor.com>