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