Fact/Capability Registry¶
Every model field converted to Fact[T] (ADR-063 D2) 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
ADR-063 D7 and 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 | ✅ | — | ✅ | — | ✅ |
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 | persisted | ✅ | — | ✅ | — | ✅ |
EnumType.is_scoped |
bool \| None |
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 | persisted | ✅ | — | ✅ | — | ✅ |
Function.elf_binding |
SymbolBinding \| None |
castxml, clang, elf | persisted | ✅ | — | ✅ | — | ✅ |
Function.exception_spec |
str \| None |
castxml, clang | persisted | ✅ | — | ✅ | — | ✅ |
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_override |
bool \| None |
castxml, clang | persisted | ✅ | — | ✅ | — | ✅ |
Function.is_variadic |
bool \| None |
castxml, clang | persisted | ✅ | — | ✅ | — | ✅ |
Function.source_header |
str \| None |
castxml, clang | persisted | ✅ | — | ✅ | — | ✅ |
MachoMetadata.rpaths |
list[str] \| None |
macho | persisted | ✅ | — | ✅ | — | ✅ |
Param.is_restrict |
bool |
castxml, clang | persisted | ✅ | — | ✅ | — | ✅ |
Param.is_va_list |
bool |
clang | persisted | ✅ | — | ✅ | — | ✅ |
Param.kind |
ParamKind |
castxml, clang, dwarf | persisted | ✅ | — | ✅ | — | ✅ |
PeMetadata.delay_imports |
dict[str, list[str]] \| None |
pe | persisted | ✅ | — | ✅ | — | ✅ |
RecordType.bases |
list[str] |
castxml, clang, dwarf | persisted | ✅ | — | ✅ | — | ✅ |
RecordType.data_size_bits |
int \| None |
clang | persisted | ✅ | — | ✅ | — | ✅ |
RecordType.deprecated |
str \| None |
castxml, clang | persisted | ✅ | — | ✅ | — | ✅ |
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 |
clang | persisted | ✅ | — | ✅ | — | ✅ |
RecordType.qualified_name |
str \| None |
castxml, clang | persisted | ✅ | ✅ | ✅ | — | ✅ |
RecordType.source_header |
str \| None |
castxml, clang, dwarf, pdb | persisted | ✅ | — | ✅ | — | ✅ |
RecordType.virtual_bases |
list[str] |
castxml, clang, dwarf | persisted | ✅ | — | ✅ | — | ✅ |
RecordType.vptr_offset_bits |
int \| None |
castxml, clang, dwarf | persisted | ✅ | — | ✅ | — | ✅ |
RecordType.vtable |
list[str] |
castxml, clang, dwarf | persisted | ✅ | — | ✅ | — | ✅ |
TypeField.default |
str \| None |
castxml, clang | persisted | ✅ | — | ✅ | — | ✅ |
TypeField.deprecated |
str \| None |
castxml, clang | persisted | ✅ | — | ✅ | — | ✅ |
TypeField.is_const |
bool |
castxml, clang, dwarf | persisted | ✅ | — | ✅ | — | ✅ |
TypeField.is_mutable |
bool |
castxml, clang | persisted | ✅ | — | ✅ | — | ✅ |
TypeField.is_volatile |
bool |
castxml, clang, dwarf | persisted | ✅ | — | ✅ | — | ✅ |
Variable.access |
AccessLevel |
castxml | persisted | ✅ | — | ✅ | — | ✅ |
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 | persisted | ✅ | — | ✅ | — | ✅ |
Variable.elf_binding |
SymbolBinding \| None |
castxml, clang, elf | persisted | ✅ | — | ✅ | — | ✅ |
Variable.in_public_contract |
bool |
castxml, clang | persisted | ✅ | — | ✅ | — | ✅ |
Variable.source_header |
str \| None |
castxml, clang | persisted | ✅ | — | ✅ | — | ✅ |
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 |
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? |
|---|---|