{"record":{"id":"15f7b2a9d839949c","repo":"Yeachan-Heo/oh-my-codex","slug":"no-mission-task-found-for-task-parsed-taskid","errorCode":null,"errorMessage":"No mission task found for --task ${parsed.taskId}.","messagePattern":"No mission task found for --task (.+?)\\.","errorType":"validation","errorClass":"MissionCommandError","httpStatus":null,"severity":"error","filePath":"src/cli/mission.ts","lineNumber":381,"sourceCode":"  const now = options.now ?? (() => new Date());\n  const stdout = options.stdout ?? ((line: string) => console.log(line));\n  const stderr = options.stderr ?? ((line: string) => console.error(line));\n\n  try {\n    const parsed = parseMissionArgs(args);\n    const paths = resolveMissionPaths(cwd, parsed);\n\n    if (parsed.action === \"status\") {\n      const summary = await readSummary(paths.summaryPath);\n      syncSummary(summary, { status: missionStatus(summary.tasks) });\n      printStatus(summary, paths.summaryPath, parsed.json, stdout);\n      return;\n    }\n\n    if (parsed.action === \"mark\") {\n      const summary = await readSummary(paths.summaryPath);\n      const task = summary.tasks.find((candidate) => candidate.id === parsed.taskId);\n      if (!task) throw new MissionCommandError(`No mission task found for --task ${parsed.taskId}.`);\n      task.status = parsed.markStatus ?? task.status;\n      task.completed_at = now().toISOString();\n      delete task.exit_code;\n      syncSummary(summary, { status: missionStatus(summary.tasks) });\n      await persistSummary(paths.summaryPath, summary);\n      await appendLedger(paths.ledgerPath, { event: \"task_marked\", at: task.completed_at, slug: summary.slug, task_id: task.id, status: task.status });\n      if (parsed.json) stdout(JSON.stringify({ ok: true, summary_path: paths.summaryPath, ledger_path: paths.ledgerPath, summary }, null, 2));\n      else {\n        stdout(`mission task marked ${task.status}: ${summary.slug} ${task.id}`);\n        stdout(`summary: ${paths.summaryPath}`);\n        stdout(`ledger: ${paths.ledgerPath}`);\n      }\n      return;\n    }\n\n    if (parsed.action === \"resume\" || parsed.action === \"rerun\") {\n      const summary = await readSummary(paths.summaryPath);\n      const runTask = options.runTask;","sourceCodeStart":363,"sourceCodeEnd":399,"githubUrl":"https://github.com/Yeachan-Heo/oh-my-codex/blob/3ad79a8a6fe6e95fdbb8c00e40716fffe4011ce2/src/cli/mission.ts#L363-L399","documentation":"During mission mark, no task in the loaded summary has an id equal to the provided --task value. The summary is searched with tasks.find(candidate => candidate.id === parsed.taskId).","triggerScenarios":"Typo in the task id; task ids from a different mission's summary; the mission was re-run and task ids changed.","commonSituations":"Copy-pasting ids from an older status output; case/whitespace mismatches in ids; referencing a task after the mission file was edited and re-run.","solutions":["Run `mission status <file> --json` and copy the exact task id","Re-run status to confirm the current task list before marking","Check for whitespace or case differences in the id"],"exampleFix":"# before\nmission mark mission.md --task task-01 --status blocked\n# after (id confirmed via status --json)\nmission mark mission.md --task task-1 --status blocked","handlingStrategy":"validation","validationCode":"const summary = JSON.parse(await readFile(summaryPath, 'utf-8'));\nif (!summary.tasks.some(t => t.id === taskId)) failEarly('unknown task id');","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Fetch task ids from status --json immediately before marking"],"tags":["mission","not-found","task-id"],"backgroundTag":"entity-not-found","analyzedSha":"3ad79a8a6fe6e95fdbb8c00e40716fffe4011ce2","analyzedAt":"2026-08-27T22:18:39.783Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}