按时间倒序记录代码仓的变更。每个 spec 完成 / stage 验收 / release 都追加一行。
格式参考 Keep a Changelog。
- [spec-0.11-test-framework] FROZEN — tag
v0.11.0-stage0.11(spec-0.7 D-2 dual-repo 自动化) - 6 deliverable: D-1
internal/testing/tablerun(Run/RunParallel/Skippable + mustExtractName fail-fast 反射) + D-2internal/testing/must(File/WriteTemp/WriteFile/WriteFileAt/JSON/NoErr/ErrCode) + D-3internal/testing/golden(Compare/CompareString/CompareFile + Update() live flag.Getter.Get) + D-4internal/testing/uitest(PTY+vt10x cell-grid harness, pty.StartWithSize + vt10x.Terminal interface + pumpOutput loop-until-EOF + 3-step bounded close ≤2s + windows build tag 排除) + D-5 retrofit scope-cut → spec-0.11.5 (must.WriteFileAt API delivered as bridge) + D-6docs/testing-conventions.mdSSOT (198 LOC, 6 节, 双仓 bit-identical) - 4 包覆盖率: tablerun 100% / must 92.2% / golden 93.8% / uitest 97.0% — 全 ≥90% Tool tier
- 4 round AI review 共 ~104 unique finding 全消化:
- R1 → R2 46 finding (pre-impl 双路 codex + claude)
- R2 → R3 14 finding (codex round-2 verification)
- R3 → R4 11 finding (codex round-3 verification)
- T-12 post-impl 三路 ~33 finding (codex + claude + go-reviewer)
- 3 codex HIGH 真代码 bug 修复:
- pumpOutput EOF (vt10x.Parse 返回时机修正)
- SnapshotGolden callerDir routing
- LayerTests test-variant import allowance
- 方法论教训: vt10x wcwidth R1-R4 修订线被 T-6 实测推翻 (vt10x 不模拟 wcwidth, unwritten cell 是 U+0020) — 假设驱动设计 vs 探测驱动设计
- 依赖加入 go.mod:
github.com/creack/pty v1.1.24(MIT) +github.com/hinshun/vt10x v0.0.0-20220301184237(MIT) — 0 transitive modules each - 三路 trace: opendbrb
docs/reviews/{codex,claude-code-reviewer,go-reviewer}-spec-0.11-{pre,post}-impl-review-2026-05-{14,15}.md(6 trace 全集; pre-impl 2 + post-impl 3 + codex round-2/3 verification 2) - CLAUDE.md § 9 双 trace 最小: post-impl 提供 3 trace 满足要求
errcode-lintnow resolveserrors.New/fmt.Errorf/errcode.*through Go type info, so aliased imports cannot bypass the boundary error-code contract.errcode-lintnow emitsEC-3for unproved public error returns instead of silently skipping helper calls / unknown locals; intentional cases must use a spec-referenced exemption.cmd/opendbxis no longer exempt from errcode boundary enforcement.opendb-bannow rejects exact root imports such asgithub.com/opendb, not only subpaths.- The pre-commit gofmt check now compares staged blobs instead of the working tree.
- [spec-0.10-lint-static-analysis] FROZEN — tag
v0.10.0-stage0.10(spec-0.7 D-2 dual-repo 自动化) - 6 deliverable: D-1
.golangci.yml9 精选 linters (errcheck/govet/staticcheck/gosec/revive/errorlint/ineffassign/nilnil/unused + nolintlint meta) + settings hardening + D-2tools/errcode-lintStandalone Go binary (spec-0.6 D-4 forward, public API errcode permanent enforcement; AST-based reachingAssignSource local-var detection + classifyReturnExpr 3-way classification + audit manifest 40 sites + invariant test) + D-2.5tools/suppression-lintAST-based (parser.ParseFile + ParseComments) 替代 nolintlint 局限 (4 family spec_ref protocol enforcement: nolint / nosec / errcode-lint:exempt / govulncheck-exempt) + D-3 import-rules-check 4 new rules (IMP-5 opendb-ban / IMP-6 render-cascade / IMP-7 llm-sdk-isolation with LLMSDKRoots boundary-safe / IMP-8 runewidth-wrap) + D-4 opendbrb-commit-lint 4 new check (Spec footer regex / scope regex / BREAKING CHANGE iff strict + BANG_NO_BREAKING_BODY / line-length) + D-5 pre-commit hook 调 bin/ binary +make lint-all+ CI validate 接入 + D-6 opendbrbdocs/lint-policy.mdSSOT (~190 LOC, 6 节) - Tool tier 覆盖率 ≥90%: errcode-lint / suppression-lint / opendbrb-commit-lint 均满足 spec-0.8 D-1 四档 tier 门槛
- 全程评审 4 round 共 46 unique finding 全消化:
- R1 b38baf7 — initial 13 节 draft (522 行)
- R2 1bdb5f7 — 双路 pre-impl review 33 finding (codex 11H/10M/8L/4N + claude 3H/3M/2L/2N dedup ≈ 33)
- T-13 1580e71 + be985bd — 三路 post-impl review 13 finding (go-reviewer CRIT-1 suppression-lint isRoot walker 静默 0 文件 / codex HIGH-1 errcode-lint local-var bare-error detection / 三路 HIGH-2 commit-lint 5 新 code exit 1 / codex MED-1 audit manifest / codex MED-2 BREAKING iff strict / go-reviewer MED-2 suppression-lint AST refactor 消除 6 false positive / codex LOW-1 LLMSDKRoots boundary-safe + 5 retrofit nolint spec_ref + 2 new bad fixtures)
- 三路 trace: opendbrb
docs/reviews/{codex,claude-code-reviewer,go-reviewer}-spec-0.10-{pre,post}-impl-review-2026-05-14.md(6 trace 全集) - CLAUDE.md § 9 双 trace 最小: T-13 提供 3 trace 满足要求
make vuln-checknow installs and verifies pinnedgovulncheck@v1.1.4before scanning, so CI cannot accidentally reuse a preinstalled scanner with a different version.sync-branch-protection.sh --dry-runnow fails loudly on GitHub API/network/permission errors and only treats explicit 404/not-protected responses as "no protection configured".
- [spec-0.9-ci-github-actions] FROZEN — tag
v0.9.0-stage0.9(spec-0.7 D-2 dual-repo 自动化) - 8 deliverable: D-1 ci.yml 9 stable-name required job + D-2 security gosec @v2.21.4 + SARIF + D-2.5 vuln-allowlist Go 工具 + D-3 perf-smoke WARN-only + D-4 nightly-chaos 4 stub + D-5 sync-branch-protection + ci-protection-check + D-6 opendbrb docs/cicd-required-jobs.md + D-7 retention 规约
- 9 required stable contexts: validate / build-linux / build-macos / unit-test / import-rules / dependency-policy / cli-golden / security / perf-smoke
- 双 Go 工具覆盖率:vuln-allowlist 92.6% / ci-protection-check 92.6% (Tool tier ≥90%)
- R2 pre-impl 27 + T-7.5 Round 1 mid-impl 11 + T-13 Round 2 post-impl 6 = 44 finding 全消化(三路 reviewer × 3 轮 review)
- 三路 trace: opendbrb
docs/reviews/{codex,claude-code-reviewer,go-reviewer}-spec-0.9-{pre,mid,post}-impl-review-2026-05-14.md(8 trace 全集)
- [spec-0.8-makefile-build] FROZEN — tag
v0.8.0-stage0.8(spec-0.7 D-2 dual-repo 自动化) - 7 deliverable: coverage-gate 四档 tier (core/tool/other/exempt) + bench WARN + 双仓 tag-spec wrapper + release stub + opendbrb top-level Makefile + makefile-check 7 violation kind + 双仓 doc 块
- coverage-gate 91.7% / makefile-check 96.6% (Tool tier ≥90%)
- R2 pre-impl 24 finding + T-13 post-impl 16 finding 全消化
- 三路 trace: opendbrb
docs/reviews/{codex,claude-code-reviewer,go-reviewer}-spec-0.8-post-impl-review-2026-05-12.md
- [spec-0.8-makefile-build] T-13 — codex REQUEST-CHANGES + claude/go APPROVE-WITH-FIXES 共 16 finding 全消化(用户拍板"补 tool 包 ≥90% 独立门槛 + 单 PR 全消化")
- CRIT-1 (codex):
tools/coverage-gate+tools/makefile-check从 exempt 移到新 Tool tier ≥90%;coverage-gate 91.7% / makefile-check 96.6% - HIGH-1 双路 (codex+claude):
make gate新增registry-drift-checksibling-aware delegation(spec D-5 要求) - HIGH (go-reviewer): 15 处
_ := f(...)test errcheck →mustParse(t,...)/mustCheck(t,...)helper - MED-1 (codex):
bench移除| tee改 redirect + cat(rc 真实反映 go test 退出码) - MED-2 (codex, opt-in): coverage-gate 加
ListPackages()+InjectMissing()+-enumerateflag;默认 off 防 Stage 0 stub 包误伤,全量延 spec-1.X+ - LOW-1 (codex): makefile-check 加
VHelpTooLong(spec § 2.3 #4 强制 ≤60 char);两 Makefile help text 全部缩短 - LOW-2 (codex):
BENCH_OUTPUT ?= bench.out(对齐 spec D-2) - 公开类型 godoc 补齐(go-reviewer MED-3/4)
- 三路 trace: opendbrb
docs/reviews/{codex,claude-code-reviewer,go-reviewer}-spec-0.8-post-impl-review-2026-05-12.md
- 仓库初始化(README / CLAUDE.md / LICENSE / .gitignore / Makefile)
cmd/opendbx/main.go骨架(仅--version).github/workflows/ci.yml基础 CI(build + test)go.mod(Go 1.22+)
- Stage: 0(工程基建期)
- 设计仓:sqlrush/opendbrb(私有)