{"$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":"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":"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":"D19","name":"Documentation Quality","shortDescription":{"text":"Documentation Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D19"},{"id":"D20","name":"ADR Quality","shortDescription":{"text":"ADR Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D20"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D22","name":"Internal API Consistency","shortDescription":{"text":"Internal API Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D22"},{"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":"D30","name":"Dependency Vulnerabilities","shortDescription":{"text":"Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D30","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"]}},{"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":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}},{"id":"D43","name":"Malicious Dependencies","shortDescription":{"text":"Malicious Dependencies"},"helpUri":"https://codehealth.canine.dev/dimensions/D43","relationships":[{"target":{"id":"CWE-506","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-506"]}},{"id":"AC2","name":"Forms \u0026 labels","shortDescription":{"text":"Forms \u0026 labels"},"helpUri":"https://codehealth.canine.dev/dimensions/AC2"},{"id":"AC3","name":"Page structure","shortDescription":{"text":"Page structure"},"helpUri":"https://codehealth.canine.dev/dimensions/AC3"},{"id":"AC5","name":"ARIA correctness","shortDescription":{"text":"ARIA correctness"},"helpUri":"https://codehealth.canine.dev/dimensions/AC5"},{"id":"AC6","name":"Visual \u0026 motion safety","shortDescription":{"text":"Visual \u0026 motion safety"},"helpUri":"https://codehealth.canine.dev/dimensions/AC6"},{"id":"AC7","name":"A11y enforcement","shortDescription":{"text":"A11y enforcement"},"helpUri":"https://codehealth.canine.dev/dimensions/AC7"},{"id":"AX10","name":"Code composition","shortDescription":{"text":"Code composition"},"helpUri":"https://codehealth.canine.dev/dimensions/AX10"},{"id":"AX9","name":"CQS / query purity","shortDescription":{"text":"CQS / query purity"},"helpUri":"https://codehealth.canine.dev/dimensions/AX9"},{"id":"AXB2","name":"Runtime readiness","shortDescription":{"text":"Runtime readiness"},"helpUri":"https://codehealth.canine.dev/dimensions/AXB2"},{"id":"M1","name":"Documentation (README)","shortDescription":{"text":"Documentation (README)"},"helpUri":"https://codehealth.canine.dev/dimensions/M1"},{"id":"M2","name":"Architecture documentation","shortDescription":{"text":"Architecture documentation"},"helpUri":"https://codehealth.canine.dev/dimensions/M2"},{"id":"M3","name":"Folder \u0026 project structure","shortDescription":{"text":"Folder \u0026 project structure"},"helpUri":"https://codehealth.canine.dev/dimensions/M3"},{"id":"M4","name":"Documentation accuracy","shortDescription":{"text":"Documentation accuracy"},"helpUri":"https://codehealth.canine.dev/dimensions/M4"},{"id":"P1","name":"CI/CD gates","shortDescription":{"text":"CI/CD gates"},"helpUri":"https://codehealth.canine.dev/dimensions/P1"},{"id":"P12","name":"CI test-gate honesty","shortDescription":{"text":"CI test-gate honesty"},"helpUri":"https://codehealth.canine.dev/dimensions/P12"},{"id":"P3","name":"Security \u0026 performance tooling","shortDescription":{"text":"Security \u0026 performance tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/P3"},{"id":"P4","name":"Deployment \u0026 Rollback","shortDescription":{"text":"Deployment \u0026 Rollback"},"helpUri":"https://codehealth.canine.dev/dimensions/P4"},{"id":"P6","name":"Release Hygiene","shortDescription":{"text":"Release Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/P6"},{"id":"R1","name":"Type Safety","shortDescription":{"text":"Type Safety"},"helpUri":"https://codehealth.canine.dev/dimensions/R1"},{"id":"R10","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/R10"},{"id":"R2","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/R2"},{"id":"R3","name":"Large Files","shortDescription":{"text":"Large Files"},"helpUri":"https://codehealth.canine.dev/dimensions/R3"},{"id":"R5","name":"Dependency Freshness","shortDescription":{"text":"Dependency Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/R5"},{"id":"R6","name":"Tooling","shortDescription":{"text":"Tooling"},"helpUri":"https://codehealth.canine.dev/dimensions/R6"},{"id":"R7","name":"Dead Code","shortDescription":{"text":"Dead Code"},"helpUri":"https://codehealth.canine.dev/dimensions/R7"},{"id":"R8","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/R8"},{"id":"R9","name":"Circular Imports","shortDescription":{"text":"Circular Imports"},"helpUri":"https://codehealth.canine.dev/dimensions/R9"},{"id":"SC1","name":"Supply-chain hygiene","shortDescription":{"text":"Supply-chain hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/SC1"},{"id":"X9","name":"Subsumed condition operand","shortDescription":{"text":"Subsumed condition operand"},"helpUri":"https://codehealth.canine.dev/dimensions/X9"}]}},"results":[{"ruleId":"D2","level":"warning","message":{"text":"LocalCrate.collect_dependencies (cognitive 20): LocalCrate.collect_dependencies has cognitive complexity 20 (threshold 15). Drivers by points: if/else 4 (13 pts), loops 3 (7 pts) (nesting depth added 13). 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":"bin/update_crates.py"},"region":{"startLine":168}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec8ce919db03e078d04a92e2ad9fbb1882a69a466ba5be8ab0bae6a3530de3d2"}},{"ruleId":"D2","level":"warning","message":{"text":"markdown.parse_markdown (cognitive 19): markdown.parse_markdown has cognitive complexity 19 (threshold 15). Drivers by points: if/else 7 (16 pts), boolean chains 2, loops 1 (nesting depth added 9). 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":"bin/docs/markdown.py"},"region":{"startLine":245}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc1925e713179a4e7e11655233354f0edc4f40e9d48b24f0da16e10bcc7b94c4"}},{"ruleId":"D2","level":"warning","message":{"text":"PseudoTerm.run (cognitive 19): PseudoTerm.run has cognitive complexity 19 (threshold 15). Drivers by points: if/else 5 (13 pts), error handling 1 (3 pts), loops 2 (3 pts) (nesting depth added 11). 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":"integration/term.py"},"region":{"startLine":31}}}],"partialFingerprints":{"codehealthFindingId/v1":"1927edd14591ab5eb099496f704a0af10d79f6c230f3ee67a7e8e508dc9c595c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 7): integration/hurl/tests_failed/assert_bytearray/assert_bytearray.py:9-14 | integration/hurl/tests_failed/error_format_long/error_format_long.py:92-97 | integration/hurl/tests_ok/bytes/bytes.py:9-14 | integration/hurl/tests_ok/bytes/bytes.py:19-24 | integration/hurl/tests_ok/rawbytes/rawbytes.py:9-14 | integration/hurl/tests_ok/rawbytes/rawbytes.py:31-36 | integration/hurl/tests_ok/very_verbose/very_verbose.py:36-41 \u2014 there are 7 copies across 5 file(s) \u2014 more copies than files, so at least one file holds the block twice. Extract it once into a single shared function every call site can reach and call it from all 7 sites; resolving a subset leaves the remainder to drift apart. The \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integration/hurl/tests_failed/assert_bytearray/assert_bytearray.py"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"69fb73bd4c2ca3201a138e38b58ab462d38137f36b9c4d7b3d4f40a9e9d8debe"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 3): integration/hurl/tests_failed/runner_errors/runner_errors.py:14-19 | integration/hurl/tests_ok/rawbytes/rawbytes.py:19-26 | integration/hurl/tests_pty/binary_output/binary_output.py:9-16 \u2014 before extracting anything, compare \u0060integration/hurl/tests_ok/rawbytes/rawbytes.py\u0060 and \u0060integration/hurl/tests_pty/binary_output/binary_output.py\u0060 as WHOLE FILES: 83% of the shorter file\u0027s lines also appear in the other, so this reads as one file having been copied from the other rather than as a helper waiting to be extracted. The 1 duplicated block(s) this scan matched between them are fragments of that copy, not the extent of it \u2014 treat the file pair as the unit. The two sit in different directories, so one cannot simply be deleted in favour of the other while both are reached separately: hoist the shared part into a location both already depend on and have each file call it, and retire whichever file turns out to have no caller of its own left. Extracting one helper per block leaves the fork in place. The \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integration/hurl/tests_failed/runner_errors/runner_errors.py"},"region":{"startLine":14}}}],"partialFingerprints":{"codehealthFindingId/v1":"2df38fc2dcf18be1214516a50a9563a6a35f13c8fb94af2c70fbc53d2a4d1223"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 6): integration/hurl/tests_ok/compressed/compressed.py:9-17 | integration/hurl/tests_ok/compressed/compressed.py:22-30 | integration/hurl/tests_ok/compressed/compressed.py:35-43 | integration/hurl/tests_ok/compressed/compressed.py:59-68 | integration/hurl/tests_ok/encoding/encoding.py:9-17 | integration/hurl/tests_ok/very_verbose/very_verbose.py:46-54 \u2014 \u0060integration/hurl/tests_ok/compressed/compressed.py\u0060 and \u0060integration/hurl/tests_ok/encoding/encoding.py\u0060 are one unit implemented once per sibling directory, so they are most likely parallel implementations of one contract rather than a copy of each other \u2014 this scan matched 1 separate duplicated blocks between them, totalling at least 10 lines. If both are selected at run time, neither can be retired in favour of the other, and the lines that DIFFER between them are the reason both exist. The move that pays here is to hoist the identical part into a shared location the whole family can reach and give what differs a parameter or a seam, so a change lands once instead of once per sibling; extracting one helper per block leaves every sibling to drift on its own. The \u0060return\u0060 at the foot of the matched lines is the enclosing body\u0027s own terminal exit, not an early one: it moves with them unchanged, and each site calls the extracted unit from the position that \u0060return\u0060 occupied \u2014 no decision has to be handed back and re-acted on."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"integration/hurl/tests_ok/compressed/compressed.py"},"region":{"startLine":9}}}],"partialFingerprints":{"codehealthFindingId/v1":"1091a4ce73b7f258d18b1fa7784e17322bb8cd1c262eafc7e4f521896cb2e7f0"}},{"ruleId":"D8","level":"warning","message":{"text":"Coverage not measured \u2014 no coverage collector is wired up: Coverage NOT MEASURED: \u0060--collect:\u0022XPlat Code Coverage\u0022\u0060 names a data collector that ships in the \u0060coverlet.collector\u0060 package, and this repository wires up none \u2014 no test project references it and no runsettings declares one. The absence of coverage here is therefore not evidence about the suite or about our analyzer environment: without a collector, \u0060--collect\u0060 produces nothing even from a suite that builds and passes. Add a \u0060coverlet.collector\u0060 PackageReference to the test project(s) (or commit the Cobertura/OpenCover/lcov report your CI produces) and real coverage will be measured. It is excluded from the score rather than counted as a near-zero defect."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"62e63e619c28f057e129f2997c965d32a457366a9ce18ca019ffb6bdfba85c99"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/hurl/src/cli/options/config_file/mod.rs: packages/hurl/src/cli/options/config_file/mod.rs changed 30 times in last 90 days, max cyclomatic complexity 47 in hurl::cli::options::config_file::parse_option at line 104. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-28..2026-09-26, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-28 03:04:41 \u002B00:00\u0027 --until=\u00272026-09-26 03:04:41 \u002B00:00\u0027 --full-history --no-merges -- packages/hurl/src/cli/options/config_file/mod.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl/src/cli/options/config_file/mod.rs"},"region":{"startLine":104}}}],"partialFingerprints":{"codehealthFindingId/v1":"24d8eb55923ac2e842049af7472069264c97e6dd53aa61d4f568196aa7ee1be5"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/hurl/src/runner/options.rs: packages/hurl/src/runner/options.rs changed 3 times in last 90 days, max cyclomatic complexity 60 in hurl::runner::options::get_entry_options at line 43. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-28..2026-09-26, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-28 03:04:41 \u002B00:00\u0027 --until=\u00272026-09-26 03:04:41 \u002B00:00\u0027 --full-history --no-merges -- packages/hurl/src/runner/options.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl/src/runner/options.rs"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ae00be09046d364316413c6c170d1f14c9a7beec6361227d80cd4f923be361d"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/hurl_core/src/parser/option.rs: packages/hurl_core/src/parser/option.rs changed 3 times in last 90 days, max cyclomatic complexity 49 in hurl_core::parser::option::parse at line 36. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-28..2026-09-26, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-28 03:04:41 \u002B00:00\u0027 --until=\u00272026-09-26 03:04:41 \u002B00:00\u0027 --full-history --no-merges -- packages/hurl_core/src/parser/option.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl_core/src/parser/option.rs"},"region":{"startLine":36}}}],"partialFingerprints":{"codehealthFindingId/v1":"e09ac831a493af37d0967f82af589408263564226f9e6cd9f8265053c1ffab14"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/hurlfmt/src/format/json.rs: packages/hurlfmt/src/format/json.rs changed 3 times in last 90 days, max cyclomatic complexity 48 in EntryOption::to_json at line 312. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-28..2026-09-26, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-28 03:04:41 \u002B00:00\u0027 --until=\u00272026-09-26 03:04:41 \u002B00:00\u0027 --full-history --no-merges -- packages/hurlfmt/src/format/json.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurlfmt/src/format/json.rs"},"region":{"startLine":312}}}],"partialFingerprints":{"codehealthFindingId/v1":"21a25dc03e26889b92215be67e59f857c8c7d0d8d6a4a1055d597e088ea081b1"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/hurl_core/src/ast/option.rs: packages/hurl_core/src/ast/option.rs changed 3 times in last 90 days, max cyclomatic complexity 47 in OptionKind::identifier at line 89. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-28..2026-09-26, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-28 03:04:41 \u002B00:00\u0027 --until=\u00272026-09-26 03:04:41 \u002B00:00\u0027 --full-history --no-merges -- packages/hurl_core/src/ast/option.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl_core/src/ast/option.rs"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"5b10a920b7f1dc6c78f4b0d17c9f3228065f860a9a262740542bc5ad8b0a4d63"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/hurl_core/src/ast/visit.rs: packages/hurl_core/src/ast/visit.rs changed 3 times in last 90 days, max cyclomatic complexity 47 in hurl_core::ast::visit::walk_entry_option at line 353. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-28..2026-09-26, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-28 03:04:41 \u002B00:00\u0027 --until=\u00272026-09-26 03:04:41 \u002B00:00\u0027 --full-history --no-merges -- packages/hurl_core/src/ast/visit.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl_core/src/ast/visit.rs"},"region":{"startLine":353}}}],"partialFingerprints":{"codehealthFindingId/v1":"c822b6e51d71a7c835e0fa858a6efd9dc02d527e3db2445db179968538c5ca75"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/hurlfmt/src/linter/rewrite.rs: packages/hurlfmt/src/linter/rewrite.rs changed 3 times in last 90 days, max cyclomatic complexity 47 in OptionKind::lint at line 456. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-28..2026-09-26, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-28 03:04:41 \u002B00:00\u0027 --until=\u00272026-09-26 03:04:41 \u002B00:00\u0027 --full-history --no-merges -- packages/hurlfmt/src/linter/rewrite.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurlfmt/src/linter/rewrite.rs"},"region":{"startLine":456}}}],"partialFingerprints":{"codehealthFindingId/v1":"7bca4b4d85119e565a1629942f76695cb6cc2cea2601e60a928b3adfabc9b9a2"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/hurl/src/http/curl_cmd.rs: packages/hurl/src/http/curl_cmd.rs changed 2 times in last 90 days, max cyclomatic complexity 39 in ClientOptions::curl_args at line 431. 1 of those changes was a fix/bug commit, and the other 1 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-06-28..2026-09-26, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-28 03:04:41 \u002B00:00\u0027 --until=\u00272026-09-26 03:04:41 \u002B00:00\u0027 --full-history --no-merges -- packages/hurl/src/http/curl_cmd.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl/src/http/curl_cmd.rs"},"region":{"startLine":431}}}],"partialFingerprints":{"codehealthFindingId/v1":"6632100877728bf4b76219e1e2dd0ca297dc5fba97e00d12641be27103fff031"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/hurl_core/src/parser/error.rs: packages/hurl_core/src/parser/error.rs changed 2 times in last 90 days, max cyclomatic complexity 35 in ParseError::fixme at line 137. Frequent change and high complexity in one file compound: schedule the next change to it to include carving out the part being edited, with the area under test before it moves. Counted over 2026-06-28..2026-09-26, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-28 03:04:41 \u002B00:00\u0027 --until=\u00272026-09-26 03:04:41 \u002B00:00\u0027 --full-history --no-merges -- packages/hurl_core/src/parser/error.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl_core/src/parser/error.rs"},"region":{"startLine":137}}}],"partialFingerprints":{"codehealthFindingId/v1":"bbe6d44c61e9b58b3775072d95314fba6a005bdfb14044ce21eb5b7f67c35f12"}},{"ruleId":"D15","level":"warning","message":{"text":"Hotspot: packages/hurl/src/http/client.rs: packages/hurl/src/http/client.rs changed 2 times in last 90 days, max cyclomatic complexity 33 in Client::configure at line 396. 1 of those changes was a fix/bug commit, and the other 1 changed it for other reasons \u2014 this file is under both repair and feature pressure. Before the next change lands here, make sure the area it touches is under test, then split that area out of the file so the following change is smaller than this one \u2014 a file this often edited pays the complexity back every time. Counted over 2026-06-28..2026-09-26, the 90 days ending at the analysed commit. Reproduce with \u0060git log --since=\u00272026-06-28 03:04:41 \u002B00:00\u0027 --until=\u00272026-09-26 03:04:41 \u002B00:00\u0027 --full-history --no-merges -- packages/hurl/src/http/client.rs\u0060: merges are excluded because a merge re-states changes already counted at their own commits, and history is NOT path-simplified because a change that reached the file through a merged branch is still a change to it. That command counts raw commits and can read HIGHER than this row, which counts a cherry-picked re-land, and a revert together with the commit it undoes, once each \u2014 a difference of several commits on a file whose history was re-landed or reverted inside the window."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl/src/http/client.rs"},"region":{"startLine":396}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cd9d455ff3325fcc5d4f7f0d445bb786b81df92383ad147e07b39ed9d88f2b8"}},{"ruleId":"D16","level":"note","message":{"text":"Off-boarding risk: anonymized user #1: If anonymized user #1 becomes unavailable, 1 significant file(s) lose their only recent owner: integration/hurl/tests_ok/follow_redirect/follow_redirect.py. Pair on, review, or document these before any departure."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"638f0128f41e4982459074e429ea63d3335b493c40be7de2d4d0f692d505d393"}},{"ruleId":"D17","level":"warning","message":{"text":"FixmeComment: // FIXME: Call is not public \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":"contrib/sample/src/main.rs"},"region":{"startLine":143}}}],"partialFingerprints":{"codehealthFindingId/v1":"c215619c187135904dfd29156614ba1bc4fa9e728322f9b5df89bd6ade4fcea1"}},{"ruleId":"D20","level":"note","message":{"text":"No ADRs found: No ADRs found. No recognised ADR directory (\u0060docs/adr/\u0060, \u0060docs/decisions/\u0060, \u0060adr/\u0060, \u0060docs/rfcs/\u0060, an \u0060ADR0001/\u0060 folder, or their siblings) exists anywhere in this tree. What was searched, so you can tell an empty log from a search that missed one: every directory under the tree (build output, dependencies and VCS metadata excepted), for a document that is either any non-index page inside a recognised ADR directory, whatever its name and however deeply nested (\u0060docs/adr/use-postgres.md\u0060, \u0060docs/adr/2024/0001-x.md\u0060); or a file anywhere whose name is ADR-shaped (\u00600001-use-postgres.md\u0060, \u0060adr-012-caching.md\u0060); or, when neither turned anything up, a document carrying the decision-record signature (an \u0022Architecture Decision Record\u0022 heading, or Status / Context / Decision / Consequences as section headings). A decision log that clears none of these \u2014 unnumbered files outside any recognised directory, without those headings \u2014 is not seen by this check and this row is then wrong. If that is your case, say so rather than renaming anything; otherwise, consider recording architectural decisions in \u0060docs/adr/\u0060."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d2bea044ff79d7d275f5a91a6e2f548586178eaf480274c33960ad020c854631"}},{"ruleId":"D22","level":"warning","message":{"text":"Redundant serialization method. Both the collection (CookieStore) and the individual element (Cookie) expose a \u0060to_netscape\u0060 method. While the scope differs, the naming suggests similar intent. More critically, \u0060CookieStore\u0060 has \u0060add_cookie(netscape_str: str)\u0060 which implies parsing, but lacks a corresponding \u0060from_netscape\u0060 or \u0060parse_netscape\u0060 method for bulk loading, creating an asymmetry with the \u0060Cookie\u0060 type which has \u0060from_netscape\u0060.: Rename \u0060CookieStore.to_netscape\u0060 to \u0060to_netscape_string\u0060 or \u0060serialize_netscape\u0060 to distinguish it from the single-item serialization. Add \u0060CookieStore.from_netscape\u0060 or \u0060CookieStore.add_cookies\u0060 to mirror the \u0060Cookie\u0060 parsing capability for consistency in the cookie domain. (signatures: CookieStore.to_netscape(): String | Cookie.to_netscape(): String)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"98e66651cabb8fae2923ece85e62fce610b481fde7ea150ff2ef0e62361e9cfa"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent return type for plural intent. \u0060get_all\u0060 returns a single \u0060Header\u0060 (likely the first or last), not a collection. This is confusingly named as it implies multiple results. \u0060get\u0060 also returns a single \u0060Header\u0060.: Rename \u0060get_all\u0060 to \u0060get_first\u0060 or \u0060get_one\u0060 to accurately reflect that it returns a single \u0060Header\u0060. If multiple headers are needed, provide a method returning \u0060Vec\u003CHeader\u003E\u0060 or an iterator, e.g., \u0060get_all_values\u0060 or \u0060iter_all\u0060. (signatures: HeaderVec.get(name: str): Header | HeaderVec.get_all(name: str): Header)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7e32921563e2ac51bd09d06d4dcd8b8ab52e5b84fb031687ff27846e77feff6d"}},{"ruleId":"D22","level":"warning","message":{"text":"Inconsistent naming convention for retrieval. \u0060cookies()\u0060 (plural) returns a single \u0060ResponseCookie\u0060 (likely the first or a specific one), while \u0060get_cookie(name)\u0060 (singular with arg) returns a single \u0060ResponseCookie\u0060. The plural \u0060cookies()\u0060 is misleading if it doesn\u0027t return a collection.: Rename \u0060Response.cookies()\u0060 to \u0060Response.first_cookie()\u0060 or \u0060Response.get_cookie()\u0060 (removing the argument version if it\u0027s redundant, or keeping it as \u0060get_cookie_by_name\u0060). If \u0060cookies()\u0060 is meant to return all, it should return a collection. (signatures: Response.cookies(): ResponseCookie | Response.get_cookie(name: str): ResponseCookie)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"0a07529875fbe0f8928ae771f26c0bd17e5f0dd6f70884de469687d68398f199"}},{"ruleId":"D22","level":"warning","message":{"text":"Semantic ambiguity between \u0060contains\u0060 and \u0060includes\u0060. In many APIs, these are synonyms. If they have distinct behaviors (e.g., one for strings, one for lists), the naming is confusing. If they are synonyms, it\u0027s redundant.: Clarify the distinction. If both apply to strings, remove one. If \u0060includes\u0060 is for collections and \u0060contains\u0060 for strings, rename to \u0060contains_string\u0060 and \u0060includes_item\u0060 or similar to avoid confusion. (signatures: Value.starts_with(other: Value): Result | Value.ends_with(other: Value): Result | Value.contains(other: Value): Result | Value.includes(other: Value): Result)"},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"60a1fb263f9537e7f81d8b342555e60a66354663d6140a11f3f7e4919030c1cc"}},{"ruleId":"D28","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":"4f50e42a8dbf85dfec720313063f46f6e6a2150b3be9f806037c9146568c78b6"},"properties":{"commitSha":"1c24185aeb2e29fc01aa1ced900043a66fc8c9f3"}},{"ruleId":"D28","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":"3816e9afe740cd8d0c7de1a0ec830a06adc5832ef9af3b493363698f59d1b864"},"properties":{"commitSha":"054343149083cfcd117312e65cd6e2d4763c60ce"}},{"ruleId":"D28","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":"0654aef276c9604fd3cd1bfdf933ffd72cce56e3b3e248987658e29f82c86c36"},"properties":{"commitSha":"054343149083cfcd117312e65cd6e2d4763c60ce"}},{"ruleId":"D28","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":"9f6ef0218a7537d02a89183c29bb84a6c9cbdc4f673e09b67749c72720f0514f"},"properties":{"commitSha":"64d9f5b22f5bef19de484688716ebbe585fda983"}},{"ruleId":"D28","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":"35a10fe7b1c85fc40c9624a90a23fa7e5d1efbce93f2496e0eb6de79192a4d11"},"properties":{"commitSha":"054343149083cfcd117312e65cd6e2d4763c60ce"}},{"ruleId":"D28","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":"3cdfd7beb31b791ae18dcb425e21eb157c842e7bbcd522cc330573c1a6538db1"}},{"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":"9c0ca3f93be2672d595a960915d42bc7ebf993b8ce28b47e13f93b2f9ca6da15"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"932cd7260a98f7be12b585a101c879deaedd4c9d751c3337cb5ff513c8929b85"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"769b7e1999c666ed7b5d07e32919f4072b0368bf218bb1b78681d13e32d10a95"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"5ea32a6840666b6668374d60d365dc18c4eb8e7810ad081ebae9cdc50267f47c"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"338407871e9c53d2625a5754ccc8f84f16e799149817c1d1e310aef9e6213485"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-829","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"1dd0dc0a9f5ada1a100bf5d76eb15b5c601243ebfc1281b60be35a7e40cf9cbe"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"a0f7ab5d6ab568a4c30a91dd9168fa3e45c2a74aa09e8fae4519b71dd6fa3dcc"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"ab7d51fc686d40b95275560412685ec5d881e3651bd3306c9f25023aa80397a0"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"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":"04a24b4adb77016dce7a02bcb31aed3ae98e90294a9dcc7ce14bf09b6a800927"},"taxa":[{"id":"CWE-214","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-532","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":"6f1e73e4befa7e90c20ee07b57b8b3846977772d6e7ffb4e7ed9ce077c226099"},"taxa":[{"id":"CWE-79","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":"f733e76566aa2598a936da64c7101a329494b7d50872982ddb180bd6ef6bef71"},"taxa":[{"id":"CWE-79","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":"433b7f2bb00989846796c20fcd8e8624af2a25409b7c335e0daf45e49faaf6a6"},"taxa":[{"id":"CWE-79","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":"5af9756cc8956fef6a9350268672c86824ab68fb1a7237be6e81c9dd5d66714f"},"taxa":[{"id":"CWE-614","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":"bec9f045f84d1b26848a18e1a5f78dc281cd9cd27be83a6bbd0bc61c8c8b7701"},"taxa":[{"id":"CWE-614","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":"e3e00dcebfe5f2e0ad68d4b51fed9e8e8fedd3837be67f6ffc0a68b06ce3cf1d"},"taxa":[{"id":"CWE-614","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":"16b4d57c5d36a5e9d4c4e669053f24762f78d03db7155a42ec9b45243c7066ce"},"taxa":[{"id":"CWE-614","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":"2e84e0d301f78fc9e95190c32ffc3e92414e09ae6fba0af6465a87abd2901864"},"taxa":[{"id":"CWE-614","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":"837a79df5d70babc2cfa2f43501aab004929b3d745da2c62a24d7aa61a753036"},"taxa":[{"id":"CWE-614","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":"44f335445006f5b5f354be3ee0c58fd1ad5e9975bf7e414eb0d92c5e7799b529"},"taxa":[{"id":"CWE-614","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":"1e86e91815abf3d1f3fa0f079123cae106f16d67e8e2359d5bba63c0f1c710a1"},"taxa":[{"id":"CWE-614","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":"3cf23700167dc8236bf9bffaf95d8fe080dcb9008fef336a4e7b41497abb144e"},"taxa":[{"id":"CWE-614","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":"3c8ed85e69444f224a2e48d205f464b5c37791e7283c63aeed45846704e669db"},"taxa":[{"id":"CWE-614","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":"4e9c9c02ddb63a6d0509c41f5b5aa4a049bfd59cd89ac75bf7b7bef13d98b140"},"taxa":[{"id":"CWE-614","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":"4bab05566ea697c169a67f99ace3767525d290721755b0c8ec61e0e608e66e58"},"taxa":[{"id":"CWE-614","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":"2b6459d6b76600d6a915653b07c8324b6480892eec172516c0d2a015f420302a"},"taxa":[{"id":"CWE-614","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":"ae2250d0978c27e0d883078269d0aba3fd6901f77603567644ce0c29285927f1"},"taxa":[{"id":"CWE-614","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":"81db0f754a29d0593f473c2f0b6754a6fa57b3fb4a4856d81d2917eea0c78ba0"},"taxa":[{"id":"CWE-614","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":"51eb117519ae54f86a5247f0f7b7d1ab64007eff12430cfc3ec6de69f4274031"},"taxa":[{"id":"CWE-614","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":"84fd9ce5be8cf1bebf94456a0b72af4f054397e54e5c22de96e32ff69b5c357a"},"taxa":[{"id":"CWE-614","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":"906b7d78d37d99fb6ffa635a649e315aa4ceed1a745fb897e84e4f721f6e22a1"},"taxa":[{"id":"CWE-614","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":"17115955e445934f7ebcf2637d2f5d76c0d9a440f683bd77ed549015589b7054"},"taxa":[{"id":"CWE-614","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D30","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":"c6b9750778508e8c7121d209019fb0d6d895fc17f2d04d4609baedd783b83991"}},{"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":"e3dc93d51c1e626473bc02f85867f9e9548b663aac1f9a4cc463267a72a9837c"}},{"ruleId":"D31","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":"cb7a39cc33a4112b9a79d9c3a58183427d114701b07649ff7d4ce54068379e4e"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","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":"df52a8bbb8a455bba9a6208dfc55dafa20a128903b28991665a7c1d1225bd095"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D34","level":"note","message":{"text":"Orphaned files with no living knowledge: 1 of 10 analysed file(s) have no living knowledge left \u2014 their last meaningful change has decayed away, so if one breaks, no one currently understands it (counted over production source files of roughly 2,400 bytes or more, excluding vendored, generated and example/demo trees and test files identified by path convention, largest first; 10 of the 176 production source files in this repository met that bar). None is large enough to earn a read-through of its own, so this row stands in for the per-file rows rather than raising one each \u2014 most significant first: integration/hurl/tests_ok/ntlm/ntlm.py. Attach the read to the next change that touches one of them: have a second person review that change, and leave behind a short comment or test recording what the file is for, so the knowledge comes back at the cost of a change you were making anyway."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"ce861fd78f6935114d3a342cb90ad25870f984e1042954fcbbe27c0e23be3658"}},{"ruleId":"D36","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":"1b213f6eedd4b140d0bc37bdf1496f72811a643f34064f12518b32e9e83bcfc7"}},{"ruleId":"D36","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":"dfd70a155c3a448c2bdc4b1f1322c29730ece30f1775613dc3495dda8cfad422"}},{"ruleId":"D36","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":"d657599f6f99da1927d3377533dfc0888b34c4d84aa7d5579841fd72d0e39bce"}},{"ruleId":"D36","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":"ace515990e7ee0f17b5c17e44dd168a5bdecf90804a3a3dd845cf05540978013"}},{"ruleId":"AC3","level":"error","message":{"text":"\u003Chtml\u003E without a lang: The page declares no language, so assistive tech can\u0027t pick the right pronunciation. Add lang (e.g. lang=\u0022en\u0022)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl/src/report/html/resources/report.html"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"d0df68deb28e9539c42c8d0d34a7889174c4b80501c68b09cc2b7f34a8b7d3b7"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl/src/report/html/resources/report.html"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"10c715caf10537d5db66eda30c0a0a7932c649a1c8db985e42e5d852407da2f3"}},{"ruleId":"AC3","level":"warning","message":{"text":"Data table has no header cells: A \u003Ctable\u003E with data cells but no \u003Cth\u003E gives assistive technology no way to associate cells with their headers. Mark the header row/column cells as \u003Cth\u003E (with a scope)."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl/src/report/html/resources/report.html"},"region":{"startLine":19}}}],"partialFingerprints":{"codehealthFindingId/v1":"c399fcb9b9b9885d06dd576e832a216dfa80c82dabfc16608f8d51aff3609324"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl/src/report/html/resources/run.html"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"5dee7963675cac1e0f0dc191b58970bcdd65180ce7b787fd32aacac6d6364981"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl/src/report/html/resources/source.html"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"607710d77ec87b42b92291c46760b4c248b23da8b77d1bc70a091e4803e56735"}},{"ruleId":"AC3","level":"warning","message":{"text":"Page without a main landmark: No \u003Cmain\u003E (or role=\u0022main\u0022) means no \u0022skip to content\u0022 target and a weaker landmark map. Wrap the primary content in \u003Cmain\u003E."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl/src/report/html/resources/timeline.html"},"region":{"startLine":2}}}],"partialFingerprints":{"codehealthFindingId/v1":"361793fb71b5299b179b105ebb93bcce88f2fc640596966a54545b46891e7166"}},{"ruleId":"AC5","level":"error","message":{"text":"Invalid value \u0022{source_selected}\u0022 for aria-selected: \u0022{source_selected}\u0022 is not a valid value for aria-selected \u2014 allowed: true, false, undefined."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl/src/report/html/resources/nav.html"},"region":{"startLine":4}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a4ef0a16c97ed8af60b078a508ff88d0fc9ceebdd35ca215bb66b61d85c6149"}},{"ruleId":"AC5","level":"error","message":{"text":"Invalid value \u0022{timeline_selected}\u0022 for aria-selected: \u0022{timeline_selected}\u0022 is not a valid value for aria-selected \u2014 allowed: true, false, undefined."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl/src/report/html/resources/nav.html"},"region":{"startLine":5}}}],"partialFingerprints":{"codehealthFindingId/v1":"b24ea804023d17aba43b2c89df7e5431e765284b4db33a698eda56c8f906a8a8"}},{"ruleId":"AC5","level":"error","message":{"text":"Invalid value \u0022{run_selected}\u0022 for aria-selected: \u0022{run_selected}\u0022 is not a valid value for aria-selected \u2014 allowed: true, false, undefined."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"packages/hurl/src/report/html/resources/nav.html"},"region":{"startLine":6}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f53657edd1d235a07fd819f8b460f83893ce79a6c213b2a1e2f4d221517eb9c"}},{"ruleId":"AC7","level":"warning","message":{"text":"Accessibility enforcement below the top rung: No accessibility enforcement found \u2014 no automated accessibility check runs over the HTML your app renders. Assert the accessibility invariants over that HTML in the test suite you already have (parse the output and assert, or drive a browser), and gate that test in CI so a regression blocks the merge. What was searched, so you can tell an absence from a miss: the 5 markup file(s) this pass actually assessed, the linter configuration checked in beside them, and this repository\u0027s test and CI files \u2014 matched by name against the accessibility checkers this dimension carries. An audit run outside the repository, a hosted scanner, or a check whose name is not one of those, is not seen here."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d46019b86eff5ddad9db289e6802ac158899e980df54c34f67722442787ead62"}},{"ruleId":"M2","level":"note","message":{"text":"No ADRs: No Architecture Decision Records found \u2014 no conventional ADR directory, no numbered \u0060NNNN-title\u0060 documents in any markup this check reads, and nothing ADR-shaped by content. Design rationale recorded elsewhere (a design-notes tree, a mailing list, pull-request discussion) is not visible to this check and is not re-findable per decision, so a future maintainer cannot ask why one choice was made and get an answer."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"670b3d6e36a756d63097d0dfbf90afd5fc761308800b9354894a07c3f4e4aa14"}},{"ruleId":"R1","level":"warning","message":{"text":"Type Safety: 0 typed \u00B7 5 plain JS \u2014 the untyped files are contrib/npm/hurl/archive.js, contrib/npm/hurl/bin.js, contrib/npm/hurl/hurl.js, contrib/npm/hurl/hurlfmt.js, contrib/npm/hurl/install.js."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"d00ee7953f55325a823d27e5db9657c80ca9b9861c0c0abf8fe487cd3fa586d3"}},{"ruleId":"R6","level":"warning","message":{"text":"No test script: test \u2717 \u00B7 lint \u2713 \u00B7 typecheck \u2713 \u2014 read from this repository\u0027s package.json scripts and corroborated against its CI workflows. A script counts when its name or command matches the step: \u0060test\u0060 for the suite, \u0060lint\u0060 or \u0060prettier\u0060 for linting, \u0060typecheck\u0060/\u0060type-check\u0060/\u0060tsc\u0060 for type checking. \u2717 therefore means no script or CI step under those names was found, NOT that the step is absent from your pipeline \u2014 a task invoked by a runner this check does not read, or named something else entirely, is not seen and is worth confirming before acting on a cross. A \u2713 means the wiring is DECLARED \u2014 a script or CI step under those names exists. It is not a statement that the step passes, or that it runs at all: nothing here installs a dependency or executes a suite."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"7e5e0cc374484b1c72227eba121f79e7e90e5907d71a39d0ffec753e709f7fa6"}}],"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-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.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-214","guid":"b10ad120-fb22-1351-9348-aa23b453e815","name":"CWE-214","shortDescription":{"text":"CWE-214"},"helpUri":"https://cwe.mitre.org/data/definitions/214.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-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-506","guid":"401d6455-56e3-0552-9a39-f77461673e3f","name":"CWE-506","shortDescription":{"text":"CWE-506"},"helpUri":"https://cwe.mitre.org/data/definitions/506.html"},{"id":"CWE-532","guid":"1cd8877a-76e8-ce54-b40b-779af23364a0","name":"CWE-532","shortDescription":{"text":"CWE-532"},"helpUri":"https://cwe.mitre.org/data/definitions/532.html"},{"id":"CWE-614","guid":"faa8a6a5-7e9d-5d5e-afc9-020ff49d250a","name":"CWE-614","shortDescription":{"text":"CWE-614"},"helpUri":"https://cwe.mitre.org/data/definitions/614.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-829","guid":"13c33925-97fb-5a5e-b40c-56d328b8a4d7","name":"CWE-829","shortDescription":{"text":"CWE-829"},"helpUri":"https://cwe.mitre.org/data/definitions/829.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":45,"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."]}]}