
Caffeine WindowClimber 消融定价指南用 climber-minimize 技能为每个算法步骤标价【免费下载链接】caffeineA high performance caching library for Java项目地址: https://gitcode.com/gh_mirrors/ca/caffeine导读climber-minimize是 Caffeine 仓库中与自适应窗口爬坡器WindowClimber配套的消融实验技能其唯一职责是为控制器里的每一个算法步骤定价每次移除一个步骤、运行真实缓存对比命中率从而发现已经不再值得保留的机制。本文以该技能的 SKILL.md 为主体结合 ablate.py、harness.py 以及核心实现 WindowClimber.java 的源码完整讲解消融实验的运行方式、14 个实验臂的语义、结果判定四类结论、以及 2026-08-23 基线数据的具体读法。读完你将能够自己搭建 wired worktree、运行 quick/standard/full 三级消融、解读每行 verdict并知道何时该保留并更新价格、何时才真正允许删除一个步骤。为什么要给算法步骤标价陈旧价格与惰性步骤climber-minimize的出发点与其它爬坡技能不同——别的技能问这个改动好不好它问的是这个步骤还应不应该存在。它每次从当前机器上移除一个算法步骤然后报告机器因此损失了什么。这个技能存在的前提是机器是靠修补长大的。每一轮都会添加一条修复某个工作负载的规则而没有任何机制让旧规则重新证明自己。由此产生两个已被观察到的现象价格陈旧stale后续修补改变了步骤所作用的地形使该步骤当初记录的价格失效。文档给出的实例是护栏否决guard rails veto在 2026-08-18 同一批 cell 上价格为 11:1到 2026-08-23 变成 1.86:1。惰性inert某个分支不再触发、不再影响任何结果却没有任何测试失败于是无人察觉。因此本技能最重要的设计原则是它通常的输出是已定价保留priced, kept而不是一次删除。给机制定价才是目的删除是罕见情况。建议在发布前、或机器连续经历多次修补之后运行。如何运行工具链与三级预设前置条件wired worktree消融臂arm全部通过climber-gate/harness.py以锚定代码片段的方式注入到WindowClimber.java、BoundedLocalCache.java与WindowTinyLfuPolicy.java中因此必须使用一个已 wired 的 worktreegit worktree add --detach wt commit python3 .claude/skills/climber-gate/harness.py apply wt CAF_TREEwt python3 ablate.py traces-dir all quick 1 data/quick.csv # smoke, ~130 runs CAF_TREEwt python3 ablate.py traces-dir all standard 1,2 data/std.csv # the decision pass CAF_TREEwt python3 ablate.py traces-dir all full 1,2 data/full.csv # hours命令参数依次为trace 目录、臂集合all展开为全部 14 个臂也可传逗号分隔的臂名、cell 预设quick/standard/full或直接给 cell 标签列表、种子列表、输出 CSV。三种预设的差异见 ablate.py 的QUICK/STANDARD常量quick是冒烟测试10 个族约 130 次运行standard在 quick 之上追加其余构造族与全部真实语料是 keep-or-prune 决策所需的预设full是完整电池耗时数小时。工具行为的关键细节臂在种子内部轮转每个种子内部轮转所有臂保证每个臂看到相同的机器状态与相同的准入抽样。trace 来自 climber-gate/SKILL.md 的生成块全部确定性地重新生成逐位一致。断点续跑输出 CSV 已存在时ablate.py会跳过已完成的 (cell, seed) 行并追加见done集合逻辑失败重跑成本低。每次运行通过run.py驱动 gradleR.variant(path, size, arm, fmt, seedseed)会为每个 (cell, seed) 依次执行全部臂臂是独立的 JVM 进程仅在种子内相邻interleaved这正是 climber-gate/SKILL.md 强调的不要分块跑——分块会使缓慢的环境漂移更难与真实差异区分。统计口径为什么要用-Dcaffeine.climber.seedBoundedLocalCache.admit中 1-in-128 的 HashDoS 抽样是模拟器唯一的在线不确定性来源策略以.executor(Runnable::run)同步执行。harness.py通过-Dcaffeine.climber.seedn把它替换为种子化抽样流使每个臂逐位可复现从而能够逐种子配对比较而不是靠未种子的抽签计数。这正是臂在种子内轮转能成立的前提。14 个实验臂每次只关掉一个步骤每个臂都是在步骤自身的代码位点上做单点禁用single disable。noaudit与 tier 系臂早于本技能存在其余大部分在 2026-08-18 wirednoreturncover与nowidecover在 2026-08 加入。完整表格如下摘自 SKILL.mdarm它移除的步骤cornerprobe恢复2026-08-21 删除的上角饥饿探测因此其符号是反的nostarve任何盲角都会武装一个饥饿探测noladder一次完成的实验不再加深其阶梯档位noscale深档位以 2x/4x 平坦步长行走nocommit深档位提交越过 stray 区的行走norepeat重新找到已失去地盘的 confirm 升级而不是奖励nowedge密度臂反转的 confirm 升级而不是奖励nofollowpark 的第一次审计跟随确认它的行走noshield新 park 免受 crash 级天气影响noveto护栏将窗口返回锚点noretestveto 的返回在到达时重新测试送它回来的 claimnoreturncoverveto 返回的 landing 与 settle 采样等待该 retest 而不是让锚点降级nowidecoverretreat 的 cover 在没有 held park 的情况下运行2026-08-21 的加宽nofreezeup-probe 依据武装时冻结的缓刑区判定noaudit整个平衡审计层注意两点cornerprobe是恢复而非消融它把 2026-08-21 删除的上角探测加回来所以它的汇总符号是反的——臂帮助意味着当初的删除在该 cell 上是错的noreturncover与noaudit移除的不止一个位点没有对应计数器。臂与源码位点的对应从 harness.py 的EDITS表可以精确看到每个臂注入的位置例如nostarve/cornerprobe注入在shouldProbeUp的盲角判定isDeadSample() || (windowStarved (windowMax (maximum 2)))noladder注入在Ladder.escalate()的rung Math.min(PROBE_BACKOFF_MAX, 2 * rung)noscale/nocommit注入在深档位rung 2 * PROBE_BACKOFF_INITIAL的 stride/commitment 分支norepeat注入在 WindowClimber.java 的Ladder.isRepeatnoveto注入在anchor.vetoTriggered的shortfallStreak VETO_STREAK判定noreturncover/nowidecover注入在isReturnTest()本体nofreeze注入在 up-probe 的基线密度计算NOFREEZE ? r.probationDensity : baseProbationDensity * (requestCount/baseRequestCount)。harness.py的FLAGS块中每一个臂都是一个static final boolean XXX VARIANT.equals(xxx)开关由-Dcaffeine.climber.variant系统属性驱动。这也解释了 SKILL.md 中两个需要编辑的地方harness.py的 FLAGS 块与本文的臂表格。为每个新步骤添加臂只要一个步骤落地就应该为它添加一个臂没有臂的规则以后无法重新定价——这正是 2026-08-18 之前臂集合衰减到只剩两个的原因。新增步骤时需同步修改 harness.py 的FLAGS块新增一个 variant 开关 计数位点与EDITS表锚定注入并保持 ablate.py 的ARMS列表与其同步。harness.py内置的check_edits()会拒绝两个替换文本不可区分的编辑——这曾导致过静默丢失 276,764/558,186 次命中的事故。读结果以及其中的陷阱绝不基于电池均值裁定均值是唯一会隐藏一个机制值得保留这种事实的汇总统计一个在少数工作负载上买很多、在多数负载上花很少的步骤就是保险而保险在平均上永远难看。ablate.py改为报告不对称性——臂帮助的 cell 上的总增益、臂伤害的 cell 上的总成本、最差的单行、以及臂使其逐位不变的 cell 数量。审计层自身的案例是标准示例268pp帮助的行对 −13pp伤害的行约 21:1而均值 4.91 表达的信息少得多见 hill-climber.md §5。四类结论LOAD-BEARING承重——无收益、有损失或只在有帮助处无损失。保留并更新记录的价格。PRICED已定价——一笔交易。报告比值和最差行。大多数步骤落在这里已定价保留就是一个完整答案。比值低于 1:1 只是候选不是结论护栏否决在电池上读 0.3:1却在 planted cell 上买 6.4pp。NEGATIVE负收益——移除该步骤处处有帮助。这是缺陷报告不是简化应交给/audit-adaptivity。INERT惰性——在每个 cell 上都逐位不变。这是最有趣的一类而且不是删除许可。电池的盲区起点电池里的每个 cell 都把缓存的起点设在产品相同的位置——1% 窗口。因此一个防御机器已被驱离的窗口的步骤几乎没有东西可以作用其比值会无因坍塌。在把低于 1:1 的比值当作候选之前应把窗口 planted 到该步骤自己的 cell 上重跑CAF_EXTRA-Dcaffeine.climber.startwin0.55或用 startwin.py 做扫描。护栏否决是标准案例电池上 0.3:1planted 到 55% 的mainsat上 6.4pp。为什么 inert 不等于 dead语料是有趣到值得被捕获的工作负载的样本加上针对已知缺陷构造的族。一个在该样本上什么都不改变的步骤仍可能是真实部署与 5pp 漏洞之间唯一的屏障——而这个 bug 永远不会被上报因为用户看不到他本应得到却没得到的命中率。因此 inert 臂获得的是第二次检查而不是一个补丁。文档给出四条检查路径数触发次数然后证明状态不可达。ablate.py已替你完成计数每个 cell 用-Dcaffeine.climber.counts跑一次 ship退出时倾倒STEPFIRE stepn并汇总进结论。执行了但不改变结果的 branch 是 inert弱在狭窄的 cell 集上从不执行的 branch 是 unexercised更弱工具会明说。norepeat在demoflood上从不触发、在absolve_p8上值 18.61这正是 DEAD 结论被 gate 在full预设上、其余一律打印 PROVISIONAL 的原因。即便 full 集上的零计数也只是关于样本的事实删除需要关于机器的事实要么从 gate 自身推导读取守卫该位点的条件证明它们不可能同时成立要么探测机器自身的读数。参考案例WaveCounter 移植的 ADR-0055 通过探测 15,693 次 governor 读数发现目标状态零次然后按构造证明其两个 gate 互斥——单靠探测就足以以薄弱得多的证据批准同样的删除。说出它为之而生的形状。hill-climber.md §3 列出了每个族及其击败方式。一个其家族仍在列表中且仍通过的步骤正在一个预设跳过的 cell 上做它的工作扩大 cell 集再下结论。查墓地。§5 记录了每个步骤替换了什么。因后来规则吞并而 inert 的是真正的剪枝因其陷阱已退役而 inert 的是剪枝加陷阱应回归的注释。把 holdout 花在剪枝上而不是决策上。电池是决策的依据因此不能同时验证决策。climber-gate/SKILL.md 记录了哪些 holdout 未花。最后一个不对称性错误的保留付出的是复杂度可见且可恢复错误的剪枝付出的是某个没人测量的工作负载上的命中率两者皆不可见也不可恢复。移除一个步骤的门槛应高于保留一个步骤的门槛——本技能被设计成频繁运行、极少删除。2026-08-23 基线f3fad1bdbfull预设种子 1 和 291 个 cell整个 gate 电池加整个真实语料两个种子 × 全部 14 个臂附带每个 cell 的 ship 运行触发计数。buys是步骤作用处的价值spends是它处的成本完整表格见 SKILL.mdstepfiresbuysspendsratiothe returns retest1310.000.3033:1a repeat confirm escalates1639.311.7622:1a parks first audit follows its walk2660.713.0020:1the frozen probation baseline104191.2111.3917:1the audit layer—921.9368.3713.5:1the return and retreat cover—44.124.739.3:1a reversed confirm escalates4371.699.417.6:1deep rungs commit the walk8612.482.345.3:1a blind corner arms a probe551300.3761.074.9:1the fresh-park shield10360.7714.714.1:1the refractory ladder192193.8249.353.9:1deep rungs stride wider67876.0520.563.7:1the guard rails veto140.943.360.3:1the deleted upper corners probe04.329.610.4:1, restored这份基线的三个要点没有 dead也没有 inert。corner读 0 是因为该步骤已不存在于树中其余每个位点都会触发、每个臂至少移动一个 cell所以没有可以免费删除的候选可争。2026-08-18 的两个候选以相反方向结案。恢复上角探测现在每回报 1 要花 2.2在 2026-08-18 的 cell 集上更是 27:1 反对因此 2026-08-21 的删除在当初标记它的证据上成立。而行走的承诺深度当时 N8 读 0.23:1、另一个删除候选现在读 5.3:1。护栏否决是唯一反转了价格的条目也是电池不是全部答案的样板案例。在 2026-08-18 的 cell 集上同种子重定价从 11:1 跌到 1.86:1在整个电池上读 0.3:1。在 N8、两个 rail 臂都移动的八个 cell 上读 0.33:1其 12.87pp 成本中有 10.95 落在sidecliff一个 cell 上八个种子全部 −1.34 到 −1.42cp_w015按流域分裂而不是定价五个种子 0.26三个种子 −0.26 到 −0.37。但每个电池 cell 都从产品起点启动而一个职责是把窗口送回锚点的 rail 从 1% 起点几乎无物可守。planted 之后它在 55% 窗口的mainsat上四个种子全部值6.3 到 6.6pp32.42–32.68 对比noveto的 25.90–26.6570% 时 0.15 到 0.52。它保留而这个发现是关于工具的再次运行本技能前先加一个 planted cell否则 rail 在一个从不要求它工作的电池上会被读成可删除。一个步骤的价格也可以被拆分noreturncover移除整个isReturnTest而它其实是两件事2026-08-21 之前就存在的 held-park retreat cover以及允许它在无 held park 下运行的加宽。nowidecover把 cover 收窄回 held park 并保留 return 半边结果在 68 行中 66 行逐位不变只在cp_w081上各花 0.07 和 0.08。因此 44.12pp 是旧 cover 与 return 半边这正是 moat 与hazefloor行在noreturncover下移动、而落地 return 半边的 commit 读它们逐位不变的原因。当一个臂移除的不止一件事时先拆分再引用其比值作为单个步骤的价格。报告规范报告应包含每个臂的表格四个统计量 结论、每个臂移动的 cell、以及——对任何 inert 项——触发计数与上述四条检查中应用了哪一条。当一个机制已定价并保留时把它的价格记录进 hill-climber.md §5这样下一次运行就能看到它是否变陈旧。从源码理解定价对象WindowClimber 是什么为完整理解这些臂在定价什么需要知道定价对象本身。WindowClimberWindowClimber.java是 Caffeine 自适应窗口大小的控制器由BoundedLocalCache的climb()BoundedLocalCache.java在每个样本周期驱动。它把缓存分为 LRU 准入窗口与 TinyLFU 门控的主区最优分割随工作负载非平稳变化recency 重型负载要 20–80% 窗口频率重型要 ~1%。核心信号是窗口密度与主区密度之比的对数error ln(windowDensity/mainDensity)窗口下限为最大值的 2%。围绕这个密度臂机器还长出了探针rescue 盲角、锚点 护栏hysteresis 切换、平衡审计AuditClock见 WindowClimber.java 中AUDIT_WAIT_INITIAL32、AUDIT_WAIT_MAX512、阶梯退避PROBE_BACKOFF_INITIAL16、PROBE_BACKOFF_MAX64与否决判定VETO_STREAK4等机制——climber-minimize的 14 个臂正是为这些机制逐一标价。climber-minimize的定位是审计工具而非修改工具它不改动当前仓库的代码注入只发生在 worktree 中且绝不提交只负责用实验回答这个步骤今天还值不值它的复杂度。对任何在 Caffeine 上做自适应缓存研究或演进WindowClimber的开发者这套单点禁用 不对称统计 planted 对照 触发计数的方法论本身就是一份可复用的实验设计模板。【免费下载链接】caffeineA high performance caching library for Java项目地址: https://gitcode.com/gh_mirrors/ca/caffeine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考