Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help


id: ADR-0032 title: Fetch external reading copies into a gitignored external/ rather than vendoring them status: accepted date: 2026-09-13 deciders: [paul-heyse] level: decision principles: [DM-31, DM-48, DM-02] blueprint: [§3.1, §0.2] review: not-required: a repository-hygiene decision; neither review raised a finding against it evidence: Proposed supersedes: [] superseded-by: null revisit: A CI job needs an external tree that a network fetch cannot supply reproducibly verification: governance / adr-lint asserts the IDAES tag in scripts/fetch-external.sh equals the parity group pin; .gitignore covers /external/


ADR-0032: Fetch external reading copies into a gitignored external/ rather than vendoring them

Context

The blueprint reads idaes-pse/, arrow-rs/ and a DataFusion checkout for behaviour and for API facts (§3.1’s closing note). Vendoring them would add hundreds of megabytes and three trees with their own histories to a repository whose own content is text.

Scope

Binds how external source is obtained and where it lives. Which tags are used is derived from the pins, not chosen here.

Drivers

Reading copies are derived artifacts; the authoritative statement of which version is read is the pin, not a checkout; a vendored tree invites edits that no pin describes.

Options

Git submodules — rejected: they pin a commit that can diverge from the dependency pin, giving two authorities. Vendor the trees — rejected: size, and a second copy that can be edited.

Outcome

external/ is gitignored and populated by scripts/fetch-external.sh, which clones idaes-pse at the parity tag, arrow-rs at the arrow pin and datafusion at the datafusion pin, reading the arrow and datafusion tags from Cargo.lock.

Consequences

A fresh clone cannot read external source until just fetch-external runs; just doctor reports it as missing rather than failing silently.

Compensating controls

A lint asserts the script’s IDAES tag equals the parity dependency-group pin, so the reading copy cannot drift from what parity tests against.

Confirmation

governance / adr-lint runs the tag check on every PR; agent settings deny edits under external/.

Pros and cons

Fetching costs network in a fresh environment; vendoring costs a second authority for three versions.

More information

Blueprint §3.1 (closing note on the vendored checkout), §0.2 (source paths); ADR-0003.

Status history

  • 2026-09-13 — accepted with the repository-seeding pull request (backfilled from blueprint revision 3).