build(release): exclude devguide.md from version marker checks (#4185)

`docs/devguide.md` documents how to use `VERSION_NEXT_*` markers,
which causes the release workflow version marker check to fail on
release branches.

Exclude `devguide.md` from the version marker check script and the
release tool replacement patterns.

Work towards #4175
diff --git a/.github/workflows/check_version_markers.sh b/.github/workflows/check_version_markers.sh
index 15a0a67..b5a27f0 100755
--- a/.github/workflows/check_version_markers.sh
+++ b/.github/workflows/check_version_markers.sh
@@ -17,9 +17,11 @@
 grep_exit_code=0
 # Exclude dot directories, specifically, this file so that we don't
 # find the substring we're looking for in our own file.
-# Exclude CONTRIBUTING.md, RELEASING.md because they document how to use these strings.
+# Exclude CONTRIBUTING.md, RELEASING.md, and devguide.md because they document
+# how to use these strings.
 grep --exclude=CONTRIBUTING.md \
   --exclude=RELEASING.md \
+  --exclude=devguide.md \
   --exclude-dir=.* \
   --exclude-dir=release \
   VERSION_NEXT_ -r || grep_exit_code=$?
diff --git a/dev/release/utils.py b/dev/release/utils.py
index 407044a..5fd17db 100644
--- a/dev/release/utils.py
+++ b/dev/release/utils.py
@@ -32,6 +32,7 @@
     "./bazel-*/*",
     "./CONTRIBUTING.md",
     "./RELEASING.md",
+    "./docs/devguide.md",
     "./dev/release/*",
     "./tests/tools/private/release/*",
 ]
diff --git a/tests/tools/private/release/utils_test.py b/tests/tools/private/release/utils_test.py
index accae63..7c42027 100644
--- a/tests/tools/private/release/utils_test.py
+++ b/tests/tools/private/release/utils_test.py
@@ -258,6 +258,10 @@
     tests_dir.mkdir(parents=True)
     (tests_dir / "mock_file.bzl").write_text(mock_file_content)
 
+    docs_dir = release_tool_env.git_root / "docs"
+    docs_dir.mkdir(parents=True)
+    (docs_dir / "devguide.md").write_text(mock_file_content)
+
     version = "0.28.0"
 
     # Act
@@ -276,6 +280,9 @@
     new_content = (tests_dir / "mock_file.bzl").read_text()
     assert "VERSION_NEXT_FEATURE" in new_content
 
+    new_content = (docs_dir / "devguide.md").read_text()
+    assert "VERSION_NEXT_FEATURE" in new_content
+
 
 def test_determine_next_version_ignores_agents_markers(mocker, release_tool_env):
     mocker.patch("dev.release.git.Git.get_current_branch", return_value="main")