fix: add targeted logfire span for PDS record fetching (#721)

The album endpoint was showing ~205ms average but HTTP Request spans
to PDS were showing 0ms duration - an instrumentation gap.

This adds a surgical `logfire.span()` wrapper around `get_record_public()`
to capture actual PDS HTTP call duration without flooding spans like
global httpx instrumentation would.

Span attributes:
- collection: the ATProto collection being fetched
- rkey: the record key
- pds_host: the PDS hostname

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>

authored by zzstoatzz.io Claude Opus 4.5 and committed by GitHub b6382d8c a8708fff

Changed files
+9 -2
backend
src
backend
_internal
atproto
records
fm_plyr
+9 -2
backend/src/backend/_internal/atproto/records/fm_plyr/track.py
··· 151 151 Exception: if fetch fails 152 152 """ 153 153 import httpx 154 + import logfire 154 155 155 156 repo, collection, rkey = parse_at_uri(record_uri) 156 157 ··· 158 159 url = f"{base_url}/xrpc/com.atproto.repo.getRecord" 159 160 params = {"repo": repo, "collection": collection, "rkey": rkey} 160 161 161 - async with httpx.AsyncClient() as client: 162 - response = await client.get(url, params=params, timeout=10.0) 162 + with logfire.span( 163 + "pds_get_record {collection}", 164 + collection=collection, 165 + rkey=rkey, 166 + pds_host=base_url.replace("https://", ""), 167 + ): 168 + async with httpx.AsyncClient() as client: 169 + response = await client.get(url, params=params, timeout=10.0) 163 170 164 171 if response.status_code != 200: 165 172 raise Exception(