All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
15.1.0 - 2026-04-03
- (frontend) Ensure frontend version updates alongside backend when relevant (c5e2100)
- Chapter title storage (dbba6ac)
- Git version path, chapter titles again (5f81857)
- Make sure opt out users work (4ef35c2)
- Db migrations so tests pass (411bd32)
- Updating guild information with autoserv (73fe601)
- (frontend) Source version from new path (65b423b)
- (backend) Ensure backend request information is preserved for error reporting (c58f04d)
- (models) Make sure the request model can be serialized (fbaec3e)
- (backend) Return null when receiving references with backwards ranges (3e44500)
- (backend) Make sure to only ignore reverse ranges in single-chapter references (107a268)
15.0.0 - 2026-03-31
- Add user app install count to /stats, add some missing parameter descriptions (e553da5)
- [breaking] Add A/B testing experiment management system, staff reloading for some DB collections (5c45e51)
- Add Septuagint Psalm numbering flag to versions and display daily verse warning when using them in /setserverversion (5ca11d5)
- Add /searchresource, for searching paragraphed resources by keyword (f91d36a)
- (metrics) Properly support multi-chaptered references, add unit tests (5d18aed)
- [breaking] Migrate from mongodb to postgres (89052d2)
- Finishing touches on postgres in autoserv (fe3cfc0)
- Loose errors that aren't getting caught (94f07c5)
- Attribute nomenclature mismatches (b29f01f)
- Set contexts for user app commands (1058c83)
- Make sort_by_language an optional param, expand result count in /listversions language pages (f1a19d8)
- Add ~ to user install count estimate, format stat counts otherwise (fc4550b)
- Type errors on various checks, don't show commands that aren't usable on user app (09d02f3)
- Type error from trying to find error embeds in message sending failures (00f390d)
- Check for manage server permission in frontend (07593a4)
- Tidy manage server perm check (6953f47)
- Copy error embed check to other sending wrappers, add TODOs for parameter descriptions (ebd7f7a)
- Send verses individually if combined component length is too long (81fd570)
- Various type errors, remove deprecated event loop policy for Windows (43e01d4)
- More type errors because i am dumb person (a1ab694)
- Type errors, allow lookback appended verses through verse metrics (732190e)
- Increase overhead value in maximum text length calculation (021a46c)
- Change how we check if a channel supports permissions (7068809)
- (frontend) Verse paginator not using correct user ID value (f68532a)
- Don't capture handled exception in RSS parsing (a490dd8)
- Add retry logic to avoid SectionNotFoundException in random verse processing (8fb63b1)
- (metrics) Set service as scoped to make sure operations are thread-safe (9e767d0)
- (metrics) Remove verse numbers outside the ContentProvider so GetChapterEndingVerses() doesn't fail (70fcdeb)
- (frontend) Add try/catch to fetching stats to prevent the task from being removed (e773c19)
- Initialize and reuse ExperimentService in TestBaseClass to avoid repeated instantiation. (aaf9d35)
- Reorganize frontend utilities into core, helpers, services, and ui modules, and update backend experiment handling. (89081de)
- (commands) Tidy logic for checking user opt-out status (40f8e53)
- (frontend) Reorganize the calls to fetch frontend experiments (3fba522)
- Remove some redundancy, dispose a reader (23dc429)
- Assorted refactors and optimizations (da8afb3)
14.0.0 - 2025-11-20
- [breaking] User-installed app support, implement /verse for user-installed app (2988b30)
- (frontend) Message command for fetching verse content (bee39d0)
- Utilize v2 components in frontend (b9c5193)
- Add language sorting option to /listversions (3913968)
- Support alternate display styles for automatic daily verses (af02969)
- Support components in automatic daily verse (b89ca84)
- Run frontend stats update every 15 minutes (6c4d53b)
- (verses) Making metric sending a background task causes failures (81d5787)
- (verses) Forgot a keyword (4d061f0)
- (metrics) Don't trust input to accurately represent output (f574ec3)
- (metrics) Handle some verse number variants (ba26369)
- (metadata) Ignore alias versions for name fetching (028dfae)
- (metrics) Account for version aliases (9c7b637)
- (metrics) Accept verse numbers where the chapter is redirected (245a3a6)
- Capture exceptions for invalid verse ranges when making verse metric entries (1c37e6d)
- Add reference to sentry context in verse metric creation (5744bc7)
- Clarify invalid verse range message, add greater context to verse metric error handling (c1dd50b)
- Convert confirmation prompt to components, restore missing i18ns (70fc1e1)
- (verses) Handle grave marks in verse text (cfd27b8)
- (metadata) Order book names in JSON by length and remove duplicates (4386564)
- Use chapter information to avoid requesting invalid chapters (c4234fc)
- Show an error when version doesn't have relevant section for /dailyverse (47c8478)
- Use saner method for emojis (7899aae)
- Ensure autoserv uses proper emojis (e3520b1)
13.1.0 - 2025-10-04
- Ensure verse metrics don't contribute to longer response times (9c2c321)
- (verses) Fix reference.AsString result for Psalm 151 responses, handle Psalm 151 properly in verse metrics (d93c3ea)
- MongoDB doesn't like ToLowerInvariant() in FilterDefinition anymore? (60e18cb)
- (bg) Letter of Jeremiah incorrectly mapped to Baruch (55ee2b0)
- (metadata) Move source-specific functions to respective metadata provider classes (c672a7f)
13.0.0 - 2025-09-30
- Version aliases (5a06e86)
- Starting work on verse reference metrics (c6143c8)
- Add publisher to the verse reference metric class (aa4bb38)
- [breaking] Verse reference metrics (aba00d6)
- (autoserv) Accidental duplication for wait=true (def72d6)
- (verses) Non-embed display styles not truncating text properly (b93499b)
- (ab) Scenario where some translations fail from using a deprecated specifier for certain verse content (428f5df)
- (verses) Remove use of quotation mark regex (8628b1d)
- Add exception handling to HTTP cache client, reorganize backend models (f3d1000)
- (commands) Handle exceptions from pulling blog posts in /biblebot (1ef87be)
- Use new namespace for internal models (5428232)
- Revert use of caching client for search responses (57aef70)
- Apparently i shouldn't use column name attributes on navigation properties (0cd877a)
12.1.1 - 2025-08-19
- (autoserv) Add wait query parameter to confirm Discord webhook reception (dd09b63)
- (ab) Prevent descriptive title verses from being erroneously removed (46e5499)
- (ab) NullReferenceException from assuming search response existence (a00f780)
- (ab) Add log when verse number element lacks sibling (2884600)
12.1.0 - 2025-07-31
- Process daily/random verses more normally (6f8d563)
- Use new SpecialVerseProcessingService for autoserv (56f1d98)
- (ab) Restore book name to normal after generating reference string (9d7ca87)
- (ab) Address behavior where chapter number gets tagged onto verse number (82dabcd)
- (ab) Bug where subsequent chapter number behavior was affecting references that don't span chapters (d0f2f96)
- Accidentally'd the singletons (a7c5303)
- Missed a spot in MT-to-LXX psalm reference handling (4c2094e)
- (verses) Exception when truncating long text (32b5e73)
- (parsing) Regression in comma parsing (7d176dd)
- Pass providers through dependency injection by a list, as opposed to individually (6e0fc8f)
- Just show a count of removed preferences instead of logging each one (57e3d09)
- Unify text normalization functions in one class (99a11a5)
12.0.0 - 2025-07-26
- Support common dash variants in references by normalizing them (1411463)
- Function for converting Hebrew-numbered Psalm references to the Septuagint-numbered equivalent (b583ff0)
- Establish indexes for the larger-used collections. (8e4485b)
- Add healthcheck endpoint (fe6b0a0)
- Record status codes for daily verses (8e21c37)
- (autoserv) Add failed webhook calls to a queue to be retried (b3f37a8)
- (autoserv) Run daily verses in parallel (d2eff90)
- (autoserv) Remove daily verse preferences when webhook returns 404 (bb93321)
- Add /cleardailyverserole (e263a6e)
- Use database count for GetCount() implementations, make sure user prefs aren't cached by autoserv (4f754b1)
- ArgumentNullException for some search queries (c0f9671)
- NullReferenceException when an invalid version is passed to /search (8e4736f)
- ArgumentOutOfRangeException when a comma is on a reference that isn't looking for other verses (b161177)
- Duplicate of LJE in default_names causing invalid parsing for some DEU book names (3dbfce1)
- NullReferenceException caused by fallback version in /search not applying correctly (1d020a9)
- Allow variant dashes in frontend (3de7725)
- (preferences) Refactor preference cache/db logic, increase timeout and pool size for db (8b6e0ed)
- (autoserv) Save VerseResult to avoid unnecessary outbound connections (bf2f01e)
- (resources) ArgumentOutOfRangeException when giving a non-existent paragraph number to a resource (7a9db53)
- (resources) Some formatting in creeds (941deba)
- [breaking] Remove OptOutUser in favor of UserPreference flag, rework MongoService.Get() (b64e845)
- Cache for null values (c4d67d6)
- NullReferenceException for optoutuser check (2a2f93e)
- (autoserv) Avoid requeuing failed daily verse sends (ef27206)
- (autoserv) Log when failed webhook works on resend. (039b87a)
- (autoserv) Reposition log for failure queue addition (1a23e86)
- (autoserv) Return count of passed daily verses (9e3a8c2)
- Add more sentry context (b0f87ed)
- Optimize verse generation code (3dcb01a)
- More optimizations (0a768d8)
11.2.0 - 2025-05-31
- Force pull guilds in autoserv (c5bfb96)
- Foundation work on metrics (a7ac2de)
- Sentry for error tracking (040c510)
- Typecasting filtered versions (0accf93)
- Handle API.Bible's book name sensitivity (b580b1d)
- (metadata) Use fallback book name if preferred name is an abbreviation (525ed29)
- (ab) Return proper reference based on book data (94c9d33)
- (metadata) Compare lowercase version names because NRSVue exists... (b8a8343)
- (truerandom) Abbreviated book names not processing (8fedb77)
- (guild) Don't cache guilds when autoserv fetches all guilds (9fd7946)
- (ab) Handle InvalidOperationException for special verses (1861ce6)
- (ab) Resolve import collisions (5c56376)
- Use user display style in /truerandom (a211354)
- Move redirect for NRSV to NRSVA into the reference generation (47b4f06)
- Catch various unknown exceptions with sentry (28ed240)
- Don't let dangling commas in verse reference prevent parsing otherwise (0482aae)
- Remove useless code (d357eac)
- Yes (49de6d5)
- Use correct keyword (253487c)
- Clarify error messages (8dc2c66)
- Light formatting (00abd64)
- Leverage more sentry options (fc67091)
- Use proper version info for sentry where possible (f93af69)
11.1.0 - 2025-05-18
- Pull DB data on startup, use in MetadataFetchingService (42dc57d)
- Use redis cache for DB information (1797042)
- Parameters for MetadataFetchingService in AutoServ's startup sequence (8ba2ba1)
- Don't use redis for version caching (6e980ac)
- Versionservice construction (c3d451f)
- Fetch automatic daily verse reference before iterating through guilds (b0d4b68)
- Remove unused variable (4f68c78)
- Restore version cache prefetch (fb7e95c)
11.0.1 - 2025-05-17
- Handle InformationCommandGroup calls properly (ce7ae05)
- Return null if entry in DB doesn't truly exist (71bed44)
- Force pull guilds for Automatic Daily Verses (36b058a)
- Allow lowercase abbreviations for version references, refactor slightly (847bef1)
- Server's display style in /formatting accidentally used user's display style (91bffb3)
- Missing localizations (c2aea5d)
- Optimize DB updating functions (8b83c05)
- Avoid issues with guild enumerable in AutomaticDailyVerseService, handle non-JSON responses in JSON caching client (381a04f)
- Add John to overlapping book names list (9944680)
- Truncate verse titles when length exceeds limit (e12a05d)
- Optimize version search in reference (609d151)
- Cache DB tables locally, fetch when necessary (8cb2d36)
11.0.0 - 2025-05-16
- Fetch section title data from API.Bible (04ca6cb)
- [breaking] Use API.Bible data names as default internal names. (5c20755)
- Add locale field to versions (9663575)
- Use internal book information for finding preferred book name of an AB verse (1fab847)
- Remove redundant fetch for internal book information (b81ede8)
10.0.0 - 2025-05-03
- Log when at various points of automatic daily verse sending (5071c32)
- Store book names for API.Bible versions (f3e412b)
- Store the source's internal name for a book in version data, rename some variables (4eb3f32)
- Use stored API.Bible book names where applicable (e2413ca)
- Pre-pad chapters in books in API.Bible versions (e1ffe38)
- [breaking] Rename Version.ApiBibleId to Version.InternalId, add an Active flag to versions to be used later, import BG metadata on first run instead of always fetching on boot (d8a75c6)
- Use GitInfo data for version number reporting (67db5d4)
- Remove the stupid semicolon from the version number (c6e0eac)
- Use GitInfo version in backend (3f1d0ea)
- Add fallback for missing GitInfo (1b3198e)
- Reference inconsistencies on verse output (a760594)
- (frontend) Parse newlines from backend properly (06412d1)
- (frontend) Make /booklist acronym parameter optional (cd33f03)
- (bg) Check for null before trying to fix verse number (71f4e80)
- [breaking] Rename Models.Verse to Models.VerseResult to avoid conflicts (6c09895)
- Remove redundant Linux check for watchdog (8be7ce9)
- Begin reorganizing commands to reflect frontend structure (7d6a265)
- Remove isISV check for NLT provider's PurifyText(), add test for NT book in OT-only version (e153024)
- Remove unused configuration variables, clean up command controller (3796105)
- Alias the various dictionaries used in metadata fetching for code readability (c7b7664)
- Change how metadata dictionaries are aliased, restructure providers to allow for metadata providers (870ceec)
9.5.0 - 2025-03-22
- Support @everyone for setdailyverserole, add confirmation prompt when doing so (2214153)
- Get the correct version information when running development versions (b95c347)
9.4.0 - 2025-03-05
- Add en-GB to /setlanguage options (3ca7a0e)
- Resolve broken typecasting in MongoService.Search(), fetch book names from API.Bible versions we have (a4f1ddb)
- (ab) Sometimes data-sid is not used for verse numbers (9aa7b8d)
- Avoid errors because of duplicate versions in DB (c8b8fde)
- Patch content error in Galatians 3:24 NLD1939 (75bd00a)
- Patch previous patch (56a4163)
9.3.0 - 2025-02-23
- Automatically derive version using easybuild tooling (f155ee5)
- Wire up frontend localizations, pass backend localizations to frontend where needed (5b6c989)
- (backend) Parse in-reference versions properly (0f9d583)
- (backend) Fix unnecessary page creation in /listversions (2ba83e7)
- Handle unauthorized from API.Bible in NameFetchingService (fe8ed7d)
- Missed a spot for 401 catching (a67d914)
- I found why this watchdog thing isn't working (cf66539)
- Ignore API.Bible for NameFetching until better solution can be found (22fe26c)
- Sometimes python fstrings are unintuitive (713016a)
- Ditto (912e915)
- Return culture with staff-only command error (53dc87e)
- Add missing fallbacks if culture is null (9e68842)
- Missed a spot (dcb64a1)
- (backend) Make a function out of getting preferred versions (d7638d2)
- Begin preparing CHANGELOG.md for 9.3.0 (9cbe8e7)
- Update changelog for release (245d1cf)
- Update changelog [ci skip] (2767998)
- Change 9.3 release date to planned release [ci skip] (d26647b)
- Fix some formatting [ci skip] (31df4a7)