Skip to content

Add ArtiFinder discovered-artifact integration (stage 4b)#17

Open
vahldiek wants to merge 11 commits into
ReproDB:mainfrom
vahldiek:feature/artifinder-integration
Open

Add ArtiFinder discovered-artifact integration (stage 4b)#17
vahldiek wants to merge 11 commits into
ReproDB:mainfrom
vahldiek:feature/artifinder-integration

Conversation

@vahldiek

@vahldiek vahldiek commented Jul 3, 2026

Copy link
Copy Markdown
Member

Summary

Adds a new ArtiFinder data source to the pipeline. ArtiFinder scrapes conference papers directly and discovers links to their artifacts; the published data lives in DistriNet/ArtiFinder-Data.

A new optional artifinder stage (4b) ingests that data and matches each discovered link to an existing artifact-evaluation (AE) paper by normalised title + author list (same conference + year; ArtiFinder uses DBLP author names, as we do).

Policy (important)

  • ArtiFinder links are not manually verified, carry no badges, and are excluded from every score — artifact rate, reproducibility rate, combined score, author/institution rankings.
  • The data set also contains papers that never went through AE; these do not count toward any denominator.
  • Only exception: a GitHub repo that ArtiFinder finds for a paper that did go through AE may be counted in repository statistics (descriptive, not scored).

Changes

  • Models: Artifact.artifinder_urls, SearchEntry.artifinder_urls, new ArtiFinderEntry model. SCHEMA_VERSION bumped 0.2.0 → 0.3.0 and registered in the schema export.
  • Loader src/scrapers/artifinder.py: reads from GitHub or a local checkout; configurable min_year (default 2017, the AE era) and local_dir.
  • Generator src/generators/artifinder/generate_artifinder.py: matching + artifacts.json back-patch (artifinder_urls) + small Jekyll _data/artifinder_* aggregates. No redundant copy of the source data is written; repo_stats reads matched GitHub links directly from artifacts.json.
  • Stages: new optional artifinder stage; search_data and repo_stats now depend on it.
  • Config: artifinder_min_year, artifinder_local_dir (+ PIPELINE_* env vars).
  • Tests: loader, generator, search_data, repo_stats, and model tests — 676 pass.
  • Docs: README stage table + ArtiFinder section.

Configuration

Option Env var Default
artifinder_min_year PIPELINE_ARTIFINDER_MIN_YEAR 2017
artifinder_local_dir PIPELINE_ARTIFINDER_LOCAL_DIR (or REPRODB_ARTIFINDER_DIR) (unset)

Companion PRs

Preview of the website changes: https://vahldiek.github.io/reprodb.github.io/artifinder.html

Notes

  • The artifinder stage is optional and skips cleanly when the source is unreachable (offline CI).
  • Sample run against the current data set: 3,570 discovered links, 797 matched to AE papers, 424 GitHub links available to repo-stats, discovery rate 56.3% (2017–2025).

Ingest DistriNet/ArtiFinder-Data and match discovered artifact links to AE
papers by normalised title + author list. ArtiFinder links carry no badges
and are excluded from all scores; the only reuse is repository statistics for
GitHub repos matched to AE papers.

- models: Artifact.artifinder_urls, SearchEntry.artifinder_urls, new
  ArtiFinderEntry model; SCHEMA_VERSION 0.2.0 -> 0.3.0
- src/scrapers/artifinder.py: loader (GitHub or local checkout), configurable
  min_year (default 2017) and local_dir
- src/generators/artifinder/generate_artifinder.py: matching, artifacts.json
  back-patch, artifinder.json, Jekyll _data aggregates, repo-stats hand-off
- stages: new optional 'artifinder' stage; search_data + repo_stats consume it
- config: artifinder_min_year, artifinder_local_dir (+ env vars)
- tests: loader, generator, search_data, repo_stats, models (676 pass)
- README + schema registry updated
vahldiek added 2 commits July 3, 2026 13:04
Drop the redundant assets/data/artifinder.json (it just republished the
upstream ArtiFinder-Data repo) and the _build/artifinder_matched_urls.json
hand-off. The only persisted artifact of discovered links is now the
artifinder_urls back-patch on artifacts.json, plus the small Jekyll _data
aggregates for the discovery page.

- generate_artifinder: match_entries returns records only; no JSON dumps
- repo_stats: read matched GitHub links directly from artifacts.json
  (_inject_artifinder_urls), no hand-off file
- remove unused ArtiFinderEntry model + schema registry entry
- update stages outputs/inputs, README, and tests (664 pass)
The 'for art in artifacts' loop bound 'art' to dict, clashing with the later
'art = artifact_index.get(...)' (dict | None). Rename to 'art_row'.
vahldiek added 8 commits July 3, 2026 14:14
Discovered papers that never went through AE are now emitted as marked search
rows (no badges, no scores) so they appear in the search index. The artifinder
stage writes _build/artifinder_search_entries.json; generate_search_data appends
them (de-duplicated against AE rows). Tests added; 672 pass.
New assets/data/artifinder_authors.json maps a normalised author key to the
non-AE discovered papers for that author, so profiles can list them (marked,
distinct colour) without affecting any score. Adds _author_key/_build_author_index
+ tests (674 pass).
- loader captures source_updated (latest ArtiFinder-Data commit date: git
  locally, commits API remotely) and returns it on ArtiFinderData
- summary gains data_updated (ArtiFinder data date) + generated_at (pipeline
  run time), replacing the ambiguous last_updated
- artifinder stage now declares inputs + a 1-day TTL so the orchestrator can
  skip it when AE inputs are unchanged (incremental builds)
The model was dropped during output slimming; a filesystem sync re-added it. It
is not imported anywhere and not in the schema registry.
_author_key -> _af_author_key, mirroring the website's afAuthorKey(); both
carry a shared test vector + mutual cross-reference so the byte-identical
normalisation can't drift. Algorithm unchanged (no data change).
Search rows now carry source='ae' (AE papers, may also have artifinder_urls) or
'artifinder' (discovered-only, no badges/scores), so consumers don't infer
provenance from empty badges/artifact_urls. SearchEntry model + both generators
+ tests updated (674 pass).
Recovers same-paper links whose AE title differs by Unicode/LaTeX scraping
artifacts or minor wording (~21 in current data). Same conf+year, SequenceMatcher
>= 0.94, guarded by author overlap (rejects different papers), and logged.
Tests added; 677 pass.
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