chadtmiller.com/knotless
git that lives in your Atmosphere account
An account can say it is a bot, and the feed leaves it out
MergedThis adds an optional bot field to dev.knotless.profile, with a flag and a setting in each place that edits a profile. The index keeps a bot table for every account that says it is one, and the recent and pushes feed queries leave out those accounts' activity except changes of state.
I read the index changes (the put_at and delete paths, and the recent and pushes SQL) and found nothing wrong. A profile with bot true adds the account, any other profile value removes it, and deleting the profile record clears it. The feed filters apply only when quiet is set, and an account's own feed is unaffected. The bot table is also dropped on an index rebuild. Docs (serve.md, api.md, cli.md) and a changeset are included. I did not read the web, CLI, MCP or lexicon diffs, and I did not read the gateway or firehose changes.
CI had not finished when I looked. The web check passed, check was running, and test, shots, lexicons and docs were queued. Please make sure all of them pass, in particular the 100% coverage gate and the query-plan check on the new EXISTS (SELECT 1 FROM bot ...) subqueries.
One small point you can ignore: the bot table is updated for any dev.knotless.profile record regardless of its rkey, not just self. Adding an rkey check in put_at and on delete would stop a stray extra profile record from setting or clearing the flag.
This round adds one commit, which fixes the feed's repository lookup. The record key is the repository's name, so the at:// URI built from the key found no record and a runner's merge was never credited. The feed now uses the new Index::repo_of(did, key). It queries repo by (did, key), which the repo_key index covers, and the unit test checks that a lookup by key hits and one by name misses. I found nothing wrong in it.
Earlier I suggested checking the rkey self on profile records so a stray extra profile record can't set or clear the flag. That was optional and I won't press it.
CI is still running: check and test had not finished when I looked. Please make sure both pass, in particular the 100% coverage gate and the query-plan check on the new bot subqueries.
This round is a merge of serve/feed-without-bots into the branch. I found nothing in it to object to, but I did not re-read the merged code. My earlier reviews found no problems in the index, feed and docs changes. The rkey check on profile records was optional and I won't press it.
CI had not finished when I looked. check and docs were running, and test, web, shots and lexicons were queued. Please wait for all of them to pass before merging, in particular the 100% coverage gate and the query-plan check on the bot subqueries.
8 passed, 1 skipped
What changes
An account can say it is a bot.
dev.knotless.profilegains an optionalbot.knotless profile --botsets it and--no-bottakes it back, as do the MCP server'sset_profile(bot) and a box on the profile settings page ("This account is a bot").updateProfiletakes it, andgetProfileandgetOwnProfileanswer it.The feed leaves bots out. The index keeps, in a
bottable, every account whose knotless profile says so, whether or not it keeps that account's profile; the firehose no longer drops a knotless profile's writes for an account whose profile is not kept, and a backfill reads them. The feed of everyone, and of whom one follows, leaves out what such an account says and pushes anywhere, but for its changes of state, as it already did for a repository's runners and triagers.Its profile is marked. A bot's profile page shows a "Bot" tag under its handle.
Why
A reviewer, or any bot a repository does not name as a runner or triager, is named nowhere, so the feed could not tell it from a person: review.knotless.dev's reviews were 17 of the last 60 events on knotless.dev. An account's own word is all there is to go by, and an honest bot will give it; one that lies is spam, for blocks and moderation, as before.
How it was checked
Index tests for
recentandpushesquiet with an account that says it is a bot, and once it no longer does; the gateway test ofupdateProfilesetting and clearingbotthrough togetProfile; the CLI test of--botand--no-bot. Looked at withjust look: the settings form with the box ticked, and the profile with the tag, desktop light and phone dark. The rest is left to CI.Shots-moved: none
Shortcomings
Built on serve/feed-without-bots, not yet landed, so this pull shows its changes too until it does. The bot table is new, not a new index version: accounts that said so before this deploys are found by the next sweep. No fresh agent critiqued the pictures.