{"$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":"D10","name":"Test Quality","shortDescription":{"text":"Test Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D10"},{"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":"D14","name":"License Compliance","shortDescription":{"text":"License Compliance"},"helpUri":"https://codehealth.canine.dev/dimensions/D14"},{"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":"D23","name":"Boundary Type-Coupling","shortDescription":{"text":"Boundary Type-Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D23"},{"id":"D24","name":"Comment Value","shortDescription":{"text":"Comment Value"},"helpUri":"https://codehealth.canine.dev/dimensions/D24"},{"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":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"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"},{"id":"D38","name":"OSV Dependency Vulnerabilities","shortDescription":{"text":"OSV Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D38","relationships":[{"target":{"id":"CWE-1395","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-937","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1395","CWE-937"]}}]}},"results":[{"ruleId":"D1","level":"warning","message":{"text":"StringExtensions.GetAbstract (cyclomatic 35): StringExtensions.GetAbstract has cyclomatic complexity 35 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko/Extensions/StringExtensions.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"954f06b21307ad077269b9030ad534d8a4b72e0321a6c5b27f8249bd66172668"}},{"ruleId":"D1","level":"warning","message":{"text":"RestSharpMiddleClient.ExecuteAsync (cyclomatic 24): RestSharpMiddleClient.ExecuteAsync has cyclomatic complexity 24 (threshold 15). To reduce it, separate the branches: extract each independent case into its own named function, or replace a long branch ladder over a single value with a data-driven lookup or dispatch table."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko/Extensions/Http/RestSharpMiddleClient.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"70332c58e024674a8b49fbd69f5c821a4125c31914bc38cd1160cfa541e284b4"}},{"ruleId":"D2","level":"warning","message":{"text":"StringExtensions.GetAbstract (cognitive 101): StringExtensions.GetAbstract has cognitive complexity 101 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko/Extensions/StringExtensions.cs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"d2131b0f2ab4b67c79b1ed7beff473d53327c8681d771eee40c04e6013eff33c"}},{"ruleId":"D2","level":"warning","message":{"text":"RestSharpMiddleClient.ExecuteAsync (cognitive 48): RestSharpMiddleClient.ExecuteAsync has cognitive complexity 48 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko/Extensions/Http/RestSharpMiddleClient.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"61827f8bd05f79898eb56de3727f7a4890677045d46ba9dfbeb9030582ed5c13"}},{"ruleId":"D2","level":"warning","message":{"text":"AssemblyExtensions.GetTypes (cognitive 33): AssemblyExtensions.GetTypes has cognitive complexity 33 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko/Extensions/AssemblyExtensions.cs"},"region":{"startLine":41}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc91b26ae6539cabf076dda4e4697910517c94e20514d81a3b3ff3ef208c927a"}},{"ruleId":"D2","level":"warning","message":{"text":"StringExtensions.GetFirstLetterForEachChineseCharacterMultipal (cognitive 25): StringExtensions.GetFirstLetterForEachChineseCharacterMultipal has cognitive complexity 25 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko/Extensions/StringExtensions.cs"},"region":{"startLine":192}}}],"partialFingerprints":{"codehealthFindingId/v1":"3893afd9c5d4528ce2fbc7162ea8eeb92169c1c38062a398b26504403ce067fa"}},{"ruleId":"D2","level":"warning","message":{"text":"AllCountryOilPriceService.SpiderOil (cognitive 18): AllCountryOilPriceService.SpiderOil has cognitive complexity 18 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cbb/Cbb.Application/Internal/Services/Imp/AllCountryOilPriceService.cs"},"region":{"startLine":63}}}],"partialFingerprints":{"codehealthFindingId/v1":"89c3909674eb762fa0f8480d7c726728b248539b7dc7d73745211a975117c6ab"}},{"ruleId":"D2","level":"warning","message":{"text":"WebUtilsHttpConnectionPool.GetAsync (cognitive 16): WebUtilsHttpConnectionPool.GetAsync has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko/Extensions/Http/WebUtilsHttpConnectionPool.cs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a747b8268b45b21ce6fd36be399d12c0ea4c8eb6a5fe7710149daafc7f1c9b9"}},{"ruleId":"D2","level":"warning","message":{"text":"OilPriceJob.Execute (cognitive 16): OilPriceJob.Execute has cognitive complexity 16 (threshold 15). To reduce it, flatten the nesting: invert conditions into early returns or guard clauses so the happy path stays at one level, and lift the deepest nested block into its own named function."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"taskScheduling/Maruko.TaskScheduling/Internal/Jobs/OilPriceJob.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4413828227a4e71c47cf9111597a31af80e213312e7ace3b4d761422356f404"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): taskScheduling/Maruko.TaskScheduling/Internal/Jobs/OilPriceJob.cs:116-129 | cbb/Cbb.Application/Internal/Services/Imp/AllCountryOilPriceService.cs:173-185"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"taskScheduling/Maruko.TaskScheduling/Internal/Jobs/OilPriceJob.cs"},"region":{"startLine":116}}}],"partialFingerprints":{"codehealthFindingId/v1":"3cd90e83ee54efbab4df57406212a0be476fbf709162bcce2ed3858d700bfbfa"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 3): src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs:141-151 | src/Maruko.CodeGeneration/Generate/CodeGenerate.DomainIrepos.cs:44-55 | src/Maruko.CodeGeneration/Generate/CodeGenerate.EfCore.cs:47-56"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs"},"region":{"startLine":141}}}],"partialFingerprints":{"codehealthFindingId/v1":"77e7bacb6cba4e87879f3f7ff90aedb06380e836ed3514bf032646541da81ebd"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs:44-52 | src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs:81-90"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs"},"region":{"startLine":44}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8dbf8b433d854b67a854b424d7f4678f35447cd92e87bcd5ad2b26f12bf9212"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs:172-180 | src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs:220-228"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"543ef08cafe89accf28c8396d77270379dcc8cef700786a3a7be0f3132a8899e"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project Maruko.Dynamic.Config: Maruko.Dynamic.Config has instability 0.83 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b93e8af9cdfd983821b2e4456d743f6837275776261ccb155fb4b7029571192d"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project Maruko.TaskScheduling: Maruko.TaskScheduling has instability 0.83 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"88b4da4fd882faf0732b868a2c7b14d1d8ede1a4779079306156dd6b5b3807e5"}},{"ruleId":"D5","level":"warning","message":{"text":"Unstable project Cbb.Application: Cbb.Application has instability 0.83 with 1 dependents."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"33fe93adbe2a71c3deb311e764115e6ed49f9b0945d8620021a1ed6e54e08654"}},{"ruleId":"D5","level":"error","message":{"text":"Layer violation: Application \u2192 Web: Cbb.Application (Application) references Maruko.Core.Web (Web) \u2014 dependencies must point inward (Web \u2192 Application \u2192 Domain; Infrastructure implements inner interfaces, nothing depends outward on it)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0b247918fa9de09647223e758edf8b990d5623b1146c35992eeb4d4eee69f002"}},{"ruleId":"D5","level":"warning","message":{"text":"Off the main sequence: Maruko.Core.NLog: Maruko.Core.NLog: abstractness 0.00, instability 0.20, distance 0.80 \u2014 zone of pain \u2014 concrete and heavily depended-on, so it\u0027s rigid to change."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"39bc29ca035055192fe961b263570b3aa1e8e66b50888ccb60451352bf810c36"}},{"ruleId":"D8","level":"warning","message":{"text":"Coverage not measured \u2014 test suite did not build: Coverage NOT MEASURED: the repo\u0027s own test suite did not build (a C#/MSBuild compiler error in the test code), so no coverage could be collected. It is excluded from the score rather than counted as a near-zero defect. Fix the test build, or commit the Cobertura/OpenCover/lcov report your CI already produces, and real coverage will be measured."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"62e63e619c28f057e129f2997c965d32a457366a9ce18ca019ffb6bdfba85c99"}},{"ruleId":"D10","level":"note","message":{"text":"No direct assertions: Map_Test: No conventional assertion call was detected, and 13 of 14 tests in \u0060Maruko.Core.Test\u0060 read the same way \u2014 so this is treated as that project\u0027s convention rather than a broken test, and it does not drag the score. Two things look like this: verification that happens indirectly (an approval/verifier harness or BDD step methods), or a project of runnable samples compiled as tests, where a run that does not throw is the only check. If it is the latter, these methods genuinely verify nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Test/AutoMap/MapperTest.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"15a0096b544847b52e2c651ae6d9778a2acd2661a836054789f6ba29c9cbbc33"}},{"ruleId":"D10","level":"note","message":{"text":"No direct assertions: Create_Test: No conventional assertion call was detected, and 13 of 14 tests in \u0060Maruko.Core.Test\u0060 read the same way \u2014 so this is treated as that project\u0027s convention rather than a broken test, and it does not drag the score. Two things look like this: verification that happens indirectly (an approval/verifier harness or BDD step methods), or a project of runnable samples compiled as tests, where a run that does not throw is the only check. If it is the latter, these methods genuinely verify nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Test/Dynamic.Config/PageTest.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"610fd0b4a0cf75128324d3ee1bcb2dc0e6aed9e60c07a2f665a93816f8b3d45d"}},{"ruleId":"D10","level":"note","message":{"text":"No direct assertions: PageSearch_Test: No conventional assertion call was detected, and 13 of 14 tests in \u0060Maruko.Core.Test\u0060 read the same way \u2014 so this is treated as that project\u0027s convention rather than a broken test, and it does not drag the score. Two things look like this: verification that happens indirectly (an approval/verifier harness or BDD step methods), or a project of runnable samples compiled as tests, where a run that does not throw is the only check. If it is the latter, these methods genuinely verify nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Test/FreeSql/CurdAppServiceTest.cs"},"region":{"startLine":34}}}],"partialFingerprints":{"codehealthFindingId/v1":"72f472f073dba6c448d7107068d0c011ec1ca0dff7068ab14498f2555d4dd12f"}},{"ruleId":"D10","level":"note","message":{"text":"No direct assertions: FirstOrDefault_Test: No conventional assertion call was detected, and 13 of 14 tests in \u0060Maruko.Core.Test\u0060 read the same way \u2014 so this is treated as that project\u0027s convention rather than a broken test, and it does not drag the score. Two things look like this: verification that happens indirectly (an approval/verifier harness or BDD step methods), or a project of runnable samples compiled as tests, where a run that does not throw is the only check. If it is the latter, these methods genuinely verify nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Test/FreeSql/CurdAppServiceTest.cs"},"region":{"startLine":72}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8dbe4e8a7e8e90502e253aae294c04681022eeb3d596535b9cc1748ab961a79"}},{"ruleId":"D10","level":"note","message":{"text":"No direct assertions: PageSearch_Test: No conventional assertion call was detected, and 13 of 14 tests in \u0060Maruko.Core.Test\u0060 read the same way \u2014 so this is treated as that project\u0027s convention rather than a broken test, and it does not drag the score. Two things look like this: verification that happens indirectly (an approval/verifier harness or BDD step methods), or a project of runnable samples compiled as tests, where a run that does not throw is the only check. If it is the latter, these methods genuinely verify nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Test/FreeSql/Repository.cs"},"region":{"startLine":27}}}],"partialFingerprints":{"codehealthFindingId/v1":"4191373c3db5e09b5b2a1b81b0801a8442db6d284341d6642418adf0f03ff3c7"}},{"ruleId":"D10","level":"note","message":{"text":"No direct assertions: GetAllList_Test: No conventional assertion call was detected, and 13 of 14 tests in \u0060Maruko.Core.Test\u0060 read the same way \u2014 so this is treated as that project\u0027s convention rather than a broken test, and it does not drag the score. Two things look like this: verification that happens indirectly (an approval/verifier harness or BDD step methods), or a project of runnable samples compiled as tests, where a run that does not throw is the only check. If it is the latter, these methods genuinely verify nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Test/FreeSql/Repository.cs"},"region":{"startLine":47}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a76bbf47e03b000d8d35b188a0b8cf1c5b486961689e0094ccd09dfad9bf208"}},{"ruleId":"D10","level":"note","message":{"text":"No direct assertions: GenerateService_Test: No conventional assertion call was detected, and 13 of 14 tests in \u0060Maruko.Core.Test\u0060 read the same way \u2014 so this is treated as that project\u0027s convention rather than a broken test, and it does not drag the score. Two things look like this: verification that happens indirectly (an approval/verifier harness or BDD step methods), or a project of runnable samples compiled as tests, where a run that does not throw is the only check. If it is the latter, these methods genuinely verify nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Test/Generation/GenerateServiceTest.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb945c215dc0d32668754f749ba7c542eb9b115c6f25b3cb1b6ae46a62436a67"}},{"ruleId":"D10","level":"note","message":{"text":"No direct assertions: Initialize_Test: No conventional assertion call was detected, and 13 of 14 tests in \u0060Maruko.Core.Test\u0060 read the same way \u2014 so this is treated as that project\u0027s convention rather than a broken test, and it does not drag the score. Two things look like this: verification that happens indirectly (an approval/verifier harness or BDD step methods), or a project of runnable samples compiled as tests, where a run that does not throw is the only check. If it is the latter, these methods genuinely verify nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Test/Web/WebTest.cs"},"region":{"startLine":18}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8b8e6ea5f86f8e8721cb12ea89f441489dc6c2f5a5cdd2d6b7c2c7acbc77eeb"}},{"ruleId":"D10","level":"note","message":{"text":"No direct assertions: CreateOrEdit_Test: No conventional assertion call was detected, and 13 of 14 tests in \u0060Maruko.Core.Test\u0060 read the same way \u2014 so this is treated as that project\u0027s convention rather than a broken test, and it does not drag the score. Two things look like this: verification that happens indirectly (an approval/verifier harness or BDD step methods), or a project of runnable samples compiled as tests, where a run that does not throw is the only check. If it is the latter, these methods genuinely verify nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Test/Zero/MenuTest.cs"},"region":{"startLine":20}}}],"partialFingerprints":{"codehealthFindingId/v1":"be634560ad405f8874f6bc7d63e855d093eb55796c6f5c41122bac5abf19c323"}},{"ruleId":"D10","level":"note","message":{"text":"No direct assertions: GetMenusSetRole_Test: No conventional assertion call was detected, and 13 of 14 tests in \u0060Maruko.Core.Test\u0060 read the same way \u2014 so this is treated as that project\u0027s convention rather than a broken test, and it does not drag the score. Two things look like this: verification that happens indirectly (an approval/verifier harness or BDD step methods), or a project of runnable samples compiled as tests, where a run that does not throw is the only check. If it is the latter, these methods genuinely verify nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Test/Zero/MenuTest.cs"},"region":{"startLine":38}}}],"partialFingerprints":{"codehealthFindingId/v1":"16623bdb29aa6f3c4b25bd02e69e9fe3c9ebf3fe3bcf0f8b7040961ff0ea1a1f"}},{"ruleId":"D10","level":"note","message":{"text":"No direct assertions: GetMenusByRole_Test: No conventional assertion call was detected, and 13 of 14 tests in \u0060Maruko.Core.Test\u0060 read the same way \u2014 so this is treated as that project\u0027s convention rather than a broken test, and it does not drag the score. Two things look like this: verification that happens indirectly (an approval/verifier harness or BDD step methods), or a project of runnable samples compiled as tests, where a run that does not throw is the only check. If it is the latter, these methods genuinely verify nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Test/Zero/MenuTest.cs"},"region":{"startLine":46}}}],"partialFingerprints":{"codehealthFindingId/v1":"e8d272832585087861a468cb6471936e49cee577b488e366efd5704f46d463e7"}},{"ruleId":"D10","level":"note","message":{"text":"No direct assertions: GetMenuOfOperate_Test: No conventional assertion call was detected, and 13 of 14 tests in \u0060Maruko.Core.Test\u0060 read the same way \u2014 so this is treated as that project\u0027s convention rather than a broken test, and it does not drag the score. Two things look like this: verification that happens indirectly (an approval/verifier harness or BDD step methods), or a project of runnable samples compiled as tests, where a run that does not throw is the only check. If it is the latter, these methods genuinely verify nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Test/Zero/OperateTest.cs"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"43955c5617f9c966d966e005d035a647cdf4f5b5707cf2d4036ea0f74da2a3b6"}},{"ruleId":"D10","level":"note","message":{"text":"No direct assertions: Login_Test: No conventional assertion call was detected, and 13 of 14 tests in \u0060Maruko.Core.Test\u0060 read the same way \u2014 so this is treated as that project\u0027s convention rather than a broken test, and it does not drag the score. Two things look like this: verification that happens indirectly (an approval/verifier harness or BDD step methods), or a project of runnable samples compiled as tests, where a run that does not throw is the only check. If it is the latter, these methods genuinely verify nothing."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Test/Zero/UserTest.cs"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7ed8956627a295148f1115887f5d19021f06d93273442b02422e247bcd311ff"}},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"08d8c666f26ca1cfa4db3df6889bc31abaed4bc9a4b3267a0ed8eabc9b2b1ac9"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"bc9db00657c4ec4730ec3be5d253d94bdf54de3b2c4772f4a6b7d74d105c727c"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"541caf2175997d4a8b65b729a8b55a41285128d98eae55d6d9392124806db5fb"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D13","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9a13ca98bb98ac6dbbd93f5f6850eb27dadc940ee7da87ac1596625cc67190f4"},"taxa":[{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D16","level":"warning","message":{"text":"dormant codebase \u2014 no living knowledge left to concentrate: All 28 significant source file(s) were last meaningfully changed so long ago that no living knowledge remains \u2014 nothing since has been substantial enough to re-establish ownership (a broad, mechanical sweep that touches many files shallowly does not count, and neither does no activity at all). There is no concentration to measure, so the bus factor is not scored. This is not a clean bill: nobody currently holds working knowledge of this code (see D34 Knowledge Freshness)."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"569d55ea5cb0330f13c125b289d07e5abdfcceac947a2c2645277937942e7d5f"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cbb/Cbb.Application/Internal/Services/Imp/AllCountryOilPriceService.cs"},"region":{"startLine":90}}}],"partialFingerprints":{"codehealthFindingId/v1":"8dce553ceab6d9cbd8a26b9c3b610e6ff69ed560a51a01e3538a8785952b35e2"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 3 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Quartz/Internal/QuartzProvider/ScheduleProvider.cs"},"region":{"startLine":129}}}],"partialFingerprints":{"codehealthFindingId/v1":"1d87eb79d57f35125ee841eb4fff695558b4d4c4cdc280e6c9ba1d2577b3f645"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u52A8\u6001\u751F\u6210\u5404\u79CD\u5B9E\u4F53\u7684\u4ED3\u50A8 \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"78568d88d021149a005e1d1b0ee420de1b78bf84719cee2231a3bc4a0544b1b0"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u52A8\u6001\u751F\u6210\u5404\u79CD\u5B9E\u4F53\u7684\u4ED3\u50A8 \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.DomainIrepos.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb4d7042918d08d221eb7b9099f6048bdb80ab7c34119c01b794094e35c748e4"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u52A8\u6001\u751F\u6210\u5404\u79CD\u5B9E\u4F53\u7684\u4ED3\u50A8 \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.EfCore.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"2da446ae63288b7197c38963e6715520c2fc5f647601958cd045f90dad9224fd"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210IService \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs"},"region":{"startLine":16}}}],"partialFingerprints":{"codehealthFindingId/v1":"8c578361fa14fae0cc30fd080cbe2622c46acafd1079d2ecc8083e709949a578"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210Service \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d928284e01cc2fffa2747390781274ad81fd67ecbae1848a1013ed8be6db0f9"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210Service \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.Controller.cs"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"43c358f824bbb2a4a1e42d75e9234c9e8783d2f8487563b6929869da5770e5c3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210Service \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.Service.cs"},"region":{"startLine":15}}}],"partialFingerprints":{"codehealthFindingId/v1":"65a060a45f8234dffc270e50177196ce5a100821fab11816d10ee04cf3909ac5"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210dto \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"223cb7bbc1fc7dcbc36d72ed368934dbb9ae800f5879dca5899630bc7e5774fc"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210applicationModule \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs"},"region":{"startLine":150}}}],"partialFingerprints":{"codehealthFindingId/v1":"440ae863195335f15a13bce59b1e82ac8efb8a2bd84857af99741b6983583563"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210ICurdservice \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs"},"region":{"startLine":179}}}],"partialFingerprints":{"codehealthFindingId/v1":"3651771a3f7a536f137c1562c569594fc64a7a2073b033196e8ec5ceb406ad0a"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210curd\u5B9E\u73B0 \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.Application.cs"},"region":{"startLine":227}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7c535f9a51e06203e979bbc0ac3229b06c09dbc3de1b57be145e707c890c676"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210domainModule \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.DomainIrepos.cs"},"region":{"startLine":53}}}],"partialFingerprints":{"codehealthFindingId/v1":"6d20381eac9c1f83ef2dc28e2566550b7862d2ba5fca59e8d7630d266137de82"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210dbcontext\u4E0A\u4E0B\u6587 \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.DomainIrepos.cs"},"region":{"startLine":54}}}],"partialFingerprints":{"codehealthFindingId/v1":"10e482eb7841718b1477a6e92705643bc96f9e09ec7061e2cc22b2f64582033e"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210dbcontext\u4E0A\u4E0B\u6587 \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.EfCore.cs"},"region":{"startLine":183}}}],"partialFingerprints":{"codehealthFindingId/v1":"888d324a9e517ed73fbb1a99f4f354200e68368ac60cbe99b0de1f0c2779f13d"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210Module\u57FA\u7C7B \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.EfCore.cs"},"region":{"startLine":55}}}],"partialFingerprints":{"codehealthFindingId/v1":"f24a85ab03ea44ee999a950a6daf3ef0b99e87e4bdbdfd6df6aa02f65f99fa7b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210\u57FA\u7840\u4ED3\u50A8\u7C7B \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.EfCore.cs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"42d76b40e637636df69006c0335bccaa3197cae3ce552bc313b76086c7e18692"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210\u5DE5\u4F5C\u5355\u5143\u57FA\u7C7B \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.EfCore.cs"},"region":{"startLine":122}}}],"partialFingerprints":{"codehealthFindingId/v1":"fddd7a90688b5f1f6e116b3ba954f4d47949c0d8734e7b744f2197b5d743a52b"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210\u81EA\u5B9A\u4E49\u4E3B\u952E\u4ED3\u50A8\u57FA\u7C7B \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.EfCore.cs"},"region":{"startLine":136}}}],"partialFingerprints":{"codehealthFindingId/v1":"6648fa06991c153d40fec61ebc592375bf31fcb30982980c548dc431407f4700"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210int\u4E3B\u952E\u7C7B\u578B\u4ED3\u50A8\u57FA\u7C7B \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.EfCore.cs"},"region":{"startLine":172}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d5ff0f30e462121bb19d355281f24195efa279aaa2a595bf541e1f075023653"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210extension\u6587\u4EF6\u5939\u4EE5\u53CA\u6587\u4EF6 \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.EfCore.cs"},"region":{"startLine":224}}}],"partialFingerprints":{"codehealthFindingId/v1":"97e2da8ad572fed2c1186813ede78ebf26cb7751eba20d6f13de70212583b6ff"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210 IService \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.Service.cs"},"region":{"startLine":51}}}],"partialFingerprints":{"codehealthFindingId/v1":"db9aff02fe90215a0a70753e34529bc1cf6f4d030b1bd9c9120fd4a607d59dd8"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u52A8\u6001\u751F\u6210\u5404\u79CDController \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.WebApi.cs"},"region":{"startLine":13}}}],"partialFingerprints":{"codehealthFindingId/v1":"2cfead4ea95e648efe292b8b2613508c0d3129b555db10b4ed088a7d35b0cee3"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210WebApiModule \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.WebApi.cs"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"f81aed68e4c1cbbbf7ab20207c6c029440abdf3541b3678cfa8b45d661f0c2bb"}},{"ruleId":"D17","level":"warning","message":{"text":"TodoComment: //todo \u751F\u6210extension \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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.WebApi.cs"},"region":{"startLine":87}}}],"partialFingerprints":{"codehealthFindingId/v1":"842f8365515f35615ef3b01a2ac4759ba1d46fb706d42ad27ba1cbbeb1006b0e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Quartz/Internal/QuartzProvider/ScheduleProvider.cs"},"region":{"startLine":112}}}],"partialFingerprints":{"codehealthFindingId/v1":"178c456af0149c06f8662d54a05f4bc8cf4e5a071aa748a47b128e4c1e90774e"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 4 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Quartz/Internal/QuartzProvider/ScheduleProvider.cs"},"region":{"startLine":133}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e3bfb16df0abfe8ffb2560230fb9fb5d520e3fa1f8026bfd39884135530c0db"}},{"ruleId":"D17","level":"warning","message":{"text":"CommentedOutCode: 6 consecutive commented-code lines"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko/Security/SecurityEncrypt.cs"},"region":{"startLine":17}}}],"partialFingerprints":{"codehealthFindingId/v1":"8de995822e59e599658a5dff7a2a36dd738c94eaf11e42258a25b6f4e2c2fdb7"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: 1701"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"zero/Maruko.Zero/Maruko.Zero.csproj"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"2064dfaf89e453268077bbacf8d4d3a73ef673d655a76029cf12c2aadd2dd2f3"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: 1701"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.EntityFrameworkCore/Maruko.EntityFrameworkCore.csproj"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"65042ed7cf87c608c06d228e7b5d6cbfeea9c1718a140248f5b4d37530781217"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: 1701"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dynamic/Maruko.Dynamic.Config/Maruko.Dynamic.Config.csproj"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"0593ee3307744cf184f0b55e50ad6cccaabe4f70e2b6fc66cfa754ca1084dd5f"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: 1702"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"zero/Maruko.Zero/Maruko.Zero.csproj"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ad4ed0e620661c5c40dc0552c7880bb8e8786434795b3f66253012c89b074ec"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: 1702"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.EntityFrameworkCore/Maruko.EntityFrameworkCore.csproj"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"838913007a577b3058a6f7d2431c4dba088bbf410bda9d5ad53593b79b24ef2d"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: 1702"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dynamic/Maruko.Dynamic.Config/Maruko.Dynamic.Config.csproj"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6b48512972a5131f24535e2ea9c379b28e3656a89636726fa2e6cba25b8a0ea"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: 1591"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"zero/Maruko.Zero/Maruko.Zero.csproj"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a440efb9849051d1dd5a88a232bc8192033147edcd8c1dd4510496d0bd5533b"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: 1591"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dynamic/Maruko.Dynamic.Config/Maruko.Dynamic.Config.csproj"},"region":{"startLine":21}}}],"partialFingerprints":{"codehealthFindingId/v1":"f8c50e0b62978ca98f72663e6e7ddc8f1a7d2de0b76957d9ea0c484ed256b276"}},{"ruleId":"D17","level":"error","message":{"text":"NoWarnInCsproj: NETSDK"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.EntityFrameworkCore/Maruko.EntityFrameworkCore.csproj"},"region":{"startLine":23}}}],"partialFingerprints":{"codehealthFindingId/v1":"344637cf3720378ffcc88bbe5ad3cf054f1579e20c344d5b445f24b765f55d4f"}},{"ruleId":"D18","level":"warning","message":{"text":"Solution references a project that does not exist: \u0060Maruko.sln\u0060 declares 1 project file(s) that are missing from the tree (\u0060WebApplication2.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":"Maruko.sln"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2d055eff1e92ff28984309cfc460bf06cd73feb4cd36d1044c583c8fc5669262"}},{"ruleId":"D18","level":"note","message":{"text":"Thin analysable surface across projects: 1 project(s) carry only a thin slice of real code (e.g. \u0060Maruko.Core.NLog\u0060 with 27 significant line(s)). The mean analysable-surface weight is 95 %, lowering Solution Shape by about 0.4 point(s). Consolidate thin projects or grow them into substantial, well-scoped assemblies."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"dd0b92fd965c2065080f16843920964ee00f7696ea03d87cdf61aed4cd2c746a"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Maruko.Core.AutoMapper: Maruko.Core.AutoMapper: 27 % XML-doc coverage (4/15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.AutoMapper/Maruko.Core.AutoMapper.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"12b4831f5410bb8ba3598ecd0af7cc0fc526a324443ca70c343b05d20309dfbe"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Maruko.Core.FreeSql: Maruko.Core.FreeSql: 0 % XML-doc coverage (0/36)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.FreeSql/Maruko.Core.FreeSql.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"404ab91327c69d9f2465f6c9448cea3b8dc572b6fb4212d4a0bc290d5b0921e8"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Maruko.Core.Web: Maruko.Core.Web: 17 % XML-doc coverage (6/36)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Web/Maruko.Core.Web.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d835a4dba689536f4bd0cecded2a33a66648a172e456fa3d757da98e6465df53"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Maruko.Zero: Maruko.Zero: 1 % XML-doc coverage (1/189)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"zero/Maruko.Zero/Maruko.Zero.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f22f8bbac29e33646499c56ab3e8e91304ffa98dcb148ca6949a3a64b49bb4ad"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Maruko.CodeGeneration: Maruko.CodeGeneration: 13 % XML-doc coverage (2/15)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.CodeGeneration/Maruko.CodeGeneration.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f948d9725c5546eb8ae52781dee474020f41a9b69d880fe544a344a25e5e90f4"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Maruko.Dynamic.Config: Maruko.Dynamic.Config: 0 % XML-doc coverage (0/73)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"dynamic/Maruko.Dynamic.Config/Maruko.Dynamic.Config.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fe07347db654b34e3ec2a014585348d5b4cb089e4cc0b6cd6873b9578d0d15e"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Maruko.TaskScheduling: Maruko.TaskScheduling: 0 % XML-doc coverage (0/53)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"taskScheduling/Maruko.TaskScheduling/Maruko.TaskScheduling.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"94ea078bebe89c283311bd0818e3504e15b6adeffe531b589191a426e2893097"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Cbb.Application: Cbb.Application: 2 % XML-doc coverage (2/95)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cbb/Cbb.Application/Cbb.Application.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ec424905dae42069a7480ba1b796a8ffef012c08a3105a3f217a2071ecd5ccd"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Maruko.Core.NLog: Maruko.Core.NLog: 0 % XML-doc coverage (0/3)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruok.Core.NLog/Maruko.Core.NLog.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"922ebbce4426214827518b60c1d24816c99ce2c58d5e8301e1a3f66e5aed3eca"}},{"ruleId":"D19","level":"warning","message":{"text":"Low XML-doc coverage: Maruko.Core.Quartz: Maruko.Core.Quartz: 43 % XML-doc coverage (49/115)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Quartz/Maruko.Core.Quartz.csproj"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2833ee12646a7bdae270bd74cf2378ce90a18a3c378446191ef79943c7d86946"}},{"ruleId":"D21","level":"note","message":{"text":"The term \u0027AppConfig\u0027 is used for multiple distinct concepts: a general configuration class, a property named \u0027configuration\u0027 inside a class also named \u0027AppConfig\u0027, and specific implementations for FreeSql and TaskScheduling. This creates ambiguity between the configuration container and the configuration data itself.: Rename the general configuration class to \u0027AppSettings\u0027 or \u0027ApplicationConfiguration\u0027 and rename the property \u0027configuration\u0027 to \u0027Value\u0027 or \u0027Data\u0027 to avoid collision. (symbols: Maruko.Core.Config.AppConfig, Maruko.Core.Web.Config.AppConfig.configuration, Maruko.Core.FreeSql.Config.AppConfig.FreeSql, Maruko.TaskScheduling.AppConfig, Maruko.Zero.Config.AppConfig)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"216b70cc883a49fbdfb522fe400b16b5d12073d6efeef0f891ac995119e34541"}},{"ruleId":"D21","level":"note","message":{"text":"The term \u0027Specification\u0027 is used for both a concrete implementation (\u0027AnySpecification\u0027) and an interface (\u0027ICompositeSpecification\u0027). While the interface has an \u0027I\u0027 prefix, the concrete class does not follow a consistent \u0027Concrete\u0027 or \u0027Impl\u0027 pattern, and the namespace suggests a domain pattern where \u0027Specification\u0027 is the core concept. However, \u0027AnySpecification\u0027 is a specific type of specification, which is fine, but the lack of a consistent naming convention for concrete vs interface (one has \u0027I\u0027, one doesn\u0027t) is a minor inconsistency in the domain layer.: Ensure all specification interfaces are prefixed with \u0027I\u0027 and all concrete implementations follow a consistent suffix like \u0027Specification\u0027 or \u0027Impl\u0027. Currently, \u0027AnySpecification\u0027 is a concrete class, while \u0027ICompositeSpecification\u0027 is an interface. This is acceptable, but \u0027AnySpecification\u0027 should ideally be \u0027AnySpecificationImpl\u0027 or similar if a pattern is desired, or the interface should be \u0027ISpecification\u0027. (symbols: Maruko.Core.Domain.Specification.AnySpecification\u003CT\u003E, Maruko.Core.Domain.Specification.ICompositeSpecification\u003CT\u003E, Maruko.Core.Domain.Specification.ICompositeSpecification\u003CT\u003E.Right, Maruko.Core.Domain.Specification.SpecificationExtensions, Maruko.Core.Domain.Specification.ParameterRebinder)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"b43d2b923cd7217f8b5d2d450cca19f5f9d990e6c7c897f574abf0f5aa1007d6"}},{"ruleId":"D21","level":"note","message":{"text":"There is a mix of \u0027Oil\u0027 and \u0027OilPrice\u0027 and \u0027AllCountryOilPrice\u0027 in the Cbb namespace. \u0027OilDTO\u0027 vs \u0027OilPrice\u0027 vs \u0027AllCountryOilPrice\u0027 suggests different concepts or inconsistent naming for similar entities. Specifically, \u0027OilDTO\u0027 and \u0027OilPrice\u0027 might be related but are named differently.: Review if \u0027OilDTO\u0027, \u0027OilPrice\u0027, and \u0027AllCountryOilPrice\u0027 represent the same or related concepts. If they are all related to oil pricing, standardize the naming to \u0027OilPrice\u0027 or \u0027OilData\u0027. (symbols: Cbb.Application.OilDTO.CityName, Cbb.Application.OilPrice.Price, Cbb.Application.AppCarModelDTO.CarModelId, Cbb.Application.AppCarBrand.Name, Cbb.Application.AppCarBrand.BrandId, Cbb.Application.AppAllCountryOilPrice, Cbb.Application.AllCountryOilPriceController, Cbb.Application.Oil.OilPrices, Cbb.Application.BannerDTO.Images, Cbb.Application.CbbOption.EnableDatabaseMigrate, Cbb.Application.Internal.Services.DTO.AppOilTimeDTO.Time, Cbb.Application.Internal.Services.Imp.AppOilTimeService, Cbb.Application.Internal.Services.Imp.AppOilTimeService, Cbb.Application.Internal.Services.Imp.AppOilTimeService)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7a12359735bc0728b5029dec57ff881687d14896d5b57fbcdc1d2436703878d6"}},{"ruleId":"D23","level":"note","message":{"text":"Bounded contexts not declared: At 8955 LoC spread over 12 projects the codebase is large and multi-module, so explicit bounded contexts are needed. Name this codebase\u0027s bounded contexts (\u22652 module groups, e.g. per subsystem) so cross-boundary type coupling can be assessed. Declare them in \u0060.codehealth/config.yaml\u0060 at the repository root (create it if absent), mapping each context name to the namespace prefixes that belong to it \u2014 e.g. \u0060architecture:\u0060 \u2192 \u0060contexts:\u0060 \u2192 \u0060Billing: [\u0022Acme.Billing\u0022]\u0060, \u0060Catalog: [\u0022Acme.Catalog\u0022]\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"1c7e276c9c682731f01819ed5378b90ca320cde1b583c90920172911598362b3"}},{"ruleId":"D24","level":"note","message":{"text":"redundant comment: \u0022\u4F5C\u8005:simple\u0022 \u2014 delete - generated by IDE, restates author field"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"cbb/Cbb.Application/Internal/Services/Imp/AllCountryOilPriceService.cs"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"efcb40910a042dc4ad9c43a7cf79b99ddfea60759fa409f2b136caaaab25470b"}},{"ruleId":"D24","level":"note","message":{"text":"redundant comment: \u0022\u5F00\u59CB\u65F6\u95F4\u0022 \u2014 delete - #region marker; no WHY"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"src/Maruko.Core.Quartz/Internal/Models/JobInfo.cs"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"74b709b08b44729e64fb9b2c1ebc7ef19b51e39785934899bd6c4b59349744f0"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"de37b8151a1026be10bd04fc44a15e7b89b632458631801a3df5aa6159a724ba"},"taxa":[{"id":"CWE-23","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"b1e1aede950657723cbe15af4cff726afa4ea6643a06710299d3e15fea80d8ba"},"taxa":[{"id":"CWE-328","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"af89383889909e62918ebc2ffd93d0acde0d8b49edd38fa2f4df333461158d84"},"taxa":[{"id":"CWE-704","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"f9deb0b3e9568df1171bacf908174d514cb7e71041f1c1975b38340d1bde8fc0"}},{"ruleId":"D34","level":"note","message":{"text":"Dormant codebase: 47 of 47 significant files have no living knowledge \u2014 the codebase as a whole is dormant, not 47 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":"src/Maruko/Extensions/StringExtensions.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"776e17bf6c21ab9ddd4f06a74a47ac7a597a39569196f957165c645cb642caf2"}},{"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":"src/Maruko.AspNetMvc/Service/ImageHelper.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"472b3bd0b15da179a9b9ccaa5fb8c0806e3db596fa497e23c2d98a4af68543d6"}},{"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":"src/Maruko.CodeGeneration/Generate/CodeGenerate.EfCore.cs"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"09fdfbefaad3eb6870cf3f4852fa9a15f1fee02847be2ed3fdab6f4ad42cf201"}}],"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-1032","guid":"5f21e517-68aa-a650-9a25-5771ef024637","name":"OWASP Top Ten \u2014 Security Misconfiguration category","shortDescription":{"text":"OWASP Top Ten \u2014 Security Misconfiguration category"},"helpUri":"https://cwe.mitre.org/data/definitions/1032.html"},{"id":"CWE-1395","guid":"800e09e7-c11a-8654-9fa6-86f398995fed","name":"Dependency on Vulnerable Third-Party Component","shortDescription":{"text":"Dependency on Vulnerable Third-Party Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1395.html"},{"id":"CWE-16","guid":"659db3ea-affc-8453-8add-c1218fbfcb92","name":"Configuration","shortDescription":{"text":"Configuration"},"helpUri":"https://cwe.mitre.org/data/definitions/16.html"},{"id":"CWE-23","guid":"aeb15a6e-38a2-ef5b-a46d-9f787a34986b","name":"CWE-23","shortDescription":{"text":"CWE-23"},"helpUri":"https://cwe.mitre.org/data/definitions/23.html"},{"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-328","guid":"f0ffc869-97c3-dc5c-8825-be1159f1fc5f","name":"CWE-328","shortDescription":{"text":"CWE-328"},"helpUri":"https://cwe.mitre.org/data/definitions/328.html"},{"id":"CWE-704","guid":"50bd74b4-a921-5159-8671-99fd7e78c810","name":"CWE-704","shortDescription":{"text":"CWE-704"},"helpUri":"https://cwe.mitre.org/data/definitions/704.html"},{"id":"CWE-732","guid":"1da27e8f-b330-7650-ab63-bd61953eae5d","name":"Incorrect Permission Assignment for Critical Resource","shortDescription":{"text":"Incorrect Permission Assignment for Critical Resource"},"helpUri":"https://cwe.mitre.org/data/definitions/732.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-937","guid":"16f316ae-415c-b354-a59b-1f7905f756e9","name":"Using Components with Known Vulnerabilities","shortDescription":{"text":"Using Components with Known Vulnerabilities"},"helpUri":"https://cwe.mitre.org/data/definitions/937.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":8,"secretScannerRunsExcluded":0}},"redactionTokens":["A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."]}]}