Skip to content

Add manual candidate list for repos Reservoir does not index - #16

Merged
justincasher merged 2 commits into
mainfrom
justin/manual-candidates
May 9, 2026
Merged

justincasher merged 2 commits into
mainfrom
justin/manual-candidates

Conversation

@justincasher

@justincasher justincasher commented May 9, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Reservoir's inclusion criteria exclude packages that are forks, lack a root lake-manifest.json, have a non-OSI license, or have fewer than two stars. Many real Lean projects fail one of those rules and will never be auto-indexed.

This adds a hand-curated escape hatch and seeds it with 987 entries (filtered against Reservoir's 617-package index so nothing is duplicated):

  • aggregator/candidates/manual.txt — committed list of GitHub URLs, one per line, # comments allowed.
  • aggregator.manual module — parses the URL list, queries gh api repos/<owner>/<name> for each entry, builds Reservoir-shaped package dicts.
  • Per-entry caching: each successful GitHub response is saved to raw_data/manual_cache/<owner>__<name>.json immediately, so partial progress survives rate-limit pauses or process interruptions. Re-runs skip cached entries.
  • Skip-on-error: rate limits, 404s, deleted repos are logged and skipped rather than aborting the bulk fetch.
  • fetch CLI extended to also write raw_data/manual_packages.json (gitignored) alongside the Reservoir manifest.
  • render CLI extended to concatenate both lists before generating the table.

After this PR the rendered README contains 1604 packages (617 Reservoir + 987 manual). Manual entries render with a – build glyph because we have no toolchain build data for them.

Future considerations

  • The gh api call requires gh to be authenticated locally when running fetch. CI integration would need a different auth path.
  • At ~1000 entries the sequential fetch takes ~10 minutes; switching to GraphQL batching (~100 repos per query) would cut that to ~30 seconds if manual.txt keeps growing.
  • Once we start tracking inclusion decisions a separate decisions.jsonl will join with both data sources at render time.

Reservoir's inclusion criteria
(https://reservoir.lean-lang.org/inclusion-criteria) exclude packages
that are forks, lack a root lake-manifest.json, have a non-OSI
license, or have fewer than two stars. We verified that 11 real,
completed Lean formalisation projects in our backlog fail one of
those rules and so will never be auto-indexed.

Adds aggregator/candidates/manual.txt for hand-curating GitHub URLs
to track alongside Reservoir's index. The fetch CLI reads it and
queries the GitHub REST API for each entry, saving the results to
raw_data/manual_packages.json (gitignored). The render CLI loads both
manifests and concatenates them before producing the README table.

Manual entries render with a "–" build glyph because we have no
toolchain build data for them.
@justincasher
justincasher requested a review from Vilin97 as a code owner May 9, 2026 20:14
manual.txt grows from the original 11-repo seed to 987 entries
(filtered against Reservoir's 617-package index so nothing is
duplicated). The fetcher now caches each successful GitHub response to
raw_data/manual_cache/<owner>__<name>.json so partial progress
survives rate-limit pauses and process interruptions; on re-run cached
entries skip the API call. The bulk fetcher also logs and skips
failures (rate limits, deleted repos) instead of aborting.

Rendered README now contains 1604 packages (617 reservoir + 987
manual).
@justincasher
justincasher merged commit 362bf01 into main May 9, 2026
2 checks passed
@Vilin97
Vilin97 deleted the justin/manual-candidates branch May 9, 2026 21:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant