27 KiB
PEL/PROGRAM-DAG-DESC/1 — Scheme Descriptor for DAG Program Scheme
Status: Approved Owner: Niklas Rydberg Version: 0.1.6 SoT: Yes Last Updated: 2025-11-16 Linked Phase Pack: N/A Tags: [composition, registry]
Document ID: PEL/PROGRAM-DAG-DESC/1
Layer: L1 Scheme Descriptor (binds PEL scheme to ASL values)
Depends on (normative):
ASL/1-CORE v0.4.x— Artifact substrate (Artifact,TypeTag,Reference,EncodingProfileId)ENC/ASL1-CORE v1.0.x— canonical encoding profile (ASL_ENC_CORE_V1)PEL/1-CORE v0.3.x— primitive execution layer (schemes andExec_s)PEL/PROGRAM-DAG/1 v0.3.x— DAG program scheme (Program,Node,Exec_DAG, symbolicSchemeRef_DAG_1)ENC/PEL-PROGRAM-DAG/1 v0.2.x— canonical encoding for DAG programs (Program Artifacts, profile IDPEL_ENC_PROGRAM_DAG_V1)
References (informative):
HASH/ASL1 v0.2.x— ASL1 hash family (HashIdassignments,HASH-ASL1-256)SUBSTRATE/STACK-OVERVIEW v0.3.x— stack layering and kernel invariantsENC/PEL-TRACE-DAG/1 v0.1.x— canonical encoding for DAG traces (Trace Artifacts)OPREG/PEL1-KERNELand related param profiles — operation registry for DAG ops (context only)
© 2025 Niklas Rydberg.
License
Except where otherwise noted, this document (text and diagrams) is licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0).
The identifier registries and mapping tables (e.g. TypeTag IDs, HashId assignments, EdgeTypeId tables) are additionally made available under CC0 1.0 Universal (CC0) to enable unrestricted reuse in implementations and derivative specifications.
Code examples in this document are provided under the Apache License 2.0 unless explicitly stated otherwise. Test vectors, where present, are dedicated to the public domain under CC0 1.0.
0. Overview
PEL/PROGRAM-DAG/1 defines the DAG program scheme for PEL/1-CORE and refers to its scheme identifier symbolically as SchemeRef_DAG_1.
PEL/PROGRAM-DAG-DESC/1 defines:
- the logical descriptor value for the DAG scheme,
- its realization as a concrete ASL/1 Artifact (the descriptor Artifact), and
- how engines derive and recognize
SchemeRef_DAG_1as the scheme’sSchemeRef.
In particular, this document:
- binds the DAG scheme semantics (
Exec_DAG) to a specificSchemeRefvalue; - specifies the descriptor’s TypeTag and internal structure;
- specifies how
SchemeRef_DAG_1is derived from the descriptor Artifact underASL_ENC_CORE_V1and a chosen hash algorithm; and - fixes a canonical
SchemeRef_DAG_1for the Amduat 2.0 baseline profile usingHASH-ASL1-256(HashId = 0x0001),
without introducing dependencies on stores, TGK, certificates, facts, or overlays.
1. Scope & Layering
1.1 Purpose
This specification defines:
-
The logical structure of the DAG scheme descriptor value (
DagSchemeDescriptor). -
The descriptor Artifact that carries this value:
- its
type_tag(a “PEL scheme descriptor”TypeTag), and - its canonical
byteslayout.
- its
-
The derivation of
SchemeRef_DAG_1as aReferenceto that descriptor Artifact. -
The binding between
SchemeRef_DAG_1and the DAG scheme defined inPEL/PROGRAM-DAG/1.
It does not redefine:
- DAG program semantics or structure (
Program,Node,Exec_DAG), - Program or trace encodings (
ENC/PEL-PROGRAM-DAG/1,ENC/PEL-TRACE-DAG/1), - hash algorithms or
HashId(HASH/ASL1), - store, graph, certification, or provenance behavior.
1.2 Layering constraints
In line with SUBSTRATE/STACK-OVERVIEW:
-
PEL/PROGRAM-DAG-DESC/1is a scheme descriptor:- it binds a PEL scheme (
PEL/PROGRAM-DAG/1) to a specific ASL/1Reference; and - it describes how engines recognize and interpret that scheme.
- it binds a PEL scheme (
-
It MUST NOT introduce dependencies on:
- stores (
ASL/1-STORE), - graph kernels or graph stores (
TGK/1-CORE,TGK/STORE/1), - certification, evidence, facts, or overlays (
CIL/1,FER/1,FCT/1,OI/1).
- stores (
-
It MAY refer informatively to:
- canonical trace encodings (
ENC/PEL-TRACE-DAG/1), - operation registries and parameter profiles (
OPREG/PEL1-KERNEL, etc.),
- canonical trace encodings (
but MUST NOT depend on them for its core semantics.
2. Dependencies, Terminology & Conventions
RFC 2119 terms (MUST, SHOULD, MAY, etc.) are normative.
2.1 From ASL/1-CORE
Artifact {
bytes: OctetString
type_tag: optional TypeTag
}
TypeTag {
tag_id: uint32
}
Reference {
hash_id: HashId
digest: OctetString
}
HashId = uint16
EncodingProfileId = uint16
This spec treats:
Artifactas the unit of identity and content,TypeTagas the typing hint forArtifact.bytes,Referenceas the content address for Artifacts, andEncodingProfileIdas the identifier of encoding profiles (e.g.ASL_ENC_CORE_V1,PEL_ENC_PROGRAM_DAG_V1).
2.2 From ENC/ASL1-CORE v1
ENC/ASL1-CORE v1 defines:
ArtifactBytes = encode_artifact_core_v1(Artifact)— canonical encoding for Artifacts.ReferenceBytes = encode_reference_core_v1(Reference)— canonical encoding for References.
It also instantiates the generic ASL rule:
ArtifactBytes = encode_P(A)
digest = H(ArtifactBytes)
Reference = { hash_id = HID, digest = digest }
for P = ASL_ENC_CORE_V1 and any hash algorithm H with HashId = HID.
2.3 From PEL/1-CORE and PEL/PROGRAM-DAG/1
From PEL/1-CORE:
SchemeRef = Reference
Exec_s :
(program: Artifact, inputs: list<Artifact>, params: optional Artifact)
-> (outputs: list<Artifact>, result: ExecutionResultValue)
From PEL/PROGRAM-DAG/1:
-
The DAG scheme is a concrete scheme over PEL/1-CORE:
Exec_DAG : (program: Artifact, inputs: list<Artifact>, params: optional Artifact) -> (outputs: list<Artifact>, result: ExecutionResultValue) -
This scheme is identified symbolically as
SchemeRef_DAG_1, with:SchemeRef = SchemeRef_DAG_1 Exec_s = Exec_DAG
PEL/PROGRAM-DAG-DESC/1 makes this symbolic SchemeRef_DAG_1 concrete.
2.4 Conventions
Unless stated otherwise:
-
Integers:
u8— 1 byte, unsigned.u16— 2 bytes, unsigned, big-endian.u32— 4 bytes, unsigned, big-endian.
-
Utf8Stringis encoded as:Utf8String = length (u32) bytes[0..length-1]where:
lengthis the number of bytes,bytesMUST be well-formed UTF-8,- there is no terminator or padding.
-
Embedded
Referencevalues use a length-prefixed wrapper over canonicalReferenceBytesfromENC/ASL1-CORE v1:EncodedRef = ref_len (u32) ref_bytes (byte[0..ref_len-1]) // canonical ReferenceByteswhere:
ref_bytesMUST be the canonicalReferenceBytesfor someReferencevalue underENC/ASL1-CORE v1,ref_lenMUST be the exact length ofref_bytes(MUST be ≥ 2).
Decoders MUST:
- treat
ref_len < 2as an encoding error, and - decode
ref_bytesusingdecode_reference_core_v1. Any failure in that decoding (including, whenHASH/ASL1is implemented, a digest-length mismatch for a knownhash_id) MUST be treated as an encoding error forDagSchemeDescriptorBytes.
-
Optional
Referencefields use:OptionalEncodedRef = has_ref (u8) [ EncodedRef ] // only if has_ref == 0x01with:
has_ref = 0x00→ no value present (noEncodedReffollows),has_ref = 0x01→ exactly oneEncodedReffollows,- other
has_refvalues are encoding errors.
3. Descriptor Logical Model
3.1 DagSchemeDescriptor (logical)
At the logical level, the DAG scheme descriptor is modeled as:
DagSchemeDescriptor {
pel1_version: uint16
scheme_name: String // logical identifier, e.g. "PEL/PROGRAM-DAG/1"
program_type_tag: TypeTag // TYPE_TAG_PEL_PROGRAM_DAG_1
program_enc_profile: EncodingProfileId
// PEL_ENC_PROGRAM_DAG_V1 (0x0101)
trace_profile_ref: optional Reference
// to a trace-profile descriptor (e.g. PEL/TRACE-DAG-DESC/1)
opreg_ref: optional Reference
// to a canonical operation-registry descriptor (e.g. OPREG/PEL1-KERNEL)
}
This structure is logical; the descriptor’s concrete bytes are defined in §4.
The program_type_tag / program_enc_profile pair tells engines how to interpret Program Artifacts for this scheme:
program_type_tag⇒ whichTypeTagmarks an Artifact as a DAG Program for this scheme;program_enc_profile⇒ which Program encoding profile (specifically,PEL_ENC_PROGRAM_DAG_V1fromENC/PEL-PROGRAM-DAG/1) to use when decoding/encoding those Artifacts.
This pair is independent from the ASL-level encoding profile used for the descriptor Artifact itself, which is always ASL_ENC_CORE_V1 when deriving SchemeRef_DAG_1 (§5.2).
This document does not require engines to inspect all fields at runtime. In particular:
- engines that already know
SchemeRef_DAG_1,TYPE_TAG_PEL_PROGRAM_DAG_1, andPEL_ENC_PROGRAM_DAG_V1MAY treat the descriptor as metadata; and - the canonical binding to
PEL/PROGRAM-DAG/1is viaSchemeRef_DAG_1and theprogram_type_tag/program_enc_profilepair, not viascheme_nameor the optional references.
3.2 Field semantics & invariants
For the Amduat 2.0 baseline DAG scheme descriptor (the one used to define SchemeRef_DAG_1) the following invariants apply:
-
pel1_version:- MUST be
1. - Indicates the descriptor is written against
PEL/1-COREversion 1 semantics. - Future PEL versions MAY introduce new descriptor formats, but MUST NOT change the meaning of
pel1_version = 1.
- MUST be
-
scheme_name:- MUST be the UTF-8 string
"PEL/PROGRAM-DAG/1", compared byte-for-byte and case-sensitively. - Serves as a human-readable identifier and sanity check.
- Changing
scheme_name(while keeping other fields identical) changes the descriptor value and therefore itsReference.
- MUST be the UTF-8 string
-
program_type_tag:-
MUST equal the
TypeTagused for DAG Program Artifacts, symbolically:program_type_tag = TYPE_TAG_PEL_PROGRAM_DAG_1 -
The concrete numeric
tag_idis assigned by the TypeTag registry and is not restated here.
-
-
program_enc_profile:-
MUST be the
EncodingProfileIdofENC/PEL-PROGRAM-DAG/1, symbolically:program_enc_profile = PEL_ENC_PROGRAM_DAG_V1 -
In the current encoding profile, this is
0x0101, but this spec treats it symbolically; the numeric value comes from the encoding profile registry.
-
-
trace_profile_ref:-
Optionally points at a descriptor Artifact that defines a canonical trace profile for this scheme (e.g. a future
PEL/TRACE-DAG-DESC/1). -
For the canonical Amduat 2.0 baseline descriptor used to define
SchemeRef_DAG_1, this field is absent:trace_profile_ref = None -
Future companion descriptors MAY set this field, but those will not be the descriptor used for
SchemeRef_DAG_1.
-
-
opreg_ref:-
Optionally points at a descriptor Artifact for the canonical operation registry for this scheme (e.g.
OPREG/PEL1-KERNEL). -
For the canonical Amduat 2.0 baseline descriptor used to define
SchemeRef_DAG_1, this field is absent:opreg_ref = None -
As with
trace_profile_ref, future descriptors MAY set this field, but those will define distinctSchemeRefvalues, notSchemeRef_DAG_1.
-
3.3 Canonical descriptor value for the DAG scheme
Let:
DagSchemeDescriptor_DAG_1 : DagSchemeDescriptor
denote the unique logical descriptor value that satisfies:
DagSchemeDescriptor_DAG_1 {
pel1_version = 1
scheme_name = "PEL/PROGRAM-DAG/1"
program_type_tag = TYPE_TAG_PEL_PROGRAM_DAG_1
program_enc_profile = PEL_ENC_PROGRAM_DAG_V1
trace_profile_ref = None
opreg_ref = None
}
All Amduat 2.0 baseline components MUST agree on this logical value as “the” DAG scheme descriptor for binding PEL/PROGRAM-DAG/1 to a SchemeRef.
Any descriptor with different logical contents (including differing optional fields) describes either:
- a different scheme, or
- a different profile or version of the DAG scheme,
and MUST NOT be used to derive SchemeRef_DAG_1.
Because the descriptor is carried in an ASL/1 Artifact and scheme references are content-addressed, any change to this descriptor (even in optional fields) yields a different Reference; SchemeRef_DAG_1 is therefore permanently tied to exactly this v1 descriptor.
4. Descriptor Artifact & Encoding
4.1 Descriptor TypeTag
The DAG scheme descriptor is carried by an ASL/1 Artifact with a dedicated TypeTag:
TYPE_TAG_PEL_SCHEME_DESC_1 : TypeTag
TYPE_TAG_PEL_SCHEME_DESC_1is a symbolic constant for aTypeTag.tag_idassigned by the globalTypeTagregistry.- This
TypeTagMUST be used for the DAG scheme descriptor Artifact defined in this document. - Other PEL scheme descriptors MAY reuse this
TypeTagand the encoding in §4.2, but such reuse MUST be specified in their own descriptor documents.
The descriptor Artifact for the DAG scheme has the shape:
DagSchemeDescriptorArtifact_DAG_1 : Artifact {
type_tag = TYPE_TAG_PEL_SCHEME_DESC_1
bytes = DagSchemeDescriptorBytes_DAG_1
}
where DagSchemeDescriptorBytes_DAG_1 is the canonical encoding of DagSchemeDescriptor_DAG_1 defined in §4.2.
This Artifact itself is encoded to ArtifactBytes using ASL_ENC_CORE_V1 when deriving SchemeRef_DAG_1 (§5.2). That use of ASL_ENC_CORE_V1 is independent of the program_enc_profile field, which is about how Program Artifacts are encoded.
4.2 Descriptor encoding layout
The descriptor value DagSchemeDescriptor is encoded into DagSchemeDescriptorBytes using a small, fixed layout over primitive types:
DagSchemeDescriptorBytes ::
pel1_version (u16)
scheme_name (Utf8String)
program_type_tag (u32) // TypeTag.tag_id
program_enc_profile (u16) // EncodingProfileId
has_trace_profile (u8)
[ trace_profile_ref (EncodedRef) ] // if has_trace_profile == 0x01
has_opreg_ref (u8)
[ opreg_ref (EncodedRef) ] // if has_opreg_ref == 0x01
Constraints:
-
pel1_versionMUST be1for descriptors governed by this document. -
scheme_nameMUST be encoded as aUtf8String(§2.4). -
program_type_tagencodesTypeTag.tag_idforTYPE_TAG_PEL_PROGRAM_DAG_1. -
program_enc_profileencodes theEncodingProfileIdforPEL_ENC_PROGRAM_DAG_V1as defined inENC/PEL-PROGRAM-DAG/1. -
has_trace_profile:0x00→trace_profile_refis absent; no bytes for it follow.0x01→trace_profile_refis present and encoded asEncodedRef.- Any other value is an encoding error.
-
has_opreg_ref:0x00→opreg_refis absent.0x01→opreg_refis present and encoded asEncodedRef.- Any other value is an encoding error.
For the canonical baseline descriptor:
pel1_version = 1
scheme_name = "PEL/PROGRAM-DAG/1"
program_type_tag = TYPE_TAG_PEL_PROGRAM_DAG_1.tag_id
program_enc_profile = PEL_ENC_PROGRAM_DAG_V1
has_trace_profile = 0x00
has_opreg_ref = 0x00
The resulting bytes are DagSchemeDescriptorBytes_DAG_1.
4.3 Encoding and decoding (normative)
Let:
encode_dag_scheme_descriptor_v1 : DagSchemeDescriptor -> OctetString
decode_dag_scheme_descriptor_v1 : OctetString -> DagSchemeDescriptor | error
be the encoding and decoding functions for this profile.
Encoding:
Given a DagSchemeDescriptor value:
-
Emit
pel1_version (u16). -
Emit
scheme_nameasUtf8String. -
Emit
program_type_tag.tag_idasu32. -
Emit
program_enc_profileasu16. -
For
trace_profile_ref:-
If absent:
- emit
has_trace_profile = 0x00.
- emit
-
If present:
- emit
has_trace_profile = 0x01, - emit
trace_profile_refasEncodedRef(u32 length +ReferenceBytes).
- emit
-
-
For
opreg_ref:-
If absent:
- emit
has_opreg_ref = 0x00.
- emit
-
If present:
- emit
has_opreg_ref = 0x01, - emit
opreg_refasEncodedRef.
- emit
-
The concatenation of all emitted bytes is DagSchemeDescriptorBytes.
Decoding:
Given an OctetString known to contain exactly one DagSchemeDescriptorBytes value:
-
Read
pel1_version (u16).- If
pel1_version != 1, decoders that only implement this version MUST treat this as an encoding error. Future decoders MAY support additional versions but MUST NOT reinterpretpel1_version = 1.
- If
-
Read
scheme_nameasUtf8Stringand validate UTF-8. -
Read
program_type_tag (u32)and constructTypeTag { tag_id = program_type_tag }. -
Read
program_enc_profile (u16). -
Read
has_trace_profile (u8):0x00→trace_profile_ref = None.0x01→ readtrace_profile_refasEncodedRefand decode toReference.- other values → encoding error.
-
Read
has_opreg_ref (u8):0x00→opreg_ref = None.0x01→ readopreg_refasEncodedRefand decode toReference.- other values → encoding error.
-
If there are trailing bytes after successfully decoding all fields, decoders MAY treat this as an encoding error in contexts expecting a single
DagSchemeDescriptorBytesvalue.
The mapping between DagSchemeDescriptor and DagSchemeDescriptorBytes defined here is the only encoding/decoding pair permitted by this profile.
4.4 Canonicality and injectivity
The mapping:
DagSchemeDescriptor -> DagSchemeDescriptorBytes
defined above MUST be:
- Injective — distinct logical descriptor values MUST produce distinct byte strings.
- Stable — the same logical descriptor MUST always encode to the same bytes across implementations and time.
- Streaming-friendly — encoders and decoders MUST be implementable in a single forward pass; all length prefixes appear before their content.
In particular:
- Field ordering MUST NOT vary.
- No alternative encodings (e.g. different integer widths, string formats, or positions) are permitted.
EncodedRefMUST always use canonicalReferenceBytesfromENC/ASL1-CORE v1(and therefore, whenHASH/ASL1is present, inherit its digest-length consistency checks).
For the canonical DAG scheme, DagSchemeDescriptor_DAG_1 encodes to a single, immutable DagSchemeDescriptorBytes_DAG_1. That byte sequence MUST NOT change once published.
4.5 Error handling (encoding layer)
Decoders for this profile MUST treat as encoding errors at the descriptor level:
-
Unsupported
pel1_versionpel1_version != 1.
-
Invalid presence flags
has_trace_profileorhas_opreg_refnot in{ 0x00, 0x01 }.
-
Invalid
EncodedRefref_len < 2, or- insufficient bytes to read
ref_bytes, or ref_bytescannot be decoded asReferenceBytesunderENC/ASL1-CORE v1(including digest-length mismatches for knownhash_ids whenHASH/ASL1is implemented).
-
Invalid
Utf8Stringforscheme_namescheme_namebytes are not valid UTF-8.
-
Truncation and over-long payloads
- Not enough bytes to read any declared field.
- In contexts expecting a single descriptor value, additional trailing bytes after decoding all fields.
Mapping from these encoding errors to external error codes (e.g. ERR_PEL_SCHEME_DESC_INVALID) is implementation-specific.
5. Definition of SchemeRef_DAG_1
5.1 General derivation from the descriptor Artifact
Let DagSchemeDescriptorArtifact be any Artifact of the form:
Artifact {
type_tag = TYPE_TAG_PEL_SCHEME_DESC_1
bytes = DagSchemeDescriptorBytes
}
such that DagSchemeDescriptorBytes decodes to some DagSchemeDescriptor value via decode_dag_scheme_descriptor_v1.
Given:
- encoding profile
P = ASL_ENC_CORE_V1, - hash algorithm
HwithHashId = HID,
the scheme reference for this descriptor under (P, H) is:
ArtifactBytes = encode_artifact_core_v1(DagSchemeDescriptorArtifact)
digest = H(ArtifactBytes)
SchemeRef = Reference { hash_id = HID, digest = digest }
This is ASL/CORE-REF-DERIVE/1 instantiated with ASL_ENC_CORE_V1.
5.2 Canonical SchemeRef_DAG_1 for Amduat 2.0
For the Amduat 2.0 baseline DAG scheme, we choose:
DagSchemeDescriptorArtifact = DagSchemeDescriptorArtifact_DAG_1,P = ASL_ENC_CORE_V1(EncodingProfileId = 0x0001),H = HASH-ASL1-256(the mandatory ASL1-256 algorithm),HashId(H) = 0x0001.
Then:
ArtifactBytes_DAG_1 = encode_artifact_core_v1(DagSchemeDescriptorArtifact_DAG_1)
digest_DAG_1 = HASH-ASL1-256(ArtifactBytes_DAG_1)
SchemeRef_DAG_1 = Reference { hash_id = 0x0001, digest = digest_DAG_1 }
In the Amduat 2.0 baseline:
-
PEL/PROGRAM-DAG/1binds its scheme symbol:SchemeRef = SchemeRef_DAG_1 Exec_s = Exec_DAGto this
Reference. -
Engines that implement the Amduat 2.0 baseline DAG scheme MUST treat this specific
Referenceas “the” scheme identifier forPEL/PROGRAM-DAG/1.
5.3 Alternative deployments (non-baseline)
Other deployments MAY derive alternative scheme references from:
- the same descriptor Artifact but a different
(EncodingProfileId, HashId)pair, or - a different descriptor Artifact (e.g. one with additional optional references or different metadata).
Such configurations:
- are not the Amduat 2.0 baseline, and
- MUST NOT reuse the name
SchemeRef_DAG_1for any scheme reference other than the one defined in §5.2.
Profiles MAY define their own symbolic names (e.g. SchemeRef_DAG_1_PQ) for alternate (EncodingProfileId, HashId) combinations, but those are outside the scope of this document.
6. Layering & Usage
6.1 Engine behavior
A PEL/1-CORE engine that claims support for the DAG scheme in the Amduat 2.0 baseline:
-
MUST recognize
SchemeRef_DAG_1(as defined in §5.2) as the scheme identifier corresponding toPEL/PROGRAM-DAG/1. -
MUST implement:
Exec_s = Exec_DAGwhen invoked with
scheme_ref = SchemeRef_DAG_1. -
MUST treat Program Artifacts for this scheme as ASL/1 Artifacts whose
type_tagequals theprogram_type_tagfrom the descriptor (i.e.TYPE_TAG_PEL_PROGRAM_DAG_1). Theprogram_enc_profilefield gives the encoding profile ID that engines use to select the appropriate Program encoding/decoding logic; in the Amduat 2.0 baseline this ID isPEL_ENC_PROGRAM_DAG_V1as defined inENC/PEL-PROGRAM-DAG/1. -
MUST treat the descriptor Artifact as immutable metadata. Engines MAY bake in
SchemeRef_DAG_1and the associatedTypeTagand profile IDs at build time; they are not required to fetch or decode the descriptor on the execution hot path.
Nothing in this document requires engines to use trace_profile_ref or opreg_ref at runtime. Those fields exist so that tooling and profiles can discover related descriptors in a stable, content-addressed way.
6.2 Configuration and discovery
Tooling and configuration systems MAY use the descriptor to:
-
discover:
- which
TypeTagis used for DAG Programs, - which encoding profile ID applies to those Programs,
- optional references to trace and operation-registry descriptors;
- which
-
populate engine configuration tables, e.g.:
scheme_table[SchemeRef_DAG_1] = { program_type_tag = TYPE_TAG_PEL_PROGRAM_DAG_1, program_enc_profile = PEL_ENC_PROGRAM_DAG_V1, trace_profile_ref = None, opreg_ref = None, }
This document:
- MUST NOT introduce any store-level behavior, TGK edge semantics, certification rules, fact semantics, or overlay semantics.
- ONLY binds PEL-level scheme semantics (
Exec_DAG) to ASL-level values (Artifact,TypeTag,Reference).
7. Conformance
An implementation is PEL/PROGRAM-DAG-DESC/1–conformant if it satisfies all of:
-
Descriptor encoding & decoding
- Implements
encode_dag_scheme_descriptor_v1/decode_dag_scheme_descriptor_v1as in §4.2–§4.3. - Treats
pel1_version = 1as the only supported version for this descriptor profile. - Enforces presence flags and
EncodedRefstructure as defined in §2.4 and §4.5.
- Implements
-
Recognition of the descriptor Artifact
- Recognizes
TYPE_TAG_PEL_SCHEME_DESC_1as the PEL scheme descriptor tag for this document. - For
type_tag = TYPE_TAG_PEL_SCHEME_DESC_1, is able to decodebytesasDagSchemeDescriptorBytesand obtain aDagSchemeDescriptor. - Recognizes
DagSchemeDescriptor_DAG_1(per §3.3) as the canonical descriptor value for the DAG scheme in Amduat 2.0 (e.g. by comparing decoded fields).
- Recognizes
-
Derivation of
SchemeRef_DAG_1- When configured with
ASL_ENC_CORE_V1andHASH-ASL1-256(HashId = 0x0001), derivesSchemeRef_DAG_1exactly as in §5.2 fromDagSchemeDescriptorArtifact_DAG_1. - Does not derive
SchemeRef_DAG_1from any other Artifact or under any other(EncodingProfileId, HashId)pair.
- When configured with
-
Scheme binding
- For
SchemeRef = SchemeRef_DAG_1, implementsExec_sasExec_DAGperPEL/PROGRAM-DAG/1. - Uses
program_type_tagandprogram_enc_profilefrom the descriptor when interpreting Program Artifacts for this scheme (at build time or configuration time; not necessarily on every execution).
- For
-
Layering discipline
-
Does not introduce store, TGK, certificate, fact, or overlay semantics into the descriptor logic.
-
Treats this document purely as a binding between:
- the PEL scheme (
PEL/PROGRAM-DAG/1), - its program representation (
TYPE_TAG_PEL_PROGRAM_DAG_1+PEL_ENC_PROGRAM_DAG_V1), - and an ASL/1
SchemeRef(SchemeRef_DAG_1).
- the PEL scheme (
-
Everything else — store wiring, TGK edges, receipts, facts, overlays, and domain semantics — is delegated to other specifications.
8. Version History
- 0.1.6 — 2025-11-16 — Marked
ENC/PEL-PROGRAM-DAG/1as a normative dependency and clarified thatprogram_enc_profileis specificallyPEL_ENC_PROGRAM_DAG_V1. - 0.1.5 — 2025-11-16 — Clarified the role of
program_enc_profilevsASL_ENC_CORE_V1and tightened wording around how Program Artifacts are interpreted. - 0.1.4 — 2025-11-16 — Tightened decoding wording, clarified the uniqueness of the encoding/decoding pair, and polished streaming/injectivity language.
- 0.1.3 — 2025-11-16 — Clarified RFC 2119 usage, layering around program encoding, and tightened conformance wording.
- 0.1.2 — 2025-11-16 — Refined encoding error rules, clarified
TYPE_TAG_PEL_SCHEME_DESC_1reuse, and described engine usage more explicitly. - 0.1.1 — 2025-11-16 — Added logical descriptor model, descriptor Artifact & encoding, canonical descriptor value, and explicit
SchemeRef_DAG_1derivation. - 0.1.0 — 2025-11-16 — Initial skeleton with structure, roles, and high-level field model for the DAG scheme descriptor.
Document History
- 0.1.6 (2025-11-16): Registered as Tier-1 spec and aligned to the Amduat 2.0 substrate baseline.