Comparison: drivers, avoidance, and what REA is for

Two questions often get mixed up, and this page keeps them apart. Programmatic access is filling Facebook's create form and, only with --live, clicking Publish once; that code exists. Avoidance is making sure the page can't learn things about the machine or link accounts together; that's the identity study, and REA doesn't implement it. Read this to see what's already proven, how log's driver differs from two earlier ones, and what REA will and won't be used for.

What already works, and what is only claimed

"Works" here means the code and a test or a recorded local run exist. It doesn't mean a live Facebook publish.

CapabilityEvidenceNot shown at the time
Command registry, usage generated from COMMANDSsrc/cli/runner/index.ts
Account check before any browser, including sign-incheckRunnable, socialAccount.test.ts (noProxy on connect)
Publish dry run through the state machinepublish.test.ts, and a visible run against python/fixtures/createItem.html reaching doneA live facebook.com run, --live past review, a live captcha solve
Proxy required, exit country checkedpython/browser/proxyGate.py, proxy testsA live log proxy assign
One device, pinned locale, launch self-check, local active hourssrc/camofox/device/, src/marketplace/home/A CreepJS re-measure on camoufox 0.5.8 / 156.0.1-beta.39
The monitor decides and never postssrc/marketplace/monitor/machine.tsA signed-in selling scan
Captcha route: CaptchaKraken, then 2Captcha, else a personsrc/captcha/router/A live solve
Reading and writing accounts and listings in TwentyThe generated client, marketplaceFixture() in testsA call to a real Twenty during this study

The test count reported at the time (300 passing) was the author's claim from an earlier commit; it wasn't re-run for this study.

Sign-in goes through the proxy too: checkRunnable refuses to start log facebook connect without one.

How the three drivers differ

log's publishEarlier Camoufox clientEarlier production poster
BrowserCamoufox, visible, cursor shownAsyncCamoufoxAdsPower Chromium over CDP
What decidesAn XState machineMarketplaceCreateActionposter.ts / facebook-poster.ts
Upload checkFacebook's N/10 counterIts spike waits on the counter; the action's tests don't prove a live publishA fixed wait, then setInputFiles
After PublishNo retry; a crash becomes unconfirmedIdCan report published with no id, and can take another listing's idThe server path can return success with no URL
NetworkNot recorded at the timeA passive listener for group scrolling, not for createNo HAR pipeline
ProxyRequired, country checked, no exceptiongeoip=True on its own launcher; without a gate it uses the local machine's connectionAdsPower profile proxy, outside log's gate

log's publish session is the one to keep. The other two are sources for selectors and for bugs already written down (see Sources). REA doesn't become a fourth poster.

Avoidance: what's still open

The status table is in docs/identityLeaks/README.md. These items were still open, and REA doesn't close them:

ItemWhy it stays open
The canvas hash changes every launchFirefox re-keys its noise per session. Turning that off makes every account share the machine's raw canvas. Not decided yet.
WebGL pixels match the machine's GPUCamoufox can change the reported GPU name, but not the pixels. docs/deviceIsolation/ says a software renderer on a VM trades one tell for another.
Camoufox detectability on 156.0.1-beta.39Upgraded but not re-measured on CreepJS. The package is paired with beta.36.
A person at the keyboard during sign-inInput method, phone country, personal email. A process question, not code.
Listing text and currencyNot screened. A place name from the wrong country in the copy would show.

What the gated path already refuses is in the same table: timezone, locale, hours, an ungated launcher, session storage, geolocation precision, the proxy username in output, WebRTC, DNS, HTTP/3. Those checks stay in the Python gate; they aren't rebuilt inside REA.

The useful REA question is narrower: once the create page's scripts are saved offline, which of those surfaces (canvas, WebGL, Intl, WebRTC, timezone) do the scripts actually read? The identity study inferred the observers from public documentation and leak-test sites, and the scripts are a check on that. A script that never touches a surface doesn't prove Facebook's servers ignore it, but it does show which client-side checks are real.

What REA won't be used for

  • Pointing rea inspect-web-page at a live facebook.com tab, in Camoufox or in AdsPower.
  • Letting REA launch a browser for an account. Every browser for an account goes through log's gates, and REA's browser is the wrong one.
  • Adding a GraphQL client that posts a listing outside the form. The response listener log would copy refuses to construct requests.
  • Treating rea search as web search, or adding a web-search command to log.
  • Bundling rea-agents into log's package. The global CLI reads saved files; the publish process stays Python and Camoufox.