{"$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":"D7","name":"Architectural Integrity","shortDescription":{"text":"Architectural Integrity"},"helpUri":"https://codehealth.canine.dev/dimensions/D7"},{"id":"D8","name":"Code Coverage","shortDescription":{"text":"Code Coverage"},"helpUri":"https://codehealth.canine.dev/dimensions/D8"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D12","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/D12"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"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":"D25","name":"ADR Conformance","shortDescription":{"text":"ADR Conformance"},"helpUri":"https://codehealth.canine.dev/dimensions/D25"},{"id":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"id":"D27","name":"Navigability","shortDescription":{"text":"Navigability"},"helpUri":"https://codehealth.canine.dev/dimensions/D27"},{"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":"D33","name":"JS/npm Dependency Vulnerabilities","shortDescription":{"text":"JS/npm Dependency Vulnerabilities"},"helpUri":"https://codehealth.canine.dev/dimensions/D33","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":"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":"D37","name":"Vulnerability-disclosure Policy","shortDescription":{"text":"Vulnerability-disclosure Policy"},"helpUri":"https://codehealth.canine.dev/dimensions/D37","relationships":[{"target":{"id":"CWE-1059","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1059"]}},{"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":"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":"8beb176c604706486df63d2215f767f50520c8d949b1d464345de14ded442c69"}},{"ruleId":"D9","level":"note","message":{"text":"No tests found: No test projects found in the repository."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c9bf64cbb5a4ae13d6bcd01fa3bc8d2879d860c73bc67f176ee3c2cecb8adce3"}},{"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":"c8a0bdbcb1b97069cf7f4f2816f99723bf17b99aaf0c7c2c27267cdebdc0b2ae"},"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":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a one-line decision with authors: State why internal observability matters (e.g. debugging AWS sink failures) and the trade-offs of adding new metrics (schema growth, extra processing overhead)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"changelog.d/12779_add_aws_connector_observability.enhancement.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f5006db5200c99e52d07f04a4b568a8c8dbfdd48b14068bddd3b4576e54a27a"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; only the decision \u0022Allow explicit null values ...\u0022 is stated: Add why null values matter (e.g. configuration requires absence rather than zero) and the trade-offs of allowing untyped/null keys"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"changelog.d/19963_config_null.fix.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f9da7aa7b3d903ae24240a2a3aac20faf3c76788ed9369ca3eb5dd5aedd4836"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement explaining why channel reconnection was needed (e.g. the failure mode of silently stopping) and no consequences/trade-offs: Add a Context section describing the problem: Vector stops listening on a Redis connection drop without recovery, causing lost messages during restart or blip. Add Consequences covering operational cost (restarting Vector), false-positive noise from retries, and any new configuration burden."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"changelog.d/22615_redis_channel_reconnect.fix.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"aa5747789a0c056dd9e01f20c77c6b4cb42301ef97bd562b71e670d7dbbd08e0"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement (why the deadlock happened) and no consequences/trade-offs: Add a Context section explaining what the disk buffer shared between sinks causes the deadlock and why it is unsafe. Add Consequences covering operational impact of the fix and any new trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"changelog.d/24896_metric_normalizer_finalizer_deadlock.fix.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4cb8f11aa9c691a1e195dcdeb8d9f57d1c0345c673c727bc81e7b872ee630b8d"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem (why a cuckoo filter for memory enrichment tables) and no consequences/trade-offs: Add why the memory footprint matters (e.g. resource-constrained environments) and note the trade-off of false positives with an acceptable threshold."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"changelog.d/25143_enrichment_table_memory_cuckoo_filter.feature.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd63c63426d954155d5df671a158488f508e7315614c4b7e41d84128fc2bb808"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem (why bloom over cuckoo was needed) and no consequences/trade-offs: Add a Context section explaining the problem (memory footprint vs false positives for memory enrichment tables) and a Consequences section covering trade-offs such as higher FP rate versus more features"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"changelog.d/25154_enrichment_table_memory_bloom_filter.feature.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"781fdf551364955f29161382a8bde3abd0b7e9b25a40e5cccb4fa0bdaf6ede9b"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a one-line rationale with no framing: Add why ALPN matters (e.g. AWS IoT Core requires x-amzn-mqtt-ca) and the trade-off of requiring \u0060tls.alpn_protocols\u0060 to be set"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"changelog.d/25805_mqtt_alpn_protocols.fix.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"46c69adfbbb3e82f3bc04dc34eddcac0550d38041625a8c2ca28d701530d1eeb"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a one-line title stating the fix with authors: Add a Context section explaining why untagged enums can clash (e.g. two variants named \u0027color\u0027 but represent different hues) and a Consequences section noting trade-offs like increased enum duplication or loss of tag semantics"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"changelog.d/25828-config_schema_untagged_enum_overlap.fix.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3e9d3a583a7e0638e839c9b92e2ecaab13327bb12727f17362fb851004517fd"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs; only the problem is stated: Add a Consequences section noting that hyphen-containing names are now matched and the resolved config reflects the secret value instead of the literal string"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"changelog.d/25849_secret_backend_hyphen.fix.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1e4167f067b69f8131316d36ebb55a32b9ba1e70d4d1ab9ea3afc8ff37767d5"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs (e.g., loss of dynamic encoding flexibility) not visible before clip: "},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2019-10-21-require-encoding-option-for-console-and-file-sinks.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3f6bccbcc3187a873a789b6b39bdbb92e90c36c5e5136346f30aee4fc78ec6e"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs are not visible before the clip (the body clips mid-## An important step for Vector) and cannot be flagged as missing: "},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2019-11-21-windows-support.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e859aa60ccc3329e1484128f7c9a0897472e7712e7a3c2305b9e37d6e5b5c6bf"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs for renaming (which sink will break, migration cost) are stated: Add why this change matters (e.g. avoiding duplicate names in the sinks list) and a Consequences section covering any breaking changes or migration effort"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2019-12-04-rename-datadog-sink-to-datadog_metrics.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"717569f1f89c91d1b978fa85ef01e16df1a8e26b4a13f7de01ccef897c9ae60a"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem (why allow custom DNS servers) and no consequences/trade-offs in the body; only a config example is shown: Add a Context section explaining why custom DNS is needed (e.g. bypassing corporate/ISP restrictions or resolving local queries), and a Consequences section covering trade-offs like reduced reliability, security exposure, and maintenance burden"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2019-12-13-custom-dns.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"86f9dc2112976cdcaa36a271ce77ddab8491938e0b9842ed1be065e4c055933c"}},{"ruleId":"D20","level":"warning","message":{"text":"No explicit decision (the new source is described as an alpha experiment with no change it will make to the API or configuration) and no consequences/trade-offs: Add what the Kubernetes integration actually does (e.g. new config fields, resource types, event hooks) and its trade-offs: operational complexity for non-early adopters, risk of breaking existing workflows, and how it is documented"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2019-12-14-kubernetes-source-alpha.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff66450da2240808462f5031481188825970b5b99c5caf66ef5fdd997563fa6d"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs (cost, performance, or data quality impact) are mentioned for adding EC2 metadata enrichments: Add a Consequences section covering trade-offs such as increased storage/load and the cost of maintaining new fields"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2019-12-16-ec2-metadata.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"05dc98b5861fa70c30f0a009b04589b0cd96076a9b0218863ff8ace9578c1196"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem framing or consequences section; only an upgrade guide exists: "},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-01-03-merge-existing-tcp-and-udp-sources-into-a-single-socket-source.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"40920b19a02b5d2f9bfa51e0e1864be7b23722645057ed3544deaa878d5464fb"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem (why rename) or consequences/trade-offs in the body: Add a Context section explaining the motivation for renaming and a Consequences section noting any operational impact such as breaking existing consumers that expect \u0060tcp\u0060"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-01-03-move-existing-tcp-sink-into-socket-sink.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ef3d2834c8d659f813dee2586f5f90ecd5ec584c45c24ed7d5a2bb01b1b2368"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs section: Add a Context/Problem section explaining why an array was replaced by a string (e.g. simplifying configuration) and a Consequences section noting the trade-off of losing array-style flexibility"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-01-12-use-comma-delim-server-list-instead-of-an-array.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b876c24a32c1e26980fe589edda539bb48f12d520d19e4b6232138a190c49009"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section (e.g. loss of line field for downstream consumers): Add a Consequences section noting the absence of the \u0027line\u0027 field and how to handle it in downstream integrations"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-01-14-rename-line-field-to-message.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"31a39d9985c9e82b7e800076413251c366095eadca96068338f2aab354bfb8a8"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem framing and no consequences/trade-offs sections: Add a Context section explaining why AWS-specific options were kept (e.g. backwards compatibility) and a Consequences section noting alternatives such as using an environment variable for region/endpoint"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-02-05-drop-aws-options.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f16dab972611c8b1f262ac852fc7cd95fbb0215193cd16db6d90ba129ff9e303"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs of supporting multiple config files are mentioned: Add a Consequences section covering trade-offs such as increased complexity for users managing the multi-file topology and any performance impact"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-02-07-multi-config-files.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d5927c54bb85447a2a034b14138307619ba9f5d49d0b4fe871d9f2de7a8d998d"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem motivating the decision and no consequences/trade-offs are stated: Add a Context section explaining why dynamic field creation is needed (e.g. runtime configuration flexibility) and a Consequences section covering trade-offs such as template complexity or performance impact"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-02-17-add-fields-transform-templating.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0c4e291a7f7d41f0e026ecc787d7cf956eafc795d8920d33fe0f2c9326388a76"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs for the new sinks list: Add a Context section explaining why sinks were added (e.g. to support new integrations) and a Consequences section noting trade-offs such as dependency complexity or configuration burden"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-02-20-new-sinks.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c68045c14c36aa67b4f30152ece4e21dc7f9deb0a1d2f384a1c44f632b9e912d"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a one-line description of the transform with no rationale or impact: Add why rename_fields matters (e.g. legacy field names, data migration) and document consequences such as breaking existing remap rules when renaming fields"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-02-24-rename-fields-transform.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc0703a1e6c1834581ce096334d0560879a34f76ced88feb50c13f510854b6e9"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem framing and no consequences/trade-offs section (e.g. branch ordering ambiguity): Add a Context section explaining why swimlanes are needed over static branching, and a Consequences section noting the trade-off of branch ordering ambiguity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-02-24-swimlanes-transform.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f5d58ff33816662e1f387ac757106d3f6ae5463821160cab69a3d4d46560f3e"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no explicit decision (only adoption with links) in a descriptive tone: State what problem Vector addresses for NixOS users and the concrete decision (e.g. add Vector as a supported platform, produce docs, ensure updates)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-02-27-nixos-support.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4680e379e5cfc3f63fb860087a4a8e8aab2a8d2e5b802b8af413e8d3c45ed5ad"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs are not present and the body clips mid-sentence inside Getting Started before any trade-offs are stated: "},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-02-28-custom-vector-builds.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ed944ee1cdbb15220e4c70ac99d0d318b9b0bc778b149bf81f1a7c29bb55d3b"}},{"ruleId":"D20","level":"warning","message":{"text":"The title \u0027We\u0027ve Added a Privacy Policy\u0027 is generic and the body contains no context/problem (why privacy policy now) or consequences/trade-offs: Replace with an informative title like \u0027Privacy Policy: Data Collection and Consent Requirements\u0027 and add a Context section explaining the data types collected, the legal basis, and a Consequences section on how to opt out"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-03-03-privacy-policy.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"23fcaefd6149ce9b7977ce737d443c075bc968de467a7f636d3fad4da1ba25c1"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs of adding white/blacklist encoding (e.g. performance cost, configuration complexity): Add a Consequences section noting the trade-offs: overhead from checking whitelist/badlist against every field, increased boilerplate for each sink, and the risk that an unfiltered field might leak into downstream sinks"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-03-04-encoding-whitelist-blacklist.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"acce68b0a54a108fe0370cacbfdb346074c80fce574168f04f8c0eb70b5169da"}},{"ruleId":"D20","level":"warning","message":{"text":"Weak context (only one-line throughput claim) and consequences/trade-offs are absent: Add a Context section explaining why compression matters for the sink\u0027s workload and a Consequences section covering any operational or performance costs of compressing data"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-03-09-kafka-sink-compression.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e6310525f53c2285d15f31456fe707f63bc16a89c1cfa8be2f652df15c2f31a"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs are stated; only a feature presence claim: Add the motivating request (e.g. secure inter-instance communication) and document any trade-offs such as TLS overhead on sinks"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-03-11-vector-sink-tls.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cf2b7767a75c504eceea9caa147e6cd8bcda72fb35176db93578bfb74b678592"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a one-line description plus links: Add the problem motivating the sink (e.g. \u0022logs are growing past local storage\u0022) and its consequences (e.g. \u0022no longer send logs to stdout\u0022, \u0022requires Papertrail API key\u0022), then link trade-off documentation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-03-12-papertrail-sink.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e98706d3f7c41c98d23c685741d3375d49f368c1fdcfbb868091d0d5977f0249"}},{"ruleId":"D20","level":"warning","message":{"text":"No explicit problem statement or consequences (e.g. migration cost, backward compatibility) are given for the renaming decision: Add a Context/Problem section explaining why host_key was chosen over host_field instead of the original name and note any downstream impact on existing integrations"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-03-12-rename-host_field-to-host_key.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"888c5db74033350a88d1fe8ee06ac7c40c23b4eca889efce85f69d22d08f967e"}},{"ruleId":"D20","level":"warning","message":{"text":"Rationale is thin: the decision (honeycomb sink) and its trade-offs are only hinted at (\u0027Vector \u002B Honeycomb = \uD83D\uDC6F.\u0027) before PR#1991: Expand the rationale to state why Honeycomb was selected over alternatives and list any operational or scaling trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-03-14-honeycomb-sink.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc808fdee3103158004ef7a59c0424d6f1b336ee07dcba09902be5545cd4a010"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a one-line description plus author/PR link: Add the problem this sink solves (e.g. need to send logs to Pulsar) and its trade-offs (e.g. latency, throughput limits, configuration complexity)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-03-19-apache-pulsar-sink.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7762d7bff4c5e22e87df26ba40bd6d144ef3635c879c20bdefcf5acc18a50d4e"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs sections; only the sink name is present: Add a Context section explaining why Datadog logs are needed (e.g. existing sinks, missing data) and a Consequences section covering trade-offs like Datadog API rate limits or integration cost"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-03-23-datadog-logs-sink.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ad88f0f16febd1721688eb2566f6fb5e8af989a50f7a54d84b9e026fd2268ae"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a renaming title with an upgrade guide: Add the problem (e.g. duplicate sink name) and consequences (e.g. existing sinks must be updated too, migration cost) so this is a real breaking change rather than a naming fix"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-03-23-rename-gcp_stackdriver_logging-sink-to-gcp_stackdriver_logs.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7a3a5d95122c0447c96a016b9eb24be5ffe8ce1d1f3e574a649e584564b5de0b"}},{"ruleId":"D20","level":"warning","message":{"text":"Informative title: \u0027A New Guides Section\u0027 gives no insight into the content or purpose of the new guide set.: Rename the ADR so the title reflects what the guides actually cover (e.g. \u0027Launch a Continuous Guides Section for High-Quality Documentation\u0027)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-03-31-guides-section.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eea36ee328425203dbe7035685b461a4363bf3c70fded299832e838baac39c9a"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs of adding these predicates (e.g. performance cost or learning curve) are not present in the visible text: Add a Consequences section noting trade-offs such as increased boilerplate for condition expressions and the need to maintain predicate lists"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-04-01-more-condition-predicates.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"348b34326e50bb23ea8287519aec2840a1cd7394fbc7654c4ebfce1b53a9555b"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section (the body ends before any one) despite an informative title and strong context: Add a Consequences section covering the cost of requiring Lua as an escape hatch versus the benefits it brings"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-04-07-lua-transform-version-2.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2f0debae798b04e8fc1664e764fa1ff4aa87c0a60b45430455ac1988c90efc15"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section describing what happens when ACLs are still required: Add a Consequences section noting that objects without an explicit acl option will inherit bucket-level access and the trade-off of requiring manual configuration"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-04-09-make-acl-optional.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e540b33870bf0abc9c9974b64e80a35c79380e0c7baabfffd6ad99436c7af244"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs for the new sinks are stated: Add why sinks matter (e.g., multi-cloud/region compliance) and note any operational cost or configuration complexity of adding each sink"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-04-17-new-sinks.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"53cd498e9e6d88449fe153acf6f53b086dcec919091ef37dd1fac66a50fcd9b9"}},{"ruleId":"D20","level":"warning","message":{"text":"Explicit Decision (the graceful exit behavior) and Consequences/trade-offs are not present in the visible text; only context and future expansion are shown: Add a one-line Decision stating when Vector exits (when specific sources finish) and a short Consequences section noting it is a runtime/exit decision rather than an infinite loop"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-05-04-shutdown-vector-if-all-sources-finish.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f7d6f0f8a2112468c1d9929718a1832df16572e88b82fb0cc6be50728016983"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs (e.g. performance cost of handling complex PEMs) are not visible before the clip: "},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-05-27-add-support-for-loading-multiple-cas.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"343c3f719c1b008e54db882eeb0ddeeb39e5ac935ce4c8ff7dd82ac3628ce91d"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section describing the cost of this minor UX polish: Add a Consequences section noting that the change is purely cosmetic and no runtime or correctness cost"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-06-10-consolidate-and-beautify-validate.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c264a8901b1cee47a4bf939cd577f4166fbfedadf7761be3ead096f253e08c00"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement (e.g. why SASL is needed) and no consequences/trade-offs section; the decision body is a configuration diff with defaults plus an OS limitation note: Add a Context/Problem section explaining the authentication gap being filled and a Consequences section noting the trade-offs of requiring SASL credentials on Windows"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-06-27-add-sasl-to-kafka.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e3079041905de0996d9b88f0bfa20818fb80e7fac4c28137afadb8311e172ae"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs (loss of compression on non-opt-in sinks, CPU/memory cost) are stated despite an explicit decision present: Add a Consequences section noting the optional nature and trade-offs of enabling compression"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-07-06-add-compression-option-for-aws-sinks.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e96a0ca8f3b91623de987ff6abf3ef76866ada7d65c3c3aaece8236bf94238a8"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs are stated (e.g. added complexity of maintaining AWS sources): Add a Consequences section noting the trade-off of needing to maintain new AWS source/sink integrations and any performance/availability considerations"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-10-28-new-aws-integrations.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"894537c0e88187809f86ef1640a82cb95600ae4c876ae4becdff3e83a206c185"}},{"ruleId":"D20","level":"warning","message":{"text":"No explicit Decision or consequences/trade-offs section (only rationale and use-case examples): Add a Decision section stating what YAML/JSON support entails and a Consequences section noting trade-offs such as the loss of TOML precedence"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-11-25-json-yaml-config-formats.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fbdd406c81db87680e98dc73c44b493c7625cb115644412ecf731db04d27607b"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section (costs/usage vs internal_metrics): Add a Consequences section covering the operational cost of exposing Vector logs to external sinks and whether it conflicts with privacy or security constraints"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-12-23-internal-logs-source.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a862217487d8e916efca14a98cbc190908a4bbed341e643abd2bbb0eb3af0bb4"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs are not visible before the clip (only a one-line limitation is stated): "},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2021-01-20-wildcard-identifiers.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"decbdee98719a582e6d07caff70f9f70ee7318b7368baaae8126de167fe79495"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section describing the migration cost and how ignore_checkpoints/read_from behave when checkpoints are present: Add a Consequences section noting that existing checkpointed data will be lost if not migrated to read_from=beginning, and document the behavior of ignore_checkpoints in the presence of checkpoints"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2021-01-31-file-source-checkpointing.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"42bb3c0d59d3a881a258991e43bbf7c690534bc0e5b7ddd0a57a6db5929860a2"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs are not stated (e.g., performance cost of remap expression evaluation vs check_fields) before the decision is framed: Add a Consequences section noting that remap expressions may be slower than check_fields for simple conditions and note any migration path for existing check_fields code"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2021-02-16-filter-remap-support.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7d9c97d2439a08e3d696cdcdff7504347cd4e288b62c6a137f3755badc32df7"}},{"ruleId":"D20","level":"warning","message":{"text":"No concrete decision (e.g. what expressions are allowed) and no consequences/trade-offs in a usable ADR: Add an explicit Decision section describing the VRL grammar, built-in functions, and supported data types, plus a Consequences section on trade-offs such as learning curve or performance limits"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2021-02-16-vector-remap-language.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8abf60c7dc8e1455ad2541f9634dd160d7bf6141a72c878d8822f1efae0dd8e6"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem framing and no consequences/trade-offs section for the change (e.g. why numeric groups matter): Add a Context section explaining when numeric capture groups would be useful and a Consequences section noting that the new parameter adds boilerplate to control this behavior"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2021-04-21-0-13-upgrade-guide.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bcbf094776d80f972794e1791ec4488ba5fb1d2227171a4cdbb3f68c00fab870"}},{"ruleId":"D20","level":"warning","message":{"text":"No context section explaining why rate limits were previously artificial and the trade-offs of removing them (e.g. denial-of-service risk): Add a Context section noting the rationale for defaults (constrained throughput) and the consequences/trade-offs of no rate limiting (possible abuse or DoS under load)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2021-08-20-rate-limits.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4d962e285fdfe9170520e936e5326f097fd893c19053a7fcd2c82c2fb4df88c3"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem section explaining why a new domain was needed (vs S3) and no consequences/trade-offs of retaining both repos for 0.16.x: Add a Context/Problem section describing the migration motivation (S3 vs GitHub Pages hosting, dual-package retention need) and a Consequences section noting trade-offs such as the new domain requiring DNS changes and the ongoing dual-repo maintenance"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2021-08-24-helm-vector-dev.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2808129fe40fa1565a64eb4477084bbbbff5949aada4bbe7c310007bd4163f6b"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a deprecation table is present: Add the problem (fields being deprecated) and the consequence (config breakage for consumers migrating to bulk mode) so the decision\u0027s rationale and impact are clear"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2021-10-19-elasticsearch-config-deprecations.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6b0c192bc58528735b447c7952eafb56c68512020df15ca8b6d21807227dce57"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are both present but thin; only the decision (breaking change list with migration notes) is explicit and the trade-offs of each change are not detailed: Add a Consequences section covering the migration burden for non-VRL users, the loss of single-character escaping in favor of quoting, and how to handle quoted field names in existing configs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2022-03-22-0-21-0-upgrade-guide.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b1d85486ce4de06a3f4dfb099d4fc8fcb65457da883e94d20c6c5990b7f4937"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is an announcement with no explicit Decision statement (what exactly is being added) and consequences/trade-offs are not visible before the clip: Add a one-line Decision stating what iteration support entails (\u0027map collections via opinionated VRL functions\u0027) and note any trade-offs such as increased boilerplate for readers who prefer imperative loops"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2022-05-18-vrl-iteration-support.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a8a2b3368c84b6bc01f5f3612d82dde4a918ede60e4c9f8c49a547ecccff9ee"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only what changed is stated: Add a Context section explaining the problem (e.g. need to control framing/method for sinks) and a Consequences section noting trade-offs such as increased configuration complexity or expanded codec requirements"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2022-07-07-sink-codecs.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b78c675e377e937c29ff2a8beec035bcff12c871aa6219b5d086b9bcc81276e"}},{"ruleId":"D20","level":"warning","message":{"text":"Generic title (\u00220.30 Upgrade Guide\u0022) with no context/trade-offs; only one concrete breaking change described in a subsection: Give the document a release-specific title like \u0027Breaking Change Summary for v0.30.0\u0027 and add a Context section explaining why max_length was removed and an Alternatives/consequences section on how to migrate existing configs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2023-05-22-0-30-0-upgrade-guide.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"abfb1954f01a7524f57c0f54ec4715b38abcfc5c4bc0a4778152897531788cd0"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section describing what happens if the deprecation is not handled: Add a Consequences section noting that users must set VECTOR_OPENSSL_LEGACY_PROVIDER=false to avoid future provider deprecations and any migration cost of changing defaults"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2023-08-15-0-32-0-upgrade-guide.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f2862143718bb2f9fc604ea7525fc241d1922c26c2c9a983ada14983e8aabc37"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent (only breaking/deprecations lists appear): Add a Context section explaining why these changes were made (e.g. security, API evolution, migration path) and a Consequences section noting trade-offs such as the loss of deprecated APIs or new config options."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2023-11-07-0-34-0-upgrade-guide.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"588b553bcd2d6a1e909d910d3e12f4b91cf85b253b91a340baf327f31b029df5"}},{"ruleId":"D20","level":"warning","message":{"text":"The decision is that there are no breaking changes/deprecations in this release; the body gives no context/problem and no consequences/trade-offs: Add a Context section explaining what the upgrade guide addresses (e.g. new features, API contracts) and a Consequences section on how to handle migration"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2024-02-13-0-36-0-upgrade-guide.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7cc98375dc086143ea350d3139ff079daebdb12daedfeb9bf16814b5f4ec5c6d"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section (e.g. migration cost, alternative paths) for each breaking change is present: Add a Consequences section under the Upgrade guide covering trade-offs of removing path coalescing and enterprise integration, e.g. how to replace the deprecated feature and Datadog migration options"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2024-06-17-0-39-0-upgrade-guide.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0eb558b2fac72944e48d7353b7b8285cb6301503df5c803ad4fe073172c51cc5"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section describing what happens when the decision is applied (e.g. new dependency requirements for CentOS 7 support): Add a Consequences section noting that Vector no longer supports CentOS 7 and any migration steps needed to remove the OS from the cluster"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2024-07-29-0-40-0-upgrade-guide.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1f18fa41a15fe94b2be8028b32d10abddbf515cc6e578f08f035512117b31bb"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs section: Add a Context/Problem section explaining why routing by condition rather than header is needed, and a Consequences section noting overhead from duplicate event copies"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2024-11-07-exclusive_route.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d400ba6ac88c324f352af88268fec7c2f19e9eb2e5a234a7fd0540dc1ea47017"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs are not visible before the clip marker (the body is clipped mid-table-of-contents): "},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2025-01-13-0-44-0-upgrade-guide.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a31467bdbeb28b9bd384c4b9a22050c75a69c9ccd8379cb8455ccabf2e3241c3"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs sections; only decision content is present: "},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2025-02-24-0-45-0-upgrade-guide.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"65ca48f61cba259aaf35746049fe1187aa7d595aa25afedf7ece5058e1d4b36a"}},{"ruleId":"D25","level":"error","message":{"text":"ADR not followed: Merge existing \u0060tcp\u0060 and \u0060udp\u0060 sources into a single \u0060socket\u0060 source: The summary shows no \u0060socket\u0060 type and the public types list is empty, contradicting the decision that tcp/udp sources have been merged into a socket. (website/content/en/highlights/2020-01-03-merge-existing-tcp-and-udp-sources-into-a-single-socket-source.md)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-01-03-merge-existing-tcp-and-udp-sources-into-a-single-socket-source.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7271eee6b9f4ee70ffe595c4bf921d5154e70047b34d2f81fe3bfee4bc3a66e"}},{"ruleId":"D25","level":"error","message":{"text":"ADR not followed: Use comma delim server list in \u0060kafka\u0060 sink: The \u0060kafka\u0060 sink\u0027s bootstrap_servers field is a string instead of an array, contradicting the ADR\u0027s decision to use a comma-delim list. (website/content/en/highlights/2020-01-12-use-comma-delim-server-list-instead-of-an-array.md)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-01-12-use-comma-delim-server-list-instead-of-an-array.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8baebe31759132fb72e93ef2435d7f6c7199464f3efef5b30b06a51f74d50b08"}},{"ruleId":"D25","level":"error","message":{"text":"ADR not followed: The \u0060splunk_hec\u0060 sink does not index fields by default: The summary shows no \u0060indexed_fields\u0060 configuration option, contradicting the sink\u0027s new non-default-indexed-by-default behavior. (website/content/en/highlights/2020-01-20-splunk-hec-specify-indexed-fields.md)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-01-20-splunk-hec-specify-indexed-fields.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"44a83116b24c72575e6796281de2d508fe6c09d8afe1cc7e5208d2ba5d0e7e34"}},{"ruleId":"D25","level":"error","message":{"text":"ADR not followed: Custom DNS resolution removal: The summary shows no public type related to DNS resolution, contradicting the removal of custom DNS servers. (website/content/en/highlights/2020-06-18-remove-custom-dns-resolution.md)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"website/content/en/highlights/2020-06-18-remove-custom-dns-resolution.md"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bce06703d947a43b0a02edb8b622179dec798b0b92a1f7ac484f006ad47a1fbd"}},{"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":"123f3631781349db40119e62ad37d4d2bdcddd84182dacf24b1d644c6b222f53"}},{"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":"2438ba933285361990c131b5e6e8a638d735bba36dbbcd1439bd2cc75233e13a"}},{"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":"ac6107545867775d6f07974878f81b8e3b3d4627d0b64f7ee2ec751ad76d5200"}},{"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":"53af7cc454a955e135e3404fe91eaf74c4ea41fa9e2719ecd8e70efe9e5a4e48"}},{"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":"ac6107545867775d6f07974878f81b8e3b3d4627d0b64f7ee2ec751ad76d5200"}},{"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":"d6ae6e838609634bf76bfbd0c3aa2fecdc3d7041267084e91c872096efd87db6"}},{"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":"ef62b2f7b415c3cf106c38ebc79dc08ab69543f0f2d65bba734135d9dcfde598"}},{"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":"ac6107545867775d6f07974878f81b8e3b3d4627d0b64f7ee2ec751ad76d5200"}},{"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":"ac6107545867775d6f07974878f81b8e3b3d4627d0b64f7ee2ec751ad76d5200"}},{"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":"e7b5d6d9a5b11f29aca6942fbae5b23584b9fc1a9e1cc5cd4359254332fe6cf9"}},{"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":"e466ea16f15109ffdfa880495467acb4ad426c075417a2faef07a224798a50cd"}},{"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":"123f3631781349db40119e62ad37d4d2bdcddd84182dacf24b1d644c6b222f53"}},{"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":"d923f0f0331064c838a8131dbbdfd68cc96d8761c029afd27350582aa0227928"}},{"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":"0aba8626f48ec6a39e880ff9db5799b7fbaf8a05908779edf786a37600a1904a"}},{"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":"1e59bc8a8cb7420775b2e5e7766706db18f2ac202ee34cabced573fe652f7531"}},{"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":"ac6107545867775d6f07974878f81b8e3b3d4627d0b64f7ee2ec751ad76d5200"}},{"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":"03033df26d12f78c83d120f54a15a80ad2cbc4339e5481276d96a3645e37cd6a"}},{"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":"8e449fec062e966eba47e11f5ab1f8a1abae9912c76ddf1b618f23cd162ba67b"}},{"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":"57e9da535287df2495ba6a8e96a0d6761759a4835248c9a189e169ff82d8e09f"}},{"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":"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":"a618ceb165bfa9c002163146d4205e276867430299f349c9c7bdaf0f0a6df131"}},{"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":"32de54f100ff1022bf72eccb91b4c6493ed575232d9dec195505bcf1282e7411"}},{"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":"640f7f18f58120b5e05358a176af6ae549352ec2ca0209b70e235424d9a92daa"}},{"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":"ec65ef7c235f6bd18837f28223d5e3c90a60a06cca50febcd00f34d6b5ef31dc"}},{"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":"0a1887d8f2373ddc8296b890bd3dc9cdec0b2289c3c684b3f80f15ab8ff1b6a6"}},{"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":"07c3f5959ef5dd84a62c04197b2a45d554b6f0e630a19c1ed0311d703714117b"}},{"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":"07c3f5959ef5dd84a62c04197b2a45d554b6f0e630a19c1ed0311d703714117b"}},{"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":"d4ddbc6a969bd630376c53fb3ea3800eb785cd75ff7c5669df499fec7ca06150"}},{"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":"a1189691ded7980e9f0a9be0c903f48e78b9ecb6ecab89d0c2fdedce1d14f539"}},{"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":"ddd232b25aaedb5c32b7e5f438ebe9d2b391e9fe1e80dfeeed02296d9cf5ccba"}},{"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":"ddd232b25aaedb5c32b7e5f438ebe9d2b391e9fe1e80dfeeed02296d9cf5ccba"}},{"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":"d31aaa82b3da92027364a3ac5cf592cbc54bf96bba5207039e7b471ccc015367"}},{"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":"6fcd80e20bbba274304cc8834271ed215db2e0883e37a2b7cea1c006c4dbffeb"}},{"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":"6fcd80e20bbba274304cc8834271ed215db2e0883e37a2b7cea1c006c4dbffeb"}},{"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":"a313133acd17386a8fe435db22ef46f00725be1c0ade28a04e55637592474be0"}},{"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":"ef8d620253aff9ea8d7262cf1b8e57143ffc212e66676fd9facd5ae7c6230bd7"}},{"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":"f181936127e3f289caf823da4f6f9e9a2f11c0e91c60a2ef59ad9af004cce6ca"}},{"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":"0da8786ec216b0e00f9018c38afb588e0e465b93fc750e7b83cedf428bde5cfd"}},{"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":"bee4fc66b361b55bc0aa6ad16f8f3489002db93363377dd27374eca4d4f73864"}},{"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":"2546f4bc87ded821903769cd51576e4f396dbaa15d16c8ba0c782efe1e565744"}},{"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":"cd3e74fdcf83d97bac58895cb25e058c003905d3bd90dc3f67b06af567e4d8ae"}},{"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":"1ab9d4ccfb940890ac89becb0f5f68ca55663ff815a16096fee3cbf36f359507"}},{"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":"9beca1fc72d0c86e14c8b4f5aaa54a9830832293f2130612d8e4804bd0dbd0a6"}},{"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":"b2854b43127e5ef10bf353b17c6e3aee98e5601d165f35c8ee2ff1708dc776a4"}},{"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":"695a7599a9d7063337e21722121b8d87e01b194a5264466c886208999d8cdfd7"}},{"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":"fd1ba664b7e638b89e6ee4c41fbeee75909d24dc3990dbbae3b2370c79479af5"}},{"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":"ad29b696e92d0f631b4cd5eb60a8732f1bfaeaa49a89dd7d24fd5f56cb03027b"}},{"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":"5385480ee2838eb5e8b50c0146059411b0a7ec29386bb99432471def552a1e61"}},{"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":"dbb833ea63a015362f3538082a3d9f179d4af7ac198114c769b74b58fd710b2c"}},{"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":"2bc1864c11eae6bea90507a7acde5673c0e2e1175da4b101fb04cfc54948cd2a"}},{"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":"579682b43ecc5639a61023de32e7d7f3a62b2e7e844a38c16245541369ef95fc"}},{"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":"bdae78ad4343e8da6dacaf621a803356a99e568e5d554d4dce5f2bd464f02127"}},{"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":"0480dc8fd60b9a19aca0e75d399c030d3646467b0b0400682e3440128f7377b5"}},{"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":"bf50b15a87b3acb9cf05996c8868d2b90b10956b2c07e59f6d5e5954cd868a05"}},{"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":"47a1f99e46a09be8c6aa139503c4b2a656ce3349c9c1d3ea7149934f82a63082"}},{"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":"d13bfe41d5ab07761e49578fd5d5172cc31f376ae4bd619b8065f28ef4cd441a"}},{"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":"889806d691c51d3cf87d09946254feda6ca902b7d137d46cf4277d0e914e4adc"}},{"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":"3d4cbdc702f6abd04161cc2e20c8d639995e3b32b467bbdd9f5886936c484e9b"}},{"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":"d759c0c4c05208136bff2c4249030bbdb5d4d5308195400aed242a511921c669"}},{"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":"074d4e731524d9c4809bd5e261711f6f8106e88069dc881c2633ccef973603be"}},{"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":"dcd202c1d0af828db4c4f6fee5e2571697a170837791f33d3dab62decc5859b4"}},{"ruleId":"D31","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":"138683974675684d43bea40cf4c313dc18ed26b1c3510278ffb8711193e9d166"}},{"ruleId":"D31","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":"d213e2b88fb7ca5533b42815008a7145eb55a353b2e7010aacf4ff345e139152"}},{"ruleId":"D31","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":"edaa38cfea9a221d059011975500f80cb0077ca31817f9cafe28d682b50faa36"}},{"ruleId":"D31","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":"5d54e704163408da203727e05b03cf4fdd51d89d40e2862837f8f992134962d6"}},{"ruleId":"D31","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":"a2c731b0feb790293ae50b0b939a03c230fb7ecd96b243b984fe9230f3337ab3"}},{"ruleId":"D31","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":"f31bc0d6c76dc16ca80a23ee8b891df05c159d4e65f07b6fe33f3f27f163994e"}},{"ruleId":"D31","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":"fe002d8b02a7f5a390d2c7ae0105dc4eb540f7786d5b6040d13b5d0ed5641267"}},{"ruleId":"D31","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":"b0da787f882427042ffdf0198c0cbab2b96471cc182b5f9caa532a19fb240706"}},{"ruleId":"D31","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":"7a3d85fd233f05be0dca4e9e9829c834ea41a5f681d808571287a2e202160461"}},{"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":"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":"0e17f71490e4d120a48b2b2881ab866c93b272bef2febb673a3e8e42b2c288ab"}},{"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":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"}},{"ruleId":"D38","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":"297aec37ee992558f9608e50f44e0162173f0c1b0d44e1f4831adcc031c35377"}},{"ruleId":"D38","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":"91a487da139eb946be755e6c37af06685c6c10256e08c7f5d24b598100aae8be"}},{"ruleId":"D38","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":"db26126d7b2af9e7377653d3a2d65c126fe85ae0865eceaec1c9d75200d1af59"}},{"ruleId":"D38","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":"b2d85c4e40271b1f9d0237744d49ff021275126e0d8b46d239f3660296037519"}},{"ruleId":"D38","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":"2b79e3f60274805531c877c6c83555cce0a7eb48d0a42c8b6b4ebb74b4cd4b32"}},{"ruleId":"D38","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":"80fd1f10f73f5b4db4ad28ef4b70b7cc5184756868ba1d4be3909edda86cf3ad"}},{"ruleId":"D38","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":"77c02758ef5f1f1dd7cf95bac86fc0f10049e0e0d1593a196f287a7503c06861"}},{"ruleId":"D38","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":"2b1031b806937ab049d35b1d9ea70c561885f90b42c905158ada8cabc67b45bf"}},{"ruleId":"D38","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":"276fdfdd71a53530ff5f8d2aeec44e38fc9601d0bbae24691d05c3302a4bdd4f"}},{"ruleId":"D38","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":"a2cac08b6d93428d16d7e3b0c60911fbfda2ac3e8826b1b10bf34a0ff9bbf4a9"}},{"ruleId":"D38","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":"97adf7de416998f4bb30a053c020413b766c6ca2eaba3ada307c81e3061d51a9"}},{"ruleId":"D38","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":"3468406c54656e62bb3c32cea164e9ba5f8d9377d9a71e6499daaea57c6a7cf7"}},{"ruleId":"D38","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":"454a296ca88d66800c5cd44ca43f88aa53239b8e0df8567e9ea4771fabd097f7"}},{"ruleId":"D38","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":"cd190904a63077f206b9ba294ebcf606088496d81b8ca570b7d783764dc6c2f6"}},{"ruleId":"D38","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":"d1f306241ad0a1841ce0e047fae933cb535e235729c98a527f677df4b675e851"}},{"ruleId":"D38","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":"66a35df02f930f5addcfc4d0c84e67ee43807ee9b570409cf195e89e5dc85b10"}},{"ruleId":"D38","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":"b03fbfc47c670ac7cc001d8c6a7277173ebc58f71e62382717837eda5fa4ee30"}},{"ruleId":"D38","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":"10fd87add737426dad9071b5c0dda7f8476bcdd657b167c0735861df05a34b71"}}],"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-1059","guid":"a2381a08-60f6-9554-a8b8-f3018cfaaca5","name":"Insufficient Technical Documentation","shortDescription":{"text":"Insufficient Technical Documentation"},"helpUri":"https://cwe.mitre.org/data/definitions/1059.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-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-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-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":92,"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."]}]}