日期:2026-09-20 实现基线:0b2680d6d64d5ebb2a751561eaf1b3a72ea2e319,第14篇已提交。 范围:examples/distributed-systems/kv15;未改raft核心/旧篇/共享台账;未提交或push。 实际验证,工作目录 examples/distributed-systems: GOTMPDIR="$PWD/.build/tmp" GOCACHE=/private/tmp/ds-go-cache go build -race -o .build/kv15 ./kv15 ./.build/kv15 GOCACHE=/private/tmp/ds-go-cache go vet ./kv15 ./raft 最终完整运行exit0,vet exit0。 固定产物SHA256:b81b2e50442b10dfb974bda7011438d0333f057cda43b9f14030cb3f438cba81 产物与构建中间目录在仓库.build;仅Go编译缓存使用既有/private/tmp/ds-go-cache。 未执行ds13-parent-check或此前失败的raft11;没有换名绕过终止。 首次运行失败保留: 首版retry正常场景通过;dropDedup=true后预期history=false,但checker返回true,程序panic、exit2。 当时客户端历史:A/Add5调用1返回4结果55;B/Put50调用2返回3结果50;C/Get调用5返回6结果55。 该历史实际可把A排在B后,checker正确,错误是验收预期。修复为在B/Put之前通过真实Get屏障完成D/Get5,让首次A效果已被观察。 后续同一路径重建运行通过;再补迟到旧reply在A/2 pending时的断言,同一路径最终构建运行exit0。未变更checker迎合错误预期。 最终作者实际输出(来自.build/kv15-output.txt): history linearizable=true witness=[A/1 add(x,5) D/1 get(x,0) B/1 put(x,50) C/1 get(x,0)] PASS retry dropDedup=false attempts=6 first=5 retry=5 history linearizable=false witness=[] PASS retry dropDedup=true attempts=5 first=5 retry=55 history linearizable=true witness=[A/1 add(x,5) B/1 get(x,0)] PASS snapshot omitDedup=false retry=5 history linearizable=false witness=[] PASS snapshot omitDedup=true retry=10 history linearizable=true witness=[B/1 put(x,50) A/1 add(x,5)] PASS waiter indexOnly=false history linearizable=false witness=[] PASS waiter indexOnly=true history linearizable=true witness=[A/1 put(x,9) B/1 get(x,0)] PASS read skipApply=false history linearizable=false witness=[] PASS read skipApply=true history linearizable=false witness=[] history linearizable=true witness=[A/1 put(x,9) B/1 put(x,27) C/1 get(x,0)] PASS partition: old leader blocked, local-read mutation rejected, recovery converges PASS identities: old sequence, conflicting payload, int64 overflow rejected without mutation PASS checker: pending witness=[A/1 put(x,1) B/1 get(x,0)]; omission, future-write edge, stale read and bound checked 父独立验证(未重新编译,复用同SHA二进制): 全场景exit0,工具chunk3ecb56。 Python subprocess只调现成文件,session6103/chunka89b79: -help exit0 -scenario unknown exit2 unexpected exit2 SHA与作者一致。 边界: 有限串行事件调度,协议消息分区+客户端单独丢/重复回复,没有实际TCP。 State映像恢复不是本篇新增的真实进程/磁盘恢复;没有产品E2E或完整形式证明。 独立checker最多8逻辑操作;输入错误/unsupported与false不同。identity-conflict单独直接状态机测试,不进入正常成功历史规格。 14记录的旧篇累计运行回归缺口保留;本篇没有修改核心或重试旧失败文件。 父站点验收:npm run build退出0,2277文件,日志/private/tmp/ds-build-15.log。浏览器实际页面六张Mermaid均渲染无错误,viewBox为500×510、685×581、519×942、856×430、493×708、332×830;去重时序、快照、pending搜索图截图文字可读。两附件生成内容与源文件逐字一致,两个post_link目标存在。本记录补入后再构建,最终结果见系列STATUS。 写作流程:blog-editor入口与blog-illustrator机制图;父完整审读临时稿后补充至多一次效果归纳前提与完整线性证明边界。落盘前先anti-ai-tone人工四遍及tech检查(errors0,warnings0),随后anti-persona全文人工检查与第一人称/亲历/说书词regex无命中,再复制至文章路径。封面复用系列SVG;6张Mermaid渲染待父复核。