From 5187ae583f5ae94adeb3b661630102922335c787 Mon Sep 17 00:00:00 2001 From: nghequyettien Date: Sun, 26 Jul 2026 22:25:25 +0700 Subject: [PATCH] fix(engine): key denyResult decision off eventType, not stage denyResult mapped decision to "paused" only when stage === "kill_switch", so the budget-cap termination ceiling (stage "budget_cap", eventType "kill_switch") recorded decision "deny" instead of "paused" in the governor ledger. Switch the ternary to check eventType, matching the vocabulary the ledger event already carries. --- packages/loopover-engine/src/governor/chokepoint.ts | 2 +- packages/loopover-engine/test/chokepoint.test.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/loopover-engine/src/governor/chokepoint.ts b/packages/loopover-engine/src/governor/chokepoint.ts index a92af0ba92..2ed908dd3e 100644 --- a/packages/loopover-engine/src/governor/chokepoint.ts +++ b/packages/loopover-engine/src/governor/chokepoint.ts @@ -130,7 +130,7 @@ function denyResult(input: { eventType: input.eventType, repoFullName: input.repoFullName, actionClass: input.actionClass, - decision: input.stage === "kill_switch" ? "paused" : input.eventType === "throttled" ? "throttle" : "deny", + decision: input.eventType === "kill_switch" ? "paused" : input.eventType === "throttled" ? "throttle" : "deny", reason: input.reason, payload: { stage: input.stage, ...input.extraPayload }, }, diff --git a/packages/loopover-engine/test/chokepoint.test.ts b/packages/loopover-engine/test/chokepoint.test.ts index b327ffa657..6ed1f177f3 100644 --- a/packages/loopover-engine/test/chokepoint.test.ts +++ b/packages/loopover-engine/test/chokepoint.test.ts @@ -94,6 +94,7 @@ test("budget cap: the termination ceiling denies with a kill_switch eventType (h ); assert.equal(decision.stage, "budget_cap"); assert.equal(decision.ledgerEvent.eventType, "kill_switch"); + assert.equal(decision.ledgerEvent.decision, "paused", "a kill_switch eventType must record decision=paused regardless of which stage triggered it"); }); test("non-convergence: a stuck item denies before reputation/self-plagiarism run", () => {