Some checks failed
Demo images / Build & push demo images (push) Failing after 32s
The double-share/double-pay chain (user hit it live, 2026-07-22): ShareModal's already-shared lookup compared the slash-stripped stored path against the leading-slash filepath — never matched — so every re-share minted a NEW catalog entry with a new id, and the buyer's owned-guard (keyed by id) saw the duplicate as unowned and paid again. Three independent walls now: (1) ShareModal normalizes both sides so re-shares reuse the entry; (2) content_server::add_item dedupes by filename server-side (updates in place, keeps the id so buyers' owned records stay valid); (3) the buyer REFUSES to pay for content it already owns — matched by (onion, content_id) OR (onion, filename) — and serves the cached copy instead, before any ecash is minted. Purchases also auto-file into Photos/Music/Documents on the node (same buckets as the Cloud view, collision-safe naming) so bought files show up where files live on every device, and Cloud gains a Paid Files tab listing every purchase (name, size, sats paid, date) with in-app view. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>