@@ -1314,21 +1314,18 @@ describe("runEmbeddedAttempt context engine sessionKey forwarding", () => {
13141314 expectInitialLockReleasedBeforePostTurnWrite ( lockEvents ) ;
13151315 } ) ;
13161316
1317- it ( "preserves provider prompt errors while carrying cleanup session takeover" , async ( ) => {
1317+ it ( "preserves provider prompt errors when cleanup reacquire detects session takeover" , async ( ) => {
13181318 const providerError = new Error ( "provider rejected request: HTTP 400" ) ;
1319- let releasingCleanupLock = false ;
1320- let cleanupTakeover : EmbeddedAttemptSessionTakeoverError | undefined ;
1321- hoisted . flushPendingToolResultsAfterIdleMock . mockImplementation ( async ( ) => {
1322- releasingCleanupLock = true ;
1319+ let acquireCount = 0 ;
1320+ let cleanupReacquireSessionFile : string | undefined ;
1321+ hoisted . acquireSessionWriteLockMock . mockImplementation ( async ( params ) => {
1322+ acquireCount += 1 ;
1323+ if ( acquireCount === 3 ) {
1324+ cleanupReacquireSessionFile = params . sessionFile ;
1325+ await fs . appendFile ( params . sessionFile , '{"type":"message","id":"takeover"}\n' , "utf8" ) ;
1326+ }
1327+ return { release : async ( ) => { } } ;
13231328 } ) ;
1324- hoisted . acquireSessionWriteLockMock . mockImplementation ( async ( params ) => ( {
1325- release : async ( ) => {
1326- if ( releasingCleanupLock ) {
1327- cleanupTakeover = new EmbeddedAttemptSessionTakeoverError ( params . sessionFile ) ;
1328- throw cleanupTakeover ;
1329- }
1330- } ,
1331- } ) ) ;
13321329
13331330 const error = await createContextEngineAttemptRunner ( {
13341331 contextEngine : createContextEngineBootstrapAndAssemble ( ) ,
@@ -1342,8 +1339,13 @@ describe("runEmbeddedAttempt context engine sessionKey forwarding", () => {
13421339 expect ( error ) . toBeInstanceOf ( Error ) ;
13431340 expect ( ( error as Error ) . name ) . toBe ( "EmbeddedAttemptSessionTakeoverError" ) ;
13441341 expect ( ( error as Error ) . message ) . toBe ( providerError . message ) ;
1345- expect ( ( error as Error ) . cause ) . toBe ( cleanupTakeover ) ;
1342+ expect ( ( error as Error ) . cause ) . toBeInstanceOf ( EmbeddedAttemptSessionTakeoverError ) ;
1343+ if ( ! cleanupReacquireSessionFile ) {
1344+ throw new Error ( "expected cleanup lock reacquire" ) ;
1345+ }
1346+ expect ( ( ( error as Error ) . cause as Error ) . message ) . toContain ( cleanupReacquireSessionFile ) ;
13461347 expect ( ( error as { promptError ?: unknown } ) . promptError ) . toBe ( providerError ) ;
1348+ expect ( hoisted . flushPendingToolResultsAfterIdleMock ) . not . toHaveBeenCalled ( ) ;
13471349 } ) ;
13481350
13491351 it ( "keeps cleanup session takeover fatal when no provider prompt error exists" , async ( ) => {
0 commit comments