{
  "description": "Complete commit history of Inkwell (a Discord bot and its web dashboard): subject, author, date and lines added and removed (stats, null if unknown). Newest first.",
  "page": "https://inkwell-dashboard.pages.dev/trust",
  "plainText": "https://inkwell-dashboard.pages.dev/commits.txt",
  "generatedAt": "2026-10-14T06:07:23.956Z",
  "updatedAt": "2026-10-14T06:07:19.548Z",
  "cacheNote": "If this page looks out of date, your tool may be showing a copy it saved earlier. Ask for the same address again with any throwaway extra on the end (for example https://inkwell-dashboard.pages.dev/commits.txt?fresh=12345 or ?fresh=<today's date and time>); that always returns a new copy. Compare \"Generated\" below with the current time: if Generated is old, you were given a saved copy.",
  "complete": true,
  "latest": [
    {
      "sha": "f85cfc48",
      "subject": "Ask us: a reply after the team has been quiet for 30 minutes sends the person a Discord DM again (at least 5 minutes after the last one) instead of waiting out the hourly limit",
      "author": "SirMittens",
      "date": "2026-10-13T06:03:46.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 18,
        "deletions": 4
      },
      "repo": "bot"
    },
    {
      "sha": "863419a7",
      "subject": "Ask us: a reply from the team is announced by a short sound (on by default, with a switch to turn it off), a count in the tab title, and the unread check runs every 30 seconds instead of every 2 minut",
      "author": "SirMittens",
      "date": "2026-10-13T06:03:46.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 109,
        "deletions": 8
      },
      "repo": "dashboard"
    },
    {
      "sha": "9a28e08e",
      "subject": "Ask us: a question only looks and refreshes like a live chat while the team is typing or has replied in the last 10 minutes; before that and after it goes quiet it is a plain question that refreshes s",
      "author": "SirMittens",
      "date": "2026-10-13T05:52:08.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 28,
        "deletions": 6
      },
      "repo": "dashboard"
    },
    {
      "sha": "45f207de",
      "subject": "Revert \"The dashboard moves to inkwellapp.pages.dev, a shorter address people can type\"",
      "author": "SirMittens",
      "date": "2026-10-13T05:47:18.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 9,
        "deletions": 9
      },
      "repo": "bot"
    },
    {
      "sha": "1d62e8be",
      "subject": "Revert \"The dashboard moves to inkwellapp.pages.dev, a shorter address people can type; the Pages project is now named inkwellapp\"",
      "author": "SirMittens",
      "date": "2026-10-13T05:47:18.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 24,
        "deletions": 24
      },
      "repo": "dashboard"
    },
    {
      "sha": "3cf0991a",
      "subject": "The dashboard moves to inkwellapp.pages.dev, a shorter address people can type",
      "author": "SirMittens",
      "date": "2026-10-13T05:40:24.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 9,
        "deletions": 9
      },
      "repo": "bot"
    },
    {
      "sha": "0015a321",
      "subject": "The dashboard moves to inkwellapp.pages.dev, a shorter address people can type; the Pages project is now named inkwellapp",
      "author": "SirMittens",
      "date": "2026-10-13T05:40:24.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 24,
        "deletions": 24
      },
      "repo": "dashboard"
    },
    {
      "sha": "e8198d7a",
      "subject": "Phone layout: the top bar's logo is sized like the sidebar's, and pages leave room at the bottom so the Ask us button doesn't cover the last control",
      "author": "SirMittens",
      "date": "2026-10-13T05:33:21.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 4,
        "deletions": 2
      },
      "repo": "dashboard"
    },
    {
      "sha": "668d5b5a",
      "subject": "Ask us: team replies keep mentions as readable names and GIF links as their direct media, so the dashboard can show them",
      "author": "SirMittens",
      "date": "2026-10-13T05:29:38.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 6,
        "deletions": 1
      },
      "repo": "bot"
    },
    {
      "sha": "ea79cfe6",
      "subject": "Phone layout: below 900px a top bar with a menu button opens the sidebar as a drawer, pages get narrower padding, tables scroll sideways and the message editor's pickers stay on screen",
      "author": "SirMittens",
      "date": "2026-10-13T05:29:38.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 65,
        "deletions": 3
      },
      "repo": "dashboard"
    },
    {
      "sha": "91de654c",
      "subject": "Ask us: messages show custom emoji, pictures, videos and GIFs (from Discord, Tenor and Giphy only) and clickable links instead of raw codes",
      "author": "SirMittens",
      "date": "2026-10-13T05:29:38.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 44,
        "deletions": 1
      },
      "repo": "dashboard"
    },
    {
      "sha": "d56bc3d9",
      "subject": "Move the message content intent application doc to the Inkwell docs folder",
      "author": "SirMittens",
      "date": "2026-10-13T05:17:50.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 0,
        "deletions": 72
      },
      "repo": "bot"
    },
    {
      "sha": "79af31b9",
      "subject": "Loading: the centred spinner is drawn at the top of the page, outside every other element, so an animating card or page can't carry it off-centre; every page-level load uses the same central spot and ",
      "author": "SirMittens",
      "date": "2026-10-12T12:33:44.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 24,
        "deletions": 15
      },
      "repo": "dashboard"
    },
    {
      "sha": "1a74370e",
      "subject": "Loading reads as one continuous spinner: the start-up screen, the page and each part use the same loader, which appears in the middle of the screen at once (same spot, ring in step, no fade) when it f",
      "author": "SirMittens",
      "date": "2026-10-12T12:15:52.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 83,
        "deletions": 45
      },
      "repo": "dashboard"
    },
    {
      "sha": "496b48a4",
      "subject": "Ask us: the bot sees when the team types in a question's ticket (typing events, support server only) and remembers it for a few seconds",
      "author": "SirMittens",
      "date": "2026-10-12T12:11:23.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 59,
        "deletions": 10
      },
      "repo": "bot"
    },
    {
      "sha": "3f27155c",
      "subject": "Ask us: a conversation shows who is typing to the person, and says nobody from the team has replied yet (with the real usual wait) until someone claims or replies; open conversations refresh every few",
      "author": "SirMittens",
      "date": "2026-10-12T12:11:23.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 83,
        "deletions": 8
      },
      "repo": "dashboard"
    },
    {
      "sha": "4bfce602",
      "subject": "One loading mark everywhere: the Inkwell logo with a spinning gold ring, centred in the space it loads (not a lock screen); when several parts of a page load at once only one ring spins, and the next ",
      "author": "SirMittens",
      "date": "2026-10-12T11:59:56.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 208,
        "deletions": 63
      },
      "repo": "dashboard"
    },
    {
      "sha": "0cc0543d",
      "subject": "Ask us: claiming an Ask us ticket tells the person on their dashboard (a system message, an unread notification, and who is in the chat); letting go tells them someone else will pick it up",
      "author": "SirMittens",
      "date": "2026-10-12T11:54:55.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 72,
        "deletions": 4
      },
      "repo": "bot"
    },
    {
      "sha": "22428e71",
      "subject": "Admin split into Admin (maintenance, Ask us availability, banned servers, Trust Network reports) and Premium Admin (stats, servers, activity, codes); popups centre on the screen again (the page animat",
      "author": "SirMittens",
      "date": "2026-10-12T11:54:55.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 730,
        "deletions": 571
      },
      "repo": "dashboard"
    },
    {
      "sha": "d0eae204",
      "subject": "Ask us retention: a daily cleanup marks questions nobody touched for 30 days solved, deletes questions 30 days after they are solved, and deletes archived Ask us transcripts after 30 days; an erased q",
      "author": "SirMittens",
      "date": "2026-10-12T11:34:42.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 95,
        "deletions": 5
      },
      "repo": "bot"
    },
    {
      "sha": "744be7af",
      "subject": "Ask us: the page states the 30-day retention rule and people can delete their own questions (open tickets are closed first)",
      "author": "SirMittens",
      "date": "2026-10-12T11:34:42.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 96,
        "deletions": 4
      },
      "repo": "dashboard"
    },
    {
      "sha": "54c25a97",
      "subject": "Ask us button: the same gold pill with a lit, raised surface, a soft halo that breathes now and then, a shine on hover, a tipping speech bubble, and a pulsing unread badge (reduced motion respected)",
      "author": "SirMittens",
      "date": "2026-10-12T09:16:01.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 27,
        "deletions": 6
      },
      "repo": "dashboard"
    },
    {
      "sha": "d909efe4",
      "subject": "Ask us: the dashboard no longer posts to a forum; every question is opened as a ticket by the bot, and marking a question solved tells the person its ticket closes shortly",
      "author": "SirMittens",
      "date": "2026-10-12T09:10:32.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 18,
        "deletions": 50
      },
      "repo": "dashboard"
    },
    {
      "sha": "bbfd5204",
      "subject": "Ask us: every dashboard question opens as an ask-us ticket (Ask here tickets are staff-only until the person joins the server); closing the ticket solves the question and marking it solved closes the ",
      "author": "SirMittens",
      "date": "2026-10-12T09:10:31.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 215,
        "deletions": 58
      },
      "repo": "bot"
    },
    {
      "sha": "687384c3",
      "subject": "Ask us: Chat on Discord opens a normal ticket of the ask-us type (the bot opens it once the person is in the support server, or adds the question to a ticket they already have), replies are copied bot",
      "author": "SirMittens",
      "date": "2026-10-12T08:58:36.000+03:00",
      "securityFix": null,
      "stats": {
        "additions": 214,
        "deletions": 59
      },
      "repo": "bot"
    }
  ],
  "repositories": {
    "bot": {
      "url": "https://gitlab.com/sirmittens-dev/inkwell-group/inkwell",
      "count": 353,
      "commits": [
        {
          "sha": "f85cfc48",
          "subject": "Ask us: a reply after the team has been quiet for 30 minutes sends the person a Discord DM again (at least 5 minutes after the last one) instead of waiting out the hourly limit",
          "author": "SirMittens",
          "date": "2026-10-13T06:03:46.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 18,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "45f207de",
          "subject": "Revert \"The dashboard moves to inkwellapp.pages.dev, a shorter address people can type\"",
          "author": "SirMittens",
          "date": "2026-10-13T05:47:18.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 9
          },
          "repo": "bot"
        },
        {
          "sha": "3cf0991a",
          "subject": "The dashboard moves to inkwellapp.pages.dev, a shorter address people can type",
          "author": "SirMittens",
          "date": "2026-10-13T05:40:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 9
          },
          "repo": "bot"
        },
        {
          "sha": "668d5b5a",
          "subject": "Ask us: team replies keep mentions as readable names and GIF links as their direct media, so the dashboard can show them",
          "author": "SirMittens",
          "date": "2026-10-13T05:29:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 6,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "d56bc3d9",
          "subject": "Move the message content intent application doc to the Inkwell docs folder",
          "author": "SirMittens",
          "date": "2026-10-13T05:17:50.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 0,
            "deletions": 72
          },
          "repo": "bot"
        },
        {
          "sha": "496b48a4",
          "subject": "Ask us: the bot sees when the team types in a question's ticket (typing events, support server only) and remembers it for a few seconds",
          "author": "SirMittens",
          "date": "2026-10-12T12:11:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 59,
            "deletions": 10
          },
          "repo": "bot"
        },
        {
          "sha": "0cc0543d",
          "subject": "Ask us: claiming an Ask us ticket tells the person on their dashboard (a system message, an unread notification, and who is in the chat); letting go tells them someone else will pick it up",
          "author": "SirMittens",
          "date": "2026-10-12T11:54:55.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 72,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "d0eae204",
          "subject": "Ask us retention: a daily cleanup marks questions nobody touched for 30 days solved, deletes questions 30 days after they are solved, and deletes archived Ask us transcripts after 30 days; an erased q",
          "author": "SirMittens",
          "date": "2026-10-12T11:34:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 95,
            "deletions": 5
          },
          "repo": "bot"
        },
        {
          "sha": "bbfd5204",
          "subject": "Ask us: every dashboard question opens as an ask-us ticket (Ask here tickets are staff-only until the person joins the server); closing the ticket solves the question and marking it solved closes the ",
          "author": "SirMittens",
          "date": "2026-10-12T09:10:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 215,
            "deletions": 58
          },
          "repo": "bot"
        },
        {
          "sha": "687384c3",
          "subject": "Ask us: Chat on Discord opens a normal ticket of the ask-us type (the bot opens it once the person is in the support server, or adds the question to a ticket they already have), replies are copied bot",
          "author": "SirMittens",
          "date": "2026-10-12T08:58:36.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 214,
            "deletions": 59
          },
          "repo": "bot"
        },
        {
          "sha": "00306d88",
          "subject": "Ask us desk, bot side: team replies typed in Discord are copied into the dashboard conversation (with one DM an hour to say a reply is ready), and joining the support server opens a waiting private ch",
          "author": "SirMittens",
          "date": "2026-10-12T02:08:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 238,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "c8929a2c",
          "subject": "Onboarding nudges: a first one after about a day and a second a week in for servers with nothing configured, with dashboard and docs buttons; the welcome records where it was delivered",
          "author": "SirMittens",
          "date": "2026-10-12T01:31:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 138,
            "deletions": 33
          },
          "repo": "bot"
        },
        {
          "sha": "82153d09",
          "subject": "Onboarding: the welcome leads with picking a log channel and mentions /doctor; servers still without a log channel after three days get one reminder",
          "author": "SirMittens",
          "date": "2026-10-12T01:18:55.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 60,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "2393caa7",
          "subject": "A single log can be switched off while a catch-all channel keeps the rest: its row holds an off marker that the log lookup honours",
          "author": "SirMittens",
          "date": "2026-10-12T00:22:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 5
          },
          "repo": "bot"
        },
        {
          "sha": "c02556fc",
          "subject": "Deploy job calls the panel's per-daemon power route",
          "author": "SirMittens",
          "date": "2026-10-11T22:14:04.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "b3e33ac6",
          "subject": "Deploy job restarts the bot on the new panel server",
          "author": "SirMittens",
          "date": "2026-10-11T20:55:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 7
          },
          "repo": "bot"
        },
        {
          "sha": "adaa89fc",
          "subject": "Announcement deliveries remember the owner so they get one message",
          "author": "SirMittens",
          "date": "2026-10-11T20:37:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 20,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "69885004",
          "subject": "Maintenance mode table for the web panel",
          "author": "SirMittens",
          "date": "2026-10-11T20:33:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 17,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "a437f6d9",
          "subject": "Pin TypeScript 5.9 in the bot's own dependencies so the panel's ts-node startup keeps working when its image ships a newer, incompatible TypeScript",
          "author": "SirMittens",
          "date": "2026-10-11T16:20:17.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 17,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "7a1b7ce5",
          "subject": "Admin tools migration: short explicit names for the delivery indexes (MySQL's 64-character limit)",
          "author": "SirMittens",
          "date": "2026-10-11T15:57:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "55dd2653",
          "subject": "Admin tools groundwork: announcements, premium reward and backup-job tables (with the delivery records), a Bot announcements log event, and a database dump script with encryption and verification",
          "author": "SirMittens",
          "date": "2026-10-11T15:55:11.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 151,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "ccc1186b",
          "subject": "Safety backups: a job queue the bot works through for every server, labelled system backups that are free to restore (owner or administrators), kept off a server's own backup count, with expiry",
          "author": "SirMittens",
          "date": "2026-10-11T15:40:19.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 366,
            "deletions": 11
          },
          "repo": "bot"
        },
        {
          "sha": "3856ac03",
          "subject": "Custom log messages: any log entry the bot posts can use a saved message (Premium), with each field as a placeholder; empty fields and non-link buttons are dropped; files are always attached",
          "author": "SirMittens",
          "date": "2026-10-10T21:15:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 161,
            "deletions": 13
          },
          "repo": "bot"
        },
        {
          "sha": "77858922",
          "subject": "Message buttons: refuse timed-out members, a short per-person cooldown, no kick/ban/timeout from a button automation, and the audit log names the message",
          "author": "SirMittens",
          "date": "2026-10-10T20:40:10.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 73,
            "deletions": 11
          },
          "repo": "bot"
        },
        {
          "sha": "ccf8d322",
          "subject": "Buttons can run an automation: new 'a button is pressed' trigger, engine entry point for one named automation, and the button handler for it",
          "author": "SirMittens",
          "date": "2026-10-10T17:35:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 169,
            "deletions": 9
          },
          "repo": "bot"
        },
        {
          "sha": "eb248796",
          "subject": "Buttons in saved messages can give, take or toggle a role, or send a private message; the bot answers them from the button's custom id",
          "author": "SirMittens",
          "date": "2026-10-10T17:30:50.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 178,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "11433546",
          "subject": "Migration: ticket and application panels can point at a saved message (template_id)",
          "author": "SirMittens",
          "date": "2026-10-10T17:20:52.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 17,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "7a452c4d",
          "subject": "Customisable bot messages: a ticket's first message and the application confirm, accepted and denied messages can use a saved message (Premium), with tests",
          "author": "SirMittens",
          "date": "2026-10-10T17:03:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 319,
            "deletions": 22
          },
          "repo": "bot"
        },
        {
          "sha": "c324da24",
          "subject": "Saved messages on the bot: automations and the welcome can send one",
          "author": "SirMittens",
          "date": "2026-10-10T16:47:13.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 311,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "1e2728e6",
          "subject": "Migration: folders for saved messages (message_folders, embed_templates.folder_id and updated_at)",
          "author": "SirMittens",
          "date": "2026-10-10T16:34:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 33,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "b9d64632",
          "subject": "Edit with Inkwell: clearer context-menu name and reply, help mention, and a record of messages posted from the Embeds page",
          "author": "SirMittens",
          "date": "2026-10-10T16:04:50.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 26,
            "deletions": 6
          },
          "repo": "bot"
        },
        {
          "sha": "8e724730",
          "subject": "Automated tests: application DM flow and ticket intake, routing and staff tools (npm test)",
          "author": "SirMittens",
          "date": "2026-10-10T04:43:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1050,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "a19ec37d",
          "subject": "Ticket staff tools: answer-based routing, saved replies, no-reply reminders, per-type inactivity auto-close, optional close reason",
          "author": "SirMittens",
          "date": "2026-10-10T04:14:54.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 305,
            "deletions": 51
          },
          "repo": "bot"
        },
        {
          "sha": "5f1ff0aa",
          "subject": "Ticket step-by-step intake: questions asked in the ticket channel with dropdowns, optional questions, rules and a time limit; popup kept for types that fit it",
          "author": "SirMittens",
          "date": "2026-10-10T04:01:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 612,
            "deletions": 35
          },
          "repo": "bot"
        },
        {
          "sha": "effb50ad",
          "subject": "Application questions: rules (only ask a question if earlier answers match), branching in the DM flow, adaptive progress counter",
          "author": "SirMittens",
          "date": "2026-10-10T02:47:18.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 82,
            "deletions": 7
          },
          "repo": "bot"
        },
        {
          "sha": "90232eca",
          "subject": "Application DM flow: confirm step, in-place questions with progress, dropdown and optional (Skip) questions, per-type time limit and confirm message",
          "author": "SirMittens",
          "date": "2026-10-10T02:28:33.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 415,
            "deletions": 59
          },
          "repo": "bot"
        },
        {
          "sha": "4b063e8c",
          "subject": "Application logs: no decision embed in channels, fold into the review message, submitted log skipped in same channel, transcript file off by default",
          "author": "SirMittens",
          "date": "2026-10-10T01:40:52.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 55,
            "deletions": 26
          },
          "repo": "bot"
        },
        {
          "sha": "637b6ed5",
          "subject": "Tell staff in a log channel when an application is dashboard-only, with a link",
          "author": "SirMittens",
          "date": "2026-10-10T01:22:45.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 17,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "237fa593",
          "subject": "Review channel is optional: unset types use the Application submitted log channel",
          "author": "SirMittens",
          "date": "2026-10-10T01:21:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 6,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "586088e7",
          "subject": "Application review channel fallback: post to the log channel (or dashboard-only) instead of telling the applicant it's misconfigured",
          "author": "SirMittens",
          "date": "2026-10-10T01:15:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 53,
            "deletions": 10
          },
          "repo": "bot"
        },
        {
          "sha": "572f721b",
          "subject": "Decision messages: short summary + a 'View full transcript' button instead of pasting the answers",
          "author": "SirMittens",
          "date": "2026-10-10T01:01:13.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 21,
            "deletions": 40
          },
          "repo": "bot"
        },
        {
          "sha": "95dbb274",
          "subject": "Say when application answers are shortened and where the full ones are",
          "author": "SirMittens",
          "date": "2026-10-10T00:57:20.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 10,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "51468607",
          "subject": "Fix: accept/deny transcript embeds failed on answers over 1024 characters",
          "author": "SirMittens",
          "date": "2026-10-10T00:53:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 25,
            "deletions": 17
          },
          "repo": "bot"
        },
        {
          "sha": "0e286557",
          "subject": "Clearer command descriptions in the picker (no renames)",
          "author": "SirMittens",
          "date": "2026-10-09T15:35:29.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 14,
            "deletions": 14
          },
          "repo": "bot"
        },
        {
          "sha": "0b634707",
          "subject": "Consistent permission wording and error references",
          "author": "SirMittens",
          "date": "2026-10-09T15:17:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 41,
            "deletions": 31
          },
          "repo": "bot"
        },
        {
          "sha": "241da1b1",
          "subject": "Open audit items: birthdays, expiring maps, /warn defer, MessageFlags, premium redeem throttle migration",
          "author": "SirMittens",
          "date": "2026-10-09T14:47:50.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 567,
            "deletions": 423
          },
          "repo": "bot"
        },
        {
          "sha": "88d0e9f9",
          "subject": "Command visibility: guild-only contexts by default, owner-only commands registered in the support server only",
          "author": "SirMittens",
          "date": "2026-10-09T14:22:08.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 29,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "c9dd59de",
          "subject": "Scheduler: no overlapping sweeps, named failure logs, throttled alerts, restart-proof backups",
          "author": "SirMittens",
          "date": "2026-10-09T14:15:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 202,
            "deletions": 84
          },
          "repo": "bot"
        },
        {
          "sha": "125bce34",
          "subject": "Moderation hardening: hierarchy checks, honest ban/kick failures, acknowledge before slow work; crypto transfer codes",
          "author": "SirMittens",
          "date": "2026-10-09T14:12:52.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 117,
            "deletions": 24
          },
          "repo": "bot"
        },
        {
          "sha": "17d0e581",
          "subject": "Audit follow-ups: staff checks on ticket actions, claim sync with applications, safer decisions, DM flow retries, interview numbering/exemptions",
          "author": "SirMittens",
          "date": "2026-10-09T13:51:48.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 479,
            "deletions": 151
          },
          "repo": "bot"
        },
        {
          "sha": "87353f0f",
          "subject": "Audit fixes: acknowledge accept/deny and ticket close before slow work, block duplicate pending applications, keep long applications within Discord's embed limit",
          "author": "SirMittens",
          "date": "2026-10-09T13:28:13.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 83,
            "deletions": 19
          },
          "repo": "bot"
        },
        {
          "sha": "80362609",
          "subject": "Open application interview tickets through the regular ticket flow",
          "author": "SirMittens",
          "date": "2026-10-09T13:23:57.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 308,
            "deletions": 156
          },
          "repo": "bot"
        },
        {
          "sha": "d9f48efd",
          "subject": "Keep application interview tickets open on accept/deny and add a Close Ticket button to the decision notice",
          "author": "SirMittens",
          "date": "2026-10-09T13:16:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 19,
            "deletions": 27
          },
          "repo": "bot"
        },
        {
          "sha": "e4b167d8",
          "subject": "Defer the Apply button reply so slow lookups can't expire the interaction",
          "author": "SirMittens",
          "date": "2026-10-07T17:29:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 11,
            "deletions": 12
          },
          "repo": "bot"
        },
        {
          "sha": "b2de1f8d",
          "subject": "Send the decision transcript to the applicationReviewed log channel instead of the review channel",
          "author": "Sir Mittens",
          "date": "2026-09-24T13:47:59.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 16,
            "deletions": 6
          },
          "repo": "bot"
        },
        {
          "sha": "3a071ed8",
          "subject": "Exempt regex custom command triggers from Auto-Mod's duplicate-message filter by default",
          "author": "Sir Mittens",
          "date": "2026-09-24T01:57:10.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 49,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "12ad683e",
          "subject": "Gitignore DISCOVERY.md",
          "author": "Sir Mittens",
          "date": "2026-09-24T01:33:03.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "57e8e65b",
          "subject": "Guard the welcome message against firing twice for the same join",
          "author": "Sir Mittens",
          "date": "2026-09-24T01:27:48.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 43,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "864b78ad",
          "subject": "Gitignore the marketing preview images folder",
          "author": "Sir Mittens",
          "date": "2026-09-24T00:24:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "a623b598",
          "subject": "Add a Keep Ticket Open toggle so accepting/denying an application doesn't force-close its interview ticket",
          "author": "Sir Mittens",
          "date": "2026-09-24T00:22:40.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 96,
            "deletions": 5
          },
          "repo": "bot"
        },
        {
          "sha": "13c9a59e",
          "subject": "Add per-type option to delete the application review message on accept/deny",
          "author": "Sir Mittens",
          "date": "2026-09-21T17:37:51.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 36,
            "deletions": 6
          },
          "repo": "bot"
        },
        {
          "sha": "6fdf4404",
          "subject": "Default ticket/application channel name pattern now leads with {emoji}",
          "author": "Sir Mittens",
          "date": "2026-09-21T17:33:13.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 8,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "1c48ced4",
          "subject": "Add a short entry-point comment to src/index.js",
          "author": "Sir Mittens",
          "date": "2026-09-21T16:46:33.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "af502fa7",
          "subject": "Post an explicit left-the-server notice in the application review thread/channel and interview ticket",
          "author": "Sir Mittens",
          "date": "2026-09-21T13:37:44.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 10,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "20449bed",
          "subject": "Auto-close open tickets and pending applications when the opener/applicant leaves the server",
          "author": "Sir Mittens",
          "date": "2026-09-21T13:37:05.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 100,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "a4df75d0",
          "subject": "Reflect requested CORS headers on the vote webhook preflight instead of a fixed list",
          "author": "Sir Mittens",
          "date": "2026-09-15T10:34:10.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "f12d80bc",
          "subject": "Document Message Content Intent use cases for future Privileged Intents review",
          "author": "Sir Mittens",
          "date": "2026-09-15T09:25:56.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 72,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "e3a28b6f",
          "subject": "Parallelize discordthings vote checks with a short timeout",
          "author": "Sir Mittens",
          "date": "2026-09-15T04:37:39.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 21,
            "deletions": 12
          },
          "repo": "bot"
        },
        {
          "sha": "df7c4fcb",
          "subject": "Fix CORS error surviving a successful preflight on the vote webhook",
          "author": "Sir Mittens",
          "date": "2026-09-15T04:12:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 10,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "d1f4cbb0",
          "subject": "Add CORS support to the discordbotlist vote webhook route",
          "author": "Sir Mittens",
          "date": "2026-09-15T02:39:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 16,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "e7194b83",
          "subject": "Wire up real vote rewards: discordbotlist webhook, discordthings poll",
          "author": "Sir Mittens",
          "date": "2026-09-15T02:28:43.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 160,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "874aed33",
          "subject": "Add /inkwell-vote and the premium_grants table",
          "author": "Sir Mittens",
          "date": "2026-09-15T01:44:04.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 55,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "7c45dacb",
          "subject": "Update hardcoded repo paths after the GitLab group move",
          "author": "Sir Mittens",
          "date": "2026-09-15T01:43:37.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 5,
            "deletions": 5
          },
          "repo": "bot"
        },
        {
          "sha": "f8fd56eb",
          "subject": "Fix /lockdown and /temp-role member-permission mismatches",
          "author": "Sir Mittens",
          "date": "2026-09-15T01:43:36.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 3,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "37886234",
          "subject": "Fix invalid curlimages/curl:8 tag breaking deploy-bot since it was introduced",
          "author": "Sir Mittens",
          "date": "2026-09-14T16:58:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "c66c9f00",
          "subject": "Bump deploy-test comment to verify the pipeline after the group move",
          "author": "Sir Mittens",
          "date": "2026-09-14T16:56:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "ea2cfe3a",
          "subject": "Use curlimages/curl instead of alpine+apk install for deploy-bot",
          "author": "Sir Mittens",
          "date": "2026-09-12T22:06:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "a8f348f0",
          "subject": "Humanize /doctor's setting labels and close remaining permission gaps",
          "author": "Sir Mittens",
          "date": "2026-09-12T21:56:43.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 65,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "4b8b2b25",
          "subject": "Make /doctor's output scannable instead of a wall of text",
          "author": "Sir Mittens",
          "date": "2026-09-12T21:51:46.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 17,
            "deletions": 9
          },
          "repo": "bot"
        },
        {
          "sha": "e692917d",
          "subject": "Have /doctor say which setting a broken channel/role belongs to",
          "author": "Sir Mittens",
          "date": "2026-09-12T21:49:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 42,
            "deletions": 21
          },
          "repo": "bot"
        },
        {
          "sha": "a05d7ffb",
          "subject": "Have /doctor name what breaks for each missing server-wide permission",
          "author": "Sir Mittens",
          "date": "2026-09-12T21:30:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 17,
            "deletions": 10
          },
          "repo": "bot"
        },
        {
          "sha": "2635e91b",
          "subject": "Surface missing-permission errors with a specific message everywhere",
          "author": "Sir Mittens",
          "date": "2026-09-12T21:27:57.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 29,
            "deletions": 8
          },
          "repo": "bot"
        },
        {
          "sha": "f85a5b76",
          "subject": "Check bot's Manage Roles permission before /lockdown edits overwrites",
          "author": "Sir Mittens",
          "date": "2026-09-12T21:22:10.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "cf869730",
          "subject": "Fix giveaway/poll required-role errors showing an unresolvable mention",
          "author": "Sir Mittens",
          "date": "2026-09-12T21:21:10.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 5,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "893e4ba6",
          "subject": "Give every bot embed the same visual treatment: brand color, Inkwell's logo, more info",
          "author": "Sir Mittens",
          "date": "2026-09-12T03:17:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 168,
            "deletions": 94
          },
          "repo": "bot"
        },
        {
          "sha": "d12e99cc",
          "subject": "Stop tracking TODO.md in git",
          "author": "Sir Mittens",
          "date": "2026-09-12T01:23:35.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 113
          },
          "repo": "bot"
        },
        {
          "sha": "be52811a",
          "subject": "Overhaul log embeds: dashboard-matching colors, audit-log actor attribution, much more detail",
          "author": "Sir Mittens",
          "date": "2026-09-12T01:23:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 246,
            "deletions": 116
          },
          "repo": "bot"
        },
        {
          "sha": "377233f1",
          "subject": "Fetch the custom-command prefix once per message, not once per rule",
          "author": "Sir Mittens",
          "date": "2026-09-12T00:32:12.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 11,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "8dd6709a",
          "subject": "Fix in_channel condition being unsatisfiable for voice triggers",
          "author": "Sir Mittens",
          "date": "2026-09-12T00:31:45.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 12,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "381ab2a0",
          "subject": "Guard premium revoke against a double-submit on the reason modal",
          "author": "Sir Mittens",
          "date": "2026-09-12T00:31:33.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 20,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "9a6c99b1",
          "subject": "Add in-process locks against ticket-claim and per-user-cap races",
          "author": "Sir Mittens",
          "date": "2026-09-12T00:30:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 80,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "8008a22f",
          "subject": "Strip stray {if}/{else}/{/if} tags instead of leaking them to end users",
          "author": "Sir Mittens",
          "date": "2026-09-11T22:52:41.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 12,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "05b77700",
          "subject": "Stop a fast double-click from overwriting a ticket's rating",
          "author": "Sir Mittens",
          "date": "2026-09-11T22:51:22.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 11,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "cd9e8609",
          "subject": "Make application claim/unclaim atomic (both the review and management variants)",
          "author": "Sir Mittens",
          "date": "2026-09-11T22:48:03.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 27,
            "deletions": 7
          },
          "repo": "bot"
        },
        {
          "sha": "2e4fe61c",
          "subject": "Fix dm_user skipping variants, and archive-before-delete ordering",
          "author": "Sir Mittens",
          "date": "2026-09-11T22:41:27.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 20,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "d189aa09",
          "subject": "Remove dead upsertToggleRule/removeToggleRule (racy, and unused)",
          "author": "Sir Mittens",
          "date": "2026-09-11T22:38:29.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 4,
            "deletions": 23
          },
          "repo": "bot"
        },
        {
          "sha": "6f56e54a",
          "subject": "Fix race that could create an orphaned duplicate interview channel",
          "author": "Sir Mittens",
          "date": "2026-09-11T22:35:26.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 35,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "390f0dc2",
          "subject": "Fix duplicate-DM races and missing permission checks on bug reports/suggestions",
          "author": "Sir Mittens",
          "date": "2026-09-11T22:31:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 53,
            "deletions": 6
          },
          "repo": "bot"
        },
        {
          "sha": "157da9a8",
          "subject": "Fix two races in today's ticket close/reopen durability fix",
          "author": "Sir Mittens",
          "date": "2026-09-11T22:27:12.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 42,
            "deletions": 23
          },
          "repo": "bot"
        },
        {
          "sha": "b42f51ee",
          "subject": "Make in-progress DM applications survive a bot restart",
          "author": "Sir Mittens",
          "date": "2026-09-11T22:22:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 96,
            "deletions": 14
          },
          "repo": "bot"
        },
        {
          "sha": "be2be5d5",
          "subject": "Fix referral-approval race that could double-grant premium days",
          "author": "Sir Mittens",
          "date": "2026-09-11T22:15:15.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 11,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "e8ef57b1",
          "subject": "Stop application Accept/Deny from double-firing on a second submission",
          "author": "Sir Mittens",
          "date": "2026-09-11T22:11:45.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 30,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "ae6c0fd7",
          "subject": "Add {if}/{else} conditionals to the shared message template renderer",
          "author": "Sir Mittens",
          "date": "2026-09-11T20:51:34.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 34,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "4fec85c6",
          "subject": "Fix ticket_pending_deletion insert crashing on claimed_at",
          "author": "Sir Mittens",
          "date": "2026-09-11T20:39:14.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 4,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "6ee33035",
          "subject": "Stop tickets from queueing multiple closes, swap Close to Reopen",
          "author": "Sir Mittens",
          "date": "2026-09-11T20:21:39.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 69,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "aa914f12",
          "subject": "Batch bot/dashboard commit announcements into one daily digest",
          "author": "Sir Mittens",
          "date": "2026-09-11T20:04:04.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 105,
            "deletions": 67
          },
          "repo": "bot"
        },
        {
          "sha": "2664486e",
          "subject": "Make ticket close-deletion durable, not a bare in-memory timer",
          "author": "Sir Mittens",
          "date": "2026-09-11T20:03:39.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 172,
            "deletions": 61
          },
          "repo": "bot"
        },
        {
          "sha": "658c3744",
          "subject": "Fix backup-restore verification: JSON columns can hold bare primitives",
          "author": "Sir Mittens",
          "date": "2026-09-11T19:45:56.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 23,
            "deletions": 8
          },
          "repo": "bot"
        },
        {
          "sha": "08f9fdf4",
          "subject": "Pin backup-restore verification to a single DB connection",
          "author": "Sir Mittens",
          "date": "2026-09-11T19:40:41.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 24,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "62820938",
          "subject": "Fix backup-restore verification: convert ISO datetime strings back to Date",
          "author": "Sir Mittens",
          "date": "2026-09-11T19:31:35.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 15,
            "deletions": 9
          },
          "repo": "bot"
        },
        {
          "sha": "4fb6b027",
          "subject": "Fix backup-restore verification: re-stringify JSON columns before insert",
          "author": "Sir Mittens",
          "date": "2026-09-11T19:24:54.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 15,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "2f523e05",
          "subject": "Verify the scheduled DB backup actually restores, not just that it ran",
          "author": "Sir Mittens",
          "date": "2026-09-11T19:16:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 78,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "1889312b",
          "subject": "Switch dashboard-deploy announcements to a GitLab push webhook",
          "author": "Sir Mittens",
          "date": "2026-09-11T19:13:02.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 104,
            "deletions": 22
          },
          "repo": "bot"
        },
        {
          "sha": "5d93a793",
          "subject": "Auto-restart the bot on Kinetic after a clean CI check on main",
          "author": "Sir Mittens",
          "date": "2026-09-11T19:01:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 21,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "5864824a",
          "subject": "Fix automations audit findings: trigger scoping, ordering, migration safety",
          "author": "Sir Mittens",
          "date": "2026-09-11T18:25:17.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 178,
            "deletions": 177
          },
          "repo": "bot"
        },
        {
          "sha": "249f7801",
          "subject": "v3: wire Tickets/Applications as automation \"driver\" subsystem",
          "author": "Sir Mittens",
          "date": "2026-09-11T16:41:08.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 41,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "2c466937",
          "subject": "Extend has_role to multi-role (ANY), backfill custom command restrictions",
          "author": "Sir Mittens",
          "date": "2026-09-11T14:27:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 40,
            "deletions": 5
          },
          "repo": "bot"
        },
        {
          "sha": "d7561e05",
          "subject": "Relabel existing Auto-Role/Sticky-Roles automation_rules as recipes",
          "author": "Sir Mittens",
          "date": "2026-09-11T05:44:34.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 23,
            "deletions": 6
          },
          "repo": "bot"
        },
        {
          "sha": "9a6e4b7f",
          "subject": "Fix automations audit findings: message-context conditions, cooldown timing",
          "author": "Sir Mittens",
          "date": "2026-09-11T04:44:47.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 45,
            "deletions": 21
          },
          "repo": "bot"
        },
        {
          "sha": "03dda561",
          "subject": "Fix: widen automation_rules.trigger_type ENUM for v2 trigger types",
          "author": "Sir Mittens",
          "date": "2026-09-11T04:11:53.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 28,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "15b6b64b",
          "subject": "Add automation_rules.source 'recipe' value + recipe_id column",
          "author": "Sir Mittens",
          "date": "2026-09-11T03:52:43.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 20,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "cf850170",
          "subject": "Add Automations engine v2 (bot side) — more triggers, OR-logic, real embeds",
          "author": "Sir Mittens",
          "date": "2026-09-11T02:51:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 201,
            "deletions": 50
          },
          "repo": "bot"
        },
        {
          "sha": "8e47a1d1",
          "subject": "Add Automations engine v1 — bot-side foundation",
          "author": "Sir Mittens",
          "date": "2026-09-11T01:51:09.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 627,
            "deletions": 112
          },
          "repo": "bot"
        },
        {
          "sha": "c0a8bdbe",
          "subject": "Require ManageGuild for application accept/deny/hold/interview/claim",
          "author": "Sir Mittens",
          "date": "2026-09-11T01:04:19.000+03:00",
          "securityFix": "application review actions (accept/deny/hold/interview/claim) had no explicit permission check, relying only on implicit channel visibility, so a misconfigured review channel could let a non-staff member accept applications and trigger elevated role grants",
          "stats": {
            "additions": 26,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "483a3666",
          "subject": "Close DNS-rebinding gap in outbound webhook SSRF guard",
          "author": "Sir Mittens",
          "date": "2026-09-11T00:53:57.000+03:00",
          "securityFix": "outbound webhook delivery was vulnerable to DNS rebinding, letting a malicious target bypass the private-IP/SSRF guard and reach internal network addresses",
          "stats": {
            "additions": 30,
            "deletions": 13
          },
          "repo": "bot"
        },
        {
          "sha": "126067a9",
          "subject": "Add automatic 1-year expiry for Trust Network reports",
          "author": "Sir Mittens",
          "date": "2026-09-10T23:52:54.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 28,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "2d46e333",
          "subject": "Major webhook overhaul: inbound delivery visibility/HMAC/routing + outbound",
          "author": "Sir Mittens",
          "date": "2026-09-10T22:12:10.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 506,
            "deletions": 44
          },
          "repo": "bot"
        },
        {
          "sha": "fd024d4e",
          "subject": "Add dashboard-deploy log event, polled via GitLab API",
          "author": "Sir Mittens",
          "date": "2026-09-10T21:44:05.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 81,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "dec5b0ee",
          "subject": "Move channel naming + delete delay from guild-wide to per ticket/app type",
          "author": "Sir Mittens",
          "date": "2026-09-10T21:09:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 68,
            "deletions": 54
          },
          "repo": "bot"
        },
        {
          "sha": "4733ebff",
          "subject": "Extend configurable channel naming/emoji to application interview tickets",
          "author": "Sir Mittens",
          "date": "2026-09-10T18:06:08.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 34,
            "deletions": 5
          },
          "repo": "bot"
        },
        {
          "sha": "2074e2a3",
          "subject": "Add configurable ticket channel naming + broaden the deletion flag",
          "author": "Sir Mittens",
          "date": "2026-09-10T18:00:57.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 53,
            "deletions": 15
          },
          "repo": "bot"
        },
        {
          "sha": "e99c18cf",
          "subject": "Add application panel tracking + link-based application transcripts",
          "author": "Sir Mittens",
          "date": "2026-09-10T17:44:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 72,
            "deletions": 34
          },
          "repo": "bot"
        },
        {
          "sha": "801ecbca",
          "subject": "Add a free \"use the server's own Discord banner\" background option",
          "author": "Sir Mittens",
          "date": "2026-09-09T23:51:37.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "11a2bad4",
          "subject": "Let premium servers set a custom background for the generated welcome banner",
          "author": "Sir Mittens",
          "date": "2026-09-09T23:48:04.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 33,
            "deletions": 7
          },
          "repo": "bot"
        },
        {
          "sha": "00cdd630",
          "subject": "Stop blocking the accept-role grant on application acceptance",
          "author": "Sir Mittens",
          "date": "2026-09-09T23:13:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 5,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "188b711e",
          "subject": "Add bot_owner_revocations table to back the Lockdown page's static-owner revoke",
          "author": "Sir Mittens",
          "date": "2026-09-09T04:31:26.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 16,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "33903b22",
          "subject": "Add DB schema for dynamic bot owner/admin list and lockdown switch",
          "author": "Sir Mittens",
          "date": "2026-09-09T04:16:33.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 26,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "969ef2ea",
          "subject": "Swap webhook path from sequential id to opaque UUID",
          "author": "Sir Mittens",
          "date": "2026-09-09T02:24:56.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 42,
            "deletions": 5
          },
          "repo": "bot"
        },
        {
          "sha": "2fddca4b",
          "subject": "Fix ReDoS: run admin-authored regex through RE2, not native backtracking",
          "author": "Sir Mittens",
          "date": "2026-09-09T01:28:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 46,
            "deletions": 5
          },
          "repo": "bot"
        },
        {
          "sha": "b329cc7f",
          "subject": "Harden backup transfer codes: longer codes, single-use, 7-day expiry",
          "author": "Sir Mittens",
          "date": "2026-09-09T01:05:55.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 15,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "d06316e3",
          "subject": "Restyle every generated canvas card with Inkwell's own ink/quill branding",
          "author": "Sir Mittens",
          "date": "2026-09-08T22:37:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 318,
            "deletions": 309
          },
          "repo": "bot"
        },
        {
          "sha": "c7363fdf",
          "subject": "Fix welcome-message mentions showing as raw numeric IDs for fresh joins",
          "author": "Sir Mittens",
          "date": "2026-09-08T21:28:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 12,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "c57fc8ee",
          "subject": "Add personal checklists (/inkwell list), scam-trap decoy channel, mention fallback fix, and poll upgrades",
          "author": "Sir Mittens",
          "date": "2026-09-08T21:09:29.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 450,
            "deletions": 19
          },
          "repo": "bot"
        },
        {
          "sha": "83862180",
          "subject": "Add cooldown, channel/role restrictions, and an optional action to custom commands",
          "author": "Sir Mittens",
          "date": "2026-09-08T20:30:29.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 112,
            "deletions": 11
          },
          "repo": "bot"
        },
        {
          "sha": "2822a2cf",
          "subject": "Add server referral program: bot-side approval handler",
          "author": "Sir Mittens",
          "date": "2026-09-08T20:12:37.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 145,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "83bd90c8",
          "subject": "Freeze (not delete) ticket/application types over the free-plan limit",
          "author": "Sir Mittens",
          "date": "2026-09-08T19:19:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 49,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "5a093703",
          "subject": "Insert the guilds table row immediately on join, not incidentally",
          "author": "Sir Mittens",
          "date": "2026-09-08T18:48:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 8,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "0b1db3ed",
          "subject": "Social alerts: rich embed with thumbnail, stop swallowing send failures silently",
          "author": "Sir Mittens",
          "date": "2026-09-08T18:28:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 27,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "ccd92d7e",
          "subject": "Ticket transcripts: JSON-only storage, no more duplicate text+HTML copies",
          "author": "Sir Mittens",
          "date": "2026-09-02T19:40:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 106,
            "deletions": 208
          },
          "repo": "bot"
        },
        {
          "sha": "e7795cff",
          "subject": "Premium guilds get a flat 2-day Trust Network tenure instead of the 7/14/30-day tiers",
          "author": "Sir Mittens",
          "date": "2026-09-02T19:21:14.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "7976a62e",
          "subject": "Poll result-hiding, scheduled/repeating giveaways, nicer log embeds",
          "author": "Sir Mittens",
          "date": "2026-09-02T18:27:59.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 294,
            "deletions": 53
          },
          "repo": "bot"
        },
        {
          "sha": "a6f42981",
          "subject": "Add panel_permissions table for the dashboard's per-role page/tab restrictions",
          "author": "Sir Mittens",
          "date": "2026-09-02T14:56:11.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 21,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "fce77932",
          "subject": "Consolidate all bot-owner-only commands under /inkwell-owner",
          "author": "Sir Mittens",
          "date": "2026-09-02T14:01:15.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 257,
            "deletions": 306
          },
          "repo": "bot"
        },
        {
          "sha": "394b52fd",
          "subject": "Add /kick and /ban commands for moderators",
          "author": "Sir Mittens",
          "date": "2026-09-02T13:39:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 143,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "09b9ac8b",
          "subject": "Fix issues found in today's code audit",
          "author": "Sir Mittens",
          "date": "2026-09-01T17:31:36.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 15,
            "deletions": 20
          },
          "repo": "bot"
        },
        {
          "sha": "c93f7642",
          "subject": "Custom commands: support random-variant responses (--- separated lines)",
          "author": "Sir Mittens",
          "date": "2026-09-01T17:05:43.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "80d974c7",
          "subject": "Add /question and /feedback commands (shared modal + config, pingable",
          "author": "Sir Mittens",
          "date": "2026-09-01T17:01:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 144,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "7e571469",
          "subject": "Tier 1: nicer ticket logs, role-ping on ticket open, staff /create-ticket,",
          "author": "Sir Mittens",
          "date": "2026-09-01T16:52:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 296,
            "deletions": 58
          },
          "repo": "bot"
        },
        {
          "sha": "b525f4c5",
          "subject": "Fix ticket max-open-per-user bug, suggestion-list mention rendering, add",
          "author": "Sir Mittens",
          "date": "2026-09-01T15:37:25.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 38,
            "deletions": 26
          },
          "repo": "bot"
        },
        {
          "sha": "27f794bc",
          "subject": "Remove /inkwell roles entirely — Auto-Role, Reaction Roles, Verification,",
          "author": "Sir Mittens",
          "date": "2026-09-01T13:33:29.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 27,
            "deletions": 1027
          },
          "repo": "bot"
        },
        {
          "sha": "f079b600",
          "subject": "Remove /inkwell setup entirely — all 16 sections now live on the dashboard",
          "author": "Sir Mittens",
          "date": "2026-09-01T11:20:05.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 8,
            "deletions": 555
          },
          "repo": "bot"
        },
        {
          "sha": "a4db165b",
          "subject": "Move Sticky Roles, Quarantine, Sticky Messages, Nickname Rotation, and Branding config to the dashboard",
          "author": "Sir Mittens",
          "date": "2026-09-01T10:53:27.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 4,
            "deletions": 502
          },
          "repo": "bot"
        },
        {
          "sha": "45808ecd",
          "subject": "Move Anti-Raid, Account Risk, Birthdays, and Stat Counters config to the dashboard",
          "author": "Sir Mittens",
          "date": "2026-09-01T10:20:39.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 341
          },
          "repo": "bot"
        },
        {
          "sha": "a2438fc3",
          "subject": "Remove Leveling, Starboard, JTC, and Invites from /inkwell setup",
          "author": "Sir Mittens",
          "date": "2026-09-01T09:56:25.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 485
          },
          "repo": "bot"
        },
        {
          "sha": "59c06d0e",
          "subject": "Remove /inkwell webhooks - migrated to the dashboard's new Webhooks page",
          "author": "Sir Mittens",
          "date": "2026-09-01T09:00:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 0,
            "deletions": 338
          },
          "repo": "bot"
        },
        {
          "sha": "d5f51d92",
          "subject": "Remove /inkwell welcome - migrated to the dashboard's new Welcome page",
          "author": "Sir Mittens",
          "date": "2026-09-01T08:51:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 13,
            "deletions": 357
          },
          "repo": "bot"
        },
        {
          "sha": "72f40f82",
          "subject": "Replace /embed with a message context-menu \"Edit Embed\" + Discord-to-web handoff",
          "author": "Sir Mittens",
          "date": "2026-09-01T08:44:03.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 69,
            "deletions": 728
          },
          "repo": "bot"
        },
        {
          "sha": "245f5d11",
          "subject": "Remove Custom Commands from /inkwell setup - migrated to the dashboard",
          "author": "Sir Mittens",
          "date": "2026-09-01T07:48:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 0,
            "deletions": 165
          },
          "repo": "bot"
        },
        {
          "sha": "9537011b",
          "subject": "Fix auto-backup restart bug, add manual 3-day cooldown, prune after every create",
          "author": "Sir Mittens",
          "date": "2026-09-01T07:00:40.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 22,
            "deletions": 14
          },
          "repo": "bot"
        },
        {
          "sha": "71bc13ad",
          "subject": "Move backup transfer-code generation into /inkwell tools",
          "author": "Sir Mittens",
          "date": "2026-09-01T06:47:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 42,
            "deletions": 7
          },
          "repo": "bot"
        },
        {
          "sha": "f9334795",
          "subject": "Add /inkwell tools with Server Backup create/restore/redeem",
          "author": "Sir Mittens",
          "date": "2026-09-01T05:01:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 194,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "73798a06",
          "subject": "Move /inkwell logs and /inkwell insights to the dashboard",
          "author": "Sir Mittens",
          "date": "2026-09-01T04:20:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1115,
            "deletions": 2240
          },
          "repo": "bot"
        },
        {
          "sha": "cd89e601",
          "subject": "Allowlist ticket_open:/app_open: in wiring check — created by dashboard now, not bot code",
          "author": "Sir Mittens",
          "date": "2026-09-01T03:33:44.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 3,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "d66c7ec0",
          "subject": "Move Quick Setup presets from the Discord onboarding message to the dashboard's Overview page",
          "author": "Sir Mittens",
          "date": "2026-09-01T03:28:14.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 5,
            "deletions": 281
          },
          "repo": "bot"
        },
        {
          "sha": "17b3db28",
          "subject": "Remove /inkwell tickets, /inkwell applications, and /apps queue — fully replaced by the dashboard",
          "author": "Sir Mittens",
          "date": "2026-09-01T03:04:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 129,
            "deletions": 3351
          },
          "repo": "bot"
        },
        {
          "sha": "08f3319c",
          "subject": "Add bot_bans table and enforce it in interactionCreate — dashboard-managed server ban",
          "author": "Sir Mittens",
          "date": "2026-09-01T01:28:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 27,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "23240ff1",
          "subject": "Revert \"Fully remove /inkwell automod — exempt roles/channels also moved to the dashboard\"",
          "author": "Sir Mittens",
          "date": "2026-08-30T14:40:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2,
            "deletions": 75
          },
          "repo": "bot"
        },
        {
          "sha": "54a92dd4",
          "subject": "Fully remove /inkwell automod — exempt roles/channels also moved to the dashboard",
          "author": "Sir Mittens",
          "date": "2026-08-30T14:36:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 75,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "4b414d2f",
          "subject": "Fully remove /inkwell automod — exempt roles/channels also moved to the dashboard",
          "author": "Sir Mittens",
          "date": "2026-08-30T14:18:17.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2,
            "deletions": 123
          },
          "repo": "bot"
        },
        {
          "sha": "45a0875a",
          "subject": "Track premium revocations in a queryable table for the dashboard's activity feed",
          "author": "Sir Mittens",
          "date": "2026-08-30T08:37:08.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 21,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "8537063c",
          "subject": "Move word/regex/spam/caps/mention/invite filters and escalation config to the web dashboard",
          "author": "Sir Mittens",
          "date": "2026-08-30T08:21:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 13,
            "deletions": 727
          },
          "repo": "bot"
        },
        {
          "sha": "29a6ba9f",
          "subject": "Link the web dashboard from the welcome message and /inkwell-help, update repo URLs to the new inkwell-group namespace",
          "author": "Sir Mittens",
          "date": "2026-08-30T08:07:29.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 5,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "982b4695",
          "subject": "Remove /inkwell premium and its Discord-side menus — replaced by the web dashboard",
          "author": "Sir Mittens",
          "date": "2026-08-30T06:59:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2,
            "deletions": 623
          },
          "repo": "bot"
        },
        {
          "sha": "d0224898",
          "subject": "Add Delete button to premium code detail panel, with confirmation",
          "author": "Sir Mittens",
          "date": "2026-08-30T04:07:12.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 58,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "ce3b2bd5",
          "subject": "Self-heal stale guild membership records, log per-event handler failures by name",
          "author": "Sir Mittens",
          "date": "2026-08-30T02:32:13.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 46,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "8e3e79ac",
          "subject": "Support multiple bot owners via BOT_OWNER_IDS",
          "author": "Sir Mittens",
          "date": "2026-08-30T01:53:25.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 29,
            "deletions": 10
          },
          "repo": "bot"
        },
        {
          "sha": "22fef205",
          "subject": "Consolidate premium into /inkwell premium, add owner-gated revoke with confirmation",
          "author": "Sir Mittens",
          "date": "2026-08-30T01:49:18.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 271,
            "deletions": 74
          },
          "repo": "bot"
        },
        {
          "sha": "8e7934af",
          "subject": "Fix extra blank-line gap after a ticket panel's intro description",
          "author": "Sir Mittens",
          "date": "2026-08-30T01:27:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "32749a6c",
          "subject": "Add per-type log channel picker directly to ticket/application type setup",
          "author": "Sir Mittens",
          "date": "2026-08-30T01:23:56.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 137,
            "deletions": 8
          },
          "repo": "bot"
        },
        {
          "sha": "4e4b4e49",
          "subject": "Add Reorder Types to ticket and application panel setup",
          "author": "Sir Mittens",
          "date": "2026-08-30T01:12:30.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 234,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "99482f36",
          "subject": "Fix QOTD default-enabled bug, Trust Network export ignoring filter, add custom emoji/category to ticket setup",
          "author": "Sir Mittens",
          "date": "2026-08-30T01:05:10.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 124,
            "deletions": 5
          },
          "repo": "bot"
        },
        {
          "sha": "00d3e52a",
          "subject": "Require Manage Server on interview-ticket/thread management actions",
          "author": "Sir Mittens",
          "date": "2026-08-30T00:59:18.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 25,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "61c51451",
          "subject": "Fix CombinedPropertyError crash on ticket types with no emoji set",
          "author": "Sir Mittens",
          "date": "2026-08-30T00:41:55.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 11
          },
          "repo": "bot"
        },
        {
          "sha": "4844ed79",
          "subject": "Add configurable interview ticket category and channel name prefix per application type",
          "author": "Sir Mittens",
          "date": "2026-08-30T00:35:05.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 133,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "232dbfda",
          "subject": "Toggle Open/Close Thread button label, and fix Unknown interaction crash on /suggest and /bug-report",
          "author": "Sir Mittens",
          "date": "2026-08-29T23:16:44.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 83,
            "deletions": 52
          },
          "repo": "bot"
        },
        {
          "sha": "d0e62bad",
          "subject": "Add staff Approve/Deny/Close controls, on-demand threads, and an open-suggestions list",
          "author": "Sir Mittens",
          "date": "2026-08-29T23:07:13.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 456,
            "deletions": 6
          },
          "repo": "bot"
        },
        {
          "sha": "d3fe5117",
          "subject": "Add application transcript format setting and per-application-type log channels",
          "author": "Sir Mittens",
          "date": "2026-08-29T22:54:29.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 218,
            "deletions": 39
          },
          "repo": "bot"
        },
        {
          "sha": "9764e168",
          "subject": "Enrich application review log embeds with type, reason, and HTML transcript attachment",
          "author": "Sir Mittens",
          "date": "2026-08-29T22:42:18.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 24,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "4470243d",
          "subject": "Extend server backup/restore to cover ticket types, application types, and ticket panels",
          "author": "Sir Mittens",
          "date": "2026-08-28T21:23:59.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 184,
            "deletions": 8
          },
          "repo": "bot"
        },
        {
          "sha": "bced90e1",
          "subject": "Add on-demand ticket alongside threads for application interviews, with in-channel management embeds for claim/note/close and reopen support",
          "author": "Sir Mittens",
          "date": "2026-08-28T21:00:15.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 368,
            "deletions": 32
          },
          "repo": "bot"
        },
        {
          "sha": "e5f294e7",
          "subject": "Fix Add Note modal crash: label exceeded Discord's 45-char cap",
          "author": "Sir Mittens",
          "date": "2026-08-28T20:41:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "4d3b8cac",
          "subject": "Add server-icon thumbnail to ticket/application panels and embeds, with per-type custom URL override",
          "author": "Sir Mittens",
          "date": "2026-08-28T20:34:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 143,
            "deletions": 5
          },
          "repo": "bot"
        },
        {
          "sha": "2d70e072",
          "subject": "Make application threads on-demand, add optional accept reason and history fields",
          "author": "Sir Mittens",
          "date": "2026-08-28T18:21:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 183,
            "deletions": 29
          },
          "repo": "bot"
        },
        {
          "sha": "de6f150a",
          "subject": "Add editable Q&A answers to application reviews, safely scoped from the meta embed",
          "author": "Sir Mittens",
          "date": "2026-08-28T17:46:17.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 311,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "a43e989a",
          "subject": "Fix ER_DATA_TOO_LONG creating an application type with a long description",
          "author": "Sir Mittens",
          "date": "2026-08-28T17:26:37.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 14,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "83f2a983",
          "subject": "Add submission info and an HTML transcript button to application reviews",
          "author": "Sir Mittens",
          "date": "2026-08-28T17:21:36.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 92,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "765586cf",
          "subject": "Promote Trust Network to its own command, overhaul its menu, add report management",
          "author": "Sir Mittens",
          "date": "2026-08-28T16:59:45.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 299,
            "deletions": 59
          },
          "repo": "bot"
        },
        {
          "sha": "4a107c1a",
          "subject": "Fix application-type setup panel exceeding Discord's 5-action-row cap",
          "author": "Sir Mittens",
          "date": "2026-08-28T16:23:15.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 5,
            "deletions": 6
          },
          "repo": "bot"
        },
        {
          "sha": "664382f8",
          "subject": "Add optional media attachments and auto-threading to suggestions/bug reports",
          "author": "Sir Mittens",
          "date": "2026-08-28T16:03:30.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 39,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "2ffec94c",
          "subject": "Add /colored-text and custom QOTD rotation",
          "author": "Sir Mittens",
          "date": "2026-08-28T15:50:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 392,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "53382105",
          "subject": "Note webhook-to-XP bridge request in TODO - deferred until past marketing hurdle",
          "author": "Sir Mittens",
          "date": "2026-08-28T15:31:11.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "681da634",
          "subject": "Note Components V2 /embed support request in TODO - deferred until past marketing hurdle",
          "author": "Sir Mittens",
          "date": "2026-08-28T15:27:52.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "e219dd63",
          "subject": "Add role-assignment custom messages, no per-role cap",
          "author": "Sir Mittens",
          "date": "2026-08-28T15:09:09.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 379,
            "deletions": 16
          },
          "repo": "bot"
        },
        {
          "sha": "2dd840c7",
          "subject": "Add five visual/canvas features: welcome banners, growth chart, stats card, leveling badges, event roster",
          "author": "Sir Mittens",
          "date": "2026-08-28T14:48:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 884,
            "deletions": 17
          },
          "repo": "bot"
        },
        {
          "sha": "f9fc4eba",
          "subject": "Give ticket panels roomier spacing by using the embed description instead of fields",
          "author": "Sir Mittens",
          "date": "2026-08-28T13:09:29.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 12,
            "deletions": 8
          },
          "repo": "bot"
        },
        {
          "sha": "7bcf9fd6",
          "subject": "Add per-ticket-type open limits and a structured /bug-report command",
          "author": "Sir Mittens",
          "date": "2026-08-28T13:00:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 201,
            "deletions": 7
          },
          "repo": "bot"
        },
        {
          "sha": "dd0b9e52",
          "subject": "Fix Missing Access when posting into a newly created ticket channel",
          "author": "Sir Mittens",
          "date": "2026-08-28T12:40:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 29,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "fe3ab4f4",
          "subject": "Fix false \"something went wrong\" error after a ticket is actually created",
          "author": "Sir Mittens",
          "date": "2026-08-28T11:56:18.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "aacb4878",
          "subject": "Fix Unknown interaction error when assigning a log channel to multiple events",
          "author": "Sir Mittens",
          "date": "2026-08-28T11:45:33.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 10,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "1918ebe4",
          "subject": "Add Trust Network report permission tiers, ticket panel editing, fix description overflow bug",
          "author": "Sir Mittens",
          "date": "2026-08-28T07:24:15.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 485,
            "deletions": 51
          },
          "repo": "bot"
        },
        {
          "sha": "44d99153",
          "subject": "Test commit for git auto-deploy verification",
          "author": "Sir Mittens",
          "date": "2026-08-28T05:56:44.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "16173981",
          "subject": "Make Quick Setup respect free-tier ticket/application type limits",
          "author": "Sir Mittens",
          "date": "2026-08-28T05:34:46.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 51,
            "deletions": 23
          },
          "repo": "bot"
        },
        {
          "sha": "2a257591",
          "subject": "Add one-click Quick Setup templates for new servers",
          "author": "Sir Mittens",
          "date": "2026-08-28T04:46:22.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 257,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "029ea89f",
          "subject": "Shorten orphaned-backup grace period from 90 to 15 days",
          "author": "Sir Mittens",
          "date": "2026-08-28T04:30:54.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "7ddacbd1",
          "subject": "Server backups survive a bot kick, only /data-delete wipes them",
          "author": "Sir Mittens",
          "date": "2026-08-28T04:30:53.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 65,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "42d807cc",
          "subject": "Remove dead custom_embeds and priority_support premium flags",
          "author": "Sir Mittens",
          "date": "2026-08-28T03:13:41.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 0,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "a1da718e",
          "subject": "Move Role Tags out of the frequent-use events menu, keep it in setup only",
          "author": "Sir Mittens",
          "date": "2026-08-28T02:55:09.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 0,
            "deletions": 73
          },
          "repo": "bot"
        },
        {
          "sha": "f24406f9",
          "subject": "Fold guild events panel into /inkwell events, remove standalone /event command",
          "author": "Sir Mittens",
          "date": "2026-08-28T02:22:05.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 14
          },
          "repo": "bot"
        },
        {
          "sha": "040653ca",
          "subject": "Add a canvas banner image to posted guild event embeds",
          "author": "Sir Mittens",
          "date": "2026-08-28T02:03:39.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 22,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "7532f9f6",
          "subject": "Convert Guild Events creation/management from commands to a fast menu",
          "author": "Sir Mittens",
          "date": "2026-08-28T01:56:26.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 446,
            "deletions": 115
          },
          "repo": "bot"
        },
        {
          "sha": "a01fafa8",
          "subject": "Fix voice XP silently requiring the wrong toggle, split chat/voice XP, fix log dropdown cap, add event reminder cards",
          "author": "Sir Mittens",
          "date": "2026-08-28T01:41:57.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 210,
            "deletions": 31
          },
          "repo": "bot"
        },
        {
          "sha": "e003264c",
          "subject": "Remove emoji glyphs from level-up/birthday canvas cards",
          "author": "Sir Mittens",
          "date": "2026-08-28T01:12:57.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 3,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "ff2bb1ad",
          "subject": "Add application status tags, claim, internal notes, cooldown visibility, and queue view",
          "author": "Sir Mittens",
          "date": "2026-08-28T00:16:47.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 428,
            "deletions": 25
          },
          "repo": "bot"
        },
        {
          "sha": "a8ede4e4",
          "subject": "Add generic webhook ingestion system and staff-app closure/eligibility fixes",
          "author": "Sir Mittens",
          "date": "2026-08-27T23:52:46.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1090,
            "deletions": 11
          },
          "repo": "bot"
        },
        {
          "sha": "c96f06d7",
          "subject": "Rebuild staff apps as DM flow, add backup transfer codes and premium code uniqueness",
          "author": "Sir Mittens",
          "date": "2026-08-27T22:50:56.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 303,
            "deletions": 67
          },
          "repo": "bot"
        },
        {
          "sha": "1c05d015",
          "subject": "Swap pending-deletion ticket flag emoji from flag to trashcan",
          "author": "Sir Mittens",
          "date": "2026-08-27T22:19:12.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "2097276d",
          "subject": "Fix backup restore duplication, add settings/role restore, overhaul ticket lifecycle",
          "author": "Sir Mittens",
          "date": "2026-08-27T22:17:05.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 616,
            "deletions": 46
          },
          "repo": "bot"
        },
        {
          "sha": "6bb050cc",
          "subject": "Actually build the /appeal command — earlier commit only added the log-event plumbing",
          "author": "Sir Mittens",
          "date": "2026-08-27T19:38:20.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 83,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "cc63e136",
          "subject": "Trust Network: positive vouches, weighted scoring, watchlist, evidence links, appeals infra",
          "author": "Sir Mittens",
          "date": "2026-08-27T19:36:41.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 432,
            "deletions": 36
          },
          "repo": "bot"
        },
        {
          "sha": "a3f62ea9",
          "subject": "Replace static premium codes with a proper DB-backed code system + owner menu",
          "author": "Sir Mittens",
          "date": "2026-08-27T19:18:53.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 549,
            "deletions": 45
          },
          "repo": "bot"
        },
        {
          "sha": "775fa23c",
          "subject": "Exempt the test/support server from the Trust Network tenure gate",
          "author": "Sir Mittens",
          "date": "2026-08-27T18:39:56.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 11,
            "deletions": 7
          },
          "repo": "bot"
        },
        {
          "sha": "18f2cc5d",
          "subject": "Trust Network: escalation refinement, tenure gate, same-owner detection, repeat-offender permanence",
          "author": "Sir Mittens",
          "date": "2026-08-27T18:15:22.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 318,
            "deletions": 33
          },
          "repo": "bot"
        },
        {
          "sha": "e75cb2cc",
          "subject": "Restrict Trust Network admin alert log option to the test/support server",
          "author": "Sir Mittens",
          "date": "2026-08-27T17:29:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 15,
            "deletions": 6
          },
          "repo": "bot"
        },
        {
          "sha": "aa4e418a",
          "subject": "Trust Network moderation overhaul + panel/quality-of-life batch",
          "author": "Sir Mittens",
          "date": "2026-08-27T17:22:11.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 882,
            "deletions": 106
          },
          "repo": "bot"
        },
        {
          "sha": "c60cc380",
          "subject": "Fix two modal labels exceeding Discord's 45-char limit (recurring template role slots, social alert custom message)",
          "author": "Sir Mittens",
          "date": "2026-08-27T15:40:30.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 8,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "29ffe2a3",
          "subject": "Make /active-servers usable in any server (owner-only), post as a visible embed",
          "author": "Sir Mittens",
          "date": "2026-08-27T15:20:37.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 11,
            "deletions": 10
          },
          "repo": "bot"
        },
        {
          "sha": "55e4fbe2",
          "subject": "Enforce premium expiry (self-heal + hourly sweep), redeem code now grants 3 months",
          "author": "Sir Mittens",
          "date": "2026-08-27T15:07:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 38,
            "deletions": 8
          },
          "repo": "bot"
        },
        {
          "sha": "068bed57",
          "subject": "Show a truncated question as the modal label instead of generic 'Question N'",
          "author": "Sir Mittens",
          "date": "2026-08-27T11:04:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "c158195f",
          "subject": "Sync command list to discordbotlist.com on deploy",
          "author": "Sir Mittens",
          "date": "2026-08-27T10:53:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 15,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "f4bdd72b",
          "subject": "Add /premium redeem command for granting premium via a code",
          "author": "Sir Mittens",
          "date": "2026-08-27T09:24:43.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 35,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "6eae4acb",
          "subject": "Add /active-servers command, restricted to the test server and bot owner",
          "author": "Sir Mittens",
          "date": "2026-08-27T08:55:48.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 31,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "edaeb15d",
          "subject": "Prefill setup modals with current values, add risk score lookup, public /level option",
          "author": "Sir Mittens",
          "date": "2026-08-27T08:14:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 209,
            "deletions": 55
          },
          "repo": "bot"
        },
        {
          "sha": "5a80c34d",
          "subject": "Fix leveling setup panel exceeding Discord's 5-row component limit",
          "author": "Sir Mittens",
          "date": "2026-08-27T07:38:10.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 59,
            "deletions": 6
          },
          "repo": "bot"
        },
        {
          "sha": "6c118d47",
          "subject": "DM guild-add credit to inviter, add Auto-Raider role, premium caps",
          "author": "Sir Mittens",
          "date": "2026-08-27T07:12:34.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 113,
            "deletions": 38
          },
          "repo": "bot"
        },
        {
          "sha": "ba6112f3",
          "subject": "Fix critical off-by-one bug breaking every /inkwell setup and /inkwell insights button/select/modal",
          "author": "Sir Mittens",
          "date": "2026-08-27T06:58:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 205,
            "deletions": 135
          },
          "repo": "bot"
        },
        {
          "sha": "c4827710",
          "subject": "Fix audit Tier 1-3 bugs/gaps, add Guild Events feature, clean up TODO.md",
          "author": "Sir Mittens",
          "date": "2026-08-27T06:41:54.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1776,
            "deletions": 553
          },
          "repo": "bot"
        },
        {
          "sha": "3e6972ad",
          "subject": "Gate command analytics, reaction-role Unique/Verify modes behind premium",
          "author": "Sir Mittens",
          "date": "2026-08-27T05:31:22.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 46,
            "deletions": 8
          },
          "repo": "bot"
        },
        {
          "sha": "5e3f6561",
          "subject": "Add /untimeout, expand warning escalation to 5 timeout tiers",
          "author": "Sir Mittens",
          "date": "2026-08-27T00:54:41.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 54,
            "deletions": 5
          },
          "repo": "bot"
        },
        {
          "sha": "cd9758a3",
          "subject": "Fix the actual root cause of automod escalation never firing: userId/memberId field mismatch",
          "author": "Sir Mittens",
          "date": "2026-08-27T00:34:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 6,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "369207f4",
          "subject": "Fix case-number race under concurrent bursts, fix automod back button, expand slur list",
          "author": "Sir Mittens",
          "date": "2026-08-27T00:20:14.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 131,
            "deletions": 68
          },
          "repo": "bot"
        },
        {
          "sha": "07631946",
          "subject": "Add /warn clear, reuse freed case numbers, fix word-filter suffix matching, add default regex patterns, enable autoKick by default",
          "author": "Sir Mittens",
          "date": "2026-08-26T23:41:35.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 63,
            "deletions": 8
          },
          "repo": "bot"
        },
        {
          "sha": "ad5924af",
          "subject": "Fix warning escalation missing tiers, add trigger-log toggle, enable regex automod by default",
          "author": "Sir Mittens",
          "date": "2026-08-26T22:55:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 90,
            "deletions": 22
          },
          "repo": "bot"
        },
        {
          "sha": "176203bc",
          "subject": "Add regex auto-mod/autoresponders, reaction-role modes, and command usage analytics",
          "author": "Sir Mittens",
          "date": "2026-08-26T22:42:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 519,
            "deletions": 26
          },
          "repo": "bot"
        },
        {
          "sha": "30cdd131",
          "subject": "Add Unclaim button to tickets",
          "author": "Sir Mittens",
          "date": "2026-08-26T21:43:35.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 28,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "c61c4dca",
          "subject": "Add permanent ticket numbers, per-guild transcript format setting, and render emoji/media in HTML transcripts",
          "author": "Sir Mittens",
          "date": "2026-08-26T21:28:52.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 210,
            "deletions": 43
          },
          "repo": "bot"
        },
        {
          "sha": "0ff405bc",
          "subject": "Hide already-configured log events from the Add list, only Edit/Remove show them",
          "author": "Sir Mittens",
          "date": "2026-08-26T20:59:46.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 20,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "708c4b67",
          "subject": "Add RP quality-of-life features: character names, server status announcer, rules gate; flesh out moderation lookup; fix dangerous-role gap in Applications",
          "author": "Sir Mittens",
          "date": "2026-08-26T20:54:59.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 595,
            "deletions": 47
          },
          "repo": "bot"
        },
        {
          "sha": "b8bd7ee9",
          "subject": "Confirm DB backup pipeline is live and verified end-to-end",
          "author": "Sir Mittens",
          "date": "2026-08-26T19:30:59.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 3,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "90f703eb",
          "subject": "Log DB backup setup and remaining manual GitLab steps",
          "author": "Sir Mittens",
          "date": "2026-08-26T19:06:57.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 8,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "a30a53f5",
          "subject": "Add scheduled, encrypted database backup via GitLab CI",
          "author": "Sir Mittens",
          "date": "2026-08-26T19:06:35.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 65,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "989daec3",
          "subject": "SECURITY: block granting/self-assigning roles with dangerous permissions",
          "author": "Sir Mittens",
          "date": "2026-08-26T18:57:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 84,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "f2300da3",
          "subject": "Log the flashy-features round in TODO.md",
          "author": "Sir Mittens",
          "date": "2026-08-26T16:40:19.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "55f44810",
          "subject": "Add visual rank cards, voice XP, HTML ticket transcripts, sticky messages",
          "author": "Sir Mittens",
          "date": "2026-08-26T16:35:41.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 714,
            "deletions": 15
          },
          "repo": "bot"
        },
        {
          "sha": "de04e15c",
          "subject": "Support {guilds} placeholder in rotating bot status text",
          "author": "Sir Mittens",
          "date": "2026-08-26T15:47:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "72a38ef3",
          "subject": "Restrict /data-delete to the server owner, not just Administrator",
          "author": "Sir Mittens",
          "date": "2026-08-26T15:38:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "37e36b2a",
          "subject": "Add pre-live-testing safety net: crash alerts, data-delete, rate limits, help browser, onboarding",
          "author": "Sir Mittens",
          "date": "2026-08-26T15:36:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 297,
            "deletions": 18
          },
          "repo": "bot"
        },
        {
          "sha": "d87be351",
          "subject": "Hardcode bot-owner gate via BOT_OWNER_ID env var instead of app.owner lookup",
          "author": "Sir Mittens",
          "date": "2026-08-26T15:00:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 10
          },
          "repo": "bot"
        },
        {
          "sha": "731b63cc",
          "subject": "Fold /nickname and /custom-command into /inkwell setup; fix rotation bugs",
          "author": "Sir Mittens",
          "date": "2026-08-26T14:53:03.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 287,
            "deletions": 168
          },
          "repo": "bot"
        },
        {
          "sha": "0b653b1f",
          "subject": "Add mass mention/attachment automod filters, staff XP controls, per-user ticket cap",
          "author": "Sir Mittens",
          "date": "2026-08-26T14:27:16.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 207,
            "deletions": 6
          },
          "repo": "bot"
        },
        {
          "sha": "24aef79d",
          "subject": "Add restart announcement countdown: manual trigger command + external webhook trigger",
          "author": "Sir Mittens",
          "date": "2026-08-26T14:03:44.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 235,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "f500ac37",
          "subject": "Add gated ticket types (role-restricted access) and note dropped spoof-badge idea",
          "author": "Sir Mittens",
          "date": "2026-08-26T13:53:43.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 145,
            "deletions": 7
          },
          "repo": "bot"
        },
        {
          "sha": "7017d072",
          "subject": "Add real member growth tracking: /serverinfo 7d delta, new stat counter type",
          "author": "Sir Mittens",
          "date": "2026-08-26T13:47:44.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 87,
            "deletions": 10
          },
          "repo": "bot"
        },
        {
          "sha": "286cdaf7",
          "subject": "Note competitive comparison chart published to wiki",
          "author": "Sir Mittens",
          "date": "2026-08-26T13:27:12.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "937cfd6c",
          "subject": "Add niche QoL round: slowmode auto-decay, ghost-ping detection, mod notes, sticky roles, ticket auto-close, new-member quarantine, /doctor",
          "author": "Sir Mittens",
          "date": "2026-08-26T13:24:40.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 670,
            "deletions": 6
          },
          "repo": "bot"
        },
        {
          "sha": "4f115420",
          "subject": "Design pass: standardize premium upsell wording, extend brand color to tickets/level/leaderboards",
          "author": "Sir Mittens",
          "date": "2026-08-26T12:54:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 17,
            "deletions": 13
          },
          "repo": "bot"
        },
        {
          "sha": "6ede65c3",
          "subject": "Expand premium incentives: free-tier caps, auto weekly backups, faster social alerts, bot accent color, config templates",
          "author": "Sir Mittens",
          "date": "2026-08-26T12:47:11.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 278,
            "deletions": 9
          },
          "repo": "bot"
        },
        {
          "sha": "353946dc",
          "subject": "Switch slash command deployment from guild-scoped to global",
          "author": "Sir Mittens",
          "date": "2026-08-26T12:29:20.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 10,
            "deletions": 11
          },
          "repo": "bot"
        },
        {
          "sha": "f1ef5c9a",
          "subject": "Add optional human-challenge step to Verification Gate; remove dead Back button from /inkwell logs; track remaining structural gaps in TODO",
          "author": "Sir Mittens",
          "date": "2026-08-26T07:21:17.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 74,
            "deletions": 8
          },
          "repo": "bot"
        },
        {
          "sha": "54029ff2",
          "subject": "Add YouTube/Twitch social media alerts, folded into /inkwell setup",
          "author": "Sir Mittens",
          "date": "2026-08-26T07:11:27.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 273,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "42712e0a",
          "subject": "Fix log-event select menu exceeding Discord's 25-option limit",
          "author": "Sir Mittens",
          "date": "2026-08-26T07:01:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 17,
            "deletions": 16
          },
          "repo": "bot"
        },
        {
          "sha": "34141d9b",
          "subject": "Add account risk scoring, tags, stat counters; consolidate setup/insights commands into inkwell menus",
          "author": "Sir Mittens",
          "date": "2026-08-26T06:57:41.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1526,
            "deletions": 918
          },
          "repo": "bot"
        },
        {
          "sha": "99a884b8",
          "subject": "Delete all guild data when the bot is kicked/banned from a server",
          "author": "Sir Mittens",
          "date": "2026-08-26T06:36:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "ad302229",
          "subject": "Remove tracked workspace file, ignore .code-workspace",
          "author": "Sir Mittens",
          "date": "2026-08-26T06:20:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 8
          },
          "repo": "bot"
        },
        {
          "sha": "27625957",
          "subject": "Improvement pass: anti-nuke role-restore undo, backup permission overwrites, reminder abuse cap, JTC race guard",
          "author": "Sir Mittens",
          "date": "2026-08-26T06:15:14.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 185,
            "deletions": 26
          },
          "repo": "bot"
        },
        {
          "sha": "aca277d7",
          "subject": "Add invite tracking, birthdays, scheduled announcements/reminders, temp roles, server backup, and premium gates",
          "author": "Sir Mittens",
          "date": "2026-08-26T06:01:17.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 989,
            "deletions": 5
          },
          "repo": "bot"
        },
        {
          "sha": "e5791e43",
          "subject": "Add custom command template variables and starboard NSFW exclusion",
          "author": "Sir Mittens",
          "date": "2026-08-26T05:48:45.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 19,
            "deletions": 11
          },
          "repo": "bot"
        },
        {
          "sha": "ec224e2c",
          "subject": "Add leveling/XP, anti-raid/anti-nuke, extended automod, custom commands, starboard, and join-to-create",
          "author": "Sir Mittens",
          "date": "2026-08-26T05:46:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1275,
            "deletions": 8
          },
          "repo": "bot"
        },
        {
          "sha": "02a2c307",
          "subject": "Add staff performance analytics and opt-in cross-server trust network",
          "author": "Sir Mittens",
          "date": "2026-08-26T05:17:30.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 475,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "999a8769",
          "subject": "Add filler file to test git pull on server",
          "author": "Sir Mittens",
          "date": "2026-08-26T04:01:46.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "68cb3c45",
          "subject": "Remove dev-status restart notifications; route commit-deploy announcements through the log-channel system",
          "author": "Sir Mittens",
          "date": "2026-08-26T03:51:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 43,
            "deletions": 151
          },
          "repo": "bot"
        },
        {
          "sha": "eff3aab2",
          "subject": "Remove README, docs now live in the wiki",
          "author": "Sir Mittens",
          "date": "2026-08-26T03:45:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 0,
            "deletions": 145
          },
          "repo": "bot"
        },
        {
          "sha": "c1b2fdff",
          "subject": "Remove unused .env.example, document DB env vars in README",
          "author": "Sir Mittens",
          "date": "2026-08-26T03:45:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "8d29d802",
          "subject": "Add root index.js entry shim for hosts expecting it; skip commit-announce silently outside a git checkout",
          "author": "Sir Mittens",
          "date": "2026-08-26T03:29:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 12,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "cd92f9c0",
          "subject": "Migrate persistence layer from JSON files to MySQL (Knex)",
          "author": "Sir Mittens",
          "date": "2026-08-26T02:46:44.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 3076,
            "deletions": 856
          },
          "repo": "bot"
        },
        {
          "sha": "07d12d34",
          "subject": "Rename /docs to /inkwell-help (with support server link), add automated syntax/wiring checks + CI",
          "author": "SirMittens",
          "date": "2026-08-24T08:22:57.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 180,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "b655f02c",
          "subject": "Add /inkwell roles, remove /suggest-setup (redundant with /setup)",
          "author": "SirMittens",
          "date": "2026-08-24T07:15:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 185,
            "deletions": 158
          },
          "repo": "bot"
        },
        {
          "sha": "e540aa0e",
          "subject": "Add /inkwell applications, rename /inkwell log to /inkwell logs, remove /ticket-panel, /modlogs, /userinfo, and simplify /ticket-history",
          "author": "SirMittens",
          "date": "2026-08-24T06:55:48.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 501,
            "deletions": 358
          },
          "repo": "bot"
        },
        {
          "sha": "9844e5de",
          "subject": "Welcome banner: status panel with Enable/Disable and Edit Channel, plus removing now-redundant standalone commands",
          "author": "SirMittens",
          "date": "2026-08-24T06:24:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 190,
            "deletions": 160
          },
          "repo": "bot"
        },
        {
          "sha": "be388866",
          "subject": "Consolidate ticket commands under /inkwell, add /inkwell welcome, and stop auto-posting the welcome banner to the system channel",
          "author": "SirMittens",
          "date": "2026-08-24T05:43:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 441,
            "deletions": 187
          },
          "repo": "bot"
        },
        {
          "sha": "efc580c2",
          "subject": "Add more log events, fix a lockdown logging bug, and clean up a menu embed bug",
          "author": "SirMittens",
          "date": "2026-08-24T01:03:04.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 187,
            "deletions": 14
          },
          "repo": "bot"
        },
        {
          "sha": "ead31004",
          "subject": "Polish the Inkwell menu: consistent Back button label, and describe each option upfront",
          "author": "SirMittens",
          "date": "2026-08-24T00:40:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "41e6557c",
          "subject": "Consolidate logging, welcome banner, and user lookup under a single /inkwell command",
          "author": "SirMittens",
          "date": "2026-08-24T00:26:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 585,
            "deletions": 148
          },
          "repo": "bot"
        },
        {
          "sha": "407876ff",
          "subject": "Switch ticket type editing to a dropdown, move staff applications to DMs, fix transcript embed display",
          "author": "SirMittens",
          "date": "2026-08-23T23:36:44.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 237,
            "deletions": 141
          },
          "repo": "bot"
        },
        {
          "sha": "9448a207",
          "subject": "Replace typing an id with clickable buttons when editing ticket types",
          "author": "SirMittens",
          "date": "2026-08-23T23:10:41.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 77,
            "deletions": 44
          },
          "repo": "bot"
        },
        {
          "sha": "eb95d0ae",
          "subject": "Make error messages specific to what actually failed, not generic",
          "author": "SirMittens",
          "date": "2026-08-23T23:07:35.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 48,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "d57e153a",
          "subject": "Fix ticket/application crash when questions are edited mid-submission",
          "author": "SirMittens",
          "date": "2026-08-23T23:04:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 16,
            "deletions": 8
          },
          "repo": "bot"
        },
        {
          "sha": "f798cadf",
          "subject": "Raise ticket/application question length from 45 to 100 characters",
          "author": "SirMittens",
          "date": "2026-08-23T22:50:29.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 20,
            "deletions": 17
          },
          "repo": "bot"
        },
        {
          "sha": "a60a8b0f",
          "subject": "Add auto-role, ticket reopen/history, case numbers, server/user info, AFK",
          "author": "SirMittens",
          "date": "2026-08-23T22:43:36.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 325,
            "deletions": 13
          },
          "repo": "bot"
        },
        {
          "sha": "775245fc",
          "subject": "Fix ticket-type edit crash: prefilled question text could exceed Discord's 45-char limit",
          "author": "SirMittens",
          "date": "2026-08-23T22:36:47.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 4,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "5a6fda0c",
          "subject": "Fix ticket-type setup crash: two form labels exceeded Discord's 45-char limit",
          "author": "SirMittens",
          "date": "2026-08-23T22:29:54.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "3c2b4e16",
          "subject": "Add ticket editing/history, native kick/ban logging, remove redundant kick/ban commands, fix false-positive delete logs",
          "author": "SirMittens",
          "date": "2026-08-23T22:19:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 269,
            "deletions": 107
          },
          "repo": "bot"
        },
        {
          "sha": "562a9254",
          "subject": "Fix bot crash on startup: missing getPending export broke application setup",
          "author": "SirMittens",
          "date": "2026-08-23T22:04:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 4,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "df55f042",
          "subject": "Add suggestions system and a first-time server setup wizard",
          "author": "SirMittens",
          "date": "2026-08-23T22:02:25.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 258,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "09a78286",
          "subject": "Add polls, multi-question tickets, application roles/messages/cooldown/threads/export",
          "author": "SirMittens",
          "date": "2026-08-23T21:55:51.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 586,
            "deletions": 54
          },
          "repo": "bot"
        },
        {
          "sha": "dff642bd",
          "subject": "Add custom embed builder (/embed create/edit/template) with live preview, fields, thumbnails, and reusable templates; add /docs command linking to the wiki",
          "author": "SirMittens",
          "date": "2026-08-23T21:39:59.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 578,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "72e9609b",
          "subject": "Add ticket-user, modlogs, application list, giveaway reroll, lockdown/slowmode; distinct mod-log colors; fix question label overflow",
          "author": "SirMittens",
          "date": "2026-08-23T21:32:09.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 414,
            "deletions": 93
          },
          "repo": "bot"
        },
        {
          "sha": "49f15938",
          "subject": "Turn ticket-setup into a guided chat flow so the id concept is explained clearly before the form opens",
          "author": "SirMittens",
          "date": "2026-08-23T21:03:12.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 115,
            "deletions": 70
          },
          "repo": "bot"
        },
        {
          "sha": "d357afc8",
          "subject": "Fix ticket-setup modal label exceeding Discord's 45-char limit",
          "author": "SirMittens",
          "date": "2026-08-23T20:59:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "27e4738c",
          "subject": "Prefix rotating nicknames with Inkwell so bot name stays visible; drop literal server-name entry",
          "author": "SirMittens",
          "date": "2026-08-23T20:49:53.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "05fa4611",
          "subject": "Stop swallowing setNickname errors so failures are actually visible in logs",
          "author": "SirMittens",
          "date": "2026-08-23T20:47:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "6266928e",
          "subject": "Split status into global-only seeded presence and per-server nickname rotation",
          "author": "SirMittens",
          "date": "2026-08-23T20:43:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 126,
            "deletions": 61
          },
          "repo": "bot"
        },
        {
          "sha": "d1e6c337",
          "subject": "Fix crash: setPresence is synchronous, not a Promise",
          "author": "SirMittens",
          "date": "2026-08-23T20:31:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 6,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "7473fcd1",
          "subject": "Add rotating custom status system, seeded with Cordovan Creek and Remnant's Light status lists",
          "author": "SirMittens",
          "date": "2026-08-23T19:55:34.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 184,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "8aff02d6",
          "subject": "List all commits since last announcement instead of just the latest one",
          "author": "SirMittens",
          "date": "2026-08-23T19:36:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 81,
            "deletions": 11
          },
          "repo": "bot"
        },
        {
          "sha": "74c2355d",
          "subject": "Announce latest commit on startup and set dev-status channel for test guild",
          "author": "SirMittens",
          "date": "2026-08-23T19:33:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 42,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "70ed4f72",
          "subject": "Add dev-status restart/online notifications for testers",
          "author": "SirMittens",
          "date": "2026-08-23T19:30:33.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 123,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "dcbd8d1f",
          "subject": "Fall back to default welcome text, system channel, and bot banner when welcome isn't configured",
          "author": "SirMittens",
          "date": "2026-08-23T19:28:41.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 18,
            "deletions": 12
          },
          "repo": "bot"
        },
        {
          "sha": "39b9b094",
          "subject": "Add applications, verification, self-assign roles, giveaways, moderation, ticket claim/limit/transcript, and expanded logging",
          "author": "SirMittens",
          "date": "2026-08-23T19:16:10.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1837,
            "deletions": 31
          },
          "repo": "bot"
        },
        {
          "sha": "bc0e19a5",
          "subject": "Default welcome title/message to Welcome {username}/Welcome to the Inkwell Discord Server",
          "author": "SirMittens",
          "date": "2026-08-23T18:58:34.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 5,
            "deletions": 2
          },
          "repo": "bot"
        },
        {
          "sha": "b7a62505",
          "subject": "Add {username} placeholder for welcome title and suppress Discord's default join message",
          "author": "SirMittens",
          "date": "2026-08-23T18:54:03.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 12,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "2508e16b",
          "subject": "Add question-on-open modal and reason-on-close modal, restyle ticket embed to match Appy layout",
          "author": "SirMittens",
          "date": "2026-08-23T18:49:15.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 100,
            "deletions": 16
          },
          "repo": "bot"
        },
        {
          "sha": "4cb80d57",
          "subject": "Replace emoji text field with preset dropdown; rebuild ticket-panel as modal+picker wizard",
          "author": "SirMittens",
          "date": "2026-08-23T18:42:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 313,
            "deletions": 112
          },
          "repo": "bot"
        },
        {
          "sha": "6cc928b5",
          "subject": "Make ticket/welcome config writes atomic and guard against missing id in setup confirm",
          "author": "SirMittens",
          "date": "2026-08-23T18:33:52.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 3
          },
          "repo": "bot"
        },
        {
          "sha": "84d0d359",
          "subject": "Consolidate ticket-type into ticket-setup with prefill/autocomplete, add standalone staff picker",
          "author": "SirMittens",
          "date": "2026-08-23T18:25:40.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 158,
            "deletions": 270
          },
          "repo": "bot"
        },
        {
          "sha": "6e17bd49",
          "subject": "Prefill welcome-setup form and channel picker with existing saved config",
          "author": "SirMittens",
          "date": "2026-08-23T18:22:27.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 19,
            "deletions": 10
          },
          "repo": "bot"
        },
        {
          "sha": "099d2b25",
          "subject": "Harden error handling so a failed interaction reply can't crash the bot process",
          "author": "SirMittens",
          "date": "2026-08-23T18:19:26.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 20,
            "deletions": 27
          },
          "repo": "bot"
        },
        {
          "sha": "8efbd35e",
          "subject": "Fix welcome-setup modal label exceeding Discord's 45-char limit",
          "author": "SirMittens",
          "date": "2026-08-23T18:18:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "bot"
        },
        {
          "sha": "b26d9bb1",
          "subject": "Add popup-based ticket setup, logging, welcome banner, and purge command",
          "author": "SirMittens",
          "date": "2026-08-23T18:15:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 805,
            "deletions": 7
          },
          "repo": "bot"
        },
        {
          "sha": "995ec2cb",
          "subject": "Stop tracking runtime ticket config data",
          "author": "SirMittens",
          "date": "2026-08-23T17:59:41.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 4
          },
          "repo": "bot"
        },
        {
          "sha": "b10be26b",
          "subject": "Rework ticket type/panel with modals and richer embed layout",
          "author": "SirMittens",
          "date": "2026-08-23T17:58:55.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 521,
            "deletions": 30
          },
          "repo": "bot"
        },
        {
          "sha": "d6ff058b",
          "subject": "Add configurable ticket system",
          "author": "SirMittens",
          "date": "2026-08-23T17:23:18.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 450,
            "deletions": 85
          },
          "repo": "bot"
        },
        {
          "sha": "decbc0eb",
          "subject": "Initial Inkwell bot scaffold",
          "author": "SirMittens",
          "date": "2026-08-23T17:15:43.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 142,
            "deletions": 0
          },
          "repo": "bot"
        },
        {
          "sha": "dcd2b236",
          "subject": "Initial commit",
          "author": "Sir Mittens",
          "date": "2026-08-23T14:13:12.000+00:00",
          "securityFix": null,
          "stats": {
            "additions": 93,
            "deletions": 0
          },
          "repo": "bot"
        }
      ]
    },
    "dashboard": {
      "url": "https://gitlab.com/sirmittens-dev/inkwell-group/inkwell-dashboard",
      "count": 308,
      "commits": [
        {
          "sha": "863419a7",
          "subject": "Ask us: a reply from the team is announced by a short sound (on by default, with a switch to turn it off), a count in the tab title, and the unread check runs every 30 seconds instead of every 2 minut",
          "author": "SirMittens",
          "date": "2026-10-13T06:03:46.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 109,
            "deletions": 8
          },
          "repo": "dashboard"
        },
        {
          "sha": "9a28e08e",
          "subject": "Ask us: a question only looks and refreshes like a live chat while the team is typing or has replied in the last 10 minutes; before that and after it goes quiet it is a plain question that refreshes s",
          "author": "SirMittens",
          "date": "2026-10-13T05:52:08.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 28,
            "deletions": 6
          },
          "repo": "dashboard"
        },
        {
          "sha": "1d62e8be",
          "subject": "Revert \"The dashboard moves to inkwellapp.pages.dev, a shorter address people can type; the Pages project is now named inkwellapp\"",
          "author": "SirMittens",
          "date": "2026-10-13T05:47:18.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 24,
            "deletions": 24
          },
          "repo": "dashboard"
        },
        {
          "sha": "0015a321",
          "subject": "The dashboard moves to inkwellapp.pages.dev, a shorter address people can type; the Pages project is now named inkwellapp",
          "author": "SirMittens",
          "date": "2026-10-13T05:40:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 24,
            "deletions": 24
          },
          "repo": "dashboard"
        },
        {
          "sha": "e8198d7a",
          "subject": "Phone layout: the top bar's logo is sized like the sidebar's, and pages leave room at the bottom so the Ask us button doesn't cover the last control",
          "author": "SirMittens",
          "date": "2026-10-13T05:33:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 4,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "ea79cfe6",
          "subject": "Phone layout: below 900px a top bar with a menu button opens the sidebar as a drawer, pages get narrower padding, tables scroll sideways and the message editor's pickers stay on screen",
          "author": "SirMittens",
          "date": "2026-10-13T05:29:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 65,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "91de654c",
          "subject": "Ask us: messages show custom emoji, pictures, videos and GIFs (from Discord, Tenor and Giphy only) and clickable links instead of raw codes",
          "author": "SirMittens",
          "date": "2026-10-13T05:29:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 44,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "79af31b9",
          "subject": "Loading: the centred spinner is drawn at the top of the page, outside every other element, so an animating card or page can't carry it off-centre; every page-level load uses the same central spot and ",
          "author": "SirMittens",
          "date": "2026-10-12T12:33:44.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 24,
            "deletions": 15
          },
          "repo": "dashboard"
        },
        {
          "sha": "1a74370e",
          "subject": "Loading reads as one continuous spinner: the start-up screen, the page and each part use the same loader, which appears in the middle of the screen at once (same spot, ring in step, no fade) when it f",
          "author": "SirMittens",
          "date": "2026-10-12T12:15:52.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 83,
            "deletions": 45
          },
          "repo": "dashboard"
        },
        {
          "sha": "3f27155c",
          "subject": "Ask us: a conversation shows who is typing to the person, and says nobody from the team has replied yet (with the real usual wait) until someone claims or replies; open conversations refresh every few",
          "author": "SirMittens",
          "date": "2026-10-12T12:11:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 83,
            "deletions": 8
          },
          "repo": "dashboard"
        },
        {
          "sha": "4bfce602",
          "subject": "One loading mark everywhere: the Inkwell logo with a spinning gold ring, centred in the space it loads (not a lock screen); when several parts of a page load at once only one ring spins, and the next ",
          "author": "SirMittens",
          "date": "2026-10-12T11:59:56.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 208,
            "deletions": 63
          },
          "repo": "dashboard"
        },
        {
          "sha": "22428e71",
          "subject": "Admin split into Admin (maintenance, Ask us availability, banned servers, Trust Network reports) and Premium Admin (stats, servers, activity, codes); popups centre on the screen again (the page animat",
          "author": "SirMittens",
          "date": "2026-10-12T11:54:55.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 730,
            "deletions": 571
          },
          "repo": "dashboard"
        },
        {
          "sha": "744be7af",
          "subject": "Ask us: the page states the 30-day retention rule and people can delete their own questions (open tickets are closed first)",
          "author": "SirMittens",
          "date": "2026-10-12T11:34:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 96,
            "deletions": 4
          },
          "repo": "dashboard"
        },
        {
          "sha": "54c25a97",
          "subject": "Ask us button: the same gold pill with a lit, raised surface, a soft halo that breathes now and then, a shine on hover, a tipping speech bubble, and a pulsing unread badge (reduced motion respected)",
          "author": "SirMittens",
          "date": "2026-10-12T09:16:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 27,
            "deletions": 6
          },
          "repo": "dashboard"
        },
        {
          "sha": "d909efe4",
          "subject": "Ask us: the dashboard no longer posts to a forum; every question is opened as a ticket by the bot, and marking a question solved tells the person its ticket closes shortly",
          "author": "SirMittens",
          "date": "2026-10-12T09:10:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 18,
            "deletions": 50
          },
          "repo": "dashboard"
        },
        {
          "sha": "c9903d04",
          "subject": "Ask us: Chat on Discord no longer needs a help channel (the bot opens a ticket), wording updated",
          "author": "SirMittens",
          "date": "2026-10-12T08:58:36.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 22,
            "deletions": 36
          },
          "repo": "dashboard"
        },
        {
          "sha": "7527f722",
          "subject": "Ask us: a Paused setting next to Available and Away, which stops new questions (refused by the server too) while open conversations keep working, with a heartfelt default note and an optional return t",
          "author": "SirMittens",
          "date": "2026-10-12T08:49:50.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 104,
            "deletions": 29
          },
          "repo": "dashboard"
        },
        {
          "sha": "90b17043",
          "subject": "Ask us: a heartfelt default note while the team is away and no note was written",
          "author": "SirMittens",
          "date": "2026-10-12T08:44:30.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 11,
            "deletions": 5
          },
          "repo": "dashboard"
        },
        {
          "sha": "fc9c9202",
          "subject": "Ask us availability: an Away switch on the Admin page (optional return time and note, ends by itself), shown on the page, the button and the first reply, plus an automatic running-behind note when a q",
          "author": "SirMittens",
          "date": "2026-10-12T08:38:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 248,
            "deletions": 11
          },
          "repo": "dashboard"
        },
        {
          "sha": "0e83f5c5",
          "subject": "Ask us limits: loose for replies in a conversation (40 an hour), tight for new questions (6 an hour), and a message that says when to try again and that nothing is lost",
          "author": "SirMittens",
          "date": "2026-10-12T08:30:35.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 49,
            "deletions": 15
          },
          "repo": "dashboard"
        },
        {
          "sha": "679019b3",
          "subject": "Ask us button: a small button at the bottom right of every page opens a compact panel with the question form, your questions and the conversation; it says Ask us (not chat), shows how long answers tak",
          "author": "SirMittens",
          "date": "2026-10-12T08:28:39.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 249,
            "deletions": 9
          },
          "repo": "dashboard"
        },
        {
          "sha": "058259d2",
          "subject": "Ask us: send the team a question from the dashboard (Ask here, or Chat on Discord in a private thread once they join the support server), read answers on the page, honest answer times, and a team inbo",
          "author": "SirMittens",
          "date": "2026-10-12T02:08:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 968,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "ab7a2397",
          "subject": "Quick Setup: simple cards with a medallion, a short tick-list and the exact detail behind a toggle, each with its own accent colour",
          "author": "SirMittens",
          "date": "2026-10-12T01:52:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 109,
            "deletions": 137
          },
          "repo": "dashboard"
        },
        {
          "sha": "503d909b",
          "subject": "Quick Setup: cards side by side with compact Trigger/Condition/Action chips and one legend, and the section starts open",
          "author": "SirMittens",
          "date": "2026-10-12T01:47:15.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 47,
            "deletions": 51
          },
          "repo": "dashboard"
        },
        {
          "sha": "f4c38f60",
          "subject": "Quick Setup: starting-point cards come first, in the Automations flagship look, showing each rule as Trigger/Condition/Action with what's left off and what it uses; the channel is asked for only after",
          "author": "SirMittens",
          "date": "2026-10-12T01:40:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 410,
            "deletions": 226
          },
          "repo": "dashboard"
        },
        {
          "sha": "2eab6306",
          "subject": "Log channels: warn when the bot can't post in the channel that was just chosen",
          "author": "SirMittens",
          "date": "2026-10-12T01:17:54.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 82,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "2e30c78d",
          "subject": "Admins can use the Admin page: server bans, premium grants and codes, and maintenance mode (the Users page stays owner-only)",
          "author": "SirMittens",
          "date": "2026-10-12T00:33:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 30,
            "deletions": 29
          },
          "repo": "dashboard"
        },
        {
          "sha": "417cd7c8",
          "subject": "Let the log channels page's off marker through the channel id check",
          "author": "SirMittens",
          "date": "2026-10-12T00:26:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 19,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "e167ffe5",
          "subject": "Log channels: with a catch-all, an unset log says it uses the default channel, and a single log can be switched off",
          "author": "SirMittens",
          "date": "2026-10-12T00:21:53.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 23,
            "deletions": 8
          },
          "repo": "dashboard"
        },
        {
          "sha": "96e0b261",
          "subject": "Try smart placement for the dashboard functions",
          "author": "SirMittens",
          "date": "2026-10-11T23:51:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 4,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "12aa4c2d",
          "subject": "Maintenance screen offers team sign in and sign out",
          "author": "SirMittens",
          "date": "2026-10-11T23:27:30.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 23,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "56b0b5c2",
          "subject": "Dashboard reads the VM database through the new Hyperdrive config",
          "author": "SirMittens",
          "date": "2026-10-11T23:21:20.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "e734a258",
          "subject": "Move announcement templates: say new home, mention the dashboard maintenance screen, soften the data promise",
          "author": "SirMittens",
          "date": "2026-10-11T22:41:16.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 5,
            "deletions": 5
          },
          "repo": "dashboard"
        },
        {
          "sha": "307c218a",
          "subject": "Maintenance countdown banner: clock, big digits, red and pulsing in the last minute; preview buttons for the countdown and the last-minute look",
          "author": "SirMittens",
          "date": "2026-10-11T20:42:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 55,
            "deletions": 12
          },
          "repo": "dashboard"
        },
        {
          "sha": "438e46e7",
          "subject": "Announcements: an owner of several servers gets one DM naming them all; their other servers are marked skipped",
          "author": "SirMittens",
          "date": "2026-10-11T20:37:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 95,
            "deletions": 19
          },
          "repo": "dashboard"
        },
        {
          "sha": "f4bd73af",
          "subject": "Web panel maintenance mode: owner switch on the Admin page with a 2/5/10/15 minute countdown (or an emergency start), a real server-side lock that lets the team through, a full-page screen with unsave",
          "author": "SirMittens",
          "date": "2026-10-11T20:33:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 663,
            "deletions": 5
          },
          "repo": "dashboard"
        },
        {
          "sha": "7e5052cd",
          "subject": "Remove the three one-at-a-time staff lookups that the combined query replaced",
          "author": "SirMittens",
          "date": "2026-10-11T17:34:41.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 0,
            "deletions": 16
          },
          "repo": "dashboard"
        },
        {
          "sha": "1a26978d",
          "subject": "Fewer database round trips on the code every request runs: who you are on login (7 queries to 1), the Premium feature check (2 to 1), the panel-access check (up to 8 to 1, compared with the old logic ",
          "author": "SirMittens",
          "date": "2026-10-11T17:34:29.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 369,
            "deletions": 64
          },
          "repo": "dashboard"
        },
        {
          "sha": "d0c02ab0",
          "subject": "Premium reward batches of 15 servers, so a slow database round trip can't push a request past Cloudflare's time limit",
          "author": "SirMittens",
          "date": "2026-10-11T17:21:27.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 3,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "99452c28",
          "subject": "Announcement templates for the move: a heartfelt migration notice (downtime, safety backup, premium compensation) and a back-online-after-the-move thank-you",
          "author": "SirMittens",
          "date": "2026-10-11T16:22:20.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 27,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "9d2be1be",
          "subject": "Announcement templates: 13 starters with the Inkwell logo, banner and footer icon, and the outline colour (and ready-made pictures) follow the level: red for critical, amber for important, blue for in",
          "author": "SirMittens",
          "date": "2026-10-11T16:15:34.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 141,
            "deletions": 42
          },
          "repo": "dashboard"
        },
        {
          "sha": "86a98577",
          "subject": "Announcements page for the bot's owners and admins: announcements to server owners and log channels (templates, simple editor, test first, typed confirmation, batched sending), bulk premium reward, sa",
          "author": "SirMittens",
          "date": "2026-10-11T15:55:11.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2069,
            "deletions": 16
          },
          "repo": "dashboard"
        },
        {
          "sha": "e7161ced",
          "subject": "Custom log messages: a Message control on every log on the Log Channels page, placeholders and standard design per log, dashboard-posted application logs follow it",
          "author": "SirMittens",
          "date": "2026-10-10T21:15:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 511,
            "deletions": 52
          },
          "repo": "dashboard"
        },
        {
          "sha": "9330142b",
          "subject": "Button automations: say what the picked automation does, link to make a new one, warn before deleting or switching off one that buttons use, and say when the list can't be loaded",
          "author": "SirMittens",
          "date": "2026-10-10T21:05:25.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 269,
            "deletions": 21
          },
          "repo": "dashboard"
        },
        {
          "sha": "12fd9f3d",
          "subject": "Button safety: role buttons limited to roles below the author's highest role (owner and admins exempt), no kick/ban/timeout in button automations, neutral example reasons in previews",
          "author": "SirMittens",
          "date": "2026-10-10T20:43:35.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 123,
            "deletions": 12
          },
          "repo": "dashboard"
        },
        {
          "sha": "95e6e279",
          "subject": "Commit feed and trust page show lines added and removed per commit (plain text, JSON and the page)",
          "author": "SirMittens",
          "date": "2026-10-10T17:51:50.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 48,
            "deletions": 17
          },
          "repo": "dashboard"
        },
        {
          "sha": "2a751828",
          "subject": "Message editor colours: a visible named colour popup (14 colours), ready-made banners and icons in every colour plus a droplets banner style, and ready-made pictures follow the message colour unless p",
          "author": "SirMittens",
          "date": "2026-10-10T17:50:08.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 329,
            "deletions": 30
          },
          "repo": "dashboard"
        },
        {
          "sha": "04b8beb2",
          "subject": "Buttons can run an automation: 'A button is pressed' trigger on the Automations page, automation picker on a button, checked when saving or posting",
          "author": "SirMittens",
          "date": "2026-10-10T17:35:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 80,
            "deletions": 24
          },
          "repo": "dashboard"
        },
        {
          "sha": "b9e7d66b",
          "subject": "Buttons that do something: pick what a button does (link, give/take/toggle a role, private message) and its colour in the editor; posted ones come back into the live editor; risky roles are refused wh",
          "author": "SirMittens",
          "date": "2026-10-10T17:30:50.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 378,
            "deletions": 19
          },
          "repo": "dashboard"
        },
        {
          "sha": "074ec824",
          "subject": "Ticket and application panels can use a saved message: type buttons added under it, {types} fills the list of types, deleted message falls back to the standard panel, with tests",
          "author": "SirMittens",
          "date": "2026-10-10T17:20:52.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 314,
            "deletions": 44
          },
          "repo": "dashboard"
        },
        {
          "sha": "9cca9532",
          "subject": "Messages step for tickets and applications: pick your own design for the bot's built-in messages (Premium), start from the standard one, accept/deny DM uses it, link into the editor, with tests",
          "author": "SirMittens",
          "date": "2026-10-10T17:14:57.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 900,
            "deletions": 19
          },
          "repo": "dashboard"
        },
        {
          "sha": "9b0b9b84",
          "subject": "Welcome and Automations pick a saved message; the old embed editor is gone",
          "author": "SirMittens",
          "date": "2026-10-10T16:47:14.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 466,
            "deletions": 122
          },
          "repo": "dashboard"
        },
        {
          "sha": "fa4ea1c5",
          "subject": "Commit lists: every no-cache header, fixed times instead of relative ones, and how to get a fresh copy",
          "author": "SirMittens",
          "date": "2026-10-10T16:36:22.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 40,
            "deletions": 20
          },
          "repo": "dashboard"
        },
        {
          "sha": "11c77d47",
          "subject": "Saved messages: folders, search, sorting; the list loads short summaries",
          "author": "SirMittens",
          "date": "2026-10-10T16:34:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 816,
            "deletions": 121
          },
          "repo": "dashboard"
        },
        {
          "sha": "43417e3c",
          "subject": "Plain commit list for AI assistants and scripts: /commits.txt, /commits.json, /llms.txt",
          "author": "SirMittens",
          "date": "2026-10-10T16:24:14.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 213,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "fbd25c99",
          "subject": "Applications and tickets: honest step count, dependent-rule warnings, public versus staff channel picture",
          "author": "SirMittens",
          "date": "2026-10-10T16:19:54.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 220,
            "deletions": 31
          },
          "repo": "dashboard"
        },
        {
          "sha": "b38ddcfb",
          "subject": "Trust page: refresh commit lists cheaply, say when they were updated, never cache the page",
          "author": "SirMittens",
          "date": "2026-10-10T16:12:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 193,
            "deletions": 56
          },
          "repo": "dashboard"
        },
        {
          "sha": "4b8f83fb",
          "subject": "Edit a posted message with the new editor, and make it easy to find",
          "author": "SirMittens",
          "date": "2026-10-10T16:04:50.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 866,
            "deletions": 134
          },
          "repo": "dashboard"
        },
        {
          "sha": "55858d3a",
          "subject": "Embeds: server banner by default, Blank canvas, tooltips no longer clipped",
          "author": "SirMittens",
          "date": "2026-10-10T15:48:57.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 132,
            "deletions": 13
          },
          "repo": "dashboard"
        },
        {
          "sha": "690bd28b",
          "subject": "Blocks panel: side-by-side blocks are one group with a bracket and chains",
          "author": "SirMittens",
          "date": "2026-10-10T15:40:05.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 331,
            "deletions": 25
          },
          "repo": "dashboard"
        },
        {
          "sha": "fa204247",
          "subject": "Embeds: every template ships with four pictures, ready-made pictures read friendly, edit cues and hover hints",
          "author": "SirMittens",
          "date": "2026-10-10T15:26:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 167,
            "deletions": 56
          },
          "repo": "dashboard"
        },
        {
          "sha": "d461790e",
          "subject": "Application review: stuck rows hidden, Remove from list, names instead of mentions",
          "author": "SirMittens",
          "date": "2026-10-10T15:16:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 204,
            "deletions": 12
          },
          "repo": "dashboard"
        },
        {
          "sha": "96353484",
          "subject": "Embeds: Blocks panel beside the preview; swap the Blank and What's new emoji",
          "author": "SirMittens",
          "date": "2026-10-10T15:05:36.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 51,
            "deletions": 47
          },
          "repo": "dashboard"
        },
        {
          "sha": "17a3c7d0",
          "subject": "Message editor rework: dotted slots, blocks panel, formatting, new templates, no info icons",
          "author": "SirMittens",
          "date": "2026-10-10T14:56:27.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1005,
            "deletions": 451
          },
          "repo": "dashboard"
        },
        {
          "sha": "186775e3",
          "subject": "Message editor: simpler, and every Discord embed option",
          "author": "SirMittens",
          "date": "2026-10-10T14:12:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 495,
            "deletions": 391
          },
          "repo": "dashboard"
        },
        {
          "sha": "aa438e99",
          "subject": "Embeds page rebuilt in the Applications/Tickets style; smarter Insert chips",
          "author": "SirMittens",
          "date": "2026-10-10T14:04:20.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 597,
            "deletions": 222
          },
          "repo": "dashboard"
        },
        {
          "sha": "1a2c0242",
          "subject": "Messages: shared message engine and visual editor, Embeds page rebuilt on it",
          "author": "SirMittens",
          "date": "2026-10-10T13:46:05.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1089,
            "deletions": 63
          },
          "repo": "dashboard"
        },
        {
          "sha": "3bb8872b",
          "subject": "Applications edit screen: same step-by-step layout with an Overview first as tickets",
          "author": "SirMittens",
          "date": "2026-10-10T12:50:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 233,
            "deletions": 154
          },
          "repo": "dashboard"
        },
        {
          "sha": "7e2f22d3",
          "subject": "Edit screen save bar: match the card colour, run to its edges and actually stick to the screen",
          "author": "SirMittens",
          "date": "2026-10-10T12:47:11.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 6,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "1af51439",
          "subject": "Tickets edit screen: step-by-step layout with an Overview first, info notes instead of helper paragraphs, Back/Next and a save bar with unsaved-changes marker",
          "author": "SirMittens",
          "date": "2026-10-10T12:42:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 351,
            "deletions": 142
          },
          "repo": "dashboard"
        },
        {
          "sha": "00c58572",
          "subject": "Make the post-the-button step's route visible to the api-wiring check",
          "author": "SirMittens",
          "date": "2026-10-10T10:22:54.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 3,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "fc6d8407",
          "subject": "Automated tests: API and logic tests, application decision tests, and browser-simulation tests for the Applications and Tickets pages (npm test, npm run test:ui)",
          "author": "SirMittens",
          "date": "2026-10-10T04:43:37.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2110,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "f5ec7a47",
          "subject": "Tickets: visible switch to turn the popup off under the questions (edit form and walkthrough), emoji on the how-members-answer line",
          "author": "SirMittens",
          "date": "2026-10-10T04:25:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 29,
            "deletions": 16
          },
          "repo": "dashboard"
        },
        {
          "sha": "2cedcc19",
          "subject": "Tickets: routing by answer, close reason, auto-close and reminder settings, saved replies (editor and API)",
          "author": "SirMittens",
          "date": "2026-10-10T04:19:17.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 545,
            "deletions": 22
          },
          "repo": "dashboard"
        },
        {
          "sha": "445b7d9b",
          "subject": "Tickets: explicit warning and save-time confirmation when a form outgrows the popup",
          "author": "SirMittens",
          "date": "2026-10-10T04:09:12.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 53,
            "deletions": 4
          },
          "repo": "dashboard"
        },
        {
          "sha": "8884d70d",
          "subject": "Tickets: question editor with dropdowns, optional questions and rules; popup or step-by-step status line and preview; unfinished-ticket timeout; question limits and Premium row; API validation",
          "author": "SirMittens",
          "date": "2026-10-10T04:06:25.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 364,
            "deletions": 87
          },
          "repo": "dashboard"
        },
        {
          "sha": "b90ebdc3",
          "subject": "Friendlier message when the dashboard needs a refresh after an update",
          "author": "SirMittens",
          "date": "2026-10-10T03:56:52.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 6,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "df53368b",
          "subject": "Reload once automatically when a page file is missing after a new deploy, instead of showing 'Something broke'",
          "author": "SirMittens",
          "date": "2026-10-10T03:54:56.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 45,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "fbea804d",
          "subject": "Tickets page redo (part 1): health check, template walkthrough with variants, Post ticket button, basic vs more options",
          "author": "SirMittens",
          "date": "2026-10-10T03:41:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 639,
            "deletions": 138
          },
          "repo": "dashboard"
        },
        {
          "sha": "76206358",
          "subject": "Application question limits: up to 100 defined, free plan limits questions asked per applicant (20) instead of total, editor counter and tip, Premium page updated",
          "author": "SirMittens",
          "date": "2026-10-10T03:14:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 215,
            "deletions": 25
          },
          "repo": "dashboard"
        },
        {
          "sha": "723288be",
          "subject": "New application templates: grouped picker with variants (staff by role, creator, join with how-they-found-you, ban appeal agree/disagree, partnership) using dropdowns and rules",
          "author": "SirMittens",
          "date": "2026-10-10T03:01:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 301,
            "deletions": 80
          },
          "repo": "dashboard"
        },
        {
          "sha": "b9d97ad3",
          "subject": "Trust page: don't cache a failed commit-history fetch; keep showing the last good list",
          "author": "SirMittens",
          "date": "2026-10-10T02:51:25.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "518d1910",
          "subject": "Application question rules: Rules block in the question editor (several rules, match all/any, earlier questions only), checks and warnings, preview path picker, API validation",
          "author": "SirMittens",
          "date": "2026-10-10T02:50:20.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 256,
            "deletions": 6
          },
          "repo": "dashboard"
        },
        {
          "sha": "9f6d9ef6",
          "subject": "Application question editor (box per question, dropdowns, optional, help text, reorder), applicant preview, time limit and confirm message settings; API validation for the new question format",
          "author": "SirMittens",
          "date": "2026-10-10T02:32:16.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 544,
            "deletions": 75
          },
          "repo": "dashboard"
        },
        {
          "sha": "2acdfb14",
          "subject": "New application walkthrough: say where the advanced options are, and add Create and open all options",
          "author": "SirMittens",
          "date": "2026-10-10T02:21:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 32,
            "deletions": 9
          },
          "repo": "dashboard"
        },
        {
          "sha": "cac13c59",
          "subject": "Applications page redo (part 1): Review/Setup tabs, setup health check, template-based new application walkthrough, Post Apply button action, basic vs more options on the type form",
          "author": "SirMittens",
          "date": "2026-10-10T02:14:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 635,
            "deletions": 156
          },
          "repo": "dashboard"
        },
        {
          "sha": "849171b7",
          "subject": "Remove the Tickets Transcript Format setting: the bot never read it",
          "author": "SirMittens",
          "date": "2026-10-10T01:48:48.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 31
          },
          "repo": "dashboard"
        },
        {
          "sha": "5b96f0ed",
          "subject": "Application decisions: DM only, fold into review message, Decision Logs settings and notes",
          "author": "SirMittens",
          "date": "2026-10-10T01:40:52.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 80,
            "deletions": 29
          },
          "repo": "dashboard"
        },
        {
          "sha": "71f7eae5",
          "subject": "Application transcript page fills the screen instead of a small scrolling frame",
          "author": "SirMittens",
          "date": "2026-10-10T01:26:25.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 15,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "7f03b382",
          "subject": "Application review channel is optional; Logs page explains it is the default",
          "author": "SirMittens",
          "date": "2026-10-10T01:21:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 5,
            "deletions": 5
          },
          "repo": "dashboard"
        },
        {
          "sha": "238ad91c",
          "subject": "Decide: skip Discord steps cleanly for applications with no review message",
          "author": "SirMittens",
          "date": "2026-10-10T01:15:43.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 4,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "f6754fba",
          "subject": "Dashboard approve/deny: same short decision message with a transcript button; remove the retired Transcript Format setting from Applications",
          "author": "SirMittens",
          "date": "2026-10-10T01:01:13.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 8,
            "deletions": 47
          },
          "repo": "dashboard"
        },
        {
          "sha": "4baec327",
          "subject": "Split App.jsx into per-page lazy modules; unsaved-changes warning; Insights clusters; Settings group in the sidebar",
          "author": "SirMittens",
          "date": "2026-10-09T15:17:18.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 11279,
            "deletions": 10997
          },
          "repo": "dashboard"
        },
        {
          "sha": "a4cfc695",
          "subject": "Navigation: Ticket & App History and Roles join Community; 'Automation' group renamed Tools",
          "author": "SirMittens",
          "date": "2026-10-09T14:58:26.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 15,
            "deletions": 15
          },
          "repo": "dashboard"
        },
        {
          "sha": "9754ee80",
          "subject": "Open audit items: premium code throttle + atomic redemption, Quick Setup respects page permissions, accessibility pass",
          "author": "SirMittens",
          "date": "2026-10-09T14:47:50.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 246,
            "deletions": 74
          },
          "repo": "dashboard"
        },
        {
          "sha": "5ea246dd",
          "subject": "Reliable decisions and visible failures: atomic dashboard accept/deny, toasts, confirm dialog, session expiry banner, hash navigation, names in history",
          "author": "SirMittens",
          "date": "2026-10-09T14:22:08.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 470,
            "deletions": 114
          },
          "repo": "dashboard"
        },
        {
          "sha": "7b432e74",
          "subject": "Security: verify channel ids belong to the server, session expiry + OAuth state, crypto randomness, escape transcript URLs",
          "author": "SirMittens",
          "date": "2026-10-09T14:12:53.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 175,
            "deletions": 25
          },
          "repo": "dashboard"
        },
        {
          "sha": "e66c5a62",
          "subject": "Application type staff roles, staff stats ticket filter",
          "author": "SirMittens",
          "date": "2026-10-09T13:51:49.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 91,
            "deletions": 22
          },
          "repo": "dashboard"
        },
        {
          "sha": "0f15d539",
          "subject": "Application tickets view, application ticket log setting, keep interview tickets open on dashboard decisions",
          "author": "SirMittens",
          "date": "2026-10-09T13:23:57.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 73,
            "deletions": 14
          },
          "repo": "dashboard"
        },
        {
          "sha": "20f6b1e4",
          "subject": "Read custom_id from the capture when verifying a PayPal order",
          "author": "SirMittens",
          "date": "2026-10-01T19:03:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 3,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "57dc6f87",
          "subject": "Restrict Premium page and PayPal endpoints to bot owners while checkout is tested",
          "author": "SirMittens",
          "date": "2026-10-01T14:55:44.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 28,
            "deletions": 14
          },
          "repo": "dashboard"
        },
        {
          "sha": "970ce460",
          "subject": "Enable PayPal payments on premium page for sandbox testing",
          "author": "SirMittens",
          "date": "2026-10-01T14:26:14.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "5c4730d8",
          "subject": "Explain exactly what each Quick Setup template turns on",
          "author": "Sir Mittens",
          "date": "2026-09-24T03:19:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 28,
            "deletions": 4
          },
          "repo": "dashboard"
        },
        {
          "sha": "5394219b",
          "subject": "Empty-state wording pass -- teach the next step, not just \"nothing here\"",
          "author": "Sir Mittens",
          "date": "2026-09-24T03:05:54.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 16,
            "deletions": 16
          },
          "repo": "dashboard"
        },
        {
          "sha": "59ed2515",
          "subject": "Turn Quick Setup into an actual guided wizard for brand-new servers",
          "author": "Sir Mittens",
          "date": "2026-09-24T02:50:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 168,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "da52a25c",
          "subject": "Add a one-line description to each Feature Toggle instead of just a bare label",
          "author": "Sir Mittens",
          "date": "2026-09-24T02:36:39.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 64,
            "deletions": 19
          },
          "repo": "dashboard"
        },
        {
          "sha": "4a7a32e6",
          "subject": "Rename Server Logs page to Ticket & App History to stop it colliding with Log Channels",
          "author": "Sir Mittens",
          "date": "2026-09-24T02:30:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 4,
            "deletions": 4
          },
          "repo": "dashboard"
        },
        {
          "sha": "8c56614c",
          "subject": "Group Server Setup's 16 flat tabs into categories, and fix a wording pass",
          "author": "Sir Mittens",
          "date": "2026-09-24T02:22:59.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 71,
            "deletions": 27
          },
          "repo": "dashboard"
        },
        {
          "sha": "d9f03192",
          "subject": "Add a toggle for exempting regex commands from Auto-Mod's duplicate-message filter",
          "author": "Sir Mittens",
          "date": "2026-09-24T01:57:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 50,
            "deletions": 10
          },
          "repo": "dashboard"
        },
        {
          "sha": "ea177be1",
          "subject": "Fix confusing Regex toggle on Custom Commands — button now always says Regex, current mode shown separately",
          "author": "Sir Mittens",
          "date": "2026-09-24T01:47:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 5,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "92bee039",
          "subject": "Add guardrails to Scam Trap channel setup",
          "author": "Sir Mittens",
          "date": "2026-09-24T01:34:39.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 83,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "ca8a41b9",
          "subject": "Add a per-type checkbox to delete the review message on accept/deny",
          "author": "Sir Mittens",
          "date": "2026-09-21T17:38:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 22,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "037e76ab",
          "subject": "Update ticket channel name pattern placeholder to match the new {emoji}-leading default",
          "author": "Sir Mittens",
          "date": "2026-09-21T17:33:20.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "6c319a25",
          "subject": "Decode the typeId route param server-side — Cloudflare Pages Functions doesn't do it automatically",
          "author": "Sir Mittens",
          "date": "2026-09-21T16:42:37.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 8,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "9e530baf",
          "subject": "Fix ticket/application type edits silently not saving when the short id has special characters",
          "author": "Sir Mittens",
          "date": "2026-09-21T16:31:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 37,
            "deletions": 12
          },
          "repo": "dashboard"
        },
        {
          "sha": "ff1dfd6f",
          "subject": "Add a hint under ticket/application type emoji fields that custom server emoji won't render in channel names",
          "author": "Sir Mittens",
          "date": "2026-09-21T13:49:05.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "edc54010",
          "subject": "Apply card design system to remaining Server Setup, Insights, and Admin sections",
          "author": "Sir Mittens",
          "date": "2026-09-15T07:24:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 201,
            "deletions": 159
          },
          "repo": "dashboard"
        },
        {
          "sha": "40a5fd40",
          "subject": "Restore hover-lift on cards/section headers/nav items via delayed transition, not removal",
          "author": "Sir Mittens",
          "date": "2026-09-15T07:15:37.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 25,
            "deletions": 23
          },
          "repo": "dashboard"
        },
        {
          "sha": "135b4c56",
          "subject": "Fix scroll jitter on section-heavy pages; use bundled logo in transcripts",
          "author": "Sir Mittens",
          "date": "2026-09-15T07:09:19.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 24,
            "deletions": 9
          },
          "repo": "dashboard"
        },
        {
          "sha": "c7eee8b3",
          "subject": "Apply card design system to Server Logs, Log Channels, Roles, Webhooks, Embeds; redesign the tab-bar",
          "author": "Sir Mittens",
          "date": "2026-09-15T06:46:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 183,
            "deletions": 177
          },
          "repo": "dashboard"
        },
        {
          "sha": "38fb75f3",
          "subject": "Make the section badge solid gold instead of a muddy tinted mix",
          "author": "Sir Mittens",
          "date": "2026-09-15T06:35:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "d5158961",
          "subject": "Make Terms/Privacy section badge always stack above the heading",
          "author": "Sir Mittens",
          "date": "2026-09-15T06:33:03.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 31,
            "deletions": 45
          },
          "repo": "dashboard"
        },
        {
          "sha": "1e1f938d",
          "subject": "Fix legal pages rendering wrong on mobile Chrome; stack the section badge",
          "author": "Sir Mittens",
          "date": "2026-09-15T06:26:57.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 29,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "2eff36e0",
          "subject": "Fix trust page's stale-commit reload bug; redesign legal pages; polish Panel Permissions/Premium",
          "author": "Sir Mittens",
          "date": "2026-09-15T06:21:55.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 495,
            "deletions": 262
          },
          "repo": "dashboard"
        },
        {
          "sha": "f4e70148",
          "subject": "Polish Panel Permissions controls; fix sidebar nav hover flicker",
          "author": "Sir Mittens",
          "date": "2026-09-15T06:11:39.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 19,
            "deletions": 12
          },
          "repo": "dashboard"
        },
        {
          "sha": "5fe234a6",
          "subject": "Apply card design system to remaining admin pages; fix Panel Permissions' resource picker",
          "author": "Sir Mittens",
          "date": "2026-09-15T06:06:54.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 88,
            "deletions": 108
          },
          "repo": "dashboard"
        },
        {
          "sha": "aaca3644",
          "subject": "Add a scroll-down hint to the nav list to replace the hidden scrollbar",
          "author": "Sir Mittens",
          "date": "2026-09-15T05:56:36.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 44,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "00bf8e67",
          "subject": "Fix Premium page emojis/table and sidebar nav layout bugs",
          "author": "Sir Mittens",
          "date": "2026-09-15T05:52:50.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 98,
            "deletions": 38
          },
          "repo": "dashboard"
        },
        {
          "sha": "cb699a8d",
          "subject": "Apply card design system to Overview, Guide, Panel Permissions, Welcome, Giveaways, Premium; refresh sidebar nav",
          "author": "Sir Mittens",
          "date": "2026-09-15T05:42:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 184,
            "deletions": 222
          },
          "repo": "dashboard"
        },
        {
          "sha": "303f6c5f",
          "subject": "Fix press feedback eating clicks near button edges",
          "author": "Sir Mittens",
          "date": "2026-09-15T05:31:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 22,
            "deletions": 17
          },
          "repo": "dashboard"
        },
        {
          "sha": "e279fa92",
          "subject": "Drop the Add a Command box's fill — border only, matches page background",
          "author": "Sir Mittens",
          "date": "2026-09-15T05:28:43.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "e735db3d",
          "subject": "Polish Custom Commands: fix out-of-place dark box, modernize toggles",
          "author": "Sir Mittens",
          "date": "2026-09-15T05:25:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 53,
            "deletions": 25
          },
          "repo": "dashboard"
        },
        {
          "sha": "5d3bba0b",
          "subject": "Declutter the Custom Commands form",
          "author": "Sir Mittens",
          "date": "2026-09-15T05:19:27.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 81,
            "deletions": 56
          },
          "repo": "dashboard"
        },
        {
          "sha": "a1356640",
          "subject": "Apply card design system to Applications and Custom Commands pages",
          "author": "Sir Mittens",
          "date": "2026-09-15T05:14:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 106,
            "deletions": 103
          },
          "repo": "dashboard"
        },
        {
          "sha": "e7b66bd9",
          "subject": "Reserve scrollbar gutter to stop page shift on section toggle",
          "author": "Sir Mittens",
          "date": "2026-09-15T04:58:59.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "30b7d86d",
          "subject": "Slow down and smooth the section fade-in and hover-lift transitions",
          "author": "Sir Mittens",
          "date": "2026-09-15T04:46:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 4,
            "deletions": 4
          },
          "repo": "dashboard"
        },
        {
          "sha": "784ae425",
          "subject": "Drop the section height-animation for a compositor-only fade instead",
          "author": "Sir Mittens",
          "date": "2026-09-15T04:36:52.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 16,
            "deletions": 41
          },
          "repo": "dashboard"
        },
        {
          "sha": "b070111b",
          "subject": "Fix hover-lift never showing and jittery press feedback",
          "author": "Sir Mittens",
          "date": "2026-09-15T04:26:45.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 13,
            "deletions": 4
          },
          "repo": "dashboard"
        },
        {
          "sha": "0a8ec8b8",
          "subject": "Fix collapsible section jitter with a measured-height animation",
          "author": "Sir Mittens",
          "date": "2026-09-15T04:19:08.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 45,
            "deletions": 11
          },
          "repo": "dashboard"
        },
        {
          "sha": "c194d9dc",
          "subject": "Add smooth section expand/collapse, staggered card entrance, hover lift, focus outlines",
          "author": "Sir Mittens",
          "date": "2026-09-15T04:10:19.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 27,
            "deletions": 7
          },
          "repo": "dashboard"
        },
        {
          "sha": "1fd171b2",
          "subject": "Simplify Document and Embed icons to plain silhouettes like the ticket one",
          "author": "Sir Mittens",
          "date": "2026-09-15T04:03:27.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 4,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "c6e21959",
          "subject": "Bump icon size/stroke and simplify shapes after first look was too muddy",
          "author": "Sir Mittens",
          "date": "2026-09-15T03:58:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 7
          },
          "repo": "dashboard"
        },
        {
          "sha": "1d3b3db8",
          "subject": "Replace Tickets page emoji with gold SVG line icons",
          "author": "Sir Mittens",
          "date": "2026-09-15T03:54:19.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 47,
            "deletions": 7
          },
          "repo": "dashboard"
        },
        {
          "sha": "bd4d5194",
          "subject": "Add empty states, skeleton loading, section counts, and card entrance animation",
          "author": "Sir Mittens",
          "date": "2026-09-15T03:40:15.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 60,
            "deletions": 5
          },
          "repo": "dashboard"
        },
        {
          "sha": "79da81ca",
          "subject": "Modernize collapsible section headers, fix selected-server contrast, use Discord's default install link",
          "author": "Sir Mittens",
          "date": "2026-09-15T03:32:16.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 40,
            "deletions": 18
          },
          "repo": "dashboard"
        },
        {
          "sha": "5aed9e1a",
          "subject": "Migrate the Tickets page (and Applications' shared panel list) to Card",
          "author": "Sir Mittens",
          "date": "2026-09-15T03:25:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 84,
            "deletions": 66
          },
          "repo": "dashboard"
        },
        {
          "sha": "bb32b98b",
          "subject": "Add a shared Card component for the Automations-style card look",
          "author": "Sir Mittens",
          "date": "2026-09-15T03:20:15.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 43,
            "deletions": 9
          },
          "repo": "dashboard"
        },
        {
          "sha": "561afd8f",
          "subject": "Add embedded Quick Setup banners to Anti-Raid and Verification tabs",
          "author": "Sir Mittens",
          "date": "2026-09-15T03:13:33.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 41,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "8d7ad9ca",
          "subject": "Modernize the 3 Overview quick-setup templates with newer safe features",
          "author": "Sir Mittens",
          "date": "2026-09-15T03:13:33.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 39,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "56ff935f",
          "subject": "Carry the rule-card visual language into GuildPicker",
          "author": "Sir Mittens",
          "date": "2026-09-15T02:58:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 32,
            "deletions": 28
          },
          "repo": "dashboard"
        },
        {
          "sha": "5ac3b0ea",
          "subject": "Restyle server cards to match the Automations rule-card look",
          "author": "Sir Mittens",
          "date": "2026-09-15T02:50:37.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 45,
            "deletions": 60
          },
          "repo": "dashboard"
        },
        {
          "sha": "d54cec9a",
          "subject": "Retry Discord API calls on 429 instead of failing outright",
          "author": "Sir Mittens",
          "date": "2026-09-15T02:50:37.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 14,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "6dfa443c",
          "subject": "Turn the Admin page's server list into cards instead of a scrolling table",
          "author": "Sir Mittens",
          "date": "2026-09-15T02:39:55.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 56,
            "deletions": 57
          },
          "repo": "dashboard"
        },
        {
          "sha": "b4a2deb6",
          "subject": "Add a root-admin-only System Webhooks page",
          "author": "Sir Mittens",
          "date": "2026-09-15T02:29:20.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 81,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "1674f963",
          "subject": "Replace admin grants' synthetic premium_codes rows with a real audit table",
          "author": "Sir Mittens",
          "date": "2026-09-15T01:45:03.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 78,
            "deletions": 53
          },
          "repo": "dashboard"
        },
        {
          "sha": "5fd6171d",
          "subject": "Fetch commit pages in parallel instead of sequentially",
          "author": "Sir Mittens",
          "date": "2026-09-15T01:02:15.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 34,
            "deletions": 23
          },
          "repo": "dashboard"
        },
        {
          "sha": "5ea14f69",
          "subject": "Fix crash from old-format cache entries surviving the stale-while-revalidate change",
          "author": "Sir Mittens",
          "date": "2026-09-14T17:28:57.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "6b53b7b3",
          "subject": "Serve /trust's commit history stale-while-revalidate instead of blocking",
          "author": "Sir Mittens",
          "date": "2026-09-14T17:19:10.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 29,
            "deletions": 8
          },
          "repo": "dashboard"
        },
        {
          "sha": "dda1e769",
          "subject": "Document automation placeholders on the DM actions too",
          "author": "Sir Mittens",
          "date": "2026-09-14T17:04:36.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 13,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "54451430",
          "subject": "Fix trust page repo paths after the group move, and stale lockdown/permission info",
          "author": "Sir Mittens",
          "date": "2026-09-14T17:04:36.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 6
          },
          "repo": "dashboard"
        },
        {
          "sha": "2b575246",
          "subject": "Exclude synthetic admin-grant/PayPal codes from the Manage Codes list",
          "author": "Sir Mittens",
          "date": "2026-09-14T17:04:36.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 10,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "d6cafbed",
          "subject": "Add missing pending states, stable keys, and load-error handling",
          "author": "Sir Mittens",
          "date": "2026-09-12T00:29:17.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 621,
            "deletions": 295
          },
          "repo": "dashboard"
        },
        {
          "sha": "737328ab",
          "subject": "Close FloatingPanel popovers on outside click/Escape, clamp vertically",
          "author": "Sir Mittens",
          "date": "2026-09-11T22:06:33.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 33,
            "deletions": 5
          },
          "repo": "dashboard"
        },
        {
          "sha": "970903c4",
          "subject": "Make panel-permissions save atomic and validate resource/role ids",
          "author": "Sir Mittens",
          "date": "2026-09-11T22:02:20.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 28,
            "deletions": 8
          },
          "repo": "dashboard"
        },
        {
          "sha": "93e8a3d9",
          "subject": "Fix RuleCard's Enable/Disable/Delete buttons getting stuck permanently disabled",
          "author": "Sir Mittens",
          "date": "2026-09-11T21:59:39.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 19,
            "deletions": 8
          },
          "repo": "dashboard"
        },
        {
          "sha": "fc91c028",
          "subject": "Fix free-tier limit and custom-command limit bypasses on rule edit",
          "author": "Sir Mittens",
          "date": "2026-09-11T21:57:50.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 34,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "448f2ad6",
          "subject": "Close free-tier limit race and custom-command trigger-collision gap",
          "author": "Sir Mittens",
          "date": "2026-09-11T21:54:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 59,
            "deletions": 30
          },
          "repo": "dashboard"
        },
        {
          "sha": "1495ae2c",
          "subject": "Fix Auto-Role/Sticky-Roles/Custom-Commands permission checks not matching real data access",
          "author": "Sir Mittens",
          "date": "2026-09-11T21:50:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 50,
            "deletions": 11
          },
          "repo": "dashboard"
        },
        {
          "sha": "ac11f49e",
          "subject": "Add a click-to-try examples helper for Custom Commands' {if} syntax",
          "author": "Sir Mittens",
          "date": "2026-09-11T21:03:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 69,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "b7428ba9",
          "subject": "Document the new {if}/{else} template syntax in action/command help text",
          "author": "Sir Mittens",
          "date": "2026-09-11T20:41:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 5,
            "deletions": 4
          },
          "repo": "dashboard"
        },
        {
          "sha": "4b40991e",
          "subject": "Add a flagship Automations banner to the landing page, small copy edits",
          "author": "Sir Mittens",
          "date": "2026-09-11T20:27:04.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 100,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "5082b740",
          "subject": "Shrink the inline Powered-by-Automations badge in the docs copy",
          "author": "Sir Mittens",
          "date": "2026-09-11T18:51:25.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 5
          },
          "repo": "dashboard"
        },
        {
          "sha": "d1ddfc6d",
          "subject": "Surface role/channel/type fetch failures in the rule builder",
          "author": "Sir Mittens",
          "date": "2026-09-11T18:35:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 38,
            "deletions": 12
          },
          "repo": "dashboard"
        },
        {
          "sha": "430e9b16",
          "subject": "Group triggers by category, fix Automations UX/design audit findings",
          "author": "Sir Mittens",
          "date": "2026-09-11T18:27:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 178,
            "deletions": 45
          },
          "repo": "dashboard"
        },
        {
          "sha": "681ffdfc",
          "subject": "v3: Tickets/Applications conditions + recipe search",
          "author": "Sir Mittens",
          "date": "2026-09-11T16:42:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 118,
            "deletions": 9
          },
          "repo": "dashboard"
        },
        {
          "sha": "c9627f03",
          "subject": "Redesign \"Your Rules\" as proper cards instead of flat list rows",
          "author": "Sir Mittens",
          "date": "2026-09-11T15:44:51.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 27,
            "deletions": 7
          },
          "repo": "dashboard"
        },
        {
          "sha": "09da6f33",
          "subject": "Give Automations flagship visual treatment: promoted nav spot + hero redesign",
          "author": "Sir Mittens",
          "date": "2026-09-11T15:29:35.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 145,
            "deletions": 69
          },
          "repo": "dashboard"
        },
        {
          "sha": "1a15cb1d",
          "subject": "Fix stale \"Built-in toggle\" docs text, add the Tickets/Apps boundary note",
          "author": "Sir Mittens",
          "date": "2026-09-11T15:00:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 10,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "d6043966",
          "subject": "Add a prominent \"Powered by Automations\" badge to the three quick-edit pages",
          "author": "Sir Mittens",
          "date": "2026-09-11T14:57:59.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 26,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "b9830e93",
          "subject": "Give the \"Open in Automations\" button a distinct, consistent look",
          "author": "Sir Mittens",
          "date": "2026-09-11T14:42:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 31,
            "deletions": 12
          },
          "repo": "dashboard"
        },
        {
          "sha": "654f643e",
          "subject": "Add the missing \"Open in Automations\" button for non-customized commands",
          "author": "Sir Mittens",
          "date": "2026-09-11T14:39:02.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 6,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "6b31773e",
          "subject": "Retire the dedicated Sticky Roles + Custom Commands backends",
          "author": "Sir Mittens",
          "date": "2026-09-11T14:29:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 318,
            "deletions": 309
          },
          "repo": "dashboard"
        },
        {
          "sha": "c8ad455c",
          "subject": "Add a real \"Open in Automations\" button, deep-linking to the exact rule",
          "author": "Sir Mittens",
          "date": "2026-09-11T06:08:06.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 67,
            "deletions": 14
          },
          "repo": "dashboard"
        },
        {
          "sha": "5b48ad4d",
          "subject": "Add the missing \"open in full builder\" hint to Auto-Role's quick form",
          "author": "Sir Mittens",
          "date": "2026-09-11T05:55:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 17,
            "deletions": 9
          },
          "repo": "dashboard"
        },
        {
          "sha": "5e1ee077",
          "subject": "Retire the dedicated Auto-Role backend — quick-edit form rides Automations directly",
          "author": "Sir Mittens",
          "date": "2026-09-11T05:45:14.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 118,
            "deletions": 75
          },
          "repo": "dashboard"
        },
        {
          "sha": "90fc72b6",
          "subject": "Require an explicit channel for send_message/send_embed on channel-less triggers",
          "author": "Sir Mittens",
          "date": "2026-09-11T04:45:59.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 37,
            "deletions": 16
          },
          "repo": "dashboard"
        },
        {
          "sha": "60dd39df",
          "subject": "Fix: recipe/from-scratch rule creation hit PATCH /automations/undefined",
          "author": "Sir Mittens",
          "date": "2026-09-11T04:25:45.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 6,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "0807b18d",
          "subject": "Make recipes free-and-editable, converting to a full rule only on shape change",
          "author": "Sir Mittens",
          "date": "2026-09-11T03:53:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 155,
            "deletions": 14
          },
          "repo": "dashboard"
        },
        {
          "sha": "0931a6e6",
          "subject": "Add Automations engine v2 (dashboard) — operators, OR-groups, real embeds",
          "author": "Sir Mittens",
          "date": "2026-09-11T03:10:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 417,
            "deletions": 101
          },
          "repo": "dashboard"
        },
        {
          "sha": "358dcc15",
          "subject": "Add Automations engine v1 — dashboard builder UI + API",
          "author": "Sir Mittens",
          "date": "2026-09-11T02:15:39.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 958,
            "deletions": 7
          },
          "repo": "dashboard"
        },
        {
          "sha": "e02c6f39",
          "subject": "Add self-maintaining Security History section to /trust",
          "author": "Sir Mittens",
          "date": "2026-09-11T00:28:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 36,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "124b004c",
          "subject": "Add OAuth permissions table to /trust; hardcode the invite link's bitfield",
          "author": "Sir Mittens",
          "date": "2026-09-11T00:21:46.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 24,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "0a0a5596",
          "subject": "Trust page: explicit moderation/ban/auto-suspension detail + expiry update",
          "author": "Sir Mittens",
          "date": "2026-09-10T23:53:09.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 13,
            "deletions": 4
          },
          "repo": "dashboard"
        },
        {
          "sha": "a918058a",
          "subject": "Add Trust & Transparency page: Trust Network, gateway intents, panel",
          "author": "Sir Mittens",
          "date": "2026-09-10T23:24:03.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 212,
            "deletions": 8
          },
          "repo": "dashboard"
        },
        {
          "sha": "68412e83",
          "subject": "Add per-delivery embed viewer + squirrel-proof onboarding to Webhooks page",
          "author": "Sir Mittens",
          "date": "2026-09-10T22:52:04.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 265,
            "deletions": 18
          },
          "repo": "dashboard"
        },
        {
          "sha": "aed51276",
          "subject": "Make Privacy Policy exhaustive; add robots.txt/sitemap for public legal pages",
          "author": "Sir Mittens",
          "date": "2026-09-10T22:32:19.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 51,
            "deletions": 24
          },
          "repo": "dashboard"
        },
        {
          "sha": "11b5c100",
          "subject": "Major webhook overhaul: delivery log, HMAC, routing, test preview, outbound",
          "author": "Sir Mittens",
          "date": "2026-09-10T22:14:26.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 937,
            "deletions": 44
          },
          "repo": "dashboard"
        },
        {
          "sha": "96c7817c",
          "subject": "Move deploy log events into a new \"Git\" section, add web panel deploys",
          "author": "Sir Mittens",
          "date": "2026-09-10T21:44:16.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "e4ad49c1",
          "subject": "Fix silent duplicate log channel rows for generic (non-per-type) events",
          "author": "Sir Mittens",
          "date": "2026-09-10T21:16:33.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 16,
            "deletions": 6
          },
          "repo": "dashboard"
        },
        {
          "sha": "f2321a23",
          "subject": "Move channel naming + delete delay from guild-wide settings to per type",
          "author": "Sir Mittens",
          "date": "2026-09-10T21:10:16.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 82,
            "deletions": 136
          },
          "repo": "dashboard"
        },
        {
          "sha": "38b6cb90",
          "subject": "Add emoji field + channel naming pattern for application types",
          "author": "Sir Mittens",
          "date": "2026-09-10T18:06:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 70,
            "deletions": 18
          },
          "repo": "dashboard"
        },
        {
          "sha": "8170cf4d",
          "subject": "Add channel name pattern setting, split it out from Transcript Format",
          "author": "Sir Mittens",
          "date": "2026-09-10T18:01:10.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 43,
            "deletions": 7
          },
          "repo": "dashboard"
        },
        {
          "sha": "1782b07f",
          "subject": "Auto-fill title/description/types when adopting an existing panel",
          "author": "Sir Mittens",
          "date": "2026-09-10T17:50:30.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 131,
            "deletions": 4
          },
          "repo": "dashboard"
        },
        {
          "sha": "eef8035a",
          "subject": "Fix stale ticket/application type edit form, add panel refresh/adopt",
          "author": "Sir Mittens",
          "date": "2026-09-10T17:44:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 502,
            "deletions": 172
          },
          "repo": "dashboard"
        },
        {
          "sha": "291ad1c6",
          "subject": "Add free \"use server's Discord banner\" mode alongside premium custom link",
          "author": "Sir Mittens",
          "date": "2026-09-09T23:51:47.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 39,
            "deletions": 15
          },
          "repo": "dashboard"
        },
        {
          "sha": "d621f108",
          "subject": "Add premium background-image field for the generated welcome banner",
          "author": "Sir Mittens",
          "date": "2026-09-09T23:48:18.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 31,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "d64c78ab",
          "subject": "Stop blocking the accept-role grant when accepting an application",
          "author": "Sir Mittens",
          "date": "2026-09-09T23:14:17.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 6,
            "deletions": 5
          },
          "repo": "dashboard"
        },
        {
          "sha": "d2db29be",
          "subject": "Add button-only mode to Rules Gate for servers with pre-existing rules posts",
          "author": "Sir Mittens",
          "date": "2026-09-09T20:59:48.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 40,
            "deletions": 19
          },
          "repo": "dashboard"
        },
        {
          "sha": "5c524355",
          "subject": "Fix real permission bug: a dynamic grant is now authoritative over revocation",
          "author": "Sir Mittens",
          "date": "2026-09-09T05:02:18.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 46,
            "deletions": 18
          },
          "repo": "dashboard"
        },
        {
          "sha": "24fc93d8",
          "subject": "Lockdown page: change a person's role in place, no delete-then-re-add",
          "author": "Sir Mittens",
          "date": "2026-09-09T04:49:29.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 62,
            "deletions": 10
          },
          "repo": "dashboard"
        },
        {
          "sha": "35be85e4",
          "subject": "Lockdown page: show and revoke static env-var owners too",
          "author": "Sir Mittens",
          "date": "2026-09-09T04:33:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 103,
            "deletions": 27
          },
          "repo": "dashboard"
        },
        {
          "sha": "915bfb32",
          "subject": "Add root-admin lockdown page: dynamic owner/admin list + emergency pause",
          "author": "Sir Mittens",
          "date": "2026-09-09T04:17:40.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 346,
            "deletions": 43
          },
          "repo": "dashboard"
        },
        {
          "sha": "0f00f13c",
          "subject": "Use opaque webhook UUID instead of sequential id in displayed URL",
          "author": "Sir Mittens",
          "date": "2026-09-09T02:25:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 5
          },
          "repo": "dashboard"
        },
        {
          "sha": "bcd77cde",
          "subject": "Persist selected server across page navigation",
          "author": "Sir Mittens",
          "date": "2026-09-09T01:29:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 45,
            "deletions": 16
          },
          "repo": "dashboard"
        },
        {
          "sha": "3618afa0",
          "subject": "Fix legal-doc feedback and harden config template codes",
          "author": "Sir Mittens",
          "date": "2026-09-09T01:06:25.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 19,
            "deletions": 10
          },
          "repo": "dashboard"
        },
        {
          "sha": "9aa18503",
          "subject": "Remove ToS governing-law clause; correct Privacy Policy on backup retention",
          "author": "Sir Mittens",
          "date": "2026-09-09T00:43:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 6,
            "deletions": 8
          },
          "repo": "dashboard"
        },
        {
          "sha": "0a07be33",
          "subject": "Give the landing page its own full-width dark identity",
          "author": "Sir Mittens",
          "date": "2026-09-08T22:25:39.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 34,
            "deletions": 34
          },
          "repo": "dashboard"
        },
        {
          "sha": "d64cc04f",
          "subject": "Make the landing page feature showcase interactive",
          "author": "Sir Mittens",
          "date": "2026-09-08T22:18:56.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 192,
            "deletions": 17
          },
          "repo": "dashboard"
        },
        {
          "sha": "4d37339c",
          "subject": "Add feature showcase grid to the logged-out landing page",
          "author": "Sir Mittens",
          "date": "2026-09-08T22:11:09.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 89,
            "deletions": 88
          },
          "repo": "dashboard"
        },
        {
          "sha": "53094275",
          "subject": "Add Terms/Privacy links to sidebar and landing page; refresh stale landing copy",
          "author": "Sir Mittens",
          "date": "2026-09-08T21:52:37.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 65,
            "deletions": 13
          },
          "repo": "dashboard"
        },
        {
          "sha": "508da6e2",
          "subject": "Restore Terms of Service and Privacy Policy as public dashboard pages",
          "author": "Sir Mittens",
          "date": "2026-09-08T21:45:43.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 249,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "99582e94",
          "subject": "Add Scam Trap decoy-channel config tab to Server Setup",
          "author": "Sir Mittens",
          "date": "2026-09-08T21:09:54.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 85,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "85d00fa4",
          "subject": "Add cooldown/channel/role restrictions and an action to the Custom Commands form",
          "author": "Sir Mittens",
          "date": "2026-09-08T20:33:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 118,
            "deletions": 8
          },
          "repo": "dashboard"
        },
        {
          "sha": "8de2ac26",
          "subject": "Add server referral program: dashboard submission UI + activity feed",
          "author": "Sir Mittens",
          "date": "2026-09-08T20:16:14.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 239,
            "deletions": 11
          },
          "repo": "dashboard"
        },
        {
          "sha": "05960635",
          "subject": "Rich embed DMs for grant/revoke, separate internal vs. owner-facing reasons",
          "author": "Sir Mittens",
          "date": "2026-09-08T19:31:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 90,
            "deletions": 27
          },
          "repo": "dashboard"
        },
        {
          "sha": "9fbf2ab7",
          "subject": "Add Grant Premium to the Admin page",
          "author": "Sir Mittens",
          "date": "2026-09-08T19:22:56.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 182,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "d281f715",
          "subject": "Revert destination-owner requirement on premium transfer per feedback",
          "author": "Sir Mittens",
          "date": "2026-09-08T18:47:30.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 5,
            "deletions": 8
          },
          "repo": "dashboard"
        },
        {
          "sha": "85dd7a6c",
          "subject": "Require real owner on both ends of a premium transfer, not just the source",
          "author": "Sir Mittens",
          "date": "2026-09-08T18:46:16.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 9,
            "deletions": 8
          },
          "repo": "dashboard"
        },
        {
          "sha": "5e803ef6",
          "subject": "Add premium transfer between servers",
          "author": "Sir Mittens",
          "date": "2026-09-08T18:42:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 113,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "c75ad271",
          "subject": "Actually fix the background leak: legacy transcripts were the real culprit",
          "author": "Sir Mittens",
          "date": "2026-09-02T20:06:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 8,
            "deletions": 4
          },
          "repo": "dashboard"
        },
        {
          "sha": "8585cd85",
          "subject": "Fix: expanding a ticket transcript recolored the entire dashboard",
          "author": "Sir Mittens",
          "date": "2026-09-02T19:55:44.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 28,
            "deletions": 4
          },
          "repo": "dashboard"
        },
        {
          "sha": "428cb491",
          "subject": "Persist current page across refresh, add User Bans to Trust Network Admin, update Premium comparison",
          "author": "Sir Mittens",
          "date": "2026-09-02T19:50:03.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 60,
            "deletions": 34
          },
          "repo": "dashboard"
        },
        {
          "sha": "dbc66256",
          "subject": "Add unified Server Logs page (tickets + applications), public transcript viewer",
          "author": "Sir Mittens",
          "date": "2026-09-02T19:40:43.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 404,
            "deletions": 115
          },
          "repo": "dashboard"
        },
        {
          "sha": "be09bfc0",
          "subject": "Add guild-ban action to Trust Network Admin page",
          "author": "Sir Mittens",
          "date": "2026-09-02T19:21:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 125,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "9295dbb0",
          "subject": "Trust Network admin: resolve usernames/guild names, collapsible report cards",
          "author": "Sir Mittens",
          "date": "2026-09-02T18:52:22.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 73,
            "deletions": 33
          },
          "repo": "dashboard"
        },
        {
          "sha": "b1c791f8",
          "subject": "Trust Network admin page + narrower Trust Network Admin permission tier",
          "author": "Sir Mittens",
          "date": "2026-09-02T18:43:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 297,
            "deletions": 79
          },
          "repo": "dashboard"
        },
        {
          "sha": "6d69ce83",
          "subject": "Add FAQ entries, persistent Invite/Support sidebar links, Giveaways page",
          "author": "Sir Mittens",
          "date": "2026-09-02T18:28:17.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 393,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "a5003785",
          "subject": "Restructure Panel Permissions layout: always-visible compact help, grouped resource cards",
          "author": "Sir Mittens",
          "date": "2026-09-02T17:53:25.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 60,
            "deletions": 48
          },
          "repo": "dashboard"
        },
        {
          "sha": "505049bf",
          "subject": "Let Administrators use Panel Permissions too, with an owner-only bypass toggle",
          "author": "Sir Mittens",
          "date": "2026-09-02T17:47:37.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 142,
            "deletions": 64
          },
          "repo": "dashboard"
        },
        {
          "sha": "fbeddfaa",
          "subject": "Replace permissions dropdown with an always-visible tab-bar-style toggle list",
          "author": "Sir Mittens",
          "date": "2026-09-02T17:25:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 45,
            "deletions": 84
          },
          "repo": "dashboard"
        },
        {
          "sha": "0bff7d67",
          "subject": "Make Panel Permissions dropdown legible, add heavy onboarding",
          "author": "Sir Mittens",
          "date": "2026-09-02T17:20:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 62,
            "deletions": 21
          },
          "repo": "dashboard"
        },
        {
          "sha": "8329243e",
          "subject": "Redesign Panel Permissions as role-centric with a dropdown, restore standalone page",
          "author": "Sir Mittens",
          "date": "2026-09-02T17:14:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 150,
            "deletions": 49
          },
          "repo": "dashboard"
        },
        {
          "sha": "3119de91",
          "subject": "Move Panel Permissions from its own page into Overview",
          "author": "Sir Mittens",
          "date": "2026-09-02T17:06:58.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2,
            "deletions": 34
          },
          "repo": "dashboard"
        },
        {
          "sha": "cb1b0de0",
          "subject": "Move Panel Permissions from a Server Setup tab button to its own page",
          "author": "Sir Mittens",
          "date": "2026-09-02T15:02:18.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 40,
            "deletions": 27
          },
          "repo": "dashboard"
        },
        {
          "sha": "14fe02bc",
          "subject": "Add per-role panel permissions: restrict pages/tabs, grant extra viewers",
          "author": "Sir Mittens",
          "date": "2026-09-02T14:55:10.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 498,
            "deletions": 6
          },
          "repo": "dashboard"
        },
        {
          "sha": "2ccfe348",
          "subject": "Redesign Guide commands list: remove gold-edge, add search + card grid",
          "author": "Sir Mittens",
          "date": "2026-09-02T14:31:33.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 42,
            "deletions": 7
          },
          "repo": "dashboard"
        },
        {
          "sha": "4fc6aeaf",
          "subject": "Fix Guide page crash + make Commands section and per-command entries collapsible",
          "author": "Sir Mittens",
          "date": "2026-09-02T14:05:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 78,
            "deletions": 35
          },
          "repo": "dashboard"
        },
        {
          "sha": "256012f0",
          "subject": "Add owner-only command list to Admin page, exclude it from the public Guide",
          "author": "Sir Mittens",
          "date": "2026-09-02T14:00:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 137,
            "deletions": 37
          },
          "repo": "dashboard"
        },
        {
          "sha": "269f2f0b",
          "subject": "Onboarding pass: explain what Branding and Config Templates actually do",
          "author": "Sir Mittens",
          "date": "2026-09-02T13:51:19.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "48306f8c",
          "subject": "Add Guide page: live auto-generated command list + FAQ",
          "author": "Sir Mittens",
          "date": "2026-09-02T13:47:51.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 162,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "e4702bc1",
          "subject": "Add Social Media Alerts to Server Setup (was dropped, never migrated)",
          "author": "Sir Mittens",
          "date": "2026-09-02T13:31:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 202,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "e113406a",
          "subject": "Disable Ko-fi donate buttons alongside PayPal until account issues are sorted",
          "author": "Sir Mittens",
          "date": "2026-09-02T13:25:14.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 20,
            "deletions": 6
          },
          "repo": "dashboard"
        },
        {
          "sha": "54b7e785",
          "subject": "Disable PayPal buy buttons until account verification/card issues are sorted",
          "author": "Sir Mittens",
          "date": "2026-09-02T13:21:44.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 18,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "64088c98",
          "subject": "Fix Overview layout: push donate button to the right edge, let Quick Setup cards fill the row instead of leaving an empty column",
          "author": "Sir Mittens",
          "date": "2026-09-01T21:23:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "0f4e650f",
          "subject": "Fix premium trend sparkline day-boundary bug found in code audit",
          "author": "Sir Mittens",
          "date": "2026-09-01T17:31:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 19,
            "deletions": 11
          },
          "repo": "dashboard"
        },
        {
          "sha": "73300695",
          "subject": "Document the random-variant response syntax on the Custom Commands form",
          "author": "Sir Mittens",
          "date": "2026-09-01T17:06:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 4,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "1acd93dc",
          "subject": "Add ticket type ping-on-open toggle and role picker to the dashboard's ticket type form",
          "author": "Sir Mittens",
          "date": "2026-09-01T16:52:08.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 25,
            "deletions": 2
          },
          "repo": "dashboard"
        },
        {
          "sha": "343b1afa",
          "subject": "Fix ticket panel edit dropping the channel field, allowing repost to a new channel from Edit",
          "author": "Sir Mittens",
          "date": "2026-09-01T15:37:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 27,
            "deletions": 9
          },
          "repo": "dashboard"
        },
        {
          "sha": "e403bd0c",
          "subject": "Surface PayPal's specific error detail (issue code + description) instead of just its generic top-level message",
          "author": "Sir Mittens",
          "date": "2026-09-01T15:08:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 3,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "3e96606c",
          "subject": "Fix PayPal capture error handling + rework Premium page selection",
          "author": "Sir Mittens",
          "date": "2026-09-01T14:58:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 59,
            "deletions": 32
          },
          "repo": "dashboard"
        },
        {
          "sha": "448c969a",
          "subject": "Add PayPal checkout for premium purchases (sandbox)",
          "author": "Sir Mittens",
          "date": "2026-09-01T14:34:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 279,
            "deletions": 10
          },
          "repo": "dashboard"
        },
        {
          "sha": "5cb2de87",
          "subject": "Fix critical regression: restore AutomodSection (deleted by mistake while",
          "author": "Sir Mittens",
          "date": "2026-09-01T14:06:54.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 101,
            "deletions": 26
          },
          "repo": "dashboard"
        },
        {
          "sha": "9aebac16",
          "subject": "Move donate card to very top of Overview; drive Quick Setup off the shared server picker instead of its own dropdown",
          "author": "Sir Mittens",
          "date": "2026-09-01T13:44:53.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 22,
            "deletions": 35
          },
          "repo": "dashboard"
        },
        {
          "sha": "24c46ded",
          "subject": "Add Roles page (Auto-Role, Reaction Roles, Verification, Rules Gate,",
          "author": "Sir Mittens",
          "date": "2026-09-01T13:34:27.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 765,
            "deletions": 75
          },
          "repo": "dashboard"
        },
        {
          "sha": "eb3ed566",
          "subject": "Add Ko-fi donate link (sidebar + heartfelt Overview card)",
          "author": "Sir Mittens",
          "date": "2026-09-01T13:05:45.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 36,
            "deletions": 4
          },
          "repo": "dashboard"
        },
        {
          "sha": "e8fca80b",
          "subject": "Fix managed-role name resolution, regroup sidebar, modernize Auto-Mod, add Overview feature toggles",
          "author": "Sir Mittens",
          "date": "2026-09-01T11:48:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 199,
            "deletions": 56
          },
          "repo": "dashboard"
        },
        {
          "sha": "4b0d4e99",
          "subject": "Add Server Status and Guild Events config tabs; fold Nickname Rotation into Branding",
          "author": "Sir Mittens",
          "date": "2026-09-01T11:20:12.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 580,
            "deletions": 138
          },
          "repo": "dashboard"
        },
        {
          "sha": "e692ba17",
          "subject": "Add Sticky Roles, Quarantine, Sticky Messages, Nickname Rotation, and Branding tabs to Server Setup",
          "author": "Sir Mittens",
          "date": "2026-09-01T10:53:39.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 518,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "27a9e44e",
          "subject": "Split the sidebar's Account dump into Billing/Community/Moderation/Automation/Analytics groups",
          "author": "Sir Mittens",
          "date": "2026-09-01T10:28:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 35,
            "deletions": 15
          },
          "repo": "dashboard"
        },
        {
          "sha": "d2b8585f",
          "subject": "Add Anti-Raid, Account Risk, Birthdays, and Stat Counters tabs to Server Setup",
          "author": "Sir Mittens",
          "date": "2026-09-01T10:20:45.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 470,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "5bff305a",
          "subject": "Add Server Setup page (Leveling, Starboard, JTC, Invites) - first slice of /inkwell setup",
          "author": "Sir Mittens",
          "date": "2026-09-01T09:57:23.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 575,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "9a04f686",
          "subject": "Center main content and harden full-viewport sizing for large/ultrawide screens",
          "author": "Sir Mittens",
          "date": "2026-09-01T09:11:53.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 6,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "7829171d",
          "subject": "Retrofit Ticket/Application panel editors onto the shared preview + drag-to-reorder buttons",
          "author": "Sir Mittens",
          "date": "2026-09-01T09:06:04.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 32,
            "deletions": 4
          },
          "repo": "dashboard"
        },
        {
          "sha": "08232721",
          "subject": "Add Webhooks page - migrated from /inkwell webhooks",
          "author": "Sir Mittens",
          "date": "2026-09-01T09:00:24.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 399,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "9412830d",
          "subject": "Add Welcome page - migrated from /inkwell welcome",
          "author": "Sir Mittens",
          "date": "2026-09-01T08:52:04.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 216,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "12306b21",
          "subject": "Add the web side of the embed edit Discord handoff",
          "author": "Sir Mittens",
          "date": "2026-09-01T08:44:18.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 178,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "8fcacb8f",
          "subject": "Auto-Mod: replace its own bespoke server-list markup with the shared GuildPicker",
          "author": "Sir Mittens",
          "date": "2026-09-01T08:34:42.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 48
          },
          "repo": "dashboard"
        },
        {
          "sha": "27073467",
          "subject": "Fix .gold-edge gradient being silently overridden by .panel's later CSS rule",
          "author": "Sir Mittens",
          "date": "2026-09-01T08:32:00.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 4,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "d33d3730",
          "subject": "Fix .gold-edge: the diagonal amber glow was missing, only the border/shadow applied",
          "author": "Sir Mittens",
          "date": "2026-09-01T08:27:52.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "eb2d8d60",
          "subject": "Gold edge on every server list + plan pills everywhere + sidebar/page animations",
          "author": "Sir Mittens",
          "date": "2026-09-01T08:24:09.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 49,
            "deletions": 45
          },
          "repo": "dashboard"
        },
        {
          "sha": "e340b433",
          "subject": "Move regex countdown to per-command, make the limit failure impossible to miss",
          "author": "Sir Mittens",
          "date": "2026-09-01T08:12:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 38,
            "deletions": 17
          },
          "repo": "dashboard"
        },
        {
          "sha": "8d3e1b44",
          "subject": "Cap regex custom commands separately (3 free / 6 premium) with real onboarding",
          "author": "Sir Mittens",
          "date": "2026-09-01T08:03:38.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 69,
            "deletions": 7
          },
          "repo": "dashboard"
        },
        {
          "sha": "fd26f7c1",
          "subject": "Add Embeds page: create, send, and save/load templates",
          "author": "Sir Mittens",
          "date": "2026-09-01T07:57:43.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 212,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "4bacbd4f",
          "subject": "Fix Custom Commands page stuck loading forever - trigger is a MySQL reserved word",
          "author": "Sir Mittens",
          "date": "2026-09-01T07:53:35.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 5
          },
          "repo": "dashboard"
        },
        {
          "sha": "c15233dd",
          "subject": "Add Custom Commands page - migrated from /inkwell setup",
          "author": "Sir Mittens",
          "date": "2026-09-01T07:48:27.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 234,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "e12d8a88",
          "subject": "Add shared EmbedEditor + Discord-dark preview + drag-to-reorder buttons",
          "author": "Sir Mittens",
          "date": "2026-09-01T07:40:31.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 178,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "636d05a7",
          "subject": "Fix panel button/description order not matching the submitted type order",
          "author": "Sir Mittens",
          "date": "2026-09-01T07:30:56.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 10,
            "deletions": 3
          },
          "repo": "dashboard"
        },
        {
          "sha": "ab02feb5",
          "subject": "Update premium comparison table: backup cadence (3-day manual) and fix stale free-tier claim",
          "author": "Sir Mittens",
          "date": "2026-09-01T07:00:51.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "8f9345b4",
          "subject": "Add member name resolution, per-user drill-down modals, and a real sparkline",
          "author": "Sir Mittens",
          "date": "2026-09-01T06:47:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 389,
            "deletions": 119
          },
          "repo": "dashboard"
        },
        {
          "sha": "88c8c797",
          "subject": "Rebuild Log Channels as its own page; fix Insights tab-bar styling; show guild name in admin activity",
          "author": "Sir Mittens",
          "date": "2026-09-01T06:17:52.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 237,
            "deletions": 84
          },
          "repo": "dashboard"
        },
        {
          "sha": "11e0bb1c",
          "subject": "Move Server Backup create/restore to /inkwell tools, fix transfer/template code retry bug",
          "author": "Sir Mittens",
          "date": "2026-09-01T05:03:21.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 32,
            "deletions": 63
          },
          "repo": "dashboard"
        },
        {
          "sha": "2d865db4",
          "subject": "Fix crash: TrustNetworkTab treated the wrapped {locked, reports} response as the array itself",
          "author": "Sir Mittens",
          "date": "2026-09-01T04:45:20.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 3,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "2496101d",
          "subject": "Scope Trust Network dashboard tab to settings + own-report management, add owner override",
          "author": "Sir Mittens",
          "date": "2026-09-01T04:37:28.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 185,
            "deletions": 169
          },
          "repo": "dashboard"
        },
        {
          "sha": "af355457",
          "subject": "Add Insights tab: log channels, staff stats, trust network, backups, templates, command analytics",
          "author": "Sir Mittens",
          "date": "2026-09-01T04:20:40.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1330,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "f7dc1d0f",
          "subject": "Enforce ticket question limits (5 free / 25 premium) and bump 3-month pricing to $12",
          "author": "Sir Mittens",
          "date": "2026-09-01T03:44:35.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 27,
            "deletions": 5
          },
          "repo": "dashboard"
        },
        {
          "sha": "09548841",
          "subject": "Enforce free-tier limits, add pricing, and finish the remaining tweaks batch",
          "author": "Sir Mittens",
          "date": "2026-09-01T03:27:20.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 587,
            "deletions": 33
          },
          "repo": "dashboard"
        },
        {
          "sha": "7906bf8d",
          "subject": "Capitalize and strip digits from the Welcome back display name (sidebar avatar/name still shows the raw username)",
          "author": "Sir Mittens",
          "date": "2026-09-01T03:05:26.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 7,
            "deletions": 1
          },
          "repo": "dashboard"
        },
        {
          "sha": "d475a12f",
          "subject": "Add Ticket History/Post Panel and Application Post Panel/Review — full parity with the remaining Discord staff-management features",
          "author": "Sir Mittens",
          "date": "2026-09-01T02:21:55.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1173,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "cabfa5c9",
          "subject": "Add Tickets and Applications config pages, reusing the roles/channels endpoints Auto-Mod already established",
          "author": "Sir Mittens",
          "date": "2026-09-01T02:04:32.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 1085,
            "deletions": 16
          },
          "repo": "dashboard"
        },
        {
          "sha": "ec05761a",
          "subject": "Fix crash-to-blank-page bug: guard every fetched array against non-array error responses, add a top-level ErrorBoundary",
          "author": "Sir Mittens",
          "date": "2026-09-01T01:54:27.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 53,
            "deletions": 9
          },
          "repo": "dashboard"
        },
        {
          "sha": "6500138b",
          "subject": "Split Premium into a page identical for everyone, move admin power to a new Owner-only Admin page",
          "author": "Sir Mittens",
          "date": "2026-09-01T01:38:07.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 291,
            "deletions": 101
          },
          "repo": "dashboard"
        },
        {
          "sha": "b8bc5bdf",
          "subject": "Hide premium code, label, usage count, and creator from non-owner activity feed",
          "author": "Sir Mittens",
          "date": "2026-08-30T14:23:01.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 12,
            "deletions": 8
          },
          "repo": "dashboard"
        },
        {
          "sha": "a884819f",
          "subject": "Add Exempt Roles/Channels to the Auto-Mod page — completes the move off Discord",
          "author": "Sir Mittens",
          "date": "2026-08-30T14:18:44.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 98,
            "deletions": 0
          },
          "repo": "dashboard"
        },
        {
          "sha": "51c39efe",
          "subject": "Redesign Premium page to match the mockup: stat row, global admin server table, activity feed, revoke modal",
          "author": "Sir Mittens",
          "date": "2026-08-30T08:42:19.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 604,
            "deletions": 31
          },
          "repo": "dashboard"
        },
        {
          "sha": "08565b36",
          "subject": "Use bot icon as favicon, filter out servers Inkwell isn't actually in, collapsible Auto-Mod sections with Other Filters first",
          "author": "Sir Mittens",
          "date": "2026-08-30T08:28:20.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 63,
            "deletions": 44
          },
          "repo": "dashboard"
        },
        {
          "sha": "5f3a6665",
          "subject": "Full Auto-Mod page: word/regex/spam/caps/mention/invite filters, escalation tiers, and regex explanation",
          "author": "Sir Mittens",
          "date": "2026-08-30T08:21:53.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 364,
            "deletions": 66
          },
          "repo": "dashboard"
        },
        {
          "sha": "a5014f08",
          "subject": "Add Auto-Mod banned-words page, feature comparison table on Premium, consistent server-table layout everywhere",
          "author": "Sir Mittens",
          "date": "2026-08-30T08:08:02.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 286,
            "deletions": 15
          },
          "repo": "dashboard"
        },
        {
          "sha": "88e1d9a3",
          "subject": "Initial commit: Inkwell web dashboard (Cloudflare Pages + Functions)",
          "author": "Sir Mittens",
          "date": "2026-08-30T07:42:46.000+03:00",
          "securityFix": null,
          "stats": {
            "additions": 2932,
            "deletions": 0
          },
          "repo": "dashboard"
        }
      ]
    }
  }
}