Design decisions¶
Architecture decision records (ADR): one file per decision that shapes how moraine is built or used, with its reasons and what must not be done because of it. Agents and contributors read this index before changing the design; a decision is changed by a new record, not by editing code against it.
Index¶
| # | decision | status |
|---|---|---|
| 0001 | Record design decisions as ADRs in docs/decisions | Accepted |
| 0002 | Deep learning inference uses PyTorch only | Accepted |
| 0003 | Develop moraine as a plain Python package, not with nbdev | Accepted |
| 0004 | No documentation website for now | Superseded by 0037 |
| 0005 | The command line is generated from moraine.cli signatures and docstrings | Accepted |
| 0006 | Processing chains are TOML pipelines that resume | Accepted |
| 0007 | Visualization and result statistics go through pyramids | Superseded by 0018 |
| 0008 | Agent documentation is tool independent and tested | Accepted |
| 0009 | Example pipelines are verified on real data | Superseded by 0038 |
| 0010 | Formats others depend on are versioned contracts | Accepted |
| 0011 | The module map and layer rules are tested | Accepted |
| 0012 | Redundant networks, EMCF unwrapping and time series inversion | Accepted |
| 0013 | Own Delaunay triangulation and successive shortest path MCF | Accepted |
| 0014 | Interactive views are generated notebooks | Superseded by 0018 |
| 0015 | The API layer is the package moraine.api, grouped by topic | Accepted |
| 0016 | Tile viewer with anywidget and Leaflet, tiles through the notebook channel | Superseded by 0018 |
| 0017 | Polygons are GeoJSON files in longitude / latitude or radar grid coordinates | Accepted |
| 0018 | One viewer: moraine.cli.view replaces the holoviews plots |
Accepted |
| 0019 | Data are chunked by blocks in space and one image per chunk | Accepted |
| 0020 | EMCF on any network of image pairs, in steps of their own units | Accepted |
| 0021 | Unwrapping errors are corrected by phase closure per region, as in MintPy | Accepted |
| 0022 | The phase closure correction outputs the phase time series; no least squares inversion | Accepted |
| 0023 | EMI regularizes coherence matrices that are not positive definite, adaptively per point | Accepted |
| 0024 | Weighted DS temporal coherence with noise-free squared coherence weights | Accepted |
| 0025 | The oversampling of the SLCs is measured from the speckle correlation | Accepted |
| 0026 | EMI is regularized by default; DS are selected by temporal coherence | Accepted |
| 0027 | Weighted temporal coherence through ds_temp_coh; no EMI quality output; speckle correlation internal |
Accepted |
| 0028 | DS are selected by the connectivity of the coherent image pairs, not by the number of effective pairs | Accepted |
| 0029 | Compiled numba functions are cached in a directory named after the hash of the sources | Accepted |
| 0030 | GPU kernels are written with numba.cuda (numba-cuda), not as cupy C++ kernels | Accepted |
| 0031 | The regularized EMI on the GPU is one numba.cuda thread block per point with its matrices in shared memory | Accepted |
| 0032 | Window arrays keep the whole window of a pixel in one chunk | Accepted |
| 0033 | The commands run their work as tasks of an executor, not as dask array graphs | Accepted |
| 0034 | The workers of the commands are moraine's own; dask is not a dependency | Accepted |
| 0035 | Pyramid levels by decimation or by mean; statistics of the data computed when a pyramid is built | Accepted |
| 0036 | 3D views over the terrain with deck.gl and public elevation tiles | Accepted |
| 0037 | The manual is a website generated from the docstrings, the command registry and docs/ | Accepted |
| 0038 | The sample data set of the examples, guides and manual is Campi Flegrei | Accepted |
| 0039 | Zarr arrays are written one file per chunk, without sharding | Accepted |
Writing a record¶
- File name
NNNN-short-title.md, the next free number; add it to the index in the same change. - Sections, in this order: the title line
# NNNN Title, thenStatus,Date,Context,Decision,Consequences,Do not. - Status is one of
Proposed,Accepted,Superseded by NNNN,Deprecated. - To change a decision, write a new record and mark the old one
Superseded by NNNN; keep the old file. - Keep records short: the reason and the rule matter, the history is in git.
tests/test_decisions.pychecks the index, the sections and the status of every record.