Skip to content

db-late バッジ補正: ドキュメント追加が遅かった 56 エントリに since を明示#3282

Merged
znz merged 3 commits into
rurema:masterfrom
znz:db-late-badge-corrections
Jul 24, 2026
Merged

db-late バッジ補正: ドキュメント追加が遅かった 56 エントリに since を明示#3282
znz merged 3 commits into
rurema:masterfrom
znz:db-late-badge-corrections

Conversation

@znz

@znz znz commented Jul 23, 2026

Copy link
Copy Markdown
Member

refs #3269

メソッド単位 since バッジは「本番 DB 17 版でエントリが最初に現れる版」から自動計算されるため、ドキュメントの追加が実際のメソッド導入より遅かったエントリは、バッジが実際より遅い版を表示してしまいます(#3274tools/method-versions/mismatch-report.md で db-late に分類した 92 件)。凍結 DB(2.7.0 以前)は再生成されないため、#3256 と同方式の明示 {: since=} 属性で 56 エントリ(28 ファイル・78 行) を補正します。

内訳

  • {: since=""}(バッジ非表示)= 41 エントリ — 昔から public な継承メソッドとして呼び出せたもの(Array#all?/none?/one?/max/min/minmax、Range#to_a/min/max ほか、各クラスの inspect/==/eql?/hash/=~/=== 系)。バージョンバッジ算出の誤りを {: since=""} / {: since="X"} で補正する #3256 で collect/any? に適用したのと同じ方針です。
  • 実値付き = 15 エントリ — クラス自体の導入がゲートになるもの(Complex/Rational 系 = 1.9.1、Enumerator::Lazy#with_index = 2.0.0、Process::Waiter#pid = 2.2.0 など)や機能新設(Rational#positive?/negative? = 2.3.0、Struct#deconstruct/deconstruct_keys = 2.7.0、Thread#set_trace_func = 1.9.2、Object#initialize_dup = 1.9.2 など)。

全 56 件、旧版 Ruby(all-ruby の各版バイナリ)で「その版で実際に呼び出せる/前の版では呼び出せない」ことを確認済みです。

トリアージで「修正不要」と確定した 8 件(doc 変更なし)

  • private 継承の誤検出(現行バッジが既に正しい): Binding#local_variables・Fiber#raise・NameError#local_variables
  • 既存の #@since ゲートの意図した帰結: ENV.dup(3.1)・Range#reverse_each(3.3)
  • undef の見落とし: Complex#<=> は 2.6 まで undef されていて呼び出せない(実機確認)ため現行バッジ 2.7.0 が正当
  • 属性だけでは正確に直せない(要検討): KeyError.new({: since=} はメソッド名単位で全オーバーロードに共有されるため、基本形 1.9.1 とキーワード形 2.6.0 を切り分けられない)・Object#initialize_clone(freeze: キーワードが 3.0 新設)

この経緯と、explicit-wrong 4 件(ARGF.class の print 系)が誤検出だった訂正を tools/method-versions/mismatch-report.md に正誤表として追記しています(compare.rb の既知の限界=可視性無視・undef 非検出なども記録)。

確認

🤖 Generated with Claude Code

メソッド単位 since バッジは DB 上の初出版から自動計算されるため、
ドキュメント追加が実際の導入より遅いと、バッジが実際より遅い版を
表示する(tools/method-versions/mismatch-report.md の db-late 分類)。
凍結 DB(2.7.0 以前)は再生成されないため、rurema#3256 と同方式で明示
{: since=} 属性により補正する。

- {: since=""}(バッジ非表示)…昔から public な継承メソッドで呼び出せた
  エントリ(Array#all?/max、Range#to_a、各クラスの inspect/==/hash 等)。
  rurema#3256 の collect/any? と同じ方針
- 実値付き …クラス自体の導入(Complex/Rational=1.9.1 等)や機能新設
  (positive?/negative?=2.3.0、deconstruct=2.7.0 等)がゲートになるもの。
  全値を旧版 Ruby(all-ruby)実機で呼び出し確認済み

トリアージで修正不要と確定した 8 件(private 継承の誤検出 3・既存
ゲートの帰結 2・Complex#<=> の undef 1・要人間判断 2)と、
explicit-wrong 4 件が誤検出だった訂正を mismatch-report.md に追記。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@znz znz left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

メソッドごとの since/until はメソッド名のみを基準として引数の違いは考慮しないという方針だったはずなので、 KeyError.new についてはそのままで良いはずです。
(キーワード引数化などの signature ごとでわけるなら、対応が必要なメソッドは他にもたくさんありそうです。)

Comment thread manual/api/_builtin/ENV.md Outdated
Comment thread manual/api/_builtin/ENV.md
Comment thread manual/api/_builtin/NilClass.md Outdated
znz さんのレビュー指摘(rurema#3282)対応。当初これらを継承で常時呼べるとして
{: since=""} にしたが、実際にはメソッド固有のバージョン事情があり、
バッジまたは本文で明示すべきだった(実測 all-ruby で確認):

- ENV.freeze: Ruby 2.7 で TypeError を発生させる自クラス定義が追加された
  (2.6 以前は例外なし)。{: since="2.7.0"} に修正し本文にも明記
- ENV.clone: 2.6〜3.1 は動作するが Ruby 3.2 から複製自体ができず TypeError
  になる。本文に明記({: since="" のまま})
- NilClass#=~: Object#=~ が deprecated になった Ruby 2.6 で追加された
  (Object#=~ は 3.2 で削除)。{: since="2.6.0"} に修正し本文にも経緯を明記

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@znz

znz commented Jul 24, 2026

Copy link
Copy Markdown
Member Author

レビューありがとうございます。3 件ともご指摘のとおりでした。継承で常時呼べることを重視して {: since=""} にしていましたが、いずれもメソッド固有のバージョン事情があり、バッジまたは本文で明示すべきでした。実機(all-ruby)で確認して修正しました(コミット bc3bc4e)。

  • ENV.freeze: 実測でも 2.6 では例外なし・2.7 から TypeError でした(2.7 で自クラス定義が追加)。{: since="2.7.0"} に直し、「Ruby 2.7 で追加された挙動。それより前は例外を発生させなかった」旨を本文にも追記しました。
  • ENV.clone: 2.6〜3.1 は動作し、**3.2 から複製自体ができず TypeError(Cannot clone ENV)**でした。本文に「3.2 からは複製自体ができなくなり TypeError が発生する」を追記しました(バッジは since="" のまま)。
  • NilClass#=~: 2.6 で追加でした([m:Object#=~] が 2.6 で deprecated・3.2 で削除、その代替として nil のマッチを警告なしで行うために追加)。{: since="2.6.0"} に直し、その経緯を本文にも追記しました。

なお同じ =~ でも [m:Symbol#=~] は 1.9.3 からの実マッチメソッド(Integer | nil を返す)で性質が異なり、since=""(バッジなし)のままにしています。

bitclust のミニ描画で 3 件のバッジ・本文が正しく描画されること、rake check_blank_lines 等の lint 通過も確認済みです。

🤖 Generated with Claude Code

Comment thread manual/api/_builtin/ENV.md
Comment thread manual/api/_builtin/NilClass.md Outdated
znz さんの追加インラインレビュー・review(rurema#3282)対応:

- ENV.clone: 3.2 以降は常に TypeError で返り値が無いため、#@SInCE 3.2 で
  シグネチャの返り値を -> () に分岐(それ以前は -> object)。znz さん提案の形
- NilClass#=~: 本文の [m:Object#=~] は Object#=~ が 3.2 で削除済みのため
  3.2 以降のページでリンク切れになる。平文(コードスパン)に変更
- KeyError.new: since はメソッド名基準・引数差は考慮しないという方針に従い
  {: since="1.9.1"}(KeyError クラス導入版)を付与。receiver:/key: の
  キーワード版が 2.6 なのは方針上バッジに反映しない
- Object#initialize_clone: 同方針で {: since="1.9.2"}(導入版)を付与。
  freeze: キーワード(3.0)は反映しない。姉妹の initialize_dup と揃えた

いずれも all-ruby 実機で版を確認済み。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@znz

znz commented Jul 24, 2026

Copy link
Copy Markdown
Member Author

追加のレビューありがとうございます。すべて反映しました(コミット 2902f88)。

インラインの 2 件

  • ENV.clone の返り値: ご提案どおり #@since 3.2 で分岐し、3.2 以降は -> ()(常に TypeError で返り値なし)、それ以前は -> object としました。
  • NilClass#=~ の [m:Object#=~]: ご指摘のとおり [m:Object#=~] は #@until 3.2 で 3.2 以降には存在せず、NilClass のページは 3.2 以降でも出るためリンク切れになります。本文の 2 箇所を平文(`Object#=~`)に変更しました。

KeyError.new の方針(review より)

「since はメソッド名のみを基準・引数の違いは考慮しない」方針、承知しました。それに従い、needs-human としていた 2 件を素直にバッジ付与に変更しました:

  • KeyError.new: {: since="1.9.1"}(KeyError クラスの導入版)。receiver: / key: のキーワード版が 2.6 なのは方針どおりバッジには反映していません。
  • Object#initialize_clone: 同じ理由で保留していましたが、同方針で {: since="1.9.2"}(導入版)を付与しました(freeze: キーワードが 3.0 なのは反映せず)。姉妹の initialize_dup と揃います。

(おっしゃるとおり、signature ごとに分けるとキーワード引数化などで対応対象が大量になるので、名前基準が妥当だと思います。)

bitclust ミニ描画で、KeyError.new=「since Ruby 1.9.1」・initialize_clone=「since Ruby 1.9.2」・ENV.clone の 3.2 の -> () 分岐・NilClass#=~ の Object#=~ 非リンク化・compileerror ゼロ を確認済みです。

🤖 Generated with Claude Code

@znz
znz merged commit 4b22314 into rurema:master Jul 24, 2026
9 checks passed
@znz
znz deleted the db-late-badge-corrections branch July 24, 2026 05:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant