Let your agent apply for you Main site →

atsfill 0.0.7: the flaky test that was a real bug, and Camoufox 158

atsfill 0.0.7 is on PyPI. It fixes a bug that had been hiding as a flaky test for three days, moves to Camoufox 158, and catches Ashby follow-up questions that no read can see.

uvx atsfill@0.0.7 install-browser
uvx atsfill@0.0.7 status

install-browser fetches the new browser, 1.3 GB, the first time you run it.

The flaky test that was a real bug

Two Oracle tests kept failing in CI with Overlaid: div.cookie-consent__message. The cookie banner was sitting on top of a checkbox. They passed locally, and they passed on re-run, so the issue collected comments that said "again".

The banner should never have been there. atsfill loads uBlock Origin in every browser, and a cosmetic filter hides that banner. The first guess was that the filter arrived late, so the adapter already waited up to 10 seconds for it. Waiting longer would have changed nothing.

The clue was which tests failed. It was always the last ones in the module, never the first. So I loaded the fixture page in one browser every two seconds and timed how long the banner took to go:

t=  30.4s hidden after 0.03s
t=  32.0s hidden after 0.03s
t=  33.7s hidden after NOT HIDDEN in 15s
t=  50.2s hidden after NOT HIDDEN in 15s
t=  66.8s hidden after NOT HIDDEN in 15s
t=  83.3s hidden after NOT HIDDEN in 15s

uBlock Origin starts its auto-update 37 seconds after launch, and from there on the blocker hid nothing. The run stopped at 110 seconds with the banner still showing. Locally the test module finishes before that. CI runs four browsers side by side and gets there.

So this was never only a test problem. Any real command that ran past that point lost its banner hiding too, on every hiring system. A banner over a button ends a run as blocked with overlaid, and this bug could cause that.

An update makes no sense here anyway. Each launch is a fresh profile, so whatever uBlock Origin downloads is thrown away with the browser.

Camoufox 158

The fix was already in Camoufox, made for a different reason. PR #946 turned uBlock Origin's auto-update off because it pulled about 2.7 MB through the user's proxy on every launch. Since 158.0.1-beta.41 that's a browser policy, and atsfill's own modified copy of the extension picks it up because the policy matches on the extension id. To be sure the policy was the reason, I removed it from a throwaway copy of the browser, and the failure came straight back at the same point.

atsfill now pins that build, which needs the prerelease package camoufox==0.5.9b6. I expect to move to the stable 0.5.9 once it's published.

The new package also bundles uBlock Origin with the browser instead of downloading it, so atsfill builds its blocker from that copy. A blocker now belongs to one browser build, and a future bump rebuilds it without anyone having to run install-browser.

Before release, 8 of 9 real postings across Greenhouse, Ashby and Teamtailor dry-ran to ready on the new browser. The ninth has no adapter, on the old browser as well. The other hiring systems ran their test suites against fixture pages, not live postings, so a difference on a live site would show up first in real runs.

Ashby: the follow-up no read can see

On Ashby, a follow-up question can depend on a saved answer. The posting's query holds neither the field nor its condition, so read can't list it, and a fill could end ready with a required question still empty.

The core now looks at what the page shows once the answers are in. If a new field appeared, it fills it from your answers, or refuses and names the field's id and options. The same change made answers stricter. An answer to a field read never listed is now unknown_field, and it fails the check, because it may be a field the read missed.

Smaller fixes

#releases#camoufox#ublock-origin#ashby