package db import ( "database/sql" "time" ) // UpdateAgentGraft records an approved genealogy graft on the target agent. func (d *Database) UpdateAgentGraft(id, sourceStrain, graftTier string, approvedAt time.Time) error { if approvedAt.IsZero() { approvedAt = time.Now().UTC() } _, err := d.Exec( `UPDATE agents SET graft_source_strain = ?, graft_tier = ?, graft_approved_at = ? WHERE id = ?`, sourceStrain, graftTier, approvedAt.UTC().Format(time.RFC3339), id, ) return err } // ClearAgentGraft removes pending graft metadata after the agent consumes it on spread. func (d *Database) ClearAgentGraft(id string) error { _, err := d.Exec( `UPDATE agents SET graft_source_strain = '', graft_tier = '', graft_approved_at = NULL WHERE id = ?`, id, ) return err } func scanGraftFields(sourceStrain, graftTier, approvedRaw sql.NullString) (string, string, *time.Time) { strain := "" if sourceStrain.Valid { strain = sourceStrain.String } tier := "" if graftTier.Valid { tier = graftTier.String } var approved *time.Time if approvedRaw.Valid && approvedRaw.String != "" { if t, err := time.Parse(time.RFC3339, approvedRaw.String); err == nil { utc := t.UTC() approved = &utc } } return strain, tier, approved }