A capability ID designates an exact and frozen set of operations, fields, bounds and semantics. That set can never be widened or reinterpreted. IDs are never renumbered and never reused. A new operation, a new variant of an operation or any observable change always receives a new ID, even when it is conceptually close to an existing capability.
An engine publishes the list of capability IDs it implements and refuses to load a bundle declaring a single unknown ID.
| ID | Name | Content |
|---|---|---|
| 1 | CORE_GRAPH_V1 |
programs, topological nodes, typed values |
| 2 | ASCII_AND_WHITESPACE_V1 |
ASCII classes and the frozen whitespace table |
| 3 | CANONICALIZATION_BASIC_V1 |
trim, uppercase, remove, prefix, pad, insert |
| 4 | CANONICALIZATION_CONDITIONAL_V1 |
when and predicates over the current value |
| 5 | IDENTIFIER_DISPATCH_V1 |
kind/country/prefixes, separated alias spaces and two phase selection |
| 10 | STRING_VIEWS_V1 |
slice, before/after, concat, absence |
| 11 | CAPTURES_AND_CALLS_V1 |
captures and program reuse |
| 20 | FORMAT_ASSERTIONS_V1 |
predicates and ordered assertions |
| 21 | PROFILES_V1 |
compatible and strict_current |
| 30 | CHECKSUM_TRISTATE_V1 |
valid, invalid, unsupported and branching |
| 31 | CHECKSUM_LUHN_V1 |
Luhn |
| 32 | CHECKSUM_MOD97_V1 |
ISO 7064 / modulo 97 |
| 33 | CHECKSUM_WEIGHTED_V1 |
weighted sums, alignments and remainders |
| 34 | CHECKSUM_COMPARE_CONSTANT_V1 |
comparison against a literal constant |
| 35 | CHECKSUM_INTEGER_PREDICATE_V1 |
branching on the value of an integer |
| 40 | PROVENANCE_V1 |
sources linked to definitions |
| 41 | PROVENANCE_TIER_V1 |
how close a source sits to the authority |
| 42 | CHECKSUM_CUSTOM_ALPHABET_V1 |
weighted sums over an issuer's own alphabet |
Programs, topological nodes, typed values.
Frozen content:
RuleBundle,Program,Nodeand theValueTypeenum.- Programs are typed acyclic graphs whose nodes only reference strictly lower indices.
root_nodedesignates the single result node of a program.- Structural limits of docs/ir.md section "Execution limits".
- Rejection of an absent
oneof operation, of anUNSPECIFIEDenum value and of any unknown Protobuf field at any depth.
Operations requiring this capability:
ASSERTION_OP_KIND_REQUIREASSERTION_OP_KIND_SEQUENCECALL_OP_KIND_CHECKSUMCALL_OP_KIND_FORMATCANONICALIZATION_OP_KIND_APPENDCANONICALIZATION_OP_KIND_INSERTCANONICALIZATION_OP_KIND_LEFT_PADCANONICALIZATION_OP_KIND_PREPENDCANONICALIZATION_OP_KIND_PREPEND_COUNTRY_IF_MISSINGCANONICALIZATION_OP_KIND_REMOVE_CHARSCANONICALIZATION_OP_KIND_REMOVE_WHITESPACECANONICALIZATION_OP_KIND_REPLACE_PREFIXCANONICALIZATION_OP_KIND_SEQUENCECANONICALIZATION_OP_KIND_TRIM_WHITESPACECANONICALIZATION_OP_KIND_UPPERCASE_ASCIICANONICALIZATION_OP_KIND_WHENCHECKSUM_OP_KIND_ALL_CHECKSCHECKSUM_OP_KIND_ANY_CHECKCHECKSUM_OP_KIND_CHOOSECHECKSUM_OP_KIND_COMPARE_CONSTANTCHECKSUM_OP_KIND_COMPARE_DIGITCHECKSUM_OP_KIND_COMPARE_SLICECHECKSUM_OP_KIND_ISO7064_MOD97_10CHECKSUM_OP_KIND_LUHNCHECKSUM_OP_KIND_UNSUPPORTEDCHECKSUM_OP_KIND_WHENINTEGER_OP_KIND_COMPLEMENTINTEGER_OP_KIND_DIGITS_TO_INTEGERINTEGER_OP_KIND_MODULOINTEGER_OP_KIND_MOD_DIGITSINTEGER_OP_KIND_REMAINDER_MAPINTEGER_OP_KIND_WEIGHTED_SUMPREDICATE_OP_KIND_ALLPREDICATE_OP_KIND_ANYPREDICATE_OP_KIND_ASCII_ALPHANUMERICPREDICATE_OP_KIND_ASCII_CHARSETPREDICATE_OP_KIND_ASCII_DIGITSPREDICATE_OP_KIND_ASCII_UPPER_LETTERSPREDICATE_OP_KIND_CHAR_AT_INPREDICATE_OP_KIND_CONTAINSPREDICATE_OP_KIND_ENDS_WITHPREDICATE_OP_KIND_EQUALSPREDICATE_OP_KIND_INTEGER_ISPREDICATE_OP_KIND_IS_ABSENTPREDICATE_OP_KIND_IS_EMPTYPREDICATE_OP_KIND_LENGTH_BETWEENPREDICATE_OP_KIND_LENGTH_EQPREDICATE_OP_KIND_LENGTH_INPREDICATE_OP_KIND_NOTPREDICATE_OP_KIND_PREFIX_INPREDICATE_OP_KIND_PROFILE_ISPREDICATE_OP_KIND_STARTS_WITHSTRING_OP_KIND_AFTER_FIRSTSTRING_OP_KIND_BEFORE_FIRSTSTRING_OP_KIND_CONCATSTRING_OP_KIND_CONSTANTSTRING_OP_KIND_COUNTRY_CODESTRING_OP_KIND_SLICESTRING_OP_KIND_SLICE_FROMSTRING_OP_KIND_SLICE_TOSTRING_OP_KIND_STRIP_PREFIXSTRING_OP_KIND_SUBJECTSTRING_OP_KIND_VALUE
ASCII classes and the frozen whitespace table.
Frozen content:
- ASCII digit class
U+0030..U+0039. - ASCII upper letter class
U+0041..U+005A, ASCII lower letter classU+0061..U+007A. - The frozen
whitespace_v1table: U+0009..U+000D, U+0020, U+0085, U+00A0, U+1680, U+2000..U+200A, U+2028, U+2029, U+202F, U+205F, U+3000, U+FEFF. uppercase_asciimaps onlya..ztoA..Zand never consults a locale.- Code point based positions and lengths.
Operations requiring this capability:
CANONICALIZATION_OP_KIND_REMOVE_WHITESPACECANONICALIZATION_OP_KIND_TRIM_WHITESPACECANONICALIZATION_OP_KIND_UPPERCASE_ASCIIPREDICATE_OP_KIND_ASCII_ALPHANUMERICPREDICATE_OP_KIND_ASCII_CHARSETPREDICATE_OP_KIND_ASCII_DIGITSPREDICATE_OP_KIND_ASCII_UPPER_LETTERS
Trim, uppercase, remove, prefix, pad, insert.
Frozen content:
- Sequential canonicalization programs and the
SEQUENCEstep. - Unconditional canonicalization steps listed in docs/ir.md.
- A canonicalization program never truncates and never fails on user input.
Operations requiring this capability:
CANONICALIZATION_OP_KIND_APPENDCANONICALIZATION_OP_KIND_INSERTCANONICALIZATION_OP_KIND_LEFT_PADCANONICALIZATION_OP_KIND_PREPENDCANONICALIZATION_OP_KIND_PREPEND_COUNTRY_IF_MISSINGCANONICALIZATION_OP_KIND_REMOVE_CHARSCANONICALIZATION_OP_KIND_REMOVE_WHITESPACECANONICALIZATION_OP_KIND_REPLACE_PREFIXCANONICALIZATION_OP_KIND_SEQUENCECANONICALIZATION_OP_KIND_TRIM_WHITESPACECANONICALIZATION_OP_KIND_UPPERCASE_ASCII
when and predicates over the current value.
Frozen content:
- The
WHENcanonicalization step. - Evaluation of a predicate against the value current at the moment the step runs.
- No memoization is observable across canonicalization steps.
Operations requiring this capability:
CANONICALIZATION_OP_KIND_WHEN
Kind/country/prefixes, separated alias spaces and two phase selection.
Frozen content:
IdentifierDispatcher,CountryAlias,DispatchTargetand the pre-canonicalization program.- The nine step dispatch algorithm of docs/ir.md.
- Separated alias spaces for kinds, countries and prefixes.
GLOBALtargets expressed by the absence ofcountry_code.- The
country_code()string constructor and thePREPEND_COUNTRY_IF_MISSINGcanonicalization step.
Operations requiring this capability:
CANONICALIZATION_OP_KIND_PREPEND_COUNTRY_IF_MISSINGSTRING_OP_KIND_COUNTRY_CODE
Slice, before/after, concat, absence.
Frozen content:
- Possibly absent string views and their propagation rules.
- The string view constructors listed in docs/ir.md.
IS_ABSENT, the only predicate that observes absence as true.
Operations requiring this capability:
PREDICATE_OP_KIND_IS_ABSENTSTRING_OP_KIND_AFTER_FIRSTSTRING_OP_KIND_BEFORE_FIRSTSTRING_OP_KIND_CONCATSTRING_OP_KIND_SLICESTRING_OP_KIND_SLICE_FROMSTRING_OP_KIND_SLICE_TOSTRING_OP_KIND_STRIP_PREFIX
Captures and program reuse.
Frozen content:
Program.capturesand the per format capture limit.CallOperationforuse_formatandapply_checksum.- The acyclic, typed call graph of static depth at most 32.
Program.subject_nodeand the subject supplied by a caller.
Operations requiring this capability:
CALL_OP_KIND_CHECKSUMCALL_OP_KIND_FORMAT
Predicates and ordered assertions.
Frozen content:
AssertionOperationwithSEQUENCEandREQUIRE.- Ordered evaluation: the first failing assertion determines the reason code and the message key.
- The non ASCII specific predicates listed in docs/ir.md.
- Reason codes usable by
REQUIRE, restricted to codes that prove invalidity.
Operations requiring this capability:
ASSERTION_OP_KIND_REQUIREASSERTION_OP_KIND_SEQUENCECALL_OP_KIND_FORMATPREDICATE_OP_KIND_ALLPREDICATE_OP_KIND_ANYPREDICATE_OP_KIND_CHAR_AT_INPREDICATE_OP_KIND_CONTAINSPREDICATE_OP_KIND_ENDS_WITHPREDICATE_OP_KIND_EQUALSPREDICATE_OP_KIND_IS_EMPTYPREDICATE_OP_KIND_LENGTH_BETWEENPREDICATE_OP_KIND_LENGTH_EQPREDICATE_OP_KIND_LENGTH_INPREDICATE_OP_KIND_NOTPREDICATE_OP_KIND_PREFIX_INPREDICATE_OP_KIND_STARTS_WITH
Compatible and strict_current.
Frozen content:
IdentifierDefinition.default_profilerestricted tocompatibleandstrict_current.- The
PROFILE_ISpredicate. compatibleis the normative default and never restricts the canonicalization shared by both profiles.
Operations requiring this capability:
PREDICATE_OP_KIND_PROFILE_IS
Valid, invalid, unsupported and branching.
Frozen content:
ChecksumOperationand the tri-state checksum outcome.CHOOSE,WHEN,ALL_CHECKS,ANY_CHECKandUNSUPPORTED.COMPARE_DIGITandCOMPARE_SLICE.- The integer constructors
DIGITS_TO_INTEGER,MOD_DIGITS,MODULO,COMPLEMENTandREMAINDER_MAPwith their checked arithmetic bounds. - Propagation of an indeterminate integer to
unsupported/unsupported_checksum. IdentifierDefinition.absent_checksum_reason.
Operations requiring this capability:
CALL_OP_KIND_CHECKSUMCHECKSUM_OP_KIND_ALL_CHECKSCHECKSUM_OP_KIND_ANY_CHECKCHECKSUM_OP_KIND_CHOOSECHECKSUM_OP_KIND_COMPARE_CONSTANTCHECKSUM_OP_KIND_COMPARE_DIGITCHECKSUM_OP_KIND_COMPARE_SLICECHECKSUM_OP_KIND_ISO7064_MOD97_10CHECKSUM_OP_KIND_LUHNCHECKSUM_OP_KIND_UNSUPPORTEDCHECKSUM_OP_KIND_WHENINTEGER_OP_KIND_COMPLEMENTINTEGER_OP_KIND_DIGITS_TO_INTEGERINTEGER_OP_KIND_MODULOINTEGER_OP_KIND_MOD_DIGITSINTEGER_OP_KIND_REMAINDER_MAPINTEGER_OP_KIND_WEIGHTED_SUMPREDICATE_OP_KIND_INTEGER_IS
Luhn.
Frozen content:
- The
LUHNchecksum operation over ASCII digits only.
Operations requiring this capability:
CHECKSUM_OP_KIND_LUHN
ISO 7064 / modulo 97.
Frozen content:
- The
ISO7064_MOD97_10checksum operation with base 36 expansion of ASCII letters.
Operations requiring this capability:
CHECKSUM_OP_KIND_ISO7064_MOD97_10
Weighted sums, alignments and remainders.
Frozen content:
- The
WEIGHTED_SUMinteger operation. - The
WeightAlignmentvaluesLEFT,RIGHTandCYCLE. - The
CharMappingvaluesDIGIT_VALUEandALNUM_BASE36.
Operations requiring this capability:
INTEGER_OP_KIND_WEIGHTED_SUM
Comparison against a literal constant.
Frozen content:
- The
COMPARE_CONSTANTchecksum operation. - It closes the gap left by
COMPARE_DIGITandCOMPARE_SLICE, which can only compare a computed integer against part of the value being checked. A rule stating that a remainder must equal zero has nothing in the value to compare against.
Operations requiring this capability:
CHECKSUM_OP_KIND_COMPARE_CONSTANT
Branching on the value of an integer.
Frozen content:
- The
INTEGER_ISpredicate. - Every other predicate reads a string, so a checksum could compare a remainder but never branch on it. Registers that recompute their sum with a second set of weights when the first remainder reaches a given value need exactly that.
Operations requiring this capability:
PREDICATE_OP_KIND_INTEGER_IS
Sources linked to definitions.
Frozen content:
SourceandIdentifierDefinition.sources, sorted by source id.- Every rule able to reject an input carries at least one source.
This capability declares no operation of its own: it is required by the bundle level constructs listed above.
How close a source sits to the authority.
Frozen content:
Source.tierand theSourceTierenumeration.- It is a capability of its own rather than an addition to
PROVENANCE_V1, whose content is frozen: a field added to a frozen capability reaches an engine as an unknown field, which reads as a forged bundle rather than as the version gap it is. - Only a stated tier requires it.
tieris notoptionalin the schema, so aSourcethat omits the field and one that setsSOURCE_TIER_UNSPECIFIEDare the same bytes;UNSPECIFIEDtherefore means the source states no tier, and a bundle whose sources all state none does not declare this capability. RefusingUNSPECIFIEDwould make this capability mandatory the momentPROVENANCE_V1is, which is the opposite of the independence a separate id exists to give. A value outside the enumeration remainsinvalid_ruleset.
This capability declares no operation of its own: it is required by the bundle level constructs listed above.
Weighted sums over an issuer's own alphabet.
Frozen content:
- The
CharMappingvalueCUSTOM_ALPHABET, and thealphabetfield ofIntegerOperationthat carries its ordered code points. - The value of a code point is its index in that alphabet. A code point absent from it makes the sum indeterminate, exactly as a letter does under
DIGIT_VALUE. - It exists because an issuer's alphabet is often neither base 10 nor base 36. Letters that are misread as digits get dropped, and every letter after the gap shifts: the Chinese unified social credit code omits I, O, S, V and Z, so its
Jis 18 whereALNUM_BASE36makes it 19. Without this, such a checksum cannot be stated at all, and a published algorithm that cannot be stated has to be reportedunsupported.
This capability declares no operation of its own: it is required by the bundle level constructs listed above.