When a release is deleted in Gitea (e.g., to retire an extension), the
platform DB still showed the extension as installable. This endpoint
removes the version row, recomputes latest_version, and deactivates
the extension if no versions remain — making it disappear from the
install catalog without touching the repo.
Called by n8n workflow NwrRbHNAXFVOLHCQ on Gitea release.deleted event.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Previously the system used simple string inequality to detect available
updates, causing downgrades to appear as upgrades (e.g. 2.5.1 → 2.5.0).
Now both backend (SQL) and frontend (JS) compare version tuples properly.
Also fixes latest_version in DB on registry sync startup.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Commit fed6ca3 replaced the entire server.py (1017 lines) with a single
${FILE:/tmp/ext-platform-server.py} placeholder via Gitea API, breaking
the application. This restores the correct code and adds /api/health.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
A Coolify persistent storage entry was overriding /app/server.py with an
unresolved ${FILE:} placeholder, causing SyntaxError on startup.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>