Langfuse showed $0.00 cost on every trace even after tracing was wired up:
provider.bedrock_converse.* spans carried only latency, no content or usage.
Converse's own response already includes token usage -- it just wasn't being
read. Captured on the adapter (last_usage, no interface change) and attached
to the span using Langfuse's own OTel attribute convention
(langfuse.observation.*), which its docs say takes precedence over generic
GenAI attributes. Verified live: a fresh trace now shows real prompt/completion
tokens and Langfuse computes real cost once given the model's actual per-token
price.
Weight-based dosing and multi-drug comparison both measured live and
confirmed absent. Fixtures carry the exact query, measured behavior,
and code pointer so the gap can be re-checked later instead of taken
on faith.
Personalization context was silently no-op'ing on the first turn of a
fresh session in live testing (profile fetch hadn't resolved by the
time the request fired), so it could not be relied on. Chat now always
sends the user's own text unmodified. Login/profile/admin entry point
removed from the header.