Spot the bug - #167: Member Badge Verifier

Why does this badge validator alternate between valid and invalid?

const BADGE_PATTERNS = {
  scout: /^SCOUT-[A-Z]{3}-\d{4}$/g,
  ranger: /^RANGER-[A-Z]{2}-\d{3}$/g,
  pilot: /^PILOT-\d{4}-[A-Z]{2}$/g
};

function validateRosterBadges(roster) {
  const results = [];

  for (const member of roster) {
    const pattern = BADGE_PATTERNS[member.role];
    if (!pattern) {
      results.push({
        id: member.id,
        role: member.role,
        badge: member.badge,
        status: 'UNKNOWN_ROLE'
      });
      continue;
    }

    const isValid = pattern.test(member.badge);
    results.push({
      id: member.id,
      role: member.role,
      badge: member.badge,
      status: isValid ? 'APPROVED' : 'REJECTED'
    });
  }

  return results;
}

const squad = [
  { id: 101, role: 'scout', badge: 'SCOUT-ABC-1234' },
  { id: 102, role: 'scout', badge: 'SCOUT-XYZ-9876' },
  { id: 103, role: 'scout', badge: 'SCOUT-DEF-4567' }
];

console.log(validateRosterBadges(squad));

Reply with what is broken and how you would fix it.