@@ -2,6 +2,10 @@ import fs from "node:fs/promises";
22import os from "node:os" ;
33import path from "node:path" ;
44import { afterEach , describe , expect , it , vi } from "vitest" ;
5+ import {
6+ runWithOwnedSessionTranscriptWriteLock ,
7+ withOwnedSessionTranscriptWrites ,
8+ } from "../../../config/sessions/transcript-write-context.js" ;
59import { SessionWriteLockTimeoutError } from "../../session-write-lock-error.js" ;
610import {
711 createEmbeddedAttemptSessionLockController ,
@@ -179,6 +183,37 @@ describe("embedded attempt session lock lifecycle", () => {
179183 expect ( release ) . toHaveBeenCalledTimes ( 2 ) ;
180184 } ) ;
181185
186+ it ( "refreshes the prompt fence after an owned transcript mirror append" , async ( ) => {
187+ const sessionFile = await createTempSessionFile ( ) ;
188+ const release = vi . fn ( async ( ) => { } ) ;
189+ const acquireSessionWriteLock = vi . fn ( async ( ) => ( { release } ) ) ;
190+ const controller = await createEmbeddedAttemptSessionLockController ( {
191+ acquireSessionWriteLock,
192+ lockOptions : { ...lockOptions , sessionFile } ,
193+ } ) ;
194+
195+ await controller . releaseForPrompt ( ) ;
196+ await withOwnedSessionTranscriptWrites (
197+ {
198+ sessionFile,
199+ sessionKey : "agent:main:discord:channel:123" ,
200+ withSessionWriteLock : ( operation ) => controller . withSessionWriteLock ( operation ) ,
201+ } ,
202+ async ( ) =>
203+ await runWithOwnedSessionTranscriptWriteLock (
204+ { sessionFile, sessionKey : "agent:main:discord:channel:123" } ,
205+ async ( ) => {
206+ await fs . appendFile ( sessionFile , '{"type":"message","id":"delivery-mirror"}\n' , "utf8" ) ;
207+ } ,
208+ ) ,
209+ ) ;
210+ await expect ( controller . withSessionWriteLock ( ( ) => "finalize" ) ) . resolves . toBe ( "finalize" ) ;
211+
212+ expect ( controller . hasSessionTakeover ( ) ) . toBe ( false ) ;
213+ expect ( acquireSessionWriteLock ) . toHaveBeenCalledTimes ( 3 ) ;
214+ expect ( release ) . toHaveBeenCalledTimes ( 3 ) ;
215+ } ) ;
216+
182217 it ( "returns a no-op cleanup lock after prompt lock reacquisition times out" , async ( ) => {
183218 const releases : string [ ] = [ ] ;
184219 const acquireSessionWriteLock = vi
0 commit comments