Commit Graph

  • c88b8df409 cull(engine-cleanup): pass-8 phase-2 cascade round 3 gamer147 2026-07-03 21:20:40 -04:00
  • e3e0ba7a72 cull(engine-cleanup): pass-8 phase-2 cascade round 2 gamer147 2026-07-03 21:19:36 -04:00
  • c9628dee01 cull(engine-cleanup): pass-8 phase-2 cascade round 1 gamer147 2026-07-03 21:18:18 -04:00
  • 3fb37f0249 chore(engine-cleanup): drop stale BattleAmbientContext analyzer root gamer147 2026-07-03 21:06:53 -04:00
  • 2d9a6eea4b engine cleanup passes 4-7 + multi-instancing ambient rip gamer147 2026-07-03 19:18:54 -04:00
  • 5c1db83967 feat(pack): /pack/set_rotation_starter_class + selected_class_id read-back gamer147 2026-06-27 20:06:46 -04:00
  • 869727cc06 feat(pack-draw): per-class card pools for rotation-starter packs gamer147 2026-06-27 19:35:08 -04:00
  • ff77d5e5b6 fix(guild): final-review remediation — replay_detail flat, FK on leader, transaction wraps, _db extraction gamer147 2026-06-27 16:33:59 -04:00
  • 754b2ca466 fix(guild_chat): wait_interval as raw int + capture-replay request field name gamer147 2026-06-27 15:40:30 -04:00
  • 6467223b52 test(guild): capture-replay against traffic_prod_guild_create.ndjson gamer147 2026-06-27 15:32:47 -04:00
  • d62f1b7ba7 feat(guild): MyPage guild_notification + load_index audit gamer147 2026-06-27 15:24:46 -04:00
  • eb65c2081c feat(guild_chat): deck + replay attachments gamer147 2026-06-27 15:14:06 -04:00
  • ab1e23b7cb feat(guild_chat): post text + stamp gamer147 2026-06-27 14:58:18 -04:00
  • a248c167e0 refactor(guild_chat): extract chat-user lookup to viewer repo; fix NEW-direction exclusivity gamer147 2026-06-27 14:51:44 -04:00
  • 358f43aa7a feat(guild_chat): messages window + system events gamer147 2026-06-27 14:44:09 -04:00
  • 484b51086a fix(guild): friend_list returns bare array-at-root (matches GuildFriendListTask.Parse) gamer147 2026-06-27 14:35:20 -04:00
  • f2b996a593 feat(guild): change_role atomic transfer + friend_list gamer147 2026-06-27 14:27:13 -04:00
  • 00fb28681b feat(guild): leave + remove with leader-leaves rule gamer147 2026-06-27 14:16:47 -04:00
  • 901c3d7568 fix(guild): subleaders can accept/reject join requests (matches GuildManager.HasAuthorityInviteAndApproval) gamer147 2026-06-27 14:06:30 -04:00
  • dd955fe4be feat(guild): join_request_accept + reject_join_request gamer147 2026-06-27 13:58:54 -04:00
  • 771d884314 fix(guild): /guild/join returns guild_status per branch (APPLYING for approval path, JOINING otherwise) gamer147 2026-06-27 13:51:04 -04:00
  • d7f9ba8f2a feat(guild): join / cancel_join_request / join_request_list gamer147 2026-06-27 13:44:04 -04:00
  • 11a129ea90 fix(guild): make GuildInvite unique index partial on Status=Pending to allow re-invite after reject/cancel gamer147 2026-06-27 13:29:06 -04:00
  • 1b7fa2d525 feat(guild): invite state machine gamer147 2026-06-27 13:21:57 -04:00
  • c103ab6a87 fix(guild): populate leader_name in search results (matches prod capture) gamer147 2026-06-27 13:08:11 -04:00
  • 3f8f04eb1a feat(guild): /guild/search_guild gamer147 2026-06-27 13:01:58 -04:00
  • 09104f4e73 fix(guild): /guild/update response — flat detail under guild (matches GuildUpdateTask.Parse) gamer147 2026-06-27 12:54:15 -04:00
  • c0e1c10192 feat(guild): update + update_description + update_emblem gamer147 2026-06-27 12:47:00 -04:00
  • f9361fa467 fix(guild): emblem_list wire shape — add wire-shape test locking shape (b) gamer147 2026-06-27 12:38:57 -04:00
  • cb5fc8d2d6 feat(guild): breakup + emblem_list + others_info gamer147 2026-06-27 12:32:04 -04:00
  • f7f68d03a7 feat(guild): /guild/create + populated /guild/info gamer147 2026-06-27 12:17:22 -04:00
  • 99019963ca feat(guild): controller scaffolding + /guild/info baseline gamer147 2026-06-27 12:01:27 -04:00
  • a1aa6998b8 feat(guild): service skeletons + DI gamer147 2026-06-27 11:25:55 -04:00
  • 45947053c8 fix(guild): single-pass bucket filter in GuildRepository.SearchAsync gamer147 2026-06-27 11:21:32 -04:00
  • 3fdc20d21f feat(guild): repositories for Guild aggregate gamer147 2026-06-27 11:17:51 -04:00
  • 7f245b50d6 feat(guild): add GuildConfig with ShippedDefaults gamer147 2026-06-27 11:07:54 -04:00
  • f4533aabd3 feat(guild): add Guild aggregate schema + migration gamer147 2026-06-27 11:02:29 -04:00
  • 3a52115551 import_viewer: clean orphan ViewerEventCounter rows on shrinking re-import gamer147 2026-06-23 20:37:11 -04:00
  • 79e936dcf2 import_viewer: round-trip ViewerStoryProgress with per-family offsets gamer147 2026-06-23 20:05:13 -04:00
  • 2cb254553f import_viewer: round-trip ViewerAchievement + counter gamer147 2026-06-23 19:54:56 -04:00
  • c253930d59 import_viewer: fix counter upsert race + add explicit slot field gamer147 2026-06-23 19:47:40 -04:00
  • 22778b65fd import_viewer: round-trip ViewerMission + ViewerEventCounter gamer147 2026-06-23 19:39:24 -04:00
  • d53628f8cc import_viewer: round-trip ViewerMissionData scalars (mission_meta) gamer147 2026-06-23 19:30:05 -04:00
  • 06bf9eb615 import_viewer: response skip-count fields for missions/achievements/story gamer147 2026-06-23 19:24:59 -04:00
  • 86f7532f5b Merge feature/daily-login-bonus: daily login bonus server state gamer147 2026-06-13 17:26:20 -04:00
  • 0d2da66795 feat(mypage): can_give_daily_login_bonus reflects IsDue(viewer) gamer147 2026-06-13 16:50:17 -04:00
  • 7d83560fc9 feat(load): emit daily_login_bonus via ILoginBonusService gamer147 2026-06-13 16:40:44 -04:00
  • 5083d43e51 feat: ILoginBonusService — JST day-bucketed claim + grant + DTO assembly gamer147 2026-06-13 16:15:21 -04:00
  • b831810fc1 chore(dto): correct LoginBonusCampaign doc — start/end_date not modeled yet gamer147 2026-06-13 16:04:07 -04:00
  • e6e3f919a6 fix(dto): align daily_login_bonus DTOs with prod wire shape gamer147 2026-06-13 15:59:42 -04:00
  • 0d01727e48 chore(config): split NormalBonusEntry, strengthen Normal-defaults warning gamer147 2026-06-13 15:55:12 -04:00
  • 6fb73c7a09 feat(config): LoginBonus section with 15-day shipped normal cycle gamer147 2026-06-13 15:50:42 -04:00
  • 107ee106a3 feat(viewer): add LastLoginBonusClaimedAt + LoginBonusStreak columns gamer147 2026-06-13 15:42:40 -04:00
  • f707fb2ffb refactor: drop unused DailyLoginBonuses table + importer gamer147 2026-06-13 15:32:33 -04:00
  • ba7040580f fix(arena-colosseum): tips + colosseum_id wiring + round-aware time derivation gamer147 2026-06-13 13:44:10 -04:00
  • 43a3665775 refactor(arena-colosseum): dedup colosseum_info source-of-truth gamer147 2026-06-13 13:31:03 -04:00
  • 114e3da81f Merge feat/arena-colosseum: 3-phase Grand Prix implementation (1/16 → 15/16) gamer147 2026-06-13 13:00:58 -04:00
  • d126649ad4 feat(arena-colosseum): 2-pick + curated deck sources (phase 3) gamer147 2026-06-13 12:49:57 -04:00
  • cbee0f9a50 feat(arena-colosseum): playable bracket + rank-match promotion (phase 2) gamer147 2026-06-13 12:32:56 -04:00
  • 110867358c feat(arena-colosseum): lobby + constructed entry (phase 1) gamer147 2026-06-13 12:16:22 -04:00
  • a5fe484775 feat(account): /account/update_birth persists viewer birth date gamer147 2026-06-13 11:35:41 -04:00
  • 715dd4dea8 feat(config): wire /config/update + /config/update_challenge_config (closes family 4/4) gamer147 2026-06-13 11:25:40 -04:00
  • b5e13551cd Merge branch 'feat/decomp-only-followups' gamer147 2026-06-13 10:07:12 -04:00
  • 43dee9d00b feat(card): /card/create_foil_card Seer's Globe conversion (1 orb + 1 base → 1 foil) gamer147 2026-06-13 09:58:55 -04:00
  • 13ca7d118e feat(config): persist is_foil_preferred + is_prize_preferred (stubs → real) gamer147 2026-06-13 09:54:51 -04:00
  • 911374106f feat(emblem): /emblem/update_emblem sets viewer.SelectedEmblem (ownership-validated) gamer147 2026-06-13 08:16:19 -04:00
  • bc110e2274 feat(emblem): /emblem/favorite accept-only (persistence deferred) gamer147 2026-06-13 08:15:29 -04:00
  • 921297227e feat(emblem): /emblem/emblem_list returns owned ids gamer147 2026-06-13 08:14:36 -04:00
  • c5c61b6e9d feat(degree): /degree/update_degree sets viewer.SelectedDegree (ownership-validated) gamer147 2026-06-13 08:13:49 -04:00
  • 356e58ba25 feat(degree): /degree/favorite accept-only (persistence deferred) gamer147 2026-06-13 08:12:02 -04:00
  • 68741b2980 feat(degree): /degree/degree_list returns owned ids gamer147 2026-06-13 08:11:13 -04:00
  • 025c2a8c56 feat(mission): /mission/receive_reward stub (refresh-only, no decomp) gamer147 2026-06-12 23:33:50 -04:00
  • e54e63a762 feat(mission): /mission/buy_additional_right stub (refresh-only, no decomp) gamer147 2026-06-12 23:29:55 -04:00
  • 30b8af2d16 feat(pack): /pack/get_leader_skin_owned_status (empty per-class buckets) gamer147 2026-06-12 23:26:29 -04:00
  • c870b95be9 feat(sleeve): /sleeve/favorite accept-only (persistence deferred) gamer147 2026-06-12 23:22:25 -04:00
  • f879c05dca feat(sleeve): /sleeve/sleeve_list returns owned ids gamer147 2026-06-12 23:17:10 -04:00
  • e2f5786b60 feat(mypage): /mypage/get_special_crystal_info (empty — no offers) gamer147 2026-06-12 23:12:49 -04:00
  • 43e4c06a2c feat(mypage): /mypage/finish_battle (returns check=0 — no in-flight state yet) gamer147 2026-06-12 23:08:42 -04:00
  • b4a87792dc feat(account): /account/update_region_code (accept-only) gamer147 2026-06-12 23:01:53 -04:00
  • 56ef994275 style(profile): drop file-path header comments from quick-wins task 1 gamer147 2026-06-12 22:59:35 -04:00
  • 398764a4cc feat(profile): /profile/update_official_mark_display gamer147 2026-06-12 22:54:52 -04:00
  • 37cb8b5eeb test(free-battle): literal-prod-JSON parity for /do_matching gamer147 2026-06-12 21:30:19 -04:00
  • 55ec279f73 test(free-battle): force_finish no-op returns empty object gamer147 2026-06-12 21:29:52 -04:00
  • 31ecda95f7 test(free-battle): consistency battle_result echoes on rotation URL gamer147 2026-06-12 21:29:26 -04:00
  • 523ac605a1 test(free-battle): /finish echoes battle_result with no rank fields gamer147 2026-06-12 21:29:02 -04:00
  • 487a86fbbb test(free-battle): 3001 when viewer has no deck for format gamer147 2026-06-12 21:28:35 -04:00
  • db298a0652 test(free-battle): two-viewer PvP pairing flow gamer147 2026-06-12 21:28:00 -04:00
  • 4a09b03820 test(free-battle): DoMatching first poll returns 3002 gamer147 2026-06-12 21:27:33 -04:00
  • 3e58fbb650 feat(free-battle): FreeBattleController + routing smoke tests gamer147 2026-06-12 21:24:02 -04:00
  • 84760490e7 feat(free-battle): register PvpOnly ModePolicy for rotation+unlimited gamer147 2026-06-12 21:17:24 -04:00
  • 1054c86038 feat(free-battle): add FreeBattleFinishResponseDto gamer147 2026-06-12 21:17:04 -04:00
  • 36eb25da44 feat(free-battle): add FreeBattleFinishRequestDto gamer147 2026-06-12 21:16:47 -04:00
  • 1a55561c5d feat(free-battle): add DoMatchingResponseDto gamer147 2026-06-12 21:16:20 -04:00
  • fe9ec1fc68 feat(free-battle): add DoMatchingRequestDto gamer147 2026-06-12 21:15:59 -04:00
  • d0d6a6916c fix(card-master): wire EnableServing kill switch in controller + add to config-section test gamer147 2026-06-12 12:52:06 -04:00
  • b4a279ef0c feat(load-index): emit data.card_master_hash on mismatch (tier-1 freshness gate) gamer147 2026-06-12 12:27:40 -04:00
  • 92a21e7a7a test(routing): cover /immutable_data/card_master routing gamer147 2026-06-12 12:20:46 -04:00
  • 6eb4547866 fix(card-master): 500 not 503 when blob missing; explicit test-project copy link gamer147 2026-06-12 12:19:37 -04:00
  • d74bae9ba0 feat(card-master): implement POST /immutable_data/card_master serving captured blob gamer147 2026-06-12 12:11:15 -04:00
  • 29f1cdd7d5 fix(card-master): make CardMasterRequest.CardMasterHash non-nullable to match wire spec gamer147 2026-06-12 12:09:13 -04:00