daily-fix: persist uv PATH for non-login shells (GCE + pod)
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 the /daily 2026-07-28 problem sweep (transcript miners over the day's 55 session transcripts). Sources: group-A P6 + group-D P11 (memory feedback_pod_uv_path.md documents the pod half as a known gap).
Goal
Persist ~/.local/bin on PATH for non-login/ad-hoc shells on both compute lanes so detached/recovery phases resolve uv.
Workflow gap
- Bug observed: #1739 (GCE): a recovery upload phase launched via sudo/setsid died
uv: command not foundexit 127 (~20 min lost to a dead detached phase + a poll cycle); the in-session fix was a transient PATH export. #1689 (pod): a BatchMode ssh probe failed to resolve uv — the recurring class thefeedback_pod_uv_path.mdmemory records. - Why it is a workflow gap: bootstrap_pod.sh exports PATH transiently (L154/160/297) and its rc-file append block covers PYTHONPATH only (L363-405); backends/gcp.py's startup script has no /etc/profile.d/ drop-in — every non-login shell re-discovers the gap.
- Confidence (emitter): medium-high
- verified-at-filing:
grep -n 'local/bin' scripts/bootstrap_pod.sh→ transient exports at 154/160/297 only;grep -n 'PYTHONPATH' scripts/bootstrap_pod.sh→ rc-append block at 363-374 (PATH absent);grep -n 'profile.d' src/explore_persona_space/backends/gcp.py→ 0 hits (2026-07-29 UTC).
Proposed change (candidate diff sketch — refine in planning)
Pod: extend the existing rc-append loop with export PATH="$HOME/.local/bin:$PATH". GCE: one startup-script line writing an /etc/profile.d/eps-uv-path.sh drop-in (note gcp.py already parametrizes inline ( export PATH=... ) wrappers at 1809/2523 — the drop-in removes the need to remember them).
Scope / surfaces
- Primary targets:
scripts/bootstrap_pod.sh,src/explore_persona_space/backends/gcp.py
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. scripts/workflow_lint.py --check-askspasses; ruff on touched files passes.- The spawned session runs under a
workflow_fix_target:Provenance line — recursion guard applies (it parks, never auto-routes, its own subagents' workflow-fix candidates).
Provenance
-
fingerprint: c71533e68a74
-
workflow_fix_target: scripts/bootstrap_pod.sh