-*- coding: utf-8 -*-

base-url = https://github.com/ruby/ruby

commit e04267a14b1a5dea2d2c368e48d41bd3db441f4f
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-13 11:02:40 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-13 11:02:40 +0900

    v4.0.1

commit a10f7fac1fb1dcbdb1ae41137bd7294764a34793
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-13 10:59:55 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-13 10:59:55 +0900

    Sync Prism to 1.8.0

commit ac596948d4008c6e117449786c62de4e45e434bf
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-13 10:14:52 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-13 10:14:52 +0900

    merge revision(s) 7e81bf5c0c8f43602e6d901f4253dca2f3d71745: [Backport #21812]

            [PATCH] Fix sleep spurious wakeup from sigchld (#15802)

            When sleeping with `sleep`, currently the main thread can get woken up from sigchld
            from any thread (subprocess exited). The timer thread wakes up the main thread when this
            happens, as it checks for signals. The main thread then executes the ruby sigchld handler
            if one is registered and is supposed to go back to sleep immediately. This is not ideal but
            it's the way it's worked for a while. In commit 8d8159e7d8 I added writes to `th->status`
            before and after `wait_running_turn` in `thread_sched_to_waiting_until_wakeup`, which is
            called from `sleep`. This is usually the right way to set the thread's status, but `sleep`
            is an exception because the writes to `th->status` are done in `sleep_forever`. There's a
            loop that checks `th->status` in `sleep_forever`. When the main thread got woken up from
            sigchld it saw the changed `th->status` and continued to run the main thread instead of
            going back to sleep.

            The following script shows the error. It was returning instead of sleeping forever.

            ```ruby
            t = Thread.new do
              sleep 0.3
              `echo hello`  # Spawns subprocess
              puts "Subprocess exited"
            end

            puts "Main thread sleeping..."
            result = sleep  # Should block forever
            puts "sleep returned: #{result.inspect}"
            ```

            Fixes [Bug #21812]

commit 6273c59a6e1f8587e549d5a5f44fd9363e6eb018
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-13 10:13:00 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-13 10:13:00 +0900

    merge revision(s) d7a6ff8224519005d2deeb3f4e98689a8a0835ad: [Backport #21819]

            [PATCH] [Bug #21819] Data objects without members should also be frozen

commit 3601b6c2c1226482a001b98863fe6f79cd84ad35
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-13 10:11:36 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-13 10:11:36 +0900

    merge revision(s) 9824724b2ffe583302e9318c6eff7a440478125f: [Backport #21815]

            [PATCH] Skip test_write_binary(GemSingletonTest) at rbs tests

            ```
            Errno::EACCES: Permission denied @ rb_file_s_rename
            ...
            D:/a/ruby/ruby/src/lib/rubygems/util/atomic_file_writer.rb:42:in 'File.rename'
            ```

            It may caused with atomic_file_writer.rb

commit 893dcb5f25cbb0574ae73aa8fc926fd26750a27f
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-13 10:05:12 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-13 10:05:12 +0900

    merge revision(s) 19e539c9ee1701b34189fa0c1feb942adeb0e326: [Backport #21814]

            [PATCH] [Bug #21814] Fix negative bignum modulo

            If modulo is zero, do not  apply bias even if the divisor is zero.
            `BIGNUM_POSITIVE_P` is true even on bignum zero.

commit b170f02e0f2a7831b51a9279ee2d35a5e4ecace9
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-13 10:02:01 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-13 10:02:01 +0900

    merge revision(s) 4e0bb58a0a374b40b7691e7b7aa88e759a0fc9f2: [Backport #21811]

            [PATCH] fix underflow

commit cc4ce48f1277125df6c981a21efa4256c350a8ae
  Author:     Stan Lo <stan001212@gmail.com>
  AuthorDate: 2026-01-09 08:07:50 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-13 10:01:27 +0900

    Remove ruby-bench excludes

    These benchmarks should be working fine now.

commit e52aee688b2e09237fca45c52d3bb4a55eda9baa
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-13 09:55:40 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-13 09:59:42 +0900

    redmine-backporter.rb: Check remote-tracking branch

    on `has_commit` check for the `backport` command.

    I don't maintain local "master" branch on my ruby repository for stable
    branch maintenance. I want just running `git fetch origin` to make it
    work. It should work for those who pull origin/master into their local
    master too.

commit 8d764da35768073c2e21ffeffa27ff2f3ab589b0
  Author:     Chris Hasiński <krzysztof.hasinski@gmail.com>
  AuthorDate: 2026-01-08 09:13:38 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-09 02:08:38 +0900

    Fix incorrect bundled gems warning for hyphenated gem names

    When requiring a file like "benchmark/ips", the warning system would
    incorrectly warn about the "benchmark" gem not being a default gem,
    even when the user has "benchmark-ips" (a separate third-party gem)
    in their Gemfile.

    The fix checks if a hyphenated version of the require path exists in
    the bundle specs before issuing a warning. For example, requiring
    "benchmark/ips" now checks for both "benchmark" and "benchmark-ips"
    in the Gemfile.

    [Bug #21828]

commit be5d24eb0380360d0a1aeea99545d837ffe3eb24
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-06 06:47:53 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-06 06:47:53 +0900

    Add k0kubun as CODEOWNERS

commit e7b92abf3ab1a5f1eb6bae74df9ee71cd13a96dd
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-06 06:33:57 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-06 06:42:15 +0900

    ruby-bench: Prefer --excludes over rm -rf

    to remind us of skipped benchmarks in the CI job names

commit 34aa97ed60a87cad9a4b016cf6393b83bc6b2797
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 10:14:16 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-06 06:41:58 +0900

    Disabled to run lobsters benchmark because it didn't work with Ruby 4.1 yet

commit d555ddcfb3ec3cce17ff78f1823a6c026a0d2b1e
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-26 11:11:56 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-06 06:21:10 +0900

    uutils-coreutils 0.5.0 has been removed uutils wrapper

commit 9b2ff68f17d225aed2ae9e72a51014cbfcaaaff1
  Author:     Satoshi Tagomori <s-tagomori@sakura.ad.jp>
  AuthorDate: 2025-12-30 22:01:54 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-06 06:00:14 +0900

    Box: skip checking the current box is the root box

    Because checking the current box is not a cheap process.

commit b3371c6ae5dd6fcecd12128f7b3e1e18e219bd3d
  Author:     Satoshi Tagomori <s-tagomori@sakura.ad.jp>
  AuthorDate: 2025-12-30 14:46:19 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-06 06:00:14 +0900

    Box: allocate classes as boxable when it happens in the root box

    Without this change, classes (including iclass) are allocated
    as un-boxable classes after initializing user boxes (after starting
    script evaluation). Under this situation, iclasses are created as
    un-boxabled class when core modules are included by a class in the
    root box, then it causes problems because it's in the root box but
    it can't have multiple classexts.

    This change makes it possible to allocate boxable classes even after
    initializing user boxes. Classes create in the root box will be
    boxable, and those can have 2 or more classexts.

commit 35c140f92be2c0676c6433e037996926aa935982
  Author:     Jean Boussier <jean.boussier@gmail.com>
  AuthorDate: 2025-12-26 17:14:57 +0900
  Commit:     Jean Boussier <jean.boussier@gmail.com>
  CommitDate: 2025-12-26 21:23:56 +0900

    [DOC] Remove outdated documentation about command injection

    [Feature #19630]

    This dangerous behavior was removed in 4.0 (996cae65f3cc8fed60c6bb758b00882cac49389d)
    but the documentation wasn't updated.

commit 553f1675f3a9cece340b90f374a4245dccac2272
  Author:     NARUSE, Yui <naruse@airemix.jp>
  AuthorDate: 2025-12-25 12:20:40 +0900
  Commit:     NARUSE, Yui <naruse@airemix.jp>
  CommitDate: 2025-12-25 12:20:40 +0900

    v4.0.0

commit d375bcc965d4a0c661785fa94150f6202e99c1ce
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-25 11:56:41 +0900
  Commit:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  CommitDate: 2025-12-25 11:56:41 +0900

    [DOC] Escape capitalized word "data" not to be linked unexpectedly

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15731

commit b908306f99db834470167d569b81661d7b19a02b
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2025-12-25 11:45:27 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 11:49:32 +0900

    [DOC] Reword "Regular Expression" to "Matched Data"

    `$~` and its accessors are related to regular expressions, but are not
    themselves.

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15730

commit 84edb8456e90ae79428bf5e5db3accf29cdc9999
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-25 11:47:08 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 11:47:08 +0900

    Revert "Rollback to minitest-5.27.0"

    This reverts commit 8d097bc472fc66221dee23bb8f9e0dddac16db23.

commit 3c4cda10eb80fa38f2b27d4774e3e3e82bf190c9
  Author:     Godfrey Chan <godfreykfc@gmail.com>
  AuthorDate: 2025-12-25 09:06:50 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2025-12-25 09:06:50 +0900

    [DOC] Add back Rust 1.85.0 requirement to NEWS.md (#15728)

    * [DOC] Add back Rust 1.85.0 requirement to NEWS.md

    Addresses k0kubun's review in https://github.com/ruby/ruby/pull/15711#issuecomment-3690541074

    NEWS.md serves both CRuby developers as well as end-users. As the
    release date closes in, it probably gets seen by more users than
    core developers (on the blog for example).

    Most users probably don't build Ruby by hand, and instead that is
    abstracted through tools like ruby-install or a package manager.
    For some users these tools may install pre-built binaries where
    they exist, in which case the Rust requirement doesn't apply. In
    other instances, the tools merely automate the build, in which case
    the correct rustc version is required to enable support.

    It is also a little confusing to talk about "enabling support for
    the JIT during the build" vs "enabling the JIT at runtime".

    This copy attempts to balance all of the above and hopefully gets
    the correct points across all intended audiences.

    * Apply suggestion from k0kubun

    Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>

    ---------

    Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>

  Notes:
    Merged-By: k0kubun <takashikkbn@gmail.com>

commit 3e82da723241b7205dc2b7706c66e9ead1826cde
  Author:     Max Bernstein <rubybugs@bernsteinbear.com>
  AuthorDate: 2025-12-25 07:37:25 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2025-12-25 07:37:25 +0900

    ZJIT: Don't mark control-flow opcodes as invalidating locals (#15694)

    jump, branchif, etc don't invalidate locals in the JIT; they might in the interpreter because they can execute arbitrary code, but the JIT side exits before that happens.

  Notes:
    Merged-By: tekknolagi <donotemailthisaddress@bernsteinbear.com>

commit 8d097bc472fc66221dee23bb8f9e0dddac16db23
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-25 05:52:41 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 06:52:46 +0900

    Rollback to minitest-5.27.0

    Test of 6.0.0 is not working with 4.0.0 stable version.

    https://github.com/ruby/actions/actions/runs/20488398805/job/58875672023#step:20:362

    ```
      rake aborted!
      NoMethodError: undefined method 'cov_filter=' for #<Hoe:0x00007fdb550fc840> (NoMethodError)

        self.cov_filter = %w[ tmp ]
            ^^^^^^^^^^^^^
      /home/runner/work/actions/actions/ruby-4.0.0/gems/src/minitest/Rakefile:20:in 'block in <top (required)>'
      /home/runner/work/actions/actions/ruby-4.0.0/.bundle/gems/hoe-3.20.0/lib/hoe.rb:394:in 'BasicObject#instance_eval'
      /home/runner/work/actions/actions/ruby-4.0.0/.bundle/gems/hoe-3.20.0/lib/hoe.rb:394:in 'Hoe.spec'
      /home/runner/work/actions/actions/ruby-4.0.0/gems/src/minitest/Rakefile:11:in '<top (required)>'
      /home/runner/work/actions/actions/ruby-4.0.0/.bundle/gems/rake-13.3.1/exe/rake:27:in '<top (required)>'
      (See full trace by running task with --trace)
    ```

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15727

commit 26a1a522b76cc9fd2ed2d963fd2df635f59b7a39
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2025-12-25 05:47:34 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 05:47:34 +0900

    Revert "Rollback to test-unit 3.7.3"

    This reverts commit c17307ac22f37f74786a4f016121c6ee8cc38915.

commit 8caea03213ff809544271d3135e0873d9c419532
  Author:     Soutaro Matsumoto <matsumoto@soutaro.com>
  AuthorDate: 2025-12-25 02:13:09 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 05:46:44 +0900

    rbs_skip_tests_windows

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15725

commit b92bc9654120547f9dd261ce04dacdb17bf720e1
  Author:     Soutaro Matsumoto <matsumoto@soutaro.com>
  AuthorDate: 2025-12-25 01:41:18 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 05:46:44 +0900

    Skip test to avoid NoMemoryError

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15725

commit d0193e924003b33ab46ee4ac13fbec5d53d02f1b
  Author:     Soutaro Matsumoto <matsumoto@soutaro.com>
  AuthorDate: 2025-12-25 01:40:57 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 05:46:44 +0900

    Bundle test-unit 3.7.5

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15725

commit 96d876534e115ffbb92a72f7378da84fd54a3a87
  Author:     Stan Lo <stan.lo@shopify.com>
  AuthorDate: 2025-12-25 03:54:39 +0900
  Commit:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  CommitDate: 2025-12-25 05:45:16 +0900

    Bump RDoc to 7.0.3

  Notes:
    Merged: https://github.com/ruby/ruby/pull/15726
