Build1 distinct publisher3 min readUpdated
patchwright rewrites broken scrapers, then has to pass a sandbox run, a second model and a human. What makes the check mean anything is a test site whose data never changes.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
When a site redesigns, a selector breaks and the data quietly goes to zero or, worse, goes wrong [5]. Zero gets noticed. Twelve tidy records with the wrong fields attached pass every smell test available to a human skimming output, and the harness in patchwright is built for that case: a fake listings site holding twelve records rendered through a template, where the mutation that breaks it only ever touches the template [6][7]. Verification then collapses into a comparison against something that cannot drift, so a patch returning twelve well-formatted but wrong records is scored as a failure [8]. The author's own summary is that every other guarantee in the project leans on that one [9].
The arithmetic on the real system is worth doing. 380 ingestion runs in fourteen days is about 27 a day [21], averaging just under two fetches per run [22], roughly 39 fetches per scraper across the fortnight [23]. A wrong patch approved on a Monday keeps two dozen runs a day writing plausible output until somebody reads it line by line.
Why a person sits at the end of the chain is visible in the failures the write-up is candid about. One agent was named s3_diagnose, read its own name, decided it was working with Amazon S3, and diagnosed a missing bucket permission on a problem that had nothing to do with storage [13]. Separately, Gemini 3.7 spends tokens thinking before answering, and with the output budget set too low the answers came back chopped off mid-word, looking exactly like a serialization bug [14]. Gemini 3.7 Flash does the diagnosis and the rewrite; the reviewer's brief is written by Gemma 4 [11]. The adversarial review catches errors the first model makes alone. It is not evidence about errors both are prone to.
The sandbox history says the same thing about proof. A bare node:vm context turned out to carry globals the author had not asked for, one of which would have corrupted the channel the sandbox uses to report its results the first time a patch tried to log [15]. A corrupted result channel is worse than a crash: nothing stops, and the verifier grades numbers it has no reason to distrust. The second failure was louder, a patch importing a Node module raising the error in the parent process rather than inside the sandbox, which would have taken the whole service down instead of failing one repair [16]. The threat named is not an attacker but a model that writes an infinite loop or reaches for the network to check something, and both have to fail safely every time [18].
None of this showed up in the test suite. Over a hundred tests passed before deployment and deployment still found bugs, because the tests stub the models and never touch the real cloud services [19]. One of them was a field the author called severity colliding with Cloud Logging, which reserves that name and uses it to set a log entry's level [20]. Commercial self-healing scrapers already exist, which he credits as prior art [10]. The part worth copying is the harness discipline, and its price is a fake site whose contents you refuse to change. The spending cap on Cloud Run belongs in the same category [12]: a repair loop that never terminates is a billing failure before it is a correctness one.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
Because the data is fixed, the pass condition is always whether the scraper's output matches the twelve records the page was built from: no fixture to maintain, nothing to drift, and a patch returning twelve nicely-formatted but wrong records fails.
The author states that every other guarantee in the project leans on the fixed-data verification.
patchwright is an agent that repairs broken web scrapers, built for Google's All Things Agentic Hackathon.
The agent figures out what changed, rewrites the scraper, proves the new version in a sandbox, has a second model review it, and then waits for a human to approve.
The author runs Aroppo, a site aggregating opportunities for creators, which depends on about nineteen scrapers pointed at other people's websites.
In one two-week stretch those scrapers made 744 fetches across 380 ingestion runs.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Detailed but wholly self-reported
One publisher, one author, describing his own build. The technical account is unusually specific and internally consistent — named models, named runtime, concrete failure modes, exact record and fetch counts — which is why this is not scored lower. But nothing is independently verifiable: no repository, no benchmark, no third-party review of the sandbox escape testing, and no measured repair success rate against the real scrapers the project was built for. The strongest safety and verification claims rest on the author's own testimony.
Author's own project only
Adoption is limited to the builder himself. The disclosed usage figures describe the pre-existing scraper fleet on his own site, not patchwright's use; patchwright itself is a hackathon entry deployed on Cloud Run and demoed against a self-built fake site, with no reported outside users, no public release artifact, and no repository or license mentioned.
Slightly understated for a contest entry
The framing runs cooler than the genre norm: the author volunteers that self-healing scrapers already exist commercially and that he is not claiming the idea, catalogues his own mistakes (a bare vm context, a mis-named agent, a truncated thinking budget, 100+ tests that missed production bugs), and constrains the reviewer to advisory-only with a human gate. The one overreach is absolute language around verification being impossible to fool, which no external test backs. Net: marginally understated relative to the evidence presented, though the evidence base itself is thin.
Disclosed contest and product incentives
The post states outright that it was written for the purpose of entering Google's All Things Agentic Hackathon, and the entire stack it praises — Gemini 3.7 Flash, the Agent Development Kit for JavaScript, Gemma 4, Cloud Run, Firestore — is the sponsor's. It also promotes the author's own site, Aroppo. The incentive to present the build favourably is strong, though it is disclosed in the first sentence and partly offset by candid failure reporting, which is why this is not scored higher.
Coherent single account, unverified
Confidence in the descriptive facts — what was built, on what stack, with which failure modes — is reasonable because the account is specific, self-consistent and self-critical. Confidence in the performance and safety claims is low: one publisher, one interested author, no independent replication, no code, and no evaluation beyond a fixture the author also built. The cluster cannot be cross-checked at all.
build
Gemini 3.7 Flash goes GA on one model layer, and that is the actual news1 distinct publisher
product
A billion downloads, and nobody will say what a download is1 distinct publisher
invest
Gemini 3.7 Flash Is Cheap Until January 1, When The Agent Bill Doubles2 distinct publishers
build
Four frontier models in four days, and the cheapest number in your agent plan has an expiry date1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 22, 2026