daily-fix: thread --env-pin into Step 6b composition
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-25 Step C parked-workflow-fix-candidate routing pass
(.claude/rules/workflow-fix-on-bug.md § Recursion guard escape valve). The candidate was
parked on task #1669 at 2026-07-25T11:11:11Z because that session ran under the
workflow_fix_target recursion guard and could not auto-route its own candidate.
Goal
Add a Step 6b composition rule + experimenter-brief bullet that threads
--env-pin KEY=VALUE into the dispatch_issue.py launch command when the plan's
Reproducibility Card declares a non-default WANDB_PROJECT (or other
ENV_PIN_ALLOWED_KEYS value).
Workflow gap
- Bug observed: the #1669 env-pin channel (
--env-pin KEY=VALUEondispatch_issue.py launch) is inert unless launch composers pass the flag. The/issueStep 6b operational-dispatch block and the experimenter-brief conventions never mention it, so the #1586 incident class (a failover pod loses the declared WandB project) recurs for any run whose project pin lives only in the plan's Reproducibility Card. - Why it is a workflow gap: Step 6b is where launch commands are composed. A flag
that exists only in
--helpis not part of the composition contract — the same adoption pattern as--boot-disk-gb, which DOES have a Step 6b / plan-row rule ("the flags are what arm the gate"). - Confidence (emitter): high
- verified-at-filing:
grep -c 'env-pin' .claude/skills/issue/SKILL.md→ 0 hits (absence confirmed in the named target). Repo-wide semantic probegrep -rln 'env-pin\|ENV_PIN_ALLOWED_KEYS' scripts/ src/ .claude/→ the channel is live inscripts/dispatch_issue.py(_parse_env_pins, line 1295),scripts/workflow_lint.py,src/explore_persona_space/backends/base.py(ENV_PIN_ALLOWED_KEYS, line 100) andbackends/gcp.py, with no mention in any.claude/skills/**composition surface. Landed-fix history checkgit log --oneline --since='7 days ago' -- .claude/skills/issue/SKILL.md→ 8 commits, none touching env-pin composition. SHA check:git rev-parse --verify --quiet 'd44a52d2fcd^{commit}'resolves tod44a52d2fcd132943ac2cb2b3da8133ad6edaa7f— "task #1669: failover re-provision carries launch env pins (#1445)", 2026-07-25 04:09:40 -0700. (2026-07-25)
Proposed change (candidate diff sketch — refine in planning)
+ Step 6b (operational dispatch): when the plan's Reproducibility pod row /
+ env pins declare WANDB_PROJECT (or another ENV_PIN_ALLOWED_KEYS key), pass
+ `--env-pin WANDB_PROJECT=<value>` on `dispatch_issue.py launch` (repeatable;
+ workload-cmd lanes only) — the pin persists to the handle sidecar and the
+ failover reconstructors re-export it on the fresh pod (#1669/#1586).
Scope / surfaces
- Primary target:
.claude/skills/issue/SKILL.md(Step 6b operational-dispatch block). - Also consider the experimenter-brief conventions (
.claude/agents/experimenter.md) — grep the workflow surface for the--boot-disk-gbadoption rule and mirror its shape and placement, since that is the named precedent. - Read
scripts/dispatch_issue.py::_parse_env_pinsandbackends/base.ENV_PIN_ALLOWED_KEYSfor the exact allowlist + repeatability semantics before writing the rule; do not restate the allowlist inline if it can drift.
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. scripts/workflow_lint.py --check-asksand--check-referencespass; ruff on touched files passes.- 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).
Provenance
- workflow_fix_target: .claude/skills/issue/SKILL.md
- fingerprint: 7b0deff20abc
Parked candidate (verbatim), from task #1669 events.jsonl @ 2026-07-25T11:11:11Z:
target_file: .claude/skills/issue/SKILL.md
bug_observed: The #1669 env-pin channel (--env-pin KEY=VALUE on dispatch_issue.py launch, merged d44a52d2fcd) is inert unless launch composers pass the flag; the /issue Step 6b operational-dispatch block and the experimenter-brief conventions never mention it, so the #1586 incident class (failover pod loses the declared WandB project) recurs for any run whose project pin is only in the plan's Reproducibility Card.
why_workflow_gap: Step 6b is where launch commands are composed; a flag that exists only in --help is not part of the composition contract (same adoption pattern as --boot-disk-gb, which HAS a Step 6b/plan-row rule: "the flags are what arm the gate").
proposed_change: Add one Step 6b composition rule + one experimenter-brief bullet: when the plan's Reproducibility Card declares a non-default WANDB_PROJECT (or other ENV_PIN_ALLOWED_KEYS value), thread --env-pin KEY=VALUE into the dispatch_issue.py launch command so the pin persists into the handle sidecar and survives failover re-provision.
confidence: high
related_task: #1669