Repository navigation
refactor: 批2 重构+哨兵+文档+兼容恢复(#384 #385 #386 #390 #391 #392 #393 #394 #396 #401 #405 #412) - #423
Merged
Merged
Conversation
- #384 jsonrepair 导出 ErrEmptyInput / ErrUnparseable 哨兵,三处终态 errors.Is 可编程分流(空输入=programmer error vs 无法解析=可重试), 文案逐字兼容 - #385 bloomx.hash 盐字节在 FNV 中间态上继续 mix(数学等价、逐位一致), Test/AddBytes 查询热路径零分配;等价性对拍 + AllocsPerRun=0 测试 - #386 mathx 统一迁 math/rand/v2:删手搓 rng+rngMu(并发概率路由全在单锁 排队),unstable 同源收编——双轨制消除,并发分布非退化测试钉住 - #390 urlguard 写面哨兵补齐:ErrSchemeNotAllowed / ErrNonASCIIHost / ErrNotInExactHosts(#380 拨号面已给三个),包文档补错误分类总表 - #391 convert.StructToMap 对 json:"-," 与 encoding/json 键名语义对齐 (判 "-" 在剥选项之前),json.Marshal 键集合对拍契约测试 - #392 webhook.NewGiteeSigner godoc 选项实名改 TimestampSignerWithClock (SignerWithClock 是 HMACSigner 家族,照旧文档写编译不过) - #393 container.Map 补 Snapshot()(sync.Map 背书侧),与 SafeMap.Snapshot 对偶闭合、godoc 互链;独立副本/非 nil/并发烟测 - #394 singleflighttest 元测试三件套:正对照(真实实现过全套件)+ 负对照 (收尾无条件删 key 的缺陷实现必被 ForgetRaceKeepsNewerCall 抓出,子进程) + waitFor 超时路径快速失败(假 TB 进程内钉住) - #396 LocalCache gens 墓碑压缩:清扫写锁阶段按「因子×data+滑差」触发整批 回收不在 data 的 gens 条目;loading 在途计数闸住「捕获 0→Del 造墓碑→ 压缩→复查误判」窗口(回源捕获世代前登记);高基数场景内存界 O(data)+滑差 - #401/#405 errors.Errorf 兼容恢复:行为逐字一致(nil-safe %w / 空格式串返 nil / 非 error %w 实参按 %v 渲染),Deprecated + 迁移指引 + 审计判定修正 记录进 doc.go;原测试套件原样恢复(含与 stdlib fmt.Errorf 的差分对拍) - #412 internal/logkv.ErrKey 单源常量(logx.ErrKey 上游镜像,零依赖底座 引 logx 会成环):cache/distlock 2 处代码改常量,errors/wrap.go godoc 示范改 logx.ErrKey;AGENTS.md 包清单同步
This was referenced Nov 12, 2026
fix: 批3 新增 issue 收编——环防护/写穿防线/口径收口/文档失实(#416 #417 #419 #420 #424 #425 #426 #427 #428,#418 口径声明)
#429
Merged
Closed
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
清零战役 pkg 侧批 2(重构+哨兵+文档)。批 1(缺陷修复 #383/#388/#389/#406/#407/#408/#413)见 #421——本 PR 在其之上,先合 #421 后本 PR diff 收敛为批 2。
#384 jsonrepair 终态错误哨兵
导出 ErrEmptyInput(programmer error,空输入)/ ErrUnparseable(LLM 输出质量问题,可重试),三处终态 errors.Is 分流,文案逐字兼容(宽松闭合失败带后缀包装)。
#385 bloomx 查询热路径分配
盐字节在 FNV-1a 中间态上继续 mix:
Fnv1a64(b+salt) ≡ (Fnv1a64(b)^salt)×prime——数学等价、哈希值逐位不变(对拍测试钉住),TestBytes/AddBytes 零分配(AllocsPerRun=0 测试),h1/h2 共享一次遍历。#386 mathx 随机源双轨制+单锁竞争
统一迁 math/rand/v2:删手搓 rng+rngMu(并发概率路由全部单锁排队),RangeRandFloat64/unstable 同源收编。并发取值分布非退化 + -race 测试钉住。
#390 urlguard 写面哨兵
补齐 ErrSchemeNotAllowed / ErrNonASCIIHost / ErrNotInExactHosts(拨号面 #380 已给 ErrBlockedRange/ErrBlockedDomain/ErrExoticLiteral),包文档补「错误分类表」(防护拦截 vs 配置类 vs 输入形态类分流)。分流互斥断言入测试。
#391 convert.StructToMap 对 json:"-,"
与 encoding/json 键名语义对齐:整体 "-" 排除(敏感字段防泄漏语义保持),"-,"/"-,omitempty" 是名为 "-" 的普通字段照常输出(判 "-" 移到剥选项之前)。json.Marshal 键集合对拍契约测试。
#392 webhook.NewGiteeSigner godoc
选项实名改 TimestampSignerWithClock(SignerWithClock 是 HMACSigner 家族选项,传给本构造器类型错误)。全包 grep 排查其余引用无跨家族漂移;platforms_test.go:224 的既有调用即编译级护栏。
#393 container.Map 缺 Snapshot
补 Map.Snapshot()(sync.Map 背书侧),与 SafeMap.Snapshot 同名同义对偶闭合,godoc 互链。独立副本/空容器非 nil/并发烟测。
#394 singleflighttest 零测试
元测试三件套:① 正对照——真实实现(internal/singleflight)过完整套件;② 负对照——「收尾无条件删 key」缺陷实现(#147 形态)跑 Run 必被 ForgetRaceKeepsNewerCall 抓出(子进程模式,沿 internal/singleflight/contract_broken_test.go 既有先例);③ waitFor 超时路径——假 TB 进程内钉住「~2s 界内干脆 Fatal」,签名放宽 testing.TB。
#396 LocalCache.Del gens 墓碑无界
清扫写锁阶段新增墓碑压缩 compactGensLocked:gens 超出 因子×data+滑差 时整批回收不在 data 的条目(内存界 O(data)+滑差)。安全闸 loading 在途计数:回源捕获世代前先登记(seq-cst),压缩时 >0 整轮跳过——闸死「捕获 0 → Del 造墓碑 → 压缩删墓碑 → 复查见 0 误判未失效」的击穿窗口;已捕获 gen>0 的回源被删墓碑只会保守放弃回填(单向保守)。测试:高基数写失效压缩归零 + 在途跳过 + 写后失效语义保持。
#401/#405 errors.Errorf 兼容恢复(裁决执行)
从 741472e^ 恢复删除前的实现(format.go 全文原样):行为逐字一致——nil-safe %w、空格式串返 nil、非 error %w 实参按 %v 渲染不产 %!w 噪声。godoc 标 Deprecated + 迁移指引(新代码走 stdlib fmt.Errorf(%w) / errors.Wrap kv;跨 org 存量 guardx/go-git-platform/go-gongfeng 不强制迁移、编译与行为不变);doc.go 记录审计判定修正(「零引用」实为「上游内部零引用」,跨 org 72+4 处实证)。原测试套件原样恢复(含与 stdlib fmt.Errorf 的逐 format 差分对拍)。
#412 log "err" 字面量(豁免口径裁决执行)
新建 internal/logkv.ErrKey 单源常量(logx.ErrKey 的上游镜像,镜像契约测试钉值 "err"):cache/local.go 与 distlock/withlock.go 2 处代码改用常量(零依赖底座引 logx 成环,不引);errors/wrap.go godoc 示范面改 logx.ErrKey(面向消费方);AGENTS.md「本仓包含」清单同步 internal/logkv/。全仓 grep 非测试代码 "err" 字面量归零。
验证:GOWORK=off go build/vet 全绿;go test -race 全绿;gofmt 干净;本地 golangci-lint(v2.15.0,仓内 .golangci.yml 全量 linter 集)0 issues。
Fixes #384
Fixes #385
Fixes #386
Fixes #390
Fixes #391
Fixes #392
Fixes #393
Fixes #394
Fixes #396
Fixes #401
Fixes #405
Fixes #412