rclone copy \ 'dyzine-dropbox:Dyzine Tek, LLC/Engineering/Hardware Development/POG/POG Atlas/POG-COM PCB/PI-5 Hat/EtherGold/4-Board Test Fixture/fixture-timing' \ '/home/topbox/EtherGold/4-Board Test Fixture/fixture-timing' \ --include '*.py' --progress -v ./install.sh CLEAR_CAPTURE=1 FIXTURE_POS=4 bash hat_fixture_bridge.sh FIXTURE_POS=4 PI_LABEL=topbox4 INJECT_ON_HS_ACTIVE=1 CLEAR_CAPTURE=0 ./hat_fixture_bridge.sh # Pos 3 (trunk bridge) — defaults: PRE_TX_US=0, immediate slave inject, SLV-OUT/IN logging FIXTURE_POS=3 PI_LABEL=topbox3 CLEAR_CAPTURE=0 ./hat_fixture_bridge.sh 2026-06-12 Morning new command: FIXTURE_POS=x PI_LABEL=topboxx ./hat_fixture_bridge.sh POG422_INJECT_SHIM=0 FIXTURE_POS=4 make clean && make FIXTURE_POS=4 POG422_UARTD=1 ./hat_fixture_bridge.sh # 1. See why uartd died cat ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing/logs/uartd.log # 2. Free the serial port sudo fuser -v /dev/ttyXRUSB1 # kill any pog422_fixture_bridge / listen / uartd shown there # 3. Rebuild cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing/inject-shim make clean && make pog422_uartd ./pog422_uartd --port /dev/ttyXRUSB1 --socket /tmp/pog422_uart_test.sock # should print: pog422_uartd 1.0.0 port=... socket=... # Ctrl+C, rm /tmp/pog422_uart_test.sock # 4. Run bridge as topbox (NOT sudo) — captures in fixture-timing/data + logs cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing FIXTURE_POS=3 POG422_UARTD=1 ./run_bridge.sh cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing sudo chown -R topbox:topbox ./data ./logs sudo rm -f /tmp/pog422_uart_3.sock # if a root-owned uartd socket is left cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing/inject-shim make clean && make pog422_uartd ./pog422_uartd --port /dev/ttyXRUSB1 --socket /tmp/pog422_uart_test.sock # expect: pog422_uartd 1.0.0 port=/dev/ttyXRUSB1 socket=... # Ctrl+C, then: cd .. FIXTURE_POS=3 POG422_UARTD=1 ./hat_fixture_bridge.sh sudo dmesg -T | grep -i POG422 FIXTURE_POS=3 ./run_bridge.sh ------------------ June 11 known-good (2045 twelve-games snapshot) — USE THIS cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing # Stop uartd/v136 if running: sudo pkill -f pog422_uartd || true sudo pkill -f pog422_fixture_bridge || true sudo fuser -k /dev/ttyXRUSB1 2>/dev/null || true FIXTURE_POS=1 ./run_listen_jun11_good.sh FIXTURE_POS=2 ./run_listen_jun11_good.sh FIXTURE_POS=3 ./run_bridge_jun11_good.sh FIXTURE_POS=4 ./run_bridge_jun11_good.sh # run_bridge_jun11_good.sh runs masterless_br0, bridge link, diag IP (169.254.3.3/4.4), # then fixture_link_watch.py (ARP ping ~1 Hz) before bridge Python. # Disable link watch: FIXTURE_LINK_WATCH=0 ./run_bridge_jun11_good.sh # Events in data/events.jsonl: link_arp_ok, link_arp_fail, link_carrier (role=link_watch) # After sync, install must report parser_build=jun11-good-gpio7-wire-len-parser-v4: # cd jun11-good && bash install.sh # On pos3 AND pos4 after masterless_br0 (one DEV per ip show — not br0 eth0 eth1): ip -br link show br0 ip -br link show eth0 ip -br link show eth1 # need LOWER_UP on eth0/eth1/br0, not NO-CARRIER # Deprecated (wrong fork): run_*_jun12_replay.sh — see jun11-good/SOURCE.txt ------------------ June 18 Replay of June 11 (DEPRECATED — use run_*_jun11_good.sh above) ip -br link show br0 ip -br link show eth0 ip -br link show eth1 ip -br link show bridge link ssh topbox@10.1.10.110 "mkdir -p ~/.ssh && chmod 700 ~/.ssh" type "C:\Users\Chris\.ssh\id_ed25519_fixture.pub" | ssh topbox@10.1.10.110 "cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" ssh topbox@10.1.10.196 "mkdir -p ~/.ssh && chmod 700 ~/.ssh" type "C:\Users\Chris\.ssh\id_ed25519_fixture.pub" | ssh topbox@10.1.10.196 "cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" ssh topbox@10.1.10.187 "mkdir -p ~/.ssh && chmod 700 ~/.ssh" type "C:\Users\Chris\.ssh\id_ed25519_fixture.pub" | ssh topbox@10.1.10.187 "cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" ssh topbox@10.1.10.39 "mkdir -p ~/.ssh && chmod 700 ~/.ssh" type "C:\Users\Chris\.ssh\id_ed25519_fixture.pub" | ssh topbox@10.1.10.39 "cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" The four Pi lines match the WLAN IPs and do the right thing: mkdir -p ~/.ssh && chmod 700 ~/.ssh Pipe the public key into authorized_keys and set chmod 600 Using the full path C:\Users\Chris\.ssh\id_ed25519_fixture.pub is fine in PowerShell. Before those lines: run .\setup_ssh_access.ps1 once in sync\ so that .pub file exists (empty passphrase = Enter twice). After all four Pis accept the key: add to sync\fixture_hosts.env: FIXTURE_SSH_KEY=C:/Users/Chris/.ssh/id_ed25519_fixture Then test: cd "...\sync" .\orchestrate_fixture.ps1 -Action status Run the four install pairs from PowerShell on the PC; enter the topbox password once per Pi when prompted. -------------------------------------------------------------------------------------------------------------- Option B — Skip password SSH (easier if you’re at the Pis) Since the Pis boot straight in, you can install the key locally with no guessing: On the PC — confirm the public key exists: type C:\Users\Chris\.ssh\id_ed25519_fixture.pub Copy the one long line it prints (starts with ssh-ed25519). On each Pi (keyboard/monitor, already logged in as topbox): mkdir -p ~/.ssh && chmod 700 ~/.ssh nano ~/.ssh/authorized_keys Paste that line, save (Ctrl+O, Enter, Ctrl+X), then: chmod 600 ~/.ssh/authorized_keys Repeat on all four Pis (same pasted line on each). Back on the PC — test: ssh -i "C:\Users\Chris\.ssh\id_ed25519_fixture" topbox@10.1.10.110 hostname Should print topbox1 with no password prompt. ------------------ echo "=== $(hostname) ===" file /home/topbox/.ssh ls -la /home/topbox /home/topbox/.ssh /home/topbox/.ssh/authorized_keys namei -l /home/topbox/.ssh/authorized_keys ------------------------------------ chown topbox:topbox /home/topbox/.ssh && chmod 700 /home/topbox/.ssh && chmod 644 /home/topbox/.ssh/authorized_keys && ls -la /home/topbox/.ssh FIXTURE_POS=1 ./run_listen_jun11_good.sh FIXTURE_POS=2 ./run_listen_jun11_good.sh FIXTURE_POS=3 ./run_listen_jun11_good.sh FIXTURE_POS=4 ./run_listen_jun11_good.sh FIXTURE_POS=1 ./run_bridge_jun11_good.sh FIXTURE_POS=2 ./run_bridge_jun11_good.sh FIXTURE_POS=3 ./run_bridge_jun11_good.sh FIXTURE_POS=4 ./run_bridge_jun11_good.sh FIXTURE_POS=1 bash switch_prod_bridge.sh FIXTURE_POS=2 bash switch_prod_bridge.sh FIXTURE_POS=3 bash switch_prod_bridge.sh FIXTURE_POS=4 bash switch_prod_bridge.sh SKIP_SYNC=N bash stop_fixture_session.sh FIXTURE_POS=N bash jun11-prod/disable_prod.sh CHANNEL=ois FIXTURE_POS=N ./run_listen_jun11_good.sh CHANNEL=ois FIXTURE_POS=N ./run_bridge_jun11_good.sh CHANNEL=both FIXTURE_POS=N ./run_bridge_jun11_good.sh cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing chmod +x run_p3_gamestats_test.sh FIXTURE_POS=1 ./run_p3_gamestats_test.sh --raw cd ~/EtherGold/bridge/pog-edge FIXTURE_POS=1 CHANNEL=both sudo -E bash run_bridge_edge_bench.sh cd ~/EtherGold/bridge/pog-edge FIXTURE_POS=4 CHANNEL=both sudo -E bash run_bridge_edge_bench.sh CHANNEL=both POG422_UARTD=0 FIXTURE_POS=N bash run_bridge_jun11_good.sh ================================================================================ PHASED PLAN — legacy now, field layout after good dev captures ================================================================================ Phase 1 (recovery + jackpot-forcing dev captures): PULL_LAYOUT=legacy in ~/EtherGold/fixture-bridge.env Run ONLY from ~/EtherGold/4-Board Test Fixture/fixture-timing Goal: machine ETH relay working, 05 gameplay on chain, archive + eval vs BASELINE Phase 2 (after captures look good — cleaner field layout): Set PULL_LAYOUT=field, re-run pull_fixture_shared_from_dropbox.sh Start from ~/EtherGold/bridge (install_sync sets SYNC_SOURCE=bridge) Retire duplicate legacy tree on each Pi once all four match ================================================================================ 2026-06-30 — Phase 1: LEGACY layout (fixture-timing tree) ================================================================================ YOU ARE HERE if each Pi has: ~/EtherGold/4-Board Test Fixture/fixture-timing/ ~/EtherGold/4-Board Test Fixture/sync/ (or ~/EtherGold/sync/) --- ON EACH PI: pull latest scripts (once per session) --- cd ~/EtherGold/4-Board\ Test\ Fixture/sync # or: cd ~/EtherGold/sync DRY_RUN=1 bash pull_fixture_shared_from_dropbox.sh bash pull_fixture_shared_from_dropbox.sh # fixture-bridge.env → ~/EtherGold/fixture-bridge.env (NOT in sync/) # One command — no editor: bash install_fixture_bridge_env.sh --- MIXED after pull? (legacy + ~/EtherGold/bridge both exist) --- cd ~/EtherGold/4-Board\ Test\ Fixture/sync # If pos2–4 only have logs/ under fixture-timing (root-owned stub), repair: bash fix_fixture_timing_tree.sh # Until legacy tree is full on all Pis, scripts may only exist under ~/EtherGold/bridge/ bash show_fixture_layout.sh # Lock to legacy (recommended): nano ~/EtherGold/fixture-bridge.env # PULL_LAYOUT=legacy bash install_sync.sh # SYNC_SOURCE → fixture-timing pkill -f pog422_fixture_bridge || true cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing bash start_bridge_background.sh --- START (run on each Pi — only FIXTURE_POS changes) --- cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing bash start_bridge_background.sh # Verify: pgrep -af pog422_fixture_bridge.py tail -f logs/orchestrator-bridge.log --- STOP + sync captures to PC --- cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing SKIP_SYNC=1 bash stop_fixture_session.sh # Then upload (if rclone configured): cd ~/EtherGold/4-Board\ Test\ Fixture/sync && bash sync_to_dropbox.sh # Or copy data/ + logs/ to PC Dropbox folders 1–4 manually. --- Disable prod if it was ever enabled --- sudo systemctl stop fixture-prod 2>/dev/null || true ================================================================================ Alternate: FIELD layout (~/EtherGold/bridge/) — only if you migrated ================================================================================ cd ~/EtherGold/sync bash pull_fixture_shared_from_dropbox.sh # with PULL_LAYOUT=field in fixture-bridge.env cd ~/EtherGold/bridge bash start_bridge_background.sh ---------------------------------- FIXTURE_POS=N FIXTURE_MODE=debug PULL_LAYOUT=legacy After sync bash stop_fixture_gremlins.sh bash install_fixture_bridge_env.sh --force cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing bash run_bridge_jun11_good.sh ================================================================================ All-four ETH bridge (positions 1–4) — auto gremlin kill ================================================================================ No manual stop_fixture_gremlins needed — run_bridge_jun11_good.sh calls it first (FIXTURE_STOP_GREMLINS=1 default; set 0 to skip). On each Pi (same command, different FIXTURE_POS). ETH daisy-chain only — no copper trunk between machines. CHANNEL=both relays machine (M) + OIS (O) tags on ETH. cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing CHANNEL=both FIXTURE_POS=1 PI_LABEL=topbox1 bash run_bridge_jun11_good.sh CHANNEL=both FIXTURE_POS=2 PI_LABEL=topbox2 bash run_bridge_jun11_good.sh CHANNEL=both FIXTURE_POS=3 PI_LABEL=topbox3 bash run_bridge_jun11_good.sh CHANNEL=both FIXTURE_POS=4 PI_LABEL=topbox4 bash run_bridge_jun11_good.sh From PC (parallel background start, after deploy + pull): cd sync .\orchestrate_fixture.ps1 -Action start-debug Stop all + sync: .\orchestrate_fixture.ps1 -Action stop # or on each Pi: cd ~/EtherGold/sync && bash stop_fixture_session.sh Test ideas: Master SCR on pos3 (Local Net Test), gameplay on pos4, progressive 0x0A witness on pos1/2 eth_rx in events.jsonl. ================================================================================ --------------------------------- cd ~/EtherGold/sync bash pull_fixture_shared_from_dropbox.sh # run_bridge_jun11_good.sh now stops gremlins automatically: cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing bash run_bridge_jun11_good.sh If sync gets funky cd ~/EtherGold/sync bash refresh_sync_from_dropbox.sh cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing FIXTURE_POS=3 CHANNEL=machine bash run_bridge_jun11_good.sh # pos3 # pos4: FIXTURE_POS=4 CHANNEL=machine bash run_bridge_jun11_good.sh ================================================================================ Master-native SCR bench (pos3 only — stronger diagnostics) ================================================================================ Goal: verify Master copper SCR capture before retesting pos4 relay path. 1. Stop pos4 bridge (and pos1/2 if running): cd ~/EtherGold/sync && bash stop_fixture_gremlins.sh 2. On pos3 only: cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing bash run_scr_master_diag_pos3.sh Enables: FIXTURE_SCR_DIAG=1, FIXTURE_SCR_MASTER_NATIVE_ONLY=1 (blocks relayed 0x03 ETH→inject; logs scr_diag + scr_round) Console: [pos3 witness] lines — empty BSY (window_bytes=0) prints live; summary every STATS_INTERVAL (default 30s) and on stop. 3. Local Net Test → SCR on Master only (3–5 attempts). End session. 4. On PC (after sync or SCP data/): cd fixture-timing python analyze_scr.py --master-native ../3/data ================================================================================ UART / HS diagnostics (pos3 — HS blip but no bytes) ================================================================================ Existing tools: read_hat_state.py hat GPIO mode + MST/SLV-HS idle check tools/uart_err_probe.py driver frame/overrun + GET_RX_STATS snapshot New (recommended): bash run_uart_hs_fifo_probe.sh --trigger scr # Compare GPIO HS vs FIONREAD / hw_fifo / driver_rx_chars while you run ONE SCR bash run_uart_hs_fifo_probe.sh --channel both # machine + OIS LEDs both channels Listen/bridge now emit hs_uart_diag on every empty HS window (events.jsonl): verdict=no_uart_bytes_anywhere → kernel never saw RX (tap/DE/timing) verdict=driver_saw_bytes_python_missed → driver counted bytes, pyserial missed verdict=fifo_has_bytes_not_captured → bytes stuck in FIFO at HS fall Quick err counters (stop bridge first): bash run_uart_err_probe.sh /dev/ttyXRUSB1 bash run_uart_err_probe.sh /dev/ttyXRUSB0 Expect: scr_round request+reply, origin=uart_native, checksum_ok=true. cd ~/EtherGold/sync && bash stop_fixture_gremlins.sh cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing FIXTURE_POS=3 CHANNEL=machine bash run_listen_jun11_good.sh ------------------ cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing bash run_uart_hs_fifo_probe.sh --trigger scr cd ~/EtherGold/sync && bash stop_fixture_gremlins.sh rm -f ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing/data/* cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing bash run_uart_hs_fifo_probe.sh --trigger scr ------------------------ cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing CHANNEL=both FIXTURE_POS=1 PI_LABEL=topbox1 bash run_bridge_jun11_good.sh CHANNEL=both FIXTURE_POS=1 PI_LABEL=topbox2 bash run_bridge_jun11_good.sh CHANNEL=both FIXTURE_POS=1 PI_LABEL=topbox3 bash run_bridge_jun11_good.sh CHANNEL=both FIXTURE_POS=1 PI_LABEL=topbox4 bash run_bridge_jun11_good.sh # repeat FIXTURE_POS=2,3,4 on each Pi ## Cold boot / SD golden image (systemd) The jun11-good milestone stack (`CHANNEL=both`, pyserial, directional ETH) is already wired for boot via **fixture-prod.service** — same code path as manual debug, but errors-only logging (`~/EtherGold/logs/errors.jsonl`) and supervisor auto-restart on USB/ETH hot-plug. **One-time per Pi (or from PC all-four):** ```powershell cd sync .\orchestrate_fixture.ps1 -Action deploy .\orchestrate_fixture.ps1 -Action install-prod-boot ``` Per-Pi manual (after deploy landed under `~/EtherGold/Daemon/`): ```bash sudo env FIXTURE_POS=1 bash ~/EtherGold/Daemon/commission_prod_boot.sh ``` **Golden SD workflow (clone cold boot):** 1. Commission pos1; soak: `systemctl status fixture-prod` + power-cycle with ETH connected. 2. Image SD from pos1. 3. Flash to pos2/3/4; on each clone: ```bash sudo env FIXTURE_POS=2 HOSTNAME=topbox2 bash ~/EtherGold/Daemon/restamp_fixture_pos.sh sudo reboot ``` 4. Power on — no PC, no manual `run_bridge_jun11_good.sh`. Bridge starts when USB hat + ETH ready. **Bench capture sessions** (full `events.jsonl` / `packets.raw`) still use debug mode: ```powershell .\orchestrate_fixture.ps1 -Action stop-prod # disables auto-restart .\orchestrate_fixture.ps1 -Action start-debug # CHANNEL=both capture ``` Re-enable cold boot after bench: `sudo rm -f /var/lib/fixture-prod/disabled && sudo systemctl start fixture-prod` See `jun11-prod/FIELD_RELIABILITY.txt` for soak matrix and disable/uninstall. ================================================================================ 2026-07-02 — PC stage → Pi pull (prefer over long SSH deploy) ================================================================================ Agent edits land in Dropbox via this PC workspace. Avoid multi-minute SCP from PC; wait for Dropbox sync, then pull on each Pi. --- ON PC (after agent edits) --- ```powershell cd "...\EtherGold\4-Board Test Fixture\sync" .\stage_fixture_dropbox.ps1 ``` That runs normalize-lf.ps1 and prints Pi commands. No SSH. --- ON EACH BENCH PI — one command per session --- ```bash cd ~/EtherGold/sync DRY_RUN=1 bash pull_and_apply_bench.sh # optional preview bash pull_and_apply_bench.sh ``` This runs `pull_all_from_dropbox.sh` (EtherGold + DyzineFrame) then `apply_bench_profile.sh`. Pull only (no bench profile): `bash pull_all_from_dropbox.sh` or `SKIP_BENCH_PROFILE=1 bash pull_and_apply_bench.sh` Skip DyzineFrame on relay-only Pis: `SKIP_DYZINEFRAME=1 bash pull_all_from_dropbox.sh` `apply_bench_profile.sh` alone (after you already pulled): ```bash cd ~/EtherGold/sync && bash apply_bench_profile.sh ``` Auto profile by FIXTURE_POS: | Pos | Profile | Role | What it does | |-----|---------|------|----------------| | 1 | debug | segment relay | Autostart off + debug bridge → `fixture-timing/data/` | | 2 | debug | **Slave relay** | Autostart off + debug bridge (no lab Keno synth) | | 3 | lab-keno | **Master synth** | Autostart off + lab TouchEasy Keno jpot synth | | 4 | minimal | hold | Autostart off only — bridge not restarted | Bench vs prod: - `apply_bench_profile.sh` / `pull_and_apply_bench.sh` always run `disable_bench_prod.sh` (stops fixture-prod.service, disables at boot, full debug capture). - jun11-prod / `--prod` is for **field long-run only** (errors-only, bridge/data path). Re-enable: `jun11-prod/enable_prod.sh` — not used for normal bench Keno/gameplay tests. Override: `BENCH_PROFILE=debug|lab-keno|minimal bash apply_bench_profile.sh` --- Run-once vs each session --- | Script | When | |--------|------| | `pull_all_from_dropbox.sh` | Each session — EtherGold + DyzineFrame (preferred) | | `pull_fixture_shared_from_dropbox.sh` | EtherGold only (called by pull_all) | | `pull_and_apply_bench.sh` | Pull + bench profile (preferred one-liner) | | `apply_bench_profile.sh` | After pull, or to restart bridge without pull | | `disable_dyzineframe_autostart.sh` | Once per SD image (idempotent; nested in apply) | | `install_fixture_bridge_env.sh` | Once if `~/EtherGold/fixture-bridge.env` missing | | `fix_fixture_timing_tree.sh` | Repair only — mixed/empty legacy tree | | `switch_debug_bridge.sh` / `switch_lab_keno_jpot_master.sh` | Nested in apply; restarts bridge | | `disable_bench_prod.sh` | Stops jun11-prod + disables fixture-prod at boot (nested in apply) | | `commission_prod_boot.sh` | One-time field cold-boot (not bench capture) | Restore DyzineFrame autostart: `bash disable_dyzineframe_autostart.sh --enable` Disable lab Keno: `bash enable_lab_keno_jpot_env.sh --off` then `BENCH_PROFILE=debug bash apply_bench_profile.sh` --- Draw Poker / skill-game research (foreground — preferred) --- Two terminals; **Ctrl-C** stops bridge; no `start_bridge_background.sh`, no prod supervisor. **Terminal A (`~/EtherGold/sync`) — pos2 and pos3 each:** ```bash bash pull_fixture_shared_from_dropbox.sh FIXTURE_POS=2 bash prep_bench_skill_research.sh # on pos3: FIXTURE_POS=3 bash prep_bench_skill_research.sh ``` **Terminal B (`~/EtherGold/4-Board Test Fixture/fixture-timing`) — paste exports from prep:** ```bash export FIXTURE_POS=2 export FIXTURE_MODE=debug FIXTURE_PROD=0 VERBOSE=1 CHANNEL=both export FIXTURE_LAB_KENO_JPOT_SYNTH=0 CLEAR_CAPTURE=1 export POG422_UARTD=0 POG422_UARTD_CAPTURE=0 POG422_UARTD_INJECT=0 bash run_bridge_jun11_good.sh ``` Stop: **Ctrl-C** in Terminal B. Sync: `bash stop_and_sync_bench.sh` from sync terminal. Optional one-liner prep only (still start bridge manually in Terminal B): ```bash BENCH_PROFILE=skill-research bash apply_bench_profile.sh ``` Docs: `POKER_CARD_WIRE.md`, `LAB_POKER_ROYAL_SYNTH.md`, `decode_poker_cards.py`. --- Lab royal flush (pos3 Master) --- Terminal B on pos3 (after pull): cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing export FIXTURE_POS=3 VERBOSE=1 CHANNEL=both FIXTURE_PROD=0 CLEAR_CAPTURE=1 export POG422_UARTD=0 FIXTURE_LAB_KENO_JPOT_SYNTH=0 bash run_bridge_jun11_lab_poker_royal_master.sh pos2: normal debug bridge. Slave: Jacks or Better @ $2 → STAND on royal deal. Grep pos3 events.jsonl for lab_poker_royal_synth / lab_poker_jpot_synth. **Avoid for manual bench:** `pull_and_apply_bench.sh` and `start_bridge_background.sh` (background bridge — no Ctrl-C). --- Stop capture + sync (manual — preferred) --- ```bash cd ~/EtherGold/sync bash stop_and_sync_bench.sh ``` Same as `stop_fixture_gremlins.sh` + `stop_fixture_session.sh` (wrapper finds ~/EtherGold/bridge/). Stop only: `SKIP_SYNC=1 bash stop_fixture_session.sh` Upload only: `SYNC_ONLY=1 bash stop_fixture_session.sh` then or `bash sync_to_dropbox.sh` Prefer **not** auto-starting bridge? After pull: ```bash SKIP_BENCH_PROFILE=1 bash pull_and_apply_bench.sh # pull + autostart off only # then manually: FIXTURE_POS=N bash switch_lab_keno_jpot_master.sh # or switch_debug_bridge.sh ``` pull_and_apply_bench.sh cd ~/EtherGold/bridge bash stop_fixture_session.sh cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing export FIXTURE_POS=2 # or 3 export VERBOSE=1 CHANNEL=both FIXTURE_PROD=0 FIXTURE_LAB_KENO_JPOT_SYNTH=0 bash run_bridge_jun11_good.sh Position 2 cd ~/EtherGold/sync && bash pull_fixture_shared_from_dropbox.sh FIXTURE_POS=2 bash prep_bench_skill_research.sh # Terminal B: run_bridge_jun11_good.sh Position 3 cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing export FIXTURE_POS=3 VERBOSE=1 CHANNEL=both FIXTURE_PROD=0 CLEAR_CAPTURE=1 export POG422_UARTD=0 FIXTURE_LAB_KENO_JPOT_SYNTH=0 bash run_bridge_jun11_lab_poker_royal_master.sh ------------------------------------------------------- cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing export FIXTURE_POS=2 VERBOSE=1 CHANNEL=both FIXTURE_PROD=0 CLEAR_CAPTURE=1 export POG422_UARTD=0 bash run_bridge_jun11_good.sh cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing export FIXTURE_POS=3 VERBOSE=1 CHANNEL=both FIXTURE_PROD=0 CLEAR_CAPTURE=1 export POG422_UARTD=0 bash run_bridge_jun11_lab_spinjack_flushjack_master.sh -------------------------------------------------------- cd ~/EtherGold/sync bash enable_lab_touch6_jpot_env.sh FIXTURE_POS=3 bash switch_debug_bridge.sh FIXTURE_POS=3 bash ~/EtherGold/fixture-timing/run_bridge_jun11_lab_touch6_jpot_master.sh cd ~/EtherGold/sync && FIXTURE_POS=3 bash switch_lab_touch6_jpot_master.sh # sync — pull only cd ~/EtherGold/sync && bash pull_and_apply_bench.sh # fixture-timing — foreground, Ctrl-C stops cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing FIXTURE_POS=3 bash run_bridge_jun11_lab_touch6_jpot_master.sh If you previously ran enable_lab_touch6_jpot_env.sh, check ~/EtherGold/fixture-bridge.env — if it still has FIXTURE_LAB_TOUCH6_JPOT_GAME=0791, change it to 9107 or re-run enable after pull. Then replay game 1 (card 1 picks 1–6). On pos3 console you should see lab_touch6_jpot_synth with balls=1,2,3,4,5,6. Sync when ready if you want that run archived. FIXTURE_POS=3 bash run_bridge_jun11_lab_superpick_jpot_master.sh -------------------------------------------------------- cd ~/EtherGold/sync && bash pull_and_apply_bench.sh cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing FIXTURE_POS=2 FIXTURE_LAB_BINGO_JPOT_TID=38D7 bash run_bridge_jun11_lab_bingo_jpot_master.sh -------------------------------------------------------- Triple 7's lab jackpot grid (3× TRIPLE7 payline 1 — any bet): cd ~/EtherGold/sync && bash pull_and_apply_bench.sh cd ~/EtherGold/4-Board\ Test\ Fixture/fixture-timing # pos2 bridge witness + pos3 Master synth: FIXTURE_POS=2 bash run_bridge_jun11_good.sh # pos2 (separate terminal) FIXTURE_LAB_TRIPLE7S_JPOT_TID=38D7 bash run_bridge_jun11_lab_triple7s_jpot_pos3.sh # On machine: Triple 7's, spin once (any bet — synth always forces payline 1). # pos3 events: lab_triple7s_jpot_synth payline1=0D,0D,0D # pos2 packets.raw: injected 0x89 grid bytes 21–29 should show 0D on indices 3–5. FIXTURE_LAB_TRIPLE7S_JPOT_TID=38D7 bash run_bridge_jun11_lab_triple7s_jpot_pos3.sh ------------------------------------------------------------------------------ To enable early Fireworks cd ~/EtherGold/sync && bash pull_and_apply_bench.sh Office Pi (pos5) — manual jun11-good bench (stops ethergold.service via gremlins) cd ~/EtherGold/sync && bash pull_fixture_shared_from_dropbox.sh # field layout mirrors fixture-timing → ~/EtherGold/bridge/ cd ~/EtherGold/bridge CHANNEL=both POG422_UARTD=0 FIXTURE_POS=5 bash run_bridge_jun11_good.sh # auto: ~/EtherGold/sync/stop_fixture_gremlins.sh (stops prod + stale bridge/uartd) # Gremlins only: # cd ~/EtherGold/sync && bash stop_fixture_gremlins.sh cd ~/EtherGold/bridge FIXTURE_POS=3 bash run_bridge_jun11_lab_keno_jpot_master.sh FIXTURE_POS=1 CHANNEL=both FIXTURE_EARLY_WIN_PHASE2_SLOTS=1 bash run_bridge_jun11_good.sh FIXTURE_POS=2 CHANNEL=both FIXTURE_EARLY_WIN_PHASE2_SLOTS=1 bash run_bridge_jun11_good.sh FIXTURE_POS=3 CHANNEL=both FIXTURE_EARLY_WIN_PHASE2_SLOTS=1 bash run_bridge_jun11_good.sh FIXTURE_POS=4 CHANNEL=both FIXTURE_EARLY_WIN_PHASE2_SLOTS=1 bash run_bridge_jun11_good.sh FIXTURE_POS=5 CHANNEL=both FIXTURE_EARLY_WIN_PHASE2_SLOTS=1 bash run_bridge_jun11_good.sh In your Terminal, type this command and press Enter:rm -f ~/.config/chromium/SingletonLockNext, type this command and press Enter:rm -f ~/.config/chromium/SingletonCookieFinally, type this command and press Enter:rm -f ~/.config/chromium/SingletonSocket ------------------------------------------------------- CHANNEL=machine POG422_UARTD=1 POG422_UARTD_INJECT=0 FIXTURE_POS=1 bash run_bridge_jun11_good.sh CHANNEL=machine POG422_UARTD=1 POG422_UARTD_INJECT=0 FIXTURE_POS=2 bash run_bridge_jun11_good.sh CHANNEL=machine POG422_UARTD=1 POG422_UARTD_INJECT=0 FIXTURE_POS=3 bash run_bridge_jun11_good.sh CHANNEL=machine POG422_UARTD=1 POG422_UARTD_INJECT=0 FIXTURE_POS=4 bash run_bridge_jun11_good.sh cd ~/EtherGold/dev/xr-usb-serial-pog422 && bash install_pi.sh modinfo xr_usb_serial_common | grep -i version cd ~/EtherGold/dev/xr-usb-serial-pog422 && bash install_pi.sh sudo modprobe -r xr_usb_serial_common sudo modprobe xr_usb_serial_common modinfo xr_usb_serial_common | grep -i version cat /sys/module/xr_usb_serial_common/version # 1W-... cd ~/EtherGold/sync && bash pull_all_from_dropbox.sh cd ~/EtherGold/dev/inject-shim && make sudo bash ~/EtherGold/dev/xr-usb-serial-pog422/install_pi.sh CHANNEL=machine FIXTURE_POS=3 bash run_bridge_jun11_good.sh ------------------------------ Pos 2 sudo pkill -f pog422_uartd || true sudo pkill -f pog422_fixture_bridge || true sudo pkill -f pog422_fixture_listen || true cd ~/EtherGold/sync && bash pull_all_from_dropbox.sh cd ~/EtherGold/dev/inject-shim && make clean && make HW_DEBUG=1 HW_DEBUG=1 sudo bash ~/EtherGold/dev/xr-usb-serial-pog422/install_pi.sh cd ~/EtherGold/dev HW_DEBUG=1 FIXTURE_POS=2 CHANNEL=machine bash run_listen_jun11_good.sh # expect session_start: capture_engine=uartd, hw_debug=1, eg_version=2.2.1.8 POS 3 and 4 7/12/26 — EG 2.2.1.8 cd ~/EtherGold/sync && bash pull_all_from_dropbox.sh cd ~/EtherGold/dev/inject-shim && make clean && make # Bench dense HS/GPIO timeline (optional): # cd ~/EtherGold/dev/inject-shim && make clean && make HW_DEBUG=1 # HW_DEBUG=1 sudo bash ~/EtherGold/dev/xr-usb-serial-pog422/install_pi.sh sudo bash ~/EtherGold/dev/xr-usb-serial-pog422/install_pi.sh grep -m1 EG_VERSION ~/EtherGold/dev/pog422_fixture_core.py # expect: 2.2.1.8 cd ~/EtherGold/sync && bash pull_all_from_dropbox.sh cd ~/EtherGold/dev/inject-shim && make clean && make HW_DEBUG=1 HW_DEBUG=1 sudo bash ~/EtherGold/dev/xr-usb-serial-pog422/install_pi.sh cd ~/EtherGold/dev HW_DEBUG=1 FIXTURE_POS=2 bash run_listen_jun11_good.sh cp -n update.env.example ~/EtherGold/update.env