FragmentError raised on network errors or non-200 responses when
required=True (default). Logs at ERROR level. Pass required=False
for optional fragments that should degrade gracefully.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New HTTP client (fragments.py) fetches HTML fragments from other apps
over the Docker network, with Redis caching and graceful degradation.
Jinja global `fragment()` available in all templates.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>