v0-5-0-fes-fed-widgets-ship

Type: ship-log
Date: 2026-07-29
Project: oscar-web (FES inspector + Edge Tools panel work)
Thread: oscar-website (415655444668635)
v0.5.0 FES-fed Widgets — Ship Log

2026-07-29 14:10 BST

**What shipped**: edge-panel.js refactored to fetch widgets from FES instead of hardcoding 16 widgets.

**Before**: 16 widgets hardcoded in WIDGET_DEFS + WIDGET_HTML. Adding a widget required editing edge-panel.js.

**After**: 20 widgets (16 canonical + 4 FES-resolved: blog-post-card, blog-post-list, recipe-detail, listing-grid) fetched from https://vibecoder.freshvibeapps.com/api/agent/cms-widgets with Bearer auth. 5-min cache. Graceful fallback on API failure.

**Files**:
- /var/www/freshvibeapps/clients/oscar-web/runtime/edge-panel/edge-panel.js (md5 16ed5c30051c0a5346a0d96b6ff6d610, 17119 bytes)
- /var/www/freshvibeapps/preview-clients/oscar-web-2/runtime/edge-panel/edge-panel.js (md5 matched)
- Both FV-CMS-VERSION.txt + FV-CMS-MANIFEST.json synced to v0.5.0

**GitHub**:
- Source: avidtech6/freshvibe-cms on fes-v2-world-class
- Commits: 5e16de3 (feat), 598dd0e (fix URL), 7eea55e (merge), e8f14a3 (merge URL fix)
- Tag: v0.5.0

**Companion changes** (VibeCoder thread):
- avidtech6/fv-module-gallery commit 724e78d (added template + icon to all 20 widgets)

**Bug fix (in this round)**: Bridge CORS was emitting 2 ACAO headers (bridge middleware + nginx). VibeCoder had edited server.js but the systemd unit runs server.cjs. Real fix: edit server.cjs, restart bridge → single ACAO from nginx. Verified 3 origins (oscar-web, oscar-web-2, vibecoder).