diff --git a/server/src/services/issues.ts b/server/src/services/issues.ts index 10c70446..9dd53765 100644 --- a/server/src/services/issues.ts +++ b/server/src/services/issues.ts @@ -1487,9 +1487,19 @@ export function issueService(db: Db) { if (executionWorkspaceId) { await assertValidExecutionWorkspace(companyId, issueData.projectId, executionWorkspaceId, tx); } + // Self-correcting counter: use MAX(issue_number) + 1 if the counter + // has drifted below the actual max, preventing identifier collisions. + const [maxRow] = await tx + .select({ maxNum: sql`coalesce(max(${issues.issueNumber}), 0)` }) + .from(issues) + .where(eq(issues.companyId, companyId)); + const currentMax = maxRow?.maxNum ?? 0; + const [company] = await tx .update(companies) - .set({ issueCounter: sql`${companies.issueCounter} + 1` }) + .set({ + issueCounter: sql`greatest(${companies.issueCounter}, ${currentMax}) + 1`, + }) .where(eq(companies.id, companyId)) .returning({ issueCounter: companies.issueCounter, issuePrefix: companies.issuePrefix });