跳转至

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, then Status, 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.py checks the index, the sections and the status of every record.