Making Theories FAIR by Version control, CFF citation files & Semantic Versioning
2025-10-17
Git is a tool from software development that solves two major challenges:
Tell other users how your theory should be cited, what the current version is, and more meta-data. This can be stored in a file called CITATION.cff in the top level folder of your repository (scroll down!):
cff-version: 1.2.0
title: 'Bystander Effect: A formal model'
message: >-
If you refer to this model, please cite it using the
metadata from this file. This theory has not been peer
reviewed yet.
type: software
authors:
- given-names: Felix
family-names: Schönbrodt
email: felix.schoenbrodt@psy.lmu.de
orcid: 'https://orcid.org/0000-0002-8282-3910'
affiliation: Ludwig-Maximilians-Universität München
repository-code: 'https://github.com/nicebread/FOMO-Psy'
abstract: >-
A formal model that explains why the probability of
helping behavior decreases with an increasing number
of passive bystanders.
keywords:
- fairtheory
- formal theory
- bystander effect
license: CC-BY-4.0
version: 0.2.0
date-released: '2025-12-03'
Create an initial version of your CITATION.cff file with the cffinit tool
The tool currently only knows “software” and “data set” as types. Create it with type software and update the message field:
message: >-
If you refer to this theory, please cite it using the metadata from this file.
type: software
Save the CITATION.cff file in the top level folder of your repository.
Both Github and Zenodo (and probably more repositories) parse an existing CITATION.cff and display the citation information:
message field, e.g.:
2.1.0: “The last peer-reviewed version was 1.0.4”1.0.2 is published at doi …”isReviewedBy annotation of an identifier..
├── .git (hidden git folder)
├── CHANGELOG.md (record changes between versions here)
├── CITATION.cff
├── My_Model.Rproj (keep the .Rproj file in the top level directory)
├── README.md (this should link to any associated Google docs, if applicable)
├── doc/ (all documentation)
│ ├── VAST_display.drawio
│ ├── tables.pdf (copies of yur construct table etc.)
│ └── ...
├── simulation/
│ ├── README.md (specific for the simulations)
│ ├── raw_data/ (a subfolder with empirical raw data, if applicable)
│ │ └── dat.csv
│ ├── plots/
│ │ └── phenomenon1.png
│ ├── 01-functions.R (or any other name)
│ ├── 02-simulations.R
│ ├── 03-analysis.R
│ └── ...
└── manuscript/
├── manuscript.qmd
└── ...
The git repository should contain the entire folder structure of your theory project.
Version numbers have three numbers: MAJOR.MINOR.PATCH.
Increment the:
The numbers are plain integers! For example, after 9 comes 10:
0.9.0 → 0.10.0 → 0.11.0 → 1.0.0 → 1.1.0
See https://semver.org and Van Lissa et al. (2025). To be FAIR: Theory Specification Needs an Update. Perspectives on Psychological Science. https://doi.org/10.1177/17456916251401850. Open Access PDF
0.1.01.0.00.1.00.1.10.2.0
0.3.0 → 0.4.0 → ... → 0.12.60.12.6 → 1.0.01.4.0), we made a huge change that makes the product incompatible to version 1: 2.0.0What changes of the theory warrant what kind of version increments? For theories it makes sense to think in terms of predictions.
Note: The boundaries will not always be clear cut. Think of it not as a precise measurement, but as a useful heuristic to communicate the degree of change in your theory.
Create a tag or a release whenever a major or minor version is released:
0.x.x version probably is not properly tested yet).The version number is recorded in two places:
CITATION.cff fileIs every commit a new version? No, that would be very tedious, especially if you are currently developing the theory and have frequent commits. We recommend:
dev developer branch for ongoing development. It is not necessary to update the version number in each development step.CITATION.cff fileCHANGELOG.mddev branch back into the main branch (explained later)(of course more complicated setups with multiple branches, e.g. feature branches, are possible).
Merge a dev branch back into main:
main branch:dev branch into main; provide a short message:(i.e., being in main you pull the changes from dev, not the other way round)
main since you created the dev branch, there will be no conflicts.)CHANGELOG.md into the release notes.CITATION.cff file to include the new DOI
FAIR = - Findable - Accessible - Interoperable - Reusable
Originally defined for data (Wilkinson et al., 2016), this concept has been applied to theories (Van Lissa et al., 2025).
Van Lissa et al. (2025). To be FAIR: Theory Specification Needs an Update. Perspectives on Psychological Science. https://doi.org/10.1177/17456916251401850. Open Access PDF
These slides are part of the course Formal modeling in psychology at LMU Munich