# Task ID: 10-a — 限时挑战 + 星潮类型深化 **Agent**: full-stack-developer **Task**: 工单 #5 限时挑战 + 工单 #3 星潮类型深化 ## Work Log ### 前置准备 - 阅读 `worklog.md` 了解 v0.8.1 项目状态(10 大系统,四色全息 emerald/rose/amber/fuchsia) - 精读 `beacon.ts`(873 行,日挑战+周挑战+信标链)、`BeaconPanel.tsx`(753 行)、`starTide.ts`(209 行,6 种星潮)、`gameStore.ts` trackBeacon(~170 行)+ tickTide(~440 行) - 确认现有 UI 均动态读取 `TIDE_EVENTS[type]`,新增类型自动生效 ### 工单 #5:限时挑战(Timed Challenge) **beacon.ts 扩展**(873 → 1162 行,+289 行): - `BeaconScoreEntry` 新增 `isTimed?: boolean` 字段 - `BeaconTimedChallenge` 接口:slotKey / type / difficulty(固定 routine) / goal / rewardInsight / rewardContact / seed / title / desc / expiresAt - `BeaconTimedProgress` 接口:slotKey / progress / startedAt / completedAt / claimed / durationSec - `TIMED_SLOT_MS = 4h`,`BEACON_TIMED_KEY = "echo-nexus-beacon-timed-v1"` - `getTimedSlotKey(now)`:UTC 0/4/8/12/16/20 点切分,格式 "timed_YYYY-MM-DD_HH" - `timedSlotKeyToSeed`:FNV-1a 哈希 - `generateTimedChallenge(now)`:确定性生成,难度 routine,goal = 日基准 ×0.3-0.5,5 种类型各有公式 - `msUntilNextTimedSlot(now)`:距离下个 4 小时时段的毫秒数 - `loadTimedProgress` / `saveTimedProgress` / `addTimedProgress` / `claimTimedReward`(推送排行榜,entry 加 isTimed: true) **gameStore.ts 集成**: - import 扩展:generateTimedChallenge / loadTimedProgress / addTimedProgress / claimTimedReward + 类型 - `trackBeacon` 返回值新增 `timedJustCompleted`:日/限时/周三类进度同时更新 - 新增 `claimTimedBeacon` action(GameActions 接口同步) - 新增 `timedJustCompleted` 到 trackBeacon 返回类型 **BeaconPanel.tsx UI**(753 → 944 行): - import 扩展:generateTimedChallenge / loadTimedProgress / getTimedSlotKey / msUntilNextTimedSlot / Hourglass 图标 - 新增 timedChallenge/timedProgress/timedCountdown state - 每秒刷新 timedProgress + timedCountdown - 新增 handleClaimTimed 回调 - **限时挑战区块**(amber 主题,插入日挑战与周挑战之间): - Hourglass 图标 + "限时挑战 · TIMED" 标题 + slotKey + 倒计时 - 难度/类型标签 + 标题 + 描述 + 进度条 + 奖励 + 领取按钮(emerald 主题) - **紧急状态**:距时段结束 <30min 时切换 rose 脉冲动画 + "即将结束"徽章 - 2 个新动画:timed-glow(amber 呼吸)/ timed-urgent(rose 急促脉冲) - 排行榜 entry 区分 TIMED(amber 徽章)/ WEEK(fuchsia 徽章) - 空状态提示更新为"完成限时、每日或本周信标即可登榜" ### 工单 #3:星潮类型深化 **starTide.ts 扩展**(209 → 289 行): - `TideType` 新增 3 种:surge / eclipse / prism - `TideModifiers` 新增 3 个可选字段:targetLenBonus / bossWinRateBonus / autoDecodeIntervalMult - `TIDE_EVENTS` 新增 3 种元信息(name/desc/color/glow/icon/negative): - surge(涌动星潮,emerald #34d399,⇈):产能 ×2.5 但解码目标 +2 - eclipse(蚀相星潮,rose #fb7185,◐):BOSS 胜率 +20% 但产能 -30% - prism(棱镜星潮,fuchsia #e879f9,◬):洞见 ×2 + 自动解码周期 -30% - `TIDE_WEIGHTS` 新增 surge/eclipse/prism 各 12(总权重 136) - `getTideModifiers` 新增 3 个 case + null 分支补全新字段 - 注释更新:"6 种类型" → "9 种类型" **decode.ts 扩展**: - `generatePuzzle` 新增第 3 参数 `targetLenBonus`(默认 0) - targetLen = cfg.targetLen + targetLenBonus,stepLimitBase 同步增加 - 路径构造法自动适配更长目标序列(300 次尝试 + 线性兜底) **gameStore.ts 集成**(3 处修饰器应用): - `startDecode`:surge 星潮时传入 `tideMod.targetLenBonus` → 谜题更长 - `autoDecodeTick`:prism 星潮时 `interval *= tideMod.autoDecodeIntervalMult`(×0.7) - `resolveCurrentNode`:eclipse 星潮时 `b = am.bossWinRateBonus + tideMod.bossWinRateBonus`(+20%) **achievements.ts**:`ach_tides_all` 阈值 6 → 9,描述"经历全部 9 种星潮事件" **page.tsx**:StatsPanel "星潮亲历" 显示 `/ 9` ### QA 验证 1. **lint**:`bun run lint` 零错误(exit 0) 2. **dev 服务器**:HTTP 200,编译 < 30ms 3. **BeaconPanel VLM 评分**: - 首屏 8.5/10:限时挑战 TIMED 区块可见、四色一致、倒计时/进度/标题/奖励/按钮清晰 - 最终截图 9/10:4 个挑战区块齐全、限时区块带倒计时、无蓝色 4. **新星潮 VLM 评分**(localStorage 注入 + reload 触发): - surge(emerald 绿):8/10,横幅 + 全屏绿色微光 - prism(fuchsia 紫):7/10,横幅 + 全屏紫色微光 - eclipse(rose 粉):8/10(单图),横幅 + 全屏粉色微光 5. **不破坏现有功能**:日挑战/周挑战/信标链/6 旧星潮全部保留,排行榜正常 ## Stage Summary - ✅ 工单 #5 限时挑战完成:beacon.ts +289 行 + gameStore claimTimedBeacon + BeaconPanel amber 区块 - ✅ 工单 #3 星潮深化完成:starTide.ts +80 行(3 新类型)+ decode.ts targetLenBonus + gameStore 3 处修饰器 - ✅ 确定性生成:限时挑战同时段同种子同结果(FNV-1a slotKey 哈希) - ✅ 严格四色规范:限时 amber、surge emerald、eclipse rose、prism fuchsia,零蓝色/靛色 - ✅ 紧急状态设计:限时挑战 <30min 时 rose 脉冲 + "即将结束"徽章 - ✅ lint 零错误 + dev HTTP 200 + VLM ≥7/10(信标 9/10、surge 8/10、prism 7/10、eclipse 8/10) - ✅ 现有日/周/信标链/6 旧星潮全部保留,无回归