{
  "$schema": "https://alxprotocol.com/protocol/1/schemas/error-code-registry.schema.json",
  "$id": "https://alxprotocol.com/protocol/1/error-codes.json",
  "id": "error-codes",
  "protocolVersion": "1",
  "documentVersion": "1.1.0",
  "codes": [
    { "id": "ERR-001", "code": "ALX_SCHEMA_INVALID", "category": "schema", "severity": "fatal" },
    { "id": "ERR-003", "code": "ALX_DUPLICATE_PARENT", "category": "lineage", "severity": "fatal" },
    { "id": "ERR-004", "code": "ALX_PARENT_HASHES_UNSORTED", "category": "lineage", "severity": "fatal" },
    { "id": "ERR-005", "code": "ALX_SELF_PARENT", "category": "lineage", "severity": "fatal" },
    { "id": "ERR-006", "code": "ALX_CONTENT_HASH_MISMATCH", "category": "hash", "severity": "fatal" },
    { "id": "ERR-007", "code": "ALX_BLOCK_HASH_MISMATCH", "category": "hash", "severity": "fatal" },
    { "id": "ERR-008", "code": "ALX_GRAPH_CYCLE", "category": "graph", "severity": "fatal" },
    { "id": "ERR-009", "code": "ALX_MISSING_PARENT", "category": "graph", "severity": "warning", "description": "Required syntactically valid parent Block data was unavailable. This supports incomplete and is not independently a protocol violation." },
    { "id": "ERR-010", "code": "ALX_EXTERNAL_PARENT_UNDECLARED", "category": "graph", "severity": "warning", "description": "An unavailable parent was not declared outside the open-world scope and therefore remains required data. This supports incomplete and is not independently a protocol violation." },
    { "id": "ERR-011", "code": "ALX_CONTEXT_ROOT_MISMATCH", "category": "context", "severity": "fatal", "description": "The validateGraph seed was absent, its claimed blockHash could not normalize, or its normalized identity did not equal context.graphRoot. The request is rejected before a checked Graph result." },
    { "id": "ERR-012", "code": "ALX_EXTERNAL_PARENT_IN_CLOSED_WORLD", "category": "context", "severity": "fatal" },
    { "id": "ERR-013", "code": "ALX_EXTERNAL_PARENT_NOT_REFERENCED", "category": "context", "severity": "fatal" },
    { "id": "ERR-014", "code": "ALX_GRAPH_ROOT_NOT_FOUND", "category": "graph", "severity": "fatal" },
    { "id": "ERR-015", "code": "ALX_DUPLICATE_BLOCK", "category": "graph", "severity": "fatal", "description": "A required Block-source lookup produced multiple supplied candidates claiming the same normalized Block identity." },
    { "id": "ERR-016", "code": "ALX_GRAPH_EDGE_ENDPOINT_MISSING", "category": "graph", "severity": "fatal" },
    { "id": "ERR-017", "code": "ALX_TRACE_ROOT_MISSING", "category": "trace", "severity": "fatal" },
    { "id": "ERR-018", "code": "ALX_TRACE_EDGE_ENDPOINT_MISSING", "category": "trace", "severity": "fatal" },
    { "id": "ERR-019", "code": "ALX_TRACE_LEAVES_MISMATCH", "category": "trace", "severity": "fatal" },
    { "id": "ERR-020", "code": "ALX_TRACE_MAX_DEPTH_MISMATCH", "category": "trace", "severity": "fatal" },
    { "id": "ERR-022", "code": "ALX_TRACE_MISSING_PARENTS_MISMATCH", "category": "trace", "severity": "fatal" },
    { "id": "ERR-023", "code": "ALX_TRACE_EXTERNAL_PARENTS_MISMATCH", "category": "trace", "severity": "fatal" },
    { "id": "ERR-024", "code": "ALX_TRACE_COMPLETENESS_MISMATCH", "category": "trace", "severity": "fatal" },
    { "id": "ERR-025", "code": "ALX_TRACE_NODE_METRICS_MISMATCH", "category": "trace", "severity": "fatal" },
    { "id": "ERR-026", "code": "ALX_RECEIPT_ROOT_MISSING", "category": "receipt", "severity": "fatal" },
    { "id": "ERR-027", "code": "ALX_PARTIAL_OPEN_WORLD_TRACE", "category": "trace", "severity": "warning" },
    { "id": "ERR-028", "code": "ALX_TRACE_MISMATCH", "category": "trace", "severity": "fatal" },
    { "id": "ERR-029", "code": "ALX_UNSUPPORTED_EXTENSION", "category": "extension", "severity": "error" },
    { "id": "ERR-101", "code": "ALX_CANONICALIZATION_DEPTH", "category": "canonicalization", "severity": "fatal" },
    { "id": "ERR-102", "code": "ALX_CANONICALIZATION_BIGINT", "category": "canonicalization", "severity": "fatal" },
    { "id": "ERR-103", "code": "ALX_CANONICALIZATION_SYMBOL", "category": "canonicalization", "severity": "fatal" },
    { "id": "ERR-104", "code": "ALX_CANONICALIZATION_NON_FINITE", "category": "canonicalization", "severity": "fatal" },
    { "id": "ERR-105", "code": "ALX_CANONICALIZATION_UNSAFE_INTEGER", "category": "canonicalization", "severity": "fatal" },
    { "id": "ERR-106", "code": "ALX_CANONICALIZATION_CYCLIC", "category": "canonicalization", "severity": "fatal" },
    { "id": "ERR-107", "code": "ALX_CANONICALIZATION_UNSUPPORTED_TYPE", "category": "canonicalization", "severity": "fatal" },
    { "id": "ERR-108", "code": "ALX_INVALID_HASH", "category": "hash", "severity": "fatal" },
    { "id": "ERR-109", "code": "ALX_TOO_MANY_PARENTS", "category": "hash", "severity": "fatal" },
    { "id": "ERR-110", "code": "ALX_INVALID_LEAF_HASH", "category": "hash", "severity": "fatal" },
    { "id": "ERR-111", "code": "ALX_INVALID_ALGORITHM", "category": "attestation", "severity": "fatal" },
    { "id": "ERR-112", "code": "ALX_INVALID_TIMESTAMP", "category": "attestation", "severity": "fatal" },
    { "id": "ERR-113", "code": "ALX_ATTESTATION_HASH_MISMATCH", "category": "attestation", "severity": "fatal" },
    { "id": "ERR-114", "code": "ALX_ROOT_HASH_REQUIRED", "category": "trace", "severity": "fatal" },
    { "id": "ERR-115", "code": "ALX_INVALID_GRAPH", "category": "graph", "severity": "fatal", "description": "The supplied Graph or Block-source request boundary is structurally unusable for the requested operation." },
    { "id": "ERR-116", "code": "ALX_UNSUPPORTED_VERSION", "category": "version", "severity": "fatal" },
    { "id": "ERR-117", "code": "ALX_CANONICALIZATION_INVALID_UNICODE", "category": "canonicalization", "severity": "fatal" }
  ],
  "extensionRegistries": [
    {
      "extensionId": "merkle",
      "path": "./extensions/merkle/error-codes.json",
      "note": "Merkle extension error codes (MERR-*). ALX_EMPTY_LEAVES and related."
    },
    {
      "extensionId": "signing",
      "path": "./extensions/signing/error-codes.json",
      "note": "Signing and EIP-712 payload error codes (SERR-*). ALX_ETHERS_REQUIRED, ALX_ACTOR_REQUIRED, and related."
    }
  ]
}
