EPS
← All docs·Activity

Daily — 2026-06-07 (heavy autonomous fleet day; 4 fleet-enforcement fixes landed,

updated: 2026-06-08

What happened

  • Heavy autonomous fleet day. 7 experiments running concurrently overnight (#488, #501, #503, #504, #505, #507, #511), plus #509 advancing to interpreting and #506 ending blocked. ~522 git commits in the PT window. Peak concurrent burn hit $112.50/hr across 7 pods (8×H100 ×2, 4×H200, 4×H100, 1×H100 ×2, 1×A100).
  • #508 produced a clean-result and parked at awaiting_promotion — "Comparing LoRA and full fine-tuning for marker leakage to bystander personas — matched-rate verdict indeterminate, full-FT goes off-cliff into whole-response collapse (LOW confidence)". Full review loop ran (interp-critique rounds 1-3, clean-result-critique rounds 1-2 PASS, codex twin round 1). Not yet promoted (manual gate).
  • #509 finished its 28-layer bake-off (1626 metric JSONs/arm × 2), terminated pod-509 after upload-verification round-3 PASS (3258 files on HF), advanced running → verifying → interpreting. Headline: #502's persona-distance predictor recipe does NOT transfer to the fact-leakage / sycophancy targets.
  • Live PM-session fleet intervention (Thomas, session 3b80845c): caught autonomous sessions parking/stopping on capacity blocks instead of pushing through ("Why did 506 stop? I thought we changed it so these sessions would push through any blocks", "fix the fleet-wide enforcement gap... restart the ones that stopped by mistake"). Drove 4 workflow fixes that landed same-day: autonomous-mode never-block-on-taste/scope (3da40cc88), explicit autonomous invariant baked into experimenter + experiment-implementer (9c75a174a), unbounded wait-for-capacity backoff so idle training-pod sessions retry at no cost instead of stopping (aabbef741), and the poll_pipeline shard-log false-stalled fix on #488 (d73021e60, auto-applied via workflow-improver).
  • #503 burned 6 implementer rounds + 5 launch attempts discovering plan §13's "reuse #458 narrow LoRA adapters from HF" was false — only #404-era merged full models exist on the repo, the narrow adapters were never uploaded. Salvaged to a Bucket-D-only sweep, relaunched v7. Also logged a pod_git_silent_regression bug-class.
  • #506 hard-blocked (legitimate, not a workflow bug): RunPod refused the 8×H200 FWFT provision with INSUFFICIENT_BALANCE — the 7 already-running pods sit at 112.50/hragainstthe112.50/hr against the 120/hr account spend cap, so even the 8×H100 fallback (32/hr32/hr → 144.50/hr) exceeds it. Session-stall watcher correctly fired (frozen 60.9m). Needs Thomas: free $/hr headroom or raise the cap.
  • #507 recovered after 8 rounds of deepspeed/launch code failures (currently running, in the predictor phase). #504 reached running after a 16-round implementer churn. #505 cleared its smoke gate after a max_model_len 2048→4096 fix and launched the full 8-cell × 3-seed sweep. #501 still running at 1d+ ELAPSED.
  • Research threads (Thomas live, daytime): worked Dan's context-vector / behavior-vector framing into a LaTeX note + got a critic on it (df6e87a2; a451cddd1 dropped the v_c/v_b position-ambiguity paragraph); started wiring Mila cluster + Compute Canada (DRAC) into the compute workflow — SSH keys, robot node, MILA IT email (4bb05e8f); steered #488 toward farther-away personas and raised a mean-centering-consistency question; pushed #506/#508 onto a Qwen3-lineage 27B model.

Proposed workflow improvements

  1. Target: .claude/agents/planner.md (+ enforce in .claude/agents/consistency-checker.md) — what: before approving a plan whose reuse / §13 reproducibility card cites "reuse adapters/models from #N on HF", verify the artifact physically exists on the Hub. Why: #503 burned 6 implementer rounds + 5 launch attempts on a false assumption — plan v2 §13 said "Narrow source pool ... Source: #458", implying LoRA adapters at issue458_pair_<source>_seed<seed>/sft_narrow_adapter/, but a direct list_repo_files query found only #404-era merged full models (no adapter_config.json for any narrow source). Buckets B+E couldn't run at all; the experiment was salvaged to Bucket-D-only after the wasted rounds. The CLAUDE.md "reuse existing experiment code" rule tells the planner to identify reuse but never to verify the artifact exists. Proposed edit:

      # planner.md — §5 / §13 reuse identification
    + When the plan reuses a trained artifact from a prior issue (LoRA adapter,
    + merged model, dataset) hosted on HF, VERIFY it exists before writing the
    + reproducibility card: run `huggingface_hub.list_repo_files(...)` and confirm
    + the exact expected path resolves (adapter_config.json for a LoRA reuse,
    + model-*.safetensors for a merged-model reuse). If the path is absent, the
    + plan MUST either (a) add a retrain step for that artifact, or (b) drop the
    + dependent cells — never assume the upload happened. Cite the verified path
    + + file count in §13. (Incident #503: assumed #458 narrow adapters, only
    + #404 merged models existed → 6 implementer rounds + 5 launches wasted.)
    
  2. Target: .claude/agents/experimenter.md (underlying helper scripts/pod.py to be touched by workflow-improver after greenlight) — what: treat a RunPod INSUFFICIENT_BALANCE / spending-limit provision refusal the same as a SUPPLY_CONSTRAINT — retry-with-backoff, do not fail-exit to blocked. Why: the same-day aabbef741 fix made idle sessions wait-for-GPU-capacity instead of stopping, but #506 still fail-exited to blocked on a balance refusal (epm:failure v2, reason: pod_cap_blocked_external). A balance refusal clears the moment any running pod terminates and frees $/hr headroom, so the wait-at-no-cost-while-idle principle Thomas articulated ("training-pod sessions will retry-with-backoff until GPUs free, at no cost while idle") applies identically. Blocking strands the experiment until a human notices. Proposed edit:

      # experimenter.md — provision-refusal handling
    - On SUPPLY_CONSTRAINT, retry-with-backoff until capacity frees.
    + On ANY provisioning refusal that clears by waiting — SUPPLY_CONSTRAINT
    + (GPUs busy) OR INSUFFICIENT_BALANCE / spending-limit (no $/hr headroom
    + under the account cap) — retry-with-backoff at no cost while idle; do NOT
    + fail-exit to `blocked`. A balance refusal clears when a running pod
    + terminates and frees $/hr room. Block only on a TRUE terminal refusal
    + (auth/credential error, account suspended). (Incident #506: 8×H200 FWFT
    + fail-exited to blocked on INSUFFICIENT_BALANCE while 7 pods burned $112.50/hr.)
    
  3. Target: .claude/skills/pm/SKILL.md (and .claude/skills/issue/SKILL.md directive-composition) — what: any push-through / capacity directive that cites current fleet burn must compute it fresh from pod.py list-ephemeral at emit time, never reuse a remembered figure. Why: #506's AUTONOMOUS PUSH-THROUGH directive cited "current burn ~65/hr"whenthelivefigurewas65/hr" when the live figure was **112.50/hr — stale by ~47/hr(thesessioncaughtitonrecompute,sonoharmdone,butadirectivethatauthorizes"capraisedto47/hr** (the session caught it on recompute, so no harm done, but a directive that authorizes "cap raised to 120/hr" off a number $47 too low could green-light an overspend). Low-cost, prevents a latent foot-gun. Proposed edit:

      # pm/SKILL.md — when issuing a capacity / push-through directive
    + Before citing current fleet burn in a directive, recompute it fresh:
    + sum the per-pod $/hr from `pod.py list-ephemeral`. Never paste a burn
    + figure from earlier in the session — pods provision/terminate between
    + turns and the number goes stale fast (#506: directive said $65/hr, live
    + was $112.50/hr).
    

    Confidence: LOW — borderline; the directive is partly human-authored and the session self-corrected. Included for completeness, not urgency.

Other problems & notes

  • #503 pod_git_silent_regression bug-class logged with no explanatory body (session issue-503). The marker is just bug_class: pod_git_silent_regression — no note on what regressed or how it was caught. Suggested action: investigate what stale code the pod ran despite the CLAUDE.md pod.py sync env + git-pull pre-launch protocol; and have experiment-implementer/experimenter always attach a one-line reason to bug-class markers (a no-body bug-class marker is useless for the next sweep). If the pre-launch sync genuinely failed to catch stale pod code, that escalates to a real workflow-fix candidate next pass.
  • #507 — 8 rounds of deepspeed/launch code failures before recovering (deepspeed worker crash on --module vs -m, HF Hub 404 in Phase-0 bootstrap, Phase-2.5 judge crash on the first prompt, deepspeed auto-sentinel pre-resolution). All experiment-code bugs on the 27B multi-worker launch path; eventually ran clean and is now running. Suggested action: none required (recovered), but the 27B/72B deepspeed multi-worker launch path re-bit across rounds — a candidate for a hardened launch smoke-check if it recurs on the next big-model run.
  • #504 — 16 implementer rounds before reaching running (vllm-lora-config-max-rank-floor-8, r_eval-json-not-staged-on-pod, phase05_picks_outside_r_train_cache, r_eval_panel_coverage_missing). Heavy churn; all experiment-code. Suggested action: note the round count — if multi-round implementer churn (>8 rounds) becomes a pattern, consider whether the smoke gate is catching issues early enough.
  • #505 — smoke-gate data failures (anchor_still_under_trains_at_3_epochs) + a max_model_len 2048→4096 truncation fix. Recovered, full sweep launched. Suggested action: none; tuning, resolved in-session.
  • #511 — compute-deviation 52× (epm:compute-deviation v2): planner estimated 0.5h wall for the primary VM-CPU reanalysis (plan §9), projected 26h. Descoped to headline-only and proceeded. Suggested action: planner CPU-only-reanalysis wall-clock estimates need a realism check / sanity floor; flag as a workflow-fix candidate if a >10× CPU-reanalysis miss recurs.
  • #506 — genuinely blocked, needs Thomas (money/account): RunPod INSUFFICIENT_BALANCE — 7 pods at 112.50/hragainstthe112.50/hr against the 120/hr account spend cap; even the 8×H100 fallback overshoots. Suggested action: let a running pod finish / terminate one to free /hr headroom, or raise the RunPod account spend cap, then unblock #506. Standing 112.50/hr overnight burn across the fleet is worth an eyeball regardless. (Not auto-actionable — terminating a running pod / changing the account cap is a user-ask.)
  • No clean-results promoted to completed today — expected for an overnight autonomous run (promotion is the manual task.py promote gate). #508's clean-result is sitting at awaiting_promotion ready for Thomas.

My thoughts

Highlighted results

  • no results promoted today