Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

tracking: 工程门禁与测试有效性(2 项)—— 门禁看起来在把关,实际没把住

オープン
#194 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
15/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
bash, github-actions, rust
領域
ci-cd, testing, tooling

調査の方向性

This is a tracking issue, so start from its two sub-issues, #184 and #185, rather than from this body. For #184, read scripts/check-new-deps.sh around line 38, where the grep filter matches every line starting with + or -, and the CI workflow at .github/workflows/ci.yml around line 27 for the fetch-depth setting. For #185, read the ENV_LOCK definition in crates/recursive-cli/src/cli/builder.rs and the unlocked set_var calls in main.rs. Done means the sub-issues' acceptance checks pass, not this issue.

索引モデルが issue の本文から書いたものです。

説明

优先级 P2 · 依赖:无 · 类型:tracking(簇设计入口,不产出代码;子单全部落地后关闭)
记号:正文中的「不变量 #N」指 .dev/AGENTS.md 编号,不是 issue 编号;#150 这类才是 issue。本簇子单头部写 depends-on: #N 表示落地串行(同文件/同契约),不会与语义阻塞混淆。

基线 HEAD = 14bac15a(子单同基线)。本单来自一次全仓审计:先按根因归簇,再拆成可独立验收的子单。

共同根因

两条都是「门禁看起来在把关,实际没把住」:

  1. 不变量 #6 空转(#184):scripts/check-new-deps.sh:38 的 grep -v '^[+-]\+\|...' 里 \+ 是「一个或多个」,于是所有 +/- 开头的行都被过滤,DEP_CHANGES 恒空、脚本恒打印 OK;CI 用默认 fetch-depth: 1(.github/workflows/ci.yml:27),HEAD~1 不存在而 :31 用 2>/dev/null 吞错,于是走「unchanged」分支;tests/invariants/dep_justification.rs:68-79 只找关键字,永远通过。另 :49 用了 grep -P(GNU 扩展)。
  2. 测试隔离失效(#185):crates/recursive-cli/src/cli/builder.rs:1155-1177 的 ENV_LOCK 是模块私有,而 main.rs 的测试另起一套直接 set_var 不取锁(:583、:3992、:4193-4229、:4372-4418、:4628-4695),二者在同一个测试二进制里并行跑。

本轮审计的普遍教训:多条真 bug 的测试执行到了但断言太弱——src/kernel/tests.rs:215-261 只断言非空(真 pinned #156 的丢消息)、src/compact/mod.rs:717 只测 should_compact 不测 runtime(#162 漏网)、handlers.rs:5771 只验层不被清空(#151 漏网)、scripts/check-new-deps.sh 自身(#184)、并行跑必红(#185)。

子单与依赖

子单 依赖 范围
#184 无 修过滤器(只排除 ^+++/^---)+ CI fetch-depth: 2 + base ref 缺失即失败;夹具仓库自检
#185 无 把 ENV_LOCK 提到 crate 级共享(或改为显式 env 视图);并行跑 20 次全绿

落地思路

  1. 两单互不冲突,可并行。
  2. 建议同时确立一条 review 约定(写进 .dev/AGENTS.md 的质量门一节):凡修 bug 的 PR,必须包含「把复现该 bug 的弱断言改强」的一步——否则同一处会二次漂移。这条约定不属于本簇子单,需要单独决定是否入库。
  3. #184 属治理门禁(不改运行时行为)故 P2,但它是自改进 flow 的 rollback 判据之一,建议优先于其它 P2。

簇级验收

  1. 含新增依赖、无 journal 说明的夹具仓库让 check-new-deps.sh 以非零退出;
  2. CI 内 git rev-parse HEAD~1 可用(fetch-depth: 2 生效),base ref 缺失时门禁失败而非静默通过;
  3. cargo test -p recursive-cli --bin recursive 连续 20 次(默认并行)全绿。

边界

不含本簇之外的功能类修复;不含「给每个仓库装上 mutation 门禁」这类更大的工程动作。

实施顺序与验收矩阵(补充 · 2026-10-10)

  • 两单互不冲突,可并行;但 #184 建议优先:它是自改进 flow 的 rollback 判据之一,空转意味着"新增依赖无说明"这类改动永远不会被拦。
  • 两单都不改运行时行为,因此不需要跑 e2e;验收就是"门禁真的会把坏的拦下来"。
  • 建议同时决定是否把这条写进 .dev/AGENTS.md 的质量门:凡修 bug 的 PR 必须包含"把复现该 bug 的弱断言改强"。本轮审计里 5 处弱断言(kernel/tests.rs:215-261、compact/mod.rs:717、compact/mod.rs:1322、handlers.rs:5771、本单 #184 自身)都是"测试跑到过、断言太松"。
主要言語
Rust
スター
4
フォーク
0
平均マージ
5時間 32分
マージ済み PR(30日)
7

環境構築

  • Dockerfile または Docker Compose ファイルあり
  • プルリクエストのテンプレートなし
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

jeffkit/recursive のほかの issue

jeffkit/recursive の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。