Skip to content

A pre-fix clang-backend baseline compares against a post-fix candidate as a wave of FUNC_BECAME_INLINE — no reliability flag guards Function.is_inline

Index: Known gaps

Status (re-verified 2026-10-12): PARTLY FIXED — see ADR-081. Header-derived snapshots below SCHEMA_VERSION 53 (the fix's own version, clang and castxml both) are stale for the new inline family. The detector declines the pair and the assurance status records it as inline_facts_reliable. The persisted marker needs no schema bump. Remaining: a baseline re-saved by a build from before this change already carries the current version and no marker, so it reads as reliable until re-dumped. Function.is_inline is still a plain bool (a reviewed deferral in the case (a) baseline). Not closed until that is resolved.

The implicit-inline fix (extract/headers/clang/inline_semantics.py) changed what the clang header backend records for a constexpr/in-class/= default declaration, from False to the correct True. A snapshot dumped with the clang backend before that fix therefore carries a wrong value, and diff_symbols._check_inline_transitions compares is_inline raw on both sides with no producer or generation gate — so a stored baseline from before the fix, compared against a freshly-dumped candidate, reports FUNC_BECAME_INLINE (RISK) for every such declaration. The findings are spurious: nothing about the library changed.

Bounded, with a conservative load-time remedy. Both clang and castxml producers are in scope: the same fix commit changed castxml's out-of-line inline recovery. A snapshot loaded below v53 can contain stale is_inline facts, so the loader demotes them and the existing detector declines the comparison instead of reporting a finding. The findings are RISK-class, never breaking, so no gate flips from pass to fail. This load-time fix needs no schema bump. Only persisting the marker across load-and-save needs SCHEMA_VERSION 59, a migration note and older-reader handling, and that is blocked on ADR-081 acceptance. It also lands in policy/analysis_assurance_degraded_facts.py's consulted_when map, whose every-flag-has-a-key invariant is enforced by a KeyError rather than a check, and — if is_inline is converted to a Fact[bool] at the same time, which is the param_kind precedent — in the storage backfill rules too. Recorded here rather than attempted under the same review, per this file's own convention.