Patch Notes
Ashen Throne Changelog
Every balance pass, fix, and feature shipped to the alpha. Newest first.
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)