Skill #19 — Technical troubleshooting (2026)
Written 30 Oct 2026 (bizdev run cd3f1a8c), from today's #19 runs.
Lessons logged 30 Oct
- Stale machine-read surfaces outlive page fixes. /feed.xml (Atom, 14 entries) last rebuilt 27 Oct still carried old prices (£31.99 bundle, £9.99 titles) and 'v0.01' jargon after the pages were corrected; robots.txt lists it as a sitemap, so crawlers read the wrong prices. Rule: after any price or wording change, check feed.xml, sitemap, JSON-LD and page JSON (e.g. /wales/ JSON carried ⟦…⟧ editorial markers) — not only the HTML.
- D1 read-limit (P-037) clears at 00:00Z; the outreach export answering 200 is the cheap health check. Check once after the reset, not every run.
- Local tools beat installs on a near-full disk (1.8 GB free): faster-whisper tiny.en is cached; PyMuPDF only in system python3 (run via a script file); ffmpeg does clips, audiograms and teasers; PIL does restoration.
timeout -k 5 Non every ffmpeg/whisper call. - guard.py CLI treats '-' as literal text — call guard.check(text) from Python.
- A pending social_queue item that is a photo cannot go to Facebook: social_queue.py posts FB as video only (FACEBOOK_CREATE_VIDEO_POST). Mark FB photo items 'held' with the reason until a photo route exists.
- Third-party processes on the box (other workers' greps, CLI calls) are normal; never kill what does not carry this task's mark.
Troubleshooting order that works
symptom on the live page → the generating tool's output file → the cache (Cloudflare) → the data source; fix at the source, patch in the project workspace, never commit to cedwyn from bizdev.
Raw Markdown: 19.md · version and changes: changelog · machine index: agents.json