Files
personal-agent-os/memory-systems/agent-os/VeriPath/Lessons/2026-09-19 - Ashbot Gate3 dispatch stumble.md
T
2026-10-02 07:10:57 -07:00

67 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-09-19 — Ashbot Gate3 dispatch stumble (SOCKS + false "started")
## What happened
Anthony waited ~10+ min with "Nothing." CoS had said Ashbot was dispatched. She never ran. No iMessage. No job folder at first.
## Root causes (ordered)
1. **Silent false start:** CoS reported "dispatching" before the relay actually succeeded. First attempt died in ~5s on Tailscale SOCKS (`AssertionError` in socks5 handshake). Job folder never created. User saw silence.
2. **Detached Windows launch unreliable over SSH:** `start /B` and `Start-Process` of a `.bat` did not execute (empty `_launch.log`, no BAT_START). Looked "dispatched" when nothing ran.
3. **Wrong default profile:** Desktop `active_profile` was `jimmy` until CoS explicitly wrote `ashbot`. Env `HERMES_PROFILE` alone is not enough — set `active_profile` file too.
4. **Argv mangling risk:** Long briefs via `cli.py -q "<huge prompt>"` still risky on Windows. Prefer file brief (`_cos_brief.txt`) read by launcher.
## Locked workflow (Ashbot / any Hermes oneshot from CoS)
1. **Prove path before claiming start**
- SOCKS `:1055` up → SSH `fight@100.64.0.1` OK → SFTP write job folder → only THEN tell Anthony "started."
2. **Job folder first (evidence before inference)**
- Create `hermes\workspace\<client>\<job>\YYYY-MM-DD\`
- Write `STATUS.md` (`starting`), `_cos_brief.txt`, set `ACTIVE_JOB.txt`, set `active_profile` to target seat.
3. **Launch pattern (proven)**
- SSH **sync** exec of launcher Python (real `cpython-3.11.16\python.exe` + `_launch.py`).
- Do **not** rely on `start /B` / `Start-Process` for oneshots until proven with log line `BAT_START`.
- Launcher must log `LAUNCH … pid=` into `_launch.log` and flip STATUS to `working` with pid.
4. **Ashbot iMessage contract (non-negotiable)**
- Brief first action: iMessage Anthony that directions received / work starting.
- Brief last action: iMessage done + evidence path.
- CoS also pings Grok Bot chat on true dispatch (folder+pid confirmed).
5. **No silent waits**
- Mid-job: STATUS ping ~every 5 min from `STATUS.md` until `done`/`blocked`.
- If launch fails: ping Anthony immediately with failure mode (SOCKS/SSH/profile/exit), not after they ask "Nothing."
## What worked
- File brief + `_launch.py` + SSH sync channel → `LAUNCH2 ashbot chars=… active=ashbot` + `pid=` + STATUS `working`.
- Method A fallback: real Python + `cli.py` (not `hermes.exe` over SSH).
## Follow-ups
- [ ] Add this into Gitea `docs/agents/` or org v1 relay section when next syncing.
- [ ] Optional: STATUS watcher routine only when `ACTIVE_JOB.txt` points at a live job.
- [ ] Re-test detached launch later; until then SSH-sync is the standard.
## Second stumble same job — iMessage never left Ashbot
After the job *did* run (13:36–13:52 PT), both required iMessages failed:
- Photon free-tier shared line: `"Target not allowed for this project"`
- Free lines can only **reply** after Anthony texts that number first that day.
- Inbound gateway was healthy; outbound blocked until he opens the thread.
### Locked rule (Ashbot ↔ Anthony iMessage)
1. Before expecting Ashbot start/done texts: Anthony sends any iMessage to the Ashbot Photon number (opens the free-tier allow).
2. If CoS needs Anthony notified and iMessage is blocked: CoS pings Grok Bot chat immediately (do not wait on Photon).
3. Treat "iMessage contract" as best-effort on free tier; chat ping is the guaranteed channel.
## Third stumble — email capability gap
Ashbot drafted `email-birdeye.txt` but could not send (`send_mail` not available in that oneshot session) despite Anthony enabling email on the profile earlier.
- Locked: after enabling a Hermes capability, CoS verifies it in the *oneshot* path (same env/profile as Method A), not only Desktop interactive.
- Until verified: CoS routes "send this draft" as Gatekeeper click / Anthony relay, or re-brief with explicit send tool check.
## Job outcome (for the record)
- Birdeye: stale La Mae @ Flying C confirmed; email draft ready, not sent.
- FindGlocal: already canonical → WONT-DO.
- hairsalonsinusa: Cloudflare 403 → WONT-DO (needs browser retry).
## Fourth stumble — CoS silent after done
Birdeye send finished ~14:28 PT (STATUS done, email accepted). CoS did not ping Anthony until he wrote "It's been a long time" (~14:39).
### Locked rule
On Hermes `done`/`blocked`, CoS pings Grok Bot chat **immediately** with TLDR + evidence path. Mid-job 5-min pings while `working`; terminal ping is mandatory, not optional.