{"record":{"id":"0f50a9a7ed8e3075","repo":"ruvnet/ruflo","slug":"invalid-output-0f50a9","errorCode":"INVALID_OUTPUT","errorMessage":"Empty output from gt command","messagePattern":"Empty output from gt command","errorType":"exception","errorClass":"GtBridgeError","httpStatus":null,"severity":"error","filePath":"v3/plugins/gastown-bridge/src/bridges/gt-bridge.ts","lineNumber":529,"sourceCode":"          success: false,\n          error: err.stderr || err.message,\n          command: 'gt',\n          args: validatedArgs,\n          durationMs,\n        };\n      }\n    });\n  }\n\n  /**\n   * Parse JSON output from gt command\n   *\n   * @param output - Raw command output\n   * @returns Parsed JSON object\n   */\n  parseGtOutput<T>(output: string): T {\n    if (!output || output.trim() === '') {\n      throw new GtBridgeError(\n        'Empty output from gt command',\n        'INVALID_OUTPUT'\n      );\n    }\n\n    // Check parsed cache first\n    const cacheKey = hashArgs([output]);\n    const cached = parsedCache.get(cacheKey);\n    if (cached !== undefined) {\n      return cached as T;\n    }\n\n    try {\n      // Try to parse as JSON\n      const parsed = JSON.parse(output) as T;\n      parsedCache.set(cacheKey, parsed);\n      return parsed;\n    } catch {","sourceCodeStart":511,"sourceCodeEnd":547,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/plugins/gastown-bridge/src/bridges/gt-bridge.ts#L511-L547","documentation":"parseGtOutput() was handed command output that is empty or whitespace-only, leaving nothing to JSON-parse. INVALID_OUTPUT is raised before parsing; the gt command printed nothing usable (wrong flags or silent failure).","triggerScenarios":"Thrown at v3/plugins/gastown-bridge/src/bridges/gt-bridge.ts:529 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the command produces output for the given arguments; run it manually to inspect stdout/stderr.","Handle empty output as a valid empty result where the domain allows it instead of throwing."],"exampleFix":null,"handlingStrategy":"validation","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-14T00:17:10.932Z"}