Patch Notes

Ashen Throne Changelog

Every balance pass, fix, and feature shipped to the open beta. Newest first.

a7dc358

New & Changed

  • the Gauntlet's crawler and bosses are live 3D only, with one retry at Low, then the card (304ce60)
  • live 3D on iPhone and iPad, iOS Safari defaults to Graphics Low (4fc8ae7)
  • staging soak skill and kit (owner-provisioned profiles, waves, validators) (#1516) (2b634da)
  • ops: alt-bot lockout tool plus its contract guard (ea5566d)
  • telemetry: recover the two numbers the error feed could not see (7c221d3)
  • telemetry: give client errors a severity so the feed is signal (ad81c54)
  • universal ground is the only map ground, old ground files retired (eab4f54)
  • region backdrops, so no surface outside the map reads the ground set (35e38f5)
  • universal ground is the only ground while it can run (d3ea9d9)
  • map inspection draws the living map alive for judging (698e03e)
  • modern map radial, energy borders, region chips, map pins, position pulse (49873d3)
  • firelit windows flicker in the capitals at night (3c40266)
  • crawlers leave wheel tracks that fade behind them (5737338)
  • tumbleweeds roll across the plains and egrets keep to the frontier (1864d81)
  • chimney smoke over the capitals and dust devils on the plains (5b1a277)
  • cloud shadows drift across the world map; bird and firefly fixes (6458805)
  • birds, fireflies, falling leaves and new canopy light on the world map (8fee319)
  • map plate chips, colour-coded plates, darker 3D shadows, garage drag fix (4b1a10a)
  • map nameplates, crawler ground glow, night light-box fix (d023852)
  • sunlight shafts fall through the Verdant Reach canopy (b4e6593)
  • smoke, steam, fire and embers rise from map props (7deb3ed)
  • universal textures step 2b, ranged login warm and far-view prime (41a63ac)
  • universal textures step 2a, map ground streams one UASTC file per layer (d898aa0)
  • plants sway in every region of the world map (4d32c39)
  • universal textures step 1, Basis UASTC transcoding in a worker (1faacd9)
  • boss shot hitboxes match the drawn body; EmberGen hits on bosses (ab1f9cc)
  • smoother brute walk, 32 frames at 24fps (ef8d38f)
  • industrial sites and captured districts smoke on the map (a7372f4)
  • add G18 Gauntlet enemy models and v3 atlas bakes (d7b0be4)
  • swap EmberGen flipbooks in for Gauntlet, map and replay effects (44bfefb)
  • rebuild G17 VFX library from isometric sources (d9f03e4)
  • add palette-driven EmberGen VFX library (cec08af)
  • Gauntlet fire attacks burn with EmberGen flipbooks (cef9da0)
  • add Knell void fire manhwa loop atlas and proofs (06a0e35)
  • burning wrecks on the map use the G10 fire loop (58d063a)
  • add G10 manhwa burning wreck fire loop (efebd49)
  • EmberGen explosion flipbook on crawler and boss deaths (1621f39)
  • live 3D platform gate, outcome telemetry, drop dead F2 models (f1c7499)
  • add manhwa explosion flipbook and reproducible art pipeline (883bf80)
  • bake crawler atlases from shared live rig (265d530)
  • live 3D crawler and bosses on by default (31c25ca)
  • paint Gauntlet walls and light the firestorm (e5e236e)
  • render Gauntlet bosses in shared 3D pass (f0b7576)
  • share Gauntlet lighting and geometric normals (4b8c6c7)
  • add live 3D Gauntlet crawler rig (59e0a2e)
  • replace Garage turret with painted Tripo recoil rig (d30cc5a)
  • add live 3D Garage hero and shared crawler rigs (568aa81)
  • add shared map lighting and live crawler night emission (02fe66b)
  • add desktop live F2 crawler proof on the world map (84ae9b0)
  • build real Mark II F2 from Tripo model (c6fdd30)
  • sprite-pipeline: Meshy 7.1 quality flags and the Higgsfield 3D route (fe48aec)
  • add Mark II F2 fallback asset and toon renders (ca8a2d1)
  • crawler map shadow drawn at alpha 0.75 (3a6db8d)

Fixes

  • Gauntlet load bounds stay with their visit and the 3D card stops the stage (3d1c29b)
  • the Gauntlet 3D card is terminal and free, honors crash-guard level 2, and bounds model loads (c533171)
  • an orphaned boss entrance mask no longer draws a rectangle over the live boss (b503cb7)
  • Garage flick timing reads the input time, and its inertia check waits for frames (7ab6e91)
  • the Gauntlet arms the crash guard, and withdrawn rung records read as Low (64464a4)
  • key the tutorial squad-write skip on the sandbox commander id (soak F-007) (c526ed6)
  • an injured defender's event hospital fill takes no troops (7186b5f)
  • address the F-006 review of the update prompt fix (e7a2348)
  • no server writes for sandbox commanders in the tutorial (soak F-007) (f7fc53d)
  • heat pauses while the crawler defender is injured, and the raid mail says why (1a37b70)
  • stop the false Update Available prompt on pages already current (soak F-006) (13e5ec3)
  • an injured crawler defender holds the slot but cannot battle (52456d8)
  • ota: Android manifest download survives a WorkManager stop (f88ca6e)
  • change-scoped guard selection sees .claude paths, calls, arrays and templates (#1518) (32c95cb)
  • the Gauntlet waits for its art instead of showing debug shapes (soak F-003) (#1520) (28a738c)
  • the player picks the crawler defender, and an injured defender stays the defender (19088ba)
  • consolidate the live 3D player notes and correct the iOS claims (cfb24fa)
  • ota: iOS manifest downloads time out on stalls, not on elapsed time (85c2a11)
  • ci: bootstrap the schema in verify-alt-bot-lock section H (8135d9e)
  • staging soak batch 2 (haul panel refresh, site tap, replay HUD, Knell toast, troop refresh, defeat label, message punctuation) (#1510) (a6089a7)
  • repair two staging guards broken by #1511 (#1513) (b26088c)
  • map: warm the shadow atlases the loader has always asked for (2eceeb6)
  • pixi: stop a missed texture manifest costing 4x GPU memory for the session (8a88510)
  • staging soak batch 1 (world boss mail, squad losses, site tiles, Gauntlet exit, defender pick, tutorial conduit, send warning, touch) (#1509) (16de22b)
  • audio: stop a short combat warm from latching for the whole session (ab1e122)
  • ota: size the iOS per-file wall clock to the payload, not a stale literal (c587a33)
  • warm the texture transcoder at the login gate so the first map shows ground (#1508) (6218faf)
  • live 3D survives a Graphics change, and crawlers draw above city art (#1507) (71f36ec)
  • a stale Gauntlet enemy sheet skips its lighting instead of dropping every atlas (#1506) (74bff00)
  • markii summary reports skipped LFS content checks (0ffb571)
  • graphics guards run on a checkout without LFS content, without rg or the EmberGen source (ebb921c)
  • guards follow the merged ground and GPU card, docs reviews refreshed (a5011c8)
  • integrate the universal-only ground merge (receipts, telemetry guard, normals check, one note) (acd896a)
  • page on a second render-process recovery (78fc85c)
  • catalogue three designed-countable client recoveries as benign (1a6f46c)
  • countable errors for the new graphics features, alliance-wide world boss jackpot (abfa776)
  • world boss hidden in the Deep Wastes, one short message per kill, software GL defaults to Low (53ea067)
  • anomaly-scan: stop paging a reinforcement chain as a double-battle (#1503) (4b3acd9)
  • universal ground keeps its lamp light (normals pass sees it under its region key) (9cbb47f)
  • stop warming unused region photos at login; correct Deep Wastes fog docs (689b111)
  • universal ground survives detail-flip evictions, holds one copy per level (d284375)
  • outer wastes region plates drop the eye chip (the ring has fog now) (6d9f444)
  • smooth dust devil loop, devils only in Sunder Basin, smaller tumbleweeds (0aaaa60)
  • wheel tracks sit under the crawler, and track and hearth hardening (18c1a98)
  • leaves hold still in rising wind, rain lays the dust, map sheets retry (4cdca12)
  • storms bend map plants and night fire glow dims behind vehicles (7983e15)
  • map ground detail follows the focus region, no stuck far mini (396df0f)
  • translucent void fire, fire loop and explosion flipbooks (f9073f3)
  • stamp the Gauntlet renderer owner before the boss audio gate (a7b7483)
  • Citadel capture smoke reads as columns, two layers each (d485b97)
  • brute death keeps the walker's size, with a blast and landing dust (5ca496e)
  • translucent smoke in the effects, no muzzle smoke, Gauntlet launch race (23d3b5e)
  • native skips the G18 enemy models no runtime loads (50dda21)
  • flipbook manifests ride the code plane; exempt CRAWLER_WRECK from the advisor ledger (5c55bdf)
  • restore shaded form to G18 enemies (681e246)
  • make G18 enemies readable against Gauntlet floors (f5eaaff)
  • soften G17 dust puff interior edge (2c4e94d)
  • the Gauntlet crawler keeps its original size (5bd1bd2)
  • default crawler reads the same size as the Mark II (71f0fd0)
  • map wrecks are crawler-sized and drop the loot bag (394555a)
  • boss HP bar syncs first in the map render again (954bc8c)
  • native ships inspection art as its KTX2 twin only (1209496)
  • wreck fire does not move the wreck loot label (d4d0ff6)
  • live 3D loads on the built web and store clients (7fe7532)
  • boss HDR targets actually allocate as half float (bd7a7fc)
  • live 3D review fixes (gate fails closed, versioned models, held frames) (058f28c)
  • restore explosion volume and warm smoke for G9 round 2 (c08df87)
  • draw the new Gauntlet walls at Graphics Low (67ed5f4)
  • measure crawler ground footprints from the live rig (c3021a5)
  • cache the live 3D model files at the edge (4aa8d94)
  • restore crawler proportions and use GPU proof browsers (9ed67bc)
  • classify gauntlet normal buffer writers (96ea69f)
  • light Gauntlet fire receivers and ground wall kits (a68b557)
  • preserve Gauntlet boss detail at hit peak (d5a9fdf)
  • restore Gauntlet boss bake identities (89dc4d6)
  • unify live crawler Blender view and skin selection (1a9e4b6)
  • share map crawler materials and audit G2 colour parity (5c99b32)
  • align Gauntlet crawler shots and atlas presentation (82c2179)
  • move after an unfinalized arrival departs from the arrival tile (cac3022)
  • preserve painted map exposure and night lighting (ca28bb6)
  • finish regional inspection art and mobile closer zoom (5c34141)
  • ground crawler footprints and unlock sharp inspection zoom (0af9ad9)
  • contain crawler footprints and gate inspection zoom (a61e68c)
  • correct live crawler colour and soften shadow at 38 degrees (5884dc3)
  • live 3D crawler camera at the owner's 38 degree elevation (8b1af19)

Performance

  • night-light occlusion and prop fx keys do their work once (f8f0c5d)
  • smoother map and Gauntlet on phones and web (render reuse, glow ring, half-rate lighting) (a205716)
  • map normals pass skips a terrain that can only draw black (ed36c07)
  • finale duo at Graphics Low renders one boss fresh per frame (3eea954)
  • 3D finale duo and map at Low, cheaper lite pass (f87c272)
  • run the Gauntlet 3D path at Graphics Low with a lite pass (d84f534)
  • 1024 model textures in the field, 3D opt-in on Medium phones (e261a90)
  • load Gauntlet 3D models instead of their 2D atlases (0b5341a)

Internal

  • re-record graphics receipts after the second Gauntlet review fixes (2964c29)
  • re-record graphics receipts after the Gauntlet review fixes (840034e)
  • context and telemetry guards follow the live-only Gauntlet (a585111)
  • Garage wheel contact speed measured per simulated second (d158d3b)
  • re-record graphics receipts for the live-only Gauntlet (6b491ae)
  • Garage flick replays timed input on a slow renderer (4190dd5)
  • re-record the gauntlet normal-writers receipt for the game.html meta (93abfd0)
  • bound the defender race legs so a collision cannot hold the row lock (bb333bf)
  • pixi: make the non-latching manifest assertion distance-independent (5a27e88)
  • iOS living-map frame budget, autopilot GL counters and hotspots (3bedd60)
  • re-record rig and Gauntlet boss receipts after the smoke and duo changes (874c069)
  • re-record Gauntlet and rig proof receipts after the brute and boss-hit changes (787a693)
  • re-record the Gauntlet and rig proof receipts after the effects review (1b71714)
  • re-record receipts and announcement coverage after the G18 enemies (a37210f)
  • re-record Gauntlet proof receipts after the effects swap-in (650b6b1)
  • re-record Gauntlet proof receipts after the flipbook fire (65eb54c)
  • re-record rig proof receipt after the wreck resize (2162ff5)
  • re-record map lighting receipt after the asset resolver change (36bdf66)
  • re-record proof receipts after the asset resolver change (7c10a4f)
  • store smoke tolerates the offline live 3D gate line (b6e3b92)
  • re-express guards the 3D branch moved, re-review docs pages (d7c2970)
  • re-record proof receipts after the half-float boss fix (e58d52a)
  • re-record proof receipts after the live 3D review fixes (3e97c18)
  • guard the Gauntlet live-3D load bounds and atlas fallbacks (fda2c34)
  • register the G8 turret comparison in tile space (1723c2f)
  • re-record 3D proof receipts against the live-default tree (4c74c81)
  • player notes say a Gauntlet GPU failure keeps the run (4869123)
  • the Gauntlet card is a free leave, crash-guard level 2 and the model load bound (93a7917)
  • player notes say Gauntlet bosses and crawler are always 3D (42159e8)
  • note the orphaned print-mask check (C8) in the 3D policy guard (2adfe2b)
  • the Gauntlet is live 3D only, the ladder has no 3D-off rung (69a857c)
  • staging soak record, gate 11, and the soak replaces the chaos-team gate (#1519) (5bc5398)
  • re-stamp docs pages after merging staging's config changes (e65c204)
  • re-stamp the barracks docs page review after the defender section (f4aa950)
  • re-stamp docs pages sourced from gameConfig after the live 3D gate change (fbd1263)
  • regenerate the guards index for verify-alt-bot-lock (fa381ee)
  • record the 2026-09-27 alt-bot lockout and its forensics (6113c8e)
  • CLAUDE.md for Opus 5.5 (owner rules, narrowed Rule 6, pointers, area files) (#1512) (e0beeaa)
  • player notes for the three transient-failure fixes (2d9296c)
  • condensed staging soak plan for the next session (gate 11) (fd315ac)
  • universal-only ground on web and iOS, lamp light, Verdant night (2e29065)
  • rendering docs, graphics skills and CLAUDE.md cleanup before the map rework (fd10751)
  • iOS test plan for universal textures (62613ab)
  • flipbook translucency run log, announcement record refreshed (7c187ce)
  • gate 8 re-run on the merged tree, announcement record refreshed (a7e8597)
  • Pixel 3a native build performance and memory, live 3D announcement coverage restored (5f31d65)
  • internal-only announcement disposition for the duo render budget (8a0f8e4)
  • plan records the enemy decision, brute polish and boss hitboxes (6e98bc4)
  • test-run log for the effects review and translucency pass (eda110c)
  • plan records the effects review and the G18 restart (c05c2b0)
  • G15 fog needs an owner call, the map already has tiling mist (ecc563b)
  • test-run log for the G18 enemies, G16 smoke and the gate 8 sweep (9f67e97)
  • test-run log for the EmberGen effects swap-in (9e8f9cb)
  • announcement notes for the Gauntlet flipbook fire (df7a078)
  • plan the fire and smoke effects library (eedd660)
  • plan the next EmberGen effects and the crawler size fix (1916e9f)
  • test run for live 3D on built bundles and native (3383c88)
  • re-record live 3D announcement notes (e5f71d2)
  • readiness gates 4, 7 and 10 closed (9ee4415)
  • re-record live 3D announcement notes after the loader change (c6ccecd)
  • announcement notes for live 3D crawlers, bosses and effects (7553240)
  • live 3D follow-ups test run and coverage row (d151e9e)
  • live 3D performance and memory report, coverage log (944e11b)
  • Garage and Gauntlet 3D parity plan with the turret design (436fbf7)
  • overnight judgement package for the 3D crawler size, zoom and lighting goal (f31b5ab)
  • style canon names the canonical map sun instead of upper left (a805d21)
  • defer the world refactor, set the 3D and lighting session goal (2b3df34)
  • natural world layout, terrain pipeline and runtime options in the refactor plan (8b09408)
  • world scale refactor plan (bigger tiles, relief terrain, frontier flip) (c8d5960)
  • no default decimation for 3D models (6a95094)
  • render-scale refactor ruling, one crawler per tile (299744a)
  • fantasy-manhwa style canon for all new art assets (2e10ddc)
  • lighting track follows the 3D crawler in the priority order (63988e5)
  • record 3D-first priority ruling for the restyle track (396998c)
  • style model training launched, F2 3D candidates handed to astra (e1faa7d)
  • lighting track and tool list amendment in the graphics plan (effdb49)
  • add crawler shading and controlled camera studies (ebfa48d)
  • astra review of the graphics plan, response, and the manhwa restyle section (6192bdb)
  • living map section, swaying doodads, smoke, fog depth and god rays (9e10c69)
  • correct the MeshStandardMaterial claim in the 3D crawler stack (1e2ab12)
  • 3D crawler on 2D map, root cause of the iso jank and a rendered proof (12abed2)
  • graphics fidelity research, 2.5D crawler layer feasibility and paid tool stack (0e4fb70)
  • keep the boss-audio wiring pin in reach and re-stamp docs pages (3db2fcb)
  • rebind the iOS live 3D disposition after merging staging (9c00a8a)
  • retire 30 wired-in look and copy guards (batch C1) (#1517) (8c2f256)
  • fold 21 duplicate guards into their absorbing guards (batch B) (#1515) (21eadc5)
  • refresh the disposition hash after merging staging (ba67490)
  • record the internal-only disposition for the telemetry and OTA changes (731fbd4)
  • faster iteration (lenient receipts, comment-blind hashes, parallel guards, one-command re-record), CLAUDE.md and memory cleanup (2ef5f50)
  • re-record the rig proof receipt after the universal ground merge (ad7d4f9)
  • archive the G18 enemy restyle in art_assets (8e4946e)
  • rebake crawler atlas manifests for the Mark II sized default (86dc65f)
  • rebake crawler atlas manifests after the asset resolver change (6a2f3ed)
  • rebake crawler atlas manifests after the half-float pass fix (83f11d4)
  • rebake crawler atlas manifests after review fixes (8af6448)
  • rebake crawler atlas manifests after the live pass edit (f2abb67)

Other

  • l10n: auto-translate locale artifacts (60e3d0d)
  • l10n: auto-translate locale artifacts (b9b6fb6)
  • l10n: auto-translate locale artifacts (bdc95da)
  • l10n: auto-translate locale artifacts (e0e27ff)
  • l10n: auto-translate locale artifacts (d5fca8e)
  • l10n: auto-translate locale artifacts (b1e2261)
  • l10n: auto-translate locale artifacts (2c5eee9)
  • l10n: auto-translate locale artifacts (6781baa)
  • l10n: auto-translate locale artifacts (846e1da)
  • l10n: auto-translate locale artifacts (37515b0)
  • l10n: auto-translate locale artifacts (a6965b9)
  • l10n: auto-translate locale artifacts (220e61c)
  • l10n: auto-translate locale artifacts (e01828a)
  • art: inspection ground, overlay and prop art for every tiled region (13016f6)
  • wip: live crawler round 3c partial (inspection band wiring), stopped for tile-scale refactor (eecd805)
  • art: Bonefields 2048 inspection ground and overlay, refreshed compressed twins (60e48e9)
  • wip: live crawler round 3 partial (own LOD, shadow, zoom 192), stopped for new sizing goal (77e2236)
  • art: Mark III D image-to-3D candidates from Tripo H3.1 (7b439b1)
  • art: cut LoRA v1 Bonefields into the client and capture the player view (355358d)
  • art: bonefields subregion restyled through LoRA v1 with before/after mock (3222d27)
  • art: first outputs from the trained F style model (LoRA v1) (910b4c3)
  • art: raw Tripo F2 candidate strip (9257572)
  • art: Mark II F2 image-to-3D candidates from Meshy 7 ultra and Tripo H3.1 (7fe2ef2)
  • art: F restyles of the ribcage prop and Thornvale, training set for the style model (4b65197)
  • art: toned F ground tile candidates for bonefields (2f88c0c)
  • art: F style map-wide test on ground, city and prop, plus the execution log (b5c2017)
  • art: second Scenario style pass for the Mark II, inked illustration and painted webtoon (a02330f)
  • art: first Scenario style-direction pass for the Mark II crawler (afc6ec9)
db12db8

Fixes

  • shop — a free offer or pack skips the ASH debit instead of tripping the strict spendAsh guard (b5b6d4f)
  • polish Gauntlet UI and align event leaderboard scores (#1475) (0edcd77)

Internal

  • emission — SS Z pins every pack and offer cost finite, anchors the guard on the debit call (7564156)
  • announcements — note that the Daily Free Drop and New Player Pack claim again (e1341a0)

Other

  • l10n: auto-translate locale artifacts (4c9efcd)
ba181df

New & Changed

  • unify event UI, mobile Cup information and shared typography (#1466) (7eddbd1)
  • cup — a kicked or disbanded member keeps their Cup share, a leaver forfeits it (ee0696b)
  • zealy — gate the launch-sprint power quest to new accounts, share-first sprint plan, USDG figures (cb632b3)
  • docs — a review record, and the seven systems the first pass left out (09b18c9)
  • l10n — landing backfill for all five shipping locales (4ef08f1)
  • l10n — landing backfill for the token and weekly cup pages (e3c1488)
  • docs — a public documentation site at /docs (582c9d8)
  • cup — rebuild the /cup landing page on the info-bubble idiom (3cde71f)
  • weekly Alliance Cup with fee-funded pool, prize balances and receipt-proven payouts (97fa89f)
  • token — token page cut from 662 visible words to 183, every explanation moved behind info bubbles, word budget guarded (7baa0bd)
  • token — allowance card on the hub token page behind a signed-in route; guards and docs for the emission system (1838863)
  • token — allowance ASH counts as spendable in the shop and rename UI; shop and rename payloads carry it; testnet allowance e2e script (bd545cc)
  • token — Emission ASH server core: daily staking snapshot, spend-first allowance lots, expiry, one ASH debit helper (92229ab)
  • zealy — $THRONE launch sprint quests: wallet-linked, throne-hold by tier, throne-staked, priced on the verified wallet read on chain (8828865)
  • token — 15% timelocked team buy, staking + team-lock UI states on the token page, graduation marketing plan (4101c84)
  • token — staking vault hardening pass: static analysis, random-drive invariants, Codex review fixes (2c0329f)
  • token — canLaunch check for the Pons launch wallet on the operator page, CLI and runbook (fa20113)
  • token,vault — $THRONE moves to Robinhood Chain via Pons; vault becomes multi-collection with legacy Base imports (90e5390)
  • token — $THRONE launch state, hub token page with live CA flip, staking contracts, launch runbook (08d92bb)

Fixes

  • contracts — review pass on the audit fixes, launch-day path driven, Base chains keep a public RPC (055134d)
  • contracts — vault deploy fails closed without a Pons factory or launcher, guard drives the authentication helper (e52c86d)
  • contracts — authenticate the venue token against the Pons launch record, probe a real amount (7557fe7)
  • contracts — close the astra audit round 1 findings on the team lock and both deploy scripts (39f857c)
  • token — publish the chain's public RPC in the status payload, never the server's keyed one (bbcf40f)
  • l10n — split the /cup fine print so it stops rendering English (31a859a)
  • cup — pay the projection on the roster the sheet pays on, and say so in the rules (41ef769)
  • cup,events — make the (i) tappable on a phone and stop labelling the prize USDC on Base (234725b)
  • dev — let the landing dev server proxy to an https API target (8065030)
  • cup,l10n — make the cup landing page and the shipped translations match the weekly config (c949a8d)
  • debug — a concurrent debug spawn onto the same tile retries instead of a 500 (41d5c44)
  • token — hold a pending stake until its own receipt, bound every page fetch, judge challenge expiry at claim time (5882713)
  • token — close the astra round 4 findings on the lock pill, allowance founding and the cliff anchor (3f0900c)
  • token — close the seven blocking findings of the astra round 3 review (bde0cd8)
  • token — re-read the team lock and a connected wallet's vault on every poll, not only on an address change (8d9c045)
  • token,vault — Codex round-two hardening for the $THRONE launch and the multi-collection vault (28c6556)

Internal

  • token — per-site debit exemptions, concurrent spends, alliance charge guard re-expressed for the one ASH debit; Zealy guard fails without a database (77e324f)
  • token — real-browser e2e of every staking and allowance state over the WalletConnect relay; fix stale address after reset and future-tense copy beside a live vault (ccd73b0)
  • test-runs — audit fragment in the house format (9dae76c)
  • launch — audited team lock redeployed on Robinhood testnet (69548c4)
  • launch — T-7 gate readings for the 2026-09-28 launch (3bbbdcb)
  • launch — USDG confirmed on the Pons create page, launching from the Safe via Safe{Wallet} WalletConnect (f56ea6e)
  • zealy — all fifteen sprint quests drafted, with the stand-ins each API task carries (c0f5ac3)
  • zealy — record the drafted sprint board, the XP raffle confirmation and the API-quest blockers (74f768f)
  • announcements — internal-only disposition for the Zealy new-account gate (ec067cf)
  • distinguish mobile rewards information from token transactions (#1458) (98e6cce)
  • token — record the Robinhood testnet rehearsal addresses and the lock transfer (f62393d)
  • zealy — classify the new-account gate in the advisor ledger and re-record the docs reviews (bff2322)

Other

  • l10n: auto-translate locale artifacts (b52be81)
  • l10n: auto-translate locale artifacts (5a7c88f)
  • l10n: auto-translate locale artifacts (e713217)
  • l10n: auto-translate locale artifacts (e052e88)
  • l10n: auto-translate locale artifacts (b5af211)
  • l10n: auto-translate locale artifacts (a1e957c)
  • l10n: auto-translate locale artifacts (f5b6bdb)
  • l10n: auto-translate locale artifacts (2205a2a)
  • l10n: auto-translate locale artifacts (3c4a0e4)
747d1d4

Fixes

  • debug — extraction debug spawns take a free tile, force-loot and runLootCycle fire reliably (#1454) (747d1d4)
  • extraction — a retreat forfeits only the reveal on screen; carry-cap guard runs on one server (#1453) (3959ccb)
  • amm — a Market Square reward nobody received stays in the pool (04990f7)
  • amm — pay the Market Square reward out of the swap fee instead of minting it (6055b58)
  • db — the balance promotion survives a pool statement timeout (1c50eb0)
  • db — store credit and resource balances as double precision instead of float4 (c49d9c4)

Internal

  • amm — derive qa-amm-routes expectations from live state (ae1103c)
  • coverage matrix row and gaps for the AMM Market Square reward fix (ad2f516)
  • coverage matrix row, Gap #68 closed and run fragment for balance column precision (6ac391e)
  • record MCP guide publication (19eda05)

Other

  • l10n: auto-translate locale artifacts (d3824a9)
b585695

New & Changed

  • publish Ashen Throne MCP guide (b0b604e)

Fixes

  • ci — the QA server job binds a free port and fails loud if its own server dies (#1445) (8e2a48e)

Internal

  • record MCP release audit (9bf2448)
fcc2f1e

New & Changed

  • replace deals popup with maintained announcements inbox (135fadc)

Fixes

  • extraction — never let the tile index crash boot or abort a sweep (#1438) (fcc2f1e)
  • ci — run the SEO browser guards when SEO content changes (#1439) (538e793)
  • route Playwright guards to browser CI (adcfb14)
  • resolve staging announcement conflicts (1e50912)
  • run serial PR verification on isolated hosted capacity (a8f9b6a)
  • allow Postgres service initialization on busy CI runners (1f38bdc)
  • allow full changed-guard sweep to finish on shared runners (5a12c12)
  • align announcements CI runners and test evidence (bb40bb6)
  • anomaly-scan — probe faucet_new_source baseline once per candidate source (#1428) (a1d28d5)
  • pvp — a site takeover takes only the site, and a crawler kill moves unbanked haul instead of copying it (#1434) (d8b3e09)
  • prevent map lighting texture crashes and preserve terminal recovery gate (#1431) (8730241)
  • shop — the deals sheet opens the ASH tab when the lead deal is first-purchase x2 (#1429) (02b3a24)
  • extraction — dedupe never nudges a quest_objective tile (player_quests stores its target) (25f8d91)
  • extraction — nothing stacks on a tile, one occupancy set plus a unique (x, y) index (35bd02c)

Internal

  • de-flake two staging guards (tile-index fixture collision, alliance objectives race) (#1440) (0f2d7c7)
  • wait for asynchronous history and completion mail writes (895a656)
  • isolate SEO release dates (a41f0cf)
  • fixtures — takeover-loss-attribution seeds each fixture site on its own tile (ea01577)
  • fixtures — fixture sites resolve to a free tile under the UNIQUE (x, y) index (44b7355)
  • record live SEO guide verification (e3e37ce)

Other

  • l10n: auto-translate locale artifacts (c9120a6)
4d2c976

New & Changed

  • schedule approved MCP guide (a4be0a7)
  • prioritize Ashen Throne MCP guide (e855eba)
  • improve autonomous SEO publishing (f7663a1)
58ed7f8

Fixes

  • landing — /mcp overflowed 220px on mobile and its CTA was invisible (#1425) (58ed7f8)
0e5ae66

New & Changed

  • gauntlet — manhwa colour grade on the whole scene (d1ae453)
  • mcp — get_surroundings, what the player's map paints, through the one visibility owner (94f01ab)
  • mcp — telemetry family, dashboard tab, refresh and STOP audit, two rate anomaly checks (cb9b742)
  • ops — faucet watch, a reward source paying above its own baseline pages (1b76223)
  • ops — dry-run clawback for the Signal Conduit squish (acea52c)
  • mcp — planner checks the current squad's power first, changes formation or commander only when it is inadequate (488e841)
  • MCP phase 2, the agent plays extraction through the game's routes with a simulated planner and an in-game spectator (9f90c4f)

Fixes

  • guard — two stale verify guards that block the promote's CI (#1420) (0e5ae66)
  • survivor — release the pointer ledger from window-level up/cancel so a finger lifted over the HUD cannot kill steering (c6e9092)
  • tutorial — guest delete disarms the tutorial nav lock so the next guest gets the prologue (44afbb8)
  • map — replace night-light render targets on viewport change instead of resizing in place (fb0b12a)
  • combat — B2c must bound by the SPENDING slot's own gap, not the side's (2ab749f)
  • ops — take the faucet baseline per ACTIVE day, and exclude the real operator-mail tag (cb34a17)
  • mcp — game icon in the server info, the game address for the host, the AI chip bottom-centre (5917652)
  • ops — make the clawback's RUN ONCE claim true by construction (5922eca)
  • discord — a per-row answer must not strand a parked role-sync row either (b487afc)
  • replay-oracle — walk every entry family in the resolver's emission order (1f7375d)
  • combat — Thor's Fist banks Static Charges for the side, not the slot (d001516)
  • siege — key the state cache on the rotation row so a leader handover cannot freeze the phase (2794d33)
  • ops — clawback squishes deployed accounts and runs once (207daf0)
  • discord — a subsystem refund must not un-park a parked role-sync row (7517977)
  • replay-oracle — apply the primary link share before the splash families (0a0e0f9)
  • map — extraction site ground highlight paints under the site sprite (#1405) (b3f9956)
  • mcp — round eleven of the Codex grade, a bench under the row lock, return custody keyed by commander, the game's own away census for eligibility, structured planner failures and the newest refresh wins (efd83ca)
  • mcp — round ten of the Codex grade, the defender rule under a concurrent assignment, agent loads always refreshing the Barracks, and return-raid custody in status, fingerprint and census (b7a49e1)
  • mcp — round nine of the Codex grade, agent notifications observed not answered, the defender protected at the routes, deploy shortfalls from the reload, the authoritative squads-out census, and a false Gauntlet blocker on every plan (c0544dc)
  • mcp — round eight of the Codex grade, the deploy bound to the verified recipe revision inside its transaction, UUID idempotency keys and no move while a squad is out (5373366)
  • mcp — round seven of the Codex grade, revision-bound loads verified cell by cell, stage-aware post-write failures, no worker timer floor and queued-job expiry (619331f)
  • mcp — round six of the Codex grade, a committed march never a throw, the site-zone move target, the verified load, a deadline-bounded worker and any adequate live squad kept (a0d2d7f)
  • mcp — conservative wave bound, garrisoned sites refused, a committed march is never a 400, no plan redirects, the e2e follows the plan as written (22c2e24)
  • mcp — bounded move preflight, unknown outcomes on every hop, plans end in a replan after a move, planner simulates only the reachable waves (84c9573)
  • mcp — deadline bounds the route wait, lost answers are unknown outcomes, arrival wait is a state predicate, projected wallet, replan after a city exit (846727f)
  • mcp — STOP fenced at the request, grant revocation at mint, deadlines through the planner queue, arrival wait in the plan, independent NPC draw (9d90f9a)
  • mcp — phase 2 hardening from the Codex grade, no sign-in tool, STOP on the home shard, planner simulates the wave sequence from free troops on a worker thread (0f8b0b8)

Performance

  • db — index the live-objective set so the map read model stops seq-scanning player_quests (5c89bc6)

Internal

  • landing — tell players to keep Claude's detected connector defaults (781b492)
  • ops — record the 2026-09-10 Signal Conduit clawback run (a67bb40)
  • MCP phase 2 staging e2e run (56 + 71 green) (99d0d16)
  • phase 2 scope, defender row and subsection order (34f9808)
  • MCP phase 2 scope keeps the spectator bus and the run loop, sim for every tier, owner rules on catalysts, the Frontier and the defender (861547d)
  • MCP phase 2 scope, deploy to extraction as a precondition graph with a planner and act tools (52ea079)

Other

  • l10n: auto-translate locale artifacts (f341229)
  • l10n: auto-translate locale artifacts (66f2cbe)
  • Trailer Mode: H hides the UI, both dev gyms switched on for filming (#1404) (98b505c)
  • Scale battle replay stage to fill desktop viewports (d87fb57)
  • l10n: auto-translate locale artifacts (e7df3a9)
558f36b

New & Changed

  • Creator Program (hub-hosted YouTube creator rewards, creator kit, in-game link) (#1398) (558f36b)
  • shop — Premium and VIP plates advertise Vault export; advisor knows the gate (e186ee1)
  • vault,amm — one legendary per commander on import; ASH peg 10k, resources 1, cards 50k, synced to every shard; ASH pool deepened (0839a35)
  • Signal Resonance grants +1 vision per level from base 7, tutorial beacon in sight (b27c3a5)
  • vault — export needs Premium or VIP, costs 500 ASH (VIP -75%), value routes behind Turnstile (b52781b)
  • advisor openers explain Cloud AI and MCP setup, landing header MCP tab, /mcp page (82f93d2)
  • MCP server for ChatGPT and Claude (phase 1, read-only account and knowledge tools) (8037f52)

Fixes

  • veterans,hub — AI-scan max at/above 0.5 auto-rejects and blocks operator approval; hub relays the real client IP; readable operator verdicts (0c81274)
  • guard — site-placement C3 accounts for live sites the sweep cannot move (d6b7195)
  • ios-release — the TikTok app secret never rides the xcodebuild command line (#1397) (228bd7b)
  • preserve map UI colors during night lighting (#1385) (8ba323f)
  • guard — site-placement C3b derives from the quota, not a fixed count (#1393) (12ec387)
  • guard — site-placement C3 asserts the origin quadrant is no longer over-full, not that no site ever returns (#1392) (f480e24)
  • ios-ota — release lane applies and proves the Capgo patch; harden the session guard and drill fixtures (#1390) (0df105f)
  • retain one iOS OTA network session across concurrent downloads (#1388) (ed4d2cc)
  • glitch — allow the build CDN as a frame ancestor, not just glitch.fun (34edcc2)

Performance

  • world — correlate the observer vision read so researches stops seq-scanning (3e2ee4b)

Internal

  • verify-changed keeps its merge base; record iOS build 23 device + OTA verdict (a60056e)
  • change-scoped guards on staging PRs, sharded promote sweep, two slow guards trimmed (0b03700)
  • coverage fragment for the MCP phase 1 staging e2e run (c2188f5)
  • MCP plan, open_game reuses the OAuth consent as the game login (0a9e1e5)
  • phase 2 of the MCP plan is a socket command bus driving the real game (f75baf9)
  • MCP plus plugin integration plan for the Cloud AI (ChatGPT and Claude) (fdc802f)
  • ota — builtin hash set for shell 1788812573 (37f8188)

Other

  • l10n: auto-translate locale artifacts (1ea179b)
  • l10n: auto-translate locale artifacts (2104845)
4268568

New & Changed

  • map — reduce map text, DOM site panel, tagged one-line city labels (b759af7)
  • add painted map lighting and bounded mobile rendering (8f73c22)
  • glitch — Glitch Store iframe build, frameable game shell, server-side playtime heartbeat (d0bdc89)
  • client — loading screen redesign, content download drives the progress gauge (#1362) (d520507)
  • electron — publish the direct-channel auto-update feed to R2 from the build workflow (d6edf14)
  • alliance — rankings boards ride a horizontal scrolling rail (6c1bf32)
  • extraction — retire the quadrant balancer, place roaming sites by demand-weighted deficit, log every relocation (3ec0d36)
  • alliance — CLIMB THE ARCOLOGY objective and rankings board (floors cleared) (af53a48)
  • track consented OpenAI qualified signups at Beat 3 (cc26cc4)
  • alliance — reroll finished objectives, retune ladder chests, hide zero rankings (c5050bf)
  • landing — chamfered house plates, mobile menu header, open-beta copy refresh (1ec5c30)
  • enforce scheduled SEO publishing cadence (020e824)
  • add Ashen Throne SEO content pipeline (9f7dd3c)

Fixes

  • map — DOM site panel says each fact once, expands instead of scrolling (bfbd085)
  • ota — the bundle prune never touches a download in flight (4165448)
  • ota — brotli twins for the code plane, and an in-session retry for a stalled download (e18898f)
  • survivor — abandon an in-flight weather load when the loader is released (c4acc8d)
  • vault — serialize mint submissions on the shared minter wallet, retry a nonce collision once (770cf1a)
  • alliance — TASKS chip GO opens the objectives board; focused card glows instead of a FOCUS chip (3eb5107)
  • electron — restore client scripts and devDependencies dropped by the lockfile-only install (a818dcd)
  • electron — pack the splash logo, re-arm Google sign-in after logout, offline page, Electron 44 (0939504)
  • tutorial — suppress the Citadel capture banner for tutorial and prologue players (be07d42)
  • report — bound Urgent Quest starters to the raw-telemetry window, derive the chain tag (444c6ac)
  • vercel — gate production on the last SUCCESSFUL deploy, and never on an empty VERCEL_ENV (7ae751f)
  • vercel — only build production, and only when the project dir changed (be71cae)
  • telemetry — a pino-shaped client error is keyed on what it says, not when (2dd1334)
  • pixi — an evicted sharp-mip build is abandoned, not recorded as failed (8d32d86)
  • events — defender engagement gate lists only in-flight raids, so the target index can serve it (7292e38)
  • audio — background pause records intent, so a hidden edge mid-resume still suspends (e621db6)
  • map — a stale /player snapshot can no longer rewind an in-flight crawler march (655a519)
  • landing — follow page CTA says PLAY FREE (d780cd5)
  • landing — shop category rail is a wrapping tile grid on phones, mint tab stacks (6ce2d02)

Performance

  • ios — keep the gate decode on Low; the bytes-only gate measured worse on device (dea3c8f)
  • ios — bound the decoded-image cushion by bytes and stop decoding the gate images on Low (d734a89)

Internal

  • iOS arm of runbook 5b for the OTA brotli twins, prune race root-caused on device (7b4a608)
  • iOS Low headroom pass, decoded cushion byte budget measured on Nigi (0f2f2ba)
  • iOS map lighting memory pass on Nigi (medium + forced Low) with lighting autopilot (c026d09)
  • tutorial e2e re-drive under restored Deep Wastes fog (f99f59a)
  • make SDK event build inspectable (81943b9)
  • test-runs — Pixel 3a device gate for OTA brotli twins (runbook 5b, Android arm) (be2aa43)
  • feedback — date the tigerik evidence by its snowflake, not the capture day (e48f304)
  • feedback — capture three forum signals from the 2026-09-06 watch tick (d38d3bb)

Other

  • l10n: auto-translate locale artifacts (4268568)
  • l10n: auto-translate locale artifacts (f5de814)
  • l10n: auto-translate locale artifacts (a851b06)
  • l10n: auto-translate locale artifacts (7db0a79)
  • l10n: auto-translate locale artifacts (8bb2629)
  • Codex worktree snapshot: archive-cleanup (518a447)
  • l10n: auto-translate locale artifacts (8b8b49c)
  • l10n: auto-translate locale artifacts (fa2fe1a)
  • l10n: auto-translate locale artifacts (fb8d321)
  • l10n: auto-translate locale artifacts (f1562e6)
7c97f0d

New & Changed

  • anti-abuse — ring adjustment mails each adjusted account an admin notice (70d4ab6)
  • anti-abuse — challenge telemetry in event_log, friction report, one-time ring balance adjustment script (e026424)
  • market — finite AMM daily cap at every Marketplace level, Premium removes it (b80b7c0)
  • anti-abuse — one social account per player, Turnstile challenge on crowded IPs (1733f46)
  • attribution — forward landing UTMs into the game and read the Play install referrer (ecc86d2)
  • vault — one WalletConnect wallet rail for the game client and the hub (1ed3620)
  • amm — count and watch POOL_STATE_SHIFTED swap refusals (gap #40, second half) (949dbe5)
  • telemetry — per-family raw windows, screen:open/close to 7 days (1854d7e)
  • alliance — retire bank grants and both permission toggles; tax is Leader plus Vice Leaders (7b9660e)
  • alliance — war subsidy, rankings, unified alliance XP, and a polish pass on every alliance surface (4f29142)
  • ops — one source for shard Postgres memory settings, applied by provisioning and watched (cef39e0)
  • siege — rally pass 2, reserved staging cluster, launch rules, live timers, member cards (3d4a382)
  • siege — alliance RALLY on the Citadel (266471e)
  • alliance — directory hides dormant alliances behind SHOW ALL, keeps our standings and district holders (e45b62c)
  • alliance — standings are one-way, both directions shown, three-state control (5c349e5)
  • alliance — MOTD on connect, alliance directory, Discord feed and handles (8bce247)
  • alliance — MOTD pinned in chat, alliance Discord invite, approval queue fixes (7ef93a4)
  • hunters — log hunter:killed on both kill paths, guard the objective count (21a6473)
  • alliance — objectives scoped from prod, caps as a share of target, tier-weighted training (adcafa2)
  • alliance — objectives polish, own chest art, tooltips and motion pass (6e81582)
  • alliance — objectives pay through the chest ladder only, claim opens a crate (d7293ba)
  • alliance — objectives draw the war chest on completion (fd1a3b7)
  • alliance — weekly Alliance Objectives (engine, hooks, panel, HUD focus, guard) (885c7f9)
  • alliance — hub redesign with icon grid, sub-panels and bubble tooltips (0f8f092)

Fixes

  • store — re-aim the stale wallet chain-switch marker at the rail loader (bffe1f6)
  • vault — chain-agnostic wallet copy on the vault surfaces (41801d1)
  • vault — the wallet decides the chain, and the wallet app is brought forward (372e50f)
  • vault — connect() keeps waiting while a WalletConnect pairing is in flight (289b002)
  • anti-abuse — ring adjustment script newline escapes (d39e2c7)
  • vault — the wallet rail awaits AppKit ready() before opening the connect modal (79302dd)
  • barracks — recipe-intent squad model, server top-up, edit durability, preset sfx (2307c53)
  • shop — the offer-margin guard counts the pack-sourcing mint (gap #40) (84f892d)
  • vault — an import whose sweep budget is spent is rescued once its token is provably gone (3579ec2)
  • alliance — objective credits fire after the transaction that earns them commits (d043530)
  • telemetry — a wide backfill no longer blanks arena minutes; the advisor learns the rally (71f1058)
  • alliance — hub live-update gates use the redesigned view keys; world-boss GO opens the panel (320cb2e)
  • siege — a parked rally squad follows its player, is counted, and is never stranded (d9885c3)
  • alliance — objectives credit real defences, mail only members, and lock in one order (efa52b9)
  • css — drop the stray merge separator that swallowed the full-screen Cloud AI rule (9275a0a)
  • vault — bound the import reservation a submitted burn hash holds (e1b16af)
  • server — bind the analytics module where recordGrant was called unbound (52f4f74)
  • ops — size shard Postgres memory to the hot set, not the plan ceiling (2ab1a0a)
  • alliance — surgical rankings switches, full board titles, XP bubble and subsidy history copy (bb27997)
  • siege — rally parks the whole army on one staging cell with an Army marker (47ec1d0)
  • server — import analytics where recordGrant is called; re-aim six guards to the recipe model (#1329) (2f7ab1b)
  • alliance — directory loads on open and repaints after a stance change (ac2e130)
  • alliance — approval empty states drop their emoji glyphs (741e0fe)

Internal

  • vault — verify-stage diagnostics in the e2e; landing catalog re-extracted for the account copy (e68309c)
  • vault — /account check waits on the page's own verified message and the signature landing; sign ladder logs a failed encoding (0582b3a)
  • vault — e2e re-clicks the WalletConnect row and dumps the modal on a pairing stall (2db03a5)
  • vault — landing surface in the wallet-rail e2e, landing l10n catalog re-extracted (04b8d84)
  • combat — adversarial multi-target scenarios in the golden corpus (gap #39) (547aa51)
  • shop — redeem-code behaviour contract (coverage gap #20) (aa25d05)
  • crawler — move-coordinate refusal contract (coverage gap #8) (d6c7ecc)
  • alliance — hub guard derives the tab vocabulary from assignments too (9567452)
  • gauntlet — gate guard reads the siege attack site from siegeDeploy (b5985ea)
  • siege — deploy-cost and deploy-march guards read the attack site from siegeDeploy (5faea0d)
  • re-aim four guards stale against the siege-deploy move and the bank-grant retirement (53291ae)
  • arena — arena-lock guard follows the siege attack gate into siegeDeploy (b696a7e)
  • widen the unbound-module lint to forgotten requires; revive e2e-npx-chain (522822d)
  • survivor — make the S5 tamper provably change the world (da02dba)
  • cloud — verify-knowledge-freshness gives itself an explicit 4 GB heap (#1330) (4cf6f12)
  • siege — phase-coverage guard reads the attack gate from siegeDeploy (b4b9742)
  • anti-abuse — Turnstile widget created, keys wired into shard provisioning and the runbook (a169ece)
  • wallet assessment, owner ruling: WalletConnect for everything, chain-agnostic (329b070)
  • wallet UX assessment, Privy vs Base Account for the vault (2f9f1c7)
  • staging drive fragment for the recipe-intent top-up (PR #1338) (a3a50d9)
  • test-run fragment for the loop follow-ups on PR #1337 (32135ad)
  • close coverage gap #40 (sourcing mint term + POOL_STATE_SHIFTED watch) (54932f0)
  • test-run fragment for the 2026-09-04 pre-promote review and verify sweep (3d3094a)
  • record the metric-cell loss the manual heartbeat prune caused (ef17d57)
  • objectives design status reflects the shipped HUD focus chip (cb7b0ff)
  • alliance objectives v1 detailed design (for approval) (bc84955)
  • alliance system v2 design plan (objectives, war chest, loyalty) (72a81d4)
  • Rise of Kingdoms alliance UI reference map with annotated screenshots (40a5de6)

Other

  • l10n: auto-translate locale artifacts (7c97f0d)
  • l10n: auto-translate locale artifacts (ba30824)
  • l10n: auto-translate locale artifacts (b1f2b65)
  • l10n: auto-translate locale artifacts (7e38343)
  • l10n: auto-translate locale artifacts (4d40c09)
  • l10n: auto-translate locale artifacts (aaa50e9)
  • l10n: auto-translate locale artifacts (3ac08fe)
12d07cb

New & Changed

  • db — audit-driven indexes, settled-history retention, and a DB health watch (690adf5)
  • Cloud AI battle autopsy (VIP): engine re-fight, analysis card, full-screen formatted panel (9a9bc65)
  • shop — SIMULATE button on the loot-crate bubble previews a crate opening (cd6f055)
  • shop — 75 one-time ASH redeem codes (25 each at 2000, 1000, 500) (e384e23)
  • profile — one free username change, then 500 ASH (d2b04bf)
  • ui — shared claim feedback beat for every CLAIM control (349994d)
  • client — deploy modal on the recipe model (load-on-open, deploy-by-reference) (e6d321f)
  • client — recipe-model consumers (Arcology, squad modal, tutorial) (cfb5c52)
  • client — Barracks recipe model (gesture-only saves, server loads, CAS journal) (fcfb586)
  • db — one-time pre-rollout snapshot of commander_presets (229c4a5)
  • server — deploy-by-reference via marchLiveSquad on all five surfaces (2c72243)
  • server — per-slot CAS recipe routes + legacy bulk discard shim (8eb467e)
  • server — single-tx squad-save with load mode + canonical away predicate (38d9f18)
  • server — recipe-model store primitives (clamp, march, load, CAS columns) (80ffa05)
  • telemetry — a casualty carries where it was earned (26ef30b)
  • barracks — record what the reserve swap actually placed (d00b3ac)

Fixes

  • db — restore lost mail indexes and index three seq-scanning hot paths (54997a6)
  • make verify-arena-tick-resilience deterministic on every date (ff255c1)
  • ops — one global native-build floor for every shard, set to Android 38 / iOS 22 (a8b609f)
  • preset — three soft-lock/crash defects found by the tutorial UI drive (99eca45)
  • ui — hold the Tasks panel rebuild while a claim beat plays (58dc034)
  • tutorial — graduation referenced an unimported analytics module (872ee69)
  • preset — review fixes for the recipe model (absent-slot keep-live, seeds, re-materialize, cell-merged gestures) (feed980)
  • server — robust availability clamp (own-holdings floor) + troops column fix (942a57e)
  • survivor — make the advance transition a CAS inside issueNextStage (79fa09f)
  • server — global squad lock order across every live-squad writer (bf6eece)
  • survivor — resume a validated-but-not-advanced stage instead of closing the run (c02986d)
  • standardize code-only OTA across shards (98b3f76)
  • client — make the pending-action toast short and actionable (947acf5)
  • ops — compensation is bounded to purchases made at the OLD contents (17ec1dd)
  • barracks — log the clamped swap, not the raw request body (668f846)
  • telemetry — the chest reports the hollow cores it credits (c0883b6)
  • gauntlet — a full clear counts the last stage once, not twice (aefe72a)
  • barracks — an unknown leadership cap must not clamp the swap (2b38d1a)
  • barracks — clamp a refill to the commander's remaining leadership (db41047)
  • barracks — the reserve swap commits both legs or neither (3486125)
  • telemetry — the sink half - vault exports, transit fares, tutorial metal (67b2d6f)
  • telemetry — a memory purge that worked is not a client error (490fa78)
  • gauntlet — KILLS on the run card counts the run, not the last stage (e4012ac)
  • telemetry — every ASH credit lane reaches the faucet ledger (45e51bd)
  • events — the T3 rebate is earned on completion, not on the order (64f64b4)
  • gauntlet — the run clock measures one run, not every run this session (0059c0a)
  • ios — evict WebKit's memory cache at the map<->Gauntlet seam (3f50ce9)
  • sandbox — a deliberate refusal is not a client error (48c0d11)
  • tutorial — the beacon highlight is a map target, not a DOM one (93705f3)
  • verify round 2 - Codex-found holes, and the three CI guard re-aims (ebfef24)
  • vault — an unmined burn is offered a retry, not an endless finalize (c366be7)
  • map — the fx sprite pool hands out corpses after a teardown (3334428)

Internal

  • db — C3 control drives B3's shared predicate (194975c)
  • fix the claim-hold defer check in verify-claim-fx (57ae82c)
  • verify-deploy-march guard (one primitive, clamp-not-refuse, atomic load-and-march) (89745d0)
  • verify-preset-recipe guard (writer sweeps + 20 behavioral scenarios) (024ccc0)
  • verify-squad-lock-order guard (writer discovery + conformance + races) (2e4b86c)
  • test-log — 2026-09-03 prod DB audit run, matrix row, gaps (392c1cb)
  • coverage-log fragment for the tutorial UI drive and the Reserves tile gap (3f81d92)
  • coverage-log fragment for the recipe-model e2e + review fix run (f77cc5e)
  • squad preset recipe model spec revision + implementation plan (rev 8) (01b8d76)
  • bd — log 2026-09-01 proviwest inbound on L-2026-0002 (29610c4)
  • player patch notes for the 2026-09-01 promote (fb1aa64)
  • ios — the return-to-map ratchet run fragment and coverage row (5cc1330)
  • run log for the pre-promote review + Pixel 3a memory pass (2c23fcb)
  • feedback — capture three suggestions from the 2026-08-31 forum thread (82690d0)

Other

  • l10n: auto-translate locale artifacts (12d07cb)
  • l10n: auto-translate locale artifacts (d4a0d31)
  • l10n: auto-translate locale artifacts (6dddcc0)
  • l10n: auto-translate locale artifacts (4c0b120)
  • docs+client: guard entries for the recipe suite; defender-net prefers live mirror (1906700)
  • l10n: auto-translate locale artifacts (825c119)
  • l10n: auto-translate locale artifacts (48258cf)
  • wip: bumpSlotCount reports what it placed (888fe09)
  • ops: record that the cache compensation was sent (4b0f1ab)
  • ops: exclude Zeninn and Ghost_ from the cache compensation (32e6d7a)
  • ops: cache compensation script + patch-note correction for the T3 rule (9284509)
  • l10n: auto-translate locale artifacts (4466115)
  • l10n: auto-translate locale artifacts (0ed3fa4)
  • l10n: auto-translate locale artifacts (6f0e6b1)
  • l10n: auto-translate locale artifacts (0ee92fc)
056a139

New & Changed

  • restore frontier ground visual quality (0596e16)
  • shop — ASH shelf type polish + the interstitial coordinator (e70e5e0)
  • shop — GOLDEN ASHES poster redesign, one banner slot, gold tab (64563c2)
  • client — armed-deal visibility, badge, slides, chip, interstitial (6f3e1a1)
  • shop — the ASH coupon goes native, gains a fuse, and floors at $5 (e6a10cd)
  • ui — tap a truncated error toast to read the whole message (9a6dcd4)
  • market — deep-link every tradable asset to its codex entry (c0e23fe)
  • shop — chamfer the shop surface and compact the pack manifest (af6cc74)
  • events — T3 Training Day, half-price T3 with a tech-core rebate (585fac3)
  • arena — initiative-split columns on the research-gap ladder (29f08c0)
  • siege — dismissible battle stage, War-Host-only withdraw, 2+2 battle cadence (1053b80)
  • feedback — repeatable cohort enrichment, and fold the forum poll into the watch loop (c430c57)
  • feedback — pulse rounds, so the operator can ask the whole server (a37dee0)
  • feedback — player-feedback signal system, seeded from the live Discord forum (900138f)
  • prism gather vortex as wisp population (owner round 3) (0e59bcd)
  • prism railgun round 2 (inward vortex, textured lance, rapid hue cycling) (714feb8)
  • prism railgun boss ability animation (survivor renderer FX rig) (7e92b4b)

Fixes

  • promote-review fixes, the train-cancel mint, secondary link order (415b5d7)
  • rebuild Haven roadside ruins (3d305dc)
  • tune map grid visibility (0b3b757)
  • survivor — the Gauntlet gate now opens from 6 tiles in every direction (5602b8e)
  • siege — the archive filed every conquest as a defense (abe5a70)
  • the contentPatch failure line carries no varying count (fbb8a65)
  • release — the stash fallback could not restore an untracked artifact (013cf3f)

Performance

  • arena — cup-calibrated bracket depth + the research-gap ladder (30 min -> ~5) (d108b74)

Internal

  • market — the codex link is the asset icon and name, not a chip (aae0b1a)
  • combat — realign two guards with the Vell ordering and Omen suppression (aebf08c)
  • siege — E2E drive of the War Host battle UI changes + coverage log (20d5da3)
  • prism railgun rig contract guard + shelf note (1f61617)
  • combat — validate the Omen dodge-suppression knob against real cup battles (d11a294)
  • arena — re-bake after the Vell and Omen rulings (2d32336)
  • siege — commander balance - cup battles vs a fresh standardized arena run (fb17c75)
  • siege — correct the cup metric, and the real finding - zero captures in nine days (8e2a5a5)
  • siege — deep-dive analytics on the Alliance Siege Cup window (0994108)
  • feedback — correct the shift-back verdict - the mechanic exists and is move-back (899569d)
  • feedback — verdicts on the top five signals, measured against code and prod (b4bdb58)
  • ios — record build 22 as verified on device (06de326)

Other

  • l10n: auto-translate locale artifacts (0cd1f43)
  • l10n: auto-translate locale artifacts (dc4a0d0)
  • l10n: translate the 19 promo-surface strings (0de957d)
  • balance(combat): buff psionic_shockwave to 60% proc, disruption_field to 30% and stackable (18bd569)
  • l10n: translate the 20 new T3 Training Day and shop strings (30d1b12)
  • l10n: auto-translate locale artifacts (2b5c9af)
  • balance(combat): resonance_link shield 25% at max rank, redistribution flat 50% (1f4d69c)
  • balance(combat): Omen's dodge suppression reads SLOT attack power, snapshotted at battle start (f202377)
  • balance(combat): Vell redistributes immediately; Omen cannot dodge what outguns him (89bc8a0)
  • balance(siege): double capture time to 90 min solo (Throne 120) (c50dabf)
d65f704

New & Changed

  • map — restore Deep Wastes fog (vision-circle model) and add fogged-ground low-memory mip gate (020ab44)
  • agent search optimization pass 1 (AEO plumbing, store keywords, Clarity) (8aa8570)
  • the daily Gauntlet task is claimed, never auto-granted (f488850)

Fixes

  • map — fog reaches full density at the frontier border (feather moved inside) (6486ba9)
  • survivor — a release that lands mid-load installs nothing and leaks nothing (7c37479)
  • audio — the releaseFamily kept-report stops minting a fingerprint per occurrence (7f60b85)
  • survivor — an authoritative refusal is never retried (21f1f6c)
  • client — a failed foreground proof must re-ask, or the hold bound is not a bound (4e8a4c0)
  • cache the compressed-texture manifests (they gate the whole KTX2 path) (be8bba0)
  • survivor — name the rarity in the cache-unlock reveal, and stop painting duplicates gold (ff9ab4e)
  • client — the tiled-set countable line stops minting a fingerprint per ratio (f49e04d)
  • oracle — the defibrillator on-death revive lands in the reconstruction (229dc52)
  • client — the contentGate fail-open line is one fingerprint, not one per event (88ce410)
  • vault — exporting a commander releases its baskets instead of stranding them (37f5015)
  • ui — a resource-type reward chip opens its bubble instead of throwing (391b443)
  • oracle — the virus reflect lands after every blast absolute, as the resolver does (0a489cf)

Internal

  • record agent search submission run results in kit ledger (b53ec83)
  • bd — capture the zest_0x community-manager inbound as a lead (5850810)
  • rewrite the Cloud AI design doc for the tiered advisor (#1260) (4ccd9d6)

Other

  • l10n: auto-translate locale artifacts (d65f704)
  • l10n: auto-translate locale artifacts (799a9cd)
  • l10n: auto-translate locale artifacts (b568a58)
  • l10n: auto-translate locale artifacts (322bd08)
  • l10n: auto-translate locale artifacts (9137135)
  • l10n: auto-translate locale artifacts (1b89711)
  • l10n: auto-translate locale artifacts (a529131)
701dba5

New & Changed

  • cloud-ai — cover the whole game, and prove the coverage stays live (11466b1)
  • arcology — elemental run modifiers at 1.5x, stat rolled per floor (62cb8c6)
  • analytics — tag arcology casualties with the floor that caused them (0d2642e)
  • ci — DEX headroom gate for the Play 2027 code-optimization bar (6a4d86c)
  • ios — MetricKit exit reporting, engine-death detector, ASC vitals watch (6483b71)
  • android — memory release paths, limiter kill reporting, OOM heap dumps (e24986b)
  • vitals — watch Play memory, bitmap, LMK and slow-start metrics (55a94bc)
  • analytics — add the arcology heal-cost and extraction-by-tier breakdown (57de73e)
  • vitals — pull full ANR/crash report texts from the Play API (1dd4465)
  • gauntlet — the boss gate is a MIST DOOR, not a wall (4a7410c)

Fixes

  • tune — de-stale the megatower tuning panel (6fa6543)
  • review — bound the prepare gates, memoize frameCap, consume the ANR stash (f8d4a9f)
  • reduce mobile render ANR pressure (a8d9983)
  • analytics — ledger the salvage alloy refund as a Gauntlet faucet (13f852c)
  • client — weak Android GPUs get the compact tier, whatever their RAM says (aa3233c)
  • client — the appVisibility proof line must be one fingerprint, not one per event (f0a3892)
  • tutorial — the ending barrage gets its clear window after the Voss line (36d3900)
  • l10n — dev-gym labels and a CSS token string leave the player catalog (#1244) (21e213a)
  • ui — the house-button ink opt-out must not reach ws- classes (#1243) (5db631f)
  • ios — a refused version bump silently stopped the shell artifact landing (0334e97)
  • ios — a failed release run left the tree dirty and blocked the next one (fc87b08)
  • ios — the local release lane could not run from a non-interactive shell (9ef36f8)
  • ci — land the stranded 1.0.8 OTA artifact, re-anchor three guards (3729a09)

Internal

  • arcology — move the season-board guard to the new payout directive (c99e17c)
  • re-anchor two guards outgrown by the mode-EV review fix (#1240) (f299875)
  • re-anchor two guards outgrown by the mode-EV review fix (3e5375a)
  • test — Android native memory/ANR e2e on Pixel 3a (351bb10)
  • Google Play 2027 quality requirements, measured exposure and plan (fce40ad)
  • ios — record build 21 as verified on device (e9c65d4)
  • ota — land the shell artifact for build 21, and put the version train back on reality (b403648)

Other

  • l10n: auto-translate locale artifacts (701dba5)
  • balance(arcology): season board pays the epic chest at every tier (2de249c)
  • balance(arcology): promote the tuned core band (floors 16-20) (398220f)
  • l10n: auto-translate locale artifacts (8a86148)
  • balance(arcology): halve the epic floor-20 chest to 30 cycles (cf8c72e)
  • l10n: auto-translate locale artifacts (b127892)
  • l10n: auto-translate locale artifacts (d37554a)
  • l10n: auto-translate locale artifacts (6517403)
10e210e

New & Changed

  • ui — chamfer the armory cards, detail chips/panels, and modal chrome (343d449)
  • ui — outline canon for the house button (accent edge + label on grey) (fb508f3)
  • ui — sweep every button family onto the house chamfered plate (a5288e9)
  • ui — the house button, chamfered plate as the .btn standard (phase 1) (3e4eaec)
  • ad — gate lifts onto a LIVE telegraph (94474ad)
  • ad — hot open, the playable resumes the scene the cinematic leaves (38107e2)
  • ad — TAP TO BEGIN gate, the activation + preload front door (ba3696c)
  • ad — streaming music bridge, sound lands on the first tap even mid-decode (2133f1c)
  • ad — network-chrome safe-zone reserve on ad platforms (70bdbf1)
  • ad — tester single-file emit for artifact sharing (367242b)
  • ad — 36s music loop at 96k (39bd41c)
  • ad — ghost-chase damage bars, sound-on default, mute removed, top-bar spacing (38e6d20)
  • ad — gritty tactical chrome, chamfered plates, gunmetal wells, gloss sweeps (8c4408f)
  • ad — AAA UI pass, gesture guide, brand type, button states, smooth vignette (68c0572)
  • ad — hero realism pass, two-sided shading, living emissives, motion grounding (9f46d50)
  • ad — normal-map lighting, selective bloom, storm grade, native-res heroes (d6c1bde)
  • ad — hyperbeam charge heat-up + quickening boil (reference parity) (a0ca630)
  • ad — charge contact sheet, ground cast-light ramp, and a falsy-zero freeze bug (be73e64)
  • ad — level-up glow shader on the crawler (a316226)
  • ad — level-up sticks to the crawler, floating text, owner level-up sting (be4a7a7)
  • ad — per-move Hunter audio, crawler heal sfx, ported death ceremony (e41a7c2)
  • ad — owner ladder, portrait staging, reference ghost trail, real turret bolts (8a56c94)
  • ad — owner pass - hull-height attacks, hit flash shader, derived normal lighting (e0159b8)
  • ad — iteration 2 - ground mottling, boss shot trails, level slow-mo, under 2MB (2b1d99d)
  • ad — reference-graded iteration - rain, rune entrance, night depth, perf tier (05e5d6c)
  • ad — graphics-parity pass - fenced boss pen, beam rig, abilities, baked shadows (3dd96de)
  • ad — playable-ad M2+M3 - real art, audio sprite, shader grade, camera framing (5746b6d)
  • ad — playable-ad vertical slice M1 - real sim + ad decorator + greybox renderer (37ba699)
  • quests — landmark GO arrows, real reward icons, click bubbles on every chip (81ae0ac)
  • quests — daily Gauntlet task, 3 prime alloy, shown first when collapsed (ce78785)
  • tutorial — Vael speaks at 1.2x with a breath before Ada resumes (09ab9dc)
  • add privacy-limited TikTok qualified signup tracking (b3c258e)
  • quests — arrow cue on the city whenever a GO targets one (9246d4e)
  • tutorial — voice every character bark (c02773d)
  • tutorial — one unified objective panel across mobile and desktop (8c11785)
  • tutorial — character barks speak in the prologue's dialogue language (146e088)
  • ui — polish the continuing-tip panel layout (b619042)
  • tutorial — the extraction finds one cache, cutting the on-site wait to a third (9efee13)
  • tutorial — tighten the opening camera and frame both objects (1c31682)
  • tutorial — open at the beacon, retiring the generator and drive beats (d8df237)
  • tutorial — retune Ada's narration to 1.15x without the chorus (6d24e6b)
  • tutorial — remaster Ada's narration to sit with the other voices (ab32205)
  • tutorial — long audio-coupled fade, and the cinematic never shows a raw video element (9e2db6b)
  • tutorial — launch line at 1.4x tempo (3a93441)
  • tutorial — Knell's dying-breath launch line is voiced (75e151e)
  • audio — mobile loudness retune - the default mix comes up to ~-17 LUFS (5e18828)
  • tutorial — the picked v3 Voss takes ship (5b5fc2b)
  • tutorial — Voss speaks - both prologue lines voiced and wired (846f8a2)
  • tutorial — Voss's prologue lines tightened for the voice session (8253fb3)
  • tutorial — bombs under Voss's opening, SFX unlock on reload, world-ending death barrage (1babee0)
  • tutorial — the prologue opens under bombardment and ends in the launch volley (47144c5)
  • barracks — every train-popup unit stat opens a description bubble (cd48d89)
  • analytics — per-mode troop-injury telemetry and heal-cost attribution (cda576f)
  • tutorial — dev gym - jump to any beat, reset to the prologue (43f2014)
  • tutorial — world-spaced marching-chevron road marker replaces the DOM arrow (d7b143e)
  • tutorial — the staged prologue coach replaces the blocking controls popup (ca9c13d)
  • analytics — per-game-mode engagement + $ato EV telemetry (MODES family) (a2af4a4)
  • tutorial — thread the reclamation story through the tutorial copy (5f8a4c3)
  • tutorial — the Gauntlet prologue plays before the cinematic, client-only (9f2e8c6)

Fixes

  • ios — the sign-in buttons could not be read (15b6428)
  • ios — export signs manually, so cloud-signing permission stops blocking releases (65d3f70)
  • ios — keep the wrapper marker inline, as verify-mobile-release requires (e000f15)
  • ios — the release fallback lost its build-settings timeout, so nothing could archive (f11aeb4)
  • ios — pin the TikTok SDK in Package.resolved, which its plugin commit missed (70eb8dc)
  • ios — the TikTok plugin could not compile, so iOS could not build at all (23aa13a)
  • l10n,guards — reward-bubble casing takes the locale map; unbreak the pixi-init guard (3e82cd8)
  • quests — the daily Gauntlet flag survives a /player refetch (#1233) (6596320)
  • tutorial — arm the extraction reveal at the modal's one door (77db542)
  • tutorial — arm the extraction reveal at the modal's one door (bf7f33f)
  • ui — clip-safe guidance highlight for chamfered buttons (5bfb62c)
  • ui — house-button edge geometry, bevel lighting, legacy repaint cleanup (e488bfa)
  • ad — pin the Hunter to its staged anchor through the pre-roll (0601ac3)
  • ad — boot-time audio prewarm so music lands ON the first tap (8d817db)
  • ad — audio gesture re-kick (Android artifact viewer), tester ships safe zones (d7c6c71)
  • ad — turret-true bolts, thruster removal, contrast-first grade (5f8f2f9)
  • ad — ramp the hyperbeam root so it stops reading as a hard edge (7390138)
  • ad — port the hyperbeam heading lock (5004687) + measuring contact sheet (783a6da)
  • ad — turret heading + placement, add turret contact sheet (04ab299)
  • ad — preview-found defects - flash saturation, chroma white-out, stuck joystick (ad859a9)
  • tutorial — the extraction reveal clock starts when the player looks (3ebc96f)
  • align ad conversions with tutorial beat 3 (44b1a6f)
  • ui — quicknav alignment floor retuned 20px -> 22px (a77d415)
  • ui — quicknav alignment floor retuned 18px -> 20px (f9e1285)
  • ui — restore the quicknav's 18px tasks-panel alignment floor (b21f288)
  • quests — reward chips catch real taps instead of clicking through (50707a8)
  • tutorial — self-healing urgent-quest handoff, plus maxout testing conveniences (c7356e8)
  • map — weather overlay follows a desktop window resize (eb67820)
  • gauntlet — battle notifications never interrupt a live run (792a98d)
  • tutorial — suppress event announcements for sandbox players (5df7d8e)
  • tutorial — Ada waits for a character bark to finish before narrating (0fe60e8)
  • ui — the BONUS CACHE banner clears the slot reel (18fee61)
  • tutorial — the extraction dwell follows the reveal, so the cache ceremony completes (b220a21)
  • optimize Meta for qualified signups (e511403)
  • tutorial — hold silence through the prologue handoff, restore the mix at beat 0 (4a190e7)
  • audio — the intro cinematic joins the game's mix level (7f5550f)
  • gauntlet — apply a tick's inputs in the order the validator replays them (8874963)
  • analytics — filter the injury table on the window it actually sums (b67db77)
  • client — the visible-edge release must PROVE the app is on screen (4bdf4a5)
  • mode-ev-report — parse the real army and prize shapes, report unmeasurable attrition (e498e21)
  • garage — revalidate the wallet on every entry so alloy matches the market (4214d80)
  • analytics — isolate mode-ev-report enrichment queries, report degraded not zero (5e8d810)
  • analytics — format negative net $ato in the MODES 7-day table (224bd2b)
  • analytics — mode EV correctness from review (ash valuation, haul double-count, refunds) (092cf54)
  • tutorial — three prologue review findings before merge (f6f3bea)
  • analytics — log megatower overlay open on the fresh-run entry path, dedupe reopen logs (20935fc)
  • map — a blind atlas latch releases when the resolver wakes; ktx2 rides the CDN (ff96c8f)
  • arcology — weapon and augment editing honors the in-run loadout exemption (2e7344b)
  • map — Gauntlet gate draws in painterly order like the citadel (3483bbd)
  • show the overtime hold countdown on both citadel timer surfaces (eb7d721)
  • megatower — route fight-loss injury through applyInjury so the lattice reduction applies (49ffc9b)
  • client — store-shell gap art serves local + untainted, prewarm own-skin move atlas (1c6350c)
  • guards — shim navigator so the Pixi teardown guard runs on CI's Node 20 (de8c337)
  • guards — re-anchor five map-renderer guards to the refactored source shape (5c616c2)
  • guards — classify the four promote blockers that are not anchor drift (9685251)
  • bootstrap — await the v4 survivor migration, and guard the whole class (62f66aa)

Internal

  • ad — dead-code sweep and dedupe the playable-ad slice (b30d9bd)
  • ios — pin the local release lane's secret source (323615e)
  • re-anchor three guards outgrown by the prologue and tips work (c61b65b)
  • tutorial — restore the opMount slice a later act-clean check still reads (c858a20)
  • tutorial — act-clean tracks the extracted urgent-intro helper (ca91c54)
  • enable TikTok debug events in device build (0574475)
  • add credentialed Android SDK test build (bd60fb4)
  • tutorial — the prologue contract guard, and prologue events flush urgently (08151b9)
  • speed up manual Android test builds (287ef4d)
  • record the clip-safe guidance-highlight rule (445126d)
  • coverage — log the prologue owner-iteration round (0024e17)
  • coverage — log the staged-coach verification run (6352ad9)
  • coverage — log the tutorial-prologue build verification run (678ece2)
  • lore — The Last Op canon - the Signal caused the Burn, crew-recall summons, Knell origin rewrite (31c133c)
  • ios — compact tier measured for the first time; promote verdict inputs (8c7227e)
  • ios — login gate and memory measured on device, blocker resolved at 83% (887e929)
  • ios — record build 20 as verified on device (207bb5a)
  • ota — land the builtin-hash artifact for iOS shell 1787705595 (build 20) (e1f45ba)
  • ios — read the TikTok app secret from the login keychain (4916d07)
  • guards — re-bake the audio defaults table and the survivor balance fingerprint (439c262)
  • ota — builtin hash set for shell 1787703272 (#1234) (b3ace4e)

Other

  • l10n: auto-translate locale artifacts (6f14ac0)
  • l10n: auto-translate locale artifacts (8b54bf7)
  • l10n: auto-translate locale artifacts (39b9261)
  • l10n: auto-translate locale artifacts (4c55231)
  • balance(tutorial): prologue offense drops to rare, no affixes (751a41f)
  • l10n: auto-translate locale artifacts (1f01636)
dc49b55

New & Changed

  • survivor — retire the boss ENRAGES toast banner (affa0ad)
  • survivor — soften the night veil over live boss fx, light the hyperbeam through it (0ab6bc5)
  • survivor — the ghost is pure light - ad-slice fade, glide wake, no dark paint (c9e62fe)
  • survivor — each ghost is born dark and lightens through its life, shine in hue (bb77780)
  • survivor — the ghost keeps the hull's shading, and the dodge gets its trail back (305c6b7)
  • survivor — taper the beam streaks, and give the dash trail a shape (0cb5009)
  • survivor — the vertical slice's charge motes, plus readable dash ghosts (5471491)
  • survivor — the baked shadows turn with the hull (restored) (5519833)
  • survivor — the baked shadows turn with the hull (64fc14f)
  • survivor — boss-framing camera, hull-locked hyperbeam, lifted eye, swirling charge motes (5004687)
  • survivor — port the ad's airborne Hunter and white hit flash (4f9f874)
  • survivor — the map's sheet warp, ported - wavy weather, never the ground (6a92741)
  • survivor — iso-feathered pocket masks, and they become every effect's default (77fc657)
  • survivor — em_static goes cellular - every pocket on its own clock (74ed56e)
  • survivor — em_static reads as static ON the ground (3fc6d3c)
  • survivor — per-stage weather in the Gauntlet from the map's known-good effects (1ff71a3)
  • map — weather contrast pass, Black Canopy effects, soft weather edges, crawler skin fix (0100f96)
  • audio — weather beds and lightning on the world map (8535e90)
  • map — weather layering by region, world-space weather, map gym, warm filter removed (2439110)
  • graphics — a Low/Medium/High quality setting, so a crash-stepped device is not stuck blurry (d2de455)
  • map — Gauntlet death ceremonies on the world map, death screen animates in after them (f999afe)
  • hunter — one 16-heading Hunter atlas for map and Gauntlet, pursuit-intercept chase, one-tile hold, engage-window volley (bfbc68c)
  • survivor — Mark II, Warden and Hunter rebaked at 256 (v3 split atlases) (e9a5bef)
  • l10n — localize the paid /cup page, fix two game-surface term drifts (f203e09)
  • l10n — translate the Gauntlet in all 5 locales, ship the marketing site in all 5 (2854c05)
  • survivor — Gauntlet monthly leaderboard - fastest stage 1-10 clear, 500 ASH at the top (dc36bb4)
  • audio — boss voice lines duck the whole mix; portal voice fades in (c39992f)
  • survivor — the portal's summoning voice - Temporal Rift loop, 10s, stopped when the close ends (e9d7154)
  • survivor — portal rings are gradient bands; the print head climbs void to crown; the column is rising rings (eba0008)
  • survivor — portal depth - print head is a ring, near arcs over the boss, far halves behind (e892705)
  • survivor — boss entrance is a summoning portal - void base, crown ring, rising energy (87306bb)
  • audio — true-peak limiter on the master bus; boss beds lifted 2 dB (5ebc6af)
  • survivor — over-length lines try 1.45x before the first-sentence cut (6133fde)
  • survivor — Knell and Hunter voiced - 30 lines, per-boss chains, first-sentence cuts (6ea6b72)
  • survivor — crawler stays halted through the boss dialogue (e8c222f)
  • survivor — boss entrance window 6s -> 7s (one more second of dialog) (5761188)
  • survivor — Rampart's signature opener - 'Trespasser, you deserve only one word: NO.' (2418125)
  • survivor — boss lines replay every spawn; player-death TAUNTS (Rampart pilot voiced) (6106023)
  • survivor — spawning boss untargetable; boss music on arena entry; final-boss track (1a772b8)
  • survivor — voiced boss lines - Rampart pilot (ElevenLabs Smoke, Rampart post chain), 6s entrance, death beat (0cbbf94)
  • survivor — four-slot boss lines - open, again, greed, death - all variants kept (2b95df8)
  • survivor — Elden Ring boss gate; live intro with a one-shot halt; EMERGES toast retired (c07cc85)
  • survivor — Elden Ring boss opening lines - portrait cinematic on entrance (18f49ef)
  • survivor — black hole birth is the death exactly reversed (d0db73e)
  • survivor — black hole BIRTH animation + voice, parity with the death (cf66415)
  • survivor — wider twin-turret fan; stage 10 HP breaks the plateau (bd495d0)
  • survivor — finale duo weaves weak attacks through recovery (cd9a25d)
  • survivor — zoom persists across stages and runs, mobile defaults to 0.8 (9d31c7d)
  • survivor — scene zoom (pinch + wheel) and cyclone speed retune (9ebcfae)
  • survivor — floating touch joystick on the left half (a94734f)
  • survivor — Rampart spins through the cyclone (4227bd8)
  • survivor — halftone dot pattern on ground telegraphs (cb6283f)
  • survivor — boss proper names, tier chip, lore doc (9c3f270)
  • survivor — fire sweep contact bite - 400 base on first touch (0b7903a)
  • survivor — keyhole arena bound - the energy fence IS the corridor wall (6c9699a)
  • survivor — boss pocket grows to fit the index-2 orbit ring (1b262d7)
  • survivor — volley 2 gets its slice, sweeps reach the rim, the scream waits for the flesh (6b1569a)
  • survivor — sweep fan tracks-then-locks, wider spread, rays truncate honestly (61821ca)
  • survivor — toll safe zone becomes a RING CORRIDOR + black hole death voice (6106ff3)
  • survivor — the ANNULUS TOLL - whole-map death zone with a safe eye (29a2100)
  • survivor — proper endings - extinguish front + singularity implosion (6ffb718)
  • survivor — sweep ignites SEQUENTIALLY, void-flame contrast, Khron voices (1975a96)
  • survivor — sweep rays shoot OUT of the black hole - radial, long (55187a4)
  • survivor — sweep v2 - laser slice then 3D eruption wall (6727451)
  • survivor — toll polish - charge declutter, sigil on impact, triple line sweep (a25451c)
  • survivor — the Toll's black-hole apex - the zone becomes a damaging dome (03988ac)
  • survivor — spellcaster sigil on the Toll's damage zone (2d7f501)
  • survivor — the Toll goes volumetric - resonance, not fire (1c4d127)
  • survivor — burn lines go volumetric - the hyperbeam craft on ground fire (d86acd2)
  • survivor — dash-broken lock requires a player RETARGET to re-acquire (adb897b)
  • survivor — dash breaks lock, entrance spotlight, crater rework, gym duo reroll (7baa4fe)
  • survivor — boss damage taper to 8x, boss HP +30%, mid-ability death cleanup (a9e9d1e)
  • survivor — crawler level costs retuned - energy-heavy, per-tier pricing (a2495c4)
  • survivor — every supply cache rolls a guaranteed blueprint, dupes pay alloy (bd0c1f2)
  • survivor — 16-heading iso turret atlas replaces the flat decal (5183cd9)
  • survivor — affix rolls change identity, global affix consumption, speed compression, armory equip flash (1d934a7)
  • map — mobile bake matches the tuned sharpness, ground-sharpness architecture doc (d94844a)
  • map — sharpened mip chains for continuous ground sharpness, tiled KTX2 twins cut mobile texture memory 4x (2b90467)
  • ui — armory and garage parity - loadout audio, picker motion, roll forge cycle, market shortfall route (d42ad67)
  • survivor — stage 10 is a boss-only FINALE duo arena (6393dc2)
  • survivor — voice the three audio gaps (powerup, dash ready, charge up) (0b8fd0b)
  • survivor — knell artillery v2 - invisible base-speed track, frozen telegraph (44a98cc)
  • survivor — knell_8 gym scenario (encounter index 2) (764b5d1)
  • survivor — mid-run self-heal - retry with backoff on every server leg (00f1476)
  • survivor — knell v4 batch - full-hull stages, shock burn, death card hold, toll clamp, artillery tracking, summon waves (c207779)
  • survivor — trader stock pages at 4 with a free NEXT cycle (15d0322)
  • survivor — validation gate on exit, alloy in plunder + haul ticker (3eb456d)
  • survivor — death card, exit confirm + collection, alloy haul transit (cc3bfdb)
  • survivor — Elden Ring retry model - checkpoints, no lives, exit collects (857948e)
  • survivor — hunter dash softened, hyperbeam first-contact hit (f478e39)
  • survivor — knell summon telegraph, hammer scaling, toll volumetrics (8aede2b)
  • survivor — gate reprice, Charge Cycler dash line, line-wiring guard (2c781f2)
  • survivor — gate button audio + drop stale BANK X PARTS sub (befdd7c)
  • survivor — honest bullet hitbox, dash iframes, dash over walls (90b7836)
  • survivor — cyclone bullets reach far past the screen (d019edd)
  • survivor — Warden on THE DANCE + the CYCLONE bullet hell (c90b4ff)
  • survivor — laser + volley voices, fixed 3s sweep with growing arc, warden turn parity (90e15dc)
  • survivor — hyperbeam darkens the world and casts light (ac31191)
  • survivor — clamped lance tracking, 90-degree hyperbeam, volumetric beam (d178f42)
  • survivor — Hunter Prime moveset v2 - hyperbeam, tracking lance with burn lines, roaming volley, sideways dodge; iso ground telegraphs; ladder regrades waves only (4655813)
  • survivor — hunter at 1.5x + chromatic trail to the reference bar (e25f21e)
  • survivor — crawler-parity boss turn rate + chromatic ghost trail (32fe183)
  • survivor — Hunter 16-heading crawler-parity bake + size dial-back (6406fb3)
  • survivor — Hunter Prime production pass - THE DANCE, honest lance, size fix (e805354)
  • survivor — gauntlet music, death-ceremony polish, steady wheel glow (88160ae)
  • survivor — boss entrance + death ceremonies, spawn invulnerability (ed92ff5)
  • survivor — Knell crawler-parity bake - 16-dir moving set with his own wheels (a17e9ec)
  • survivor — boss facing parity layer 1 - smoothed heading, victim tracking, shadow (aba651f)
  • survivor — toll encounter scaling - wider, faster, quick-succession chains (ee8a214)
  • survivor — dimensional artillery shell + ground-plane hammer impacts (ed16bdf)
  • survivor — toll blast quality pass - flash, implosion, iso-true wave, hot field (3300993)
  • survivor — toll v4 - charge IS the telegraph, accurate wave, burning field (639ec92)
  • survivor — THE DANCE - scripted boss rotation + toll v3 area detonation (75b400a)
  • survivor — repair is committed, heals 60% base, Triage Protocol line to 80% (d3f47b1)
  • survivor — the great compression - bar-fraction specials, flat curves (3e76f99)
  • survivor — action hotkeys 1/2/3 + hold-to-steer (97a132c)
  • survivor — Knell hammer v3 - heave, red fill telegraph, extreme-speed slam (4e54406)
  • survivor — Knell v2 - hammer mortar patterns, halted two-wave toll, full voice (6df217e)
  • survivor — parts retune, aimed warden fan, boss steal retired, flatter waves (022e7e6)
  • survivor — the Gauntlet gate despawns, gates entry and respawns clean (d74acc0)
  • map — landmark sprites survive far zoom (b6d8418)
  • codex — Prime Alloy + Gauntlet entries, inventory equipment affixes (cfbb1f8)
  • army — garage-sized loadout slots + detail motion pass + reforge menu FX (20805db)
  • garage — craft ceremony, real resource icons, VIP gear rolls, tooltips (c788cb6)
  • army — empty affix channels take the VIP focused roll (482046e)
  • army — the reforge FORGE CYCLE + self-owned panel chrome (356ceb8)
  • vip — Focused Reforge single-affix reroll + the Armory REFORGE menu (76c9f8d)
  • survivor — crawler XP and levels are PER HULL, and the level-up celebrates (1ef40c5)
  • survivor — commander affix UI in the Armory (4c8e26c)
  • survivor — crawler levels are bought, and they pay out in the main game (37a47fd)
  • survivor — list Prime Alloy on the AMM (29315a2)
  • survivor — gauntlet dash uses the map's teleport cue (f699b72)
  • survivor — missile rack, flight and impact audio (130c869)
  • survivor — boss entrance scream (cd5a2d3)
  • survivor — brute arrival scream (39787d1)
  • survivor — boss telegraph cue on every kit wind-up (77d2323)
  • survivor — normal enemy hit impacts (5325e50)
  • survivor — enemy hit + death voices, keyed by the TARGET (ddea518)
  • survivor — boss fire voiced per KIT (Warden pulse cannon vs Hunter gunship) (5f046ab)
  • survivor — missile lock tone with a rising rack ladder (0c57070)
  • survivor — missile salvo ripple + heavy impact (95c8e2f)
  • survivor — enemy ranged fire cue (50bb1c3)
  • survivor — death, repair and the engine bed (bce5153)
  • survivor — crawler hit audio - three damage-magnitude bands (ab636fd)
  • survivor — turret fire audio + exactly-once projectile birth handling (2949f5d)
  • survivor — commander affix piping + v3 knob cleanup (dd30f34)
  • survivor — boss rotation - THE KNELL + HUNTER PRIME reaction-dodge kits (d1c51fb)
  • survivor — biome rotation - snow / forest / wasteland + the stage-10 simulation (5c52257)
  • survivor — v4 economy - Prime Alloy, supply caches, unlock crafting + world entrance (7b425e4)
  • garage — painted stat glyphs replace the inline SVGs (1f78e44)
  • garage — motion pass - inertia, crossfade, flourishes, busy states (82111b8)
  • garage — two-panel gear popup + drag fix + maxout gear kit (bb8764f)
  • garage — SELECT CRAWLER rework - animated hero panel (owner spec) (be1df39)
  • survivor — boss drops become SPOILS OFFERS in the trader (fe762eb)
  • survivor — Phase Drive trader icon + the survivor icon contract (56bed4e)
  • survivor — banked dash charges + ladder re-fit + blink marker fix (505bbd2)
  • survivor — dash teleport uses the map BOOST blink grammar (cb3c4f5)
  • map — night hull light - additive warm re-draw of the own crawler (d175a61)
  • map — own-crawler night anchor - warm lamp pool + full-strength veil hole (1c30fcd)
  • map — rim-light re-bake of all 4 unit atlases (default, upgrade, hunter, knell) (710e9dc)
  • map — night light holes - filter reuse + teardown reset (0eef2ee)
  • survivor DEV GYM - one scenario registry for operator panel, agent harness, and guards (e6f0edf)
  • survivor TTK anchor rebalance + dash blink + HUD layout fix (owner feedback) (2c73e6d)
  • survivor interaction feel pass (overnight loop iter 5) (2205f73)
  • survivor l10n compliance - composed strings via window.t, model/line names Tier A (overnight loop iter 4) (4038788)
  • survivor combat telegraphs + enrage state + wave stings (overnight loop iter 2) (c44f211)
  • survivor run-summary ceremony + blueprint drop fanfare (overnight loop iter 1) (e25dad0)
  • survivor ladder e2e + balance pass - the reach bands hold, mechanically proven (doc M10) (c566ca0)
  • survivor gear equips in the main-game Garage dual panel (owner ruling) (465e104)
  • survivor M8 - crawler gear: craft/equip/salvage/reroll, crawler levels, gear feeds the sim (doc sections 6-7) (06e849b)
  • survivor M7 - blueprint drop layer (D2 tables, attunement, flawless, halo, boss-steal) (345c05e)
  • survivor M6 - stage-gate trader, run escrow, extraction (docs/survivor-progression-design.md sections 3+5) (aaafe99)
  • survivor M4.5 - shader-class night pipeline (judge: 9/9 PASS, wall + phone shots at reference tier) (dccc723)
  • survivor M4.4 - engine-ceiling graphics push (judge: ART 9 / HUD 9, ~90-95% of pipeline ceiling) (51be0d8)
  • survivor M4.3 - owner issue batch (waves, AC6 missiles, crawler weapons/death, rolling fire, baked shadows, HUD anim) - judge-passed (b2a0e3c)
  • survivor M4.2 - production arena art, combat FX, and HUD (judge-passed) (7395fa5)
  • brighten the brute - basecolor gain + ambient + base AgX look (800935a)
  • survivor runner v2 - spinning wheel rig, eye glow, death pop, size + heading fixes (90dded6)
  • survivor movement inertia + smooth playback + owner-corrected headings (87bd735)
  • survivor mode M4 enemy art - Meshy-engine sprites via Higgsfield, rigged brute walker (901d37c)
  • survivor mode M3 server leg - server seeds, replay validation, stage settlement (47ee2e7)
  • survivor mode M2 stage loop - boss fight, powerup draft, stage rerun with carry (840657d)
  • survivor mode M1 combat - turret, missile lock, dash, repair, parts + upgrade tracks (5ee0bea)
  • survivor mode M0 greybox - deterministic shared sim + Pixi debug screen + guards (d3fa211)

Fixes

  • survivor — seat the hunter's core glow on the art's red eye (6f6321a)
  • survivor — charge motes on the wall clock - authored speed and density at any refresh (71e676d)
  • survivor — the ghost pops in at full hue - no fade-in (9b2883f)
  • survivor — ghost lifetime in wall-clock ms, matching the ad envelope (9f29f78)
  • survivor — drop the dash's flat streak quads, and bake ghosts on compressed atlases (b58951f)
  • run release verifier with Git Bash on Windows (f7218ab)
  • audio — every tier warms the combat library, so combat is never silent (761dc15)
  • guard — re-express the Gauntlet low-memory contract after medium was narrowed (69915d6)
  • audio — land the tier cap properly and put the comments back on their code (db15f71)
  • retry weather mask after resize failure (9a40e34)
  • resume Gauntlet without loading map (dc75899)
  • survivor — harden gauntlet recovery paths (91cac6a)
  • survivor — remove the wind streaks - the second scan line (1ec2367)
  • survivor — drop the arena border stroke - the grey line sweeping the corridor (f5dc75b)
  • survivor — combat buttons work while the joystick is held (iOS multi-touch) (093caf6)
  • survivor — particle placement decorrelated - the LCG lattice showed in the arena (66dbdc2)
  • release inactive iOS graphics and audio (eedfcdc)
  • survivor — thunder priced in map tiles, so lightning is audible (e1252b8)
  • survivor — the weather bed plays at Gauntlet level, not the visual discount (85f1ddd)
  • survivor — rain_heavy's baked-in veil floored out of the sheet (845fc92)
  • survivor — breath and haze at the map's exact clocks and formulas (7b80908)
  • gym — the WX weather control works, and is a dropdown (bf34b47)
  • survivor — weather particles and lightning are the map's own, in world space (5c0285c)
  • survivor — weather to true map parity (veil order, iso sheets, alpha math, substrate strength) (9d65849)
  • survivor — the Gauntlet could not start on iOS, ever (c4dcc0c)
  • ios — retry content after final hash failure (a23a2d2)
  • map — release the ceremony flash handle on teardown (4c8c314)
  • survivor — the Hunter at the shared boss box, and the Knell's wheels lit only at the hub (44c832b)
  • ios — a content update no longer re-verifies the whole manifest per file (54e74ef)
  • survivor — every Gauntlet boss casts its baked shadow (Warden bake, Hunter wired, no double Knell) (503b3e0)
  • map — release the void backdrop on teardown, so a re-init cannot black the map (18d59b9)
  • garage — a locked slot no longer blocks the craft, on either side (d3eb3ef)
  • hunter — a latched Crawler-bound Hunter survives a defender swap or unset (35d21e0)
  • garage — the slot gate the catalog never knew about, and a refusal the player could not see (0d54675)
  • survivor — every screen metric through screenSize, the loading gate never blanks, hero shadow at config scale (56832a2)
  • survivor — shadow bake defaults to 2.0, night veil matches desktop on phones (b8cb40b)
  • garage — a material shortfall routes to the market, never a dead CRAFT (28cdfbe)
  • survivor — CRAWLER_SKINS.default declares the v3 split atlas (missed from the rebake commit) (bcb2761)
  • survivor — logical screen metrics on every resolution, a LOADING gate, and the 256px v3 rebake of the crawler + Knell (c39f6cc)
  • ota — ship the Gauntlet asset tree natively - staging build was failing precompute (5b5d3a1)
  • survivor — root-cause the black screen, never release Pixi's global pools with a sibling renderer alive (fcdeb74)
  • survivor — the playfield can never stay black - render self-heal (14226e9)
  • map — stop the Gauntlet-exit GPU memory blow-up on phones (Pixel 3a measurement) (5e71121)
  • survivor — production candidate v1 - stability pass (cbb9ded)
  • survivor — stage logs fit the body parser - /api/survivor JSON limit from config (70ccae5)
  • survivor — red-team fixes - validator queue discipline, reaper keyed on validated stages, DENSITY refused, exit claims its tile (b0fe15a)
  • survivor — leaderboard clock anchored on the FIRST fight start; a death retry cannot reset it (5bf5841)
  • survivor — clear time is fight time - gate (trader) ticks subtracted; boss fight confirmed inside (5ee2e3e)
  • survivor — lobby board columns fit the card (2be3997)
  • audio — voice duck at -6 dB, release 250ms (45f08ed)
  • survivor — portal voice at B tier, layered with the original teleport-in (8b0b379)
  • survivor — boss-ability sfx mixed to a three-tier loudness ladder (0f039f4)
  • survivor — the finale partner is frozen while he prints in (787e5fc)
  • survivor — boss name never wraps; the tier chip stays on the name line (b2c0565)
  • audio — master limiter up-mixes mono sources to both speakers (bb6aca5)
  • survivor — boss taunt waits 1.1s after the crawler dies (8f8bf83)
  • survivor — final consonants survive the edge trim (Knell and Hunter re-rendered) (275db00)
  • survivor — voice tails audible - every line compressed; card bound follows the 7s window (fbdbba4)
  • survivor — Knell and Hunter on-screen lines cut to match the spoken first sentence (efde5f6)
  • survivor — death and taunt lines at 1.35x; next stage the moment the voice ends (a0db636)
  • survivor — boss dialog cannot be skipped (7cb1ec3)
  • survivor — first meeting speaks the signature line; death line fires the frame the explosions end (2903f97)
  • survivor — voice clips no longer truncated at pauses; entrance lines cut to fit (45c1c28)
  • survivor — dialog text always completes before the fight; last words after the explosions (1465a48)
  • survivor — seeker skips a spawning boss; warden_tune_1 gym (stage 1, the OPEN line) (0c93a0f)
  • survivor — Rampart voice post lightened - pitch capped at -0.5 semitones (60feab5)
  • survivor — boss vulnerable => camera home, dialog and crop gone (hard sim-clock cut) (fc98ed6)
  • survivor — camera focus moves the camera only; intro cinematic synced to the 3s materialization (8c00e77)
  • survivor — boss gate draws into the live telegraph graphics (gym black screen) (4dc2589)
  • survivor — boss line fires anywhere in the print window with room for the card (e9353b2)
  • survivor — toll never blinks between phases; collapse waits for the sweeps (08de401)
  • survivor — hammer shell spans the screen at any zoom, with motion blur (14bdf0b)
  • survivor — powerup chips use the trader's painted line icons (9097bae)
  • survivor — mobile HUD fit + firestorm stage scaling (3596499)
  • survivor — turret holds fire during repair (0ed2ecb)
  • survivor — teleport-in voice cuts the moment the boss materializes (2d8e3b5)
  • survivor — sweep timing - 0.2s ray stagger, 1.2s between volleys (02f7783)
  • survivor — sweep eruption is FIERCE FIRE - tongue grammar scaled tall (00b1405)
  • survivor — sweep eruption to the quality bar - sheared curtain, gravity debris (38611f3)
  • survivor — sweep lines render (empty-texture bug), hole holds through the wave (c8f4611)
  • survivor — toll field keeps a faded shockwave rim (a5d64f9)
  • survivor — firestorm front goes soft - fire-kit strips replace the stroked jag (167da50)
  • survivor — ground fire is FIRE, not a beam (77bbedb)
  • survivor — boss entrance darkens via the hyperbeam's world veil (0fe790a)
  • survivor — entrance glow moved behind the boss and dimmed, duo bar keyed by seed (6244cb7)
  • survivor — the finale firestorm never advances (53b25f5)
  • survivor — cache celebration says when a gym run cannot roll blueprints (c106a1f)
  • survivor — world stops on exit review, mounts follow the hull through dash (cf159a5)
  • survivor — turret draws as an iso ground-plane decal, not a screen-space spin (df367ed)
  • survivor — finale duo clarity, gym my-gear, cache celebration, hologram arena fence (60e4593)
  • vault — explain a hashless finalize instead of raw burnTxHash required (9be7be1)
  • vault — send the real wallet tx hash on burn-submitted (005ff88)
  • survivor — finale duo hardening - one entrance ceremony at a time (6b82a0e)
  • survivor — every knell hammer shell aims at its own shot (eaad6e4)
  • survivor — unbanked runs are loud + still celebrated; e2e gets its own account (a6bbb8c)
  • vitals — retry transient Play API failures so one 503 cannot page the watch as broken (0c9af48)
  • survivor — local-fallback carry keeps gear, unbanked loss is loud (fd04852)
  • megatower — Exit Run after a won fight credits the cleared floor, not one below (18b2bdf)
  • extraction — the owner CAS must SELECT the column it compares (0c36a1a)
  • extraction — the capacity clamp now reaches the ledger that pays (dbdcad9)
  • survivor — HP readout never shows a decimal (3d1cb28)
  • survivor — cache audit - exit race double-pay + earned-grade undercount (01d82eb)
  • survivor — fine-grain turning applies to ALL boss turning (99a102a)
  • survivor — boss gets the crawler's between-cell residual rotation (55bef66)
  • survivor — weapon star is a ball of energy, not a solid disc (4e3fe69)
  • survivor — V-wedge ground light, mean red restored, tighter falloff (335cc85)
  • survivor — laser-soft beam edges + cast light on the ground (e0fd9ce)
  • survivor — beam erupts from the charge star at full blast (c313514)
  • survivor — chained lance retargets the player at each re-aim (9cbaff9)
  • survivor — ground telegraphs render BELOW entities (8dd22f1)
  • survivor — beam emerges from the core; lance tracking truly clamped (a7d1182)
  • survivor — toll + hammer telegraphs draw the TRUE world circle (2ecea46)
  • barracks — a healed unit with no slot goes to Reserves, not a duplicate cell (3dac267)
  • survivor — ghosts anchor where the hunter WAS, hold longer (b44b12c)
  • survivor — pin the drawn crawler on outcome - no extrapolated glide (3061771)
  • codex — Prime Alloy's Where to Find shows THE GAUNTLET (739d1d3)
  • army — slots match the garage loadout scale + upgrade modal entrance (8ff7480)
  • garage — action-row wrap + mono roll chips, sublines become bubbles (6212dcf)
  • auth — connection resilience so network flaps never force a re-login (04a1761)
  • army — equipment picker redesigned as a modern card list with affixes (3c1a00a)
  • ui — vector info glyph, replay-gradient card names, one-line card back (94a91d3)
  • army — card names in the replay face, name-only overlays, hospital bubble, garage ink (f2d8a36)
  • army — readability sweep to a 9px floor, pinned by verify-readable-text (84dc66d)
  • command — squad tabs drop the cost overlays for the click bubble (fd0e18c)
  • army — leadership panel first, and the 1,000,000 cap fits (d8d86e8)
  • army — lore restored readable, leadership pared to value + bubble (b6891be)
  • army — readable Armory detail - lore box out, leadership panel rebuilt (d59023a)
  • survivor — the train sliders honor the per-tier cap lift too (5032fc1)
  • survivor — skin switch refreshes the per-hull bonus panel (1a89d42)
  • survivor — honest bonus panel, inert gear excluded, cap UI matches the server (710efa5)
  • survivor — doctrine chip spilled its own onclick into the panel (318e6a0)
  • survivor — fabrication cards show rarity, sort by it, and X out locked (506b24d)
  • survivor — arm boss clocks when the boss is born, not at the phase flip (008d570)
  • test — assert the unconfirmed-burn RULE, not its old SQL spelling (a048769)
  • survivor — boss takes the normal impact, heavy cue held for a stun (b01d034)
  • survivor — drop the turret to the bottom of the mix (9388b45)
  • survivor — lift the death mix; park the kamikaze shriek (15ccffd)
  • map — the gauntlet gate is clickable - hit-quad, selector, draw on the owner's footprint convention (253ea0e)
  • map — survivor gate draw crashed the GPU map into the unavailable card (273e5f6)
  • garage — drag inertia reverted, equip closes to show the flash, stable popup ordering + scroll (2150faa)
  • garage — surgical repaints - a click never rebuilds the screen (2108c5f)
  • garage — hero round 2 - spin correction, locked proportions, text calibration (c1b76ac)
  • survivor ceremonies fit the shipping phone envelope (overnight loop iter 3) (cd59b68)
  • survivor owner feedback round - turret sync, random locks, fire-all salvo, hit reactions, shadow fixes (2ac53aa)
  • brute heading mirror + kill its junk emission map (d3e026b)
  • survivor emission discipline - only mapped lights glow, never the body (5ebb917)
  • survivor brute headings (owner ruling S SW W NW N NE E SE), runner wheel spin reversed (1d5f89c)
  • survivor — pocket cells back to em_static only (owner: too extreme) (c261c10)

Performance

  • ios — backgrounding evicts the resource cache too (74e50ab)
  • ios — a memory warning evicts WebKit's resource cache too (5eb7563)
  • audio — budget variant variety by render tier (6ce4295)
  • audio — a notification decodes one file, not twenty two (3fc9945)
  • reduce medium Gauntlet residency (dcd5959)
  • reduce iOS map and gauntlet memory (38245a9)
  • survivor — stage-manifest residency for weather graphics and audio (d7b69dc)
  • survivor — the Gauntlet gives its audio back, and decodes only its stage (a8f2d1e)
  • map — weather sheets go ASTC, evict off screen, and free their GPU twins (5e91e94)
  • survivor — unload the map to run the Gauntlet, unload the Gauntlet to return - never both resident (3fbec7d)
  • survivor — one KTX2 reader for both renderers, boss atlases per stage, atlases released on exit (dba07f4)
  • survivor — batch transient FX by blend mode and pool particle sprites (Pixel 3a pass) (488ee63)

Internal

  • map — remove the tilt-shift setting and its shaders (#1192) (c2ad22f)
  • ui — tooltip sweep round 1 - base + alliance descriptive text to bubbles (a66ba92)
  • survivor — pin the hyperbeam root, and the instrument that measures it (39c27a3)
  • survivor — make the boss-move contact-sheet harness actually run (1221d99)
  • ios — prove the weather beds are actually released, not just silenced (075fb90)
  • repair Pixi crash guard matchers (2e10bdb)
  • ios — the rehash guard's fallback control models the pre-fix shape (ec2e077)
  • map — verify-weather-stack guards the two-layer weather contract and the audio director (00c4fc4)
  • l10n — read the cup copy for meaning, drive the Gauntlet live, repair two instruments (2e0fa63)
  • l10n — back-translation gate on the marketing site, all 5 locales (2a56977)
  • audio — classify survivorAssets in the iOS media-fetch sweep (3236cdf)
  • pvp — the wreck guard now tests what it claims to test (0fa0c27)
  • extraction — make the carry-loss assertion non-vacuous (0e420f1)
  • survivor — hitbox-matches-the-art parity guard (5bf856b)
  • survivor — v4 guard suite + settlement fixes + ladder re-fit; biome art (1b14ebb)
  • ios — gap 51 bottomed out, every major block named by symbol (2004393)
  • ios — gap 51 narrowed by elimination, it is engine overhead not content (e18bc96)
  • ios — gap 51 is a JavaScript question, not an asset question (5f8f975)
  • ios — correct where decoded audio is accounted, and narrow gap 51 again (8e7b476)
  • audio — record the three followups and the measured noise floor (252d9fb)
  • survivor — report on the Gauntlet shadow heading, and revert the experiment (cc762c5)
  • audio — record the tiered variant budget and the music streaming trap (8634d6d)
  • ios — name a 46 MB contributor to the gap-51 WebContent bytes (f575bdb)
  • ios — measure where the WebContent bytes go, and correct gap 51 (bd90149)
  • ios — what the fleet says, what the compression bought (eb0898e)
  • test — PR 1201's Gauntlet fixes, exercised on iOS (67fd540)
  • ios — the map and Gauntlet memory report (db1cac3)
  • test — iOS memory A/B for the weather stack and the Gauntlet (029f226)
  • survivor — house-format findings field on the v3 run record (c5a3a55)
  • survivor — findings field on the v3 all-units run record (3716929)
  • survivor — mark client-memory ACCEPTABLE after the Pixel 3a pass (8637e3a)
  • survivor — record the Pixel 3a phone-memory result in the v1 report (e368cd5)
  • survivor — production candidate v1 report; architecture doc brought to as-built; guards registered (27ec5c4)
  • skills — boss-skill-animation - every effect gets a death animation (7493394)
  • skills — boss-skill-animation learns the fire craft (e77c458)
  • skills — crawler-parity turning is three pieces, not two (3779498)
  • skills — boss-skill-animation - the hyperbeam FX craft (c277b64)
  • skills — wheel-glow rule in sprite-pipeline + two survivor skills (153ee8c)
  • survivor — record the bought-level doctrine, the halo gate, and the shipped affix UI (b6d240e)
  • survivor — record the four owner rulings, and say what the map gate is (65aa490)
  • survivor — correct the telemetry gap - the denominator already exists (e6a7b50)
  • survivor — bring both design docs level with the shipped tree (d9a3f86)
  • test-log — the service worker had never cached a response (74c78e2)
  • survivor progression v3 - fungible blueprint drops + craft sink, tempering cut, concrete gear-to-run tie (2b9fa37)
  • survivor progression v2 - Diablo 2 drop model per owner ruling (grind over forge, going infinite, halo chase) (bd24fb1)
  • survivor progression design (trader gates, boss cores, forge/imprint, tempering NFT gate) (92de042)
  • survivor mode system architecture (deterministic shared sim, corridor arena, stage-boundary validation) (189e364)
  • survivor — Rampart opener take B locked in at 1.35x tempo (5cb7282)
  • survivor — Rampart opener take B (eleven_v3, more expressive) installed for the owner's A/B (e4775e4)
  • survivor — warden_tune_4 = owner run snapshot at stage 4 (1b48c65)
  • survivor — hunter_tune baseline = owner run snapshot at stage 3 (174bf9f)
  • survivor — knell_tune baseline re-snapshotted from the post-compression owner run (d51083c)
  • survivor — knell_tune gym scenario snapshots the owner run at the stage-2 Knell (34d8b80)
  • l10n — prune three retired Garage strings from every locale (f9e8a73)

Other

  • l10n: auto-translate locale artifacts (dc49b55)
  • l10n: auto-translate locale artifacts (e36ed78)
  • l10n: auto-translate locale artifacts (0b24441)
  • l10n: auto-translate locale artifacts (902ef39)
  • l10n: auto-translate locale artifacts (400a5c2)
  • l10n: auto-translate locale artifacts (d9b0e33)
  • l10n: auto-translate locale artifacts (2c0e370)
  • l10n: auto-translate locale artifacts (c3c8bf3)
  • balance(survivor): glint_sparkle calmed - fewer, slower sparkles (f909c66)
  • balance(survivor): owner weather rosters per biome (r2) (0b21e46)
  • balance(survivor): rain_heavy and heat_haze alpha down 30% (owner 2026-08-24) (a2989be)
  • balance(survivor): ash_drift spread and thinned so it never walls off the fight (757555a)
  • l10n: auto-translate locale artifacts (0a77393)
  • balance(survivor): drop dust_light/spores/mist from the mode; all base haze to zero (3c260f9)
  • l10n: auto-translate locale artifacts (84f95b6)
  • l10n: auto-translate locale artifacts (72d2539)
  • l10n: auto-translate locale artifacts (48a39a9)
  • l10n: auto-translate locale artifacts (855fc5a)
  • balance(survivor): retune the crawler XP ladder to 10 / 30 / 60 / 150 (94bebcc)
  • l10n: translate LOADING in all 5 locales after the staging merge (2b997c1)
  • l10n: auto-translate locale artifacts (fd926ab)
  • l10n: auto-translate locale artifacts (bebeae3)
  • l10n: auto-translate locale artifacts (6c5a451)
  • balance(map): MIP_SHARPEN 1.2 (owner-tuned by eye on the live ladder) (cacb6f5)
  • balance: weapon gear 50% cap, finale beacon past midfield, map ground at native texel density (fbdc463)
  • balance(survivor): gear bonuses stack ADDITIVELY (5223b94)
  • balance(survivor): speed scoped to wheels, no dead affixes, alloy retune (022075b)
  • tweak(survivor): cyclone r2 - no spokes, faster + denser, enc-2 reversal (3f0f905)
  • tweak(survivor): volley breather after every hunter special (ce29090)
  • tweak(survivor): hunter sized to 1.2x the player's visible hull (a0e893d)
  • balance(survivor): epic drop weight 9 -> 7 (the 30-clear epic target) (a9a3ea2)
  • art: painted survivor UI icons, kept only what the impartial judge scored as better (df1ef21)
  • art: survivor gear model icons (9x 256px via Codex image gen) (8427e73)
  • balance: survivor spawn envelope retune + fix tick-0 spatial-hash hang (cb50736)
22911ab

Fixes

  • sw — clone the response BEFORE awaiting, or nothing is ever cached (1e2c630)
  • sw — range requests, concurrent activation, and four more from the audit (9507abe)
  • sw — revalidate a cached asset once per worker, not once per use (486c3fb)
  • vault — close the review findings on the burn-classification fix (a10f813)
  • vault — an unmined burn is not-confirmed, not a timeout (7b5d5c6)
  • release — a dispatch builds only when action=build - listing can never mint a binary (70db8a0)

Internal

  • test-log — sw per-use revalidation run fragment (11220ae)
  • anomaly — say when the unconfirmed-burn check can and cannot fire (d129c18)
  • test-log — vault burn-classification investigation and fix (da090ce)
7b09e30

Fixes

  • content — definitive delta refusals retry on a bounded fast lane (12cacfc)
  • ui — restore the HUD-chrome safe-area insets, and make battle replay full-bleed (3dabcda)
  • release — a dispatch must name its action - no default, and the gate refuses an empty one (17968da)
  • release — cutting an iOS build always lands its hash set, and the sweep sees every branch (15cc5a7)
  • release — the listing lane names the version code its changelogs attach to (9c58876)
  • content — the gate is bounded by PROGRESS, and every verdict settles the session (8ec0cc8)

Internal

  • test — log the safe-inset restore + content-gate fast-denial run (081f7ea)
  • test — log the promote review + gate hardening run (54cc856)
  • ios — record build 19 verified on-device (0e3ee0d)
  • ota — builtin hash set for shell 1787043882 (4e18e10)
  • ota — builtin hash set for shell 1787065459 (c30a859)
4d8d218

New & Changed

  • store — new subtitle, plus complete listings for all 5 locales (f6728d3)
  • l10n — translate all 268 strings the staging merge added (848795f)
  • l10n — complete the Thai locale, 6,218 of 6,218 strings (acf660f)
  • watch — the content gate gets a watcher, and the OTA failure rate gets a surface (a2e336b)
  • l10n — bring tr level with staging (269-string delta) (7b59bf8)
  • l10n — add Indonesian (id) locale (7a168ff)
  • l10n — Turkish locale (tr) (c40acee)
  • l10n — add Thai (th) locale, 80.5% translated (1ba644d)
  • content — background transfer, and the guard that was checking the wrong thing (1b37543)
  • content — universal mount, and required content becomes a resumable state (ae9ca62)

Fixes

  • l10n — rebuild derived config labels after the overlay, not at parse time (7a03f0c)
  • test — verify-march-no-teleport grades displacement only when it owns the world (8a67ae2)
  • l10n — P3 batch 28, completing the sonnet redo of the entire haiku pass (d4f674f)
  • l10n — translate the BASE combat-log line left byte-identical (cf21527)
  • l10n — P3 batch 25 (d52501b)
  • l10n — P3 batch 29 (0e0dca0)
  • l10n — P3 batch 27 (4e1cbeb)
  • l10n — P3 batch 26 (f9d460f)
  • l10n — P3 batch 30 (3da18bd)
  • l10n — P3 batches 19 and 23 (50896a1)
  • l10n — P3 batch 22 (110e2e1)
  • l10n — P3 batch 20 (8c6a083)
  • l10n — P3 batches 21 and 24, and two bugs in my own apply script (ada2b7a)
  • l10n — P3 batch 24 (0e81417)
  • l10n — translate Cap/Def, which shipped byte-identical to its source (a60b408)
  • l10n — P3 batch 18 (0c6c2fb)
  • l10n — P3 batch 13 (357e86d)
  • l10n — P3 batches 16-17, 268 more haiku strings replaced (5553cf2)
  • l10n — fourth P3 batch, merge-added strings, VIP as keep-english (0d076b2)
  • l10n — third P3 sonnet batch, replay hand fixes after every redo (a6494a8)
  • l10n — second P3 sonnet batch, re-reconcile case variants (5e9dcad)
  • l10n — apply first P3 sonnet batch, clear every stray-script defect (65e0067)
  • l10n — guard stray third-script characters, correct an overstated claim (5a32b3a)
  • content — the gate fails open when the server cannot answer the gap (f977816)
  • ios — make the content plugin compile, and record the 0% lockout it hides (2c7509f)
  • l10n — map id and tr to their store locales, unbreaking verify-store-l10n (bdd6aca)
  • l10n — guard every window.tUpper/tLower read, and make the lint require it (55765c1)
  • l10n — normalise to NFC before folding, so composition form cannot miss the join (fbae8ba)
  • l10n — the Pixi audit's residual is unknown, not English (d3aa281)
  • l10n — the audit's residual bucket is surfaced, not scored as English (66cdfc8)
  • content — a pre-plugin native shell is never gated, and the gate's failures are countable (e47b449)
  • client — locale-aware case transforms for the Turkish dotted i (9850736)
  • l10n — make the pipeline correct for a Latin-script target (bb74b1d)
  • content — the patch downloader owns the shared iOS tolerance (f18f220)
  • android — force the real ListenableFuture onto the compile classpath (44ad9af)
  • android — put ListenableFuture on the compile classpath, and only there (fcd2700)
  • android — the background worker needs ListenableFuture at compile time (1c23690)
  • content — the grade found two that would have made things worse (d32acd2)

Internal

  • l10n — Thai ship gate, back-translation grading PASSES 40/40 (a6a9986)
  • l10n — guard Turkish chat detection and the tr/id branch order (2efc780)
  • test — the iOS content chain is simulator-proven end to end (9273cd4)
  • record the unguarded-window and store-mapping findings (a0d3015)
  • record the Pixi sibling-path residual fix in the integration run (9b02dcd)
  • record the tr x id Latin-script integration run (4fc4cbf)
  • test — log the pre-plugin gate lockout find, fix, and device proof (5138d96)
  • test — reformat the overlay-mount fragment into the house format (2ba2958)
  • content — the Android chain is device-proven end to end (cc6adc6)
  • release — mark the unreachable master-push arms as unreachable (55fdccc)
  • content — re-verify the overlay on the rebased build (926a1ea)
  • content — the native overlay works, and is inert on the builtin bundle (a561ccc)
  • ota — the overlay is inert on the builtin bundle, and why that matters (40d0423)
  • content — the mount is not one mechanism, and the invariant that decides it (971ee2e)
  • ota — content resolution is not universal, and the mount is the fix (3f594e2)
  • l10n — resolve the staging merge, prune a retired key from every locale (81bb99c)
  • ota — builtin hash set for shell 1787036400 (9d52599)
  • ota — land builtin-hash artifact for the Pixel 3a content-mount device gate build (089dd65)

Other

  • l10n: auto-translate locale artifacts (01287b0)
  • l10n: auto-translate locale artifacts (fa7f910)
  • l10n(id): top up after rebase onto staging (1c64c2e)
  • l10n: auto-translate locale artifacts (2e1cc00)
fbf1c57

Fixes

  • ota — ship the slim-regression detection that PR #1110 dropped (#1113) (fbf1c57)
1331b3d

Fixes

  • ota — land two stranded builtin-hash artifacts, and make the regression loud (#1110) (1331b3d)
8b53cba

New & Changed

  • map — warm the whole map into cache at login so the player never sees a blurry region (#1106) (8b53cba)
c4d099f

Fixes

  • defense — the crawler defender refills from Reserves like every other commander (e7a0ecb)
  • deploy — raid and reinforce snapshot the squad they actually sent (b475147)
  • barracks — a returning squad updates the preset it was DEPLOYED from (d89980d)
  • ios — declare no tracking, and remove the ATT surface Apple flagged (#1095) (8be0add)
  • map — ground KNELL's shadow to his hull instead of a hand-tuned offset (aa482a2)
  • extraction — occupancy message reads the occupier's current alliance too (bb1e353)
  • ci — the version bump moves all three files, and its probe stops dirtying the tree (8b83780)
  • raids — never OFFER an attack on an alliance member, and never strand the abort (c44e0d4)
  • ci — move the version train out of package.json so a bump cannot restart prod (481cef2)
  • ci — release automation never opens a PR into master, and lands one PR per run (57953e0)
  • raids — stop the friendly-fire abort stranding a march at 'resolving' (b1390bf)
  • map — reserve the Citadel and the capitals so doodads stay off them (9c8ed70)
  • ci — green the promote - four stale guards, none a product defect (a2957ad)
  • map,client,android — second review pass on my own promote fixes (6b6daca)
  • ci — MainActivity lifecycle overrides must be public; drop gh from l10n (4215f7f)
  • alliance — send the invite code, so a closed alliance can be joined (ea466b5)
  • map,client,android — apply code-review findings from the promote (9dfe6d5)

Performance

  • client — drop the retired terrain photos from the shipped bundle (864027e)

Internal

  • defense — end-to-end proof of the crawler-defender refill (ae1ef64)
  • ios — build 17 verdict, the build that answers Apple's tracking flag (4124ed4)
  • ios — correct the build 16 note, the prompt came from the OTA not the binary (e79061b)
  • ios — record the build 16 device verdict, with the install route stated (2573c6d)
  • test-run — iOS pre-submission device audit, and the uploaded build that must not ship (b11f155)
  • release — open the 1.0.7 version train (18ff2f6)
  • ota — builtin hash set for shell 1786912628 (597b3a8)
  • ota — builtin hash set for shell 1786906227 (7ff9e60)
  • release — open the 1.0.6 version train (541c766)
  • ota — builtin hash set for shell 1786901028 (b1dd9c0)

Other

  • l10n: auto-translate locale artifacts (74f1fd8)
  • l10n: auto-translate locale artifacts (16d2a94)
  • l10n: auto-translate locale artifacts (1a65a79)
  • l10n: auto-translate locale artifacts (31cad01)
b863bc8

New & Changed

  • veterans — require an exact name replacement, auto-fail impossible names (ad58b16)
  • assets — compress the four city textures, 10.4 MB GPU to 2.6 (cba1c14)
  • veterans — clawback takes the full amount, balances may go negative (2a0a488)
  • veterans — arm the synthesis reject, same-image rule, revoke + clawback (2dd8575)
  • veterans — Hive synthesis scan as a review signal on claim images (83ee1ca)
  • assets — make GPU compression the mobile-first default, not a step (5291aa7)
  • map — compress the Knell and Hunter atlases, 82 MB -> 20.5 MB total (de3b715)
  • map — GPU-compressed (ASTC) crawler atlases, 24 MB -> 6 MB each (2944c39)
  • map — delete the bake from the Pixi path - far minis are the far view (e79e4ab)
  • map — far-bake shrink + tall-prop occlusion fade; frontier expansion deferred to design doc (75bed5c)
  • vip — pay the first stipend day the moment the membership is bought (#1059) (6424b5f)
  • map — ring-0 tiled conversion + reimagined Cindria riverbed ground (dc5a309)
  • map — Dustbowl tiled-ground conversion - region twelve, outer ring complete (f20e43d)
  • map — Havens Rest tiled-ground conversion - region eleven (9d05859)
  • map — Thornfield tiled-ground conversion - region ten (4abf9a5)
  • map — Verdant Reach tiled-ground conversion - region nine (24a5341)
  • map — Signal Graveyard tiled-ground conversion - region eight (c597470)
  • map — Glassfield tiled-ground conversion - region seven (1b4c1cf)
  • map — The Maw tiled-ground conversion - region six (952adec)
  • map — Reactor Flats tiled-ground conversion - region five (c887048)
  • map — The Crucible tiled-ground conversion - region four (cb0e27d)
  • map — Sunder Basin tiled-ground conversion - region three (46b2f71)
  • map — Black Canopy tiled-ground conversion - region two, zero renderer edits (a828da1)
  • map — tiled-ground residency - load on approach, byte-budget LRU eviction (the jetsam answer) (763d512)
  • map — iso shadow system, prop variants, themed clusters, macro layer + the conversion runbook (9af0ab5)
  • debug — maxout marks the urgent-quest chain complete (6d7c363)
  • map — Bonefields tiled-ground pilot - masked ground tile + y-sorted props replace the baked photo (8ea0e89)

Fixes

  • android — recover from WebView render process death instead of crashing (dcf6318)
  • ios — never ask for ATT, and keep the measurement that needs no consent (ee135ee)
  • ci — default a dispatch's version_name to the package release train (#1073) (ef448aa)
  • ota — land the two stranded builtin hash sets, restoring slim manifests (#1072) (f7b093e)
  • map — drop four dead pape assets; record the rejected weather eviction (f947d19)
  • map — sites y-sort with doodads instead of always losing to them (7108c18)
  • map — base-free doodads is now the rule; redo the Cindria shrubs (5f0c69a)
  • map — regenerate Thornvale plants without their dirt bases (5c160fd)
  • siege — march cap no longer counts defeated tombstone queue rows (7718901)
  • veterans — drop the bespoke revoke mail, reuse the existing template (b635cfb)
  • veterans — unpaid claims reject rather than revoke, and say so (6a4aa4f)
  • map — one decoded copy per tiled file, and a residency cull that binds (305e01a)
  • map — cull sectors per QUADRANT - the ring test was defeating the residency LRU (b043cd2)
  • client — stop rendering while the app is backgrounded - the ANR root cause (f203ee4)
  • android — drop the duplicate Facebook classes instead of linking the login SDK (#1060) (067b2e7)
  • android — keep one copy of the Facebook SDK classes in the release dex (#1058) (c4a05ef)
  • map — Cindria riverbed - strong in-tile meander, flows SW toward Sunder Basin (5c7f6ae)
  • map — iso-axis dustbowl washes; prop boundary margin + void cull; ZONE_RINGS single owner (3b737c7)
  • map — viewport-bbox tiling quads - the sprite-mask bounds hazard; Black Canopy quality parity (1c41d55)
  • map — THE ISO INVARIANT - ground layers render through the iso shear; shadows, macro layer and flat rotation removed (136b0c8)
  • map — tiled-ground art-judge round - measured grounding, world scale, paint bands, biome value balance (841ea6d)

Performance

  • map — detach the mask when a sector is culled, not just hide it (3e63b2d)

Internal

  • map — world geometry fully config-derived - the frontier-expansion staging (7678eae)
  • ios — verify the ASTC atlases on WebKit, and reconcile the two cull fixes (de8fc85)
  • ios — classify the compressed-texture fetcher in the media-fetch guard (c516a2c)
  • test-run — staging build device audit on the Pixel 3a (#1074) (271d51b)
  • skill — narrow the no-base rule to things that grow (1e40484)
  • ios — audit what is actually left to GPU-compress, and correct the list (5a2b69d)
  • map — measure the RenderTexture ground cache and reject it (2b50747)
  • record the GPU-compressed atlas contract in CLAUDE.md (4b2e51e)
  • map — rollout status - all 12 outer subregions converted; note the zoom-out prefetch pass (42c37a6)
  • map tiled-ground design - port the survivor ground/prop system to the world map (8e998de)

Other

  • l10n: auto-translate locale artifacts (4d31ad1)
  • l10n: auto-translate locale artifacts (c4d2826)
  • art(map): Bonefields tiled-ground pilot asset set (codex image_gen) (17bdb4b)
95c71e3

New & Changed

  • vip — the daily stipend accrues and is COLLECTed, instead of auto-crediting (b12f106)
  • shop — VIP Growth Status takes the second slot, with its own badge (060f79c)
  • cloud-ai — the Deep Archive, a 30-ask day on a durable counter, and a derived breaker (723e7f0)
  • vip — VIP Growth Status, a support icon in the quick nav, and one Discord chip (c5ecd7a)
  • cloud-ai — generate the advisor's knowledge from code, add the VIP tier (4655787)
  • add Meta ads measurement (c9e05de)
  • l10n — commit the reviewed Russian store listing so CI stops re-translating it (d9acfdb)
  • siege — retune anti-spam lockout and cap Citadel marches at 1 (Armory Lv5 unlocks 2nd) (02f1c6a)

Fixes

  • vip — a refund reclaims banked stipend days, and the ask path fails loud (4bfcb31)
  • test — the SYS-chat mirror follows the money, not the prompt (8f23c50)
  • test — the cancel claim-guard assertion matches the statement, not its text (9b19cf8)
  • test — scope the shop-refetch assertion to its handler, not a byte window (cd35fbb)
  • test — the VIP guard resolves pg by bare require, so it runs in a worktree (a1e20af)
  • cloud-ai — the first chat bubble no longer renders inside the header (374e1c3)
  • events — fire stashed chain cards on quest tiles, drop haul chrome (3d69552)
  • combat — tied slot selections resolve by position, not array order (4ee13ae)
  • replay — share links from the native apps are public URLs, not app origins (87122c1)
  • equipment — blueprints are not craftable, remove the craft path (5addd1c)
  • l10n — the subscription-mode lint restores BOTH run reports, not one (6efb651)
  • l10n — one English store string gets one translation, per locale (f091a4d)
  • extraction — stop the cycle path double-writing item custody (2x loot) (7a82b4c)

Internal

  • vip — pin the web checkout branch, which no local probe can reach (cd52c62)
  • rule0 — scope the em-dash ban to player text, guard it, sweep it (1ffe9ca)
  • bd — capture doherty_san partnership inbound from ticket watch (4c74dd2)

Other

  • l10n: auto-translate locale artifacts (95c71e3)
  • l10n: auto-translate locale artifacts (90fa338)
  • l10n: auto-translate locale artifacts (d00f908)
  • l10n: auto-translate locale artifacts (97855bd)
  • l10n: auto-translate locale artifacts (f77df62)
  • l10n: auto-translate locale artifacts (415554d)
57f9f06

New & Changed

  • money — premium ASH offer runs until turned off, not until a date (9552af8)
  • map — night lighting - light holes + own-crawler anchor (survivor grammar) (e04fae3)
  • admin — cross-panel nav, real player identity, and an attempts queue (a18954d)

Fixes

  • veterans — first-time nonce requests were throwing ReferenceError (a1327cd)
  • economy — ledger beacon-pull key spends so the sink is not invisible (b0971ad)
  • extraction — event-card items were never delivered; give them custody rows (588edbf)

Internal

  • money — un-rot the ash-sale premium assertion when the sale window closes (c5ade79)
f8288a4

New & Changed

  • generalize store localization pipeline (b6bcc53)

Fixes

  • sim — model the storage cap, real premium, and exact recycle yield (dc6252d)
  • combat,sim — resolver config through GAME_CONFIG_REF, and a non-vacuous economy gate (afed7d0)
  • veterans — apply the picker fixes to the shop tab too, and sweep both (100ccb2)
  • veterans — make the claim code typeable and let players change game (b69e9f1)
  • arcology — every floor exit refills wounded slots, not just advance (87c7379)

Internal

  • arcology — guard-credit was randomly red; account for triage recovery (f4b468b)
0261d8f

New & Changed

  • veterans — canonical Cipher welcome art + plain commission panel (23a61b9)
  • watch — tier-drift check, and stop the guard inheriting the scan's exit code (7bf548e)
  • veterans — automate verification, add the runtime kill switch and an ops panel (a78d873)
  • watch — the veteran ASH payout is watched (de63812)
  • veterans — art pass, Cipher presents the commission + citadel hero backdrop (960f3e8)
  • veterans — verify-now, pay-on-player gate policy (6e5c28b)
  • landing — standalone /veterans ad landing page (one-tap signup + inline claim) (fcda395)
  • l10n — Russian locale complete, 6,181 strings, and zh-Hant's frozen spans repaired (a659f58)
  • l10n — guard that a numeral never governs a noun in a multi-plural locale (1e66125)
  • l10n — settle the four ru terms the glossary never covered (36f19de)
  • l10n — Russian locale wiring, glossary, and per-locale pipeline paths (4456857)

Fixes

  • veterans — live guard pinned the retired magnitude-review rule (f8712b4)
  • veterans — make authenticity and code-presence independent axes (25033af)
  • consistency — oracle walks riposteHits and volatileExplosion targets (dacec3d)
  • alliance — application-only alliances list on the discover board (87261ee)
  • watch — the ceiling non-vacuity check coupled itself to an unrelated knob (c104adb)
  • veterans — alpha-clean Cipher art, commission panel on her left, mobile order (a1ac3e5)
  • extraction — 4h relocation re-rolls site_type from current weights (0b27ae2)
  • l10n — act on the judge review, and two live plural defects it led to (9fde4de)
  • telemetry — attribute stackless window.onerror parse failures (ce3be9d)
  • client — bound the pixi late-recover to once per session; add ANR issue enumeration to play vitals (028d3f3)
  • l10n — Enforcers had three names, and a gacha pull was a police manhunt (474ed35)
  • l10n — data-no-i18n covered the chat panel's own UI, not just user content (8e3a58c)
  • l10n — English-only pluralization was leaking a Latin "s" into every locale (d59c0af)
  • l10n — Cyrillic Mark against the glossary, and the ru em-dash exemption (dd87cbe)
  • l10n — 17 plural hazards the guard cannot see, and XP Shards rendered four ways (5d1447c)
  • l10n — 18 defects the back-translation gate found, 7 of them wrong mechanics (a5b87c0)
  • ci — green the promote gate, four standalone verify failures (#1015) (7e3f503)
  • native — ru font sheet never shipped to store builds, and two guards that let it (33d1932)
  • l10n — the market composed rarity and "Blueprint" around a translated name (884f6b5)
  • l10n — sources differing only in case must not diverge, or both render English (ada82f9)
  • ci — the store-bundle check demanded the pseudo-locale ship (#1014) (a08a18e)
  • l10n — Latin letters hiding inside Cyrillic words, and a guard for them (da8f80a)
  • l10n — the ship-gate audit crashed on the login screen and mis-reported its locale (568b8a9)
  • l10n — an HTML entity made a shipped translation permanently unreachable (63be2a3)
  • l10n — {lore:} and {elc:} are DISPLAY markers, and we froze them as English (d824b78)
  • l10n — the Google sign-in button ignores our language, and it always has (cc78dc9)
  • l10n — HTML entities are markup, and mandatory-English brands are glossary (6fc55f7)

Performance

  • veterans — purpose-built hero backdrop, replacing the repurposed banner (f498281)

Internal

  • l10n — runbook lessons from the ru backfill and its adversarial review (9465a3b)
  • l10n — log the back-translation gate, and the plural idiom it exposed (5d9565b)
  • l10n — log the Russian backfill run and what a second locale exposed (ec7ff45)
  • l10n — record what the Russian fan-out actually cost (d9fc626)
  • veterans — Deep Wastes violet palette, retiring the amber scheme (0585cb1)

Other

  • l10n: auto-translate zh-Hant artifacts (9c8f6a2)
ea3a45c

New & Changed

  • veterans — reward badge (up to 5,000 ASH) beside a right-sized CTA (b4bc3b5)
  • combat — tactical_override marks two slots and stops the dodge (2553e54)
  • veterans — move in-game card to top of Community view, match panel styling (9063068)
  • veterans — stipend is tier/5 per day over 5 days, not a flat 1000 (f85277b)
  • combat — synaptic_betrayal resisted by bigger squads (0481e0f)
  • telemetry — promo redemptions from the ledger, plus per-purchase detail (d0a6a19)
  • add Ark of War + 三國志·戰略版 to Veteran Transfer with researched tiers (9b1cfea)
  • l10n — pseudo-locale pass, so the next language starts near-complete (71a4e77)
  • researched tiers + accept/decline/support offer flow for Veteran Transfer (0cb73ec)
  • operator re-drive for outage-parked veteran claims + judge residuals (140f933)
  • Veteran Transfer surfaces (hub shop tab, /veterans redirect, in-game link) (cfad66d)
  • Veteran Transfer server core (claims, LLM verify, stipend) (5e5841d)
  • l10n — zh-Hant backfill, 501 strings from the closed extractor blind spots (040a619)
  • Alliance Cup slide in the quicknav promo carousel (cef6b58)
  • past-winners card on the Cup pane from the previous cup's paid ledger (d735d55)
  • show the Alliance Cup prize pool in-game (growth plan R1) (f5872b7)
  • l10n — parameterize the pipeline per locale, add language profiles and back-translation grading (484f5e9)

Fixes

  • ui — menu top bar keeps its safe-area inset on landscape phones (b811f61)
  • ui — barracks T3 reserves no longer clipped by the safe-area inset (a784877)
  • ui — tall-landscape center + stretch (Gap 53) + paint-aware audit probes (791753f)
  • veterans — full-width CTA so CLAIM ON ASHENTHRONE.COM fits (02fc327)
  • events — events-screen overflow at short landscape + single-box veteran card (3121cfc)
  • combat — give a non-numeric battle seed a real identity (536374c)
  • lint — bound the mail params harvest to the call it is inspecting (ec1c857)
  • veterans — stop over-routing clean claims to review (c5a3273)
  • release — the lander stops re-labeling the clone as the bot (b9dd638)
  • veterans — accurate per-game nonce field, private ladder, no-loss framing (a659638)
  • veterans — dark dropdown, verifying-state progress UI, six-game copy (d4ee778)
  • telemetry — counts belong in the event, not the client_errors message (0474de4)
  • l10n — siege status lines, and log the pseudo-locale sweep (f3f0d58)
  • l10n — battle replay, the last combat surface no pass had driven (37840e6)
  • l10n — tutorial + building-requirement labels, and close push gap #27 (0ff73b0)
  • l10n — event sub-surfaces, dates, and the plural family the pseudo pass found (0f6f6e8)
  • judge findings for Veteran Transfer (quota owner, deletion policy, admin verdict guard) (9f44bbb)
  • l10n — zh-Hant visible coverage 98.2% to 100% across all 15 core screens (d4205d7)
  • mount veteranRoutes before the auth wall; map oversize uploads to 413 (dbc50d6)
  • l10n — restore the em-dash in the normalizer's CJK punctuation class (b02ce97)
  • l10n — VS on the replay cut-in is a graphic, not copy (13b4ba6)
  • l10n — close the two extractor blind spots that shipped the 56% pilot (5478ab9)
  • worldboss — every boss attack threw at arrival; the boss was unkillable (95ab23a)

Internal

  • coupon — pin that a coupon-discounted purchase still climbs the ladder (8acdfcf)
  • Veteran Transfer guards (static contract + live behavioral regression) (7156dc8)
  • l10n — regenerate the pseudo-locale artifact alongside the catalog (6f41b45)
  • serialize the playwright apt step; concurrent jobs fought over the apt lock (a6f567d)
  • teach the partition meta-lint that DATABASE_URL may arrive via GITHUB_ENV (2802532)
  • resolve the ephemeral Postgres port in a step, not job-level env (db55a83)
  • fix two self-hosted failures the first real run exposed (5baa41a)
  • vars-switchable self-hosted runner pool for the ubuntu jobs (3809a91)
  • give verify-standalone a 20m budget; it outgrew the 10m ceiling (#1000) (dd9483f)
  • close Known Gap #27, zh-Hant push templates are translated and rendering (e7d0fc7)
  • l10n — log the 2026-08-08 zh-Hant visible-coverage run (b28056e)
  • ci — record the shared-machine hazards and correct the sudo claim (cc6a188)
  • Veteran Transfer surface corrected: hub /shop tab + in-game link-out entry (33e5ea9)
  • Veteran Transfer surfaces as a shop tab (d9d45d5)
  • Veteran Transfer design, owner decisions locked (rename from defector) (202377c)
  • Defector Program design (vamp acquisition strategy) (3a0b9f6)
  • strip em-dash from a carousel guard message (0918fa8)
  • strip em-dash from an eventsManager comment (754025b)
  • strip em-dashes from two new comments (222b103)
  • growth plan 2026-08, acquisition + retention from prod telemetry (fb047fd)
  • events — rename Community tab to 'Community Rewards' (937ee58)

Other

  • l10n: auto-translate zh-Hant artifacts (ea3a45c)
  • l10n: auto-translate zh-Hant artifacts (011e7f4)
  • l10n: auto-translate zh-Hant artifacts (8001614)
  • l10n: auto-translate zh-Hant artifacts (ac4291d)
  • l10n: auto-translate zh-Hant artifacts (d37f9f7)
  • l10n: auto-translate zh-Hant artifacts (14da6fe)
dac9ab7

New & Changed

  • audit — automated iOS/Blink per-screen parity harness + first run (fe40a94)
  • social — gateway-relayed OAuth callbacks, zero per-shard provider config (8289f4a)
  • watch — page when slim OTA manifests stop reaching every device (016e311)

Fixes

  • combat — a shield protects its own slot only - riders base on thrown damage (1833a9e)
  • watch — ota_rollbacks pointed at the bundle; the data points at device RAM (3860df6)
  • watch — despawned_but_active was measuring accrual, not presence (4d113f4)
  • telemetry — filter an extension error that mints a fingerprint per occurrence (d52fcbe)
  • alliance — "last online" reads real activity, not the frozen login time (52677ea)
  • ios — restore viewport-fit=cover + safe-area box inset; retire quicknav manual inset (912099a)
  • ios — neutralize WKWebView text autosizing + WebKit-safe flip cards (643f659)
  • armory — roster paints with its data, and animates in once per visit (fc4868c)
  • ota — strikes that stick, and rollbacks that require evidence (41c4ba5)
  • replay — a torn-down replay can no longer crash the martyr FX block (818951b)
  • map — the crawler panel stops showing a broken image and "..." while loading (3f9dea6)
  • release — iOS signing standard, and the smoke stops failing healthy builds (60f3978)
  • telemetry — client-error fingerprint identifies the error, not the build (32f15ec)

Internal

  • alliance — drop the SHARE TROOPS roster left dead by the Info/Bank split (e2ed2fd)
  • test-runs — house-format the bot-authored OTA rollback fragment (72444fb)
  • client memory acceptance rule - decoded bytes, per render tier (85dc6f5)
  • ios — build 14 memory verdict - 792 MiB peak, 82% of ceiling, measured quiet (478115c)
  • shards — social OAuth is one-time gateway registration, nothing per shard (d4042ed)
  • ios — build 14 verdict, and what the trace could not measure (5c9cfee)
  • ota — builtin hash set for shell 1786115855 (84aeb2c)
6727ca94

New & Changed

  • map — compact keeps all 12 overlays, at half resolution (9ce849f)
  • ios — forward memory pressure into the page so caches shed before the kill (c7024a3)
  • telemetry — report session deaths at boot, with the screen they died on (430d9b2)
  • death — name the destroyer on the crawler death panel (19a8b4a)
  • extraction — scarcity-driven dynamic restock + reprice the loot ladder (3015a42)
  • map — mark the intercept and draw the target's path to it (32bfbb9)
  • telemetry — count the two outcomes pursuit created (3d36880)
  • release — iOS publishes its own shell artifact, and the version train opens itself (1ac4773)
  • ota — per-language locale manifest views (2d42c29)
  • native — give slow links five minutes per OTA file (responseTimeout 300) (74ecdfa)
  • ota — enable slim manifests (undark SLIM_ENABLED_DEFAULT) (71adfaa)
  • ui — bottom-right rail mobile pass - 44px flush square icons, garage skin icon, chip-bordered text (7cccf9a)
  • ui — animate the tasks rail to the motion contract; crawler panel goes frosted glass on the card edge (262bffe)
  • bd — capture Discord ticket leads into a tracked pipeline (90603d2)
  • telemetry — mark the recovery reload so it stops masquerading as a crash (43b4a6d)
  • reinforce — iter 5 - DOM crawler status panel + tappable host battle card (d0bf1b2)
  • reinforce — iter 4 - winner-loss teeth, boost parity probe, radial REINFORCE + host chips (099a59c)
  • reinforce — iter 3 - alliance reconcile sweep, host replay access, guard teeth (f0423bb)
  • reinforce — iter 2 - upkeep custody leg (P0) + sequential garrison defense chain (fec924a)
  • reinforce — iter 1 - server core: deploy route, reinforce march, garrison parking, recall, deletion hygiene (c9aa5d3)
  • pursuit — tell the defender when an incoming march is re-timed (fd14750)
  • pursuit — marches re-aim when their target changes course (6ea1aae)
  • pursuit — a raid boost moves the squad, not just the clock (2c208b1)
  • pursuit — the server stops teleporting marches (a6ac648)
  • wip — intercept pursuit solver, shared/pursuitMath.js (aaa03ea)

Fixes

  • reinforce — despawn garrison release runs in a transaction (a39fa10)
  • reinforce — despawn returns garrisons; lint every deploy path into the rail (2831c0d)
  • reinforce — parked garrison surfaces in the squad rail, recallable (7586eb2)
  • reinforce — a poisoned garrison row cannot wedge a battle (20b7d53)
  • apply 15 code-review findings from the promote review (1684dcc)
  • ios — commander videos probed as missing, and the sweep that could not see it (e85f56a)
  • ui — deploy modal action bar is always reachable (f5ff423)
  • arena — annotate the walkover watch-post as a non-click action (#967) (3240a2f)
  • map — upload BEFORE release, the defect every green check was blind to (9847a03)
  • map — pin the variant BYTES, stop the builder eating its own output (9c695b8)
  • client — a restore is once per boot, and release the bitmap it replaces (ddcf0e4)
  • map — restore the shared bound a docs commit quietly broke (20c7576)
  • watch — bound the build regex so a client string cannot poison the check (9427847)
  • watch — a device floor above daily actives is not a watch (a940adb)
  • guard — the signal-watch DSN refusal matched the scheme, so it never fired (cfff319)
  • ios — the dead-signal detector could never fire, and a regex pinned the break (647adb2)
  • ios — give the render tier a real RAM number, and stop hoarding decoded pixels (b392c17)
  • reinforce — route the reinforcement march through the travel owner (205984c)
  • map — identify an incoming raid by owner, not by coordinate (2e3832f)
  • extraction — recall reads the squad off its outbound leg; guard leg-writing statements (58179d3)
  • pursuit — extraction re-aim credits along-track ground, matching the raid (351e1d2)
  • pursuit — make the fixes reach the paths players actually take (f83dbbd)
  • extraction — march_pace dies with the leg it describes (1ebd720)
  • pursuit — carry the exact leg pace so it cannot ratchet across re-aims (e4c5c50)
  • pursuit — carry the exact leg pace so it cannot ratchet across re-aims (4a84631)
  • extraction — stop the client mirror lying about phase, and make the deploy leg reach it (769276d)
  • raid — measure the target at the arrival instant instead of reconstructing it (3e68314)
  • map — draw the deploy leg in screen space, and stop inverting it (2b27a4d)
  • map — draw a deploying squad from its stored leg, not the live crawler (188d936)
  • extraction — stamp the deploy leg after prep, and tell the client about a boost (f2844c8)
  • extraction — price every leg by the tile it is actually stamped with (36dec6f)
  • extraction — clear the march leg on every settle path, server-wide (05d87e6)
  • pursuit — carry the leg's own pace through every re-aim and boost (6c6db58)
  • extraction — end the march leg when the march ends, and guard the class (92030dd)
  • guards — repair two more guards a full partition sweep found red (d34c0b8)
  • repair the guard I shipped red, back-date the extraction re-aim, cover the clamp (d6cd0fb)
  • extraction — give a deploying squad a real leg, and guard both boost paths (562ec16)
  • extraction — the boost moves the squad, and guard what a review found unguarded (ed6ec81)
  • pursuit — lock an engagement, clamp returns, show the intercept to the defender (efdb0a8)
  • pursuit — the intercept may not lie beyond where the target stops (5732569)
  • map — draw a returning squad to the server's aim, not to the crawler (bf0cf57)
  • map — one sprite/dot cutover for all crawlers, nameplates in the close band only (9645f75)
  • ui — rail portraits render at native scale, not a 3x bilinear downscale (7f927d7)
  • arena — three permanent-wedge blockers, house-pod climbability, prize delivery (403a948)
  • the certifying review's required fix, and close the class it exposed (aeb9bf5)
  • release — the lane that lands was never allowed to land (e9a906a)
  • remaining review findings (incoming aim, tx forward, stale prose) (dd21739)
  • four more review findings (renderer, world payload, boost race, cooldown guard) (19146bc)
  • release — the version train never actually landed (0edcca7)
  • four defects found by the independent review (C+) (956409e)
  • test — close the fourth commander pick and lint the class shut (4ff0ca5)
  • ui — rail rev 3 - single-border pill, 34px square icons, matched avatar (1bc380f)
  • ci — the context-loss guard pinned arity and distance, not the invariant (5367d28)
  • ui — rail icons flush with the bar (44x36) per design critique (e26efef)
  • guards — repair two guards that failed against correct code (7ade5fb)
  • i18n — the frozen builtin copy never repaints a cache backwards (7ddff10)
  • i18n — the origin is authoritative, not a fallback (052d612)
  • ota — the store bundle lost its locales, and the guard pinned the label (b499679)
  • extraction — stamp the march leg on a recall-mid-deploy return (b0aaa7d)
  • extraction — forward the tx into the retreat travel-time read (efabde3)
  • test — hud z bound parses game.html's .resource-bar rule (styles.css block carries no z) (ca2209a)
  • ui — crawler panel z=20 - above the pixi map, below the hud so DECIDE wins (d4b13a3)
  • ui — crawler panel drops its z-index - canvas-layer stacking, DECIDE chip renders over it (17642f1)
  • ui — tasks expand animates only the rows that change - no more rebuild flash (926d769)
  • clear the last three review findings (9af7360)
  • pursuit — re-aim writes are compare-and-set, not status-guarded (afb653a)
  • ui — share one right-rail edge, and reduce the tasks expander to a bare arrow (e4c7efc)
  • extraction — a re-aimed return keeps its timing contracts (71b404d)
  • extraction — returns no longer bump and snap back to the site (79dce04)
  • reinforce — friendly march no longer reads as an attack, panel clears the bar, replays order newest-first (8395fb3)
  • pursuit — a boost in the deploy window bought a guaranteed miss (21dd954)
  • pursuit — the raid-return re-aim was dead code (ddbc2ad)
  • reinforce — align sendBattleAlertTo live-emit shape with the rebased sibling path (b9ed9e5)
  • reinforce — iter 5b - exit() teardown ordered after _hideGpuUnsupported (pixi-crash-guard window) (9b34288)
  • reinforce — iter 4b - push anchors + PvP gate on garrison battle pushes, reinforce radial classified in minimenu lint (921eecb)
  • extraction — returns re-aim at a crawler that has moved (446a515)
  • pursuit — judge green — measure the miss when the march lands (19f2995)
  • pursuit — re-solve on velocity change, not just on move orders (63decd5)
  • pursuit — spend the whole movement budget; honest in-contact ETA (fb613fc)

Performance

  • map,audio — A2 releases the terrain CPU copy, A3 defers combat PCM by tier (ba141a2)
  • map — decode the baked terrain once, not twice (ac5ca0e)

Internal

  • client — delete two dead commander-asset accessors, guard the rule (5de0dae)
  • movement — settle the remaining duplication, and lint the leg rule (3bbba0e)
  • movement — one owner for 'where is the squad along its leg' (be11605)
  • test — one owner for commander selection, in the shared harness (a547318)
  • ota — locales leave the OTA payload; translations stop minting versions (7fd3370)
  • extraction — route the last seven travel-time sites through the owner (402a459)
  • one owner for the squad travel formula (07af70c)
  • extraction — one owner for squad travel speed (b0db174)
  • reinforce — state the millisecond precondition the feed order depends on (#972) (654ca99)
  • boost — compare the re-based depart with a tolerance, not for equality (#971) (56783a7)
  • return-formation — stub the dependencies createReturnRaid actually has (#970) (c6abdc5)
  • map — pin all three legs of the release contract (7e2d3ed)
  • map — the live A2/A3 probe, and the plan told the truth about the phase (fb7ae4b)
  • map — cover the two mechanisms this branch is actually FOR (2b4a7e7)
  • map — range over the SECOND profile input, the one mapAssets actually ORs (d7696ba)
  • map — derive the fixture matrix instead of adding an arm per round (bdd34d1)
  • map — sweep the third fixture family over the tier axis too (7d4a335)
  • map — instrument the tier this branch exists for (c6842ed)
  • map — fire the bound on the route that only has one (e15d246)
  • map — drive every KEY, not just the ones ensureTerrain can reach (418a8f5)
  • map — the seventh defeat was img.onerror, which this file described but never checked (eb00f15)
  • map — make the bound a property over every branch, and bound the suite too (3e779c2)
  • map — close the fifth bound defeat, the partial-run pass, and the A2 gap (7db722e)
  • map — A2 prerequisite, terrain rebuilds from disk (6384f8b)
  • map — assert the bound directly, and delete an OTA hack that could not work (58313c0)
  • map — restore the fixture I deleted, and tick the bound clock on clears (dd0a277)
  • map — model the iOS fetch shape, and make the bound check behavioural (6726f7d)
  • map — guard what the terrain commit claimed, and fix an adjacent blind sweep (fdd43c0)
  • event-cancel — measure the pairing window in code characters (123bc42)
  • pursuit — tighten the bias budget 0.12 -> 0.04 after the along-track fix (5fe29d3)
  • event-cancel — intersect function scope with a measured proximity (73f8080)
  • pursuit — guard the four fixes that reverted invisibly (1491156)
  • pursuit — behavioural coverage for the pace-carry rule (da23012)
  • pursuit — give verify-march-no-teleport actual teeth (25e32bf)
  • ui — guard the rail icon fidelity contract (d2ac824)
  • pursuit — pin that siege and boss RETURNS re-aim on the live crawler (ed34048)
  • boost — measure the boosted-march coherence rule instead of its old shape (abe459b)
  • pursuit — cover recall-after-re-aim, pin the scope, retract a root cause (ec3ab3a)
  • pursuit — add the in-flight escape cell (65faa91)
  • ci — drive the APK gate's real bash + document the lane in CLAUDE.md (8bcdeda)
  • pursuit — the judge fence now catches the arrival teleport (013c44b)
  • reinforce — iter 6 - headed click-path probe (radial to deploy modal to POST /reinforce) (802b7c0)
  • pursuit — guard custody across the two new march outcomes (8745c64)
  • pursuit — Tier 2 grades the REAL server, and it fails (1136fdf)
  • pursuit harness + impartial judge for squad-movement chase realism (602727e)
  • android — content-gate the debug-APK lane so manifest-only diffs stop building (741cdcf)
  • test-runs — put the iOS Phase A fragment in the house format (#968) (c9f902d)
  • changelog for 2026-08-07 promote (#965) (974f248)
  • ios — the ship-watch query, and what its rows can and cannot say (4571b54)
  • ios — the warm A/B is measured, the owner approved the compact map (c1533c1)
  • ios — A2 needs a reorder first, the upload check reads through get() (240fd0c)
  • ios — the census missed the harness, three rounds running (f1953fe)
  • ios — settle the _loaded decision, and count the call sites properly (763e1b8)
  • ios — stop the A2 section contradicting itself, and fix the undercount fix (54e6adf)
  • ios — name the _loaded decision A2 has to make, and stop overstating (a56b101)
  • ios — retract the -151 MB compact claim, it was never measured (a947987)
  • ios — A2 was written against a recovery path production does not take (5d9fa35)
  • ios — record that the A2 prerequisite is half the property (5472bf1)
  • ios — the compact tier measured, and the cold-container trap that inverted it (d7f6914)
  • ios — phased memory-reduction plan for agent execution (9bfb05d)
  • ios — name the kill mechanism and measure the ceiling (b8375d5)
  • ios — purge the last direction-inverted prose, and state the detector's volume limit (791865c)
  • log the iOS reload root cause and downgrade the world-map renderer row (e2322f0)
  • certification record, and make the march-synthesis catch countable (5300265)
  • coverage — log the OTA slim/timeout/runtime-locales run (bbad825)
  • ota — drop the stale check count, mark the Android timeout row as stock-not-shipped (acc6fdc)
  • record why the extraction-loop counts differ between branch and base (5427d50)
  • record the extraction-loop attribution and drop em dashes (986edf4)
  • coverage log for the pursuit production-readiness sweep (e03c4b8)
  • gap 38 closed, all five review findings fixed (140b059)
  • reinforce — coverage-log fragment + matrix row for the overnight build loop (a2db15e)
  • correct the pursuit coverage record after independent review (553ecce)
  • coverage log for the squad-movement pursuit work (6f410ce)
  • pursuit-loop — merge production items with their coverage (9f5de42)
  • pursuit-loop — queue the squad-return investigation (41c47c9)
  • pursuit-loop — order serverPursuit before boostParity (8ec24a3)
  • pursuit-loop — merge the four server items into one gradable unit (5a02d8d)
  • pursuit-loop — raid boost shares the crawler's distance ladder (1d2f492)
  • pursuit-loop — owner ruling on dead-heat chases, queue boost parity (3241c8c)
  • guard — garrison table is rail-surfaced, drop its stale exemption (6727ca9)
  • release — move the native versions onto the 1.0.4 train (#969) (1060538)
  • hooks — name the ceiling once (b4cd6c3)
  • hooks — bound the hook above every guard, not between two of them (6e6aa91)
  • hooks — map the four files this guard exists for (cd68f6a)
  • reinforce — overnight loop scaffolding (spec contract + impartial judge agent) (3c776ee)

Other

  • l10n: auto-translate zh-Hant artifacts (4d9d8d0)
  • l10n: auto-translate zh-Hant artifacts (091a1e2)
  • l10n: auto-translate zh-Hant artifacts (befb5a8)
  • balance(crawler): flat move speed, and show both speeds on the research screen (d958e95)
  • wip: no-teleport guard (committing before injection) (85b4abc)
  • l10n: auto-translate zh-Hant artifacts (4069d3d)
  • l10n: auto-translate zh-Hant artifacts (c24b4ad)
174deea

New & Changed

  • landing — favicon is the brand badge, not the key art (10de597)

Fixes

  • worldboss — address review findings on the weekly board + additive ladder (f815c0c)
  • worldboss — weekly leaderboard tab + milestones that add across tiers (448dd15)
  • seo — stop advertising a noindex page in the sitemap (383f463)
  • landing — ship favicon.ico to the marketing site (5eb1229)
  • raids — createReturnRaid validated truthiness where the contract is a shape (11a3efb)
  • anomaly-scan — the orphan check reported a superset of what the GC deletes (2e85543)
  • mapAssets — one countable error per dead atlas, not one per retry (deafc17)
  • anomaly-watch — the OTA-noise filter only knew the Android logger format (13955f7)
  • analytics — a bare promise rejection must not record a contentless error row (9220fe5)
  • anomaly-watch — the loop and the cron must agree on what PAGES, not just how it reads (a5044b6)
  • squad-modal — declare _revealTimers so a squad that never reveals can schedule (5c7a316)

Internal

  • anomaly-watch — let a watch tick fix what it root-causes (95785c4)

Other

  • l10n: auto-translate zh-Hant artifacts (71e133e)
ba8699c

New & Changed

  • watch — page when a live boss window has arrivals and zero damage (b9da643)
  • health — public online count = players active in the trailing hour (091dbbc)
  • cup — gameplay carousel + conversion polish from the cold-open design critique (2b32b44)
  • worldboss — make boss announces durable, with one owner for what they may reveal (0ed7727)
  • telemetry — client RTT beacon, dimensioned by Cloudflare colo (e13d3ea)
  • telemetry — split map outcome by client build, and emit each day once (764596b)

Fixes

  • map — KNELL renders without his shadow, and failed atlas loads retry (1387423)
  • map — a slow load may delay the map, never permanently deny it (6bc0b80)
  • arena — enforce leadership on loadout save, show the committed team (0231192)
  • client — a replay start invalidated mid-gate must touch nothing (b1a8f4b)

Performance

  • map — pre-warm KNELL's atlas on the incoming event, not at first sight (f18553b)

Internal

  • backport by merging master into staging, never cherry-picking (014cddd)

Other

  • l10n: auto-translate zh-Hant artifacts (af51159)
  • l10n: auto-translate zh-Hant artifacts (61079bb)
b7d741f

New & Changed

  • landing — friendly vanity link for creator campaigns, plus a 16:9 hero (e2cc84b)
  • landing — ship the official App Store badge on the homepage and /cup (06cf1a4)
  • alliance — contextual join-policy setting + fix mobile viewport overflow (a5511bb)
  • economy — batch boosts cost batch-scale, and crafting is a measured sink (dce4560)
  • economy — Hollow Cores make Tech Cores a resource sink (f2ae592)
  • commanders — diminishing signal-conduit leadership above 100k, 1M cap (187c382)
  • codes — 150 creator giveaway codes, 25 each for the six outreach targets (74d9e74)
  • events — dormant-slot parity across megatower, arena and world boss (3fb98eb)
  • quests — partial veterans get the remaining Barracks rungs, + 20 4000-ASH codes (40472d6)
  • quests — Barracks facility chain (Lv3/Lv4/Lv5) on a multi-chain task engine (eb5c63d)
  • worldboss — catalyst-identity chest at ~200k EV, 1-per-rung ladder, codex entries (2b14a2f)
  • telemetry — capture the browser-engine version, the axis that actually discriminates (d6fb9cc)
  • telemetry — record OS and version, without trusting the frozen UA (e275718)
  • worldboss — alliance-scored participation ladder + real boss research (ca4c88a)
  • push — daily return nudge, one per absent player, priority-ordered (8e8e9c3)
  • worldboss — arrive teleport FX holds until the spawn tile is seen (6cd72e5)
  • worldboss — slow boss teleport FX + Knell toll bell + respawn formation re-roll (c7c5df3)
  • worldboss — owner round 2 - ping label, canvas info panel, SYS mirrors (42bc049)
  • pwa — a real install offer, reachable in the orientation the game is played in (452705c)
  • worldboss — owner manual-test round 1 - 7 findings (3b5bdad)
  • worldboss — Knell world boss implementation (server + client) (785fe9e)
  • combat — continueToBaseOnClear option + world boss balance sim gate (20f8992)
  • art — Knell boss portrait + thumb and World Boss Chest icon (e56eb45)
  • art — Knell world boss sprite atlas + static-fused/idle-only/emis-tint pipeline modes (c1eac94)

Fixes

  • client — dormant World Boss slot and BATCH x10 render honestly (23d541d)
  • extraction — stop the faction tax minting itself back to the player (00b8773)
  • migration — convert banked cores by VALUE, not 1:1 (505e3c5)
  • promote — clear the six red standalone guards + weekly double-payout (d06d69b)
  • worldboss — a defeated attack credited the full 20% cap (8469b31)
  • promote — two live bugs and a migration race found by DB review (769daea)
  • ci — green the standalone job - one dead l10n key, two stale guards (360cd03)
  • amm — the Hollow Core pool paid into a balance nothing reads (ebcf04e)
  • shop — clamp BONUS OFFER pack headline items to two rows, one line each (93fb676)
  • auth — pass options to native Google login (iOS "missing provider or options") (c91fa69)
  • bootstrap — additive ALTERs for the tax-rate columns, ordering pinned (adaa5f1)
  • deploy — expand/contract the column rename, list Hollow Cores on the AMM (4be7b94)
  • economy — close the tax mint, finish the hollow-core scrub (8c11f5f)
  • worldboss — the battle fights the per-battle allowance, not the full hull (8bda378)
  • worldboss — drop boss-only chrome from the shared deploy modal (fb86276)
  • worldboss — one kill-emit owner with death coords (debug kill emitted nothing) (b40181e)
  • worldboss — em-dash cleanup in panel comments (b26c012)
  • worldboss — bottom-anchor the Knell sprite to the 2x2 footprint (e337eb2)
  • worldboss — em-dash cleanup in the two abort messages my diff touched (390b25e)
  • worldboss — adversarial-judge round 3 polish + probe robustness (4b9a39a)
  • worldboss — adversarial-judge round 2 fixes (6a03f26)
  • worldboss — adversarial-judge round 1 fixes across server, client, and harness (570eb21)
  • worldboss — owner-scoped tile revert + NPC registry entry + no state-change takeovers + weekly NPC denominator (0bd50f0)
  • worldboss — schedule guard learns the boss slot + l10n catalog refresh (271af5c)
  • worldboss — client-review fixes (XSS escape, confirm warning, panel race, doctrine parity, l10n reachability) (af4dd3f)
  • worldboss — db-review fixes (chat sender, ECHO-7 exclusion, tile stamp scope, retries, shard faucet) (55b0b82)
  • worldboss — review + live-drive fixes (reserve clobber, relocation sampler, replay buff phantom, guards) (7eb4c1e)

Internal

  • patch-notes — state the alliance-bank conversion (c4f04f1)
  • worldboss — owner manual-test round-1 fragment (ca7f81d)
  • worldboss — test-campaign fragment + coverage matrix row + fragment format conformance (0b71a7f)
  • world boss test-run fragment + coverage notes (6a9c64d)
  • world boss chest re-based to rare arcology EV (owner) (restored) (f62d2a1)
  • world boss chest re-based to rare arcology EV (owner) (b63c2ec)
  • world boss rewards + sim-gate findings locked (base HP, counters corrected) (f245b5c)
  • lock world boss window schedule (+2:15 arcology slot, 4/day) (7ff17d0)
  • lock world boss kit (three formations + The Toll ultimate) (1866352)
  • lock world boss identity (Knell, Cantor of the Ash) (d1c8342)
  • alliance world boss phase-1 design (decisions locked) (b7c325d)
  • no em-dashes on any line this branch added (5418f8b)

Other

  • l10n: auto-translate zh-Hant artifacts (b7d741f)
  • l10n: auto-translate zh-Hant artifacts (4e649be)
  • l10n: auto-translate zh-Hant artifacts (b6c6b96)
  • l10n: auto-translate zh-Hant artifacts (96a654c)
  • balance(extraction): signal_node and catalyst_cache become real high-value sites (d2451d4)
  • l10n: auto-translate zh-Hant artifacts (5f2b790)
  • balance(worldboss): chest drops single tech cores, codex loses the cycles row (860bcf6)
  • l10n: auto-translate zh-Hant artifacts (0ee6b02)
  • balance(worldboss): tier 1 fields a tenth of the escort, tier 2 is the authored one (b9b61f9)
  • balance(worldboss): flat 1.3M tier-1 hull across all formations (2b07a09)
  • l10n: auto-translate zh-Hant artifacts (995fb87)
0c2e847

New & Changed

  • cup — real figures in the YOUR SHARE mockup (ca5c09f)
  • cup — proof-led hero, category contrast, and a YOUR SHARE mockup (1b85e88)
  • track qualified web signups in Google Ads (817b686)

Performance

  • cup — real game captures in the cards, and 3.8MB of images down to 447KB (b48c0b7)

Other

  • l10n: auto-translate zh-Hant artifacts (ce152b7)
dfdeb49

New & Changed

  • add X pixel to Cup landing page (dc26e28)

Fixes

  • tutorial — beat 23 — an EMPTY #hud-bottom was eating the PLAY REPLAY tap (44d904a)
d92b0ffb

Fixes

  • map — iOS black weather - WebKit refuses premultiplied <img> texture uploads (4404f92)
  • arena — unpin the retired qualification rule from the overview guard (c0468e7)
  • arena — pay the season tranche on closing division, not per-division events (b929455)
  • ci — bound the fastlane showBuildSettings probe for SPM cold starts (9008a5b)

Internal

  • ios — record the build-13 PASSED verdict (run on hardware) (c2c7a10)

Other

  • l10n: auto-translate zh-Hant artifacts (d92b0ff)
  • l10n: auto-translate zh-Hant artifacts (030bebf)
08a5cbd3

New & Changed

  • ota — iOS reaches slim parity on drill evidence, plus the silent-audio bug it found (ce56b6a)
  • ota — the release hands over the slim floors it alone knows (87d5d46)
  • ota — measure the edge cache per host in the posture check (cf8a835)
  • ota — make slim rollout operable, not just correct (6d7041d)
  • auth — Apple account linking on iOS, plus two gaps the Google fix left (90b94df)
  • ota — publish the builtin hash set at release time (b6a777a)
  • ota — slim manifests + native builtin fallback (phases 0-1, dark) (#863) (8cf02ba)
  • audio — degrade, do not gate (phase 3 of 3) (52cf111)
  • audio — combat sprite, one decode instead of eighteen (phase 2 of 3) (fe267ac)
  • audio — session-scoped combat decode pipeline (phase 1 of 3) (1670cc2)
  • cup — Alliance Cup Aug 21-30, $1000 pool, and X-ads attribution (a815a5a)

Fixes

  • watch — make the money alarm precise instead of loud (c008118)
  • ota — the posture check must probe BOTH platforms (4008cb9)
  • map — bound two gates that can leave the world map permanently black (87f0067)
  • ui — Upgrade Facilities showed the RAW cap ladder, not the real one (4f4764a)
  • l10n — normalize CRLF in the store extractor (39b7b5e)
  • ota — the posture reporter cannot refuse the boot (601fb61)
  • extraction — put event-card loot on the crate's packing list (aefcafd)
  • lint — one self-tested source lexer instead of a copy-pasted stripper (3ce14b0)
  • auth — a guest on native had no reachable way to link Google (f8e9429)
  • client — make the deploy-picker re-entry latch structurally impossible (50abe9c)
  • chat — polish mobile preview layout (f710c39)
  • shop — fit the ACCOUNT charters on a landscape phone (1c8aab0)
  • test — de-stale two extraction guards, and name the real bug in the third (aa3338b)
  • map — render native canvas overlays at full DPR (1d91118)
  • client — a refused deploy must leave the roster agreeing with the server (7a95a5e)
  • audio — close the phase-2 review and second-opinion audit findings (0acc4e1)
  • ops — ship the vitals watch in the image, and derive cron image completeness (55df521)
  • ui — filter chips keep their desktop box on phone landscape (34cede6)

Internal

  • ota — slim rollout policy lives in the image, not per-shard env (4330781)
  • ios — prove audio is audible on device, closing Known Gap #30 (d7a918b)
  • chat — allow docked preview bottom anchor (7575ccf)
  • ota — the runbook's platform default drifted within a day (9c0cff8)
  • ota — the staging edge-cache rule is applied (6275f33)
  • test — log the slim-OTA production-readiness pass (c9302c1)
  • test — log the second-update-on-slim and prune drills (a120be9)
  • ota — iOS slim-OTA drill runbook (7f9cdbb)
  • test — log the OTA slim-manifest phase 0-1 device run (#864) (fc38895)
  • audio — system architecture doc + physical Pixel 3a device pass (c539ac2)
  • release — mobile version 1.0.2 -> 1.0.3 for build 13 (bc96aaf)
  • ota — move promo art out of the shippable client root (128ccf6)

Other

  • l10n: auto-translate zh-Hant artifacts (7b183bc)
  • l10n: auto-translate zh-Hant artifacts (fde2c30)
  • l10n: auto-translate zh-Hant artifacts (75c711d)
  • l10n: auto-translate zh-Hant artifacts (581c4b6)
  • l10n: auto-translate zh-Hant artifacts (eecfa81)
  • l10n: auto-translate zh-Hant artifacts (c3e914e)
  • l10n: auto-translate zh-Hant artifacts (19fd9c2)
  • balance(tax): faction tech-core tax 0/20 (default off), capital 0/50 (058fc98)
  • l10n: auto-translate zh-Hant artifacts (c977296)
4197c84

New & Changed

  • client — TASKS panel redesign - card rows, icon rewards, one-task collapse, unified CTA (2d895aa)
  • uq boost/catalyst tip chain + multi-active chain frontier (6c1ab03)
  • client — blocked CTAs navigate to the fix - NEED RESEARCH train chain (14d5765)
  • Urgent Quest post-tutorial retention chain (replaces npx tasks) (37aa082)
  • add dev-only trailer mode (2b9d7e7)
  • ota — offer a Restart App prompt when an update is staged (6c474de)

Fixes

  • client — extraction cache-roll FX never plays over the city window (f4afa61)
  • client — mobile polish - GO/CLAIM button backing, quicknav inset, tip lag nudges (a4db533)
  • client — summon tip resolves the moment the city window renders (288fce1)
  • client — city recruit tip lifts above the city window overlay (da966b7)
  • client — fill-squad + conduit tips retire on LIVE state the moment the objective is met (0840a64)
  • client — fill-squad tip docks top-left (grid spans the right half) (46abd2a)
  • client — train tip anchors the qty slider with a drag ghost inside the popup (403ca44)
  • client — chain-critical tips are session-dismissable, never permanently muted (885ac48)
  • client — urgent-quest round-2 polish - boost tip, leave-to-claim tip, summon tip, stat auto-refresh, deploy-cost red, task-log restore, free-boost GO (ef84995)
  • client — button-aware tip docking - fall back to top-left when the top-right dock would cover the highlighted target (the + CONDUIT button lives in the army screen's top-right; owner report 2026-07-31). Picks whichever corner overlaps the target less, with a 10px pad. (e1d6ee2)
  • urgent-quest playtest round 1 (owner reports 2026-07-31) (cd18919)
  • client — urgent quest header row clickable + legible over terrain (497486a)
  • bootstrap — age restore runs before the last_active_at seed, and repairs it (6993d7d)
  • tutorial — honest account age, one reset per episode, and an abandoned-account purge (fbba704)
  • client — dead window.GAME_CONFIG guards always short-circuit (c29d3bb)
  • pvp — tutorial players are hidden from the map, so stop letting people raid them (b35e569)
  • raid — recall mid-march turns the squad around immediately (cfdb4cf)
  • client — upgrade-facilities mobile polish (08bcd53)
  • credit troops_trained npx task on boost-completed training (6893204)
  • landing — drive the /cup pool and prize table entirely from config (b5c7986)

Internal

  • tutorial — zero world presence until graduation (b7f83c1)
  • log the 2026-07-31 Urgent Quest playtest rounds + panel redesign (c837103)
  • test-runs — staging verification fragment for the tutorial purge (9c4f829)

Other

  • l10n: auto-translate zh-Hant artifacts (4197c84)
  • l10n: auto-translate zh-Hant artifacts (87bb143)
  • l10n: regenerate catalog after the staging rebase (918e272)
  • polish(client): task typography - condensed UI face for prose, mono only for digits (7136464)
  • polish(client): task list scrolls chromeless, COLLAPSE pinned outside the scroll (2ea822d)
  • polish(client): task cards go frosted-glass steel - square, lighter, gold accent (9c3683c)
  • balance: uq_leadership_500 rewards 10k of each training resource (7eeb142)
  • l10n: auto-translate zh-Hant artifacts (e4bea40)
  • balance(tax): retighten tech-core tax ladders to 10/20/30 (85de14d)
  • l10n: auto-translate zh-Hant artifacts (86ad88b)
  • l10n: auto-translate zh-Hant artifacts (562c6b6)
8a44a36

New & Changed

  • redeem — add 20 more one-time 10,000-ASH codes (b1985a0)
  • landing — add the /cup Alliance Siege Cup ad landing page (15ec6ef)
  • shop — anchor the ASH coupon to the highest purchase in a 30-day window (1b1ff74)
  • auth — one owner for client identity, proof-gated CF-Connecting-IP (2185a99)

Fixes

  • landing — derive every /cup date label from the scheduled event (b512ec9)
  • vault — add-chain fallback was hardcoded to Base mainnet (6a97ee1)
  • amm — raise the swap rate limit, it was throttling normal play (98017e5)
  • hospital — stop the 1s tick rebuilding the whole screen (#827) (d539436)
  • vault — match NODE_ENV tolerantly, it now gates the whole vault on prod (c64c66a)
  • vault — accept an unprefixed 64-hex minter/deployer private key (a074d90)
  • vault — isolate non-production NFT minting from the live collection (b70fcf3)
  • vault — address commander art by portrait key, and ship the 3 missing cards (b508163)
  • map — size the canvases to the layout viewport, not the visual viewport (1bf284a)
  • vitals — derive the sample floor, and page on a concentrated crash (f66a06f)
  • ota — back the boot-ready signal with a wall clock, not more hatches (8df5f09)
  • test — S9 seeded a hospital row the tick could reap mid-scenario (c17ce4a)
  • qa — make the paused-cryo fixture legitimate, not a state the tick undoes (82a9bf4)
  • auth — disarm registration quota, it keys on our CDN edge not the client (bb23681)
  • oracle — stop double-counting the nano_repair heal (666ef8a)
  • oracle — apply overload recoil and echo ghost damage in the consistency check (b860767)

Performance

  • art — default portraits to .jpg, drop 4.9 MB of mislabeled duplicate art (2ac67ce)

Internal

  • client-IP topology review + abuse-gate recommendation (09fbee5)

Other

  • l10n: auto-translate zh-Hant artifacts (38d1cbb)
  • l10n: auto-translate zh-Hant artifacts (f951de2)
c942e72

New & Changed

  • l10n — zh-Hant backfill, term normalization, extractor fix (d778ab4)
  • discord — alliance tag as a hoisted Discord role (eb801ef)
  • map — clamp world-map player names to 8 characters (ea46686)
  • balance — Omen 70/35, Thor 150% arcs, and the power ranking as a standing arena output (7704516)
  • telemetry — Google Ads channel, players-online curve, device visibility (ac5a4d3)
  • balance — shape-neutral power score + the class-stratification finding (06ec034)
  • balance — asymmetric formation matrix (all 9 deployment pairings) + Rudis comparison (8040126)
  • events — The First Word recurs 7 days from the first Friday of each month (f5fd207)
  • shop — coupon presents as a headline item inside the Daily Free Drop (c20c6d5)
  • shop — ASH coupon weekly gate, next-rung-up ladder, Golden Ashes UI (91baa6b)
  • shop — Daily FREE Drop + 30% ASH coupon (526712f)
  • economy — halve production storage caps, restore them as a Premium perk (0ea51e8)
  • shop — the T3 Ascension, a three-act ceremony for the T3 MAXOUT purchase (e287cc7)
  • shop — bonus-offer banner art, act-2 summon reveal, imprints in manifest (aaf17f9)
  • shop — repeat-buyer BONUS OFFER on the caches (30fb54b)
  • events — free summons score, codex deep-link + GO, ended events sink (2fb5d50)
  • rest — rolling-24h Chest Doubling accrual cap + city 'Next buff in X' timer (8bc5825)
  • events — sliding carousel, countdown chip, arrow; fix armory roster fit (5fc6b26)
  • events — bigger carousel slide, replay display face on the title (ce20888)
  • events — arena carousel slide, buff clearance, revert page banner (1808cf0)
  • analytics — SOURCING dashboard tab + live mint-budget gauge + drift lint (8e0ce39)
  • events — quicknav banner carousel + per-commander event banners (b2c02f0)
  • shop — release T3 Maxout and pack AMM sourcing, retiring both env gates (5c859b6)
  • events — score Commander Summon x2 by keys spent, not pull count (e5a1fd9)
  • shop — one owner for the summonable pool, plus a T3 Maxout drift lint (5629e95)
  • shop — drop the dead Quick Status charter, give T3 Maxout its own icon (aa24037)
  • events — Commander Summon x2, Citadel Offensive, sidebar cleanup (b83d062)
  • equipment — value recycling on the full progression chain, cheap low tiers (94f8d84)
  • equipment — scale recycle with level and correct the epic upgrade sink (908f8fd)
  • add Thor Omen and Ryn commanders (c6f10ac)
  • commanders — three new innates (thors_fist, premonition, riposte), Thor/Omen/Ryn art-gated (b0ce405)
  • amm — recalibrate genesis pegs and depth so new shards open balanced (046ce73)
  • amm — deepen the pools T3 MAXOUT sources from, and raise the 24h mint budget (dc1e841)
  • shop — prefill the Checkout email for OAuth accounts (699a586)
  • anomaly — watch the money path (zero purchases, collapsed fulfillment) (a72a7ed)
  • shop — T3 MAXOUT, a delta-priced live-quoted account boost on the sourcing rail (6b59499)
  • shop — raise sourcing impact to 10%, deepen the prototype pool to 400 (69d709a)
  • shop — env-gate pack sourcing so staging can soak while master stays dark (e9445db)
  • shop — source pack contents from the AMM at spot, zero fees, print fallback (324ba40)
  • vitals — monitor Google's crash rate ourselves and gate the ramp on it (4aa8b14)
  • telemetry — record the GPU driver; state pixi-or-unsupported in the docs (e01de95)
  • skill — ios-testflight-verify (a74bd09)
  • ios — the agent verifies the TestFlight build, the operator just taps Install (e3e607e)
  • ios — an uploaded build is a candidate, not a verified artifact (f7b614b)

Fixes

  • map — straight-truncate nameplates at 8, drop the ellipsis (2c8825a)
  • guards — unstale three guards the session's own changes invalidated (eccf59b)
  • balance — weight the power ranking by MEASURED prod deployment, not equally (cc1537a)
  • ui — repair dropped color declarations, tokenize armyScreen + marketScreen (c935d1f)
  • workshop — craft toast no longer blinks on prod after a craft (d81f897)
  • world — seed last_active_at before the first inactivity sweep (852df3e)
  • shop — coupon chip is a short gold pill that survives the theme sweep (c351776)
  • shop — drop the dead COMING SOON button from the Premium charter (bcc883d)
  • shop — clear the BONUS OFFER once the purchase consumes it (6b62a9e)
  • world — reinstate 7-day despawn as a real-activity inactivity sweep (f9303de)
  • shop — bonus band no longer overlaps the -% seal; commander thumb + chip (6ae434d)
  • l10n — drop catalog keys for the removed commanders (f8b37f4)
  • army — real innate art on locked commanders, tab re-tap exits detail (474ef46)
  • inventory — stop maxout granting innates, clean up skill-card cells (e702d18)
  • ci — close the verify-partition hole that hid 14 guards from CI (73b5164)
  • commanders — register skill-card icons for the three new innates (4ebc34f)
  • debug — test-battle could never proc an innate skill (6181917)
  • art — mirror Ryn horizontally - she faced the wrong way (0a04cf0)
  • shop — unpin link, which 502s every real-money purchase (d0302cb)
  • debug — clamp maxout research to per-type maxLevel (6afedd6)
  • vitals — tolerate a BOM in a service-account credential (90b06a0)
  • vault — never block NFT import on ownership, guarantee delivery after burn (3232781)
  • ios — bundle the Firebase config, and gate every upload on a real launch (6289de7)
  • commanders — stable roster order, so tied commanders stop reshuffling (f2c7acf)
  • close three promote blockers (death triggers, release gate, USDC promise) (70ae3cd)
  • map — weather particles get their own clamped, mipmapped texture (3dcd9a0)

Performance

  • ota — stop shipping deprecated commander long videos (-26 MB) (acc4b52)

Internal

  • shop — migrate the connected vault to psh-*, and lint the rule (22f8b0a)
  • market — retire the tutorial fixed-rate board, gate the market instead (c14cc77)
  • cleanup pass over the sourcing/T3/storage branch (2d8c472)
  • economy — delete the dead cap ladder, lint the storage-cap owner (b7bfb21)
  • ios — verifying the shipped build is the agent's job, any install route (21366c1)
  • iap — retarget the store-build ASH fallback assertion to the psh helper (e664af9)
  • equipment — derive the auto-recycle yield expectation from config (4f01321)
  • log the design-system cleanup run, matrix rows, gaps 45 + 46 (a4b7914)
  • vault — the connected vault is psh now; record why the old line misled (f6e7d3c)
  • sourcing observability, the T3 Ascension, and the equipment lifecycle (84149f0)
  • worldMapScreen split plan; chore: drop em-dashes from this pass (06c2050)
  • arena — regenerate on the post-balance numbers (24ed658)
  • economy — correct the storage-cap section for the production haircut (2cba20c)
  • arena — regenerate the report on the BASELINE weapon pool (dd9a1a7)
  • document the repeat-buyer BONUS OFFER in pricing-and-deals (00609b6)
  • handoff + art brief for Thor, Omen and Ryn (91df75d)
  • shop — record the MEASURED checkout prefill rendering (fixed text, not editable) (ae5677c)
  • shop — the offered-methods comment said card+crypto+link (19f52b6)
  • correct the soak record's data provenance (wrong-DB import, owner-caught) (2cf5862)
  • record the pack-sourcing staging soak and the owner pricing decisions (920f062)
  • vitals — railway run masks the watch's exit code (11828d3)
  • skill — TestFlight 'Redeem' empty-state triage (39b4828)
  • goal — build 12 shipped to TestFlight and verified (3ed1173)
  • css — delete the unreachable theme rules, document why the rest stay (587a9fc)
  • commanders — remove warden_prime, terminus and sable from the pool (6ead32b)
  • commanders — retire commander_<key>_long.mp4 as a required asset (fe8c7b1)

Other

  • l10n: auto-translate zh-Hant artifacts (c942e72)
  • l10n: auto-translate zh-Hant artifacts (bd05e72)
  • l10n: auto-translate zh-Hant artifacts (25e974e)
  • balance(heat): deep wastes accrues 1/min, matching wastes (was 2/min) (0d823ec)
  • l10n: auto-translate zh-Hant artifacts (6587683)
  • l10n: auto-translate zh-Hant artifacts (1d16f2b)
  • l10n: auto-translate zh-Hant artifacts (6335d03)
  • balance(combat): overload 4x/max-HP bill, Thor arcs, mind_spike 3x, premonition re-arms (dcb1a4c)
  • balance(arena): score the round-robin on 3 deployment shapes + publish solo + fix tempo derivation (e81dc6c)
  • l10n: auto-translate zh-Hant artifacts (202a206)
  • balance(workshop): every workshop craft timer boosts for 1 catalyst (8d9a43d)
  • l10n: auto-translate zh-Hant artifacts (803841f)
  • l10n: auto-translate zh-Hant artifacts (ed9c0d0)
  • balance(equipment): weapon baseline + augment slot in the arena, Bulwark/Lattice retune, Thor and Cipher tuning (1f32c55)
  • balance(commanders): arena screen 1 - buff riposte, premonition to 80% at max rank (7ffc002)
  • l10n: auto-translate zh-Hant artifacts (3e1e587)
  • l10n: auto-translate zh-Hant artifacts (12d6830)
0053d3f

New & Changed

  • release — derive What's New from the commits; de-duplicate English keywords (5b76019)
  • aso — researched zh-Hant App Store keywords, no wasted repetition (82767bd)
  • l10n — add the App Store to the store surface, prepared but not published (76177cf)
  • release — promote instead of rebuild, own the listing, translate the store (25bdfe0)

Fixes

  • combat — secondary damage is a real hit on its own target (bbb937a)
  • zones — PvP flag + haul bank flip at the LIVE Frontier crossing, not at arrival (efd89f3)
  • extraction — enemy zone syncs on the clock, not on the payload (fdbf737)
  • dev — a dev server that loses the tick election refuses to boot (6fe34e4)
  • extraction — wave countdown derives from server truth, not one socket emit (843e9fc)
  • extraction — battle window always closes; a rebuild restores the running haul (e56986a)
  • android — wire @capacitor-firebase/analytics into Gradle — ad conversions never fired (d4c18eb)
  • shop — USD presentment so crypto is actually payable, plus link and Google Pay (889b416)
  • guard — the promote lane is the release-notes path, not metadata (dcfbfd0)
  • release — stop re-uploading the Play icon; add the zh-Hant store listing (8d4fe7a)

Internal

  • strip em dashes from this branch's added lines (7491241)

Other

  • l10n: auto-translate zh-Hant artifacts (0053d3f)
  • l10n: auto-translate zh-Hant artifacts (f37b7f8)
39b3fbf

Fixes

  • tutorial — stop force-reloading players who were never stuck (5be29b9)
d193bd6

New & Changed

  • polish replay shield material effects (92b1468)
  • add battle replay shield lifecycle effects (bbe0750)
  • replay — beat-sequenced animation system - icon chips, lockstep pacing, count tweens (482097f)
  • sim — Balance Lab panel - class-gated skills, persistent loadout, new-tab replay (13eba00)
  • combat — expire temporary skills at next turn (dd506a3)
  • replay — generic per-slot heal coalescing (any combo, defib excluded) (2357269)
  • combat — proc stacking - every equipped skill AND strike rolls independently (8082525)
  • alliance — troop helps are 24h loans; retire the help subsidy (55c2c1c)

Fixes

  • prevent Pixi memory pressure failures (fdd333d)
  • recover Pixi module and context failures (e21e134)
  • absorb shared resonance hits (dab057c)
  • tile replay shields across slots (ac603fe)
  • emphasize replay shield hex wave (8953e45)
  • smooth replay shield sustain loop (25cfa8b)
  • city — entering parks the crawler in the city; in-city summon needs no range check (e2752c9)
  • beacon — recruiting inside a city no longer fails with 'Not near a Summon Beacon' (43fd256)
  • prevent tutorial stalls and repair beat analytics (3eb431f)
  • prevent tutorial chest handoff soft-lock (a302319)
  • combat — "max HP" is the LIVE pool - revert defib to live maxHP (fortress inflation counts) (f6d0bdf)
  • combat — splash scales with the triggering hit + dedicated 1.5s replay defib step (fc383fe)
  • combat — defibrillator heals 50% of BATTLE-START max HP + two-beat replay DEFIB beat (fed3ab6)
  • ui — market chart-collapse, alliance/replays panels, replay location line (f015d19)
  • chat — WHISPER from menu screens carries you to the map instead of doing nothing (1aebb19)
  • combat — defib per-rank heal ladder restored (owner-confirmed intended) (fd59b75)

Internal

  • replay — guard defib heal popup exclusion (91559ee)
  • anchor the beacon receipt-order guard on the position SELECT, not its column list (0143099)
  • guard inventory screen interactions (1adff60)
  • post-nerf arena report + coverage fragment for the replay/balance session (d493496)
  • arena — re-run for proc-stacking + splash-scaling; log balance deltas (c5e1193)
  • put the owner's chat rules in CLAUDE.md (Rule 0) (170ff03)
  • strip em dashes (house rule) (afcda98)

Other

  • l10n: auto-translate zh-Hant artifacts (d193bd6)
  • l10n: auto-translate zh-Hant artifacts (2e308ab)
  • l10n: auto-translate zh-Hant artifacts (5ca8a38)
  • balance: owner tuning batch + temporal_rift fresh-roll ruling (667532f)
  • l10n: auto-translate zh-Hant artifacts (fb09f59)
  • l10n: auto-translate zh-Hant artifacts (80a9d9b)
7828bfe6

New & Changed

  • topbar — the back button is ALWAYS a cross and ALWAYS closes to the map (8e57832)
  • topbar — curved BACK arrow, cross when the next press leaves to the map (21cbbb1)

Fixes

  • inventory — drop Golden Ashes from the item list (5197eb8)
  • inventory — chip reads SKILL CARDS, not CARDS (77f9030)
  • inventory,topbar — category chips fit on phone; un-white the Barracks cross (f0ddbeb)
  • inventory — restore every old Workshop-inventory feature, keep the encyclopedia sorting (ab4eaf4)

Internal

  • inventory — key items take their colour from registry rarity (ac56700)
  • inventory — rarity badge loses the capsule, keeps the word (31b6eb9)
  • inventory — card TYPE-CLASS is plain grey text, not a pill (f953830)
  • inventory — card pill reads TYPE-CLASS, not class alone (fd3a51f)
  • inventory — skill-card pill shows the CLASS; drop the mid-pane block (315e7b0)
  • inventory — action buttons become a segmented bottom bar with tinted labels (2944e85)

Other

  • l10n: auto-translate zh-Hant artifacts (7828bfe)
  • l10n: auto-translate zh-Hant artifacts (073a7a0)
139e214

New & Changed

  • dev — head-to-head peer-panel arena + Reactive Plating DEF+HP + Lv5 research sim baseline (88e641a)
  • dev — arena volatility metric, model-replay links, innate-lift ceiling column (bc08a22)
  • dev — arena duel screen - 1v1 single-target regime with formation-dependence contrast (0fcb108)
  • dev — arena tempo-clash stage - efficiency + aggro-vs-scaling invariant (ba1a01b)
  • l10n — zh-Hant backfill - 2119-string backlog cleared (subscription mode) (eedf008)
  • dev — skill/equipment arena - standardized balance pipeline (14b68ef)
  • frontier safe-zone squad recall - no deployed Wastes squads while the crawler is in the Frontier (eef4398)
  • dev — triples-band sweep enriched with equipment combos at max rank (84725be)
  • ui — shared boost panel - every boost has a live timer+bar and stays open until done (46a708f)
  • map — menu zoom tween +50ms with a softer settle (ease-out quart) (456404b)
  • menu — Armory joins the facility family; Upgrade Facilities decoupled to bottom-right; Armory modernized to station chrome (97521f4)
  • dev — combat sim "Balance Lab" - equipment x skills at held power (5a0f485)

Fixes

  • tutorial — fast-click hardening batch - 9 audit findings + guard lint (82490d1)
  • defender squad panel shows the formation combat actually uses (0fb380d)
  • dev — arena card pool is class-legal - off-class cards never proc (e749dbc)
  • combat — track inverted heals in consistency oracle (81601b4)
  • tutorial — premature CONFIRM FORMATION saves empty squad -> extraction hard-stick (9037eaf)
  • dev — arena battles run army-pure - base-rush no longer inverts margins (9b2a9b7)
  • telemetry — close the four watch blindnesses that hid the black-map crash class (397a967)
  • render — shared-Texture.from foreign-destroy crash + game-loop self-heal (Vivo black-map reports) (1ab2c05)
  • replays — PvP-only social feeds, MY REPLAYS default + PVP/PVE pills, ALL tab removed (0777187)
  • frontier-recall — review follow-ups - isPvpZone predicate, batch-gate lint anchor, fail-open warn, coverage-log format (9d93eaa)
  • judge city / Arcology / beacon interaction range on the crawler's LIVE position (deb4c81)
  • judge the frontier squad-recall on the crawler's LIVE interpolated position (dc35614)
  • client — one-click update convergence - restart marker, silent SW catch-up, bounded advance (dac1f83)
  • travel — completed raids no longer block city travel forever (830680e)
  • barracks — remove post-fetch topbar font rules that shrank the name (685ce04)
  • barracks — restore the frozen BODY styling - only the topbar is station (3535bbc)
  • barracks — drop the white 67% body sheet - the station backdrop is the background (874206c)
  • barracks — swap the UPGRADE button to its arrow icon synchronously at enter() (bfb612f)
  • tutorial — strip 2 remaining &mdash; entities from tutorial copy (34f84a8)
  • barracks — topbar chrome rules injected at enter() so the title never paints centered (3648f70)
  • ui — topbar family glyphs 404 on Railway - root-absolute miniicon urls (6085543)
  • tutorial — strip em-dashes from the server-side copy siblings + smooth the Upgrade narrate (7b1f1c6)
  • tutorial — strip em-dashes from all on-screen tutorial copy + dim quicknav connectors under tutorial lock (278d6fe)
  • barracks — topbar title glued left from first paint (no center-then-snap) (3ebe45e)
  • menu — Upgrade Facilities takes the true bottom-right corner (after Encyclopedia + Events) (542b06c)
  • map — require the WebGL renderer; wedged-GPU sessions get the recovery card (3e3386c)
  • map — surface the GPU-unavailable card on repeated WebGL init failure (a5b540a)
  • replay — consume every resolver-emitted death-trigger record (8be2ff4)
  • combat — strikes trigger on-hit effects via shared applyOnHitEffects (7ef326f)
  • hospital — coalesce split same-finish heal rows so a basket split never renders 'Queued · 0s' (c9f506e)

Internal

  • dev — arena screens only obtainable loadouts; meta leads the report (9b20314)
  • dev — human-readable arena tempo/meta readout (2a7de78)
  • barracks — the topbar IS the shared station chrome now (mode:'station') (797b271)
  • map — re-anchor the pixi-crash-guard Retry-affordance check (function-scoped, not char-window) (dc1dfec)
  • re-anchor crawler-boost-effect + speedup-idempotency lints to the shared boostPanel (60123cf)
  • tutorial — guard the conduit beat's Armory quicknav target + drop an em-dash from its narrate (4814402)
  • skill-description audit - fix three stale statements (1ec6632)
  • run 14 head-to-head arena report on the merged on-hit engine + log entry (6870b86)
  • test-log — 2026-07-22 Vivo black-map run entry + matrix/gap refresh (aa35bb5)
  • coverage — close gap #31 - full battleLog in social feeds ruled intentional (owner) (ea29680)
  • coverage-log entry for the frontier safe-zone squad recall suites (dcd5cee)
  • log — per-run fragment files for test runs - the merge-conflict cascade is gone (27ba9e5)
  • shields — finish the shield-retirement dead-code cleanup (910974d)
  • strip em dash (house rule) (b668287)
  • strip em dash from registry comment (house rule) (9c56208)
  • strip em dashes from new comments and strings (house rule) (694d399)

Other

  • l10n: auto-translate zh-Hant artifacts (85344aa)
  • balance+sim: commander power levels, virus-inversion proof, cleanse-first restored, 5 knobs (a0dc36a)
  • balance: counter-web pass - stackable malediction, mark death-jump, shield debuff-immunity, decoupled medic cleanse, current-HP overload recoil (d29ff5c)
  • balance: owner 8-change pass - delayed overload recoil, resonance DR, fracture/mind_spike reverts, last_stand halved (7ba989a)
  • balance: owner 8-directive pass - whole-turn betrayal, persistent malediction, cross-element tempo, 6 knob changes (5be1224)
  • balance: field_medic dual-target rework at 0.20/0.20 (owner-locked) (9267020)
  • l10n: auto-translate zh-Hant artifacts (c363897)
  • balance: T3 final model - equal combat power at power 1200, ATK-spread identity (117993d)
  • balance: T3 re-stat to owner mirror-TTK targets (3.5/2.5/1.5) (8581814)
  • balance: iteration 1 - 7-knob retune from arena run 1 (owner-reviewed) (fc7a449)
  • l10n: auto-translate zh-Hant artifacts (bc4a11e)
  • l10n: auto-translate zh-Hant artifacts (87901fd)
  • l10n: auto-translate zh-Hant artifacts (6ccab92)
  • l10n: auto-translate zh-Hant artifacts (94e96c2)
  • l10n: auto-translate zh-Hant artifacts (480690b)
  • rename: Encyclopedia -> Codex (player-facing only) (0d12cf3)
  • polish(menu): injured-count display, reserves font parity, linear 260ms close fade, lint modernization (7048698)
  • wip: chat-link scope filter, topbar glyph gradients, tab spreading, barracks exit-guard fix (74c2f5c)
  • checkpoint: menu transition polish (topbar gap fix, barracks wallpaper slide, subtle bottombar fade) (9b045de)
6d614a9

New & Changed

  • analytics — qualify retention at tutorial beat 1 (ded77a6)
  • ads — Firebase mobile conversion tracking (dark-shipped) (4e7a00c)
  • mobile — native deep-link OAuth for community rewards + TestFlight update-gate link (1c783c6)
  • replay — heal SFX + green Pixi heal glow for every healing skill (5cdedb4)
  • events — name the scoring metric on every siege/Cup surface (9b5d3a3)
  • cup — member contribution scores TOTAL power destroyed (gross), not net (acac2d1)
  • map — Pixi rain depth + designed speed + zoom-safe drift (1a1bb86)
  • ops — ledgered anomaly alerting - Discord pages on state change only (a38a1ec)

Fixes

  • telemetry — retire instant-heal sink tag (d947386)
  • heal — harden catalyst recovery boosts (22b4b40)
  • ads — harden conversion release wiring (443d394)
  • megatower — auto-credit Guard troop returns + clearer commit warning (78f1eff)
  • promote — resolve production review blockers (#689) (87c8086)
  • ads — harden signup conversion delivery (c726285)
  • alliance,chat,command — action-failure feedback used the retired hidden HUD chip (510b3f7)
  • alliance — View Crawler — visible untraceable toast + greyed button state (#684) (1aa9e97)
  • mobile — full-audit hardening - parity, update safety, version enforcement, store surface, pipeline (7c9d3b0)
  • mobile — grey-box march badge + OTA delivery reach (resume checks, strike-based retry, fleet telemetry) (378d53c)
  • citadel — RULERS tab layout + REIGN always Unknown (f914117)
  • city — refresh the LEAVE button when the arena ends (stale ARENA LOCKED) (d4deffe)
  • map — extend the zoom-independent + pan-tracked anchor model to ALL weather effects (021f894)
  • map — rain tracks camera pan via integrated pan accumulator (zoom stays decoupled) (b9769ad)
  • map — rain pattern fully screen-anchored (no world-origin term) (c13f1cb)
  • map — pin rain pattern scale + fall speed to the reference tile (zoom-independent) (921b94b)
  • map — wrap weather TilingSprite offsets modulo pattern period (Android fp16 smear) (d8c8785)
  • client — per-target idempotency slots for money/trade/alliance/shop actions (43d9e31)

Internal

  • update injured picker notification fixture (#690) (7546a46)
  • refresh promote changelog (57e54eb)
  • changelog for 2026-07-20 promote (e1dbe4d)
  • ads — Google Ads mobile drop-off root-cause + plan (b74eb61)
  • release-build — link MIN_NATIVE_BUILD operator runbook (7bb7957)
  • ota-updates — link MIN_NATIVE_BUILD operator runbook (bcaaf4e)
  • add MIN_NATIVE_BUILD operator runbook (b7312ce)
  • alliance vision + View Crawler audit (display:none assertion + vision model) (c253f86)
  • test-runs entry for the Reddit/YouTube channel removal (34ba3cf)
  • test-runs entry + coverage matrix for the mobile OTA/grey-box investigation (72554b6)
  • known-gap entry for the three Pixi weather parity gaps (2142917)
  • coverage-log entry for the all-effects anchor model (6357fb0)
  • coverage-log entry for the rain pan-tracking fix (5bbaf00)
  • coverage-log entry for the screen-anchored rain fix (49ee7a8)
  • coverage-log entry for the rain zoom-scaling fix (fedc820)
  • coverage-log entry for the Pixi rain depth/zoom retune (fd60895)
  • coverage-log entry for the native-Android weather fp16 investigation (d7dbe5f)
  • social — remove Reddit + YouTube OAuth channels (X + Discord only) (d29ed37)

Other

  • l10n: auto-translate zh-Hant artifacts (cfdda00)
  • l10n: auto-translate zh-Hant artifacts (c6d44d7)
  • balance(heal): 1 catalyst per 5000wu both pools, cryo partial-boost slider, bigger pack payloads, retire instant heal (3b56ade)
  • l10n: auto-translate zh-Hant artifacts (29ed252)
  • l10n: auto-translate zh-Hant artifacts (6cf0913)
  • telemetry(monetization): separate real money from sandbox; ledger-derived lifetime + lever blocks (ec10e3b)
  • l10n: auto-translate zh-Hant artifacts (3c51497)
  • l10n: auto-translate zh-Hant artifacts (e03ed19)
  • l10n: auto-translate zh-Hant artifacts (3ec1eb3)
  • l10n: auto-translate zh-Hant artifacts (ceeb981)
  • l10n: auto-translate zh-Hant artifacts (3b61622)
c811fdd

Fixes

  • client — pending-action nonce hold soft-locked crawler move after one dead request (614a971)
7d30708

New & Changed

  • ops — human-readable anomaly digests - Discord never gets raw output dumps (7b303cf)
  • ops — commit the anomaly watch so it survives any session (mirrors ticket-watch) (03f5def)
  • ops — committed in-session ticket poller + ticket-watch skill (33babfd)
  • ops — Discord ticket watcher - headless Claude investigations on staging (31319ad)
  • ops — anomaly-watch cron wrapper for the Railway watch service (59bcb40)
  • economy — AMM-spot value estimates on every reveal surface (blueprints + arcology/arena caches) (a0fd83d)
  • map — move task-log toggle to the extended-menu rail + restyle the floating log (#656) (0a46b94)

Fixes

  • ci — mail-template lint counts ops-script senders (unblocks promote) (#668) (7d30708)
  • map — task-log — drag map through it, smaller-tap targets, crisp native text (#665) (33decc7)
  • megatower — mailed floor caches paid the legacy flat roll instead of the rarity-pegged Arcology chest (abac268)
  • extraction — cycle-pause can never outlive its battle - throw-safe release + in-process reaper + anomaly watch (9cac06e)
  • ota — serve OTA files as octet-stream so Cloudflare cannot corrupt hashed bytes (7b82a45)
  • siege — Alliance Cup garrison minutes never accrued (sampler read the writer-less citadel_garrison table) (71f304e)
  • extraction — heat gauge readability + replay lands on the squad + faded backdrop (#660) (d6a7678)
  • map — drop the over-bright footprint glow on cities + the Citadel (#659) (a236ab6)
  • speedup — free-boost chip for hospital/cryo scans the POOL, not per-row (phantom 'Free Boost: Healing') (d751670)
  • map — clip other players' move lines to the viewer's vision (no PvP leak) (#655) (cc775a5)

Internal

  • megatower — remove the legacy flat chest path + ship the floor-cache make-good (66e4b36)
  • siege — drop the vestigial citadel_garrison table + every dead reader (3d63f35)
  • map — update pixi-lighting lint for the #659 citadel/city halo removal (e2c7bdf)
  • re-anchor verify-lootbox-market-value to the spot-valued reveal path (768c6a8)
  • skill — ticket investigations run on a Sonnet subagent (146f4d3)

Other

  • l10n: auto-translate zh-Hant artifacts (e7aaf15)
124c12a

New & Changed

  • tutorial — the Signal Beacon teleports the player to the Frontier (b4efa85)
  • tutorial — formation beat - tight spotlight, side-docked panel, slot-by-slot fill reveal (5ad07fc)
  • encyclopedia — Arcology Chest collapses to ONE entry with rarity-filter pills (equipment pattern) (ba62cdf)
  • megatower — four-rarity Arcology Chest — tiered floor caches + season prizes, encyclopedia page, rarity chips (owner redesign) (6f97e5e)
  • megatower — seasonal Arcology leaderboard — cumulative floors per calendar month (owner directive) (fb909a0)
  • free-boost Tasks - GO chip when a timer enters its free window (90d84fe)

Fixes

  • tutorial — Frontier spawn avoids city footprints and occupied tiles (ed840a4)
  • client — bank-reveal tech-core bar only renders when cores are in play (37dbc56)
  • tutorial — extraction slot-machine reveal lands on the real deterministic loot (76fbb6e)
  • tutorial — thaw grant repaints the open Barracks reserve tiles (0a04296)
  • events — defender-pool power gates read the real defense squad again (046ed29)
  • events — 10px side padding on rewards section titles — PERSONAL TIERS / SEASON PRIZES no longer hug the panel edges (0ececc9)
  • events — Arcology rewards/leaderboard layout polish — season prizes section, Floor labels, board panel + alignment (cd50a0e)
  • events — arcology chest chip rarity border must follow the base chip rule in source order (875e1a6)
  • megatower — restore the crawler-defender role when an Arcology run ends (#647) (ccff965)
  • build — re-anchor the shopScreen store-strip end marker after the surgical-confirm rewording (#645) (1f28279)

Internal

  • events — decision-gate audit - every requirement provably openable (0de1372)
  • changelog for 2026-07-17 promote (#643) (3ef0392)

Other

  • l10n: auto-translate zh-Hant artifacts (124c12a)
  • l10n: auto-translate zh-Hant artifacts (cd95e37)
  • polish(tutorial): formation fill lands INTO visible sockets (owner feedback) (017ce57)
  • l10n: auto-translate zh-Hant artifacts (859d222)
9bc3240

New & Changed

  • city — live Arena schedule on the city ARENA tab (f670ba1)
  • live "Get it on Google Play" badge on the landing page (575b808)
  • raise $ato/ASH currency-pair fee to flat 15% (8b17b62)
  • telemetry — dimension render:crash_guard by reason + distinct players (c7d1f3b)
  • workshop — station design system, sweep-free menu mode + three-zone craft layout (39a9e65)
  • native — add first-paint splash handoff (e2c73e6)
  • native — iOS bounce lock + keyboard no-resize (fixed-viewport contract) (9276703)
  • client — premium-feel pass — native haptics, self-hosted fonts, overscroll lock (6dfac6d)
  • client — app-wide selection/drag-ghost suppression with .selectable opt-in (aaffa86)

Fixes

  • shop — single-armed-CTA invariant + tutorial selector + armed-state contrast (review fixes) (63412e6)
  • shop — surgical inline confirm — stop full re-render on buy; two-tap confirms for workshop crafts (30c77f4)
  • mail — claim rewards show display names + loot chips, not raw keys (95a7348)
  • client — scope selection suppression to game shell + Firefox drag guard + lint (4b1015b)
  • mobile — suppress native long-press text-selection highlight on touch devices (dd33440)

Internal

  • record the GitHub merge=union caveat, verified empirically (24203aa)
  • log — make test runs append-only + union-merged so PRs stop conflicting (2ffbaee)

Other

  • l10n: auto-translate zh-Hant artifacts (9bc3240)
  • l10n: auto-translate zh-Hant artifacts (b8e5033)
  • l10n: auto-translate zh-Hant artifacts (393b04d)
  • l10n: auto-translate zh-Hant artifacts (d0655bb)
  • l10n: auto-translate zh-Hant artifacts (17c9cfe)
830f496

New & Changed

  • arena — make relay carry-over legible on the inline battle stage (28a8bd8)
  • extraction — combat window fills the minigame height; HEAT + wave warning inside; red heartbeat on incoming units (4992737)
  • extraction — WAVE INCOMING banner shows power + danger grade + ghosted formation; DECIDE no longer blinks (9e0a9db)
  • iap — sandbox-grant farm alarm for the IAP_ALLOW_SANDBOX review window (614f99d)
  • chat — improve access and audience visibility (93c616d)
  • basket — triaged casualties rejoin the squad slot at homecoming (a673e5d)
  • push — device notifications — engine + web rail (design Phases 0+1) (#613) (e779dc2)
  • chat — SYS chat mirror is opt-in — only important persistent game-state lines reach chat (9f89ab4)
  • extraction — DECIDE outcome card gets a 30s read window + CONTINUE (cb51bdf)
  • add Workshop claim-ready tasks (7c70aa5)
  • extraction — DISCOVERY-DRIVEN hauls - the fixed find schedule is gone (2277895)
  • extraction — minigame round 2 - decide never resets, grey-out relatch, squad scale + exact replay overlay, modal polish (11be9b1)
  • extraction — neutral search sim + pause-aware shared minigame clock + wave/DECIDE layering fixes (ef03216)
  • Barracks reserves polish + squad drag/drop + training visual (0ce77d0)

Fixes

  • arena — harden committed-team authority, status/loadout races, snapshot display, and fail-closed recovery (830f496)
  • arena — MY TEAM renders the committed team while locked, never stranded local edits (8b60600)
  • promotion review — restore production CI when the localization bot advances a ready staging promotion
  • push — harden endpoint delivery, provider deadlines, digest/cap accounting, recalls, and registration races
  • native — fail closed on RevenueCat identity errors and never reopen a cancelled purchase sheet
  • notifications — make device toggles, preference writes, and logout endpoint cleanup server-confirmed
  • basket — emit persisted survivor squads and carry siege triage recoveries safely through homecoming
  • l10n — translate remaining standalone Sergeant references in zh-Hant
  • extraction — keep HEAT pinned to the combat window bottom during battle (margin-top:auto) (dcb4f8f)
  • extraction — center the HEAT meter in the combat window (scale from center, not left) (201f287)
  • extraction — inset combat sides from the edges (padding 2->36) on both row + arena, seamless preserved (29115b0)
  • extraction — wave preview seamless with replay — enemy grid at exact fight position, warning centered above (c01f9ea)
  • extraction — wave warning text ABOVE the enemy formation at its natural fight size (7901bf1)
  • extraction — close the minigame window when the player is no longer in the site (e5ca29f)
  • extraction — resolve/DECIDE card steps aside for combat by HIDING (not destroying) (f94e97f)
  • iap — RevenueCat identity never bound — every purchase landed anonymous (b9ee556)
  • iap — no dispatch deadline on the native purchase sheet (user-paced) (fc8dc75)
  • iap — retry RevenueCat self-init — a lost boot race hid the ASH shop all session (62df168)
  • iap — IAP_ALLOW_SANDBOX env opens prod sandbox-grant window for App Review (9188024)
  • map — crisp radial-menu text + info panels on-screen at DPR>1 (5614951)
  • basket — tell the store about losses still in flight (siege defeat) (a287359)
  • basket — release the tile when a commander owns none of a type (5ef3f16)
  • basket — applySurvivors must claim only the wounded it actually owns (5ea8370)
  • siege garrison label + client-owned l10n for rail place/phase names (69ffd7d)
  • harden squad-rail deployment coverage per diff review (d8287e3)
  • extend bottom-bar commander chip + squad panel to all PvP deployments (8b33f39)
  • enforce shared Arena ghost troop pool (70b22fd)
  • city — self-heal the players.in_city desync behind the "resting in the city" move wedge (899d86c)
  • test — revive extraction reveal guards stale after the discovery-walk redesign (02f42b8)
  • test — picker drop guard follows the delegation chain instead of a char window (152c780)
  • barracks — repaint the map backdrop in the phone-height branch too (23b136d)
  • barracks — reserve cards keep their size on a short window (no vertical squeeze) (8db5c04)
  • release — authenticate iOS cloud signing (c4a2dc4)
  • allow arena signup with prior results pending (bbf34da)
  • release — keep Play feature graphic manual (55191c9)
  • release — keep Play screenshots manual (cd585be)

Internal

  • ios — StoreKit configuration + shared scheme for simulator IAP testing (eb6d85f)
  • basket — S9 - healed troops return to the squad preset, over HTTP (497fc59)
  • basket — pin the payoff - healed troops return to the squad (c876e94)
  • workshop — live boost-to-task-chip regression + coverage log for the 2026-07-16 prod report (44d2c24)
  • log WAVE INCOMING banner + DECIDE blink-fix test run (386abae)
  • coverage-log entry for the 2026-07-17 iOS IAP end-to-end run (f303045)
  • coverage-log entry for the triage-rejoin decision (f3149f4)
  • coverage-log - heal-back-to-squad scenarios (owner priority invariant) (65ba8b6)
  • coverage-log entry for the siege basket fix + review wave (c1a97f1)
  • coverage-log entry for the squad-rail review waves (770e9c2)
  • log chained-DECIDE no-pause live E2E (31/31) (e1e4bac)
  • ios — commit Xcode's canonical rewrite of the App scheme (0fa5ca7)

Other

  • l10n: auto-translate zh-Hant artifacts (d39f4ac)
  • l10n: auto-translate zh-Hant artifacts (ee92111)
  • l10n: auto-translate zh-Hant artifacts (217fa23)
  • l10n: auto-translate zh-Hant artifacts (c6d4899)
  • l10n: auto-translate zh-Hant artifacts (105a4d1)
  • l10n: auto-translate zh-Hant artifacts (cd84da3)
  • l10n: auto-translate zh-Hant artifacts (3153e04)
  • l10n: auto-translate zh-Hant artifacts (31bff2e)
  • l10n: auto-translate zh-Hant artifacts (8b34c73)
  • l10n: auto-translate zh-Hant artifacts (941f265)
  • content(events): remove all em-dashes from DECIDE texts + trim 9 flavors to fit the window (5e5627d)
  • balance(extraction): cube-hop speed reduced 30% (CELL_MS 550 -> 786) (d9ead18)
  • l10n: auto-translate zh-Hant artifacts (472f69f)
8b34c73

New & Changed

  • extraction — DISCOVERY-DRIVEN hauls - the fixed find schedule is gone (2277895)
  • extraction — minigame round 2 - decide never resets, grey-out relatch, squad scale + exact replay overlay, modal polish (11be9b1)
  • extraction — neutral search sim + pause-aware shared minigame clock + wave/DECIDE layering fixes (ef03216)
  • Barracks reserves polish + squad drag/drop + training visual (0ce77d0)

Fixes

  • allow arena signup with prior results pending (bbf34da)
  • release — keep Play feature graphic manual (55191c9)
  • release — keep Play screenshots manual (cd585be)

Internal

  • log chained-DECIDE no-pause live E2E (31/31) (e1e4bac)

Other

  • l10n: auto-translate zh-Hant artifacts (8b34c73)
  • l10n: auto-translate zh-Hant artifacts (941f265)
  • content(events): remove all em-dashes from DECIDE texts + trim 9 flavors to fit the window (5e5627d)
  • balance(extraction): cube-hop speed reduced 30% (CELL_MS 550 -> 786) (d9ead18)
  • l10n: auto-translate zh-Hant artifacts (472f69f)
76744b2

New & Changed

  • analytics — "premium kept post-refund" outstanding count on the revenue dashboard (#532) (76744b2)
  • unify Citadel command panels (d7ae793)
  • ui — responsive weapon-upgrade modal + market auto-buy for insufficient materials (f767c13)
  • one-week 20% sale on the Spark pack — first buy 3.99, one per player (fd708ee)
  • Chest Doubling icon on doubled hauls in the reveal titlebar (e13e5a6)
  • implement the +10% premium production perk + certainty audit fixes (109901f)
  • sale banner clicks through to the Golden Ashes tab (717c5c9)
  • premium promo goes CUMULATIVE + early-access banner copy (b0a8e4a)
  • ASH-sale promo — 500+ ASH purchase grants permanent premium (1edb9de)
  • workshop — tech-core fabrication yields 10 (explicit), cost 5k→100k $ato (a06c64b)
  • telemetry — per-resource player-supply snapshot + inflation graphs; $ato watchdog (e8d85d9)
  • telemetry — bucket combat win-rate by commander rarity (b51ac7a)
  • telemetry — production economy-ledger closes the sink-vs-faucet asymmetry (20335eb)
  • economy — AMM fee alliance-share split + market-health instrumentation (1ae7107)
  • anomaly-scan — surface recurring (persistent) client errors, not just new ones (c7aed40)
  • pvp — retire the toggleable shield; zone-based PvP (Frontier safe) (ce621a7)
  • extraction — pause the reveal clock during rolls (no jumps, no dead wait) (34c49f2)
  • extraction — organized COVERAGE exploration (don't strand holes) + fade the decide npc after 2s (b395e8a)
  • extraction — searchers walk to discover chests + wave power alert + tooltip haul/cache fix (93d9115)
  • citadel — establish war host design system (178e22a)

Fixes

  • smooth march indicators and alert lanes (52d5b27)
  • restore Citadel ownership celebrations (b38bce2)
  • stabilize live War Host demo (2308d70)
  • restore War Host live queue updates (064d37d)
  • ui — GO-to-Marketplace-upgrade when that's the actual fix for a blocked buy (5b33d9c)
  • release the sale claim on async payment failure + pad session expiry (04173de)
  • test — unique mock session ids per charge-proof run (4615586)
  • anchor the all-surfaces banner lint on the method definition (84041cc)
  • sale badge under the price button + web-only enforcement server-side (e441c68)
  • Chest Doubling stack counter ticks down live as chests seal (badbe93)
  • render — guard pixi map render against the WebGL context-loss race (shader crash) (5b13869)
  • events — sim-events full report tolerates zones: []; lint empty-zones picker cards (cf973b0)
  • ci — green the verify-standalone sweep after shield retirement (345b26b)
  • objectives — live-update the daily extraction-task counter after banking (b9dd225)
  • client — demote passive bookkeeping notifications from ALERT to SYS log (a650056)
  • raid — realize + haul writes join the raid tx in calculatePlunder (dd4b698)
  • extraction — remove stale Wastes shield-gate blocking deploy (prod hotfix) (#510) (7b7bb52)
  • extraction — searchers WANDER onto caches (patrol), no beeline/dash by the commander (59544ca)
  • 3 more promote-sweep failures (tx-propagation + 2 stale Hunter/tutorial lints) (a2cf660)
  • two promote-sweep failures from the latest staging batch (1578914)
  • telemetry — filter transient network/transport noise from client-error capture (1d474cb)
  • telemetry — attribute stackless console.error by caller so wallet-extension noise is filtered (6eda6a1)

Internal

  • update stale alliance verifier contracts (137c322)
  • add Throne capture celebration demo (a7daf78)
  • add repeatable War Host battle demo (a34cea0)
  • pin the surface split — price sale web-only, premium banner everywhere (35ec6e0)
  • behavioral proof of the sale charge — exactly 299 cents, exactly once (db1d138)
  • flip sim-economy --gate from warning-only to hard (05d765a)
  • economy — retract the 6x production claim; production is demand-coupled under caps (e26a5f2)
  • skills — TTA ruling stragglers in research-methodology (pre-registration example + provenance grep) (c123317)
  • skills — record owner TTA ruling (36.9d accepted) + gate-flip completion (90cd8ef)
  • tuning — record owner ruling — 36.9d first-legendary TTA accepted (06e175e)
  • memory — re-sync shared engineering memory snapshot from per-user auto-memory (f21ff4f)
  • skills — Rule 12 provenance resolved (ad-hoc numbering, no fuller list; owner-confirmed 2026-07-12) (b973157)
  • skills — fold in item-8 verification results (PR #520 + staging alias) (47e6f23)
  • fix seven confirmed doc/comment drifts (discovery-audit cleanup) (5e7a771)
  • skills — record the .agents/skills ruling (duplicates retired, PR #518) (bef89b8)
  • skills — update shield-lint state after PR #515 merged (red resolved same day) (f1452d0)
  • skills — add the ashen-* knowledge library (16 skills) (338aa77)
  • gitignore the local marketing/ x-monitor output (58aafa5)
  • agents — retire the 3 diverged .agents/skills duplicates to pointer stubs (5639d7c)
  • Chest Doubling reveal icon fills the titlebar height (d60a994)

Other

  • l10n: auto-translate zh-Hant artifacts (1f9b113)
  • l10n: auto-translate zh-Hant artifacts (3db90fd)
  • l10n: auto-translate zh-Hant artifacts (9877f53)
  • l10n: auto-translate zh-Hant artifacts (13ae46e)
  • tune: Spark pack sale deepens to 2.99 (-40%) (5ed8267)
  • copy: sale badge reads '-20% ONE TIME ONLY' (percent derived from prices) (57a1045)
  • l10n: auto-translate zh-Hant artifacts (3535bf6)
  • l10n: auto-translate zh-Hant artifacts (2aad8b9)
  • l10n: auto-translate zh-Hant artifacts (9202334)
  • l10n: auto-translate zh-Hant artifacts (687e5cb)
  • l10n: auto-translate zh-Hant artifacts (b15f3e5)
  • l10n: auto-translate zh-Hant artifacts (6a89177)
b1d3322

New & Changed

  • hunter — production Hunter — hover-sentinel map sprite, own NPC identity, red core-eye portrait (24cb458)
  • arena — My Team rework — prefill from commanders + active squads, relay reordering, Armory inspect (owner directives) (1152029)
  • arena — P4 backend completion — prize mail crates, lock summaries, seasons, decay, featured broadcast, 3 guards (86730e7)
  • arena — P3 client + review fixes + kill switch — screen, replays, art; hidden behind ARENA.ENABLED (612b6b3)
  • arena — P2 match engine + review-fix pass — Swiss pairing, Elo, relay resolution, prizes, telemetry (15a3245)
  • arena — P1 backend foundation — config, schema, commitment lock, signup/withdraw, lock+snapshot, tick op (0de40aa)
  • improve alliance discovery and profile stats (cd04b5c)
  • rotate ASH redeem codes; pack codes + redeem celebration (e90898d)
  • polish tutorial character transmissions (fcc45f1)

Fixes

  • calibrate Thornvale terrain scale (7218179)
  • map — map-label text density FINAL — exact 2x bake (probe-ratified; do not revisit without beating the A/B) (3d650fd)
  • crawler redirect jank + rotation tilt + 16-heading sprites (2a90d04)
  • choreograph Vael's tutorial assault (5773e31)
  • make tutorial transitions rapid-input safe (13a6644)
  • prevent alliance topbar leaking across screens (f0835e6)
  • strip stray screen-specific segments from the shared menu topbar (0913bc0)
  • l10n — stop the game extractor harvesting WEB3 landing config (Tier A resolution) (19b4290)
  • keep menu-topbar UPGRADE right-aligned when a stray segment leaks in (d6cd2b3)
  • rewards — enforce tx-hash uniqueness on paid Cup claims (MEDIUM) (768cd4d)
  • shop — resolve a purchase on async_payment_failed instead of leaving it pending (MEDIUM) (6d81abc)
  • auth — bind account-restore token to its deletion request (HIGH) (082e88c)

Internal

  • map — close the label-box occlusion investigation — transient GPU state, add re-armable probe (b92d265)
  • arena — make verify-arena-team-tab CRLF-tolerant (2685de5)
  • arena — promote e2e smoke to verify-arena-e2e.js + coverage-log entry (5baf746)
  • qa — update squad-reveal event assertions to the inline-choice overlay (c5a795d)
  • fix a 5th stale verify (account-deletion-grace login SELECT regex) (db86319)
  • fix 4 verify-standalone failures caught by the promote full sweep (9ecfe3f)
  • arena — implementation plan — verified ground truth + phase contracts (e9c3662)
  • arena — late joiners seed at 1000 Elo (owner call) (0ceb515)
  • Arena — Elo PvP Swiss tournament design (planned) (e75bafb)

Other

  • l10n: auto-translate zh-Hant artifacts (b1d3322)
  • l10n: auto-translate zh-Hant artifacts (238f592)
  • l10n: auto-translate zh-Hant artifacts (b5d8957)
  • l10n: auto-translate zh-Hant artifacts (6765e8b)
  • l10n: auto-translate zh-Hant artifacts (cfadeb9)
  • l10n: auto-translate zh-Hant artifacts (ad8e27f)
  • l10n: auto-translate zh-Hant artifacts (a03b27b)
  • l10n: auto-translate zh-Hant artifacts (2978e07)
  • l10n: auto-translate zh-Hant artifacts (6dfcf45)
b239a5f

New & Changed

  • add skill card combine and salvage (0028b6e)
  • settings — retire Menu Screen Effects toggle; disable flicker/static/scanline for all (c9a67c3)
  • glow rule - only LIVE sites beacon (stale memory-ghosts never glow) (c9a25b4)
  • shop — Stripe crypto payments (USDC) + async fulfillment + expired-session ledger (182267a)
  • analytics — multi-account cluster risk score (confidence x exposure) (1255fb9)
  • every extraction site carries a flavor name; band sites are timed (64e5a50)
  • l10n — localize /event-rules to zh-Hant (Cup rules & scoring page) (b9dd259)
  • Mark II panel + wheel-hub glow (derive-emission blue band, bloom 0.6/0.85) (a3bc9db)
  • events — Cup pre-season countdown on both surfaces + contribution 0-clamp (439f28b)
  • default crawler panel glow + bloom shipped (derive-emission 0.6/0.85) (212b37d)
  • pipeline — --derive-emission - panel glow from a basecolor hue mask (5877112)
  • events — redesign in-game Alliance Cup to design-system bar + member contributions (5a5eb62)
  • atlases re-rendered with the co-rotating sun - all 8 shadow directions correct (160c5b6)
  • events — view-only Alliance Siege Cup standings in-game (no prizes) (c398d17)
  • baked raytraced ground shadows on both crawler skins (replaces the blob oval) (230cc79)
  • add dynamic Pixi map atmosphere (0374184)
  • default crawler replaced with animated atlas (same pipeline as Mark II) (7b48243)
  • Garage crawler skins - Mark II unlockable at Barracks 5 (2c91b7f)
  • tread-pod pilot (procedural scrolling belts) - checkpoint before removal (f5955d1)
  • wheel-as-separate-asset composition replaces fused-mesh wheel surgery (7967e18)
  • crawler upgrade skin v2 from single hero image (owner-directed rebuild) (dd1d4ae)
  • map — shrink Thornvale ~1 diagonal square upward, top-right pinned to the river (521f66b)
  • extraction — drop the post-fight CONTINUE button — auto-resume 3s after the result (5c4b5fd)
  • extraction — show live "CACHE x/x" in the reveal title, right of "HAUL x OF y" (7fb4026)
  • city — VIEW MAP parks the crawler resting in the city + map resting bar (6ac3295)
  • extraction — retreating banks ONLY the caches you actually found (379ab02)
  • extraction — real-time resume also covers the roll's fly-into-chest tail (def28a4)
  • extraction — deterministic haul plan (consistent + synced) + map centre-icon + extractmobile art (6559085)
  • extraction — ONE deterministic roll timeline — minigame, map chip, and reopen all in perfect sync (9d3ed95)
  • extraction — map roll 100% synced to the minigame + wave replay fix + Cache x/y tooltip + bigger HEAT (d2d731d)
  • animated crawler-skin pilot + sprite pipeline (Meshy -> Blender -> Pixi atlas) (6e45ce9)
  • l10n — landing-site localization with auto-detect (zh-Hant pilot) (a2d7abf)
  • auth — in-app account deletion with 30-day grace period (Apple 5.1.1(v)) (3b544d4)
  • extraction — mini ROLL above the site on the map + readable roll quality (e464cd4)
  • extraction — mid-haul fast-forward + background roll pops on the map (7ad39fc)
  • extraction — replay units land EXACTLY on the idle squad slots (pixel-seamless) (f610d48)
  • extraction — freeze minigame during the fight + rush-to/return-from combat, drop the red box (942a33f)
  • extraction — combat replay plays INLINE in the squad square (no popup) (db899e6)
  • extraction — squad pre-placed in exact combat positions in the right area (21b9913)
  • extraction — decision loot flies into the chest (no interrupt); minigame hugs left (9be00ad)
  • extraction — DECIDE never pauses minigame; site name to top bar; haul updates (79f0ff2)
  • extraction — squad panel + haul counter + fixes; server squadName/hauls (1e7eefc)
  • extraction — whole DECIDE flow inline on the right; centre the squad (f704596)
  • extraction — DECIDE no longer pauses the minigame; square right panel (c58a2a3)
  • chronicle — per-shard view + fix CORS-broken live pages (1cab66f)
  • events — tournament-grade Alliance Siege Cup — cinematic hero, podium, crests (e405657)
  • extraction — DECIDE story on the right (no pause) + combat unit-fly (7a84a9a)
  • extraction — squad info in the right column, HEAT at its bottom (4810eb1)
  • l10n — backfill device_locales for existing accounts on boot (f0aab70)
  • extraction — two-column search modal + contained roll + cache-fly fix (9da031e)
  • landing — open-beta relaunch — regal wordmark, cinematic bg, showcase carousel (2b9d0d2)
  • shop — accept USDC stablecoin on the web via Stripe (Dashboard-driven) (6bd9c88)
  • nav — drop MINT from the top nav (folded into the shop) (3436425)
  • shop — tabbed game-shop — custom-amount Golden Ashes + folded Mint + Token (cae4aa3)
  • responsive world-map music — sparse zone beds + tension swell (051f519)
  • add unique skill card icons (f83cacb)
  • bank-reveal — title shows haul count + site coords (e3f2f02)
  • equipment — auto-recycle ON by default, keep one of each quality (f461be5)
  • bank-reveal — title bar on top, aligned tax bars, hidden scrollbar + fade (d57ce12)
  • bank-reveal — resources-to-top 4-column layout, per-pane scroll, tidy tax (b57199c)
  • bank-reveal — faction cube on tax labels + single-column item list (dfa647b)
  • bank-reveal — Items-left layout, tech-core bar, crate headers, recycle toggle (da09087)
  • client — blocking connection gate + complete reconnect resync (b297dda)
  • ui — conduit install celebration in main game + server-wide district capture banner (2365cab)
  • analytics — surface extraction PvP in Combat + make the admin dashboard human-readable (c999f81)
  • extraction — cache art flies + enlarges + fades toward the roll (a36e11e)
  • extraction — pixel_cache find art + golden bonus; keep search grid square (08120c6)
  • extraction — one-line reveal header; roll commander outline + rarity glow (daa8e2d)
  • ui — music-only toggle in the expanded-menu rail (above fullscreen) (1a54263)
  • cup — operator payout console — admin panel (no terminal, no fund-moving) (b614cff)
  • extraction — bigger searchers/roll, 2-strongest fix, battle+haul gating (f81c339)
  • l10n — backfill zh-Hant — clear the deferred translation backlog (aa77ce0)
  • extraction — pace the cache-search minigame + chest/npc foreshadow (f68ff77)
  • cup — in-game recognition surface — Cup standings tab on the Citadel modal (a259760)
  • hub — gateway login + home-shard routing (multi-shard Cup end-to-end) (fa002ab)
  • npx — reorder chain, rename CC→Barracks, zone-gate the Wastes push (1ee7c47)
  • render — adaptive per-device crash-guard tiers + low-memory map mode (c6bf5d8)
  • cup — per-shard Cup rewards — remove host-shard pin (each shard runs its own pool) (f6acf7a)
  • cup — Alliance Siege Cup v2 — capture≡defense resolution scoring, Crown Tithe, garrison accrual, claim flow (e39f4de)
  • ui — Drive Overhaul shows actual crawler speed; solider expanded-menu panels (6a21e65)
  • alliance — leader-only bank grants + tax by default, with opt-in for officers (28e84e8)
  • extraction-reveal — 4 roaming searchers, BONUS CACHE, arrow inside + commander attached, chest lower (d90d7aa)
  • extraction-reveal — commander punch on lucky catch; roll bigger, no dark box; fainter squares (9c6fd5a)
  • extraction-reveal — bigger site square, filled grid squares, slower sweep, roll-on-top w/ commander + luck (6948269)
  • npx — carry the first-deploy GO through to the deploy surface (09eb130)
  • commanders — boot-validate megatower band card_1/card_2 overrides (a1cd73d)
  • telemetry — instrument the activation micro-funnel (f7600d5)
  • extraction-reveal — 'search the site' grid minigame — scan, find caches, roll into blue boxes (7ded7b9)
  • extraction-reveal — drop reel frame box, slower start + long deceleration tail (7e4bd79)
  • extraction-reveal — full-width loot area, heat+EST in footer, reverse-chest loot drop (a722284)
  • extraction-reveal — show both the right-column $ATO haul tile and the bottom EST. UNTAXED line (e456b9e)
  • extraction-reveal — strip top bar to champion icon; move $ATO haul to bottom as EST. UNTAXED MARKET VALUE (9cf96a3)
  • extraction-reveal — slower one-at-a-time rolls; footer Locate/Squad beside Retreat (fc34a0c)
  • extraction-reveal — real slot-machine reel — scrolling squares, arrow, land-flash (1da45a4)
  • extraction-reveal — slot-machine reel — angled prev/next ghost items on each roll (0c3268a)
  • extraction-reveal — place all caches at once, roll each through mixed rarities (0088b01)
  • render — iOS crash-loop breaker + device-dimensioned render telemetry (76db480)
  • combat — compact turn order — skip dead/empty slots, one turn per living slot (7e2c1b7)
  • telemetry — sink layer-share health metric (economy:sink_layer) (0b8d1d3)
  • site — unified design system + rotation-ready mint station (4e2a349)
  • web3-hub — alliance siege USDC event + payout ledger + hub shell (abe2d07)
  • ui — faction tax UI+tests, city scaling, Perfect Left Menu, recruit/radial polish (4764f49)
  • map — non-extraction deploys show squad name+extractmobile; other-crawler heading (cab9123)
  • barracks — squad-name editing runs the chat moderation filter (d7a0759)
  • alliance — Faction EXP UI + city-gated create + city interaction range (b52c6cb)
  • alliance — per-player-per-faction EXP data model (server) (752c1e1)
  • map — far-zoom overview — fade entity markers + glowing zone borders (be38ec5)
  • map — fade the extraction range ring out on zoom-out (bcec448)
  • map — single combined parchment wallpaper (pape_combined), centred on capital (94b6538)
  • map — treasure-map void wallpaper — brown wash + 4 corner papes (b6630c1)
  • map — treasure-map void backdrop — pape_* parchment cities, brown wash, blur (52b6602)
  • map — loading-screen void backdrop + border overlap fix + rail refresh (2a1a76c)
  • map — broadcast ferry/train rides to all players + flowing dotted line (04b80b1)
  • I+J — remove crawler shield/lockdown — PvP is simply ON in the Wastes (5502eed)
  • map — corner dungeons — 6x6, flush against the corner walls, red identity, big hover beam (d8800ea)
  • map — rail mirror, citadel-side city exits, instant enter-hide, city hover beam, corner dungeons + weather, -30% warm filter (b0a123c)
  • K — rested Chest Doubling buff — accrual + Info dots + buff HUD (70da2d0)
  • M — non-premium 15 extractions/day cap + upgrade popup (beeaa42)
  • L+N — shop ACCOUNT tab — Premium + Quick Status (coming soon) (b87c64d)
  • J — enter-town city population + Inhabitants + AFK relocation (d526c69)
  • I — train/ferry travel ride between paired cities (e3fc238)
  • map — H+O — rail (Cindria<->Haven) + river (Viridia<->Thornvale) tracks (ddde407)
  • G — faction region border lines (+ ring-0 join for the citadel owner) (13bcc58)
  • F — alliance factions + Citadel Grounds ground swap on capture (38ec572)
  • map — D+E — dungeon placeholders + ENTER CITY tabbed window (dbe1b07)
  • map — C — eye-shaped outer boundary (pointed L/R, rounded T/B) (a1853c8)
  • map — A+B — lower town labels, HAVEN rename, ruler at citadel far-zoom, smaller far squares (0a89c9d)
  • map — frontier cities replace the Summon Beacons (New Haven/Cindria/Thornvale/Viridia) (98e9d3d)
  • map — optional tilt-shift (miniature) mode + Settings toggle, off by default (ee40ff0)
  • map — render native HD terrain on phones too (remove desktop-only gate) (46a9b09)
  • layout — remove 16:9 game-shell clamp — fill any screen shape (03fc63d)

Fixes

  • title case skill card names (95d73bd)
  • client — address GIS-fallback review (i18n, tokens, reinject timeout) (3ffbda0)
  • client — visible Google sign-in fallback when the GSI loader fails (ff0e777)
  • client — remove the "you were raided while away" login toast (fd97ab0)
  • raid — no battle report for a raid on an undefended crawler (0739c6a)
  • economy — one-time tech-core 10:1 redenomination migration (players x10, AMM pool rescale) (ae76855)
  • soften site glow intensity 1.0 -> 0.55 (was brighter than the crawler) (be9f43d)
  • enlarge site glow so it rings OUT past the building (was fully masked) (65fdf0a)
  • flat site glow (drop tier scaling) - legibility, not a tier signal (c545f56)
  • extraction-site glow intensity floor 0.34 -> 0.7 (was invisible by day) (2147839)
  • l10n — de-mainland the rules copy per owner review (zh-TW nativeness) (57cb711)
  • l10n — zh-Hant E2E correctness sweep across all landing surfaces (6477e30)
  • parked crawlers face stable per-owner headings, not a uniform 's' (4d1746e)
  • render sun co-rotates with camera + turn animation no longer clobbers its target (12192ca)
  • correct siege preseason scoring rules + clamp net score at 0 (6f17bc0)
  • crawler shadow separated into its own atlas layer (owner-reported 3 issues) (c5712a6)
  • per-skin mapScale - default crawler sized to the Mark II reference (d47d44c)
  • crawler movement anti-jank - arrival clamp, redirect glide, turn steps, off-axis rotation (dfa9755)
  • merge — reconcile 3 staging-merge regressions in the extraction/city work (7b739a6)
  • default crawler wheels ~50% oversized - instance scale used the deletion radius (270eed1)
  • map — nudge Thornvale art 1 square SW so the river reconnects after the shrink (a147c25)
  • extraction — ping-pong the searcher roam so a very long decide never clamps to AFK (8e8244b)
  • extraction — searcher MOVEMENT is now deterministic + wall-clock — no reset on reopen, no post-decide speed-boost, no AFK (cd1b2ab)
  • extraction — reopening the minigame no longer replays a "restart" — snaps to the live frame (18e2c82)
  • map — own crawler always renders ABOVE cities (drop the city above-crawler ghost) (8ea9b81)
  • hud — FPS meter is a top-layer DOM overlay (never hidden behind a buff) (fa49ca4)
  • city — "Back to City" on the parked city's radial + reuse the city rest graphic (182bacb)
  • native — route nativeIAP config fetch through APP_ORIGIN (11724f9)
  • client — retire deprecated commander portraits from class defaults (6898e09)
  • extraction — reopening the minigame resumes the LIVE roll at its real-time position (c5d33a2)
  • extraction — scooter only after arrival + map roll always plays behind the modal (1fa0141)
  • extraction — minigame modal is a LANDSCAPE window on PC (no vertical over-stretch, bigger square) (192e351)
  • extraction — retire the driven map roll on modal close + skip done pops (2dd58f0)
  • crawler-skin headings set to the owner-specified mapping (dbb0b4a)
  • crawler-skin wheel animation quality gate + procedural dust layer (9b170a4)
  • landing — correct inverted composition-over-headcount claim (ac7560f)
  • extraction — minigame truly waits for the replay (early-resume race) (eeb7765)
  • mobile — App Store rejection fixes + native-build audit hardening + native IAP (0fb333e)
  • client — guard megatower _doEnter against a null _instance + generalize the lint (63cbe70)
  • extraction — DECIDE truly never pauses the minigame + enemy-zone/chest/haul polish (c2e5f4e)
  • events — strip em dashes, fix invisible SIGN IN button, trim intro (a471326)
  • client — capture _run in _rewind's confirm callback + lint sees callback derefs (a65d77f)
  • client — guard megatower onclick/confirm handlers against a null _run (11ac698)
  • deploy-modal — compact width (not screen-wide), no scroll, 2:3 card (211440e)
  • deploy-modal — fill viewport height, hero card at full 2:3 (no squeeze) (69bb06e)
  • deploy-modal — no scroll on the commander/unit area (60dc53e)
  • hub — footer tagline closed alpha → open beta (matches homepage) (fa7d0af)
  • landing — mobile carousel — scrollable rail + video centered on load (48aacc9)
  • i18n — zh-TW/HK/MO devices auto-switch to zh-Hant (web+mobile) + capture device locales (a040eda)
  • landing — use the logo-free raw feature art for the hero (f9eca8b)
  • deploy-modal — fit SEND TO EXTRACTION on short landscape phones (c2437d3)
  • l10n — translate skill-card descriptions (rebased onto staging) (d424a70)
  • audio — unify default channel volumes to one frozen source (music 0.2) (eda0032)
  • extraction-minigame — drop the nested reveal card (window-in-a-window) (e2852ea)
  • extraction-minigame — slimmer mobile footer, taller modal, smaller roll (c6f2c80)
  • bank-reveal — drop tax flash, align ITEMS header with resource headers (bbeffc3)
  • bank-reveal — drop rarity glow on flat rows, de-purple tech-core bar (c31e314)
  • hub — drop WHY/COMPARE from header nav; declare Cipher mint supply = 100 (7a7274e)
  • bank-reveal — remove tax section vertical padding (flush to loot + foot) (f77df1d)
  • bank-reveal — tax bar runs edge-to-edge, tech-core column lines up with DONE (b4c9479)
  • bank-reveal — merge tax rows into one divided grid (no boxed spacing) (6447ba5)
  • economy — finish tech-core 10:1 redenomination (subsidy value + maxout) (0ceaacb)
  • bank-reveal — recycle checkbox, tighter chrome, tax icon + skim label (b6e705d)
  • bank-reveal — tighter loot grid, 3-deep Items columns, tax label polish (30919a7)
  • bank-reveal — phone menu fills the viewport, uses the vertical space (08539cc)
  • map — render alliance crawlers at full opacity in fog (Pixi + canvas) (1ef56fb)
  • bank-reveal — collapse foot to button height + tighten tax (PC + phone) (a6aa516)
  • bank-reveal — phone-landscape layout parity for the BANKING HAUL menu (0226fa2)
  • tutorial — seed the commander's squad in the sandbox handover (44d945e)
  • extraction — constant walk pace (no speedup); lift modal off the bottom bar (7eefe75)
  • extraction — magnifier not hourglass, longer top-down roll, drop timer, decide waits (300fe5e)
  • l10n — translate map site + city names (extractor collision + resolver) (cd58394)
  • extraction — slower/one-way rolls, one-cache-at-a-time, +1 spread wave (6213443)
  • cup — store-compliance — strip the in-game Cup tab's USDC/claim framing from store builds (e6e44bf)
  • l10n — drop under-anchored i18n patterns + translate canvas radial labels (4b598c4)
  • cup — codex money-review findings — payout-sheet + garrison-accrual + tithe + dust hardening (5000ca6)
  • audit r2 — raid-recall dup guard, troop-grant upserts, ASH clobber (4f66724)
  • combat — marked_for_death fires on strike attacks; disruption_field reads config (02430ad)
  • crawler — render movement linearly to match server (stable speed, no jump) (272a460)
  • alliance — wrap one-time permission migration in a transaction (d769eaa)
  • telemetry — report-side noise denylist for client errors + [object Object] fix (4ebb7ef)
  • ui — refresh identity chrome on profile rename (547aefd)
  • extraction-reveal — searchers cover the WHOLE grid, no orphan cubes (a717068)
  • events — reject eventExclusive blueprint rewards at boot validation (82a1d18)
  • extraction-reveal — no box around commander, roll on body (uncropped), drop STAGE + caches-secured (a42580b)
  • replay — preload troop sprites as .jpg, not dead .png (69bd44e)
  • extraction-reveal — delete top bar, real square tiles, everything rides up, bigger chest (4658abe)
  • extraction-reveal — show the FULL site art in a square panel + a 14x14 grid of squares (8c89588)
  • extraction-reveal — search grid — many square cells, no grid chests, hourglass scanner grows + loot drops into bottom chest (c0722b6)
  • extraction-reveal — HEAT always in footer bottom-left; WAVE ETA in header top-right (95a1294)
  • extraction-reveal — reel spins up from rest, arrow on right, random land offset (6d27e24)
  • bank-reveal — group non-resource items under one 'Items' header with per-row names (5da8c81)
  • map,ui — far-zoom marker layer + vehicle dots, review fixes (transit teleport gate, bank reveal hideValue/tax/subtitle), city window polish (b82fd54)
  • replays — mark a battle report read on open/watch (899c7e0)
  • web3-hub — coverage-audit findings — single-flight refresh, store strip, public catalog, CI filter (189c87a)
  • rewards — review findings — host-shard pin, purge-rejected recovery, deterministic ranks, timing-safe token (36c17ff)
  • ci — track consolidated acquisition view in verify-acquisition-analytics (211c363)
  • map — symmetric rail diagonals (right leg was 1 tile too long) + refresh rail art (c77522d)
  • map — redo void backdrop — crisp cover-fit parchment cities, no bleed (07d65f4)
  • map — sunken-arcology seed removes stray reserves (no duplicate on move) (1d75ac4)
  • map — faction borders inset per side (both colours visible) + Haven owns ring 0 by default (a9ec275)
  • map — roads follow the EXACT specified polyline — one corner tile per bend (aef993c)
  • map — river/rail route the frontier CORNER between the paired towns (not the Citadel) (1404365)
  • map — eye shape — keep full ring3, stretch L/R to 90deg corners (revert vesica) (1340a47)
  • map — tilt-shift failure path no longer re-assigns filters every frame (be2464d)
  • map — clear the unused hard weather mask in the frontier branch (45b9101)
  • map — frontier weather fades out at the ring-2 edge (no hard cut) (25eef74)
  • map — HD terrain covers zone-blend seams (no low-res bake showing through) (f63559e)
  • map — tilt-shift filter gives up after a build failure (no per-frame retry) (e77b0b4)
  • map — tilt-shift keeps label text sharp + pull the blur in a bit (318bc4f)
  • map — tilt-shift — keep FPS/cursor sharp, symmetric bands, blur hugs edges (97ee6c9)
  • map — restore _ls0 def lost in staging merge — Pixi init no longer falls back to canvas (2e92eae)
  • home — height-floor Cipher scale so legs hide on TALL/near-square too (4e9adfd)
  • home — scale Cipher up as the screen narrows so her cropped legs stay hidden (84587e8)
  • map — force fog shader to highp — fixes fog vanishing on phone zoom-in (23261c9)
  • extraction — wave march departs at arrival, not 15s into the run (3f322ef)
  • map — clear deploy march once the squad's ETA elapses (c2eae34)
  • restore zone on-ramp seed bands (T1-in-wastes / T2-in-deep) (2ad0e58)
  • map — remove far-zoom void backdrop entirely (f8e0f69)

Performance

  • client — memoize _col color parsing; guard socialScreen post-exit render (77cfca3)
  • map — strip remaining per-frame allocations + per-entity config lookups (1035b10)
  • map — player names render from a shared glyph atlas (BitmapText fast path) (e74f8f8)
  • map — dirty-flag camera-only Pixi layers — skip idle re-tessellation (d149e1e)
  • map — cap mobile render resolution after 16:9 removal (fixes laggy scooter) (66e8c19)

Internal

  • remove rejected tread mode; keep --axles, --only-yaw, hardening (fc8ec50)
  • extraction — single-source the reveal schedule into shared/extractionHaulPlan.js (3e95f80)
  • client — share the activeExtractions status builder; fix packing collapse on respawn (d17278a)
  • l10n — Taiwan-nativeness denylist lint (PRC vocabulary in Traditional script) (498fe76)
  • lint anchor follows the merged own-crawler draw shape (single-line else) (abbfc25)
  • first-word — fix stale scrap_runners key + guard unknown units (2163a5b)
  • ci — city-gate alliance creation in qa-test; scope /world alliance-lookup lint to the handler (c8f3992)
  • deletion — retain gateway_reward_claims rows on player deletion (0771825)
  • wheel source image lives in untracked art_assets (raw-art policy) (a454f78)
  • sprite-pipeline skill runbook rewrite + map-drive-verify skill (55fa51f)
  • coverage-log entry for the 2026-07-10 extraction squad-modal audit (3b85370)
  • known-bugs — log L10 — replay over-counts a slot when count diverged from HP (#458) (ae882d4)
  • cup — point the payout runbook at the /admin operator console (4ec2ace)
  • cup — operator runbook — add per-shard payout operation (8534ada)
  • coverage-log — adaptive tiers + browser-drive results (3195e0c)
  • iOS Pixi world-map memory optimization plan (6c121a6)
  • $THRONE token launch design (VVV-model, gamified) (ce1d7eb)
  • skills — 5 new game-design authoring skills + troop/site wiring lints (efa0190)
  • skills — refresh commander/skill-card creation skills + add item-creation skill (58407d8)
  • alliance industrial sinks design draft (fight-for-your-alliance) (af0e9fa)
  • web3-hub — architecture + payout runbook, CLAUDE.md guards, SEO nav regen (6f83279)
  • preserve shipped-skin render anchors (GLBs + source art) in Git LFS (155c932)
  • l10n — re-sync landing i18n-dom copy + rebake after staging merge (7452139)
  • ios — bump build number to 4; commit RevenueCat SPM sync drift (e4ffee2)
  • retire old default-crawler art; ECHO-7 renders the animated atlas (5b7708b)
  • deps — sync package-lock with revenuecat IAP dep (8cca221)
  • l10n — restore game report clobbered by subscription-mode lint probe (6d6db92)
  • tutorial — retire stale extraction-flow test + log the squad-handover coverage (c457e1c)
  • config — remove superseded CATALYSTS.DROP_GRADES / CACHE_DROP_GRADES (dc2f365)
  • dev — local landing static server + /api proxy (mirrors Vercel rewrites) (caf78d6)
  • map — hide rail hori_diagonal corner tiles (opacity 0), matching river (bff2325)
  • map — refresh river tiles + hide river hori_diagonal corner tiles (opacity 0) (7c1f778)
  • map — refresh road_river tiles from updated source art (8bba2f6)
  • map — refresh river tiles + rail/river opacity −30% again (now 0.49) (cf542b5)
  • map — refresh road_river tiles from updated source art (05c129a)
  • landing — remove em dashes across shop, index, event-rules, shared styles (8bda13f)
  • ui — slim segmented menu top bar (BACK/UPGRADE as divided segments) (d91bfbb)

Other

  • l10n: auto-translate zh-Hant artifacts (b77c957)
  • l10n: auto-translate zh-Hant artifacts (6830f83)
  • tune: default crawler mapScale 0.9 -> 0.8 (owner judgment vs Mark II) (c25ca1b)
  • l10n: auto-translate zh-Hant artifacts (e7ccb2a)
  • l10n: auto-translate zh-Hant artifacts (bd2f827)
  • polish(city): resting bar is a true bottom-bar segment (transparent, divider, roomy) (7844f33)
  • polish(city): map resting bar is a flush bottom-bar segment; drop "stacks" (c01a049)
  • l10n: auto-translate zh-Hant artifacts (02ea88c)
  • polish(extraction): magnifier tucked into the portrait + both helpers get one (90f996d)
  • polish(bank-reveal): combine overflow into one OVERFLOW LOSS total (no per-row tag) (28fde86)
  • polish(extraction): shrink the loot chest below the minigame 40% (3c6ffb7)
  • polish(deploy-modal): pin actions to a thin segmented bottom bar (d646ece)
  • polish(extraction): Squad button into the footer segment next to Retreat (7228f84)
  • l10n: auto-translate zh-Hant artifacts (d57c1f6)
  • polish(extraction): title + HEAT into side column, thin segmented footer (cc22f21)
  • l10n: auto-translate zh-Hant artifacts (602da1e)
  • l10n: auto-translate zh-Hant artifacts (ecfbb74)
  • polish(bank-reveal): lighter titlebar, dim post-HAULS title, one-line tax rate (7c8415d)
  • polish(bank-reveal): narrow items pane, wider resource columns (10e2d8a)
  • polish(bank-reveal): title = "BANKING N HAULS - T# TYPE - SITE NAME - [x,y]" (5063dc4)
  • polish(bank-reveal): purple tech-core number, spelled-out tax rates, softer DONE gold (feb2e14)
  • l10n: auto-translate zh-Hant artifacts (ff5ce44)
  • l10n: auto-translate zh-Hant artifacts (9cda44b)
  • l10n: auto-translate zh-Hant artifacts (c2d2c9d)
  • perf+fix(server): per-tick partial indexes; close two silent troop-loss paths (93bf64c)
  • wip: session work — transit deploy-gate, alliance bank grants, city window inhabitants, crawler speed +40%, map shadow tweaks (c1b756d)
  • tune(map): transit line = extraction-style dashes on the road; extract-sized vehicle; 2.5x duration (1b8de0b)
  • art(map): refresh Cindria city tile (bbbc212)
  • tune(map): The Scrapwright -> Ferry Construction Yard at (149,112) (fcd7495)
  • tune(map): rename ring-0 subregion label 'Citadel Grounds' -> 'THE CITADEL' (9002d78)
  • art(map): update Cindria city tile (new graphics, 1024w) (6454185)
  • tune(map): river tip to 113,152 (+mirror); Canopy Mast -> (117,154) Viridia Eco Inc HQ (6782736)
  • tune(map): extend river to Canopy Mast's old row (both legs), move Canopy Mast up 3 (3761079)
  • tune(map): move The Birdsong Relay -> (119,154), rename to Viridia Eco Inc (531d7c9)
  • tune(map): void wallpaper on eigengrau (was brown), larger + clearer (cac92b0)
  • tune(map): crop bottom of top papes; meeting point stays under the capital (824034a)
  • tune(map): lock 4 papes into one 2x2 block meeting below the capital (68bd3c8)
  • tune(map): faction borders 6px wide, touch with no gap/overlap, 54% opacity (b389fa2)
  • tune(map): faction border lines 8px wide, 60% opacity, ~3px gap between colours (d4871c5)
  • map polish batch: border gap+weight, roads reprocessed+lowered, dungeons off-corner, faction label colours, arcology move, silent reconnect (8c36c3f)
  • polish(I): ferry parity confirmed + dotted line erases around the vehicle (a2a14bd)
  • tune(map): bold citadel/town titles, town ruler placeholder split onto two lines (2d4e065)
  • tune(map): towns moved 2 tiles out, coloured far-zoom diamonds + names, fresh city art (8f0942d)
  • tune(map): bigger citadel/city titles, per-city colours + ruler line, later+stronger player dots (fcb436f)
  • tune(map): cities 7x7 (Citadel-sized), arcology sprites x1.8, new Viridia/Thornvale art (a57369b)
  • tune(weather): frontier drizzle falls faster (drift near 20->26, far 13->17) (52aee4e)
  • tune(weather): frontier rain a bit smaller, faster, ~80% opacity (bcdca9b)
  • pleasant weather update (b67d545)
  • tune(map): tilt-shift blur crossfades like opacity (no sudden stop) (266462b)
  • tune(map): tilt-shift — top blur a little lower (FOCUS_H_TOP 0.34 -> 0.30) (3b35121)
  • tune(map): tilt-shift — pull top blur up a lot, bottom in a bit (bigger sharp band) (ea00de3)
  • tune(settings): drop the long Tilt-Shift Map description — bare toggle (4801861)
  • tune(map): tilt-shift — softer blur (STRENGTH 18 -> 11) (9083cd9)
  • tune(map): tilt-shift — pull the blur back toward the edges (bigger sharp band) (7802ebd)
  • tune(map): tilt-shift — real visible blur gradient (975665d)
  • tune(map): tilt-shift — top blur reaches a bit further down (asymmetric gradient) (d3e7b2d)
  • tune(workshop): Inventory tab on left, Craft on right; tabs flush to top bar (f6deef5)
4936f11

New & Changed

  • market — terminal polish + $ato/ASH pair + market-level daily cap (c5b9305)
  • replay — per-location battle backdrops (subregion + citadel district) (90da91f)
  • analytics — Stripe refund clawback + exclude from REVENUE tab (52490b4)
  • analytics — REVENUE tab + onboarding depth + megatower/replay/i18n surfaces (e7770b6)
  • analytics — production-readiness pass - render tab, deploy markers, rage quits, dead-route removal (b9f0b10)
  • analytics — consolidate acquisition channel view + fold Zealy into the channel dimension (9204348)
  • replay — whoosh SFX per skill-proc name fly-in (one per combo beat) (a6fdf47)
  • barracks — server-authoritative cross-device squad presets (275d4a6)

Fixes

  • socket — make token rotation invisible — stop the 15-min reconnect spam (2cf4689)
  • ui — center menu titles, fix mobile filter chips, add mark-all-read to mailbox + replays (338809f)
  • replay — gate shared-link autoplay on real audio (no more silent replays on refresh) (42df2fe)
  • replay — combo ALL proc types fired in one commander turn window (c1d4ff0)
  • telemetry — capture console.error so swallowed client errors reach monitoring (1e17aba)

Internal

  • add verify-claude-md reference-drift lint + wire into verify-on-edit hook (df6483a)
  • claude — share postgres-staging MCP via env-var-gated .mcp.json (1e69b24)
  • claude — automation pack — client-ui reviewer, 2 skills, .env guard, schema lint routing (63f1cf4)

Other

  • l10n: auto-translate zh-Hant artifacts (4f58083)
  • l10n: auto-translate zh-Hant artifacts (1d7101f)
  • l10n: auto-translate zh-Hant artifacts (c839e97)
  • l10n: auto-translate zh-Hant artifacts (ec70a85)
  • l10n: auto-translate zh-Hant artifacts (c7dd629)
b63e3a3

New & Changed

  • ios — activate CI release automation (API-key signing, auto-submit) (79b9fa9)
  • alliance — Leave Alliance + Kick from the member roster popup (#416) (b92efae)

Fixes

  • alliance — let vice-leaders kick officers (client Kick UI was over-restrictive) (4839f55)
  • ci — quote l10n.yml job if: — unquoted 'l10n: auto-translate' broke the YAML parse (e46ee5e)
  • ci — Node 22 for the Capacitor cap-sync jobs (android build gate + release) (5399cb2)
  • android — strip AD_ID permission merged by the Facebook SDK (f936ef4)
  • auth — Android native Google sign-in was completely broken (6fe35de)
  • gateway,login — promote-review followups — Apple directory backfill + identity-collision message + login disclosure reset (b5914e3)

Internal

  • release — Android Google sign-in needs BOTH upload + Play App Signing SHA-1 (e68333f)
  • capture Pixi texture-lifecycle footgun (assetTexture destroy on shared source) (6ab1332)
  • sync CLAUDE.md to current state — Pixi cutover complete, canvas-2D deprecated, l10n, native (3ed9afd)
  • ios — iPhone-only + export-compliance-exempt for App Store 1.0 (2) (04c8eba)
c204216

New & Changed

  • attribution — UTM acquisition tracking for playtoearn.com + /play link (ab93b00)
  • l10n — zh-Hant backfill artifact — 2,900+ translated strings (1c1463d)
  • l10n — supervised-backfill ops model — zhHantCheck, concurrency, CI work cap, backfill skill (dfd1885)
  • l10n — whispers are never auto-translated (owner decision) (ea04703)
  • l10n — mail templates + live chat auto-translation (wave 3, review-hardened) (908c8ff)
  • l10n — automated localization system — zh-Hant pilot (wave 1: pipeline + runtime + plumbing) (5a089c5)

Fixes

  • l10n — tutorial Ada spoke English — chip-token parity + glossary-blind critic (0ac1f56)
  • l10n — load extraction/hunter.js in the browser; lint the require↔script divergence (4f1b411)
  • l10n — align bot commit message with the workflow loop guard (8f74482)
  • l10n — ship locale artifacts in the Capacitor www build + coverage log (7d7df22)
  • l10n — backfill stall — thinking overflow + unawaited Batch results iterator (1785616)
  • verify — action-dispatch sanitizer went blind after nested template literals (1220fe4)
  • auth — add clickable deep-link fallback to Electron OAuth callback page (9e224ec)
  • combat — battle alert suppressed ONLY on real crawler destruction (explicit flag) (e25302a)
  • extraction — PvP battle outcome always notifies both players (emit-first) (2e6d1ef)

Internal

  • extraction — atomic PvP resolution — one withTransaction, rollback = retry (5b7b97c)
  • l10n — operator runbook + complete new-locale wiring checklist (0a35422)
b3f854b

New & Changed

  • marketing — Play Store listing creatives v2 + compositing pipeline (7a0a922)

Internal

  • store listing screenshots + icon plan (handoff) (d66474b)

Other

  • seo: make ashenthrone.com the canonical landing domain (0e02030)
  • seo: add WebSite schema to landing index, refresh sitemap (add /changelog + /follow, bump lastmods) (5762b2d)
df144f5

Fixes

  • client — stop Pixi auto-render ticker + guard megatower _exitRun NPE (7d72bf9)
  • tutorial — post-handoff "Claim Your Rewards" tip is durable-state-driven (88dc205)
  • tutorial — suppress the chat box during the tutorial sandbox (c99557b)
  • client — paint map first + self-heal buildings on facility screens (proper fix) (b77b073)
13836f0

New & Changed

  • monitoring — redesign anomaly-watch + telemetry for Pixi + sandbox-tutorial (eee2abd)

Fixes

  • client — prime /base + /army at post-login so map quick-nav facilities aren't empty (64ec62f)
  • extraction — wave formation packed a 4th front column (col:3) off the grid (338e995)
  • hud — DECIDE event badge lands on-screen regardless of containing block (0f29a3a)
  • shop — cap pack-art height so a lone card never buries the BUY button (adf1c2b)
  • tutorial — clear the guidance arrow when THE STAND replay plays (97ee34b)
8476125

New & Changed

  • landing — account-deletion request page for Play compliance (db94c9a)
  • tasks — new-player task chain — RoK-style post-tutorial direction (da469f5)
  • shop — real chest-open sample for the crate burst (bc89aab)
  • shop — ceremony wave 2 - dedicated synth audio, all-pack frames, gold-tier burst (9baaa9e)
  • gateway — multi-shard production readiness for web + native clients (f1df1c2)
  • shop — pack-opening ceremony — crate slam, charge, burst, fly-outs, tally (516e027)
  • tutorial — owner-drive feedback wave — 9 UX fixes + finale citadel redesign (38283e3)
  • tutorial — checkpoint-replay persistence — reload resumes, never stuck (d7efad1)
  • tutorial — design system wave B — engine invariants kill the drive's jank (f30cd5a)
  • sharding — multi-shard gateway — directory, CCU-latch assignment, warm-spare promotion, handoff login (Phase 1 overflow readiness) (4e99535)
  • tutorial — handoff auto-open + commander voice + Vael cameo + copy beats (c4dcec1)
  • tutorial — honest train timer — displayed == actual == TRAIN_SECONDS (811dcd4)
  • tutorial — THE STAND — the player wins the defense, then learns the replay (6b5bb8f)
  • android — Capacitor android platform scaffold (54862e1)
  • auth — Sign in with Apple server endpoint (/auth/apple) (8df9fb4)
  • tutorial — panel-free act phase + polish pass from owner playtest (c3b7f73)
  • capacitor — www packaging pipeline + native-origin CORS + Capacitor 8 deps (24301fe)
  • client — APP_ORIGIN absolute-origin support for the native shell (e9fc4a4)
  • iap — RevenueCat webhook fulfillment + store-build native purchase path (cd2d441)
  • compliance — 13+ age gate at registration + public /odds drop-rates page (064c72a)
  • store — store-surface server guard + store-bundle code strip + verify lint (f83d613)
  • tutorial — north-star Citadel card + Iron Marshal Vael villain arc (f24c4a5)
  • objectives — GO auto-nav + retroactive tutorial credit at the handoff (0a0c907)
  • tutorial+shop — free New Player Pack — crossed-out 100 ASH, costs 0, taught in-tutorial (f9fc8e0)
  • tutorial — first-commander CHOICE at the beacon (Voss / Cipher / Vell) (a9763eb)
  • tutorial — OBSERVE phase (serialized attention) + per-beat funnel telemetry (f63bb5e)
  • tutorial — narrate-first beats + universal pointer arrow (RoK pattern) (bee6305)
  • tutorial — open the squad panel + play the deterministic loot reveal on extraction (ffdf969)
  • tutorial — remove the post-fight + post-loot dead Continue panels (c5b4fa0)
  • tutorial — real Armory conduit step before the Barracks (reorder) (4a67226)
  • tutorial — sandbox infra for the real Armory conduit install (ac10b9a)
  • tutorial — action-labeled CTAs (CONFIRM FORMATION / ENTER THE FRONTIER) (4a17365)
  • tutorial — lock troop training outside the train step (14f1f6a)
  • tutorial — remove the dead generator 'continue' panel (4929607)
  • tutorial — quick-nav expanded only on menu-access steps (41c29b6)
  • tutorial — real out-of-range→in-range move + objective arrow + framing (a9840bf)
  • tutorial — generator celebration + on-rails crawler-move beat (121b131)
  • tutorial — bound the seam catalyst grant so the cryo D1 hook survives (G-HOOK) (42fd6ef)
  • tutorial — real pre-Fall competence fight + counter-triangle lesson (M8/G-FIGHT) (48aacb2)
  • tutorial — load the real combat engine client-side (foundation for a real G-FIGHT) (0ee217f)
  • tutorial — teach the real Crawler-move (Dig Out beat) + fidelity grading criteria (5b3993d)
  • tutorial — drive tutorial through the map menu (map-centric) + fix dossier card (607697d)
  • tutorial — Phase 5 — cutover (sandbox default-on + remove server monitoring) (8a950ea)
  • tutorial — Phase 4 — the Fall + the seam handoff (end-to-end) (05f24ca)
  • tutorial — Phase 3 — world map + beacon summon + extraction lifecycle (a6564f0)
  • tutorial — Phase 2 — base + command write handlers (generator step verified) (f89d57f)
  • tutorial — Phase 1 — client-side sandbox core (old overlay, identical UI) (59f09dc)
  • tutorial — Phase 0.5 — seam fromSandbox flag (suppress duplicate Fall emits) (e03269b)
  • tutorial — Phase 2 — client-only cutover (default on, remove monitoring) (8d8585c)
  • tutorial — Phase 1 — client-only tutorial sandbox (6816f21)
  • tutorial — Phase 1 foundation — telemetry parity allowlist + feature flag (7473097)
  • tutorial — Phase 0 — idempotent client-only provisioning seam (d6248c3)
  • map — tilt-shift mode, HD zone-blend seams, weather tuning, phone HD/fog fixes, perf (#346) (1ade55c)
  • map+home — phone HD terrain & fog-zoom fix, tall-screen Cipher scaling, 16:9 removal (#342) (32a2530)
  • map — thin haul bar under extraction-site labels (9c5bedb)
  • map — feather the ring-2 sandstorm into vision (gradient, not hard cut) (3203bd8)
  • map — real moving sandstorm (dust-driven colour) + rain in vision∩ring2 (8e8921c)
  • map — ring-2 fog as a thick brown CCW sandstorm that floors at 33% in vision (b5b6095)
  • map — remember seen TIMED ring-2/3 extraction sites as faded ghosts till expiry (9ed4345)
  • citadel — ruling-alliance label + Current Rulers tab; fix Citadel Grounds tooltip (ceb6330)
  • map — far-zoom Citadel Grounds reads as Frontier (Haven), + biome config knob (b3fc939)
  • map — remove the radar-sweep wave — plain static grid only (278a53e)
  • map — light-blue grid + diagonal white radar-sweep every 10s (ad95d10)
  • vision — share fog-of-war across the whole Frontier (Ring 0 + Ring 1) (cc0a548)
  • equipment — steeper epic scaling, 70% legendary, enable equipment power (9146884)
  • social-rewards — honor-system → T3 loot chest; verified ASH 300→100 (4b6065c)
  • extraction — remove the cycle-time boost (broke under the slot system) (024f036)
  • ui — shared ui.rewardModal primitive + fix recycle-complete drift (aae99bd)
  • boost — make all travel timers boostable + fix squad-panel countdown (83a20dd)
  • extraction — remove zone on-ramp seed bands (T1-in-wastes / T2-in-deep) (4d1442a)
  • map — ring-2 fog clouds swirl CCW around the capital; slower cloud cover (01ed05a)
  • map — show "Citadel Grounds" far-zoom zone label; stronger frontier green (5115f7f)
  • world — tweak Citadel-ring sites + rename ring 0 to "Capital Grounds" (3142750)
  • world — 4 named extraction sites ringing the Citadel (zone 0) (a47997e)
  • map — always-on drifting clouds + more visible grid (353889d)
  • map — bring back the warm yellow cast (no dark filter) (600d7e8)
  • map — weather = drifting patterns only, no haze (no dark filter) (ec6bacd)
  • map — native high-res terrain on ALL rings (kills the dark/soft bake look) (dd5ce48)
  • map — new citadel art (tile_citadel) on a 7×7 footprint (1f28146)
  • map — native-resolution terrain on all zones at close zoom (restored) (200e8e7)
  • map — native-resolution terrain on all zones at close zoom (ba68b29)
  • map — ring 0 renders as Frontier — Haven tiles + no fog shroud (ac0f88e)
  • zones — ring 0 (Citadel circle) shares the Frontier ruleset + look (6d0aec2)
  • map — port zone condition icons (eye / red swords) to Pixi (f319241)
  • map — hover highlights the actual click target (entity glow), not the ground (f854f22)
  • map — make deploy + packing hourglasses public (others see you "warming up") (6a1c5f0)
  • deploy — flat 6s prep everywhere, shown as hourglass(es) over the crawler (551dc09)
  • map — broadcast squad name to all viewers; every wave shows the monster; kill the name flicker (67c0ee8)
  • extraction — packing is vulnerable to an incoming wave (f078bab)
  • map — march dashes flow toward target; pixel_monster rides incoming-wave line (d762dbd)
  • map — extraction travel vehicle indicator — extractmobile on a brighter line (f7ae09f)
  • barracks — squad-name input per commander+preset (default "<Cmd> <n>", 12ch) (0ed2e0b)
  • server — per-(commander,preset) squad names — table + GET + save route (719a0c3)
  • ui — extractmobile_pixel asset; hide Loot in expanded menu; garage scooter icon (aa6b894)
  • settings — default FPS cap to 90 (was 60) (e1cd7ee)
  • settings — remove the Resolution (render-scale) graphics option (b3f8559)
  • map — Pixi weather (drifting pattern layers) + ping/chat-bubble overlay (cffcc63)
  • map — Pixi entity labels — site tier badges + base power labels (§52) (0eca822)
  • map — make the WebGL renderer the DEFAULT (Settings → Graphics toggle) (9f9d727)
  • map — fog drift wisp (§51) — scrolling smoke folded into the fog shader (0de5be9)
  • map — per-tile explored/visible fog (§50) — visibility texture (dd27ac3)
  • map — WebGL context-loss handling (mobile robustness) (003208c)
  • map — Pixi port Phase 5 — interaction visuals via 2D UI overlay (fee78f6)
  • map — Pixi port Phase 4 — entities + labels (f666f5d)
  • map — Pixi port Phase 3 — zones/edge + mood lighting (6003851)
  • map — PixiJS WebGL port — Phase 1 scaffold + Phase 2 terrain & fog (a5af48a)
  • client — tabbed Settings + graphics controls + map render perf/mobile fixes (5516b33)
  • alliance — per-pair daily help cap — anti-funnel friction for alts/bots (863aaa1)
  • auth — per-IP registration rate-limit to stop Sybil signup floods (13e3485)
  • ui — map expand-menu redesign, alliance Info/Bank/Social, Garage, alliance-XP rework (84a0a4b)
  • siege — net (destroyed - lost) leaderboard scoring + Zealy net quest (47c0db4)
  • analytics — retention by acquisition source (Zealy vs organic) (d2c208f)
  • analytics — track D14 + D30 retention offsets (d0e7fc1)
  • analytics — blended cohort-weighted retention card on dashboard (68d5fa2)

Fixes

  • promote-review — CI-red tutorial lint + seed-purge guard + tutorial-lint source meta-guard (#358) (8476125)
  • ci — eliminate CLIENT-section flake by forcing canvas-2D in the qa harness (ac8f76f)
  • tutorial — un-positioned panel shows landed at inset:auto — explicit dock (1ade19b)
  • tutorial — owner drive round 2 — train-bar start, panel jump, Vael's own beat (831489c)
  • bootstrap — stop staging boot crash-loop from idx_players_apple_sub (48be3f0)
  • tutorial — mobile-landscape drive — extract-beat clamp blocker + 3 fold bugs (7328380)
  • test — stale literal-string lint in verify-first-word-event.js (f808cb9)
  • tutorial — narrate-owns-frame at the SOURCE + design-system docs/verified (e00f848)
  • rebase — two gaps surfaced by the staging merge (app-store-launch) (b91d378)
  • test — missing db.ready await + extend CI-flake retry to Decide click (7608809)
  • docker — ship shard-admin.js in the image for railway-ssh cutover steps (236109b)
  • zealy — shard-scope + globally dedup USDC milestone claims (multi-shard safe) (bd50235)
  • compliance — show drop rates as an in-game modal, not a browser page (f7d434e)
  • tutorial — /train response missing queueEntry crashed the train popup (7eb091c)
  • compliance — show drop-rates link in the beacon's own confirm dialog (2aaba90)
  • iap — close the refund-before-grant race + reconciliation for stuck orders (1270615)
  • auth — make Apple signup's 23505 handler constraint-aware (b956de7)
  • release — kill staging-origin footgun + socket.io indirection (CI break) (b351591)
  • iap — close 5 money-integrity holes in the RevenueCat webhook (524c90c)
  • auth — enforce 13+ age gate on OAuth signup + make Apple account creation atomic (2a34611)
  • mobile — repair Track E CSS self-regressions (50abc74)
  • auth — harden Apple JWKS fetch — single-flight + cooldown + negative cache (35599f8)
  • tutorial — catalyst boost hard-block — sandbox /catalysts served item keys (dd8cc7b)
  • auth — tester bootstrap attests ageConfirmed (store surface requires it) (dac76f2)
  • capacitor — vendor pixi.min.mjs into www — WebGL map was silently demoting to canvas-2D (386c608)
  • store — scope blockStoreSurface to /vault + /zealy prefixes (02f0d1f)
  • tutorial — highlight repin wedges in a hidden tab (rAF never fires) (3450b80)
  • mobile — 6 high-severity mobile-UX fixes for store submission (b3056c8)
  • tutorial — render site/depleted/radial map cues correctly on the default Pixi renderer (500b4b2)
  • tutorial — render the move/beacon map cues on the default Pixi map (d217bfc)
  • tutorial — hospital boost-recovery highlight lands on the async-rendered button (33f43c7)
  • tutorial — haul-chest bank reveal shows the loot (was "empty-handed") (7486795)
  • tutorial — summon reveal no longer swallows the next step's panel render (0116c6f)
  • tutorial — generator celebration confirmation, beacon in-range refresh, drop forced combat (40dc5cb)
  • tutorial — port move-beat zoom to continuous model + closer zoom (dfd7beb)
  • tutorial — Phase 5 — deactivate sandbox on session clear / account switch (Codex review) (3d82aca)
  • tutorial — Phase 3-4 shape parity (Codex review) (3118f33)
  • tutorial — Phase 1 sandbox hardening (Codex review) (d29210c)
  • tutorial — harden provisioning post-commit side effects (3796ade)
  • hunter — weakest Hunter is now 1 unit, not 6 - new players survive the Wastes (9e16c86)
  • cache — auto-version SW cache per deploy + stale-while-revalidate assets (f3d0b26)
  • map — make Pixi the sole canvas-CSS writer (autoDensity), drop manual pin (edd93d3)
  • map — disable Pixi autoDensity — own the canvas CSS like the 2D canvas (d27cf16)
  • map — harden Pixi viewport sizing for Android Chrome / iOS Safari (8c75602)
  • map — uniform spacing on Citadel label — top-anchor all 3 lines (5895837)
  • hospital — boost modal counted paused (away) wounded it can't boost (aa21955)
  • map — haul bar width = type label width (stops shrinking on zoom-out) (f563f29)
  • map — guard storm shader against atan(0,0) NaN at the map centre (8eaa5c6)
  • map — ring-2 sandstorm clouds actually render + move (swirl texture was 404) (c458082)
  • map — "Safe zone" chip on ALL frontier tiles + bigger readable citadel label (889972e)
  • map — lower Summon Beacon slightly so it centers on its base (0c5a83e)
  • map — render weather ABOVE structures so sites/beacons sit under it (d7118d1)
  • 4 server bugs surfaced while repairing the verify suite (b17d29a)
  • map — lower the risen arcology — half-tile lift sat too high in its 2x2 (72a397a)
  • map — drop the Summon Beacon ground shadow (read as "floating" after lift) (839678e)
  • map — lift Summon Beacon + risen arcology art ~half a tile in their slots (fa5c7ee)
  • map — REAL phone fix — _viewport divided logical size by DPR (map in corner) (666d0b0)
  • map — phone — Pixi map filled only the top-left quarter of the screen (0e1f222)
  • reveal — SKIP finishes the haul modal once the reveal is done (was a no-op) (ca28cfc)
  • barracks — stop double-posting the "replaced from Reserves" SYS line (7b80d97)
  • barracks — deploy-modal EDIT no longer overwrites a preset on switch (252aeb5)
  • map — fade the Pixi map in on cold load — hide the stale-bake "lava" flash (42e97a8)
  • world — Citadel (not Capital) naming + move/rename the energy site (9595db6)
  • lint — satisfy action-dispatch + extraction-wave-state CI gates (79c443d)
  • map — yellow filter over ALL tiles; drop the CITADEL label to the footprint (4d8c354)
  • map — weather fills ring 0 + ring 1 (contested merged into frontier) (e7e7bfd)
  • map — smaller rain streaks (WEATHER_REF_TILEW 40 -> 26) (dad37af)
  • map — yellow as a filter IN FRONT of the capital + fix giant rain (bec47a5)
  • map — raise citadel art half a tile (drop 2·tileH → 1.5·tileH) (9b90bca)
  • map — drop citadel art down 2 squares (visual only; footprint unchanged) (0995192)
  • map — citadel under weather, no shadow; grid below sites/citadel (5ef100f)
  • map — port the walkable-tile grid to Pixi + dim ring-0 overlay (dff9898)
  • map — drop ring-0 dark fog shroud + feather the Haven overlay edge (30d29b2)
  • hud — food deficit shows red 0, not a draining -82k (it never drains) (7e56010)
  • ui — player-info panel overflowed the modal — fit content to the box (0f746bc)
  • map — use server-resolved squad_name for the optimistic deploy marker (7773b89)
  • map — extractmobile rides the full deploy trip, not just the last 15s (bfa82c3)
  • map — crawler relocation line is BLUE, extract-team march stays orange (20ade29)
  • map — port packing hourglass + extraction march direction to WebGL; mail badge top-right (3961ce1)
  • hud — show true food net (red minus), tint gain rates subtle green (cd47a2e)
  • hud — resource dividers sit in the gap, not under the numbers (b3134d6)
  • hud — resource detail popup rises from the bottom bar on the map (634b392)
  • map — render the persistent Deep-Wastes (ring 3) weather, not just player ring (d146a8a)
  • map — terrain frozen at old viewport after portrait->landscape rotation (89af0a7)
  • map — megatower + citadel were 2x / 1.4x too big — match canvas sizes (2703967)
  • map — restore extraction range ring look — short dashes + edge glow (a8d3e4f)
  • map — sunken arcology rendered too big — use top-crop, not squashed sprite (7613209)
  • ui — player-info action bar clipped the 5th button (CLOSE) (9cda2c8)
  • map — port the above-crawler "lasagna" ghost re-draw to the WebGL map (e8b4f0a)
  • map — size extraction type-line to match the site name (10px, was 9px) (8b9428a)
  • map — show FPS overlay on the WebGL map (was hidden behind opaque canvas) (9834a39)
  • map — resize the WebGL map canvas on window/fullscreen resize (3dde884)
  • map — supersample labels instead of roundPixels — crisp AND smooth on pan (6cf1943)
  • map — roundPixels on labels — crisp text + true-bright red, matching canvas (2d96df9)
  • map — render label text at renderer resolution (1:1) — canvas-faithful weight (b1ca7ca)
  • map — thinner font-proportional label outline (no shadow) — readable small text (bad560a)
  • map — clip weather to player zone (off ring 2) + supersampled readable text (01a90db)
  • map — exact label colors — YOU state color, Citadel #ffd700, power #666 (dff6c5c)
  • map — faithful label styling — DPR-crisp text, exact colors/alpha, real fonts (2365861)
  • map — sunken arcology spawn now visible (megatower crown + hazard zone + label) (7f2f34d)
  • map — restore missing entity parity — area names, site titles, arcology, colors, fog (a855902)
  • map — fog as a screen-pinned MESH, not a filter — ends the drift for good (3d13f5c)
  • map — extraction range ring — even dots instead of a few big arcs (bfeb679)
  • map — terrain as viewport mesh — fog/edge now track the ground (24da227)
  • map — terrain far-zoom — draw full texture scaled+positioned (no frame mutation) (b4e974c)
  • map — terrain far-zoom breakage — set sprite scale, not width (87e32f7)
  • map — supply explicit vertex to fog Filter (Pixi v8 ensurePrecision) (0b274d7)
  • map — Pixi terrain off-center camera bug — use stable source width (f38f1d3)
  • map — bundle Pixi with unsafe-eval polyfills (CSP) + live harness (47df436)
  • zealy — enforce claim ownership — reward claims resolve only via the claimant's own link (99b33b8)
  • world — surface quest-guidance T2 site to its quest holder (8cdf6c8)
  • ui — pin menu CTAs on small landscape via .mpane scroll/footer primitive (18b7e3c)
  • anomaly-scan — count only active raid statuses in double_deployed_commander (32e0adc)
  • socket — pair emits with mutations across audited routes + verify-mutation-emit lint (9c9a3de)
  • delivery — emit on claim so the loot-crate icon clears instantly (a94ac03)
  • deps — declare stripe in package.json (was lock-only → npm install couldn't boot) (87f39a4)
  • extraction — preserve wave power across the /extraction/active poll (b01e3be)
  • restore old tutorial as default (UI must be identical to old version) (e34baf9)
  • map — undo the Pixi autoDensity viewport fix from #338 (low-quality map) (816cdf1)

Performance

  • map — player-name labels from a shared glyph atlas + per-frame allocation sweep (#348) (9b3f003)
  • map — strip native-terrain Sprite masks on mobile; revert the DPR cap (10074a1)
  • map — cap Pixi backing density to 1 on phones (5-FPS mobile fix) (a30bf1e)

Internal

  • tutorial — design system wave A — the SCRIPT splits from the ENGINE (7395d4c)
  • shop — config-derived lint - every pack must pass the ceremony bar (5cef53f)
  • qa — extend the CI-flake retry to every socket/render wait in CLIENT (900f086)
  • qa — contain the Pixi/CI GPU-stall flake with a scoped retry-once (57ba155)
  • qa — size the overlay wait against the measured CI stall, not a guess (f905077)
  • qa — instrument the CLIENT cycle-pause section instead of guessing again (c6b5d65)
  • qa — CI-tolerant budgets across the CLIENT Playwright section (1ffd878)
  • qa — gate CLIENT wave asserts on page-socket readiness (CI un-masking) (e80ecac)
  • ci — fix the two deterministic baseline failures blocking CI (476f390)
  • echo7 — update member_count lint to the recompute-from-rows idiom (8db6c8a)
  • repair 13 rotted verify scripts + extend combat coverage (7e19b85)
  • alliance — assert per-pair lock keys on both helper AND requester (Codex review d) (d6faa18)
  • pvp — defended-crawler-raid E2E (defender fields its commander squad) (76ad86e)
  • prod-targeted release AAB built + verified (upload-ready) (a441c1a)
  • mark Google Play screenshots done in store-listing reference (2b1f17f)
  • test — record the accepted CI-flake decision (stop containment here) (b023573)
  • Phase 3 store-listing + compliance reference (listing copy, IARC, Data Safety, App Privacy) (6c84bdb)
  • privacy — disclose Apple Sign-In + RevenueCat/store-billing IAP processing (7e97b33)
  • tutorial — Stand drive primitives, analysis status, coverage-log entry (f766b5a)
  • Wave 5 fix-pass outcome — 15/15 findings resolved, verified, device re-confirmed (e21837d)
  • tutorial — player-pace drive study + RoK comparison (ashen-tutorial-analysis.md) (bed5532)
  • DONE-gate result — on-device smoke passed (Pixel 3a) (2d554b8)
  • app-store execution plan (wave orchestration) (1529591)
  • tutorial — retention redesign plan — serialized attention, commander choice, free pack (aa8e3ae)
  • tutorial — live-verified Rise of Kingdoms tutorial study + retention analysis (c852911)
  • tutorial — playbook notes for verifying the tutorial on the default Pixi renderer (70c80ba)
  • re-score — all 9 gates satisfied (continuous run confirms changed flow clean) (13f7012)
  • tutorial grading scorecard (6/9 hard gates verified + committed) (2271ce7)
  • tutorial client-side sandbox plan (Rev 2, post Codex review) (fd511be)
  • record cutover revert (old tutorial UI restored as default) (b934e77)
  • record Phase 2 cutover executed + Codex-reviewed (c1a3f9f)
  • Phase 1 done + Phase 2 importer audit (corrects deletion scope) (19d6f65)
  • tutorial client-only refactor plan (Rev 2, post Codex review) (1fc7473)
  • fix stale CLAUDE.md references and generalize model-specific guidance (be55716)
  • codify "every timer is boostable" + "we sell time and power" (3b337cd)
  • economy & progression analysis (Zeninn model account + top-tier cohort) (84bb9e8)
  • store — Fastlane submission automation + iOS platform dep (53bf632)
  • remove dead code (unused locals, constants, config keys, exports) (51731fc)
  • map — refresh citadel art (new tile_citadel, 1344×1052) (8743b47)
  • android — release signing config + release-build guide (c542fb8)
  • map — remove the zoomed-in FRONTIER + THE ASHLANDS zone labels (00568df)
  • map — hover glow is a grid-aligned iso cube, not a flat square (0f2a74f)
  • map — hover entity glow is a rectangular column, not an ellipse (4392213)
  • hud — food deficit rate "+0"; reposition "stays 0" note left + green (3e27c1d)
  • map — dormant sunken arcology — faded diagonal stripes, no border, no name (a2e26a5)
  • hud — divider on the right of the rations pill too (44c9c1f)
  • hud — more space + visibility for resource-bar dividers (b5e409e)
  • hud — subtle vertical dividers between resource pills (6ce176d)
  • hud — compact resource bar — drop "/h", tighten gaps, slide left (9f34ce0)
  • hud — move Replays badge to top-right in the expanded menu (like Task Log) (aedabc4)

Other

  • assets: 4 Google Play store screenshots (world map, barracks, commander, events) (1383dcd)
  • docs+assets: Play Store feature graphic + corrected odds-disclosure UX note (86a1f32)
  • docs+lint(tutorial): redesign shipped — plan status, drive primitives, index-pin update (00207bd)
  • wip(app-store): Track A crypto-strip + plan docs + store-assets (pre-rebase snapshot) (3ddb407)
  • docs+landing: align positioning to canonical 4X + ownership thesis (4990671)
  • hotfix(map): restore _ls0 def — Pixi map regressed to canvas-2D after merge (#343) (1d6a142)
  • tune(map): raise Citadel label block 2 more lines (45efc42)
  • tune(map): raise THE CITADEL ~1.5 lines, alliance lines flush as line 2/3 (c79176a)
  • tune(map): narrow haul bars 10%, raise + tighten the Citadel label block (1150155)
  • tune(map): black outline on site haul bar + fill matches label colour (21f0722)
  • tune(map): hold site/beacon/arcology icons a notch longer before far-zoom dots (f6bce3e)
  • tune(map): slow the normal cloud cover 3x (rings 0/1/3) (9ad9fa4)
  • tune(map): rain only in vision; bolder + faster CCW sandstorm swirl (e47ccf7)
  • tune(map): tame the Wastes acid rain + confine it to ring 2 only (a3e2180)
  • tune(map): drop the green companion line; tint the single grid line slightly green (f3382b9)
  • tune(map): add a mid-green 1px grid line 1px below the ivory one (5086716)
  • tune(map): move Hollowpoint Systems → 119,131 and The Birdsong Relay → 119,157 (4671c17)
  • art(map): refresh the Summon Beacon sprite again (d5b7eb0)
  • tune(map): single 1px grid line, near-white-brown color (5cbc6f0)
  • tune(map): blend a hint of brown into the grid blue + fade grid on zoom-out (97121bf)
  • art(map): refresh the Summon Beacon sprite again (20de8ca)
  • tune(map): nudge grid blue a bit whiter (0x55A6F0 -> 0x6EB3F2) (6aab9f6)
  • art(map): refresh the Summon Beacon sprite (bf46671)
  • tune(map): drop the main grid line to 85% opacity (30e261a)
  • tune(map): fake 1.5px grid with a crisp 1px line + faint offset 1px line (5b856e4)
  • art(map): refresh megatower sprite again (256×384, 2:3) (25b0913)
  • art(map): refresh the risen-arcology (megatower) sprite (4263469)
  • tune(map): thicker bluer grid + map-wide radar band (7cb9168)
  • tune(map): decouple wave interval from sweep speed — 14s apart, 20% faster cross (1f24061)
  • tune(map): revert 2px grid back to 1px, brighten the blue instead (a1cbb2a)
  • tune(map): 2px blue grid lines, 1px white wave, ~2x faster sweep (b1efaff)
  • tune(map): brighter blue grid, softer white sweep, slightly faster cadence (033d933)
  • tune(map): reduce the piss filter strength to 80% (WARM_FILTER_ALPHA 0.13 → 0.104) (392193c)
  • tune(map): much bigger + much slower clouds (c1799d9)
  • tune(map): make the cloud cover clearly visible (CLOUD_ALPHA 0.5 -> 0.8) (916eba0)
  • tune(map): bigger, slower drifting clouds (ff6526b)
  • balance(alliance): set per-pair help cap to 3 (data-calibrated) (e5a21a1)
  • harden(alliance): race-safe per-pair cap + index (Codex review) (1b08486)
fbb6751

Fixes

  • pvp — resolve crawler defense from the defending commander's live squad (0774202)
  • economy — scale extraction credit faucet to 0.3 (Lever 2) (bdcf574)

Internal

  • clarify basket claim-model + scope the formations-retirement follow-up (cf2bc3b)
11fe282

New & Changed

  • events — percentile leaderboard prizes (top 50% scaling to rank 1) (b0f2f7e)
  • extraction — show "+N% loot" boost chip for seed-band sites in the squad panel (4838a6d)
  • extraction — seed Wastes/Deep Wastes with accessible on-ramp sites (743ad91)

Fixes

  • extraction — wire on-ramp seed sites into the live boot path (c3da48c)
  • worldmap — stop off-map camera default rendering a grey screen (5181db3)
  • mobile — pause audio when the app is backgrounded (48b6481)
  • battle-consistency — stop false-flagging Field Medic (skill_proc) heals (9deb1ec)

Internal

  • server — sweep 10 dead internal helpers (codex-verified) (9547786)
  • server — remove 22 dead exports (codex-verified, zero callers) (625a023)
  • worldmap — delete retired SQLite-era world-init functions (dead post-cutover) (4d785bb)

Other

  • balance(arcology): cut Sunken Arcology leaderboard ash (500/200/100 -> 100/50/25) (ea963a5)
419fcd1

New & Changed

  • hospital — unified per-pool heal queue + one queue-level boost (192d7f9)

Fixes

  • hospital — boost control at top of queue + release healed rows on read (6c3308a)

Other

  • balance(hospital): cryostasis boost cost scales (3× hospital rate), no flat floor (54e5b65)
78c1d54

New & Changed

  • speedup — free-boost window = max(10% of total, 120s) + boost:free-ready socket (2faa34a)
  • alliance — confirm kick/demote + name the player in the action log (8c31819)
  • economy — deploy cost = 5% of training cost (T2/T3 split into credits) + Logistics research (0f1ec2e)
  • battle-report — list equipment bonuses in COMBAT BUFFS modal (d7689ae)
  • zealy — extend siege power-destroyed ladder to 300k/400k/500k (08db6f2)
  • megatower — Sunken Arcology cache opens an extraction-style loot reveal (4594c48)
  • economy — Lever 2 — pulls + skill-card craft cost credits (credit sinks) (118334f)

Fixes

  • siege — squad-lock derives from the live rotation stage (unlock orphaned-stage rows) (8378de4)
  • hospital — BOOST on a queued heal stack lowers its own timer, doesn't start it (1773eb9)
  • siege — unlock squad preset after a Citadel loss (filter terminal queue rows) (449c1cd)
  • socket — guard connectSocket against unloaded io global (6861eee)
  • replay — cap unit count at startCount + sync maxHP from resolver (5d8ee0b)
  • anomaly-scan — filter terminal siege rows from double_deployed_commander (0e713a0)
  • megatower — allow skill-swap while deployed; raise panel above chat (269d6c3)
  • shop — emit currency:update after golden_ashes grants/spends (393856d)
  • worldmap — one extraction march arrow, glued to a moving crawler (f7f9f4a)
  • hospital-screen undefined-array crash + CI gating fail-open (d25baa5)
  • megatower — harden advance + guard races, add markReturned arity lint (7d4cf19)

Internal

  • shop — add verify-currency-emit drift lint for golden_ashes routes (eccf22d)
  • megatower — rewrite run + ghost verify for the real-basket model (54fe70c)
6278d9f

New & Changed

  • arcology — real-basket Megatower + single crawler-arrival sound (0f57a41)

Fixes

  • extraction — close heat lost-update race (92bf372)
  • alliance — stop troop-help slider freezing at 1/1 (7011482)
  • landing — mobile-portrait hero polish + kill horizontal scroll (54fed8c)
  • client — guard the worldTiles render loop against null (not iterable) (b72c46e)
  • client — guard null socket in squad-rail + objectives-panel socket wiring (a46422e)
  • armory — restore skill-description text contrast under beige theme (75fa1b5)
  • tutorial — kill generator-step + hospital-boost panel jank (d2f72f4)

Internal

  • hospital — behavioral sequential-heal queue + boost verification (2feda71)
  • gate heavy jobs by changed paths + trigger to cut Actions minutes (add6015)
38b8ca9

New & Changed

  • tutorial — self-heal missing step entities on connect + stuck-player watchdog (4eef85d)
  • mail — player & officer mail — compose/reply/block UI + abuse limits (ad9d65a)

Fixes

  • tutorial — keep the panel off the highlighted modal button (bank-reveal DONE) (cd2d9e3)
  • tutorial — lock the camera on ALL on-map objective steps (not just beacon) (d1b6388)
4d7767a

Fixes

  • tutorial — reliably center the crawler on the beacon step + recenter helper (e6e716a)
  • extraction — enforce commander leadership cap on deploy (60de05c)
  • extraction — reset per-squad run-state on PvP site takeover (df038dc)
  • socket — pair emits with state mutations across socket audit findings (f9e11c4)
  • skill — promote — changelog branch-PR + scoped notes (drop broken bypass) (#165) (fd088e2)
  • lint — verify-deploy-paths false-positive on is_deployed clear (#167) (fff79e1)

Internal

  • pvp — land staging PvP E2E + leadership-bypass probe (4699ce3)
f9e903c

Fixes

  • tutorial — release orphaned commander on recover so the deploy step isn't stuck (#162) (f9e903c)
  • tutorial — frame the Summon Beacon step so the camera keeps the crawler in view (#161) (aca9d36)
  • tick — run orphaned-commander sweep on reliable cadence, not now%60 (#160) (13d3b2e)
  • whisper+lore — radial WHISPER retargets via dossier path; catalyst_cache lore (066c192)
9696a93

New & Changed

  • scripts — read-only prod data-integrity anomaly scanner (56ccb96)
  • arcology mailbox rewards, crate→haul extraction UI, region renames, social (239d580)

Fixes

  • concurrency — defer crawler-destroy hooks post-commit (replace tx-threading) (c98b9ef)
  • concurrency — crawler-destroy deadlock + hospital heal/loss races (a09c485)
  • alliance — clear orphaned siege state on disband (citadel_stage_progress + siege_lockouts) (b30ddc9)
  • extraction — deterministic squad-rail ordering (id ASC tiebreaker) (a62e4cc)
  • shop — gate /shop/purchase-ash off production (no-receipt ASH-mint STUB) (d984556)
  • concurrency — claim-guard 3 Sweep-B idempotency double-grants (81e5bab)
  • concurrency — megatower ghost/guard duplicate-troop-grant claim-guards (e6f8dcf)
  • concurrency — atomic claim-guards on 5 high-sev double-process paths (d3179e2)
  • extraction — refresh the pending-haul chip when a squad returns (e42a4d6)
  • Ceaserkrizz prod bug report — loot-on-return, reconnect, injury recover (6917987)
  • auth — respawn despawned players on /auth/refresh (11d678c)
  • debug — force-despawn endpoint calls despawnPlayer directly (6ac91af)
  • alliance,despawn — gate inactivity prune + despawn on last_tick_at, not last_login_at (79d61f7)
  • crawler — atomic shield toggle + Wastes/Deep Wastes parity (c0a476d)
  • pvp — extraction-PvP dual-leader resolution gate + arrival alliance re-check (4fbe65f)
  • pvp — atomic claim-guards on raid + siege resolution/return/recall (862d72c)
  • extraction — one PvP attack = one battle (idempotent queue by raidId) (3edfa45)

Internal

  • equipment-system — finalize mails Arcology caches (claim-from-mailbox), not direct grant (909632f)
7186124

New & Changed

  • analytics — /analytics/abuse — sock-puppet / IP-farming discovery (81a4257)
  • map+extraction+defender — scooter range, summon beacon, ring-3 vision, 4h site relocation, defender event UI (e3c588b)

Fixes

  • extraction — unique delivery id per run — stop dropping repeat-deplete chests (9784d68)
  • social-rewards — grant per-platform ASH, remove YouTube (66e60c3)
  • tutorial+extraction — airtight tutorial flow, all-tier cycle regen, ECHO-7 fix (5f37046)
  • server — command_center level reverts to Lv1 while upgrading (a6fb2fe)
  • server — building benefits revert to fallback while upgrading (bundle) (ff1a28f)
  • server — building capacity/cap reverts to fallback while upgrading (deac06e)
  • server — training cap collapsed to Lv1 while barracks upgrading (68bc928)

Internal

  • server — getBuildingLevel helper + lint the is_upgrading=0 read class (04f56b6)
  • slim reviewers to cite CLAUDE.md + wire /pre-pr to invoke them (17de394)
  • extraction — enforce banked-implies-delivery invariant (static + behavioral) (68264b3)
  • carry-cap — re-baseline loot-content assertions to the DROP_TABLE model (3a4c40d)
  • carry-cap — re-pin stale T2 yield expectation to 16k (e094243)
  • scripts — migrate guest-auth + carry-cap verify off sync SQLite API (e3f9ff8)
  • social-rewards — rewrite verify script for Postgres (c0893a9)
  • add Claude Code setup guide + share read-only permission allowlist (d9fe473)
  • add db-tx reviewer, push guard, verify-on-edit, /promote + /pre-pr (75e1931)
  • share Claude Code config — syntax-check hook, code reviewers, MCP servers (1cb8218)
ee1f382

New & Changed

  • telemetry — director tools — churn autopsies, deploy markers, rage-quit detector, prod backfill (#108) (04cf4b2)

Fixes

  • zealy — Zealy Connect callback must be a top-level navigation (93f19af)

Internal

  • zealy — end-to-end Zealy Connect handshake verify + connect-flow docs (f526325)
  • zealy — record prod ZEALY_CONNECT_DEFAULT_RETURN_URL override and why (1e0c195)
5c97c12

New & Changed

  • telemetry — Phase 5 — anomaly digest + combat-balance watcher loop scripts (13850e6)
  • telemetry — Phase 4 — decommission Metabase, add coverage-gated retention prune (a948aa8)
  • telemetry — Phase 3 — combat/economy instrumentation + funnel/combat/economy dashboards (f02969f)
  • telemetry — Phase 2 — first-party /admin/analytics dashboard (Alpha Health + Errors) (87d49dd)
  • telemetry — Phase 1 foundations — hardened ingest, error capture, metric rollups (39e0f58)

Fixes

  • ui — extract deploy modal shows server-authoritative squad counts (cf2b2b4)
  • client — suppress phantom Reconnected chat message on non-reconnect resyncs (46e888f)
  • ui — upgrade costs in blocked state, deploy modal preset cutoff + cost, chat docked-preview fixes (84d4034)
  • pg — cast aggregates feeding typed consumers; repair 3 endpoints dead since PG cutover (e344c46)

Internal

  • pvp — fix pvp-test.js for commander-required raids + shield-drop cooldown (88c9d17)
  • telemetry — user guide for Telemetry v2 (502f4f2)
  • zealy — sprint went live — USDC auto-distribution, $45 1st place (ed254c1)
55af09e

New & Changed

  • zealy — power-milestone sprint endpoint + commander power recalibration (a46eb1d)
  • client — juice kit — milestone celebrations, choice cards, Obtain routing (Phase A4) (fbda257)
  • client — Awakening presentation — HUD reveal, claim glow, Ada keywords (Phase A3) (a8a33ff)
  • client — mood-lighting tint + vignette on world map (Phase A2) (0b63523)
  • client — motion tokens + screen-enter transitions + canvas veil (Phase A1) (afd883a)
  • client — dispatch migration — remaining screens and panels (0cb28ad)
  • client — dispatch migration — world map (27 actions) (6eabc14)
  • client — dispatch migration — shop, market, workshop (17 money paths) (fefa060)
  • client — global same-frame press ack on every button click (ad91168)
  • client — dispatch migration — army + megatower screens (20 actions) (2723da8)
  • client — dispatch migration — alliance screen (27 actions) (fd72d18)
  • client — dispatch migration — auth, barracks, tutorial, chat, tips (fragile set) (dcc9dee)
  • client — action dispatcher — same-frame ack, single-flight, timeout, kill switch (6f00168)
  • encyclopedia+extraction — Encyclopedia menu, site-specific gear, HUD polish (8cf03ca)
  • worldmap — redesign tile-info tooltips — extraction + generic + shared header (89d12a4)
  • barracks/siege — true-basket parity + perf + UX session (9c26031)
  • map — Deep Wastes gets the safe-ring chill weather + soft fog fade at the boundary (aaf7a6e)
  • map — expand Wastes ring +10% (95->104.5), shrinking Deep Wastes (f88c567)
  • map — Deep Wastes ring is fog-free + visible PvP (high-risk outer zone) (20a6ca8)
  • barracks — live-update on heal via server refetch; drop optimistic slot surgery (200be1b)
  • barracks — allow assigning hospitalized units to a slot (+ orange warning) (83362d3)
  • deploy — restore preset selector (1/2/3) in extract send modal (e5ce032)
  • menus — facility topbar title shows current level (BARRACKS · Lv 5) (be9ab71)
  • security — server-side per-commander squad store + retag clamp (790ef3f)
  • reserves — regen high-water display with 490/500 + regen-plus (9e5c1de)
  • barracks — squad-priority replacement from Reserves on return (13f9a1f)
  • barracks — live squad updates while commander is deployed (19faba6)

Fixes

  • extraction+test — root-cause qa-test wave flake; harden tick loops against silent starvation (fa17374)
  • client — paint screens before fetching — no more black-screen hang on slow loads (6238415)
  • client — boost rows say NEED n when unaffordable, not a mute grey-out (850a5b7)
  • client — boost modals — stale-fetch guard for rapid multi-spend (8da04aa)
  • client — boost modals — live timers + visible catalyst-spend reaction (b8aa201)
  • client — remove alliance screen-wide _busy double-gate (review finding 11) (6292593)
  • client — single celebration pipeline + offline catch-up ledger (Phase A follow-up) (0dc0286)
  • client — wallet flows un-deadlined, AMM confirm disable moved inside dispatch (findings 9, 12a) (51b7a4b)
  • client — event-decide cross-surface key + bounded force-deploy retries (findings 5, 8) (12d2a37)
  • client — de-wrap last-write-wins toggles/saves wrongly single-flighted (review finding 6) (9846c96)
  • client — dispatcher core hardening from PR-94 review (findings 1-4, 7, 9, 12b, 14, 15) (a926ad6)
  • client — mail force-delete flag never reached the server (1e43448)
  • client — drop _doMove rethrow — double-toasted via dispatcher catch (7c0e230)
  • lint — direct-post marker must sit on the line directly above the call (9dcb984)
  • client — bank-reveal double-open race + dispatcher migration for haul flow (6257482)
  • encyclopedia — drop the loot-table descriptor line (6cd89e3)
  • ci+sweep — clear 3 CI lints + 3 dormant bugs surfaced by general check (2514980)
  • release wave-pause on the resolveWave exhaust early-return (4070e58)
  • clear orphaned extraction cycle-pause refcount on boot (a648fb7)
  • resource realize preserves concurrent spends (lost-update dupe) (98b88b6)
  • guard build-upgrade and research deducts against concurrent races (b230a6a)
  • cryo instant-revive tech-core cost now scales with stack size (ee1b8a5)
  • use PG jsonb extraction in analytics queries (was SQLite json_extract) (0bb9ffa)
  • keep siege point contested during an active battle (overtime hold) (4f84163)
  • serialize beacon-summon gacha to stop free-pull duplication (6969681)
  • cap duplicate building placement (unlimited-free-building exploit) (253421a)
  • close free-speedup exploit and megatower exit troop duplication (9fa89f8)
  • barracks/ui — client cache mirror on cmd-tagged heal + beacon SUMMON confirm (be00926)
  • hospital — pause cmd-tagged heal timers while commander is deployed (11d9a47)
  • events — no defender 'field decision' events when the crawler-defender basket is empty (3b744e0)
  • map — Deep Wastes is ALWAYS fog-free for everyone, not just when standing in it (44dcfba)
  • barracks — refetch reserves pool from server after a sick-move, not optimistic math (9684c4c)
  • siege — tag siege losses to the commander so they heal to the basket, not reserves (46fb9fa)
  • arcology — seed initial preview from the active commander's server basket (3ee0c5e)
  • hospital — distribute heal-back across slots; add troop-conservation regression test (9887c7c)
  • barracks — use server-derived wound gap verbatim, stop resurrecting stale localStorage requested (546a759)
  • barracks — stop full re-render every second from stale injury/training timers (17d38cc)
  • hospital — derive slot wound gap from real recovering rows — kill phantom wounds (0f2e654)
  • barracks — Reserves tile counts only NULL-tagged wounded, not commander-tagged (no double-count) (769b3c3)
  • megatower — clamp formation to survivors on floor advance instead of blocking ENGAGE (9fb2ae1)
  • barracks — only offer FREE reserves-bound sick to a slot, not other commanders' committed wounded (40a31fc)
  • barracks — make scale-to-fit robust against measurement race (offscreen clip) (e1b45ad)
  • barracks — slot editor sets ASSIGNED, derives healthy — wounded survive manual edits (ea2fabe)
  • troops — make server authoritative for squad live counts; Barracks reconciles on entry (c288b2d)
  • troops — preserve wounded indicator across edits, Megatower exit, and server sync (d26ab44)
  • megatower — clamp squad to bank-available, render 'live/requested' on under-supply (b26797a)
  • megatower — wire arcology to per-commander Barracks baskets (0ccfff5)
  • megatower — unified ecosystem — deduct only commanders squads, tag losses (5ce5ac4)
  • megatower — load formation from active commander's Barracks preset (081ec8f)
  • barracks — Reserves regen pool counts ALL pending hospital, not just NULL-tagged (c13374c)
  • dev — cache images for 60s in dev so wallpaper preloads actually stick (8e1ae46)
  • menu — preload home wallpaper via <link rel=preload> in HTML head (9202ea7)
  • menu — preload home full-bleed wallpaper (crawler_desert.png) + cipher tablet (1bbe2e5)
  • menu — preload hot wallpapers at app boot — no more cold-cache flicker (1a10d85)
  • menu — preload wallpaper before showing to prevent open-flicker (7b0af55)
  • tasks — remove hauls from Tasks panel — chest button surfaces them (84e0485)
  • barracks — Barracks edits move in-flight wounded to Reserves regen (28735dc)
  • hospital — cache bust on every state change + defensive INSERTs + logging (e4c726b)
  • barracks — _onWoundedHealedToSlot guarantees the slot bump lands (d83742d)
  • barracks — server-verified swap delta + bulk sync on entry (526d1fc)
  • return — client computes swap-with-Reserves using accurate squad data (b9a011a)
  • reserves — clear is_deployed BEFORE return_arrived emit (kept survivors out of Reserves) (6d0043d)
  • barracks — suppress regen during deploy + don't double-render wounded on Reserves (3905204)
  • return — snapshot bank pre-survivor + log swap calc end-to-end (e2c11e7)
  • reserves — pick up regen pool on Barracks enter + bust /army cache on return (432ceba)
  • barracks — subtract every commander's preset from Reserves, incl. benched (01eb41c)
  • barracks — authoritative squad rebuild from server payload + diag logs (eeac620)
  • barracks — keep dead slots visible as 0/N in deployed greyed-out grid (5381f88)
  • barracks — preserve requested high-water mark so wounded slash displays (434311b)
  • barracks — reconcile commander squad with survivors on return (e20c1a8)
  • barracks — unify clamp alert format + prefix commander name (98ac181)
  • barracks/preset — partial clamps also fire alert toast (cf89ae7)
  • barracks/preset — phantom slot keeps icon during flash + stacking alert toasts (55fcd1e)
  • barracks/preset — impossible clamp persists blueprint loss + visual stays at "500" (2bfcbb8)
  • barracks — training:complete socket re-renders commandScreen + stops tick (5dcc5f8)
  • workshop — inventory action buttons (CRAFT/PROMOTE/UPGRADE/RECYCLE) theme-aware (1cd0b9f)
  • workshop — army names + dark-mode prompt text + label copy (2d6c4a7)
  • barracks — training timer stuck when training starts mid-session (20d499f)
  • barracks — restore preset-switch bank-clamp + red flash (20976f1)
  • barracks — auto-load active preset on entry — match doc (8f6413e)
  • barracks — preset = squad's actual count, deploy greys instead of clamps (d8d9532)
  • barracks/picker — count editor opens at default size, not picker's full-screen (2835a6e)
  • preset loadPreset preserves requested + home-tile training timer + barracks tick (2ff14e4)
  • preset units vanish on deploy + chat bg width + chat input on SYS (42109aa)
  • chat — bg covers input on mid-size viewports, lighter inactive tabs, minus only on active tab (244632a)

Internal

  • client — code-review fixes — isCanvas hoist, token-derived re-measure, shared resource labels (6166d6c)
  • lint — sanitize strings/comments/regex + multiline dispatch detection (finding 13) (359363a)
  • lint — verify-action-dispatch — mutating api calls must route through dispatcher (2f71973)
  • Phase A criteria trued up to implementation (mood states, single-PR batching) (ab1be27)
  • Phase A motion-pass goal + success criteria (82ae857)
  • FGF Phase 1 competitor analysis — visual/UX technique catalog (eaaebdd)
  • test-coverage-log entry for action-dispatcher migration + verification (be8ddc3)
  • action-dispatcher convention in CLAUDE.md code conventions (3d17e72)
  • Phase 1 brief for FGF competitor analysis (session transfer) (1a76260)
  • record deferred-caveat resolutions (resource dupe, cycle-pause, refute) (b87353d)
  • log 2026-06-09 codebase-wide bug sweep (8 fixes + 2 open leads) (605c0d8)
  • slot editor sets ASSIGNED / derives healthy; wounded survive manual edits (40b85a9)
  • SUPREME RULE — one shared troop ecosystem (Reserves + squads + hospital) (cf766d2)
  • barracks — user's plain-language model + impossible-fulfillment is permanent (5f27a5d)
  • barracks — clarify — permanent loss just lowers the total (f991571)
  • barracks + commander presets — model, display rules, deploy lockout (1c5780c)
  • gitignore local agent-playtest scratch dir (raw dumps + JWT) (bd0b949)
  • gitignore local redis dump.rdb test artifact (551b419)
  • clean up stale references + dead code after recent reworks (f92ba04)
  • assets — re-encode crawler_desert PNG → JPG (2.27 MB → 213 KB) (17de2c7)
4aaf5e0

New & Changed

  • PvP-audit fixes + known-gaps closure (#60) (0971629)
  • tutorial onboarding overhaul + post-tutorial NPX polish (#56) (6119305)
  • infra — pool-stats emitter + generalize tx-propagation lint (#53) (7645f41)
  • infra — idle-tx watchdog + Phase 0 PG migration + accumulated staging work (#47) (511dbcb)
  • base/tablet — icon-top + LV-under + centered labels, button size unchanged (f199623)
  • theme — default to dark mode, keep toggle for light (1333da5)
  • vault — audit trail + operator restore for real-money export/import (#43) (2dbd092)
  • vault redesign (hero state + card grid + chip + import demote) + economy tune (#42) (9391494)
  • add commander NFT card art (8bdaf04)
  • polish commander mint landing flow (517a7dd)
  • add landing commander mint page (8fee0a9)
  • add Zealy commander NFT campaign flow (c5c0192)
  • commander equipment economy + squad modal polish (#41) (f65ae80)
  • events — Sunken Arcology lore frame + LOCATE button + rename (cc0a2f7)
  • map — haul-chest button — pending banked-haul indicator (map-only) (dec1078)
  • base — WELCOME EVENT button deep-links to welcome entry in events menu (3fdbccc)
  • events — list menu — sidebar + detail (welcome event placeholder) (1a1a0a4)
  • extraction — reveal pipeline polish + battle pause UX + foreign-tile hardening (#40) (8ee2553)
  • extraction — defer resource credit from bank → /claim (unified box reveal) (995c70d)
  • extraction — event-interrupt popup over reveal + lift first-cycle gate (915f260)
  • extraction — chaos-team-hardened extraction loop (64698f4)
  • base — enable 50/50 Cipher 1/2 roll on every home-screen entry (39f3f03)
  • base/cipher-1 — extraction banner now shows on mobile too (f60451f)
  • base/cipher-2 — extraction banner now shows on mobile too (aab2bb6)
  • base/banners — split per-cipher banner placement, lock Cipher 2 (a778495)
  • base/pc — +20% sand cluster size and count (955c855)
  • base/cipher-2/pc — pin menu anchor to phone-equivalent on PC (1c364b1)
  • base/cipher-2 — -10deg CCW menu rotation + right-side perspective tilt (baa544c)
  • base — 50/50 Cipher 1 / Cipher 2 variant system on home entry (5c4defc)
  • base — PC home screen mirrors phone layout via transform scale (b3a60c0)
  • map — HOME button (was CRAWLER) with proper dark chrome (8cda610)
  • chat — docked = same element as opened, cropped to 2 lines (b526839)
  • chat — unify docked + opened at 15.2 px (+10% on opened) (c95e1dd)
  • chat — docked -30%, opened +20%, opened +10% wider (df20048)
  • chat — extend opened-chat bg to bottom, shrink docked, unify SEND (93b18b4)
  • base — lock approved mobile tablet-menu geometry (d88a601)
  • base — wind sand clusters + pointer-drag tablet scroll + chat clearance (246cd35)
  • base — add soft sandy wind drift overlay (31de021)
  • crawler screen UI overhaul with cipher tablet menu (1468816)
  • extract+attack unified modal, cross-cmd troop allocation, clamp cue, more (8d6dc49)
  • mobile polish — Barracks scaling + map HUD + chat (f48711a)
  • Barracks UI polish — picker, train modal, drag-drop, layout (44a90ea)
  • bundle cold-load client assets (f074ab4)
  • audio — replace extraction reveal synth with RPG Interface Essentials assets (d7e8163)
  • extraction — cycle-pause primitive + event-as-badge UX + reveal polish (ab8faca)
  • bank-reveal — legendary near-miss fade (77e7d60)
  • reveal — cycle flight + haul ticker + landing pulse (e7d96cd)
  • reveal — particles, per-crate shimmer, haul rarity polish (ddee061)
  • reveal — soak-phase escalation — panel wash, screen overlay, LEGENDARY banner (2ac62ed)
  • reveal — phase-fraction pacing + real loot icons (match prototype) (de0e8f3)
  • reveal — squad-modal extracting layout — wide LEFT reveal column (c486caf)
  • debug — TEST ACCOUNT button + /api/debug/skip-tutorial endpoint (0b6e50f)
  • extraction — reveal audio + boot-time recall sweep (Phase 2e/f) (603d207)
  • extraction — value-only haul + cycle reveal area (Phase 2d) (5ca5032)
  • extraction — delivery boxes + bank reveal modal (Phase 2a/b/c) (777cc24)
  • extraction — per-cycle item registry + structured items[] emit (Phase 1) (ae71883)
  • add shard admission cap (dcfd880)
  • modernize chat baseline (09d9c2e)
  • add clean-start postgres cutover (2117658)
  • alliance — NPC starter alliance — Phase 2 (LLM persona) + Phase 3 (Citadel march) (b178fee)
  • add tick worker redis heartbeat (e29cf05)
  • map — animated packing-hourglass overlay above extraction sites (b28b413)
  • hud — scale top + bottom bars 20%, tighten chat alignment, fix wheel reopen on deploy (d9781dc)
  • add realistic scale readiness harness (edfec3d)
  • alliance — redesign Requests panel — single panel + tile-picker modal (cf6f937)
  • add redis replica readiness (da19ce5)
  • alliance — broadcast notable history events to chat + per-member contributions panel (e59243c)

Fixes

  • ui — cipher Firefox scaling, click swallowing, rate wrap + SIEGE PRESEASON (3412ffa)
  • separate shield-drop cooldown (30s) from squad-deploy prep (10s) (#59) (b4d452f)
  • security — pre-promote audit findings (#57) (4e6c051)
  • shutdown — arm force-exit timer first, halt tick loop between ops (#52) (e5e66f6)
  • chat/pc — bump message font 11→12 px (81bdae0)
  • chat/pc — drop viewport-scaled font on message rows (9a28b62)
  • shop — un-gate VAULT tab — remove "COMING SOON" + disabled state (098272a)
  • barracks — preserve original requested count on partial-clamp persist (053a981)
  • prefer versioned NFT commander art (cc7dba4)
  • polish vault export UI (09f6f9e)
  • restore commander vault export (bf2fb52)
  • remove in-game Zealy mint panel (6258cac)
  • harden campaign NFT burn import (1e9d1b4)
  • show and grant campaign import imprints (b545350)
  • stop megatower placeholder from bouncing to Welcome (e012921)
  • events — human-readable HOW TO SCORE for megatower + safer fallback (bf47fe4)
  • events — Sunken Arcology pinned in sidebar with inactive state (ee75514)
  • map/chest — socket-late-bind retry + 15s polling backstop (d077672)
  • chat — hoist hud-bottom z-index bump to global scope (PC + phone) (b57033d)
  • barracks — clear _returnTo in tutorial early-return path (af1d407)
  • chat — restore input+SEND on home + scope chat to base/worldMap (60425fc)
  • events — welcome placeholder no longer reverts after 1s (122b0bd)
  • barracks — DONE button honors _returnTo (restores extract→edit→back) (4b17d33)
  • chaos-test regressions + basket allocation filter (72cbe46)
  • polish base menus and preload assets (369814b)
  • extraction — bankHaul credits non-delivery delta (defender-event resources) (1d9de95)
  • extraction — sync event-interrupt overlay during same-scene patch (6355f6b)
  • extraction — Ignore closes overlay + Continue resumes reveal animation (4238a85)
  • extraction — defer haul celebration from bank → box-open + wire tasks refresh (79745ed)
  • extraction — Ignore button fires safe-default immediately (5b100c8)
  • chaos-team open-items polish pass (7e89774)
  • base — clean cipher body class in exit(); doc PC↔phone coupling (85f6f89)
  • base/cipher-2 — pin transform-origin so extended bottom keeps locked angle (527a366)
  • base/cipher-2 — extend menu bottom another 45px (34ca11b)
  • base/cipher-2 — extend menu bottom by 1 button height (PC + phone) (7645225)
  • base/pc — remove .base-fullbleed overflow:hidden on desktop (910c7dc)
  • base/pc — wallpaper full-viewport, hide bottom bar, fix chat-docked (51997c6)
  • map — HOME button flush to bottom-right corner, only top-left rounded (68984e2)
  • chat — shrink docked top-fade band 14 -> 6 px (28f887b)
  • chat — mask-fade top of docked chat to hide line slivers (bfc3162)
  • chat — persistent chat element across base + worldMap (3f74bf3)
  • chat — docked chat clickable + empty-state placeholder (d0a6850)
  • chat — minimize no longer wipes the docked preview (d450079)
  • chat — SEND grey to match placeholder + shorten input placeholder (17014a7)
  • chat — SEND button matches input height pixel-for-pixel (9e82dda)
  • unblock barracks tutorial flow (190a7a3)
  • enforce qa socket client coverage (82c8403)
  • scope back-button override to Barracks→Armory only (d42b35b)
  • server — allow dotfiles in / and /index.html sendFile (dac5b47)
  • harden cold-load dist serving (2449633)
  • cache static game assets (3a35c97)
  • prevent resource drift on speedup completions (af9b338)
  • debug — maxout grants 3 starter commanders, not 6 (22309b9)
  • reveal — review-pass — kill near-miss fade on skip, re-query haul on landing (f13d0e9)
  • reveal — pause-debt cycle bar, run-id abort, transient FX cleanup (129e242)
  • reveal — seed cycle bar + last-cycle crates on modal open (ba74e4e)
  • reveal — match cycle siteId against squad.id stripped of 'site:' prefix (56fc237)
  • hunter — await cancelDefenderPendingEvent inside try/catch (playbook §B) (14e134e)
  • post-cutover race-condition hardening (playbook §A) (ec081d9)
  • extraction — IIFE-wrap shared/itemRegistry.js (classic-script const collision broke client boot) (7d53bb3)
  • enforce realtime crawler visibility (452cd87)
  • narrow crawler presence fanout (120b61f)
  • bound tick burst work for load (a0525f4)
  • add postgres npc alliance drift columns (bed0fa0)
  • unblock alliance pr verification (3b272b3)
  • P0/P1 PR review — fulfillment contract, nested-tx, FK cleanup, encoding, verifier drift (df330d2)
  • type world map postgres filters (11bd56e)
  • repair postgres chat schema drift (5af5dfb)
  • keep player bases live in world cache (4de00c2)
  • alliance — invalidate research-bonus cache on level change (9e3f28f)
  • guard legacy market spends (effd08f)
  • persist sparse explored map features (c97abf0)
  • reduce scale read-path write pressure (371cf8e)
  • avoid load-test alliance tag collisions (fa8c566)
  • reduce crawler tick load for scale tests (f16ef32)
  • stabilize redis socket setup (9878853)

Performance

  • prepare single-shard 1k ccu path (bdfe21a)
  • batch training resource recompute (8ea671f)
  • batch tick training completion (3e32033)
  • make health checks db-free (d331e17)
  • batch resource safety buffs (7467639)
  • parallelize world map reads (b5d72d5)
  • cache auth player existence (3138726)
  • widen hot poll cache windows (50732d5)
  • align world tile cache with map polling (9df0c39)
  • cache shared world viewport tiles (d0a66c5)
  • cache serialized state responses (33d8479)
  • cache hot research bonus reads (1d202a0)
  • cache alliance help board lists (c187f85)
  • reuse world player alliance lookup (5206b30)
  • cadence gate moving vision invalidation (0195cf2)
  • jitter socket connect catchup (66448dd)
  • gate socket connection logs (fbfdec3)
  • cadence gate shield drain (61d33fb)
  • cache socket siege subscribe state (f8db0a7)
  • consolidate combat load reads (f8e9a00)
  • align state cache ttl with load cadence (f340a20)
  • compact extraction site read payloads (fb06e0e)
  • cache hot scale read payloads (4f165c4)
  • persist sparse event reveal memory (19dbb09)
  • throttle moving presence rechecks (0ba82f8)
  • avoid duplicate world player enrichment (dc424f9)
  • skip redundant frontier vision circles (def7de5)
  • bound resource safety bonuses (a6139fd)
  • consolidate scale state reads (ff25eab)
  • tune hot read cache windows (9a88fef)
  • cache stable hot read routes (c015055)
  • skip api response compression (1ab854b)
  • compact world reveal payloads (ec40baa)

Internal

  • collapse tx.mode === 'postgres' branches (Phase 3) (#50) (8e4c892)
  • drop SQLite, Postgres-only (Phase 2) + docker-compose fix (#48) (77ad817)
  • convert events manager to async db (8928b51)
  • convert megatower lifecycle to async db (d8c20ff)
  • convert dossier card manager to async db (15e22df)
  • convert mail and social rewards to async db (20142a9)
  • adapt async siege observer helpers (2a8f24e)
  • convert world map reads to async db (627dba5)
  • convert tutorial cleanup to async db (978a02b)
  • convert despawn ticks to async db (f3f5e5e)
  • adapt cloud and amm helpers to db adapter (561f581)
  • convert completion managers to async db (476ae93)
  • make tick helpers adapter-safe (d0011e1)
  • convert player deletion to async db (7025c6c)
  • convert alliance manager to async db (39132c8)
  • convert alliance help manager to async db (2f667ef)
  • convert alliance event logger reads (eb815b4)
  • convert debug routes to async db (a8e6c2d)
  • convert amm routes to async db (bc58b12)
  • convert tutorial route actions to async db (50a4996)
  • convert speedup routes to async db (bc64970)
  • convert commander routes to async db (cd19238)
  • convert extraction payload reads to async db (fda1c17)
  • convert raid routes to async db (bc9d3ab)
  • convert siege routes to async db (9579c53)
  • convert alliance route reads to async db (d9f4454)
  • convert small event routes to async db (a046e6d)
  • convert world route queries to async db (a8f51e5)
  • convert analytics routes to async db (69b2a47)
  • convert portal routes to async db (0f9aea6)
  • convert shop routes to async db (49c759d)
  • convert economy routes to async db (0c31162)
  • convert troop routes to async db (fac34cf)
  • convert chat manager to async db (544ff8e)
  • convert state payload reads to async db (41d928d)
  • make resource projection async (67e2bc9)
  • convert auth and quest paths to async db (379af9d)
  • add async db helpers for base routes (e0b9125)
  • port all 18 KNOWN_FAILING verify scripts + 4 real prod bug fixes (#54) (66692fd)
  • port 10 verify scripts from better-sqlite3 to pg.Client (#49) (c96454f)
  • qa — event UX moved from header badge → reveal-area popup overlay (7ed5646)
  • qa — address review findings on the SOCKETS + CLIENT sections (3147517)
  • qa — add SOCKETS + CLIENT regression coverage to qa-test (ad327d0)
  • stabilize world map qa under fog (ba8a926)
  • gate load health on server metrics (da05573)
  • isolate load setup metrics (c94511a)
  • instrument postgres query latency (1af84ff)
  • gate realistic load harness (6c31cd1)
  • add postgres post-cutover gate (2718c31)
  • stabilize staging postgres smoke (abbead5)
  • match client token refresh in load harness (954e997)
  • refresh load harness tokens before gameplay (2f0d5e3)
  • make load harness map camera sticky (6b60156)
  • add no-socket load diagnostic (6980771)
  • bound load harness request hangs (5fad066)
  • avoid setup player fanout (e52b988)
  • isolate load health probes (4143229)
  • add scale event-loop diagnostics (5f8dd3e)
  • clear explored tiles in load cohort reset (ed4273a)
  • add staging load cohort reset (4c3ec92)
  • stagger realistic load harness starts (086af58)
  • add staging redis smoke (a9f08c0)
  • fix stale refs after PR #53 lint rename + SQLite removal (#55) (489abec)
  • GOD SAVE CHECKPOINT — lock mobile crawler screen at d88a601 (6479c0e)
  • add staging qa load evidence (6364dc0)
  • record postgres load blocker (7fedf9a)
  • wrap 1k ccu readiness evidence (71f12d9)
  • record market guard staging verification (693918c)
  • record staging heartbeat verification (67bbb69)
  • note staging heartbeat deploy blocker (13e0a1b)
  • fix 1k report branch baseline (c703639)
  • record 750 socket ladder stop (f872464)
  • add 1k ccu readiness wrap report (725f294)
  • record world viewport cache 750-client result (6bf7e34)
  • refresh latest staging scale evidence (2767334)
  • record serialized state cache 750-client result (b9a8ace)
  • record http-only 750-client result (ec61272)
  • record research cache 750-client result (a323cc7)
  • record help board cache 750-client result (e8bf9f2)
  • record moving vision 750-client result (c2d5f82)
  • record 750 socket load result (58fcedf)
  • record socket cache 750-client result (353c244)
  • clarify tested scale commit (eb358b6)
  • record compact payload 750-client result (7229de7)
  • record hot-read cache 750-client result (6e3f2ad)
  • record sparse reveal 750-client result (801b0f4)
  • record 750-client scale blocker (474a994)
  • record 500-client staging pass (f89253f)
  • record isolated health load blocker (c8d25b4)
  • record consolidated state load evidence (9af0dfe)
  • record route cache load evidence (2202169)
  • record 500 ccu staging blocker (48e98fc)
  • alliance social cooperation audit + improvement plan (943baa6)
  • drop stale SQLite references after Postgres-only cutover (#62) (4aaf5e0)
  • compress audio assets (e65ca96)
  • remove dead founder pack join hook (2658e23)
  • remove redundant debug route requires (c940e33)
  • remove dead amm statements (4319ba4)
  • wire postgres runtime selector (c9de3ba)
  • add postgres bootstrap gates (2dbfcae)

Other

  • docs+refactor: PG-only docs cleanup + verify-script renames (Phase 4+5) (#51) (7f2b28a)
  • tune(menu-fx): walk back static + scanline cut from −30% to −10% (1af0f2b)
  • tune(menu-fx): −30% static + scanline, kill wallpaper flicker (a2b57e7)
  • wip: siv-version UI session work + merge staging (5e1e7a0)
  • tune(events/mobile): side-by-side lore frame, smaller image, locate in view (54488bb)
  • tweak(events): one-sentence HOW TO SCORE for Sunken Arcology (14a635a)
  • tweak(events): red SUBMERGED badge + 'Currently submerged' label (4300c79)
  • tune(map/mobile): haul-chest button -12% size on phone (55 -> 48) (b22f57b)
  • tune(map): haul-chest button +25% size (44 -> 55 px) (2b14f91)
  • art: darker orange menu icons + white per-hour resource rates (141323a)
  • art(base/menu): tablet menu icons → glowing orange (all 4 ciphers) (c1c4ee8)
  • tune(base/cipher-1/pc): shift banner -12px up, -6px left (ef6b8cc)
  • tune(base/cipher-1/pc): rotate banner -4deg CCW, shift -5px up (b063000)
  • tune(base/cipher-1/pc): rotate banner +15deg CW, shift +50px right (569ddbe)
  • tune(base/cipher-1/pc): rotate banner +10deg CW, shift -20px up (f66a674)
  • tune(base/cipher-1/pc): shift banner +60px down, +15px right (c646776)
  • tune(base/cipher-1/pc): shift banner -60px left, rotate -12deg (0fd87f0)
  • art(base): sync cipher PNGs, extend extraction banners to Cipher 1 (f8d7a1f)
  • art(base): sync updated cipher tablet PNGs from main repo (96c2c3c)
  • tune(base/pc): sand cluster scale 1.2 -> 1.1 (PC-only) (b298a37)
  • tune(base/cipher-2/pc): shift extraction banners 5px right (c2f5c40)
  • tune(base/cipher-2/pc): shift extraction banners another 34px left (a108c1b)
  • tune(base/cipher-2/pc): shift extraction banners -30px left, +3% size, tie to cipher (0f3e4b7)
  • art(base/cipher-2/pc): add extraction-tape banners overlay (6884ed5)
  • lock(base/cipher-2): mobile menu layout + crop top at viewport y=20px (488c285)
  • tune(base/cipher-2): +0.5deg clockwise menu rotation (5 -> 5.5) (b5ae1e7)
  • tune(base/cipher-2): reduce menu side-view angle (rotateY -36 -> -33) (6b7008c)
  • tune(base/cipher-2): nudge menu 1px left + 3px down (d899aa2)
  • tune(base/cipher-2): nudge menu 2px left + 5px down (8ea675e)
  • tune(base/cipher-2): nudge menu 4px left, 3px down, +2deg angle (c737438)
  • tune(base/cipher-2): bump menu side-view angle (rotateY -28 -> -34, perspective 550 -> 500) (6a26745)
  • tune(base/cipher-2): +3deg clockwise rotation on menu plane (2b3cf0d)
  • tune(base/cipher-2): stronger right-side perspective tilt on menu plane (5256a87)
  • art(base): swap back to Cipher 1; full Cipher 1/2 spec in comments (463f8ad)
  • art(base): shrink Cipher 2 (angled) ~7.5%, label both cipher options (bd8f0c8)
  • art(base): swap cipher tablet art to the angled variant (11b9b2f)
  • checkpoint: Barracks redesign — known-good Squads + Reserves layout (aa44f4b)
1b959cd

New & Changed

  • tutorial onboarding overhaul + post-tutorial NPX polish (#56) (6119305)
  • infra — pool-stats emitter + generalize tx-propagation lint (#53) (7645f41)
  • infra — idle-tx watchdog + Phase 0 PG migration + accumulated staging work (#47) (511dbcb)
  • base/tablet — icon-top + LV-under + centered labels, button size unchanged (f199623)
  • theme — default to dark mode, keep toggle for light (1333da5)
  • vault — audit trail + operator restore for real-money export/import (#43) (2dbd092)
  • vault redesign (hero state + card grid + chip + import demote) + economy tune (#42) (9391494)
  • add commander NFT card art (8bdaf04)
  • polish commander mint landing flow (517a7dd)
  • add landing commander mint page (8fee0a9)
  • add Zealy commander NFT campaign flow (c5c0192)
  • commander equipment economy + squad modal polish (#41) (f65ae80)
  • events — Sunken Arcology lore frame + LOCATE button + rename (cc0a2f7)
  • map — haul-chest button — pending banked-haul indicator (map-only) (dec1078)
  • base — WELCOME EVENT button deep-links to welcome entry in events menu (3fdbccc)
  • events — list menu — sidebar + detail (welcome event placeholder) (1a1a0a4)
  • extraction — reveal pipeline polish + battle pause UX + foreign-tile hardening (#40) (8ee2553)
  • extraction — defer resource credit from bank → /claim (unified box reveal) (995c70d)
  • extraction — event-interrupt popup over reveal + lift first-cycle gate (915f260)
  • extraction — chaos-team-hardened extraction loop (64698f4)
  • base — enable 50/50 Cipher 1/2 roll on every home-screen entry (39f3f03)
  • base/cipher-1 — extraction banner now shows on mobile too (f60451f)
  • base/cipher-2 — extraction banner now shows on mobile too (aab2bb6)
  • base/banners — split per-cipher banner placement, lock Cipher 2 (a778495)
  • base/pc — +20% sand cluster size and count (955c855)
  • base/cipher-2/pc — pin menu anchor to phone-equivalent on PC (1c364b1)
  • base/cipher-2 — -10deg CCW menu rotation + right-side perspective tilt (baa544c)
  • base — 50/50 Cipher 1 / Cipher 2 variant system on home entry (5c4defc)
  • base — PC home screen mirrors phone layout via transform scale (b3a60c0)
  • map — HOME button (was CRAWLER) with proper dark chrome (8cda610)
  • chat — docked = same element as opened, cropped to 2 lines (b526839)
  • chat — unify docked + opened at 15.2 px (+10% on opened) (c95e1dd)
  • chat — docked -30%, opened +20%, opened +10% wider (df20048)
  • chat — extend opened-chat bg to bottom, shrink docked, unify SEND (93b18b4)
  • base — lock approved mobile tablet-menu geometry (d88a601)
  • base — wind sand clusters + pointer-drag tablet scroll + chat clearance (246cd35)
  • base — add soft sandy wind drift overlay (31de021)
  • crawler screen UI overhaul with cipher tablet menu (1468816)
  • extract+attack unified modal, cross-cmd troop allocation, clamp cue, more (8d6dc49)
  • mobile polish — Barracks scaling + map HUD + chat (f48711a)
  • Barracks UI polish — picker, train modal, drag-drop, layout (44a90ea)
  • bundle cold-load client assets (f074ab4)
  • audio — replace extraction reveal synth with RPG Interface Essentials assets (d7e8163)
  • extraction — cycle-pause primitive + event-as-badge UX + reveal polish (ab8faca)
  • bank-reveal — legendary near-miss fade (77e7d60)
  • reveal — cycle flight + haul ticker + landing pulse (e7d96cd)
  • reveal — particles, per-crate shimmer, haul rarity polish (ddee061)
  • reveal — soak-phase escalation — panel wash, screen overlay, LEGENDARY banner (2ac62ed)
  • reveal — phase-fraction pacing + real loot icons (match prototype) (de0e8f3)
  • reveal — squad-modal extracting layout — wide LEFT reveal column (c486caf)
  • debug — TEST ACCOUNT button + /api/debug/skip-tutorial endpoint (0b6e50f)
  • extraction — reveal audio + boot-time recall sweep (Phase 2e/f) (603d207)
  • extraction — value-only haul + cycle reveal area (Phase 2d) (5ca5032)
  • extraction — delivery boxes + bank reveal modal (Phase 2a/b/c) (777cc24)
  • extraction — per-cycle item registry + structured items[] emit (Phase 1) (ae71883)
  • add shard admission cap (dcfd880)
  • modernize chat baseline (09d9c2e)
  • add clean-start postgres cutover (2117658)
  • alliance — NPC starter alliance — Phase 2 (LLM persona) + Phase 3 (Citadel march) (b178fee)
  • add tick worker redis heartbeat (e29cf05)
  • map — animated packing-hourglass overlay above extraction sites (b28b413)
  • hud — scale top + bottom bars 20%, tighten chat alignment, fix wheel reopen on deploy (d9781dc)
  • add realistic scale readiness harness (edfec3d)
  • alliance — redesign Requests panel — single panel + tile-picker modal (cf6f937)
  • add redis replica readiness (da19ce5)
  • alliance — broadcast notable history events to chat + per-member contributions panel (e59243c)

Fixes

  • separate shield-drop cooldown (30s) from squad-deploy prep (10s) (#59) (b4d452f)
  • security — pre-promote audit findings (#57) (4e6c051)
  • shutdown — arm force-exit timer first, halt tick loop between ops (#52) (e5e66f6)
  • chat/pc — bump message font 11→12 px (81bdae0)
  • chat/pc — drop viewport-scaled font on message rows (9a28b62)
  • shop — un-gate VAULT tab — remove "COMING SOON" + disabled state (098272a)
  • barracks — preserve original requested count on partial-clamp persist (053a981)
  • prefer versioned NFT commander art (cc7dba4)
  • polish vault export UI (09f6f9e)
  • restore commander vault export (bf2fb52)
  • remove in-game Zealy mint panel (6258cac)
  • harden campaign NFT burn import (1e9d1b4)
  • show and grant campaign import imprints (b545350)
  • stop megatower placeholder from bouncing to Welcome (e012921)
  • events — human-readable HOW TO SCORE for megatower + safer fallback (bf47fe4)
  • events — Sunken Arcology pinned in sidebar with inactive state (ee75514)
  • map/chest — socket-late-bind retry + 15s polling backstop (d077672)
  • chat — hoist hud-bottom z-index bump to global scope (PC + phone) (b57033d)
  • barracks — clear _returnTo in tutorial early-return path (af1d407)
  • chat — restore input+SEND on home + scope chat to base/worldMap (60425fc)
  • events — welcome placeholder no longer reverts after 1s (122b0bd)
  • barracks — DONE button honors _returnTo (restores extract→edit→back) (4b17d33)
  • chaos-test regressions + basket allocation filter (72cbe46)
  • polish base menus and preload assets (369814b)
  • extraction — bankHaul credits non-delivery delta (defender-event resources) (1d9de95)
  • extraction — sync event-interrupt overlay during same-scene patch (6355f6b)
  • extraction — Ignore closes overlay + Continue resumes reveal animation (4238a85)
  • extraction — defer haul celebration from bank → box-open + wire tasks refresh (79745ed)
  • extraction — Ignore button fires safe-default immediately (5b100c8)
  • chaos-team open-items polish pass (7e89774)
  • base — clean cipher body class in exit(); doc PC↔phone coupling (85f6f89)
  • base/cipher-2 — pin transform-origin so extended bottom keeps locked angle (527a366)
  • base/cipher-2 — extend menu bottom another 45px (34ca11b)
  • base/cipher-2 — extend menu bottom by 1 button height (PC + phone) (7645225)
  • base/pc — remove .base-fullbleed overflow:hidden on desktop (910c7dc)
  • base/pc — wallpaper full-viewport, hide bottom bar, fix chat-docked (51997c6)
  • map — HOME button flush to bottom-right corner, only top-left rounded (68984e2)
  • chat — shrink docked top-fade band 14 -> 6 px (28f887b)
  • chat — mask-fade top of docked chat to hide line slivers (bfc3162)
  • chat — persistent chat element across base + worldMap (3f74bf3)
  • chat — docked chat clickable + empty-state placeholder (d0a6850)
  • chat — minimize no longer wipes the docked preview (d450079)
  • chat — SEND grey to match placeholder + shorten input placeholder (17014a7)
  • chat — SEND button matches input height pixel-for-pixel (9e82dda)
  • unblock barracks tutorial flow (190a7a3)
  • enforce qa socket client coverage (82c8403)
  • scope back-button override to Barracks→Armory only (d42b35b)
  • server — allow dotfiles in / and /index.html sendFile (dac5b47)
  • harden cold-load dist serving (2449633)
  • cache static game assets (3a35c97)
  • prevent resource drift on speedup completions (af9b338)
  • debug — maxout grants 3 starter commanders, not 6 (22309b9)
  • reveal — review-pass — kill near-miss fade on skip, re-query haul on landing (f13d0e9)
  • reveal — pause-debt cycle bar, run-id abort, transient FX cleanup (129e242)
  • reveal — seed cycle bar + last-cycle crates on modal open (ba74e4e)
  • reveal — match cycle siteId against squad.id stripped of 'site:' prefix (56fc237)
  • hunter — await cancelDefenderPendingEvent inside try/catch (playbook §B) (14e134e)
  • post-cutover race-condition hardening (playbook §A) (ec081d9)
  • extraction — IIFE-wrap shared/itemRegistry.js (classic-script const collision broke client boot) (7d53bb3)
  • enforce realtime crawler visibility (452cd87)
  • narrow crawler presence fanout (120b61f)
  • bound tick burst work for load (a0525f4)
  • add postgres npc alliance drift columns (bed0fa0)
  • unblock alliance pr verification (3b272b3)
  • P0/P1 PR review — fulfillment contract, nested-tx, FK cleanup, encoding, verifier drift (df330d2)
  • type world map postgres filters (11bd56e)
  • repair postgres chat schema drift (5af5dfb)
  • keep player bases live in world cache (4de00c2)
  • alliance — invalidate research-bonus cache on level change (9e3f28f)
  • guard legacy market spends (effd08f)
  • persist sparse explored map features (c97abf0)
  • reduce scale read-path write pressure (371cf8e)
  • avoid load-test alliance tag collisions (fa8c566)
  • reduce crawler tick load for scale tests (f16ef32)
  • stabilize redis socket setup (9878853)

Performance

  • prepare single-shard 1k ccu path (bdfe21a)
  • batch training resource recompute (8ea671f)
  • batch tick training completion (3e32033)
  • make health checks db-free (d331e17)
  • batch resource safety buffs (7467639)
  • parallelize world map reads (b5d72d5)
  • cache auth player existence (3138726)
  • widen hot poll cache windows (50732d5)
  • align world tile cache with map polling (9df0c39)
  • cache shared world viewport tiles (d0a66c5)
  • cache serialized state responses (33d8479)
  • cache hot research bonus reads (1d202a0)
  • cache alliance help board lists (c187f85)
  • reuse world player alliance lookup (5206b30)
  • cadence gate moving vision invalidation (0195cf2)
  • jitter socket connect catchup (66448dd)
  • gate socket connection logs (fbfdec3)
  • cadence gate shield drain (61d33fb)
  • cache socket siege subscribe state (f8db0a7)
  • consolidate combat load reads (f8e9a00)
  • align state cache ttl with load cadence (f340a20)
  • compact extraction site read payloads (fb06e0e)
  • cache hot scale read payloads (4f165c4)
  • persist sparse event reveal memory (19dbb09)
  • throttle moving presence rechecks (0ba82f8)
  • avoid duplicate world player enrichment (dc424f9)
  • skip redundant frontier vision circles (def7de5)
  • bound resource safety bonuses (a6139fd)
  • consolidate scale state reads (ff25eab)
  • tune hot read cache windows (9a88fef)
  • cache stable hot read routes (c015055)
  • skip api response compression (1ab854b)
  • compact world reveal payloads (ec40baa)

Internal

  • collapse tx.mode === 'postgres' branches (Phase 3) (#50) (8e4c892)
  • drop SQLite, Postgres-only (Phase 2) + docker-compose fix (#48) (77ad817)
  • convert events manager to async db (8928b51)
  • convert megatower lifecycle to async db (d8c20ff)
  • convert dossier card manager to async db (15e22df)
  • convert mail and social rewards to async db (20142a9)
  • adapt async siege observer helpers (2a8f24e)
  • convert world map reads to async db (627dba5)
  • convert tutorial cleanup to async db (978a02b)
  • convert despawn ticks to async db (f3f5e5e)
  • adapt cloud and amm helpers to db adapter (561f581)
  • convert completion managers to async db (476ae93)
  • make tick helpers adapter-safe (d0011e1)
  • convert player deletion to async db (7025c6c)
  • convert alliance manager to async db (39132c8)
  • convert alliance help manager to async db (2f667ef)
  • convert alliance event logger reads (eb815b4)
  • convert debug routes to async db (a8e6c2d)
  • convert amm routes to async db (bc58b12)
  • convert tutorial route actions to async db (50a4996)
  • convert speedup routes to async db (bc64970)
  • convert commander routes to async db (cd19238)
  • convert extraction payload reads to async db (fda1c17)
  • convert raid routes to async db (bc9d3ab)
  • convert siege routes to async db (9579c53)
  • convert alliance route reads to async db (d9f4454)
  • convert small event routes to async db (a046e6d)
  • convert world route queries to async db (a8f51e5)
  • convert analytics routes to async db (69b2a47)
  • convert portal routes to async db (0f9aea6)
  • convert shop routes to async db (49c759d)
  • convert economy routes to async db (0c31162)
  • convert troop routes to async db (fac34cf)
  • convert chat manager to async db (544ff8e)
  • convert state payload reads to async db (41d928d)
  • make resource projection async (67e2bc9)
  • convert auth and quest paths to async db (379af9d)
  • add async db helpers for base routes (e0b9125)
  • port all 18 KNOWN_FAILING verify scripts + 4 real prod bug fixes (#54) (66692fd)
  • port 10 verify scripts from better-sqlite3 to pg.Client (#49) (c96454f)
  • qa — event UX moved from header badge → reveal-area popup overlay (7ed5646)
  • qa — address review findings on the SOCKETS + CLIENT sections (3147517)
  • qa — add SOCKETS + CLIENT regression coverage to qa-test (ad327d0)
  • stabilize world map qa under fog (ba8a926)
  • gate load health on server metrics (da05573)
  • isolate load setup metrics (c94511a)
  • instrument postgres query latency (1af84ff)
  • gate realistic load harness (6c31cd1)
  • add postgres post-cutover gate (2718c31)
  • stabilize staging postgres smoke (abbead5)
  • match client token refresh in load harness (954e997)
  • refresh load harness tokens before gameplay (2f0d5e3)
  • make load harness map camera sticky (6b60156)
  • add no-socket load diagnostic (6980771)
  • bound load harness request hangs (5fad066)
  • avoid setup player fanout (e52b988)
  • isolate load health probes (4143229)
  • add scale event-loop diagnostics (5f8dd3e)
  • clear explored tiles in load cohort reset (ed4273a)
  • add staging load cohort reset (4c3ec92)
  • stagger realistic load harness starts (086af58)
  • add staging redis smoke (a9f08c0)
  • changelog for 2026-05-21 promote (4700ef0)
  • fix stale refs after PR #53 lint rename + SQLite removal (#55) (489abec)
  • GOD SAVE CHECKPOINT — lock mobile crawler screen at d88a601 (6479c0e)
  • add staging qa load evidence (6364dc0)
  • record postgres load blocker (7fedf9a)
  • wrap 1k ccu readiness evidence (71f12d9)
  • record market guard staging verification (693918c)
  • record staging heartbeat verification (67bbb69)
  • note staging heartbeat deploy blocker (13e0a1b)
  • fix 1k report branch baseline (c703639)
  • record 750 socket ladder stop (f872464)
  • add 1k ccu readiness wrap report (725f294)
  • record world viewport cache 750-client result (6bf7e34)
  • refresh latest staging scale evidence (2767334)
  • record serialized state cache 750-client result (b9a8ace)
  • record http-only 750-client result (ec61272)
  • record research cache 750-client result (a323cc7)
  • record help board cache 750-client result (e8bf9f2)
  • record moving vision 750-client result (c2d5f82)
  • record 750 socket load result (58fcedf)
  • record socket cache 750-client result (353c244)
  • clarify tested scale commit (eb358b6)
  • record compact payload 750-client result (7229de7)
  • record hot-read cache 750-client result (6e3f2ad)
  • record sparse reveal 750-client result (801b0f4)
  • record 750-client scale blocker (474a994)
  • record 500-client staging pass (f89253f)
  • record isolated health load blocker (c8d25b4)
  • record consolidated state load evidence (9af0dfe)
  • record route cache load evidence (2202169)
  • record 500 ccu staging blocker (48e98fc)
  • alliance social cooperation audit + improvement plan (943baa6)
  • compress audio assets (e65ca96)
  • remove dead founder pack join hook (2658e23)
  • remove redundant debug route requires (c940e33)
  • remove dead amm statements (4319ba4)
  • wire postgres runtime selector (c9de3ba)
  • add postgres bootstrap gates (2dbfcae)

Other

  • docs+refactor: PG-only docs cleanup + verify-script renames (Phase 4+5) (#51) (7f2b28a)
  • tune(menu-fx): walk back static + scanline cut from −30% to −10% (1af0f2b)
  • tune(menu-fx): −30% static + scanline, kill wallpaper flicker (a2b57e7)
  • wip: siv-version UI session work + merge staging (5e1e7a0)
  • tune(events/mobile): side-by-side lore frame, smaller image, locate in view (54488bb)
  • tweak(events): one-sentence HOW TO SCORE for Sunken Arcology (14a635a)
  • tweak(events): red SUBMERGED badge + 'Currently submerged' label (4300c79)
  • tune(map/mobile): haul-chest button -12% size on phone (55 -> 48) (b22f57b)
  • tune(map): haul-chest button +25% size (44 -> 55 px) (2b14f91)
  • art: darker orange menu icons + white per-hour resource rates (141323a)
  • art(base/menu): tablet menu icons → glowing orange (all 4 ciphers) (c1c4ee8)
  • tune(base/cipher-1/pc): shift banner -12px up, -6px left (ef6b8cc)
  • tune(base/cipher-1/pc): rotate banner -4deg CCW, shift -5px up (b063000)
  • tune(base/cipher-1/pc): rotate banner +15deg CW, shift +50px right (569ddbe)
  • tune(base/cipher-1/pc): rotate banner +10deg CW, shift -20px up (f66a674)
  • tune(base/cipher-1/pc): shift banner +60px down, +15px right (c646776)
  • tune(base/cipher-1/pc): shift banner -60px left, rotate -12deg (0fd87f0)
  • art(base): sync cipher PNGs, extend extraction banners to Cipher 1 (f8d7a1f)
  • art(base): sync updated cipher tablet PNGs from main repo (96c2c3c)
  • tune(base/pc): sand cluster scale 1.2 -> 1.1 (PC-only) (b298a37)
  • tune(base/cipher-2/pc): shift extraction banners 5px right (c2f5c40)
  • tune(base/cipher-2/pc): shift extraction banners another 34px left (a108c1b)
  • tune(base/cipher-2/pc): shift extraction banners -30px left, +3% size, tie to cipher (0f3e4b7)
  • art(base/cipher-2/pc): add extraction-tape banners overlay (6884ed5)
  • lock(base/cipher-2): mobile menu layout + crop top at viewport y=20px (488c285)
  • tune(base/cipher-2): +0.5deg clockwise menu rotation (5 -> 5.5) (b5ae1e7)
  • tune(base/cipher-2): reduce menu side-view angle (rotateY -36 -> -33) (6b7008c)
  • tune(base/cipher-2): nudge menu 1px left + 3px down (d899aa2)
  • tune(base/cipher-2): nudge menu 2px left + 5px down (8ea675e)
  • tune(base/cipher-2): nudge menu 4px left, 3px down, +2deg angle (c737438)
  • tune(base/cipher-2): bump menu side-view angle (rotateY -28 -> -34, perspective 550 -> 500) (6a26745)
  • tune(base/cipher-2): +3deg clockwise rotation on menu plane (2b3cf0d)
  • tune(base/cipher-2): stronger right-side perspective tilt on menu plane (5256a87)
  • art(base): swap back to Cipher 1; full Cipher 1/2 spec in comments (463f8ad)
  • art(base): shrink Cipher 2 (angled) ~7.5%, label both cipher options (bd8f0c8)
  • art(base): swap cipher tablet art to the angled variant (11b9b2f)
  • checkpoint: Barracks redesign — known-good Squads + Reserves layout (aa44f4b)
4e6c051

New & Changed

  • tutorial onboarding overhaul + post-tutorial NPX polish (#56) (6119305)
  • infra — pool-stats emitter + generalize tx-propagation lint (#53) (7645f41)
  • infra — idle-tx watchdog + Phase 0 PG migration + accumulated staging work (#47) (511dbcb)
  • base/tablet — icon-top + LV-under + centered labels, button size unchanged (f199623)
  • theme — default to dark mode, keep toggle for light (1333da5)
  • vault — audit trail + operator restore for real-money export/import (#43) (2dbd092)
  • vault redesign (hero state + card grid + chip + import demote) + economy tune (#42) (9391494)
  • add commander NFT card art (8bdaf04)
  • polish commander mint landing flow (517a7dd)
  • add landing commander mint page (8fee0a9)
  • add Zealy commander NFT campaign flow (c5c0192)
  • commander equipment economy + squad modal polish (#41) (f65ae80)
  • events — Sunken Arcology lore frame + LOCATE button + rename (cc0a2f7)
  • map — haul-chest button — pending banked-haul indicator (map-only) (dec1078)
  • base — WELCOME EVENT button deep-links to welcome entry in events menu (3fdbccc)
  • events — list menu — sidebar + detail (welcome event placeholder) (1a1a0a4)
  • extraction — reveal pipeline polish + battle pause UX + foreign-tile hardening (#40) (8ee2553)
  • extraction — defer resource credit from bank → /claim (unified box reveal) (995c70d)
  • extraction — event-interrupt popup over reveal + lift first-cycle gate (915f260)
  • extraction — chaos-team-hardened extraction loop (64698f4)
  • base — enable 50/50 Cipher 1/2 roll on every home-screen entry (39f3f03)
  • base/cipher-1 — extraction banner now shows on mobile too (f60451f)
  • base/cipher-2 — extraction banner now shows on mobile too (aab2bb6)
  • base/banners — split per-cipher banner placement, lock Cipher 2 (a778495)
  • base/pc — +20% sand cluster size and count (955c855)
  • base/cipher-2/pc — pin menu anchor to phone-equivalent on PC (1c364b1)
  • base/cipher-2 — -10deg CCW menu rotation + right-side perspective tilt (baa544c)
  • base — 50/50 Cipher 1 / Cipher 2 variant system on home entry (5c4defc)
  • base — PC home screen mirrors phone layout via transform scale (b3a60c0)
  • map — HOME button (was CRAWLER) with proper dark chrome (8cda610)
  • chat — docked = same element as opened, cropped to 2 lines (b526839)
  • chat — unify docked + opened at 15.2 px (+10% on opened) (c95e1dd)
  • chat — docked -30%, opened +20%, opened +10% wider (df20048)
  • chat — extend opened-chat bg to bottom, shrink docked, unify SEND (93b18b4)
  • base — lock approved mobile tablet-menu geometry (d88a601)
  • base — wind sand clusters + pointer-drag tablet scroll + chat clearance (246cd35)
  • base — add soft sandy wind drift overlay (31de021)
  • crawler screen UI overhaul with cipher tablet menu (1468816)
  • extract+attack unified modal, cross-cmd troop allocation, clamp cue, more (8d6dc49)
  • mobile polish — Barracks scaling + map HUD + chat (f48711a)
  • Barracks UI polish — picker, train modal, drag-drop, layout (44a90ea)
  • bundle cold-load client assets (f074ab4)
  • audio — replace extraction reveal synth with RPG Interface Essentials assets (d7e8163)
  • extraction — cycle-pause primitive + event-as-badge UX + reveal polish (ab8faca)
  • bank-reveal — legendary near-miss fade (77e7d60)
  • reveal — cycle flight + haul ticker + landing pulse (e7d96cd)
  • reveal — particles, per-crate shimmer, haul rarity polish (ddee061)
  • reveal — soak-phase escalation — panel wash, screen overlay, LEGENDARY banner (2ac62ed)
  • reveal — phase-fraction pacing + real loot icons (match prototype) (de0e8f3)
  • reveal — squad-modal extracting layout — wide LEFT reveal column (c486caf)
  • debug — TEST ACCOUNT button + /api/debug/skip-tutorial endpoint (0b6e50f)
  • extraction — reveal audio + boot-time recall sweep (Phase 2e/f) (603d207)
  • extraction — value-only haul + cycle reveal area (Phase 2d) (5ca5032)
  • extraction — delivery boxes + bank reveal modal (Phase 2a/b/c) (777cc24)
  • extraction — per-cycle item registry + structured items[] emit (Phase 1) (ae71883)
  • add shard admission cap (dcfd880)
  • modernize chat baseline (09d9c2e)
  • add clean-start postgres cutover (2117658)
  • alliance — NPC starter alliance — Phase 2 (LLM persona) + Phase 3 (Citadel march) (b178fee)
  • add tick worker redis heartbeat (e29cf05)
  • map — animated packing-hourglass overlay above extraction sites (b28b413)
  • hud — scale top + bottom bars 20%, tighten chat alignment, fix wheel reopen on deploy (d9781dc)
  • add realistic scale readiness harness (edfec3d)
  • alliance — redesign Requests panel — single panel + tile-picker modal (cf6f937)
  • add redis replica readiness (da19ce5)
  • alliance — broadcast notable history events to chat + per-member contributions panel (e59243c)

Fixes

  • security — pre-promote audit findings (#57) (4e6c051)
  • shutdown — arm force-exit timer first, halt tick loop between ops (#52) (e5e66f6)
  • chat/pc — bump message font 11→12 px (81bdae0)
  • chat/pc — drop viewport-scaled font on message rows (9a28b62)
  • shop — un-gate VAULT tab — remove "COMING SOON" + disabled state (098272a)
  • barracks — preserve original requested count on partial-clamp persist (053a981)
  • prefer versioned NFT commander art (cc7dba4)
  • polish vault export UI (09f6f9e)
  • restore commander vault export (bf2fb52)
  • remove in-game Zealy mint panel (6258cac)
  • harden campaign NFT burn import (1e9d1b4)
  • show and grant campaign import imprints (b545350)
  • stop megatower placeholder from bouncing to Welcome (e012921)
  • events — human-readable HOW TO SCORE for megatower + safer fallback (bf47fe4)
  • events — Sunken Arcology pinned in sidebar with inactive state (ee75514)
  • map/chest — socket-late-bind retry + 15s polling backstop (d077672)
  • chat — hoist hud-bottom z-index bump to global scope (PC + phone) (b57033d)
  • barracks — clear _returnTo in tutorial early-return path (af1d407)
  • chat — restore input+SEND on home + scope chat to base/worldMap (60425fc)
  • events — welcome placeholder no longer reverts after 1s (122b0bd)
  • barracks — DONE button honors _returnTo (restores extract→edit→back) (4b17d33)
  • chaos-test regressions + basket allocation filter (72cbe46)
  • polish base menus and preload assets (369814b)
  • extraction — bankHaul credits non-delivery delta (defender-event resources) (1d9de95)
  • extraction — sync event-interrupt overlay during same-scene patch (6355f6b)
  • extraction — Ignore closes overlay + Continue resumes reveal animation (4238a85)
  • extraction — defer haul celebration from bank → box-open + wire tasks refresh (79745ed)
  • extraction — Ignore button fires safe-default immediately (5b100c8)
  • chaos-team open-items polish pass (7e89774)
  • base — clean cipher body class in exit(); doc PC↔phone coupling (85f6f89)
  • base/cipher-2 — pin transform-origin so extended bottom keeps locked angle (527a366)
  • base/cipher-2 — extend menu bottom another 45px (34ca11b)
  • base/cipher-2 — extend menu bottom by 1 button height (PC + phone) (7645225)
  • base/pc — remove .base-fullbleed overflow:hidden on desktop (910c7dc)
  • base/pc — wallpaper full-viewport, hide bottom bar, fix chat-docked (51997c6)
  • map — HOME button flush to bottom-right corner, only top-left rounded (68984e2)
  • chat — shrink docked top-fade band 14 -> 6 px (28f887b)
  • chat — mask-fade top of docked chat to hide line slivers (bfc3162)
  • chat — persistent chat element across base + worldMap (3f74bf3)
  • chat — docked chat clickable + empty-state placeholder (d0a6850)
  • chat — minimize no longer wipes the docked preview (d450079)
  • chat — SEND grey to match placeholder + shorten input placeholder (17014a7)
  • chat — SEND button matches input height pixel-for-pixel (9e82dda)
  • unblock barracks tutorial flow (190a7a3)
  • enforce qa socket client coverage (82c8403)
  • scope back-button override to Barracks→Armory only (d42b35b)
  • server — allow dotfiles in / and /index.html sendFile (dac5b47)
  • harden cold-load dist serving (2449633)
  • cache static game assets (3a35c97)
  • prevent resource drift on speedup completions (af9b338)
  • debug — maxout grants 3 starter commanders, not 6 (22309b9)
  • reveal — review-pass — kill near-miss fade on skip, re-query haul on landing (f13d0e9)
  • reveal — pause-debt cycle bar, run-id abort, transient FX cleanup (129e242)
  • reveal — seed cycle bar + last-cycle crates on modal open (ba74e4e)
  • reveal — match cycle siteId against squad.id stripped of 'site:' prefix (56fc237)
  • hunter — await cancelDefenderPendingEvent inside try/catch (playbook §B) (14e134e)
  • post-cutover race-condition hardening (playbook §A) (ec081d9)
  • extraction — IIFE-wrap shared/itemRegistry.js (classic-script const collision broke client boot) (7d53bb3)
  • enforce realtime crawler visibility (452cd87)
  • narrow crawler presence fanout (120b61f)
  • bound tick burst work for load (a0525f4)
  • add postgres npc alliance drift columns (bed0fa0)
  • unblock alliance pr verification (3b272b3)
  • P0/P1 PR review — fulfillment contract, nested-tx, FK cleanup, encoding, verifier drift (df330d2)
  • type world map postgres filters (11bd56e)
  • repair postgres chat schema drift (5af5dfb)
  • keep player bases live in world cache (4de00c2)
  • alliance — invalidate research-bonus cache on level change (9e3f28f)
  • guard legacy market spends (effd08f)
  • persist sparse explored map features (c97abf0)
  • reduce scale read-path write pressure (371cf8e)
  • avoid load-test alliance tag collisions (fa8c566)
  • reduce crawler tick load for scale tests (f16ef32)
  • stabilize redis socket setup (9878853)

Performance

  • prepare single-shard 1k ccu path (bdfe21a)
  • batch training resource recompute (8ea671f)
  • batch tick training completion (3e32033)
  • make health checks db-free (d331e17)
  • batch resource safety buffs (7467639)
  • parallelize world map reads (b5d72d5)
  • cache auth player existence (3138726)
  • widen hot poll cache windows (50732d5)
  • align world tile cache with map polling (9df0c39)
  • cache shared world viewport tiles (d0a66c5)
  • cache serialized state responses (33d8479)
  • cache hot research bonus reads (1d202a0)
  • cache alliance help board lists (c187f85)
  • reuse world player alliance lookup (5206b30)
  • cadence gate moving vision invalidation (0195cf2)
  • jitter socket connect catchup (66448dd)
  • gate socket connection logs (fbfdec3)
  • cadence gate shield drain (61d33fb)
  • cache socket siege subscribe state (f8db0a7)
  • consolidate combat load reads (f8e9a00)
  • align state cache ttl with load cadence (f340a20)
  • compact extraction site read payloads (fb06e0e)
  • cache hot scale read payloads (4f165c4)
  • persist sparse event reveal memory (19dbb09)
  • throttle moving presence rechecks (0ba82f8)
  • avoid duplicate world player enrichment (dc424f9)
  • skip redundant frontier vision circles (def7de5)
  • bound resource safety bonuses (a6139fd)
  • consolidate scale state reads (ff25eab)
  • tune hot read cache windows (9a88fef)
  • cache stable hot read routes (c015055)
  • skip api response compression (1ab854b)
  • compact world reveal payloads (ec40baa)

Internal

  • collapse tx.mode === 'postgres' branches (Phase 3) (#50) (8e4c892)
  • drop SQLite, Postgres-only (Phase 2) + docker-compose fix (#48) (77ad817)
  • convert events manager to async db (8928b51)
  • convert megatower lifecycle to async db (d8c20ff)
  • convert dossier card manager to async db (15e22df)
  • convert mail and social rewards to async db (20142a9)
  • adapt async siege observer helpers (2a8f24e)
  • convert world map reads to async db (627dba5)
  • convert tutorial cleanup to async db (978a02b)
  • convert despawn ticks to async db (f3f5e5e)
  • adapt cloud and amm helpers to db adapter (561f581)
  • convert completion managers to async db (476ae93)
  • make tick helpers adapter-safe (d0011e1)
  • convert player deletion to async db (7025c6c)
  • convert alliance manager to async db (39132c8)
  • convert alliance help manager to async db (2f667ef)
  • convert alliance event logger reads (eb815b4)
  • convert debug routes to async db (a8e6c2d)
  • convert amm routes to async db (bc58b12)
  • convert tutorial route actions to async db (50a4996)
  • convert speedup routes to async db (bc64970)
  • convert commander routes to async db (cd19238)
  • convert extraction payload reads to async db (fda1c17)
  • convert raid routes to async db (bc9d3ab)
  • convert siege routes to async db (9579c53)
  • convert alliance route reads to async db (d9f4454)
  • convert small event routes to async db (a046e6d)
  • convert world route queries to async db (a8f51e5)
  • convert analytics routes to async db (69b2a47)
  • convert portal routes to async db (0f9aea6)
  • convert shop routes to async db (49c759d)
  • convert economy routes to async db (0c31162)
  • convert troop routes to async db (fac34cf)
  • convert chat manager to async db (544ff8e)
  • convert state payload reads to async db (41d928d)
  • make resource projection async (67e2bc9)
  • convert auth and quest paths to async db (379af9d)
  • add async db helpers for base routes (e0b9125)
  • port all 18 KNOWN_FAILING verify scripts + 4 real prod bug fixes (#54) (66692fd)
  • port 10 verify scripts from better-sqlite3 to pg.Client (#49) (c96454f)
  • qa — event UX moved from header badge → reveal-area popup overlay (7ed5646)
  • qa — address review findings on the SOCKETS + CLIENT sections (3147517)
  • qa — add SOCKETS + CLIENT regression coverage to qa-test (ad327d0)
  • stabilize world map qa under fog (ba8a926)
  • gate load health on server metrics (da05573)
  • isolate load setup metrics (c94511a)
  • instrument postgres query latency (1af84ff)
  • gate realistic load harness (6c31cd1)
  • add postgres post-cutover gate (2718c31)
  • stabilize staging postgres smoke (abbead5)
  • match client token refresh in load harness (954e997)
  • refresh load harness tokens before gameplay (2f0d5e3)
  • make load harness map camera sticky (6b60156)
  • add no-socket load diagnostic (6980771)
  • bound load harness request hangs (5fad066)
  • avoid setup player fanout (e52b988)
  • isolate load health probes (4143229)
  • add scale event-loop diagnostics (5f8dd3e)
  • clear explored tiles in load cohort reset (ed4273a)
  • add staging load cohort reset (4c3ec92)
  • stagger realistic load harness starts (086af58)
  • add staging redis smoke (a9f08c0)
  • fix stale refs after PR #53 lint rename + SQLite removal (#55) (489abec)
  • GOD SAVE CHECKPOINT — lock mobile crawler screen at d88a601 (6479c0e)
  • add staging qa load evidence (6364dc0)
  • record postgres load blocker (7fedf9a)
  • wrap 1k ccu readiness evidence (71f12d9)
  • record market guard staging verification (693918c)
  • record staging heartbeat verification (67bbb69)
  • note staging heartbeat deploy blocker (13e0a1b)
  • fix 1k report branch baseline (c703639)
  • record 750 socket ladder stop (f872464)
  • add 1k ccu readiness wrap report (725f294)
  • record world viewport cache 750-client result (6bf7e34)
  • refresh latest staging scale evidence (2767334)
  • record serialized state cache 750-client result (b9a8ace)
  • record http-only 750-client result (ec61272)
  • record research cache 750-client result (a323cc7)
  • record help board cache 750-client result (e8bf9f2)
  • record moving vision 750-client result (c2d5f82)
  • record 750 socket load result (58fcedf)
  • record socket cache 750-client result (353c244)
  • clarify tested scale commit (eb358b6)
  • record compact payload 750-client result (7229de7)
  • record hot-read cache 750-client result (6e3f2ad)
  • record sparse reveal 750-client result (801b0f4)
  • record 750-client scale blocker (474a994)
  • record 500-client staging pass (f89253f)
  • record isolated health load blocker (c8d25b4)
  • record consolidated state load evidence (9af0dfe)
  • record route cache load evidence (2202169)
  • record 500 ccu staging blocker (48e98fc)
  • alliance social cooperation audit + improvement plan (943baa6)
  • compress audio assets (e65ca96)
  • remove dead founder pack join hook (2658e23)
  • remove redundant debug route requires (c940e33)
  • remove dead amm statements (4319ba4)
  • wire postgres runtime selector (c9de3ba)
  • add postgres bootstrap gates (2dbfcae)

Other

  • docs+refactor: PG-only docs cleanup + verify-script renames (Phase 4+5) (#51) (7f2b28a)
  • tune(menu-fx): walk back static + scanline cut from −30% to −10% (1af0f2b)
  • tune(menu-fx): −30% static + scanline, kill wallpaper flicker (a2b57e7)
  • wip: siv-version UI session work + merge staging (5e1e7a0)
  • tune(events/mobile): side-by-side lore frame, smaller image, locate in view (54488bb)
  • tweak(events): one-sentence HOW TO SCORE for Sunken Arcology (14a635a)
  • tweak(events): red SUBMERGED badge + 'Currently submerged' label (4300c79)
  • tune(map/mobile): haul-chest button -12% size on phone (55 -> 48) (b22f57b)
  • tune(map): haul-chest button +25% size (44 -> 55 px) (2b14f91)
  • art: darker orange menu icons + white per-hour resource rates (141323a)
  • art(base/menu): tablet menu icons → glowing orange (all 4 ciphers) (c1c4ee8)
  • tune(base/cipher-1/pc): shift banner -12px up, -6px left (ef6b8cc)
  • tune(base/cipher-1/pc): rotate banner -4deg CCW, shift -5px up (b063000)
  • tune(base/cipher-1/pc): rotate banner +15deg CW, shift +50px right (569ddbe)
  • tune(base/cipher-1/pc): rotate banner +10deg CW, shift -20px up (f66a674)
  • tune(base/cipher-1/pc): shift banner +60px down, +15px right (c646776)
  • tune(base/cipher-1/pc): shift banner -60px left, rotate -12deg (0fd87f0)
  • art(base): sync cipher PNGs, extend extraction banners to Cipher 1 (f8d7a1f)
  • art(base): sync updated cipher tablet PNGs from main repo (96c2c3c)
  • tune(base/pc): sand cluster scale 1.2 -> 1.1 (PC-only) (b298a37)
  • tune(base/cipher-2/pc): shift extraction banners 5px right (c2f5c40)
  • tune(base/cipher-2/pc): shift extraction banners another 34px left (a108c1b)
  • tune(base/cipher-2/pc): shift extraction banners -30px left, +3% size, tie to cipher (0f3e4b7)
  • art(base/cipher-2/pc): add extraction-tape banners overlay (6884ed5)
  • lock(base/cipher-2): mobile menu layout + crop top at viewport y=20px (488c285)
  • tune(base/cipher-2): +0.5deg clockwise menu rotation (5 -> 5.5) (b5ae1e7)
  • tune(base/cipher-2): reduce menu side-view angle (rotateY -36 -> -33) (6b7008c)
  • tune(base/cipher-2): nudge menu 1px left + 3px down (d899aa2)
  • tune(base/cipher-2): nudge menu 2px left + 5px down (8ea675e)
  • tune(base/cipher-2): nudge menu 4px left, 3px down, +2deg angle (c737438)
  • tune(base/cipher-2): bump menu side-view angle (rotateY -28 -> -34, perspective 550 -> 500) (6a26745)
  • tune(base/cipher-2): +3deg clockwise rotation on menu plane (2b3cf0d)
  • tune(base/cipher-2): stronger right-side perspective tilt on menu plane (5256a87)
  • art(base): swap back to Cipher 1; full Cipher 1/2 spec in comments (463f8ad)
  • art(base): shrink Cipher 2 (angled) ~7.5%, label both cipher options (bd8f0c8)
  • art(base): swap cipher tablet art to the angled variant (11b9b2f)
  • checkpoint: Barracks redesign — known-good Squads + Reserves layout (aa44f4b)
83af14f

New & Changed

  • skills — staging-tester for one-command logins to Railway staging (003292e)
  • tooling — changelog generator for staging → master promotes (ba24aa6)
  • db — file-based migration system for data backfills (7c0369b)
  • map — patch 15 — minimalist atmospheric clouds for citadel + frontier (restored) (b517879)

Fixes

  • skills — staging-tester username was over the 20-char server cap (c023281)
  • deploy — include megatower-tune scripts so staging boots (915b432)
  • roll back to 5863231 (post battle-replay-decoder-fixes) (restored) (4bb15ea)

Performance

  • map — patch 16 — drop friendly-zone weather (restored) (4b279bc)
  • map — micro-wins — hoist matrix, cache pattern + mask gradients, LRU img cache (restored) (ad89b4f)

Internal

  • stabilize verify-extraction-spawns by pooling N=1000 trials (bf94cc3)
  • update verify-event-resource-gates to $ato copy + un-skip in CI (2470fb1)
  • fix server-dep partition + skip 2 known-failing verify scripts (cf1e784)
  • add PR + push checks (verify-* + qa-test against running server) (7d07ae5)
  • add monitoring & alerting runbook (eca3d24)
  • switch to staging-first branching workflow (c331724)
  • add staging environment runbook + Railway setup guide (7b08677)