Skip to content

docs(adr): nine retrospective architecture decision records (1/5) - #15

Open
sqr00t wants to merge 1 commit into
fix/gcc-cpp-compatfrom
docs/adr-records
Open

docs(adr): nine retrospective architecture decision records (1/5)#15
sqr00t wants to merge 1 commit into
fix/gcc-cpp-compatfrom
docs/adr-records

Conversation

@sqr00t

@sqr00t sqr00t commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Closes #11.

Adds nine ADRs under docs/adr/, plus an index — ten files in total. ADRs 0001–0008 are
retrospective, reconstructed from git history, issues and pull requests; 0009 records an open
question rather than a decision taken. No code changes — documentation only.

What is here

# Title Status Date
0001 Wrap upstream bw's C++ rather than reimplement or shell out to R accepted 2025-11-20
0002 Isolate Rcpp behind shim.hpp and keep the model sources unchanged accepted 2025-11-20
0003 scikit-build-core + pybind11 + CMake as the build backend accepted 2025-11-20
0004 uv as the packaging, environment and lock tool accepted 2025-11-20
0005 Polars for the tabular output helper accepted 2025-11-20
0006 Test strategy: unit/regression split, PHYS_RTOL = 1e-4, Brownian pinned by seed only accepted 2026-07-09
0007 Multiplatform CI via tox-uv, and the GCC/libstdc++ compatibility fix accepted (unmerged) 2026-07-09
0008 Publish to private AWS CodeArtifact via GitHub OIDC, and unset UV_INDEX locally accepted 2026-07-09
0009 Evaluate a Rust reimplementation with PyO3 bindings proposed 2026-08-18

The index in docs/adr/README.md groups these by theme, and the themes are ordered by date, so
reading top to bottom also reads chronologically. Numbering ascends with decision date, so the two
orderings coincide without renaming anything — the README states this as the rule for new ADRs.

What to check when reviewing

The Consequences sections are the load-bearing part, and they are meant to be uncomfortable. Please
push back if any of these overstates or understates the cost:

  • 0001/0002 — byte-identical upstream sources mean we inherit upstream bugs and cannot reformat
    those files, so a repo-wide clang-format --style=Google can never pass over them
  • 0006 — the Brownian path is pinned only by seed-reproducibility, because
    std::normal_distribution is not portable across standard libraries
  • 0008 — the publish job builds a single-platform wheel, so consumers elsewhere compile from source

Every claim cites a commit sha or a file:line. If a citation does not resolve, that is a bug in the
ADR — please flag it.

ADR 0007 is marked accepted (unmerged) because the fix it documents is on #10, not yet on main.
The index's status legend explains that case.

One known follow-up: ADR 0007 describes the cpp format job as it stood in July 2026 —
non-blocking, with clang-format run repo-wide. #21 changes that job and #22 records the new policy
as ADR 0010, which corrects the description here. Reviewing this PR on its own terms is still right:
0007 documents the decision as it was taken.

Stack

This is the third of six PRs in the chain, and the first of the four docs PRs. It is based on
cpp/format-blocking (#21), not on main. Merge bottom-up.

main
 └── fix/gcc-cpp-compat            #10  compile fix + ColProxy constructor
      └── cpp/format-blocking      #21  .clang-format, pinned+scoped clang-format, job blocking
           └── docs/adr-records                    #15  nine ADRs  ← this PR
                └── docs/runbooks                  #16  four runbooks
                     └── docs/roadmap-and-rust-port #17  roadmap + Rust assessment
                          └── docs/entry-documents  #18  README/CONTRIBUTING/ONBOARDING
                               └── docs/cpp-format-policy #22  ADR 0010 + cpp-job corrections

The docs work is split into four PRs because the parts have genuinely different reviewers and
different failure modes: the ADRs need someone who was there, the runbooks need someone who will
follow them, the roadmap needs whoever sets priorities, and the entry documents need a reader who
does not know the repo.

@sqr00t
sqr00t changed the base branch from fix/gcc-cpp-compat to main August 18, 2026 14:45
@sqr00t
sqr00t changed the base branch from main to fix/gcc-cpp-compat August 18, 2026 14:46
@sqr00t
sqr00t changed the base branch from fix/gcc-cpp-compat to cpp/format-blocking August 18, 2026 17:16
@sqr00t sqr00t changed the title docs(adr): nine retrospective architecture decision records (1/4) docs(adr): nine retrospective architecture decision records Aug 18, 2026
@sqr00t sqr00t changed the title docs(adr): nine retrospective architecture decision records docs(adr): nine retrospective architecture decision records (1/5) Aug 18, 2026
Base automatically changed from cpp/format-blocking to fix/gcc-cpp-compat August 18, 2026 17:37
Reconstructed from git history, issues and pull requests. Index grouped by
theme, with themes ordered chronologically; numbering ascends with decision
date so the two orderings coincide.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Docs: record the architecture decisions retrospectively (ADRs)

1 participant