---
title: "Architecture decision records"
manual: "HTTP Guard"
version: "main"
permalink: "https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-index@main"
source: "Adr/Index.rst"
rendered: "2026-10-18T14:31:38+00:00"
---

<a id="decisions"></a>

# Architecture decision records {#adr-index}

ADRs retain the context, alternatives and consequences of architectural
choices. This is HTTP Guard's own numbering, independent of nr-vault's ADRs.

ADR-0001 through ADR-0014 preserve the complete proposals dated 8 October
2026\. Their historical status does not impose a new approval gate on the
current alpha project. Current behavior and qualification are documented
in [Security model and limits](https://docs.typo3.org/permalink/netresearch/nr-http-guard:security@main), [Requirements and security invariants](https://docs.typo3.org/permalink/netresearch/nr-http-guard:development-requirements@main) and
[Verification report](https://docs.typo3.org/permalink/netresearch/nr-http-guard:verification-report@main).

ADR-0015 records the accepted single-extension decision dated 9 October
2026\. It supersedes ADR-0002's package and publication proposal. ADR-0016
through ADR-0018 record the implemented public RequestFactory boundary,
controlled DNS wire resolution and single-use cURL factory on 10 October
2026\. ADR-0017 supersedes ADR-0005's default-resolution proposal; its checked
address-set and connection-pinning principles remain applicable. The other
proposals are not superseded merely by the packaging change. Historical
alternatives remain part of the record and are not current API guidance.

## Record status {#adr-status}

-   [ADR-0001: Protect the outbound HTTP path, not a PHP firewall](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0001@main): historical proposal.
-   [ADR-0002: A shared library instead of a Vault dependency for every extension](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0002@main): package proposal superseded by ADR-0015.
-   [ADR-0003: Two middleware boundaries and a controlled terminal transport](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0003@main): historical proposal.
-   [ADR-0004: Enforce by default, Observe only as a visible migration mode](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0004@main): historical proposal.
-   [ADR-0005: Bind the checked address set directly to the connection](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0005@main): default-resolution proposal superseded by ADR-0017;
    connection-pinning principles retained.
-   [ADR-0006: Authorize internal access through client-bound endpoint grants](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0006@main): historical proposal.
-   [ADR-0007: Controlled cURL only; no proxies or PHP streams in v1](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0007@main): historical proposal.
-   [ADR-0008: Check every redirect hop and bind credentials to their origin](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0008@main): historical proposal.
-   [ADR-0009: One canonical target parser and a versioned address corpus](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0009@main): historical proposal.
-   [ADR-0010: Allow address memoization; isolate authorization and connection pooling](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0010@main): historical proposal.
-   [ADR-0011: Retain Vault streaming without falling back to the PHP stream handler](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0011@main): historical proposal.
-   [ADR-0012: Stable denial reasons without new secret leaks](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0012@main): historical proposal.
-   [ADR-0013: Explicit migration instead of silently reinterpreting existing allowlists](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0013@main): historical proposal.
-   [ADR-0014: Qualify security through target-contact and regression evidence](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0014@main): historical proposal.
-   [ADR-0015: One installable extension](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0015@main): accepted.
-   [ADR-0016: Public RequestFactory as the URI boundary](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0016@main): accepted.
-   [ADR-0017: Controlled DNS queries for the default resolver](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0017@main): accepted.
-   [ADR-0018: One cURL factory creation per transfer lease](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0018@main): accepted.

-   [ADR-0001: Protect the outbound HTTP path, not a PHP firewall](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0001-protect-the-outbound-http-path-not-a-php-firewall@main)
-   [ADR-0002: A shared library instead of a Vault dependency for every extension](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0002-a-shared-library-instead-of-a-vault-dependency-for-every-extension@main)
-   [ADR-0003: Two middleware boundaries and a controlled terminal transport](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0003-two-middleware-boundaries-and-a-controlled-terminal-transport@main)
-   [ADR-0004: Enforce by default, Observe only as a visible migration mode](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0004-enforce-by-default-observe-only-as-a-visible-migration-mode@main)
-   [ADR-0005: Bind the checked address set directly to the connection](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0005-bind-the-checked-address-set-directly-to-the-connection@main)
-   [ADR-0006: Authorize internal access through client-bound endpoint grants](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0006-authorize-internal-access-through-client-bound-endpoint-grants@main)
-   [ADR-0007: Controlled cURL only; no proxies or PHP streams in v1](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0007-controlled-curl-only-no-proxies-or-php-streams-in-v1@main)
-   [ADR-0008: Check every redirect hop and bind credentials to their origin](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0008-check-every-redirect-hop-and-bind-credentials-to-their-origin@main)
-   [ADR-0009: One canonical target parser and a versioned address corpus](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0009-one-canonical-target-parser-and-a-versioned-address-corpus@main)
-   [ADR-0010: Allow address memoization; isolate authorization and connection pooling](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0010-allow-address-memoization-isolate-authorization-and-connection-pooling@main)
-   [ADR-0011: Retain Vault streaming without falling back to the PHP stream handler](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0011-retain-vault-streaming-without-falling-back-to-the-php-stream-handler@main)
-   [ADR-0012: Stable denial reasons without new secret leaks](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0012-stable-denial-reasons-without-new-secret-leaks@main)
-   [ADR-0013: Explicit migration instead of silently reinterpreting existing allowlists](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0013-explicit-migration-instead-of-silently-reinterpreting-existing-allowlists@main)
-   [ADR-0014: Qualify security through target-contact and regression evidence](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0014-qualify-security-through-target-contact-and-regression-evidence@main)
-   [ADR-0015: One installable extension](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0015-one-installable-extension@main)
-   [ADR-0016: Public RequestFactory as the URI boundary](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0016-public-requestfactory-as-the-uri-boundary@main)
-   [ADR-0017: Controlled DNS queries for the default resolver](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0017-controlled-dns-queries-for-the-default-resolver@main)
-   [ADR-0018: One cURL factory creation per transfer lease](https://docs.typo3.org/permalink/netresearch/nr-http-guard:adr-0018-one-curl-factory-creation-per-transfer-lease@main)

## Original sources {#adr-original-sources}

Each historical ADR links to its immutable original record and specification
documents. The [original ADR index](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/adr/README.md)
and [source catalogue S01-S23](https://github.com/netresearch/typo3_http_guard/blob/3f929ae8794ca04ab3dd25627e94d601a2db23e0/specification/specs/08-evidence-and-sources.md)
retain the proposal's provenance. Restoration does not turn specified
tests into executed tests or historical proposals into accepted decisions.
