TYPO3 Documentation
Secrets Vault
Options
Give feedback View source View as Markdown How to edit Edit on GitHub

Secrets Vault

  • Introduction
  • Installation
  • Configuration
  • Usage
    • Example: API endpoint management
    • Example: SaaS API keys in extension settings
  • Security
    • Threat model
    • Security profiles
    • Trust boundaries
    • Cryptography
    • Audit evidence
    • Known limitations
  • Operations
    • Hardened deployment
    • Key custody
    • Backup and restore
    • Key rotation
    • Monitoring and alerting
    • Incident response
    • Decommissioning
  • Auditor
    • Target of evaluation
    • Control mapping
    • Evidence collection
    • Verification procedures
  • Developer
    • API
    • CLI commands
    • TCA integration
    • Secure Outbound
    • Technical actor context
    • Architecture decision records
      • ADR-001: UUID v7 for secret identifiers
      • ADR-002: Envelope encryption
      • ADR-003: Master key management
      • ADR-004: TCA integration
      • ADR-005: Access control
      • ADR-006: Audit logging
      • ADR-007: Secret metadata
      • ADR-008: HTTP client
      • ADR-009: Extension configuration secrets
      • ADR-010: Secure Outbound inside nr-vault
      • ADR-011: Credential Sets data model
      • ADR-012: SecureHttpClient API and transports
      • ADR-013: Rust FFI preload-only mode
      • ADR-014: Packaging native artifacts
      • ADR-015: HTTP/3 feature flag
      • ADR-016: Sidecar daemon option
      • ADR-017: Audit metadata retention
      • ADR-018: FlexForm secret lifecycle management
      • ADR-019: Configurable audit read logging
      • ADR-020: Master key request-lifetime caching
      • ADR-021: Batch secret loading
      • ADR-022: Dedicated OAuth exception
      • ADR-023: Audit hash chain HMAC consideration
      • ADR-024: Audit hash payload covers forensic fields
      • ADR-025: Secret entity is a readonly value object
      • ADR-026: DNS-rebinding defence via CURLOPT_RESOLVE
      • ADR-027: OAuth token requests use the secure HTTP client
      • ADR-028: PHPat architectural lock for HTTP client construction
      • ADR-029: Scoped technical-actor identity for headless use
      • ADR-030: Read-time resolution of site-configuration vault references
      • ADR-031: One shared catalogue of secret shapes
      • ADR-032: A portable envelope codec for consumer-owned payloads
      • ADR-033: Master-key rotation reaches consumer-owned envelopes
      • ADR-034: Audit chain tip anchor
      • ADR-035: Per-request allow-set of frontend-resolvable identifiers
      • ADR-036: Mutation and audit are all-or-nothing
      • ADR-037: A cancellable send is a method, not an exported handle
      • ADR-038: A host we cannot resolve is refused, not handed to curl
      • ADR-039: A streaming send drives the pinned curl transfer from read()
      • ADR-040: Without a total timeout, the cancellable send bounds silence
      • ADR-041: Additional body credentials keep one transport
      • ADR-042: Identifier patterns in listings
      • ADR-043: Creation of site namespaces
      • ADR-044: Signed OAuth expiry buffers avoid wrapping
      • ADR-045: Preflight and contain FlexForm deletion
      • ADR-046: Compensate failed final FlexForm copy links
      • ADR-047: Contain failed hook diagnostic writes
      • ADR-049: Selected-user field TSconfig
      • ADR-050: Local mutation transactions
  • Troubleshooting
  • Sitemap

Options

Give feedback View source View as Markdown How to edit Edit on GitHub
  1. Secrets Vault
  2. Developer
  3. Architecture decision records
  4. ADR-046: Compensate failed final FlexForm copy links
Give feedback Markdown Edit on GitHub

ADR-046: Compensate failed final FlexForm copy links 

Status 

Accepted

Date 

2026-10-10

Context 

ADR018 requires a failed copy to abandon its new secrets and clear references. FlexForm cloning already handles a failed secret read/store. The final Core XML serialization and record-link write run outside that boundary, however. An actual eight-case native Unit counterexample stores a clone before either final operation throws and proves that its compensation is skipped. A database write can also take effect before its caller receives an exception.

Decision 

Include final serialization and link persistence in the per-column clone compensation boundary. On failure, abandon successfully stored clones and clear all recognized source vault positions in that column while preserving other FlexForm data. Keep plaintext zeroing and normal successful writes unchanged.

Always attempt the clearing update after a failed final link. Equality with the initially read XML is insufficient: the failing write may already have changed the record. Treat a failure to serialize or persist the cleared column as uncertain record state. The existing correlation diagnostic states either that the column was cleared or that the duplicate may still reference source or abandoned cloned secrets and needs manual review. It never exposes the raw failure cause to the editor.

Consequences 

Cleanup remains best-effort and uses existing authorized/audited Vault deletes. Successful clearing with failed cleanup can leave an orphan. Failed clearing can retain a reference to a clone whose deletion already took effect; therefore neither record rollback nor an always-unreferenced orphan is promised.

This decision closes the final-link boundary of one FlexForm column. Coordination across columns or plain TCA fields, a store that persists before throwing, and failing diagnostic providers remain separate audit work. No public interface, database schema or global availability rule changes.

Related decisions 

  • ADR-018: FlexForm secret lifecycle management
  • ADR-036: Mutation and audit are all-or-nothing

Current audit follow-up 

ADR047 separately contains a failed PSR-3 diagnostic write so that existing compensation can continue. It does not establish successful log delivery or contain every diagnostic collaborator, and it does not close the other residual boundaries above.

  • Previous
  • Next
Reference to the headline

Copy and freely share the link

This link target has no permanent anchor assigned. You can make a pull request on GitHub to suggest an anchor. The link below can be used, but is prone to change if the page gets moved.

Copy this link into your TYPO3 manual.

  • Home
  • Contact
  • Issues
  • Repository

Last rendered: Oct 31, 2026 22:33

© since 2025 by Netresearch DTT GmbH
  • Legal Notice
  • Privacy Policy