test(browser): execute controlled Agent Task on pinned Chrome - #70
test(browser): execute controlled Agent Task on pinned Chrome#70seonghobae wants to merge 39 commits into
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (2)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughpinned Chrome과 실제 WebDriver로 Agent Task fixture를 실행하는 CI 경로를 추가했습니다. 입력, browser-computed role/name, post-condition, URL 유지, 프로필 정리와 반복성 결과를 검증합니다. truncated response와 cleanup 실패를 bounded evidence로 기록합니다. ChangesAgent Task pinned Chrome 실행
Estimated code review effort: 4 (Complex) | ~45 minutes Merge Risk: ⚪ Minimal · up to The controlled Chrome fixture now exercises Agent Task input, submission, semantic checks, and fail-closed cleanup with a bodyless WebDriver session deletion. No actionable current-head merge risk remains. Sequence Diagram(s)sequenceDiagram
participant CI_Runner
participant ChromeDriver
participant pinned_Chrome
participant Agent_Task_fixture
CI_Runner->>ChromeDriver: Agent Task 세션 시작
ChromeDriver->>pinned_Chrome: 확장 비활성화와 임시 프로필로 실행
pinned_Chrome->>Agent_Task_fixture: fixture URL 로드
CI_Runner->>ChromeDriver: role/name 조회
CI_Runner->>ChromeDriver: 입력 clear, type, click 수행
Agent_Task_fixture-->>CI_Runner: submitted 상태와 입력 echo 반환
CI_Runner->>ChromeDriver: 세션 cleanup
CI_Runner->>CI_Runner: 프로필 정리와 trial evidence 기록
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
seonghobae
left a comment
There was a problem hiding this comment.
Security/realism finding on the exact current head: both _run_browser_pass and _run_agent_task_browser_pass launch pinned Chrome with --no-sandbox. That disables Chromium's process sandbox in the very lane being used as real-browser compatibility / Agent Task evidence. The controlled fixture reduces content risk, but it does not make sandbox-disabled execution equivalent to production browser isolation, and it cannot support a security-realism claim for the governed-browser runtime. Chromium's sandbox is a security boundary, not a cosmetic launch option.
Repair this rather than closing/suppressing the lane: add a focused contract/real-browser RED that forbids --no-sandbox for the Agent Task/security evidence path, then run pinned Chrome with its sandbox enabled. If the current CI host genuinely cannot start sandboxed Chrome, keep the existing lane explicitly compatibility-only and add a separate sandbox-capable runner/evidence lane; do not silently treat sandbox-disabled success as production-security evidence. Preserve the existing semantic observation → native input/click → same-document post-condition → exact echo/URL → cleanup checks. Also reconcile the branch with protected main@c789b802fc98a8d7fd8c09d9327f36828054d2a1 only through an authorized non-destructive path because #280 changed the workflow tree and this scheduled product writer does not mutate .github/**.
seonghobae
left a comment
There was a problem hiding this comment.
Current-head verification of review 5098613778: the production evidence runner is unchanged and still passes --no-sandbox to _run_agent_task_browser_pass. Commit 6b70c9d55a1e18a36af6385a788586d5d728a4b0 adds only tests/test_agent_task_chromium_sandbox_contract.py, which requires that exact function not disable Chromium's process sandbox. Because the new exact head has not yet executed on a runner, this is a test-first candidate RED, not an observed hosted RED and not GREEN. Keep the PR Draft. After the test actually fails on the exact head, remove the launch flag as the smallest causal product-test repair and require the pinned real-browser job to execute sandboxed before promotion. If the host cannot support Chromium sandboxing, split compatibility-only evidence from sandbox-capable security evidence rather than weakening the assertion.
seonghobae
left a comment
There was a problem hiding this comment.
Sandbox repair verification on exact head c631ec7f376836c482f2dc833dd80c09721ac208:
- The existing test-first contract in
tests/test_agent_task_chromium_sandbox_contract.pyrejects--no-sandboxinside_run_agent_task_browser_pass. - The unchanged pre-repair source at
5040250e...reproduces that focused contract as RED because the Agent Task Chrome args contained--no-sandbox. - Causal production repair
60b697095be510a129cfb61a3fd97790cf7a0679removes exactly one line fromscripts/ci/run_mv3_compatibility.py; compare is one file, 0 additions / 1 deletion. The separate_run_browser_passMV3 compatibility lane remains unchanged, so this does not overclaim that lane's security evidence. - Current Agent Task source no longer contains
--no-sandbox, so the focused source contract is GREEN.docs/traceability/action-postcondition-evidence.mdnow records this boundary and keeps the PR Draft. - This is not repository-wide or browser-E2E GREEN yet. Current exact-head CI/MV3/security workflows are queued, and sandbox-enabled pinned-Chromium execution must succeed before this finding can be considered closed for browser security evidence.
Do not reinterpret predecessor sandbox-disabled browser success as current security evidence, and do not weaken the contract if the hosted environment cannot start sandboxed Chrome; in that case the compatibility-only lane and a sandbox-capable security-evidence lane must remain distinct.
seonghobae
left a comment
There was a problem hiding this comment.
Current-head verification after the production repair and documentation reconciliation:
- Exact head:
ba8926eed5a6d783f781684f30c900919eecd52b. - Test-first Agent Task sandbox contract had a focused RED against the unchanged pre-repair source because
_run_agent_task_browser_passcontained--no-sandbox. - Causal source repair
60b697095be510a129cfb61a3fd97790cf7a0679is exactly one deletion inscripts/ci/run_mv3_compatibility.py; current Agent Task launch preserves Chromium sandboxing while the distinct MV3 compatibility launch remains unchanged. - Focused source contract is GREEN after that repair.
docs/traceability/action-postcondition-evidence.md,docs/doctoring/mv3-compatibility.md, andCHANGELOG.mdnow state the compatibility/security distinction and cite Chromium's sandbox/debugging guidance rather than promoting predecessor sandbox-disabled runs.- Browser-E2E/repository-wide GREEN is still not established: Manifest V3
33738452556, CI33738452619, Security33738452633, OSV33738453024, Scorecard33738452535are queued; SAST33738452541is pending but its only returned job is still queued with no steps.
Keep Draft. The finding is closed at source-contract level only after a sandbox-enabled pinned-Chromium exact-head run proves semantic observation → native input/click → post-condition → exact echo/URL → cleanup under the repaired launch.
seonghobae
left a comment
There was a problem hiding this comment.
Fresh exact-head integration finding: the Agent Task source repair is internally correct (_run_agent_task_browser_pass no longer passes --no-sandbox), but the current protected-main MV3 workflow used by this same script does not configure the pinned Chrome for Testing setuid sandbox helper. The workflow extracts chrome-linux64, chmods only chrome/chromedriver, and exports only CHROME_BIN/CHROMEDRIVER_BIN; it does not chown/chmod chrome_sandbox or set CHROME_DEVEL_SANDBOX. #43's repository contract already makes that missing canonical workflow setup explicit, and issue #212 now owns the workflow-owner repair.
Therefore do not treat the current queued MV3 run as merely waiting for a source verdict that can become security GREEN unchanged. The exact-head security acceptance for #70 depends on the authorized canonical sandbox-helper workflow repair first, followed by a fresh sandbox-enabled pinned-Chromium Agent Task run preserving semantic observation → native input/click → post-condition → exact echo/URL → cleanup. Do not restore --no-sandbox, weaken the source contract, or add a leaf workflow mutation here. Keep Draft until the owner prerequisite and fresh E2E are both proven.
Signed-off-by: Seongho Bae <me@seonghobae.me>
|
RCA/update for exact head
The PR remains Draft while the new exact-head pinned-browser run identifies or clears the sandbox-enabled session-start failure. |
Signed-off-by: Seongho Bae <me@seonghobae.me>
|
RCA and repair on exact prior head |
seonghobae
left a comment
There was a problem hiding this comment.
Current-head browser-security review: predecessor MV3 run 33887386759 is a real hosted RED for the sandbox-enabled Agent Task lane (0/3 session starts) while the ordinary MV3 fixture remained 3/3. Exact current 77eb0f2e... is one commit beyond that RED, 0 behind main@4ed08bfa..., and adds the pinned chrome_sandbox root/mode setup plus scoped contract/docs. The current workflow delta is a repair/ownership finding, not a Close condition; #212 owns canonical sandbox workflow setup. Exact current MV3/CI/security jobs are queued, so do not transfer predecessor failure or call the helper repair GREEN until the unchanged head runs the real post-condition/cleanup sequence with sandboxing enabled.
Buyer-visible boundary
This Draft established the controlled Agent Task browser lane through pinned Chrome for Testing / ChromeDriver: semantic textbox/button discovery, native clear/type/click, same-document
submittedpost-condition, exact input echo and URL stability, followed by observed temporary-profile cleanup. A WebDriver command ACK alone is never success evidence. The lane deliberately does not pass--no-sandbox.Executed browser RED
Hosted Manifest V3 run
33887386759, job101070423144, used pinned Chrome for Testing / ChromeDriver150.0.7871.129on Ubuntu 24.04. The ordinary MV3 fixture remained 3/3 successful; the sandbox-enabled Agent Task browser failed WebDriver session creation in all 3 trials (AgentTaskSessionStartError, 0/3), so the repeatability gate failed. That is valid causal RED, not a reason to disable the sandbox or weaken the trial/post-condition contract.The source repair at exact branch head
77eb0f2ee71783e06171784b7173c0b4cd530e61installs the archive'schrome_sandboxwith root ownership and mode 4755 and adds focused sandbox contracts. Chromium sandbox guidance and the owner-path rationale remain routed through #212.Live ancestry and ownership split
Protected
mainhas advanced to87c4daa1830bac5a5228b6036752ad5633232085through #286. This historical branch is now 39 ahead / 1 behind current main, with merge base4ed08bfa7c063fc7f2ef9278ee8d281887b8296b; it is therefore not a current-main integration candidate as-is.More importantly, this branch mixes a valid nine-path product/test/documentation delta with
.github/workflows/mv3-compatibility.yml, which this scheduled product writer is not authorized to own. That repair has now been split non-destructively:e051a3d06a613233781272ffdc0e564023ba52b0;main@87c4daa..., 1 ahead / 0 behind, merge base exact main;CHANGELOG.md, documentation/traceability,scripts/ci/run_mv3_compatibility.py, Agent Task sandbox/post-condition contracts, and cleanup contract as nine exact source blobs;.github/**mutation; andPR #70 therefore remains open only because the workflow-authority delta has not yet been fully adopted by an authorized successor. Do not simply Close it: first verify that #288 preserves all nine non-workflow paths and that #212's eventual workflow successor preserves the remaining
.github/workflows/mv3-compatibility.ymlsemantics and produces fresh hosted browser evidence.Verification truth
The earlier exact
77eb0f2e...current-generation runs are historical to #70 and cannot be transferred to #288. #288 was intentionally opened Draft, so its initial native CI/MV3 runs are expected to be skipped under #286; skipped is not GREEN. Security/SAST/CodeQL evidence and, after owner workflow activation, real pinned-Chromium execution must be evaluated on the exact successor generation.The acceptance behavior is unchanged: sandboxed session starts, semantic observation identifies the intended controls, native actions execute, the page-observed post-condition and input echo/URL invariants hold, and temporary browser state is cleaned up after both success and failure.
--no-sandbox, disabling Ubuntu's restriction globally, reducing the three-trial gate, or treating an ACK as task success are rejected repairs.MCP, policy, secret, quarantine/isolation-runtime, outbound-network authority, and release/publication remain outside this runner. Protected-main
AGENTS.mdand live GitHub governance remain authoritative; no merge, self-approval, bypass, force-push, destructive rebase, workflow/ruleset/secret weakening, tag, release, or publication is authorized here.