HF data repo at the hard 1,000,000-file cap — every net-new-file upload fails fleet-wide
Highlight text on any card (body, plan, or an event) to anchor a comment, or leave a whole-task comment here. Mention @claude to summon a reply.
No comments yet.
Goal
Restore the ability to upload NEW files to the project data repo
superkaiba1/explore-persona-space-data, and document the routing so no
future round silently loses artifacts.
Symptom (observed, not inferred)
On 2026-08-14 a 19-file upload_folder commit from the #2094
reversed-direction round (prefix judge_raw_rev) failed with:
BadRequestError: ... would contain 1000018 files, over the limit of 1000000
The repo is AT the Hugging Face Hub's hard per-repo file cap. This is not a storage-quota 403 (the #552/#541 recovery does not apply) — it is a FILE-COUNT ceiling, so it is size-independent: a 1 KB JSON fails exactly like a 10 GB tensor.
Blast radius
Every net-new-file upload to the data repo now fails, for every concurrent session:
- raw completions (all stages) — the upload-policy REQUIRED persistence path
- training mixes / datasets
- intermediate analysis tensors that plans reference as downstream inputs
- judge raw/score outputs
The upload-policy rule "text / JSON uploads ALWAYS, unconditionally" is currently UNSATISFIABLE against this repo. Rounds that treat a failed upload as non-fatal will silently ship without their durable artifacts, and upload-verification gates that only reconcile the CURRENT phase's prefix may still PASS while other prefixes were never written.
Known live exposure at filing time: the #2094 butler round (pod-2094-butler,
1x H100) is mid-flight and will hit this at its upload phase.
Proposed fix (from the reporting agent, workflow-fix-candidate v1)
- Overflow data repo — adopt a sibling of the #1108 model-overflow
convention (e.g.
superkaiba1/explore-persona-space-data-2) with routing inorchestrate/hub.pymirroring the existing overflow machinery, so a cap/limit error transparently reroutes instead of failing the round. - Consolidation pass to reclaim headroom — pack many-small-file legacy
prefixes into JSONL line-shards per the #1739 pack recipe. Note the
9.5 MB line-split / never-gzip constraint in
.claude/rules/upload-policy.md(a*.gzblob is LFS-matched and >10 MB force-routes to LFS). - Document the routing in
.claude/rules/upload-policy.mdeither way, plus the hub helpers.
Acceptance criteria
- A net-new-file upload to the project's data storage SUCCEEDS end to end from a pod and from the VM.
- The cap/limit error path is handled explicitly and FAIL-LOUD if it cannot reroute — never a swallowed exception, never a silent skip (the crash IS the signal).
upload_verification/verify_uploads.pyresolves artifacts across BOTH the primary and any overflow repo, so a rerouted upload does not read as a missing artifact..claude/rules/upload-policy.mddocuments the routing, the cap, and how to check current headroom before a large-file-count upload.- A cheap pre-flight headroom check exists so a round learns about the ceiling BEFORE it spends GPU hours it cannot persist.
Provenance
Surfaced by the #2094 reversed-direction round's implementer as a
workflow-fix-candidate v1 block (confidence: high) after its own 19-file
upload was rejected. That round's judge outputs were persisted to git (1.7 MB
of text) as a fallback, so no data was lost there — but git is not the policy
path for raw completions and does not scale to rollout-tensor volume.