{"record":{"id":"3fcfc88b612a6f38","repo":"ruvnet/ruflo","slug":"gupp-session-timeout-detected-possible-crash","errorCode":null,"errorMessage":"[GUPP] Session timeout detected - possible crash","messagePattern":"\\[GUPP\\] Session timeout detected - possible crash","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"v3/plugins/gastown-bridge/src/gupp/adapter.ts","lineNumber":539,"sourceCode":"  private stopCrashDetection(): void {\n    if (this.crashCheckTimer) {\n      clearInterval(this.crashCheckTimer);\n      this.crashCheckTimer = null;\n    }\n  }\n\n  private async checkForCrash(): Promise<void> {\n    if (!this.state.session?.active) {\n      return;\n    }\n\n    const now = Date.now();\n    const lastActive = this.state.session.lastActiveAt.getTime();\n    const elapsed = now - lastActive;\n\n    if (elapsed > this.config.sessionTimeout) {\n      // Session appears to have crashed\n      console.warn('[GUPP] Session timeout detected - possible crash');\n\n      // Update recovery metadata\n      this.state = {\n        ...this.state,\n        recovery: {\n          ...this.state.recovery,\n          lastCrash: new Date(),\n          crashCount: (this.state.recovery?.crashCount ?? 0) + 1,\n          autoRecoverEnabled: this.state.recovery?.autoRecoverEnabled ?? true,\n        },\n        updatedAt: new Date(),\n      };\n\n      await this.persistState(this.state);\n    }\n\n    // Touch session to indicate we're still alive\n    this.state = touchSession(this.state);","sourceCodeStart":521,"sourceCodeEnd":557,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/plugins/gastown-bridge/src/gupp/adapter.ts#L521-L557","documentation":"Crash heuristic in GuppAdapter.checkForCrash(): the GUPP session's lastActiveAt is older than sessionTimeout, so the adapter infers the remote process crashed or hung. Recovery metadata is updated and a reconnect/recovery cycle follows.","triggerScenarios":"GUPP session produces no activity past the session timeout window; interpreted as a possible crashed or wedged remote process, prompting cleanup/reconnect logic.","commonSituations":"See trigger scenarios.","solutions":["Check the gupp session process for crashes or hangs; inspect its logs around the timeout.","Increase the session timeout if legitimate operations exceed it.","Ensure heartbeat/keepalive from the session is functioning so idle-but-alive sessions are not flagged."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}