ADR-009: Extracted with provenance, not imported
Status Active · Filed 2026-08-03 · Influenced ADR-027
Context
This package is an extraction. The machinery, the four layers, the fragment convention and the lint were all built inside strata-g over months of real use, and the decisions that produced them are recorded there as SG-ADR-032, SG-ADR-103, SG-ADR-122, SG-ADR-123, SG-ADR-157, SG-ADR-158, SG-ADR-187 and SG-ADR-188.
The SG- prefix is what makes those nameable at all: unprefixed, they would
read as references to this project’s decisions, which do not exist at those
numbers. One [luria.remotes.SG] entry gives them a namespace and a URL
(ADR-016). Those URLs land once strata-g’s own record is ported
to Luria’s conventions, which is the intended direction of travel
(ADR-017) — the pilot’s shape is not something this package
should contort to read.
Two obvious ways to bring them across, both wrong. Copy them verbatim, and Luria inherits a numbering whose gaps mean nothing here, bodies that argue about graph rendering, and cross-references to decisions that were never extracted. Start clean with no history, and every rule arrives as an assertion — which is exactly the failure mode the record exists to prevent.
Decision
Renumber from 001, rewrite as decisions about Luria, and keep the evidence.
- Each decision here is written for this package, not translated.
- Each names the incident that earned it — the audit that found thirty status spellings, the five-of-five drifted projections, the 809 references silently skipped as code. A rule whose evidence is missing reads as taste, and taste gets re-litigated by the next person with different taste.
- The ancestor project is named where it is the source, so the trail back to the original decisions exists without importing their numbering.
Luria also runs its own machinery on its own record. The decision index in
this repo is generated by luria index; the references in these very files are
linted by luria lint. That is not tidiness — it is the only way the first
consumer to hit a bug is this repo rather than someone else’s.
Alternatives considered
- Import the numbers verbatim. Keeps the trail exact, and produces a decision directory with holes at 001-031 and cross-references to decisions that don’t exist here. Numbering carries information — the order decisions were made — and imported numbering carries somebody else’s.
- Start clean, no provenance. Shorter, and it throws away the only thing that makes these rules persuasive: the incidents. “Derive projections rather than hand-maintaining them” is a preference; “five out of five had already drifted” is an argument.
- Vendor the ancestor’s docs as a subdirectory. Preserves everything, and nobody reads a second project’s decision log to understand this one.
Consequences
- The strata-g decisions remain the historical record; these are the operative ones.
- Every principle and decision here carries an origin note, which makes them longer and makes them stick.
- Changes flow one way for now — improvements made here have to be ported back deliberately. That is a real cost, and the alternative (a shared submodule under two masters) is worse until the interface has settled.