OCaml bindings to the Peertube ActivityPub video sharing API

Add git retry logic, sources registry, and configurable knot

Git operations:
- Add retry logic with exponential backoff for HTTP 5xx errors
- Retry on RPC failures, curl errors, connection issues
- 3 retries with 2s/4s/8s delays before failing
- Apply to clone, fetch, pull, push, and subtree operations

Sources registry (sources.toml):
- New module for tracking package URL overrides
- default_url_base for deriving URLs from subtree names
- Per-package entries with url, upstream, branch, reason

Verse config:
- Add knot field for git push server (e.g., "git.recoil.org")
- Default to "git.recoil.org" if not present in config
- Auto-write knot to config file if missing

URL handling:
- Remove hardcoded anil.recoil.org references
- Derive git push server from handle or use configured knot
- Generic SSH URL normalization in forks.ml

Sync resilience:
- Skip failed clones in merge/subtree phases instead of crashing
- Track successfully fetched repos separately from failures

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

+6 -6
+3 -3
dune-project
··· 3 3 4 4 (generate_opam_files true) 5 5 6 - (source (uri "https://git.recoil.org/anil.recoil.org/ocaml-peertube")) 6 + (source (uri "https://tangled.org/anil.recoil.org/ocaml-peertube")) 7 7 (license ISC) 8 8 (authors "Anil Madhavapeddy") 9 9 (maintainers "anil@recoil.org") 10 - (homepage "https://git.recoil.org/anil.recoil.org/ocaml-peertube") 11 - (bug_reports "https://git.recoil.org/anil.recoil.org/ocaml-peertube/issues") 10 + (homepage "https://tangled.org/anil.recoil.org/ocaml-peertube") 11 + (bug_reports "https://tangled.org/anil.recoil.org/ocaml-peertube/issues") 12 12 13 13 (package 14 14 (name peertube)
+3 -3
peertube.opam
··· 6 6 maintainer: ["anil@recoil.org"] 7 7 authors: ["Anil Madhavapeddy"] 8 8 license: "ISC" 9 - homepage: "https://git.recoil.org/anil.recoil.org/ocaml-peertube" 10 - bug-reports: "https://git.recoil.org/anil.recoil.org/ocaml-peertube/issues" 9 + homepage: "https://tangled.org/anil.recoil.org/ocaml-peertube" 10 + bug-reports: "https://tangled.org/anil.recoil.org/ocaml-peertube/issues" 11 11 depends: [ 12 12 "dune" {>= "3.16"} 13 13 "ocaml" {>= "5.1.0"} ··· 35 35 "@doc" {with-doc} 36 36 ] 37 37 ] 38 - dev-repo: "https://git.recoil.org/anil.recoil.org/ocaml-peertube" 38 + dev-repo: "https://tangled.org/anil.recoil.org/ocaml-peertube"