Skip to content

Request For Comment: Move external and large reference data out of Git and into a dynamic Pixi task / script #142

Description

@kayhangultekin

Problem

Our current repository layout includes several large reference datasets committed directly inside holodeck/data/. This introduces significant technical friction and data-compliance challenges.

1. Technical Friction & Git Bloat

Because Git tracks history permanently, storing binary formats (like .hdf5, .npz, and .tar.gz) breaks delta compression. Every modification forces Git to store a fresh copy of the asset.
You can reproduce and audit this bloat yourself using the following commands:

  • Check the active workspace size for data and dotfiles:
du -sh * .[^.]* | sort -rh
  • Verify the heaviest historical objects packing down the .git folder:
git verify-pack -v .git/objects/pack/pack-*.idx \
  | grep blob \
  | sort -k3 -nr \
  | head -n 10 \
  | while read -r hash type size size_pack offset; do \
      file=$(git rev-list --objects --all | grep "$hash" | awk '{print $2}'); \
      echo "$((size_pack / 1024 / 1024)) MB \t (uncompressed: $((size / 1024 / 1024)) MB) \t $file"; \
    done

Result: The local directory contains a little under 200 MB of active data (bad), but the historical .git/objects/pack binaries take up over 700 MB of redundant space (terrible) due to old snapshots of these files (e.g., multiple copies of 67 MB TNG HDF5 logs).

2. Licensing & Authorship Compliance

Almost all of these reference data are the product of external collaborations (such as IllustrisTNG). We don't own the copyright to these data and papers and can't distribute them in this git repo maybe at all, but definitely not under an MIT license. It also implies our authorship.

Proposed Strategy

We can decouple our functional code logic from external scientific data products

  1. Purge History: Permanently scrub these heavy data paths out of the Git ledger using git-filter-repo --path holodeck/data/.
  2. Ignore: Add holodeck/data/ straight to the .gitignore.
  3. Automate: Add a native fetching helper (e.g., pixi task pixi run download-data in pyproject.toml or make a download-holodeck-auxdata.sh script) so users and contributors can download the active data directly to their local environments only when needed.

Items Up for Discussion

  1. Storage Hosting: Where should we house these data? Do we use a NANOGrav Google Drive, institutional server, or GitLab Pages? Crucially, do we have explicit permission from the original creators to mirror and host copies of these specific datasets publicly?
  2. Data Retations: Do we actively need all of these data from our core simulation runs or current unit testing suites, or can some of these legacy assets be retired entirely?

Please share your thoughts on access requirements and hosting setups below.

(This issue was brought up by a comment by @scottransom on slack. I investigated with the help of Google Gemini 3.5 Flash, confirmed my proposed solution with the LLM, and had the LLM write 99% of the above text.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions