{"record":{"id":"386b2b26edafffce","repo":"tinyhumansai/openhuman","slug":"openhuman-could-not-reach-its-local-runtime-quit","errorCode":null,"errorMessage":"OpenHuman could not reach its local runtime. Quit and reopen the app, then try signing in again.","messagePattern":"OpenHuman could not reach its local runtime\\. Quit and reopen the app, then try signing in again\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app/src/components/oauth/oauthAuthReadiness.ts","lineNumber":165,"sourceCode":"        'OpenHuman could not reach its local runtime. Quit and reopen the app, ' +\n        'then try signing in again.'\n      );\n    }\n    default:\n      return 'Sign-in is still starting up. Wait a few seconds and try again.';\n  }\n}\n\n/**\n * Lightweight preflight before opening the system browser for OAuth.\n * Blocks browser launch when the local auth runtime is not ready yet.\n * `waitForOAuthAuthReadiness()` starts the local core when needed.\n */\nexport async function prepareOAuthLoginLaunch(): Promise<void> {\n  const quick = await waitForOAuthAuthReadiness(8_000);\n  if (!quick.ready) {\n    warnLog(`${logPrefix} pre-launch readiness`, quick);\n    throw new Error(oauthAuthReadinessUserMessage(quick.reason));\n  }\n}\n","sourceCodeStart":147,"sourceCodeEnd":168,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/a221052e0df5b1f7598fceba7329fd1af95d6699/app/src/components/oauth/oauthAuthReadiness.ts#L147-L168","documentation":"Required-argument error from `openhuman memory ingest`. After the parsing loop, `file_path` is still None — only flags were supplied. Ingest has no default input and no default file: it must receive either a real path or the literal `-` for stdin.","triggerScenarios":"`openhuman memory ingest -n docs` (flags only, no file); `openhuman memory ingest -v`; a wrapper that drops the file argument when a variable is empty (`openhuman memory ingest \"$FILE\"` with FILE unset yields an empty positional, not this error, but a conditional that skips it entirely does).","commonSituations":"Scripts where the input path comes from a variable that was not populated; interactive use where the user assumed stdin was implied; CI jobs piping data but forgetting the `-` token.","solutions":["Append a file path or `-` (stdin) to the command","If piping, use `cat data.txt | openhuman memory ingest - -n docs`","In scripts, default the variable: `FILE=${FILE:--}` so empty input degrades to stdin explicitly"],"exampleFix":"# before\nopenhuman memory ingest -n docs -t \"Notes\"\n# after\nopenhuman memory ingest -n docs -t \"Notes\" ./notes.md   # or: ... -t \"Notes\" - < notes.md","handlingStrategy":"validation","validationCode":"# bash: guarantee an input token exists before invoking\nset -- ${1:+\"$@\"}\nhas_input=0\nfor a in \"$@\"; do case \"$a\" in -) has_input=1;; -*) ;; *) has_input=1;; esac; done\n[ \"$has_input\" -eq 1 ] || set -- \"$@\" \"${FILE:--}\"   # degrade to stdin explicitly\nopenhuman memory ingest \"$@\"","typeGuard":null,"tryCatchPattern":"if ! out=$(openhuman memory ingest \"$@\" 2>&1); then\n  case \"$out\" in *\"missing file argument\"*) printf 'usage: ingest <file|-> [flags]\\n' >&2; exit 2;; esac\n  printf '%s\\n' \"$out\" >&2; exit 1\nfi","preventionTips":["Default script inputs to '-' so empty variables still stream stdin","Treat a missing input as a script bug: fail before invoking the CLI"],"tags":["cli","usage","required-argument","memory","ingest"],"backgroundTag":null,"analyzedSha":"a221052e0df5b1f7598fceba7329fd1af95d6699","analyzedAt":"2026-08-16T12:47:06.542Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}