3.5.11 (2026-08-06)

Notable changes include:

1) Adds a ready-to-run Docker Compose quickstart under
   ``containers/quickstart/``. Newcomers can bring up palaestrAI as a REST
   API + WebUI service on top of a TimescaleDB results store with
   ``docker compose up -d``. Documented in ``doc/installing.rst``.

2) Fixes the ``palaestrai/palaestrai:latest`` promotion regex in
   ``.gitlab/pipelines/release.yml``. The previous single-digit pattern
   never matched multi-digit versions such as ``3.5.10-RELEASE``, so the
   Docker Hub ``latest`` tag was never updated on modern releases.

3.5.10 (2026-08-05)

Notable changes include:

1) A first-class web UI ships alongside the CLI. The ``palaestrai serve``
   command exposes a REST + HTMX/Jinja2 web front-end (styled with
   Pico.css and CodeMirror) covering the full experiment lifecycle:
   a Status page for running/scheduled experiment-run instances (with
   cancel), a Templates page for reusable experiment/run YAML snippets,
   an Experiments page for editing arsenAI experiment documents and
   generating experiment runs on the fly, and an Experiment Runs page
   for editing individual runs and scheduling them. The UI is served
   from the same process as the REST API; no extra runtime is needed.
   See ``doc/webui.rst`` for the user guide.

2) arsenAI (palaestrai-arsenai, the Adversarial Resilience Learning
   Design of Experiments tool) has been merged into the palaestrAI code
   base. It now ships as the bundled ``arsenai`` package and is still
   runnable as a standalone ``arsenai`` console script. arsenAI's tests
   are part of palaestrAI's test runs. The REST API's ``PUT /experiments``
   endpoint now generates experiment runs in-process via arsenAI's
   generator API and persists them to the database with no disk writes.

3) The database schema gained an optional ``experiment_run_instances.user``
   column (Alembic revision ``b3f2c1a4d5e6``) that records the OS user who
   started a run. CLI-launched runs derive the value from
   ``getpass.getuser()``; programmatic runs leave it ``NULL``. Existing
   databases and older callers stay valid — the column is nullable and the
   field defaults to ``None``.

4) New REST endpoints round out the experiment-run lifecycle:
   ``GET /experiment_run_instances`` lists all running and scheduled
   instances (excluding terminal ones), ``DELETE /experiment_run_instances/{uid}``
   cancels a scheduled or running instance via the new
   ``ExperimentRunCancelRequest``/``Response`` protocol pair, and
   ``/templates`` provides full CRUD for the new templates table.

5) EnvironmentState, EnvironmentUpdateResponse, and AgentUpdateRequest now
   carry the optional gymnasium-style pair of flags 'terminated' and
   'truncated' alongside the coarse 'done' bit. Environments can opt in to
   the finer distinction on a per-transition basis; those that don't leave
   both fields at their default (None) and the whole system behaves exactly
   as before. The two new fields are appended to the *end* of each
   dataclass so that existing positional constructors of the historical
   signature (e.g. EnvironmentState(sensors, rewards, done) or
   EnvironmentState(sensors, rewards, done, world_state, simtime)) remain
   bit-for-bit compatible; a field-order regression test locks this in.

6) SimulationController aggregates the two flags across all environments
   for the current step, caches the pair, and forwards it on the terminal
   AgentUpdateRequest produced by flow_control(). Aggregation rule:
   terminated=True on any environment dominates; otherwise truncated=True
   on any environment wins; otherwise, if at least one environment reports
   the fields explicitly (even as False), the aggregate is (False, False);
   otherwise (all None) the aggregate stays None.

7) New helper palaestrai.agent.bootstrap_mask(done, terminated, truncated)
   returns a scalar in {0.0, 1.0} intended to multiply the Bellman
   bootstrap term. Legacy (terminated=truncated=None) reduces to the
   old 1.0 - float(done) arithmetic bit-for-bit; truncated=True correctly
   keeps the bootstrap alive at time-limit endings, avoiding the value
   function collapse observed on continuing tasks like Pendulum.

8) Database backend is unaffected by the terminated/truncated change: the
   two new fields travel on the message envelope, but the store schema is
   untouched. Downstream tooling can start reading the fields off the wire
   without any migration.

9) NumPy 2.x compatibility: ``np.NAN`` (removed in NumPy 2.0) has been
   replaced with ``np.nan`` throughout palaestrAI, fixing an
   ``AttributeError`` observed with pinned-newer numpy stacks pulled in by
   ``midas-powergrid`` and related environment packages.

----------------------------------------------------------------------------
Release 3.4.1, 2022-06-01

Notable changes include:

1) API of the environment has changed
2) Improved user documentation
3) Several optimizations for the store
4) New short cuts for the command line interface
5) Various bug fixes 

----------------------------------------------------------------------------
Release 3.4.0, 2021-12-01

Welcome to palaestrAI release version 3.4, code-named ENGLAND! Notable
changes include:

1) The palaestrAI store has been adjusted to match the DoE-conforming naming
   that was introduced in 3.2.1.
2) In addition, many changes in the store now make it a fully-featured
   data storage backend, with notable improvements in speed. An end-to-end
   system test has been added.
3) Experiments can now be read from a directory and are executed one-by-one
4) The syntax of experiment run files is now schema-checked
5) Sensors/actuators are now prefixed with the name of the environment when
   assigning to agents. E.g., "myenv.some_sensor"
6) Documentation has been hugely improved.

About Edward England, from <https://en.wikipedia.org/wiki/Edward_England>:

Edward England (c. 1685–1721) was an Irish-born pirate. The ships he
sailed on included the Pearl (which he renamed The Royal James) and later the
Fancy, for which England exchanged the Pearl in 1720. His flag was the classic
Jolly Roger — almost exactly as the one "Black Sam" Bellamy used — with a
skull above two crossed bones on a black background. Like Bellamy, England
was known for his kindness and compassion as a leader, unlike many other
pirates of the time.

----------------------------------------------------------------------------
Release 3.2.1, 2021-06-23

1) Single-line command to start experiments from yaml
2) Various Bug fixes
3) Improvement of documentation

The documentation can be found at: http://docs.palaestr.ai/
-----------------------------------------------------------------------------

Release 3.2, 2021-06-03

Increased system usability and introduced changes to experiment files.

1) Changed term "experiment" to "run" throughout the project to better reflect DOE terminology.
2) Enabled multiple run phases to allow for, e.g., a training and a test phase (breaking: the run yaml file structure was modified from the old experient yaml structure and needs to be updated)
3) Introduction for an abstract Reward class to allow for implementation of customized rewards in environments (breaking: the reward in environment implementations have to be modified to the new structure)
4) Cleaned up bloated log messages and alllowed for better configurability of logs through finer grained log levels
5) Removed requirement of docker and postgreSQL to run palaestrai - no database is required to run palaestrai and an sqlite fallback was implemented
6) Changed multiprocessing from fork to spawn to avoid compatibility issues with CUDA
7) Updated the README file to reflect the current state of the project
8) Improved performance and fixed various bugs

The documentation can be found at: http://docs.palaestr.ai/

-----------------------------------------------------------------------------

Release 3.1, 2021-05-03

Updated to a state where palaestrAI can be used as a tool in scientific publications. The experimentation process is now in a state that experiments are reproducible, testable, and trained agents can be stored/loaded.

1) Added possibility for the muscle to send different actions to environment and brain (breaking change: the muscle must now return two actuator lists).
2) Enabled environment episodes. Environment gets restarted after `done`. (breaking: the `start_environment` method now needs to do the initialization of environment variables, otherwise the restart may cause errors)
3) Added methods to store/load agents (breaking: existing brain/muscle implementations need the respective methods).
4) Added a test mode to test agents after training.
5) The muscle now receives the id of its respective brain (breaking: `brain_id` must be added to the muscle's `__init__()`).
6) The vanilla_sim_controller was moved from experiment folder to simulation (breaking: needs to be udpated in `experiment.yaml` files)
7) Added the tic-tac-toe environment as one of the standard environments. It is located in the palaestrai-environments repo: https://gitlab.com/arl2/palaestrai-environments
8) Improved performance and fixed various bugs

The documentation can now be found at: http://docs.palaestr.ai/

-----------------------------------------------------------------------------

