Poll comix.to through the browser sidecar (#98) #105
Reference in New Issue
Block a user
Delete Branch "comix-browser-site"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #98.
comix.to began answering plain-TLS fetches with a Cloudflare JavaScript
challenge on 2026-08-12, so every poll got a 403 interstitial. Its cover host
static.comix.tois gated the same way. comix therefore joins kagane andnovelfull as a browser-backed Site.
What changed
internal/latest/sites.go): comix gains aBrowserentry —comixRead,Done: body != "" && !isInterstitial(body),Fallback: false.Skip-when-no-browser falls out of the existing routing; no site-string compare
was added anywhere.
internal/latest/browser.go): an in-tabfetch()of theSeries URL, not a DOM render. comix is an SPA — rendering it costs ~65
requests for the same server-rendered HTML one fetch returns (24.5 KB,
~480 ms measured).
comixSeriesPageURLpins scheme + host +/title/<slug>and rebuilds the address, so a client-supplied
series_urlcannot aim thebrowser anywhere else.
comixImageURLRepinshttps://static.comix.to/<path>.<ext>;BrowserFetcher.Imagenow gates onbrowserOnlyCoverURLrather than akagane-only regex, so both Sites' image URLs route through the one path.
Bytes come from direct navigation, not a page-context fetch — comix's Series
page sets
cross-origin-embedder-policy: require-corp, which fails one.server-rendered HTML the existing fixtures were cut from.
Verification
go test ./...green (needs Docker).not fetched at all when none is (
TestComixUsesBrowserFetcher,TestComixSkippedWhenNoBrowserFetcher); URL-pin and cover-gate table tests.TestSmokeComix(env-gated):page 24793 bytes in one in-tab fetch, chapter 53, cover accepted by the pin,
26862 bytes of
image/jpgretrieved.BrowserFetcher,Getand the
Fallbackfield, fixed inf000cc7.Docs updated: root
AGENTS.md(constraint + smoke command, including the notethat this dev machine's ISP DNS-hijacks
comix.to),backend/AGENTS.md(poller, cover pipeline,
BROWSER_WS_URL),REDEPLOY.md§8 degrade note.The note read as a repo-wide fact ('this dev machine', 'here'), which is meaningless in a clone elsewhere and invites adding --add-host unconditionally. Now: symptom (ERR_CERT_COMMON_NAME_INVALID), the check (getent hosts inside the container), the workaround, and an explicit warning not to bake the hosts into chrome/docker-compose.yml.