67 lines
4.4 KiB
Markdown
67 lines
4.4 KiB
Markdown
# 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.
|