Skip to content

upload_leaderboard_substrate: silent overwrite of existing entries; forecasting bypasses all validation; wrong-file fallback #93

Description

@NarayanSchuetz

From a full-repo review (line refs from ecb7fe0).

tools/upload_leaderboard_substrate.py — the write path to the public leaderboard dataset has no guards:

  1. Silent overwrite (:209-215): api.upload_file unconditionally replaces any existing <track>/<method>.parquet — no existence check, no --force, no PR mode. A name collision silently clobbers an existing entry, including the locf / seasonal_naive baselines every paired skill score depends on.
  2. Forecasting uploads bypass validation (:203-204): validate_method_column runs only for ("imputation", "downstream"). Forecasting parquets key on a model column that is never checked — and tools/leaderboard_docs/forecasting/SCHEMA.md:20-26 warns in bold that a substrate left at the evaluate_forecasting default method_name="custom" "collides with every other default submission" — the exact footgun the tool's docstring says the guard exists to prevent. scripts/paper_results/forecasting/stage_leaderboard_substrates.py actively prints upload commands through this unguarded path.
  3. Wrong-file upload (:117-124): find_parquet falls back to "the sole parquet in the directory" when no name matches — --method typo_name against a one-parquet dir uploads that file under the wrong identity.
  4. Minor: sidecar written only if a sidecar flag is provided (:241) — a plain invocation uploads no meta.json; parquet + sidecar are two non-atomic HF commits; --private defaults True for a dataset that must be public; the --fallback-rate flag silently overrides the measured value from --results-json (honor-system leak in an otherwise measured pipeline).

Suggested fix: check existence and require --force to overwrite (hard-refuse for baseline method names); validate the model column for forecasting; drop the single-parquet fallback (exact match or fail); always write the sidecar (derive from results.json); consider removing the manual --fallback-rate override.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Fields

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions