# u/igneum_bot: the labelled stats bot 6 October 2026. A second Reddit account that posts the weekly devnet numbers and devnet incidents to r/igneum, and the same numbers to the Discord #numbers channel. It never replies to anyone. Script: tools/community/reddit-bot.mjs (Node 22, no dependencies). ## The account | Field | Value | |---|---| | Handle | u/igneum_bot | | Display name | Igneum stats bot | | About (under 200 chars) | Posts the weekly devnet numbers from igneum.network/api/stats and devnet incidents to r/igneum. Never replies. Run by the project; questions go to u/igneum_network. | | User flair in r/igneum | Bot (mod-assigned, the only user flair) | | Moderator permissions | Flair only (so its posts carry the Devnet flair) | | 2FA | On; the OAuth script app is the only thing that logs in after setup | | Reddit app | reddit.com/prefs/apps, type "script", name igneum-stats-bot, redirect uri http://localhost (unused), owned by u/igneum_bot. Reddit's rules for bots: a descriptive user agent naming the account, and the account is a bot in its about text (approximate; check the current API terms before the first live post) | ## What it posts, and when | Post | When | Flair | Content | |---|---|---|---| | Weekly numbers | Monday 09:00 UTC | Devnet | posts/02-weekly-numbers-template.md rendered from /api/stats, /api/live and /api/supply, with the previous week's snapshot in the "Last week" column | | Devnet incident | When the operator runs it with --text | Devnet | One operator-written sentence (UTC time, what happened, cause, the rule or fix) plus a fixed footer. The bot never writes an incident itself; it has no judgement to apply | Nothing else. No replies, no comments, no votes, no DMs, no crossposts. The script contains no comment endpoint, and AutoModerator rule 8 removes any comment from the account and pages the moderators if one ever appears. ## Credentials File: ~/.config/igneum/reddit, mode 600, KEY=VALUE lines, never in the repository, never printed. Keys: REDDIT_CLIENT_ID, REDDIT_CLIENT_SECRET, REDDIT_USERNAME, REDDIT_PASSWORD, REDDIT_SUBREDDIT (igneum), REDDIT_FLAIR_TEXT (Devnet, optional), DISCORD_WEBHOOK_URL (optional, the #numbers webhook). `node tools/community/reddit-bot.mjs check` prints which keys are present and never their values. The script reads the file at post time only. ## Commands ``` node tools/community/reddit-bot.mjs weekly --dry-run # renders to docs/community/reddit/out/weekly-.md, posts nothing node tools/community/reddit-bot.mjs weekly # posts to r/igneum, saves the snapshot for next week node tools/community/reddit-bot.mjs weekly --discord # the same, plus the Discord webhook node tools/community/reddit-bot.mjs weekly --incidents file.txt # one incident sentence per line, included under "Incidents this week" node tools/community/reddit-bot.mjs incident --text "..." [--dry-run] [--discord] node tools/community/reddit-bot.mjs check ``` The out/ directory is git-ignored. The snapshot lives in ~/.config/igneum/reddit-bot-state.json and is written only after a successful live post, so a failed post never advances "last week". ## Guards - Dry run is the default in the operator's hands: the live command is run only after reading the dry-run file. - A forbidden-string guard refuses to post text matching the site's private patterns (the founder's first name, the host names, the local time zone, machine names). Tested 6 October 2026: a dry-run incident containing the founder's name was refused with exit 1; a clean one rendered. - Every API number renders as "n/a" when null and the post opens with a stale warning when /api/stats says stale. - The title is cut at 100 characters, Reddit's limit. - No retry loop: a failed post exits 1 and the operator reads why. A watcher that posts twice is worse than one that posts nothing. ## Tested, 6 October 2026 Dry run against the live API at 17:34 UTC rendered 2,854 characters: 1.11 GH/s, height 139,180, 1,986 shards paid, median proof lag 406.5 s, 3 provers in 10 minutes, 56 voters, ramp 17.1%, supply check 500 of 500. The guard fired on the known-bad case and passed the known-good one. Not yet run: the live Reddit submit (no app or credentials exist yet), the flair lookup, the Discord webhook. The first live post is watched by hand. ## Scheduling A launchd or cron entry on the Mac, Monday 09:00 UTC (10:00 London in winter), running the live weekly command with --discord, after the credentials exist and one live post has been made by hand. Not before. The entry is the operator's, outside the repository. ## Rules the bot lives under 1. It never replies to people. If a reply is needed, u/igneum_network writes it. 2. It posts only the two kinds above. 3. It posts numbers from the public API and incident sentences a person wrote; it never infers an incident. 4. Its credentials are never printed, logged or committed. 5. If it misbehaves, the account is disabled first and the cause found second.