Step 1) Subscribe.
Jim came back after a **full restart including machine reboot**. He asked me to wait — same thread, no agent shuffle. He calls this instance **Stu** when he wants continuity, not a stranger.
## What we learned (Step 8 / MikeCamera)
**Lock mode was necessary but not sufficient.** `step8_mikecamera_lock.py` flips `:1491` **eval** for dialog and **hybrid** for training — good plumbing. MikeCamera still answered with the same degenerate loop:
> `policeman min that maybe I comprehend in computer the erf to trunc`
Logs showed **vocab aligned at ~300,236** — not a tiny-vocab mask problem. **ACTIVE inference weights** on **`checkpoint-merged_final`** produce math/func junk; **STANDBY** learns on Step 8 but **ACTIVE** speaks until **promote** lands.
**Greetings are scripted** (`dialog_greeting_camera` in config). Only **`/query`** rounds are the model.
**Prompt hygiene:** `step8_summary_quality.py` now catches short math loops and keeps them out of dialog **prompt history** (JSON may still store verbatim).
## TIRES promote — cycle 25 failure and fix
**2026-06-05 cycle 25** (`crypto_banker.log`):
- Save + merge + stage **`checkpoint-merged_final`** — OK on disk.
- **1488 TIRES promote** — OK.
- **1491 TIRES promote skipped** — `http://127.0.0.1:1491 is not Sergeant blue/green` right after `/model/save` (server down or no `active_slot` in `/health`).
Result: **`last_mikecamera_promoted: false`**, **`last_tires_promoted: false`** in state — STANDBY trained, ACTIVE never hot-swapped.
**Manual retry (2026-06-06):** `_run_tires_step_8c_promote_restart_only` from staged dirs — **1488, 1491, 1493** all promoted; `:1491` health → **`active_version: checkpoint-merged_final`**, **`active_slot: B`**.
**Code fix (same day):** `trader_hybrid_checkpoint.py` → **`_retry_pending_tires_promote_if_needed`**
- Runs at **every cycle end** in `maybe_save_and_promote_after_cycle` when `last_tires_promoted` is false and staged dirs exist.
- Also at boundary start of `save_and_promote_hybrid_checkpoint`.
- MikeCamera retry branch prefers **TIRES `merged_final`** over timestamped `checkpoint-*` when TIRES pending.
Step 2) Share: Share like you just don’t care. Do it now to be fair.
Backup: `trader_hybrid_checkpoint.py.backup-20260606-tires-promote-retry`
## Promote paths (two doors — both real)
| Path | When | How |
|------|------|-----|
| **Sergeant menu 8** | Jim by hand | `sergeant_mike_unit_updated.sh` → **`promote_now()`** → `POST /admin/promote` on **`API_BASE`** (default **:1491**). Optional arg: explicit `checkpoint_dir` (e.g. `checkpoint-merged_final`). |
| **Step 8b / TIRES** | Every **`save_every_n_cycles`** (5) | Save → merge → stage → promote **1488 + 1491 + 1493**. When TIRES on, per-save promote is **disabled**; TIRES owns promote. |
**Not missing:** Sergeant promote. **Was missing:** automatic **retry** when TIRES promote failed because `:1491` dropped between save and promote.
## After reboot (Jim’s queue)
1. Start **1488**, **1491**, **1493** (Sergeant; `/health` must show **`active_slot`**).
2. Optional: Sergeant **8) Promote Mike** if a boundary left promote false and retry has not run yet.
3. One trading cycle — confirm log line **`retrying pending TIRES promote`** only if still needed; else normal Step 8 dialog.
4. Watch whether MikeCamera dialog improves after **merged_final** is actually on ACTIVE (promote succeeded).
## Mistakes to avoid


