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

4.4 KiB
Raw Blame History

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.