Developer Guide¶ Developing Galacticus The Galacticus Build System Editor Setup Visual Studio Code Fortran language server Indentation and formatting Formatting module use blocks Formatting variable declarations How the formatting is rolled out Embedded languages in Fortran source The Galacticus extension Coding Galacticus Style Conventions Node Class Hierarchy Builder Galacticus Preprocessor Directives Numerical Tools Computation Dependencies and Data Files Optimization Global Functions Galacticus Metadata Enumerations Defined Constants Classes Error Handling Reporting a fatal error Reporting a recoverable failure Warnings Allocation failures Failure context Testing and Continuous Integration Test suites The CI pipeline Git hooks Before opening a pull request Merging pull requests Adding New Classes Code Directives Identifying Components and Mass Types Components Existing Classes Analytic Solvers Subsystems Creating a New Class Overview of Classes Creating a new class Traversing a Merger Tree The treeNode class Traversing examples Growing a Tabulation Why a naively-grown tabulation is a problem The absolute lattice Pinning a range to the lattice Extending the tabulation What is, and is not, preserved When carry-over is not valid Persistent caches Checklist The Dark-Matter Constraint Pipeline Architecture Cross-stage coupling The stage state machine Convergence diagnostics for a DE ensemble Extending the pipeline Building Docker Images Build Environment Galacticus itself Versions and Releases Semantic Versioning When to Create a Release Determining the Exact Version Used Release Steps Publishing the Python Package to PyPI