Desktop clients had two competing update sources: the runtime pointed at a
legacy GitLab registry while the Forgejo packages were filled in by
hardcoded, version-pinned scripts. Operators could not tell which feed was
authoritative, and no release could be reproduced from a tag.
Auto-update now reads a single canonical Forgejo registry feed, updated by
a version-agnostic publisher that runs from the tag on Forgejo, GitLab, and
GitHub CI alike. Channel, minimum supported version, forced install,
full-versus-delta thresholds, staged rollout, and a remote kill switch come
from one policy file the client fetches alongside the feed. Tag creation is
gated on a clean tree, matching version surfaces, and a changelog section.
- payple-renew: 만료 구독 조회 → paypleBilling → 기간 갱신
- 3회 연속 실패 시 tier=free, status=expired 다운그레이드
- migration: subscriptions.renewal_failures 컬럼 추가
- payple-webhook: 결제 완료 시 renewal_failures=0 리셋
- GitHub Actions: 매일 01:00 UTC 스케줄