Read the Docs build information Build id: 4535015 Project: anyscale-ray Version: 66536 Commit: c104572c82c32740fc5319554821c106aa906cbb Date: 2026-10-07T05:00:10.348850Z State: cancelled Success: False [rtd-command-info] start-time: 2026-10-07T05:00:11.613571Z, end-time: 2026-10-07T05:00:23.761960Z, duration: 12, exit-code: 0 git clone --depth 1 https://github.com/ray-project/ray.git . Cloning into '.'... Updating files: 35% (3730/10513) Updating files: 36% (3785/10513) Updating files: 37% (3890/10513) Updating files: 38% (3995/10513) Updating files: 39% (4101/10513) Updating files: 40% (4206/10513) Updating files: 41% (4311/10513) Updating files: 42% (4416/10513) Updating files: 43% (4521/10513) Updating files: 44% (4626/10513) Updating files: 45% (4731/10513) Updating files: 46% (4836/10513) Updating files: 47% (4942/10513) Updating files: 48% (5047/10513) Updating files: 49% (5152/10513) Updating files: 50% (5257/10513) Updating files: 51% (5362/10513) Updating files: 52% (5467/10513) Updating files: 53% (5572/10513) Updating files: 54% (5678/10513) Updating files: 55% (5783/10513) Updating files: 56% (5888/10513) Updating files: 57% (5993/10513) Updating files: 58% (6098/10513) Updating files: 59% (6203/10513) Updating files: 60% (6308/10513) Updating files: 61% (6413/10513) Updating files: 62% (6519/10513) Updating files: 63% (6624/10513) Updating files: 64% (6729/10513) Updating files: 65% (6834/10513) Updating files: 66% (6939/10513) Updating files: 67% (7044/10513) Updating files: 68% (7149/10513) Updating files: 69% (7254/10513) Updating files: 70% (7360/10513) Updating files: 71% (7465/10513) Updating files: 72% (7570/10513) Updating files: 73% (7675/10513) Updating files: 74% (7780/10513) Updating files: 75% (7885/10513) Updating files: 76% (7990/10513) Updating files: 77% (8096/10513) Updating files: 78% (8201/10513) Updating files: 79% (8306/10513) Updating files: 80% (8411/10513) Updating files: 81% (8516/10513) Updating files: 82% (8621/10513) Updating files: 83% (8726/10513) Updating files: 84% (8831/10513) Updating files: 85% (8937/10513) Updating files: 86% (9042/10513) Updating files: 87% (9147/10513) Updating files: 88% (9252/10513) Updating files: 89% (9357/10513) Updating files: 90% (9462/10513) Updating files: 91% (9567/10513) Updating files: 92% (9672/10513) Updating files: 93% (9778/10513) Updating files: 94% (9883/10513) Updating files: 95% (9988/10513) Updating files: 96% (10093/10513) Updating files: 97% (10198/10513) Updating files: 98% (10303/10513) Updating files: 99% (10408/10513) Updating files: 100% (10513/10513) Updating files: 100% (10513/10513), done. [rtd-command-info] start-time: 2026-10-07T05:00:23.852983Z, end-time: 2026-10-07T05:00:25.797086Z, duration: 1, exit-code: 0 git fetch origin --force --prune --prune-tags --depth 50 pull/66536/head:external-66536 From https://github.com/ray-project/ray * [new ref] refs/pull/66536/head -> external-66536 [rtd-command-info] start-time: 2026-10-07T05:00:26.429289Z, end-time: 2026-10-07T05:00:27.420288Z, duration: 0, exit-code: 0 git checkout --force c104572c82c32740fc5319554821c106aa906cbb Note: switching to 'c104572c82c32740fc5319554821c106aa906cbb'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example: git switch -c Or undo this operation with: git switch - Turn off this advice by setting config variable advice.detachedHead to false HEAD is now at c104572 Tighten Probe and Evaluator docstrings [rtd-command-info] start-time: 2026-10-07T05:00:27.504873Z, end-time: 2026-10-07T05:00:27.539180Z, duration: 0, exit-code: 0 cat .readthedocs.yaml # .readthedocs.yaml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 # Set the version of Python and other tools you might need build: os: ubuntu-24.04 tools: python: "3.11" jobs: # On PR builds, skip the Sphinx build when the PR doesn't touch any # files that affect documentation output. Reduces queue pressure on # the shared RTD build slots when several PRs are open at once. # Tag/branch builds (master, stable, etc.) always run. # The guard matches doc/ but excludes doc/.claude/ (Claude Code skills # and agent files), which never participate in the Sphinx build, so a # PR that changes only those paths skips the build instead of running one. # Code sources (python/ray/) are intentionally not matched, so a # code-only PR skips this PR preview. The RTD PR check is not a required # merge gate, and the post-merge master build and the Buildkite doc_build # still render docstring-driven API-reference changes. This trades a # non-gating premerge preview for less pressure on the shared RTD slots. # See https://docs.readthedocs.com/platform/stable/guides/build/skip-build.html # # Some constructs are avoided deliberately because RTD's job runner # silently drops scripts that contain them: use echo (not printf # with a backslash-escape format string), avoid backslash escapes # in general, and keep shell comments out of this block so that # backticks/$() inside comments don't confuse the preprocessor. # The runner also strips the surrounding single quotes from arguments, # so use git's :! exclude shorthand rather than :(exclude): unquoted # parentheses reach /bin/sh (dash) and abort the script with a syntax error. post_checkout: - | if [ "${READTHEDOCS_VERSION_TYPE:-}" != "external" ]; then echo "Not a PR build (version type: '${READTHEDOCS_VERSION_TYPE:-unset}'); building docs." exit 0 fi git fetch --depth=500 origin master 2>/dev/null || true if ! git merge-base origin/master HEAD >/dev/null 2>&1; then echo "Could not determine merge-base with origin/master; building docs to be safe." exit 0 fi if git diff --quiet origin/master...HEAD -- doc/ ':!doc/.claude/' .readthedocs.yaml; then echo "No doc-affecting files changed in this PR; skipping Sphinx build." echo "Files changed in PR:" git diff --name-only origin/master...HEAD exit 183 fi echo "Doc-affecting files changed; building docs. Changed doc-relevant paths:" git diff --name-only origin/master...HEAD -- doc/ ':!doc/.claude/' .readthedocs.yaml # Override the html build step so every build runs a full clean Sphinx # build via the doc/Makefile html target, for PR (external) previews and # branch/tag builds alike. # # The incremental-from-master-cache path added in #64277 is disabled for # now. On every PR preview Sphinx discards the restored cache because a # config value differs between the environment that produced the cache and # the RTD build environment, so it rebuilds all documents anyway while # still paying the cache download and extract cost, and it risks a second # clean rebuild when the incremental leg trips a warning. A clean build is # faster and lower-variance in practice today. Re-enable the incremental # path only once cache reuse is confirmed (Sphinx logs "N changed" rather # than "NNNN added") and stale-artifact pruning lands for PRs that rename # or delete sources. The rtd and rtd-fallback Makefile targets and # doc/load_doc_cache.py stay in the tree for that re-enable. # Raise pip's retry budget for the dependency install below. # files.pythonhosted.org has been returning intermittent 502s # (https://github.com/pypi/support/issues/11895), and one failed wheel fetch # fails the whole docs build. pip defaults to 5 retries with exponential # backoff, which gives up in about 8 seconds of sleeping. # # Written as a config file rather than PIP_RETRIES because the install step # is python.install below, run by Read the Docs rather than by us, and each # job command runs in its own shell so an export here would not reach it. # pip reads this path on every invocation in the build, including that one. # # Only the retry count is raised. The observed failures are immediate 502 # responses rather than hangs, so a larger timeout would only lengthen the # worst case without making a fetch more likely to succeed. pre_install: - mkdir -p ~/.config/pip - | echo "[global]" > ~/.config/pip/pip.conf echo "retries = 10" >> ~/.config/pip/pip.conf cat ~/.config/pip/pip.conf # Build with fewer Sphinx workers than there are CPUs. # # doc/Makefile defaults SPHINX_JOBS to auto, one write worker per CPU. # This builder has 4 CPUs and a 7,130,316,800 byte cgroup memory ceiling # (about 6.64 GiB, the documented Business limit), and each worker holds # its own copy of the build environment. At -j auto the build peaked at # 6,503,370,752 bytes on a run that passed and 6,371,254,272 on one that # was OOM-killed, leaving roughly 600 MB of headroom either way. When the # kernel kills a write worker the parent Sphinx process reports only a # bare EOFError from multiprocessing/connection.py, naming no document, # and the document it dies on moves from build to build. # # At SPHINX_JOBS=2 the same build peaked at 5,566,427,136 bytes with # memory.events oom_kill 0, so headroom goes from about 600 MB to about # 1.5 GiB. The cost is wall clock: a paired run measured 349 seconds at # -j auto against 620 seconds at 2 on one builder, and the 2 arm had a # warm cache, so treat that as a lower bound on the slowdown. # # Only this job sets it. Local builds and the Buildkite doc build keep # -j auto, so nothing off this builder pays for the reduced parallelism. # Raising the RtD memory limit would let the parallelism come back; that # is a separate ask to Read the Docs, not a change in this repo. # # PYTHONFAULTHANDLER=1 makes Python dump the stack of every thread to # stderr when the process receives a fatal signal such as SIGSEGV. Since # 2026-09-23 some builds have died with a bare "Segmentation fault (core # dumped)" from make about 7 seconds into sphinx-build, right after # autosummary starts, while the same commit and the same installed package # versions pass on a retry. Without the handler the log names no module or # frame, so there is nothing to act on or to hand to Read the Docs support. # The handler costs nothing unless a fatal signal arrives. build: html: - | PYTHONFAULTHANDLER=1 make -C doc html HTMLDIR="$READTHEDOCS_OUTPUT/html" SPHINX_JOBS=2 # Build documentation in the docs/ directory with Sphinx sphinx: configuration: doc/source/conf.py fail_on_warning: true # We recommend specifying your dependencies to enable reproducible builds: # https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html python: install: - requirements: doc/requirements-doc.lock.txt [rtd-command-info] start-time: 2026-10-07T05:00:27.630165Z, end-time: 2026-10-07T05:00:31.565553Z, duration: 3, exit-code: 183 if [ "${READTHEDOCS_VERSION_TYPE:-}" != "external" ]; then echo "Not a PR build (version type: '${READTHEDOCS_VERSION_TYPE:-unset}'); building docs." exit 0 fi git fetch --depth=500 origin master 2>/dev/null || true if ! git merge-base origin/master HEAD >/dev/null 2>&1; then echo "Could not determine merge-base with origin/master; building docs to be safe." exit 0 fi if git diff --quiet origin/master...HEAD -- doc/ ':!doc/.claude/' .readthedocs.yaml; then echo "No doc-affecting files changed in this PR; skipping Sphinx build." echo "Files changed in PR:" git diff --name-only origin/master...HEAD exit 183 fi echo "Doc-affecting files changed; building docs. Changed doc-relevant paths:" git diff --name-only origin/master...HEAD -- doc/ ':!doc/.claude/' .readthedocs.yaml No doc-affecting files changed in this PR; skipping Sphinx build. Files changed in PR: ci/ray_ci/doc/cmd_check_api_discrepancy.py python/ray/train/health/__init__.py python/ray/train/health/check.py python/ray/train/health/decision.py python/ray/train/health/probe.py python/ray/train/health/state.py python/ray/train/v2/BUILD.bazel python/ray/train/v2/tests/test_health_contracts.py