{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"D6","name":"Cohesion (LCOM4)","shortDescription":{"text":"Cohesion (LCOM4)"},"helpUri":"https://codehealth.canine.dev/dimensions/D6"},{"id":"D8","name":"Code Coverage","shortDescription":{"text":"Code Coverage"},"helpUri":"https://codehealth.canine.dev/dimensions/D8"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D12","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/D12"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D17","name":"Explicit Debt","shortDescription":{"text":"Explicit Debt"},"helpUri":"https://codehealth.canine.dev/dimensions/D17"},{"id":"D18","name":"Solution Shape","shortDescription":{"text":"Solution Shape"},"helpUri":"https://codehealth.canine.dev/dimensions/D18"},{"id":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"MbSlaveDataServer.DataServices (cyclomatic 21): MbSlaveDataServer.DataServices has cyclomatic complexity 21 (threshold 15). To reduce it, separate the cases: extract each independent branch into its own named function, and where the body has guards that only reject input, fold those into early returns at the top."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/SlaveDataServer/MbSlaveDataServer.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"36a9452c2fe19b8ccf5866a8aa8471c07600e19c583e66579dac43b776fdd161"}},{"ruleId":"D2","level":"warning","message":{"text":"MbSlaveDataServer.DataServices (cognitive 23): MbSlaveDataServer.DataServices has cognitive complexity 23 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/SlaveDataServer/MbSlaveDataServer.cs"},"region":{"startLine":29}}}],"partialFingerprints":{"codehealthFindingId/v1":"7880abb0034a81a3f257513e223553dc7196ae134e508747c29e03e142525975"}},{"ruleId":"D2","level":"warning","message":{"text":"MbSlaveStateMachine.SerialInterface_DataReceivedEvent (cognitive 22): MbSlaveStateMachine.SerialInterface_DataReceivedEvent has cognitive complexity 22 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/Modbus/MbSlaveStateMachine.cs"},"region":{"startLine":110}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c077b587fdb2b6141ebfb25333ceddfcb8389916f233253634c9bb7bd4f16fb"}},{"ruleId":"D2","level":"warning","message":{"text":"MbGridView.InitGridView (cognitive 18): MbGridView.InitGridView has cognitive complexity 18 (threshold 15). To reduce it, split the body into named stages: move each independent step or branch into its own named function so the body reads as a short sequence of named calls rather than one long body."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusView/lib/MbGridView.cs"},"region":{"startLine":105}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b54fcfadad44a5a9ec59f7fa7b2f42815b71570448a72f4f6dd921f3fca5afd"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: csModbus: csModbus: abstractness 0.18, instability 0.00, distance 0.82 \u2014 zone of pain \u2014 concrete and depended on by 3 project(s), so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c3dedc1a1c47d51b2b7d454954266bd12339a49b3209dc6ad162565ac3612dc1"}},{"ruleId":"D6","level":"warning","message":{"text":"Low cohesion: MBSFrame (LCOM4 4): MBSFrame\u0027s methods form 4 groups that share no state and don\u0027t call each other \u2014 a sign it may have several responsibilities. Review whether it splits into focused classes."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/Modbus/MbFrame.cs"},"region":{"startLine":219}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb1c28db0d51bb055bff579217e2dab24ba16b91c7d708c9b69f7396500766a3"}},{"ruleId":"D8","level":"error","message":{"text":"No automated tests: No automated tests \u2014 no test code was found in this repository. Untested code is the largest single risk to changing it safely."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"3132564c6310e5d01a231f252a02d5d2f5a542c0a8fa29a14c89693f1e3df871"}},{"ruleId":"D9","level":"note","message":{"text":"No tests found: No test suite could be collected \u2014 nothing here references a test framework (xUnit, NUnit or MSTest), so there were no discoverable tests to count. Tests written as plain executables or shell/PowerShell harnesses are not collectible this way and are not scored here."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c9bf64cbb5a4ae13d6bcd01fa3bc8d2879d860c73bc67f176ee3c2cecb8adce3"}},{"ruleId":"D16","level":"warning","message":{"text":"single-maintainer \u2014 knowledge-concentration (bus factor) risk: single-maintainer \u2014 knowledge-concentration (bus factor) risk (1 author(s) across 51 commit(s) sampled)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b4b49d961df742f0e507f4cc5c8094fb077ba0391a27fd015d18320865187719"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO CRC into Utils verschieben \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/Interface/MbRTU.cs"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"07e6e7f96ee3ad264e1040787c07a1d053ed6b799d1e16af6450b298af3d4cf6"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO better READ with timeout \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/Interface/MbSerial.cs"},"region":{"startLine":108}}}],"partialFingerprints":{"codehealthFindingId/v1":"9768f758c3d3b96605943c804c925c0bdd3b99cd23a82f33f0e6fc3f581e5c88"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO MASK_WRITE_REGISTER \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/Modbus/MbBase.cs"},"region":{"startLine":69}}}],"partialFingerprints":{"codehealthFindingId/v1":"3fe4534878d8c3232f568e5c2ed6bca448fc7ed7c1401efa9d25b2e2c2bf5fdc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO wenn Size \u003E als Array Fehler erzeugen \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/Modbus/MbFrame.cs"},"region":{"startLine":358}}}],"partialFingerprints":{"codehealthFindingId/v1":"31e3f183ee32f8124fbd21fbf58c2ad83acd63114147f155970bed44e5094f0b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO overflow \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/Modbus/MbFrame.cs"},"region":{"startLine":521}}}],"partialFingerprints":{"codehealthFindingId/v1":"5aa37cabb6be179c85d6d32fb193e06b8a40167ca8aca2bd1dc240c40337b5eb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO overflow \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/Modbus/MbFrame.cs"},"region":{"startLine":538}}}],"partialFingerprints":{"codehealthFindingId/v1":"b96c01aeaa1071d699121951d56d451bfe73e2be77daed7a4310b2bdc4374716"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO check if connected \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/Modbus/MbMaster.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"54532168b3ec8f68dda0df4075e41d53961e4fcc224dbb3d530c728e1e284925"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/Modbus/MbMaster.cs"},"region":{"startLine":178}}}],"partialFingerprints":{"codehealthFindingId/v1":"463a862e3d321a352a737c4ae1bf6d91468be126fd7e45cb6a61a4c0ca062708"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO consider using template macro"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/Modbus/MbMasterEx.cs"},"region":{"startLine":8}}}],"partialFingerprints":{"codehealthFindingId/v1":"16cd0f3fb8c202f2bbb0f340b4f4f5630c824e35e5bd412840308665befb5ede"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO raise disconnect event \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/Modbus/MbSlave.cs"},"region":{"startLine":94}}}],"partialFingerprints":{"codehealthFindingId/v1":"ebf797b00fafd1552cf66330a3b96c7a01a20ea4d17be71813a2d7e464a47145"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Async Call ? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusView/lib/MasterGridView.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5a5e077b145614308655d0936806d5a38214fa8d484947468319e771d606e21"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO Async Call ? \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusView/lib/MasterGridView.cs"},"region":{"startLine":177}}}],"partialFingerprints":{"codehealthFindingId/v1":"290298a5e443f57a2ac960d5e3578d7723b4a4fa6580a00f89397960dd50e20b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: // TODO use new Modbusb32Data\u003CDataT\u003E for 32bit Datatypes \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060// REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusView/lib/SlaveGridView.cs"},"region":{"startLine":166}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c9f1f04a22ae0dd1e420e185988310a9800e8b6571801d8921cd8df3ae87486"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO Master should closed at the end of one polling cycle \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DemoApps/VB.NET/csModMaster/frmModsMaster.vb"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d50e633af5c64def9830176b89bd0ded12d1ce2b23519858eb7f0420da59687"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: \u0027 TODO \u2014 source code is not a task system: move the work to your tracker and leave a reference instead (e.g. \u0060\u0027 REF: #123\u0060), so the task is planned where tasks live and the ticket links back to the code."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DemoApps/VB.NET/csModMaster/frmModsMaster.vb"},"region":{"startLine":148}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c411de5cf0e0e4f129cbd9db74e5e1afe741a5f63e7310ab132816ad6e932d1"}},{"ruleId":"D18","level":"warning","message":{"text":"Monorepo: only 1 of 2 solutions was scored: This repository contains 2 .NET solutions, but a scan analyzes ONE. Every score, lens, and finding here reflects only \u0060DemoApps/VB.NET/csModBus.sln\u0060 \u2014 the other 1 (\u0060DemoApps/Samples/ModbusSamples.sln\u0060) were not analyzed and are not represented in the headline. To cover them, scan each solution as its own target and group them in a Solution or Product for a portfolio roll-up. If a secondary solution is an archived or vendored tree, declare it \u2014 \u0060.gitattributes\u0060 (\u0060path/** linguist-vendored\u0060) or \u0060.editorconfig\u0060 (\u0060[path/**] generated_code = true\u0060) \u2014 to exclude it from discovery the same way generated code is."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a714c749a7ed0270f25ef54f0d77846abefb01ce5214d0fe8c64e4324d302faf"}},{"ruleId":"D18","level":"warning","message":{"text":"Solution references a project that does not exist: \u0060DemoApps/VB.NET/csModBus.sln\u0060 declares 1 project file(s) that are missing from the tree (\u0060DemoApps/GridViewTest/GridViewTest.csproj\u0060). A solution-level restore or build fails on a dangling reference, so anyone building the solution rather than an individual project is blocked. Delete the stale entry from the solution, or restore the missing project file."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"DemoApps/VB.NET/csModBus.sln"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"74b43757b1cb01b1653cc0a5cc7f0717e1fb5a7ba2234a979a08e86fa45bf6f7"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: csModbus: csModbus: 1 % XML-doc coverage (4/281)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/csModbus.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3659e7662b8e588460be0ed5a9caa901fafaeedd4055f3aed36d3c10f887ad47"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: csModbusView: csModbusView: 0 % XML-doc coverage (0/140)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusView/csModbusView.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca8056a82ec291860ebbb459600767d6b209bf5583961f2bad0361e370bff46e"}},{"ruleId":"D21","level":"note","message":{"text":"Inconsistent naming for the same logical concept: checking or processing the end of a frame. One method is named \u0027Check_EndOfFrame\u0027 while the other is \u0027EndOffFrameLenthth\u0027 (which also contains a typo \u0027Lenthth\u0027 and likely \u0027Off\u0027 instead of \u0027Of\u0027).: Standardize to \u0027CheckEndOfFrame\u0027 or \u0027ProcessEndOfFrame\u0027 consistently. (symbols: csModbusLib.MbASCII.Check_EndOfFrame, csModbusLib.MbASCII.EndOffFrameLenthth)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"13500ac16f7bc5981854f022aa0fdfbf5199b02bb06fa8d2227009de90b0ac2d"}},{"ruleId":"D21","level":"note","message":{"text":"Different interfaces/classes use different names for the same or similar functionality regarding the end of a frame. \u0027EndOfFrame\u0027 vs \u0027EndOffFrameLenthth\u0027.: Use \u0027EndOfFrame\u0027 consistently across all classes. (symbols: csModbusLib.MbInterface.EndOfFrame, csModbusLib.MbASCII.EndOffFrameLenthth)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"2268465957a5772e5e2bfb6f5beb1f30b36b76417aadd24fe3502d63a1318d80"}},{"ruleId":"D21","level":"note","message":{"text":"Inconsistent naming for setting endianness. One uses \u0027setLongEndianess\u0027 (specific to 32-bit/long) while the other uses the more generic \u0027setEndianess\u0027.: Use \u0027SetEndianess\u0027 or \u0027SetLongEndianess\u0027 consistently, or rename to \u0027SetByteOrder\u0027 if applicable. (symbols: csModbusLib.MbSlave.setLongEndianess, csModbusLib.B32Converter.setEndianess)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"a6e748daac62486df6757847e8063e6fae58fb922461e940b0c77e3f2e102177"}},{"ruleId":"D34","level":"note","message":{"text":"Dormant codebase: 20 of 20 significant files have no living knowledge \u2014 the codebase as a whole is dormant, not 20 separate risks. Re-engage owners or document before change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"4c69f1e54b7dd6fe9029dd02df6ba8f8145b789f2f18dbdaa086c40ded49dba6"}},{"ruleId":"D34","level":"note","message":{"text":"Largest orphaned file: One of the largest files with no living knowledge remaining \u2014 a reasonable place to start a read-through before the aggregate risk above bites."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"ClassLib/csModbusLib/lib/Modbus/MbFrame.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c291bdbd1872d8d8d82e207209d3bd2e142d2dd68e9494229cffeccffb63708"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":0,"secretScannerRunsExcluded":0}}}]}