自然雷雨排布 = f(GID, activity_id, dayIdx, 配置),以 splitmix64 定点哈希逐段演算; 道具雨只存事件(append-only),读时前向重放叠加顺延。任何 Pod、任何时刻(历史/未来)、任何玩家(含从不登录)都能算出同一答案。
每天 0 点(CST)按 (GID, activity_id, dayIdx) 三元组 re-seed;段间隔 = hash-per-index 独立可算; 绝对时间链式累加。跨午夜尾窗由次日 spillback 回看 + 自然 floor(前一日链候选携带)保证 duration / 间隔不被午夜切碎。
全部泳道对每个 GID 都无条件存在——排布是数学对象,不需要登录、不需要 timer、不需要任何触发点。 玩家丙(从不登录)与玩家甲同样精确;玩家乙离线三周后重登,任何历史时刻同样可点查(dayIdx 按目标时刻寻址,非按 now)。 BOT 伙伴与玩家同轴同引擎(bot/entity.proto:伙伴内嵌 owner Model、非 actor;不用瓶 → item_rains 恒空 → 基线即精确)——伙伴泳道不是新机制,正是"任意 GID 可算"的字面演示;读点全部持 owner 锁(Enter/GetBriefs/BotTick 回调),离线种植烘焙零前置。
顺延不写任何字段:读时重放对每条 item_rain 施加 next = max(next, item_end + bufSec(gid,act,k)), 级联在前向重放中自动发生——没有被存储的排期列表可以被改坏。bufSec 走独立 tag 哈希流,不扰动自然间隔序列。
E 的处理协议:①改参数一律走版本列表 + effective_from_day,cfg(dayIdx) 纯函数选版(§14.3), 历史日永选旧版 → 已揭示变异 / (dayIdx,segIdx) 场次身份 / 镜像 buf 全稳定;生效日须 ≥ 明日天界且晚于代码滚更完成(§14.4)。 ②ItemRain.duration_sec 使用时落盘(§15.3)→ 热更只影响此后新用的瓶,历史道具雨窗不动。 ③顺延缓冲范围的版本按 use_ts 归属日选取(演示采用 · 待冻结规则)——与 E-Q2④「buf 预算入镜像」天然一致。 ④eager 烘焙门跨生效天界会陈旧(§14.8 的"lazy 自动吸收"在 §16.9 锁 eager 后不再免费): 吸收路径三选一待拍——登录触点 gate-only 重算 / 揭示时代际校验(修正「纯投影」契约)/ 接受快照语义(暴露面 ≤ 生效前 24h 内种下且门落在生效日后的作物)。 增补候选触点(10 §11.4):配置变更后首个心跳——在线玩家 O(1) 代际比对即时吸收、离线交三选一;建议主方案=揭示时代际校验(消费点闭环,10 §11.5)。 ⑤当日紧急止血:§14.10 倾向不引入当日内版本边界,配错走停活动重开——「当日时刻分段」选项仅演示其代价。 ⑥算法本体(splitmix64/种子构造/日界)永不热更,改则开新 activity_id(§14.9)。
在线/离线不影响徽标计算(E 的核心卖点:pre-visit 实时徽标)。 默认口径下,用过召唤瓶的好友在顺延生效期间,列表基线(纯 GID)与实际存在偏差带(泳道图红色斜纹)。 勾选上方提案后:观察者在 friend 列表装配处(buildFriendListReply,api.go:573)用「基线 + 镜像 rains」重放 → 偏差消失, 且好友的道具雨本身也能上榜(纯基线永远做不到)。先例:info.Plant.plant_data 已镜像未来时间戳 (ripe_time_sec 等,info.proto:107-121),写侧 plant/impl/system.go:78 注册 builder + 各操作点 MarkFieldDirty(FieldPlant)。 从不登录好友 item_rains 恒空,两种口径下均精确。
尚未种植。选一种成熟时长(4/8/12/24h),把时间调到某场雨前再种;观察四个跨阶段判定点是否落进雨窗,再试施肥把判定点整体前移。
GOLD = ⌊2^64/φ⌋(黄金分割 · 必须是奇数:与 2^64 互质 → 加法序列 2^64 步不重复);乘数 C1/C2 与移位 30/27/31 = Stafford Mix13——2011 年计算机海选(按"雪崩偏差最小"打分穷举移位+奇乘数组合)的第 13 号优胜配方,不是理论推导出来的;乘数为奇数 ⇒ 每步 mod 2^64 可逆 ⇒ mix 是 64 位双射(不同输入必不同输出、熵零损失)。
雪崩 = 1 个输入位的扰动平均翻转一半(32±5)输出位、且翻哪些位看起来随机。乘法只把信息往高位搬(进位链),异或右移把高位折回低位——两个方向交替两轮,信息才跑得遍 64 位。终混 ^(x>>31) 是最后一次高位反哺低位——rr 用 % 取模恰恰消费低位,终混是它的安全垫(配套设计,非巧合)。
间隔流按索引直取(rngAt(seed,i) 互相独立、可随机寻址),但窗口位置是累加的——第 i 场起点 = 前面全部时长+间隔之和,所以出表 = 一趟前向重放(O(窗口数) ≈ 微秒)。daySeed 先对 gid/act/day 各自 mix 再异或:原始值低熵(高位全 0),直接异或会撞(1000⊕1001 与 1001⊕1000 同值);先 mix 把每个入参撒满 64 位再异或,外层再 mix 消除异或的线性结构。
窗口数不是配置,是涌现值:期望 ≈ 86400 ÷(时长 1200 + 平均间隔 2700)≈ 22.2 场/天,实际随抽取在 21~24 波动。seg 序号 = 链内位置(0 起),生成时天然确定——"0..23"只是本配置的典型区间,改 duration/next 期望随之移动。(统计用 v0 配置纯基线,忽略跨日 floor 的 ±1 边缘影响)
口径(F1/F2 已拍 2026-07-02):采用连续重放 · floor 恒携带(= 本演示语义,05 §7.5.2/§12.4 已加修订注)——每日链尾候选无条件跨日携带为次日 floor,golden 自活动起点定义;恒携带顺手修掉"前日无 spill 但尾窗贴近午夜 → 今日首窗跨午夜间隔被切短"的残留缝。spillback 短路是这套语义的读侧表现。
窗口位置 = 随机间隔的前缀和——没有数组就没法二分,先建数组又是一次前向重放。三层成本:定位天 O(1)(ts÷86400 除法寻址);冷查 = 自活动起点连续重放 O(已过天数×W)——floor 跨天链式携带,"只回看 1 天"并不精确(F1 已拍修订,05 §12.4 修订注);30 天活动 ≈ 700 步仍是微秒级,且"每日尾 floor"检查点可摊回 O(W)——**CP 已拍搭车落盘**(2026-07-02:用瓶时随 markDirty 写入 Model+镜像,读同记录零边际;加速器非真值,10 §14.5);在线连续查询 cursor 摊还 O(1)——时间单调前进,游标只消费新经过的窗口,每天每玩家合计也只走 W 步。cursor 是进程内纯加速器:不落盘(05 §15.1 表)、不进冻结契约、任何时刻丢弃都回退冷查——本卡每帧都断言 cursor 结果与冷查逐位一致(G2 一致性三查的第四路)。失效重建条件:用瓶/热更/复位(输入变)、时间回拨;跨天是自动续走、不算失效。本页其余泳道用的是第四种策略"整段物化 memo"(可视化需要全量数组),生产热路径不需要。
判定流程(F1 连续语义):输入三件套(全量 item_rains 5 条 + 配置版本表 3 版 + actStart)→ 自 Day0 连续重放——每窗按起点时刻选版(v0→v1→v2 天界切换)、瓶按 use_ts 插队并抬 floor(buf 按全局序号 k=0..4)、每日尾候选恒携带为次日 floor(F2)→ 走到 Day22 10:00 命中扫描。逐日表的"入 floor 生效"列是 F1 论断修正的实证(floor 生效远非罕见);Day1 三瓶把当日链整体推后并波及 Day2 入 floor;Day5/Day20 行可见 v1(时长 20→15m 窗数变多)与 v2(间隔 30-60→40-80m 窗数变少)的天界切换。
b-weather-rain-statemachine-260624 · weather-demo-E.html · 2026-07-02 · 算法与 05 §3.10/§7/§12/§14/§15、09 §2 逐条对齐;F1/F2/F3 已拍口径(连续重放 · floor 恒携带 · 镜像全量)(演示级简化:日界用整 86400,真实实现走 pkg/utils/time.go CST)