vault-sync: 2026-10-02 07:10 (jimmy)

This commit is contained in:
jimmy
2026-10-02 07:10:57 -07:00
parent a9100905dd
commit 5f406ba6b9
89 changed files with 7374 additions and 745 deletions
@@ -0,0 +1,5 @@
# Ashbot CC Anthony on listing return emails
Standing: when directories reply to Ashbot Phoenix outreach (`ashbotphoenix@agentmail.to`), Ashbot CCs `tonyjbala@gmail.com` on the reply thread.
Encoded in ashbot `SOUL.md` + CoS standing rules.
@@ -0,0 +1,66 @@
# 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.
@@ -0,0 +1,31 @@
# 2026-09-19 — Ashbot inbox pass: credential hunt spiral
## Job
Inbox pass: read returns to Phoenix listing outreach, reply with CC tonyjbala@gmail.com.
## Process she actually ran
1. Memory write (identity + NAP)
2. mkdir workspace; try `himalaya` → missing (127)
3. Photon/iMessage check → unavailable (expected)
4. Read prior Birdeye send artifacts (good)
5. Long hunt for AGENTMAIL_API_KEY (blocked repeatedly by safety)
6. Source-dive hermes-agent email plugin / secret_scope (~minutes, including 143s grep)
7. Write `_check_mail.py` / `_check_inbox.py` for IMAP
8. Scripts exit 1 — key not in oneshot env / .env path miss
9. STATUS stuck at `working`; evidence empty; no replies-log
## Stumbles (ordered)
1. **Oneshot env gap (root):** Method A `_launch.py` does not inject `AGENTMAIL_API_KEY` into the child. Gateway/Desktop sessions may have it; SSH oneshot does not. Outbound Birdeye earlier worked via a session that had SMTP/key; this inbox pass did not inherit it.
2. **Safety blocks:** grep/cat of .bashrc/.env, powershell env dumps, execute_code — blocked. She adapted by writing files + read_file, but burned tokens.
3. **Tooling gaps:** `himalaya` not installed; uv python broken; had to discover `Python312` path.
4. **No STATUS discipline while blocked:** stayed `working` instead of flipping to `blocked: missing AGENTMAIL in oneshot env` after ~2 failed key checks.
5. **Credential archaeology over escalate:** should have STATUS=blocked and ping CoS after first confirmed KEY_MISSING, not 10+ minutes of source greps.
## Locked rules
1. Ashbot oneshot launcher MUST load profile `.env` (or pass `AGENTMAIL_API_KEY`) before `cli.py --oneshot`.
2. If mail key absent after one safe check → STATUS `blocked` + stop; CoS fixes env; do not source-dive.
3. Prefer Hermes email platform tools when available; raw IMAP is fallback only with injected key.
4. CoS mid-job STATUS watcher every 5m (now on) surfaces these stalls.
## Still open on this run
Job may still be spinning on key hunt. CoS should stop or reinject env and redispatch.
@@ -0,0 +1,109 @@
# 2026-09-19 — Post-mortem: Ashbot Gate 3 / inbox day (CoS + Hermes)
**Scope:** Phoenix Salon Gate 3 pilot → Birdeye send → inbox replies → STATUS watcher.
**Outcome:** Birdeye email SENT; inbox pass found no returns; several process failures burned time and trust.
**Author:** CoS (Chief of Staff) for Gatekeeper Anthony.
---
## 1. Timeline (PT, 2026-09-19)
| Time (approx) | Event |
|---|---|
| ~1:20 | Anthony: "Nothing" — expected Ashbot iMessage after Gate 3 assign |
| ~1:21 | First Gate 3 dispatch **failed in ~5s** (Tailscale SOCKS AssertionError). CoS had implied start; folder never created |
| ~1:32–1:36 | Diagnose → redispatch. Detached `start /B` / Start-Process **did not run**. SSH-sync `_launch.py` finally worked (pid 38648) |
| ~1:36–1:52 | Gate 3 pilot **done**: FindGlocal WONT-DO (canonical); hairsalonsinusa Cloudflare WONT-DO; Birdeye draft only (no send_mail in that session). iMessage blocked (Photon free-tier / sidecar) |
| ~2:23–2:28 | Birdeye **SENT** via SMTP from `ashbotphoenix@agentmail.to` (after username fix from rejected `ashbot@`) |
| ~2:40–2:42 | Park Phoenix domain mailbox; lock AshBot Phoenix = AgentMail identity; patch config username |
| ~2:58 | Close-out list for Anthony (IG / YP / Gate 3 leftovers) |
| ~2:59 | Standing rule: CC `tonyjbala@gmail.com` on listing reply threads |
| ~3:00 | Inbox pass dispatched — **oneshot missing AGENTMAIL_API_KEY** |
| ~3:00–3:14 | Ashbot credential-hunt spiral (himalaya missing, safety blocks, 143s source grep). STATUS stuck `working` |
| ~3:08+ | STATUS watcher created (@every 5m) after Anthony demanded visibility |
| ~3:12–3:14 | Trace analysis; Anthony: intervene as superior |
| ~3:15 | CoS killed pid 36384; redispatched **v2** with `.env` inject (`key_present=True`, pid 38988) |
| ~3:26 | Mid-job ping: curling AgentMail inbox |
| ~3:32 | **Inbox v2 done**: 4 msgs scanned, **NONE_FOUND** (no Birdeye/listing returns). ACTIVE_JOB cleared |
| ~3:39–4:16 | Desktop often unreachable; watcher correctly stayed silent (idle) but kept waking CoS every 5m |
---
## 2. What "went off the rails"
### A. False starts / silent failures
- Claimed or implied Ashbot "started" before SOCKS/SSH/folder/pid were real.
- Windows detached launch looked dispatched with empty logs.
- Anthony waited with "Nothing" / "It's been a long time" because CoS did not fail-loud or done-ping on time.
### B. Ashbot oneshot environment gap (root technical failure)
- Method A `_launch.py` did **not** load `profiles/ashbot/.env`.
- Gateway/Desktop sessions had AgentMail; SSH oneshot did not.
- Birdeye send luckily had key in that session; inbox pass did not → multi-minute dead-end hunt.
- Ashbot did not flip STATUS to `blocked` after first KEY_MISSING; CoS was slow to intervene.
### C. Visibility debt
- No reliable mid-job channel until STATUS watcher.
- iMessage contract failed (Photon free-tier + sidecar down) — chat ping is the real guarantee.
- Watcher later correct for idle, but **@every 5m forever** creates noise when no job (and when desktop offline).
### D. Scope / attention scatter
- Retro Revolution paste briefly looked like wrong-thread pollution.
- Desktop Local dropped after inbox done → watcher "offline" ticks (silent to Anthony, still wake tax).
### E. What actually worked
- File-brief + SSH-sync launch (once SOCKS up).
- Birdeye outbound SMTP with `ashbotphoenix@agentmail.to`.
- Intervene rule applied: kill spiral → inject key → v2 completed cleanly.
- Lessons filed in Obsidian; several standing rules locked in CoS memory.
---
## 3. Root causes (ordered)
1. **CoS process immature:** announce before prove; late intervene; late done-ping.
2. **Launcher incomplete:** oneshot must always inject AgentMail (and profile) from ashbot `.env`.
3. **Hermes worker defaults:** will source-dive instead of STATUS=blocked + stop.
4. **Notify path fragile:** Photon not reliable; chat must be primary.
5. **Watcher cadence too aggressive when idle.**
---
## 4. Locked rules (do not regress)
1. Never say Hermes "started" until folder + STATUS pid + launch log LAUNCH line.
2. SSH-sync `_launch.py` + `_cos_brief.txt`; no `start /B` until proven.
3. Inject `AGENTMAIL_API_KEY` from ashbot `.env` before every mail oneshot.
4. Key missing once → STATUS blocked + stop; CoS fixes; no source archaeology.
5. Dead-end path → CoS intervenes immediately (superior).
6. Done/blocked → CoS pings Anthony in chat immediately.
7. Mid-job ~5m STATUS pings only while ACTIVE_JOB points at live work.
8. Ashbot From = `ashbotphoenix@agentmail.to`; CC Anthony on listing reply threads.
9. Phoenix domain mailbox parked; do not block on `assistant@phoenixcameronpark.com`.
---
## 5. Corrective actions (next)
| Action | Owner | Status |
|---|---|---|
| Standardize hermes-relay / `_launch.py` with .env inject | CoS | Partially done (v2 pattern) — promote to default template |
| Pause STATUS watcher when ACTIVE_JOB empty; resume on dispatch | CoS | Do now |
| Optional: daily/idle inbox poll for Birdeye replies (with key inject) | CoS | Not started |
| Anthony: IG + YP confirm (close letter blockers) | Gatekeeper | Open |
| Mirror lessons into Gitea `docs/agents/` | CoS | Pending |
---
## 6. Honest scorecard
| Goal | Result |
|---|---|
| Gate 3 3-URL pilot | Done (2 WONT-DO + Birdeye draft→sent) |
| Birdeye email out | **Success** |
| Inbox replies + CC Anthony | N/A — no returns yet (pass succeeded) |
| iMessage start/done | Failed (infrastructure) |
| Gatekeeper experience | **Poor mid-day** — silence, false starts, late intervene |
| Learning loop | **Strong** — traces → lessons → rules → intervene |
**Bottom line:** The company work mostly completed; the *operating system* for CoS↔Hermes nearly failed Anthony’s trust. Paying attention to traces was correct. Default path forward is thin CoS, injected env, intervene early, chat as source of truth.