@@ -24,12 +24,9 @@ import { closeDaemonServers } from './server-shutdown.ts';
2424import type { DaemonInvokeFn , SessionState } from '../types.ts' ;
2525import { createDaemonIdleReap } from './daemon-idle-reap.ts' ;
2626import { finalizeDaemonSessionLease } from './daemon-session-lease-finalizer.ts' ;
27- import {
28- clearDeviceClaim ,
29- reconcileOrphanedDeviceClaims ,
30- type DeviceClaimReconciler ,
31- } from '../device-claims.ts' ;
27+ import { reconcileOrphanedDeviceClaims , type DeviceClaimReconciler } from '../device-claims.ts' ;
3228import { createDeviceClaimReconciler } from '../device-claim-reconciliation.ts' ;
29+ import { createDaemonShutdownClaimLedger } from './daemon-shutdown-claims.ts' ;
3330import {
3431 emitDiagnostic ,
3532 flushDiagnosticsToSessionFile ,
@@ -323,30 +320,36 @@ export async function startDaemonRuntime(
323320 ) ;
324321 } ;
325322
326- const teardownDaemonSession = async ( session : SessionState ) : Promise < void > =>
327- await teardownDaemonSessionForShutdown ( {
328- session,
329- sessionStore,
330- stderr,
331- finalizeApplicationLifecycle : async ( sessionToFinalize ) =>
332- await finalizeDaemonSessionApplicationLifecycle ( {
333- gateway : deviceRuntimeGateway ,
334- scope : createDaemonRecoveryPlatformScope ( ) ,
335- session : sessionToFinalize ,
336- stateDir : baseDir ,
337- runtimeHints : runtimeHintValues ( sessionStore . getRuntimeHints ( sessionToFinalize . name ) ) ,
338- } ) ,
339- beforeDelete : async ( sessionToFinalize ) => {
340- await finalizeDaemonSessionLease ( {
341- session : sessionToFinalize ,
342- leaseRegistry,
343- expiredProviderLeaseReleaser,
344- timeoutMs : DAEMON_SESSION_LEASE_RELEASE_TIMEOUT_MS ,
345- } ) ;
346- } ,
347- afterSuccessfulTeardown : async ( sessionToFinalize ) =>
348- await clearDeviceClaim ( sessionToFinalize . deviceClaim ) ,
349- } ) ;
323+ const shutdownClaimLedger = createDaemonShutdownClaimLedger ( ) ;
324+
325+ const teardownDaemonSession = async ( session : SessionState ) : Promise < void > => {
326+ try {
327+ await teardownDaemonSessionForShutdown ( {
328+ session,
329+ sessionStore,
330+ stderr,
331+ finalizeApplicationLifecycle : async ( sessionToFinalize ) =>
332+ await finalizeDaemonSessionApplicationLifecycle ( {
333+ gateway : deviceRuntimeGateway ,
334+ scope : createDaemonRecoveryPlatformScope ( ) ,
335+ session : sessionToFinalize ,
336+ stateDir : baseDir ,
337+ runtimeHints : runtimeHintValues ( sessionStore . getRuntimeHints ( sessionToFinalize . name ) ) ,
338+ } ) ,
339+ beforeDelete : async ( sessionToFinalize ) => {
340+ await finalizeDaemonSessionLease ( {
341+ session : sessionToFinalize ,
342+ leaseRegistry,
343+ expiredProviderLeaseReleaser,
344+ timeoutMs : DAEMON_SESSION_LEASE_RELEASE_TIMEOUT_MS ,
345+ } ) ;
346+ } ,
347+ afterSuccessfulTeardown : shutdownClaimLedger . releaseClaim ,
348+ } ) ;
349+ } finally {
350+ shutdownClaimLedger . finalize ( session ) ;
351+ }
352+ } ;
350353
351354 const teardownDaemonSessions = async ( ) : Promise < void > => {
352355 const sessionsToStop = sessionStore . toArray ( ) ;
@@ -545,13 +548,18 @@ export async function startDaemonRuntime(
545548 const providerReleaseDrain = await expiredProviderLeaseReleaser . drain (
546549 DAEMON_PROVIDER_RELEASE_DRAIN_TIMEOUT_MS ,
547550 ) ;
548- writeDaemonShutdownReport ( baseDir , providerReleaseDrain ) ;
551+ writeDaemonShutdownReport ( baseDir , {
552+ providerReleases : providerReleaseDrain ,
553+ claims : shutdownClaimLedger . claims ,
554+ } ) ;
549555 emitDiagnostic ( {
550556 level : providerReleaseDrain . pending . length === 0 ? 'info' : 'warn' ,
551557 phase : 'daemon_shutdown_provider_release_drain' ,
552558 data : {
553559 releasedLeaseIds : providerReleaseDrain . released . map ( ( lease ) => lease . leaseId ) ,
554560 pendingLeaseIds : providerReleaseDrain . pending . map ( ( lease ) => lease . leaseId ) ,
561+ releasedDeviceKeys : shutdownClaimLedger . claims . released . map ( ( claim ) => claim . deviceKey ) ,
562+ orphanedDeviceKeys : shutdownClaimLedger . claims . orphaned . map ( ( claim ) => claim . deviceKey ) ,
555563 } ,
556564 } ) ;
557565 expiredProviderLeaseReleaser . shutdown ( ) ;
0 commit comments