ADR--: <The decision, written as a statement>

Copy this file to adr-<topic>-<n>.md (ADR-decision-records-1: one to three lowercase words and the topic’s next number), fill every section, delete these italic notes. The title is the answer, not the topic: “A list has no +”, not “Operators on lists”.

Status: Accepted | Open Date: **Answers:** <the question, with the issue that asked it> **Supersedes / Related:** <records this changes or leans on, one line each: what it says that matters here>

There is no Built: line and no target version: whether a decision is built is the index’s Built column, and when it was built is the CHANGELOG’s. The record states the decision as it stands today. When a later decision changes one of its rules, that rule is rewritten in place to say what holds now, with a one-line note under it naming the decision that changed it (see the index).

1. Question

One question, in a sentence a reader can answer yes/no or pick from a list. Then: what is blocked without an answer, and why this question has to be decided here rather than defaulting. If it is really two questions, write two records.

2. How others do it

What other languages and tools do about this same question, so the decision is made knowing the field and not in a vacuum. At least two, from different families where they exist (a systems language, a managed one, a functional one, the tool people already use). For each:

Language / tool Its answer What it costs there Source
      link, version, or “from memory, not checked”

Say what does not transfer and why (a garbage collector, a different ownership model, an ecosystem we do not have). Mark anything not verified; do not present recollection as fact.

3. Options, weighed

Every option the field or the team suggests, including doing nothing. For each: what it is, one concrete example of the source a developer writes, then how it fares against the four weights of ADR-258. Fill the table with answers, not adjectives: who pays, what is written, what it costs at run time, how it reads next to a neighbouring rule.

Option A —

// the code a developer writes under this option

Option B —

Weighed

  D1 the special case pays, not the common one D2 the compiler works, not the developer D3 no cost for the common case D4 consistent with itself If it is wrong
A         what it costs to undo, and who notices
B          

Where a number decided it (an instruction count, a size, a latency), give that number and link the measurement; the method, the machine and any other figures live in the notes, not here. Where two weights pull apart, say so and say which one the language’s promise to the program (D1, D3) or to the reader (D2, D4) is being traded for.

4. Decision

The chosen option, stated as rules a reader can apply, each numbered (D1, D2, …) so that later records and code can cite one. Say which weight decided where the table did not. Say in a sentence why each rejected option lost. A rule a later decision changed reads as it holds now, with its note:

D1 —

Changed by ADR-MMM Dn. (only when it was; otherwise leave it out)

5. Consequences

What changes for a reader of the specification, for a program, for the compiler: stated as what is now true or now costs more, not as a to-do list. Link the issue(s) that carry the work; do not report their progress. Name the cost this decision accepts.

6. What this does not decide

Questions the decision leaves open on purpose, each with where it will be asked (an issue; one for the owner is labelled decision). Leave the section out if there are none.


What does not belong in a record

Before marking a record Accepted: can a reader who has never seen this project answer “why is it this way, and what else could it have been”? If a sentence only makes sense to someone who watched the work happen, cut it.

This site is open source. Improve this page.