decisions - CyrilB1531/lodestar GitHub Wiki
Architecture decision records โ index
Ten records. Seven state one axis each of the project's trajectory: what it targets, what it may
read, how it is laid out, what it writes rather than delegates, what proves it, which reference
each stemmer follows, and where it knowingly differs from that reference. The eighth amends the
fourth: numpy's legacy generator is written here. The ninth amends the fifth and the seventh: the
phonetic encoders follow jellyfish on every input. The tenth amends them again: each algorithm
follows its defining document, and the library is its numeric oracle. One row per file. The status and date
columns are copied from each file's own **Status:** โฆ ยท **Date:** โฆ line โ correct the record to
correct this table, not the other way around.
A record states an axis. A tool, a numerical mechanism or a shape the code already shows is not an
axis, and does not earn a record: it belongs in the tool's own documentation, in the XML comment on
the member, in ../guides/performance.md when it is a measurement, or
in ../equivalence.md when it is a divergence. That rule is what
#1103 applied.
index.yaml is the mechanical layer beneath the table. Each record declares supersedes, amends
and applies in its own frontmatter; tools/regen_adr_index.py reverses those edges, because an
immutable record cannot name the decision that later amended it, and tools/check_adr_index_sync.py
refuses any drift. Five edges exist today, 0008 amending 0004, and 0009 and 0010 each amending 0005 and 0007: an amendment to one of these
records is a new record, which is what immutability means here โ a record is never edited, and may only be
deleted, as tools/check_adr_immutable.py enforces. The one route past that is a new numbering
epoch, below: a diff that raises .numbering-epoch may rewrite a record in place, and the raised
line is what tells a reader the number now holds a different text.
| # | Title | Status | Date | Relationships |
|---|---|---|---|---|
0001 |
The foundations: target frameworks, comparison unit, persistence and versioning | accepted | 2026-09-20 | โ |
0002 |
Provenance and the allowed references | accepted | 2026-09-20 | โ |
0003 |
The package layout: tiers, boundaries and edges | accepted | 2026-09-24 | โ |
0004 |
What is written here and what is delegated | accepted | 2026-09-20 | โ |
0005 |
The proof standard and the oracle each family is frozen from | accepted | 2026-09-20 | โ |
0006 |
The stemmers' references | accepted | 2026-09-20 | โ |
0007 |
The deliberate divergences | accepted | 2026-09-20 | โ |
0008 |
numpy's legacy generator is replayed | accepted | 2026-09-25 | amends 0004 |
0009 |
The phonetic encoders follow jellyfish whole | accepted | 2026-09-27 | amends 0005, 0007 |
0010 |
Each algorithm follows its defining document | accepted | 2026-10-17 | amends 0005, 0007 |
What accepted means here
All ten carry accepted. None has been rejected or withdrawn โ a status this table would
otherwise need a second word for.
The numbering restarted at 0001
These seven replace the 147 records of the first numbering, written between 2026-08-01 and
2026-09-18 and deleted on 2026-09-20. A number below therefore names a different record from the
one it named before that date: 0003 was Code provenance and license in the first numbering and
is The package layout in this one. Read an old citation โ in CHANGELOG.md, in
docs/superpowers/, or in a commit message โ against the tree it was written in:
git show 53af23c2:docs/decisions/0072-omega-is-an-input-not-a-seed.md
docs/decisions/.numbering-epoch carries the epoch this directory numbers in, and .next-adr
skips any checkout or ref declaring another one, so a branch opened before the restart cannot push
the next number back into the 0148 range.
Epoch 3: 0003 rewritten in place
On 2026-09-24 #1103 rewrote 0003 under its
own number and file name, and raised the epoch to 3. Its rule for Lodestar.Abstractions changed
from the types packages exchange to the public data types the packages declare, and no code, and
it stopped listing the edges tools/check_nuspec_dependencies.py's EXPECTED already holds. The
six other records kept their bytes. A citation of 0003 made before that date reads against the
epoch-2 text:
git show 9f9406c5:docs/decisions/0003-the-package-layout-tiers-boundaries-and-edges.md
What each record absorbed
The first numbering's 75 axis records were merged into these seven; its other 72 stated a mechanism and were deleted, their content moved to the tool, the guide or the equivalence row that carries it. Each record's own tables name the first-numbering record every case came from.
| # | merges |
|---|---|
0001 |
0001, 0002, 0011, 0012, 0055 |
0002 |
0003, 0010, 0082, 0084, 0099 |
0003 |
0016, 0071, 0076, 0081, 0089, 0095, 0096, 0097, 0098, 0100, 0101, 0103, 0111, 0119, 0124, 0138, 0139 |
0004 |
0059, 0060, 0068, 0072, 0074, 0104, 0105, 0115, 0116, 0129, 0130, 0131, 0132, 0133, 0134, 0135, 0136, 0137, 0140 |
0005 |
0007, 0013, 0014, 0017, 0034, 0036, 0075, 0077, 0127, 0143, 0144, 0146 |
0006 |
0008, 0086, 0087, 0090, 0091, 0092, 0094, 0145 |
0007 |
0005, 0006, 0023, 0039, 0063, 0070, 0080, 0093, 0117 |