{"record":{"id":"580c4260bf5de752","repo":"mvanhorn/last30days-skill","slug":"engine-subprocess-exceeded-s-timeout","errorCode":null,"errorMessage":"engine: subprocess exceeded %s timeout","messagePattern":"engine: subprocess exceeded (.+?) timeout","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"mcp/internal/engine/run.go","lineNumber":109,"sourceCode":"\tcmd.Stdout = &stdout\n\tcmd.Stderr = &stderr\n\n\terr = cmd.Run()\n\tres := &RunResult{\n\t\tStdout:   stdout.Bytes(),\n\t\tStderr:   stderr.Bytes(),\n\t\tExitCode: 0,\n\t\tTimedOut: errors.Is(subCtx.Err(), context.DeadlineExceeded),\n\t}\n\tif err == nil {\n\t\treturn res, nil\n\t}\n\n\tvar exitErr *exec.ExitError\n\tif errors.As(err, &exitErr) {\n\t\tres.ExitCode = exitErr.ExitCode()\n\t\tif res.TimedOut {\n\t\t\treturn res, fmt.Errorf(\"engine: subprocess exceeded %s timeout\", timeout)\n\t\t}\n\t\treturn res, fmt.Errorf(\"engine: subprocess exited with code %d\", res.ExitCode)\n\t}\n\treturn res, fmt.Errorf(\"engine: subprocess failed to start: %w\", err)\n}\n\n// resolvePython returns an absolute path to the interpreter or an error\n// naming the install URL. If the caller supplied a path we trust it - tests\n// rely on this to inject a stub. Otherwise we look up python3 on PATH.\nfunc resolvePython(override string) (string, error) {\n\tif override != \"\" {\n\t\treturn override, nil\n\t}\n\tpath, err := exec.LookPath(DefaultPythonBinary)\n\tif err == nil {\n\t\treturn path, nil\n\t}\n\treturn \"\", fmt.Errorf(","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/mvanhorn/last30days-skill/blob/c7460f6114449ddfe6ea3fc2f23c3d910c0e740c/mcp/internal/engine/run.go#L91-L127","documentation":"Error \"engine: subprocess exceeded %s timeout\" thrown in mvanhorn/last30days-skill.","triggerScenarios":"Fires when the spawned last30days.py subprocess runs longer than the configured timeout. Common for very broad research topics, slow networks, or unresponsive upstream sources.","commonSituations":"See trigger scenarios.","solutions":["Increase the subprocess timeout in the engine options for long research runs.","Reduce the scope of the run (fewer sources, quicker depth) so it finishes within the timeout.","Investigate whether the subprocess hung (network stall) by running last30days.py directly with the same arguments."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"c7460f6114449ddfe6ea3fc2f23c3d910c0e740c","analyzedAt":"2026-08-15T03:34:49.540Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}