Skip to content

Fact/Capability Registry

Every model field converted to Fact[T] is declared exactly once in abicheck/model/fact_registry.py's FACT_REGISTRY — its value type, producing backends, persistence, and whether it participates in identity/comparison/suppression/reporting. See the implementation plan's Phase 5 section for the design this page's data comes from.

Converted facts

Fact Value type Producing backends Lifecycle Persisted Identity Comparable Suppressible Reportable
AbiSnapshot.ast_resolved_standard str \| None castxml, clang persisted ✅ — ✅ — ✅
AbiSnapshot.public_header_identifiers frozenset[str] \| None castxml, clang consumed ✅ — — — —
ElfMetadata.dynamic_flags frozenset[str] \| None elf persisted ✅ — ✅ — ✅
ElfMetadata.has_fini bool \| None elf persisted ✅ — ✅ — ✅
ElfMetadata.has_init bool \| None elf persisted ✅ — ✅ — ✅
EnumType.deprecated str \| None castxml, clang consumed ✅ — ✅ — ✅
EnumType.is_scoped bool \| None castxml, clang consumed ✅ — ✅ — ✅
EnumType.ownership EntityOwnership castxml, clang persisted ✅ — — — ✅
EnumType.qualified_name str \| None castxml, clang persisted ✅ ✅ ✅ — ✅
EnumType.source_header str \| None castxml, clang, dwarf, pdb persisted ✅ — ✅ — ✅
Function.binary_exported bool castxml, clang, dwarf persisted ✅ — ✅ — ✅
Function.contract_attributes list[str] \| None castxml, clang persisted ✅ — ✅ — ✅
Function.declared_in_headers bool castxml, clang persisted ✅ — ✅ — ✅
Function.deprecated str \| None castxml, clang consumed ✅ — ✅ — ✅
Function.elf_binding SymbolBinding \| None castxml, clang, elf persisted ✅ — ✅ — ✅
Function.exception_spec str \| None castxml, clang persisted ✅ — ✅ — ✅
Function.explicit_instantiation ExplicitInstantiation clang consumed ✅ — ✅ — —
Function.hidden_friend_owner str \| None castxml, clang persisted ✅ — ✅ — ✅
Function.in_public_contract bool castxml, clang persisted ✅ — ✅ — ✅
Function.is_compiler_generated bool \| None castxml persisted ✅ — ✅ — ✅
Function.is_explicit bool \| None castxml, clang, dwarf persisted ✅ — ✅ — ✅
Function.is_hidden_friend bool \| None castxml, clang persisted ✅ — ✅ — ✅
Function.is_inline bool castxml, clang consumed ✅ — ✅ — ✅
Function.is_override bool \| None castxml, clang persisted ✅ — ✅ — ✅
Function.is_variadic bool \| None castxml, clang persisted ✅ — ✅ — ✅
Function.ownership EntityOwnership castxml, clang persisted ✅ — — — ✅
Function.return_type_abi AbiFundamental castxml, clang, dwarf consumed ✅ — ✅ — ✅
Function.return_type_identities tuple[str, ...] castxml consumed ✅ — — — —
Function.source_header str \| None castxml, clang persisted ✅ — ✅ — ✅
Function.template_param_defaults tuple[str \| None, ...] clang consumed ✅ — ✅ — —
MachoMetadata.rpaths list[str] \| None macho persisted ✅ — ✅ — ✅
MachoMetadata.weak_dependent_libs list[str] \| None macho persisted ✅ — ✅ — ✅
Param.is_restrict bool castxml, clang consumed ✅ — ✅ — ✅
Param.is_va_list bool clang consumed ✅ — ✅ — ✅
Param.kind ParamKind castxml, clang, dwarf consumed ✅ — ✅ — ✅
Param.type_abi AbiFundamental castxml, clang, dwarf consumed ✅ — ✅ — ✅
Param.type_identities tuple[str, ...] castxml consumed ✅ — — — —
PeMetadata.delay_imports dict[str, list[str]] \| None pe persisted ✅ — ✅ — ✅
RecordType.bases list[str] castxml, clang, dwarf consumed ✅ — ✅ — ✅
RecordType.data_size_bits int \| None clang persisted ✅ — ✅ — ✅
RecordType.deprecated str \| None castxml, clang consumed ✅ — ✅ — ✅
RecordType.is_abstract bool \| None castxml, clang persisted ✅ — ✅ — ✅
RecordType.is_final bool \| None castxml, clang persisted ✅ — ✅ — ✅
RecordType.is_standard_layout bool \| None clang persisted ✅ — ✅ — ✅
RecordType.is_trivially_copyable bool \| None castxml, clang persisted ✅ — ✅ — ✅
RecordType.ownership EntityOwnership castxml, clang persisted ✅ — — — ✅
RecordType.qualified_name str \| None castxml, clang persisted ✅ ✅ ✅ — ✅
RecordType.source_header str \| None castxml, clang, dwarf, pdb persisted ✅ — ✅ — ✅
RecordType.specialization_declared bool castxml consumed ✅ — — — —
RecordType.template_param_defaults tuple[str \| None, ...] clang consumed ✅ — ✅ — —
RecordType.virtual_bases list[str] castxml, clang, dwarf consumed ✅ — ✅ — ✅
RecordType.vptr_offset_bits int \| None castxml, clang, dwarf consumed ✅ — ✅ — ✅
RecordType.vtable list[str] castxml, clang, dwarf consumed ✅ — ✅ — ✅
TypeField.default str \| None castxml, clang consumed ✅ — ✅ — ✅
TypeField.deprecated str \| None castxml, clang consumed ✅ — ✅ — ✅
TypeField.is_const bool castxml, clang, dwarf consumed ✅ — ✅ — ✅
TypeField.is_mutable bool castxml, clang consumed ✅ — ✅ — ✅
TypeField.is_volatile bool castxml, clang, dwarf consumed ✅ — ✅ — ✅
TypeField.type_abi AbiFundamental castxml, clang, dwarf consumed ✅ — ✅ — ✅
TypeField.type_identities tuple[str, ...] castxml consumed ✅ — — — —
Variable.access AccessLevel castxml consumed ✅ — ✅ — ✅
Variable.alignment_bits int \| None castxml, clang persisted ✅ — ✅ — ✅
Variable.binary_exported bool castxml, clang, dwarf persisted ✅ — ✅ — ✅
Variable.declared_in_headers bool castxml, clang persisted ✅ — ✅ — ✅
Variable.deprecated str \| None castxml, clang consumed ✅ — ✅ — ✅
Variable.elf_binding SymbolBinding \| None castxml, clang, elf persisted ✅ — ✅ — ✅
Variable.explicit_instantiation ExplicitInstantiation clang consumed ✅ — ✅ — —
Variable.in_public_contract bool castxml, clang persisted ✅ — ✅ — ✅
Variable.ownership EntityOwnership castxml, clang persisted ✅ — — — ✅
Variable.source_header str \| None castxml, clang persisted ✅ — ✅ — ✅
Variable.type_abi AbiFundamental castxml, clang, dwarf consumed ✅ — ✅ — ✅
Variable.type_identities tuple[str, ...] castxml consumed ✅ — — — —

Reliability-flag coverage (case (a))

Fields whose availability is governed by a snapshot-level *_facts_reliable flag on AbiSnapshot rather than the field's own resting value — the flag's own docstring in abicheck/model/snapshot.py is the authoritative source for each row.

Reliability flag (AbiSnapshot) Fields it gates
castxml_var_access_facts_reliable Variable.access
clang_deprecation_facts_reliable Function.deprecated, Variable.deprecated, TypeField.deprecated, RecordType.deprecated, EnumType.deprecated, EnumType.is_scoped
clang_field_initializer_facts_reliable TypeField.default
clang_restrict_facts_reliable Param.is_restrict
clang_va_list_facts_reliable Param.is_va_list
clang_vtable_facts_reliable RecordType.vtable, RecordType.vptr_offset_bits
header_cv_facts_reliable TypeField.is_const, TypeField.is_volatile, TypeField.is_mutable
inline_facts_reliable Function.is_inline
param_kind_facts_reliable Param.kind

Eligible but not yet converted

An allowlist-and-shrink baseline (fact_registry. KNOWN_UNCONVERTED_ELIGIBLE_FACTS) of fields the fact-registry- completeness AI-readiness check (scripts/fact_registry_completeness.py) has confirmed are availability-ambiguous — either flag-backed (case (a)) or a documented tri-state annotation (case (b)) — but have no Fact[T] sibling yet. Each is a real, tracked gap, not a silently-accepted one; the check fails if a new eligible field appears that isn't named here.

Field Converted?