daily-fix: 4xx short-circuit in hub _is_transient_upload_error
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.
Overview / Motivation
Auto-filed by /daily 2026-07-03 from a recursion-guard-parked workflow-fix candidate.
Goal
tighten _is_transient_upload_error to short-circuit non-transient on 4xx status codes
Workflow gap
- Bug observed: hub.py is_transient_upload_error fuzzy substring scan can bounded-retry a 4xx whose message embeds '500'/'502'/'503'/'504' (deterministic for paths containing those digit triplets, e.g. issue504* buckets)
- Why it is a workflow gap: see candidate note
- Confidence (emitter): medium
Proposed change (candidate sketch — refine in planning)
tighten _is_transient_upload_error to short-circuit non-transient on 4xx status codes
Scope / surfaces
- Primary target:
src/explore_persona_space/orchestrate/hub.py - Grep the workflow surface for the pattern before editing; list every hit in the plan.
Constraints / invariants
- Workflow-surface only;
scripts/workflow_lint.py --check-askspasses; ruff on touched files passes.
Provenance
- workflow_fix_target: src/explore_persona_space/orchestrate/hub.py
- fingerprint: f80970bdcc08
parked — running under workflow_fix_target Provenance / EPM_WORKFLOW_FIX_SESSION recursion guard (see .claude/rules/workflow-fix-on-bug.md § Recursion guard). Candidates surfaced by the #939 plan grep-audit + implementer prose (NOT auto-routed from this session; a future orchestrator pass may file them, dedup grain (target_file, fingerprint)):
- src/explore_persona_space/orchestrate/hub.py:1321 _hf_artifact_exists — claimed-urls leg full-lists the repo via list_repo_files_complete; same #920 hang class on the ~1M-file data repo. Fix: thread the NEW path_in_repo kwarg (landed by #939) per cited path. (Also already noted in #939's epm:clarify.)
- scripts/backend_poll.py:1210 _wedged_run_inputs_on_hf — bare list_repo_files(HF_DATA_REPO) inside the watcher pod-safety wedge gate (imported by autonomous_session_watch.py). Same hang class, runs every 10 min when armed.
- scripts/cleanup_pod.py:176 — bare list_repo_files on the model repo (lower severity).
- scripts/router_acceptance.py:428 _default_list_hf_repo_files — bare listing; injectable seam exists.
- scripts/test_integration.py:444 — bare listing on the model repo (integration probe).
- scripts/build_canonical_persona_pool.py:288 — bare list_repo_files(HF_DATA_REPO) post-upload verify (data-prep script, outside the enumerated wf-fix surface).
- hub.py is_transient_upload_error — fuzzy substring scan can bounded-retry a 4xx whose message embeds '500'/'502'/'503'/'504' (deterministic for paths containing those digit triplets, e.g. issue504* buckets); tightening = short-circuit non-transient on 4xx status codes.