{"record":{"id":"a93ee9d7acbfebea","repo":"plandex-ai/plandex","slug":"error-extracting-line-number-from-first-line-v","errorCode":null,"errorMessage":"error extracting line number from first line: %v","messagePattern":"error extracting line number from first line: (.+?)","errorType":"validation","errorClass":null,"httpStatus":500,"severity":"error","filePath":"app/server/model/plan/build_validate_and_fix.go","lineNumber":406,"sourceCode":"\n\t\tif !strings.HasPrefix(old, \"pdx-\") {\n\t\t\tlog.Printf(\"Old content does not have a line number prefix for first line\")\n\t\t\treturn buildValidateResult{valid: false, updated: updated}, fmt.Errorf(\"old content does not have a line number prefix for first line\")\n\t\t}\n\n\t\toldLines := strings.Split(old, \"\\n\")\n\n\t\tvar lastLine string\n\t\tvar lastLineNum int\n\t\tfirstLine := oldLines[0]\n\t\tif len(oldLines) > 1 {\n\t\t\tlastLine = oldLines[len(oldLines)-1]\n\t\t}\n\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)) {","sourceCodeStart":388,"sourceCodeEnd":424,"githubUrl":"https://github.com/plandex-ai/plandex/blob/e2d772072efadbe41d2946d97d79be55532dbab5/app/server/model/plan/build_validate_and_fix.go#L388-L424","documentation":"After the 'pdx-' prefix check passes, the code extracts the line number from the first line via shared.ExtractLineNumberWithPrefix. This error wraps any failure from that parser (e.g. 'pdx-' present but no valid integer follows).","triggerScenarios":"First line looks like 'pdx-' or 'pdx-abc' — prefix present but the number cannot be parsed.","commonSituations":"Model emits truncated or malformed prefixes such as 'pdx- ' or 'pdx-12abc' when it loses track of line numbering on large files.","solutions":["Retry the request so the model re-emits the old block with a valid numeric prefix","Validate the model's old-block formatting earlier and fail fast with a clearer retry message","Consider more lenient parsing that tolerates trailing garbage after the number"],"exampleFix":"// before\nfirstLine = \"pdx-\"  // no number\n// after\nfirstLine = \"pdx-42 func main() {}\"","handlingStrategy":"validation","validationCode":"if _, err := shared.ExtractLineNumberWithPrefix(firstLine, \"pdx-\"); err != nil {\n    return fmt.Errorf(\"first line number unparseable: %v\", err)\n}","typeGuard":"func parseLineNumber(line, prefix string) (int, bool) {\n    n, err := shared.ExtractLineNumberWithPrefix(line, prefix)\n    return n, err == nil && n > 0\n}","tryCatchPattern":null,"preventionTips":["Require 'pdx-<int>' exactly, no trailing garbage on the number","Reject malformed prefixes before full validation","Log the offending line to aid prompt tuning"],"tags":["go","parsing","llm-output","line-numbers"],"backgroundTag":"line-number-parse-failed","analyzedSha":"e2d772072efadbe41d2946d97d79be55532dbab5","analyzedAt":"2026-09-05T20:56:53.631Z","contentChangedAt":"2026-09-05T20:56:53.631Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}