feat(browser): prove pristine Agent Task profile admission - #136
Draft
seonghobae wants to merge 6 commits into
Draft
feat(browser): prove pristine Agent Task profile admission#136seonghobae wants to merge 6 commits into
seonghobae wants to merge 6 commits into
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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 |
This was referenced Aug 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Partial implementation of #28, stacked on unchanged exact PR #132 head
5a352a05ade9e902e6729bcb40ad37b69b485db3.Buyer/security gap
The pinned-Chromium Agent Task used a temporary profile and disabled extensions, but the executable acceptance boundary did not prove that the profile directory was pristine before launch or that browser-visible cookies and Web Storage were empty before the controlled action. A reused or pre-populated task profile could therefore carry ambient state while still producing a superficially successful workflow. The runner also needed explicit saved-credential service disablement and one aggregate isolation gate.
Dependency
This Draft targets unchanged exact #132 head
5a352a05ade9e902e6729bcb40ad37b69b485db3and must remain Draft while #132/#129/#128 and their prerequisites remain active. No downstream open PR currently targets this branch. No prerequisite check, review, status, artifact, coverage, mergeability, or synthetic-merge evidence transfers.TDD and RCA sequence
c9016da784d3a3cafbe8ffb84a38ca686e9e5314required explicit pristine-profile admission, ambient cookie/Web Storage inspection, saved-credential disablement, per-trial evidence, and an aggregate fail-closed isolation gate before runner support existed. CI run31648194541, Rust contracts job94286512210, failed in the Python repository-contract suite when a controlled result withprofile_pristine_before_launch = falsewas still accepted with return code 0. This is the valid RED.40700a739905bf079e4dc1e43ac6d078f81974aaadded the profile-admission and ambient-state boundaries, Chrome credential-manager preferences, evidence propagation, and aggregate gate.a805af6ff8bef3e974ea3a4e0a5cdc4ec4dee30fcompleted the source/test boundary and reached exact-green.5fac5b5c61462f415caadb98a2428907acc0c745added a release-note entry, but semantic review found that its initial wording overclaimed a browser-observed extension count that the implementation does not collect.8845dbd781f60f0d9ef4ea74ec0a9707b16bbd50corrects only that documentation claim. It now distinguishes browser-observed cookie/Web Storage evidence from launch-policy extension disablement and explicitly avoids claiming attested absence of every credential mechanism.Implemented contract
The controlled Agent Task runner now:
credentials_enable_service = falseandprofile.password_manager_enabled = false;--disable-extensionslaunch policy;localStorage.lengthandsessionStorage.lengthin the controlled page and fails closed unless both are valid non-negative integers equal to zero;Hostile tests cover a pre-populated profile, ambient cookies, ambient local storage, malformed probe behavior, missing isolation evidence, and exact configuration/gate wiring.
Exact-head proof
On unchanged exact head
8845dbd781f60f0d9ef4ea74ec0a9707b16bbd50against unchanged exact prerequisite5a352a05ade9e902e6729bcb40ad37b69b485db3:31654427064: success;94305616928: repository contracts, canonical formatting, locked workspace/all-target check, full tests, strict Clippy, and rustdoc success;94305616944: exact owned production function/line/region/branch enforcement success;31654427093: success;No predecessor-head or prerequisite evidence is promoted as current proof.
Truth boundary
This is controlled compatibility/acceptance evidence, not a general browser-attestation mechanism. It does not inspect the human browser profile, prove absence of every Chrome credential store, service worker, cache, IndexedDB, filesystem artifact, operating-system keychain entry, enterprise policy, injected browser component, or out-of-process influence. It does not authenticate the browser/adapter process, authorize Agent actions, disclose secrets, or complete #28. Extensions are disabled by reviewed launch policy; no browser-observed extension-count claim is made.