Replaced metadata-driven reflection with self-describing `PersistableTask` types and a new `PersistableTaskRegistry`. Removed `persistable-tasks.json` and `TaskRegistry`, migrating to type-safe DI instantiation and explicit `restore()` methods. Fixed task restoration issues, ensuring `EmojiReactionRoleTask` and its `emojiMapping` now persist and restore correctly. Introduced `typeId()` for stable task identification, updated payload serialization for symmetry, and applied database migration to map FQCNs to logical IDs. Added unit tests for robust type discovery, payload symmetry, and registry behavior, ensuring no breaking changes.
Net Neutrality — Technical Documentation
This directory contains detailed technical documentation for the Net Neutrality Discord bot
(me.bobert:netneutrality, version 3.0.0).
It is intended for developers working on the codebase. It documents every major system and subsystem, how they fit together, and the end-to-end flows that tie them.
Table of contents
| Document | Subsystem |
|---|---|
| architecture.md | High-level architecture, startup/shutdown lifecycle, tech stack |
| events.md | Event handling & routing (EventsHandler) |
| contexts.md | Contexts — the abstraction over Discord events |
| commands.md | Commands — message & slash commands, dispatch, options |
| tasks.md | Tasks — button/emoji/modal/step/built-in/persistable/scheduled tasks |
| persistence.md | Database — Hibernate/JPA, Flyway, entities, repositories, services |
| music.md | Music — Lavalink node & client, queue, event dispatch |
| web-api.md | HTTP Web API — internal control & introspection server |
| threading.md | Threading & scheduling infrastructure |
| utilities-and-bootstrap.md | Utilities, configuration, logging, exceptions |
How to read this documentation
Start with architecture.md for the big picture and the startup sequence. Then read events.md and contexts.md, because almost everything else is triggered through a Context produced by the EventsHandler. From there, the two primary execution paths are commands.md and tasks.md.
Conventions
- Class names are given fully qualified on first mention, then by simple name.
- Database entity classes are prefixed with
O(e.g.OGuild), and are documented in persistence.md. - Environment variables / configuration keys use the
NETNEUTRALITY_*andMYSQL_*prefixes and are documented in utilities-and-bootstrap.md.