This is an automated email from the ASF dual-hosted git repository.

hello-stephen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 173a0e2064e [improvement](ci) Upgrade review runtime to Codex 0.166.0 
(#69990)
173a0e2064e is described below

commit 173a0e2064e529bfa6f017608c40ff003c2f1066
Author: shuke <[email protected]>
AuthorDate: Tue Nov 3 17:45:20 2026 +0800

    [improvement](ci) Upgrade review runtime to Codex 0.166.0 (#69990)
    
    ### What problem does this PR solve?
    
    Related PR: https://github.com/shuke987/codex/pull/6
    
    Upgrade the Code Review Runner and its runtime canary from Codex 0.162.1
    to the validated [0.166.0 fork
    release](https://github.com/shuke987/codex/releases/tag/exec-goal-v0.166.0),
    retaining goal completion and same-session resume support.
    
    Codex 0.166.0 distinguishes `policy_capacity_unavailable` from ordinary
    overloads. Accept both canonical terminal capacity messages so the
    existing bounded recovery policy continues to apply. Preserve the
    original diagnostic and exact submission verification; unrelated
    failures remain non-retryable.
    
    Update the archive, version and CLI checksum pins together. The workflow
    changes are limited to seven package pin replacements. Existing model
    selection and delivery checks are preserved.
---
 .github/scripts/run_review_with_resume.py      | 10 ++-
 .github/scripts/test_run_review_with_resume.py | 93 +++++++++++++++++++++++++-
 .github/workflows/code-review-runner.yml       | 14 ++--
 3 files changed, 107 insertions(+), 10 deletions(-)

diff --git a/.github/scripts/run_review_with_resume.py 
b/.github/scripts/run_review_with_resume.py
index 484deeba4e2..a5a4ffc72c2 100644
--- a/.github/scripts/run_review_with_resume.py
+++ b/.github/scripts/run_review_with_resume.py
@@ -40,6 +40,12 @@ from submit_review import RUN_FILE, RESULT_FILE, 
SUBMISSION_FILE, verify_complet
 RETRY_DELAYS = (300,) * 6
 CAPACITY_FALLBACK_AFTER = 5
 CAPACITY_MESSAGE = "Selected model is at capacity. Please try a different 
model."
+# Codex 0.166 distinguishes policy capacity from ordinary overloads. Both
+# retain the same bounded recovery; other policy/safety failures must not 
retry.
+CAPACITY_MESSAGES = (
+    CAPACITY_MESSAGE,
+    "Policy-restricted capacity is unavailable. Please try again later.",
+)
 UNSUPPORTED_CHATGPT_MODEL = "model is not supported when using Codex with a 
ChatGPT account."
 PROCESS_EXIT_GRACE_SECONDS = 5
 HEAD_POLL_SECONDS = 60
@@ -547,7 +553,7 @@ def run_review(args, reaper=None):
                 )
                 model = fallback_model
                 continue
-            if message is not None and message != CAPACITY_MESSAGE:
+            if message is not None and message not in CAPACITY_MESSAGES:
                 return fail(message)
             current_id = session_id(events)
             if thread_id and current_id != thread_id:
@@ -565,7 +571,7 @@ def run_review(args, reaper=None):
                     # The head can move between the exit check and readback.
                     watchdog.check(force=True)
                     raise
-                result["recovered_after_capacity"] = message == 
CAPACITY_MESSAGE
+                result["recovered_after_capacity"] = message in 
CAPACITY_MESSAGES
                 write_json(context / RESULT_FILE, result)
                 with aggregate.open("a") as handle:
                     handle.write(json.dumps({"type": "review.completed", 
**result}) + "\n")
diff --git a/.github/scripts/test_run_review_with_resume.py 
b/.github/scripts/test_run_review_with_resume.py
index 5d71f6adc19..79692fa8b39 100644
--- a/.github/scripts/test_run_review_with_resume.py
+++ b/.github/scripts/test_run_review_with_resume.py
@@ -451,6 +451,88 @@ class ResumeReviewTest(unittest.TestCase):
         self.assertEqual("gpt-6-sol\n", (self.context / 
"codex-review-model.txt").read_text())
         self.verification.assert_called_once()
 
+    def test_policy_capacity_resumes_same_session_with_shared_budget(self):
+        before = self.ledger.read_text()
+        message = "Policy-restricted capacity is unavailable. Please try again 
later."
+        self.assertEqual(0, self.execute([
+            {"events": [thread_event(), failed(message)], "elapsed": 5},
+            {"events": [thread_event(), completed()], "status": 0},
+        ]))
+        self.assertEqual([300], self.sleeps)
+        self.assertEqual([1000, 695], self.timeouts)
+        self.assertEqual(["resume", THREAD], self.commands[1][-3:-1])
+        self.assertEqual(before, self.ledger.read_text())
+        self.target_check.assert_called_once()
+
+    def test_mixed_capacity_errors_share_fallback_and_retry_limit(self):
+        self.args.budget_seconds = 3600
+        policy_message = "Policy-restricted capacity is unavailable. Please 
try again later."
+        messages = [policy_message, runner.CAPACITY_MESSAGE] * 3 + 
[policy_message]
+        self.assertEqual(1, self.execute([
+            {"events": [thread_event(), failed(message)]} for message in 
messages
+        ]))
+        self.assertEqual([300] * 6, self.sleeps)
+        self.assertEqual(
+            [self.args.model] * 5 + [self.args.capacity_fallback_model] * 2,
+            [command[command.index("--model") + 1] for command in 
self.commands],
+        )
+        for command in self.commands[1:]:
+            self.assertEqual(["resume", THREAD], command[-3:-1])
+        self.assertEqual(policy_message, self.last_error())
+
+    def test_policy_capacity_error_event_with_zero_exit_resumes(self):
+        message = "Policy-restricted capacity is unavailable. Please try again 
later."
+        self.assertEqual(0, self.execute([
+            {"events": [thread_event(), {"type": "error", "message": 
message}], "status": 0},
+            {"events": [thread_event(), completed()], "status": 0},
+        ]))
+        self.assertEqual([300], self.sleeps)
+
+    def test_policy_capacity_after_submission_requires_verified_delivery(self):
+        (self.context / runner.SUBMISSION_FILE).write_text("{}")
+        message = "Policy-restricted capacity is unavailable. Please try again 
later."
+        self.assertEqual(0, self.execute([{"events": [thread_event(), 
failed(message)]}]))
+        self.verification.assert_called_once()
+        self.assertTrue(json.loads((self.context / 
runner.RESULT_FILE).read_text())["recovered_after_capacity"])
+        self.assertEqual([], self.sleeps)
+        self.target_check.assert_not_called()
+
+    def test_policy_capacity_with_partial_submission_does_not_resume(self):
+        (self.context / runner.SUBMISSION_FILE).write_text("{}")
+        self.verification.side_effect = ValueError("Final review inline 
comments were not completely verified")
+        message = "Policy-restricted capacity is unavailable. Please try again 
later."
+        self.assertEqual(1, self.execute([{"events": [thread_event(), 
failed(message)]}]))
+        self.verification.assert_called_once()
+        self.assertIn("not completely verified", self.last_error())
+        self.assertEqual([], self.sleeps)
+        self.assertFalse((self.context / runner.RESULT_FILE).exists())
+
+    def test_policy_capacity_does_not_override_cancellation(self):
+        message = "Policy-restricted capacity is unavailable. Please try again 
later."
+        self.assertEqual(1, self.execute([
+            {"events": [thread_event(), failed(message)], "status": 143},
+        ]))
+        self.assertEqual([], self.sleeps)
+        self.verification.assert_not_called()
+
+    def test_policy_capacity_does_not_exceed_shared_budget(self):
+        self.args.budget_seconds = 300
+        message = "Policy-restricted capacity is unavailable. Please try again 
later."
+        self.assertEqual(1, self.execute([{"events": [thread_event(), 
failed(message)]}]))
+        self.assertIn("Insufficient shared review budget", self.last_error())
+        self.assertEqual([], self.sleeps)
+
+    def 
test_policy_capacity_text_in_tool_output_does_not_override_safety_failure(self):
+        event = {"type": "item.completed", "item": {
+            "type": "command_execution",
+            "aggregated_output": "Policy-restricted capacity is unavailable. 
Please try again later.",
+        }}
+        self.assertEqual(1, self.execute([
+            {"events": [thread_event(), event, failed("Request blocked by 
safety policy")]},
+        ]))
+        self.assertEqual("Request blocked by safety policy", self.last_error())
+        self.assertEqual([], self.sleeps)
+
     def test_capacity_fallback_is_optional(self):
         self.args.capacity_fallback_model = None
         self.args.budget_seconds = 3600
@@ -1392,6 +1474,14 @@ class ProcessLifecycleTest(unittest.TestCase):
         reaper.reap.assert_called_once_with()
 
     def test_real_process_capacity_then_resume_preserves_state(self):
+        self.assert_real_process_capacity_then_resume(runner.CAPACITY_MESSAGE)
+
+    def test_real_process_policy_capacity_then_resume_preserves_state(self):
+        self.assert_real_process_capacity_then_resume(
+            "Policy-restricted capacity is unavailable. Please try again 
later."
+        )
+
+    def assert_real_process_capacity_then_resume(self, message):
         with tempfile.TemporaryDirectory() as tmp, 
redirect_stderr(io.StringIO()):
             root = Path(tmp)
             write_fake_gh(root)
@@ -1425,7 +1515,7 @@ else:
     }) + "\n")
     (root / "request-count").write_text("1")
     print(json.dumps({"type": "turn.failed", "error": {
-        "message": "Selected model is at capacity. Please try a different 
model."
+        "message": os.environ["FAKE_CAPACITY_MESSAGE"]
     }}))
     sys.exit(1)
 """
@@ -1450,6 +1540,7 @@ else:
                         "CODEX_HOME": str(root / "isolated-home"),
                         "FAKE_REVIEW_ROOT": str(root),
                         "FAKE_THREAD_ID": THREAD,
+                        "FAKE_CAPACITY_MESSAGE": message,
                     },
                 ),
                 mock.patch.object(runner, "RETRY_DELAYS", (0, 0, 0)),
diff --git a/.github/workflows/code-review-runner.yml 
b/.github/workflows/code-review-runner.yml
index 719f460466c..fed7781b91d 100644
--- a/.github/workflows/code-review-runner.yml
+++ b/.github/workflows/code-review-runner.yml
@@ -65,12 +65,12 @@ jobs:
           archive="$RUNNER_TEMP/codex-exec-goal.tar.gz"
           package="$RUNNER_TEMP/codex-exec-goal"
           ossutil -i "$OSS_AK" -k "$OSS_SK" -e "$OSS_ENDPOINT" \
-            cp -f 
oss://doris-community-ci/codex/releases/codex-exec-goal-0.162.1-3547e9086675-x86_64-unknown-linux-gnu.tar.gz
 "$archive"
-          echo 
"51304e4f9c343ae84e00a304344df41c2fd32821c83bdbf5be68b0f0c25ddae1  $archive" | 
sha256sum --check
+            cp -f 
oss://doris-community-ci/codex/releases/codex-exec-goal-0.166.0-217b6e00e031-x86_64-unknown-linux-gnu.tar.gz
 "$archive"
+          echo 
"19fe4ad3224b4c1bfb90952fd2054b63029bb9ffab6b9e8db3269039193f071c  $archive" | 
sha256sum --check
           mkdir -p "$package"
           tar -xzf "$archive" -C "$package"
           (cd "$package" && sha256sum --check SHA256SUMS)
-          test "$(jq -r .version "$package/codex-package.json")" = 0.162.1
+          test "$(jq -r .version "$package/codex-package.json")" = 0.166.0
           "$package/bin/codex" --version
           "$package/bin/codex" exec --help | grep -q -- '--goal'
           echo "CODEX_CANARY_BIN=$package/bin/codex" >> "$GITHUB_ENV"
@@ -370,17 +370,17 @@ jobs:
           package="$RUNNER_TEMP/codex-exec-goal"
           ossutil -i "$OSS_AK" -k "$OSS_SK" -e "$OSS_ENDPOINT" \
             cp -f "$OSS_CODEX_PACKAGE_OBJECT" "$archive"
-          echo 
"51304e4f9c343ae84e00a304344df41c2fd32821c83bdbf5be68b0f0c25ddae1  $archive" | 
sha256sum --check
+          echo 
"19fe4ad3224b4c1bfb90952fd2054b63029bb9ffab6b9e8db3269039193f071c  $archive" | 
sha256sum --check
           mkdir -p "$package"
           tar -xzf "$archive" -C "$package"
           (cd "$package" && sha256sum --check SHA256SUMS)
-          test "$(jq -r .version "$package/codex-package.json")" = 0.162.1
+          test "$(jq -r .version "$package/codex-package.json")" = 0.166.0
           echo "$package/bin" >> "$GITHUB_PATH"
         env:
           OSS_AK: ${{ secrets.OSS_AK }}
           OSS_SK: ${{ secrets.OSS_SK }}
           OSS_ENDPOINT: oss-cn-hongkong.aliyuncs.com
-          OSS_CODEX_PACKAGE_OBJECT: 
oss://doris-community-ci/codex/releases/codex-exec-goal-0.162.1-3547e9086675-x86_64-unknown-linux-gnu.tar.gz
+          OSS_CODEX_PACKAGE_OBJECT: 
oss://doris-community-ci/codex/releases/codex-exec-goal-0.166.0-217b6e00e031-x86_64-unknown-linux-gnu.tar.gz
 
       - name: Verify pinned Codex runtime
         timeout-minutes: 2
@@ -388,7 +388,7 @@ jobs:
           set -euo pipefail
           codex_cmd="$(command -v codex)"
           test "$(readlink -f "$codex_cmd")" = 
"$RUNNER_TEMP/codex-exec-goal/bin/codex"
-          echo 
"a0d5ec053074d66570aa967129d350541f344f76671a199b5a7bc0d45366cdf7  $codex_cmd" 
| sha256sum --check
+          echo 
"9346ee98398cb7240702e45eed4cbe38c7fb990d9e031dba4e7525383c415deb  $codex_cmd" 
| sha256sum --check
           codex --version
           codex exec --help | grep -q -- '--goal'
           codex exec --goal resume --help >/dev/null


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to