ADR-0010: Allow address memoization; isolate authorization and connection pooling 

Status

Historical proposal (original status: Proposed)

Date

2026-10-08

Original decision makers

Project architecture/security owners; approval still pending in the original proposal.

Requirements

HG-015, HG-025, HG-026, HG-027, HG-040, HG-044

Original supersession

None; a new decision for the proposed product.

Context 

Concurrent requests may reach the same origin under different permissions or DNS answers. Guzzle/cURL pooling and optional share handles may reuse DNS or connection state. A new pin alone therefore does not sufficiently demonstrate request-specific isolation.

Sources: [S12, S14].

Decision 

Version 1 isolates each independent transfer lease, including its cURL multi handle, DNS and connection state. No shared share handles, no adoption of foreign pooled connections and no silent Alt-Svc or HSTS route changes. A request with an internal grant must not privilege a later public request through its connection pool.

A bounded positive DNS memo is permitted: by default at most five seconds and 32 hosts, or less when a shorter TTL is known. TTL 0 and negative answers are not positively cached. Keys include resolver identity/configuration. Every use classifies addresses again against current policy; a boolean allow is never cached.

ConnectionPlans are single-use, short-lived attempt data. Deferred work is authorized on the actual new attempt, not when scheduled. Policy changes apply to new attempts; already running allowed transfers are not presented as automatically revoked.

Rejected alternatives 

  • Shared pool plus a pin: requires additional, complex isolation evidence.
  • Global host-allow cache: mixes contexts.
  • No memoization at all: safely possible, but causes avoidable duplicate resolution.
  • Live revocation of running transfers: a separate runtime feature, not accomplished by flushing a cache.

Consequences 

Parallel security decisions remain independent. v1 forgoes reuse between independent attempts and accepts handshake costs. These costs must be measured at high request volumes; the library does not buffer bodies additionally.

Evidence and acceptance in the original proposal 

T038, T052, T053, T054, T055, T056, T057, T075, T079, T084. Details and expected results are in Original verification specification. These tests were specified, not executed as part of the original documentation delivery.

Reasons to reconsider 

Pooling may be introduced only after a new ADR with a key/invalidation model, concurrency tests and wire evidence. A performance objective alone is not evidence.