Skip to content

Commit 6254b3b

Browse files
committed
test(phase-c): use Effect.acquireRelease for dual subscription cleanup
Addresses non-blocking review feedback. Replaces paired subscribeCallback + Effect.addFinalizer pattern with Effect.acquireRelease so acquire and release are colocated and scope-bound atomically.
1 parent 9e6ab76 commit 6254b3b

1 file changed

Lines changed: 23 additions & 19 deletions

File tree

packages/opencode/test/session/subagent-hang-regression.test.ts

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -335,26 +335,30 @@ it.live(
335335
// reject indiscriminately — the production handler does parent-chain
336336
// lineage checks which are orthogonal to the hang contract.
337337
let questionsRejected = 0
338-
const unsubQuestion = yield* bus.subscribeCallback(Question.Event.Asked, (event) =>
339-
Effect.runPromise(
340-
Effect.gen(function* () {
341-
questionsRejected += 1
342-
yield* question.reject(event.properties.id)
343-
}),
344-
),
345-
)
346-
const unsubPermission = yield* bus.subscribeCallback(Permission.Event.Asked, (event) =>
347-
Effect.runPromise(
348-
Effect.gen(function* () {
349-
yield* permission.reply({ requestID: event.properties.id, reply: "reject" })
350-
}),
351-
),
352-
)
353-
yield* Effect.addFinalizer(() =>
354-
Effect.sync(() => {
355-
unsubQuestion()
356-
unsubPermission()
338+
yield* Effect.acquireRelease(
339+
Effect.gen(function* () {
340+
const unsubQuestion = yield* bus.subscribeCallback(Question.Event.Asked, (event) =>
341+
Effect.runPromise(
342+
Effect.gen(function* () {
343+
questionsRejected += 1
344+
yield* question.reject(event.properties.id)
345+
}),
346+
),
347+
)
348+
const unsubPermission = yield* bus.subscribeCallback(Permission.Event.Asked, (event) =>
349+
Effect.runPromise(
350+
Effect.gen(function* () {
351+
yield* permission.reply({ requestID: event.properties.id, reply: "reject" })
352+
}),
353+
),
354+
)
355+
return { unsubQuestion, unsubPermission }
357356
}),
357+
(handles) =>
358+
Effect.sync(() => {
359+
handles.unsubQuestion()
360+
handles.unsubPermission()
361+
}),
358362
)
359363

360364
const fiber = yield* prompt.loop({ sessionID: chat.id }).pipe(Effect.forkChild)

0 commit comments

Comments
 (0)