2.6 KiB
PEL/OUTPUT-POLICY/1 — Materialization & Promotion Policy
Status: Draft Owner: Architecture Version: 0.1.0 SoT: No Last Updated: 2026-02-21 Tags: [pel, outputs, promotion, retention]
Document ID: PEL/OUTPUT-POLICY/1
Layer: L2 — Output handling policy (no execution semantics)
Depends on (normative):
PEL/1-CORE— execution semanticsASL/LOG/1— visibility and log orderingASL/1-CORE-INDEX— visibility and tombstone semantics
Informative references:
ASL/SYSTEM/1— promotion/publication/retention separation
0. Conventions
The key words MUST, MUST NOT, REQUIRED, SHOULD, and MAY are to be interpreted as in RFC 2119.
This document defines policy for handling PEL outputs. It does not change PEL execution semantics.
1. Policy Dimensions
Each output produced by PEL is subject to three independent policy decisions:
1.1 Materialization
Controls whether output bytes are stored, cached, or virtualized.
store— persist in the content index (authoritative).cache— persist in materialization cache only (performance hint).virtualize— compute in-memory only; do not persist.
1.2 Promotion
Controls whether an output is promoted from a derived view to truth.
promote— output becomes eligible for truth/published workflows.no_promote— output remains derived and must not be treated as truth.
Promotion is explicit; it MUST NOT be inferred from execution.
1.3 Publication
Controls visibility (internal vs published) encoded in index metadata.
internal— visible only to the local domain.published— visible to federation/replay.
Publication is distinct from promotion; a promoted output may still be internal.
2. Policy Hooks (Normative)
Core implementations MUST expose a policy hook that can be invoked per output to decide the three dimensions above.
The hook MUST be deterministic and MUST depend only on:
- the execution inputs (program, params, inputs, snapshot state)
- explicit policy configuration supplied by the caller
The hook MUST NOT read storage layout or non-snapshot metadata.
3. Default Policy
If no hook is supplied, the default policy is:
materialization = storepromotion = no_promotepublication = internal
4. API Layer Mapping (Informative)
API layers should expose explicit controls for:
- promotion (
publish/promoteflags) - visibility (
internalvspublished) - materialization (
storevscachevsvirtualize)
The API MUST NOT implicitly promote outputs without an explicit policy choice.