{"record":{"id":"ae0f959200bfbc5f","repo":"gastownhall/beads","slug":"scan-dependency-target-w","errorCode":null,"errorMessage":"scan dependency target: %w","messagePattern":"scan dependency target: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/storage/issueops/dependencies.go","lineNumber":726,"sourceCode":"\t\tmetadata    sql.NullString\n\t\tthreadID    sql.NullString\n\t}\n\n\trows := make([]depRow, 0)\n\t//nolint:gosec // table and column are hardcoded by callers.\n\tqueryRows, err := tx.QueryContext(ctx, fmt.Sprintf(`\n\t\tSELECT issue_id, depends_on_issue_id, depends_on_wisp_id, depends_on_external, type, created_at, created_by, metadata, thread_id\n\t\tFROM %s\n\t\tWHERE %s = ? OR (%s = ? AND depends_on_external IS NULL)\n\t`, table, column, DepTargetExpr), oldID, oldID)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"query dependency targets: %w\", err)\n\t}\n\tfor queryRows.Next() {\n\t\tvar row depRow\n\t\tif err := queryRows.Scan(&row.issueID, &row.issueTarget, &row.wispTarget, &row.external, &row.depType, &row.createdAt, &row.createdBy, &row.metadata, &row.threadID); err != nil {\n\t\t\t_ = queryRows.Close()\n\t\t\treturn fmt.Errorf(\"scan dependency target: %w\", err)\n\t\t}\n\t\tswitch column {\n\t\tcase \"depends_on_issue_id\":\n\t\t\trow.issueTarget = sql.NullString{String: newID, Valid: true}\n\t\t\trow.wispTarget = sql.NullString{}\n\t\t\trow.external = sql.NullString{}\n\t\tcase \"depends_on_wisp_id\":\n\t\t\trow.issueTarget = sql.NullString{}\n\t\t\trow.wispTarget = sql.NullString{String: newID, Valid: true}\n\t\t\trow.external = sql.NullString{}\n\t\tdefault:\n\t\t\t_ = queryRows.Close()\n\t\t\treturn fmt.Errorf(\"replace dependency target: unsupported typed column %q\", column)\n\t\t}\n\t\trows = append(rows, row)\n\t}\n\t_ = queryRows.Close()\n\tif err := queryRows.Err(); err != nil {","sourceCodeStart":708,"sourceCodeEnd":744,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/internal/storage/issueops/dependencies.go#L708-L744","documentation":"This error wraps a rows.Scan failure while loading a dependency-target row (nine columns including nullable targets, timestamps, and metadata) in replaceDependencyTargetInTx. It indicates a stored value whose type does not fit string/sql.NullString/sql.NullTime destinations — schema drift or corrupt row data.","triggerScenarios":"UpdateIssueIDInTx / UpdateWispIDInTx rename, scanning a row from dependencies or wisp_dependencies whose type, created_at, created_by, metadata, or thread_id value cannot be scanned into its destination type.","commonSituations":"created_at stored as a non-time string after manual edits; rows written by an incompatible beads version; replication divergence in Dolt clones producing malformed values.","solutions":["Read the wrapped Scan error to identify the mismatched column","Run bd doctor / migrations to reconcile schema versions","Inspect the row directly: SELECT * FROM <table> WHERE <target-column> = oldID","Repair or restore the malformed row, then retry the rename"],"exampleFix":"// before: created_at holds '2026-08-30' as VARCHAR -> scan fails\nscan dependency target: sql: Scan error on column index 5: unsupported Scan\n// after: fix the column type/value\nALTER TABLE dependencies MODIFY created_at DATETIME NULL;","handlingStrategy":"validation","validationCode":"// Find rows whose non-standard columns hold non-scan-friendly values\nvar bad int\ndb.Get(&bad, `SELECT COUNT(*) FROM dependencies\n  WHERE (created_at IS NOT NULL AND NOT JSON_VALID(CAST(created_at AS CHAR)))\n     OR type IS NULL OR type = ''`)\nif bad > 0 { return fmt.Errorf(\"%d rows with malformed values; repair before renaming\", bad) }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep column types intact — no manual ALTER or raw INSERTs with wrong types","Run bd doctor / migrations after version changes","Verify Dolt replica consistency before renames on cloned databases","Restore suspect rows from backup rather than patching them in place"],"tags":["database","scan","data-corruption","sql"],"backgroundTag":"sql-scan-type-mismatch","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}