From 08e2c3b2ebe7dfd64d95b7cb191e31efd83b7599 Mon Sep 17 00:00:00 2001 From: Engineer Date: Sat, 4 Jul 2026 21:49:08 +0200 Subject: [PATCH] fix(heartbeat): extract ISSUE_ASSIGNED_WAKE_REASON constant + pass policy to evaluateSessionCompaction - Export ISSUE_ASSIGNED_WAKE_REASON near other wake reason constants; use it in decideSessionCompactionTrigger instead of a bare string literal (greptile P2). - Add optional policy param to evaluateSessionCompaction; use pre-parsed policy from caller to avoid double parseSessionCompactionPolicy call (greptile P2). Co-Authored-By: Claude Sonnet 4.6 --- server/src/services/heartbeat.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server/src/services/heartbeat.ts b/server/src/services/heartbeat.ts index 4a245938fa..c5767f4146 100644 --- a/server/src/services/heartbeat.ts +++ b/server/src/services/heartbeat.ts @@ -821,6 +821,7 @@ const GIT_SENSITIVE_LOCAL_ADAPTER_TYPES = new Set([ ]); export { MAX_TURN_CONTINUATION_RETRY_REASON }; export const MAX_TURN_CONTINUATION_WAKE_REASON = "max_turns_continuation_retry"; +export const ISSUE_ASSIGNED_WAKE_REASON = "issue_assigned"; const MAX_TURN_CONTINUATION_DEFAULT_MAX_ATTEMPTS = 2; const MAX_TURN_CONTINUATION_MAX_ATTEMPTS_CAP = 10; const MAX_TURN_CONTINUATION_DEFAULT_DELAY_MS = 1_000; @@ -3590,7 +3591,7 @@ export function decideSessionCompactionTrigger( ) { return { reason: "no open issues for agent", triggeredBy: "t3" }; } - if (policy.rotateOnNewIssueWake && wakeReason === "issue_assigned") { + if (policy.rotateOnNewIssueWake && wakeReason === ISSUE_ASSIGNED_WAKE_REASON) { return { reason: "wake triggered by new issue assignment", triggeredBy: "t4" }; } return null; @@ -11613,6 +11614,7 @@ export function heartbeatService( continuationSummaryBody?: string | null; wakeReason?: string | null; openIssuesCount?: number | null; + policy?: SessionCompactionPolicy; }): Promise { const { agent, sessionId, issueId } = input; if (!sessionId) { @@ -11625,7 +11627,7 @@ export function heartbeatService( }; } - const policy = parseSessionCompactionPolicy(agent); + const policy = input.policy ?? parseSessionCompactionPolicy(agent); if (!policy.enabled || !hasSessionCompactionThresholds(policy)) { return { rotate: false,