fix: 2026.3.8 regressions - config crash and cron deadlock

Fixes two critical regressions in 2026.3.8:

1. Config Redaction RangeError (#41247, #40818)
   - Empty strings in sensitive fields caused RangeError
   - Filter out empty strings before redaction

2. Cron Job Deadlock (#41266, #41128, #41129)
   - Manual cron runs enqueued but never executed
   - Use subagent lane to avoid deadlock with cron lane

Both fixes are minimal, targeted, and maintain backward compatibility.
This commit is contained in:
Jarvis 2026-03-10 10:25:30 +08:00
parent 6b87489890
commit 2d5e657931
2 changed files with 8 additions and 2 deletions

View File

@ -6,7 +6,10 @@ export function replaceSensitiveValuesInRaw(params: {
sensitiveValues: string[];
redactedSentinel: string;
}): string {
const values = [...params.sensitiveValues].toSorted((a, b) => b.length - a.length);
// FIX #41247: Filter out empty strings to prevent RangeError
const values = [...params.sensitiveValues]
.filter((v) => v && v.length > 0)
.toSorted((a, b) => b.length - a.length);
let result = params.raw;
for (const value of values) {
result = result.replaceAll(value, params.redactedSentinel);

View File

@ -292,7 +292,10 @@ export function buildGatewayCronService(params: {
abortSignal,
agentId,
sessionKey: `cron:${job.id}`,
lane: "cron",
// FIX #41266: Use subagent lane to avoid deadlock with cron lane
// The outer enqueueRun already holds CommandLane.Cron; using "cron"
// here would cause deadlock since cron lane has concurrency=1.
lane: "subagent",
});
},
sendCronFailureAlert: async ({ job, text, channel, to, mode, accountId }) => {