From 8a190858bbd4506f5ed160b7d71b58f366258f97 Mon Sep 17 00:00:00 2001 From: yiliang114 Date: Fri, 31 Jul 2026 03:49:45 +0800 Subject: [PATCH] fix(autofix): preserve unrelated cron jobs --- packages/cli/src/services/BundledSkillLoader.test.ts | 10 ++++++++++ packages/cli/src/utils/autofix.ts | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/services/BundledSkillLoader.test.ts b/packages/cli/src/services/BundledSkillLoader.test.ts index 2321efbc15..63b240518b 100644 --- a/packages/cli/src/services/BundledSkillLoader.test.ts +++ b/packages/cli/src/services/BundledSkillLoader.test.ts @@ -694,6 +694,15 @@ describe('BundledSkillLoader', () => { expiresAt: 2, jitterMs: 0, }, + { + id: 'similar-prefix-job', + cronExpr: '*/10 * * * *', + prompt: 'autofix tickets weekly', + recurring: true, + createdAt: 1, + expiresAt: 2, + jitterMs: 0, + }, ); const result = await invokeAutofix('off'); @@ -702,6 +711,7 @@ describe('BundledSkillLoader', () => { expect(scheduler.delete).toHaveBeenCalledTimes(2); expect(scheduler.list).toHaveBeenCalledTimes(2); expect(scheduler.delete).not.toHaveBeenCalledWith('ordinary-job'); + expect(scheduler.delete).not.toHaveBeenCalledWith('similar-prefix-job'); expect(result).toEqual({ type: 'message', messageType: 'info', diff --git a/packages/cli/src/utils/autofix.ts b/packages/cli/src/utils/autofix.ts index 5aad24ec4a..47282ead05 100644 --- a/packages/cli/src/utils/autofix.ts +++ b/packages/cli/src/utils/autofix.ts @@ -53,9 +53,10 @@ export type CurrentAutofixPullRequestResult = const AUTOFIX_PROMPT_PATTERN = /^autofix tick repo=([^\s]+) pr=([1-9]\d*) mode=(propose-only|auto-commit|auto-push) rounds=(\d+) infra-reruns=(\d+)$/; const OWNER_REPO_PATTERN = /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/; +const AUTOFIX_NAMESPACE_PATTERN = /^autofix tick(?:\s|$)/; export function isAutofixCronJob(job: Pick): boolean { - return job.prompt.startsWith('autofix tick'); + return AUTOFIX_NAMESPACE_PATTERN.test(job.prompt); } export function parseAutofixWatcher(job: CronJob): AutofixWatcher | null {