This directory contains Architecture Decision Records (ADRs) for ModelSkill. ADRs document significant architectural choices made in the project, explaining the context, decision, alternatives considered, and consequences.
ADRs help new developers (and future maintainers) understand why the codebase is structured the way it is. They capture the reasoning behind key design decisions at the time they were made.
Each ADR follows this structure:
- Status: Draft, Accepted, Superseded
- Date: When the decision was made (approximate for historical ADRs)
- Context: What problem or requirement led to this decision?
- Decision: What did we decide to do?
- Alternatives Considered: What other options were evaluated?
- Consequences: What are the trade-offs and implications?
- ADR-001 - mikeio as core dependency
- ADR-002 - Centralized metrics module
- ADR-003 - Comparer and ComparerCollection pattern
- ADR-004 - xarray as internal data structure
- ADR-005 - Model result type hierarchy
- ADR-006 - Dual plotting backends (matplotlib and plotly)
- ADR-007 - Four-step workflow pattern
- ADR-008 - Options and styling system
- ADR-009 - Factory pattern for type detection
- ADR-010 - Optional dependencies for domain-specific model types (Draft)
- ADR-011 - VerticalModelResult ingests pre-extracted columns
When making significant architectural changes, please:
- Create a new ADR in Draft status
- Discuss with the team
- Update to Accepted status once implemented
- Update this index with a link to the new ADR
When a new decision replaces an old one:
- Create the new ADR following the normal process
- In the new ADR, include a note in the Context section mentioning which ADR it supersedes (e.g., "This decision supersedes ADR-001")
- Update the Status field of the old ADR from "Accepted" to "Superseded"
- Do NOT modify the body of the old ADR (Context, Decision, Alternatives, Consequences) - it remains as an immutable historical record
- Both ADRs remain in the repository to preserve the full decision history