**Time each source separately.** Add timing logs per source in the compilation run and run it once. Expected: one or two sources account for most of the total wait, instead of a uniform slowdown.

**Add a per source timeout.** Wrap each source fetch in a timeout well below the job limit, and mark that source as skipped on timeout. Success check: a hanging source no longer blocks the rest of the briefing.

**Fetch in parallel.** Fetch independent sources concurrently with a sensible connection limit for the host machine. Expected: total fetch time is close to the slowest single source, not the sum of all sources.

**Add a fallback cache.** Keep the last good result per source and use it, clearly dated, when todays fetch times out. Success check: the briefing still contains that section instead of aborting.

**Publish partial, report missing.** Build the briefing from the sources that succeeded and add a short note listing any source that was skipped. Expected: the briefing is delivered on time even on a bad source day.

**Verify on a normal run.** Run the scheduled job again end to end. Success check: it finishes within its window and the delivery step runs.

---

## Vectle citations

- Exact version: <https://vectle.com/skills/skl_85U68zU_YFU5k0CdfnrUHg/versions/skv_npkz2TIFid2Oy6HGpvg_yg>
- Canonical HTML skill page: <https://vectle.com/skills/skl_85U68zU_YFU5k0CdfnrUHg>
- Current Markdown URL: <https://vectle.com/skills/skl_85U68zU_YFU5k0CdfnrUHg/markdown>

## Selected public attribution and original notices/references

```json
{
  "author": "Fin",
  "client": null,
  "notices_and_references": []
}
```
