{"record":{"id":"0c573692fd1eea6a","repo":"slopus/happy","slug":"happy-session-id-is-required-happy-resume-sessio","errorCode":null,"errorMessage":"Happy session ID is required: happy resume <session-id>","messagePattern":"Happy session ID is required: happy resume <session-id>","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/happy-cli/src/resume/handleResumeCommand.ts","lineNumber":31,"sourceCode":"    cwd: string;\n    args: string[];\n};\n\nexport type ResumeLaunchOptions = {\n    claudeStartingMode?: 'local' | 'remote';\n    startedBy?: 'daemon' | 'terminal';\n};\n\nexport function parseResumeCommandArgs(args: string[]): { showHelp: boolean; sessionId: string } {\n    if (args.includes('-h') || args.includes('--help')) {\n        return {\n            showHelp: true,\n            sessionId: '',\n        };\n    }\n\n    if (args.length === 0) {\n        throw new Error('Happy session ID is required: happy resume <session-id>');\n    }\n    if (args.length > 1) {\n        throw new Error(`Unexpected arguments for happy resume: ${args.slice(1).join(' ')}`);\n    }\n\n    return {\n        showHelp: false,\n        sessionId: args[0],\n    };\n}\n\nfunction resolveFlavor(metadata: Metadata): 'codex' | 'claude' | null {\n    if (metadata.flavor === 'codex' || metadata.codexThreadId) {\n        return 'codex';\n    }\n    if (metadata.flavor === 'claude' || metadata.claudeSessionId) {\n        return 'claude';\n    }","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/slopus/happy/blob/b824cd0a4681d41af631a8e422a813873e4455b0/packages/happy-cli/src/resume/handleResumeCommand.ts#L13-L49","documentation":"parseResumeCommandArgs() validates arguments for `happy resume`. Resuming requires exactly one argument: the Happy session ID. With zero args it throws this usage error; with more than one it throws an 'unexpected arguments' error. It is an argument-validation failure, thrown before any session lookup happens.","triggerScenarios":"Invoking `happy resume` with no arguments (args.length === 0), or with extra arguments (args.length > 1, e.g. flags pasted after the ID).","commonSituations":"Typing `happy resume` and forgetting the ID; shell history shortcut dropping the argument; scripting where the session-ID variable is empty; passing flags like `happy resume --latest` that are not parsed as the ID.","solutions":["Run `happy resume <session-id>` with the actual session ID (find it in `happy` session history/output)","Check the help output (`happy resume` shows help on usage errors) for the exact syntax","In scripts, verify the session ID variable is non-empty before invoking the command"],"exampleFix":"// before\nexecSync(`happy resume ${sessionId}`); // sessionId may be empty\n// after\nif (!sessionId) throw new Error('sessionId is required for happy resume');\nexecSync(`happy resume ${sessionId}`);","handlingStrategy":"validation","validationCode":"const args = process.argv.slice(3); // after 'resume'\nif (args.length !== 1) {\n  console.error('Usage: happy resume <session-id>');\n  process.exit(1);\n}","typeGuard":null,"tryCatchPattern":"try {\n  const parsed = parseResumeCommandArgs(argv);\n} catch (err) {\n  if (err.message.startsWith('Happy session ID is required')) {\n    showResumeHelp();\n  } else throw err;\n}","preventionTips":["Always pass exactly one session ID: `happy resume <session-id>`","In scripts, assert the session ID variable is non-empty before invoking","Avoid passing unsupported flags after the session ID"],"tags":["cli","arguments","validation","resume"],"backgroundTag":"missing-required-argument","analyzedSha":"b824cd0a4681d41af631a8e422a813873e4455b0","analyzedAt":"2026-08-31T23:12:36.205Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}