# Reproducible install After publication under DataFog/datafog-pii, record the immutable 40-character Hub commit SHA. Do not deploy an unpinned main revision. The release tag will be v0.1.0. ```sh hf download DataFog/datafog-pii --revision <40-character-commit-sha> --local-dir ./datafog-pii-release python3 ./datafog-pii-release/tools/install_bundle.py --snapshot ./datafog-pii-release --destination ./datafog-pii-bundle ``` The installer verifies the complete snapshot manifest, checks host OS/architecture, refuses an existing destination, safely extracts the versioned archive, and restores executable mode. Run `datafog-pii-bundle/datafog-pii datafog-pii-bundle` and send one JSON object with a text string per stdin line. Successful inference never requires Python or network access. Policy for PR #32: ```toml version = 1 [model] bundle_directory = "/absolute/path/to/datafog-pii-bundle" ``` Reproduce actual MCP verification with a clean checkout: ```sh git clone https://github.com/DataFog/datafog-mcp.git git -C datafog-mcp checkout c2c45ec62728d85b7472131a3df9ccb67afd4a02 cd datafog-mcp uv sync --frozen --group dev --python 3.12 DATAFOG_TEST_MODEL_BUNDLE=/absolute/path/to/datafog-pii-bundle uv run --frozen pytest tests/test_model_runtime.py tests/test_csv_processing.py --no-cov ``` Use the frozen lock, not the GLiNER comparison requirements. Fresh archive transport tests can be run locally before publication; only a real Hub download establishes Hub delivery. The release report distinguishes these statuses.