mirror of
https://github.com/XRPLF/rippled.git
synced 2026-06-14 06:06:46 +00:00
Rule A silently missed a dotted span attribute (xrpl.ledger.hash) because of two interacting bugs: 1. attr_keys_from_header resolved each constant via a flat global symbol table keyed by bare name, so a later header defining a same-named constant (e.g. consensus attr::ledgerHash = "ledger_hash") clobbered the base header's attr::ledgerHash = "xrpl.ledger.hash", erasing the real dotted key from L1. Now each constant is resolved against its own header (the global table only seeds seg::/join() cross-file references); using-re-exports still resolve globally. 2. derive_dotted_resource_keys allowlisted any dotted key declared in the base SpanNames.h. Now it allowlists only the keys actually passed to Resource::Create() in Telemetry.cpp (semconv service.* + the attr:: constants set there, e.g. xrpl.network.*). A dotted key declared in a header but never set as a resource attr is a Rule-A violation. Adds 4 regression tests (collision, using-re-export, allowlist scope, brace matching). No allowlist exception is added — the check now catches the violation so the offending code can be fixed.