Repository navigation
SCAPI Skyline Project v0.1.153
SCAPI Skyline Project v0.1.153
[v0.1.153] - 2026-09-29
第一百五十七版:新增地形形状指纹(把"随日照变化的 SunlightHeight"从跨轮判据里切出去)。
相对 v0.1.152 的变更:
1. 新只读探针 skyline.ChunkShapeHash(cx, cz)
只哈希 Top/Bottom 两张图(不含 SunlightHeight);ChunkHeightHash 保留(含日照高度)并显式带
includesSunlightHeight 字段。为什么需要:SunlightHeight 由日照值推出 ⇒ 会随时间/天气变化,
跨轮比对"邻居有没有被污染"时会把时间变化误判成污染。
2. 用它把"修法 A 的 crit5"改成同轮次强设计(heightlab/skyline-v0153-crit5-same-round.py)
- 给受害区块与 4 个邻块各放一格 ⇒ 卸载时一定落盘 ⇒ 之后从盘读回(判据断言 4/4
loadedFromDisk=True); - 控制轮测完必须再卸载,否则受害区块常驻、注入轮不走
LoadChunkData⇒ 注入不触发
(第一版实测nonIoFailures增量 = 0,整轮无意义——已修); - 判据用形状指纹(Top+Bottom);含
SunlightHeight的完整高度图降为仪器。
3. 结果(如实):injection-fired ✅、neighbors-were-from-disk ✅、victim-regenerated ✅(0.999),
neighbors-identical-same-round ❌(4 个邻块里 1 个形状指纹变了)。
我先猜"是日照随时间变"——被实验否掉(形状指纹同样变)。剩下最合理的解释写在 notes/262 §5.2:
受害区块在修法 A 下重新生成期间列是空的,而邻块的高度计算会读邻居列 ⇒ 那一个邻块可能按"空邻居"算过一次。
可判定验证方式已写好(下一轮:把该邻块再走一遍 InvalidLight,看形状指纹是否回到控制值)。
如实边界
- 数据丢失路径(
crit2)仍是绿的(保留率 1.000)——本版没有改变这一点。 crit5没有关掉,但性质已从"测量混淆"澄清为"可能真实、范围极小(1/4 邻块)、可判定"。- 本版只加只读探针;
SunLightReplay/SunlightHeight的行为未变。
相对 v0.1.152:新增只读探针 skyline.ChunkShapeHash(只哈希 Top/Bottom,不含由日照值推出的 SunlightHeight);并用它把修法 A 的 crit5 改成同轮次强设计(受害区块与 4 邻块各放一格 ⇒ 一定落盘 ⇒ 从盘读回;控制轮测完必须再卸载,否则注入不触发)。实测:注入 fired ✅、邻块 4/4 fromDisk ✅、受害块 nonAir 与邻居同量级(0.999)✅,但仍有 1/4 邻块的形状指纹变了 ⇒ 我先猜的"日照随时间变"被否掉;最合理解释(重生成窗口期"空邻居"被邻块高度计算读到)已写进 notes/262 §5.2,并给出可判定验证方式。crit5 未关,crit2(数据丢失)仍绿。README 9993 字符。