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-0011 title: Adopt D8: a pass computes the property closure; inspection never constructs physics status: superseded date: 2026-09-13 deciders: [paul-heyse] level: decision principles: [DM-20, DM-19, DM-26] blueprint: [§D8, §9.6] review: not-required: neither review raised a finding against D8 evidence: Proposed supersedes: [] superseded-by: ADR-0040 revisit: A property provider needs to be selected at evaluation time rather than at P6, for example because a method’s applicability depends on a solved value verification: python / test test_preflight_capability_backend (raises before ConcreteModel construction); P6 golden tests in tests/conformance


ADR-0011: Adopt D8: a pass computes the property closure; inspection never constructs physics

Context

Blueprint D8 removes lazy attribute construction: a pass computes the closure of required properties from equations, selects providers by type and configured preference, persists the selection, and generates the property equations or kernel bindings.

Scope

Binds when property demand is resolved and where the selection is stored. Provider implementations are §9.8 and ADR-0022.

Drivers

IDAES builds properties on attribute access, which makes inspection mutating (charter DM-20) and makes “what does this model need” unanswerable without running it.

Options

Lazy construction on access — rejected: inspection would construct physics and the model would not be a value. Require authors to list properties — rejected: the closure is derivable (D2).

Outcome

P6 resolves property demand explicitly and persists the selection; inspection is semantically non-mutating.

Consequences

A property that cannot be provided is a typed refusal at compile time naming the capability, not a runtime attribute error.

Compensating controls

test_preflight_capability_backend asserts the refusal happens before any Pyomo object is built; the closure report’s method category records unresolved demand.

Confirmation

P6 golden relations pin the selection for each reference package; python / parity compares against IDAES’s chosen methods.

Pros and cons

Resolving eagerly costs compile time for properties a case may never evaluate; the benefit is that the model is inspectable without being executed.

More information

Blueprint §D8, §9.6 (property demand resolution), §9.3 (method registry).

Status history

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