{"record":{"id":"0da05c3480bda405","repo":"plandex-ai/plandex","slug":"invalid-line-numbers-d-d","errorCode":null,"errorMessage":"invalid line numbers: %d-%d","messagePattern":"invalid line numbers: (.+?)-(.+?)","errorType":"validation","errorClass":null,"httpStatus":500,"severity":"error","filePath":"app/server/model/plan/build_validate_and_fix.go","lineNumber":426,"sourceCode":"\n\t\tif lastLine != \"\" {\n\t\t\tlastLineNum, err = shared.ExtractLineNumberWithPrefix(lastLine, \"pdx-\")\n\t\t\tif err != nil {\n\t\t\t\tlog.Printf(\"Error extracting line number from last line: %v\", err)\n\t\t\t\treturn buildValidateResult{valid: false, updated: updated}, fmt.Errorf(\"error extracting line number from last line: %v\", err)\n\t\t\t}\n\t\t}\n\n\t\tif lastLineNum == 0 {\n\t\t\tif !(firstLineNum > 0 && firstLineNum <= len(originalFileLines)) {\n\t\t\t\tlog.Printf(\"Invalid line number for first line: %d\", firstLineNum)\n\t\t\t\treturn buildValidateResult{valid: false, updated: updated}, fmt.Errorf(\"invalid line number for first line: %d\", firstLineNum)\n\t\t\t}\n\t\t\told = originalFileLines[firstLineNum-1]\n\t\t} else {\n\t\t\tif !(firstLineNum > 0 && firstLineNum <= len(originalFileLines) && lastLineNum > firstLineNum && lastLineNum <= len(originalFileLines)) {\n\t\t\t\tlog.Printf(\"Invalid line numbers for first and last lines: %d-%d\", firstLineNum, lastLineNum)\n\t\t\t\treturn buildValidateResult{valid: false, updated: updated}, fmt.Errorf(\"invalid line numbers: %d-%d\", firstLineNum, lastLineNum)\n\t\t\t}\n\t\t\told = strings.Join(originalFileLines[firstLineNum-1:lastLineNum], \"\\n\")\n\t\t}\n\n\t\t// log.Printf(\"Applying replacement.\\n\\nOld:\\n\\n%s\\n\\nNew:\\n\\n%s\", old, new)\n\n\t\tincremental = shared.LineNumberedTextType(strings.Replace(string(incremental), old, new, 1))\n\n\t\t// log.Printf(\"Updated content:\\n\\n%s\", string(incremental))\n\t}\n\n\tvar problem string\n\n\tif strings.Contains(content, \"<PlandexIncorrect/>\") {\n\t\tsplit := strings.Split(content, \"<PlandexIncorrect/>\")\n\t\tproblem = split[0]\n\t} else if strings.Contains(content, \"<PlandexReplacements>\") {\n\t\tsplit := strings.Split(content, \"<PlandexReplacements>\")","sourceCodeStart":408,"sourceCodeEnd":444,"githubUrl":"https://github.com/plandex-ai/plandex/blob/e2d772072efadbe41d2946d97d79be55532dbab5/app/server/model/plan/build_validate_and_fix.go#L408-L444","documentation":"For multi-line replacements, the extracted first/last line numbers must satisfy: 1 <= first <= fileLen, last > first, and last <= fileLen. This error is returned when the range is empty, inverted, or extends beyond the file.","triggerScenarios":"Model returns last <= first (inverted or single-line range given as a range) or last > number of lines in the original file.","commonSituations":"Stale line numbers after the file was edited by a prior change, model miscounting on large files, or swapping first/last lines.","solutions":["Retry with refreshed file line numbers in context","Validate the range ordering before sending to the model and ask for corrections","Fall back to a whole-file build when range validation repeatedly fails"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if !(firstLineNum > 0 && firstLineNum <= len(originalFileLines) && lastLineNum > firstLineNum && lastLineNum <= len(originalFileLines)) {\n    return fmt.Errorf(\"invalid line range %d-%d (file has %d lines)\", firstLineNum, lastLineNum, len(originalFileLines))\n}","typeGuard":"func validLineRange(first, last, fileLen int) bool {\n    return first > 0 && first <= fileLen && last > first && last <= fileLen\n}","tryCatchPattern":null,"preventionTips":["Validate range ordering and bounds before slicing the file","Re-sync line numbers after every applied change","Fall back to whole-file builds when ranges repeatedly fail"],"tags":["go","validation","line-numbers","llm-output"],"backgroundTag":"line-number-out-of-range","analyzedSha":"e2d772072efadbe41d2946d97d79be55532dbab5","analyzedAt":"2026-09-05T20:56:53.631Z","contentChangedAt":"2026-09-05T20:56:53.631Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}