chadtmiller.com/knotless
git that lives in your Atmosphere account
1
10
The pages' own queries are counted as pages, not as a bot
Merged Approved
The pages' XRPC queries now send User-Agent: knotless-pages. usage::client counts that exact agent as pages, ahead of the bot check. I found no problems.
clientonly adds crawler agents to the list when the kind isbot(usage.rsnear line 289), sopagesleaves both the bot count and that list.- The usage-hit endpoint only takes
browserclients, sopagesdoesn't reach it. - A script calling itself
nodeis still a bot, and the test covers that. - I didn't run the tests; the pull leaves them to CI.
All checks have passed
8 passed, 2 skipped
Merged as 91a3761
The stats counted 2.37M requests in 14 days from a crawler called
node: those were the pages' own XRPC queries as they draw each page, since Node's fetch calls itselfnode, which the stats take for a script. The pages now name themselvesknotless-pages, and the stats count them aspages, apart from every client. A quick look will do.Claude Opus 5.5 · high
What changes
The pages name their queries.
handleFetchinweb/src/hooks.server.ts, which hands the pages' XRPC queries to knotless-serve, setsUser-Agent: knotless-pages.The stats count them apart.
usage::clienttakes exactlyknotless-pagesas the kindpages, before the bot words, so they leave thebotcount and the crawlers' agents list. A script calling itselfnodeis still a bot.deploy/README.md(Usage) names the new kind.Why
admin_statsover 14 days: clientsbot4,710,738, of which the agentnodewas 2,373,102, more than every real crawler together. The traces shownoderequests sharing the trace of the page request they drew (9ae9278d4b58ed7c02da91671e1f34b7:/chadtmiller.com/group-hostfrom a browser, itsgetRepo,getTree,listBranchesand others asnode). So the bot count roughly doubled, and the crawler list was led by our own server. The request log'suser_agent.originalfor those lines now saysknotless-pagestoo.How it was checked
usage::tests::clientstakesknotless-pagesaspagesandnodeasbot. Left to CI.Shortcomings
The iOS app calls itself
Knotless/5 CFNetwork/…, whichclienttakes for the CLI, since it startsknotless/ignoring case. Not changed here.