diff --git a/production/session-state/active.md b/production/session-state/active.md index 2e8a55f2..8724f737 100644 --- a/production/session-state/active.md +++ b/production/session-state/active.md @@ -12,6 +12,8 @@ ## 当前状态快照(收口批先更新本节,再追加台账;≤10 行) +- **更新于**:2026-09-21(**放弃入口界面呈现批 + 台账 117 七项代拍板确认**,worktree abandon-entry-20260921,台账 119):用户逐项裁决——①单关入口取消认可;⑦推翻改「放弃接口也要有」=选路覆盖层常驻「放弃冒险」按钮(选路停点=天然非战斗期;只在冒险模式开放,单关测试直入口关;战斗中拒绝转防御分支+toast 可见);②-⑥认可生效;顺手收口=终局兜底 route_overlay 收层改走模态栈(放弃时选路层在开态,须恢复遮挡面——close 容错未开过场景)。冒险结构.md v0.7(正文改现行口径+P1「放弃入口呈现」「两关序列生效」两行移除——后者系 117 漏收口顺手同口径);roadmap 时间线补 09-18/09-19 缺行。冒烟 518 项 0 失败三闸全过(新基线零增量断言)+四探针 PASS(ui_probe 新增放弃三断言:默认隐藏/冒险模式可见/首战中按下被拒 state 保持 running)+doc 三闸一致(死链 7=7 既有、链接 789→791 全为有效新链) +- **更新于**:2026-09-21(**存档序列化批**,worktree save-serialization-20260921,台账 118):SaveManager 落地(Core 层零 UI 零玩法依赖)——单档 JSON `user://save.json` 读写/版本迁移骨架(高版本拒读禁写/低版本链式迁移 register_migration)/损坏 .corrupt.bak 兜底/tmp+rename 原子写 + 存档域首批内容(元进度四件:钥石余额/锻造三档/通关次数/首杀标记 + 冒险摘要 cap 10)+ 类型化访问器与 apply_adventure_summary 原语;main.gd 挂点 = 启动读盘(兜底内聚不阻断)+ 冒险收束写盘(L2/L3 直入口与调试两层不写档——契约 7 结构性成立);存档序列化.md 升 **v1.0 定稿**(待设计六问全处置)+ registry save_file 逐域登记 + 06 条目解决移除;**代拍板 8 条待确认**(规划书 §7:JSON 单档/收束+营地即时写/拒读禁写/损坏备份/cap10/单档 MVP/迁移链钩/测试入口不写档;另登记计划书 registry 条目名冲突 save_format_version→实名 schema_version);开局遇 B1 未落 master 挂起待续,B1 落籍(4f7f25d)后分支吸并续完。冒烟 437→518 项 0 失败三闸全过+四探针 PASS+doc 三闸与 master 对账一致+MC 20 种子与 master 逐位一致(零玩法改动证明);花钥石消费面归元进度批(B3 已解阻塞) - **更新于**:2026-09-21(**冒险结构实现批——三关正式序列生效**,worktree adventure-structure-20260921,台账 117):按用户规划书(.zcode/plans/adventure-structure-batch-plan-2026-09-21.md)T0–T9 执行——切片从三个单关 demo 升级为一局完整三关冒险:AdventureTable 建表(adventure.tres 10/10)+AdventureRunner 新建(主种子恰一次/生命账本/GP 冒险账本/统一加算区/大奖励非末关恰兑付/三结局摘要五件事)+LevelRunner 账本外置(hero_hp/gp 属性化共享账本,接口漂移①②③⑥⑦清偿)+首页「开始冒险」三关连探(大奖励屏+冒险结算屏);06 三条目解决移除(两关序列未生效/接口漂移/冒险表未建表)。代拍板七项按规划书 §7 采行待确认(详见台账),规划书冲突按代码为准三处登记。冒烟 437→482 项 0 失败三闸全过+四探针 PASS;MC 回归逐位一致(旧单关路径零行为变更证明);文档三工具与基线一致 - **更新于**:2026-09-20(**GP+商店房实施批(L3-A 玩家成长批)**,worktree gp-shop-20260920,台账 116):用户六问裁决落地——①GP 进格面第九型(金币袋 weight 2 power 3 低概率惊喜+破财字典负向行,正向合计 76);②掉落=均值±方差掷定(普通 3[2,4]/Boss 8[6,10]/精英 5[4,6] 预留)+关级加值(L2 +1/L3 +2),gp_drop 新封闭流(黄金向量已登);③记账=战斗完成统一到账,格面兑付走战斗内缓冲 escrow 与钱包隔离;④商店房 Boss 前一位必经位(哈迪斯式,L2/L3 行集 Boss 重编号 8→9);⑤统一冒险加算区(商店购买与大奖励同账,购血上限当前同步);⑥三商品全陈列无刷新无三选一,价格=基价+关级加成+步长×已购档;数值/分层验收整体后置归曲线调参批(骨架先行)。冒烟 437 项 0 失败+三探针 PASS;GDD 八文档(关卡节点地图 v1.1 五类枚举/冒险结构 v0.5 GP 账本/战斗结算 v0.23/地图战斗资源 v0.15 九型/曲线 v0.18 杠杆登记/元进度 v1.2/03 v0.7/05 红线例外成文)+06 GP 条目收口+「关卡结构随机生成」方向观察登记 - **更新于**:2026-09-20(**第三关内容批 + GP 定稿提案批**,worktree l3-content-20260920,台账 115〔113/114 号让给并行在飞会话两批,顺延让号〕):L3-B 落地——第三层「灰矮人矿城」行集(enemy 七行 duergar/hook_horror/duergar_king + board 13×13/Boss 14×14 词表值 deep_underdark + 九节点图 + 落石/矿尘 + 大地脉动=sapped 首发)+ 关卡 3 测试直入口 + 冒烟 375 项全绿 + registry 五条目 + GDD 五文档(03 v0.6/曲线 v0.17/棋盘生成 v0.4/地形变异 v0.4/06 GP 条目立项提前);板形验算 13/14×14 推理率 0.94–0.96 全达标零降档;MC 读数:零成长基线普通 16%/完美 20%(N=300,死亡 75–80% 集 Boss——预案「必红」预判被棋盘武器库部分证伪,成长批必要性不变)+ 成长代理档 40%/80%;**GP+商店房定稿提案已交付**(proposal-gp-shop-room-2026-09-20.md,10 拍板点:格面池零修订/商店房必经位/三属性 flat 档 攻+1=4 血+3=2 甲+1=4),待用户逐条拍板后进波次 2 实施批 @@ -301,3 +303,7 @@ 116. **GP+商店房实施批(L3-A 玩家成长批)(2026-09-20,本会话——用户对 proposal-gp-shop-room-2026-09-20.md 六开放问题逐条裁决(关键推翻:GP 进第九型格面,格面池零修订推荐被否);plan 批四子代理接力(A 表/B 代码/C 文档/D 冒烟);worktree gp-shop-20260920)**:**裁决要点**——①GP 进九型:金币袋(gp_gain,power 3,weight 2,低概率惊喜获取、量与战斗掉落相当)+破财(gp_loss,power 2,weight 0 字典行,钱包 clamp ≥0);②掉落非固定值=均值±方差掷定(普通 3[2,4]/Boss 8[6,10]/精英 5[4,6] 预留行)+关级加值(L1 0/L2 1/L3 2)+关级价格加成(L1 0/L2 2/L3 4);③记账=完成战斗统一到账(battle_finished 载荷 +gp_dropped),战斗内格面兑付走战斗域缓冲 escrow(战斗开始清零随载荷上抛即弃)与钱包隔离;④商店房=Boss 前一位必经位(哈迪斯式,L2/L3 行集 Boss 重编号 8→9、(8,shop,next[9])、L1 零改动、必经位冒烟断言承载);⑤统一冒险加算区 {atk,max_hp,armor_class}——商店购买与关卡大奖励同账、经覆盖值通道生效、购血上限与当前生命同步 +Δ;⑥三商品全陈列**无刷新无三选一**(shop_roll 作废),定价按期望账制定(L2 商店前可得 ≈35–40 GP vs 三件首购 16/全购 26–34,取舍空间成立,账进 shop.tres 批注);⑦**数值与分层验收整体后置**(用户拍板"骨架先行、数值是肌肉":shop=off/on 双格 MC、带平移、换算率全归曲线调参批与既有三条目同窗);⑧「关卡内结构随机生成(哈迪斯/弹珠式)」登记 06 方向观察条目未立项。**落地面**——新表 shop.tres+ShopTable schema(四行族+域校验)、reward 九型批(CELL_TYPES+gp、字典十八格、正向合计 76)、level_table 词表五类+L2/L3 rewiring(陈旧 (·,8) Boss 行清理)、代码四件(rng_service gp_drop 流〔黄金向量 m=42 scope0=6226476397888000011/scope1=5031558177015478025 已登 registry〕、battle_orchestrator escrow+gp_dropped、level_runner 钱包三收口+商店兑付+加算区、config_db shop 加载+gp 效应豁免)、呈现五件(ShopOverlay 商店覆盖层/顶栏金币常驻/格面徽标 gp 金色键〔避开紫赤禁入带〕/选路图商店房词表/battle_narrator 台词)、playtest_logger(battle_end.gp_dropped+wallet 事件行)、GDD 八文档(关卡节点地图 v1.1 五类枚举+编排规则/冒险结构 v0.5 GP 冒险账本+统一加算区/战斗结算 v0.23 载荷+缓冲/地图战斗资源 v0.15 九型批/难度曲线 v0.18 杠杆登记+分层 defer 成文/元进度 v1.2 双币分工/03 v0.7/05 红线显式例外成文)、registry 六处(reward/shop_table 新条目/level_table/载荷/随机流+黄金向量/术语三词条)、06 GP 提案条目解决移除、提案文首裁决记录块。**验证**——冒烟 437 项 0 失败三闸全过(+60 项断言:GP 到账区间/escrow 隔离+破财 clamp/商店三收口+价格递增+余额拒/图不变式含 DFS 全路径必经穿店/九型字典+黄金向量);ui_probe/click_probe(商店层适配)/tune_probe 三探针 PASS。 117. **冒险结构实现批——三关正式序列生效(2026-09-21,本会话——按用户规划书 .zcode/plans/adventure-structure-batch-plan-2026-09-21.md T0–T9 顺序执行,规划书 §7 代拍板默认值七项直接采行;worktree adventure-structure-20260921,代码批 7ddfa4b+文档批 5709cd3)**:**批次定位**——切片从「三个可分别试玩的单关 demo」升级为「一局完整的三关 Roguelike 冒险」:冒险级状态(生命账本/GP 钱包/统一加算区/主种子)所有权自 LevelRunner 上交 AdventureRunner(core/adventure_runner.gd 新建,Core 层零 UI)。**落地面**——①AdventureTable 建表:adventure_table.gd(两字段域检 [0,999])+adventure.tres(10/10 provisional)+config_db 接线+冒烟表闸 +4;②LevelRunner 账本外置(06 接口漂移①②③⑥⑦清偿):hero_hp/gp 改属性落 _ledger 字典(冒险模式=共享账本,调用点零改动)、恢复数学抽成单一路径 rest_heal_amount(冒险模式经 _rest_handler=AdventureRunner.apply_rest——接口③)、start_level_external 冒险模式入口(零重播种零账本重置)、close_wallet 公开化(冒险模式收束清零归 AdventureRunner._settle;漂移⑥=不发明空清库接口、注释登记事实清库);③AdventureRunner:start_adventure 主种子恰一次(rng_service new_adventure 唯一正式调用方——registry 同批登记)/大奖励非末关恰兑付一次(上限提升读 db.adventure+血回满=新上限+钥石照记,末关不发提升)/三结局结算(completed/failed/abandoned)+摘要五件事/结算受理只算一次(state 守卫)/四件套接口正式承载/ADR-0001 S6 全 _forward_* 方法转发;④level_autoplay 增 run_adventure(三关连探自动驱动——_drive_level 从 run_level 抽取零行为变更)+encounter_max_hp_seq/wallet_events/reward_events/shop_gp_seq 采集面;⑤呈现层:首页 lvbtn 改「开始冒险(三关连探:地精洞窟→幽暗地域→灰矮人矿城)」、L2/L3 加「测试直入口」前缀保留、大奖励屏(复用 inter_overlay+Narrator.big_reward_text)+冒险结算屏(复用 BattleEndOverlay+Narrator.adventure_summary_text 摘要五件事);⑥冒烟新段 +45(437→482:表闸 +4/API 闸 +8/冒险验收 +33——表覆盖义务/满配通关/种子复现/大奖励恰 2 次与覆盖值传播/败北线两种子扫描〔零配 L1 败+半配 L2 败〕/重复宣布拒绝/GP 跨关延续〔gain= battles·clear 恰一次为末事件·L2 商店房余额>0〕/加算区同账〔商店+大奖励同账累加+回满新上限〕/恢复数学三读数/放弃两态);⑦文档:registry 三处(adventure_table 已建表/level_table 三关序列生效/rng_service new_adventure 调用权)、06 三条目解决移除(两关序列未生效/切片行进代码与定稿的接口漂移/冒险表未建表)、03 v0.8(L2/L3 状态行改正式序列已生效)、冒险结构 v0.6(实现批落地登记,正文零改动)、roadmap(时间线 09-20/09-21 两行+路线图第 4/5 项收口——存档批与元进度批挂点就位)、切片 README(主入口口径+修改记录条目)。**代拍板登记(规划书 §7 七项采行,待用户确认)**:①lvbtn 改开始冒险+L1 单关直入口取消(冒险首关即 L1);②大奖励屏复用 inter_overlay;③冒险结算屏复用 BattleEndOverlay;④钥石只在结算屏摘要展示(HUD 常驻归元进度批);⑤每关新建 LevelRunner;⑥不发明空清库接口;⑦放弃 API 预留+冒烟断言、无 UI 入口。**规划书冲突按代码为准三处(台账登记)**:①_pending 置位先于 emit——信号同步派发下大奖励处理器内立即 continue_to_next_level 需 _pending_next_level 已就位(T4 手动验证实证 advance_failed 后修正);②encounter_max_hp_seq 抓取点改 runner.effective_max_hp()——规划书指定 node_entered 时抓 encounter.hero_max_hp,但 encounter 字典在 begin_battle 内才赋值(node_entered 先于 begin 发出)读到空字典,effective_max_hp() = begin_battle 将收 hero_max_hp 同一表达式等价;③abandon() 补 state=running 守卫——规划书只写战斗中拒绝,补齐后结算后重复放弃亦拒绝(契约 7 结算受理只算一次的 abandoned 侧对齐)。**验证**——冒烟 482 项 0 失败三闸全过;四探针全过(ui_probe/tune/click 问题=0/layout 转储 exit 0——click 探针真实驱动了一局冒险失败终局屏);MC 零行为变更回归:T0 同款命令(20 局 L1 normal unique seed0=4200,基线格通关率 35%)重跑 10 行读数与基线逐位一致(diff 仅 _drive_level 抽取的堆栈帧行号与退出泄漏计数——非行为面);文档三工具与 master 基线一致(doc_link_audit 死链 7=7 既有欠账、链接 787→786 系本批删除一条待办指路链接、gdd_lint 8 文件既有、doc_term_audit 215 处/疑似现行 1 处均既有)。 + +118. **存档序列化批(2026-09-21,本会话——用户令按规划书 `.zcode/plans/save-serialization-batch-plan-2026-09-21.md` T0→T8 顺序执行(判据不过不进下一步)、worktree 开发、遇冲突先做其余再验证收尾;worktree save-serialization-20260921,四笔 a7f35c9 代码 / 569d634 文档 / ed75e0f 吸收冒险结构批 / 96255ae 挂点)**:**落地面**——`core/save_manager.gd`(Core 层零 UI 零玩法依赖,不碰 ConfigDB/RngService 可独立验证):契约 1-4 全落(表与档分家·域界干净·钥石不丢·高版本拒读禁写)+ tmp+rename 原子写 + register_migration 迁移链骨架(v1 链空先行)+ 类型化访问器(keystone/spend 拒花零副作用/forge 三档出域拒/item/clear_count/boss_first_kill/recent)+ apply_adventure_summary 域更新原语(Boss 金额归元进度批扩第二参零行为兼容);smoke `_smoke_save` 段 **36 项**(①全域往返②新档合法③余额拒花④锻造出域拒⑤高版本拒读+禁写盘原文件字节不动⑥损坏 .corrupt.bak 备份+默认新档⑦迁移链 v0→v1⑧盘上无局内资源键〔ap/rap/gp/inventory/hero_hp〕⑩摘要 cap10 最新在前 + ⑨摘要集成=run_adventure(42,200,100) 真局→余额=3×keystone_per_level/通关次数全 1/三关首杀齐/recent seed42→二局全 2/翻倍/recent2→写盘读回保持);main.gd 挂点=_ready 表载成功后建实例+读盘(拒读/损坏类内兜底不阻断——fatal 只留数值表)+ _on_adventure_finished 尾部 apply+write(正式冒险收束唯一写档点;L2/L3 直入口走 runner.start_level、调试两层走 debug_session,均不经本处理器=契约 7 测试入口不写档结构性成立)。**文档批**——存档序列化.md 升 v1.0 定稿(格式/数据模型逐域/读写时机/版本与迁移/损坏兜底五项裁决成文,待设计六问全处置:1/2/3/5/6 入核心规则、4=单档 MVP 多档 P2)+ 02 状态列已定稿 + registry `save_file` 新条目(domains 逐域含内容 owner=元进度/冒险结构、承载 owner=存档序列化)+ `schema_version` 落地注记 + 06「存档契约条目的登记方式」解决移除(登记口径=registry 逐域登记)+ 元进度.md 存档义务指针改指 save_file(悬空引用清偿)+ roadmap 时间线 +1。**代拍板 8 条(规划书 §7,待用户确认)**:JSON 单档 user://save.json / 写盘时机=收束+营地每笔即时(B3 接线)+原子写 / 高版本拒读+禁写+内存新档 / 损坏改名备份+默认新档+警告不静默丢档 / recent_summaries cap10 / 单档 MVP 多档 P2 / 迁移读档链式 Callable+测试注册钩 / 测试入口不写档。**冲突点登记**:①计划书「registry save_format_version」实名 **schema_version**(owner=数据配置)——以代码为准注记落该条目;②开工门「B1 已合并落 master」开局为假(冒险结构批当时未提交未合并)——按用户冲突协议先落 T0-T4 与 T2①-⑧⑩、挂起轮询,B1 落籍(4f7f25d,台账 117)后分支 `git merge master`(冲突三处全解:smoke 注册表双留+段体保留/06 双删侧各去一条/roadmap 同日行合并)续完 T2⑨+T3。**验证**——冒烟 437→**518** 项 0 失败三闸全过(+36:26+⑩项摘要集成);四探针全过(ui_probe/tune PASS·click 问题=0·layout 转储 exit 0);doc 三闸与 master 对账一致(lint/term 逐字一致、link 死链 7=7 既有欠账、新增 4 链接全活);**MC 零玩法改动证明**=20 局 L1 normal unique seed0=4200 与当前 master 重跑读数行逐位一致(diff 仅日志时间戳/耗时/退出栈行号三处元数据);**坑**(已记 memory)=tools/run_smoke.py ROOT 取脚本自身位置,worktree 跑测必须显式 `--path`(否则静默跑主区,断言数不变是指纹);主区合并前 AdventureTable 类名缓存须 `--editor --quit` 刷新(十二坑第 1 条再实证)。**边界**——花钥石/购买/定价/营地 UI 零涉及归元进度实现批(B3 已解阻塞);续玩快照(主种子+计数器)P1 留 06 后置。 + +119. **放弃入口界面呈现批 + 台账 117 七项代拍板确认(2026-09-21,本会话——用户对冒险结构实现批代拍板七项逐项表态:①首页单关入口取消=认可现状;⑦「放弃接口也要有」=推翻 冒险结构.md「MVP 无界面入口」后置条款、补界面入口;②-⑥认可生效;worktree abandon-entry-20260921,代码 a569f19+文档 7d50e0f)**:**落地面**——①RouteOverlay 常驻「🏳 放弃冒险(同失败结算——已获大奖励保留)」按钮(FLAG_RED 暗示语义;信号 abandon_requested→组合根 _on_abandon_requested:非冒险模式零操作〔单关测试直入口语义对象不存在〕、受理→adventure.abandon()(结算摘要 abandoned→adventure_finished 同步到达→终局屏「冒险放弃 · 未打穿」);拒绝分支〔战斗在飞——选路停点天然非战斗期,本分支仅防御〕→ux_reject 日志+toast「战斗进行中——无法放弃」可见);②可见性归组合根 set_abandon_available:_start_adventure(true)/单关直入口(false)/默认 false——放弃语义对象=整局冒险;③**顺手收口**——_on_level_finished/_on_adventure_finished 终局兜底 route_overlay 收层由裸 visible=false 改 _close_modal(放弃按钮新场景下选路层在开态,须恢复其遮挡面〔tune/start 等上层〕;modal_stack.close 对未开过层容错);④ui_probe 新增三断言(默认隐藏/冒险模式可见+首战中真实按钮按下被拒 state 保持 running——规范 3.1/3.2 场景级探针义务)。**文档面**——冒险结构.md v0.7(放弃节正文改现行口径〔入口挂选路覆盖层、冒险模式开放、战斗中不可达〕/验收标准放弃条补入口可见性/P1 后置表「放弃入口的界面呈现」移除〔同表「两关序列生效」系 117 漏收口、顺手同口径移除〕);roadmap 时间线补 09-18/09-19 两缺行(里程碑粒度自台账回填)+09-21 行补本批;README 运行节补放弃按钮一行。**边界**——battle 中无入口不可达=拒绝分支零 UI 触达路径(GDD「战斗域单事务在飞」语义不变);B2 存档批的冒险收束写盘挂点对 abandoned 结局同样触发(apply_adventure_summary 收 abandoned 摘要——存档契约天然覆盖)。**验证**——冒烟 518 项 0 失败三闸全过(新基线零增量断言,纯呈现层+文档);四探针全过(ui_probe 含新三断言/tune/click 问题=0/layout exit 0);doc 三闸与 master 一致(死链 7=7 既有欠账、链接 789→791 全为有效新链、lint 8 文件既有、术语 215/1 既有)。