- #121: schedule() now only allows re-scheduling posts with status
queued/failed/permanently_failed/cancelled — prevents duplicates
- #122: updateLastRunTimestamp() uses JSON_SET for atomic update
with fallback for databases without JSON function support
- #123: Add curl_error() handling to all 32 service plugins — DNS
failures, SSL errors, and timeouts now return actionable messages
- #126: Fix Ntfy supportsMedia() to return false (consistent with
empty getSupportedMediaTypes())
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rename root source directory from src/ to source/ and update all
references in Makefile, manifest.xml, .gitignore, CI workflows,
and wiki documentation. Internal Joomla namespace paths (src/Extension)
are unchanged as they are plugin-internal structure.
CI workflows updated to check source/ first with src/ fallback for
backward compatibility across repos.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>