Establishes additional unit/integration testing, the CI to run it, and the runtime fixes those tests surfaced
Testing
- Add unit (ORM/function) and integration (API route) tiers over a shared dependency runtime that auto-provisions Postgres, Redis, and S3-compatible object storage (Garage) via testcontainers, with an external-deps mode.
- Add fixtures/factories plus coverage for user roles, kudos pricing, worker.can_generate, countermeasures, WP activation, and adversarial malformed-input route sweeps.
- Modularize the locust suite into locustsuite/ and add a stability-only smoke gate (check_smoke_results.py).
CI / tooling
- Rework pr/main/trusted-fork/publish workflows around composite actions (setup-test-python, start-test-stack) and a Dockerized PG+Redis+Garage stack.
- Bump the Python floor to 3.12 (+3.13 matrix) and consolidate on uv.
Runtime hardening
- Make telemetry activation opt-in (telemetry_enabled): the image stays telemetry-capable but a bare server.py is inert unless an OTLP endpoint or AI_HORDE_TELEMETRY_ENABLED is set.
- Turn NUL bytes, out-of-range user ids, and duplicate worker names into clean 4xx responses instead of session-poisoning 500s.
- Fix get_anon() to resolve the anon account by oauth_id (re-enabling the kudos-transfer guards); shrink and instrument the SQLAlchemy pool (15/5) to expose connection-hold inefficiency as pool timeouts rather than PG refusals.
- Reworks many import-time behaviors to their own functions. This is to facilitate making the AI-Horde 'package' importable without side-effects - this makes unit testing possible.
- Moves existing integration tests to ests/integration
- Create unit tests for constants, exceptions, imports, and utility functions.
Add CLI options to configure Waitress worker threads and connection limit and update the server to use CLI-provided values.
- Introduces `--waitress_threads` (default 45, the previously hard coded value) and `--waitress_connection_limit` (default 1024, also the same prior)
- Replaces the hard-coded threads/connection_limit in server startup with values taken from args.
Allows custom maintenance messages
Threshold to be put into maintenance in an hour increased
Workers put into maintenance for failing jobs use custom maintenance message
added thread locking for wp
shutdown should always activate maintenance
better concurrency calculation for anon
increased requirement for dropped jobs
more logging about cancelled gens
update last_aborted_job every hour
allows 'any model' to work again
removed_overseer
* Added worker invite mode
* separation between admin and mods
* removed mods from .env
* discord link
* mods_can_see_paused
* avoid_url_breaking_from_quotes
* Generalized things per sec suspicion threshold
* ip check
* merged modes into one endpoints
* profanity filter
* worker count
* moved dicts and lists internally to classes
* added worker ip control
* Added find_user
* Can now see which workers the user owns
* User details by default show worker count
* Privileged user details show worker ids
* Can set workers names, info and user usernames
* Allows assigning monthly_kudos
* moderators gain 100000 kudos per month
* Uses redis for ip safety caching
* allows to explicitly request trusted workers
* prevent anon from renaming stuff
* disabled APIv1
* news
* offloaded seed gen to horde
* frontpage update
* Refactored code to be able to handle multiple Hordes
* Switched to flask-restx for API
* Refactored API to be able to handle multiple API versions
* Added API documentation
* Added limiter per endpoint