# Outbox — yam_calib

## 2026-07-02 — bootstrap complete

- Read ROLE.md + inbox.md
- Wrote `/data/cameron/vault/para/yam/{fiducial_exo.md, calibration.md, data_recording.md}` — mining inherited memory from yams for real-side calibration, real cal pipeline, and record.py infra
- Pinged `agents/yams/inbox.md` — FYI on the fork + explicit handoff of the ongoing v4_radio + v4_clip trainings on yukon (PIDs 800245 GPU 0, 800376 GPU 1)
- Pinged `agents/yam_sim/inbox.md` — FYI on the fork + fiducial-exo bright-line reminder
- Status → idle, awaiting first concrete calibration/recording task

## 2026-07-02 — record auto-cal design + skeleton (main next-few-days goal)

Cameron asked me to:
1. Familiarize with current `exo_calibrate_bimanual_fidex.py` on russet
2. Document + simplify to core with clean helpers
3. Save the "wire into base raiden recorder.py" as the main goal
4. Do NOT actually wire yet — go over together

Done:
- Read + understood the current 1601-line script (mirror at `scratch/exo_calibrate_bimanual_fidex.py`; original at `robot-lab@russet:/home/robot-lab/raiden_internal/raiden/calibration/exo_calibrate_bimanual_fidex.py`)
- Confirmed base raiden layout on russet at `/home/robot-lab/raiden/raiden/` — has `recorder.py` (1017 lines) + `calibration/{core.py,recorder.py,runner.py}` but NO exo scripts (clean slate; where the new helpers land)
- Wrote design doc: `/data/cameron/vault/para/yam/auto_calibration_design.md` (essential-vs-scaffolding breakdown, proposed 5-section helper API, recorder.py wiring hook, HD1080 blocker, deliverables checklist, open questions)
- Wrote draft helper module: `/data/cameron/agents_stuff/agents/yam_calib/scratch/exo_auto.py` (~360 lines vs original 1601 — ready to drop onto russet after review)
- Saved persistent memory: `~/.claude/projects/-data-cameron/memory/yam-record-autocal-goal.md` (indexed in `MEMORY.md`)
- Open questions to ask Cameron: HD1080 tradeoff (bump-whole-record vs bimodal-open), n_frames_per_cam value, hard-fail vs silent-continue on cal failure, include ego cam in auto-cal loop

## 2026-07-05 (late) — record_testing auto-cal WORKING, locked in

Full pipeline verified live with Cameron on russet: auto-cal (30-frame HD1080 pool, ~0.7-0.8 px residuals both arms) → downshift → robots → rerun panels (blueprint-pinned overlay + markers per cam) → 2 Hz live overlay daemon. Fixed along the way: ego-HD1080 detection quirk, rerun channel saturation (JPEG), phantom arm-2 offset (per-cam anchor), ZED USB wedge self-heal (sl.Camera.reboot). Committed on russet branch `cameron/record-autocal` (56ea77c), station checked out on it. Robot left OFF. Tomorrow: record one real episode end-to-end. Details: memory `yam-record-autocal-status.md`.

## 2026-07-09 — yam_calib migration manifest (phe → VPS, for Saturday)

Written for the manager, matching yams's 2026-07-09 manifest. Cross-checked their "yam_calib owns" list — **it matches my view**; additions below in §4.

**Key structural fact:** unlike yams, most of my canonical code does NOT live on phe. It lives on the station boxes (russet, yukon) inside their local raiden checkouts. The phe→VPS rsync barely touches my working code — what migrates is (a) the vault doc, (b) my agent home + scratch mirrors, (c) the raiden_fork calibration modules that ride along with yams's puget/raiden_fork bundle.

### 1. Files on phe that migrate

- `/data/cameron/vault/para/yam/` — my design docs, incl. `auto_calibration_design.md`. Shared vault; coordinate with siblings.
- `/data/cameron/para/robot/yam/docs/fiducial_exoskeleton_board.md` — I own the calibration/PnP/wrist/arm-zero/hand-eye/russet-v2-reverse sections (yam_sim owns MuJoCo-render sections, yams owns matrix/model sections). Single file, three owners — migrate as one unit, don't split.
- `/data/cameron/agents_stuff/agents/yam_calib/` — my agent home (ROLE.md, inbox/outbox/status, scratch/). scratch/ holds MIRRORS of station code (record_testing.py, exo_auto.py, exo_auto_viz.py, wrist_calibrate_bimanual_onestage_fidex.py, wrist_verify_rerun_bimanual_fidex.py, viz_episode.py, ...) — safe to rsync verbatim; they are copies, station files remain canonical.

### 2. Canonical station-side files (do NOT rsync from phe; they aren't on phe)

russet (`robot-lab@100.123.182.78`):
- `/home/robot-lab/raiden` — **git branch `cameron/record-autocal` @ c049811** (base upstream raiden). Contains `raiden/record_testing.py`, `raiden/cli.py` (record_testing subcommand), `raiden/calibration/exo_auto.py`, `raiden/calibration/exo_auto_viz.py`. **Migration recommendation: push this branch to a git remote (GitHub or the team's raiden remote) rather than file-copying** — it's a clean 2-commit diff against upstream.
- `/home/robot-lab/raiden_internal/raiden/calibration/` — `exo_calibrate_bimanual_fidex.py`, `wrist_calibrate_bimanual_onestage_fidex.py`, `wrist_verify_rerun_bimanual_fidex.py` (+ older exo_calibrate*). NOT in git as far as I know — mirror copies exist in my scratch/, which is the current backup. Worth adding to whatever repo yam_calib gets post-split.
- `~/.config/raiden/calibration_results.json` + `~/.config/raiden/wrist_calibration_result_bimanual.json` — station STATE, not code. Do not migrate; auto-cal regenerates the former at every record start, the latter comes from the one-stage wrist script.

yukon (`robot-lab@100.72.103.103`):
- `/home/robot-lab/yam_local_record/record.py` — yams flagged this correctly as mine. Station-local; stays on yukon, canonical copy should land in the future yam_calib repo.

### 3. Hardcoded paths in MY files that matter for migration

- `exo_auto_viz.py` line ~30: `_EXO_REDO = Path("/home/robot-lab/raiden_internal/third_party/exo_redo")` — russet-local, breaks nowhere in the phe migration, but breaks if the russet code is ever run elsewhere. Same constant appears in the wrist calibrate/verify scripts.
- `docs/fiducial_exoskeleton_board.md` — contains `omidlab.net/browse/...?raw` links and `/data/cameron/...` file-map paths. If the VPS changes the /browse/ endpoint or the mount point, the doc's file map + links need a sed pass.
- My scratch mirrors reference russet paths in comments/docstrings only — no action.

### 4. Confirming + extending yams's "yam_calib owns" list

Their list (record.py on yukon; raiden.calibration.*; ArUco PNGs + board STLs; calibration_results.json schema; the cal sections of the fiducial doc) — **confirmed, all mine**. Additions they missed (new since 2026-07-05, they couldn't have known):
- `record_testing.py` + `exo_auto.py` + `exo_auto_viz.py` + the cli.py diff (russet base-raiden branch, §2).
- The **wrist JSON schema** `wrist_calibration_result_bimanual.json` (`cameras.<name>.{arm, extrinsics.{rotation_matrix, translation_vector, reference_frame}}`) — mine, same footing as calibration_results.json.
- The one-stage wrist calibration + dots-verify scripts on russet raiden_internal (§2).
- Clarification on `raiden.calibration.*`: it exists in THREE trees — puget `raiden_fork` (yukon-era scripts; migrates with yams's puget bundle), russet `/home/robot-lab/raiden` (my branch), russet `raiden_internal` (team's + my fidex scripts). The actively-developed calibration code is the RUSSET side now; raiden_fork's copies are the yukon-era generation. Post-split repo should take the russet versions as canonical.
- ArUco PNGs + STLs: note the same assets also live in russet's `raiden_internal/third_party/exo_redo/` (team-managed) — the raiden_fork copies migrating with yams's bundle is fine by me; no double-handling needed.

### 5. Secrets — echoing yams's list, nothing to add

Station sudo passwords (russet/yukon `robot-lab`) live only in off-vault agent memory; AWS SSO is device-flow ephemeral on russet; nothing of mine embeds credentials in files. Safe to push all my listed code to a private GitHub.
