Source is in src/, public interfaces in include/rainbow/, C++ and Python telemetry tests in tests/, exploratory configurations in scenes/, colour data in data/, and licensed vendored code in third_party/. tools/ contains the host-health logger and its user-service definition. Generated build/, output/ and .cache/ are ignored.
Keep optics, configuration, rendering and image I/O separate. Preserve explicit physical units, deterministic particle identity and reference numerical checks. Read rainbow/architecture and rainbow/parameters before extending physical models.
Build and usage commands are in rainbow/dev/usage. Release CTest and Python telemetry tests pass; address/undefined checks pass with leak detection unavailable in the sandbox. PNG/EXR example images have been inspected. Keep telemetry live (rainbow/dev/monitoring); use --parallel 2 and --threads 2 as the initial resource settings after the earlier unexplained blackout.
When introducing tooling, add the required dependency manifest and document exact installation, execution, and verification commands in the Rainbow development notes; keep repository Markdown files as one-line pointers. Commands should run from the repository root, and prerequisites should be explicit.
Use C++20, OpenMP and CMake/Ninja. Match the existing four-space indentation and snake_case names. Keep units in configuration fields, separate optics/rendering/I/O, and preserve reference accuracy and deterministic particle identity. Third-party source is vendored with its license; avoid formatting it.
C++ verification executables run through CTest; Python telemetry tests use unittest. Include meaningful checks for new behavior and bug fixes; see rainbow/dev/testing for the exercised numerical, image, shard and telemetry checks. No numeric coverage threshold is defined.
Use ./git-local for local Git: .git is reserved read-only by the environment, and metadata lives in .git-local. Latest implementation commit f4e0751 includes verified image rendering and profiles. Use concise imperative commit subjects and report validation accurately.
Pull requests should explain the purpose, summarize changes, and report validation performed or why validation was unavailable. Link relevant issues and include screenshots for visible interface changes.
Never commit credentials, access tokens, or local configuration secrets. Provide sanitized configuration examples and document required environment variables when configuration is introduced.
Maintain this guide when source layout, tooling, or contribution practices change. Read README and TRIGGERS at the start of work, and follow the applicable linked rules.
Read Architecture before implementation
Keep tunable parameters in the versioned configuration