{"record":{"id":"8fdb4b19eced36d7","repo":"homebridge/homebridge","slug":"failed-to-save-commissioning-info-to-disk-error","errorCode":null,"errorMessage":"Failed to save commissioning info to disk: ${errorMessage}","messagePattern":"Failed to save commissioning info to disk: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/matter/server/CommissioningManager.ts","lineNumber":278,"sourceCode":"    // Save commissioning info to disk for UI access\n    try {\n      if (!deps.matterStoragePath) {\n        throw new Error('Matter storage path not initialized')\n      }\n      const commissioningFilePath = join(deps.matterStoragePath, 'commissioning.json')\n      const commissioningData = {\n        qrCode: qrCodePayload,\n        manualPairingCode,\n        serialNumber: deps.serialNumber,\n        passcode: this.passcode,\n        discriminator: this.discriminator,\n        commissioned: deps.fabricManager.isCommissioned(),\n      }\n      await writeFile(commissioningFilePath, JSON.stringify(commissioningData, null, 2), 'utf-8')\n      log.debug(`Saved commissioning info to ${commissioningFilePath}`)\n    } catch (error: unknown) {\n      const errorMessage = error instanceof Error ? error.message : String(error)\n      log.warn(`Failed to save commissioning info to disk: ${errorMessage}`)\n    }\n\n    // Display commissioning information\n    log.info(`${'='.repeat(60)}`)\n    log.info('📱 MATTER COMMISSIONING INFORMATION')\n    log.info('='.repeat(60))\n    log.info(`Manual Pairing Code: ${manualPairingCode}`)\n    log.info(`Passcode: ${passcode}`)\n    log.info(`Discriminator: ${discriminator}`)\n    log.info('QR Code for commissioning:')\n\n    // Generate and display QR code in terminal using matter.js native QR renderer\n    const qrCodeString = QrCode.get(qrCodePayload)\n    log.info(`\\n${qrCodeString}`)\n\n    log.info(`${'='.repeat(60)}`)\n  }\n","sourceCodeStart":260,"sourceCodeEnd":296,"githubUrl":"https://github.com/homebridge/homebridge/blob/edf54930340d67cade23d01abd41b03cd9621e8b/src/matter/server/CommissioningManager.ts#L260-L296","documentation":"CommissioningManager.generateCommissioningInfo writes a commissioning JSON file (passcode, discriminator, commissioned state) to disk so tools like config-ui-x can show pairing info. If writeFile fails the pairing data is still printed to the log; only the on-disk file is missing.","triggerScenarios":"generateCommissioningInfo calls writeFile(commissioningFilePath, ...) and it throws — unwritable storage dir, permission denied, ENOSPC, path invalid after custom -U storage path, or JSON serialization issue.","commonSituations":"Docker containers with read-only or mis-owned persist directories; disk full; migrating storage with -U pointing at a nonexistent directory; running Homebridge as a different user after hb-service changes.","solutions":["Check the commissioning/persist directory exists and is writable by the Homebridge user","Free disk space / fix filesystem errors","Verify the -U storage path is a valid writable directory","Fix file ownership after restoring backups (chown to the service user)"],"exampleFix":"// before\n# storage dir owned by root\nsudo chown -R homebridge:homebridge /var/lib/homebridge && hb-service restart\n// after\n# commissioning file writes succeed on next pairing","handlingStrategy":"validation","validationCode":"import { accessSync, constants, mkdirSync } from 'node:fs'\nmkdirSync(path.dirname(commissioningFilePath), { recursive: true })\naccessSync(path.dirname(commissioningFilePath), constants.W_OK)","typeGuard":null,"tryCatchPattern":"try {\n  await writeFile(commissioningFilePath, JSON.stringify(data, null, 2), 'utf-8')\n} catch (error) {\n  logger.warn('Failed to save commissioning info to disk:', error instanceof Error ? error.message : error)\n}","preventionTips":["Ensure the persist directory exists and is writable by the service user","Never mount storage volumes read-only","Monitor free disk space","Fix ownership after restoring from backups"],"tags":["matter","commissioning","filesystem","persistence"],"backgroundTag":"commissioning-file-write-failed","analyzedSha":"edf54930340d67cade23d01abd41b03cd9621e8b","analyzedAt":"2026-08-30T21:28:53.235Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}