{"record":{"id":"df0841cf3f0cb512","repo":"jlcodes99/cockpit-tools","slug":"accountgroups-group-index-has-invalid-account","errorCode":null,"errorMessage":"[AccountGroups] Group ${index} has invalid account ids","messagePattern":"\\[AccountGroups\\] Group (.+?) has invalid account ids","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/services/accountGroupService.ts","lineNumber":71,"sourceCode":"\n  if (!Array.isArray(parsed)) {\n    throw new Error('[AccountGroups] Stored data must be a JSON array');\n  }\n\n  const groups = parsed.map((value, index) => {\n    if (!value || typeof value !== 'object' || Array.isArray(value)) {\n      throw new Error(`[AccountGroups] Invalid group at index ${index}`);\n    }\n\n    const group = value as Record<string, unknown>;\n    if (typeof group.id !== 'string' || !group.id.trim()) {\n      throw new Error(`[AccountGroups] Group ${index} has an invalid id`);\n    }\n    if (typeof group.name !== 'string') {\n      throw new Error(`[AccountGroups] Group ${index} has an invalid name`);\n    }\n    if (!Array.isArray(group.accountIds) || group.accountIds.some((id) => typeof id !== 'string')) {\n      throw new Error(`[AccountGroups] Group ${index} has invalid account ids`);\n    }\n\n    return {\n      ...group,\n      id: group.id,\n      name: group.name,\n      accountIds: [...group.accountIds],\n      // Keep older files without createdAt readable without treating them as\n      // an empty data set.\n      createdAt: typeof group.createdAt === 'number' ? group.createdAt : 0,\n    } as AccountGroup;\n  });\n\n  return cloneGroups(groups);\n}\n\nasync function loadGroupsFromDisk(): Promise<AccountGroup[]> {\n  try {","sourceCodeStart":53,"sourceCodeEnd":89,"githubUrl":"https://github.com/jlcodes99/cockpit-tools/blob/1ed8b77992d62ca81fabf744deb0839ad361d5bf/src/services/accountGroupService.ts#L53-L89","documentation":"Validation in parseGroups: the group at the reported index has an accountIds field that is not an array of strings. accountIds is the membership list binding accounts to the group, so a malformed list means the group cannot be safely used and the load aborts.","triggerScenarios":"Thrown at src/services/accountGroupService.ts:71 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Repair accountIds in the stored JSON so it is an array of string account ids","Drop membership entries pointing at deleted accounts, keeping the array shape","Harden the save path to always write an array of strings even when membership is empty"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"1ed8b77992d62ca81fabf744deb0839ad361d5bf","analyzedAt":"2026-09-05T09:51:41.178Z","contentChangedAt":"2026-09-05T09:51:41.178Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}