Skip to content

Pure Phoenix Worker: Bot + iOS Shortcut Verification

URL: https://mkdocs.justinsforge.com/memory/handoffs/pure-phoenix-bot-shortcut-verification-2026-04-28/

You are a fresh Claude Code worker (Opus 4.7, dangerously-skip-permissions). Your job is to verify the iOS Shortcut and Justin's three remaining Telegram bots still work after the Pure Phoenix Phase 3 + 4 refactor.

Wait for the parallel Phase 4 worker to finish first

Another worker session is currently doing Phase 4.3 flat-file refactor (35-45 script renames + variable convention pass). Tmux session: pure-phoenix-phase-4_Opus47. It's actively renaming files that your tests depend on (notify.sh, dispatcher.sh, inbox_brain.py, ava_brain.py, hook scripts, etc.).

Before testing, confirm the Phase 4 worker is done:

  1. Run tmux capture-pane -t pure-phoenix-phase-4_Opus47 -p | tail -10 and check it shows an idle prompt without recent tool activity.
  2. Verify all forge-* services are active: systemctl list-units --type=service --state=active | grep forge-.
  3. Verify cron entries are intact: crontab -l | grep -v '^#' | grep -v '^$' | wc -l should be > 0.
  4. If the Phase 4 worker is still running, sleep ~5 minutes and recheck. Do NOT proceed to live testing while files are mid-rename.

Critical Read Order

  1. forge/FORGE-DOCTRINE.md (Section 9 communication rules apply to your work).
  2. forge/CLAUDE.md (auto-loaded).
  3. ~/.claude/projects/-home-justinwieb-forge/memory/MEMORY.md Telegram Surface section.
  4. ~/.claude/projects/-home-justinwieb-forge/memory/reference_telegram_inbox.md (inbox brain architecture).
  5. ~/.claude/projects/-home-justinwieb-forge/memory/reference_telegram_ava.md (lifeos coordinator + manager output bot).
  6. forge/memory/handoffs/pure-phoenix-phase-4-continuation-2026-04-28.md (full refactor state).
  7. forge/memory/handoffs/pure-phoenix-phase-3-6-dns-migration-2026-04-28.md (DNS state).

What to verify

A. Telegram bots (3 active)

Bot Service Token file Job
@jw_inbox_bot forge-telegram-inbox.service ~/.forge-secrets/telegram-inbox.env Voice/text capture into Notion
@Ava_JForgeBot forge-telegram-ava.service ~/.forge-secrets/telegram-ava.env LifeOS coordinator
@Manager_JForgeBot (push-only, no service) ~/.forge-secrets/telegram-manager.env Outbound notifications, receives from notify.sh

For each: 1. Confirm systemd service is active (systemctl is-active forge-telegram-inbox, etc.). 2. Confirm token file exists and is readable. 3. Tail the service log: journalctl -u forge-telegram-inbox -n 30 --no-pager. Look for fresh poll activity (every few seconds), no startup errors, no 409 Conflict (means another long-poller is running, doctrine forbids this). 4. Have Justin send a test message to each bot from his phone, watch the logs to confirm receipt and brain-handling. 5. For the manager bot: trigger a test notification with /home/justinwieb/forge/scripts/forge_notify.sh info "Phase 4 verification" "test message from worker" (or whatever the script renamed to after Phase 4.3) and confirm it lands in Justin's @Manager_JForgeBot chat.

B. iOS Shortcut + inbox webhook

Endpoint: https://inbox.justinsforge.com (was inbox.justinkrystal.com before Pure Phoenix Phase 3.6 DNS migration). Justin updated the iOS Shortcut to point at the new URL.

  1. Confirm forge-inbox-webhook.service is active: systemctl is-active forge-inbox-webhook.
  2. Confirm the webhook server is listening on port 7400: ss -tlnp | grep 7400 or curl from inside Console: curl -s http://localhost:7400/healthz.
  3. Verify Cloudflare ingress points inbox.justinsforge.com to http://192.168.86.50:7400.
  4. Check for the FORGE_WEBHOOK_SECRET env var that the webhook validates: grep FORGE_WEBHOOK_SECRET /etc/systemd/system/forge-inbox-webhook.service or wherever it's defined.
  5. Test the X-Forge-Auth flow: from Console, send a synthetic POST mimicking the iOS Shortcut: curl -X POST https://inbox.justinsforge.com -H "X-Forge-Auth: $(grep FORGE_WEBHOOK_SECRET ~/.forge-secrets/*.env | head -1 | cut -d= -f2)" -H "Content-Type: application/json" -d '{"text": "test capture from verification worker"}'. Should return 200 (or whatever success code the webhook uses).
  6. Verify the captured item lands in the inbox brain (Notion or wherever). If the brain spawned a follow-up job, watch the dispatcher log.
  7. Have Justin send a real voice memo via the iOS Shortcut. Watch the webhook log + brain log. Confirm Whisper transcription, Sonnet brain processing, and Notion/Calendar/Gmail tool routing all still work.

C. Notify pipeline regression check

After Phase 3.1 stripped Ntfy from notify.sh, the dispatcher path is now: file (always) + manager bot + n8n. Confirm:

  1. info priority hits manager bot only.
  2. warning priority hits manager bot + n8n.
  3. critical priority hits manager bot + n8n.

Synthetic test:

/home/justinwieb/forge/scripts/forge_notify.sh info "info ping" "phase 4 verify"
/home/justinwieb/forge/scripts/forge_notify.sh warning "warning ping" "phase 4 verify"
/home/justinwieb/forge/scripts/forge_notify.sh critical "critical ping" "phase 4 verify"

Confirm Justin sees three messages in @Manager_JForgeBot. (If notify.sh was renamed to forge_notify.sh by Phase 4.3, use the new path.)

Stop conditions

  • Phase 4 worker is still active. Wait 5 minutes and recheck.
  • A bot service won't start. Read the logs, surface the error to Justin, do NOT attempt fixes that touch token files.
  • iOS Shortcut returns auth error. Likely the webhook server's FORGE_WEBHOOK_SECRET doesn't match the iOS Shortcut's header. Surface to Justin so he can re-enter the secret.
  • Notification pipeline drops a priority level. Read notify.sh and confirm the dispatch case statement still has all three priorities.

Deliverable

Write a verification report to forge/memory/handoffs/pure-phoenix-bot-shortcut-verification-result-2026-04-28.md with: - Pass/fail per bot - Pass/fail per pipeline - Any anomalies + recommended fixes - Justin's manual verification steps (the ones requiring him to send a message from his phone)

When done, append a checkpoint to forge/memory/daily/$(date +%Y-%m-%d).md and exit.

[Claude Code, Pure Phoenix verification worker]