# Software guidelines ## Data and validation - Use `attrs` fields, converters, and validators for classes that need input validation. - Use Pint for unit conversion and algebra. - In processing modules, use `BaseData` arithmetic where it supports the scientific operation; do not strip arrays and recreate unit or uncertainty propagation. - Low-level geometry/model kernels may accept numerical arrays, but their module adapter must restore explicit `BaseData` semantics. ## Public behavior - Keep configuration in `ProcessStepDescriber.arguments` and validate unknown keys and top-level types during pipeline loading. - Declare exact source, processing-read, and processing-write dependencies. - Raise explicit unsupported-capability errors rather than silently using a partial fallback. - Maintain backwards compatibility deliberately and document deprecations. ## Style and scope - Prefer focused changes and tests. - Keep format handling out of numerical kernels and instrument policy out of the package core. - Avoid broad output in tests and tools; report step IDs, counts, and focused errors. - Follow the repository lint and import-order configuration.