Repository navigation
Conversation
Twelve tasks in which the agent files a privacy request for the benchmark persona, an Ontario resident: deletion, access, data portability, correction, opt-out of sale or sharing, and objection to processing. They run on the live request forms of ten companies, run by two intake vendors: DataGrail (MyFitnessPal, Plex, Bed Bath & Beyond, Skillshare, Revolve, CookUnity, Harry's, ButcherBox, e.l.f. Beauty, FanDuel) and OneTrust (Norton, AVG). These are write tasks, so interception is URL + method only and blocks every submission the form can make. A body filter would let a wrong request type through to the company. Correctness is graded at Stage 2: each rubric names the exact privacy-right id, the company's Ontario (PIPEDA) policy id, the relationship, task-specific content, and a data-minimisation check against the persona's government, health and financial identifiers. The forms were analysed from what their public pages load, without submitting anything. tests/test_privacy_rights_suite.py checks schema validity, leak safety (every submission intercepted, page-load traffic and other companies' endpoints not), rubric consistency, and that quoted persona identifiers match the persona file. Live interception runs are pending; 11 of 12 forms need a CAPTCHA solved, so they need a human. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 17, 2026
This branch has not been deployed
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.
What does this PR do?
Adds a new privacy-rights category: 12 tasks in
test-cases/privacy-rights/in which the agent files a privacy request on behalf of the benchmark persona, Alex Green, an Ontario resident. The requests are deletion, access, data portability, correction, opt-out of sale or sharing, and objection to processing. They run on the live request forms of ten companies, built on two request-intake vendors:Task files, a suite README, one offline test file and a CHANGELOG line. No framework code changes; V1 and V2 are untouched.
Why this category
The paper's claim is about write-heavy tasks on live sites. These are write tasks with a real-world purpose: US law (CCPA/CPRA) explicitly lets people authorize an agent to file these requests for them. They also exercise skills the current corpora touch only lightly:
privacy_request_policy_idshows whether it did.myfitnesspal_deletion_requestplex_data_transfer_requestbed_bath_beyond_opt_out_requestskillshare_correct_last_namerevolve_access_requestcookunity_limit_processing_non_customerharrys_correct_home_addressbutcherbox_deletion_requestelf_object_to_direct_marketingfanduel_access_requestnorton_marketing_email_opt_outavg_copy_of_my_dataThe design decision worth reviewing: URL-only interception
A request that leaves the container is a real request to a real privacy team. If
eval_schemamatched only the correct body, an agent that chose the wrong right or the wrong country would send that wrong request for real. So every task intercepts on URL + method alone and blocks every submission the form can make:POST https://<company host>/api/v2/privacy_requestsor/api/v2/opt_outs, anchored to that company's host.POST https://privacyportal.onetrust.com/request/v1/dsarrequestqueue, plus/dsdocument/v1/documentsso an attachment upload is blocked too.Correctness moves to Stage 2. Each
judge_context.rubricnames the exact values a correct request carries:privacy_right_id, which is the same UUID for a given right across every DataGrail customer; the company's own Ontarioprivacy_request_policy_id; location codes; name; relationship; task-specific content; and the minimisation check.reference_solutiongives the path and the expected body. Stage 1 here means "submitted a request on the right company's form", which is the same reading as the claw-eval answer-submit tasks. This follows the repo's stated position, in the 0.3.1 changelog entry, that leak risk outweighs interception precision.How the forms were analysed (nothing was submitted)
Every form was read from what its public page loads, without submitting a request:
intake_formtoken on load. That token reads the locations, each location's policy and rights, the intake questions and the CAPTCHA setting. The submit URL and body shape come from the request-center bundle. The right UUIDs were confirmed identical across all ten companies.formDatashape come from the webform bundle.Details found this way that the rubrics depend on:
country_code/state_code, and the answers are flattened to the top level.Test plan
tests/test_privacy_rights_suite.py, 78 cases, offline:alex_green_personal_info.json;clawbench-batch --cases-dir test-cases/privacy-rights --all-casesdiscovers all 12.400 passed, 10 skipped. The one failure on my machine istest_host_tasks.py::...[v1-lite], which comes from Windows checking out thev1-litesymlinks as text files; it fails the same way onmain.ruff check,ruff format --check,pyrightclean on the new test file.--humanrun per task in the official runtime, to confirm the real submit request is intercepted. Eleven of twelve forms put a CAPTCHA in front of the submit button, so these need a person. I will add the runs and interception hashes to the README the way feat: add twelve environmental observation request workflows #378 did.Known limits, also in the README
metadata.captcharecords the type so CAPTCHA failures can be separated from navigation failures.Corpus
Related issues
Category proposal and authorship question: #392.
🤖 Generated with Claude Code