The skeleton in this repo works (httr2 + jsonlite wrapper: sharpapi_sports/odds/ev/arbitrage). To get the CRAN listing, which is the SEO/authority payoff (CRAN syndicates to dozens of university mirrors and package indexes; The Odds API earned its .edu referring-domain cluster exactly this way, verified in the 2026-06/07 backlink gap analyses):
- roxygen2::roxygenise() to generate man/ and NAMESPACE (roxygen comments are in place; NAMESPACE currently absent on purpose).
- Add LICENSE file in CRAN MIT format (YEAR/COPYRIGHT HOLDER stub) and tests (testthat, mock the HTTP layer, no live calls on CRAN).
- R CMD check --as-cran clean on r-devel (rhub::rhub_check()).
- Vignette: quick start + the sample dataset at https://github.com/Sharp-API/sports-odds-sample-data as offline examples (CRAN-safe, no key needed).
- Submission needs a human maintainer email confirmation (hello@sharpapi.io, forwards to mike@): CRAN emails a confirm link on submit.
Same pattern as the npm publish request (SharpAPI-TS#16) that shipped @sharp-api/client and started the jsdelivr/libraries.io mirror chain.
Context: authority push doc at nova-workspace/seo/backlinks/authority-push-2026-06.md, Tier 1.
The skeleton in this repo works (httr2 + jsonlite wrapper: sharpapi_sports/odds/ev/arbitrage). To get the CRAN listing, which is the SEO/authority payoff (CRAN syndicates to dozens of university mirrors and package indexes; The Odds API earned its .edu referring-domain cluster exactly this way, verified in the 2026-06/07 backlink gap analyses):
Same pattern as the npm publish request (SharpAPI-TS#16) that shipped @sharp-api/client and started the jsdelivr/libraries.io mirror chain.
Context: authority push doc at nova-workspace/seo/backlinks/authority-push-2026-06.md, Tier 1.