@@ -2574,6 +2574,60 @@ describe("StepExecutor", () => {
25742574 expect ( result ) . toBeNull ( ) ;
25752575 } ) ;
25762576
2577+ test ( "waitForSignal handles legacy null timeoutAt in signal-wait context" , async ( ) => {
2578+ const backend = await createBackend ( ) ;
2579+ const client = new OpenWorkflow ( { backend } ) ;
2580+
2581+ const workflow = client . defineWorkflow (
2582+ { name : `signal-wait-null-timeout-${ randomUUID ( ) } ` } ,
2583+ async ( { step } ) => {
2584+ const data = await step . waitForSignal ( {
2585+ signal : `legacy-null-${ randomUUID ( ) } ` ,
2586+ timeout : 1 , // expires immediately
2587+ } ) ;
2588+ return data ;
2589+ } ,
2590+ ) ;
2591+
2592+ // corrupt the signal-wait context to have null timeoutAt (simulates
2593+ // legacy persisted data where timeoutAt was missing) and backdate
2594+ // createdAt so the 1-year default fallback has already expired.
2595+ const twoYearsAgo = new Date ( ) ;
2596+ twoYearsAgo . setFullYear ( twoYearsAgo . getFullYear ( ) - 2 ) ;
2597+ const originalCreateStepAttempt = backend . createStepAttempt . bind ( backend ) ;
2598+ const createStepAttemptSpy = vi
2599+ . spyOn ( backend , "createStepAttempt" )
2600+ . mockImplementation ( async ( params ) => {
2601+ const attempt = await originalCreateStepAttempt ( params ) ;
2602+ if ( attempt . kind === "signal-wait" ) {
2603+ return {
2604+ ...attempt ,
2605+ createdAt : twoYearsAgo ,
2606+ context : null ,
2607+ } ;
2608+ }
2609+ return attempt ;
2610+ } ) ;
2611+
2612+ try {
2613+ const worker = client . newWorker ( ) ;
2614+ const handle = await workflow . run ( ) ;
2615+ const status = await tickUntilTerminal (
2616+ backend ,
2617+ worker ,
2618+ handle . workflowRun . id ,
2619+ 20 ,
2620+ 50 ,
2621+ ) ;
2622+
2623+ expect ( status ) . toBe ( "completed" ) ;
2624+ const result = await handle . result ( ) ;
2625+ expect ( result ) . toBeNull ( ) ;
2626+ } finally {
2627+ createStepAttemptSpy . mockRestore ( ) ;
2628+ }
2629+ } ) ;
2630+
25772631 test ( "waitForSignal validates data against schema" , async ( ) => {
25782632 const backend = await createBackend ( ) ;
25792633 const client = new OpenWorkflow ( { backend } ) ;
0 commit comments