What is bootstrapping:

When a project gets opened, it will start the bootstrap procedure. The following things will happen:
- First a check happens whether or not a $config branch is present. If not, create one.
- Create a migration node which will keep track of all migrations done during bootstrap phase.
- Run all migrations. Migrations include things like create initial user setting data or create merge request data etc. (For example, the color a certain type has, is stored in some node that resides in the $config branch)
- The migration node is updated when all migrations succeed, otherwise it'll rollback the changes. There are three types of migrations, versioned, update, undo. Versioned migrations only run once and the migration file cannot change. Update migrations will run every time the migration file changes. Undo migrations also only run once and the file cannot change. (The check whether a file has changed is done through hashing the file and comparing it to the stored data in the migration node)
- Once migrations are finished the project is ready for use and initial data is created so that the user can store certain configuration data like disabled relations, member keys etc. etc.


FAQ:

- When does it happen?
      When a user opens a project and certain constraints are met.

- What data is created/changed (what happens)?
      See above

- Can it be done manually?
      No

- Why does it need to happen?
      To make sure users can save space specific configuration.