TermiNexus
|
2f38609a98
|
feat(state): 迁移 clan(36 字段 / 43 动作)
|
2026-10-24 22:05:19 +08:00 |
|
TermiNexus
|
ad5686241d
|
feat(state): 迁移 clansStorage(复用 ClanInfo 模型)
|
2026-10-24 21:58:43 +08:00 |
|
TermiNexus
|
25f8cd431e
|
feat(state): 迁移 challenges(复用 Challenge 模型)
|
2026-10-24 21:26:43 +08:00 |
|
TermiNexus
|
7d1c808af9
|
feat(state): 迁移 battleUsers(复用 RemoteUserData/UserStat/TankInfoCC)
|
2026-10-24 21:21:36 +08:00 |
|
TermiNexus
|
cd597b4693
|
feat(state): 迁移 battlesSelect(复用 BattleParams/BattleInfoUser)
|
2026-10-24 21:03:47 +08:00 |
|
TermiNexus
|
71aa9a5256
|
feat(state): 迁移 matchmaking
|
2026-10-24 20:42:01 +08:00 |
|
TermiNexus
|
9e51b695aa
|
feat(state): 迁移 remoteUserDataStorage(复用 RemoteUserData 协议模型)
|
2026-10-24 20:23:50 +08:00 |
|
TermiNexus
|
5327312b13
|
feat(state): 迁移 battleChat(复用 ChatMessage 协议模型)
|
2026-10-24 20:08:24 +08:00 |
|
TermiNexus
|
8dac8d96e8
|
feat(state): 迁移 maps 并补地图描述协议模型
|
2026-10-24 19:56:41 +08:00 |
|
TermiNexus
|
9cf760b354
|
feat(state): 迁移 battleMessage 并补战斗消息协议模型
|
2026-10-24 19:46:20 +08:00 |
|
TermiNexus
|
0cd2a23c9e
|
feat(state): 迁移 tankBuilderState
|
2026-10-24 17:42:50 +08:00 |
|
TermiNexus
|
6a1c8b4306
|
feat(state): 迁移 contractState
|
2026-10-24 17:30:56 +08:00 |
|
TermiNexus
|
0d1e2d00c5
|
feat(state): 迁移 graphicsSettings/controlSettings/battleSettings
|
2026-10-24 17:24:01 +08:00 |
|
TermiNexus
|
cade4020a5
|
feat(state): 迁移 soundSettings/gameSettings/keyboardSettings/touchscreenHudSettings
|
2026-10-24 17:13:24 +08:00 |
|
TermiNexus
|
86979eb168
|
feat(state): 迁移 battleStatistics
|
2026-10-24 16:55:21 +08:00 |
|
TermiNexus
|
4aec83f684
|
feat(state): 迁移 clanChatState/battleSearchState
|
2026-10-24 16:45:20 +08:00 |
|
TermiNexus
|
38ec7fa28e
|
feat(state): 迁移 battlePauseState/battleViewState/tankActionsLogState/suppliesTutorial
|
2026-10-24 16:33:38 +08:00 |
|
TermiNexus
|
0183f191d3
|
feat(state): 迁移 friends/suppliesState/clanUserInfo/battleInviteState/partner/userRenameState
|
2026-10-24 16:00:39 +08:00 |
|
TermiNexus
|
af005ab019
|
feat(state): 迁移 system/contextTutorial/battleTutorial/spectator/twoStepVerificationState/antiAddiction/moderation/migrationState/register/userReportsState
|
2026-10-24 15:32:47 +08:00 |
|
TermiNexus
|
8633fc91c1
|
feat(state): 迁移 tipsState/rankUpDialogState/battleResult/captchaState/modalScreen/droppableGold/eventGoods/creatorTagState/rewardedVideosState/passwordChangeState
|
2026-10-24 14:43:51 +08:00 |
|
TermiNexus
|
6d2487d9ea
|
feat(state): 迁移 icons/questCategories/mainQuest/securitySettings/referralEvent
|
2026-10-24 14:12:19 +08:00 |
|
TermiNexus
|
49e8c1efc4
|
feat(state): 迁移 lobbyLoader/purchaseDialogState/promoCode/supportUrl/rulesUpdated/notificationByCountry/availabilityByRank
|
2026-10-24 13:29:41 +08:00 |
|
TermiNexus
|
df179dea51
|
fix(state): quests 的 SetNotCompletedQuests 实际是 no-op(动作字段与 cd 同为 undefined)
|
2026-10-24 13:14:28 +08:00 |
|
TermiNexus
|
81668b0a2e
|
feat(state): 迁移 news/notifications/quests 切片
|
2026-10-24 13:05:13 +08:00 |
|
TermiNexus
|
006e6a7ebd
|
feat(state): 批量迁移 accountSettings/proBattle/language/announcement 切片
|
2026-10-24 12:19:13 +08:00 |
|
TermiNexus
|
6947fcb567
|
feat(state): 迁移 settings 切片(2 字段 / 2 臂)
|
2026-10-23 17:20:56 +08:00 |
|
TermiNexus
|
9b3e76d42d
|
feat(state): 迁移 user 切片(32 字段 / 28 臂)
|
2026-10-23 16:36:23 +08:00 |
|
TermiNexus
|
77a90fdfff
|
feat(state): 迁移 entrance 切片(8 字段 / 7 臂)
|
2026-10-23 15:47:18 +08:00 |
|
TermiNexus
|
435cd3191e
|
feat(state): 收口 launchParams 切片为强类型透传(11/89)
|
2026-10-23 15:29:05 +08:00 |
|
TermiNexus
|
1194c395b4
|
feat(state): 迁移 garagePreview 切片(22 字段 / 25 分支)
|
2026-10-23 15:12:10 +08:00 |
|
TermiNexus
|
3c0ed0a998
|
feat(state): 迁移 garage 切片(31 字段 / 60 分支)
|
2026-10-23 13:58:47 +08:00 |
|
TermiNexus
|
f66f431670
|
feat(state): 迁移补给箱切片(18 个动作 + ContainerType)
|
2026-10-23 12:25:43 +08:00 |
|
TermiNexus
|
974a9f49ad
|
feat(state): 迁移屏幕导航切片(13 个动作 + ScreenId)
|
2026-10-23 03:28:57 +08:00 |
|
TermiNexus
|
b7afe07894
|
test(state): 用真实派发样例回放商店切片
|
2026-10-23 02:38:36 +08:00 |
|
TermiNexus
|
94374d2f36
|
feat(state): 全量迁移商店切片(69 个动作 + U7/w3 子状态)
|
2026-10-23 02:13:31 +08:00 |
|
TermiNexus
|
86d79eddad
|
feat(state): 迁移 home 与 localBattleUserState 两个内联切片
|
2026-10-23 01:24:21 +08:00 |
|
TermiNexus
|
f373c2053e
|
feat(state): 按效果为无 toString 的 o1 定名 ShowShopDiscountNotification
|
2026-10-23 01:19:35 +08:00 |
|
TermiNexus
|
d5098cc782
|
feat(state): 4 个内联 IIFE 切片按字段具名并补动作名
|
2026-10-23 00:56:50 +08:00 |
|
TermiNexus
|
fdc516b7f3
|
feat(state): 迁密码登录与 Twitch 切片,拼出 89 槽位根 reducer
|
2026-10-23 00:38:10 +08:00 |
|
TermiNexus
|
c280f2a2a1
|
feat(state): 迁移登录邀请切片 reducer(InviteState)
1) 动作在 Kotlin 侧不再要求公共基类:原包动作也没有基类,Store/Gateway 改用 Any,817 个生成类无需实现接口。
2) 新增 App/State/Reducers/InviteReducer.kt,逐条对照 module_10032:状态 aD=InviteState(isInviteNeed, invite, status, existsUid, inviteAccepted)、枚举 lD=InviteStatus(UNKNOWN/FREE/NOT_FOUND/ALREADY_ACTIVATED)、reducer pD.er5 的三条分支。默认值取自构造函数(isInviteNeed 默认 true、invite 默认空串、status 默认 UNKNOWN、inviteAccepted 默认 false)。
3) 自检 19 增到 26 项:默认值、三条动作分支(含 FREE 推导 inviteAccepted、ApplyInvite 重置 status/existsUid)、无关动作不动、接 Store 派发后归约。
结果:TANKIOFFLINE_STATE_TEST=1 全通过。
|
2026-10-23 00:05:58 +08:00 |
|
TermiNexus
|
b7dea52f03
|
feat(state): 用 138 条真实 dispatch 样例回放校验动作目录
1) analyze_action_trace 保留每个动作的第一行原始 toString(Samples),并新增两条类型规则:见过 [object Object] 记为 Opaque(运行时说不出类型,但不能再让调用点猜);字段只要出现过 null 就补可空后缀(Long?/List<String>?)。
2) gen_action_kt 产出 ActionSamples.kt;可选类的判定改用「样例那一行的字段集」,修掉 Configure 选错行(1 字段的 config 版 vs 12 字段的真实版)。
3) 自检加两组:回放对照(138 个动作 × 真实字段值,缺类/缺字段/类型不符三项必须为 0)+ 全目录 817 个动作类注册并验证只路由命中项。
结果:19 项全通过;缺类 0 / 缺字段 0 / 类型不符 0。过程中修出 8 处错型:6 个 Opaque 字段曾被误判成 Long,4 个字段缺少可空性。
|
2026-10-22 14:36:33 +08:00 |
|
TermiNexus
|
74bf01c0f8
|
feat(state): 生成动作目录 ActionCatalog,把 817 个类与实际 dispatch 名对上
1) gen_action_kt 现在额外产出 App/State/ActionCatalog.kt:817 条(816 个 module_10032 数据类 + module_10849 的 InitState),每条带类引用与字段类型。
2) State 模块补 InitState(type, action):原 module_10849 的 ct,toString 证据为 InitState(type=…, action=…)。
3) 自检从 10 项扩到 15 项:目录非空、名字唯一、每个条目能拿到 KClass、运行时打点过的 135 个动作名 0 缺口、ByName 与 All 对齐。
结果:TANKIOFFLINE_STATE_TEST=1 全通过(目录 817 条;打点动作名 135 个;缺口 0)。
|
2026-10-22 12:52:18 +08:00 |
|
TermiNexus
|
a64530761b
|
feat(state): 移植 Redux 内核(Store/中间件/网关)并加 10 项自检
对照 module_10849 的 toString 证据实现:vt=ReduxStore(归约+监听器+中间件链)、yt=ReduxToModelGateway(按动作类先通知、再交给 Store;模型/键/游戏对象三级订阅,重复订阅 fail-fast)。
自检 TANKIOFFLINE_STATE_TEST=1:归约累加、通知次数与新状态可见性、中间件由外向内顺序、动作监听器先于归约、模型订阅/退订、重复订阅抛错、派发经过调度器,共 10 项全通过。
state 模块补 js(IR){browser();nodejs()} 使 :app 可依赖;新增 tools/RunStateTest.ps1。
|
2026-10-22 12:47:51 +08:00 |
|
TermiNexus
|
7d8ceedee2
|
fix(state): 布尔判定只在顶层生效,清掉 223 个假 Boolean
1) 旧规则只要表达式里出现 ===/>= 之类就判 Boolean,导致 (i = i === cd ? null : i) 这类『赋值+三元』被当成布尔,realName/battleId/mapName 都被误判成 Boolean。新增 Booleanish:去外层括号、剥离顶层赋值取右值、遇三元直接放弃、只认顶层比较/取反/equals。
2) 运行时类型若为 Any?/List<Any?>/Map<String, Any?>(本身没信息,例如值全是空列表),不再挡住调用点推断。
3) analyze_action_trace 支持 Kotlin 默认 toString 形态 Name [a = 1 b = X],从抽样里多解析出 40 个模型类(TankResistance/Range/TemporaryItemCC/UserPropertiesCC…),并让空容器的『元素未知』不参与冲突判定(List<Any?> + List<Long> → List<Long>)。
4) 新增 --why <类.字段> 排查错型:打印每个调用点的实参与推断结果。
结果:已定类型 707 → 493(真实原因是那 223 个是错型);嵌套对象类 3 → 43(235 个字段已定类型);与运行时真值冲突 6 → 2。
|
2026-10-21 22:10:09 +08:00 |
|
TermiNexus
|
c957f742b1
|
feat(state): 按运行时 toString 样例生成嵌套对象类
1) analyze_action_trace 现在会递归解析动作 toString 里的对象值(Name(a=1, b=Xxx(...))),输出 Models 表:12 个对象类、92 个字段,字段名与类型都来自真实 dispatch 样例。
2) gen_action_kt 据此处理三类情况:①已有同名数据类且字段覆盖运行时字段 → 直接复用(并把它选为该名字的代表行,修复 Challenge 误选 1 字段版的问题);②同名但字段对不上 → 放弃;③无同名类 → 现生成 data class(Coloring / EmissionColors / TextureFrameAnimation)。
3) 动作字段遇到已确认的对象类时按类名定型,不再退化成 Any?;Kotlin 关键字做属性名时加反引号。
|
2026-10-21 22:05:51 +08:00 |
|
TermiNexus
|
5e93ba6f47
|
feat(state): 数据流覆盖匿名函数/IIFE/原型方法,剔除 copy 转发噪声
1) 作用域索引从「具名 function」扩到三类:具名函数、赋值到原型的方法(ld(Cls).m = function)、IIFE((function(t){...})(a,b));形参解析按由内向外逐层尝试。
2) 关键修正:Kotlin 给 data class 生成的 copy/with(原型方法里 return new Cls(同名形参…))是循环证据,不能当类型依据。剔除后覆盖率从虚高的 1185(55.7%) 回落到 689(32.4%),被剔除的 497 个字段标注为「仅 copy 转发(无类型信息)」。
3) 新增 --stats:输出仍认不出的实参形态分布,便于决定下一条规则。
4) 与 158 个运行时真值对比仍无新增冲突(保持 3 处真实分歧:AddBattle.suspicionLevel / UpdateEventPass.eventPassEndTime / SetDrone.resource)。
|
2026-10-21 21:42:17 +08:00 |
|
TermiNexus
|
b77e11ad30
|
feat(state): 静态数据流补类型,调用点按「动作名|局部类名」分桶
1) gen_action_kt 加纯静态局部数据流:实参是变量时,按「形参 → 调用点」和「函数体内最近一次赋值」回溯,深度 2、多来源冲突即放弃;新增 --audit 用运行时真值反向校验推断规则。
2) 调用点改为按「动作名|局部类名」索引。此前按名字索引,同名不同类(Init 有 1 字段版与 18 字段版)互相串味,导致推断出与运行时真值冲突 13 处;分桶后冲突降到 6 处(其中 3 处是运行时未定类型)。
3) analyze_action_trace 修 [object Object] 被当成 List<String> 的误判;客户端每次上报的是本页累计缓冲,页面刷新会覆盖成小文件,改为并入 action_trace_merged.json,只增不减。
结果:已定类型字段 361 → 722(runtime 158 / callsite 196 / dataflow 368),无调用点字段 12,未收录模型类型 37,compileKotlinJs 通过。
|
2026-10-21 20:33:53 +08:00 |
|
TermiNexus
|
a0466b6544
|
feat(state): 调用点扫描补上 module_10032 内部构造
此前只扫跨模块的「别名 = dep.\\$.导出键」再 new,10032 内部动作互相 new 的 666 处全漏(215 个类里 212 个因此被判成无调用点)。改为先按局部类名直扫 10032,再扫其它模块。
结果:有调用点的类 639 → 861/864,调用点 1515 → 2181,已定类型字段 306 → 361(runtime 162 / callsite 199),无调用点字段 983 → 12,compileKotlinJs 通过。
|
2026-10-21 20:23:58 +08:00 |
|
TermiNexus
|
37be0e2418
|
chore(trace): 在 ReduxToModelGateway.dispatch 打点动作 toString
yt.uar 是全包唯一的真实 dispatch 入口;动作类 toString 形如 SetFragsCount(fragsCount=3),据此反推动作名/字段名/字段值类型(action_trace.json)。打点只在镜像副本里,落地走 /__dump__/action_trace.json。
|
2026-10-21 20:20:08 +08:00 |
|
TermiNexus
|
85f180f331
|
feat(state): 生成 10032 动作/状态层 Inventory.kt(运行时类型优先)
- 新增 extract_action_inventory / infer_action_types / analyze_action_trace / gen_action_kt 四个工具
- extractor 支持 return ( 换行形式,类数 619 → 864(唯一名 816,字段 2129)
- 生成器按「运行时 dispatch 打点 > 调用点字面量 > 协议字段表」定类型,认不出写 Any? 并留证据
- 修掉两处会生成非法 Kotlin 的问题:逗号落在注释内、运行时 JS 模型名被当成 Kotlin 类型
- 结果:306/2129 字段已定类型(runtime 162 / callsite 144),compileKotlinJs 通过
|
2026-10-21 20:19:53 +08:00 |
|