Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
5707c4f
Retire native Browser adapter in favor of MCP
GraciousGazelles Nov 6, 2026
d52916c
Update lockfile after Browser removal
GraciousGazelles Nov 6, 2026
3e2aac3
Correct Android event fixture expectation
GraciousGazelles Nov 6, 2026
3e67b60
Run doctor computer-use test in CLI binary
GraciousGazelles Nov 6, 2026
dc50448
Fix CI fallout from native Browser removal
GraciousGazelles Nov 6, 2026
736a1fa
Align planner fixtures and docs after Browser removal
GraciousGazelles Nov 6, 2026
77a3570
Fix remaining planner count after Browser removal
GraciousGazelles Nov 6, 2026
86551fc
Remove unused Browser event import
GraciousGazelles Nov 6, 2026
08ecf99
Merge branch 'main' into validation/w18616-browser-remove-5707c4fe
GraciousGazelles Nov 9, 2026
0607d7e
Merge remote-tracking branch 'origin/main' into validation/w18616-bro…
GraciousGazelles Nov 9, 2026
0012781
Fix retired Browser validation fallout
GraciousGazelles Nov 9, 2026
199b439
codex: repair Browser retirement check fallout (#1024)
GraciousGazelles Nov 9, 2026
31d8203
Merge remote-tracking branch 'origin/main' into validation/w18616-bro…
GraciousGazelles Nov 9, 2026
7a43cbf
codex: refresh browser removal generated lock
GraciousGazelles Nov 9, 2026
2899aeb
codex: realign regression matrix after browser removal
GraciousGazelles Nov 9, 2026
052aafd
docs: format downstream regression matrix
GraciousGazelles Nov 9, 2026
9c211be
Merge remote-tracking branch 'origin/main' into validation/w18616-bro…
GraciousGazelles Nov 9, 2026
585c3cd
ci: drop retired Android registry tests
GraciousGazelles Nov 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 0 additions & 90 deletions .codex/skills/use-native-browser/SKILL.md

This file was deleted.

4 changes: 0 additions & 4 deletions .codex/skills/use-native-browser/agents/openai.yaml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<overview>
<p>
This summary metric is an applicability witness for the native visual
response detector. It reports the retained production browser visual
response detector. It reports the retained production desktop visual
handler with the number of successful response exits that the query can
inspect.
</p>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
* @name Native visual response production coverage witness
* @id rust/native-visual-response-coverage-witness
* @description Counts successful visual response exits reached by each retained production browser or desktop handler so an empty or fixture-only analysis cannot masquerade as coverage.
* @description Counts successful visual response exits reached by the retained production desktop handler so an empty or fixture-only analysis cannot masquerade as coverage.
*
* This is a summary metric rather than an alert. A production analysis must
* return one row for every selected handler and a non-zero successful-exit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,12 @@ import codeql.rust.dataflow.DataFlow

predicate visualProviderFile(File file) {
file.getRelativePath() = "codex-rs/android-computer-use/src/lib.rs" or
file.getRelativePath() = "codex-rs/browser-computer-use/src/lib.rs" or
file.getRelativePath() = "codex-rs/tui/src/desktop_computer_use_provider.rs" or
// Keep the historical fixture path for the existing focused query test.
file.getRelativePath() = "codex-rs/computer-use-runtime/src/lib.rs"
}

predicate productionVisualProviderFile(File file) {
file.getRelativePath() = "codex-rs/browser-computer-use/src/lib.rs" or
file.getRelativePath() = "codex-rs/tui/src/desktop_computer_use_provider.rs"
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
* @name Native visual response production handler coverage missing
* @id rust/native-visual-response-production-handler-coverage-missing
* @description The retained production browser visual handler must remain discoverable with at least one recognized successful response exit so native-image guard analysis cannot become vacuous.
* @description The retained production desktop visual handler must remain discoverable with at least one recognized successful response exit so native-image guard analysis cannot become vacuous.
* @kind problem
* @problem.severity error
* @precision high
Expand All @@ -14,7 +14,7 @@ import rust
import NativeVisualResponseFlow

predicate expectedProductionHandler(File file, string handlerName) {
file.getRelativePath() = "codex-rs/browser-computer-use/src/lib.rs" and
file.getRelativePath() = "codex-rs/tui/src/desktop_computer_use_provider.rs" and
handlerName = "handle_with_provider"
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,3 @@
| codex-rs/android-computer-use/src/lib.rs:110:9:110:20 | Ok(...) | This successful visual computer-use response is not the same response version that passed a body-backed native-image guard. Preserve aliases and borrows, then guard the returned response without later replacing, resetting, or removing its visual evidence. |
| codex-rs/android-computer-use/src/lib.rs:145:9:145:20 | Ok(...) | This successful visual computer-use response is not the same response version that passed a body-backed native-image guard. Preserve aliases and borrows, then guard the returned response without later replacing, resetting, or removing its visual evidence. |
| codex-rs/android-computer-use/src/lib.rs:169:9:169:20 | Ok(...) | This successful visual computer-use response is not the same response version that passed a body-backed native-image guard. Preserve aliases and borrows, then guard the returned response without later replacing, resetting, or removing its visual evidence. |
| codex-rs/browser-computer-use/src/lib.rs:41:9:41:20 | Ok(...) | This successful visual computer-use response is not the same response version that passed a body-backed native-image guard. Preserve aliases and borrows, then guard the returned response without later replacing, resetting, or removing its visual evidence. |

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1 +1 @@
| codex-rs/browser-computer-use/src/lib.rs:5:1:7:1 | fn handle_with_provider | 0 |
| codex-rs/tui/src/desktop_computer_use_provider.rs:5:1:7:1 | fn handle_with_provider | 0 |
Original file line number Diff line number Diff line change
@@ -1 +1 @@
| codex-rs/browser-computer-use/src/lib.rs:0:0:0:0 | codex-rs/browser-computer-use/src/lib.rs | Expected production visual handler 'handle_with_provider' is missing or has no recognized successful response exit, so native-image guard coverage would become vacuous. |
| codex-rs/tui/src/desktop_computer_use_provider.rs:0:0:0:0 | codex-rs/tui/src/desktop_computer_use_provider.rs | Expected production visual handler 'handle_with_provider' is missing or has no recognized successful response exit, so native-image guard coverage would become vacuous. |
1 change: 0 additions & 1 deletion .github/scripts/classify_ci_paths.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,6 @@
".github/scripts/verify_native_visual_response_contract.py",
".github/scripts/test_verify_native_visual_response_contract.py",
"codex-rs/android-computer-use/src/lib.rs",
"codex-rs/browser-computer-use/src/lib.rs",
}

NATIVE_VISUAL_RESPONSE_CONTRACT_PREFIXES = (
Expand Down
48 changes: 11 additions & 37 deletions .github/scripts/test_ci_planners.py
Original file line number Diff line number Diff line change
Expand Up @@ -1267,31 +1267,6 @@ def test_app_server_followup_route_picks_full_carry_bundle(self) -> None:
],
)

def test_native_browser_guidance_routes_to_focused_hosted_lane(self) -> None:
paths = [
".codex/skills/use-native-browser/SKILL.md",
".codex/skills/use-native-browser/agents/openai.yaml",
".github/scripts/validation-lanes/native-browser-evidence.sh",
".github/validation-lanes.json",
".github/scripts/test_ci_planners.py",
"justfile",
"docs/native-computer-use.md",
"docs/downstream-tool-surface-matrix.md",
"docs/downstream-regression-matrix.md",
"docs/divergences/index.yaml",
"docs/carry-divergence-ledger.md",
]
self.assertEqual(
RESOLVE_VALIDATION_PLAN.select_followup_lanes(paths, self.routes),
["codex.native-browser-evidence-targeted"],
)
self.assertEqual(
RESOLVE_VALIDATION_PLAN.select_followup_lanes(
paths + ["codex-rs/core/src/config/mod.rs"], self.routes
),
[],
)

def test_native_computer_use_code_mode_route_covers_wrapper_and_provider_lanes(
self,
) -> None:
Expand Down Expand Up @@ -1321,7 +1296,6 @@ def test_native_computer_use_code_mode_route_covers_wrapper_and_provider_lanes(
"codex.tui-native-computer-use-targeted",
"codex.exec-native-computer-use-targeted",
"codex.native-computer-use-tool-registry-targeted",
"codex.native-browser-evidence-targeted",
"codex.code-mode-declaration-targeted",
"codex.native-computer-use-doctor-targeted",
],
Expand Down Expand Up @@ -4198,11 +4172,11 @@ def test_lab_targeted_ui_protocol_lane_set_returns_selected_matrix(self) -> None

self.assertEqual(payload["run_selected_lanes"], "true")
self.assertEqual(payload["run_smoke_gate"], "false")
self.assertEqual(len(payload["selected_matrix"]["include"]), 28)
self.assertEqual(payload["planned_job_count"], 18)
self.assertEqual(len(payload["selected_matrix"]["include"]), 27)
self.assertEqual(payload["planned_job_count"], 17)
self.assertEqual(payload["rust_batching_mode"], "auto")
self.assertEqual(payload["selected_workflow_lane_count"], 0)
self.assertEqual(payload["selected_node_lane_count"], 1)
self.assertEqual(payload["selected_node_lane_count"], 0)
self.assertEqual(payload["selected_rust_minimal_lane_count"], 0)
self.assertEqual(payload["selected_rust_minimal_batch_count"], 9)
self.assertEqual(payload["selected_rust_integration_lane_count"], 1)
Expand Down Expand Up @@ -4269,7 +4243,7 @@ def test_lab_targeted_ui_protocol_can_disable_rust_batching(self) -> None:
str(REPO_ROOT / ".github/validation-lanes.json"),
)

self.assertEqual(payload["planned_job_count"], 28)
self.assertEqual(payload["planned_job_count"], 27)
self.assertEqual(payload["rust_batching_mode"], "off")
self.assertEqual(payload["rust_batching_reason"], "disabled by workflow input")
self.assertEqual(payload["selected_rust_minimal_lane_count"], 17)
Expand Down Expand Up @@ -4523,7 +4497,7 @@ def test_heavy_plan_splits_selected_lanes_by_setup_class(self) -> None:
self.assertEqual(payload["run_smoke_gate"], "true")
self.assertEqual(payload["smoke_gate_kind"], "runtime")
self.assertEqual(payload["selected_workflow_lane_count"], 1)
self.assertEqual(payload["selected_node_lane_count"], 1)
self.assertEqual(payload["selected_node_lane_count"], 0)
self.assertEqual(payload["selected_rust_minimal_lane_count"], 0)
self.assertEqual(payload["selected_rust_minimal_batch_count"], 13)
self.assertEqual(payload["selected_rust_integration_lane_count"], 2)
Expand Down Expand Up @@ -7443,16 +7417,16 @@ def test_validation_lab_frontier_all_widens_to_all_active_non_explicit_lanes(sel
self.assertIn("codex.spawn-agent-description-model-surface-targeted", selected_lane_ids)
self.assertIn("codex.core-multi-agent-orchestration-targeted", selected_lane_ids)
self.assertNotIn("codex.tui-agent-picker-model-surface-targeted", selected_lane_ids)
self.assertEqual(payload["planned_job_count"], 42)
self.assertEqual(payload["planned_job_count"], 41)
self.assertEqual(payload["selected_workflow_lane_count"], 6)
self.assertEqual(payload["selected_node_lane_count"], 3)
self.assertEqual(payload["selected_node_lane_count"], 2)
self.assertEqual(payload["selected_rust_minimal_lane_count"], 1)
self.assertEqual(payload["selected_rust_minimal_batch_count"], 13)
self.assertEqual(payload["selected_rust_integration_lane_count"], 6)
self.assertEqual(payload["selected_rust_integration_batch_count"], 12)
self.assertEqual(payload["selected_release_lane_count"], 1)
self.assertEqual(payload["workflow_max_parallel"], "6")
self.assertEqual(payload["node_max_parallel"], "3")
self.assertEqual(payload["node_max_parallel"], "2")
self.assertEqual(payload["rust_minimal_max_parallel"], "24")
self.assertEqual(payload["rust_integration_max_parallel"], "25")
self.assertEqual(payload["release_max_parallel"], "1")
Expand Down Expand Up @@ -7480,9 +7454,9 @@ def test_validation_lab_frontier_all_can_include_explicit_only_lanes(self) -> No
self.assertIn("codex.core-multi-agent-orchestration-targeted", selected_lane_ids)
self.assertIn("codex.rmcp-client-transport", selected_lane_ids)
self.assertIn("codex.rmcp-consumers-check", selected_lane_ids)
self.assertEqual(payload["planned_job_count"], 50)
self.assertEqual(payload["planned_job_count"], 49)
self.assertEqual(payload["selected_workflow_lane_count"], 8)
self.assertEqual(payload["selected_node_lane_count"], 3)
self.assertEqual(payload["selected_node_lane_count"], 2)
self.assertEqual(payload["selected_rust_minimal_lane_count"], 1)
self.assertEqual(payload["selected_rust_minimal_batch_count"], 16)
self.assertEqual(payload["selected_rust_integration_lane_count"], 7)
Expand Down Expand Up @@ -7601,7 +7575,7 @@ def test_heavy_plan_workflow_dispatch_all_uses_frontier_harvest_policy(self) ->
self.assertEqual(payload["continue_after_smoke_failure"], "true")
self.assertEqual(payload["eager_release_lanes"], "true")
self.assertEqual(payload["workflow_max_parallel"], "8")
self.assertEqual(payload["node_max_parallel"], "3")
self.assertEqual(payload["node_max_parallel"], "2")
self.assertEqual(payload["rust_minimal_max_parallel"], "20")
self.assertEqual(payload["rust_integration_max_parallel"], "8")
self.assertEqual(payload["release_max_parallel"], "1")
Expand Down
1 change: 0 additions & 1 deletion .github/scripts/test_classify_ci_paths.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,6 @@ def test_native_visual_contract_changes_select_repo_policy(self) -> None:
".github/scripts/verify_native_visual_response_contract.py",
".github/scripts/test_verify_native_visual_response_contract.py",
"codex-rs/android-computer-use/src/lib.rs",
"codex-rs/browser-computer-use/src/lib.rs",
):
with self.subTest(path=path):
self.assertTrue(classify([path]).repo_policy)
Expand Down
Loading
Loading