fix(state): quests 的 SetNotCompletedQuests 实际是 no-op(动作字段与 cd 同为 undefined)

This commit is contained in:
TermiNexus committed 2026-10-24 13:14:28 +08:00
1 parent 81668b0a2e
commit df179dea51
5 files changed
+12 -9

No files matched your search

+2 -1
View File
@@ -221,7 +221,8 @@
缺省 `currentSection=SPECIAL`、`currentCategory=null`、`isNotCompletedQuests=false`。
`GoTo` 到 `tX`(`QuestCategoryScreen(section, categoryId)`)时切到目标分区,到 `nX`(`ChallengeScreen`)时切 `CHALLENGE`;
原包那条分支还会发 `Wrt(QuestsChangeCategory)` 命令,属于副作用,留给中间件层。
`Hrt` 类体为空、reducer 读的 `t.iu5_1` 是 `undefined`,Kotlin 侧按 `SetNotCompletedQuests` 收口为 false。
`Hrt` 类体为空、reducer 读的 `t.iu5_1` 是 `undefined`(`cd` 也是 `undefined`),三个 copy 参数全走默认值,
这一支实际是 no-op;Kotlin 侧保留 `SetNotCompletedQuests` 动作但归约时原样返回。
`tX` / `nX` 是屏幕标识类,已从动作表剔除并记入 `Markers`(`screen-id-class`)。
- `launchParams` → `(pass-through)`:原根 reducer 对 `hpx_1` 没有调用,缺省是 `ag()` 空 Map;
`RootState.LaunchParams` 收口为 `LaunchParamsStateSlice = Map<String, String>`,不新增 reducer/动作。
+2 -2
View File
@@ -1,5 +1,5 @@
{
"generatedAt": "2026-10-24T04:49:01.300Z",
"generatedAt": "2026-10-24T05:13:42.080Z",
"module": "module_10032.js",
"RootState": {
"Class": "z6",
@@ -659,7 +659,7 @@
"Local": "Hrt",
"Name": "SetNotCompletedQuests",
"DispatchedAt": "未在 action_trace_merged.json 中出现;按 reducer 分支效果定名",
"Effect": "isNotCompletedQuests = action.isNotCompletedQuests(`n.au5(cd, cd, t.iu5_1)`;动作类无字段,原包写入 undefined,Kotlin 侧收口为 false)"
"Effect": "状态不变(`n.au5(cd, cd, t.iu5_1)`;动作类无字段,`t.iu5_1` 与 `cd` 都是 undefined,三个参数全走默认值 → no-op)"
}
],
"Markers": [
+1 -1
View File
@@ -756,7 +756,7 @@ const NotificationsAnonymousEffects = {
// quests 切片(Frt / Yrt.otg):没有 toString / 不在 action_inventory 的类,按 reducer 分支效果定名。
const QuestsAnonymousEffects = {
Hrt: 'isNotCompletedQuests = action.isNotCompletedQuests(`n.au5(cd, cd, t.iu5_1)`;动作类无字段,原包写入 undefined,Kotlin 侧收口为 false)',
Hrt: '状态不变(`n.au5(cd, cd, t.iu5_1)`;动作类无字段,`t.iu5_1` 与 `cd` 都是 undefined,三个参数全走默认值 → no-op)',
};
fs.writeFileSync(
@@ -25,8 +25,9 @@ import App.State.SetCurrentCategory
/* ------------------------------------------------------------------ 匿名动作 */
/**
* 原 `Hrt`:类体为空,reducer 读的 `t.iu5_1` 恒为 undefined。
* 原包的实际效果是把 isNotCompletedQuests 置成假值,这里按 false 收口。
* 原 `Hrt`:类体为空、没有字段,reducer 读的 `t.iu5_1` 是 `undefined`。
* 原包的 `cd` 就是 `undefined`,所以 `n.au5(cd, cd, t.iu5_1)` 三个参数都走默认值,
* 这一支实际是 **no-op**(状态不变)。Kotlin 侧保留动作类以维持动作目录,归约时原样返回。
*/
object SetNotCompletedQuests
@@ -45,7 +46,8 @@ fun ReduceQuests(
Action: Any,
): QuestsStateSlice = when (Action) {
is SetCurrentCategory -> State0.copy(CurrentCategory = Action.currentCategory)
is SetNotCompletedQuests -> State0.copy(IsNotCompletedQuests = false)
// 原包这一支读的是动作上不存在的字段(undefined === cd),三个参数全走默认值 → no-op。
is SetNotCompletedQuests -> State0
// 原包的 QuestCategory 分支还会 `u.uar(new Wrt(currentScreen, currentCategoryId, section))`
// 发一条 QuestsChangeCategory 命令;那是副作用,不属于纯状态归约,等中间件层再补。
is GoTo -> when (val Screen = Action.screen) {
@@ -3063,8 +3063,8 @@ object StateCheck {
ReduceQuests(S0, SetCurrentCategory("cat-1")).CurrentCategory == "cat-1"
)
Check(
"切片 Quests:SetNotCompletedQuests 收口为 false",
!ReduceQuests(QuestsStateSlice(IsNotCompletedQuests = true), SetNotCompletedQuests)
"切片 Quests:SetNotCompletedQuests 读了不存在的字段,实际是 no-op",
ReduceQuests(QuestsStateSlice(IsNotCompletedQuests = true), SetNotCompletedQuests)
.IsNotCompletedQuests
)
Check(