RFC HTTP Miner is an evidence-first OSS analysis tool for finding HTTP API standardization opportunities. It is designed to measure convergent and divergent implementation practice across many repositories without putting an LLM at the center of classification.
The first vertical slice focuses on two concepts:
- HTTP asynchronous operations
- HTTP cancellation operations
The pipeline is intentionally staged and resumable:
OSS corpus
-> collection
-> extraction
-> normalization
-> deduplication
-> clustering
-> standards comparison
-> scoring
-> report
python -m venv .venv
. .venv/bin/activate
python -m pip install -e .rfc-miner run \
--repositories tests/fixtures/data/raw/repositories.jsonl \
--data-dir .tmp/fixture-run \
--skip-collectpython3 -m unittest discover -s tests -vThe default run mode clones one repository at a time, pins its commit,
extracts evidence, and removes the checkout after analysis. Pass --keep-repos
when you want to keep shallow copies in data/repos for debugging.
For large corpus runs, put temporary checkouts on a large external disk:
export RFC_MINER_REPO_DIR=/mnt/cash-data/rfc-http-miner/repos
export RFC_MINER_DATA_DIR=/mnt/cash-data/rfc-http-miner/datarfc-miner run \
--seed config/corpus/stage1-http.json \
--limit 30 \
--data-dir data \
--repo-dir data/reposEach stage can also be run independently:
rfc-miner discover-github --target 5000
rfc-miner collect
rfc-miner analyze
rfc-miner normalize
rfc-miner dedupe
rfc-miner cluster
rfc-miner compare-standards
rfc-miner score
rfc-miner report
rfc-miner sample-cancellationrfc-miner discover-github \
--target 5000 \
--output /mnt/cash-data/rfc-http-miner/github-http-5000.json \
--max-size-kb 250000 \
--per-query-limit 300Then run the corpus in streaming mode:
rfc-miner run \
--seed /mnt/cash-data/rfc-http-miner/github-http-5000.json \
--limit 5000 \
--jobs 12 \
--flush-interval 25If the run is interrupted, run the same command again to resume. Use --fresh
only when you intentionally want to overwrite the current stage output.
Discovery shards are interleaved by search term and language so an early
5,000-repository stop does not fill the corpus from only the first language.
Generated SDKs, API clients, templates, tutorials, prompt packs, editor
extensions, GitHub Actions, and very large repositories are filtered before the
seed is written.
data/raw/repositories.jsonl— collected repositories and pinned commitsdata/raw/evidence.jsonl— extracted evidence with file, symbol, line, and extractor versiondata/normalized/evidence.jsonl— normalized, repository-level deduplicated paths and interaction patternsdata/normalized/families.jsonl— raw repo to independent implementation family mappingdata/results/clusters.json— pattern counts, entropy, and family prevalencedata/results/standards-comparison.json— seeded standards coverage comparisondata/results/opportunity-scores.json— scored RFC candidates, including strict-mode scoresdata/results/report.md— human-readable stage report with raw and deduplicated evidence countsdata/results/candidates/http-cancellation.md— cancellation candidate report, including route-level operation linkagedata/results/manual-review.md— TP/FP/FN validation checklistdata/results/validation/http-cancellation-route-sample.csv— route-record cancellation labeling sheetdata/results/validation/http-cancellation-sample.csv— stratified family-pattern cancellation labeling sheetdata/results/validation/http-cancellation-family-sample.csv— strict-family cancellation labeling sheet
The base score is intentionally broad: it measures prevalence, independent families, implementation divergence, interoperability value, standards gap, standards correctness, and tractability.
The strict score is a second, conservative lens. It only counts the strongest patterns for each concept:
http-async-operation:post-202-accepted,mutation-202-accepted, andget-status-resourcehttp-cancellation: explicit cancellation verbs in the route path or operation name, excluding the weakdelete-operation-resourcebucket
Use raw evidence counts to understand extractor volume. Use deduplicated evidence, independent-family counts, and strict scores for RFC triage.
For http-cancellation, strict score is not enough by itself because business
routes such as POST /subscriptions/{id}/cancel can match the same shape as
operation cancellation. Use the route-level operation-linkage metrics and the
sampling protocol before making Internet-Draft prevalence claims.
The route-record cancellation sample sheet is the primary sheet for one operation-vs-domain TP estimate because its strata are exclusive. Hide automated linkage columns during human labeling, then use route-frame weights for the route-record estimate.
The family-pattern sample sheet is supporting evidence. Do not publish a raw
pooled TP rate from it: report per-pattern rates and a strict pattern-family
weighted estimate, with delete-operation-resource handled as a separate
promotion audit.
Use the strict-family sample sheet for claims over the 407 strict cancellation families. The route-record and pattern-family sheets do not update the 407 unique-family denominator.
Generate the route-record cancellation sample sheet with:
rfc-miner sample-cancellation-routes \
--data-dir /mnt/cash-data/rfc-http-miner/data-5000-refined \
--profile fullGenerate the family-pattern cancellation sample sheet with:
rfc-miner sample-cancellation \
--data-dir /mnt/cash-data/rfc-http-miner/data-5000-refined \
--profile fullGenerate the unique-family cancellation sample sheet with:
rfc-miner sample-cancellation-family \
--data-dir /mnt/cash-data/rfc-http-miner/data-5000-refined \
--profile fulldocs/research-design.mddocs/architecture.mddocs/evolution-log.mddocs/prior-art/http-cancellation.mddocs/validation/http-cancellation-sampling-protocol.mddocs/validation/http-cancellation-route-sample-2026-09-04.csvdocs/validation/http-cancellation-sample-2026-09-04.csvdocs/validation/http-cancellation-family-sample-2026-09-04.csvdocs/drafts/http-operation-cancellation-outline.mddocs/runs/2026-09-04-5000-final.mddocs/runs/2026-09-04-5000-analysis.md