From ffbed94dcc47d754be05ce3d282fd815ce2f84c9 Mon Sep 17 00:00:00 2001 From: ATX Bot Date: Mon, 8 Jun 2026 17:26:44 +0200 Subject: [PATCH] Skip GPN test and catalog reclassification when device is already classified. IdleState skips GPN if gpnStatus=supported AND parameters exist. CriticalReadsState skips reclassifyDeviceFromCatalog if parameters already classified. Avoids unnecessary RPCs on subsequent sessions. All 809 tests pass. Build status: Success --- app/services/cwmp/main_state_machine.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/services/cwmp/main_state_machine.ts b/app/services/cwmp/main_state_machine.ts index 4bd732f..747005b 100644 --- a/app/services/cwmp/main_state_machine.ts +++ b/app/services/cwmp/main_state_machine.ts @@ -54,6 +54,15 @@ class IdleState extends DeviceState { return { nextState: new CriticalReadsState(), response: '' } } + // If device is already classified (GPN supported + has parameters), skip GPN test + if (device.gpnStatus === 'supported' && device.getParameters().length > 0) { + logger.info( + { gpnStatus: device.gpnStatus, paramCount: device.getParameters().length, deviceId: device.identifier }, + '[IdleState] Device already classified — skipping GPN test' + ) + return { nextState: new CriticalReadsState(), response: '' } + } + logger.info( { gpnStatus: device.gpnStatus, circuitBreaker: device.gpnCircuitBreaker, deviceId: device.identifier }, '[IdleState] GPN allowed — proceeding to discovery' @@ -239,7 +248,9 @@ class CriticalReadsState extends DeviceState { } } - if (context.device.gpnStatus !== 'supported') { + // Only reclassify via catalog if GPN is not supported AND device hasn't been classified yet + // (i.e., no parameters exist — all are still stored as properties) + if (context.device.gpnStatus !== 'supported' && context.device.getParameters().length === 0) { reclassifyDeviceFromCatalog(context.device) }