I needed to change the SMTP settings, so I rebuilt my forum with ./launcher rebuild app. As a result, discourse got updated automatically to 3.1.0.beta2.
Some questions:
is this behavior normal?
is it possible to customise it (e.g., to avoid beta versions, or to rebuild without updating)?
Yes, it’s normal for a rebuild to pull the latest update. And it’s normal for sites to be running this leading-edge version, called “tests-passed”. Almost all sites do this. See Is Discourse always in “beta”?
It’s not possible to downgrade, so if you really wanted to run stable, you need to start from stable, or wait for the next stable. Which version you follow is set in your app.yml file.