-*- coding: utf-8 -*-

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

commit d3da9fec828481422cc4084892454bf572d7af5a
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-03-17 07:47:54 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-17 07:47:54 +0900

    v4.0.2

commit 3fd1181a9d81cc7eed8ddfe262d97035d6e1b321
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-03-17 07:46:12 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-17 07:46:12 +0900

    Bump Prism to v1.8.1

commit 6b47e3f82cfb52d41fef8882d7e132f43a7611d6
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-03-17 04:24:01 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-17 04:24:01 +0900

    [ruby/prism] Fix not binding power in endless methods [Backport #21097]

    Change rescue modifier binding power from PM_BINDING_POWER_COMPOSITION
    to PM_BINDING_POWER_MATCH + 1, so that `x = a rescue b in c` is parsed
    as `(x = (a rescue b)) in c` and `def f = a rescue b in c` is parsed
    as `(def f = (a rescue b)) in c`.

    https://github.com/ruby/prism/commit/7e797f59ae

commit 901966d7621bfdfe520c5b65649c7e6bacaad6ff
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-03-17 04:02:55 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-17 04:02:55 +0900

    Update pstore to 0.2.1 [Backport #21880]

    Fix ultra_safe mode of pstore bundled with Ruby 4.0.

commit a601b899a35c796775309dca01a6d5e64be14c44
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-03-17 03:57:04 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-17 03:57:04 +0900

    merge revision(s) 08372635f7ec09f7115bd254246ebd637499651c: [Backport #21926]

            Fix race condition right after ubf registration

            Fixes [Bug #21926]

commit f808ff5fc15690338dcb6530e4d3df760d8721f3
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-03-17 03:56:14 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-17 03:56:14 +0900

    merge revision(s) f315d250b44e75a1a69f4a05b293dcc701377689: [Backport #21947]

            [ruby/timeout] Compatibility with Fiber scheduler.
            (https://github.com/ruby/timeout/pull/97)

            [Bug #21947]

commit 1d3581e18a689f0d392686283e340058ac468ffd
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-03-17 03:55:53 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-17 03:55:53 +0900

    merge revision(s) 55694ad7efc3f8dc6d5c7aefa60ded4c303ed6cf: [Backport #21945]

            [Bug #21945] Correctly handle `and?` and similar

commit 0d845e4a071f67de40e1151cafb419c7aba87050
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-03-17 03:35:06 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-17 03:35:06 +0900

    merge revision(s) 361644c0cce3235e9cc6724994c6b5711deb10b8: [Backport #21917]

            [PATCH] [Bug #21917] Fix build on AIX

commit 8466e93b1d6eb85ad5952ab3a10575fa453e77e2
  Author:     Alan Wu <XrXr@users.noreply.github.com>
  AuthorDate: 2026-03-13 07:33:00 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-17 03:03:25 +0900

    YJIT: Fix not reading locals from `cfp->ep` after `YJIT.enable` and exceptional entry

    [Backport #21941]

    In case of `--yjit-disable`, YJIT only starts to record environment
    escapes after `RubyVM::YJIT.enable`. Previously we falsely assumed that
    we always have a full history all the way back to VM boot. This had YJIT
    install and run code that assume EP=BP when EP≠BP for some exceptional
    entry into the middle of a running frame, if the environment escaped
    before `YJIT.enable`.

    The fix is to reject exceptional entry with an escaped environment.
    Rename things and explain in more detail how the predicate for deciding
    to assume EP=BP works. It's quite subtle since it reasons about all
    parties in the system that push a control frame and then run JIT code.

    Note that while can_assume_on_stack_env() checks the currently running
    environment if it so happens to be the one YJIT is compiling against, it
    can return true for any ISEQ. The check isn't necessary for fixing the
    bug, and the load bearing part of this patch is the change to
    exceptional entries.

    This fix is flat on speed and space on ruby-bench headline benchmarks.

    Many thanks for the community effort to create a small test case for
    this bug.

commit ad231cdf4a021ee6e37e1a5d8c0ac137dd9fe246
  Author:     Nobuyoshi Nakada <nobu@ruby-lang.org>
  AuthorDate: 2026-03-10 12:28:17 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-12 09:42:58 +0900

    Windows: Explicitly specify the use of `coreutils` commands

    It appears that shims for individual commands are no longer being
    created.

commit efca0f45203d5908b3ec155b40e59baa8504f0ae
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-03-11 19:25:44 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-12 09:42:58 +0900

    Use $LOAD_PATH.replace for safer restoration in test

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

commit 9bcd9ba9b31fea19dc56bc2f5c69cf584d3bd23c
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-03-11 19:14:59 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-12 09:42:58 +0900

    Suppress bundled gems warning for subfeatures found outside stdlib [Bug #21828]

    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

commit 764a245ef9e305a515a8be54b87c8b7b3ac45af0
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-03-09 04:32:39 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-12 09:41:59 +0900

    Fix M:N threads under OpenBSD

    OpenBSD requires MAP_STACK for memory regions used as thread stacks.
    However it seems to error with "Invalid argument" unless the permissions
    include both PROT_READ | PROT_WRITE.

    We should be able to satisft this by re-mmapping over our reserved stack
    region to get the MAP_STACK flag. As a (very minor) bonus, this applies
    MAP_STACK only to the machine stack region, not the VM region.

    Co-authored-by: Jeremy Evans <code@jeremyevans.net>

commit 21f2bbf322e955b1e393365d6190eaa38bdfc356
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-03 19:28:42 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-10 00:19:27 +0900

    Lock to install uutils-coreutils@0.5.0

commit 636523d0a5172337436e73f66e00c3b5178ce4b7
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-03-09 18:04:46 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-10 00:19:27 +0900

    Merge zlib-3.2.3

commit b5a768b666f61a861449d9ee287cb0a3e05bbea8
  Author:     Kevin Newton <kddnewton@gmail.com>
  AuthorDate: 2026-03-03 01:49:29 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-07 02:02:23 +0900

    [ruby/prism] Fix in handling

    in is a unique keyword because it can be the start of a clause or
    an infix keyword. We need to be explicitly sure that even though in
    _could_ close an expression context (the body of another in clause)
    that we are not also parsing an inline in. The exception is the
    case of a command call, which can never be the LHS of an expression,
    and so we must immediately exit.

    [Bug #21925]
    [Bug #21674]

    https://github.com/ruby/prism/commit/20374ced51

commit e7d2828fb677874fb425e6129e0c4c20acc0e1dd
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-02-27 19:51:22 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-07 02:02:23 +0900

    [ruby/prism] Fix error message for block/lambda with `...` argument

    They currently complain that the parent method is not forwarding.
    But the actual problem is that these types of arguments simply don't
    accept `...`

    Fixes [Bug #21927]

    https://github.com/ruby/prism/commit/0aa2363331

commit 83c261f30bd43dc3465c0026b96e79af585fdfab
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-03-06 04:41:21 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-07 02:02:23 +0900

    [ruby/prism] Correctly handle `and?` and similar on ruby 4.0

    It gets confused for syntax introduced in https://bugs.ruby-lang.org/issues/20925
    But it actually should be a plain method call.
    `!`/`?` are not valid as part of an identifier, methods
    however allow them as the last character.

    Fixes [Bug #21946]

    https://github.com/ruby/prism/commit/5d80bc5e1a

commit 33e5d3894fcddeb16518fdd0512fda097e7039fe
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-24 11:40:29 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-06 04:08:14 +0900

    Map M:N thread stack chunks initially as PROT_NONE

    Previously we initially mapped the full 512MB chunk as
    PROT_READ|PROD_WRITE and then set a guard page to PROT_NONE the first
    time a new thread stack is needed. Usually that's okay as we don't touch
    that memory until it is needed and so it doesn't count towards RSS.

    However, on Linux even with vm.overcommit_memory=0 (the default) if on a
    system (like a tiny cloud VM) with <512MB of RAM+swap that would error
    with.

        Thread#initialize': can't create Thread: Cannot allocate memory (ThreadError)

    This changes the chunk to be mapped initially with PROT_NONE, then
    instead of mapping the guard pages we map in the machine and VM stacks
    using mprotect. This ensures we don't commit stack memory until it is
    first used, and as a side benefit any stray pointers into unused stack
    should segfault.

    When a stack is freed/reused there is no change from the previous
    behaviour, we just use madvise and leave the same regions in place.

    [Bug #21944]

commit a9b84adbd2f30eaefdf2a60341468c00e4bc090c
  Author:     ZHIJIE XIE <40601688+dummyx@users.noreply.github.com>
  AuthorDate: 2026-03-03 02:40:57 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-03-04 00:57:17 +0900

    string.c: guard tmp in rb_str_format_m (GH-16280)

    [Bug #21931]

    Keep tmp alive while RARRAY_CONST_PTR(tmp) is used by rb_str_format.

    [alan: sunk the guard below usage]
    Reviewed-by: Alan Wu <XrXr@users.noreply.github.com>

commit aec8563df22fb418566a9806e8b782c38b750f46
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-12 20:30:12 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-02-13 06:51:45 +0900

    Use Oregon mirror for cygwin download

commit 485a6037916fa09b07429d41e8699586271eb91c
  Author:     Chris Hasiński <krzysztof.hasinski@gmail.com>
  AuthorDate: 2026-01-20 02:35:52 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-02-13 03:41:49 +0900

    Fix bundled gems warning for all subfeatures of hyphenated gems

    PR #15822 fixed the warning for direct hyphenated gem requires like
    `benchmark/ips` → `benchmark-ips`. However, hyphenated gems often
    provide multiple files under their namespace.

    For example, `benchmark-ips` provides:
    - benchmark/ips.rb
    - benchmark/timing.rb
    - benchmark/compare.rb

    When requiring `benchmark/timing`, the previous fix only checked for
    `benchmark-timing` gem (doesn't exist), not `benchmark-ips` which
    actually provides the file.

    This fix checks if ANY gem matching `{prefix}-*` is in the bundle
    specs, which covers all subfeatures provided by hyphenated gems.

    Reported in https://github.com/ruby/ruby/pull/15822#issuecomment-123456

commit f3bfffe8565b08b3426003aebbe328a0ecedad26
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-02-11 03:46:40 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-11 03:46:40 +0900

    ZJIT: Avoid runtime exceptions from RubyVM::ZJIT.stats_string (#16139)

    Before this it would raise if zjit wasn't enabled
    and raise a different exception if zjit was but extended stats were
    not (_some_ stats are available).

    Co-authored-by: Randy Stauner <randy@r4s6.net>

commit 0768f08caff514b0ba616dc26d76aad90577eefe
  Author:     Mike Dalessio <mike@37signals.com>
  AuthorDate: 2026-02-11 02:10:21 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-02-11 03:32:51 +0900

    Fix UnboundMethod#== for methods from included/extended modules [Backport #21873]

    Method#unbind clones the method entry, preserving its defined_class.
    For methods mixed in via include/extend, defined_class is an ICLASS,
    causing UnboundMethod#== to return false when comparing against the
    same method obtained via Module#instance_method.

    Resolve ICLASS defined_class in method_eq.

    [Bug #21873]

commit e025c839ac71b609bb50ff74352f9a11cd164c3c
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-10 10:07:39 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-02-10 10:38:24 +0900

    Merge RubyGems/Bundler 4.0.6

commit 87b544b8c4400ef2b37405f132846e5c3738213b
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-10 10:07:38 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-02-10 10:38:24 +0900

    Merge RubyGems/Bundler 4.0.5

commit 91a4926c9a9cd12f43307a2c934766c000356f07
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-02-10 10:07:37 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-02-10 10:38:24 +0900

    Merge RubyGems/Bundler 4.0.4

commit d5d3fb8b80e81426517bf150ebcab83be4ed996d
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-02-10 08:39:41 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-02-10 08:39:41 +0900

    merge revision(s) 8a586af33b59cae93a1bee13c39e87dd087a4a6b: [Backport #21838]

            [PATCH] Don't force major GC when there are allocatable slots

            [Bug #21838]

            When we have allocatable slots, we can grow the heap instead of forcing
            a major GC. This prevents major GC to be ran very often in certain situations.
            See the ticket for more details.

            On ruby-bench, we can see that this patch doesn't cause any significant
            regressions:

                --------------  -----------  ----------  ---------  -----------  ----------  ---------  --------------  -------------
                bench           master (ms)  stddev (%)  RSS (MiB)  branch (ms)  stddev (%)  RSS (MiB)  branch 1st itr  master/branch
                activerecord    148.2        0.3         59.2       150.0        0.8         69.7       1.015           0.988
                chunky-png      435.2        0.3         72.9       438.8        0.1         66.7       0.993           0.992
                erubi-rails     733.8        1.2         118.7      704.8        0.2         98.3       1.077           1.041
                hexapdf         1400.4       1.1         247.0      1405.0       0.9         223.7      0.986           0.997
                liquid-c        32.5         3.3         32.8       32.5         2.1         30.7       1.042           0.999
                liquid-compile  31.0         1.7         35.1       33.4         3.9         32.8       0.938           0.928
                liquid-render   84.7         0.4         30.8       86.3         0.4         30.8       0.981           0.982
                lobsters        594.7        0.6         310.5      596.6        0.4         306.0      1.057           0.997
                mail            75.6         2.8         53.3       76.9         0.7         53.2       0.968           0.982
                psych-load      1122.8       1.2         29.2       1145.1       0.4         31.7       0.964           0.981
                railsbench      1244.7       0.3         115.5      1254.8       1.1         115.2      0.939           0.992
                rubocop         103.7        0.5         94.1       104.3        0.5         92.4       0.985           0.994
                ruby-lsp        88.3         0.6         78.5       88.5         1.2         77.9       0.992           0.997
                sequel          26.9         0.9         33.6       28.3         1.4         32.1       0.954           0.952
                shipit          1119.3       1.5         171.4      1075.7       2.1         162.5      1.873           1.040
                --------------  -----------  ----------  ---------  -----------  ----------  ---------  --------------  -------------

commit 306930ae1ac62fb3b7f96581f4a6e9ab4c083e84
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-02-10 06:44:42 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-02-10 06:44:42 +0900

    merge revision(s) 78b7646bdb91285873ac26bca060591e06c45afe, b4a62a1ca949d93332ad8bce0fcc273581160cc5: [Backport #21842]

            [PATCH] [Bug #21842] Let `rb_interned_str` return US-ASCII if possible

            [PATCH] [DOC] Update docs for rb_interned_str and related functions (#15897)

            Related to [Bug #21842].

            * rb_interned_str: document what decides whether the returned string is
              in US-ASCII or BINARY encoding.
            * rb_interned_str_cstr: include the same description as rb_interned_str
              for the encoding. This one was still missing the update for US-ASCII
              and erroneously said the returned string was alwasy in BINARY encoding
            * rb_str_to_interned_str: document how the encoding of the result is
              defined.

            Co-authored-by: Herwin <herwinw@users.noreply.github.com>

commit c6d9ba58c50fd9c07023453d71cb55b4b9c36957
  Author:     John Hawthorn <john@hawthorn.email>
  AuthorDate: 2026-02-08 01:44:08 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-02-10 06:38:18 +0900

    Fix signal crash during keyword argument call

    64f508ade8 changed rb_threadptr_raise to call rb_exception_setup,
    which uses rb_scan_args with RB_SCAN_ARGS_PASS_CALLED_KEYWORDS.
    This checked rb_keyword_given_p(), which read the interrupted
    frame's keyword state rather than the signal raise arguments,
    causing a crash when a signal arrived during a keyword call.

    Revert rb_threadptr_raise to use rb_make_exception directly, and
    have thread_raise_m call rb_exception_setup where
    rb_keyword_given_p() reflects the correct frame.

    [Bug #21865]

commit 584c3b6465ec40226687e9699d2b652d9ad31a8f
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-02-10 02:47:03 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-02-10 02:47:03 +0900

    [Backport #21866] Fix integer overflow checks in enumerator (#16088)

    Fix integer overflow checks in enumerator

    Co-authored-by: Jörmungandrk <github@zerodaysec.org>

commit e4dd078a2734f1f3b7169feb4da8c68587effc6e
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-22 02:40:08 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-22 03:11:17 +0900

    [ruby/syntax_suggest] v2.0.3

    https://github.com/ruby/syntax_suggest/commit/a81b92fcf2

    [Bug #21847]

commit 12203963d22a984154c1abb03782c345ba8f5129
  Author:     Schneems <richard.schneeman+foo@gmail.com>
  AuthorDate: 2026-01-21 06:32:33 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-22 03:11:17 +0900

    [ruby/syntax_suggest] Refactor multi-prism version logic

    The reason this logic for different methods branches in the class instead of internally was to be eagerly aggressive about runtime performance. This code is currently only used once for the document where it's invoked ~N times (where N is number of lines):

    ```ruby
    module SyntaxSuggest
      class CleanDocument
        # ...
        def join_trailing_slash!
          trailing_groups = @document.select(&:trailing_slash?).map do |code_line|
            take_while_including(code_line.index..) { |x| x.trailing_slash? }
          end
          join_groups(trailing_groups)
          self
        end
    ```

    Since this is not currently a hot-spot I think merging the branches and using a case statement is a reasonable tradeoff and avoids the need to do specific version testing.

    An alternative idea was presented in #241 of behavior-based testing for branch logic (which I would prefer), however, calling the code triggered requiring a `DelegateClass` when the `syntax_suggest/api` is being required.

    https://github.com/ruby/syntax_suggest/commit/ab122c455f

commit bbba57f22c7eb7279297e03f8124d51135a7e87a
  Author:     Earlopain <14981592+Earlopain@users.noreply.github.com>
  AuthorDate: 2026-01-20 21:38:50 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-22 03:11:17 +0900

    [ruby/syntax_suggest] Handle `on_sp` when using prism

    It used to not emit this token type, but now it does.
    So when a newer version of prism is present, we can fall back
    to the same code that ripper uses.

    Ref:
    * https://github.com/ruby/ruby/pull/15914
    * https://github.com/ruby/prism/pull/3859

    https://github.com/ruby/syntax_suggest/commit/42a3b8f6cb

commit 26777e8a79a43dcf86c10274af4507bd196b9050
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-15 16:52:01 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-21 03:49:33 +0900

    Restore irb to warning target

    Users should add `irb` to their Gemfile.
    `Gem::BUNDLED_GEMS.force_activate 'irb'` is workaround for short term.

commit a3dc71eb5fe8ae7c411067a58ec91201fec240ee
  Author:     Daisuke Aritomo <osyoyu@osyoyu.com>
  AuthorDate: 2025-12-03 03:41:21 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-21 03:49:33 +0900

    Suppress bundled gem warning on `binding.irb'

    This patch silences the "this won't work in the next version of Ruby"
    warning displayed when irb is autoloaded via `binding.irb`.

        main.rb:1: warning: irb used to be loaded from the standard library, but is not part of the default gems since Ruby 4.0.0.
        You can add irb to your Gemfile or gemspec to fix this error.
        /.../irb.rb:9: warning: reline used to be loaded from the standard library, but is not part of the default gems since Ruby 4.0.0.
        You can add reline to your Gemfile or gemspec to fix this error.

        From: main.rb @ line 1 :

         => 1: binding.irb

        /.../input-method.rb:284: warning: rdoc used to be loaded from the standard library, but is not part of the default gems since Ruby 4.0.0.
        You can add rdoc to your Gemfile or gemspec to fix this error.

    This warning is incorrect and misleading: users should not need to
    include irb (and its dependencies) to their Gemfiles to use
    `binding.irb`, even in future versions of Ruby. It is agreed that the
    runtime takes care of that.

commit 310da6cd91ccdab82f5cb9cef482f5cf9da1bb19
  Author:     Hiroshi SHIBATA <hsbt@ruby-lang.org>
  AuthorDate: 2026-01-15 15:29:22 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-21 03:49:33 +0900

    Added example for bundle/inline

commit 3046e27852c46e32872a8a08644366a859ceca1e
  Author:     Daisuke Aritomo <osyoyu@osyoyu.com>
  AuthorDate: 2025-12-04 21:02:36 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-21 03:49:33 +0900

    Add comments

commit 20e4a9a807dc0e4489a31efe94328ec1bda7c488
  Author:     Daisuke Aritomo <osyoyu@osyoyu.com>
  AuthorDate: 2025-12-04 20:56:31 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-21 03:49:33 +0900

    Fake BUNDLE_GEMFILE and BUNDLE_LOCKFILE to let checks pass

    Bundler::Runtime#setup requires a real existing lockfile (see
    Bundler::SharedHelpers#default_lockfile).

commit 83479483c96fdfffbde11af482c7fd920b0c1dea
  Author:     Daisuke Aritomo <osyoyu@osyoyu.com>
  AuthorDate: 2025-12-03 02:25:46 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-21 03:49:33 +0900

    [Bug #21723] Let `binding.irb` properly load irb by fixing force_activate()

    This patch fixes a problem where `binding.irb` (= force_activate('irb'))
    fails under `bundle exec` when the Gemfile does not contain `irb` and
    does contain a gem which is (1) not installed in GEM_HOME (2) sourced
    using `path:`/`git:`.

    The original approach constructing a temporary definition fails since
    it does not set the equalivent of `path:`/`git:`.

    Always reconstructing a definition from a Gemfile and applying lockfile
    constraints should be a more robust approach.

    [Bug #21723]

commit 33cae95c8afce2782c2808a8e74c81d9ac763a4e
  Author:     Randy Stauner <randy@r4s6.net>
  AuthorDate: 2026-01-15 03:02:51 +0900
  Commit:     GitHub <noreply@github.com>
  CommitDate: 2026-01-15 03:02:51 +0900

    [Backport #21832] Add pushtoarray insn to fix segfault with forwarding + splat (#15870)

    Add pushtoarray insn to fix segfault with forwarding + splat

    Example insns diff for `def x = [3]; def a(...) = b(*x, 2, 3, ...)`

         == disasm: #<ISeq:a@-e:1 (1,13)-(1,42)>
         local table (size: 1, argc: 0 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
         [ 1] "..."@0
         0000 putself                                                          (   1)[Ca]
         0000 putself
         0000 opt_send_without_block                 <calldata!mid:x, argc:0, FCALL|VCALL|ARGS_SIMPLE>
         0000 splatarray                             true
         0000 putobject                              2
         0000 putobject                              3
        +0000 pushtoarray                            2
         0000 getlocal_WC_0                          "..."@0
         0000 sendforward                            <calldata!mid:b, argc:1, ARGS_SPLAT|ARGS_SPLAT_MUT|FCALL|FORWARDING>, nil
         0000 leave                                  [Re]

    This matches the insns produced by parse.y

commit 3176790c0d15dd7a72bb6e349651b3a66111d6f7
  Author:     Takashi Kokubun <takashikkbn@gmail.com>
  AuthorDate: 2026-01-14 03:57:06 +0900
  Commit:     Takashi Kokubun <takashikkbn@gmail.com>
  CommitDate: 2026-01-14 03:57:31 +0900

    Add a test backport missed at a10f7fac1fb1dcbdb1ae41137bd7294764a34793

    https://bugs.ruby-lang.org/issues/21831

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)
    ```
