Skip to content

DDR-NNN — <a class="headerlink" href="#ddr-nnn" title="Permanent link">¶</a></h1> <blockquote> <p>Version: 0.1.0 | Date: YYYY-MM-DD | Status: Proposed</p> </blockquote> <!-- Replace `NNN` with the next free number (look at existing DDR-*.md files). Status moves through: Proposed → Accepted → Superseded / Rejected. Keep this header on one line; tooling and CHANGELOG generation rely on it. Delete every HTML comment in this template before opening the PR. --> <h2 id="context">Context<a class="headerlink" href="#context" title="Permanent link">¶</a></h2> <!-- Why does this decision need to exist *now*? Two or three short paragraphs that a future maintainer can read cold and understand the constraints we were under. Link previous DDRs you build on — they save re-explaining. Concrete is better than abstract: - "Every contributor's first install fails because Docker isn't running." not - "We have onboarding friction." --> <h2 id="decision">Decision<a class="headerlink" href="#decision" title="Permanent link">¶</a></h2> <!-- What we're going to do, stated in the present tense as if already done. Lead with the headline sentence so a reader can stop here and know the gist. Then enumerate the concrete pieces. Examples worth imitating: - DDR-001 listed the six facets in a single table. - DDR-004's "Concretely" subsection enumerated the contract changes. --> <h3 id="concretely">Concretely<a class="headerlink" href="#concretely" title="Permanent link">¶</a></h3> <!-- The numbered list of artefacts this DDR commits to: - code changes (file paths or module boundaries), - new public APIs / CLI flags / env vars, - migration steps for existing data, - which existing behaviour is removed or deprecated. Avoid speculation. If something is open, put it under "Open follow-ups". --> <h2 id="consequences">Consequences<a class="headerlink" href="#consequences" title="Permanent link">¶</a></h2> <!-- Honest accounting of what changes: - **Positive:** the wins we get. - **Negative:** the tradeoffs we accept (perf, complexity, scope creep, new ops burden, etc.). - **Neutral:** behaviour shifts that aren't strictly better or worse but contributors need to know about. If a consequence touches user-visible behaviour, make sure it lands in changelog.md too — DDRs are the *why*, the CHANGELOG is the *what*. --> <h2 id="supersedes-superseded-by">Supersedes / Superseded by<a class="headerlink" href="#supersedes-superseded-by" title="Permanent link">¶</a></h2> <!-- Optional. Use when this DDR replaces an earlier one or is later replaced itself. Remove the section entirely if neither applies. --> <h2 id="open-follow-ups-not-blocking">Open follow-ups (not blocking)<a class="headerlink" href="#open-follow-ups-not-blocking" title="Permanent link">¶</a></h2> <!-- Things we deliberately punted. One bullet per item, with enough context that a future session (or a different contributor) can pick it up cold. Track the actual work in GitHub issues; keep this list short and stable. --> <h2 id="references">References<a class="headerlink" href="#references" title="Permanent link">¶</a></h2> <!-- External papers, prior art, related PRs / issues / discussions. Keep internal links relative (`./ddr-001.md`) so the file stays portable. --> </article> </div> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type="button" class="md-top md-icon" data-md-component="top" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class="md-footer"> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> Made with <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> Material for MkDocs </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> <script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["navigation.tabs", "navigation.sections", "navigation.top", "search.suggest", "search.highlight", "content.code.copy", "content.action.edit", "content.action.view"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script src="../assets/javascripts/bundle.79ae519e.min.js"></script> </body> </html>