Incident Analysis · Slack Availability

ForgeBot Non-Response Incident

Evidence-based review of the July 30, 2026 outage reported by Devin in the ForgeBot channel. The incident was a host restart followed by a login-dependent gateway startup gap—not a model-provider failure and not merely a slow bot.

Service recovered and currently running
3h 38mGateway disconnected
4Unanswered Devin mentions
1m 26sReconnect to proven reply
HighRoot-cause confidence

Executive Takeaway

The Mac hosting ForgeBot was intentionally restarted through the macOS Restart command at 4:35 PM HST. The gateway shut down cleanly, but ForgeBot runs as a per-user LaunchAgent, so it could not restart while the Mac remained at the login screen. The user account was not logged back in until 8:12 PM; the Slack connection came online at 8:13 PM.

Devin’s 5:11 PM task and three follow-up probes occurred entirely inside that login gap. The earlier messages were not automatically handled after recovery; Devin had to repost the task at 8:35 PM.

What Happened

Restart selected interactively

macOS recorded Terminal process 12087 performing a menu action and sending kAEShowRestartDialog to loginwindow. The confirmation result arrived two seconds later. This was not a crash or unexplained power loss.

Gateway shut down cleanly

Hermes received SIGTERM, drained zero active sessions, disconnected Slack, closed its session database, and exited. macOS rebooted at 16:35:27.

Devin submitted the real task

A detailed Kubota creative-brief intake request with four attachments was posted. No bot acknowledgment or reply appeared.

Three availability probes went unanswered

Devin asked whether ForgeBot was active, then “hello?”, then asked again. All were valid direct mentions. None entered the gateway because no Slack connection existed.

Adam posted a 2 + 2 probe

This message arrived before the gateway reconnected. Slack later delivered it after reconnection; ForgeBot acknowledged it and answered at 20:17:46.

The forgebot account logged in

macOS recorded a successful console login for the dedicated account. Launchd immediately made the per-user gateway job eligible to start.

Gateway and Slack transport recovered

Hermes started; Slack Socket Mode connected 0.5 seconds later.

Recovery proven with a fresh request

Adam’s 2 + 3 probe was acknowledged and answered “5” in 10.3 seconds. This is the first clean post-recovery proof.

Original task required manual replay

Devin reposted “please complete the above task.” ForgeBot acknowledged and completed the intake 1 minute 47 seconds later. The 17:11 task itself was not processed automatically.

Evidence Matrix

FindingEvidenceConfidence
The host restart was intentional and interactive.Unified log: Terminal performed a menu action, sent kAEShowRestartDialog; restart confirmation returned in two seconds. last reboot records a clean shutdown and reboot at 16:35.High
The gateway did not crash.gateway.log shows orderly SIGTERM handling, Slack disconnect, database close, and teardown completion.High
The service remained offline because no user session existed.The gateway is gui/504/com.forgefx.hermes-gateway, a per-user LaunchAgent. Login records show no console login until 20:12:54; launchd then started the gateway at 20:13:15.High
Devin’s mentions were correctly formatted.Slack history shows every probe began with the exact ForgeBot mention. No formatting or permission issue explains the silence.High
Slack and the model provider were healthy after startup.Socket Mode connected immediately; a fresh arithmetic probe completed in 10.3 seconds; a later substantive task completed in 1 minute 47 seconds.High
The specific human who initiated the restart is unknown.The logs identify the local account and Terminal process, not the remote operator. DeskIn activity existed near the restart, but that does not identify the person controlling it.High that attribution is unavailable

Contributing Factors

Primary

Per-user startup dependency

The gateway starts only after the forgebot GUI session exists. A headless reboot can leave the machine reachable through system services while ForgeBot remains completely offline.

Detection gap

No independent availability alert

The same gateway that needed monitoring was responsible for messaging. Once it was down, no separate process or external monitor warned Adam that Slack connectivity had disappeared.

Recovery gap

Missed work was not reliably replayed

Slack replayed Adam’s recent 20:11 probe after reconnection, but Devin’s older task and probes were not processed. There is no durable “unserviced mention” queue reconciling Slack history after recovery.

Operational

No restart-safe maintenance procedure

The machine was restarted without confirming that the dedicated account had returned and that a real Slack request succeeded. “The Mac rebooted” was mistaken for “ForgeBot recovered.”

What Was Not the Root Cause

Not Devin’s usage

Every request directly mentioned ForgeBot. Repeated mentions could not help while the gateway process was absent.

Not a model/auth outage

No provider or authentication failure appears in the incident window. Once Slack transport returned, model-backed responses completed normally.

Not generic Slack downtime

The local Slack Socket Mode connection was absent because the gateway was not running. It reconnected immediately after the service started.

Separate log noise: Slack Bolt emitted repeated “Session is closed” errors beginning at 12:48 PM, but established a new active session at 12:55 PM and retained that current session until the reboot. That stale reconnect loop deserves cleanup, but the evidence does not support it as the cause of the 5:11–8:13 PM incident.

Impact

DimensionObserved impact
Technical outageSlack gateway disconnected for 3 hours 38 minutes 1 second, from 16:35:15 to 20:13:16 HST.
User-visible impactDevin waited 3 hours 3 minutes 22 seconds from his first task to the first proven successful fresh reply in the channel.
Missed interactionsAt least four Devin mentions received no acknowledgment or response during the outage.
Work lossThe original request remained unprocessed until manually reposted after recovery.
ScopePotentially all ForgeBot Slack channels, because the shared gateway transport was offline. This investigation confirms impact in the reviewed channel; it does not claim a complete workspace-wide count.

Corrective Actions

1

Make boot recovery independent of GUI login

Move the gateway to a boot-level service where technically safe, or implement a secure dedicated-account auto-login policy only if physical security and FileVault tradeoffs are accepted. The preferred design is a system service that can start Hermes without a desktop session.

2

Add an independent watchdog

Monitor process existence and Slack transport health from outside the gateway. Alert Adam through a path that does not depend on ForgeBot’s own Slack connection. Trigger after a short sustained failure, not on one transient reconnect.

3

Add post-restart verification

Every reboot must end with three checks: gateway process running, Slack Socket Mode connected, and a real mention acknowledged and answered. A successful host reboot alone is not recovery proof.

4

Reconcile missed mentions after recovery

On startup, inspect a bounded recent Slack window for direct mentions that have no ForgeBot acknowledgment/reply, then surface them to Adam or safely enqueue them. This prevents silent work loss after a transport outage.

5

Guard interactive restarts

Document a restart procedure that warns about service interruption, records the maintenance reason, and requires a recovery check. If a remote operator initiated this restart, the procedure should be visible in the same remote-access workflow.

6

Fix stale Socket Mode retry loops

Investigate why an abandoned Slack session continued retrying against a closed client after a new session was established. This was not the incident cause, but it creates noisy logs and can hide real transport failures.

Team Escalation Guidance

For staff: direct-mention ForgeBot once. If no hourglass acknowledgment appears within two minutes, cc Adam. Repeating the mention is not useful when the gateway is offline.

For Adam: check the gateway, but also check whether the Mac is sitting at the login screen. A running host does not imply the per-user gateway is running. After recovery, ask the user to repost any task sent before the reconnect unless automated reconciliation confirms it was received.

Source Coverage

Original Devin task · Adam 2 + 2 probe · Adam 2 + 3 recovery proof