{"record":{"id":"6bc9fa06438f8552","repo":"HKUDS/Vibe-Trading","slug":"path-row-row-number-row-label-column-r-is-b","errorCode":null,"errorMessage":"{path} row {row_number}: {row_label_column!r} is blank","messagePattern":"(.+?) row (.+?): (.+?) is blank","errorType":"exception","errorClass":"PanelIngestError","httpStatus":null,"severity":"error","filePath":"agent/src/entities/ingest.py","lineNumber":1139,"sourceCode":"                    column_name, date_format, path, row_number=0\n                )\n            except PanelIngestError as exc:\n                raise PanelIngestError(\n                    f\"{path}: column header {column_name!r} is not a usable \"\n                    f\"date ({exc}); wide_entities_rows requires every column \"\n                    \"after the first to be a date, or pass layout='long' \"\n                    \"with columns=... instead\"\n                ) from exc\n\n    observations: list[PanelObservation] = []\n    for offset, row in enumerate(rows):\n        row_number = offset + 1\n        if all(not (value or \"\").strip() for value in row.values()):\n            continue  # trailing blank line\n\n        row_label_raw = (row.get(row_label_column) or \"\").strip()\n        if not row_label_raw:\n            raise PanelIngestError(f\"{path} row {row_number}: {row_label_column!r} is blank\")\n\n        row_date = (\n            _parse_panel_date(row_label_raw, date_format, path, row_number)\n            if layout == \"wide_dates_rows\"\n            else None\n        )\n        row_entity = row_label_raw if layout == \"wide_entities_rows\" else None\n\n        for column_name in series_columns:\n            raw_value = row.get(column_name, \"\")\n            if not (raw_value or \"\").strip():\n                continue  # hole in the grid: no observation, not zero\n\n            value = _parse_panel_amount(raw_value, path, row_number, decimal_separator)\n            entity_id = column_name.strip() if layout == \"wide_dates_rows\" else row_entity\n            obs_date = row_date if layout == \"wide_dates_rows\" else column_dates[column_name]\n\n            metadata = {\"source_file\": str(path), \"source_row\": row_number}","sourceCodeStart":1121,"sourceCodeEnd":1157,"githubUrl":"https://github.com/HKUDS/Vibe-Trading/blob/80ffdda44c5c4db0dd84d70e051cca591cea67df/agent/src/entities/ingest.py#L1121-L1157","documentation":"In wide layouts the first column is the row label (entity or date); a row with data but a blank first cell is rejected with its 1-based row number because its identity would be unknown.","triggerScenarios":"A CSV row where the first cell is empty/whitespace but other cells have content, while loading a wide layout.","commonSituations":"Stray space characters in the label column, merged-cell spreadsheet exports, or hand-edited CSVs with missing labels.","solutions":["Open the file at the reported row and fill in the first-column label","Strip BOM/trailing whitespace issues from the first column","Re-export the spreadsheet avoiding blank leading cells"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"for i, row in enumerate(rows, 1):\n    if any((v or '').strip() for v in row.values()) and not (row[first_col] or '').strip():\n        print(f'row {i}: blank label')","typeGuard":null,"tryCatchPattern":"except PanelIngestError as e:\n    if 'is blank' in str(e): fix that row's first cell","preventionTips":["Reject/repair rows with blank leading cells in preprocessing"],"tags":["ingest","csv","wide-layout","blank-cell"],"backgroundTag":"missing-required-field","analyzedSha":"80ffdda44c5c4db0dd84d70e051cca591cea67df","analyzedAt":"2026-08-28T12:46:38.989Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}