{"record":{"id":"1357099569bceb9f","repo":"plandex-ai/plandex","slug":"invalid-line-number-for-first-line-d","errorCode":null,"errorMessage":"invalid line number for first line: %d","messagePattern":"invalid line number for first line: (.+?)","errorType":"validation","errorClass":null,"httpStatus":500,"severity":"error","filePath":"app/server/model/plan/build_validate_and_fix.go","lineNumber":420,"sourceCode":"\n\t\tfirstLineNum, err := shared.ExtractLineNumberWithPrefix(firstLine, \"pdx-\")\n\t\tif err != nil {\n\t\t\tlog.Printf(\"Error extracting line number from first line: %v\", err)\n\t\t\treturn buildValidateResult{valid: false, updated: updated}, fmt.Errorf(\"error extracting line number from first line: %v\", err)\n\t\t}\n\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","sourceCodeStart":402,"sourceCodeEnd":438,"githubUrl":"https://github.com/plandex-ai/plandex/blob/e2d772072efadbe41d2946d97d79be55532dbab5/app/server/model/plan/build_validate_and_fix.go#L402-L438","documentation":"When only a first line number is given (lastLineNum==0, single-line replacement), the number must be within the original file (1..len(originalFileLines)). This error is returned when the extracted first line number is 0 or exceeds the file length.","triggerScenarios":"Model references a line number outside the current file — typically 0, negative after parse issues, or greater than the file's line count (stale numbering).","commonSituations":"File changed since the model last saw it (context drift), model hallucinating line numbers on large files, or off-by-one confusion.","solutions":["Refresh the file content/line numbering sent to the model and retry","Re-send the file with line numbers so the model can pick a valid target","Add a pre-check that clamps or rejects out-of-range line numbers with a retry prompt"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if !(firstLineNum > 0 && firstLineNum <= len(originalFileLines)) {\n    return fmt.Errorf(\"first line number %d out of range (1..%d)\", firstLineNum, len(originalFileLines))\n}","typeGuard":"func inRange(n, max int) bool { return n > 0 && n <= max }","tryCatchPattern":null,"preventionTips":["Send the file with fresh line numbers before each edit","Clamp or reject line numbers outside the current file","Refresh context when the file has been modified since the model last saw it"],"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"}