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-0014 title: Adopt D11: execution layouts are compiled artifacts and zero-copy is a preference status: superseded date: 2026-09-13 deciders: [paul-heyse] level: decision principles: [DM-36, DM-37, DM-39, DM-59] blueprint: [§D11, §18.2, §15.4] review: docs/design_review/reviews/design_review_arrow-native-idaes-core-blueprint-rev2_2026-09-13.md#7-principle-findings evidence: Interface-checked supersedes: [] superseded-by: ADR-0047 revisit: A borrow precondition is relaxed, or a measurement shows the copy path dominates an evaluation benchmark verification: tests/engine borrow-precondition tests; the §24.3 evaluation-program benchmarks


ADR-0014: Adopt D11: execution layouts are compiled artifacts and zero-copy is a preference

Context

Blueprint D11 makes the evaluation program, sparse Jacobian structures and solver workspaces compiled artifacts that borrow Arrow buffers when layouts permit and copy when they do not. The second review’s R2-6 corrected stale claims about faer, petgraph and object_store surfaces at the pinned versions.

Scope

Binds the ownership rules at the Arrow-to-native boundary and the numerical routes the diagnostics use. It does not bind the solver interface (§18.3, ADR-0028).

Drivers

Charter §G lists “it is zero-copy” as a claim to check; a sliced, filtered or nullable array cannot be borrowed; a claimed numerical route that no library provides is a capability lie (DM-43).

Options

Borrow unconditionally — rejected: a sliced or nullable array would be read past its validity. Claim an iterative SVD without a route — rejected by F17; the route is now shift-invert over faer’s matrix_free with a dense limit.

Outcome

Arrow buffers are borrowed only when the array is contiguous (ptr_offset() == 0, one chunk) and null-free; otherwise the data is copied through a checked slice. The workspace is native. Every numerical route names the library function it uses.

Consequences

The boundary code has two paths and both must be tested; the condition-number default becomes a Hager-Higham estimate with the exact Frobenius form opt-in.

Compensating controls

Borrow preconditions are asserted, not assumed; tests/engine constructs sliced, filtered and nullable arrays and asserts the copy path is taken.

Confirmation

rust / test runs the engine layer; the §24.3 benchmarks record the copy rate under recorded conditions so the claim stays Measured rather than asserted.

Pros and cons

Two paths cost code; one path costs correctness.

More information

Blueprint §D11, §18.2 (native evaluation program), §15.4-§15.5 (numerical diagnostics); review finding R2-6.

Status history

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