Two failure modes that only show up under conditions the tests never reached. renderDiff built one span per diff line with no bound. A regenerated lock file is an ordinary change: 50,000 lines produce 4 MB of markup and 50,000 elements that then have to be parsed and laid out inside the full shell replacement, and 200,000 lines produce 16 MB. The rendered view now stops at 2,000 lines and says how many were left out; ui.diff keeps the whole change, so Copy diff, the editor and hunk staging are unaffected. The line scan also runs once now instead of three times. withClient registered the connection error handler with once(). A connection that fails and then emits a second error while it is being torn down - a reset during client.end() is the ordinary case - leaves that event unhandled, and an unhandled 'error' on an EventEmitter reaches the uncaughtException handler, which calls app.exit(1). The handler stays attached and ignores anything after the first failure. Both are covered by tests that were confirmed to fail without the fix, together with the SSH paths that had none: host key mismatch reporting, the trusted fingerprint requirement for exec and upload, and remote upload path validation. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
748 lines
15 KiB
JSON
748 lines
15 KiB
JSON
{
|
|
"generatedAt": "2026-08-23T12:44:33.101Z",
|
|
"thresholds": {
|
|
"preferredMaximumLines": 750,
|
|
"justificationRequiredLines": 1000
|
|
},
|
|
"over750": [
|
|
{
|
|
"file": "src/renderer/views.js",
|
|
"lines": 759,
|
|
"branches": 57,
|
|
"functions": 159,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 97
|
|
}
|
|
],
|
|
"over1000": [],
|
|
"cyclomaticHotspots": [
|
|
{
|
|
"file": "src/renderer/actions/shell.js",
|
|
"lines": 518,
|
|
"branches": 101,
|
|
"functions": 86,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 131
|
|
},
|
|
{
|
|
"file": "src/renderer/app.js",
|
|
"lines": 732,
|
|
"branches": 80,
|
|
"functions": 124,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 120
|
|
},
|
|
{
|
|
"file": "src/main/server-inventory.cjs",
|
|
"lines": 578,
|
|
"branches": 89,
|
|
"functions": 104,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 119
|
|
},
|
|
{
|
|
"file": "src/main/git-service.cjs",
|
|
"lines": 687,
|
|
"branches": 111,
|
|
"functions": 118,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"git",
|
|
"security"
|
|
],
|
|
"hotspotScore": 111
|
|
},
|
|
{
|
|
"file": "src/main/unraid-inventory-methods.cjs",
|
|
"lines": 708,
|
|
"branches": 76,
|
|
"functions": 93,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 106
|
|
}
|
|
],
|
|
"mixedResponsibilityModules": [
|
|
{
|
|
"file": "src/renderer/actions/shell.js",
|
|
"lines": 518,
|
|
"branches": 101,
|
|
"functions": 86,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 131
|
|
},
|
|
{
|
|
"file": "src/renderer/app.js",
|
|
"lines": 732,
|
|
"branches": 80,
|
|
"functions": 124,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 120
|
|
},
|
|
{
|
|
"file": "src/main/server-inventory.cjs",
|
|
"lines": 578,
|
|
"branches": 89,
|
|
"functions": 104,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 119
|
|
},
|
|
{
|
|
"file": "src/main/unraid-inventory-methods.cjs",
|
|
"lines": 708,
|
|
"branches": 76,
|
|
"functions": 93,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 106
|
|
},
|
|
{
|
|
"file": "src/main/unraid-deployment-methods.cjs",
|
|
"lines": 583,
|
|
"branches": 69,
|
|
"functions": 31,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 99
|
|
},
|
|
{
|
|
"file": "src/renderer/dialogs.js",
|
|
"lines": 419,
|
|
"branches": 58,
|
|
"functions": 80,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 98
|
|
},
|
|
{
|
|
"file": "src/renderer/views.js",
|
|
"lines": 759,
|
|
"branches": 57,
|
|
"functions": 159,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 97
|
|
},
|
|
{
|
|
"file": "src/main/ipc.cjs",
|
|
"lines": 694,
|
|
"branches": 51,
|
|
"functions": 70,
|
|
"ipcHandlers": 27,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"ipc",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 91
|
|
},
|
|
{
|
|
"file": "src/renderer/actions/setup-and-settings.js",
|
|
"lines": 427,
|
|
"branches": 58,
|
|
"functions": 58,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 88
|
|
},
|
|
{
|
|
"file": "src/main/gitea-service.cjs",
|
|
"lines": 624,
|
|
"branches": 67,
|
|
"functions": 57,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 87
|
|
},
|
|
{
|
|
"file": "main.cjs",
|
|
"lines": 463,
|
|
"branches": 37,
|
|
"functions": 56,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"ipc",
|
|
"renderer",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 87
|
|
},
|
|
{
|
|
"file": "src/renderer/actions/deployment-profile.js",
|
|
"lines": 407,
|
|
"branches": 56,
|
|
"functions": 44,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"security"
|
|
],
|
|
"hotspotScore": 86
|
|
},
|
|
{
|
|
"file": "src/main/config-store.cjs",
|
|
"lines": 665,
|
|
"branches": 52,
|
|
"functions": 89,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 82
|
|
},
|
|
{
|
|
"file": "src/main/unraid-preflight-methods.cjs",
|
|
"lines": 623,
|
|
"branches": 40,
|
|
"functions": 47,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 80
|
|
},
|
|
{
|
|
"file": "src/main/unraid-runtime-methods.cjs",
|
|
"lines": 388,
|
|
"branches": 37,
|
|
"functions": 38,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 77
|
|
},
|
|
{
|
|
"file": "src/renderer/actions/recovery.js",
|
|
"lines": 356,
|
|
"branches": 56,
|
|
"functions": 38,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 76
|
|
},
|
|
{
|
|
"file": "src/main/unraid-access-methods.cjs",
|
|
"lines": 462,
|
|
"branches": 43,
|
|
"functions": 41,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 73
|
|
},
|
|
{
|
|
"file": "src/renderer/events.js",
|
|
"lines": 181,
|
|
"branches": 35,
|
|
"functions": 27,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"security"
|
|
],
|
|
"hotspotScore": 65
|
|
},
|
|
{
|
|
"file": "src/main/git-validator-service.cjs",
|
|
"lines": 600,
|
|
"branches": 43,
|
|
"functions": 77,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 63
|
|
},
|
|
{
|
|
"file": "src/main/ssh-service.cjs",
|
|
"lines": 336,
|
|
"branches": 43,
|
|
"functions": 69,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 63
|
|
},
|
|
{
|
|
"file": "src/main/deploy-key-lifecycle-service.cjs",
|
|
"lines": 192,
|
|
"branches": 31,
|
|
"functions": 38,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 61
|
|
},
|
|
{
|
|
"file": "src/main/unraid-deployment-service.cjs",
|
|
"lines": 525,
|
|
"branches": 35,
|
|
"functions": 48,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"security"
|
|
],
|
|
"hotspotScore": 55
|
|
},
|
|
{
|
|
"file": "src/main/diagnostics-service.cjs",
|
|
"lines": 357,
|
|
"branches": 34,
|
|
"functions": 50,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 54
|
|
},
|
|
{
|
|
"file": "src/renderer/actions/inventory.js",
|
|
"lines": 186,
|
|
"branches": 24,
|
|
"functions": 32,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 54
|
|
},
|
|
{
|
|
"file": "src/renderer/actions/deployment-operation.js",
|
|
"lines": 184,
|
|
"branches": 34,
|
|
"functions": 26,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 54
|
|
},
|
|
{
|
|
"file": "src/main/ipc/deployment-handlers.cjs",
|
|
"lines": 286,
|
|
"branches": 13,
|
|
"functions": 38,
|
|
"ipcHandlers": 24,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"ipc",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 53
|
|
},
|
|
{
|
|
"file": "preload.cjs",
|
|
"lines": 162,
|
|
"branches": 2,
|
|
"functions": 123,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"ipc",
|
|
"renderer",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 52
|
|
},
|
|
{
|
|
"file": "src/main/inventory-classifier.cjs",
|
|
"lines": 84,
|
|
"branches": 22,
|
|
"functions": 11,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 52
|
|
},
|
|
{
|
|
"file": "src/renderer/mock-deployment-bridge.js",
|
|
"lines": 701,
|
|
"branches": 11,
|
|
"functions": 87,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 51
|
|
},
|
|
{
|
|
"file": "src/renderer/operations.js",
|
|
"lines": 212,
|
|
"branches": 19,
|
|
"functions": 26,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 49
|
|
},
|
|
{
|
|
"file": "src/main/production-acceptance-harness.cjs",
|
|
"lines": 150,
|
|
"branches": 17,
|
|
"functions": 28,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 47
|
|
},
|
|
{
|
|
"file": "src/main/unraid-state-methods.cjs",
|
|
"lines": 294,
|
|
"branches": 16,
|
|
"functions": 21,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 46
|
|
},
|
|
{
|
|
"file": "src/main/preflight-service.cjs",
|
|
"lines": 209,
|
|
"branches": 24,
|
|
"functions": 34,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"renderer",
|
|
"security"
|
|
],
|
|
"hotspotScore": 44
|
|
},
|
|
{
|
|
"file": "src/main/repository-service.cjs",
|
|
"lines": 304,
|
|
"branches": 22,
|
|
"functions": 46,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 42
|
|
},
|
|
{
|
|
"file": "src/renderer/mock-bridge.js",
|
|
"lines": 590,
|
|
"branches": 17,
|
|
"functions": 54,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 37
|
|
},
|
|
{
|
|
"file": "src/renderer/mock-repository-bridge.js",
|
|
"lines": 636,
|
|
"branches": 13,
|
|
"functions": 89,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 33
|
|
},
|
|
{
|
|
"file": "src/main/deployment-identity.cjs",
|
|
"lines": 36,
|
|
"branches": 0,
|
|
"functions": 11,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 30
|
|
},
|
|
{
|
|
"file": "src/main/ipc/operations-handlers.cjs",
|
|
"lines": 101,
|
|
"branches": 8,
|
|
"functions": 14,
|
|
"ipcHandlers": 9,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"ipc",
|
|
"renderer"
|
|
],
|
|
"hotspotScore": 28
|
|
},
|
|
{
|
|
"file": "src/main/inventory-review-service.cjs",
|
|
"lines": 32,
|
|
"branches": 8,
|
|
"functions": 4,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 28
|
|
},
|
|
{
|
|
"file": "src/main/unraid-deploy-key-host.cjs",
|
|
"lines": 77,
|
|
"branches": 7,
|
|
"functions": 22,
|
|
"ipcHandlers": 0,
|
|
"responsibilities": [
|
|
"deployment",
|
|
"git",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 27
|
|
}
|
|
],
|
|
"ipcHotspots": [
|
|
{
|
|
"file": "src/main/ipc.cjs",
|
|
"lines": 694,
|
|
"branches": 51,
|
|
"functions": 70,
|
|
"ipcHandlers": 27,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"ipc",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 91
|
|
},
|
|
{
|
|
"file": "src/main/ipc/deployment-handlers.cjs",
|
|
"lines": 286,
|
|
"branches": 13,
|
|
"functions": 38,
|
|
"ipcHandlers": 24,
|
|
"responsibilities": [
|
|
"inventory",
|
|
"deployment",
|
|
"git",
|
|
"ipc",
|
|
"security",
|
|
"updates"
|
|
],
|
|
"hotspotScore": 53
|
|
},
|
|
{
|
|
"file": "src/main/ipc/repository-handlers.cjs",
|
|
"lines": 413,
|
|
"branches": 16,
|
|
"functions": 79,
|
|
"ipcHandlers": 51,
|
|
"responsibilities": [
|
|
"git",
|
|
"ipc"
|
|
],
|
|
"hotspotScore": 16
|
|
}
|
|
]
|
|
}
|