Daily — 2026-06-15 (21 results promoted; orphan task folder + SKILL.md merge-guard fixed)
What happened
- Big evening promotion sweep — 21 clean-results promoted, all classified
useful. Thomas worked through the awaiting_promotion queue thread by thread: the role-header / marker-localization line (#464, #533, #546, #611), benign-SFT erasure (#543, #557, #570), persona-distance / geometry re-grading (#536, #589, #523, #522, #532, #539, #540, #531, #541), the contrastive-negatives mechanism (#601, #628, #622), and sycophancy data-construction (#608, #614). - ~12 autonomous
/issuesessions ran through the day across planning → implementation → crash-fix → interpretation → clean-result-critic: #642, #623, #617, #640, #613, #650, #542, #597, #612, #641, #649, #644. #647 (kind:analysis) reachedcompleted. - #650 launched on the GCP lane (sycophancy dose-determinism / rank-1 read-write directions). Thomas dispatched several background "happy coder" follow-ups in the evening: rank-1 LoRA read/write directions for marker + sycophancy, the on-policy leakage-predictor child of #612 (decorrelated panel + sub-epoch checkpoints), near-twin negatives + positives-plus-filler control, and the single-space
<answer> ※surface-form falsifier. - The workflow-fix-on-bug protocol auto-applied ~18 fixes in-flight (these are the in-flight orchestrators' work, not this run): vLLM 0.11.0
use_tqdm=Falsediv-zero gotcha + GCP startup-scriptTQDM_DISABLEunset,hub._uploadfile-path guard, audit accepts Unicode-minus,verify_task_bodycheck-21 analysis-only skip, sparse-worktree merge-base fallback for code-review diffs,workflow_lint --check-upload-as-filegate, GCP stale-VM janitor wiring (#639), and more (full list in## Other problems & notes). - #643 (Self-Harness integration, kind:infra) was created + clarified (clarifier flagged
needs-thomasscope), then archived by Thomas at 20:32. The archive left an orphantasks/proposed/643/duplicate on main — fixed this run (Fix 1 below).
Applied workflow improvements
-
Target:
tasks/proposed/643/(orphan removal) — what: removed the stale pre-archive duplicate of#643that a concurrent merge re-imported onto main — commit:1401a829af(on origin/main; localdc6e13a968) Why: Thomas archived#643at 20:32 today (epm:status-changedintasks/archived/643/events.jsonl). A concurrent Step-10d merge re-imported the pre-archivetasks/proposed/643/snapshot back onto main. The registry resolved643 → archived/643, sotask.py auditPASSed (it only checks registry↔filesystem agreement, not orphan folders), butlist-by-status --status proposedscans the filesystem and surfaced#643as a liveneeds-thomasproposed task — polluting the PM queue and at risk of triggering a clarifier respawn. The orphan held only 2 of the canonical folder's 5 events (a strict subset) with a byte-identicalbody.md, so removal is zero-data-loss and reversible viagit revert. Applied edit:- tasks/proposed/643/body.md (identical to tasks/archived/643/body.md) - tasks/proposed/643/events.jsonl (2 of 5 events; strict subset of canonical) - tasks/proposed/643/comments.jsonlVerified:
list-by-status --status proposed→[624](643 gone);task.py find 643→tasks/archived/643;task.py audit→ PASS; pushed to origin/main via scratch worktree (heavy concurrent-committer contention made the shared-root push diverge ahead-12/behind-10, so used the CLAUDE.md detached-worktree recipe). -
Target:
.claude/skills/issue/SKILL.md(Step 10d post-merge stale-task-folder guard) — what: form-agnostic guard that, after any Step-10d merge form lands, removes duplicatetasks/*/<N>/folders for the task, keeping onlytask.py find <N>— commit:b09133cd90(on origin/main; worktree commit440f06db6b).epm:workflow-fix-applied v1posted on #644. Why: Surfaced as a high-confidenceworkflow-fix-candidate v1on#644at 2026-06-16T00:30:29Z but never dispatched (the #644 orchestrator went idle before auto-spawning workflow-improver). On #644 a merge-conflict-recovery merge commit imported the task's old-status folder onto main next to its live one; the watcher read the orphan as a live task and respawned the session indefinitely (orphan-respawn cap-2-per-day cycled twice over ~8h). The SAME orphan class bit #643 today (Fix 1). The candidate's diff_sketch assumed agh pr merge --mergebranch that does not exist in the current SKILL.md, so this run reframed the fix as a form-agnostic post-merge guard and dispatchedworkflow-improver(with code-reviewer) to place it correctly in the 6200-line canonical orchestration skill. Applied edit:+ #### Post-merge stale-task-folder guard (runs after EVERY merge form lands) + # Canonical folder (NEVER hand-build tasks/<status>/<N> — resolve via task.py find) + CANON=$(realpath --relative-to="$REPO_ROOT" "$(uv run python "$REPO_ROOT/scripts/task.py" find <N>)") + mapfile -t DUPES < <(git -C "$REPO_ROOT" ls-tree -d -r --name-only origin/main \ + | grep -E "^tasks/[^/]+/<N>$" | grep -v -F -x "$CANON" || true) + if [ "${#DUPES[@]}" -gt 0 ]; then + cd "$REPO_ROOT"; git rm -r "${DUPES[@]}" + git commit -m "post-merge: remove stale task #<N> folder(s) ..." -- "${DUPES[@]}" + git push origin main || { git pull --rebase=merges --autostash && git push origin main; } + fiplus one-line pointers added to the Step-10d Success bullet and the merge-conflict-recovery block so the guard runs on every merge path. Idempotent (no-op on a clean main). Verified:
workflow_lint --check-references+--check-asksboth PASS on the edit; orchestrator independently reviewed the full diff against spec (the spawned code-reviewer hit a transient API-overload on its summary — documented recovery: orchestrator composes/verifies the artifact itself). Cherry-picked to origin/main via scratch worktree (heavy concurrent-committer contention); guard confirmed present onorigin/main.
Other problems & notes
- In-flight workflow fixes already applied today (record only — not this run, no action): ~18
workflow-fix:commits landed via the workflow-fix-on-bug protocol during the autonomous sessions, e.g.9b32c4fda0vLLM 0.11.0 div-zero gotcha,5bb3c5a040GCPTQDM_DISABLEunset,d91aaa8c12hub._uploadfile-path raise,179390fdf2audit Unicode-minus,639b96239b/ab69514958check-21 analysis-only skip + methodology-writer §2/§3 N/A doc,83ec75e36dsparse-worktree merge-base fallback,90b09d9ad5--check-upload-as-filegate,9503693960/ea0e8dab13GCP stale-VM janitor + CLAUDE.md doc,e57ac1d170gcp.py vLLM fix. The protocol is working as designed; no daily intervention needed. - "Save to the PM skill" request (21:23, session 8c6fe0de): Thomas asked for "a deeper dive into all the task bodies and come back with more principled groupings — also save to the pm skill to do this." The
group-promotion-queueskill already does principled two-phase digest-then-cluster grouping (committedbd25834c98at 14:27 today), so the capability exists. Held — judgment call (ambiguous whether Thomas wanted something beyond the existing skill). Suggested action: confirm with Thomas whether the existing two-phase grouping satisfies the request or whether the specific grouping he arrived at tonight should be persisted. - "Sidequests column" (21:26 → 21:28, session 6079c0ff/91963412): Thomas asked to add a follow-up to a "sidequests" column, then moved it to
on_hold. The status enum has nosidequests;on_hold(non-lifecycle parking, excluded from auto-dispatch) serves the purpose. Resolved in-conversation; no action. - #617 Codex twin no-show, round 1 (
epm:failure v1, 14:14, failure_class:infra): post-spawn probe transient. Self-recovered on retry —interp-critique-codexv2/v3/v4 landed 14:35–14:50. Transient infra, no fix. - API 529 "Overloaded" on plan subagents (07:06–07:08): transient Anthropic server-side overload on #638/#640/#642 planner spawns. Self-recovered. No fix.
git gc.logwarning — "too many unreachable loose objects": the shared repo root logs this on every git op. Held — repo hygiene, low priority, unrelated to today's transcripts. Suggested action:rm ~/explore-persona-space/.git/gc.log && git -C ~/explore-persona-space pruneduring a quiet window (rewrites the object store, so do it when no fleet sessions are mid-commit).- Failure-lesson agent-memory consolidation: ~24
.claude/agent-memory/**/*.mdfiles were created/modified today by the crash-fixepm:failure-lessonhook (11 new underreconciler/, plus analyzer/code-reviewer/planner/experiment-implementer/codex-* dirs), most still uncommitted. Held — dedup/prune of another agent's freshly-written working memory is a judgment call, and the generalizable lessons were already promoted togotchas.mdin-flight (4 gotcha commits today). Suggested action: a deliberate consolidation pass (the/weeklyfailure-lesson pass) rather than same-night pruning. - Concurrent-committer contention (note): the shared repo root was at ahead-12/behind-10 with a half-stale
.git/rebase-mergedir and another session's autostash mid-pull while pushing Fix 1 — expected heavy-fleet behavior (CLAUDE.md documents the detached-worktree workaround, which worked). No fix.
My thoughts
Highlighted results
- #543 — Lowering the trigger→marker positive ratio to 1% does not rescue benign-SFT erasure (HIGH)
- #557 — Benign-SFT erasure of a trigger-keyed marker rule is bound by cumulative gradient dose (HIGH)
- #570 — Marker survival under retraining tracks the over-trained install, no detectable erasure floor (HIGH)
- #464 — Contrastive training localizes a trained end-of-response marker; role-header edge survives a bare-word control (HIGH)
- #533 — Marker-less contrastive regime: wrong-persona role-vs-system gap is wording-dependent (bare flips the sign)
- #546 — Halving the LoRA recipe to r=16/α=32 slows the marker implant into view; separability test still can't fire
- #611 — A bare role header leaks less marker mass to the wrong persona than a matched system prompt
- #536 — Mean-centered persona-distance cosine leaves every recomputable published call standing (HIGH)
- #589 — 2 clustered persona-distance calls survive the estimator swap; set-size & leave-one-out are estimator-dependent
- #523 — #502's L22 gauss_kl predictor lands at held-out CV R²=0.21, just below its planned band (LOW)
- #522 — The full-response JS predictor scores well largely on the stylized-vs-nonstylized split (LOW)
- #601 — Contrastive negatives strengthened a marker implant by lengthening the optimizer schedule, not via their own loss (HIGH)
- #628 — Dropping the separator + waking negatives doesn't suppress marker leakage; schedule sets the level (HIGH)
- #622 — Adding contrastive negatives suppresses the marker implant below its positives-only twin at every dose
- #532 — The base-model marker prior beats geometric distance at predicting instruction-context leakage (HIGH)
- #539 — Activation distance ranks ordinary-context emission mostly by tracking which sources leak everywhere
- #540 — Full-reply behavioral divergence predicts marker leakage beyond reply length
- #531 — Off-ceiling, base prior tracks marker shift negatively but predicts absolute trained leakage
- #541 — Bystander prior still predicts fact leakage on a high-prior-enriched panel
- #608 — Positive-only sycophancy installs at least as strongly as the contrastive mix but spreads to nearly every persona
- #614 — Removing default-assistant correction rows erases the assistant-twins' trained-down readings without uptake (LOW)