docs(progress): MASTER 同步 — #1535 合并状态与复杂度豁免偿清 (#1568 #1569) - #1612
Conversation
|
Warning Review limit reached
Next review available in: 31 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…web→#1581) 复核方式:gh issue view 逐个确认存在性与归属,不照抄报告。 改的两条(归属已确认): - frontend-desktop: Lint 1573 → 1575 #1575 = [P2] 偿还 Desktop ESLint 债并移除 frontend-desktop lint 软门禁; 正文明确「quality-debt baseline 暂时把该条目指向 #1536 …不能继续作为实际 lint 债的 owner」+ 完成条件含「删除该 soft gate」,即本条债的 owner。 - frontend-web: Lint Web 1573 → 1581(reason 内的 #1575 同步改 #1581) #1581 = [P2] 清零 Web ESLint warnings并让 Lint Web 对新增 warning fail-closed; 正文原话「#1575 只负责 Desktop ESLint,不覆盖 Web」。报告称本条应为 1575, 实测 1575 明确排除 Web,真实 owner 是 #1581 —— 报告此点不成立,已按实测改。 不改的三条(归属无法确认,按任务要求不猜号,另在 #2154 登记「归属待确认」): - frontend-mobile: Lint (mobile rules):#1575 自述只管 Desktop、#1581 自述只管 Web,gh search 未找到 mobile lint 软门禁的专属 issue;reason 里的 (#1575) 无据。 - validate: Verify i18n callsites ratchet:repo 内 checks.yml:2126 / verifier-map / CHANGELOG 一律写 #1612,但 gh 实测 #1612 是 PR「docs(progress): MASTER 同步」, files 只有 docs/progress/MASTER.md,与 i18n 无关 —— 即全仓的 #1612 引用本身可疑。 - vuln-scan-rust: cargo clippy (advisory):reason 写 #1578;#1578 存在且创建了 vuln-scan-rust job,但其正文/验收条件全程无 clippy(只讲 glib UB + advisory gate),无法确认它是「24 条 clippy warning 待归零」这笔债的 owner。 以上三条 issue 仍是 1573(= Hub lint fingerprint ratchet,可证伪的错误值), 本 commit 不用未确认号覆盖,留待人工裁决。 注:verify-quality-debt-ratchet.py 只校验 issue 为正整数与字段齐全(:232-236), historical ratchet 只比较 review_by(:440-442),故改 issue/reason 不触发棘轮。 门禁: python3 scripts/verify/verify-quality-debt-ratchet.py → 9 pass / 0 fail; git diff --check 干净 Co-authored-by: Cursor <cursor@vectorcontrol.tech>
…web→#1581) 复核方式:gh issue view 逐个确认存在性与归属,不照抄报告。 改的两条(归属已确认): - frontend-desktop: Lint 1573 → 1575 #1575 = [P2] 偿还 Desktop ESLint 债并移除 frontend-desktop lint 软门禁; 正文明确「quality-debt baseline 暂时把该条目指向 #1536 …不能继续作为实际 lint 债的 owner」+ 完成条件含「删除该 soft gate」,即本条债的 owner。 - frontend-web: Lint Web 1573 → 1581(reason 内的 #1575 同步改 #1581) #1581 = [P2] 清零 Web ESLint warnings并让 Lint Web 对新增 warning fail-closed; 正文原话「#1575 只负责 Desktop ESLint,不覆盖 Web」。报告称本条应为 1575, 实测 1575 明确排除 Web,真实 owner 是 #1581 —— 报告此点不成立,已按实测改。 不改的三条(归属无法确认,按任务要求不猜号,另在 #2154 登记「归属待确认」): - frontend-mobile: Lint (mobile rules):#1575 自述只管 Desktop、#1581 自述只管 Web,gh search 未找到 mobile lint 软门禁的专属 issue;reason 里的 (#1575) 无据。 - validate: Verify i18n callsites ratchet:repo 内 checks.yml:2126 / verifier-map / CHANGELOG 一律写 #1612,但 gh 实测 #1612 是 PR「docs(progress): MASTER 同步」, files 只有 docs/progress/MASTER.md,与 i18n 无关 —— 即全仓的 #1612 引用本身可疑。 - vuln-scan-rust: cargo clippy (advisory):reason 写 #1578;#1578 存在且创建了 vuln-scan-rust job,但其正文/验收条件全程无 clippy(只讲 glib UB + advisory gate),无法确认它是「24 条 clippy warning 待归零」这笔债的 owner。 以上三条 issue 仍是 1573(= Hub lint fingerprint ratchet,可证伪的错误值), 本 commit 不用未确认号覆盖,留待人工裁决。 注:verify-quality-debt-ratchet.py 只校验 issue 为正整数与字段齐全(:232-236), historical ratchet 只比较 review_by(:440-442),故改 issue/reason 不触发棘轮。 门禁: python3 scripts/verify/verify-quality-debt-ratchet.py → 9 pass / 0 fail; git diff --check 干净 Co-authored-by: Cursor <cursor@vectorcontrol.tech>
…web→#1581) 复核方式:gh issue view 逐个确认存在性与归属,不照抄报告。 改的两条(归属已确认): - frontend-desktop: Lint 1573 → 1575 #1575 = [P2] 偿还 Desktop ESLint 债并移除 frontend-desktop lint 软门禁; 正文明确「quality-debt baseline 暂时把该条目指向 #1536 …不能继续作为实际 lint 债的 owner」+ 完成条件含「删除该 soft gate」,即本条债的 owner。 - frontend-web: Lint Web 1573 → 1581(reason 内的 #1575 同步改 #1581) #1581 = [P2] 清零 Web ESLint warnings并让 Lint Web 对新增 warning fail-closed; 正文原话「#1575 只负责 Desktop ESLint,不覆盖 Web」。报告称本条应为 1575, 实测 1575 明确排除 Web,真实 owner 是 #1581 —— 报告此点不成立,已按实测改。 不改的三条(归属无法确认,按任务要求不猜号,另在 #2154 登记「归属待确认」): - frontend-mobile: Lint (mobile rules):#1575 自述只管 Desktop、#1581 自述只管 Web,gh search 未找到 mobile lint 软门禁的专属 issue;reason 里的 (#1575) 无据。 - validate: Verify i18n callsites ratchet:repo 内 checks.yml:2126 / verifier-map / CHANGELOG 一律写 #1612,但 gh 实测 #1612 是 PR「docs(progress): MASTER 同步」, files 只有 docs/progress/MASTER.md,与 i18n 无关 —— 即全仓的 #1612 引用本身可疑。 - vuln-scan-rust: cargo clippy (advisory):reason 写 #1578;#1578 存在且创建了 vuln-scan-rust job,但其正文/验收条件全程无 clippy(只讲 glib UB + advisory gate),无法确认它是「24 条 clippy warning 待归零」这笔债的 owner。 以上三条 issue 仍是 1573(= Hub lint fingerprint ratchet,可证伪的错误值), 本 commit 不用未确认号覆盖,留待人工裁决。 注:verify-quality-debt-ratchet.py 只校验 issue 为正整数与字段齐全(:232-236), historical ratchet 只比较 review_by(:440-442),故改 issue/reason 不触发棘轮。 门禁: python3 scripts/verify/verify-quality-debt-ratchet.py → 9 pass / 0 fail; git diff --check 干净 Co-authored-by: Cursor <cursor@vectorcontrol.tech>
…2154)(#2237) ## 这条 lane 是什么 实施 lane E(**纯文档**)= #2154 Feynman 文档探索批的切片 C「对外文档诚实批」。 唯一非 `.md` 改动是第 6 条的 `scripts/verify/quality-debt-baseline.json`(任务书明示的唯一例外)。 **未改任何 `.go` / `.ts` / `.tsx` / `.yaml` 契约文件。** 分支已 `git fetch origin && git rebase origin/master`;上游新增的 `dc7df53d`(纯 Go:edge lifecycle safego 去重 + panic observer)与本分支 9 个文件**零重叠,rebase 无冲突**,因此没有触发「两边都保留 + 行数预算重新核算」的解冲突流程。 合并时 HEAD = `b017f0f4`,base = `94aef98a`(origin/master);lane push 时的 HEAD 为 `8f2ade25`(base `dc7df53d`)。7 个 commit,每个 commit 一次门禁。 **订正(主机侧合并前补记,原文此处写的是「故意不再 rebase」,与最终实况不符)**:push 后 `origin/master` 由 `dc7df53d` 连续前进到 `94aef98a`(#2234/#2235/#2236/#2239/#2240),本仓 `required_status_checks.strict: true` 使 PR 转 `BEHIND`,故本分支**已按纪律 rebase 到 `94aef98a`**,HEAD 由 `8f2ade25` 变为 `b017f0f4`。rebase 前后**写集逐字节零变化**:`git diff --stat 8f2ade2 b017f0f -- AGENTS.md CHANGELOG.md CONTRIBUTING.md README.md README_EN.md SECURITY.md docs/ scripts/verify/quality-debt-baseline.json` **输出为空**;两者全量 diff 只含 master 自身的 `app/pnpm-lock.yaml`+`app/pnpm-workspace.yaml`(#2240)与 `edge-server/internal/events/**`(#2234/#2239),与本 lane 9 个文件零重叠;7 个 commit 逐条 subject 一一对应。因此正文里所有本地实测结论原样成立。rebase 后按原文要求**重跑并复现**:`scripts/verify/verify-doc-ssot.py` → `doc SSOT ok`(verifier-map 66 script paths / 58 CI files、AGENTS.md 96 paths)、`wc -l AGENTS.md` → **284**(≤300 预算)、`git diff --check` 干净;CI run `33666303378` 在 `b017f0f4` 上**全绿**(22 successful / 17 skipped / 0 failing / 0 pending,含 go-hub、go-edge、windows-go、backend-required、frontend-required、ui-required、validate、CodeRabbit),`mergeStateStatus: CLEAN`。 --- ## 逐条三段式证据(文档原话 → 代码/CI 事实 → 改后原话) > 7 条逐字引证与改后原话全文见本 PR 正文(GitHub 侧永久保留),squash commit 只收判定结论以免历史膨胀。 | # | 条目 | 复核判定 | |---|---|---| | 1 | `CONTRIBUTING.md:36` 称 `make test` 跑前端 vitest | ✅ 成立(四处口径改指明 Makefile 目标名) | | 2 | `CHANGELOG.md:5-7`「暂无未发布变更」 | ✅ 成立(改为声明 SSOT 与生成方式) | | 3 | `SECURITY.md:23` 安全门禁工具名指错 | ✅ 成立,且原文另有一处更严重的不诚实 | | 4 | `README.md` / `README_EN.md` |⚠️ 部分成立(禁用词那条报告说法不准确,但假声明本身成立) | | 5 | `verifier-map.md` + `docs/architecture/README.md` 双向差集 | ✅ 成立(补 12 行 + 修 2 处不诚实 + 补 1 行索引) | | 6 | `quality-debt-baseline.json` 的 `issue` 归属 |⚠️ 报告部分成立:6 条里只敢改 2 条 | | 7 | `AGENTS.md` §12 加「CHANGELOG owner」 | ✅ 净减 2 行守住行数预算(284≤300) | ## 复核后判定「不成立 / 已过期」而跳过或改判的条目 | # | 报告说法 | 实测 | 处置 | |---|---|---|---| | 4b | 「路线图/roadmap 被门禁主动禁止却仍存在」 | `verify-doc-ssot.py` 只禁**根级文件 `ROADMAP.md`**(`:100`)、**路径 `docs/roadmap`**(`:109`)、**正则 `ROADMAP\.md`**(`:200`);没有任何规则禁「路线图」这个词,门禁本来就跑得绿 | 报告说法**不成立**,已在 PR 正文写明。但底下的**假声明成立**(`docs/` 里确实没有路线图),故仍按事实改,改法换成门禁理由本身陈述的真事实(roadmap 在 GitHub issues) | | 6 | web lint 债的真实归属是 1575 | `gh issue view 1581` 正文原话「**#1575 只负责 Desktop ESLint,不覆盖 Web**」 | 报告此点**不成立**,改判为 **#1581** | | 6 | i18n callsite 债的真实归属是 1612 | `#1612` 是 PR「docs(progress): MASTER 同步」,`files` 只有 `docs/progress/MASTER.md`;而仓内三处(checks.yml:2126 / verifier-map:27 / CHANGELOG:44)一致引用 #1612 | 报告此点**不成立**(且暴露更大问题:全仓的 #1612 引用可疑)。**不改**,登记 #2154 待裁决 | | 6 | 5/6 条都该改 | 只有 2 条能拿到「该 issue 明确以这笔债为标的」的正文证据 | **只改 2 条**,另 3 条按任务书要求不猜号 | | 1 | 四处口径自相矛盾 | `docs/developer-quickstart.md:122-123` 其实是**正确**的那一处 | quickstart **未改**,只改 CONTRIBUTING(错的那处)+ AGENTS(歧义的那处) | | 2 | 若不成立才补真实条目 | SSOT 判断**成立** | 按要求**没有**手写 Unreleased 列表 | --- ## 门禁表(原跑于 HEAD `8f2ade25` / base `dc7df53d`;rebase 到 `b017f0f4` / base `94aef98a` 后写集零变化,doc 门禁已重跑复现、CI 已全绿重证) | 门禁 | 命令 | 结果 | |---|---|---| | 文档 SSOT(主门禁) | `python3 scripts/verify/verify-doc-ssot.py` | ✅ `doc SSOT ok`;verifier-map **66** 脚本路径 / **58** CI 文件全部存在;AGENTS.md **96** 个反引号路径全部存在;`DOC-README-PARITY` PASS | | CI 结构合同 | `python3 scripts/verify/verify-ci-gates.py` | ✅ `ci gate policy ok` | | 质量债棘轮(动了 baseline) | `python3 scripts/verify/verify-quality-debt-ratchet.py` | ✅ **9 pass / 0 fail** | | 质量债棘轮负向自测 | `python3 scripts/verify/tests/verify-quality-debt-ratchet.Tests.py` | ✅ **15 tests OK** | | skill 白名单 | `python3 scripts/verify/verify-project-skills.py` | ✅ rc=0(`skills root absent (.agents removed) — whitelist gate trivially passes`) | | conventions 方法 SSOT | `python3 scripts/verify/verify-conventions.py` | ✅ `Passed: 1 \| Failed: 0` | | doc-ssot 负向自测 | `python3 scripts/verify/tests/verify-doc-entrypoints.Tests.py` | ✅ `Ran 1 test … OK`(证明主门禁没被我的改动弄钝) | | 空白/冲突标记 | `git diff --check origin/master..HEAD` | ✅ clean | | AGENTS.md 行数 | `wc -l AGENTS.md` | ✅ **284** ≤ 300 | | **GitHub Actions(本 PR 真实 run)** | run [33658111957](https://github.com/TokenDanceLab/AgentHub/actions/runs/33658111957) | ✅ **22 SUCCESS / 17 SKIPPED / 0 非绿**;7 个 required 聚合全绿:`validate` `go-edge` `go-hub` `windows-go` `windows-frontend` `backend-required` `frontend-required` | | 其他行数预算 | `wc -l` | ✅ CHANGELOG.md 80/90、CONTRIBUTING.md 58/90、verifier-map.md 87/120、docs/architecture/README.md 28/40 | **按纪律未跑**:`go test`、`go build`、vitest、coverage、全量 golangci-lint、docker、`make *`(4 核机 + 并行 lane)。 **golangci-lint 幽灵**:本 lane 未跑 golangci-lint,未遇到指向已删除 worktree 路径的缓存幽灵 issue。 --- ## 未验证项(诚实声明) 1. ~~**没有跑任何 CI**~~ → **已验证(本条从「未验证」升级为「已验证」,PR 开出后回写)**:GitHub Actions run [33658111957](https://github.com/TokenDanceLab/AgentHub/actions/runs/33658111957) 结果 **22 SUCCESS / 17 SKIPPED / 0 非绿**,7 个 required 聚合(`validate`/`go-edge`/`go-hub`/`windows-go`/`windows-frontend`/`backend-required`/`frontend-required`)全部 SUCCESS。`validate` 是承载 `verify-doc-ssot.py` + `verify-ci-gates.py` + `verify-quality-debt-ratchet.py` + `verify-conventions.py` + `verify-project-skills.py` 的 job,它 SUCCESS ⇒ 本 PR 全部 9 个文件的改动在 CI 上被同一套门禁判绿,不只是我本地判绿。`go-*` 侧也跑了(因为 `scripts/verify/**` 在 `changes` job 的 `go` 路径过滤里,baseline JSON 改动触发了 Go lane),`go-hub` 的 golangci-lint + 覆盖率门禁 SUCCESS ⇒ 未出现缓存幽灵。 **顺带活体印证第 3 条的改法**:`Vuln scan (pnpm audit prod+full)`、`Vuln scan (govulncheck)`、`Vuln scan (cargo audit)`、全部 `frontend-*`、`Visual QA *`、`Design CSS syntax` 在本 PR 均为 **SKIPPED** —— 正是我写进 `SECURITY.md` 的「三个 vuln-scan job 都经 `changes` job 路径过滤触发,不是每次 push 全量扫描」的实时证据(本 PR 不含 `app/**` 改动)。 2. **markdown 渲染只在本地按 CommonMark 规则推断**,没有在 GitHub 上肉眼看过渲染结果。两处需要 review 时确认:`docs/architecture/README.md` 新增行、`verifier-map.md` 宏观四行并入主表后是否真的渲染成表格。 3. **`gh issue view` 读到的是 issue/PR 的当前标题与正文**,不能证明「该 issue 在软门禁被引入的那一刻就是 owner」。desktop→#1575 / web→#1581 的判定依据是两个 issue 正文**逐字点名了对应的 baseline 条目与 step 名**,这是我能拿到的最强证据,但仍属文档考古而非当事人确认。 4. **tag `v0.6.1` 与 master 历史脱钩**这件事我只做了 `git merge-base --is-ancestor` / `git merge-base` 两个命令的验证,**没有**去查 release.yml 的历史 run 是否真的因此失败过,也没有验证 git-cliff 在无前序 tag 时的实际输出长度。它超出纯文档 lane 范围,只登记不动手。 5. **未改任何产品代码**,因此第 3/5 条里所有关于「门禁 fail-closed」的描述都是**读脚本源码 + workflow YAML 得出**,不是我实跑这些门禁观察到的红/绿。唯一实跑过的是 `verify-doc-ssot.py` / `verify-ci-gates.py` / `verify-quality-debt-ratchet.py` / `verify-conventions.py` / `verify-project-skills.py` 及两个负向自测。 --- ## 需要人工裁决 / 后续 issue(已同步登记 #2154) 1. quality-debt baseline 3 条 `issue` 归属待确认:`frontend-mobile: Lint (mobile rules)`、`validate: Verify i18n callsites ratchet`、`vuln-scan-rust: cargo clippy (advisory)`(现值均为可证伪的 1573)。 2. 全仓 `#1612` 引用可疑(checks.yml:2126 / verifier-map:27 / CHANGELOG:44 三处),需定位 i18n callsite ratchet 的真实接线 issue/PR。 3. tag `v0.6.1` 不在 master 祖先链上 ⇒ `release.yml:42` tag-guard 与 git-cliff `--latest` 的前序 tag 解析都受影响,下一次打 tag 前需裁决(重打 tag / 调整 cliff 调用 / 接受全量分组)。 4. `cliff.toml` 的 `^security` commit parser 是**死分支**(提交类型白名单不含 `security`):要么给白名单加 `security`,要么删掉这个 parser 并改用 label/其它机制披露安全修复。本 PR 只把 SECURITY.md 的承诺改成与现状一致,没动 cliff.toml(属产品配置,非纯文档 lane 范围)。 5. `scripts/verify/tests/merge-coverprofiles.Tests.py` 与 `scripts/verify/tests/verify-real-e2e-artifacts.Tests.py` **存在于磁盘但没有任何 workflow 调用**(`grep .github/workflows/` 零命中)⇒ 两个负向自测是死的。我在 verifier-map 里因此**没有**把它们写成「负向自测」(只登记了脚本本体),避免制造新的假绿声明;是否接线请裁决。 6. #1575 / #1581 均已 CLOSED,但对应的两条 `continue-on-error` 软门禁**仍在 checks.yml 里活着**(`verify-quality-debt-ratchet.py` 的 zombie 检查 PASS 即证明这点),且两条的 `review_by` 都是 `2026-10-01`。即「偿还 ESLint 债并移除软门禁」的 issue 关了、软门禁没移除。属治理不一致,非本 lane 范围。 ## 流程事故记录(不影响代码,但影响交付物可信度,故如实记) 开出本 PR 后、往 #2154 贴登记评论时,**另一条并行 lane(Lane A,#2154 评论 `5513247382`)在同一分钟覆写了 `/tmp/pr-body.md`** —— 两条 lane 用了同一个临时文件名。后果与处置: - **PR #2237 正文未受影响**:`gh pr create` 在覆写发生前已执行完毕。事后用 `gh pr view 2237 --json body` 回读实测 21035 字符,首句「## 这条 lane 是什么」、末句「Closes 无(本 PR 是 #2154 的切片 C…)」,且 `grep -c "toast.actionUnavailable"`(对方正文特征串)= 0 ⇒ 内容是我的、完整的。 - **#2154 的首版评论被污染**:拼评论时读到的是对方正文,等于把我的抬头 + Lane A 的正文贴了上去。已从 PR 正文回读重建、用 `gh api -X PATCH .../issues/comments/5513238457` **原地编辑**修正(不新贴第二条制造噪声),并复核修正后正文里对方 lane 的 5 个特征串(`§6.4`/`§6.5`/`desktop forward`/`regenerate 是否另开 lane`/`i18n 资源面 lane`)全部 0 命中、我的 4 个结构节各 1 次。 - **教训(供主机侧收进并行 lane 纪律)**:多 lane 并行时临时文件必须用 lane 唯一路径。本 lane 后续已改用 `/tmp/laneE-doc-honesty-2237/`。这与 `AGENTS.md`「一个 worktree 同时只放一个写 agent」是同一类风险,但发生在 worktree 之外的共享 `/tmp`,现有规则没覆盖到。 Closes 无(本 PR 是 #2154 的切片 C,#2154 由主机侧统一收口,不在此自动关单)。
MASTER.md 两处状态同步:
quality-debt-baseline.json的golangci_exclusions已清零;负测试改用合成 fixture 行。Closes #1568