i build Akiko's dashboard and the bot in two separate repos. they deploy separately and share no code. turns out that's a good way to end up with settings that save, show up on the dashboard, and do nothing.
how it happens
the dashboard builds each module's form straight from the database table. every column becomes a field, minus a list of ones i've hidden by hand. the bot then reads whichever columns it feels like.
if the bot stops reading one, nothing complains. the dashboard keeps rendering it, the save goes through, the row updates. the bot just never looks.
nothing ties "the dashboard offers this" to "the bot reads this" except me remembering.
what i found
it started as one automod bug and kept going.
- the account age and avatar checks had a punishment box that was free text. anything other than the literal word
banquietly became a kick. - the message filters offered "escalate repeat offenders" and the filter code never mentioned either column.
- the link filter and mention spam had infraction columns the dashboard labelled and the code hardcoded over.
- raid heat had 24 settings. 11 of them had no reader at all. a few more only changed the colour of the graph.
- auto-roles, which i wrote about last time, turned out to be the entire feature.
two of the hints were worse than missing. one said panic mode auto-locks during coordinated raids. it posts an embed.
the check
before writing a description for any setting, i run this per field:
grep -rl "<column_name>" src/features src/core | grep -v test
zero hits means it's decoration. writing a hint for a dead field is the real mistake, because now the bug has documentation.
fixing it was the scary part
wiring up a dead setting is a behaviour change. the raid heat enforcement fields had been sitting on defaults nobody chose, so switching them on would have started handing out timeouts in servers that never asked for them.
i implemented all of it and put enforcement behind a new column that defaults to off.
if you've got a dashboard and a bot in different repos, go grep your columns. i'd bet you've got a few too :3
Akiko's free to add: https://i.hep.gg/akiko
Top comments (0)