fix(acceptance): 掷点发现根因修正批——窄种子窗×复用放大(非派生公式缺陷),玩家影响降级为机会涨落,修复三案呈报(2026-09-19)——①深勘触发=用户质询伪随机必要性;②2000 跨步种子全局对照 χ²=22.8 证明派生公式均匀(splitmix 版同干净),推翻台账 84「首输出缺陷」定性;③真根因=连续 30 种子×头部窗口×40 局复用,窗口彩票放大 40 倍灌进聚合(真实日志逐种子 18 点 0→131 远超二项 σ≈6);④玩家单局影响降级≈无(17~40 掷不可与运气区分),实害面=测量有效性;⑤修复三案:A 宽种子带(推荐零代码)/B master 混淆加固(黄金向量重登记)/C 真随机+记录(评估不推荐);⑥报告核心发现节重写+台账 85
This commit is contained in:
1 parent
8178394489
commit
26f91f3efe
2 files changed
+21
-16
No files matched your search
@@ -9,29 +9,31 @@
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 核心发现:掷点流存在结构性面值偏置(本批最重要产出)
|
||||
## ⚠️ 核心发现:窄种子窗 × 复用放大——掷点统计失真(本批最重要产出;2026-09-19 深勘后根因已修正定稿)
|
||||
|
||||
**一句话**:d20 掷点在单局内不是均匀分布——每个种子的冒险只消费掷点流头部约 17~40 个 scope,而「派生种子 → PCG 首输出」在头部 scope 区间有系统性面值聚类,玩家的实际掷点体验随种子漂移(有的种子 18 点频发、有的种子整局零 18 点)。阶段一多数 gate 失败归因于此,按口径 §4e 边界 1「先查实现缺陷再谈调参」,**压力验收判定顺延至掷点修复批之后**。
|
||||
**一句话**:d20 掷点流的派生公式本身是均匀的,但「30 个连续种子 × 每局只消费头部 ~17~40 个 scope × 每种子被复用 ~40 局」的组合,把头部窗口自身的面值彩票放大 ~40 倍灌进全部聚合统计——验收的档位分布/EV gate 读数因此失真。**修正记录**:本报告首稿曾定性为"派生种子首输出缺陷、真实玩家体验受损",经 2000 种子全局对照与跨步种子对照推翻——公式无恙、玩家单局影响≈机会涨落水平,真实受害者是测量有效性。
|
||||
|
||||
### 证据链(可复现,探针脚本形态见附录)
|
||||
|
||||
1. **逐位比对**:种子 4227 首局前 23 个日志掷点与 `rng.open_stream("armor_roll")` 逐 scope 首输出序列**完全一致**——日志掷点 = 派生种子首输出,无其他变换。
|
||||
2. **种子级头部偏置**:种子 4227 头部 30 scope 含 4 个 18 点(13%);种子 4211 头部 30 scope **零 18 点**。真实日志按种子聚合:4227 → 120 个 18 点(4.1× 期望)、4211 → 0 个。MC 每局平均仅 ~17 次掷点、每种子被 20 个配置格复用 → 头部偏置被放大 40 倍,与日志完全定量吻合(120 ≈ 40 局 × 头部 3 个 18 点)。
|
||||
3. **真实消费模式复现**:按「30 种子 × 40 局 × 每局 8~31 掷」模拟聚合,复现日志失真签名:18 点 1876/23822(期望 1191,**+57%**,≈20σ)、16 点 +26%、4 点 +23%、1/2/3 点 −25% 量级缺口。
|
||||
4. **排除项**:纯随机种子首输出均匀(4 万次最大偏差 2.7σ,正常);同流长短序列聚合均匀(2 万 scope)——缺陷特定于「派生种子族 + 头部窗口」的组合。
|
||||
2. **逐种子失真**:真实日志按种子聚合 18 点数 0→131(种子 4211 = 0、4227 = 120);二项分布下 n≈700 的 σ≈6,此散布远超抽样涨落——复用放大实锤(每局重吃同一种子的头部窗口,窗口彩票 ×40)。
|
||||
3. **全局均匀对照**:2000 个跨步种子 × 头部 31 scope 等权聚合,χ²=22.8(19df 95% 临界 30.1)——**派生公式全局无偏**;splitmix 混淆版同样干净(χ²=23.5),混淆不解决本问题(问题不在公式)。
|
||||
4. **窗口彩票对照**:MC 实际窗口(连续 30 种子 × 头部 41 scope)18 点 +35% 集中在高权重头部;同规模跨步种子窗口 χ²=26 正常——特定窗口运气 × 复用 = 失真。
|
||||
5. **真实消费模式复现**:按「30 种子 × 40 局 × 每局 8~31 掷」聚合,复现 18 点 +57%(1876/23822)的日志签名。
|
||||
6. **排除项**:纯随机种子首输出均匀(4 万次最大偏差 2.7σ)——引擎 PCG 本体无恙。
|
||||
|
||||
### 影响面评估
|
||||
### 影响面评估(修正后)
|
||||
|
||||
- **玩家体验(真实影响,非测量伪影)**:一局冒险 = 一个种子 = 只吃该种子头部窗口。d20 均匀假设是 AC 档位设计(全额 55%/×0.75 15%/×0.5 20%/×0.25 10%、EV 减免 21.25%)的地基;现状下不同局的实际掷点分布随种子系统性漂移,暴击率与档位体验逐局不可比。这属于**引擎级机制缺陷**,不是调参问题。
|
||||
- **测量有效性**:本批全部掷点面 gate(档位分布/EV 减免/nat20)读数被污染,判为失败不能归因到机制实现或数值配置。
|
||||
- **连带怀疑面**:同一派生公式服务全部五条流(board_gen/reward_roll/encounter/armor_roll/behavior_roll),其他流的消费窗口同样偏头部——棋盘布局、奖励摇号、遭遇骰的逐种子行为同理存疑,修复批应一并核查。
|
||||
- **玩家单局体验:≈无**。一局只有 ~17~40 次掷点,即使种子头部窗口有偏,也与普通骰子运气无法区分(17 次均匀掷点本身就有 ±10pp 级涨落)。**首稿"玩家体验随种子漂移"的说法降级为理论可能性**(只有在单局掷点数大幅增长的未来内容里才可能被感知)。
|
||||
- **测量有效性:实害**。验收掷点面(档位分布/EV/nat20)与任何基于这 30 个种子的聚合统计,都被窗口彩票 ×40 放大污染——本批阶段一两个 gate FAIL 由此归因,不能算到机制或数值头上。**同构隐患**:五条流(board_gen/reward_roll/encounter/armor_roll/behavior_roll)共享此消费模式,窄种子窗 + 短消费窗 + 复用的分析面都会中招。
|
||||
- **潜在陷阱(非现行故障)**:若未来种子外露(种子分享玩法)或单局掷点数大增,窄窗彩票从测量问题升级为体验问题。
|
||||
|
||||
### 修复方向试探(均在探针级验证,未动游戏代码)
|
||||
### 修复方向(三案,均已评估;探针级验证见附录)
|
||||
|
||||
- 单次预热(丢弃首输出取第二输出):**无效**(相关性在种子空间不在生成器内部)。
|
||||
- 派生种子过 splitmix64 非线性混淆后再喂 PCG:**部分改善未达标**(最大面偏差 685→369,仍 ≈11σ),需专门验证批找正确混入方式。
|
||||
- 结构性候选:armor_roll 改「每冒险一条持久生成器顺序取号」(标准做法,代价 = 牺牲注册表登记的逐 scope 独立复放语义);或重设计派生公式并配黄金向量回归。
|
||||
- **处置建议**:登记 06 待办立项「掷点流种子偏置修复批」(改 `rng_service.gd` 属架构面,须用户拍板修复方案);修复批自带义务=黄金向量重登记 + 冒烟断言 + 修复后重跑本验收阶段一。
|
||||
- **方案 A(推荐,零游戏代码)**:掷点统计面改用宽种子带——如 4200 起步长 7919 取 ≥100 个种子(保留 4200–4229 子段则历史坐标仍可比),窗口彩票按 1/√种子数摊平;实现 = MC 工具加一档「掷点扫描批」参数。承伤/通关率等压力读数同理受益。
|
||||
- **方案 B(可选加固,一处小改)**:`rng_service.gd` 派生前对 master 做一次非线性混淆(如 splitmix64 finalizer)——任何窄种子窗表现如随机抽样,根治"连续小整数种子"陷阱。逐 scope 回放语义不变;代价 = 黄金向量重登记 + 冒烟回归。全局均匀性已被证明,此案是防御性投资,不紧急。
|
||||
- **方案 C(用户提案:真随机 + 逐次记录)**:技术上可行但代价不成比例——存档序列化快照契约(master_seed)、反事实重算工具(analyze_playtest 依赖确定性重模拟)、逐次可回放语义全部重做,记录文件随局数无限增长;而它解决的问题 A/B 已以小得多的代价覆盖。不推荐,除非未来设计转向"非确定性掷点"价值观。
|
||||
- **共性注记**:无论何案,单局 17~40 掷的"运气窗"本身(某局恰好 18 点多)是骰子本性,修复对象是"系统性放大"而非"运气存在"。
|
||||
|
||||
---
|
||||
|
||||
@@ -112,9 +114,9 @@
|
||||
## 待办与回流
|
||||
|
||||
1. **真人批**(用户):基线档 3–5 局 → k 系数 + 零掉血轮宽口径真人对照 → 本报告终稿。
|
||||
2. **掷点流种子偏置修复批**(新立项,须拍板):登记 06 待办;修复方案选择 + 黄金向量重登记 + 重跑阶段一。
|
||||
2. **掷点测量修复**(待拍板选案):方案 A(宽种子带,零代码)/方案 B(master 混淆加固,黄金向量重登记)/方案 C(真随机+记录,不推荐);选 A 则登记 06 待办为「验收掷点扫描种子带改造」,选 B 则为 rng_service 加固批;阶段一在修复后重跑。
|
||||
3. **口径文档连带修订**(归合并批):`docs/acceptance-ap6-ac.md` 快照 buffs 盲区节改写、Boss 血量锚参照值重校准(58 现值)、§2 消费读数行补刷新两读数;`06-待办清单`「刷新经济性监控」条目保留至调参批定阈值。
|
||||
4. **曲线调参批门**:确认改为「掷点修复批后」起跑(原门=验收读数)。
|
||||
4. **曲线调参批门**:确认改为「掷点测量修复 + 阶段一重跑后」起跑(原门=验收读数)。
|
||||
|
||||
## 附录:探针脚本(复现用)
|
||||
|
||||
|
||||
@@ -239,3 +239,6 @@
|
||||
91. **gitignore 缓存误写忽略批(2026-09-19,本会话——用户质询仓库根 {GUID}*.db 文件触发;纯仓库卫生零游戏代码)**:**定性**——仓库根怪目录 `%SystemDrive%/ProgramData/Microsoft/Windows/Caches/` 内三文件(cversions.2.db+{6AF0698E-…}.2.ver0x…01.db+{DDF571F2-…}.2.ver0x…01.db)与真实系统目录 C:\ProgramData\Microsoft\Windows\Caches\ 同名同构(版本后缀 01 vs 系统现役 10),系 Windows shell(资源管理器)缓存库(ESE 格式,非 SQLite、非 ZCode 记忆——记忆在 ~/.zcode/cli/memories/);成因=某进程环境变量 SystemDrive 未展开,按字面相对路径把缓存库写进仓库根(台账 90 遗留 flag 本批处置)。**落地**——.gitignore OS 节增 `%SystemDrive%/` 整目录忽略;另收编主区在飞行 .zcode/plans/ 行(计划模式存档目录、无自动清理机制,会话批准计划即落快照属预期行为非垃圾);误写目录本体经核对为系统缓存副本后删除。**流程**——按 worktree 铁律:worktree 分支 batch/gitignore-junk-caches 两笔提交合并回 master;合并前主区 .gitignore 在飞脏改动(.zcode/plans/ 行)checkout 丢弃(内容已收编入本批提交防冲突);台账预写 90 撞号(并行会话技能池收口批先登记) amend 改 91。**验证**——git status 复核 %SystemDrive%/ 不再出现在未跟踪;冒烟不适用(零游戏代码)。
|
||||
|
||||
92. **验收读数重测批·初稿(2026-09-19,本会话——独立 worktree 分支 `acceptance-rerun-20260919`,主工作区并行改动零接触)**:①执行面=worktree 检出 d236d9f(编辑器缓存刷新后冒烟 317 项 0 失败三闸全过)→ 模拟批 level_monte_carlo N=30 种子 4200+30 both 两关共 1200 局 → 日志批 log_analysis.py + 专项脚本(方向档位分布/基线格承伤分位/按种子直方图)。②**核心发现=掷点流结构性种子偏置**(证据链四步:种子 4227 首局前 23 掷与 open_stream("armor_roll") 逐 scope 首输出逐位一致;种子级头部偏置——4227 头部 30 scope 含 4 个 18 点、4211 零 18 点;真实消费模式 30 种子×40 局×8~31 掷复现失真签名 18 点 +57%≈20σ;纯随机种子对照均匀排除引擎 RNG 本体)——机理=每局从 scope 0 重取号(可回放设计)×派生种子首输出头部聚类×MC 短局(均 ~17 掷)把头部重采样 40 遍;**真实玩家影响**=单局 d20 体验随种子系统性漂移,AC 档位 55/15/20/10 设计地基受损;修复试探=单次预热无效、splitmix64 种子混淆未达标(685→369 仍 11σ),建议立项掷点修复批(含黄金向量重登记+阶段一重跑义务),五条流连带核查。③阶段一判读=零承伤轮 0 PASS/nat20 4.53% PASS(带污染注记)/档位分布与 EV 减免 FAIL(归因 RNG)/Boss 血量锚参照值过期(58 现值)/快照 buffs 非空 8790/14402 盲区口径已破(rider 批后快照携带状态,好消息)/未配对 battle_end 1200 系统性行序伪影(1/局,不影响核心统计)。④阶段二初稿=L1 完美档基线格通关率 87% 越 gate[35,65] 上界+承伤 p10=13/p90=25 远低于带 [35,45]/[55,65](压力不足方向),F4 满配格两关全 PASS,台阶倒挂消失(87vs87),Boss 承伤占比 26.7%/35.7% 出列正常;双 gate 判定顺延掷点修复后终判(§4e 边界 1 先查实现缺陷)。⑤07⑦ 刷新经济基线已采:弃图率 MC 完美档 L1 基线格 0.23/L2 0.03 次/局、normal 档 0、每轮刷新率 ≤0.6%——分析器新增两读数列(弃图率=受理刷新/局与 MC 同口径、每轮刷新率=刷新÷结算轮数),阈值仍归调参批;07⑥ 速杀占比经核不可推导(battle_end 无格面状态面)注记后延。⑥产出=log_analysis.py 读数+07⑦ 基线注记+production/qa/acceptance-rerun-20260919.md 判读报告(真人位留空);06「刷新经济性监控」保留至调参批。⑦诊断探针 rng_face_probe.gd 已删不留残留;/tmp 探针脚本复现路径记录于报告附录。
|
||||
|
||||
84. **验收读数重测批·初稿(2026-09-19,本会话——独立 worktree 分支 `acceptance-rerun-20260919`,主工作区并行改动零接触)**:①执行面=worktree 检出 d236d9f(编辑器缓存刷新后冒烟 317 项 0 失败三闸全过)→ 模拟批 level_monte_carlo N=30 种子 4200+30 both 两关共 1200 局 → 日志批 log_analysis.py + 专项脚本(方向档位分布/基线格承伤分位/按种子直方图)。②**核心发现=掷点流结构性种子偏置**(证据链四步:种子 4227 首局前 23 掷与 open_stream("armor_roll") 逐 scope 首输出逐位一致;种子级头部偏置——4227 头部 30 scope 含 4 个 18 点、4211 零 18 点;真实消费模式 30 种子×40 局×8~31 掷复现失真签名 18 点 +57%≈20σ;纯随机种子对照均匀排除引擎 RNG 本体)——机理=每局从 scope 0 重取号(可回放设计)×派生种子首输出头部聚类×MC 短局(均 ~17 掷)把头部重采样 40 遍;**真实玩家影响**=单局 d20 体验随种子系统性漂移,AC 档位 55/15/20/10 设计地基受损;修复试探=单次预热无效、splitmix64 种子混淆未达标(685→369 仍 11σ),建议立项掷点修复批(含黄金向量重登记+阶段一重跑义务),五条流连带核查。③阶段一判读=零承伤轮 0 PASS/nat20 4.53% PASS(带污染注记)/档位分布与 EV 减免 FAIL(归因 RNG)/Boss 血量锚参照值过期(58 现值)/快照 buffs 非空 8790/14402 盲区口径已破(rider 批后快照携带状态,好消息)/未配对 battle_end 1200 系统性行序伪影(1/局,不影响核心统计)。④阶段二初稿=L1 完美档基线格通关率 87% 越 gate[35,65] 上界+承伤 p10=13/p90=25 远低于带 [35,45]/[55,65](压力不足方向),F4 满配格两关全 PASS,台阶倒挂消失(87vs87),Boss 承伤占比 26.7%/35.7% 出列正常;双 gate 判定顺延掷点修复后终判(§4e 边界 1 先查实现缺陷)。⑤07⑦ 刷新经济基线已采:弃图率 MC 完美档 L1 基线格 0.23/L2 0.03 次/局、normal 档 0、每轮刷新率 ≤0.6%——分析器新增两读数列(弃图率=受理刷新/局与 MC 同口径、每轮刷新率=刷新÷结算轮数),阈值仍归调参批;07⑥ 速杀占比经核不可推导(battle_end 无格面状态面)注记后延。⑥产出=log_analysis.py 读数+07⑦ 基线注记+production/qa/acceptance-rerun-20260919.md 判读报告(真人位留空);06「刷新经济性监控」保留至调参批。⑦诊断探针 rng_face_probe.gd 已删不留残留;/tmp 探针脚本复现路径记录于报告附录。
|
||||
93. **掷点发现根因修正批(2026-09-19,本会话——用户质询"为何用伪随机/有无修复方案"触发深勘)**:①修正内容=台账 84 首稿定性「派生种子首输出缺陷、玩家体验受损」**两项均推翻**——2000 跨步种子×头部 31 scope 等权对照 χ²=22.8 证明派生公式全局均匀(splitmix 混淆版 χ²=23.5 同干净);跨步种子窗口 χ²=26 正常 vs 连续 30 种子窗口 18 点 +35% 集中高权重头部。②修正后根因=**窄种子窗(连续 30 种子×头部 ~17~40 scope)×每种子 40 局复用**→窗口自身面值彩票放大 40 倍灌进聚合统计;真实玩家单局影响≈机会涨落(一局仅 17~40 掷,与均匀骰子运气不可区分),实害面=测量有效性(阶段一档位/EV gate 读数失真归因于此,不能算机制/数值账);同构隐患=五条流共享消费模式。③修复三案呈报:A 宽种子带掷点扫描批(推荐,零游戏代码,保 4200–4229 子段可比性)/B rng_service master 混淆加固(可选,保逐 scope 回放语义,黄金向量重登记)/C 真随机+逐次记录(用户原提案,评估后不推荐——存档契约/反事实重算/回放语义全重做+文件无限增长,被 A/B 以小代价覆盖);共性注记=单局运气窗是骰子本性,修复对象是系统性放大。④判读报告核心发现节已重写(修正记录留痕),待用户选案后执行。
|
||||
Reference in new issue
Block a user