workflow-fix: Venue caveat in experimenter nohup .env memory
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 Step-C parked-candidate sweep (2026-07-08) from a candidate parked on task #984 by a recursion-guarded workflow-fix session.
Goal
Add a one-line venue caveat to the memory: the unconditional prefix is RunPod-only; on GCE use the gotchas.md conditional form (if [ -f ./.env ]; then set -a; . ./.env; set +a; fi).
Workflow gap
- Bug observed: The always-loaded experimenter memory instructs an unconditional 'set -a && source .env && set +a' prefix for every nohup-detached pod command — safe on RunPod (bootstrap pushes .env) but #923-adjacent if applied on the GCE lane, which exports tokens via its startup script and has NO .env file (unconditional sourcing inside an &&-chain fails the whole command).
- Why it is a workflow gap: Agent memories are always-loaded steering; an unqualified rule written for RunPod will eventually be applied verbatim on a GCE workload and reproduce incident #923.
- Confidence (emitter): medium
- Sweep verification (2026-07-08): Verified 2026-07-08: the memory file still carries the unconditional prescription with no venue caveat (read in full); the sibling fix pattern already exists in upload-policy.md lines 183-187 and gotchas.md (the #923/#944 conditional-sourcing entry) to cross-reference. One-line additive edit to a workflow-surface file (.claude/agent-memory/** is in scope).
Proposed change (candidate diff sketch — refine in planning)
Append to 'How to apply': '(RunPod pods only — bootstrap pushes .env. GCE-lane workloads have NO .env; use the conditional form from .claude/rules/gotchas.md: if [ -f ./.env ]; then set -a; . ./.env; set +a; fi.)'
Scope / surfaces
- Primary target:
.claude/agent-memory/experimenter/feedback_load_env_in_nohup.md - Grep the workflow surface for the pattern before editing (
grep -rln '<pattern>' .claude/ CLAUDE.md scripts/) and update every hit; list them in the plan.
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. scripts/workflow_lint.py --check-askspasses; ruff on touched files passes; ifworkflow.yamlorCLAUDE.mdchange, they stay consistent with the rule file.- This session runs under
EPM_WORKFLOW_FIX_SESSION=1and carries aworkflow_fix_target:Provenance line — it MUST NOT auto-route any of its own subagents' workflow-fix candidates (recursion guard, workflow-fix-on-bug.md).
Provenance
- workflow_fix_target: .claude/agent-memory/experimenter/feedback_load_env_in_nohup.md
- origin: parked candidate on task #984 at 2026-07-04T12:47:48Z
Verbatim parked note:
parked — running under EPM_WORKFLOW_FIX_SESSION / workflow_fix_target, see workflow-fix-on-bug.md § Recursion guard. source: prose-followup (alternatives critic, #984 plan review r1). target_file: .claude/agent-memory/experimenter/feedback_load_env_in_nohup.md. bug_observed: memory instructs unconditional 'set -a && source .env' for every nohup-detached pod command — safe on RunPod (bootstrap pushes .env) but #923-adjacent if ever applied in a GCE context. proposed_change: add a one-line venue caveat (RunPod-only; GCE lane has no .env — use the gotchas.md conditional form). confidence: medium. related_task: #984. routed: parked (recursion guard) — next non-workflow-fix orchestrator pass may file it.